From d33e649e415c354cc2a1e3c49131725552d69ba0 Mon Sep 17 00:00:00 2001 From: man0s <95379755+losman0s@users.noreply.github.com> Date: Fri, 6 Sep 2024 17:23:42 +0800 Subject: [PATCH 01/59] Man0s/crossbar legacy indexer (#245) * cli: lut check cmd * indexer: swb pull support * fix: exclude indexer from workspace --- clients/rust/marginfi-cli/src/entrypoint.rs | 12 ++ .../rust/marginfi-cli/src/processor/group.rs | 121 +++++++++++++++ observability/indexer/Cargo.toml | 16 +- .../indexer/src/commands/index_accounts.rs | 12 +- .../src/commands/index_transactions.rs | 17 +-- .../indexer/src/commands/snapshot_accounts.rs | 67 ++++++-- observability/indexer/src/utils/crossbar.rs | 143 ++++++++++++++++++ observability/indexer/src/utils/metrics.rs | 13 +- observability/indexer/src/utils/mod.rs | 2 + observability/indexer/src/utils/snapshot.rs | 34 ++++- observability/indexer/src/utils/swb_pull.rs | 51 +++++++ programs/marginfi/src/state/price.rs | 16 +- 12 files changed, 464 insertions(+), 40 deletions(-) create mode 100644 observability/indexer/src/utils/crossbar.rs create mode 100644 observability/indexer/src/utils/swb_pull.rs diff --git a/clients/rust/marginfi-cli/src/entrypoint.rs b/clients/rust/marginfi-cli/src/entrypoint.rs index 9e7a62b42..3c54a7267 100644 --- a/clients/rust/marginfi-cli/src/entrypoint.rs +++ b/clients/rust/marginfi-cli/src/entrypoint.rs @@ -153,6 +153,10 @@ pub enum GroupCommand { #[clap(short = 't', long)] existing_token_lookup_tables: Vec, }, + CheckLookupTable { + #[clap(short = 't', long)] + existing_token_lookup_tables: Vec, + }, } #[derive(Clone, Copy, Debug, Parser, ArgEnum)] @@ -606,6 +610,14 @@ fn group(subcmd: GroupCommand, global_options: &GlobalOptions) -> Result<()> { processor::handle_bankruptcy_for_accounts(&config, &profile, accounts) } + GroupCommand::CheckLookupTable { + existing_token_lookup_tables, + } => processor::group::process_check_lookup_tables( + &config, + &profile, + existing_token_lookup_tables, + ), + GroupCommand::UpdateLookupTable { existing_token_lookup_tables, } => processor::group::process_update_lookup_tables( diff --git a/clients/rust/marginfi-cli/src/processor/group.rs b/clients/rust/marginfi-cli/src/processor/group.rs index 4a83e6d16..1c6fd1e5a 100644 --- a/clients/rust/marginfi-cli/src/processor/group.rs +++ b/clients/rust/marginfi-cli/src/processor/group.rs @@ -15,6 +15,127 @@ use std::mem::size_of; const CHUNK_SIZE: usize = 22; const KEY_BATCH_SIZE: usize = 20; +pub fn process_check_lookup_tables( + config: &Config, + profile: &Profile, + existing_lookup_tables: Vec, +) -> Result<()> { + let rpc = config.mfi_program.rpc(); + let marginfi_group = profile.marginfi_group.expect("group not set"); + + let mut accounts: Vec = vec![]; + + for chunk in existing_lookup_tables.chunks(CHUNK_SIZE) { + let accounts_2: Vec = rpc + .get_multiple_accounts(chunk)? + .into_iter() + .flatten() + .collect(); + + accounts.extend(accounts_2); + } + + let lookup_tables: Vec = accounts + .iter_mut() + .zip(existing_lookup_tables.iter()) + .map(|(account, address)| { + let lookup_table = AddressLookupTable::deserialize(&account.data).unwrap(); + println!( + "Loaded table {} with {} addresses", + address, + lookup_table.addresses.len() + ); + + if lookup_table.meta.authority != Some(config.authority()) { + println!( + "Lookup table {} has wrong authority {:?}", + address, lookup_table.meta.authority, + ); + } + + lookup_table + }) + .collect(); + + let banks = config + .mfi_program + .accounts::(vec![RpcFilterType::Memcmp(Memcmp::new_raw_bytes( + 8 + size_of::() + size_of::(), + marginfi_group.to_bytes().to_vec(), + ))])?; + + let _bank_pks = banks.iter().map(|(pk, _)| *pk).collect::>(); + + let oracle_pks = banks + .iter() + .flat_map(|(_, bank)| bank.config.oracle_keys) + .filter(|pk| pk != &Pubkey::default()) + .collect::>(); + + // Dedup the oracle pks. + let _oracle_pks = oracle_pks + .into_iter() + .fold(vec![], |mut acc, pk| { + if !acc.contains(&pk) { + acc.push(pk); + } + acc + }) + .into_iter() + .collect::>(); + + // Join keys + let mut keys = vec![ + config.mfi_program.id(), + marginfi_group, + spl_token::id(), + system_program::id(), + ]; + + for (bank_pk, bank) in banks.iter() { + keys.push(*bank_pk); + keys.push(bank.liquidity_vault); + let (vault_auth, _) = utils::find_bank_vault_authority_pda( + bank_pk, + marginfi::state::marginfi_group::BankVaultType::Liquidity, + &marginfi::ID, + ); + + keys.push(vault_auth); + + keys.extend_from_slice( + &bank + .config + .oracle_keys + .iter() + .filter(|pk| **pk != Pubkey::default()) + .cloned() + .collect::>(), + ); + } + + keys.dedup(); + + // Find missing keys in lookup tables + let missing_keys = keys + .iter() + .filter(|pk| { + let missing = !lookup_tables + .iter() + .any(|lookup_table| lookup_table.addresses.iter().any(|address| &address == pk)); + + println!("Key {} missing: {}", pk, missing); + + missing + }) + .cloned() + .collect::>(); + + println!("Missing {} keys", missing_keys.len()); + + Ok(()) +} + pub fn process_update_lookup_tables( config: &Config, profile: &Profile, diff --git a/observability/indexer/Cargo.toml b/observability/indexer/Cargo.toml index afbdcc036..ad13b5a2c 100644 --- a/observability/indexer/Cargo.toml +++ b/observability/indexer/Cargo.toml @@ -28,14 +28,22 @@ marginfi = { path = "../../programs/marginfi", features = [ ] } gcp-bigquery-client = "0.16.7" -google-cloud-default = { git = " https://github.com/mrgnlabs/google-cloud-rust.git", rev = "3f651f2d9fd8cca547bb11490d2575d9bf90f994", features = ["pubsub"] } +google-cloud-default = { git = " https://github.com/mrgnlabs/google-cloud-rust.git", rev = "3f651f2d9fd8cca547bb11490d2575d9bf90f994", features = [ + "pubsub", +] } google-cloud-auth = { git = " https://github.com/mrgnlabs/google-cloud-rust.git", rev = "3f651f2d9fd8cca547bb11490d2575d9bf90f994" } google-cloud-pubsub = { git = " https://github.com/mrgnlabs/google-cloud-rust.git", rev = "3f651f2d9fd8cca547bb11490d2575d9bf90f994" } google-cloud-gax = { git = " https://github.com/mrgnlabs/google-cloud-rust.git", rev = "3f651f2d9fd8cca547bb11490d2575d9bf90f994" } -google-cloud-googleapis = { git = " https://github.com/mrgnlabs/google-cloud-rust.git", rev = "3f651f2d9fd8cca547bb11490d2575d9bf90f994", features = ["bytes", "pubsub"] } +google-cloud-googleapis = { git = " https://github.com/mrgnlabs/google-cloud-rust.git", rev = "3f651f2d9fd8cca547bb11490d2575d9bf90f994", features = [ + "bytes", + "pubsub", +] } yup-oauth2 = "8.3.0" -yellowstone-grpc-client = { git = "https://github.com/rpcpool/yellowstone-grpc.git", rev = "a2cd1498ac64baa1017d4a4cdefbf46100215b4c" } -yellowstone-grpc-proto = { git = "https://github.com/rpcpool/yellowstone-grpc.git", rev = "a2cd1498ac64baa1017d4a4cdefbf46100215b4c" } +yellowstone-grpc-client = { git = "https://github.com/rpcpool/yellowstone-grpc.git", rev = "87e1755b0d7a4e8101cb5feb6f30063aa91f343f" } +yellowstone-grpc-proto = { git = "https://github.com/rpcpool/yellowstone-grpc.git", rev = "87e1755b0d7a4e8101cb5feb6f30063aa91f343f" } +switchboard-on-demand-client = "0.1.7" +switchboard-on-demand = "0.1.7" +hex = "0.4.3" fixed = "1.12.0" fixed-macro = "1.2.0" dotenv = "0.15.0" diff --git a/observability/indexer/src/commands/index_accounts.rs b/observability/indexer/src/commands/index_accounts.rs index c745dea91..729006f26 100644 --- a/observability/indexer/src/commands/index_accounts.rs +++ b/observability/indexer/src/commands/index_accounts.rs @@ -112,11 +112,13 @@ pub async fn index_accounts(config: IndexAccountsConfig) -> Result<()> { async fn listen_to_updates(ctx: Arc) { loop { info!("Connecting geyser client"); - let geyser_client_connection_result = GeyserGrpcClient::connect( - ctx.config.rpc_endpoint.to_string(), - Some(ctx.config.rpc_token.to_string()), - None, - ); + let geyser_client_connection_result = + GeyserGrpcClient::build_from_shared(ctx.config.rpc_endpoint.to_string()) + .unwrap() + .x_token(Some(ctx.config.rpc_token.to_string())) + .unwrap() + .connect() + .await; let mut geyser_client = match geyser_client_connection_result { Ok(geyser_client) => geyser_client, diff --git a/observability/indexer/src/commands/index_transactions.rs b/observability/indexer/src/commands/index_transactions.rs index a5872bf9e..b40b98f90 100644 --- a/observability/indexer/src/commands/index_transactions.rs +++ b/observability/indexer/src/commands/index_transactions.rs @@ -115,16 +115,13 @@ pub async fn index_transactions(config: IndexTransactionsConfig) -> Result<()> { async fn listen_to_updates(ctx: Arc) { loop { info!("Connecting geyser client"); - let geyser_client_connection_result = GeyserGrpcClient::connect_with_timeout( - ctx.config.rpc_endpoint.to_string(), - Some(ctx.config.rpc_token.to_string()), - None, - Some(Duration::from_secs(10)), - Some(Duration::from_secs(10)), - false, - ) - .await; - info!("Connected"); + let geyser_client_connection_result = + GeyserGrpcClient::build_from_shared(ctx.config.rpc_endpoint.to_string()) + .unwrap() + .x_token(Some(ctx.config.rpc_token.to_string())) + .unwrap() + .connect() + .await; let mut geyser_client = match geyser_client_connection_result { Ok(geyser_client) => geyser_client, diff --git a/observability/indexer/src/commands/snapshot_accounts.rs b/observability/indexer/src/commands/snapshot_accounts.rs index cc8eae67f..641bcf7e5 100644 --- a/observability/indexer/src/commands/snapshot_accounts.rs +++ b/observability/indexer/src/commands/snapshot_accounts.rs @@ -1,7 +1,9 @@ use crate::utils::convert_account; +use crate::utils::crossbar::{CrossbarCache, SwbPullFeedMeta}; use crate::utils::metrics::{LendingPoolBankMetrics, MarginfiAccountMetrics, MarginfiGroupMetrics}; -use crate::utils::snapshot::Snapshot; use crate::utils::snapshot::{AccountRoutingType, BankUpdateRoutingType}; +use crate::utils::snapshot::{OracleData, Snapshot}; +use crate::utils::swb_pull::overwrite_price_from_sim; use anyhow::Result; use chrono::{DateTime, Utc}; use envconfig::Envconfig; @@ -112,14 +114,16 @@ pub struct Context { account_updates_queue: Arc>>>, latest_slots_with_commitment: Arc>>, account_snapshot: Arc>, + crossbar_store: Arc, stream_disconnection_count: Arc, update_processing_error_count: Arc, } impl Context { pub async fn new(config: &SnapshotAccountsConfig) -> Self { + let rpc_endpoint = format!("{}/{}", config.rpc_endpoint, config.rpc_token); let rpc_client = Arc::new(RpcClient::new_with_commitment( - format!("{}/{}", config.rpc_endpoint, config.rpc_token), + rpc_endpoint, CommitmentConfig { commitment: solana_sdk::commitment_config::CommitmentLevel::Finalized, }, @@ -132,6 +136,7 @@ impl Context { account_updates_queue: Arc::new(Mutex::new(BTreeMap::new())), latest_slots_with_commitment: Arc::new(Mutex::new(BTreeSet::new())), account_snapshot: Arc::new(Mutex::new(Snapshot::new(config.program_id, rpc_client))), + crossbar_store: Arc::new(CrossbarCache::new()), stream_disconnection_count: Arc::new(AtomicU64::new(0)), update_processing_error_count: Arc::new(AtomicU64::new(0)), } @@ -188,6 +193,26 @@ pub async fn snapshot_accounts(config: SnapshotAccountsConfig) -> Result<()> { snapshot.init().await.unwrap(); info!("Summary: {snapshot}"); + let swb_feed_accounts_and_hashes = snapshot + .price_feeds + .iter() + .filter_map(|(pk, od)| match od { + OracleData::SwitchboardPull(feed) => Some((*pk, hex::encode(feed.feed.feed_hash))), + _ => None, + }) + .collect::>(); + + context.crossbar_store.track_feeds( + swb_feed_accounts_and_hashes + .into_iter() + .map(|(feed_address, feed_hash)| SwbPullFeedMeta { + feed_hash, + feed_address, + }) + .collect::>(), + ); + context.crossbar_store.refresh_prices().await; + snapshot .routing_lookup .iter() @@ -207,6 +232,26 @@ pub async fn snapshot_accounts(config: SnapshotAccountsConfig) -> Result<()> { let geyser_subscription_config = compute_geyser_config(&config, &non_program_accounts).await; *context.geyser_subscription_config.lock().await = (false, geyser_subscription_config.clone()); + let update_crossbar_cache_handle = tokio::spawn({ + let context = context.clone(); + async move { + loop { + context.crossbar_store.refresh_prices().await; + let mut snapshot = context.account_snapshot.lock().await; + let feeds_per_address: HashMap = + context.crossbar_store.get_prices_per_address(); + for (address, price) in feeds_per_address { + if let Some(od) = snapshot.price_feeds.get_mut(&address) { + if let OracleData::SwitchboardPull(feed) = od { + overwrite_price_from_sim(feed, &price); + } + } + } + tokio::time::sleep(std::time::Duration::from_secs(20)).await; + } + } + }); + let listen_to_updates_handle = tokio::spawn({ let context = context.clone(); async move { listen_to_updates(context).await } @@ -226,6 +271,7 @@ pub async fn snapshot_accounts(config: SnapshotAccountsConfig) -> Result<()> { }); join_all([ + update_crossbar_cache_handle, listen_to_updates_handle, process_account_updates_handle, update_account_map_handle, @@ -239,15 +285,14 @@ pub async fn snapshot_accounts(config: SnapshotAccountsConfig) -> Result<()> { async fn listen_to_updates(ctx: Arc) { loop { info!("Connecting geyser client"); - let geyser_client_connection_result = GeyserGrpcClient::connect_with_timeout( - ctx.config.rpc_endpoint.to_string(), - Some(ctx.config.rpc_token.to_string()), - None, - Some(Duration::from_secs(10)), - Some(Duration::from_secs(10)), - false, - ) - .await; + let geyser_client_connection_result = + GeyserGrpcClient::build_from_shared(ctx.config.rpc_endpoint.to_string()) + .unwrap() + .x_token(Some(ctx.config.rpc_token.to_string())) + .unwrap() + .connect() + .await; + info!("Connected"); let mut geyser_client = match geyser_client_connection_result { diff --git a/observability/indexer/src/utils/crossbar.rs b/observability/indexer/src/utils/crossbar.rs new file mode 100644 index 000000000..377960d1e --- /dev/null +++ b/observability/indexer/src/utils/crossbar.rs @@ -0,0 +1,143 @@ +use solana_sdk::pubkey::Pubkey; +use std::{collections::HashMap, sync::Mutex}; +use switchboard_on_demand_client::CrossbarClient; + +pub struct SwbPullFeedMeta { + pub feed_address: Pubkey, + pub feed_hash: String, +} + +pub struct SwbPullFeedInfo { + pub feed_meta: SwbPullFeedMeta, + pub simulated_price: SimulatedPrice, +} + +#[derive(Clone, Debug)] +pub struct SimulatedPrice { + pub value: f64, + pub std_dev: f64, + pub timestamp: i64, +} + +pub struct CrossbarCache { + crossbar_client: CrossbarClient, + pub feeds: Mutex>, +} + +impl CrossbarCache { + /// Creates a new CrossbarCache empty instance + pub fn new() -> Self { + let crossbar_client = CrossbarClient::default(None); + Self { + crossbar_client, + feeds: Mutex::new(HashMap::new()), + } + } + + pub fn track_feeds(&self, feeds: Vec) { + for feed in feeds.into_iter() { + self.feeds.lock().unwrap().insert( + feed.feed_hash.clone(), + SwbPullFeedInfo { + feed_meta: feed, + simulated_price: SimulatedPrice { + value: 0.0, + std_dev: 0.0, + timestamp: 0, + }, + }, + ); + } + } + + pub async fn refresh_prices(&self) { + if self.feeds.lock().unwrap().is_empty() { + return; + } + + let feed_hashes = self + .feeds + .lock() + .unwrap() + .values() + .map(|feed| feed.feed_meta.feed_hash.clone()) + .collect::>(); + + let simulated_prices = self + .crossbar_client + .simulate_feeds(&feed_hashes.iter().map(|x| x.as_str()).collect::>()) + .await + .unwrap(); + + let timestamp = chrono::Utc::now().timestamp(); + + let mut feeds = self.feeds.lock().unwrap(); + for simulated_response in simulated_prices { + if let Some(price) = calculate_price(simulated_response.results) { + if let Some(feed) = feeds.get_mut(&simulated_response.feedHash) { + feed.simulated_price = SimulatedPrice { + value: price, + std_dev: 0.0, + timestamp, + }; + } + } + } + } + + pub fn get_prices_per_address(&self) -> HashMap { + let mut feeds_per_address = HashMap::new(); + let feeds = self.feeds.lock().unwrap(); + for feed in feeds.values() { + feeds_per_address.insert(feed.feed_meta.feed_address, feed.simulated_price.clone()); + } + feeds_per_address + } +} + +/// Calculate the median of a list of numbers +fn calculate_price(mut numbers: Vec) -> Option { + if numbers.is_empty() { + return None; + } + + numbers.sort_by(|a, b| a.partial_cmp(b).unwrap()); + let mid = numbers.len() / 2; + + if numbers.len() % 2 == 0 { + Some((numbers[mid - 1] + numbers[mid]) / 2.0) + } else { + Some(numbers[mid]) + } +} + +#[cfg(test)] +mod tests { + use super::*; + use std::sync::Arc; + use std::sync::Mutex; + + #[tokio::test] + async fn test_crossbar_maintainer_new() { + let price = Arc::new(Mutex::new(0.0)); + let feed_hash = + "0x4c935636f2523f6aeeb6dc7b7dab0e86a13ff2c794f7895fc78851d69fdb593b".to_string(); + let price2 = Arc::new(Mutex::new(0.0)); + let feed_hash2 = + "0x5686ebe26b52d5c67dc10b63240c6d937af75d86bfcacf46865cd5da62f760e9".to_string(); + let crossbar_maintainer = CrossbarCache::new(); + crossbar_maintainer.track_feeds(vec![ + SwbPullFeedMeta { + feed_address: Pubkey::new_unique(), + feed_hash: feed_hash.clone(), + }, + SwbPullFeedMeta { + feed_address: Pubkey::new_unique(), + feed_hash: feed_hash2.clone(), + }, + ]); + crossbar_maintainer.refresh_prices().await; + println!("Price: {:?}", price.lock().unwrap()); + println!("Price2: {:?}", price2.lock().unwrap()); + } +} diff --git a/observability/indexer/src/utils/metrics.rs b/observability/indexer/src/utils/metrics.rs index 5e7babb29..ee0fe4058 100644 --- a/observability/indexer/src/utils/metrics.rs +++ b/observability/indexer/src/utils/metrics.rs @@ -464,15 +464,20 @@ impl MarginfiAccountMetrics { match oracle_data { OracleData::Pyth(price_feed) => ( *oracle_pk, - OraclePriceFeedAdapter::PythEma(price_feed.clone()), + OraclePriceFeedAdapter::PythLegacy(price_feed.clone()), ), OracleData::Switchboard(pf) => ( *oracle_pk, OraclePriceFeedAdapter::SwitchboardV2(pf.clone()), ), - OracleData::PythPush(pf) => { - (*oracle_pk, OraclePriceFeedAdapter::PythPush(pf.clone())) - } + OracleData::PythPush(pf) => ( + *oracle_pk, + OraclePriceFeedAdapter::PythPushOracle(pf.clone()), + ), + OracleData::SwitchboardPull(pf) => ( + *oracle_pk, + OraclePriceFeedAdapter::SwitchboardPull(pf.clone()), + ), } })); diff --git a/observability/indexer/src/utils/mod.rs b/observability/indexer/src/utils/mod.rs index 7f8874e69..a85e1377b 100644 --- a/observability/indexer/src/utils/mod.rs +++ b/observability/indexer/src/utils/mod.rs @@ -1,11 +1,13 @@ use solana_sdk::{account::Account, pubkey::Pubkey}; pub mod big_query; +pub mod crossbar; pub mod errors; pub mod marginfi_account_dup; pub mod metrics; pub mod protos; pub mod snapshot; +pub mod swb_pull; pub mod transactions_crawler; pub fn convert_account( diff --git a/observability/indexer/src/utils/snapshot.rs b/observability/indexer/src/utils/snapshot.rs index 53c0d1036..cd9ba2ccb 100644 --- a/observability/indexer/src/utils/snapshot.rs +++ b/observability/indexer/src/utils/snapshot.rs @@ -1,3 +1,4 @@ +use crate::common::get_multiple_accounts_chunked2; use anchor_client::anchor_lang::AccountDeserialize; use anchor_client::anchor_lang::Discriminator; use fixed::types::I80F48; @@ -24,7 +25,7 @@ use std::{ }; use tracing::info; -use crate::common::get_multiple_accounts_chunked2; +use super::swb_pull::load_swb_pull_account; #[derive(Clone, Debug)] pub struct BankAccounts { @@ -41,6 +42,7 @@ pub enum AccountRoutingType { Bank(Pubkey, BankUpdateRoutingType), PriceFeedPyth, PriceFeedSwitchboard, + PriceFeedSwitchboardPull, PriceFeedPythPushOracle, } @@ -54,9 +56,10 @@ pub enum BankUpdateRoutingType { #[derive(Clone, Debug)] pub enum OracleData { - Pyth(PythEmaPriceFeed), + Pyth(PythLegacyPriceFeed), Switchboard(SwitchboardV2PriceFeed), PythPush(PythPushOraclePriceFeed), + SwitchboardPull(SwitchboardPullPriceFeed), } impl OracleData { @@ -75,6 +78,9 @@ impl OracleData { OracleData::PythPush(price_feed) => price_feed .get_price_of_type(oracle_price_type, bias) .unwrap(), + OracleData::SwitchboardPull(price_feed) => price_feed + .get_price_of_type(oracle_price_type, bias) + .unwrap(), } } } @@ -219,7 +225,7 @@ impl Snapshot { match bank.config.oracle_setup { OracleSetup::None => (), - OracleSetup::PythEma => { + OracleSetup::PythLegacy => { let oracle_address = bank.config.oracle_keys[0]; self.routing_lookup .insert(oracle_address, AccountRoutingType::PriceFeedPyth); @@ -252,6 +258,15 @@ impl Snapshot { mfi_sponsored_oracle_address, AccountRoutingType::PriceFeedPythPushOracle, ); + + accounts_to_fetch.push(pyth_sponsored_oracle_address); + accounts_to_fetch.push(mfi_sponsored_oracle_address); + } + OracleSetup::SwitchboardPull => { + let oracle_address = bank.config.oracle_keys[0]; + self.routing_lookup + .insert(oracle_address, AccountRoutingType::PriceFeedSwitchboardPull); + accounts_to_fetch.push(oracle_address); } } @@ -307,7 +322,7 @@ impl Snapshot { AccountRoutingType::PriceFeedPyth => { let mut account = account.clone(); let ai = (account_pubkey, &mut account).into_account_info(); - let pf = PythEmaPriceFeed::load_checked(&ai, 0, u64::MAX).unwrap(); + let pf = PythLegacyPriceFeed::load_checked(&ai, 0, u64::MAX).unwrap(); self.price_feeds .insert(*account_pubkey, OracleData::Pyth(pf)); } @@ -362,6 +377,17 @@ impl Snapshot { self.price_feeds .insert(feed_id_pk, OracleData::PythPush(pf)); } + AccountRoutingType::PriceFeedSwitchboardPull => { + let mut account = account.clone(); + let ai = (account_pubkey, &mut account).into_account_info(); + let pf = load_swb_pull_account(&ai).unwrap(); + self.price_feeds.insert( + *account_pubkey, + OracleData::SwitchboardPull(SwitchboardPullPriceFeed { + feed: Box::new((&pf).into()), + }), + ); + } } } } diff --git a/observability/indexer/src/utils/swb_pull.rs b/observability/indexer/src/utils/swb_pull.rs new file mode 100644 index 000000000..4dd7733f1 --- /dev/null +++ b/observability/indexer/src/utils/swb_pull.rs @@ -0,0 +1,51 @@ +use fixed::types::I80F48; +use marginfi::constants::EXP_10_I80F48; +use marginfi::state::price::SwitchboardPullPriceFeed; +use solana_sdk::account_info::AccountInfo; +use switchboard_on_demand::PullFeedAccountData; + +use super::crossbar::SimulatedPrice; + +pub fn overwrite_price_from_sim( + current_data: &mut SwitchboardPullPriceFeed, + simulated_price: &SimulatedPrice, +) { + let value: i128 = I80F48::from_num(simulated_price.value) + .checked_mul(EXP_10_I80F48[switchboard_on_demand::PRECISION as usize]) + .unwrap() + .to_num(); + let std_dev: i128 = I80F48::from_num(simulated_price.std_dev) + .checked_mul(EXP_10_I80F48[switchboard_on_demand::PRECISION as usize]) + .unwrap() + .to_num(); + + current_data.feed.result.value = value; + current_data.feed.result.std_dev = std_dev; + // other fields are ignored because not used by the indexer +} + +pub fn load_swb_pull_account(account_info: &AccountInfo) -> anyhow::Result { + let bytes = &account_info.data.borrow().to_vec(); + + if bytes + .as_ptr() + .align_offset(std::mem::align_of::()) + != 0 + { + return Err(anyhow::anyhow!("Invalid alignment")); + } + + let num = bytes.len() / std::mem::size_of::(); + let mut vec: Vec = Vec::with_capacity(num); + + unsafe { + vec.set_len(num); + std::ptr::copy_nonoverlapping( + bytes[8..std::mem::size_of::() + 8].as_ptr(), + vec.as_mut_ptr() as *mut u8, + bytes.len(), + ); + } + + Ok(vec[0]) +} diff --git a/programs/marginfi/src/state/price.rs b/programs/marginfi/src/state/price.rs index 12742cd7b..2fe51ceb3 100644 --- a/programs/marginfi/src/state/price.rs +++ b/programs/marginfi/src/state/price.rs @@ -308,7 +308,7 @@ impl PriceAdapter for PythLegacyPriceFeed { #[cfg_attr(feature = "client", derive(Clone, Debug))] pub struct SwitchboardPullPriceFeed { - feed: Box, + pub feed: Box, } impl SwitchboardPullPriceFeed { @@ -767,14 +767,22 @@ impl PriceAdapter for PythPushOraclePriceFeed { /// A slimmed down version of the PullFeedAccountData struct copied from the /// switchboard-on-demand/src/pull_feed.rs #[cfg_attr(feature = "client", derive(Clone, Debug))] -struct LitePullFeedAccountData { +pub struct LitePullFeedAccountData { pub result: CurrentResult, + #[cfg(feature = "client")] + pub feed_hash: [u8; 32], + #[cfg(feature = "client")] + pub last_update_timestamp: i64, } impl From<&PullFeedAccountData> for LitePullFeedAccountData { fn from(feed: &PullFeedAccountData) -> Self { Self { result: feed.result, + #[cfg(feature = "client")] + feed_hash: feed.feed_hash, + #[cfg(feature = "client")] + last_update_timestamp: feed.last_update_timestamp, } } } @@ -783,6 +791,10 @@ impl From> for LitePullFeedAccountData { fn from(feed: Ref<'_, PullFeedAccountData>) -> Self { Self { result: feed.result, + #[cfg(feature = "client")] + feed_hash: feed.feed_hash, + #[cfg(feature = "client")] + last_update_timestamp: feed.last_update_timestamp, } } } From 7b10c51b9934130b029f220c410e517c0ad8c7c4 Mon Sep 17 00:00:00 2001 From: J Date: Sat, 21 Sep 2024 03:25:22 +0200 Subject: [PATCH 02/59] CLI: Account migration flag (#246) * feat: account migration flag * fix: fmt --- clients/rust/marginfi-cli/src/entrypoint.rs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/clients/rust/marginfi-cli/src/entrypoint.rs b/clients/rust/marginfi-cli/src/entrypoint.rs index 3c54a7267..b73aa40a4 100644 --- a/clients/rust/marginfi-cli/src/entrypoint.rs +++ b/clients/rust/marginfi-cli/src/entrypoint.rs @@ -8,6 +8,7 @@ use anchor_client::Cluster; use anyhow::Result; use clap::{clap_derive::ArgEnum, Parser}; use fixed::types::I80F48; +use marginfi::state::marginfi_account::TRANSFER_AUTHORITY_ALLOWED_FLAG; use marginfi::{ prelude::*, state::{ @@ -409,6 +410,8 @@ pub enum AccountCommand { account_pk: Pubkey, #[clap(long)] flashloans_enabled: bool, + #[clap(long)] + account_migration_enabled: bool, }, } @@ -893,6 +896,7 @@ fn process_account_subcmd(subcmd: AccountCommand, global_options: &GlobalOptions AccountCommand::SetFlag { flashloans_enabled: flashloan, account_pk, + account_migration_enabled, } => { let mut flag = 0; @@ -901,6 +905,11 @@ fn process_account_subcmd(subcmd: AccountCommand, global_options: &GlobalOptions flag |= FLASHLOAN_ENABLED_FLAG; } + if account_migration_enabled { + println!("Setting account migration flag"); + flag |= TRANSFER_AUTHORITY_ALLOWED_FLAG; + } + if flag == 0 { println!("No flag provided"); std::process::exit(1); From d61516cf0b4bcfb3bb4162702e17b0d609ec32af Mon Sep 17 00:00:00 2001 From: J Date: Thu, 17 Oct 2024 16:57:21 +0200 Subject: [PATCH 03/59] Oracle Liveness Alerter (#254) * feat: marginfi alerter * fix: remove config * fix: fmt * fix: lint --------- Co-authored-by: J --- .gitignore | 2 +- Cargo.lock | 234 ++++++++++++++--- tools/alerting/Cargo.toml | 30 +++ tools/alerting/src/main.rs | 514 +++++++++++++++++++++++++++++++++++++ 4 files changed, 740 insertions(+), 40 deletions(-) create mode 100644 tools/alerting/Cargo.toml create mode 100644 tools/alerting/src/main.rs diff --git a/.gitignore b/.gitignore index 9f44766f6..1b76b4a13 100644 --- a/.gitignore +++ b/.gitignore @@ -31,4 +31,4 @@ test-ledger/ # Allow specific json files !tests/fixtures/**/*.json -!programs/marginfi/tests/fixtures/**/*.json +!programs/marginfi/tests/fixtures/**/*.json \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock index 0eaf5addf..5d2242bd2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -96,6 +96,30 @@ dependencies = [ "memchr", ] +[[package]] +name = "alerting" +version = "0.1.0" +dependencies = [ + "anyhow", + "bytemuck", + "chrono", + "env_logger 0.11.5", + "log", + "marginfi", + "pagerduty-rs", + "pyth-sdk-solana", + "pyth-solana-receiver-sdk", + "serde", + "solana-account-decoder", + "solana-client", + "solana-sdk", + "structopt", + "switchboard-on-demand", + "switchboard-solana", + "time", + "toml 0.8.19", +] + [[package]] name = "aliasable" version = "0.1.3" @@ -502,11 +526,60 @@ dependencies = [ "winapi", ] +[[package]] +name = "anstream" +version = "0.6.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64e15c1ab1f89faffbf04a634d5e1962e9074f2741eef6d97f3c4e322426d526" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bec1de6f59aedf83baf9ff929c98f2ad654b97c9510f4e70cf6f661d49fd5b1" + +[[package]] +name = "anstyle-parse" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb47de1e80c2b463c735db5b217a0ddc39d612e7ac9e2e96a5aed1f57616c1cb" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d36fc52c7f6c869915e99412912f22093507da8d9e942ceaf66fe4b7c14422a" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5bf74e1b6e971609db8ca7a9ce79fd5768ab6ae46441c572e46cf596f59e57f8" +dependencies = [ + "anstyle", + "windows-sys 0.52.0", +] + [[package]] name = "anyhow" -version = "1.0.86" +version = "1.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" +checksum = "86fdf8605db99b54d3cd748a44c6d04df638eb5dafb219b135d0149bd0db01f6" [[package]] name = "aquamarine" @@ -1137,9 +1210,9 @@ dependencies = [ [[package]] name = "bytemuck" -version = "1.16.1" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b236fc92302c97ed75b38da1f4917b5cdda4984745740f153a5d3059e48d725e" +checksum = "8334215b81e418a0a7bdb8ef0849474f40bb10c8b71f1c4ed315cff49f32494d" dependencies = [ "bytemuck_derive", ] @@ -1205,7 +1278,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a98356df42a2eb1bd8f1793ae4ee4de48e384dd974ce5eac8eee802edb7492be" dependencies = [ "serde", - "toml 0.8.14", + "toml 0.8.19", ] [[package]] @@ -1318,6 +1391,12 @@ dependencies = [ "os_str_bytes", ] +[[package]] +name = "colorchoice" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3fd119d74b830634cea2a0f58bbd0d54540518a14397557951e79340abc28c0" + [[package]] name = "combine" version = "3.8.1" @@ -1872,6 +1951,16 @@ dependencies = [ "syn 2.0.58", ] +[[package]] +name = "env_filter" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f2c92ceda6ceec50f43169f9ee8424fe2db276791afde7b2cd8bc084cb376ab" +dependencies = [ + "log", + "regex", +] + [[package]] name = "env_logger" version = "0.9.3" @@ -1885,6 +1974,19 @@ dependencies = [ "termcolor", ] +[[package]] +name = "env_logger" +version = "0.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13fa619b91fb2381732789fc5de83b45675e882f66623b7d8cb4f643017018d" +dependencies = [ + "anstream", + "anstyle", + "env_filter", + "humantime", + "log", +] + [[package]] name = "equivalent" version = "1.0.1" @@ -2223,7 +2325,7 @@ dependencies = [ "futures-sink", "futures-util", "http", - "indexmap 2.2.6", + "indexmap 2.6.0", "slab", "tokio", "tokio-util 0.7.11", @@ -2282,6 +2384,12 @@ version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +[[package]] +name = "hashbrown" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e087f84d4f86bf4b218b927129862374b72199ae7d8657835f1e89000eea4fb" + [[package]] name = "heck" version = "0.3.3" @@ -2546,12 +2654,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.2.6" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" dependencies = [ "equivalent", - "hashbrown 0.14.5", + "hashbrown 0.15.0", ] [[package]] @@ -2582,6 +2690,12 @@ version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" +[[package]] +name = "is_terminal_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" + [[package]] name = "itertools" version = "0.10.5" @@ -2814,7 +2928,7 @@ dependencies = [ "anyhow", "bytemuck", "clap 3.2.25", - "env_logger", + "env_logger 0.9.3", "fixed", "fixed-macro", "futures", @@ -2935,7 +3049,7 @@ dependencies = [ "chrono", "clap 3.2.25", "dirs", - "env_logger", + "env_logger 0.9.3", "fixed", "fixed-macro", "hex", @@ -3534,6 +3648,18 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "pagerduty-rs" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd10bab2b6df910bbe6c4987d76aa4221235103d9a9c000cfabcee6a6abc8f7a" +dependencies = [ + "reqwest", + "serde", + "time", + "url", +] + [[package]] name = "parking_lot" version = "0.12.3" @@ -3850,9 +3976,9 @@ dependencies = [ [[package]] name = "pyth-solana-receiver-sdk" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e6559643f0b377b6f293269251f6a804ae7332c37f7310371f50c833453cd0" +checksum = "1b7854c4176470c8d86de301dc5b57ac84227dabb9527328b585fc332962d60b" dependencies = [ "anchor-lang 0.29.0", "hex", @@ -4579,9 +4705,9 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.204" +version = "1.0.210" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc76f558e0cbb2a839d37354c575f1dc3fdc6546b5be373ba43d95f231bf7c12" +checksum = "c8e3592472072e6e22e0a54d5904d9febf8508f65fb8552499a1abc7d1078c3a" dependencies = [ "serde_derive", ] @@ -4597,9 +4723,9 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.204" +version = "1.0.210" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0cd7e117be63d3c3678776753929474f3b04a43a080c744d6b0ae2a8c28e222" +checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f" dependencies = [ "proc-macro2", "quote", @@ -4632,7 +4758,7 @@ version = "1.0.120" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4e0d21c9a8cae1235ad58a00c11cb40d4b1e5c784f1ef2c537876ed6ffd8b7c5" dependencies = [ - "indexmap 2.2.6", + "indexmap 2.6.0", "itoa", "ryu", "serde", @@ -4640,9 +4766,9 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "0.6.6" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79e674e01f999af37c49f70a6ede167a8a60b2503e56c5599532a65baa5969a0" +checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" dependencies = [ "serde", ] @@ -4687,7 +4813,7 @@ version = "0.9.34+deprecated" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" dependencies = [ - "indexmap 2.2.6", + "indexmap 2.6.0", "itoa", "ryu", "serde", @@ -5120,7 +5246,7 @@ dependencies = [ "dashmap", "futures", "futures-util", - "indexmap 2.2.6", + "indexmap 2.6.0", "indicatif", "log", "quinn", @@ -5176,7 +5302,7 @@ dependencies = [ "bincode", "crossbeam-channel", "futures-util", - "indexmap 2.2.6", + "indexmap 2.6.0", "log", "rand 0.8.5", "rayon", @@ -5268,7 +5394,7 @@ version = "1.18.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0511082fc62f2d086520fff5aa1917c389d8c840930c08ad255ae05952c08a2" dependencies = [ - "env_logger", + "env_logger 0.9.3", "lazy_static", "log", ] @@ -5803,7 +5929,7 @@ dependencies = [ "crossbeam-channel", "futures-util", "histogram", - "indexmap 2.2.6", + "indexmap 2.6.0", "itertools", "libc", "log", @@ -5863,7 +5989,7 @@ dependencies = [ "async-trait", "bincode", "futures-util", - "indexmap 2.2.6", + "indexmap 2.6.0", "indicatif", "log", "rayon", @@ -6540,6 +6666,30 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" +[[package]] +name = "structopt" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c6b5c64445ba8094a6ab0c3cd2ad323e07171012d9c98b0b15651daf1787a10" +dependencies = [ + "clap 2.34.0", + "lazy_static", + "structopt-derive", +] + +[[package]] +name = "structopt-derive" +version = "0.4.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcb5ae327f9cc13b68763b5749770cb9e048a99bd9dfdfa58d0cf05d5f64afe0" +dependencies = [ + "heck 0.3.3", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "strum" version = "0.24.1" @@ -7196,21 +7346,21 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.14" +version = "0.8.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f49eb2ab21d2f26bd6db7bf383edc527a7ebaee412d17af4d40fdccd442f335" +checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit 0.22.15", + "toml_edit 0.22.22", ] [[package]] name = "toml_datetime" -version = "0.6.6" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4badfd56924ae69bcc9039335b2e017639ce3f9b001c393c1b2d1ef846ce2cbf" +checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" dependencies = [ "serde", ] @@ -7221,7 +7371,7 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.2.6", + "indexmap 2.6.0", "toml_datetime", "winnow 0.5.40", ] @@ -7232,22 +7382,22 @@ version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" dependencies = [ - "indexmap 2.2.6", + "indexmap 2.6.0", "toml_datetime", "winnow 0.5.40", ] [[package]] name = "toml_edit" -version = "0.22.15" +version = "0.22.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d59a3a72298453f564e2b111fa896f8d07fabb36f51f06d7e875fc5e0b5a3ef1" +checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" dependencies = [ - "indexmap 2.2.6", + "indexmap 2.6.0", "serde", "serde_spanned", "toml_datetime", - "winnow 0.6.13", + "winnow 0.6.20", ] [[package]] @@ -7476,6 +7626,12 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" +[[package]] +name = "utf8parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" + [[package]] name = "uuid" version = "1.10.0" @@ -7873,9 +8029,9 @@ dependencies = [ [[package]] name = "winnow" -version = "0.6.13" +version = "0.6.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59b5e5f6c299a3c7890b876a2a587f3115162487e704907d9b6cd29473052ba1" +checksum = "36c1fec1a2bb5866f07c25f68c26e565c4c200aebb96d7e55710c19d3e8ac49b" dependencies = [ "memchr", ] diff --git a/tools/alerting/Cargo.toml b/tools/alerting/Cargo.toml new file mode 100644 index 000000000..447949035 --- /dev/null +++ b/tools/alerting/Cargo.toml @@ -0,0 +1,30 @@ +[package] +name = "alerting" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +anyhow = "1.0.89" +bytemuck = "1.19.0" +chrono = "0.4.38" +env_logger = "0.11.5" +log = "0.4.22" +marginfi = { path = "../../programs/marginfi", version = "0.1.0", features = [ + "mainnet-beta", + "client", + "no-entrypoint", +] } +pagerduty-rs = { version = "*", features = ["sync"] } +pyth-sdk-solana = { workspace = true } +pyth-solana-receiver-sdk = "0.3.1" +serde = "1.0.210" +solana-account-decoder = { workspace = true } +solana-client.workspace = true +solana-sdk.workspace = true +structopt = "0.3.26" +switchboard-on-demand ={ workspace = true } +switchboard-solana ={ workspace = true } +time = "0.3.36" +toml = "0.8.19" diff --git a/tools/alerting/src/main.rs b/tools/alerting/src/main.rs new file mode 100644 index 000000000..4c2f130d5 --- /dev/null +++ b/tools/alerting/src/main.rs @@ -0,0 +1,514 @@ +use std::{ + collections::HashMap, + mem::size_of, + str::FromStr, + time::{SystemTime, UNIX_EPOCH}, +}; + +use log::{error, info, warn}; +use marginfi::{ + constants::{PYTH_PUSH_MARGINFI_SPONSORED_SHARD_ID, PYTH_PUSH_PYTH_SPONSORED_SHARD_ID}, + state::{marginfi_group::Bank, price::OracleSetup}, +}; +use pagerduty_rs::{ + eventsv2sync::EventsV2, + types::{AlertResolve, AlertTrigger, AlertTriggerPayload, Event}, +}; +use pyth_solana_receiver_sdk::price_update::PriceUpdateV2; +use serde::Deserialize; +use solana_account_decoder::UiAccountEncoding; +use solana_client::{ + rpc_client::RpcClient, + rpc_config::{RpcAccountInfoConfig, RpcProgramAccountsConfig}, + rpc_filter::{Memcmp, RpcFilterType}, +}; +use solana_sdk::pubkey::Pubkey; +use structopt::StructOpt; +use switchboard_on_demand::PullFeedAccountData; +use switchboard_solana::{AggregatorAccountData, AnchorDeserialize}; +use time::OffsetDateTime; + +#[derive(Clone, Debug, Deserialize)] +pub struct MarginfiAlerterConfig { + rpc_url: String, + pd_integration_key: String, + marginfi_program_id: String, + marginfi_groups: Vec, + balance_alert: Vec, +} + +impl MarginfiAlerterConfig { + pub fn load_from_file(path: &str) -> Result> { + let file = std::fs::File::open(path)?; + let reader = std::io::BufReader::new(file); + let config_str = std::io::read_to_string(reader)?; + let config = toml::from_str(&config_str)?; + Ok(config) + } +} + +#[derive(Clone, Debug, Deserialize)] +struct MarginfiGroupAlertingConfig { + address: String, + max_age_secs: i64, +} + +#[derive(Clone, Debug, Deserialize)] +struct BalanceAlertingConfig { + address: String, + min_balance: f64, + label: Option, +} + +#[derive(Clone, Debug, StructOpt)] +pub struct MarginfiAlerter { + config_path: String, +} + +struct AlertingContext { + rpc_client: RpcClient, + config: MarginfiAlerterConfig, + group_config_map: HashMap, + pd: EventsV2, +} + +fn main() { + env_logger::init(); + let args = MarginfiAlerter::from_args(); + let config = MarginfiAlerterConfig::load_from_file(&args.config_path).unwrap(); + let rpc_client = RpcClient::new(config.rpc_url.clone()); + + println!( + "Starting marginfi alerter, evaluating {} groups and {} balance alerts", + config.marginfi_groups.len(), + config.balance_alert.len() + ); + + let group_config_map = config + .marginfi_groups + .iter() + .map(|group| (Pubkey::from_str(&group.address).unwrap(), group.clone())) + .collect(); + + let context = AlertingContext { + rpc_client, + config: config.clone(), + group_config_map, + pd: EventsV2::new(config.pd_integration_key.clone(), None).unwrap(), + }; + + match check_all(&context) { + Ok(_) => { + clear_error_alert(&context).unwrap(); + } + Err(e) => { + error!("Error running marginfi alerter: {:?}", e); + send_error_alert(&context, &format!("Error running marginfi alerter: {}", e)).unwrap(); + eprintln!("{:#?}", e); + std::process::exit(1); + } + } +} + +fn check_all(context: &AlertingContext) -> anyhow::Result<()> { + check_marginfi_groups(context)?; + check_balance_alert(context)?; + Ok(()) +} + +fn send_error_alert(context: &AlertingContext, message: &str) -> anyhow::Result<()> { + let event = Event::AlertTrigger::(AlertTrigger { + payload: AlertTriggerPayload { + summary: message.to_string(), + source: "marginfi-alerter".to_string(), + severity: pagerduty_rs::types::Severity::Critical, + custom_details: None, + component: None, + group: None, + class: None, + timestamp: None, + }, + dedup_key: Some("marginfi-alerter-error".to_string()), + images: None, + links: None, + client: None, + client_url: None, + }); + + context.pd.event(event).map_err(|e| anyhow::anyhow!(e))?; + + Ok(()) +} + +fn clear_error_alert(context: &AlertingContext) -> anyhow::Result<()> { + let event = Event::AlertResolve::(AlertResolve { + dedup_key: "marginfi-alerter-error".to_string(), + }); + + context.pd.event(event).map_err(|e| anyhow::anyhow!(e))?; + + Ok(()) +} + +fn check_marginfi_groups(context: &AlertingContext) -> anyhow::Result<()> { + for group in context.config.marginfi_groups.iter() { + check_marginfi_group(context, group)?; + } + + Ok(()) +} + +fn check_balance_alert(context: &AlertingContext) -> anyhow::Result<()> { + for balance in context.config.balance_alert.iter() { + check_balance(context, balance)?; + } + + Ok(()) +} + +fn check_balance( + context: &AlertingContext, + balance_config: &BalanceAlertingConfig, +) -> anyhow::Result<()> { + let address = Pubkey::from_str(&balance_config.address)?; + let balance = context.rpc_client.get_balance(&address)?; + + let min_balance_lamports = (balance_config.min_balance * 10u64.pow(9) as f64).floor() as u64; + + info!( + "Balance for account {} is {}, min balance is {}", + address, + balance as f64 / 10u64.pow(9) as f64, + balance_config.min_balance + ); + + if balance < min_balance_lamports { + send_balance_alert(context, balance_config, balance)?; + } else { + clear_balance_alert(context, &address)?; + } + + Ok(()) +} + +fn check_marginfi_group( + context: &AlertingContext, + group: &MarginfiGroupAlertingConfig, +) -> anyhow::Result<()> { + let marginfi_program_id = Pubkey::from_str(&context.config.marginfi_program_id)?; + let group_address = Pubkey::from_str(&group.address)?; + let bank_accounts = context.rpc_client.get_program_accounts_with_config( + &marginfi_program_id, + RpcProgramAccountsConfig { + filters: Some(vec![RpcFilterType::Memcmp(Memcmp::new_raw_bytes( + 8 + size_of::() + size_of::(), + group_address.to_bytes().to_vec(), + ))]), + account_config: RpcAccountInfoConfig { + encoding: Some(UiAccountEncoding::Base64), + ..Default::default() + }, + with_context: None, + }, + )?; + + let banks = bank_accounts + .into_iter() + .map(|(address, account)| { + let data = account.data.as_slice(); + bytemuck::try_from_bytes::(&data[8..]) + .cloned() + .map(|b| (address, b)) + }) + .collect::, _>>() + .map_err(|e| anyhow::anyhow!(e))?; + + info!("Found {} banks in group", banks.len()); + + let switchboard_v2_oracles = banks + .iter() + .filter(|(_, bank)| bank.config.oracle_setup == OracleSetup::SwitchboardV2) + .collect::>(); + // Pyth legacy is deprecated + let _pyth_oracles = banks + .iter() + .filter(|(_, bank)| bank.config.oracle_setup == OracleSetup::PythLegacy) + .collect::>(); + let pyth_push_oracles = banks + .iter() + .filter(|(_, bank)| bank.config.oracle_setup == OracleSetup::PythPushOracle) + .collect::>(); + let switchboard_pull_oracles = banks + .iter() + .filter(|(_, bank)| bank.config.oracle_setup == OracleSetup::SwitchboardPull) + .collect::>(); + + check_switchboard_v2_oracles(context, &switchboard_v2_oracles)?; + check_pyth_push_oracles(context, &pyth_push_oracles)?; + check_switchboard_pull_oracles(context, &switchboard_pull_oracles)?; + + Ok(()) +} + +fn check_switchboard_v2_oracles( + context: &AlertingContext, + banks: &[&(Pubkey, Bank)], +) -> anyhow::Result<()> { + info!("Checking {} switchboard v2 oracles", banks.len()); + for (address, bank) in banks { + check_switchboard_v2_oracle(context, address, bank)?; + } + + Ok(()) +} + +fn check_switchboard_v2_oracle( + context: &AlertingContext, + address: &Pubkey, + bank: &Bank, +) -> anyhow::Result<()> { + let oracle_address = bank.config.oracle_keys.first().unwrap(); + let oracle_account = context.rpc_client.get_account(oracle_address)?; + let oracle = bytemuck::try_from_bytes::(&oracle_account.data[8..]) + .map_err(|e| anyhow::anyhow!(e))?; + let group_config = context.group_config_map.get(&bank.group).unwrap(); + let max_age = group_config.max_age_secs; + let last_update = oracle.latest_confirmed_round.round_open_timestamp; + let current_time = get_current_unix_timestamp_secs(); + let oracle_age = current_time - last_update; + + info!( + "Switchboard V2 oracle for bank {} is {} seconds old", + address, oracle_age + ); + + if oracle_age > max_age { + send_stale_oracle_alert(context, address, oracle_age)?; + } else { + clear_stale_oracle_alert(context, address)?; + } + + Ok(()) +} + +fn check_pyth_push_oracles( + context: &AlertingContext, + banks: &[&(Pubkey, Bank)], +) -> anyhow::Result<()> { + for (address, bank) in banks { + check_pyth_push_oracle(context, address, bank)?; + } + + Ok(()) +} + +fn check_pyth_push_oracle( + context: &AlertingContext, + address: &Pubkey, + bank: &Bank, +) -> anyhow::Result<()> { + let oracle_address = bank.config.oracle_keys.first().unwrap(); + let oracle_account = { + let (marginfi_sponsored_oracle_address, _) = + marginfi::state::price::PythPushOraclePriceFeed::find_oracle_address( + PYTH_PUSH_MARGINFI_SPONSORED_SHARD_ID, + oracle_address.as_ref().try_into().unwrap(), + ); + let (pyth_sponsered_oracle_address, _) = + marginfi::state::price::PythPushOraclePriceFeed::find_oracle_address( + PYTH_PUSH_PYTH_SPONSORED_SHARD_ID, + oracle_address.as_ref().try_into().unwrap(), + ); + + let accounts = context.rpc_client.get_multiple_accounts(&[ + marginfi_sponsored_oracle_address, + pyth_sponsered_oracle_address, + ])?; + + match (accounts.first().cloned(), accounts.get(1).cloned()) { + (Some(Some(account)), _) => account, + (_, Some(Some(account))) => account, + _ => anyhow::bail!("Oracle account for bank {} not found", address), + } + }; + + let price_update = PriceUpdateV2::deserialize(&mut &oracle_account.data[8..])?; + let group_config = context.group_config_map.get(&bank.group).unwrap(); + let publish_time = price_update.price_message.publish_time; + let current_time = get_current_unix_timestamp_secs(); + let max_age = group_config.max_age_secs; + let oracle_age = current_time - publish_time; + + info!( + "Pyth push oracle for bank {} is {} seconds old", + address, oracle_age + ); + + if oracle_age > max_age { + send_stale_oracle_alert(context, address, oracle_age)?; + } else { + clear_stale_oracle_alert(context, address)?; + } + + Ok(()) +} + +fn check_switchboard_pull_oracles( + context: &AlertingContext, + banks: &[&(Pubkey, Bank)], +) -> anyhow::Result<()> { + for (address, bank) in banks { + check_switchboard_pull_oracle(context, address, bank)?; + } + + Ok(()) +} + +fn check_switchboard_pull_oracle( + context: &AlertingContext, + address: &Pubkey, + bank: &Bank, +) -> anyhow::Result<()> { + let oracle_address = bank.config.oracle_keys.first().unwrap(); + let oracle_account = context.rpc_client.get_account(oracle_address)?; + let pull_feed = bytemuck::try_from_bytes::(&oracle_account.data[8..]) + .map_err(|e| anyhow::anyhow!(e))?; + let group_config = context.group_config_map.get(&bank.group).unwrap(); + let max_age = group_config.max_age_secs; + let current_time = get_current_unix_timestamp_secs(); + let last_update = pull_feed.last_update_timestamp; + let oracle_age = current_time - last_update; + + info!( + "Switchboard pull oracle for bank {} is {} seconds old", + address, oracle_age + ); + + if oracle_age > max_age { + send_stale_oracle_alert(context, address, oracle_age)?; + } else { + clear_stale_oracle_alert(context, address)?; + } + + Ok(()) +} + +fn send_balance_alert( + context: &AlertingContext, + balance_config: &BalanceAlertingConfig, + balance: u64, +) -> anyhow::Result<()> { + let balance_ui = balance as f64 / 10u64.pow(9) as f64; + warn!( + "Account {} ({}) has balance of {} below minimum {}", + balance_config.address, + balance_config + .label + .clone() + .unwrap_or(balance_config.address.to_string()), + balance_ui, + balance_config.min_balance + ); + + context + .pd + .event(pagerduty_rs::types::Event::AlertTrigger::( + AlertTrigger { + payload: AlertTriggerPayload { + severity: pagerduty_rs::types::Severity::Critical, + summary: format!( + "Account {} ({}) has balance of {} below minimum {}", + balance_config.address, + balance_config + .label + .clone() + .unwrap_or(balance_config.address.to_string()), + balance_ui, + balance_config.min_balance + ), + source: "marginfi-alerter".to_string(), + timestamp: Some(OffsetDateTime::now_utc()), + component: None, + group: None, + class: None, + custom_details: None, + }, + dedup_key: Some(format!("balance-{}", balance_config.address)), + images: None, + links: None, + client: None, + client_url: None, + }, + ))?; + + Ok(()) +} + +fn clear_balance_alert(context: &AlertingContext, address: &Pubkey) -> anyhow::Result<()> { + context + .pd + .event(Event::AlertResolve::(AlertResolve { + dedup_key: format!("balance-{}", address), + }))?; + + Ok(()) +} + +fn send_stale_oracle_alert( + context: &AlertingContext, + address: &Pubkey, + oralce_age_secs: i64, +) -> anyhow::Result<()> { + warn!( + "Oracle for bank {} is stale by {} seconds, sending alert", + address, oralce_age_secs + ); + + context + .pd + .event(pagerduty_rs::types::Event::AlertTrigger::( + AlertTrigger { + payload: AlertTriggerPayload { + severity: pagerduty_rs::types::Severity::Critical, + summary: format!( + "Oracle for bank {} is stale by {} seconds", + address, oralce_age_secs + ), + source: "marginfi-alerter".to_string(), + timestamp: Some(OffsetDateTime::now_utc()), + component: None, + group: None, + class: None, + custom_details: None, + }, + dedup_key: Some(get_oracle_dedup_key(address)), + images: None, + links: None, + client: None, + client_url: None, + }, + ))?; + + Ok(()) +} + +fn clear_stale_oracle_alert(context: &AlertingContext, address: &Pubkey) -> anyhow::Result<()> { + context + .pd + .event(Event::AlertResolve::(AlertResolve { + dedup_key: get_oracle_dedup_key(address), + }))?; + + Ok(()) +} + +fn get_oracle_dedup_key(address: &Pubkey) -> String { + format!("stale-oracle-{}", address) +} + +fn get_current_unix_timestamp_secs() -> i64 { + SystemTime::now() + .duration_since(UNIX_EPOCH) + .expect("Time went backwards") + .as_secs() as i64 +} From f9033acc85d99c3623108306cf92bc444d85c8ca Mon Sep 17 00:00:00 2001 From: man0s <95379755+losman0s@users.noreply.github.com> Date: Mon, 21 Oct 2024 00:23:58 +0800 Subject: [PATCH 04/59] fix: crossbar calls (#255) --- observability/indexer/Cargo.toml | 4 +- observability/indexer/Dockerfile | 4 +- .../indexer/src/commands/snapshot_accounts.rs | 17 ++++++- observability/indexer/src/utils/crossbar.rs | 46 ++++++++++++++----- 4 files changed, 53 insertions(+), 18 deletions(-) diff --git a/observability/indexer/Cargo.toml b/observability/indexer/Cargo.toml index ad13b5a2c..48aa7a79a 100644 --- a/observability/indexer/Cargo.toml +++ b/observability/indexer/Cargo.toml @@ -41,8 +41,8 @@ google-cloud-googleapis = { git = " https://github.com/mrgnlabs/google-cloud-rus yup-oauth2 = "8.3.0" yellowstone-grpc-client = { git = "https://github.com/rpcpool/yellowstone-grpc.git", rev = "87e1755b0d7a4e8101cb5feb6f30063aa91f343f" } yellowstone-grpc-proto = { git = "https://github.com/rpcpool/yellowstone-grpc.git", rev = "87e1755b0d7a4e8101cb5feb6f30063aa91f343f" } -switchboard-on-demand-client = "0.1.7" -switchboard-on-demand = "0.1.7" +switchboard-on-demand-client = "0.2.4" +switchboard-on-demand = "0.1.15" hex = "0.4.3" fixed = "1.12.0" fixed-macro = "1.2.0" diff --git a/observability/indexer/Dockerfile b/observability/indexer/Dockerfile index 708af0a7b..ed1b39efb 100644 --- a/observability/indexer/Dockerfile +++ b/observability/indexer/Dockerfile @@ -1,4 +1,4 @@ -FROM rust:1.72 as builder +FROM rust:1.75 as builder RUN apt-get update -y && apt-get install -y pkg-config build-essential libudev-dev clang cmake protobuf-compiler RUN rustup component add rustfmt clippy @@ -15,7 +15,7 @@ COPY ./clients/rust ./clients/rust ENV CARGO_NET_GIT_FETCH_WITH_CLI=true -RUN cargo build --release +RUN cargo build --release --locked FROM debian:stable-slim as runner diff --git a/observability/indexer/src/commands/snapshot_accounts.rs b/observability/indexer/src/commands/snapshot_accounts.rs index 641bcf7e5..f62d7192c 100644 --- a/observability/indexer/src/commands/snapshot_accounts.rs +++ b/observability/indexer/src/commands/snapshot_accounts.rs @@ -211,7 +211,7 @@ pub async fn snapshot_accounts(config: SnapshotAccountsConfig) -> Result<()> { }) .collect::>(), ); - context.crossbar_store.refresh_prices().await; + context.crossbar_store.refresh_prices().await.unwrap(); snapshot .routing_lookup @@ -236,7 +236,20 @@ pub async fn snapshot_accounts(config: SnapshotAccountsConfig) -> Result<()> { let context = context.clone(); async move { loop { - context.crossbar_store.refresh_prices().await; + let mut retry_count = 0; + while retry_count < 3 { + match context.crossbar_store.refresh_prices().await { + Ok(_) => break, + Err(e) => { + retry_count += 1; + if retry_count == 3 { + error!("Failed to refresh prices after 3 attempts: {:?}", e); + } else { + tokio::time::sleep(std::time::Duration::from_secs(1)).await; + } + } + } + } let mut snapshot = context.account_snapshot.lock().await; let feeds_per_address: HashMap = context.crossbar_store.get_prices_per_address(); diff --git a/observability/indexer/src/utils/crossbar.rs b/observability/indexer/src/utils/crossbar.rs index 377960d1e..b11e03b23 100644 --- a/observability/indexer/src/utils/crossbar.rs +++ b/observability/indexer/src/utils/crossbar.rs @@ -1,3 +1,4 @@ +use anyhow::Result; use solana_sdk::pubkey::Pubkey; use std::{collections::HashMap, sync::Mutex}; use switchboard_on_demand_client::CrossbarClient; @@ -27,7 +28,7 @@ pub struct CrossbarCache { impl CrossbarCache { /// Creates a new CrossbarCache empty instance pub fn new() -> Self { - let crossbar_client = CrossbarClient::default(None); + let crossbar_client = CrossbarClient::default(); Self { crossbar_client, feeds: Mutex::new(HashMap::new()), @@ -50,24 +51,43 @@ impl CrossbarCache { } } - pub async fn refresh_prices(&self) { + pub async fn refresh_prices(&self) -> Result<()> { if self.feeds.lock().unwrap().is_empty() { - return; + return Ok(()); } - let feed_hashes = self + let feed_hashes: Vec = self .feeds .lock() .unwrap() .values() .map(|feed| feed.feed_meta.feed_hash.clone()) - .collect::>(); - - let simulated_prices = self - .crossbar_client - .simulate_feeds(&feed_hashes.iter().map(|x| x.as_str()).collect::>()) - .await - .unwrap(); + .collect(); + + const CHUNK_SIZE: usize = 20; + + let chunk_futures: Vec<_> = feed_hashes + .chunks(CHUNK_SIZE) + .map(|chunk| { + let client = self.crossbar_client.clone(); + let chunk_vec: Vec = chunk.to_vec(); + tokio::spawn(async move { + client + .simulate_feeds( + &chunk_vec.iter().map(|x| x.as_str()).collect::>(), + ) + .await + }) + }) + .collect(); + + let chunk_results = futures::future::try_join_all(chunk_futures).await?; + let mut simulated_prices = Vec::new(); + for result in chunk_results { + if let Ok(chunk_result) = result { + simulated_prices.extend(chunk_result); + } + } let timestamp = chrono::Utc::now().timestamp(); @@ -83,6 +103,8 @@ impl CrossbarCache { } } } + + Ok(()) } pub fn get_prices_per_address(&self) -> HashMap { @@ -136,7 +158,7 @@ mod tests { feed_hash: feed_hash2.clone(), }, ]); - crossbar_maintainer.refresh_prices().await; + crossbar_maintainer.refresh_prices().await.unwrap(); println!("Price: {:?}", price.lock().unwrap()); println!("Price2: {:?}", price2.lock().unwrap()); } From 8a01852874842b20de18fdcf2009e94e621953ec Mon Sep 17 00:00:00 2001 From: Jon Gurary <91919816+jgur-psyops@users.noreply.github.com> Date: Mon, 21 Oct 2024 10:58:25 -0400 Subject: [PATCH 05/59] Combined protocol "program" fees (#244) * Adds protocol fees and pool creation fees. * Adds two new accounts to the add_pool and add_pool_with_seed ixes * The FeeState account (unique per program) now administers "program fees", which go directly to the FeeState.global_fee_wallet's canonical ATA for any given bank's mint. For example, if a third party opens a new group and a new bank, the program fee will always go to get_associated_token_address(FeeState.global_fee_wallet, bank.mint). * Groups will cache the program fees and the fee state's global fee wallet, which the global fee admin can change at any time. When fees update, they will propagate to groups using the permissionless propagate_fee ix. * The global fee state admin can enable/disable program fees for any group without the group admin's permission. * Note that fees which go to the group are still called "protocol" or "group" fees for legacy purposes. The new fees are always referred to as "program" fees. --- clients/rust/marginfi-cli/Cargo.toml | 4 +- clients/rust/marginfi-cli/src/entrypoint.rs | 17 +- .../rust/marginfi-cli/src/processor/admin.rs | 4 +- .../rust/marginfi-cli/src/processor/mod.rs | 53 +- clients/rust/marginfi-cli/src/utils.rs | 6 +- .../dataflow_etls/orm/accounts.py | 16 +- .../dataflow-etls/dataflow_etls/orm/events.py | 16 +- observability/indexer/src/utils/metrics.rs | 27 +- programs/brick/Cargo.toml | 10 +- .../liquidity-incentive-program/Cargo.toml | 1 + programs/marginfi/Cargo.toml | 1 + programs/marginfi/fuzz/Cargo.lock | 128 +++- programs/marginfi/fuzz/Cargo.toml | 2 +- programs/marginfi/fuzz/fuzz_targets/lend.rs | 10 +- programs/marginfi/fuzz/src/account_state.rs | 67 +- programs/marginfi/fuzz/src/lib.rs | 68 +- programs/marginfi/fuzz/src/stubs.rs | 7 +- programs/marginfi/src/constants.rs | 10 + programs/marginfi/src/errors.rs | 2 + .../instructions/marginfi_account/borrow.rs | 2 + .../marginfi_account/close_balance.rs | 2 + .../instructions/marginfi_account/deposit.rs | 2 + .../marginfi_account/liquidate.rs | 4 + .../instructions/marginfi_account/repay.rs | 2 + .../instructions/marginfi_account/withdraw.rs | 2 + .../marginfi_group/accrue_bank_interest.rs | 1 + .../instructions/marginfi_group/add_pool.rs | 208 ++---- .../marginfi_group/add_pool_with_seed.rs | 217 ++++++ .../marginfi_group/collect_bank_fees.rs | 75 +- .../marginfi_group/config_group_fee.rs | 28 + .../marginfi_group/edit_global_fee.rs | 39 ++ .../marginfi_group/handle_bankruptcy.rs | 1 + .../marginfi_group/init_global_fee_state.rs | 55 ++ .../instructions/marginfi_group/initialize.rs | 14 + .../src/instructions/marginfi_group/mod.rs | 10 + .../marginfi_group/propagate_fee_state.rs | 28 + programs/marginfi/src/lib.rs | 50 ++ programs/marginfi/src/state/fee_state.rs | 42 ++ programs/marginfi/src/state/marginfi_group.rs | 649 +++++++++++++----- programs/marginfi/src/state/mod.rs | 1 + .../tests/admin_actions/bankruptcy.rs | 1 + .../tests/admin_actions/bankruptcy_auth.rs | 2 + .../admin_actions/create_marginfi_group.rs | 8 +- .../tests/admin_actions/interest_accrual.rs | 21 + .../tests/admin_actions/setup_bank.rs | 66 +- .../marginfi/tests/misc/operational_state.rs | 5 + programs/marginfi/tests/misc/pyth_push.rs | 3 + .../marginfi/tests/misc/real_oracle_data.rs | 2 + programs/marginfi/tests/misc/regression.rs | 2 +- .../risk_engine_flexible_oracle_checks.rs | 2 + .../marginfi/tests/misc/token_extensions.rs | 1 + .../marginfi/tests/user_actions/liquidate.rs | 3 + programs/mocks/Cargo.toml | 1 + programs/test_transfer_hook/Cargo.toml | 1 + scripts/build-program.sh | 2 +- scripts/build-workspace.sh | 2 +- scripts/single-test.sh | 2 +- test-utils/src/marginfi_group.rs | 119 +++- test-utils/src/spl.rs | 57 +- test-utils/src/test.rs | 34 + tests/01_initGroup.spec.ts | 21 +- tests/03_addBank.spec.ts | 29 +- tests/rootHooks.ts | 40 +- tests/utils/instructions.ts | 66 ++ tests/utils/pdas.ts | 7 + tests/utils/types.ts | 13 +- tools/llama-snapshot-tool/src/bin/main.rs | 41 +- 67 files changed, 1974 insertions(+), 458 deletions(-) create mode 100644 programs/marginfi/src/instructions/marginfi_group/add_pool_with_seed.rs create mode 100644 programs/marginfi/src/instructions/marginfi_group/config_group_fee.rs create mode 100644 programs/marginfi/src/instructions/marginfi_group/edit_global_fee.rs create mode 100644 programs/marginfi/src/instructions/marginfi_group/init_global_fee_state.rs create mode 100644 programs/marginfi/src/instructions/marginfi_group/propagate_fee_state.rs create mode 100644 programs/marginfi/src/state/fee_state.rs diff --git a/clients/rust/marginfi-cli/Cargo.toml b/clients/rust/marginfi-cli/Cargo.toml index 0a0d7f738..01ddeef5e 100644 --- a/clients/rust/marginfi-cli/Cargo.toml +++ b/clients/rust/marginfi-cli/Cargo.toml @@ -10,8 +10,10 @@ path = "src/bin/main.rs" [features] devnet = ["marginfi/devnet"] mainnet-beta = ["marginfi/mainnet-beta"] +default = ["mainnet-beta", "admin", "dev", "lip"] +admin = [] +dev = [] staging = ["marginfi/staging"] -default = ["mainnet-beta"] lip = [] [dependencies] diff --git a/clients/rust/marginfi-cli/src/entrypoint.rs b/clients/rust/marginfi-cli/src/entrypoint.rs index b73aa40a4..39d08bddf 100644 --- a/clients/rust/marginfi-cli/src/entrypoint.rs +++ b/clients/rust/marginfi-cli/src/entrypoint.rs @@ -86,6 +86,7 @@ pub enum Command { }, } +#[allow(clippy::large_enum_variant)] #[derive(Debug, Parser)] pub enum GroupCommand { Get { @@ -133,9 +134,9 @@ pub enum GroupCommand { #[clap(long)] insurance_ir_fee: f64, #[clap(long)] - protocol_fixed_fee_apr: f64, + group_fixed_fee_apr: f64, #[clap(long)] - protocol_ir_fee: f64, + group_ir_fee: f64, #[clap(long, arg_enum)] risk_tier: RiskTierArg, #[clap(long, arg_enum)] @@ -146,6 +147,8 @@ pub enum GroupCommand { default_value = "60" )] oracle_max_age: u16, + #[clap(long)] + global_fee_wallet: Pubkey, }, HandleBankruptcy { accounts: Vec, @@ -576,13 +579,14 @@ fn group(subcmd: GroupCommand, global_options: &GlobalOptions) -> Result<()> { max_interest_rate, insurance_fee_fixed_apr, insurance_ir_fee, - protocol_fixed_fee_apr, - protocol_ir_fee, + group_fixed_fee_apr, + group_ir_fee, deposit_limit_ui, borrow_limit_ui, risk_tier, oracle_type, oracle_max_age, + global_fee_wallet, } => processor::group_add_bank( config, profile, @@ -602,11 +606,12 @@ fn group(subcmd: GroupCommand, global_options: &GlobalOptions) -> Result<()> { max_interest_rate, insurance_fee_fixed_apr, insurance_ir_fee, - protocol_fixed_fee_apr, - protocol_ir_fee, + group_fixed_fee_apr, + group_ir_fee, risk_tier, oracle_max_age, global_options.compute_unit_price, + global_fee_wallet, ), GroupCommand::HandleBankruptcy { accounts } => { diff --git a/clients/rust/marginfi-cli/src/processor/admin.rs b/clients/rust/marginfi-cli/src/processor/admin.rs index 0b1a9bb1a..2c8f741dd 100644 --- a/clients/rust/marginfi-cli/src/processor/admin.rs +++ b/clients/rust/marginfi-cli/src/processor/admin.rs @@ -1,6 +1,6 @@ use crate::{ config::Config, - utils::{process_transaction, ui_to_native}, + utils::{find_fee_state_pda, process_transaction, ui_to_native}, }; use anchor_client::anchor_lang::{prelude::*, InstructionData}; use anchor_spl::associated_token; @@ -32,6 +32,8 @@ pub fn process_collect_fees(config: Config, bank_pk: Pubkey) -> Result<()> { liquidity_vault_authority, liquidity_vault: bank.liquidity_vault, insurance_vault: bank.insurance_vault, + fee_state: find_fee_state_pda(&marginfi::id()).0, + fee_ata: find_fee_state_pda(&marginfi::id()).0, // TODO } .to_account_metas(Some(true)), data: marginfi::instruction::LendingPoolCollectBankFees {}.data(), diff --git a/clients/rust/marginfi-cli/src/processor/mod.rs b/clients/rust/marginfi-cli/src/processor/mod.rs index 061c31326..bcfa6f28d 100644 --- a/clients/rust/marginfi-cli/src/processor/mod.rs +++ b/clients/rust/marginfi-cli/src/processor/mod.rs @@ -10,8 +10,8 @@ use { utils::{ bank_to_oracle_key, calc_emissions_rate, create_oracle_key_array, find_bank_emssions_auth_pda, find_bank_emssions_token_account_pda, - find_bank_vault_authority_pda, find_bank_vault_pda, load_observation_account_metas, - process_transaction, EXP_10_I80F48, + find_bank_vault_authority_pda, find_bank_vault_pda, find_fee_state_pda, + load_observation_account_metas, process_transaction, EXP_10_I80F48, }, }, anchor_client::{ @@ -180,10 +180,10 @@ Last Update: {:?}h ago ({}) bank.config.interest_rate_config.optimal_utilization_rate, bank.config.interest_rate_config.plateau_interest_rate, bank.config.interest_rate_config.max_interest_rate, - bank.config.interest_rate_config.insurance_ir_fee, bank.config.interest_rate_config.insurance_fee_fixed_apr, - bank.config.interest_rate_config.protocol_ir_fee, + bank.config.interest_rate_config.insurance_ir_fee, bank.config.interest_rate_config.protocol_fixed_fee_apr, + bank.config.interest_rate_config.protocol_ir_fee, bank.config.oracle_setup, bank.config.oracle_keys, bank.config.get_oracle_max_age(), @@ -231,6 +231,7 @@ pub fn group_create( .accounts(marginfi::accounts::MarginfiGroupInitialize { marginfi_group: marginfi_group_keypair.pubkey(), admin, + fee_state: find_fee_state_pda(&marginfi::id()).0, system_program: system_program::id(), }) .args(marginfi::instruction::MarginfiGroupInitialize {}) @@ -312,11 +313,12 @@ pub fn group_add_bank( max_interest_rate: f64, insurance_fee_fixed_apr: f64, insurance_ir_fee: f64, - protocol_fixed_fee_apr: f64, - protocol_ir_fee: f64, + group_fixed_fee_apr: f64, + group_ir_fee: f64, risk_tier: crate::RiskTierArg, oracle_max_age: u16, compute_unit_price: Option, + global_fee_wallet: Pubkey, ) -> Result<()> { let rpc_client = config.mfi_program.rpc(); @@ -334,8 +336,9 @@ pub fn group_add_bank( let max_interest_rate: WrappedI80F48 = I80F48::from_num(max_interest_rate).into(); let insurance_fee_fixed_apr: WrappedI80F48 = I80F48::from_num(insurance_fee_fixed_apr).into(); let insurance_ir_fee: WrappedI80F48 = I80F48::from_num(insurance_ir_fee).into(); - let protocol_fixed_fee_apr: WrappedI80F48 = I80F48::from_num(protocol_fixed_fee_apr).into(); - let protocol_ir_fee: WrappedI80F48 = I80F48::from_num(protocol_ir_fee).into(); + let group_fixed_fee_apr: WrappedI80F48 = I80F48::from_num(group_fixed_fee_apr).into(); + let group_ir_fee: WrappedI80F48 = I80F48::from_num(group_ir_fee).into(); + let mint_account = rpc_client.get_account(&bank_mint)?; let token_program = mint_account.owner; let mint = spl_token_2022::state::Mint::unpack( @@ -350,8 +353,8 @@ pub fn group_add_bank( max_interest_rate, insurance_fee_fixed_apr, insurance_ir_fee, - protocol_fixed_fee_apr, - protocol_ir_fee, + protocol_fixed_fee_apr: group_fixed_fee_apr, + protocol_ir_fee: group_ir_fee, ..InterestRateConfig::default() }; @@ -384,6 +387,7 @@ pub fn group_add_bank( oracle_setup, risk_tier, oracle_max_age, + global_fee_wallet, )? } else { create_bank_ix( @@ -404,6 +408,7 @@ pub fn group_add_bank( oracle_setup, risk_tier, oracle_max_age, + global_fee_wallet, )? }; @@ -445,6 +450,7 @@ fn create_bank_ix_with_seed( oracle_setup: crate::OracleTypeArg, risk_tier: crate::RiskTierArg, oracle_max_age: u16, + global_fee_wallet: Pubkey, ) -> Result> { use solana_sdk::commitment_config::CommitmentConfig; @@ -514,6 +520,8 @@ fn create_bank_ix_with_seed( token_program, system_program: system_program::id(), fee_payer: config.authority(), + fee_state: find_fee_state_pda(&config.program_id).0, + global_fee_wallet, }) .accounts(AccountMeta::new_readonly(oracle_key, false)) .args(marginfi::instruction::LendingPoolAddBankWithSeed { @@ -562,6 +570,7 @@ fn create_bank_ix( oracle_setup: crate::OracleTypeArg, risk_tier: crate::RiskTierArg, oracle_max_age: u16, + global_fee_wallet: Pubkey, ) -> Result> { let add_bank_ixs_builder = config.mfi_program.request(); let add_bank_ixs = add_bank_ixs_builder @@ -610,6 +619,8 @@ fn create_bank_ix( token_program, system_program: system_program::id(), fee_payer: config.explicit_fee_payer(), + fee_state: find_fee_state_pda(&config.program_id).0, + global_fee_wallet, }) .accounts(AccountMeta::new_readonly(oracle_key, false)) .args(marginfi::instruction::LendingPoolAddBank { @@ -988,7 +999,11 @@ pub fn bank_get(config: Config, bank_pk: Option) -> Result<()> { let rpc_client = config.mfi_program.rpc(); if let Some(address) = bank_pk { - let bank: Bank = config.mfi_program.account(address)?; + let mut bank: Bank = config.mfi_program.account(address)?; + let group: MarginfiGroup = config.mfi_program.account(bank.group)?; + + bank.accrue_interest(Clock::get()?.unix_timestamp, &group)?; + print_bank(&address, &bank); let liquidity_vault_balance = @@ -1046,14 +1061,7 @@ fn load_all_banks(config: &Config, marginfi_group: Option) -> Result vec![], }; - let mut clock = config.mfi_program.rpc().get_account(&sysvar::clock::ID)?; - let clock = Clock::from_account_info(&(&sysvar::clock::ID, &mut clock).into_account_info())?; - - let mut banks_with_addresses = config.mfi_program.accounts::(filters)?; - - banks_with_addresses.iter_mut().for_each(|(_, bank)| { - bank.accrue_interest(clock.unix_timestamp).unwrap(); - }); + let banks_with_addresses = config.mfi_program.accounts::(filters)?; Ok(banks_with_addresses) } @@ -2323,6 +2331,8 @@ pub fn marginfi_account_create(profile: &Profile, config: &Config) -> Result<()> #[cfg(feature = "lip")] pub fn process_list_lip_campaigns(config: &Config) { + use liquidity_incentive_program::state::Campaign; + let campaings = config.lip_program.accounts::(vec![]).unwrap(); print!("Found {} campaigns", campaings.len()); @@ -2356,6 +2366,7 @@ Max Rewards: {} #[cfg(feature = "lip")] pub fn process_list_deposits(config: &Config) { + use liquidity_incentive_program::state::{Campaign, Deposit}; use solana_sdk::clock::SECONDS_PER_DAY; let mut deposits = config.lip_program.accounts::(vec![]).unwrap(); @@ -2409,8 +2420,10 @@ Deposit start {}, end {} ({}) #[cfg(feature = "lip")] fn timestamp_to_string(timestamp: i64) -> String { + use chrono::{DateTime, Utc}; + DateTime::::from_naive_utc_and_offset( - NaiveDateTime::from_timestamp_opt(timestamp, 0).unwrap(), + DateTime::from_timestamp(timestamp, 0).unwrap().naive_utc(), Utc, ) .format("%Y-%m-%d %H:%M:%S") diff --git a/clients/rust/marginfi-cli/src/utils.rs b/clients/rust/marginfi-cli/src/utils.rs index e41e75474..f936081c1 100644 --- a/clients/rust/marginfi-cli/src/utils.rs +++ b/clients/rust/marginfi-cli/src/utils.rs @@ -7,7 +7,7 @@ use { marginfi::{ bank_authority_seed, bank_seed, constants::{ - EMISSIONS_AUTH_SEED, EMISSIONS_TOKEN_ACCOUNT_SEED, MAX_ORACLE_KEYS, + EMISSIONS_AUTH_SEED, EMISSIONS_TOKEN_ACCOUNT_SEED, FEE_STATE_SEED, MAX_ORACLE_KEYS, PYTH_PUSH_PYTH_SPONSORED_SHARD_ID, }, state::{ @@ -126,6 +126,10 @@ pub fn find_bank_emssions_token_account_pda( ) } +pub fn find_fee_state_pda(program_id: &Pubkey) -> (Pubkey, u8) { + Pubkey::find_program_address(&[FEE_STATE_SEED.as_bytes()], program_id) +} + pub fn create_oracle_key_array(oracle_key: Pubkey) -> [Pubkey; MAX_ORACLE_KEYS] { let mut oracle_keys = [Pubkey::default(); MAX_ORACLE_KEYS]; oracle_keys[0] = oracle_key; diff --git a/observability/etl/dataflow-etls/dataflow_etls/orm/accounts.py b/observability/etl/dataflow-etls/dataflow_etls/orm/accounts.py index a4ab8a471..66ffb6026 100644 --- a/observability/etl/dataflow-etls/dataflow_etls/orm/accounts.py +++ b/observability/etl/dataflow-etls/dataflow_etls/orm/accounts.py @@ -130,8 +130,8 @@ class LendingPoolBankUpdateRecord(AccountUpdateRecordBase): "config_interest_rate_config_max_interest_rate:BIGNUMERIC", "config_interest_rate_config_insurance_fee_fixed_apr:BIGNUMERIC", "config_interest_rate_config_insurance_ir_fee:BIGNUMERIC", - "config_interest_rate_config_protocol_fixed_fee_apr:BIGNUMERIC", - "config_interest_rate_config_protocol_ir_fee:BIGNUMERIC", + "config_interest_rate_config_group_fixed_fee_apr:BIGNUMERIC", + "config_interest_rate_config_group_ir_fee:BIGNUMERIC", "config_operational_state:STRING", "config_oracle_setup:STRING", "config_oracle_keys:STRING", @@ -169,8 +169,8 @@ class LendingPoolBankUpdateRecord(AccountUpdateRecordBase): config_interest_rate_config_max_interest_rate: float config_interest_rate_config_insurance_fee_fixed_apr: float config_interest_rate_config_insurance_ir_fee: float - config_interest_rate_config_protocol_fixed_fee_apr: float - config_interest_rate_config_protocol_ir_fee: float + config_interest_rate_config_group_fixed_fee_apr: float + config_interest_rate_config_group_ir_fee: float config_operational_state: str config_oracle_setup: str config_oracle_keys: str @@ -222,10 +222,10 @@ def __init__(self, parsed_data: NamedAccountData, account_update: "AccountUpdate parsed_data.data.config.interest_rate_config.insurance_fee_fixed_apr) self.config_interest_rate_config_insurance_ir_fee = wrapped_i80f48_to_float( parsed_data.data.config.interest_rate_config.insurance_ir_fee) - self.config_interest_rate_config_protocol_fixed_fee_apr = wrapped_i80f48_to_float( - parsed_data.data.config.interest_rate_config.protocol_fixed_fee_apr) - self.config_interest_rate_config_protocol_ir_fee = wrapped_i80f48_to_float( - parsed_data.data.config.interest_rate_config.protocol_ir_fee) + self.config_interest_rate_config_group_fixed_fee_apr = wrapped_i80f48_to_float( + parsed_data.data.config.interest_rate_config.group_fixed_fee_apr) + self.config_interest_rate_config_group_ir_fee = wrapped_i80f48_to_float( + parsed_data.data.config.interest_rate_config.group_ir_fee) AccountUpdateRecordTypes = [MarginfiGroupUpdateRecord, diff --git a/observability/etl/dataflow-etls/dataflow_etls/orm/events.py b/observability/etl/dataflow-etls/dataflow_etls/orm/events.py index 115ca4dbd..1ccc51cb2 100644 --- a/observability/etl/dataflow-etls/dataflow_etls/orm/events.py +++ b/observability/etl/dataflow-etls/dataflow_etls/orm/events.py @@ -177,8 +177,8 @@ class LendingPoolBankConfigureRecord(GroupRecordBase): "max_interest_rate:NUMERIC", "insurance_fee_fixed_apr:NUMERIC", "insurance_ir_fee:NUMERIC", - "protocol_fixed_fee_apr:NUMERIC", - "protocol_ir_fee:NUMERIC", + "group_fixed_fee_apr:NUMERIC", + "group_ir_fee:NUMERIC", ] ) @@ -204,8 +204,8 @@ class LendingPoolBankConfigureRecord(GroupRecordBase): insurance_fee_fixed_apr: Optional[float] insurance_ir_fee: Optional[float] - protocol_fixed_fee_apr: Optional[float] - protocol_ir_fee: Optional[float] + group_fixed_fee_apr: Optional[float] + group_ir_fee: Optional[float] def __init__(self, event: Event, instruction: "InstructionWithLogs", instruction_args: NamedInstruction): super().__init__(event, instruction, instruction_args) @@ -238,10 +238,10 @@ def __init__(self, event: Event, instruction: "InstructionWithLogs", instruction event.data.config.interest_rate_config.insurance_fee_fixed_apr, wrapped_i80f48_to_float) self.insurance_ir_fee = map_optional( event.data.config.interest_rate_config.insurance_ir_fee, wrapped_i80f48_to_float) - self.protocol_fixed_fee_apr = map_optional( - event.data.config.interest_rate_config.protocol_fixed_fee_apr, wrapped_i80f48_to_float) - self.protocol_ir_fee = map_optional( - event.data.config.interest_rate_config.protocol_ir_fee, wrapped_i80f48_to_float) + self.group_fixed_fee_apr = map_optional( + event.data.config.interest_rate_config.group_fixed_fee_apr, wrapped_i80f48_to_float) + self.group_ir_fee = map_optional( + event.data.config.interest_rate_config.group_ir_fee, wrapped_i80f48_to_float) @dataclass diff --git a/observability/indexer/src/utils/metrics.rs b/observability/indexer/src/utils/metrics.rs index ee0fe4058..6de8dff48 100644 --- a/observability/indexer/src/utils/metrics.rs +++ b/observability/indexer/src/utils/metrics.rs @@ -6,13 +6,13 @@ use chrono::{NaiveDateTime, Utc}; use fixed::types::I80F48; use fixed_macro::types::I80F48; use itertools::Itertools; -use marginfi::constants::ZERO_AMOUNT_THRESHOLD; use marginfi::prelude::MarginfiGroup; use marginfi::state::marginfi_account::{ calc_value, MarginfiAccount, RequirementType, RiskRequirementType, }; use marginfi::state::marginfi_group::BankOperationalState; use marginfi::state::price::{OraclePriceFeedAdapter, OraclePriceType, PriceBias}; +use marginfi::{constants::ZERO_AMOUNT_THRESHOLD, state::marginfi_group::ComputedInterestRates}; use serde::Serialize; use solana_sdk::pubkey::Pubkey; use std::collections::HashMap; @@ -319,10 +319,29 @@ impl LendingPoolBankMetrics { } else { I80F48::ZERO }; - let (lending_apr, borrowing_apr, group_fee_apr, insurance_fee_apr) = bank_accounts + let group = snapshot + .marginfi_groups + .get(&bank_accounts.bank.group) + .ok_or_else(|| { + anyhow!( + "Group {} not found for bank {}", + bank_accounts.bank.group, + bank_pk + ) + })?; + let ir_calc = bank_accounts .bank .config .interest_rate_config + .create_interest_rate_calculator(&group.get_group_bank_config()); + + let ComputedInterestRates { + lending_rate_apr, + borrowing_rate_apr, + group_fee_apr, + insurance_fee_apr, + protocol_fee_apr: _, + }: marginfi::state::marginfi_group::ComputedInterestRates = ir_calc .calc_interest_rate(utilization_rate) .ok_or_else(|| anyhow!("Bad math during IR calcs"))?; @@ -345,8 +364,8 @@ impl LendingPoolBankMetrics { borrow_limit_in_usd: borrow_limit_usd, lenders_count, borrowers_count, - deposit_rate: lending_apr.to_num::(), - borrow_rate: borrowing_apr.to_num::(), + deposit_rate: lending_rate_apr.to_num::(), + borrow_rate: borrowing_rate_apr.to_num::(), group_fee: group_fee_apr.to_num::(), insurance_fee: insurance_fee_apr.to_num::(), total_assets_in_tokens: asset_amount.to_num::() diff --git a/programs/brick/Cargo.toml b/programs/brick/Cargo.toml index 4c395500a..c62e59195 100644 --- a/programs/brick/Cargo.toml +++ b/programs/brick/Cargo.toml @@ -6,7 +6,6 @@ edition = "2021" [lib] crate-type = ["cdylib", "lib"] -name = "brick" [features] no-entrypoint = [] @@ -16,10 +15,9 @@ cpi = ["no-entrypoint"] default = [] idl-build = ["anchor-lang/idl-build"] test = [] - -[profile.release] -overflow-checks = true +ignore-fee-deploy = [] [dependencies] -solana-program.workspace = true -anchor-lang.workspace = true +# Remove workspace = true if already defined in the root Cargo.toml +anchor-lang = { workspace = true } +solana-program = { workspace = true } diff --git a/programs/liquidity-incentive-program/Cargo.toml b/programs/liquidity-incentive-program/Cargo.toml index a4eec9871..88db143a8 100644 --- a/programs/liquidity-incentive-program/Cargo.toml +++ b/programs/liquidity-incentive-program/Cargo.toml @@ -19,6 +19,7 @@ devnet = ["marginfi/devnet"] mainnet-beta = ["marginfi/mainnet-beta"] test = [] test-bpf = [] +ignore-fee-deploy = [] [dependencies] anchor-lang = { workspace = true } diff --git a/programs/marginfi/Cargo.toml b/programs/marginfi/Cargo.toml index bd5feb6f7..c6ddc1471 100644 --- a/programs/marginfi/Cargo.toml +++ b/programs/marginfi/Cargo.toml @@ -22,6 +22,7 @@ devnet = [] mainnet-beta = [] debug = [] staging = [] +ignore-fee-deploy = [] [dependencies] solana-program = { workspace = true } diff --git a/programs/marginfi/fuzz/Cargo.lock b/programs/marginfi/fuzz/Cargo.lock index 8ff842fe6..7f6f2c814 100644 --- a/programs/marginfi/fuzz/Cargo.lock +++ b/programs/marginfi/fuzz/Cargo.lock @@ -404,7 +404,7 @@ dependencies = [ "anchor-lang 0.29.0", "solana-program", "spl-associated-token-account 2.3.0", - "spl-token", + "spl-token 4.0.0", "spl-token-2022 0.9.0", ] @@ -416,7 +416,7 @@ dependencies = [ "anchor-lang 0.30.1", "spl-associated-token-account 3.0.2", "spl-pod 0.2.2", - "spl-token", + "spl-token 4.0.0", "spl-token-2022 3.0.2", "spl-token-group-interface 0.2.3", "spl-token-metadata-interface 0.3.3", @@ -2744,6 +2744,7 @@ dependencies = [ name = "marginfi" version = "0.1.0" dependencies = [ + "anchor-lang 0.29.0", "anchor-lang 0.30.1", "anchor-spl 0.30.1", "borsh 0.10.3", @@ -2760,6 +2761,7 @@ dependencies = [ "spl-tlv-account-resolution 0.6.3", "spl-transfer-hook-interface 0.6.3", "static_assertions", + "switchboard-on-demand", "switchboard-solana", "type-layout", ] @@ -2791,7 +2793,7 @@ dependencies = [ "solana-program", "solana-program-test", "solana-sdk", - "spl-token", + "spl-token 4.0.0", "strum 0.26.3", ] @@ -2965,10 +2967,24 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8536030f9fea7127f841b45bb6243b27255787fb4eb83958aa1ef9d2fdc0c36" dependencies = [ "num-bigint 0.2.6", - "num-complex", + "num-complex 0.2.4", "num-integer", "num-iter", - "num-rational", + "num-rational 0.2.4", + "num-traits", +] + +[[package]] +name = "num" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" +dependencies = [ + "num-bigint 0.4.6", + "num-complex 0.4.6", + "num-integer", + "num-iter", + "num-rational 0.4.2", "num-traits", ] @@ -3003,6 +3019,15 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-complex" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" +dependencies = [ + "num-traits", +] + [[package]] name = "num-conv" version = "0.1.0" @@ -3063,6 +3088,17 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-rational" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" +dependencies = [ + "num-bigint 0.4.6", + "num-integer", + "num-traits", +] + [[package]] name = "num-traits" version = "0.2.19" @@ -3082,6 +3118,15 @@ dependencies = [ "libc", ] +[[package]] +name = "num_enum" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" +dependencies = [ + "num_enum_derive 0.5.11", +] + [[package]] name = "num_enum" version = "0.6.1" @@ -3100,6 +3145,18 @@ dependencies = [ "num_enum_derive 0.7.2", ] +[[package]] +name = "num_enum_derive" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "num_enum_derive" version = "0.6.1" @@ -3291,7 +3348,7 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2fd23b938276f14057220b707937bcb42fa76dda7560e57a2da30cb52d557937" dependencies = [ - "num", + "num 0.2.1", ] [[package]] @@ -4413,7 +4470,7 @@ version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "58267dd2fbaa6dceecba9e3e106d2d90a2b02497c0e8b01b8759beccf5113938" dependencies = [ - "num", + "num 0.2.1", ] [[package]] @@ -4449,7 +4506,7 @@ dependencies = [ "serde_json", "solana-config-program", "solana-sdk", - "spl-token", + "spl-token 4.0.0", "spl-token-2022 1.0.0", "spl-token-group-interface 0.1.0", "spl-token-metadata-interface 0.2.0", @@ -5430,7 +5487,7 @@ dependencies = [ "solana-sdk", "spl-associated-token-account 2.3.0", "spl-memo", - "spl-token", + "spl-token 4.0.0", "spl-token-2022 1.0.0", "thiserror", ] @@ -5602,7 +5659,7 @@ dependencies = [ "num-derive 0.4.2", "num-traits", "solana-program", - "spl-token", + "spl-token 4.0.0", "spl-token-2022 1.0.0", "thiserror", ] @@ -5618,7 +5675,7 @@ dependencies = [ "num-derive 0.4.2", "num-traits", "solana-program", - "spl-token", + "spl-token 4.0.0", "spl-token-2022 3.0.2", "thiserror", ] @@ -5820,6 +5877,21 @@ dependencies = [ "spl-type-length-value 0.4.3", ] +[[package]] +name = "spl-token" +version = "3.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e85e168a785e82564160dcb87b2a8e04cee9bfd1f4d488c729d53d6a4bd300d" +dependencies = [ + "arrayref", + "bytemuck", + "num-derive 0.3.3", + "num-traits", + "num_enum 0.5.11", + "solana-program", + "thiserror", +] + [[package]] name = "spl-token" version = "4.0.0" @@ -5850,7 +5922,7 @@ dependencies = [ "solana-zk-token-sdk", "spl-memo", "spl-pod 0.1.0", - "spl-token", + "spl-token 4.0.0", "spl-token-metadata-interface 0.2.0", "spl-transfer-hook-interface 0.3.0", "spl-type-length-value 0.3.0", @@ -5873,7 +5945,7 @@ dependencies = [ "solana-zk-token-sdk", "spl-memo", "spl-pod 0.1.0", - "spl-token", + "spl-token 4.0.0", "spl-token-group-interface 0.1.0", "spl-token-metadata-interface 0.2.0", "spl-transfer-hook-interface 0.4.1", @@ -5897,7 +5969,7 @@ dependencies = [ "solana-zk-token-sdk", "spl-memo", "spl-pod 0.2.2", - "spl-token", + "spl-token 4.0.0", "spl-token-group-interface 0.2.3", "spl-token-metadata-interface 0.3.3", "spl-transfer-hook-interface 0.6.3", @@ -6206,6 +6278,34 @@ dependencies = [ "sha3 0.10.8", ] +[[package]] +name = "switchboard-on-demand" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3852951c42f8876a443060b6882bda945f1621224236ead37959e80f5369cf81" +dependencies = [ + "arc-swap", + "async-trait", + "base64 0.21.7", + "bincode", + "borsh 0.10.3", + "bytemuck", + "futures", + "lazy_static", + "libsecp256k1 0.7.1", + "log", + "num 0.4.3", + "rust_decimal", + "serde", + "serde_json", + "sha2 0.10.8", + "solana-address-lookup-table-program", + "solana-program", + "spl-associated-token-account 2.3.0", + "spl-token 3.5.0", + "switchboard-common", +] + [[package]] name = "switchboard-solana" version = "0.29.109" diff --git a/programs/marginfi/fuzz/Cargo.toml b/programs/marginfi/fuzz/Cargo.toml index 7a2d82569..d6fbab2ab 100644 --- a/programs/marginfi/fuzz/Cargo.toml +++ b/programs/marginfi/fuzz/Cargo.toml @@ -48,7 +48,7 @@ capture_log = ["log", "log4rs"] [dependencies.marginfi] path = ".." -features = ["no-entrypoint", "debug", "client"] +features = ["no-entrypoint", "debug", "client", "ignore-fee-deploy"] # Prevent this from interfering with workspaces [workspace] diff --git a/programs/marginfi/fuzz/fuzz_targets/lend.rs b/programs/marginfi/fuzz/fuzz_targets/lend.rs index c0f41d469..a00182ac1 100644 --- a/programs/marginfi/fuzz/fuzz_targets/lend.rs +++ b/programs/marginfi/fuzz/fuzz_targets/lend.rs @@ -6,7 +6,7 @@ use arbitrary::Arbitrary; use fixed::types::I80F48; use lazy_static::lazy_static; use libfuzzer_sys::fuzz_target; -use marginfi::{assert_eq_with_tolerance, state::marginfi_group::Bank}; +use marginfi::{assert_eq_with_tolerance, prelude::MarginfiGroup, state::marginfi_group::Bank}; use marginfi_fuzz::{ account_state::AccountsState, arbitrary_helpers::*, metrics::Metrics, MarginfiFuzzContext, }; @@ -145,6 +145,7 @@ fn setup_logging() -> anyhow::Result<()> { } fn verify_end_state<'a>(mga: &'a MarginfiFuzzContext<'a>) -> anyhow::Result<()> { + let group = AccountLoader::::try_from(&mga.marginfi_group).unwrap(); mga.banks.iter().try_for_each(|bank| { let bank_loader = AccountLoader::::try_from(&bank.bank).unwrap(); let mut bank_data = bank_loader.load_mut().unwrap(); @@ -155,10 +156,13 @@ fn verify_end_state<'a>(mga: &'a MarginfiFuzzContext<'a>) -> anyhow::Result<()> clock.unix_timestamp = latest_timestamp as i64 + 3600; - bank_data.accrue_interest(clock.unix_timestamp)?; + bank_data.accrue_interest( + clock.unix_timestamp , + &group.load().unwrap() + )?; let outstanding_fees = I80F48::from(bank_data.collected_group_fees_outstanding) - + I80F48::from(bank_data.collected_insurance_fees_outstanding); + + I80F48::from(bank_data.collected_insurance_fees_outstanding) + I80F48::from(bank_data.collected_program_fees_outstanding); let total_deposits = bank_data.get_asset_amount(bank_data.total_asset_shares.into())?; diff --git a/programs/marginfi/fuzz/src/account_state.rs b/programs/marginfi/fuzz/src/account_state.rs index a3ff6519e..35e76e7de 100644 --- a/programs/marginfi/fuzz/src/account_state.rs +++ b/programs/marginfi/fuzz/src/account_state.rs @@ -13,7 +13,10 @@ use anchor_spl::token_2022::spl_token_2022::{ state::Mint, }; use bumpalo::Bump; -use marginfi::{constants::PYTH_ID, state::marginfi_group::BankVaultType}; +use marginfi::{ + constants::{FEE_STATE_SEED, PYTH_ID}, + state::marginfi_group::BankVaultType, +}; use pyth_sdk_solana::state::{ AccountType, PriceInfo, PriceStatus, Rational, SolanaPriceAccount, MAGIC, VERSION_2, }; @@ -39,19 +42,26 @@ impl AccountsState { .alloc(Pubkey::new(transmute_to_bytes(&rand::random::<[u64; 4]>()))) } - pub fn new_sol_account<'bump>(&'bump self, lamports: u64) -> AccountInfo<'bump> { - self.new_sol_account_with_pubkey(self.random_pubkey(), lamports) + pub fn new_sol_account<'bump>( + &'bump self, + lamports: u64, + signer: bool, + writeable: bool, + ) -> AccountInfo<'bump> { + self.new_sol_account_with_pubkey(self.random_pubkey(), lamports, signer, writeable) } pub fn new_sol_account_with_pubkey<'bump>( &'bump self, pubkey: &'bump Pubkey, lamports: u64, + signer: bool, + writeable: bool, ) -> AccountInfo<'bump> { AccountInfo::new( pubkey, - true, - false, + signer, + writeable, self.bump.alloc(lamports), &mut [], &system_program::ID, @@ -60,6 +70,25 @@ impl AccountsState { ) } + pub fn new_fee_state<'a>(&'a self, program_id: Pubkey) -> (AccountInfo<'a>, u8) { + let (fee_state_key, fee_state_bump) = + Pubkey::find_program_address(&[FEE_STATE_SEED.as_bytes()], &marginfi::id()); + + ( + AccountInfo::new( + self.bump.alloc(fee_state_key), + false, + true, + self.bump.alloc(9999999), + self.allocate_dex_owned_account(256 + 8), + self.bump.alloc(program_id), + false, + Epoch::default(), + ), + fee_state_bump, + ) + } + pub fn new_token_mint<'bump>( &'bump self, rent: Rent, @@ -244,6 +273,17 @@ impl AccountsState { ) } + pub fn new_blank_owned_account_with_key( + &self, + key: Pubkey, + owner_pubkey: Pubkey, + ) -> AccountInfo { + self.new_dex_owned_blank_account_with_key( + self.bump.alloc(key), + self.bump.alloc(owner_pubkey), + ) + } + pub fn new_dex_owned_account_with_lamports<'bump>( &'bump self, unpadded_len: usize, @@ -262,6 +302,23 @@ impl AccountsState { ) } + pub fn new_dex_owned_blank_account_with_key<'bump>( + &'bump self, + key: &'bump Pubkey, + program_id: &'bump Pubkey, + ) -> AccountInfo<'bump> { + AccountInfo::new( + key, + false, + true, + self.bump.alloc(0), + &mut [], + program_id, + false, + Epoch::default(), + ) + } + fn allocate_dex_owned_account<'bump>(&'bump self, unpadded_size: usize) -> &mut [u8] { assert_eq!(unpadded_size % 8, 0); let padded_size = unpadded_size + 12; diff --git a/programs/marginfi/fuzz/src/lib.rs b/programs/marginfi/fuzz/src/lib.rs index 1ccc86e48..c550d8799 100644 --- a/programs/marginfi/fuzz/src/lib.rs +++ b/programs/marginfi/fuzz/src/lib.rs @@ -18,6 +18,7 @@ use arbitrary_helpers::{ }; use bank_accounts::{get_bank_map, BankAccounts}; use fixed_macro::types::I80F48; +use marginfi::{constants::FEE_STATE_SEED, state::fee_state::FeeState}; use marginfi::{ errors::MarginfiError, instructions::LendingPoolAddBankBumps, @@ -46,6 +47,8 @@ pub mod utils; pub struct MarginfiFuzzContext<'info> { pub marginfi_group: AccountInfo<'info>, + pub fee_state: AccountInfo<'info>, + pub fee_state_wallet: AccountInfo<'info>, pub banks: Vec>, pub marginfi_accounts: Vec>, pub owner: AccountInfo<'info>, @@ -63,13 +66,27 @@ impl<'state> MarginfiFuzzContext<'state> { n_users: u8, ) -> Self { let system_program = state.new_program(system_program::id()); - let admin = state.new_sol_account(1_000_000); + let admin = state.new_sol_account(1_000_000, true, true); + let fee_state_wallet = state.new_sol_account(1_000_000, true, true); let rent_sysvar = state.new_rent_sysvar_account(Rent::free()); - let marginfi_group = - initialize_marginfi_group(state, admin.clone(), system_program.clone()); + let fee_state = initialize_fee_state( + state, + admin.clone(), + fee_state_wallet.clone(), + rent_sysvar.clone(), + system_program.clone(), + ); + let marginfi_group = initialize_marginfi_group( + state, + admin.clone(), + fee_state.clone(), + system_program.clone(), + ); let mut marginfi_state = MarginfiFuzzContext { marginfi_group, + fee_state, + fee_state_wallet, banks: vec![], owner: admin, system_program, @@ -192,6 +209,8 @@ impl<'state> MarginfiFuzzContext<'state> { fee_vault_authority.key, bank.key, ); + let (_fee_state_key, fee_state_bump) = + Pubkey::find_program_address(&[FEE_STATE_SEED.as_bytes()], &marginfi::id()); let oracle = state.new_oracle_account( rent.clone(), @@ -207,6 +226,7 @@ impl<'state> MarginfiFuzzContext<'state> { insurance_vault: insurance_vault_bump, fee_vault_authority: fee_vault_authority_bump, fee_vault: fee_vault_bump, + fee_state: fee_state_bump, }; let token_program = match initial_bank_config.token_type { @@ -225,6 +245,8 @@ impl<'state> MarginfiFuzzContext<'state> { .unwrap(), admin: Signer::try_from(airls(&self.owner)).unwrap(), fee_payer: Signer::try_from(airls(&self.owner)).unwrap(), + fee_state: AccountLoader::try_from(airls(&self.fee_state)).unwrap(), + global_fee_wallet: ails(self.fee_state_wallet.clone()), bank_mint: Box::new(InterfaceAccount::try_from(airls(&mint)).unwrap()), bank: AccountLoader::try_from_unchecked(&marginfi::ID, airls(&bank)) .unwrap(), @@ -924,6 +946,7 @@ pub fn set_discriminator(ai: AccountInfo) { fn initialize_marginfi_group<'a>( state: &'a AccountsState, admin: AccountInfo<'a>, + fee_state: AccountInfo<'a>, system_program: AccountInfo<'a>, ) -> AccountInfo<'a> { let program_id = marginfi::id(); @@ -937,6 +960,7 @@ fn initialize_marginfi_group<'a>( marginfi_group: AccountLoader::try_from_unchecked(&program_id, airls(&marginfi_group)) .unwrap(), admin: Signer::try_from(airls(&admin)).unwrap(), + fee_state: AccountLoader::try_from_unchecked(&program_id, airls(&fee_state)).unwrap(), system_program: Program::try_from(airls(&system_program)).unwrap(), }, &[], @@ -949,6 +973,44 @@ fn initialize_marginfi_group<'a>( marginfi_group } +fn initialize_fee_state<'a>( + state: &'a AccountsState, + admin: AccountInfo<'a>, + wallet: AccountInfo<'a>, + rent: AccountInfo<'a>, + system_program: AccountInfo<'a>, +) -> AccountInfo<'a> { + let program_id = marginfi::id(); + let (fee_state, _fee_state_bump) = state.new_fee_state(program_id); + + marginfi::instructions::marginfi_group::initialize_fee_state( + Context::new( + &marginfi::id(), + &mut marginfi::instructions::InitFeeState { + payer: Signer::try_from(airls(&admin)).unwrap(), + fee_state: AccountLoader::try_from_unchecked(&program_id, airls(&fee_state)) + .unwrap(), + rent: Sysvar::from_account_info(airls(&rent)).unwrap(), + system_program: Program::try_from(airls(&system_program)).unwrap(), + }, + &[], + Default::default(), + ), + admin.key(), + wallet.key(), + // WARN: tests will fail at add_bank::system_program::transfer if this is non-zero because + // the fuzz suite does not yet support the system program. + 0, + I80F48!(0).into(), + I80F48!(0).into(), + ) + .unwrap(); + + set_discriminator::(fee_state.clone()); + + fee_state +} + #[cfg(test)] mod tests { use fixed::types::I80F48; diff --git a/programs/marginfi/fuzz/src/stubs.rs b/programs/marginfi/fuzz/src/stubs.rs index d666d2b60..a099addde 100644 --- a/programs/marginfi/fuzz/src/stubs.rs +++ b/programs/marginfi/fuzz/src/stubs.rs @@ -2,6 +2,7 @@ use anchor_lang::prelude::{AccountInfo, Clock, Pubkey}; use anchor_spl::token_2022::spl_token_2022; use lazy_static::lazy_static; use solana_program::{entrypoint::ProgramResult, instruction::Instruction, program_stubs}; +use solana_sdk::system_program; use crate::log; @@ -73,12 +74,16 @@ impl program_stubs::SyscallStubs for TestSyscallStubs { &new_account_infos, &instruction.data, ) - } else { + } else if instruction.program_id == spl_token_2022::ID { spl_token_2022::processor::Processor::process( &instruction.program_id, &new_account_infos, &instruction.data, ) + } else if instruction.program_id == system_program::ID { + panic!("System program is not yet supported"); + }else{ + panic!("program not supported"); } } diff --git a/programs/marginfi/src/constants.rs b/programs/marginfi/src/constants.rs index e3b67d31f..df691a141 100644 --- a/programs/marginfi/src/constants.rs +++ b/programs/marginfi/src/constants.rs @@ -12,6 +12,8 @@ pub const LIQUIDITY_VAULT_SEED: &str = "liquidity_vault"; pub const INSURANCE_VAULT_SEED: &str = "insurance_vault"; pub const FEE_VAULT_SEED: &str = "fee_vault"; +pub const FEE_STATE_SEED: &str = "feestate"; + pub const EMISSIONS_AUTH_SEED: &str = "emissions_auth_seed"; pub const EMISSIONS_TOKEN_ACCOUNT_SEED: &str = "emissions_token_account_seed"; @@ -38,6 +40,9 @@ cfg_if::cfg_if! { pub const LIQUIDATION_LIQUIDATOR_FEE: I80F48 = I80F48!(0.025); pub const LIQUIDATION_INSURANCE_FEE: I80F48 = I80F48!(0.025); +/// The default fee, in native SOL in native decimals (i.e. lamports) used in testing +pub const INIT_BANK_ORIGINATION_FEE_DEFAULT: u32 = 10000; + pub const SECONDS_PER_YEAR: I80F48 = I80F48!(31_536_000); pub const MAX_PYTH_ORACLE_AGE: u64 = 60; @@ -136,6 +141,11 @@ pub const EXP_10: [i128; MAX_EXP_10] = [ /// Value where total_asset_value_init_limit is considered inactive pub const TOTAL_ASSET_VALUE_INIT_LIMIT_INACTIVE: u64 = 0; +/// For testing, this is a typical program fee. +pub const PROTOCOL_FEE_RATE_DEFAULT: I80F48 = I80F48!(0.025); +/// For testing, this is a typical program fee. +pub const PROTOCOL_FEE_FIXED_DEFAULT: I80F48 = I80F48!(0.01); + pub const MIN_PYTH_PUSH_VERIFICATION_LEVEL: VerificationLevel = VerificationLevel::Full; pub const PYTH_PUSH_PYTH_SPONSORED_SHARD_ID: u16 = 0; pub const PYTH_PUSH_MARGINFI_SPONSORED_SHARD_ID: u16 = 3301; diff --git a/programs/marginfi/src/errors.rs b/programs/marginfi/src/errors.rs index b68837b47..98ff22aba 100644 --- a/programs/marginfi/src/errors.rs +++ b/programs/marginfi/src/errors.rs @@ -96,6 +96,8 @@ pub enum MarginfiError { IllegalAction, #[msg("Token22 Banks require mint account as first remaining account")] // 6047 T22MintRequired, + #[msg("Invalid ATA for global fee account")] // 6048 + InvalidFeeAta, } impl From for ProgramError { diff --git a/programs/marginfi/src/instructions/marginfi_account/borrow.rs b/programs/marginfi/src/instructions/marginfi_account/borrow.rs index 6f6952f72..2fca85e8f 100644 --- a/programs/marginfi/src/instructions/marginfi_account/borrow.rs +++ b/programs/marginfi/src/instructions/marginfi_account/borrow.rs @@ -32,6 +32,7 @@ pub fn lending_account_borrow<'info>( token_program, bank_liquidity_vault_authority, bank: bank_loader, + marginfi_group: marginfi_group_loader, .. } = ctx.accounts; let clock = Clock::get()?; @@ -50,6 +51,7 @@ pub fn lending_account_borrow<'info>( bank_loader.load_mut()?.accrue_interest( clock.unix_timestamp, + &*marginfi_group_loader.load()?, #[cfg(not(feature = "client"))] bank_loader.key(), )?; diff --git a/programs/marginfi/src/instructions/marginfi_account/close_balance.rs b/programs/marginfi/src/instructions/marginfi_account/close_balance.rs index 83e71d42f..992718d9b 100644 --- a/programs/marginfi/src/instructions/marginfi_account/close_balance.rs +++ b/programs/marginfi/src/instructions/marginfi_account/close_balance.rs @@ -13,6 +13,7 @@ pub fn lending_account_close_balance(ctx: Context) - let LendingAccountCloseBalance { marginfi_account, bank: bank_loader, + marginfi_group: marginfi_group_loader, .. } = ctx.accounts; @@ -26,6 +27,7 @@ pub fn lending_account_close_balance(ctx: Context) - bank.accrue_interest( Clock::get()?.unix_timestamp, + &*marginfi_group_loader.load()?, #[cfg(not(feature = "client"))] bank_loader.key(), )?; diff --git a/programs/marginfi/src/instructions/marginfi_account/deposit.rs b/programs/marginfi/src/instructions/marginfi_account/deposit.rs index 5855bd3d7..1f8cca936 100644 --- a/programs/marginfi/src/instructions/marginfi_account/deposit.rs +++ b/programs/marginfi/src/instructions/marginfi_account/deposit.rs @@ -32,6 +32,7 @@ pub fn lending_account_deposit<'info>( bank_liquidity_vault, token_program, bank: bank_loader, + marginfi_group: marginfi_group_loader, .. } = ctx.accounts; let clock = Clock::get()?; @@ -51,6 +52,7 @@ pub fn lending_account_deposit<'info>( bank.accrue_interest( clock.unix_timestamp, + &*marginfi_group_loader.load()?, #[cfg(not(feature = "client"))] bank_loader.key(), )?; diff --git a/programs/marginfi/src/instructions/marginfi_account/liquidate.rs b/programs/marginfi/src/instructions/marginfi_account/liquidate.rs index 60c81fbbc..aeed8d5d5 100644 --- a/programs/marginfi/src/instructions/marginfi_account/liquidate.rs +++ b/programs/marginfi/src/instructions/marginfi_account/liquidate.rs @@ -94,6 +94,7 @@ pub fn lending_account_liquidate<'info>( let LendingAccountLiquidate { liquidator_marginfi_account: liquidator_marginfi_account_loader, liquidatee_marginfi_account: liquidatee_marginfi_account_loader, + marginfi_group: marginfi_group_loader, .. } = ctx.accounts; @@ -108,13 +109,16 @@ pub fn lending_account_liquidate<'info>( ctx.accounts.token_program.key, )?; { + let group = &*marginfi_group_loader.load()?; ctx.accounts.asset_bank.load_mut()?.accrue_interest( current_timestamp, + group, #[cfg(not(feature = "client"))] ctx.accounts.asset_bank.key(), )?; ctx.accounts.liab_bank.load_mut()?.accrue_interest( current_timestamp, + group, #[cfg(not(feature = "client"))] ctx.accounts.liab_bank.key(), )?; diff --git a/programs/marginfi/src/instructions/marginfi_account/repay.rs b/programs/marginfi/src/instructions/marginfi_account/repay.rs index c511f8348..3abe9a158 100644 --- a/programs/marginfi/src/instructions/marginfi_account/repay.rs +++ b/programs/marginfi/src/instructions/marginfi_account/repay.rs @@ -32,6 +32,7 @@ pub fn lending_account_repay<'info>( bank_liquidity_vault, token_program, bank: bank_loader, + marginfi_group: marginfi_group_loader, .. } = ctx.accounts; let clock = Clock::get()?; @@ -52,6 +53,7 @@ pub fn lending_account_repay<'info>( bank.accrue_interest( clock.unix_timestamp, + &*marginfi_group_loader.load()?, #[cfg(not(feature = "client"))] bank_loader.key(), )?; diff --git a/programs/marginfi/src/instructions/marginfi_account/withdraw.rs b/programs/marginfi/src/instructions/marginfi_account/withdraw.rs index 651d50134..db42c550c 100644 --- a/programs/marginfi/src/instructions/marginfi_account/withdraw.rs +++ b/programs/marginfi/src/instructions/marginfi_account/withdraw.rs @@ -33,6 +33,7 @@ pub fn lending_account_withdraw<'info>( token_program, bank_liquidity_vault_authority, bank: bank_loader, + marginfi_group: marginfi_group_loader, .. } = ctx.accounts; let clock = Clock::get()?; @@ -53,6 +54,7 @@ pub fn lending_account_withdraw<'info>( bank_loader.load_mut()?.accrue_interest( clock.unix_timestamp, + &*marginfi_group_loader.load()?, #[cfg(not(feature = "client"))] bank_loader.key(), )?; diff --git a/programs/marginfi/src/instructions/marginfi_group/accrue_bank_interest.rs b/programs/marginfi/src/instructions/marginfi_group/accrue_bank_interest.rs index 9db568366..838681c4e 100644 --- a/programs/marginfi/src/instructions/marginfi_group/accrue_bank_interest.rs +++ b/programs/marginfi/src/instructions/marginfi_group/accrue_bank_interest.rs @@ -12,6 +12,7 @@ pub fn lending_pool_accrue_bank_interest( bank.accrue_interest( clock.unix_timestamp, + &*ctx.accounts.marginfi_group.load()?, #[cfg(not(feature = "client"))] ctx.accounts.bank.key(), )?; diff --git a/programs/marginfi/src/instructions/marginfi_group/add_pool.rs b/programs/marginfi/src/instructions/marginfi_group/add_pool.rs index 35895a1f2..7b1610323 100644 --- a/programs/marginfi/src/instructions/marginfi_group/add_pool.rs +++ b/programs/marginfi/src/instructions/marginfi_group/add_pool.rs @@ -1,10 +1,13 @@ use crate::{ constants::{ - FEE_VAULT_AUTHORITY_SEED, FEE_VAULT_SEED, INSURANCE_VAULT_AUTHORITY_SEED, + FEE_STATE_SEED, FEE_VAULT_AUTHORITY_SEED, FEE_VAULT_SEED, INSURANCE_VAULT_AUTHORITY_SEED, INSURANCE_VAULT_SEED, LIQUIDITY_VAULT_AUTHORITY_SEED, LIQUIDITY_VAULT_SEED, }, events::{GroupEventHeader, LendingPoolBankCreateEvent}, - state::marginfi_group::{Bank, BankConfig, BankConfigCompact, MarginfiGroup}, + state::{ + fee_state::FeeState, + marginfi_group::{Bank, BankConfig, BankConfigCompact, MarginfiGroup}, + }, MarginfiResult, }; use anchor_lang::prelude::*; @@ -19,6 +22,16 @@ pub fn lending_pool_add_bank( ctx: Context, bank_config: BankConfig, ) -> MarginfiResult { + // Transfer the flat sol init fee to the global fee wallet + let fee_state = ctx.accounts.fee_state.load()?; + let bank_init_flat_sol_fee = fee_state.bank_init_flat_sol_fee; + if bank_init_flat_sol_fee > 0 { + anchor_lang::system_program::transfer( + ctx.accounts.transfer_flat_fee(), + bank_init_flat_sol_fee as u64, + )?; + } + let LendingPoolAddBank { bank_mint, liquidity_vault, @@ -69,6 +82,10 @@ pub fn lending_pool_add_bank( Ok(()) } +/* +. Aligns line spacing for easier comparison against with_seed +. +*/ #[derive(Accounts)] #[instruction(bank_config: BankConfigCompact)] pub struct LendingPoolAddBank<'info> { @@ -80,168 +97,21 @@ pub struct LendingPoolAddBank<'info> { )] pub admin: Signer<'info>, + /// Pays to init accounts and pays `fee_state.bank_init_flat_sol_fee` lamports to the protocol #[account(mut)] pub fee_payer: Signer<'info>, - pub bank_mint: Box>, - - #[account( - init, - space = 8 + std::mem::size_of::(), - payer = fee_payer, - )] - pub bank: AccountLoader<'info, Bank>, - - /// CHECK: ⋐ ͡⋄ ω ͡⋄ ⋑ - #[account( - seeds = [ - LIQUIDITY_VAULT_AUTHORITY_SEED.as_bytes(), - bank.key().as_ref(), - ], - bump - )] - pub liquidity_vault_authority: AccountInfo<'info>, - - #[account( - init, - payer = fee_payer, - token::mint = bank_mint, - token::authority = liquidity_vault_authority, - seeds = [ - LIQUIDITY_VAULT_SEED.as_bytes(), - bank.key().as_ref(), - ], - bump, - )] - pub liquidity_vault: Box>, - - /// CHECK: ⋐ ͡⋄ ω ͡⋄ ⋑ - #[account( - seeds = [ - INSURANCE_VAULT_AUTHORITY_SEED.as_bytes(), - bank.key().as_ref(), - ], - bump - )] - pub insurance_vault_authority: AccountInfo<'info>, - + // Note: there is just one FeeState per program, so no further check is required. #[account( - init, - payer = fee_payer, - token::mint = bank_mint, - token::authority = insurance_vault_authority, - seeds = [ - INSURANCE_VAULT_SEED.as_bytes(), - bank.key().as_ref(), - ], + seeds = [FEE_STATE_SEED.as_bytes()], bump, + has_one = global_fee_wallet )] - pub insurance_vault: Box>, - - /// CHECK: ⋐ ͡⋄ ω ͡⋄ ⋑ - #[account( - seeds = [ - FEE_VAULT_AUTHORITY_SEED.as_bytes(), - bank.key().as_ref(), - ], - bump - )] - pub fee_vault_authority: AccountInfo<'info>, - - #[account( - init, - payer = fee_payer, - token::mint = bank_mint, - token::authority = fee_vault_authority, - seeds = [ - FEE_VAULT_SEED.as_bytes(), - bank.key().as_ref(), - ], - bump, - )] - pub fee_vault: Box>, - - pub rent: Sysvar<'info, Rent>, - pub token_program: Interface<'info, TokenInterface>, - pub system_program: Program<'info, System>, -} - -/// A copy of lending_pool_add_bank but with an additional bank seed provided. -/// This seed is used by the LendingPoolAddBankWithSeed.bank to generate a -/// PDA account to sign for newly added bank transactions securely. -/// The previous lending_pool_add_bank is preserved for backwards-compatibility. -pub fn lending_pool_add_bank_with_seed( - ctx: Context, - bank_config: BankConfig, - _bank_seed: u64, -) -> MarginfiResult { - let LendingPoolAddBankWithSeed { - bank_mint, - liquidity_vault, - insurance_vault, - fee_vault, - bank: bank_loader, - .. - } = ctx.accounts; - - let mut bank = bank_loader.load_init()?; - - let liquidity_vault_bump = ctx.bumps.liquidity_vault; - let liquidity_vault_authority_bump = ctx.bumps.liquidity_vault_authority; - let insurance_vault_bump = ctx.bumps.insurance_vault; - let insurance_vault_authority_bump = ctx.bumps.insurance_vault_authority; - let fee_vault_bump = ctx.bumps.fee_vault; - let fee_vault_authority_bump = ctx.bumps.fee_vault_authority; - - *bank = Bank::new( - ctx.accounts.marginfi_group.key(), - bank_config, - bank_mint.key(), - bank_mint.decimals, - liquidity_vault.key(), - insurance_vault.key(), - fee_vault.key(), - Clock::get().unwrap().unix_timestamp, - liquidity_vault_bump, - liquidity_vault_authority_bump, - insurance_vault_bump, - insurance_vault_authority_bump, - fee_vault_bump, - fee_vault_authority_bump, - ); - - bank.config.validate()?; - bank.config.validate_oracle_setup(ctx.remaining_accounts)?; - - emit!(LendingPoolBankCreateEvent { - header: GroupEventHeader { - marginfi_group: ctx.accounts.marginfi_group.key(), - signer: Some(*ctx.accounts.admin.key) - }, - bank: bank_loader.key(), - mint: bank_mint.key(), - }); - - Ok(()) -} - -/// A copy of LendingPoolAddBank but with an additional bank seed provided. -/// This seed is used by the LendingPoolAddBankWithSeed.bank to generate a -/// PDA account to sign for newly added bank transactions securely. -/// The previous LendingPoolAddBank is preserved for backwards-compatibility. -#[derive(Accounts)] -#[instruction(bank_config: BankConfigCompact, bank_seed: u64)] -pub struct LendingPoolAddBankWithSeed<'info> { - pub marginfi_group: AccountLoader<'info, MarginfiGroup>, - - #[account( - mut, - address = marginfi_group.load()?.admin, - )] - pub admin: Signer<'info>, + pub fee_state: AccountLoader<'info, FeeState>, + /// CHECK: The fee admin's native SOL wallet, validated against fee state #[account(mut)] - pub fee_payer: Signer<'info>, + pub global_fee_wallet: AccountInfo<'info>, pub bank_mint: Box>, @@ -249,12 +119,12 @@ pub struct LendingPoolAddBankWithSeed<'info> { init, space = 8 + std::mem::size_of::(), payer = fee_payer, - seeds = [ - marginfi_group.key().as_ref(), - bank_mint.key().as_ref(), - &bank_seed.to_le_bytes(), - ], - bump, + /* + In the "with seed" version of this ix, the seed is defined here + . + . + . + */ )] pub bank: AccountLoader<'info, Bank>, @@ -331,3 +201,17 @@ pub struct LendingPoolAddBankWithSeed<'info> { pub token_program: Interface<'info, TokenInterface>, pub system_program: Program<'info, System>, } + +impl<'info> LendingPoolAddBank<'info> { + fn transfer_flat_fee( + &self, + ) -> CpiContext<'_, '_, '_, 'info, anchor_lang::system_program::Transfer<'info>> { + CpiContext::new( + self.system_program.to_account_info(), + anchor_lang::system_program::Transfer { + from: self.fee_payer.to_account_info(), + to: self.global_fee_wallet.to_account_info(), + }, + ) + } +} diff --git a/programs/marginfi/src/instructions/marginfi_group/add_pool_with_seed.rs b/programs/marginfi/src/instructions/marginfi_group/add_pool_with_seed.rs new file mode 100644 index 000000000..a0bcee795 --- /dev/null +++ b/programs/marginfi/src/instructions/marginfi_group/add_pool_with_seed.rs @@ -0,0 +1,217 @@ +use crate::{ + constants::{ + FEE_STATE_SEED, FEE_VAULT_AUTHORITY_SEED, FEE_VAULT_SEED, INSURANCE_VAULT_AUTHORITY_SEED, + INSURANCE_VAULT_SEED, LIQUIDITY_VAULT_AUTHORITY_SEED, LIQUIDITY_VAULT_SEED, + }, + events::{GroupEventHeader, LendingPoolBankCreateEvent}, + state::{ + fee_state::FeeState, + marginfi_group::{Bank, BankConfig, BankConfigCompact, MarginfiGroup}, + }, + MarginfiResult, +}; +use anchor_lang::prelude::*; +use anchor_spl::token_interface::*; + +/// A copy of lending_pool_add_bank but with an additional bank seed provided. +/// This seed is used by the LendingPoolAddBankWithSeed.bank to generate a +/// PDA account to sign for newly added bank transactions securely. +/// The previous lending_pool_add_bank is preserved for backwards-compatibility. +pub fn lending_pool_add_bank_with_seed( + ctx: Context, + bank_config: BankConfig, + _bank_seed: u64, +) -> MarginfiResult { + // Transfer the flat sol init fee to the global fee wallet + let fee_state = ctx.accounts.fee_state.load()?; + let bank_init_flat_sol_fee = fee_state.bank_init_flat_sol_fee; + if bank_init_flat_sol_fee > 0 { + anchor_lang::system_program::transfer( + ctx.accounts.transfer_flat_fee(), + bank_init_flat_sol_fee as u64, + )?; + } + + let LendingPoolAddBankWithSeed { + bank_mint, + liquidity_vault, + insurance_vault, + fee_vault, + bank: bank_loader, + .. + } = ctx.accounts; + + let mut bank = bank_loader.load_init()?; + + let liquidity_vault_bump = ctx.bumps.liquidity_vault; + let liquidity_vault_authority_bump = ctx.bumps.liquidity_vault_authority; + let insurance_vault_bump = ctx.bumps.insurance_vault; + let insurance_vault_authority_bump = ctx.bumps.insurance_vault_authority; + let fee_vault_bump = ctx.bumps.fee_vault; + let fee_vault_authority_bump = ctx.bumps.fee_vault_authority; + + *bank = Bank::new( + ctx.accounts.marginfi_group.key(), + bank_config, + bank_mint.key(), + bank_mint.decimals, + liquidity_vault.key(), + insurance_vault.key(), + fee_vault.key(), + Clock::get().unwrap().unix_timestamp, + liquidity_vault_bump, + liquidity_vault_authority_bump, + insurance_vault_bump, + insurance_vault_authority_bump, + fee_vault_bump, + fee_vault_authority_bump, + ); + + bank.config.validate()?; + bank.config.validate_oracle_setup(ctx.remaining_accounts)?; + + emit!(LendingPoolBankCreateEvent { + header: GroupEventHeader { + marginfi_group: ctx.accounts.marginfi_group.key(), + signer: Some(*ctx.accounts.admin.key) + }, + bank: bank_loader.key(), + mint: bank_mint.key(), + }); + + Ok(()) +} + +/// A copy of LendingPoolAddBank but with an additional bank seed provided. +/// This seed is used by the LendingPoolAddBankWithSeed.bank to generate a +/// PDA account to sign for newly added bank transactions securely. +/// The previous LendingPoolAddBank is preserved for backwards-compatibility. +#[derive(Accounts)] +#[instruction(bank_config: BankConfigCompact, bank_seed: u64)] +pub struct LendingPoolAddBankWithSeed<'info> { + pub marginfi_group: AccountLoader<'info, MarginfiGroup>, + + #[account( + mut, + address = marginfi_group.load()?.admin, + )] + pub admin: Signer<'info>, + + /// Pays to init accounts and pays `fee_state.bank_init_flat_sol_fee` lamports to the protocol + #[account(mut)] + pub fee_payer: Signer<'info>, + + // Note: there is just one FeeState per program, so no further check is required. + #[account( + seeds = [FEE_STATE_SEED.as_bytes()], + bump, + has_one = global_fee_wallet + )] + pub fee_state: AccountLoader<'info, FeeState>, + + /// CHECK: The fee admin's native SOL wallet, validated against fee state + #[account(mut)] + pub global_fee_wallet: AccountInfo<'info>, + + pub bank_mint: Box>, + + #[account( + init, + space = 8 + std::mem::size_of::(), + payer = fee_payer, + seeds = [ + marginfi_group.key().as_ref(), + bank_mint.key().as_ref(), + &bank_seed.to_le_bytes(), + ], + bump, + )] + pub bank: AccountLoader<'info, Bank>, + + /// CHECK: ⋐ ͡⋄ ω ͡⋄ ⋑ + #[account( + seeds = [ + LIQUIDITY_VAULT_AUTHORITY_SEED.as_bytes(), + bank.key().as_ref(), + ], + bump + )] + pub liquidity_vault_authority: AccountInfo<'info>, + + #[account( + init, + payer = fee_payer, + token::mint = bank_mint, + token::authority = liquidity_vault_authority, + seeds = [ + LIQUIDITY_VAULT_SEED.as_bytes(), + bank.key().as_ref(), + ], + bump, + )] + pub liquidity_vault: Box>, + + /// CHECK: ⋐ ͡⋄ ω ͡⋄ ⋑ + #[account( + seeds = [ + INSURANCE_VAULT_AUTHORITY_SEED.as_bytes(), + bank.key().as_ref(), + ], + bump + )] + pub insurance_vault_authority: AccountInfo<'info>, + + #[account( + init, + payer = fee_payer, + token::mint = bank_mint, + token::authority = insurance_vault_authority, + seeds = [ + INSURANCE_VAULT_SEED.as_bytes(), + bank.key().as_ref(), + ], + bump, + )] + pub insurance_vault: Box>, + + /// CHECK: ⋐ ͡⋄ ω ͡⋄ ⋑ + #[account( + seeds = [ + FEE_VAULT_AUTHORITY_SEED.as_bytes(), + bank.key().as_ref(), + ], + bump + )] + pub fee_vault_authority: AccountInfo<'info>, + + #[account( + init, + payer = fee_payer, + token::mint = bank_mint, + token::authority = fee_vault_authority, + seeds = [ + FEE_VAULT_SEED.as_bytes(), + bank.key().as_ref(), + ], + bump, + )] + pub fee_vault: Box>, + + pub rent: Sysvar<'info, Rent>, + pub token_program: Interface<'info, TokenInterface>, + pub system_program: Program<'info, System>, +} + +impl<'info> LendingPoolAddBankWithSeed<'info> { + fn transfer_flat_fee( + &self, + ) -> CpiContext<'_, '_, '_, 'info, anchor_lang::system_program::Transfer<'info>> { + CpiContext::new( + self.system_program.to_account_info(), + anchor_lang::system_program::Transfer { + from: self.fee_payer.to_account_info(), + to: self.global_fee_wallet.to_account_info(), + }, + ) + } +} diff --git a/programs/marginfi/src/instructions/marginfi_group/collect_bank_fees.rs b/programs/marginfi/src/instructions/marginfi_group/collect_bank_fees.rs index aec5bb29a..dbd366fbb 100644 --- a/programs/marginfi/src/instructions/marginfi_group/collect_bank_fees.rs +++ b/programs/marginfi/src/instructions/marginfi_group/collect_bank_fees.rs @@ -1,6 +1,6 @@ -use crate::constants::{FEE_VAULT_AUTHORITY_SEED, INSURANCE_VAULT_AUTHORITY_SEED}; +use crate::constants::{FEE_STATE_SEED, FEE_VAULT_AUTHORITY_SEED, INSURANCE_VAULT_AUTHORITY_SEED}; use crate::events::{GroupEventHeader, LendingPoolBankCollectFeesEvent}; -use crate::utils; +use crate::state::fee_state::FeeState; use crate::{ bank_signer, constants::{ @@ -10,7 +10,9 @@ use crate::{ state::marginfi_group::{Bank, BankVaultType, MarginfiGroup}, MarginfiResult, }; +use crate::{check, utils, MarginfiError}; use anchor_lang::prelude::*; +use anchor_spl::associated_token::get_associated_token_address_with_program_id; use anchor_spl::token_interface::{TokenAccount, TokenInterface}; use fixed::types::I80F48; use std::cmp::min; @@ -18,16 +20,32 @@ use std::cmp::min; pub fn lending_pool_collect_bank_fees<'info>( mut ctx: Context<'_, '_, 'info, 'info, LendingPoolCollectBankFees<'info>>, ) -> MarginfiResult { + let mut bank = ctx.accounts.bank.load_mut()?; + + // Validate the program fee ata is correct + { + let mint = &bank.mint; + let global_fee_wallet = &ctx.accounts.fee_state.load()?.global_fee_wallet; + let token_program_id = &ctx.accounts.token_program.key(); + let program_fee_ata = &ctx.accounts.fee_ata.key(); + let ata_expected = + get_associated_token_address_with_program_id(global_fee_wallet, mint, token_program_id); + check!( + program_fee_ata.eq(&ata_expected), + MarginfiError::InvalidFeeAta + ); + } + let LendingPoolCollectBankFees { liquidity_vault_authority, insurance_vault, fee_vault, token_program, liquidity_vault, + fee_ata, .. } = ctx.accounts; - let mut bank = ctx.accounts.bank.load_mut()?; let maybe_bank_mint = utils::maybe_take_bank_mint(&mut ctx.remaining_accounts, &bank, token_program.key)?; @@ -105,6 +123,44 @@ pub fn lending_pool_collect_bank_fees<'info>( ctx.remaining_accounts, )?; + // Transfer the program fee + let (program_fee_transfer_amount, new_outstanding_program_fees) = { + let outstanding = I80F48::from(bank.collected_program_fees_outstanding); + let transfer_amount = min(outstanding, available_liquidity).int(); + + ( + transfer_amount.int(), + outstanding + .checked_sub(transfer_amount) + .ok_or_else(math_error!())?, + ) + }; + + available_liquidity = available_liquidity + .checked_sub(program_fee_transfer_amount) + .ok_or_else(math_error!())?; + + assert!(available_liquidity >= I80F48::ZERO); + + bank.collected_program_fees_outstanding = new_outstanding_program_fees.into(); + + bank.withdraw_spl_transfer( + program_fee_transfer_amount + .checked_to_num() + .ok_or_else(math_error!())?, + liquidity_vault.to_account_info(), + fee_ata.to_account_info(), + liquidity_vault_authority.to_account_info(), + maybe_bank_mint.as_ref(), + token_program.to_account_info(), + bank_signer!( + BankVaultType::Liquidity, + ctx.accounts.bank.key(), + bank.liquidity_vault_authority_bump + ), + ctx.remaining_accounts, + )?; + emit!(LendingPoolBankCollectFeesEvent { header: GroupEventHeader { marginfi_group: ctx.accounts.marginfi_group.key(), @@ -174,6 +230,19 @@ pub struct LendingPoolCollectBankFees<'info> { )] pub fee_vault: AccountInfo<'info>, + // Note: there is just one FeeState per program, so no further check is required. + #[account( + seeds = [FEE_STATE_SEED.as_bytes()], + bump, + )] + pub fee_state: AccountLoader<'info, FeeState>, + + /// CHECK: Cannonical ATA of the `FeeState.global_fee_wallet` for the mint used by this bank + /// (validated in handler). Must already exist, may require initializing the ATA if it does not + /// already exist prior to this ix. + #[account(mut)] + pub fee_ata: InterfaceAccount<'info, TokenAccount>, + pub token_program: Interface<'info, TokenInterface>, } diff --git a/programs/marginfi/src/instructions/marginfi_group/config_group_fee.rs b/programs/marginfi/src/instructions/marginfi_group/config_group_fee.rs new file mode 100644 index 000000000..303f3caca --- /dev/null +++ b/programs/marginfi/src/instructions/marginfi_group/config_group_fee.rs @@ -0,0 +1,28 @@ +use anchor_lang::prelude::*; + +use crate::{constants::FEE_STATE_SEED, state::fee_state::FeeState, MarginfiGroup, MarginfiResult}; + +#[derive(Accounts)] +pub struct ConfigGroupFee<'info> { + #[account(mut)] + pub marginfi_group: AccountLoader<'info, MarginfiGroup>, + + /// `global_fee_admin` of the FeeState + pub global_fee_admin: Signer<'info>, + + // Note: there is just one FeeState per program, so no further check is required. + #[account( + seeds = [FEE_STATE_SEED.as_bytes()], + bump, + has_one = global_fee_admin + )] + pub fee_state: AccountLoader<'info, FeeState>, +} + +pub fn config_group_fee(ctx: Context, flag: u64) -> MarginfiResult { + let mut marginfi_group = ctx.accounts.marginfi_group.load_mut()?; + + marginfi_group.set_flags(flag)?; + + Ok(()) +} diff --git a/programs/marginfi/src/instructions/marginfi_group/edit_global_fee.rs b/programs/marginfi/src/instructions/marginfi_group/edit_global_fee.rs new file mode 100644 index 000000000..e538bb512 --- /dev/null +++ b/programs/marginfi/src/instructions/marginfi_group/edit_global_fee.rs @@ -0,0 +1,39 @@ +// Global fee admin calls this to edit the fee rate or the fee wallet. + +use crate::constants::FEE_STATE_SEED; +use crate::state::fee_state; +use crate::state::marginfi_group::WrappedI80F48; +use anchor_lang::prelude::*; +use fee_state::FeeState; + +pub fn edit_fee_state( + ctx: Context, + fee_wallet: Pubkey, + bank_init_flat_sol_fee: u32, + program_fee_fixed: WrappedI80F48, + program_fee_rate: WrappedI80F48, +) -> Result<()> { + let mut fee_state = ctx.accounts.fee_state.load_mut()?; + fee_state.global_fee_wallet = fee_wallet; + fee_state.bank_init_flat_sol_fee = bank_init_flat_sol_fee; + fee_state.program_fee_fixed = program_fee_fixed; + fee_state.program_fee_rate = program_fee_rate; + + Ok(()) +} + +#[derive(Accounts)] +pub struct EditFeeState<'info> { + /// Admin of the global FeeState + #[account(mut)] + pub global_fee_admin: Signer<'info>, + + // Note: there is just one FeeState per program, so no further check is required. + #[account( + mut, + seeds = [FEE_STATE_SEED.as_bytes()], + bump, + has_one = global_fee_admin + )] + pub fee_state: AccountLoader<'info, FeeState>, +} diff --git a/programs/marginfi/src/instructions/marginfi_group/handle_bankruptcy.rs b/programs/marginfi/src/instructions/marginfi_group/handle_bankruptcy.rs index accdc428c..5a94e42e5 100644 --- a/programs/marginfi/src/instructions/marginfi_group/handle_bankruptcy.rs +++ b/programs/marginfi/src/instructions/marginfi_group/handle_bankruptcy.rs @@ -59,6 +59,7 @@ pub fn lending_pool_handle_bankruptcy<'info>( bank.accrue_interest( clock.unix_timestamp, + &*marginfi_group_loader.load()?, #[cfg(not(feature = "client"))] bank_loader.key(), )?; diff --git a/programs/marginfi/src/instructions/marginfi_group/init_global_fee_state.rs b/programs/marginfi/src/instructions/marginfi_group/init_global_fee_state.rs new file mode 100644 index 000000000..11476b893 --- /dev/null +++ b/programs/marginfi/src/instructions/marginfi_group/init_global_fee_state.rs @@ -0,0 +1,55 @@ +// Runs once per program to init the global fee state. +use crate::constants::FEE_STATE_SEED; +use crate::state::fee_state; +use crate::state::marginfi_group::WrappedI80F48; +use anchor_lang::prelude::*; +use fee_state::FeeState; + +#[allow(unused_variables)] +pub fn initialize_fee_state( + ctx: Context, + admin_key: Pubkey, + fee_wallet: Pubkey, + bank_init_flat_sol_fee: u32, + program_fee_fixed: WrappedI80F48, + program_fee_rate: WrappedI80F48, +) -> Result<()> { + let mut fee_state = ctx.accounts.fee_state.load_init()?; + cfg_if::cfg_if! { + if #[cfg(all(feature = "mainnet-beta", not(feature = "ignore-fee-deploy")))] { + if ctx.accounts.payer.key != &pubkey!("3HGdGLrnK9DsnHi1mCrUMLGfQHcu6xUrXhMY14GYjqvM") { + panic!("The mrgn program multisig must sign on mainnet."); + } + } + } + fee_state.global_fee_admin = admin_key; + fee_state.global_fee_wallet = fee_wallet; + fee_state.key = ctx.accounts.fee_state.key(); + fee_state.bank_init_flat_sol_fee = bank_init_flat_sol_fee; + fee_state.bump_seed = ctx.bumps.fee_state; + fee_state.program_fee_fixed = program_fee_fixed; + fee_state.program_fee_rate = program_fee_rate; + + Ok(()) +} + +#[derive(Accounts)] +pub struct InitFeeState<'info> { + /// Pays the init fee + #[account(mut)] + pub payer: Signer<'info>, + + #[account( + init, + seeds = [ + FEE_STATE_SEED.as_bytes() + ], + bump, + payer = payer, + space = 8 + FeeState::LEN, + )] + pub fee_state: AccountLoader<'info, FeeState>, + + pub rent: Sysvar<'info, Rent>, + pub system_program: Program<'info, System>, +} diff --git a/programs/marginfi/src/instructions/marginfi_group/initialize.rs b/programs/marginfi/src/instructions/marginfi_group/initialize.rs index 2399e3ff7..4b70804ef 100644 --- a/programs/marginfi/src/instructions/marginfi_group/initialize.rs +++ b/programs/marginfi/src/instructions/marginfi_group/initialize.rs @@ -1,4 +1,6 @@ +use crate::constants::FEE_STATE_SEED; use crate::events::{GroupEventHeader, MarginfiGroupCreateEvent}; +use crate::state::fee_state::FeeState; use crate::{state::marginfi_group::MarginfiGroup, MarginfiResult}; use anchor_lang::prelude::*; @@ -7,6 +9,12 @@ pub fn initialize_group(ctx: Context) -> MarginfiResult marginfi_group.set_initial_configuration(ctx.accounts.admin.key()); + let fee_state = ctx.accounts.fee_state.load()?; + + marginfi_group.fee_state_cache.global_fee_wallet = fee_state.global_fee_wallet; + marginfi_group.fee_state_cache.program_fee_fixed = fee_state.program_fee_fixed; + marginfi_group.fee_state_cache.program_fee_rate = fee_state.program_fee_rate; + emit!(MarginfiGroupCreateEvent { header: GroupEventHeader { marginfi_group: ctx.accounts.marginfi_group.key(), @@ -29,5 +37,11 @@ pub struct MarginfiGroupInitialize<'info> { #[account(mut)] pub admin: Signer<'info>, + #[account( + seeds = [FEE_STATE_SEED.as_bytes()], + bump, + )] + pub fee_state: AccountLoader<'info, FeeState>, + pub system_program: Program<'info, System>, } diff --git a/programs/marginfi/src/instructions/marginfi_group/mod.rs b/programs/marginfi/src/instructions/marginfi_group/mod.rs index 33bc6a914..47ae9d15e 100644 --- a/programs/marginfi/src/instructions/marginfi_group/mod.rs +++ b/programs/marginfi/src/instructions/marginfi_group/mod.rs @@ -1,15 +1,25 @@ mod accrue_bank_interest; mod add_pool; +mod add_pool_with_seed; mod collect_bank_fees; +mod config_group_fee; mod configure; mod configure_bank; +mod edit_global_fee; mod handle_bankruptcy; +mod init_global_fee_state; mod initialize; +mod propagate_fee_state; pub use accrue_bank_interest::*; pub use add_pool::*; +pub use add_pool_with_seed::*; pub use collect_bank_fees::*; +pub use config_group_fee::*; pub use configure::*; pub use configure_bank::*; +pub use edit_global_fee::*; pub use handle_bankruptcy::*; +pub use init_global_fee_state::*; pub use initialize::*; +pub use propagate_fee_state::*; diff --git a/programs/marginfi/src/instructions/marginfi_group/propagate_fee_state.rs b/programs/marginfi/src/instructions/marginfi_group/propagate_fee_state.rs new file mode 100644 index 000000000..3b71e369d --- /dev/null +++ b/programs/marginfi/src/instructions/marginfi_group/propagate_fee_state.rs @@ -0,0 +1,28 @@ +use anchor_lang::prelude::*; + +use crate::{constants::FEE_STATE_SEED, state::fee_state::FeeState, MarginfiGroup}; + +#[derive(Accounts)] +pub struct PropagateFee<'info> { + // Note: there is just one FeeState per program, so no further check is required. + #[account( + seeds = [FEE_STATE_SEED.as_bytes()], + bump, + )] + pub fee_state: AccountLoader<'info, FeeState>, + + /// Any group, this ix is permisionless and can propogate the fee to any group + #[account(mut)] + pub marginfi_group: AccountLoader<'info, MarginfiGroup>, +} + +pub fn propagate_fee(ctx: Context) -> Result<()> { + let mut group = ctx.accounts.marginfi_group.load_mut()?; + let fee_state = ctx.accounts.fee_state.load()?; + + group.fee_state_cache.global_fee_wallet = fee_state.global_fee_wallet; + group.fee_state_cache.program_fee_fixed = fee_state.program_fee_fixed; + group.fee_state_cache.program_fee_rate = fee_state.program_fee_rate; + + Ok(()) +} diff --git a/programs/marginfi/src/lib.rs b/programs/marginfi/src/lib.rs index d9dbd9f70..5f3a76dfd 100644 --- a/programs/marginfi/src/lib.rs +++ b/programs/marginfi/src/lib.rs @@ -10,6 +10,7 @@ pub mod utils; use anchor_lang::prelude::*; use instructions::*; use prelude::*; +use state::marginfi_group::WrappedI80F48; use state::marginfi_group::{BankConfigCompact, BankConfigOpt}; cfg_if::cfg_if! { @@ -214,6 +215,55 @@ pub mod marginfi { pub fn marginfi_account_close(ctx: Context) -> MarginfiResult { marginfi_account::close_account(ctx) } + + /// (Runs once per program) Configures the fee state account, where the global admin sets fees + /// that are assessed to the protocol + pub fn init_global_fee_state( + ctx: Context, + admin: Pubkey, + fee_wallet: Pubkey, + bank_init_flat_sol_fee: u32, + program_fee_fixed: WrappedI80F48, + program_fee_rate: WrappedI80F48, + ) -> MarginfiResult { + marginfi_group::initialize_fee_state( + ctx, + admin, + fee_wallet, + bank_init_flat_sol_fee, + program_fee_fixed, + program_fee_rate, + ) + } + + /// (global fee admin only) Adjust fees or the destination wallet + pub fn edit_global_fee_state( + ctx: Context, + fee_wallet: Pubkey, + bank_init_flat_sol_fee: u32, + program_fee_fixed: WrappedI80F48, + program_fee_rate: WrappedI80F48, + ) -> MarginfiResult { + marginfi_group::edit_fee_state( + ctx, + fee_wallet, + bank_init_flat_sol_fee, + program_fee_fixed, + program_fee_rate, + ) + } + + /// (Permissionless) Force any group to adopt the current FeeState settings + pub fn propagate_fee_state(ctx: Context) -> MarginfiResult { + marginfi_group::propagate_fee(ctx) + } + + /// (global fee admin only) Enable or disable program fees for any group. Does not require the + /// group admin to sign: the global fee state admin can turn program fees on or off for any + /// group + pub fn config_group_fee(ctx: Context, flag: u64) -> MarginfiResult { + marginfi_group::config_group_fee(ctx, flag) + } } #[cfg(not(feature = "no-entrypoint"))] diff --git a/programs/marginfi/src/state/fee_state.rs b/programs/marginfi/src/state/fee_state.rs new file mode 100644 index 000000000..0d7f61425 --- /dev/null +++ b/programs/marginfi/src/state/fee_state.rs @@ -0,0 +1,42 @@ +use anchor_lang::prelude::*; + +use crate::{assert_struct_align, assert_struct_size}; + +use super::marginfi_group::WrappedI80F48; + +assert_struct_size!(FeeState, 256); +assert_struct_align!(FeeState, 8); + +/// Unique per-program. The Program Owner uses this account to administrate fees collected by the protocol +#[account(zero_copy)] +#[repr(C)] +pub struct FeeState { + /// The fee state's own key. A PDA derived from just `b"feestate"` + pub key: Pubkey, + /// Can modify fees + pub global_fee_admin: Pubkey, + /// The base wallet for all protocol fees. All SOL fees go to this wallet. All non-SOL fees go + /// to the cannonical ATA of this wallet for that asset. + pub global_fee_wallet: Pubkey, + // Reserved for future use, forces 8-byte alignment + pub placeholder0: u64, + /// Flat fee assessed when a new bank is initialized, in lamports. + /// * In SOL, in native decimals. + pub bank_init_flat_sol_fee: u32, + pub bump_seed: u8, + // Pad to next 8-byte multiple + _padding0: [u8; 4], + // Pad to 128 bytes + _padding1: [u8; 15], + /// Fee collected by the program owner from all groups + pub program_fee_fixed: WrappedI80F48, + /// Fee collected by the program owner from all groups + pub program_fee_rate: WrappedI80F48, + // Reserved for future use + _reserved0: [u8; 32], + _reserved1: [u8; 64], +} + +impl FeeState { + pub const LEN: usize = std::mem::size_of::(); +} diff --git a/programs/marginfi/src/state/marginfi_group.rs b/programs/marginfi/src/state/marginfi_group.rs index ead16d9d7..f7a553927 100644 --- a/programs/marginfi/src/state/marginfi_group.rs +++ b/programs/marginfi/src/state/marginfi_group.rs @@ -23,6 +23,7 @@ use crate::{ use anchor_lang::prelude::borsh; use anchor_lang::prelude::*; use anchor_spl::token_interface::*; +use bytemuck::{Pod, Zeroable}; use fixed::types::I80F48; use pyth_sdk_solana::{state::SolanaPriceAccount, PriceFeed}; use pyth_solana_receiver_sdk::price_update::FeedId; @@ -36,6 +37,7 @@ use std::{ #[cfg(any(feature = "test", feature = "client"))] use type_layout::TypeLayout; +assert_struct_size!(MarginfiGroup, 1056); #[account(zero_copy)] #[cfg_attr( any(feature = "test", feature = "client"), @@ -44,11 +46,34 @@ use type_layout::TypeLayout; #[derive(Default)] pub struct MarginfiGroup { pub admin: Pubkey, - pub _padding_0: [[u64; 2]; 32], + /// Bitmask for group settings flags. + /// * Bit 0: If set, program-level fees are enabled. + /// * Bits 1-63: Reserved for future use. + pub group_flags: u64, + /// Caches information from the global `FeeState` so the FeeState can be omitted on certain ixes + pub fee_state_cache: FeeStateCache, + pub _padding_0: [[u64; 2]; 27], pub _padding_1: [[u64; 2]; 32], + pub _padding_3: u64, +} + +#[derive( + AnchorSerialize, AnchorDeserialize, Clone, Copy, Default, Zeroable, Pod, Debug, PartialEq, Eq, +)] +#[repr(C)] +pub struct FeeStateCache { + pub global_fee_wallet: Pubkey, + pub program_fee_fixed: WrappedI80F48, + pub program_fee_rate: WrappedI80F48, } impl MarginfiGroup { + const PROGRAM_FEES_ENABLED: u64 = 1; + + /// Bits in use for flag settings. + const ALLOWED_FLAGS: u64 = Self::PROGRAM_FEES_ENABLED; + // To add: const ALLOWED_FLAGS: u64 = PROGRAM_FEES_ENABLED | ANOTHER_FEATURE_BIT; + /// Configure the group parameters. /// This function validates config values so the group remains in a valid state. /// Any modification of group config should happen through this function. @@ -64,6 +89,34 @@ impl MarginfiGroup { #[allow(clippy::too_many_arguments)] pub fn set_initial_configuration(&mut self, admin_pk: Pubkey) { self.admin = admin_pk; + self.group_flags = Self::PROGRAM_FEES_ENABLED; + } + + pub fn get_group_bank_config(&self) -> GroupBankConfig { + GroupBankConfig { + program_fees: self.group_flags == Self::PROGRAM_FEES_ENABLED, + } + } + + /// Validates that only allowed flags are being set. + pub fn validate_flags(flag: u64) -> MarginfiResult { + // Note: 0xnnnn & 0x1110, is nonzero for 0x1000 & 0x1110 + let flag_ok = flag & !Self::ALLOWED_FLAGS == 0; + check!(flag_ok, MarginfiError::IllegalFlag); + + Ok(()) + } + + /// Sets flag and errors if a disallowed flag is set + pub fn set_flags(&mut self, flag: u64) -> MarginfiResult { + Self::validate_flags(flag)?; + self.group_flags = flag; + Ok(()) + } + + /// True if program fees are enabled + pub fn program_fees_enabled(&self) -> bool { + (self.group_flags & Self::PROGRAM_FEES_ENABLED) != 0 } } @@ -101,16 +154,26 @@ pub struct InterestRateConfigCompact { } impl From for InterestRateConfig { - fn from(ir_config: InterestRateConfigCompact) -> Self { - InterestRateConfig { - optimal_utilization_rate: ir_config.optimal_utilization_rate, - plateau_interest_rate: ir_config.plateau_interest_rate, - max_interest_rate: ir_config.max_interest_rate, - insurance_fee_fixed_apr: ir_config.insurance_fee_fixed_apr, - insurance_ir_fee: ir_config.insurance_ir_fee, - protocol_fixed_fee_apr: ir_config.protocol_fixed_fee_apr, - protocol_ir_fee: ir_config.protocol_ir_fee, - _padding: [[0; 2]; 8], + fn from( + InterestRateConfigCompact { + optimal_utilization_rate, + plateau_interest_rate, + max_interest_rate, + insurance_fee_fixed_apr, + insurance_ir_fee, + protocol_fixed_fee_apr, + protocol_ir_fee, + }: InterestRateConfigCompact, + ) -> Self { + Self { + optimal_utilization_rate, + plateau_interest_rate, + max_interest_rate, + insurance_fee_fixed_apr, + insurance_ir_fee, + protocol_fixed_fee_apr, + protocol_ir_fee, + _padding: [0; 32], } } } @@ -129,6 +192,7 @@ impl From for InterestRateConfigCompact { } } +assert_struct_size!(InterestRateConfig, 240); #[zero_copy] #[repr(C)] #[cfg_attr( @@ -143,88 +207,36 @@ pub struct InterestRateConfig { pub max_interest_rate: WrappedI80F48, // Fees + /// Goes to insurance, funds `collected_insurance_fees_outstanding` pub insurance_fee_fixed_apr: WrappedI80F48, + /// Goes to insurance, funds `collected_insurance_fees_outstanding` pub insurance_ir_fee: WrappedI80F48, + /// Earned by the group, goes to `collected_group_fees_outstanding` pub protocol_fixed_fee_apr: WrappedI80F48, + /// Earned by the group, goes to `collected_group_fees_outstanding` pub protocol_ir_fee: WrappedI80F48, - pub _padding: [[u64; 2]; 8], // 16 * 8 = 128 bytes + pub _padding: [u32; 32], } impl InterestRateConfig { - /// Return interest rate charged to borrowers and to depositors. - /// Rate is denominated in APR (0-). - /// - /// Return (`lending_rate`, `borrowing_rate`, `group_fees_apr`, `insurance_fees_apr`) - pub fn calc_interest_rate( - &self, - utilization_ratio: I80F48, - ) -> Option<(I80F48, I80F48, I80F48, I80F48)> { - let protocol_ir_fee = I80F48::from(self.protocol_ir_fee); - let insurance_ir_fee = I80F48::from(self.insurance_ir_fee); - - let protocol_fixed_fee_apr = I80F48::from(self.protocol_fixed_fee_apr); - let insurance_fee_fixed_apr = I80F48::from(self.insurance_fee_fixed_apr); - - let rate_fee = protocol_ir_fee + insurance_ir_fee; - let total_fixed_fee_apr = protocol_fixed_fee_apr + insurance_fee_fixed_apr; - - let base_rate = self.interest_rate_curve(utilization_ratio)?; - - // Lending rate is adjusted for utilization ratio to symmetrize payments between borrowers and depositors. - let lending_rate = base_rate.checked_mul(utilization_ratio)?; - - // Borrowing rate is adjusted for fees. - // borrowing_rate = base_rate + base_rate * rate_fee + total_fixed_fee_apr - let borrowing_rate = base_rate - .checked_mul(I80F48::ONE.checked_add(rate_fee)?)? - .checked_add(total_fixed_fee_apr)?; - - let group_fees_apr = calc_fee_rate( - base_rate, - self.protocol_ir_fee.into(), - self.protocol_fixed_fee_apr.into(), - )?; - - let insurance_fees_apr = calc_fee_rate( - base_rate, - self.insurance_ir_fee.into(), - self.insurance_fee_fixed_apr.into(), - )?; - - assert!(lending_rate >= I80F48::ZERO); - assert!(borrowing_rate >= I80F48::ZERO); - assert!(group_fees_apr >= I80F48::ZERO); - assert!(insurance_fees_apr >= I80F48::ZERO); - - // TODO: Add liquidation discount check - - Some(( - lending_rate, - borrowing_rate, - group_fees_apr, - insurance_fees_apr, - )) - } - - /// Piecewise linear interest rate function. - /// The curves approaches the `plateau_interest_rate` as the utilization ratio approaches the `optimal_utilization_rate`, - /// once the utilization ratio exceeds the `optimal_utilization_rate`, the curve approaches the `max_interest_rate`. - /// - /// To be clear we don't particularly appreciate the piecewise linear nature of this "curve", but it is what it is. - #[inline] - fn interest_rate_curve(&self, ur: I80F48) -> Option { - let optimal_ur = self.optimal_utilization_rate.into(); - let plateau_ir = self.plateau_interest_rate.into(); - let max_ir: I80F48 = self.max_interest_rate.into(); - - if ur <= optimal_ur { - ur.checked_div(optimal_ur)?.checked_mul(plateau_ir) - } else { - (ur - optimal_ur) - .checked_div(I80F48::ONE - optimal_ur)? - .checked_mul(max_ir - plateau_ir)? - .checked_add(plateau_ir) + pub fn create_interest_rate_calculator(&self, group: &MarginfiGroup) -> InterestRateCalc { + let group_bank_config = &group.get_group_bank_config(); + debug!( + "Creating interest rate calculator with protocol fees: {}", + group_bank_config.program_fees + ); + InterestRateCalc { + optimal_utilization_rate: self.optimal_utilization_rate.into(), + plateau_interest_rate: self.plateau_interest_rate.into(), + max_interest_rate: self.max_interest_rate.into(), + insurance_fixed_fee: self.insurance_fee_fixed_apr.into(), + insurance_rate_fee: self.insurance_ir_fee.into(), + protocol_fixed_fee: self.protocol_fixed_fee_apr.into(), + protocol_rate_fee: self.protocol_ir_fee.into(), + add_program_fees: group_bank_config.program_fees, + program_fee_fixed: group.fee_state_cache.program_fee_fixed.into(), + program_fee_rate: group.fee_state_cache.program_fee_rate.into(), } } @@ -264,6 +276,134 @@ impl InterestRateConfig { } } +#[derive(Debug, Clone)] +/// Short for calculator +pub struct InterestRateCalc { + optimal_utilization_rate: I80F48, + plateau_interest_rate: I80F48, + max_interest_rate: I80F48, + + // Fees + insurance_fixed_fee: I80F48, + insurance_rate_fee: I80F48, + /// AKA group fixed fee + protocol_fixed_fee: I80F48, + /// AKA group rate fee + protocol_rate_fee: I80F48, + + program_fee_fixed: I80F48, + program_fee_rate: I80F48, + + add_program_fees: bool, +} + +impl InterestRateCalc { + /// Return interest rate charged to borrowers and to depositors. + /// Rate is denominated in APR (0-). + /// + /// Return ComputedInterestRates + pub fn calc_interest_rate(&self, utilization_ratio: I80F48) -> Option { + let Fees { + insurance_fee_rate, + insurance_fee_fixed, + group_fee_rate, + group_fee_fixed, + protocol_fee_rate, + protocol_fee_fixed, + } = self.get_fees(); + + let fee_ir = insurance_fee_rate + group_fee_rate + protocol_fee_rate; + let fee_fixed = insurance_fee_fixed + group_fee_fixed + protocol_fee_fixed; + + let base_rate = self.interest_rate_curve(utilization_ratio)?; + + // Lending rate is adjusted for utilization ratio to symmetrize payments between borrowers and depositors. + let lending_rate_apr = base_rate.checked_mul(utilization_ratio)?; + + // Borrowing rate is adjusted for fees. + // borrowing_rate = base_rate + base_rate * rate_fee + total_fixed_fee_apr + let borrowing_rate_apr = base_rate + .checked_mul(I80F48::ONE.checked_add(fee_ir)?)? + .checked_add(fee_fixed)?; + + let group_fee_apr = calc_fee_rate(base_rate, group_fee_rate, group_fee_fixed)?; + let insurance_fee_apr = calc_fee_rate(base_rate, insurance_fee_rate, insurance_fee_fixed)?; + let protocol_fee_apr = calc_fee_rate(base_rate, protocol_fee_rate, protocol_fee_fixed)?; + + assert!(lending_rate_apr >= I80F48::ZERO); + assert!(borrowing_rate_apr >= I80F48::ZERO); + assert!(group_fee_apr >= I80F48::ZERO); + assert!(insurance_fee_apr >= I80F48::ZERO); + assert!(protocol_fee_apr >= I80F48::ZERO); + + // TODO: Add liquidation discount check + Some(ComputedInterestRates { + lending_rate_apr, + borrowing_rate_apr, + group_fee_apr, + insurance_fee_apr, + protocol_fee_apr, + }) + } + + /// Piecewise linear interest rate function. + /// The curves approaches the `plateau_interest_rate` as the utilization ratio approaches the `optimal_utilization_rate`, + /// once the utilization ratio exceeds the `optimal_utilization_rate`, the curve approaches the `max_interest_rate`. + /// + /// To be clear we don't particularly appreciate the piecewise linear nature of this "curve", but it is what it is. + #[inline] + fn interest_rate_curve(&self, ur: I80F48) -> Option { + let optimal_ur: I80F48 = self.optimal_utilization_rate; + let plateau_ir: I80F48 = self.plateau_interest_rate; + let max_ir: I80F48 = self.max_interest_rate; + + if ur <= optimal_ur { + ur.checked_div(optimal_ur)?.checked_mul(plateau_ir) + } else { + (ur - optimal_ur) + .checked_div(I80F48::ONE - optimal_ur)? + .checked_mul(max_ir - plateau_ir)? + .checked_add(plateau_ir) + } + } + + pub fn get_fees(&self) -> Fees { + let (protocol_fee_rate, protocol_fee_fixed) = if self.add_program_fees { + (self.program_fee_rate, self.program_fee_fixed) + } else { + (I80F48::ZERO, I80F48::ZERO) + }; + + Fees { + insurance_fee_rate: self.insurance_rate_fee, + insurance_fee_fixed: self.insurance_fixed_fee, + group_fee_rate: self.protocol_rate_fee, + group_fee_fixed: self.protocol_fixed_fee, + protocol_fee_rate, + protocol_fee_fixed, + } + } +} + +#[derive(Debug, Clone)] +pub struct Fees { + pub insurance_fee_rate: I80F48, + pub insurance_fee_fixed: I80F48, + pub group_fee_rate: I80F48, + pub group_fee_fixed: I80F48, + pub protocol_fee_rate: I80F48, + pub protocol_fee_fixed: I80F48, +} + +#[derive(Debug, Clone)] +pub struct ComputedInterestRates { + pub lending_rate_apr: I80F48, + pub borrowing_rate_apr: I80F48, + pub group_fee_apr: I80F48, + pub insurance_fee_apr: I80F48, + pub protocol_fee_apr: I80F48, +} + #[cfg_attr( any(feature = "test", feature = "client"), derive(Debug, PartialEq, Eq, TypeLayout) @@ -280,6 +420,12 @@ pub struct InterestRateConfigOpt { pub protocol_ir_fee: Option, } +/// Group level configuration to be used in bank accounts. +#[derive(Clone, Debug)] +pub struct GroupBankConfig { + pub program_fees: bool, +} + assert_struct_size!(Bank, 1856); assert_struct_align!(Bank, 8); #[account(zero_copy(unsafe))] @@ -312,6 +458,7 @@ pub struct Bank { pub _pad1: [u8; 4], // 4x u8 + 4 = 8 + /// Fees collected and pending withdraw for the `insurance_vault` pub collected_insurance_fees_outstanding: WrappedI80F48, pub fee_vault: Pubkey, @@ -320,6 +467,7 @@ pub struct Bank { pub _pad2: [u8; 6], // 2x u8 + 6 = 8 + /// Fees collected and pending withdraw for the `fee_vault` pub collected_group_fees_outstanding: WrappedI80F48, pub total_liability_shares: WrappedI80F48, @@ -342,7 +490,10 @@ pub struct Bank { pub emissions_remaining: WrappedI80F48, pub emissions_mint: Pubkey, - pub _padding_0: [[u64; 2]; 28], + /// Fees collected and pending withdraw for the `FeeState.global_fee_wallet`'s cannonical ATA for `mint` + pub collected_program_fees_outstanding: WrappedI80F48, + + pub _padding_0: [[u64; 2]; 27], pub _padding_1: [[u64; 2]; 32], // 16 * 2 * 32 = 1024B } @@ -570,6 +721,7 @@ impl Bank { pub fn accrue_interest( &mut self, current_timestamp: i64, + group: &MarginfiGroup, #[cfg(not(feature = "client"))] bank: Pubkey, ) -> MarginfiResult<()> { #[cfg(all(not(feature = "client"), feature = "debug"))] @@ -602,37 +754,58 @@ impl Bank { return Ok(()); } - - let (asset_share_value, liability_share_value, fees_collected, insurance_collected) = - calc_interest_rate_accrual_state_changes( - time_delta, - total_assets, - total_liabilities, - &self.config.interest_rate_config, - self.asset_share_value.into(), - self.liability_share_value.into(), - ) - .ok_or_else(math_error!())?; + let ir_calc = self + .config + .interest_rate_config + .create_interest_rate_calculator(group); + + let InterestRateStateChanges { + new_asset_share_value: asset_share_value, + new_liability_share_value: liability_share_value, + insurance_fees_collected, + group_fees_collected, + protocol_fees_collected, + } = calc_interest_rate_accrual_state_changes( + time_delta, + total_assets, + total_liabilities, + &ir_calc, + self.asset_share_value.into(), + self.liability_share_value.into(), + ) + .ok_or_else(math_error!())?; debug!("deposit share value: {}\nliability share value: {}\nfees collected: {}\ninsurance collected: {}", - asset_share_value, liability_share_value, fees_collected, insurance_collected); + asset_share_value, liability_share_value, group_fees_collected, insurance_fees_collected); self.asset_share_value = asset_share_value.into(); self.liability_share_value = liability_share_value.into(); - self.collected_group_fees_outstanding = { - fees_collected - .checked_add(self.collected_group_fees_outstanding.into()) - .ok_or_else(math_error!())? - .into() - }; + if group_fees_collected > I80F48::ZERO { + self.collected_group_fees_outstanding = { + group_fees_collected + .checked_add(self.collected_group_fees_outstanding.into()) + .ok_or_else(math_error!())? + .into() + }; + } - self.collected_insurance_fees_outstanding = { - insurance_collected - .checked_add(self.collected_insurance_fees_outstanding.into()) - .ok_or_else(math_error!())? - .into() - }; + if insurance_fees_collected > I80F48::ZERO { + self.collected_insurance_fees_outstanding = { + insurance_fees_collected + .checked_add(self.collected_insurance_fees_outstanding.into()) + .ok_or_else(math_error!())? + .into() + }; + } + if protocol_fees_collected > I80F48::ZERO { + self.collected_program_fees_outstanding = { + protocol_fees_collected + .checked_add(self.collected_program_fees_outstanding.into()) + .ok_or_else(math_error!())? + .into() + }; + } #[cfg(not(feature = "client"))] { @@ -647,8 +820,8 @@ impl Bank { bank, mint: self.mint, delta: time_delta, - fees_collected: fees_collected.to_num::(), - insurance_collected: insurance_collected.to_num::(), + fees_collected: group_fees_collected.to_num::(), + insurance_collected: insurance_fees_collected.to_num::(), }); } @@ -858,30 +1031,62 @@ fn calc_interest_rate_accrual_state_changes( time_delta: u64, total_assets_amount: I80F48, total_liabilities_amount: I80F48, - interest_rate_config: &InterestRateConfig, + interest_rate_calc: &InterestRateCalc, asset_share_value: I80F48, liability_share_value: I80F48, -) -> Option<(I80F48, I80F48, I80F48, I80F48)> { +) -> Option { let utilization_rate = total_liabilities_amount.checked_div(total_assets_amount)?; - let (lending_apr, borrowing_apr, group_fee_apr, insurance_fee_apr) = - interest_rate_config.calc_interest_rate(utilization_rate)?; + let computed_rates = interest_rate_calc.calc_interest_rate(utilization_rate)?; debug!( - "Accruing interest for {} seconds. Utilization rate: {}. Lending APR: {}. Borrowing APR: {}. Group fee APR: {}. Insurance fee APR: {}.", - time_delta, - utilization_rate, - lending_apr, - borrowing_apr, - group_fee_apr, - insurance_fee_apr + "Utilization rate: {}, time delta {}s", + utilization_rate, time_delta ); + debug!("{:#?}", computed_rates); - Some(( - calc_accrued_interest_payment_per_period(lending_apr, time_delta, asset_share_value)?, - calc_accrued_interest_payment_per_period(borrowing_apr, time_delta, liability_share_value)?, - calc_interest_payment_for_period(group_fee_apr, time_delta, total_liabilities_amount)?, - calc_interest_payment_for_period(insurance_fee_apr, time_delta, total_liabilities_amount)?, - )) + let ComputedInterestRates { + lending_rate_apr, + borrowing_rate_apr, + group_fee_apr, + insurance_fee_apr, + protocol_fee_apr, + } = computed_rates; + + Some(InterestRateStateChanges { + new_asset_share_value: calc_accrued_interest_payment_per_period( + lending_rate_apr, + time_delta, + asset_share_value, + )?, + new_liability_share_value: calc_accrued_interest_payment_per_period( + borrowing_rate_apr, + time_delta, + liability_share_value, + )?, + insurance_fees_collected: calc_interest_payment_for_period( + insurance_fee_apr, + time_delta, + total_liabilities_amount, + )?, + group_fees_collected: calc_interest_payment_for_period( + group_fee_apr, + time_delta, + total_liabilities_amount, + )?, + protocol_fees_collected: calc_interest_payment_for_period( + protocol_fee_apr, + time_delta, + total_liabilities_amount, + )?, + }) +} + +struct InterestRateStateChanges { + new_asset_share_value: I80F48, + new_liability_share_value: I80F48, + insurance_fees_collected: I80F48, + group_fees_collected: I80F48, + protocol_fees_collected: I80F48, } /// Calculates the fee rate for a given base rate and fees specified. @@ -889,6 +1094,10 @@ fn calc_interest_rate_accrual_state_changes( /// /// Used for calculating the fees charged to the borrowers. fn calc_fee_rate(base_rate: I80F48, rate_fees: I80F48, fixed_fees: I80F48) -> Option { + if rate_fees.is_zero() { + return Some(fixed_fees); + } + base_rate.checked_mul(rate_fees)?.checked_add(fixed_fees) } @@ -911,6 +1120,10 @@ fn calc_accrued_interest_payment_per_period( /// Calculates the interest payment for a given period `time_delta` in a principal value `value` for interest rate (in APR) `arp`. /// Result is the interest payment. fn calc_interest_payment_for_period(apr: I80F48, time_delta: u64, value: I80F48) -> Option { + if apr.is_zero() { + return Some(I80F48::ZERO); + } + let interest_payment = value .checked_mul(apr)? .checked_mul(time_delta.into())? @@ -1222,10 +1435,7 @@ impl BankConfig { #[zero_copy] #[repr(C, align(8))] -#[cfg_attr( - any(feature = "test", feature = "client"), - derive(PartialEq, Eq, TypeLayout) -)] +#[cfg_attr(any(feature = "test", feature = "client"), derive(TypeLayout))] #[derive(Default, BorshDeserialize, BorshSerialize)] pub struct WrappedI80F48 { pub value: [u8; 16], @@ -1251,6 +1461,14 @@ impl From for I80F48 { } } +impl PartialEq for WrappedI80F48 { + fn eq(&self, other: &Self) -> bool { + self.value == other.value + } +} + +impl Eq for WrappedI80F48 {} + #[cfg_attr( any(feature = "test", feature = "client"), derive(Clone, PartialEq, Eq, TypeLayout) @@ -1333,6 +1551,8 @@ macro_rules! assert_eq_with_tolerance { mod tests { use std::time::{SystemTime, UNIX_EPOCH}; + use crate::constants::{PROTOCOL_FEE_FIXED_DEFAULT, PROTOCOL_FEE_RATE_DEFAULT}; + use super::*; use fixed_macro::types::I80F48; @@ -1429,13 +1649,22 @@ mod tests { ..Default::default() }; - let (lending_apr, borrow_apr, group_fees_apr, insurance_apr) = - config.calc_interest_rate(I80F48!(0)).unwrap(); + let ComputedInterestRates { + lending_rate_apr: lending_apr, + borrowing_rate_apr: borrow_apr, + group_fee_apr: group_fees_apr, + insurance_fee_apr: insurance_apr, + protocol_fee_apr, + } = config + .create_interest_rate_calculator(&MarginfiGroup::default()) + .calc_interest_rate(I80F48!(0.6)) + .unwrap(); - assert_eq_with_tolerance!(lending_apr, I80F48!(0), I80F48!(0.001)); - assert_eq_with_tolerance!(borrow_apr, I80F48!(0.01), I80F48!(0.001)); + assert_eq_with_tolerance!(lending_apr, I80F48!(0.24), I80F48!(0.001)); + assert_eq_with_tolerance!(borrow_apr, I80F48!(0.41), I80F48!(0.001)); assert_eq_with_tolerance!(group_fees_apr, I80F48!(0.01), I80F48!(0.001)); assert_eq_with_tolerance!(insurance_apr, I80F48!(0), I80F48!(0.001)); + assert_eq_with_tolerance!(protocol_fee_apr, I80F48!(0), I80F48!(0.001)); } #[test] @@ -1452,8 +1681,16 @@ mod tests { ..Default::default() }; - let (lending_apr, borrow_apr, group_fees_apr, insurance_apr) = - config.calc_interest_rate(I80F48!(0.5)).unwrap(); + let ComputedInterestRates { + lending_rate_apr: lending_apr, + borrowing_rate_apr: borrow_apr, + group_fee_apr: group_fees_apr, + insurance_fee_apr: insurance_apr, + protocol_fee_apr: _, + } = config + .create_interest_rate_calculator(&MarginfiGroup::default()) + .calc_interest_rate(I80F48!(0.5)) + .unwrap(); assert_eq_with_tolerance!(lending_apr, I80F48!(0.2), I80F48!(0.001)); assert_eq_with_tolerance!(borrow_apr, I80F48!(0.45), I80F48!(0.001)); @@ -1461,6 +1698,18 @@ mod tests { assert_eq_with_tolerance!(insurance_apr, I80F48!(0.04), I80F48!(0.001)); } + #[test] + fn calc_fee_rate_1() { + let rate = I80F48!(0.4); + let fee_ir = I80F48!(0.05); + let fee_fixed = I80F48!(0.01); + + assert_eq!( + calc_fee_rate(rate, fee_ir, fee_fixed).unwrap(), + I80F48!(0.03) + ); + } + /// ur: 0.8 /// protocol_fixed_fee: 0.01 /// optimal_utilization_rate: 0.5 @@ -1478,8 +1727,16 @@ mod tests { ..Default::default() }; - let (lending_apr, borrow_apr, group_fees_apr, insurance_apr) = - config.calc_interest_rate(I80F48!(0.7)).unwrap(); + let ComputedInterestRates { + lending_rate_apr: lending_apr, + borrowing_rate_apr: borrow_apr, + group_fee_apr: group_fees_apr, + insurance_fee_apr: insurance_apr, + protocol_fee_apr: _, + } = config + .create_interest_rate_calculator(&MarginfiGroup::default()) + .calc_interest_rate(I80F48!(0.7)) + .unwrap(); assert_eq_with_tolerance!(lending_apr, I80F48!(1.19), I80F48!(0.001)); assert_eq_with_tolerance!(borrow_apr, I80F48!(1.88), I80F48!(0.001)); @@ -1531,6 +1788,7 @@ mod tests { bank.accrue_interest( current_timestamp, + &MarginfiGroup::default(), #[cfg(not(feature = "client"))] Pubkey::default(), ) @@ -1560,20 +1818,72 @@ mod tests { }; let ur = I80F48!(207_112_621_602) / I80F48!(10_000_000_000_000); + let mut group = MarginfiGroup::default(); + group.group_flags = 1; + group.fee_state_cache.program_fee_fixed = PROTOCOL_FEE_FIXED_DEFAULT.into(); + group.fee_state_cache.program_fee_rate = PROTOCOL_FEE_RATE_DEFAULT.into(); + + let ComputedInterestRates { + lending_rate_apr: lending_apr, + borrowing_rate_apr: borrow_apr, + group_fee_apr, + insurance_fee_apr, + protocol_fee_apr, + } = ir_config + .create_interest_rate_calculator(&group) + .calc_interest_rate(ur) + .expect("interest rate calculation failed"); + + println!("ur: {}", ur); + println!("lending_apr: {}", lending_apr); + println!("borrow_apr: {}", borrow_apr); + println!("group_fee_apr: {}", group_fee_apr); + println!("insurance_fee_apr: {}", insurance_fee_apr); - let (lending_apr, borrow_apr, fees_apr, insurance_apr) = ir_config + assert_eq_with_tolerance!( + borrow_apr, + (lending_apr / ur) + group_fee_apr + insurance_fee_apr + protocol_fee_apr, + I80F48!(0.001) + ); + + Ok(()) + } + + #[test] + fn interest_rate_accrual_test_0_no_protocol_fees() -> anyhow::Result<()> { + let ir_config = InterestRateConfig { + optimal_utilization_rate: I80F48!(0.4).into(), + plateau_interest_rate: I80F48!(0.4).into(), + protocol_fixed_fee_apr: I80F48!(0.01).into(), + max_interest_rate: I80F48!(3).into(), + insurance_ir_fee: I80F48!(0.1).into(), + ..Default::default() + }; + + let ur = I80F48!(207_112_621_602) / I80F48!(10_000_000_000_000); + + let ComputedInterestRates { + lending_rate_apr: lending_apr, + borrowing_rate_apr: borrow_apr, + group_fee_apr, + insurance_fee_apr, + protocol_fee_apr, + } = ir_config + .create_interest_rate_calculator(&MarginfiGroup::default()) .calc_interest_rate(ur) .expect("interest rate calculation failed"); println!("ur: {}", ur); println!("lending_apr: {}", lending_apr); println!("borrow_apr: {}", borrow_apr); - println!("fees_apr: {}", fees_apr); - println!("insurance_apr: {}", insurance_apr); + println!("group_fee_apr: {}", group_fee_apr); + println!("insurance_fee_apr: {}", insurance_fee_apr); + + assert!(protocol_fee_apr.is_zero()); assert_eq_with_tolerance!( borrow_apr, - (lending_apr / ur) + fees_apr + insurance_apr, + (lending_apr / ur) + group_fee_apr + insurance_fee_apr, I80F48!(0.001) ); @@ -1591,6 +1901,11 @@ mod tests { ..Default::default() }; + let mut group = MarginfiGroup::default(); + group.group_flags = 1; + group.fee_state_cache.program_fee_fixed = PROTOCOL_FEE_FIXED_DEFAULT.into(); + group.fee_state_cache.program_fee_rate = PROTOCOL_FEE_RATE_DEFAULT.into(); + let liab_share_value = I80F48!(1.0); let asset_share_value = I80F48!(1.0); @@ -1600,24 +1915,30 @@ mod tests { let old_total_liability_amount = liab_share_value * total_liability_shares; let old_total_asset_amount = asset_share_value * total_asset_shares; - let (new_asset_share_value, new_liab_share_value, fees_collected, insurance_collected) = - calc_interest_rate_accrual_state_changes( - 3600, - total_asset_shares, - total_liability_shares, - &ir_config, - asset_share_value, - liab_share_value, - ) - .unwrap(); + let InterestRateStateChanges { + new_asset_share_value, + new_liability_share_value: new_liab_share_value, + insurance_fees_collected: insurance_collected, + group_fees_collected, + protocol_fees_collected, + } = calc_interest_rate_accrual_state_changes( + 3600, + total_asset_shares, + total_liability_shares, + &ir_config.create_interest_rate_calculator(&group), + asset_share_value, + liab_share_value, + ) + .unwrap(); let new_total_liability_amount = total_liability_shares * new_liab_share_value; let new_total_asset_amount = total_asset_shares * new_asset_share_value; println!("new_asset_share_value: {}", new_asset_share_value); println!("new_liab_share_value: {}", new_liab_share_value); - println!("fees_collected: {}", fees_collected); + println!("group_fees_collected: {}", group_fees_collected); println!("insurance_collected: {}", insurance_collected); + println!("protocol_fees_collected: {}", protocol_fees_collected); println!("new_total_liability_amount: {}", new_total_liability_amount); println!("new_total_asset_amount: {}", new_total_asset_amount); @@ -1625,23 +1946,19 @@ mod tests { println!("old_total_liability_amount: {}", old_total_liability_amount); println!("old_total_asset_amount: {}", old_total_asset_amount); - println!( - "total_fee_collected: {}", - fees_collected + insurance_collected - ); + let total_fees_collected = + group_fees_collected + insurance_collected + protocol_fees_collected; + + println!("total_fee_collected: {}", total_fees_collected); println!( "diff: {}", - ((new_total_asset_amount - new_total_liability_amount) - + fees_collected - + insurance_collected) + ((new_total_asset_amount - new_total_liability_amount) + total_fees_collected) - (old_total_asset_amount - old_total_liability_amount) ); assert_eq_with_tolerance!( - (new_total_asset_amount - new_total_liability_amount) - + fees_collected - + insurance_collected, + (new_total_asset_amount - new_total_liability_amount) + total_fees_collected, old_total_asset_amount - old_total_liability_amount, I80F48::ONE ); diff --git a/programs/marginfi/src/state/mod.rs b/programs/marginfi/src/state/mod.rs index 710755626..7b5dec9e2 100644 --- a/programs/marginfi/src/state/mod.rs +++ b/programs/marginfi/src/state/mod.rs @@ -1,3 +1,4 @@ +pub mod fee_state; pub mod marginfi_account; pub mod marginfi_group; pub mod price; diff --git a/programs/marginfi/tests/admin_actions/bankruptcy.rs b/programs/marginfi/tests/admin_actions/bankruptcy.rs index 7c72fef2b..ff28e01ac 100644 --- a/programs/marginfi/tests/admin_actions/bankruptcy.rs +++ b/programs/marginfi/tests/admin_actions/bankruptcy.rs @@ -854,6 +854,7 @@ async fn marginfi_group_handle_bankruptcy_success_not_insured_3_depositors() -> }, ], group_config: Some(GroupConfig { admin: None }), + protocol_fees: false, })) .await; diff --git a/programs/marginfi/tests/admin_actions/bankruptcy_auth.rs b/programs/marginfi/tests/admin_actions/bankruptcy_auth.rs index 31e36932f..72a7eecd5 100644 --- a/programs/marginfi/tests/admin_actions/bankruptcy_auth.rs +++ b/programs/marginfi/tests/admin_actions/bankruptcy_auth.rs @@ -30,6 +30,7 @@ async fn marginfi_group_handle_bankruptcy_unauthorized() -> anyhow::Result<()> { }), }, ], + ..Default::default() })) .await; @@ -124,6 +125,7 @@ async fn marginfi_group_handle_bankruptcy_perimssionless() -> anyhow::Result<()> }), }, ], + ..Default::default() })) .await; diff --git a/programs/marginfi/tests/admin_actions/create_marginfi_group.rs b/programs/marginfi/tests/admin_actions/create_marginfi_group.rs index 762459cc8..efcd49b7f 100644 --- a/programs/marginfi/tests/admin_actions/create_marginfi_group.rs +++ b/programs/marginfi/tests/admin_actions/create_marginfi_group.rs @@ -1,10 +1,10 @@ use anchor_lang::{InstructionData, ToAccountMetas}; use fixtures::prelude::*; -use marginfi::prelude::MarginfiGroup; +use marginfi::{constants::FEE_STATE_SEED, prelude::MarginfiGroup}; use pretty_assertions::assert_eq; use solana_program::{instruction::Instruction, system_program}; use solana_program_test::*; -use solana_sdk::{signature::Keypair, signer::Signer, transaction::Transaction}; +use solana_sdk::{pubkey::Pubkey, signature::Keypair, signer::Signer, transaction::Transaction}; #[tokio::test] async fn marginfi_group_create_success() -> anyhow::Result<()> { @@ -13,9 +13,13 @@ async fn marginfi_group_create_success() -> anyhow::Result<()> { // Create & initialize marginfi group let marginfi_group_key = Keypair::new(); + let (fee_state_key, _bump) = + Pubkey::find_program_address(&[FEE_STATE_SEED.as_bytes()], &marginfi::id()); + let accounts = marginfi::accounts::MarginfiGroupInitialize { marginfi_group: marginfi_group_key.pubkey(), admin: test_f.payer(), + fee_state: fee_state_key, system_program: system_program::id(), }; let init_marginfi_group_ix = Instruction { diff --git a/programs/marginfi/tests/admin_actions/interest_accrual.rs b/programs/marginfi/tests/admin_actions/interest_accrual.rs index 75bde5597..fe3cc9324 100644 --- a/programs/marginfi/tests/admin_actions/interest_accrual.rs +++ b/programs/marginfi/tests/admin_actions/interest_accrual.rs @@ -1,4 +1,5 @@ use anchor_lang::prelude::Clock; +use anchor_spl::associated_token::get_associated_token_address_with_program_id; use fixed::types::I80F48; use fixed_macro::types::I80F48; use fixtures::{assert_eq_noise, native, prelude::*}; @@ -33,6 +34,7 @@ async fn marginfi_group_accrue_interest_rates_success_1() -> anyhow::Result<()> }), }, ], + protocol_fees: false, })) .await; @@ -119,6 +121,7 @@ async fn marginfi_group_accrue_interest_rates_success_2() -> anyhow::Result<()> }, ], group_config: Some(GroupConfig { admin: None }), + protocol_fees: false, })) .await; @@ -160,6 +163,24 @@ async fn marginfi_group_accrue_interest_rates_success_2() -> anyhow::Result<()> .try_accrue_interest(usdc_bank_f) .await?; + // The program fee ata needs to exist, but doesn't need any assets. + { + let ctx = test_f.context.clone(); + let ata = TokenAccountFixture::new_from_ata( + ctx, + &test_f.usdc_mint.key, + &test_f.marginfi_group.fee_wallet, + &test_f.usdc_mint.token_program, + ) + .await; + let ata_expected = get_associated_token_address_with_program_id( + &test_f.marginfi_group.fee_wallet, + &test_f.usdc_mint.key, + &test_f.usdc_mint.token_program, + ); + assert_eq!(ata.key, ata_expected); + } + test_f.marginfi_group.try_collect_fees(usdc_bank_f).await?; let borrower_mfi_account = borrower_mfi_account_f.load().await; diff --git a/programs/marginfi/tests/admin_actions/setup_bank.rs b/programs/marginfi/tests/admin_actions/setup_bank.rs index 2d7eade8a..9aeeddf0c 100644 --- a/programs/marginfi/tests/admin_actions/setup_bank.rs +++ b/programs/marginfi/tests/admin_actions/setup_bank.rs @@ -2,7 +2,7 @@ use fixed::types::I80F48; use fixed_macro::types::I80F48; use fixtures::{assert_custom_error, prelude::*}; use marginfi::{ - constants::PERMISSIONLESS_BAD_DEBT_SETTLEMENT_FLAG, + constants::{INIT_BANK_ORIGINATION_FEE_DEFAULT, PERMISSIONLESS_BAD_DEBT_SETTLEMENT_FLAG}, prelude::MarginfiError, state::marginfi_group::{Bank, BankConfig, BankConfigOpt, BankVaultType}, }; @@ -16,6 +16,8 @@ async fn add_bank_success() -> anyhow::Result<()> { // Setup test executor with non-admin payer let test_f = TestFixture::new(None).await; + let fee_wallet = test_f.marginfi_group.fee_wallet; + let mints = vec![ ( MintFixture::new(test_f.context.clone(), None, None).await, @@ -38,6 +40,19 @@ async fn add_bank_success() -> anyhow::Result<()> { ]; for (mint_f, bank_config) in mints { + // Load the fee state before the start of the test + let fee_balance_before: u64; + { + let mut ctx = test_f.context.borrow_mut(); + fee_balance_before = ctx + .banks_client + .get_account(fee_wallet) + .await + .unwrap() + .unwrap() + .lamports; + } + let res = test_f .marginfi_group .try_lending_pool_add_bank(&mint_f, bank_config) @@ -100,12 +115,28 @@ async fn add_bank_success() -> anyhow::Result<()> { assert_eq!(emissions_mint, Pubkey::new_from_array([0; 32])); assert_eq!(emissions_remaining, I80F48!(0.0).into()); - assert_eq!(_padding_0, <[[u64; 2]; 28] as Default>::default()); + assert_eq!(_padding_0, <[[u64; 2]; 27] as Default>::default()); assert_eq!(_padding_1, <[[u64; 2]; 32] as Default>::default()); // this is the only loosely checked field assert!(last_update >= 0 && last_update <= 5); }; + + // Load the fee state after the test + let fee_balance_after: u64; + { + let mut ctx = test_f.context.borrow_mut(); + fee_balance_after = ctx + .banks_client + .get_account(fee_wallet) + .await + .unwrap() + .unwrap() + .lamports; + } + let expected_fee_delta = INIT_BANK_ORIGINATION_FEE_DEFAULT as u64; + let actual_fee_delta = fee_balance_after - fee_balance_before; + assert_eq!(expected_fee_delta, actual_fee_delta); } Ok(()) @@ -116,6 +147,8 @@ async fn add_bank_with_seed_success() -> anyhow::Result<()> { // Setup test executor with non-admin payer let test_f = TestFixture::new(None).await; + let fee_wallet = test_f.marginfi_group.fee_wallet; + let mints = vec![ ( MintFixture::new(test_f.context.clone(), None, None).await, @@ -138,6 +171,18 @@ async fn add_bank_with_seed_success() -> anyhow::Result<()> { ]; for (mint_f, bank_config) in mints { + let fee_balance_before: u64; + { + let mut ctx = test_f.context.borrow_mut(); + fee_balance_before = ctx + .banks_client + .get_account(fee_wallet) + .await + .unwrap() + .unwrap() + .lamports; + } + let bank_seed = 1200_u64; let res = test_f @@ -203,12 +248,27 @@ async fn add_bank_with_seed_success() -> anyhow::Result<()> { assert_eq!(emissions_mint, Pubkey::new_from_array([0; 32])); assert_eq!(emissions_remaining, I80F48!(0.0).into()); - assert_eq!(_padding_0, <[[u64; 2]; 28] as Default>::default()); + assert_eq!(_padding_0, <[[u64; 2]; 27] as Default>::default()); assert_eq!(_padding_1, <[[u64; 2]; 32] as Default>::default()); // this is the only loosely checked field assert!(last_update >= 0 && last_update <= 5); }; + + let fee_balance_after: u64; + { + let mut ctx = test_f.context.borrow_mut(); + fee_balance_after = ctx + .banks_client + .get_account(fee_wallet) + .await + .unwrap() + .unwrap() + .lamports; + } + let expected_fee_delta = INIT_BANK_ORIGINATION_FEE_DEFAULT as u64; + let actual_fee_delta = fee_balance_after - fee_balance_before; + assert_eq!(expected_fee_delta, actual_fee_delta); } Ok(()) diff --git a/programs/marginfi/tests/misc/operational_state.rs b/programs/marginfi/tests/misc/operational_state.rs index 657ddce82..88031bbab 100644 --- a/programs/marginfi/tests/misc/operational_state.rs +++ b/programs/marginfi/tests/misc/operational_state.rs @@ -15,6 +15,7 @@ async fn marginfi_group_bank_paused_should_error() -> anyhow::Result<()> { config: None, }], group_config: Some(GroupConfig { admin: None }), + protocol_fees: false, })) .await; @@ -54,6 +55,7 @@ async fn marginfi_group_bank_reduce_only_withdraw_success() -> anyhow::Result<() config: None, }], group_config: Some(GroupConfig { admin: None }), + protocol_fees: false, })) .await; @@ -101,6 +103,7 @@ async fn marginfi_group_bank_reduce_only_deposit_success() -> anyhow::Result<()> }, ], group_config: Some(GroupConfig { admin: None }), + protocol_fees: false, })) .await; @@ -160,6 +163,7 @@ async fn marginfi_group_bank_reduce_only_borrow_failure() -> anyhow::Result<()> }, ], group_config: Some(GroupConfig { admin: None }), + protocol_fees: false, })) .await; @@ -207,6 +211,7 @@ async fn marginfi_group_bank_reduce_only_deposit_failure() -> anyhow::Result<()> config: None, }], group_config: Some(GroupConfig { admin: None }), + protocol_fees: false, })) .await; diff --git a/programs/marginfi/tests/misc/pyth_push.rs b/programs/marginfi/tests/misc/pyth_push.rs index 7f7bcf986..0ba0a3574 100644 --- a/programs/marginfi/tests/misc/pyth_push.rs +++ b/programs/marginfi/tests/misc/pyth_push.rs @@ -28,6 +28,7 @@ async fn pyth_push_fullv_borrow() -> anyhow::Result<()> { }, ], group_config: Some(GroupConfig { admin: None }), + protocol_fees: false, })) .await; @@ -96,6 +97,7 @@ async fn pyth_push_partv_borrow() -> anyhow::Result<()> { }, ], group_config: Some(GroupConfig { admin: None }), + protocol_fees: false, })) .await; @@ -159,6 +161,7 @@ async fn pyth_push_fullv_liquidate() -> anyhow::Result<()> { }, ], group_config: Some(GroupConfig { admin: None }), + protocol_fees: false, })) .await; diff --git a/programs/marginfi/tests/misc/real_oracle_data.rs b/programs/marginfi/tests/misc/real_oracle_data.rs index 1bbeb005b..d29a5c64b 100644 --- a/programs/marginfi/tests/misc/real_oracle_data.rs +++ b/programs/marginfi/tests/misc/real_oracle_data.rs @@ -23,6 +23,7 @@ async fn real_oracle_marginfi_account_borrow_success() -> anyhow::Result<()> { }, ], group_config: Some(GroupConfig { admin: None }), + protocol_fees: false, })) .await; @@ -97,6 +98,7 @@ async fn real_oracle_pyth_push_marginfi_account_borrow_success() -> anyhow::Resu }, ], group_config: Some(GroupConfig { admin: None }), + protocol_fees: false, })) .await; diff --git a/programs/marginfi/tests/misc/regression.rs b/programs/marginfi/tests/misc/regression.rs index a8b855f26..823ddebe4 100644 --- a/programs/marginfi/tests/misc/regression.rs +++ b/programs/marginfi/tests/misc/regression.rs @@ -655,7 +655,7 @@ async fn bank_field_values_reg() -> anyhow::Result<()> { pubkey!("2b1kV6DkPAnxd5ixfnxCpjxmKwqjjaYmCZfHsFu24GXo") ); - assert_eq!(bank._padding_0, [[0, 0]; 28]); + assert_eq!(bank._padding_0, [[0, 0]; 27]); assert_eq!(bank._padding_1, [[0, 0]; 32]); Ok(()) diff --git a/programs/marginfi/tests/misc/risk_engine_flexible_oracle_checks.rs b/programs/marginfi/tests/misc/risk_engine_flexible_oracle_checks.rs index e1d1fe4de..6d27aa33a 100644 --- a/programs/marginfi/tests/misc/risk_engine_flexible_oracle_checks.rs +++ b/programs/marginfi/tests/misc/risk_engine_flexible_oracle_checks.rs @@ -240,6 +240,7 @@ async fn re_liquidaiton_fail() -> anyhow::Result<()> { }, ], group_config: Some(GroupConfig { admin: None }), + protocol_fees: false, })) .await; @@ -337,6 +338,7 @@ async fn re_bankruptcy_fail() -> anyhow::Result<()> { }), }, ], + protocol_fees: false, })) .await; diff --git a/programs/marginfi/tests/misc/token_extensions.rs b/programs/marginfi/tests/misc/token_extensions.rs index a9eb06259..af3158596 100644 --- a/programs/marginfi/tests/misc/token_extensions.rs +++ b/programs/marginfi/tests/misc/token_extensions.rs @@ -55,6 +55,7 @@ async fn marginfi_account_liquidation_success_with_extension( }, ], group_config: Some(GroupConfig { admin: None }), + protocol_fees: false, }), &extensions, ) diff --git a/programs/marginfi/tests/user_actions/liquidate.rs b/programs/marginfi/tests/user_actions/liquidate.rs index 613f8a7a8..41d60532e 100644 --- a/programs/marginfi/tests/user_actions/liquidate.rs +++ b/programs/marginfi/tests/user_actions/liquidate.rs @@ -402,6 +402,7 @@ async fn marginfi_account_liquidation_success_swb() -> anyhow::Result<()> { }, ], group_config: Some(GroupConfig { admin: None }), + protocol_fees: false, })) .await; @@ -524,6 +525,7 @@ async fn marginfi_account_liquidation_failure_liquidatee_not_unhealthy() -> anyh }, ], group_config: Some(GroupConfig { admin: None }), + protocol_fees: false, })) .await; @@ -627,6 +629,7 @@ async fn marginfi_account_liquidation_failure_liquidator_no_collateral() -> anyh }, ], group_config: Some(GroupConfig { admin: None }), + protocol_fees: false, })) .await; diff --git a/programs/mocks/Cargo.toml b/programs/mocks/Cargo.toml index e1a5ff097..66765715d 100644 --- a/programs/mocks/Cargo.toml +++ b/programs/mocks/Cargo.toml @@ -22,6 +22,7 @@ devnet = [] mainnet-beta = [] debug = [] staging = [] +ignore-fee-deploy = [] [dependencies] anchor-lang = { workspace = true } diff --git a/programs/test_transfer_hook/Cargo.toml b/programs/test_transfer_hook/Cargo.toml index b23f23a7d..02687bc90 100644 --- a/programs/test_transfer_hook/Cargo.toml +++ b/programs/test_transfer_hook/Cargo.toml @@ -6,6 +6,7 @@ edition = "2021" [features] idl-build = [] no-entrypoint = [] +ignore-fee-deploy = [] [lib] crate-type = ["cdylib", "lib"] diff --git a/scripts/build-program.sh b/scripts/build-program.sh index 1ca3556f1..c1e0eb733 100755 --- a/scripts/build-program.sh +++ b/scripts/build-program.sh @@ -21,6 +21,6 @@ else exit 1 fi -cmd="anchor build -p $program_lib_name -- $features" +cmd="anchor build -p $program_lib_name -- $features ignore-fee-deploy" echo "Running: $cmd" eval "$cmd" diff --git a/scripts/build-workspace.sh b/scripts/build-workspace.sh index 77055eada..65899b826 100755 --- a/scripts/build-workspace.sh +++ b/scripts/build-workspace.sh @@ -2,6 +2,6 @@ ROOT=$(git rev-parse --show-toplevel) cd $ROOT -cmd="anchor build --no-idl" +cmd="anchor build --no-idl -- --features ignore-fee-deploy" echo "Running: $cmd" eval "$cmd" diff --git a/scripts/single-test.sh b/scripts/single-test.sh index f3174c35d..926a0e555 100755 --- a/scripts/single-test.sh +++ b/scripts/single-test.sh @@ -20,7 +20,7 @@ cd $ROOT SBF_OUT_DIR="$ROOT/target/deploy" RUST_LOG="solana_runtime::message_processor::stable_log=debug" -CARGO_CMD="SBF_OUT_DIR=$SBF_OUT_DIR RUST_LOG=$RUST_LOG cargo nextest run --package $program_name --features=test,test-bpf --test-threads=1 -- $test_name" +CARGO_CMD="SBF_OUT_DIR=$SBF_OUT_DIR RUST_LOG=$RUST_LOG cargo nextest run --package $program_name --features=test,test-bpf --nocapture -- $test_name" echo "Running: $CARGO_CMD" diff --git a/test-utils/src/marginfi_group.rs b/test-utils/src/marginfi_group.rs index 583141d0d..6b09bea70 100644 --- a/test-utils/src/marginfi_group.rs +++ b/test-utils/src/marginfi_group.rs @@ -3,22 +3,38 @@ use crate::prelude::{get_oracle_id_from_feed_id, MintFixture}; use crate::utils::*; use anchor_lang::{prelude::*, solana_program::system_program, InstructionData}; +use anchor_spl::associated_token::get_associated_token_address_with_program_id; use anyhow::Result; +use bytemuck::bytes_of; +use marginfi::constants::{ + FEE_STATE_SEED, INIT_BANK_ORIGINATION_FEE_DEFAULT, PROTOCOL_FEE_FIXED_DEFAULT, + PROTOCOL_FEE_RATE_DEFAULT, +}; +use marginfi::state::fee_state::FeeState; use marginfi::{ prelude::MarginfiGroup, state::marginfi_group::{BankConfig, BankConfigOpt, BankVaultType, GroupConfig}, }; use solana_program::sysvar; use solana_program_test::*; +use solana_sdk::system_transaction; use solana_sdk::{ compute_budget::ComputeBudgetInstruction, instruction::Instruction, signature::Keypair, signer::Signer, transaction::Transaction, }; use std::{cell::RefCell, mem, rc::Rc}; +async fn airdrop_sol(context: &mut ProgramTestContext, key: &Pubkey, amount: u64) { + let recent_blockhash = context.banks_client.get_latest_blockhash().await.unwrap(); + let tx = system_transaction::transfer(&context.payer, key, amount, recent_blockhash); + context.banks_client.process_transaction(tx).await.unwrap(); +} + pub struct MarginfiGroupFixture { ctx: Rc>, pub key: Pubkey, + pub fee_state: Pubkey, + pub fee_wallet: Pubkey, } impl MarginfiGroupFixture { @@ -29,6 +45,9 @@ impl MarginfiGroupFixture { let ctx_ref = ctx.clone(); let group_key = Keypair::new(); + let fee_wallet_key: Pubkey; + let (fee_state_key, _bump) = + Pubkey::find_program_address(&[FEE_STATE_SEED.as_bytes()], &marginfi::id()); { let mut ctx = ctx.borrow_mut(); @@ -38,6 +57,7 @@ impl MarginfiGroupFixture { accounts: marginfi::accounts::MarginfiGroupInitialize { marginfi_group: group_key.pubkey(), admin: ctx.payer.pubkey(), + fee_state: fee_state_key, system_program: system_program::id(), } .to_account_metas(Some(true)), @@ -54,18 +74,72 @@ impl MarginfiGroupFixture { data: marginfi::instruction::MarginfiGroupConfigure { config }.data(), }; - let tx = Transaction::new_signed_with_payer( - &[initialize_marginfi_group_ix, configure_marginfi_group_ix], - Some(&ctx.payer.pubkey().clone()), - &[&ctx.payer, &group_key], - ctx.last_blockhash, - ); - ctx.banks_client.process_transaction(tx).await.unwrap(); + // Check if the fee state account already exists + let fee_state_account = ctx.banks_client.get_account(fee_state_key).await.unwrap(); + + // Account exists, read it and proceed with group initialization + if let Some(account) = fee_state_account { + if !account.data.is_empty() { + // Deserialize the account data to extract the fee_wallet public key + let fee_state_data: FeeState = + FeeState::try_deserialize(&mut &account.data[..]).unwrap(); + fee_wallet_key = fee_state_data.global_fee_wallet; + + let tx = Transaction::new_signed_with_payer( + &[initialize_marginfi_group_ix, configure_marginfi_group_ix], + Some(&ctx.payer.pubkey().clone()), + &[&ctx.payer, &group_key], + ctx.last_blockhash, + ); + ctx.banks_client.process_transaction(tx).await.unwrap(); + } else { + panic!("Fee state exists but is empty") + } + } else { + // Account does not exist, proceed with group and fee state initialization + let fee_wallet = Keypair::new(); + // The wallet needs some sol to be rent exempt + airdrop_sol(&mut ctx, &fee_wallet.pubkey(), 1_000_000).await; + fee_wallet_key = fee_wallet.pubkey(); + + let init_fee_state_ix = Instruction { + program_id: marginfi::id(), + accounts: marginfi::accounts::InitFeeState { + payer: ctx.payer.pubkey(), + fee_state: fee_state_key, + rent: sysvar::rent::id(), + system_program: system_program::id(), + } + .to_account_metas(Some(true)), + data: marginfi::instruction::InitGlobalFeeState { + admin: ctx.payer.pubkey(), + fee_wallet: fee_wallet.pubkey(), + bank_init_flat_sol_fee: INIT_BANK_ORIGINATION_FEE_DEFAULT, + program_fee_fixed: PROTOCOL_FEE_FIXED_DEFAULT.into(), + program_fee_rate: PROTOCOL_FEE_RATE_DEFAULT.into(), + } + .data(), + }; + + let tx = Transaction::new_signed_with_payer( + &[ + init_fee_state_ix, + initialize_marginfi_group_ix, + configure_marginfi_group_ix, + ], + Some(&ctx.payer.pubkey().clone()), + &[&ctx.payer, &group_key], + ctx.last_blockhash, + ); + ctx.banks_client.process_transaction(tx).await.unwrap(); + } } MarginfiGroupFixture { ctx: ctx_ref.clone(), key: group_key.pubkey(), + fee_state: fee_state_key, + fee_wallet: fee_wallet_key, } } @@ -83,6 +157,8 @@ impl MarginfiGroupFixture { marginfi_group: self.key, admin: self.ctx.borrow().payer.pubkey(), fee_payer: self.ctx.borrow().payer.pubkey(), + fee_state: self.fee_state, + global_fee_wallet: self.fee_wallet, bank_mint, bank: bank_key.pubkey(), liquidity_vault_authority: bank_fixture.get_vault_authority(BankVaultType::Liquidity).0, @@ -160,6 +236,8 @@ impl MarginfiGroupFixture { marginfi_group: self.key, admin: self.ctx.borrow().payer.pubkey(), fee_payer: self.ctx.borrow().payer.pubkey(), + fee_state: self.fee_state, + global_fee_wallet: self.fee_wallet, bank_mint, bank: pda, liquidity_vault_authority: bank_fixture.get_vault_authority(BankVaultType::Liquidity).0, @@ -307,6 +385,12 @@ impl MarginfiGroupFixture { pub async fn try_collect_fees(&self, bank: &BankFixture) -> Result<()> { let mut ctx = self.ctx.borrow_mut(); + let fee_ata = get_associated_token_address_with_program_id( + &self.fee_wallet, + &bank.mint.key, + &bank.get_token_program(), + ); + let mut accounts = marginfi::accounts::LendingPoolCollectBankFees { marginfi_group: self.key, bank: bank.key, @@ -315,6 +399,8 @@ impl MarginfiGroupFixture { insurance_vault: bank.get_vault(BankVaultType::Insurance).0, fee_vault: bank.get_vault(BankVaultType::Fee).0, token_program: bank.get_token_program(), + fee_state: self.fee_state, + fee_ata, } .to_account_metas(Some(true)); if bank.mint.token_program == spl_token_2022::ID { @@ -406,4 +492,23 @@ impl MarginfiGroupFixture { ) .await } + + pub async fn set_protocol_fees_flag(&self, enabled: bool) { + let mut group = self.load().await; + let mut ctx = self.ctx.borrow_mut(); + let mut account = ctx + .banks_client + .get_account(self.key) + .await + .unwrap() + .unwrap(); + + group.group_flags = if enabled { 1 } else { 0 }; + + let data = bytes_of(&group); + + account.data[8..].copy_from_slice(data); + + ctx.set_account(&self.key, &account.into()) + } } diff --git a/test-utils/src/spl.rs b/test-utils/src/spl.rs index fd622fae0..01346e0a0 100644 --- a/test-utils/src/spl.rs +++ b/test-utils/src/spl.rs @@ -1,6 +1,10 @@ use crate::{transfer_hook::TEST_HOOK_ID, ui_to_native}; use anchor_lang::prelude::*; use anchor_spl::{ + associated_token::{ + get_associated_token_address_with_program_id, + spl_associated_token_account::instruction::create_associated_token_account, + }, token::{spl_token, Mint, TokenAccount}, token_2022::{ self, @@ -297,7 +301,7 @@ impl MintFixture { self.create_token_account_and_mint_to(0.0).await } - pub async fn create_token_account_and_mint_to>( + pub async fn create_token_account_and_mint_to<'a, T: Into>( &self, ui_amount: T, ) -> TokenAccountFixture { @@ -505,6 +509,57 @@ impl TokenAccountFixture { } } + pub async fn new_from_ata( + ctx: Rc>, + mint_pk: &Pubkey, + owner_pk: &Pubkey, + token_program: &Pubkey, + ) -> Self { + let ctx_ref = ctx.clone(); + let ata_address = + get_associated_token_address_with_program_id(owner_pk, mint_pk, token_program); + + { + let create_ata_ix = create_associated_token_account( + &ctx.borrow().payer.pubkey(), + owner_pk, + mint_pk, + token_program, + ); + + let tx = Transaction::new_signed_with_payer( + &[create_ata_ix], + Some(&ctx.borrow().payer.pubkey()), + &[&ctx.borrow().payer], + ctx.borrow().last_blockhash, + ); + + ctx.borrow_mut() + .banks_client + .process_transaction(tx) + .await + .unwrap(); + } + + // Now retrieve the account info for the newly created ATA + let mut ctx = ctx.borrow_mut(); + let account = ctx + .banks_client + .get_account(ata_address) + .await + .unwrap() + .unwrap(); + + Self { + ctx: ctx_ref.clone(), + key: ata_address, // Use the ATA address as the key + token: StateWithExtensionsOwned::::unpack(account.data) + .unwrap() + .base, + token_program: *token_program, + } + } + pub async fn new( ctx: Rc>, mint_fixture: &MintFixture, diff --git a/test-utils/src/test.rs b/test-utils/src/test.rs index d457afde9..507403189 100644 --- a/test-utils/src/test.rs +++ b/test-utils/src/test.rs @@ -30,6 +30,7 @@ use std::{cell::RefCell, collections::HashMap, rc::Rc}; pub struct TestSettings { pub group_config: Option, pub banks: Vec, + pub protocol_fees: bool, } impl TestSettings { @@ -76,6 +77,7 @@ impl TestSettings { Self { banks, group_config: Some(GroupConfig { admin: None }), + protocol_fees: false, } } @@ -93,6 +95,33 @@ impl TestSettings { }, ], group_config: Some(GroupConfig { admin: None }), + protocol_fees: false, + } + } + + pub fn all_banks_one_isolated() -> Self { + Self { + banks: vec![ + TestBankSetting { + mint: BankMint::Usdc, + ..TestBankSetting::default() + }, + TestBankSetting { + mint: BankMint::Sol, + ..TestBankSetting::default() + }, + TestBankSetting { + mint: BankMint::SolEquivalent, + config: Some(BankConfig { + risk_tier: RiskTier::Isolated, + asset_weight_maint: I80F48!(0).into(), + asset_weight_init: I80F48!(0).into(), + ..*DEFAULT_SOL_EQUIVALENT_TEST_BANK_CONFIG + }), + }, + ], + group_config: Some(GroupConfig { admin: None }), + protocol_fees: false, } } @@ -141,6 +170,7 @@ impl TestSettings { }, ], group_config: Some(GroupConfig { admin: None }), + protocol_fees: false, } } } @@ -599,6 +629,10 @@ impl TestFixture { ) .await; + tester_group + .set_protocol_fees_flag(test_settings.clone().unwrap_or_default().protocol_fees) + .await; + let mut banks = HashMap::new(); if let Some(test_settings) = test_settings.clone() { for bank in test_settings.banks.iter() { diff --git a/tests/01_initGroup.spec.ts b/tests/01_initGroup.spec.ts index 03a90dcdc..bf9467bdc 100644 --- a/tests/01_initGroup.spec.ts +++ b/tests/01_initGroup.spec.ts @@ -1,12 +1,15 @@ -import { - Program, - workspace, -} from "@coral-xyz/anchor"; +import { Program, workspace } from "@coral-xyz/anchor"; import { Transaction } from "@solana/web3.js"; import { groupInitialize } from "./utils/instructions"; import { Marginfi } from "../target/types/marginfi"; -import { groupAdmin, marginfiGroup } from "./rootHooks"; -import { assertKeysEqual } from "./utils/genericTests"; +import { + globalFeeWallet, + groupAdmin, + marginfiGroup, + PROGRAM_FEE_FIXED, + PROGRAM_FEE_RATE, +} from "./rootHooks"; +import { assertI80F48Approx, assertKeysEqual } from "./utils/genericTests"; describe("Init group", () => { const program = workspace.Marginfi as Program; @@ -29,5 +32,11 @@ describe("Init group", () => { marginfiGroup.publicKey ); assertKeysEqual(group.admin, groupAdmin.wallet.publicKey); + + const feeCache = group.feeStateCache; + const tolerance = 0.00001; + assertI80F48Approx(feeCache.programFeeFixed, PROGRAM_FEE_FIXED, tolerance); + assertI80F48Approx(feeCache.programFeeRate, PROGRAM_FEE_RATE, tolerance); + assertKeysEqual(feeCache.globalFeeWallet, globalFeeWallet); }); }); diff --git a/tests/03_addBank.spec.ts b/tests/03_addBank.spec.ts index d5597b6b0..d05fdef1c 100644 --- a/tests/03_addBank.spec.ts +++ b/tests/03_addBank.spec.ts @@ -6,7 +6,9 @@ import { bankKeypairA, bankKeypairUsdc, ecosystem, + globalFeeWallet, groupAdmin, + INIT_POOL_ORIGINATION_FEE, marginfiGroup, oracles, verbose, @@ -29,6 +31,7 @@ import { } from "./utils/pdas"; import { assert } from "chai"; import { printBufferGroups } from "./utils/tools"; +import { wrappedI80F48toBigNumber } from "@mrgnlabs/mrgn-common"; describe("Lending pool add bank (add bank to group)", () => { const program = workspace.Marginfi as Program; @@ -38,6 +41,10 @@ describe("Lending pool add bank (add bank to group)", () => { let bankKey = bankKeypairUsdc.publicKey; const now = Date.now() / 1000; + const feeAccSolBefore = await program.provider.connection.getBalance( + globalFeeWallet + ); + await groupAdmin.userMarginProgram!.provider.sendAndConfirm!( new Transaction().add( await addBank(program, { @@ -46,16 +53,26 @@ describe("Lending pool add bank (add bank to group)", () => { feePayer: groupAdmin.wallet.publicKey, bankMint: ecosystem.usdcMint.publicKey, bank: bankKey, + // globalFeeWallet: globalFeeWallet, config: setConfig, }) ), [bankKeypairUsdc] ); + const feeAccSolAfter = await program.provider.connection.getBalance( + globalFeeWallet + ); + if (verbose) { console.log("*init USDC bank " + bankKey); + console.log( + " Origination fee collected: " + (feeAccSolAfter - feeAccSolBefore) + ); } + assert.equal(feeAccSolAfter - feeAccSolBefore, INIT_POOL_ORIGINATION_FEE); + let bankData = ( await program.provider.connection.getAccountInfo(bankKey) ).data.subarray(8); @@ -116,10 +133,11 @@ describe("Lending pool add bank (add bank to group)", () => { assertI80F48Approx(interest.optimalUtilizationRate, 0.5, tolerance); assertI80F48Approx(interest.plateauInterestRate, 0.6, tolerance); assertI80F48Approx(interest.maxInterestRate, 3, tolerance); - assertI80F48Equal(interest.insuranceFeeFixedApr, 0); - assertI80F48Equal(interest.insuranceIrFee, 0); - assertI80F48Equal(interest.protocolFixedFeeApr, 0); - assertI80F48Equal(interest.protocolIrFee, 0); + + assertI80F48Approx(interest.insuranceFeeFixedApr, 0.01, tolerance); + assertI80F48Approx(interest.insuranceIrFee, 0.02, tolerance); + assertI80F48Approx(interest.protocolFixedFeeApr, 0.03, tolerance); + assertI80F48Approx(interest.protocolIrFee, 0.04, tolerance); assert.deepEqual(config.operationalState, { operational: {} }); assert.deepEqual(config.oracleSetup, { pythLegacy: {} }); @@ -127,6 +145,8 @@ describe("Lending pool add bank (add bank to group)", () => { assert.deepEqual(config.riskTier, { collateral: {} }); assertBNEqual(config.totalAssetValueInitLimit, 100_000_000_000); assert.equal(config.oracleMaxAge, 100); + + assertI80F48Equal(bank.collectedProgramFeesOutstanding, 0); }); it("(admin) Add bank (token A) - happy path", async () => { @@ -141,6 +161,7 @@ describe("Lending pool add bank (add bank to group)", () => { feePayer: groupAdmin.wallet.publicKey, bankMint: ecosystem.tokenAMint.publicKey, bank: bankKey, + // globalFeeWallet: globalFeeWallet, config: config, }) ), diff --git a/tests/rootHooks.ts b/tests/rootHooks.ts index bf72966a7..a4885eb4f 100644 --- a/tests/rootHooks.ts +++ b/tests/rootHooks.ts @@ -10,8 +10,16 @@ import { SetupTestUserOptions, } from "./utils/mocks"; import { Marginfi } from "../target/types/marginfi"; -import { Keypair, Transaction } from "@solana/web3.js"; +import { + Keypair, + LAMPORTS_PER_SOL, + PublicKey, + SystemProgram, + Transaction, +} from "@solana/web3.js"; import { setupPythOracles } from "./utils/pyth_mocks"; +import { initGlobalFeeState } from "./utils/instructions"; +import { bigNumberToWrappedI80F48 } from "@mrgnlabs/mrgn-common"; export const ecosystem: Ecosystem = getGenericEcosystem(); export let oracles: Oracles = undefined; @@ -19,9 +27,16 @@ export const verbose = true; /** The program owner is also the provider wallet */ export let globalProgramAdmin: mockUser = undefined; export let groupAdmin: mockUser = undefined; +export let globalFeeWallet: PublicKey = undefined; export const users: mockUser[] = []; export const numUsers = 2; +/** Lamports charged when creating any pool */ +export const INIT_POOL_ORIGINATION_FEE = 1000; + +export const PROGRAM_FEE_FIXED = 0.01; +export const PROGRAM_FEE_RATE = 0.02; + /** Group used for all happy-path tests */ export const marginfiGroup = Keypair.generate(); /** Bank for USDC */ @@ -70,6 +85,29 @@ export const mochaHooks = { tx.add(...aIxes); tx.add(...bIxes); + let globalFeeKeypair = Keypair.generate(); + globalFeeWallet = globalFeeKeypair.publicKey; + // Send some sol to the global fee wallet for rent + tx.add( + SystemProgram.transfer({ + fromPubkey: wallet.publicKey, + toPubkey: globalFeeWallet, + lamports: 10 * LAMPORTS_PER_SOL, + }) + ); + + // Init the global fee state + tx.add( + await initGlobalFeeState(program, { + payer: provider.publicKey, + admin: wallet.payer.publicKey, + wallet: globalFeeWallet, + bankInitFlatSolFee: INIT_POOL_ORIGINATION_FEE, + programFeeFixed: bigNumberToWrappedI80F48(PROGRAM_FEE_FIXED), + programFeeRate: bigNumberToWrappedI80F48(PROGRAM_FEE_RATE), + }) + ); + await provider.sendAndConfirm(tx, [usdcMint, aMint, bMint]); const setupUserOptions: SetupTestUserOptions = { diff --git a/tests/utils/instructions.ts b/tests/utils/instructions.ts index 10c1f9241..c72cff0c5 100644 --- a/tests/utils/instructions.ts +++ b/tests/utils/instructions.ts @@ -11,6 +11,7 @@ import { } from "./pdas"; import { BankConfig } from "./types"; import { TOKEN_PROGRAM_ID } from "@solana/spl-token"; +import { WrappedI80F48 } from "@mrgnlabs/mrgn-common"; export const MAX_ORACLE_KEYS = 5; @@ -51,6 +52,7 @@ export const addBank = (program: Program, args: AddBankArgs) => { oracleKey: args.config.oracleKey, borrowLimit: args.config.borrowLimit, riskTier: args.config.riskTier, + pad0: [0, 0, 0, 0, 0, 0, 0], totalAssetValueInitLimit: args.config.totalAssetValueInitLimit, oracleMaxAge: args.config.oracleMaxAge, }) @@ -60,6 +62,8 @@ export const addBank = (program: Program, args: AddBankArgs) => { feePayer: args.feePayer, bankMint: args.bankMint, bank: args.bank, + // globalFeeState: deriveGlobalFeeState(id), + // globalFeeWallet: args.globalFeeWallet, // liquidityVaultAuthority = deriveLiquidityVaultAuthority(id, bank); // liquidityVault = deriveLiquidityVault(id, bank); // insuranceVaultAuthority = deriveInsuranceVaultAuthority(id, bank); @@ -114,6 +118,7 @@ export const groupInitialize = ( .marginfiGroupInitialize() .accounts({ marginfiGroup: args.marginfiGroup, + // feeState: deriveGlobalFeeState(id), admin: args.admin, // systemProgram: SystemProgram.programId, }) @@ -121,3 +126,64 @@ export const groupInitialize = ( return ix; }; + +export type InitGlobalFeeStateArgs = { + payer: PublicKey; + admin: PublicKey; + wallet: PublicKey; + bankInitFlatSolFee: number; + programFeeFixed: WrappedI80F48; + programFeeRate: WrappedI80F48; +}; + +export const initGlobalFeeState = ( + program: Program, + args: InitGlobalFeeStateArgs +) => { + const ix = program.methods + .initGlobalFeeState( + args.admin, + args.wallet, + args.bankInitFlatSolFee, + args.programFeeFixed, + args.programFeeRate + ) + .accounts({ + payer: args.payer, + // feeState = deriveGlobalFeeState(id), + // rent = SYSVAR_RENT_PUBKEY, + // systemProgram: SystemProgram.programId, + }) + .instruction(); + + return ix; +}; + +export type EditGlobalFeeStateArgs = { + admin: PublicKey; + wallet: PublicKey; + bankInitFlatSolFee: number; + programFeeFixed: WrappedI80F48; + programFeeRate: WrappedI80F48; +}; + +// TODO add test for this +export const editGlobalFeeState = ( + program: Program, + args: EditGlobalFeeStateArgs +) => { + const ix = program.methods + .editGlobalFeeState( + args.wallet, + args.bankInitFlatSolFee, + args.programFeeFixed, + args.programFeeRate + ) + .accounts({ + globalFeeAdmin: args.admin, + // feeState = deriveGlobalFeeState(id), + }) + .instruction(); + + return ix; +}; diff --git a/tests/utils/pdas.ts b/tests/utils/pdas.ts index 2594ccfad..028b44310 100644 --- a/tests/utils/pdas.ts +++ b/tests/utils/pdas.ts @@ -50,3 +50,10 @@ export const deriveFeeVault = (programId: PublicKey, bank: PublicKey) => { programId ); }; + +export const deriveGlobalFeeState = (programId: PublicKey) => { + return PublicKey.findProgramAddressSync( + [Buffer.from("feestate", "utf-8")], + programId + ); +}; diff --git a/tests/utils/types.ts b/tests/utils/types.ts index 078dc781a..855dd4602 100644 --- a/tests/utils/types.ts +++ b/tests/utils/types.ts @@ -93,7 +93,10 @@ export type InterestRateConfig = { * * optimalUtilizationRate = .5 * * plateauInterestRate = .6 * * maxInterestRate = 3 - * * All others values = 0 + * * insuranceFeeFixedApr = .01 + * * insuranceIrFee = .02 + * * protocolFixedFeeApr = .03 + * * protocolIrFee = .04 * @returns */ export const defaultInterestRateConfig = () => { @@ -101,10 +104,10 @@ export const defaultInterestRateConfig = () => { optimalUtilizationRate: bigNumberToWrappedI80F48(0.5), plateauInterestRate: bigNumberToWrappedI80F48(0.6), maxInterestRate: bigNumberToWrappedI80F48(3), - insuranceFeeFixedApr: I80F48_ZERO, - insuranceIrFee: I80F48_ZERO, - protocolFixedFeeApr: I80F48_ZERO, - protocolIrFee: I80F48_ZERO, + insuranceFeeFixedApr: bigNumberToWrappedI80F48(0.01), + insuranceIrFee: bigNumberToWrappedI80F48(0.02), + protocolFixedFeeApr: bigNumberToWrappedI80F48(0.03), + protocolIrFee: bigNumberToWrappedI80F48(0.04), }; return config; }; diff --git a/tools/llama-snapshot-tool/src/bin/main.rs b/tools/llama-snapshot-tool/src/bin/main.rs index 7894d7f1e..0b0f77708 100644 --- a/tools/llama-snapshot-tool/src/bin/main.rs +++ b/tools/llama-snapshot-tool/src/bin/main.rs @@ -8,7 +8,7 @@ use futures::future::join_all; use lazy_static::lazy_static; use marginfi::{ constants::{EMISSIONS_FLAG_BORROW_ACTIVE, EMISSIONS_FLAG_LENDING_ACTIVE, SECONDS_PER_YEAR}, - state::marginfi_group::Bank, + state::marginfi_group::{Bank, ComputedInterestRates, MarginfiGroup}, }; use reqwest::header::CONTENT_TYPE; use s3::{creds::Credentials, Bucket, Region}; @@ -60,13 +60,20 @@ async fn main() -> Result<()> { let rpc = program.rpc(); let banks = program.accounts::(vec![])?; + let groups = program.accounts::(vec![])?; + let groups_map = groups + .iter() + .map(|(pk, group)| (*pk, group)) + .collect::>(); println!("Found {} banks", banks.len()); let snapshot = join_all( banks .iter() - .map(|(bank_pk, bank)| DefiLammaPoolInfo::from_bank(bank, bank_pk, &rpc)) + .map(|(bank_pk, bank)| { + DefiLammaPoolInfo::from_bank(bank, bank_pk, &rpc, groups_map.get(bank_pk).unwrap()) + }) .collect::>(), ) .await @@ -123,7 +130,12 @@ struct DefiLammaPoolInfo { } impl DefiLammaPoolInfo { - pub async fn from_bank(bank: &Bank, bank_pk: &Pubkey, rpc_client: &RpcClient) -> Result { + pub async fn from_bank( + bank: &Bank, + bank_pk: &Pubkey, + rpc_client: &RpcClient, + group: &MarginfiGroup, + ) -> Result { let ltv = I80F48::ONE / I80F48::from(bank.config.liability_weight_init); let reward_tokens = if bank.emissions_mint != Pubkey::default() { vec![bank.emissions_mint.to_string()] @@ -152,13 +164,18 @@ impl DefiLammaPoolInfo { I80F48::ZERO }; - let (lending_rate, borrowing_rate, _, _) = bank + let ir_calc = bank .config .interest_rate_config - .calc_interest_rate(ur) - .ok_or_else(|| { - anyhow::anyhow!("Failed to calculate interest rate for bank {}", bank_pk) - })?; + .create_interest_rate_calculator(group); + + let ComputedInterestRates { + lending_rate_apr, + borrowing_rate_apr, + .. + } = ir_calc.calc_interest_rate(ur).ok_or_else(|| { + anyhow::anyhow!("Failed to calculate interest rate for bank {}", bank_pk) + })?; let (apr_reward, apr_reward_borrow) = if bank.emissions_mint.ne(&Pubkey::default()) { let emissions_token_price = fetch_price_from_birdeye(&bank.emissions_mint).await?; @@ -202,22 +219,22 @@ impl DefiLammaPoolInfo { ltv: ltv.to_num(), reward_tokens, apy_base: dec_to_percentage(apr_to_apy( - lending_rate.to_num(), + lending_rate_apr.to_num(), SECONDS_PER_YEAR.to_num(), )), apy_reward: apr_reward.map(|a| { dec_to_percentage(apr_to_apy( - (lending_rate + a).to_num(), + (lending_rate_apr + a).to_num(), SECONDS_PER_YEAR.to_num(), )) }), apy_base_borrow: dec_to_percentage(apr_to_apy( - borrowing_rate.to_num(), + borrowing_rate_apr.to_num(), SECONDS_PER_YEAR.to_num(), )), apy_reward_borrow: apr_reward_borrow.map(|a| { dec_to_percentage(apr_to_apy( - (borrowing_rate + a).to_num(), + (borrowing_rate_apr + a).to_num(), SECONDS_PER_YEAR.to_num(), )) }), From f51c25a111f67319bc0b47fee4f36a48d84c134e Mon Sep 17 00:00:00 2001 From: Jon Gurary <91919816+jgur-psyops@users.noreply.github.com> Date: Wed, 23 Oct 2024 17:06:41 -0400 Subject: [PATCH 06/59] Origination fees on borrow (#239) Adds per-bank configurable origination fee that is recorded on the bank upon any borrow. The fee is configurable by the group admin, and is split between the program (i.e. fee state wallet) and the group. --- README.md | 10 ++-- clients/rust/marginfi-cli/src/entrypoint.rs | 4 ++ .../instructions/marginfi_account/borrow.rs | 60 ++++++++++++++++++- programs/marginfi/src/state/marginfi_group.rs | 39 ++++++------ .../tests/admin_actions/bankruptcy.rs | 13 ++++ .../tests/admin_actions/setup_bank.rs | 1 + .../marginfi/tests/user_actions/borrow.rs | 46 ++++++++++++-- programs/marginfi/tests/user_actions/repay.rs | 23 ++++++- test-utils/src/test.rs | 22 +++++++ 9 files changed, 181 insertions(+), 37 deletions(-) diff --git a/README.md b/README.md index a3c19641d..d55f6f925 100644 --- a/README.md +++ b/README.md @@ -76,14 +76,12 @@ use an x86 toolchain when compiling and running the tests. ## Rust Tests -Run the full test suite with `.scripts/test-program.sh ` - -- e.g. `.scripts/test-program.sh all --sane` +Run the full test suite with `./scripts/test-program.sh ` +* e.g. `./scripts/test-program.sh all --sane` Run a single test: -`.scripts/test-program.sh ` - -- e.g. `.scripts/test-program.sh marginfi configure_bank_success --verbose` +`./scripts/test-program.sh ` +* e.g. `./scripts/test-program.sh marginfi configure_bank_success --verbose` ## Localnet Anchor Tests diff --git a/clients/rust/marginfi-cli/src/entrypoint.rs b/clients/rust/marginfi-cli/src/entrypoint.rs index 39d08bddf..7df6f2f06 100644 --- a/clients/rust/marginfi-cli/src/entrypoint.rs +++ b/clients/rust/marginfi-cli/src/entrypoint.rs @@ -257,6 +257,8 @@ pub enum BankCommand { pf_fa: Option, #[clap(long, help = "Protocol IR fee")] pf_ir: Option, + #[clap(long, help = "Protocol origination fee")] + pf_or: Option, #[clap(long, arg_enum, help = "Bank risk tier")] risk_tier: Option, #[clap(long, arg_enum, help = "Bank oracle type")] @@ -669,6 +671,7 @@ fn bank(subcmd: BankCommand, global_options: &GlobalOptions) -> Result<()> { if_ir, pf_fa, pf_ir, + pf_or, risk_tier, oracle_type, oracle_key, @@ -718,6 +721,7 @@ fn bank(subcmd: BankCommand, global_options: &GlobalOptions) -> Result<()> { insurance_ir_fee: if_ir.map(|x| I80F48::from_num(x).into()), protocol_fixed_fee_apr: pf_fa.map(|x| I80F48::from_num(x).into()), protocol_ir_fee: pf_ir.map(|x| I80F48::from_num(x).into()), + protocol_origination_fee: pf_or.map(|x| I80F48::from_num(x).into()), }), risk_tier: risk_tier.map(|x| x.into()), total_asset_value_init_limit: usd_init_limit, diff --git a/programs/marginfi/src/instructions/marginfi_account/borrow.rs b/programs/marginfi/src/instructions/marginfi_account/borrow.rs index 2fca85e8f..3e20ffc2c 100644 --- a/programs/marginfi/src/instructions/marginfi_account/borrow.rs +++ b/programs/marginfi/src/instructions/marginfi_account/borrow.rs @@ -2,6 +2,7 @@ use crate::{ bank_signer, check, constants::{LIQUIDITY_VAULT_AUTHORITY_SEED, LIQUIDITY_VAULT_SEED}, events::{AccountEventHeader, LendingAccountBorrowEvent}, + math_error, prelude::{MarginfiError, MarginfiGroup, MarginfiResult}, state::{ marginfi_account::{BankAccountWrapper, MarginfiAccount, RiskEngine, DISABLED_FLAG}, @@ -43,6 +44,8 @@ pub fn lending_account_borrow<'info>( )?; let mut marginfi_account = marginfi_account_loader.load_mut()?; + let group = &marginfi_group_loader.load()?; + let program_fee_rate: I80F48 = group.fee_state_cache.program_fee_rate.into(); check!( !marginfi_account.get_flag(DISABLED_FLAG), @@ -51,15 +54,21 @@ pub fn lending_account_borrow<'info>( bank_loader.load_mut()?.accrue_interest( clock.unix_timestamp, - &*marginfi_group_loader.load()?, + group, #[cfg(not(feature = "client"))] bank_loader.key(), )?; + let mut origination_fee: I80F48 = I80F48::ZERO; { let mut bank = bank_loader.load_mut()?; let liquidity_vault_authority_bump = bank.liquidity_vault_authority_bump; + let origination_fee_rate: I80F48 = bank + .config + .interest_rate_config + .protocol_origination_fee + .into(); let mut bank_account = BankAccountWrapper::find_or_create( &bank_loader.key(), @@ -80,7 +89,21 @@ pub fn lending_account_borrow<'info>( .transpose()? .unwrap_or(amount); - bank_account.borrow(I80F48::from_num(amount_pre_fee))?; + let origination_fee_u64: u64; + if !origination_fee_rate.is_zero() { + origination_fee = I80F48::from_num(amount_pre_fee) + .checked_mul(origination_fee_rate) + .ok_or_else(math_error!())?; + origination_fee_u64 = origination_fee.checked_to_num().ok_or_else(math_error!())?; + + // Incurs a borrow that includes the origination fee (but withdraws just the amt) + bank_account.borrow(I80F48::from_num(amount_pre_fee) + origination_fee)?; + } else { + // Incurs a borrow for the amount without any fee + origination_fee_u64 = 0; + bank_account.borrow(I80F48::from_num(amount_pre_fee))?; + } + bank_account.withdraw_spl_transfer( amount_pre_fee, bank_liquidity_vault.to_account_info(), @@ -105,8 +128,39 @@ pub fn lending_account_borrow<'info>( }, bank: bank_loader.key(), mint: bank.mint, - amount: amount_pre_fee, + amount: amount_pre_fee + origination_fee_u64, }); + } // release mutable borrow of bank + + // The program and/or group fee account gains the origination fee + { + let mut bank = bank_loader.load_mut()?; + + if !origination_fee.is_zero() { + let mut bank_fees_after: I80F48 = bank.collected_group_fees_outstanding.into(); + + if !program_fee_rate.is_zero() { + // Some portion of the origination fee to goes to program fees + let program_fee_amount: I80F48 = origination_fee + .checked_mul(program_fee_rate) + .ok_or_else(math_error!())?; + // The remainder of the origination fee goes to group fees + bank_fees_after = bank_fees_after + .saturating_add(origination_fee.saturating_sub(program_fee_amount)); + + // Update the bank's program fees + let program_fees_before: I80F48 = bank.collected_program_fees_outstanding.into(); + bank.collected_program_fees_outstanding = program_fees_before + .saturating_add(program_fee_amount) + .into(); + } else { + // If program fee rate is zero, add the full origination fee to group fees + bank_fees_after = bank_fees_after.saturating_add(origination_fee); + } + + // Update the bank's group fees + bank.collected_group_fees_outstanding = bank_fees_after.into(); + } } // Check account health, if below threshold fail transaction diff --git a/programs/marginfi/src/state/marginfi_group.rs b/programs/marginfi/src/state/marginfi_group.rs index f7a553927..183efa47b 100644 --- a/programs/marginfi/src/state/marginfi_group.rs +++ b/programs/marginfi/src/state/marginfi_group.rs @@ -151,29 +151,22 @@ pub struct InterestRateConfigCompact { pub insurance_ir_fee: WrappedI80F48, pub protocol_fixed_fee_apr: WrappedI80F48, pub protocol_ir_fee: WrappedI80F48, + pub protocol_origination_fee: WrappedI80F48, } impl From for InterestRateConfig { - fn from( - InterestRateConfigCompact { - optimal_utilization_rate, - plateau_interest_rate, - max_interest_rate, - insurance_fee_fixed_apr, - insurance_ir_fee, - protocol_fixed_fee_apr, - protocol_ir_fee, - }: InterestRateConfigCompact, - ) -> Self { - Self { - optimal_utilization_rate, - plateau_interest_rate, - max_interest_rate, - insurance_fee_fixed_apr, - insurance_ir_fee, - protocol_fixed_fee_apr, - protocol_ir_fee, - _padding: [0; 32], + fn from(ir_config: InterestRateConfigCompact) -> Self { + InterestRateConfig { + optimal_utilization_rate: ir_config.optimal_utilization_rate, + plateau_interest_rate: ir_config.plateau_interest_rate, + max_interest_rate: ir_config.max_interest_rate, + insurance_fee_fixed_apr: ir_config.insurance_fee_fixed_apr, + insurance_ir_fee: ir_config.insurance_ir_fee, + protocol_fixed_fee_apr: ir_config.protocol_fixed_fee_apr, + protocol_ir_fee: ir_config.protocol_ir_fee, + protocol_origination_fee: ir_config.protocol_origination_fee, + _padding0: [0; 16], + _padding1: [[0; 32]; 3], } } } @@ -188,6 +181,7 @@ impl From for InterestRateConfigCompact { insurance_ir_fee: ir_config.insurance_ir_fee, protocol_fixed_fee_apr: ir_config.protocol_fixed_fee_apr, protocol_ir_fee: ir_config.protocol_ir_fee, + protocol_origination_fee: ir_config.protocol_origination_fee, } } } @@ -215,8 +209,10 @@ pub struct InterestRateConfig { pub protocol_fixed_fee_apr: WrappedI80F48, /// Earned by the group, goes to `collected_group_fees_outstanding` pub protocol_ir_fee: WrappedI80F48, + pub protocol_origination_fee: WrappedI80F48, - pub _padding: [u32; 32], + pub _padding0: [u8; 16], + pub _padding1: [[u8; 32]; 3], } impl InterestRateConfig { @@ -418,6 +414,7 @@ pub struct InterestRateConfigOpt { pub insurance_ir_fee: Option, pub protocol_fixed_fee_apr: Option, pub protocol_ir_fee: Option, + pub protocol_origination_fee: Option, } /// Group level configuration to be used in bank accounts. diff --git a/programs/marginfi/tests/admin_actions/bankruptcy.rs b/programs/marginfi/tests/admin_actions/bankruptcy.rs index ff28e01ac..a0de966e4 100644 --- a/programs/marginfi/tests/admin_actions/bankruptcy.rs +++ b/programs/marginfi/tests/admin_actions/bankruptcy.rs @@ -285,6 +285,7 @@ async fn marginfi_group_handle_bankruptcy_success( #[test_case(10_000., BankMint::PyUSD, BankMint::SolSwb)] #[test_case(10_000., BankMint::PyUSD, BankMint::T22WithFee)] #[test_case(10_000., BankMint::T22WithFee, BankMint::Sol)] +#[test_case(10_000., BankMint::Usdc, BankMint::SolSwbOrigFee)] // Sol @ ~ $153 #[tokio::test] async fn marginfi_group_handle_bankruptcy_success_fully_insured( borrow_amount: f64, @@ -447,7 +448,18 @@ async fn marginfi_group_handle_bankruptcy_success_fully_insured( test_f.get_bank(&debt_mint).mint.mint.decimals, f64 ); + let origination_fee_rate: I80F48 = debt_bank + .config + .interest_rate_config + .protocol_origination_fee + .into(); + let origination_fee: I80F48 = I80F48::from_num(borrow_amount_native) + .checked_mul(origination_fee_rate) + .unwrap() + .ceil(); // Round up when repaying + let origination_fee_u64: u64 = origination_fee.checked_to_num().expect("out of bounds"); let actual_borrow_position = borrow_amount_native + + origination_fee_u64 + debt_bank_mint_state .get_extension::() .map(|tf| { @@ -466,6 +478,7 @@ async fn marginfi_group_handle_bankruptcy_success_fully_insured( }) .unwrap_or(0), ); + let expected_liquidity_vault_delta = I80F48::from(actual_borrow_position); let actual_liquidity_vault_delta = post_liquidity_vault_balance - pre_liquidity_vault_balance; diff --git a/programs/marginfi/tests/admin_actions/setup_bank.rs b/programs/marginfi/tests/admin_actions/setup_bank.rs index 9aeeddf0c..4ae421f10 100644 --- a/programs/marginfi/tests/admin_actions/setup_bank.rs +++ b/programs/marginfi/tests/admin_actions/setup_bank.rs @@ -319,6 +319,7 @@ async fn configure_bank_success(bank_mint: BankMint) -> anyhow::Result<()> { insurance_ir_fee: Some(I80F48::from_num(0.11).into()), protocol_fixed_fee_apr: Some(I80F48::from_num(0.51).into()), protocol_ir_fee: Some(I80F48::from_num(0.011).into()), + protocol_origination_fee: Some(I80F48::ZERO.into()), }), ..BankConfigOpt::default() }; diff --git a/programs/marginfi/tests/user_actions/borrow.rs b/programs/marginfi/tests/user_actions/borrow.rs index b2755368d..e905a1360 100644 --- a/programs/marginfi/tests/user_actions/borrow.rs +++ b/programs/marginfi/tests/user_actions/borrow.rs @@ -19,6 +19,7 @@ use test_case::test_case; #[test_case(128932.0, 9834.0, BankMint::PyUSD, BankMint::SolSwb)] #[test_case(240., 0.092, BankMint::PyUSD, BankMint::T22WithFee)] #[test_case(36., 1.7, BankMint::T22WithFee, BankMint::Sol)] +#[test_case(200., 1.1, BankMint::Usdc, BankMint::SolSwbOrigFee)] // Sol @ ~ $153 #[tokio::test] async fn marginfi_account_borrow_success( deposit_amount: f64, @@ -78,6 +79,7 @@ async fn marginfi_account_borrow_success( // ------------------------------------------------------------------------- let debt_bank_f = test_f.get_bank(&debt_mint); + let bank_before = debt_bank_f.load().await; let pre_vault_balance = debt_bank_f .get_vault_token_account(BankVaultType::Liquidity) @@ -85,6 +87,8 @@ async fn marginfi_account_borrow_success( .balance() .await; let pre_user_debt_accounted = I80F48::ZERO; + let pre_fee_group_fees: I80F48 = bank_before.collected_group_fees_outstanding.into(); + let pre_fee_program_fees: I80F48 = bank_before.collected_program_fees_outstanding.into(); let res = user_mfi_account_f .try_bank_borrow(user_debt_token_account_f.key, debt_bank_f, borrow_amount) @@ -101,9 +105,7 @@ async fn marginfi_account_borrow_success( .lending_account .get_balance(&debt_bank_f.key) .unwrap(); - let post_user_debt_accounted = debt_bank_f - .load() - .await + let post_user_debt_accounted = bank_before .get_asset_amount(balance.liability_shares.into()) .unwrap(); @@ -119,6 +121,23 @@ async fn marginfi_account_borrow_success( }) .unwrap_or(0); let borrow_amount_pre_fee = borrow_amount_native + borrow_fee; + let origination_fee_rate: I80F48 = bank_before + .config + .interest_rate_config + .protocol_origination_fee + .into(); + let program_fee_rate: I80F48 = test_f + .marginfi_group + .load() + .await + .fee_state_cache + .program_fee_rate + .into(); + let origination_fee: I80F48 = I80F48::from_num(borrow_amount_native) + .checked_mul(origination_fee_rate) + .unwrap(); + let program_origination_fee: I80F48 = origination_fee.checked_mul(program_fee_rate).unwrap(); + let group_origination_fee: I80F48 = origination_fee.saturating_sub(program_origination_fee); let active_balance_count = marginfi_account .lending_account @@ -130,13 +149,30 @@ async fn marginfi_account_borrow_success( let actual_liquidity_vault_delta = post_vault_balance as i64 - pre_vault_balance as i64; let accounted_user_balance_delta = post_user_debt_accounted - pre_user_debt_accounted; + // The liquidity vault paid out just the pre-origination fee amount (e.g. what the user borrowed + // before accounting for the fee) assert_eq!(expected_liquidity_vault_delta, actual_liquidity_vault_delta); assert_eq_with_tolerance!( - I80F48::from(expected_liquidity_vault_delta), + // Note: the user still gains debt which includes the origination fee + I80F48::from(expected_liquidity_vault_delta) - origination_fee, -accounted_user_balance_delta, 1 ); + // The outstanding origination fee is recorded + let bank_after = debt_bank_f.load().await; + let post_fee_program_fees: I80F48 = bank_after.collected_program_fees_outstanding.into(); + assert_eq!( + pre_fee_program_fees + program_origination_fee, + post_fee_program_fees + ); + + let post_fee_group_fees: I80F48 = bank_after.collected_group_fees_outstanding.into(); + assert_eq!( + pre_fee_group_fees + group_origination_fee, + post_fee_group_fees + ); + Ok(()) } @@ -147,7 +183,7 @@ async fn marginfi_account_borrow_success( #[test_case(128_932., 10_000., 15_000.0, BankMint::PyUSD, BankMint::SolSwb)] #[test_case(240., 0.092, 500., BankMint::PyUSD, BankMint::T22WithFee)] #[test_case(36., 1.7, 1.9, BankMint::T22WithFee, BankMint::Sol)] -#[test_case(1., 100., 155.1, BankMint::SolSwbPull, BankMint::Usdc)] // Sol @ $155 +#[test_case(1., 100., 155.1, BankMint::SolSwbPull, BankMint::Usdc)] // Sol @ ~ $153 #[tokio::test] async fn marginfi_account_borrow_failure_not_enough_collateral( deposit_amount: f64, diff --git a/programs/marginfi/tests/user_actions/repay.rs b/programs/marginfi/tests/user_actions/repay.rs index 64a2b761a..ea045ced3 100644 --- a/programs/marginfi/tests/user_actions/repay.rs +++ b/programs/marginfi/tests/user_actions/repay.rs @@ -16,6 +16,7 @@ use test_case::test_case; #[test_case(128932., 9834., BankMint::PyUSD, BankMint::SolSwb)] #[test_case(240., 0.092, BankMint::PyUSD, BankMint::T22WithFee)] #[test_case(36., 20., BankMint::T22WithFee, BankMint::Sol)] +#[test_case(200., 1.1, BankMint::Usdc, BankMint::SolSwbOrigFee)] // Sol @ ~ $153 #[tokio::test] async fn marginfi_account_repay_success( borrow_amount: f64, @@ -142,6 +143,7 @@ async fn marginfi_account_repay_success( #[test_case(128932., BankMint::PyUSD, BankMint::SolSwb)] #[test_case(240., BankMint::PyUSD, BankMint::T22WithFee)] #[test_case(36., BankMint::T22WithFee, BankMint::Sol)] +#[test_case(200., BankMint::Usdc, BankMint::SolSwbOrigFee)] // Sol @ ~ $153 #[tokio::test] async fn marginfi_account_repay_all_success( borrow_amount: f64, @@ -261,8 +263,25 @@ async fn marginfi_account_repay_all_success( }) .unwrap_or(0); - let expected_liquidity_delta = - I80F48::from(native!(borrow_amount, debt_bank.mint.mint.decimals, f64) + borrow_fee); + let origination_fee_rate: I80F48 = debt_bank + .load() + .await + .config + .interest_rate_config + .protocol_origination_fee + .into(); + let origination_fee: I80F48 = + I80F48::from_num(native!(borrow_amount, debt_bank.mint.mint.decimals, f64)) + .checked_mul(origination_fee_rate) + .unwrap() + .ceil(); // Round up when repaying + let origination_fee_u64: u64 = origination_fee.checked_to_num().expect("out of bounds"); + + let expected_liquidity_delta = I80F48::from( + native!(borrow_amount, debt_bank.mint.mint.decimals, f64) + + borrow_fee + + origination_fee_u64, + ); let actual_liquidity_delta = I80F48::from(post_vault_balance) - I80F48::from(pre_vault_balance); let accounted_liquidity_delta = post_accounted_vault_balance - pre_accounted_vault_balance; diff --git a/test-utils/src/test.rs b/test-utils/src/test.rs index 507403189..146091865 100644 --- a/test-utils/src/test.rs +++ b/test-utils/src/test.rs @@ -56,6 +56,10 @@ impl TestSettings { mint: BankMint::SolSwbPull, ..TestBankSetting::default() }, + TestBankSetting { + mint: BankMint::SolSwbOrigFee, + ..TestBankSetting::default() + }, TestBankSetting { mint: BankMint::SolEquivalent, ..TestBankSetting::default() @@ -188,6 +192,7 @@ pub enum BankMint { Sol, SolSwb, SolSwbPull, + SolSwbOrigFee, SolEquivalent, SolEquivalent1, SolEquivalent2, @@ -275,6 +280,7 @@ lazy_static! { optimal_utilization_rate: I80F48!(0.5).into(), plateau_interest_rate: I80F48!(0.6).into(), max_interest_rate: I80F48!(3).into(), + protocol_origination_fee: I80F48!(0).into(), ..Default::default() }; pub static ref DEFAULT_TEST_BANK_CONFIG: BankConfig = BankConfig { @@ -296,6 +302,7 @@ lazy_static! { optimal_utilization_rate: I80F48!(0.5).into(), plateau_interest_rate: I80F48!(0.6).into(), max_interest_rate: I80F48!(3).into(), + protocol_origination_fee: I80F48!(0).into(), ..Default::default() }, ..Default::default() @@ -404,6 +411,17 @@ lazy_static! { oracle_keys: create_oracle_key_array(SWITCH_PULL_SOL_REAL_FEED), ..*DEFAULT_TEST_BANK_CONFIG }; + pub static ref DEFAULT_SB_PULL_WITH_ORIGINATION_FEE_BANK_CONFIG: BankConfig = BankConfig { + oracle_setup: OracleSetup::SwitchboardPull, + deposit_limit: native!(1_000_000, "SOL"), + borrow_limit: native!(1_000_000, "SOL"), + oracle_keys: create_oracle_key_array(SWITCH_PULL_SOL_REAL_FEED), + interest_rate_config: InterestRateConfig { + protocol_origination_fee: I80F48!(0.018).into(), + ..*DEFAULT_TEST_BANK_INTEREST_RATE_CONFIG + }, + ..*DEFAULT_TEST_BANK_CONFIG + }; } pub const USDC_MINT_DECIMALS: u8 = 6; @@ -644,6 +662,10 @@ impl TestFixture { BankMint::SolSwbPull => { (&sol_mint_f, *DEFAULT_SB_PULL_SOL_TEST_REAL_BANK_CONFIG) } + BankMint::SolSwbOrigFee => ( + &sol_mint_f, + *DEFAULT_SB_PULL_WITH_ORIGINATION_FEE_BANK_CONFIG, + ), BankMint::SolEquivalent => ( &sol_equivalent_mint_f, *DEFAULT_SOL_EQUIVALENT_TEST_BANK_CONFIG, From 063a5defd89840dd53c018c563d96d0fad9dd922 Mon Sep 17 00:00:00 2001 From: Jon Gurary <91919816+jgur-psyops@users.noreply.github.com> Date: Thu, 21 Nov 2024 02:10:21 -0500 Subject: [PATCH 07/59] CLI commands for managing fee state (#257) Adds commands for: * init_fee_state * edit_fee_state * config_group_fee * propagate_fee (but you should probably use a script instead of updating one group at a time) --- clients/rust/marginfi-cli/src/entrypoint.rs | 66 ++++++- .../rust/marginfi-cli/src/processor/admin.rs | 4 +- .../rust/marginfi-cli/src/processor/mod.rs | 164 ++++++++++++++++++ 3 files changed, 231 insertions(+), 3 deletions(-) diff --git a/clients/rust/marginfi-cli/src/entrypoint.rs b/clients/rust/marginfi-cli/src/entrypoint.rs index 7df6f2f06..c655ea43f 100644 --- a/clients/rust/marginfi-cli/src/entrypoint.rs +++ b/clients/rust/marginfi-cli/src/entrypoint.rs @@ -161,6 +161,36 @@ pub enum GroupCommand { #[clap(short = 't', long)] existing_token_lookup_tables: Vec, }, + InitFeeState { + #[clap(long)] + admin: Pubkey, + #[clap(long)] + fee_wallet: Pubkey, + #[clap(long)] + bank_init_flat_sol_fee: u32, + #[clap(long)] + program_fee_fixed: f64, + #[clap(long)] + program_fee_rate: f64, + }, + EditFeeState { + #[clap(long)] + fee_wallet: Pubkey, + #[clap(long)] + bank_init_flat_sol_fee: u32, + #[clap(long)] + program_fee_fixed: f64, + #[clap(long)] + program_fee_rate: f64, + }, + ConfigGroupFee { + #[clap(long)] + flag: u64, + }, + PropagateFee { + #[clap(long)] + marginfi_group: Pubkey, + }, } #[derive(Clone, Copy, Debug, Parser, ArgEnum)] @@ -309,6 +339,8 @@ pub enum BankCommand { }, CollectFees { bank: Pubkey, + #[clap(help = "The ATA for fee_state.global_fee_wallet and the bank's mint")] + fee_ata: Pubkey, }, WithdrawFees { bank: Pubkey, @@ -635,6 +667,36 @@ fn group(subcmd: GroupCommand, global_options: &GlobalOptions) -> Result<()> { &profile, existing_token_lookup_tables, ), + GroupCommand::InitFeeState { + admin, + fee_wallet, + bank_init_flat_sol_fee, + program_fee_fixed, + program_fee_rate, + } => processor::initialize_fee_state( + config, + admin, + fee_wallet, + bank_init_flat_sol_fee, + program_fee_fixed, + program_fee_rate, + ), + GroupCommand::EditFeeState { + fee_wallet, + bank_init_flat_sol_fee, + program_fee_fixed, + program_fee_rate, + } => processor::edit_fee_state( + config, + fee_wallet, + bank_init_flat_sol_fee, + program_fee_fixed, + program_fee_rate, + ), + GroupCommand::ConfigGroupFee { flag } => processor::config_group_fee(config, profile, flag), + GroupCommand::PropagateFee { marginfi_group } => { + processor::propagate_fee(config, marginfi_group) + } } } @@ -763,7 +825,9 @@ fn bank(subcmd: BankCommand, global_options: &GlobalOptions) -> Result<()> { BankCommand::SettleAllEmissions { bank } => { processor::emissions::claim_all_emissions_for_bank(&config, &profile, bank) } - BankCommand::CollectFees { bank } => processor::admin::process_collect_fees(config, bank), + BankCommand::CollectFees { bank, fee_ata } => { + processor::admin::process_collect_fees(config, bank, fee_ata) + } BankCommand::WithdrawFees { bank, amount, diff --git a/clients/rust/marginfi-cli/src/processor/admin.rs b/clients/rust/marginfi-cli/src/processor/admin.rs index 2c8f741dd..2552761ac 100644 --- a/clients/rust/marginfi-cli/src/processor/admin.rs +++ b/clients/rust/marginfi-cli/src/processor/admin.rs @@ -13,7 +13,7 @@ use solana_sdk::{ instruction::Instruction, message::Message, pubkey::Pubkey, transaction::Transaction, }; -pub fn process_collect_fees(config: Config, bank_pk: Pubkey) -> Result<()> { +pub fn process_collect_fees(config: Config, bank_pk: Pubkey, fee_ata: Pubkey) -> Result<()> { let bank = config.mfi_program.account::(bank_pk)?; let rpc_client = config.mfi_program.rpc(); @@ -33,7 +33,7 @@ pub fn process_collect_fees(config: Config, bank_pk: Pubkey) -> Result<()> { liquidity_vault: bank.liquidity_vault, insurance_vault: bank.insurance_vault, fee_state: find_fee_state_pda(&marginfi::id()).0, - fee_ata: find_fee_state_pda(&marginfi::id()).0, // TODO + fee_ata, } .to_account_metas(Some(true)), data: marginfi::instruction::LendingPoolCollectBankFees {}.data(), diff --git a/clients/rust/marginfi-cli/src/processor/mod.rs b/clients/rust/marginfi-cli/src/processor/mod.rs index bcfa6f28d..987b930cd 100644 --- a/clients/rust/marginfi-cli/src/processor/mod.rs +++ b/clients/rust/marginfi-cli/src/processor/mod.rs @@ -991,6 +991,170 @@ pub fn process_set_user_flag( Ok(()) } +pub fn initialize_fee_state( + config: Config, + admin: Pubkey, + fee_wallet: Pubkey, + bank_init_flat_sol_fee: u32, + program_fee_fixed: f64, + program_fee_rate: f64, +) -> Result<()> { + let program_fee_fixed: WrappedI80F48 = I80F48::from_num(program_fee_fixed).into(); + let program_fee_rate: WrappedI80F48 = I80F48::from_num(program_fee_rate).into(); + + let rpc_client = config.mfi_program.rpc(); + + let fee_state_pubkey = find_fee_state_pda(&config.program_id).0; + + let initialize_fee_state_ixs_builder = config.mfi_program.request(); + + let initialize_fee_state_ixs = initialize_fee_state_ixs_builder + .accounts(marginfi::accounts::InitFeeState { + payer: config.authority(), + fee_state: fee_state_pubkey, + rent: sysvar::rent::id(), + system_program: system_program::id(), + }) + .args(marginfi::instruction::InitGlobalFeeState { + admin, + fee_wallet, + bank_init_flat_sol_fee, + program_fee_fixed, + program_fee_rate, + }) + .instructions()?; + + let recent_blockhash = rpc_client.get_latest_blockhash().unwrap(); + let message = Message::new(&initialize_fee_state_ixs, Some(&config.authority())); + let mut transaction = Transaction::new_unsigned(message); + transaction.partial_sign(&config.get_signers(false), recent_blockhash); + + match process_transaction(&transaction, &rpc_client, config.get_tx_mode()) { + Ok(sig) => println!("Fee state initialized (sig: {})", sig), + Err(err) => { + println!("Error during fee state initialization:\n{:#?}", err); + return Err(anyhow!("Error during fee state initialization")); + } + }; + + Ok(()) +} + +pub fn edit_fee_state( + config: Config, + fee_wallet: Pubkey, + bank_init_flat_sol_fee: u32, + program_fee_fixed: f64, + program_fee_rate: f64, +) -> Result<()> { + let program_fee_fixed: WrappedI80F48 = I80F48::from_num(program_fee_fixed).into(); + let program_fee_rate: WrappedI80F48 = I80F48::from_num(program_fee_rate).into(); + + let rpc_client = config.mfi_program.rpc(); + + let fee_state_pubkey = find_fee_state_pda(&config.program_id).0; + + let edit_fee_state_ixs_builder = config.mfi_program.request(); + + let edit_fee_state_ixs = edit_fee_state_ixs_builder + .accounts(marginfi::accounts::EditFeeState { + global_fee_admin: config.authority(), + fee_state: fee_state_pubkey, + }) + .args(marginfi::instruction::EditGlobalFeeState { + fee_wallet, + bank_init_flat_sol_fee, + program_fee_fixed, + program_fee_rate, + }) + .instructions()?; + + let recent_blockhash = rpc_client.get_latest_blockhash().unwrap(); + let message = Message::new(&edit_fee_state_ixs, Some(&config.authority())); + let mut transaction = Transaction::new_unsigned(message); + transaction.partial_sign(&config.get_signers(false), recent_blockhash); + + match process_transaction(&transaction, &rpc_client, config.get_tx_mode()) { + Ok(sig) => println!("Fee state edited (sig: {})", sig), + Err(err) => { + println!("Error during fee state edit:\n{:#?}", err); + return Err(anyhow!("Error during fee state edit")); + } + }; + + Ok(()) +} + +pub fn config_group_fee(config: Config, profile: Profile, flag: u64) -> Result<()> { + let rpc_client = config.mfi_program.rpc(); + let marginfi_group_pubkey = profile.marginfi_group.ok_or_else(|| { + anyhow!( + "Marginfi group does not exist for profile [{}]", + profile.name + ) + })?; + + let fee_state_pubkey = find_fee_state_pda(&profile.program_id.unwrap()).0; + + let config_group_fee_ixs_builder = config.mfi_program.request(); + + let config_group_fee_ixs = config_group_fee_ixs_builder + .accounts(marginfi::accounts::ConfigGroupFee { + marginfi_group: marginfi_group_pubkey, + global_fee_admin: config.authority(), + fee_state: fee_state_pubkey, + }) + .args(marginfi::instruction::ConfigGroupFee { flag }) + .instructions()?; + + let recent_blockhash = rpc_client.get_latest_blockhash().unwrap(); + let message = Message::new(&config_group_fee_ixs, Some(&config.authority())); + let mut transaction = Transaction::new_unsigned(message); + transaction.partial_sign(&config.get_signers(false), recent_blockhash); + + match process_transaction(&transaction, &rpc_client, config.get_tx_mode()) { + Ok(sig) => println!("Config group fee updated (sig: {})", sig), + Err(err) => { + println!("Error during config group fee update:\n{:#?}", err); + return Err(anyhow!("Error during config group fee update")); + } + }; + + Ok(()) +} + +/// Note: doing this one group at a time is tedious, consider running the script instead. +pub fn propagate_fee(config: Config, marginfi_group: Pubkey) -> Result<()> { + let rpc_client = config.mfi_program.rpc(); + + let fee_state_pubkey = find_fee_state_pda(&config.program_id).0; + + let propagate_fee_ixs_builder = config.mfi_program.request(); + + let propagate_fee_ixs = propagate_fee_ixs_builder + .accounts(marginfi::accounts::PropagateFee { + fee_state: fee_state_pubkey, + marginfi_group, + }) + .args(marginfi::instruction::PropagateFeeState {}) + .instructions()?; + + let recent_blockhash = rpc_client.get_latest_blockhash().unwrap(); + let message = Message::new(&propagate_fee_ixs, None); + let mut transaction = Transaction::new_unsigned(message); + transaction.partial_sign(&config.get_signers(false), recent_blockhash); + + match process_transaction(&transaction, &rpc_client, config.get_tx_mode()) { + Ok(sig) => println!("Fee propagated (sig: {})", sig), + Err(err) => { + println!("Error during fee propagation:\n{:#?}", err); + return Err(anyhow!("Error during fee propagation")); + } + }; + + Ok(()) +} + // -------------------------------------------------------------------------------------------------------------------- // bank // -------------------------------------------------------------------------------------------------------------------- From 244a3b39eaf22d1f72d722b17e989a6d5b99d200 Mon Sep 17 00:00:00 2001 From: Jon Gurary <91919816+jgur-psyops@users.noreply.github.com> Date: Fri, 6 Dec 2024 15:10:22 -0500 Subject: [PATCH 08/59] Freeze bank settings (#261) * Fix a bug where config doesn't update the protocol origination fee * Enable freezing of bank settings --- .github/actions/setup-common/action.yaml | 5 +- clients/rust/marginfi-cli/src/entrypoint.rs | 7 + package.json | 4 +- programs/marginfi/src/constants.rs | 3 +- programs/marginfi/src/errors.rs | 2 + .../marginfi_group/configure_bank.rs | 7 +- programs/marginfi/src/state/marginfi_group.rs | 15 +- .../tests/admin_actions/setup_bank.rs | 13 +- tests/01_initGroup.spec.ts | 2 +- tests/02_configGroup.spec.ts | 6 +- tests/03_addBank.spec.ts | 13 +- tests/04_configureBank.spec.ts | 144 ++++++++ tests/utils/genericTests.ts | 2 +- tests/utils/instructions.ts | 28 +- tests/utils/mocks.ts | 4 +- tests/utils/types.ts | 280 +++++++++++--- yarn.lock | 342 +++++++++++++++++- 17 files changed, 798 insertions(+), 79 deletions(-) create mode 100644 tests/04_configureBank.spec.ts diff --git a/.github/actions/setup-common/action.yaml b/.github/actions/setup-common/action.yaml index 76abe554f..1c6ce9764 100644 --- a/.github/actions/setup-common/action.yaml +++ b/.github/actions/setup-common/action.yaml @@ -18,5 +18,8 @@ runs: components: rustfmt, clippy default: true - - run: (cargo install cargo-nextest || true) + - run: cargo install cargo-nextest --locked + shell: bash + + - run: cargo nextest --version shell: bash diff --git a/clients/rust/marginfi-cli/src/entrypoint.rs b/clients/rust/marginfi-cli/src/entrypoint.rs index c655ea43f..55851a493 100644 --- a/clients/rust/marginfi-cli/src/entrypoint.rs +++ b/clients/rust/marginfi-cli/src/entrypoint.rs @@ -304,6 +304,11 @@ pub enum BankCommand { help = "Permissionless bad debt settlement, if true the group admin is not required to settle bad debt" )] permissionless_bad_debt_settlement: Option, + #[clap( + long, + help = "If enabled, will prevent this Update ix from ever running against after this invokation" + )] + freeze_settings: Option, }, InspectPriceOracle { bank_pk: Pubkey, @@ -740,6 +745,7 @@ fn bank(subcmd: BankCommand, global_options: &GlobalOptions) -> Result<()> { usd_init_limit, oracle_max_age, permissionless_bad_debt_settlement, + freeze_settings, } => { let bank = config .mfi_program @@ -789,6 +795,7 @@ fn bank(subcmd: BankCommand, global_options: &GlobalOptions) -> Result<()> { total_asset_value_init_limit: usd_init_limit, oracle_max_age, permissionless_bad_debt_settlement, + freeze_settings, }, ) } diff --git a/package.json b/package.json index fdb1184eb..808ea02f3 100644 --- a/package.json +++ b/package.json @@ -8,8 +8,8 @@ "@coral-xyz/spl-token": "^0.30.1", "@solana/spl-token": "^0.4.8", "@solana/web3.js": "^1.95.2", - "@mrgnlabs/mrgn-common": "^1.7.0", - "@mrgnlabs/marginfi-client-v2": "^3.1.0", + "@mrgnlabs/mrgn-common": "^1.8.0", + "@mrgnlabs/marginfi-client-v2": "^4.0.0", "mocha": "^10.2.0", "ts-mocha": "^10.0.0", "bignumber.js": "^9.1.2" diff --git a/programs/marginfi/src/constants.rs b/programs/marginfi/src/constants.rs index df691a141..42a09442b 100644 --- a/programs/marginfi/src/constants.rs +++ b/programs/marginfi/src/constants.rs @@ -77,9 +77,10 @@ pub const ZERO_AMOUNT_THRESHOLD: I80F48 = I80F48!(0.0001); pub const EMISSIONS_FLAG_BORROW_ACTIVE: u64 = 1 << 0; pub const EMISSIONS_FLAG_LENDING_ACTIVE: u64 = 1 << 1; pub const PERMISSIONLESS_BAD_DEBT_SETTLEMENT_FLAG: u64 = 1 << 2; +pub const FREEZE_SETTINGS: u64 = 1 << 3; pub(crate) const EMISSION_FLAGS: u64 = EMISSIONS_FLAG_BORROW_ACTIVE | EMISSIONS_FLAG_LENDING_ACTIVE; -pub(crate) const GROUP_FLAGS: u64 = PERMISSIONLESS_BAD_DEBT_SETTLEMENT_FLAG; +pub(crate) const GROUP_FLAGS: u64 = PERMISSIONLESS_BAD_DEBT_SETTLEMENT_FLAG | FREEZE_SETTINGS; /// Cutoff timestamp for balance last_update used in accounting collected emissions. /// Any balance updates before this timestamp are ignored, and current_timestamp is used instead. diff --git a/programs/marginfi/src/errors.rs b/programs/marginfi/src/errors.rs index 98ff22aba..21ca13bb3 100644 --- a/programs/marginfi/src/errors.rs +++ b/programs/marginfi/src/errors.rs @@ -98,6 +98,8 @@ pub enum MarginfiError { T22MintRequired, #[msg("Invalid ATA for global fee account")] // 6048 InvalidFeeAta, + #[msg("Bank settings are frozen and cannot be updated")] // 6049 + BankSettingsFrozen, } impl From for ProgramError { diff --git a/programs/marginfi/src/instructions/marginfi_group/configure_bank.rs b/programs/marginfi/src/instructions/marginfi_group/configure_bank.rs index 92a834409..1ac64b734 100644 --- a/programs/marginfi/src/instructions/marginfi_group/configure_bank.rs +++ b/programs/marginfi/src/instructions/marginfi_group/configure_bank.rs @@ -1,4 +1,4 @@ -use crate::constants::{EMISSIONS_AUTH_SEED, EMISSIONS_TOKEN_ACCOUNT_SEED}; +use crate::constants::{EMISSIONS_AUTH_SEED, EMISSIONS_TOKEN_ACCOUNT_SEED, FREEZE_SETTINGS}; use crate::events::{GroupEventHeader, LendingPoolBankConfigureEvent}; use crate::prelude::MarginfiError; use crate::{check, math_error, utils}; @@ -17,6 +17,11 @@ pub fn lending_pool_configure_bank( ) -> MarginfiResult { let mut bank = ctx.accounts.bank.load_mut()?; + check!( + !bank.get_flag(FREEZE_SETTINGS), + MarginfiError::BankSettingsFrozen + ); + bank.configure(&bank_config)?; if bank_config.oracle.is_some() { diff --git a/programs/marginfi/src/state/marginfi_group.rs b/programs/marginfi/src/state/marginfi_group.rs index 183efa47b..955b6ef1c 100644 --- a/programs/marginfi/src/state/marginfi_group.rs +++ b/programs/marginfi/src/state/marginfi_group.rs @@ -2,7 +2,6 @@ use super::{ marginfi_account::{BalanceSide, RequirementType}, price::{OraclePriceFeedAdapter, OracleSetup}, }; -use crate::borsh::{BorshDeserialize, BorshSerialize}; #[cfg(not(feature = "client"))] use crate::events::{GroupEventHeader, LendingPoolBankAccrueInterestEvent}; use crate::{ @@ -20,6 +19,10 @@ use crate::{ state::marginfi_account::calc_value, MarginfiResult, }; +use crate::{ + borsh::{BorshDeserialize, BorshSerialize}, + constants::FREEZE_SETTINGS, +}; use anchor_lang::prelude::borsh; use anchor_lang::prelude::*; use anchor_spl::token_interface::*; @@ -269,6 +272,10 @@ impl InterestRateConfig { ir_config.protocol_fixed_fee_apr ); set_if_some!(self.protocol_ir_fee, ir_config.protocol_ir_fee); + set_if_some!( + self.protocol_origination_fee, + ir_config.protocol_origination_fee + ); } } @@ -706,6 +713,10 @@ impl Bank { self.update_flag(flag, PERMISSIONLESS_BAD_DEBT_SETTLEMENT_FLAG); } + if let Some(flag) = config.freeze_settings { + self.update_flag(flag, FREEZE_SETTINGS); + } + self.config.validate()?; Ok(()) @@ -1494,6 +1505,8 @@ pub struct BankConfigOpt { pub oracle_max_age: Option, pub permissionless_bad_debt_settlement: Option, + + pub freeze_settings: Option, } #[cfg_attr( diff --git a/programs/marginfi/tests/admin_actions/setup_bank.rs b/programs/marginfi/tests/admin_actions/setup_bank.rs index 4ae421f10..e2dccd205 100644 --- a/programs/marginfi/tests/admin_actions/setup_bank.rs +++ b/programs/marginfi/tests/admin_actions/setup_bank.rs @@ -2,7 +2,9 @@ use fixed::types::I80F48; use fixed_macro::types::I80F48; use fixtures::{assert_custom_error, prelude::*}; use marginfi::{ - constants::{INIT_BANK_ORIGINATION_FEE_DEFAULT, PERMISSIONLESS_BAD_DEBT_SETTLEMENT_FLAG}, + constants::{ + FREEZE_SETTINGS, INIT_BANK_ORIGINATION_FEE_DEFAULT, PERMISSIONLESS_BAD_DEBT_SETTLEMENT_FLAG, + }, prelude::MarginfiError, state::marginfi_group::{Bank, BankConfig, BankConfigOpt, BankVaultType}, }; @@ -344,6 +346,7 @@ async fn configure_bank_success(bank_mint: BankMint) -> anyhow::Result<()> { total_asset_value_init_limit, oracle_max_age, permissionless_bad_debt_settlement, + freeze_settings, } = &config_bank_opt; // Compare bank field to opt field if Some, otherwise compare to old bank field macro_rules! check_bank_field { @@ -374,6 +377,7 @@ async fn configure_bank_success(bank_mint: BankMint) -> anyhow::Result<()> { check_bank_field!(interest_rate_config, insurance_ir_fee); check_bank_field!(interest_rate_config, protocol_fixed_fee_apr); check_bank_field!(interest_rate_config, protocol_ir_fee); + check_bank_field!(interest_rate_config, protocol_origination_fee); check_bank_field!(asset_weight_init); check_bank_field!(asset_weight_maint); @@ -395,6 +399,13 @@ async fn configure_bank_success(bank_mint: BankMint) -> anyhow::Result<()> { .unwrap_or( bank.get_flag(PERMISSIONLESS_BAD_DEBT_SETTLEMENT_FLAG) == old_bank.get_flag(PERMISSIONLESS_BAD_DEBT_SETTLEMENT_FLAG)) ); + assert!(freeze_settings + // If Some(...) check flag set properly + .map(|set| set == bank.get_flag(FREEZE_SETTINGS)) + // If None check flag is unchanged + .unwrap_or( bank.get_flag(FREEZE_SETTINGS) == old_bank.get_flag(FREEZE_SETTINGS)) + ); + assert_eq!( bank.config.oracle_keys, // If Some(...) check keys set properly diff --git a/tests/01_initGroup.spec.ts b/tests/01_initGroup.spec.ts index bf9467bdc..dd750e35b 100644 --- a/tests/01_initGroup.spec.ts +++ b/tests/01_initGroup.spec.ts @@ -24,7 +24,7 @@ describe("Init group", () => { }) ); - await groupAdmin.userMarginProgram.provider.sendAndConfirm(tx, [ + await groupAdmin.mrgnProgram.provider.sendAndConfirm(tx, [ marginfiGroup, ]); diff --git a/tests/02_configGroup.spec.ts b/tests/02_configGroup.spec.ts index 6c90eb400..431c8d043 100644 --- a/tests/02_configGroup.spec.ts +++ b/tests/02_configGroup.spec.ts @@ -15,7 +15,7 @@ describe("Config group", () => { const program = workspace.Marginfi as Program; it("(admin) Config group - no change", async () => { - await groupAdmin.userMarginProgram!.provider.sendAndConfirm!( + await groupAdmin.mrgnProgram!.provider.sendAndConfirm!( new Transaction().add( await groupConfigure(program, { newAdmin: null, @@ -33,7 +33,7 @@ describe("Config group", () => { it("(admin) Config group - set new admin", async () => { let newAdmin = Keypair.generate(); - await groupAdmin.userMarginProgram!.provider.sendAndConfirm!( + await groupAdmin.mrgnProgram!.provider.sendAndConfirm!( new Transaction().add( await groupConfigure(program, { newAdmin: newAdmin.publicKey, @@ -49,7 +49,7 @@ describe("Config group", () => { assertKeysEqual(group.admin, newAdmin.publicKey); // Restore original - await groupAdmin.userMarginProgram!.provider.sendAndConfirm!( + await groupAdmin.mrgnProgram!.provider.sendAndConfirm!( new Transaction().add( await groupConfigure(program, { newAdmin: groupAdmin.wallet.publicKey, diff --git a/tests/03_addBank.spec.ts b/tests/03_addBank.spec.ts index d05fdef1c..f54b12345 100644 --- a/tests/03_addBank.spec.ts +++ b/tests/03_addBank.spec.ts @@ -31,7 +31,6 @@ import { } from "./utils/pdas"; import { assert } from "chai"; import { printBufferGroups } from "./utils/tools"; -import { wrappedI80F48toBigNumber } from "@mrgnlabs/mrgn-common"; describe("Lending pool add bank (add bank to group)", () => { const program = workspace.Marginfi as Program; @@ -45,7 +44,7 @@ describe("Lending pool add bank (add bank to group)", () => { globalFeeWallet ); - await groupAdmin.userMarginProgram!.provider.sendAndConfirm!( + await groupAdmin.mrgnProgram!.provider.sendAndConfirm!( new Transaction().add( await addBank(program, { marginfiGroup: marginfiGroup.publicKey, @@ -127,7 +126,7 @@ describe("Lending pool add bank (add bank to group)", () => { assertI80F48Equal(config.assetWeightInit, 1); assertI80F48Equal(config.assetWeightMaint, 1); assertI80F48Equal(config.liabilityWeightInit, 1); - assertBNEqual(config.depositLimit, 1_000_000_000); + assertBNEqual(config.depositLimit, 100_000_000_000); const tolerance = 0.000001; assertI80F48Approx(interest.optimalUtilizationRate, 0.5, tolerance); @@ -138,12 +137,13 @@ describe("Lending pool add bank (add bank to group)", () => { assertI80F48Approx(interest.insuranceIrFee, 0.02, tolerance); assertI80F48Approx(interest.protocolFixedFeeApr, 0.03, tolerance); assertI80F48Approx(interest.protocolIrFee, 0.04, tolerance); + assertI80F48Approx(interest.protocolOriginationFee, 0.01, tolerance); assert.deepEqual(config.operationalState, { operational: {} }); assert.deepEqual(config.oracleSetup, { pythLegacy: {} }); - assertBNEqual(config.borrowLimit, 1_000_000_000); + assertBNEqual(config.borrowLimit, 100_000_000_000); assert.deepEqual(config.riskTier, { collateral: {} }); - assertBNEqual(config.totalAssetValueInitLimit, 100_000_000_000); + assertBNEqual(config.totalAssetValueInitLimit, 1_000_000_000_000); assert.equal(config.oracleMaxAge, 100); assertI80F48Equal(bank.collectedProgramFeesOutstanding, 0); @@ -153,7 +153,7 @@ describe("Lending pool add bank (add bank to group)", () => { let config = defaultBankConfig(oracles.tokenAOracle.publicKey); let bankKey = bankKeypairA.publicKey; - await groupAdmin.userMarginProgram!.provider.sendAndConfirm!( + await groupAdmin.mrgnProgram!.provider.sendAndConfirm!( new Transaction().add( await addBank(program, { marginfiGroup: marginfiGroup.publicKey, @@ -176,7 +176,6 @@ describe("Lending pool add bank (add bank to group)", () => { it("Decodes a mainnet bank configured before manual padding", async () => { // mainnet program ID const id = new PublicKey("MFv2hWf31Z9kbCa1snEPYctwafyhdvnV7FZnsebVacA"); - const tolerance = 0.000001; const group = new PublicKey("4qp6Fx6tnZkY5Wropq9wUYgtFxXKwE6viZxFHg3rdAG8"); let bonkBankKey = new PublicKey( diff --git a/tests/04_configureBank.spec.ts b/tests/04_configureBank.spec.ts new file mode 100644 index 000000000..a6c01c1ba --- /dev/null +++ b/tests/04_configureBank.spec.ts @@ -0,0 +1,144 @@ +import { BN, Program, workspace } from "@coral-xyz/anchor"; +import { Transaction } from "@solana/web3.js"; +import { configureBank } from "./utils/instructions"; +import { Marginfi } from "../target/types/marginfi"; +import { bankKeypairUsdc, groupAdmin, marginfiGroup } from "./rootHooks"; +import { assertBNEqual, assertI80F48Approx } from "./utils/genericTests"; +import { assert } from "chai"; +import { bigNumberToWrappedI80F48 } from "@mrgnlabs/mrgn-common"; +import { + ASSET_TAG_SOL, + BankConfigOptWithAssetTag, + defaultBankConfigOptRaw, + FREEZE_SETTINGS, + InterestRateConfigRawWithOrigination, +} from "./utils/types"; + +describe("Lending pool configure bank", () => { + const program = workspace.Marginfi as Program; + + it("(admin) Configure bank (USDC) - happy path", async () => { + const bankKey = bankKeypairUsdc.publicKey; + let interestRateConfig: InterestRateConfigRawWithOrigination = { + optimalUtilizationRate: bigNumberToWrappedI80F48(0.1), + plateauInterestRate: bigNumberToWrappedI80F48(0.2), + maxInterestRate: bigNumberToWrappedI80F48(4), + insuranceFeeFixedApr: bigNumberToWrappedI80F48(0.3), + insuranceIrFee: bigNumberToWrappedI80F48(0.4), + protocolFixedFeeApr: bigNumberToWrappedI80F48(0.5), + protocolIrFee: bigNumberToWrappedI80F48(0.6), + protocolOriginationFee: bigNumberToWrappedI80F48(0.7), + }; + + let bankConfigOpt: BankConfigOptWithAssetTag = { + assetWeightInit: bigNumberToWrappedI80F48(0.6), + assetWeightMaint: bigNumberToWrappedI80F48(0.7), + liabilityWeightInit: bigNumberToWrappedI80F48(1.9), + liabilityWeightMaint: bigNumberToWrappedI80F48(1.8), + depositLimit: new BN(5000), + borrowLimit: new BN(10000), + riskTier: null, + assetTag: ASSET_TAG_SOL, + totalAssetValueInitLimit: new BN(15000), + interestRateConfig: interestRateConfig, + operationalState: { + paused: undefined, + }, + oracle: null, + oracleMaxAge: 50, + permissionlessBadDebtSettlement: null, + freezeSettings: null, + }; + + await groupAdmin.mrgnProgram!.provider.sendAndConfirm!( + new Transaction().add( + await configureBank(program, { + marginfiGroup: marginfiGroup.publicKey, + admin: groupAdmin.wallet.publicKey, + bank: bankKey, + bankConfigOpt: bankConfigOpt, + }) + ) + ); + + const bank = await program.account.bank.fetch(bankKey); + const config = bank.config; + const interest = config.interestRateConfig; + + assertI80F48Approx(config.assetWeightInit, 0.6); + assertI80F48Approx(config.assetWeightMaint, 0.7); + assertI80F48Approx(config.liabilityWeightInit, 1.9); + assertI80F48Approx(config.liabilityWeightMaint, 1.8); + assertBNEqual(config.depositLimit, 5000); + + assertI80F48Approx(interest.optimalUtilizationRate, 0.1); + assertI80F48Approx(interest.plateauInterestRate, 0.2); + assertI80F48Approx(interest.maxInterestRate, 4); + assertI80F48Approx(interest.insuranceFeeFixedApr, 0.3); + assertI80F48Approx(interest.insuranceIrFee, 0.4); + assertI80F48Approx(interest.protocolFixedFeeApr, 0.5); + assertI80F48Approx(interest.protocolIrFee, 0.6); + assertI80F48Approx(interest.protocolOriginationFee, 0.7); + + assert.deepEqual(config.operationalState, { paused: {} }); + assert.deepEqual(config.oracleSetup, { pythLegacy: {} }); // no change + assertBNEqual(config.borrowLimit, 10000); + assert.deepEqual(config.riskTier, { collateral: {} }); // no change + // assert.equal(config.assetTag, ASSET_TAG_SOL); // TODO when staked collateral added + assertBNEqual(config.totalAssetValueInitLimit, 15000); + assert.equal(config.oracleMaxAge, 50); + }); + + it("(admin) Restore default settings to bank (USDC)", async () => { + await groupAdmin.mrgnProgram!.provider.sendAndConfirm!( + new Transaction().add( + await configureBank(program, { + marginfiGroup: marginfiGroup.publicKey, + admin: groupAdmin.wallet.publicKey, + bank: bankKeypairUsdc.publicKey, + bankConfigOpt: defaultBankConfigOptRaw(), + }) + ) + ); + }); + + it("(admin) Freeze USDC settings so they cannot be changed again (USDC)", async () => { + let config = defaultBankConfigOptRaw(); + config.freezeSettings = true; + await groupAdmin.mrgnProgram!.provider.sendAndConfirm!( + new Transaction().add( + await configureBank(program, { + marginfiGroup: marginfiGroup.publicKey, + admin: groupAdmin.wallet.publicKey, + bank: bankKeypairUsdc.publicKey, + bankConfigOpt: config, + }) + ) + ); + const bank = await program.account.bank.fetch(bankKeypairUsdc.publicKey); + assertBNEqual(bank.flags, FREEZE_SETTINGS); + + // Attempting to config again should fail... + let failed = false; + try { + await groupAdmin.mrgnProgram!.provider.sendAndConfirm!( + new Transaction().add( + await configureBank(program, { + marginfiGroup: marginfiGroup.publicKey, + admin: groupAdmin.wallet.publicKey, + bank: bankKeypairUsdc.publicKey, + bankConfigOpt: defaultBankConfigOptRaw(), + }) + ) + ); + } catch (err) { + assert.ok( + err.logs.some((log: string) => + log.includes("Error Code: BankSettingsFrozen") + ) + ); + failed = true; + } + assert.ok(failed, "Transaction succeeded when it should have failed"); + }); +}); diff --git a/tests/utils/genericTests.ts b/tests/utils/genericTests.ts index 3923219b1..56ef649f2 100644 --- a/tests/utils/genericTests.ts +++ b/tests/utils/genericTests.ts @@ -72,7 +72,7 @@ export const assertI80F48Equal = ( export const assertI80F48Approx = ( a: WrappedI80F48, b: WrappedI80F48 | BN | number, - tolerance: number + tolerance: number = 0.000001 ) => { const bigA = wrappedI80F48toBigNumber(a); let bigB: BigNumber; diff --git a/tests/utils/instructions.ts b/tests/utils/instructions.ts index c72cff0c5..58fc2e72c 100644 --- a/tests/utils/instructions.ts +++ b/tests/utils/instructions.ts @@ -9,7 +9,11 @@ import { deriveLiquidityVault, deriveLiquidityVaultAuthority, } from "./pdas"; -import { BankConfig } from "./types"; +import { + BankConfig, + BankConfigOptRaw, + BankConfigOptWithAssetTag, +} from "./types"; import { TOKEN_PROGRAM_ID } from "@solana/spl-token"; import { WrappedI80F48 } from "@mrgnlabs/mrgn-common"; @@ -187,3 +191,25 @@ export const editGlobalFeeState = ( return ix; }; + +export type ConfigureBankArgs = { + marginfiGroup: PublicKey; + admin: PublicKey; + bank: PublicKey; + bankConfigOpt: BankConfigOptRaw; // BankConfigOptRaw with origination fee + freeze +}; + +export const configureBank = ( + program: Program, + args: ConfigureBankArgs +) => { + const ix = program.methods + .lendingPoolConfigureBank(args.bankConfigOpt) + .accounts({ + marginfiGroup: args.marginfiGroup, + admin: args.admin, + bank: args.bank, + }) + .instruction(); + return ix; +}; diff --git a/tests/utils/mocks.ts b/tests/utils/mocks.ts index 69a139814..99ab0db25 100644 --- a/tests/utils/mocks.ts +++ b/tests/utils/mocks.ts @@ -96,7 +96,7 @@ export type mockUser = { /** Users's ATA for USDC */ usdcAccount: PublicKey; /** A program that uses the user's wallet */ - userMarginProgram: Program | undefined; + mrgnProgram: Program | undefined; }; /** @@ -207,7 +207,7 @@ export const setupTestUser = async ( tokenBAccount: tokenBAccount, usdcAccount: usdcAccount, - userMarginProgram: options.marginProgram + mrgnProgram: options.marginProgram ? getUserMarginfiProgram(options.marginProgram, userWalletKeypair) : undefined, }; diff --git a/tests/utils/types.ts b/tests/utils/types.ts index 855dd4602..20bb0cb12 100644 --- a/tests/utils/types.ts +++ b/tests/utils/types.ts @@ -1,55 +1,44 @@ +import { + BankConfigOpt, + InterestRateConfig, + InterestRateConfigRaw, + OperationalState, + OracleSetupRaw, + RiskTier, + RiskTierRaw, +} from "@mrgnlabs/marginfi-client-v2"; import { bigNumberToWrappedI80F48, WrappedI80F48 } from "@mrgnlabs/mrgn-common"; import { PublicKey } from "@solana/web3.js"; +import BigNumber from "bignumber.js"; import BN from "bn.js"; export const I80F48_ZERO = bigNumberToWrappedI80F48(0); export const I80F48_ONE = bigNumberToWrappedI80F48(1); +/** Equivalent in value to u64::MAX in Rust */ +export const u64MAX_BN = new BN("18446744073709551615"); +export const SINGLE_POOL_PROGRAM_ID = new PublicKey( + "SVSPxpvHdN29nkVg9rPapPNDddN5DipNLRUFhyjFThE" +); -export type RiskTier = { collateral: {} } | { isolated: {} }; +export const EMISSIONS_FLAG_NONE = 0; +export const EMISSIONS_FLAG_BORROW_ACTIVE = 1; +export const EMISSIONS_FLAG_LENDING_ACTIVE = 2; +export const PERMISSIONLESS_BAD_DEBT_SETTLEMENT_FLAG = 4; +export const FREEZE_SETTINGS = 8; -export type OperationalState = - | { paused: {} } - | { operational: {} } - | { reduceOnly: {} }; - -export type OracleSetup = - | { none: {} } - | { pythLegacy: {} } - | { switchboardV2: {} } - | { pythPushOracle: {} }; - -export type BankConfig = { - assetWeightInit: WrappedI80F48; - assetWeightMaint: WrappedI80F48; - - liabilityWeightInit: WrappedI80F48; - liabilityWeightMain: WrappedI80F48; - - depositLimit: BN; - interestRateConfig: InterestRateConfig; - - /** Paused = 0, Operational = 1, ReduceOnly = 2 */ - operationalState: OperationalState; - - /** None = 0, PythLegacy = 1, SwitchboardV2 = 2, PythPushOracle =3 */ - oracleSetup: OracleSetup; - oracleKey: PublicKey; - - borrowLimit: BN; - /** Collateral = 0, Isolated = 1 */ - riskTier: RiskTier; - totalAssetValueInitLimit: BN; - oracleMaxAge: number; -}; +export const ASSET_TAG_DEFAULT = 0; +export const ASSET_TAG_SOL = 1; +export const ASSET_TAG_STAKED = 2; /** * The default bank config has * * all weights are 1 * * state = operational, risk tier = collateral * * uses the given oracle, assumes it's = pythLegacy - * * 1_000_000_000 deposit/borrow limit - * * 100_000_000_000 total asset value limit + * * 100_000_000_000 deposit/borrow limit + * * 1_000_000_000_000 total asset value limit + * * asset tag default (`ASSET_TAG_DEFAULT`) * @returns */ export const defaultBankConfig = (oracleKey: PublicKey) => { @@ -58,8 +47,8 @@ export const defaultBankConfig = (oracleKey: PublicKey) => { assetWeightMaint: I80F48_ONE, liabilityWeightInit: I80F48_ONE, liabilityWeightMain: I80F48_ONE, - depositLimit: new BN(1_000_000_000), - interestRateConfig: defaultInterestRateConfig(), + depositLimit: new BN(100_000_000_000), + interestRateConfig: defaultInterestRateConfigRaw(), operationalState: { operational: undefined, }, @@ -67,25 +56,68 @@ export const defaultBankConfig = (oracleKey: PublicKey) => { pythLegacy: undefined, }, oracleKey: oracleKey, - borrowLimit: new BN(1_000_000_000), + borrowLimit: new BN(100_000_000_000), riskTier: { collateral: undefined, }, - totalAssetValueInitLimit: new BN(100_000_000_000), + assetTag: ASSET_TAG_DEFAULT, + totalAssetValueInitLimit: new BN(1_000_000_000_000), oracleMaxAge: 100, }; return config; }; -export type InterestRateConfig = { - optimalUtilizationRate: WrappedI80F48; - plateauInterestRate: WrappedI80F48; - maxInterestRate: WrappedI80F48; +/** + * The same parameters as `defaultBankConfig`, and no change to oracle + * @returns + */ +export const defaultBankConfigOpt = () => { + let bankConfigOpt: BankConfigOpt = { + assetWeightInit: new BigNumber(1), + assetWeightMaint: new BigNumber(1), + liabilityWeightInit: new BigNumber(1), + liabilityWeightMaint: new BigNumber(1), + depositLimit: new BigNumber(1_000_000_000), + borrowLimit: new BigNumber(1_000_000_000), + riskTier: RiskTier.Collateral, + totalAssetValueInitLimit: new BigNumber(100_000_000_000), + interestRateConfig: defaultInterestRateConfig(), + operationalState: OperationalState.Operational, + oracle: null, + oracleMaxAge: 100, + permissionlessBadDebtSettlement: null, + }; + + return bankConfigOpt; +}; + +/** + * The same parameters as `defaultBankConfig`, and no change to oracle + * @returns + */ +export const defaultBankConfigOptRaw = () => { + let bankConfigOpt: BankConfigOptRaw = { + assetWeightInit: I80F48_ONE, + assetWeightMaint: I80F48_ONE, + liabilityWeightInit: I80F48_ONE, + liabilityWeightMaint: I80F48_ONE, + depositLimit: new BN(1_000_000_000), + borrowLimit: new BN(1_000_000_000), + riskTier: { + collateral: undefined, + }, + totalAssetValueInitLimit: new BN(100_000_000_000), + interestRateConfig: defaultInterestRateConfigRaw(), + operationalState: { + operational: undefined, + }, + oracle: null, + oracleMaxAge: 100, + permissionlessBadDebtSettlement: null, + freezeSettings: null + }; - insuranceFeeFixedApr: WrappedI80F48; - insuranceIrFee: WrappedI80F48; - protocolFixedFeeApr: WrappedI80F48; - protocolIrFee: WrappedI80F48; + return bankConfigOpt; }; /** @@ -97,10 +129,11 @@ export type InterestRateConfig = { * * insuranceIrFee = .02 * * protocolFixedFeeApr = .03 * * protocolIrFee = .04 + * * originationFee = .01 * @returns */ -export const defaultInterestRateConfig = () => { - let config: InterestRateConfig = { +export const defaultInterestRateConfigRaw = () => { + let config: InterestRateConfigRawWithOrigination = { optimalUtilizationRate: bigNumberToWrappedI80F48(0.5), plateauInterestRate: bigNumberToWrappedI80F48(0.6), maxInterestRate: bigNumberToWrappedI80F48(3), @@ -108,6 +141,151 @@ export const defaultInterestRateConfig = () => { insuranceIrFee: bigNumberToWrappedI80F48(0.02), protocolFixedFeeApr: bigNumberToWrappedI80F48(0.03), protocolIrFee: bigNumberToWrappedI80F48(0.04), + protocolOriginationFee: bigNumberToWrappedI80F48(0.01), + }; + return config; +}; + +/** + * The same parameters as `defaultInterestRateConfigRaw` + * @returns + */ +export const defaultInterestRateConfig = () => { + let config: InterestRateConfigWithOrigination = { + optimalUtilizationRate: new BigNumber(0.5), + plateauInterestRate: new BigNumber(0.6), + maxInterestRate: new BigNumber(3), + insuranceFeeFixedApr: new BigNumber(0), + insuranceIrFee: new BigNumber(0), + protocolFixedFeeApr: new BigNumber(0), + protocolIrFee: new BigNumber(0), + protocolOriginationFee: new BigNumber(0.1), }; return config; }; + +export const defaultStakedInterestSettings = (oracle: PublicKey) => { + let settings: StakedSettingsConfig = { + oracle: oracle, + assetWeightInit: bigNumberToWrappedI80F48(0.8), + assetWeightMaint: bigNumberToWrappedI80F48(0.9), + depositLimit: new BN(1_000_000_000_000), // 1000 SOL + totalAssetValueInitLimit: new BN(150_000_000), + oracleMaxAge: 10, + riskTier: { + collateral: undefined, + }, + }; + return settings; +}; + +// TODO remove when package updates +export type BankConfigOptWithAssetTag = BankConfigOptRaw & { + assetTag: number | null; +}; + +// TODO remove when package updates +export type InterestRateConfigRawWithOrigination = InterestRateConfigRaw & { + protocolOriginationFee: WrappedI80F48; +}; + +// TODO remove when package updates +export type InterestRateConfigWithOrigination = InterestRateConfig & { + protocolOriginationFee: BigNumber; +}; + +// TODO remove when package updates +type OperationalStateRaw = + | { paused: {} } + | { operational: {} } + | { reduceOnly: {} }; + +// TODO remove when package updates +export type BankConfig = { + assetWeightInit: WrappedI80F48; + assetWeightMaint: WrappedI80F48; + + liabilityWeightInit: WrappedI80F48; + liabilityWeightMain: WrappedI80F48; + + depositLimit: BN; + interestRateConfig: InterestRateConfigRawWithOrigination; + + /** Paused = 0, Operational = 1, ReduceOnly = 2 */ + operationalState: OperationalStateRaw; + + /** None = 0, PythLegacy = 1, SwitchboardV2 = 2, PythPushOracle =3 */ + oracleSetup: OracleSetupRaw; + oracleKey: PublicKey; + + borrowLimit: BN; + /** Collateral = 0, Isolated = 1 */ + riskTier: RiskTierRaw; + assetTag: number; + totalAssetValueInitLimit: BN; + oracleMaxAge: number; +}; + +// TODO remove when package updates +/** Adds origination fee to interestRateConfig and freezeSettings */ +export type BankConfigOptRaw = { + assetWeightInit: WrappedI80F48 | null; + assetWeightMaint: WrappedI80F48 | null; + + liabilityWeightInit: WrappedI80F48 | null; + liabilityWeightMaint: WrappedI80F48 | null; + + depositLimit: BN | null; + borrowLimit: BN | null; + riskTier: { collateral: {} } | { isolated: {} } | null; + totalAssetValueInitLimit: BN | null; + + interestRateConfig: InterestRateConfigRawWithOrigination | null; + operationalState: + | { paused: {} } + | { operational: {} } + | { reduceOnly: {} } + | null; + + oracle: { + setup: + | { none: {} } + | { pythLegacy: {} } + | { switchboardV2: {} } + | { pythPushOracle: {} } + | { switchboardPull: {} }; + keys: PublicKey[]; + } | null; + + oracleMaxAge: number | null; + permissionlessBadDebtSettlement: boolean | null; + freezeSettings: boolean | null; +} + +// TODO remove when package updates +export type StakedSettingsConfig = { + oracle: PublicKey; + + assetWeightInit: WrappedI80F48; + assetWeightMaint: WrappedI80F48; + + depositLimit: BN; + totalAssetValueInitLimit: BN; + + oracleMaxAge: number; + /** Collateral = 0, Isolated = 1 */ + riskTier: RiskTierRaw; +}; + +export interface StakedSettingsEdit { + oracle: PublicKey | null; + + assetWeightInit: WrappedI80F48 | null; + assetWeightMaint: WrappedI80F48 | null; + + depositLimit: BN | null; + totalAssetValueInitLimit: BN | null; + + oracleMaxAge: number | null; + riskTier: { collateral: {} } | { isolated: {} } | null; +} diff --git a/yarn.lock b/yarn.lock index 7590eb8dd..8436f363c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9,6 +9,41 @@ dependencies: regenerator-runtime "^0.14.0" +"@babel/runtime@^7.25.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.26.0.tgz#8600c2f595f277c60815256418b85356a65173c1" + integrity sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw== + dependencies: + regenerator-runtime "^0.14.0" + +"@brokerloop/ttlcache@^3.2.3": + version "3.2.3" + resolved "https://registry.yarnpkg.com/@brokerloop/ttlcache/-/ttlcache-3.2.3.tgz#bc3c79bb381f7b43f83745eb96e86673f75d3d11" + integrity sha512-kZWoyJGBYTv1cL5oHBYEixlJysJBf2RVnub3gbclD+dwaW9aKubbHzbZ9q1q6bONosxaOqMsoBorOrZKzBDiqg== + dependencies: + "@soncodi/signal" "~2.0.7" + +"@coral-xyz/anchor-30@npm:@coral-xyz/anchor@0.30.1": + version "0.30.1" + resolved "https://registry.yarnpkg.com/@coral-xyz/anchor/-/anchor-0.30.1.tgz#17f3e9134c28cd0ea83574c6bab4e410bcecec5d" + integrity sha512-gDXFoF5oHgpriXAaLpxyWBHdCs8Awgf/gLHIo6crv7Aqm937CNdY+x+6hoj7QR5vaJV7MxWSQ0NGFzL3kPbWEQ== + dependencies: + "@coral-xyz/anchor-errors" "^0.30.1" + "@coral-xyz/borsh" "^0.30.1" + "@noble/hashes" "^1.3.1" + "@solana/web3.js" "^1.68.0" + bn.js "^5.1.2" + bs58 "^4.0.1" + buffer-layout "^1.2.2" + camelcase "^6.3.0" + cross-fetch "^3.1.5" + crypto-hash "^1.3.0" + eventemitter3 "^4.0.7" + pako "^2.0.3" + snake-case "^3.0.4" + superstruct "^0.15.4" + toml "^3.0.0" + "@coral-xyz/anchor-errors@^0.30.1": version "0.30.1" resolved "https://registry.yarnpkg.com/@coral-xyz/anchor-errors/-/anchor-errors-0.30.1.tgz#bdfd3a353131345244546876eb4afc0e125bec30" @@ -127,23 +162,24 @@ resolved "https://registry.yarnpkg.com/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz#9299f82874bab9e4c7f9c48d865becbfe8d6907c" integrity sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw== -"@mrgnlabs/marginfi-client-v2@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@mrgnlabs/marginfi-client-v2/-/marginfi-client-v2-3.1.0.tgz#f380b63aa5ec4fe9f467e3711c5410970c907403" - integrity sha512-XXq+7iltsMe1BvboG3SQb1xjDoJq1W24eNZd1r3xor54GoeGxjVIvvrSNAKlU0CyzlqzuN1EosBBLmnKSuC+8A== +"@mrgnlabs/marginfi-client-v2@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@mrgnlabs/marginfi-client-v2/-/marginfi-client-v2-4.0.0.tgz#50676767dc9a06b5ffaccb25f3dc8f7a24b6f52d" + integrity sha512-GnXdGdPgU54w517iDXfKoti1i8jrVyOwhxPKS2Lpqac3QH4NL3b4sSbz+pCBDmjk60gveHzu3IAIGscUpbo1yQ== dependencies: "@coral-xyz/anchor" "^0.30.1" "@mrgnlabs/mrgn-common" "*" "@pythnetwork/pyth-solana-receiver" "^0.8.0" "@solana/wallet-adapter-base" "^0.9.23" "@solana/web3.js" "^1.93.2" + "@switchboard-xyz/on-demand" "^1.2.36" bignumber.js "^9.1.2" borsh "^2.0.0" bs58 "^6.0.0" decimal.js "^10.4.3" superstruct "^1.0.4" -"@mrgnlabs/mrgn-common@*", "@mrgnlabs/mrgn-common@^1.7.0": +"@mrgnlabs/mrgn-common@*": version "1.7.0" resolved "https://registry.yarnpkg.com/@mrgnlabs/mrgn-common/-/mrgn-common-1.7.0.tgz#0a40b7696057ee4119f4fe3950ead11623085545" integrity sha512-vDeVmcSRB4tAXDZPNTrzlOIhWQFk+CD5akuBl6vaULwRrxMwkSmOxvkgnXHdxXvKgTH9CfU/0exkevOc4VXslQ== @@ -158,6 +194,21 @@ numeral "^2.0.6" superstruct "^1.0.4" +"@mrgnlabs/mrgn-common@^1.8.0": + version "1.8.0" + resolved "https://registry.yarnpkg.com/@mrgnlabs/mrgn-common/-/mrgn-common-1.8.0.tgz#76df1104b3a6b04054c56c297b4dc6a27236d8fe" + integrity sha512-6VQ/2Ob8alyI1jsY3RETsWJ5W/myEp+h2yu1mFI/yzKHLffQMlt50FWPSDmCe2TBmkBioW48HOl+PqQf3+Wfbg== + dependencies: + "@coral-xyz/anchor" "^0.30.1" + "@solana/buffer-layout-utils" "^0.2.0" + "@solana/wallet-adapter-base" "^0.9.23" + "@solana/web3.js" "^1.93.2" + bignumber.js "^9.1.2" + bs58 "^6.0.0" + decimal.js "^10.4.3" + numeral "^2.0.6" + superstruct "^1.0.4" + "@native-to-anchor/buffer-layout@=0.1.0": version "0.1.0" resolved "https://registry.yarnpkg.com/@native-to-anchor/buffer-layout/-/buffer-layout-0.1.0.tgz#ff0cb66341bc820b8ee73bb1d1d43bae7e3554b0" @@ -309,6 +360,13 @@ dependencies: "@solana/errors" "2.0.0-preview.4" +"@solana/codecs-core@2.0.0-rc.1": + version "2.0.0-rc.1" + resolved "https://registry.yarnpkg.com/@solana/codecs-core/-/codecs-core-2.0.0-rc.1.tgz#1a2d76b9c7b9e7b7aeb3bd78be81c2ba21e3ce22" + integrity sha512-bauxqMfSs8EHD0JKESaNmNuNvkvHSuN3bbWAF5RjOfDu2PugxHrvRebmYauvSumZ3cTfQ4HJJX6PG5rN852qyQ== + dependencies: + "@solana/errors" "2.0.0-rc.1" + "@solana/codecs-data-structures@2.0.0-preview.2": version "2.0.0-preview.2" resolved "https://registry.yarnpkg.com/@solana/codecs-data-structures/-/codecs-data-structures-2.0.0-preview.2.tgz#e82cb1b6d154fa636cd5c8953ff3f32959cc0370" @@ -327,6 +385,15 @@ "@solana/codecs-numbers" "2.0.0-preview.4" "@solana/errors" "2.0.0-preview.4" +"@solana/codecs-data-structures@2.0.0-rc.1": + version "2.0.0-rc.1" + resolved "https://registry.yarnpkg.com/@solana/codecs-data-structures/-/codecs-data-structures-2.0.0-rc.1.tgz#d47b2363d99fb3d643f5677c97d64a812982b888" + integrity sha512-rinCv0RrAVJ9rE/rmaibWJQxMwC5lSaORSZuwjopSUE6T0nb/MVg6Z1siNCXhh/HFTOg0l8bNvZHgBcN/yvXog== + dependencies: + "@solana/codecs-core" "2.0.0-rc.1" + "@solana/codecs-numbers" "2.0.0-rc.1" + "@solana/errors" "2.0.0-rc.1" + "@solana/codecs-numbers@2.0.0-preview.2": version "2.0.0-preview.2" resolved "https://registry.yarnpkg.com/@solana/codecs-numbers/-/codecs-numbers-2.0.0-preview.2.tgz#56995c27396cd8ee3bae8bd055363891b630bbd0" @@ -343,6 +410,14 @@ "@solana/codecs-core" "2.0.0-preview.4" "@solana/errors" "2.0.0-preview.4" +"@solana/codecs-numbers@2.0.0-rc.1": + version "2.0.0-rc.1" + resolved "https://registry.yarnpkg.com/@solana/codecs-numbers/-/codecs-numbers-2.0.0-rc.1.tgz#f34978ddf7ea4016af3aaed5f7577c1d9869a614" + integrity sha512-J5i5mOkvukXn8E3Z7sGIPxsThRCgSdgTWJDQeZvucQ9PT6Y3HiVXJ0pcWiOWAoQ3RX8e/f4I3IC+wE6pZiJzDQ== + dependencies: + "@solana/codecs-core" "2.0.0-rc.1" + "@solana/errors" "2.0.0-rc.1" + "@solana/codecs-strings@2.0.0-preview.2": version "2.0.0-preview.2" resolved "https://registry.yarnpkg.com/@solana/codecs-strings/-/codecs-strings-2.0.0-preview.2.tgz#8bd01a4e48614d5289d72d743c3e81305d445c46" @@ -361,6 +436,15 @@ "@solana/codecs-numbers" "2.0.0-preview.4" "@solana/errors" "2.0.0-preview.4" +"@solana/codecs-strings@2.0.0-rc.1": + version "2.0.0-rc.1" + resolved "https://registry.yarnpkg.com/@solana/codecs-strings/-/codecs-strings-2.0.0-rc.1.tgz#e1d9167075b8c5b0b60849f8add69c0f24307018" + integrity sha512-9/wPhw8TbGRTt6mHC4Zz1RqOnuPTqq1Nb4EyuvpZ39GW6O2t2Q7Q0XxiB3+BdoEjwA2XgPw6e2iRfvYgqty44g== + dependencies: + "@solana/codecs-core" "2.0.0-rc.1" + "@solana/codecs-numbers" "2.0.0-rc.1" + "@solana/errors" "2.0.0-rc.1" + "@solana/codecs@2.0.0-preview.2": version "2.0.0-preview.2" resolved "https://registry.yarnpkg.com/@solana/codecs/-/codecs-2.0.0-preview.2.tgz#d6615fec98f423166fb89409f9a4ad5b74c10935" @@ -383,6 +467,17 @@ "@solana/codecs-strings" "2.0.0-preview.4" "@solana/options" "2.0.0-preview.4" +"@solana/codecs@2.0.0-rc.1": + version "2.0.0-rc.1" + resolved "https://registry.yarnpkg.com/@solana/codecs/-/codecs-2.0.0-rc.1.tgz#146dc5db58bd3c28e04b4c805e6096c2d2a0a875" + integrity sha512-qxoR7VybNJixV51L0G1RD2boZTcxmwUWnKCaJJExQ5qNKwbpSyDdWfFJfM5JhGyKe9DnPVOZB+JHWXnpbZBqrQ== + dependencies: + "@solana/codecs-core" "2.0.0-rc.1" + "@solana/codecs-data-structures" "2.0.0-rc.1" + "@solana/codecs-numbers" "2.0.0-rc.1" + "@solana/codecs-strings" "2.0.0-rc.1" + "@solana/options" "2.0.0-rc.1" + "@solana/errors@2.0.0-preview.2": version "2.0.0-preview.2" resolved "https://registry.yarnpkg.com/@solana/errors/-/errors-2.0.0-preview.2.tgz#e0ea8b008c5c02528d5855bc1903e5e9bbec322e" @@ -399,6 +494,14 @@ chalk "^5.3.0" commander "^12.1.0" +"@solana/errors@2.0.0-rc.1": + version "2.0.0-rc.1" + resolved "https://registry.yarnpkg.com/@solana/errors/-/errors-2.0.0-rc.1.tgz#3882120886eab98a37a595b85f81558861b29d62" + integrity sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ== + dependencies: + chalk "^5.3.0" + commander "^12.1.0" + "@solana/options@2.0.0-preview.2": version "2.0.0-preview.2" resolved "https://registry.yarnpkg.com/@solana/options/-/options-2.0.0-preview.2.tgz#13ff008bf43a5056ef9a091dc7bb3f39321e867e" @@ -418,6 +521,17 @@ "@solana/codecs-strings" "2.0.0-preview.4" "@solana/errors" "2.0.0-preview.4" +"@solana/options@2.0.0-rc.1": + version "2.0.0-rc.1" + resolved "https://registry.yarnpkg.com/@solana/options/-/options-2.0.0-rc.1.tgz#06924ba316dc85791fc46726a51403144a85fc4d" + integrity sha512-mLUcR9mZ3qfHlmMnREdIFPf9dpMc/Bl66tLSOOWxw4ml5xMT2ohFn7WGqoKcu/UHkT9CrC6+amEdqCNvUqI7AA== + dependencies: + "@solana/codecs-core" "2.0.0-rc.1" + "@solana/codecs-data-structures" "2.0.0-rc.1" + "@solana/codecs-numbers" "2.0.0-rc.1" + "@solana/codecs-strings" "2.0.0-rc.1" + "@solana/errors" "2.0.0-rc.1" + "@solana/spl-token-group@^0.0.5": version "0.0.5" resolved "https://registry.yarnpkg.com/@solana/spl-token-group/-/spl-token-group-0.0.5.tgz#f955dcca782031c85e862b2b46878d1bb02db6c2" @@ -426,6 +540,13 @@ "@solana/codecs" "2.0.0-preview.4" "@solana/spl-type-length-value" "0.1.0" +"@solana/spl-token-metadata@^0.1.2": + version "0.1.6" + resolved "https://registry.yarnpkg.com/@solana/spl-token-metadata/-/spl-token-metadata-0.1.6.tgz#d240947aed6e7318d637238022a7b0981b32ae80" + integrity sha512-7sMt1rsm/zQOQcUWllQX9mD2O6KhSAtY1hFR2hfFwgqfFWzSY9E9GDvFVNYUI1F0iQKcm6HmePU9QbKRXTEBiA== + dependencies: + "@solana/codecs" "2.0.0-rc.1" + "@solana/spl-token-metadata@^0.1.3": version "0.1.4" resolved "https://registry.yarnpkg.com/@solana/spl-token-metadata/-/spl-token-metadata-0.1.4.tgz#5cdc3b857a8c4a6877df24e24a8648c4132d22ba" @@ -434,6 +555,16 @@ "@solana/codecs" "2.0.0-preview.2" "@solana/spl-type-length-value" "0.1.0" +"@solana/spl-token@^0.3.4": + version "0.3.11" + resolved "https://registry.yarnpkg.com/@solana/spl-token/-/spl-token-0.3.11.tgz#cdc10f9472b29b39c8983c92592cadd06627fb9a" + integrity sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ== + dependencies: + "@solana/buffer-layout" "^4.0.0" + "@solana/buffer-layout-utils" "^0.2.0" + "@solana/spl-token-metadata" "^0.1.2" + buffer "^6.0.3" + "@solana/spl-token@^0.4.8": version "0.4.8" resolved "https://registry.yarnpkg.com/@solana/spl-token/-/spl-token-0.4.8.tgz#a84e4131af957fa9fbd2727e5fc45dfbf9083586" @@ -491,6 +622,27 @@ rpc-websockets "^9.0.2" superstruct "^2.0.2" +"@solana/web3.js@^1.54.0", "@solana/web3.js@^1.93.0", "@solana/web3.js@^1.95.0": + version "1.95.7" + resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.95.7.tgz#0c0f4e883795bb3a93d1f336223e9907a722a475" + integrity sha512-9Sut9HhajumawFIz0wcPxlfBsHxDvq/nbJD/ZtZOXrxOj4WvgQx0AiGGzxG128RYZYjgZbjnwF6OlHsfQ//WRA== + dependencies: + "@babel/runtime" "^7.25.0" + "@noble/curves" "^1.4.2" + "@noble/hashes" "^1.4.0" + "@solana/buffer-layout" "^4.0.1" + agentkeepalive "^4.5.0" + bigint-buffer "^1.1.5" + bn.js "^5.2.1" + borsh "^0.7.0" + bs58 "^4.0.1" + buffer "6.0.3" + fast-stable-stringify "^1.0.0" + jayson "^4.1.1" + node-fetch "^2.7.0" + rpc-websockets "^9.0.2" + superstruct "^2.0.2" + "@solana/web3.js@~1.77.3": version "1.77.4" resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.77.4.tgz#aad8c44a02ced319493308ef765a2b36a9e9fa8c" @@ -512,6 +664,26 @@ rpc-websockets "^7.5.1" superstruct "^0.14.2" +"@solworks/soltoolkit-sdk@^0.0.23": + version "0.0.23" + resolved "https://registry.yarnpkg.com/@solworks/soltoolkit-sdk/-/soltoolkit-sdk-0.0.23.tgz#ef32d0aa79f888bcf0f639d280005b2e97cdc624" + integrity sha512-O6lXT3EBR4gmcjt0/33i97VMHVEImwXGi+4TNrDDdifn3tyOUB7V6PR1VGxlavQb9hqmVai3xhedg/rmbQzX7w== + dependencies: + "@solana/buffer-layout" "^4.0.0" + "@solana/spl-token" "^0.3.4" + "@solana/web3.js" "^1.54.0" + "@types/bn.js" "^5.1.0" + "@types/node" "^18.7.13" + "@types/node-fetch" "^2.6.2" + bn.js "^5.2.1" + decimal.js "^10.4.0" + typescript "^4.8.2" + +"@soncodi/signal@~2.0.7": + version "2.0.7" + resolved "https://registry.yarnpkg.com/@soncodi/signal/-/signal-2.0.7.tgz#0a2c361b02dbfdbcf4e66b78e5f711e0a13d6e83" + integrity sha512-zA2oZluZmVvgZEDjF243KWD1S2J+1SH1MVynI0O1KRgDt1lU8nqk7AK3oQfW/WpwT51L5waGSU0xKF/9BTP5Cw== + "@swc/helpers@^0.5.11": version "0.5.12" resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.12.tgz#37aaca95284019eb5d2207101249435659709f4b" @@ -519,6 +691,39 @@ dependencies: tslib "^2.4.0" +"@switchboard-xyz/common@^2.5.3": + version "2.5.5" + resolved "https://registry.yarnpkg.com/@switchboard-xyz/common/-/common-2.5.5.tgz#773c20584877af86abe724e9787de8f3e6385bce" + integrity sha512-/qUmZlrfQyckvHGzS5Cj2+Ocd3eE64rPjQb1eEocc5dv4HXZMqbBbpM6BwURrQhZ65i3jO1evhTcAk3TVqCA8w== + dependencies: + "@solana/web3.js" "^1.93.0" + axios "^1.7.2" + big.js "^6.2.1" + bn.js "^5.2.1" + bs58 "^5.0.0" + cron-validator "^1.3.1" + decimal.js "^10.4.3" + js-sha256 "^0.11.0" + lodash "^4.17.21" + protobufjs "^7.2.6" + yaml "^2.5.0" + +"@switchboard-xyz/on-demand@^1.2.36": + version "1.2.51" + resolved "https://registry.yarnpkg.com/@switchboard-xyz/on-demand/-/on-demand-1.2.51.tgz#ad42a0855dcff59d3cd7e34ba4dc9ea4531bfddf" + integrity sha512-IqtAEtYdCRQqG8a3tL5WOcLgBco8Iionu60Q+hQzCslQw76zDlkToHkI+71ASulFdZ2z+2XjaKV5ZVqPcYgP7g== + dependencies: + "@brokerloop/ttlcache" "^3.2.3" + "@coral-xyz/anchor-30" "npm:@coral-xyz/anchor@0.30.1" + "@solana/web3.js" "^1.95.0" + "@solworks/soltoolkit-sdk" "^0.0.23" + "@switchboard-xyz/common" "^2.5.3" + axios "^1.7.4" + big.js "^6.2.1" + bs58 "^5.0.0" + js-yaml "^4.1.0" + protobufjs "^7.2.6" + "@tsconfig/node10@^1.0.7": version "1.0.11" resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.11.tgz#6ee46400685f130e278128c7b38b7e031ff5b2f2" @@ -568,6 +773,14 @@ resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-9.1.1.tgz#e7c4f1001eefa4b8afbd1eee27a237fee3bf29c4" integrity sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw== +"@types/node-fetch@^2.6.2": + version "2.6.12" + resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.12.tgz#8ab5c3ef8330f13100a7479e2cd56d3386830a03" + integrity sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA== + dependencies: + "@types/node" "*" + form-data "^4.0.0" + "@types/node@*": version "18.11.13" resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.13.tgz#dff34f226ec1ac0432ae3b136ec5552bd3b9c0fe" @@ -585,6 +798,13 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240" integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== +"@types/node@^18.7.13": + version "18.19.67" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.67.tgz#77c4b01641a1e3e1509aff7e10d39e4afd5ae06d" + integrity sha512-wI8uHusga+0ZugNp0Ol/3BqQfEcCCNfojtO6Oou9iVNGPTL6QNSdnUdqq85fRgIorLhLMuPIKpsN98QE9Nh+KQ== + dependencies: + undici-types "~5.26.4" + "@types/uuid@^8.3.4": version "8.3.4" resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-8.3.4.tgz#bd86a43617df0594787d38b735f55c805becf1bc" @@ -688,6 +908,20 @@ assertion-error@^1.1.0: resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +axios@^1.7.2, axios@^1.7.4: + version "1.7.8" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.8.tgz#1997b1496b394c21953e68c14aaa51b7b5de3d6e" + integrity sha512-Uu0wb7KNqK2t5K+YQyVCLM76prD5sRFjKHbJYCP1J7JFGEQ6nN7HWn9+04LAeiJ3ji54lgS/gZCH1oxyrf1SPw== + dependencies: + follow-redirects "^1.15.6" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" @@ -715,6 +949,11 @@ base64-js@^1.3.1: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== +big.js@^6.2.1: + version "6.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-6.2.2.tgz#be3bb9ac834558b53b099deef2a1d06ac6368e1a" + integrity sha512-y/ie+Faknx7sZA5MfGA2xKlu0GDv8RWrXGsmlteyJQ2lvoKv9GBK/fpRMc2qlSoBAgNxrixICFCBefIq8WCQpQ== + bigint-buffer@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/bigint-buffer/-/bigint-buffer-1.1.5.tgz#d038f31c8e4534c1f8d0015209bf34b4fa6dd442" @@ -904,6 +1143,13 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + commander@^12.0.0, commander@^12.1.0: version "12.1.0" resolved "https://registry.yarnpkg.com/commander/-/commander-12.1.0.tgz#01423b36f501259fdaac4d0e4d60c96c991585d3" @@ -919,6 +1165,11 @@ create-require@^1.1.0: resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== +cron-validator@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/cron-validator/-/cron-validator-1.3.1.tgz#8f2fe430f92140df77f91178ae31fc1e3a48a20e" + integrity sha512-C1HsxuPCY/5opR55G5/WNzyEGDWFVG+6GLrA+fW/sCTcP6A6NTjUP2AK7B8n2PyFs90kDG2qzwm8LMheADku6A== + cross-fetch@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" @@ -943,7 +1194,7 @@ decamelize@^4.0.0: resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== -decimal.js@^10.4.3: +decimal.js@^10.4.0, decimal.js@^10.4.3: version "10.4.3" resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== @@ -960,6 +1211,11 @@ delay@^5.0.0: resolved "https://registry.yarnpkg.com/delay/-/delay-5.0.0.tgz#137045ef1b96e5071060dd5be60bf9334436bd1d" integrity sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw== +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + diff@^3.1.0: version "3.5.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" @@ -1060,6 +1316,20 @@ flat@^5.0.2: resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== +follow-redirects@^1.15.6: + version "1.15.9" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1" + integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== + +form-data@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.1.tgz#ba1076daaaa5bfd7e99c1a6cb02aa0a5cff90d48" + integrity sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -1209,6 +1479,11 @@ jito-ts@^3.0.1: node-fetch "^2.6.7" superstruct "^1.0.3" +js-sha256@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/js-sha256/-/js-sha256-0.11.0.tgz#256a921d9292f7fe98905face82e367abaca9576" + integrity sha512-6xNlKayMZvds9h1Y1VWc0fQHQ82BxTXizWPEtEeGvmOUYpBRy4gbWroHLpzowe6xiQhHpelCQiE7HEdznyBL9Q== + js-yaml@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" @@ -1245,6 +1520,11 @@ lodash.camelcase@^4.3.0: resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== +lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + log-symbols@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" @@ -1277,6 +1557,18 @@ make-error@^1.1.1: resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + minimatch@^5.0.1, minimatch@^5.1.6: version "5.1.6" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" @@ -1433,6 +1725,29 @@ protobufjs@^7.2.5: "@types/node" ">=13.7.0" long "^5.0.0" +protobufjs@^7.2.6: + version "7.4.0" + resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-7.4.0.tgz#7efe324ce9b3b61c82aae5de810d287bc08a248a" + integrity sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw== + dependencies: + "@protobufjs/aspromise" "^1.1.2" + "@protobufjs/base64" "^1.1.2" + "@protobufjs/codegen" "^2.0.4" + "@protobufjs/eventemitter" "^1.1.0" + "@protobufjs/fetch" "^1.1.0" + "@protobufjs/float" "^1.0.2" + "@protobufjs/inquire" "^1.1.0" + "@protobufjs/path" "^1.1.2" + "@protobufjs/pool" "^1.1.0" + "@protobufjs/utf8" "^1.1.0" + "@types/node" ">=13.7.0" + long "^5.0.0" + +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" @@ -1677,6 +1992,16 @@ typescript@^4.3.5: resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.4.tgz#a2a3d2756c079abda241d75f149df9d561091e78" integrity sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg== +typescript@^4.8.2: + version "4.9.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" + integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== + +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + undici-types@~6.18.2: version "6.18.2" resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.18.2.tgz#8b678cf939d4fc9ec56be3c68ed69c619dee28b0" @@ -1746,6 +2071,11 @@ y18n@^5.0.5: resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== +yaml@^2.5.0: + version "2.6.1" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.6.1.tgz#42f2b1ba89203f374609572d5349fb8686500773" + integrity sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg== + yargs-parser@^20.2.2, yargs-parser@^20.2.9: version "20.2.9" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" From f5cfba8d56c815ea1516987684772f6692da41de Mon Sep 17 00:00:00 2001 From: Jon Gurary <91919816+jgur-psyops@users.noreply.github.com> Date: Thu, 19 Dec 2024 11:02:24 -0500 Subject: [PATCH 09/59] Freeze settings v2 (#263) * To support arena, we added banks with frozen settings. After some consideration, we have determined that the pool administrator should be able to modify the deposit/borrow limits. Those settings are now configurable even on frozen pools. * Adds a floor to oracle_max_age --- programs/marginfi/fuzz/src/lib.rs | 1 + programs/marginfi/src/constants.rs | 3 ++ programs/marginfi/src/errors.rs | 2 - programs/marginfi/src/events.rs | 9 ++++ .../instructions/marginfi_group/add_pool.rs | 2 +- .../marginfi_group/configure_bank.rs | 52 +++++++++++------- programs/marginfi/src/state/marginfi_group.rs | 14 ++++- test-utils/src/test.rs | 1 + tests/04_configureBank.spec.ts | 54 +++++++++++-------- 9 files changed, 92 insertions(+), 46 deletions(-) diff --git a/programs/marginfi/fuzz/src/lib.rs b/programs/marginfi/fuzz/src/lib.rs index c550d8799..0c34b0b88 100644 --- a/programs/marginfi/fuzz/src/lib.rs +++ b/programs/marginfi/fuzz/src/lib.rs @@ -299,6 +299,7 @@ impl<'state> MarginfiFuzzContext<'state> { } else { marginfi::state::marginfi_group::RiskTier::Isolated }, + oracle_max_age: 100, ..Default::default() }, ) diff --git a/programs/marginfi/src/constants.rs b/programs/marginfi/src/constants.rs index 42a09442b..0310c3003 100644 --- a/programs/marginfi/src/constants.rs +++ b/programs/marginfi/src/constants.rs @@ -45,6 +45,9 @@ pub const INIT_BANK_ORIGINATION_FEE_DEFAULT: u32 = 10000; pub const SECONDS_PER_YEAR: I80F48 = I80F48!(31_536_000); +/// Due to real-world constraints, oracles using an age less than this value are typically too +/// unreliable, and we want to restrict pools from picking an oracle that is effectively unusable +pub const ORACLE_MIN_AGE: u16 = 30; pub const MAX_PYTH_ORACLE_AGE: u64 = 60; pub const MAX_SWB_ORACLE_AGE: u64 = 3 * 60; diff --git a/programs/marginfi/src/errors.rs b/programs/marginfi/src/errors.rs index 21ca13bb3..98ff22aba 100644 --- a/programs/marginfi/src/errors.rs +++ b/programs/marginfi/src/errors.rs @@ -98,8 +98,6 @@ pub enum MarginfiError { T22MintRequired, #[msg("Invalid ATA for global fee account")] // 6048 InvalidFeeAta, - #[msg("Bank settings are frozen and cannot be updated")] // 6049 - BankSettingsFrozen, } impl From for ProgramError { diff --git a/programs/marginfi/src/events.rs b/programs/marginfi/src/events.rs index 35518c6f6..24f6fe381 100644 --- a/programs/marginfi/src/events.rs +++ b/programs/marginfi/src/events.rs @@ -45,6 +45,15 @@ pub struct LendingPoolBankConfigureEvent { pub config: BankConfigOpt, } +#[event] +pub struct LendingPoolBankConfigureFrozenEvent { + pub header: GroupEventHeader, + pub bank: Pubkey, + pub mint: Pubkey, + pub deposit_limit: u64, + pub borrow_limit: u64, +} + #[event] pub struct LendingPoolBankAccrueInterestEvent { pub header: GroupEventHeader, diff --git a/programs/marginfi/src/instructions/marginfi_group/add_pool.rs b/programs/marginfi/src/instructions/marginfi_group/add_pool.rs index 7b1610323..ebd1f49bd 100644 --- a/programs/marginfi/src/instructions/marginfi_group/add_pool.rs +++ b/programs/marginfi/src/instructions/marginfi_group/add_pool.rs @@ -44,7 +44,7 @@ pub fn lending_pool_add_bank( let mut bank = bank_loader.load_init()?; let liquidity_vault_bump = ctx.bumps.liquidity_vault; - let liquidity_vault_authority_bump = ctx.bumps.liquidity_vault_authority; + let liquidity_vault_authority_bump: u8 = ctx.bumps.liquidity_vault_authority; let insurance_vault_bump = ctx.bumps.insurance_vault; let insurance_vault_authority_bump = ctx.bumps.insurance_vault_authority; let fee_vault_bump = ctx.bumps.fee_vault; diff --git a/programs/marginfi/src/instructions/marginfi_group/configure_bank.rs b/programs/marginfi/src/instructions/marginfi_group/configure_bank.rs index 1ac64b734..600241e5e 100644 --- a/programs/marginfi/src/instructions/marginfi_group/configure_bank.rs +++ b/programs/marginfi/src/instructions/marginfi_group/configure_bank.rs @@ -1,5 +1,7 @@ use crate::constants::{EMISSIONS_AUTH_SEED, EMISSIONS_TOKEN_ACCOUNT_SEED, FREEZE_SETTINGS}; -use crate::events::{GroupEventHeader, LendingPoolBankConfigureEvent}; +use crate::events::{ + GroupEventHeader, LendingPoolBankConfigureEvent, LendingPoolBankConfigureFrozenEvent, +}; use crate::prelude::MarginfiError; use crate::{check, math_error, utils}; use crate::{ @@ -17,27 +19,39 @@ pub fn lending_pool_configure_bank( ) -> MarginfiResult { let mut bank = ctx.accounts.bank.load_mut()?; - check!( - !bank.get_flag(FREEZE_SETTINGS), - MarginfiError::BankSettingsFrozen - ); - - bank.configure(&bank_config)?; + // If settings are frozen, you can only update the deposit and borrow limits, everything else is ignored. + if bank.get_flag(FREEZE_SETTINGS) { + bank.configure_unfrozen_fields_only(&bank_config)?; - if bank_config.oracle.is_some() { - bank.config.validate_oracle_setup(ctx.remaining_accounts)?; + emit!(LendingPoolBankConfigureFrozenEvent { + header: GroupEventHeader { + marginfi_group: ctx.accounts.marginfi_group.key(), + signer: Some(*ctx.accounts.admin.key) + }, + bank: ctx.accounts.bank.key(), + mint: bank.mint, + deposit_limit: bank.config.deposit_limit, + borrow_limit: bank.config.borrow_limit, + }); + } else { + // Settings are not frozen, everything updates + bank.configure(&bank_config)?; + + if bank_config.oracle.is_some() { + bank.config.validate_oracle_setup(ctx.remaining_accounts)?; + } + + emit!(LendingPoolBankConfigureEvent { + header: GroupEventHeader { + marginfi_group: ctx.accounts.marginfi_group.key(), + signer: Some(*ctx.accounts.admin.key) + }, + bank: ctx.accounts.bank.key(), + mint: bank.mint, + config: bank_config, + }); } - emit!(LendingPoolBankConfigureEvent { - header: GroupEventHeader { - marginfi_group: ctx.accounts.marginfi_group.key(), - signer: Some(*ctx.accounts.admin.key) - }, - bank: ctx.accounts.bank.key(), - mint: bank.mint, - config: bank_config, - }); - Ok(()) } diff --git a/programs/marginfi/src/state/marginfi_group.rs b/programs/marginfi/src/state/marginfi_group.rs index 955b6ef1c..188a6aed4 100644 --- a/programs/marginfi/src/state/marginfi_group.rs +++ b/programs/marginfi/src/state/marginfi_group.rs @@ -10,7 +10,7 @@ use crate::{ EMISSION_FLAGS, FEE_VAULT_AUTHORITY_SEED, FEE_VAULT_SEED, GROUP_FLAGS, INSURANCE_VAULT_AUTHORITY_SEED, INSURANCE_VAULT_SEED, LIQUIDITY_VAULT_AUTHORITY_SEED, LIQUIDITY_VAULT_SEED, MAX_ORACLE_KEYS, MAX_PYTH_ORACLE_AGE, MAX_SWB_ORACLE_AGE, - PERMISSIONLESS_BAD_DEBT_SETTLEMENT_FLAG, PYTH_ID, SECONDS_PER_YEAR, + ORACLE_MIN_AGE, PERMISSIONLESS_BAD_DEBT_SETTLEMENT_FLAG, PYTH_ID, SECONDS_PER_YEAR, TOTAL_ASSET_VALUE_INIT_LIMIT_INACTIVE, }, debug, math_error, @@ -722,6 +722,14 @@ impl Bank { Ok(()) } + /// Configures just the borrow and deposit limits, ignoring all other values + pub fn configure_unfrozen_fields_only(&mut self, config: &BankConfigOpt) -> MarginfiResult { + set_if_some!(self.config.deposit_limit, config.deposit_limit); + set_if_some!(self.config.borrow_limit, config.borrow_limit); + // weights didn't change so no validation is needed + Ok(()) + } + /// Calculate the interest rate accrual state changes for a given time period /// /// Collected protocol and insurance fees are stored in state. @@ -1414,6 +1422,10 @@ impl BankConfig { } pub fn validate_oracle_setup(&self, ais: &[AccountInfo]) -> MarginfiResult { + check!( + self.oracle_max_age >= ORACLE_MIN_AGE, + MarginfiError::InvalidOracleSetup + ); OraclePriceFeedAdapter::validate_bank_config(self, ais)?; Ok(()) } diff --git a/test-utils/src/test.rs b/test-utils/src/test.rs index 146091865..de3e0003f 100644 --- a/test-utils/src/test.rs +++ b/test-utils/src/test.rs @@ -305,6 +305,7 @@ lazy_static! { protocol_origination_fee: I80F48!(0).into(), ..Default::default() }, + oracle_max_age: 100, ..Default::default() }; pub static ref DEFAULT_USDC_TEST_BANK_CONFIG: BankConfig = BankConfig { diff --git a/tests/04_configureBank.spec.ts b/tests/04_configureBank.spec.ts index a6c01c1ba..da194892e 100644 --- a/tests/04_configureBank.spec.ts +++ b/tests/04_configureBank.spec.ts @@ -1,5 +1,5 @@ import { BN, Program, workspace } from "@coral-xyz/anchor"; -import { Transaction } from "@solana/web3.js"; +import { PublicKey, Transaction } from "@solana/web3.js"; import { configureBank } from "./utils/instructions"; import { Marginfi } from "../target/types/marginfi"; import { bankKeypairUsdc, groupAdmin, marginfiGroup } from "./rootHooks"; @@ -117,28 +117,36 @@ describe("Lending pool configure bank", () => { ); const bank = await program.account.bank.fetch(bankKeypairUsdc.publicKey); assertBNEqual(bank.flags, FREEZE_SETTINGS); + }); + + it("(admin) Update settings after a freeze - only deposit/borrow caps update", async () => { + let configNew = defaultBankConfigOptRaw(); + const newDepositLimit = new BN(2_000_000_000); + const newBorrowLimit = new BN(3_000_000_000); + configNew.depositLimit = newDepositLimit; + configNew.borrowLimit = newBorrowLimit; + + // These will be ignored... + configNew.oracleMaxAge = 42; + configNew.freezeSettings = false; + + await groupAdmin.mrgnProgram!.provider.sendAndConfirm!( + new Transaction().add( + await configureBank(program, { + marginfiGroup: marginfiGroup.publicKey, + admin: groupAdmin.wallet.publicKey, + bank: bankKeypairUsdc.publicKey, + bankConfigOpt: configNew, + }) + ) + ); + const bank = await program.account.bank.fetch(bankKeypairUsdc.publicKey); + const config = bank.config; + assertBNEqual(config.depositLimit, newDepositLimit); + assertBNEqual(config.borrowLimit, newBorrowLimit); - // Attempting to config again should fail... - let failed = false; - try { - await groupAdmin.mrgnProgram!.provider.sendAndConfirm!( - new Transaction().add( - await configureBank(program, { - marginfiGroup: marginfiGroup.publicKey, - admin: groupAdmin.wallet.publicKey, - bank: bankKeypairUsdc.publicKey, - bankConfigOpt: defaultBankConfigOptRaw(), - }) - ) - ); - } catch (err) { - assert.ok( - err.logs.some((log: string) => - log.includes("Error Code: BankSettingsFrozen") - ) - ); - failed = true; - } - assert.ok(failed, "Transaction succeeded when it should have failed"); + // Ignored fields didn't change.. + assert.equal(config.oracleMaxAge, 100); + assertBNEqual(bank.flags, FREEZE_SETTINGS); // still frozen }); }); From f8ca780e512eac67de7870279d91972dad338122 Mon Sep 17 00:00:00 2001 From: Jon Gurary <91919816+jgur-psyops@users.noreply.github.com> Date: Thu, 19 Dec 2024 14:39:47 -0500 Subject: [PATCH 10/59] Add deploy guide (#264) * Add deploy guide, fix CI pipeline --- .github/actions/setup-common/action.yaml | 2 +- .github/workflows/release-program.yaml | 2 +- DEPLOY_GUIDE.md | 49 ++++++++++++++++++++ DEPLOY_GUIDE_STAGING.md | 57 ++++++++++++++++++++++++ scripts/deploy-buffer.sh | 2 +- 5 files changed, 109 insertions(+), 3 deletions(-) create mode 100644 DEPLOY_GUIDE.md create mode 100644 DEPLOY_GUIDE_STAGING.md diff --git a/.github/actions/setup-common/action.yaml b/.github/actions/setup-common/action.yaml index 1c6ce9764..941e95513 100644 --- a/.github/actions/setup-common/action.yaml +++ b/.github/actions/setup-common/action.yaml @@ -18,7 +18,7 @@ runs: components: rustfmt, clippy default: true - - run: cargo install cargo-nextest --locked + - run: cargo install cargo-nextest --version "0.9.81" --locked shell: bash - run: cargo nextest --version diff --git a/.github/workflows/release-program.yaml b/.github/workflows/release-program.yaml index ba9b98eee..1cf51149e 100644 --- a/.github/workflows/release-program.yaml +++ b/.github/workflows/release-program.yaml @@ -7,7 +7,7 @@ on: env: RUST_TOOLCHAIN: 1.75.0 - SOLANA_CLI_VERSION: 1.18.15 + SOLANA_CLI_VERSION: 1.18.17 ANCHOR_CLI_VERSION: 0.30.1 ANCHOR_SHA: e6d7dafe12da661a36ad1b4f3b5970e8986e5321 CARGO_TERM_COLOR: always diff --git a/DEPLOY_GUIDE.md b/DEPLOY_GUIDE.md new file mode 100644 index 000000000..48bac24b5 --- /dev/null +++ b/DEPLOY_GUIDE.md @@ -0,0 +1,49 @@ +## MAINNET VERIFIED DEPLOY GUIDE + +Marginfi program authority is managed by squads (https://v3.squads.so/dashboard/M05MQ1FNRDdmUTdCQjc2aTY0aGpMRUNYTEFFNHpmeFJ2UTdlYVREVEo2elo=) and uses verified builds. + + +First you will need: +* Solana tools 1.18.20 or later (`solana-install init 1.18.20`) +* solana-verify (`cargo install solana-verify`) +* Docker (https://docs.docker.com/engine/install/ubuntu/) +* A wallet with at least 10 SOL (this guide will assume your wallet is at `~/keys/mainnet-deploy.json`). Verify the pubkey of your wallet with `solana-keygen pubkey ~/keys/mainnet-deploy.json` and verify you have at least 10 SOL with `solana balance -k ~/keys/mainnet-deploy.json` +* An RPC provider connected to mainnet (`solana config set --url https://api.mainnet-beta.solana.com`). The solana public api is usually fine. + + +Steps: +* Make sure you are on the main branch and you have pulled latest. +* Run `./scripts/build-program-verifiable.sh marginfi mainnet`. Other people signing on the multisig should also run this and validate that the hash matches. +* Deploy the buffer with `./scripts/deploy-buffer.sh marginfi ~/keys/mainnet-deploy.json` +* Go to squads, developers, programs, pick marginfi. The buffer address is the output of the previous command. The buffer refund is the public key of the wallet you have used so far (`solana-keygen pubkey ~/keys/mainnet-deploy.json` if you don't know it). Click next. +* Go back to your cli and paste the command Squads gave you in step 2. If this key is not the one used in your solana CLI, make sure it pass it with -k, e.g.: +``` +solana program set-buffer-authority --new-buffer-authority -k ~/keys/mainnet-deploy.json +``` +* Back up the current working program somewhere with `solana -um program dump MFv2hWf31Z9kbCa1snEPYctwafyhdvnV7FZnsebVacA mfi_backup.so` +* Click the pending upgrade to start a vote. +* Execute after the vote passes. + +## DEPLOYING STAKED COLLATERAL TO STAGING + +The Staked Collateral feature uses spl-single-pool, developed by the Solana Foundation (https://github.com/solana-labs/solana-program-library/tree/master/single-pool). This guide will show you how to deploy that program. + +First you will need: +* Agave tools 2.1.0 or later (`sh -c "$(curl -sSfL https://release.anza.xyz/stable/install)"`) and possibly `agave-install init 2.1.0` +* A wallet with at least 2 SOL (this guide will assume your wallet is at `~/keys/staging-deploy.json`). Verify the pubkey of your wallet with `solana-keygen pubkey ~/keys/staging-deploy.json` and verify you have at least 2 SOL with `solana balance -k ~/keys/staging-deploy.json` +* An RPC provider connected to mainnet (`solana config set --url https://api.mainnet-beta.solana.com`). The solana public api is usually fine. + +Steps: +* Clone https://github.com/solana-labs/solana-program-library/tree/master/single-pool and pull latest +* Navigate to programs/single-pool and run `cargo build-sbf` +* Navigate back up to root, then navigate to target. Verify that `solana-keygen pubkey deploy/spl_single_pool-keypair.json` matches the program's declared id. If you want to generate a new id, delete this file and build again to generate a new program keypair. Don't forget to update the declare_id in lib.rs as needed. +* Deploy the program with: +``` +solana program deploy \ + deploy/spl_single_pool.so \ + --program-id deploy/spl_single_pool-keypair.json \ + --keypair ~/keys/staging-deploy.json \ + --fee-payer ~/keys/staging-deploy.json \ + --url + +``` diff --git a/DEPLOY_GUIDE_STAGING.md b/DEPLOY_GUIDE_STAGING.md new file mode 100644 index 000000000..c3e1d0bed --- /dev/null +++ b/DEPLOY_GUIDE_STAGING.md @@ -0,0 +1,57 @@ +## DEPLOYING TO STAGING + +Staging is different from mainnet only in that it uses a different key. Ensure that the key in lib.rs matches the intended staging key (typically stag8sTKds2h4KzjUw3zKTsxbqvT4XKHdaR9X9E6Rct) + +### Requirements + +* You have access to the staging program authority wallet (we will assume it is at `~/keys/staging-deploy.json` from here on) +* Anchor 0.30.1 +* Solana 1.18.17 + +## Steps + +### With Anchor + +* Note: this rarely works, the program is probably too chonky. +* Build with `anchor build -p marginfi -- --no-default-features --features staging` +* If this is your first time deploying (to a new key), with `anchor build -p marginfi -- --no-default-features --features staging ignore-fee-deploy` +* Ensure anchor.toml is configured like this: +``` +[provider] +cluster = "https://api.mainnet-beta.solana.com" +wallet = "~/keys/staging-deploy.json" +``` +Adjust the cluster as needed if using a custom rpc. +* Deploy with `anchor upgrade target/deploy/marginfi.so --program-id stag8sTKds2h4KzjUw3zKTsxbqvT4XKHdaR9X9E6Rct`. Use deploy instead upgrade if this is your first deployment, and use the keypair.json in the target folder instead of the program's id for program-id. + +### If Anchor is busted (for any number of reasons) + +* Run: +``` +solana program deploy --use-rpc \ + target/deploy/marginfi.so \ + --program-id stag8sTKds2h4KzjUw3zKTsxbqvT4XKHdaR9X9E6Rct \ + --keypair ~/keys/staging-deploy.json \ + --fee-payer ~/keys/staging-deploy.json \ + --url +``` +If this is your first time deploying, use the keypair.json in the target folder instead of the program's id for program-id +* Failed? That happens often. `solana program close --buffers -k ~/keys/staging-deploy.json` to recover the buffer funds and try again (Note: this costs you .02 SOL to try again) +* Still failing? That happens. Try to recover the buffer instead of closing it: `solana-keygen recover -o recovered-buffer.json` (then enter the buffer seed phrase). Then: +``` +solana program deploy --use-rpc \ + target/deploy/marginfi.so \ + --program-id stag8sTKds2h4KzjUw3zKTsxbqvT4XKHdaR9X9E6Rct \ + --keypair ~/keys/staging-deploy.json \ + --fee-payer ~/keys/staging-deploy.json \ + --url \ + --buffer recovered-buffer.json +``` +* Program buffer full? Use: +``` +solana program extend \ + --url \ + --keypair ~/keys/staging-deploy.json \ + stag8sTKds2h4KzjUw3zKTsxbqvT4XKHdaR9X9E6Rct 10000 +``` +* If you changed your wallet config, make sure to remove the staging wallet from your Solana config to avoid sausage fingers errors in the future: `solana config set --keypair ~/.config/solana/id.json` \ No newline at end of file diff --git a/scripts/deploy-buffer.sh b/scripts/deploy-buffer.sh index 74c4e1373..4a7557574 100755 --- a/scripts/deploy-buffer.sh +++ b/scripts/deploy-buffer.sh @@ -11,6 +11,6 @@ if [ -z "$program_lib_name" ] || [ -z "$rpc_url" ] || [ -z "$keypair" ]; then exit 1 fi -cmd="solana --url $rpc_url program write-buffer "$ROOT/target/deploy/$program_lib_name.so" -k $keypair" +cmd="solana --url $rpc_url program write-buffer --use-rpc "$ROOT/target/deploy/$program_lib_name.so" -k $keypair" echo "Running: $cmd" eval "$cmd" From 464de33d4e05f6840e5f9c21e96a961ccdc637ff Mon Sep 17 00:00:00 2001 From: Jon Gurary <91919816+jgur-psyops@users.noreply.github.com> Date: Thu, 19 Dec 2024 15:56:44 -0500 Subject: [PATCH 11/59] Fix CLI get bank (#265) * Bug in get bank cli, now "accrues" interest before printing bank data. --- Anchor.toml | 2 +- clients/rust/marginfi-cli/src/processor/mod.rs | 10 ++++++++-- programs/marginfi/src/state/marginfi_group.rs | 1 - 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/Anchor.toml b/Anchor.toml index 8afc1f917..9c621eea2 100644 --- a/Anchor.toml +++ b/Anchor.toml @@ -1,6 +1,6 @@ [toolchain] anchor_version = "0.30.1" -solana_version = "1.18.11" +solana_version = "1.18.17" [features] resolution = true diff --git a/clients/rust/marginfi-cli/src/processor/mod.rs b/clients/rust/marginfi-cli/src/processor/mod.rs index 987b930cd..47ec2a3ef 100644 --- a/clients/rust/marginfi-cli/src/processor/mod.rs +++ b/clients/rust/marginfi-cli/src/processor/mod.rs @@ -56,7 +56,7 @@ use { signature::Keypair, signer::Signer, system_program, - sysvar::{self, Sysvar}, + sysvar::{self}, transaction::Transaction, }, spl_associated_token_account::{ @@ -1166,7 +1166,13 @@ pub fn bank_get(config: Config, bank_pk: Option) -> Result<()> { let mut bank: Bank = config.mfi_program.account(address)?; let group: MarginfiGroup = config.mfi_program.account(bank.group)?; - bank.accrue_interest(Clock::get()?.unix_timestamp, &group)?; + let current_timestamp = SystemTime::now() + .duration_since(UNIX_EPOCH) + .expect("Time went backwards"); + let current_timestamp = current_timestamp.as_secs() as i64; + + bank.accrue_interest(current_timestamp, &group)?; + println!(" Cranking interest at: {:?}", current_timestamp); print_bank(&address, &bank); diff --git a/programs/marginfi/src/state/marginfi_group.rs b/programs/marginfi/src/state/marginfi_group.rs index 188a6aed4..146a7f39e 100644 --- a/programs/marginfi/src/state/marginfi_group.rs +++ b/programs/marginfi/src/state/marginfi_group.rs @@ -744,7 +744,6 @@ impl Bank { solana_program::log::sol_log_compute_units(); let time_delta: u64 = (current_timestamp - self.last_update).try_into().unwrap(); - if time_delta == 0 { return Ok(()); } From b2e769dd8596947fa47b48e222296f5a2d095ec9 Mon Sep 17 00:00:00 2001 From: Jon Gurary <91919816+jgur-psyops@users.noreply.github.com> Date: Tue, 24 Dec 2024 02:55:51 -0500 Subject: [PATCH 12/59] Staked collateral (#248) * Adds the ability to use SOL assets staked to vanilla Solana staking (https://github.com/anza-xyz/agave/tree/master/sdk/program/src/stake) as collateral to borrow SOL. * Validators (or anyone: the process is permissionless) will use the Single Pool program (https://github.com/solana-labs/solana-program-library/tree/master/single-pool) to create an "LST" that uses that just that validator (unlike a traditional LST which will have several validators). After a bank for this LST is created, the LST can be deposited as collateral in the main pool. Only SOL can be borrowed against this kind of asset. * Adds Bankrun simulation of creating a validator, native SOL staking + delegation from users, deposit into a Single Pool, and integration with mrgnlend --- .github/workflows/test.yaml | 94 +- Anchor.toml | 25 +- clients/rust/marginfi-cli/src/entrypoint.rs | 5 + package.json | 6 +- programs/brick/src/lib.rs | 7 + programs/marginfi/fuzz/README.md | 18 + programs/marginfi/src/constants.rs | 23 + programs/marginfi/src/errors.rs | 20 +- .../instructions/marginfi_account/borrow.rs | 4 +- .../instructions/marginfi_account/deposit.rs | 4 +- .../marginfi_account/liquidate.rs | 20 + .../instructions/marginfi_group/add_pool.rs | 15 +- .../marginfi_group/add_pool_permissionless.rs | 244 ++++++ .../marginfi_group/add_pool_with_seed.rs | 15 +- .../instructions/marginfi_group/configure.rs | 1 + .../marginfi_group/configure_bank.rs | 5 +- .../marginfi_group/edit_stake_settings.rs | 69 ++ .../marginfi_group/init_staked_settings.rs | 75 ++ .../src/instructions/marginfi_group/mod.rs | 8 + .../propagate_staked_settings.rs | 50 ++ programs/marginfi/src/lib.rs | 29 + programs/marginfi/src/macros.rs | 11 + .../marginfi/src/state/marginfi_account.rs | 78 +- programs/marginfi/src/state/marginfi_group.rs | 68 +- programs/marginfi/src/state/mod.rs | 1 + programs/marginfi/src/state/price.rs | 200 ++++- .../marginfi/src/state/staked_settings.rs | 116 +++ programs/marginfi/src/utils.rs | 66 +- .../tests/admin_actions/setup_bank.rs | 6 + programs/marginfi/tests/misc/regression.rs | 34 +- tests/01_initGroup.spec.ts | 242 +++++- tests/02_configGroup.spec.ts | 2 +- tests/03_addBank.spec.ts | 46 +- tests/04_configureBank.spec.ts | 5 +- tests/05_setupEmissions.spec.ts | 154 ++++ tests/06_initUser.spec.ts | 69 ++ tests/07_deposit.spec.ts | 163 ++++ tests/08_borrow.spec.ts | 177 ++++ tests/fixtures/pyusd_bank.json | 14 + tests/fixtures/spl_single_pool.so | Bin 0 -> 390632 bytes tests/rootHooks.ts | 295 ++++++- tests/s01_usersStake.spec.ts | 316 +++++++ tests/s02_addBank.spec.ts | 504 +++++++++++ tests/s03_deposit.spec.ts | 254 ++++++ tests/s04_borrow.spec.ts | 124 +++ tests/s05_solAppreciates.spec.ts | 195 +++++ tests/s06_propagateSets.spec.ts | 182 ++++ tests/utils/genericTests.ts | 31 +- tests/utils/group-instructions.ts | 451 ++++++++++ tests/utils/mocks.ts | 59 +- tests/utils/pdas.ts | 55 ++ tests/utils/pyth_mocks.ts | 11 +- tests/utils/spl-staking-utils.ts | 151 ++++ tests/utils/stake-utils.ts | 517 +++++++++++ tests/utils/stakeCollatizer/pdas.ts | 33 + tests/utils/tools.ts | 18 +- tests/utils/types.ts | 4 +- tests/utils/user-instructions.ts | 113 +++ yarn.lock | 803 ++++++++---------- 59 files changed, 5697 insertions(+), 608 deletions(-) create mode 100644 programs/marginfi/src/instructions/marginfi_group/add_pool_permissionless.rs create mode 100644 programs/marginfi/src/instructions/marginfi_group/edit_stake_settings.rs create mode 100644 programs/marginfi/src/instructions/marginfi_group/init_staked_settings.rs create mode 100644 programs/marginfi/src/instructions/marginfi_group/propagate_staked_settings.rs create mode 100644 programs/marginfi/src/state/staked_settings.rs create mode 100644 tests/05_setupEmissions.spec.ts create mode 100644 tests/06_initUser.spec.ts create mode 100644 tests/07_deposit.spec.ts create mode 100644 tests/08_borrow.spec.ts create mode 100644 tests/fixtures/pyusd_bank.json create mode 100755 tests/fixtures/spl_single_pool.so create mode 100644 tests/s01_usersStake.spec.ts create mode 100644 tests/s02_addBank.spec.ts create mode 100644 tests/s03_deposit.spec.ts create mode 100644 tests/s04_borrow.spec.ts create mode 100644 tests/s05_solAppreciates.spec.ts create mode 100644 tests/s06_propagateSets.spec.ts create mode 100644 tests/utils/group-instructions.ts create mode 100644 tests/utils/spl-staking-utils.ts create mode 100644 tests/utils/stake-utils.ts create mode 100644 tests/utils/stakeCollatizer/pdas.ts create mode 100644 tests/utils/user-instructions.ts diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 519b28673..fa411c538 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -115,45 +115,71 @@ jobs: - name: Pass after fuzzing run: echo "Fuzzing completed" - # localnet-test-marginfi: - # name: Anchor localnet tests marginfi - # runs-on: ubuntu-latest - - # steps: - # - uses: actions/checkout@v3 - - # - uses: ./.github/actions/setup-common/ - # - uses: ./.github/actions/setup-anchor-cli/ - - # - uses: ./.github/actions/build-workspace/ - - # - name: Install Node.js dependencies - # run: yarn install - - # - name: Build marginfi program - # run: anchor build -p marginfi -- --no-default-features + localnet-test-marginfi: + name: Anchor localnet tests marginfi + runs-on: ubuntu-latest - # - name: Build liquidity incentive program - # run: anchor build -p liquidity_incentive_program -- --no-default-features + steps: + - uses: actions/checkout@v3 - # - name: Build mocks program - # run: anchor build -p mocks + - name: Setup Node.js + uses: actions/setup-node@v3 + with: + node-version: "20.10.0" - # - name: Start Solana Test Validator - # run: | - # solana-test-validator --reset --limit-ledger-size 1000 \ + - uses: ./.github/actions/setup-common/ + - uses: ./.github/actions/setup-anchor-cli/ - # - name: Wait for Validator to Start - # run: sleep 60 + - uses: ./.github/actions/build-workspace/ - # - name: Deploy Liquidity Incentive Program - # run: solana program deploy --program-id Lip1111111111111111111111111111111111111111 target/deploy/liquidity_incentive_program.so + - name: Install Node.js dependencies + run: yarn install - # - name: Deploy Marginfi Program - # run: solana program deploy --program-id 2jGhuVUuy3umdzByFx8sNWUAaf5vaeuDm78RDPEnhrMr target/deploy/marginfi.so + - name: Build marginfi program + run: anchor build -p marginfi -- --no-default-features - # - name: Deploy Mocks Program - # run: solana program deploy --program-id 5XaaR94jBubdbrRrNW7DtRvZeWvLhSHkEGU3jHTEXV3C target/deploy/mocks.so + - name: Build mocks program + run: anchor build -p mocks - # - name: Run tests - # run: anchor test --skip-build --skip-local-validator + # Handles extraneous (os error 2) that appears during testing in some versions of solana. See: + # https://solana.stackexchange.com/questions/1648/error-no-such-file-or-directory-os-error-2-error-from-anchor-test + - name: Run Anchor tests + run: | + set +e + anchor test --skip-build 2>&1 | tee test_output.log + ANCHOR_EXIT_CODE=$? + set -e + + if grep -q "failing" test_output.log; then + echo "Real test failure detected." + exit 1 + fi + + if grep -q "No such file or directory (os error 2)" test_output.log; then + echo "Extraneous error detected, ignoring it..." + exit 0 + fi + + if [ $ANCHOR_EXIT_CODE -ne 0 ]; then + echo "Anchor test exited with code $ANCHOR_EXIT_CODE due to an unexpected error." + exit 1 + else + echo "Test run completed successfully without extraneous errors." + exit 0 + fi + + # - name: Start Solana Test Validator + # run: | + # solana-test-validator --reset --limit-ledger-size 1000 \ + + # - name: Wait for Validator to Start + # run: sleep 60 + + # - name: Deploy Liquidity Incentive Program + # run: solana program deploy --program-id Lip1111111111111111111111111111111111111111 target/deploy/liquidity_incentive_program.so + + # - name: Deploy Marginfi Program + # run: solana program deploy --program-id 2jGhuVUuy3umdzByFx8sNWUAaf5vaeuDm78RDPEnhrMr target/deploy/marginfi.so + + # - name: Deploy Mocks Program + # run: solana program deploy --program-id 5XaaR94jBubdbrRrNW7DtRvZeWvLhSHkEGU3jHTEXV3C target/deploy/mocks.so diff --git a/Anchor.toml b/Anchor.toml index 9c621eea2..5d7661d37 100644 --- a/Anchor.toml +++ b/Anchor.toml @@ -1,15 +1,17 @@ [toolchain] anchor_version = "0.30.1" solana_version = "1.18.17" +# Getting "thread 'main' panicked at cli/src/lib.rs:545:18:"? Check your toolchain matches the above. [features] resolution = true skip-lint = false [programs.localnet] -liquidity_incentive_program = "Lip1111111111111111111111111111111111111111" +# liquidity_incentive_program = "Lip1111111111111111111111111111111111111111" marginfi = "2jGhuVUuy3umdzByFx8sNWUAaf5vaeuDm78RDPEnhrMr" mocks = "5XaaR94jBubdbrRrNW7DtRvZeWvLhSHkEGU3jHTEXV3C" +spl_single_pool = "SVSPxpvHdN29nkVg9rPapPNDddN5DipNLRUFhyjFThE" # cloned from solana-labs repo (see below) [programs.mainnet] liquidity_incentive_program = "LipsxuAkFkwa4RKNzn51wAsW7Dedzt1RNHMkTkDEZUW" @@ -19,15 +21,18 @@ marginfi = "MFv2hWf31Z9kbCa1snEPYctwafyhdvnV7FZnsebVacA" url = "https://api.apr.dev" [provider] -cluster = "localnet" -# cluster = "https://devnet.rpcpool.com/" +cluster = "Localnet" wallet = "~/.config/solana/id.json" +# (remove RUST_LOG= to see bankRun logs) [scripts] -test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/*.spec.ts --exit --require tests/rootHooks.ts" +test = "RUST_LOG= yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/*.spec.ts --exit --require tests/rootHooks.ts" + +# Staked collateral tests only +# test = "RUST_LOG= yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/s*.spec.ts --exit --require tests/rootHooks.ts" [test] -startup_wait = 5000 +startup_wait = 60000 shutdown_wait = 2000 upgradeable = false @@ -44,6 +49,16 @@ filename = "tests/fixtures/bonk_bank.json" address = "4kNXetv8hSv9PzvzPZzEs1CTH6ARRRi2b8h6jk1ad1nP" filename = "tests/fixtures/cloud_bank.json" +[[test.validator.account]] +address = "Fe5QkKPVAh629UPP5aJ8sDZu8HTfe6M26jDQkKyXVhoA" +filename = "tests/fixtures/pyusd_bank.json" + [[test.validator.account]] address = "8FRFC6MoGGkMFQwngccyu69VnYbzykGeez7ignHVAFSN" filename = "tests/fixtures/localnet_usdc.json" + +# To update: +# clone https://github.com/solana-labs/solana-program-library/tree/master and run cargo build-sbf in spl_single_pool +[[test.genesis]] +address = "SVSPxpvHdN29nkVg9rPapPNDddN5DipNLRUFhyjFThE" # spl single pool program +program = "tests/fixtures/spl_single_pool.so" diff --git a/clients/rust/marginfi-cli/src/entrypoint.rs b/clients/rust/marginfi-cli/src/entrypoint.rs index 55851a493..3b27abd7d 100644 --- a/clients/rust/marginfi-cli/src/entrypoint.rs +++ b/clients/rust/marginfi-cli/src/entrypoint.rs @@ -244,6 +244,7 @@ impl From for BankOperationalState { } } +#[allow(clippy::large_enum_variant)] #[derive(Debug, Parser)] pub enum BankCommand { Get { @@ -291,6 +292,8 @@ pub enum BankCommand { pf_or: Option, #[clap(long, arg_enum, help = "Bank risk tier")] risk_tier: Option, + #[clap(long, help = "0 = default, 1 = SOL, 2 = Staked SOL LST")] + asset_tag: Option, #[clap(long, arg_enum, help = "Bank oracle type")] oracle_type: Option, #[clap(long, help = "Bank oracle account")] @@ -740,6 +743,7 @@ fn bank(subcmd: BankCommand, global_options: &GlobalOptions) -> Result<()> { pf_ir, pf_or, risk_tier, + asset_tag, oracle_type, oracle_key, usd_init_limit, @@ -792,6 +796,7 @@ fn bank(subcmd: BankCommand, global_options: &GlobalOptions) -> Result<()> { protocol_origination_fee: pf_or.map(|x| I80F48::from_num(x).into()), }), risk_tier: risk_tier.map(|x| x.into()), + asset_tag, total_asset_value_init_limit: usd_init_limit, oracle_max_age, permissionless_bad_debt_settlement, diff --git a/package.json b/package.json index 808ea02f3..c7f215e6e 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ "@coral-xyz/spl-token": "^0.30.1", "@solana/spl-token": "^0.4.8", "@solana/web3.js": "^1.95.2", + "@solana/spl-single-pool-classic": "^1.0.2", "@mrgnlabs/mrgn-common": "^1.8.0", "@mrgnlabs/marginfi-client-v2": "^4.0.0", "mocha": "^10.2.0", @@ -15,12 +16,15 @@ "bignumber.js": "^9.1.2" }, "devDependencies": { + "anchor-bankrun": "^0.4.0", + "solana-bankrun": "^0.3.0", "@types/bn.js": "^5.1.0", "@types/chai": "^4.3.0", "@types/mocha": "^9.0.0", "chai": "^4.3.4", "prettier": "^2.6.2", "ts-node": "^10.9.1", - "typescript": "^4.3.5" + "typescript": "^4.3.5", + "big.js": "^6.2.1" } } diff --git a/programs/brick/src/lib.rs b/programs/brick/src/lib.rs index 47f475e78..107285048 100644 --- a/programs/brick/src/lib.rs +++ b/programs/brick/src/lib.rs @@ -13,6 +13,10 @@ pub mod brick { ) -> Result<()> { Err(ErrorCode::ProgramDisabled.into()) } + + pub fn initialize(_ctx: Context, _val: u64) -> Result<()> { + Ok(()) + } } #[error_code] @@ -20,3 +24,6 @@ pub enum ErrorCode { #[msg("This program is temporarily disabled.")] ProgramDisabled, } + +#[derive(Accounts)] +pub struct Initialize {} diff --git a/programs/marginfi/fuzz/README.md b/programs/marginfi/fuzz/README.md index 4d2539b86..ebd3e99a3 100644 --- a/programs/marginfi/fuzz/README.md +++ b/programs/marginfi/fuzz/README.md @@ -28,3 +28,21 @@ Before the invoke we also copy to a local cache and revert the state if the inst ### Actions The framework uses the arbitrary library to generate a random sequence of actions that are then processed on the same state. + +### How to Run + +Run `python3 ./generate_corpus.py`. You may use python if you don't have python3 installed, or you may need to install python. + +Build with `cargo build`. + +If this fails, you probably need to update your Rust toolchain: + +`rustup install nightly-2024-06-05` + +And possibly: + +`rustup component add rust-src --toolchain nightly-2024-06-05-x86_64-unknown-linux-gnu` + +Run with `cargo +nightly-2024-06-05 fuzz run lend -Zbuild-std --strip-dead-code --no-cfg-fuzzing -- -max_total_time=300` + +To rerun some tests after a failure: `cargo +nightly-2024-06-05 fuzz run -Zbuild-std lend artifacts/lend/crash-ae5084b9433152babdaf7dcd75781eacd7ea55c7`, replacing the hash after crash- with the one you see in the terminal. diff --git a/programs/marginfi/src/constants.rs b/programs/marginfi/src/constants.rs index 0310c3003..dc8680717 100644 --- a/programs/marginfi/src/constants.rs +++ b/programs/marginfi/src/constants.rs @@ -13,6 +13,7 @@ pub const INSURANCE_VAULT_SEED: &str = "insurance_vault"; pub const FEE_VAULT_SEED: &str = "fee_vault"; pub const FEE_STATE_SEED: &str = "feestate"; +pub const STAKED_SETTINGS_SEED: &str = "staked_settings"; pub const EMISSIONS_AUTH_SEED: &str = "emissions_auth_seed"; pub const EMISSIONS_TOKEN_ACCOUNT_SEED: &str = "emissions_token_account_seed"; @@ -28,6 +29,17 @@ cfg_if::cfg_if! { } } +// TODO update to the actual deployment key on mainnet/devnet/staging +cfg_if::cfg_if! { + if #[cfg(feature = "devnet")] { + pub const SPL_SINGLE_POOL_ID: Pubkey = pubkey!("SVSPxpvHdN29nkVg9rPapPNDddN5DipNLRUFhyjFThE"); + } else if #[cfg(any(feature = "mainnet-beta", feature = "staging"))] { + pub const SPL_SINGLE_POOL_ID: Pubkey = pubkey!("SVSPxpvHdN29nkVg9rPapPNDddN5DipNLRUFhyjFThE"); + } else { + pub const SPL_SINGLE_POOL_ID: Pubkey = pubkey!("SVSPxpvHdN29nkVg9rPapPNDddN5DipNLRUFhyjFThE"); + } +} + cfg_if::cfg_if! { if #[cfg(feature = "devnet")] { pub const SWITCHBOARD_PULL_ID: Pubkey = pubkey!("Aio4gaXjXzJNVLtzwtNVmSqGKpANtXhybbkhtAC94ji2"); @@ -36,6 +48,8 @@ cfg_if::cfg_if! { } } +pub const NATIVE_STAKE_ID: Pubkey = pubkey!("Stake11111111111111111111111111111111111111"); + /// TODO: Make these variable per bank pub const LIQUIDATION_LIQUIDATOR_FEE: I80F48 = I80F48!(0.025); pub const LIQUIDATION_INSURANCE_FEE: I80F48 = I80F48!(0.025); @@ -153,3 +167,12 @@ pub const PROTOCOL_FEE_FIXED_DEFAULT: I80F48 = I80F48!(0.01); pub const MIN_PYTH_PUSH_VERIFICATION_LEVEL: VerificationLevel = VerificationLevel::Full; pub const PYTH_PUSH_PYTH_SPONSORED_SHARD_ID: u16 = 0; pub const PYTH_PUSH_MARGINFI_SPONSORED_SHARD_ID: u16 = 3301; + +/// A regular asset that can be comingled with any other regular asset or with `ASSET_TAG_SOL` +pub const ASSET_TAG_DEFAULT: u8 = 0; +/// Accounts with a SOL position can comingle with **either** `ASSET_TAG_DEFAULT` or +/// `ASSET_TAG_STAKED` positions, but not both +pub const ASSET_TAG_SOL: u8 = 1; +/// Staked SOL assets. Accounts with a STAKED position can only deposit other STAKED assets or SOL +/// (`ASSET_TAG_SOL`) and can only borrow SOL (`ASSET_TAG_SOL`) +pub const ASSET_TAG_STAKED: u8 = 2; diff --git a/programs/marginfi/src/errors.rs b/programs/marginfi/src/errors.rs index 98ff22aba..a12acc9c5 100644 --- a/programs/marginfi/src/errors.rs +++ b/programs/marginfi/src/errors.rs @@ -12,7 +12,7 @@ pub enum MarginfiError { BankAssetCapacityExceeded, #[msg("Invalid transfer")] // 6004 InvalidTransfer, - #[msg("Missing Pyth or Bank account")] // 6005 + #[msg("Missing Oracle, Bank, LST mint, or Sol Pool")] // 6005 MissingPythOrBankAccount, #[msg("Missing Pyth account")] // 6006 MissingPythAccount, @@ -86,18 +86,24 @@ pub enum MarginfiError { IllegalFlashloan, #[msg("Illegal flag")] // 6041 IllegalFlag, - #[msg("Illegal balance state")] // 6043 + #[msg("Illegal balance state")] // 6042 IllegalBalanceState, - #[msg("Illegal account authority transfer")] // 6044 + #[msg("Illegal account authority transfer")] // 6043 IllegalAccountAuthorityTransfer, - #[msg("Unauthorized")] // 6045 + #[msg("Unauthorized")] // 6044 Unauthorized, - #[msg("Invalid account authority")] // 6046 + #[msg("Invalid account authority")] // 6045 IllegalAction, - #[msg("Token22 Banks require mint account as first remaining account")] // 6047 + #[msg("Token22 Banks require mint account as first remaining account")] // 6046 T22MintRequired, - #[msg("Invalid ATA for global fee account")] // 6048 + #[msg("Invalid ATA for global fee account")] // 6047 InvalidFeeAta, + #[msg("Use add pool permissionless instead")] // 6048 + AddedStakedPoolManually, + #[msg("Staked SOL accounts can only deposit staked assets and borrow SOL")] // 6049 + AssetTagMismatch, + #[msg("Stake pool validation failed: check the stake pool, mint, or sol pool")] // 6050 + StakePoolValidationFailed, } impl From for ProgramError { diff --git a/programs/marginfi/src/instructions/marginfi_account/borrow.rs b/programs/marginfi/src/instructions/marginfi_account/borrow.rs index 3e20ffc2c..82a44615a 100644 --- a/programs/marginfi/src/instructions/marginfi_account/borrow.rs +++ b/programs/marginfi/src/instructions/marginfi_account/borrow.rs @@ -8,7 +8,7 @@ use crate::{ marginfi_account::{BankAccountWrapper, MarginfiAccount, RiskEngine, DISABLED_FLAG}, marginfi_group::{Bank, BankVaultType}, }, - utils, + utils::{self, validate_asset_tags}, }; use anchor_lang::prelude::*; use anchor_spl::token_interface::{TokenAccount, TokenInterface}; @@ -63,6 +63,8 @@ pub fn lending_account_borrow<'info>( { let mut bank = bank_loader.load_mut()?; + validate_asset_tags(&bank, &marginfi_account)?; + let liquidity_vault_authority_bump = bank.liquidity_vault_authority_bump; let origination_fee_rate: I80F48 = bank .config diff --git a/programs/marginfi/src/instructions/marginfi_account/deposit.rs b/programs/marginfi/src/instructions/marginfi_account/deposit.rs index 1f8cca936..6285eb623 100644 --- a/programs/marginfi/src/instructions/marginfi_account/deposit.rs +++ b/programs/marginfi/src/instructions/marginfi_account/deposit.rs @@ -7,7 +7,7 @@ use crate::{ marginfi_account::{BankAccountWrapper, MarginfiAccount, DISABLED_FLAG}, marginfi_group::Bank, }, - utils, + utils::{self, validate_asset_tags}, }; use anchor_lang::prelude::*; use anchor_spl::token_interface::TokenInterface; @@ -45,6 +45,8 @@ pub fn lending_account_deposit<'info>( let mut bank = bank_loader.load_mut()?; let mut marginfi_account = marginfi_account_loader.load_mut()?; + validate_asset_tags(&bank, &marginfi_account)?; + check!( !marginfi_account.get_flag(DISABLED_FLAG), MarginfiError::AccountDisabled diff --git a/programs/marginfi/src/instructions/marginfi_account/liquidate.rs b/programs/marginfi/src/instructions/marginfi_account/liquidate.rs index aeed8d5d5..8355a529c 100644 --- a/programs/marginfi/src/instructions/marginfi_account/liquidate.rs +++ b/programs/marginfi/src/instructions/marginfi_account/liquidate.rs @@ -5,6 +5,7 @@ use crate::events::{AccountEventHeader, LendingAccountLiquidateEvent, Liquidatio use crate::state::marginfi_account::{calc_amount, calc_value, RiskEngine}; use crate::state::marginfi_group::{Bank, BankVaultType}; use crate::state::price::{OraclePriceFeedAdapter, OraclePriceType, PriceAdapter, PriceBias}; +use crate::utils::{validate_asset_tags, validate_bank_asset_tags}; use crate::{ bank_signer, constants::{LIQUIDITY_VAULT_AUTHORITY_SEED, LIQUIDITY_VAULT_SEED}, @@ -91,6 +92,25 @@ pub fn lending_account_liquidate<'info>( "Asset and liability bank cannot be the same" ); + // Liquidators must repay debts in allowed asset types. A SOL debt can be repaid in any asset. A + // Staked Collateral debt must be repaid in SOL or staked collateral. A Default asset debt can + // be repaid in any Default asset or SOL. + { + let asset_bank = ctx.accounts.asset_bank.load()?; + let liab_bank = ctx.accounts.liab_bank.load()?; + validate_bank_asset_tags(&asset_bank, &liab_bank)?; + + // Sanity check user/liquidator accounts will not contain positions with mismatching tags + // after liquidation. + // * Note: user will be repaid in liab_bank + let user_acc = ctx.accounts.liquidatee_marginfi_account.load()?; + validate_asset_tags(&liab_bank, &user_acc)?; + // * Note: Liquidator repays liab bank, and is paid in asset_bank. + let liquidator_acc = ctx.accounts.liquidator_marginfi_account.load()?; + validate_asset_tags(&liab_bank, &liquidator_acc)?; + validate_asset_tags(&asset_bank, &liquidator_acc)?; + } // release immutable borrow of asset_bank/liab_bank + liquidatee/liquidator user accounts + let LendingAccountLiquidate { liquidator_marginfi_account: liquidator_marginfi_account_loader, liquidatee_marginfi_account: liquidatee_marginfi_account_loader, diff --git a/programs/marginfi/src/instructions/marginfi_group/add_pool.rs b/programs/marginfi/src/instructions/marginfi_group/add_pool.rs index ebd1f49bd..31e50c71a 100644 --- a/programs/marginfi/src/instructions/marginfi_group/add_pool.rs +++ b/programs/marginfi/src/instructions/marginfi_group/add_pool.rs @@ -1,14 +1,16 @@ use crate::{ + check, constants::{ - FEE_STATE_SEED, FEE_VAULT_AUTHORITY_SEED, FEE_VAULT_SEED, INSURANCE_VAULT_AUTHORITY_SEED, - INSURANCE_VAULT_SEED, LIQUIDITY_VAULT_AUTHORITY_SEED, LIQUIDITY_VAULT_SEED, + ASSET_TAG_STAKED, FEE_STATE_SEED, FEE_VAULT_AUTHORITY_SEED, FEE_VAULT_SEED, + INSURANCE_VAULT_AUTHORITY_SEED, INSURANCE_VAULT_SEED, LIQUIDITY_VAULT_AUTHORITY_SEED, + LIQUIDITY_VAULT_SEED, }, events::{GroupEventHeader, LendingPoolBankCreateEvent}, state::{ fee_state::FeeState, marginfi_group::{Bank, BankConfig, BankConfigCompact, MarginfiGroup}, }, - MarginfiResult, + MarginfiError, MarginfiResult, }; use anchor_lang::prelude::*; use anchor_spl::token_interface::*; @@ -42,6 +44,10 @@ pub fn lending_pool_add_bank( } = ctx.accounts; let mut bank = bank_loader.load_init()?; + check!( + bank_config.asset_tag != ASSET_TAG_STAKED, + MarginfiError::AddedStakedPoolManually + ); let liquidity_vault_bump = ctx.bumps.liquidity_vault; let liquidity_vault_authority_bump: u8 = ctx.bumps.liquidity_vault_authority; @@ -68,7 +74,8 @@ pub fn lending_pool_add_bank( ); bank.config.validate()?; - bank.config.validate_oracle_setup(ctx.remaining_accounts)?; + bank.config + .validate_oracle_setup(ctx.remaining_accounts, None, None, None)?; emit!(LendingPoolBankCreateEvent { header: GroupEventHeader { diff --git a/programs/marginfi/src/instructions/marginfi_group/add_pool_permissionless.rs b/programs/marginfi/src/instructions/marginfi_group/add_pool_permissionless.rs new file mode 100644 index 000000000..51c1b9cce --- /dev/null +++ b/programs/marginfi/src/instructions/marginfi_group/add_pool_permissionless.rs @@ -0,0 +1,244 @@ +// Adds a ASSET_TAG_STAKED type bank to a group with sane defaults. Used by validators to add their +// stake pool to a group so users can borrow SOL against it +use crate::{ + check, + constants::{ + ASSET_TAG_STAKED, FEE_VAULT_AUTHORITY_SEED, FEE_VAULT_SEED, INSURANCE_VAULT_AUTHORITY_SEED, + INSURANCE_VAULT_SEED, LIQUIDITY_VAULT_AUTHORITY_SEED, LIQUIDITY_VAULT_SEED, + SPL_SINGLE_POOL_ID, + }, + events::{GroupEventHeader, LendingPoolBankCreateEvent}, + state::{ + marginfi_group::{ + Bank, BankConfigCompact, BankOperationalState, InterestRateConfig, MarginfiGroup, + }, + price::OracleSetup, + staked_settings::StakedSettings, + }, + MarginfiError, MarginfiResult, +}; +use anchor_lang::prelude::*; +use anchor_spl::token_interface::*; +use fixed_macro::types::I80F48; + +pub fn lending_pool_add_bank_permissionless( + ctx: Context, + _bank_seed: u64, +) -> MarginfiResult { + let LendingPoolAddBankPermissionless { + bank_mint, + liquidity_vault, + insurance_vault, + fee_vault, + bank: bank_loader, + stake_pool, + sol_pool, + .. + } = ctx.accounts; + + let mut bank = bank_loader.load_init()?; + let settings = ctx.accounts.staked_settings.load()?; + let group = ctx.accounts.marginfi_group.load()?; + + let liquidity_vault_bump = ctx.bumps.liquidity_vault; + let liquidity_vault_authority_bump = ctx.bumps.liquidity_vault_authority; + let insurance_vault_bump = ctx.bumps.insurance_vault; + let insurance_vault_authority_bump = ctx.bumps.insurance_vault_authority; + let fee_vault_bump = ctx.bumps.fee_vault; + let fee_vault_authority_bump = ctx.bumps.fee_vault_authority; + + // These are placeholder values: staked collateral positions do not support borrowing and likely + // never will, thus they will earn no interest. + + // Note: Some placeholder values are non-zero to handle downstream validation checks. + let default_ir_config = InterestRateConfig { + optimal_utilization_rate: I80F48!(0.4).into(), + plateau_interest_rate: I80F48!(0.4).into(), + protocol_fixed_fee_apr: I80F48!(0.01).into(), + max_interest_rate: I80F48!(3).into(), + insurance_ir_fee: I80F48!(0.1).into(), + ..Default::default() + }; + + let default_config: BankConfigCompact = BankConfigCompact { + asset_weight_init: settings.asset_weight_init, + asset_weight_maint: settings.asset_weight_maint, + liability_weight_init: I80F48!(1.5).into(), // placeholder + liability_weight_maint: I80F48!(1.25).into(), // placeholder + deposit_limit: settings.deposit_limit, + interest_rate_config: default_ir_config.into(), // placeholder + operational_state: BankOperationalState::Operational, + oracle_setup: OracleSetup::StakedWithPythPush, + oracle_key: settings.oracle, // becomes config.oracle_keys[0] + borrow_limit: 0, + risk_tier: settings.risk_tier, + asset_tag: ASSET_TAG_STAKED, + _pad0: [0; 6], + total_asset_value_init_limit: settings.total_asset_value_init_limit, + oracle_max_age: settings.oracle_max_age, + }; + + *bank = Bank::new( + ctx.accounts.marginfi_group.key(), + default_config.into(), + bank_mint.key(), + bank_mint.decimals, + liquidity_vault.key(), + insurance_vault.key(), + fee_vault.key(), + Clock::get().unwrap().unix_timestamp, + liquidity_vault_bump, + liquidity_vault_authority_bump, + insurance_vault_bump, + insurance_vault_authority_bump, + fee_vault_bump, + fee_vault_authority_bump, + ); + + bank.config.validate()?; + + check!( + stake_pool.owner == &SPL_SINGLE_POOL_ID, + MarginfiError::StakePoolValidationFailed + ); + let lst_mint = bank_mint.key(); + let stake_pool = stake_pool.key(); + let sol_pool = sol_pool.key(); + // The mint (for supply) and stake pool (for sol balance) are recorded for price calculation + bank.config.oracle_keys[1] = lst_mint; + bank.config.oracle_keys[2] = sol_pool; + bank.config.validate_oracle_setup( + ctx.remaining_accounts, + Some(lst_mint), + Some(stake_pool), + Some(sol_pool), + )?; + + emit!(LendingPoolBankCreateEvent { + header: GroupEventHeader { + marginfi_group: ctx.accounts.marginfi_group.key(), + signer: Some(group.admin) + }, + bank: bank_loader.key(), + mint: bank_mint.key(), + }); + + Ok(()) +} + +#[derive(Accounts)] +#[instruction(bank_seed: u64)] +pub struct LendingPoolAddBankPermissionless<'info> { + pub marginfi_group: AccountLoader<'info, MarginfiGroup>, + + #[account( + has_one = marginfi_group + )] + pub staked_settings: AccountLoader<'info, StakedSettings>, + + #[account(mut)] + pub fee_payer: Signer<'info>, + + /// Mint of the spl-single-pool LST (a PDA derived from `stake_pool`) + /// + /// CHECK: passing a mint here that is not actually a staked collateral LST is not possible + /// because the sol_pool and stake_pool will not derive to a valid PDA which is also owned by + /// the staking program and spl-single-pool program. + pub bank_mint: Box>, + + /// CHECK: Validated using `stake_pool` + pub sol_pool: AccountInfo<'info>, + + /// CHECK: We validate this is correct backwards, by deriving the PDA of the `bank_mint` using + /// this key. + /// + /// If derives the same `bank_mint`, then this must be the correct stake pool for that mint, and + /// we can subsequently use it to validate the `sol_pool` + pub stake_pool: AccountInfo<'info>, + + #[account( + init, + space = 8 + std::mem::size_of::(), + payer = fee_payer, + seeds = [ + marginfi_group.key().as_ref(), + bank_mint.key().as_ref(), + &bank_seed.to_le_bytes(), + ], + bump, + )] + pub bank: AccountLoader<'info, Bank>, + + /// CHECK: ⋐ ͡⋄ ω ͡⋄ ⋑ + #[account( + seeds = [ + LIQUIDITY_VAULT_AUTHORITY_SEED.as_bytes(), + bank.key().as_ref(), + ], + bump + )] + pub liquidity_vault_authority: AccountInfo<'info>, + + #[account( + init, + payer = fee_payer, + token::mint = bank_mint, + token::authority = liquidity_vault_authority, + seeds = [ + LIQUIDITY_VAULT_SEED.as_bytes(), + bank.key().as_ref(), + ], + bump, + )] + pub liquidity_vault: Box>, + + /// CHECK: ⋐ ͡⋄ ω ͡⋄ ⋑ + #[account( + seeds = [ + INSURANCE_VAULT_AUTHORITY_SEED.as_bytes(), + bank.key().as_ref(), + ], + bump + )] + pub insurance_vault_authority: AccountInfo<'info>, + + #[account( + init, + payer = fee_payer, + token::mint = bank_mint, + token::authority = insurance_vault_authority, + seeds = [ + INSURANCE_VAULT_SEED.as_bytes(), + bank.key().as_ref(), + ], + bump, + )] + pub insurance_vault: Box>, + + /// CHECK: ⋐ ͡⋄ ω ͡⋄ ⋑ + #[account( + seeds = [ + FEE_VAULT_AUTHORITY_SEED.as_bytes(), + bank.key().as_ref(), + ], + bump + )] + pub fee_vault_authority: AccountInfo<'info>, + + #[account( + init, + payer = fee_payer, + token::mint = bank_mint, + token::authority = fee_vault_authority, + seeds = [ + FEE_VAULT_SEED.as_bytes(), + bank.key().as_ref(), + ], + bump, + )] + pub fee_vault: Box>, + + pub rent: Sysvar<'info, Rent>, + pub token_program: Interface<'info, TokenInterface>, + pub system_program: Program<'info, System>, +} diff --git a/programs/marginfi/src/instructions/marginfi_group/add_pool_with_seed.rs b/programs/marginfi/src/instructions/marginfi_group/add_pool_with_seed.rs index a0bcee795..3cb3d8f6a 100644 --- a/programs/marginfi/src/instructions/marginfi_group/add_pool_with_seed.rs +++ b/programs/marginfi/src/instructions/marginfi_group/add_pool_with_seed.rs @@ -1,14 +1,16 @@ use crate::{ + check, constants::{ - FEE_STATE_SEED, FEE_VAULT_AUTHORITY_SEED, FEE_VAULT_SEED, INSURANCE_VAULT_AUTHORITY_SEED, - INSURANCE_VAULT_SEED, LIQUIDITY_VAULT_AUTHORITY_SEED, LIQUIDITY_VAULT_SEED, + ASSET_TAG_STAKED, FEE_STATE_SEED, FEE_VAULT_AUTHORITY_SEED, FEE_VAULT_SEED, + INSURANCE_VAULT_AUTHORITY_SEED, INSURANCE_VAULT_SEED, LIQUIDITY_VAULT_AUTHORITY_SEED, + LIQUIDITY_VAULT_SEED, }, events::{GroupEventHeader, LendingPoolBankCreateEvent}, state::{ fee_state::FeeState, marginfi_group::{Bank, BankConfig, BankConfigCompact, MarginfiGroup}, }, - MarginfiResult, + MarginfiError, MarginfiResult, }; use anchor_lang::prelude::*; use anchor_spl::token_interface::*; @@ -42,6 +44,10 @@ pub fn lending_pool_add_bank_with_seed( } = ctx.accounts; let mut bank = bank_loader.load_init()?; + check!( + bank_config.asset_tag != ASSET_TAG_STAKED, + MarginfiError::AddedStakedPoolManually + ); let liquidity_vault_bump = ctx.bumps.liquidity_vault; let liquidity_vault_authority_bump = ctx.bumps.liquidity_vault_authority; @@ -68,7 +74,8 @@ pub fn lending_pool_add_bank_with_seed( ); bank.config.validate()?; - bank.config.validate_oracle_setup(ctx.remaining_accounts)?; + bank.config + .validate_oracle_setup(ctx.remaining_accounts, None, None, None)?; emit!(LendingPoolBankCreateEvent { header: GroupEventHeader { diff --git a/programs/marginfi/src/instructions/marginfi_group/configure.rs b/programs/marginfi/src/instructions/marginfi_group/configure.rs index e4f6e2b94..97099f1df 100644 --- a/programs/marginfi/src/instructions/marginfi_group/configure.rs +++ b/programs/marginfi/src/instructions/marginfi_group/configure.rs @@ -35,6 +35,7 @@ pub struct MarginfiGroupConfigure<'info> { pub marginfi_group: AccountLoader<'info, MarginfiGroup>, #[account( + // TODO moving to `marginfi_group` as `has_one` adds a mystery signer? address = marginfi_group.load()?.admin, )] pub admin: Signer<'info>, diff --git a/programs/marginfi/src/instructions/marginfi_group/configure_bank.rs b/programs/marginfi/src/instructions/marginfi_group/configure_bank.rs index 600241e5e..dd6ad5492 100644 --- a/programs/marginfi/src/instructions/marginfi_group/configure_bank.rs +++ b/programs/marginfi/src/instructions/marginfi_group/configure_bank.rs @@ -38,7 +38,8 @@ pub fn lending_pool_configure_bank( bank.configure(&bank_config)?; if bank_config.oracle.is_some() { - bank.config.validate_oracle_setup(ctx.remaining_accounts)?; + bank.config + .validate_oracle_setup(ctx.remaining_accounts, None, None, None)?; } emit!(LendingPoolBankConfigureEvent { @@ -157,6 +158,8 @@ pub struct LendingPoolSetupEmissions<'info> { )] pub emissions_token_account: Box>, + /// NOTE: This is a TokenAccount, spl transfer will validate it. + /// /// CHECK: Account provided only for funding rewards #[account(mut)] pub emissions_funding_account: AccountInfo<'info>, diff --git a/programs/marginfi/src/instructions/marginfi_group/edit_stake_settings.rs b/programs/marginfi/src/instructions/marginfi_group/edit_stake_settings.rs new file mode 100644 index 000000000..c4a6f97f1 --- /dev/null +++ b/programs/marginfi/src/instructions/marginfi_group/edit_stake_settings.rs @@ -0,0 +1,69 @@ +// Used by the group admin to edit the default features of staked collateral banks. Remember to +// propagate afterwards. +use crate::state::marginfi_group::{RiskTier, WrappedI80F48}; +use crate::state::staked_settings::StakedSettings; +use crate::{set_if_some, MarginfiGroup}; +use anchor_lang::prelude::*; + +pub fn edit_staked_settings( + ctx: Context, + settings: StakedSettingsEditConfig, +) -> Result<()> { + // let group = ctx.accounts.marginfi_group.load()?; + let mut staked_settings = ctx.accounts.staked_settings.load_mut()?; + // require_keys_eq!(group.admin, ctx.accounts.admin.key()); + + set_if_some!(staked_settings.oracle, settings.oracle); + set_if_some!( + staked_settings.asset_weight_init, + settings.asset_weight_init + ); + set_if_some!( + staked_settings.asset_weight_maint, + settings.asset_weight_maint + ); + set_if_some!(staked_settings.deposit_limit, settings.deposit_limit); + set_if_some!( + staked_settings.total_asset_value_init_limit, + settings.total_asset_value_init_limit + ); + set_if_some!(staked_settings.oracle_max_age, settings.oracle_max_age); + set_if_some!(staked_settings.risk_tier, settings.risk_tier); + + staked_settings.validate()?; + + Ok(()) +} + +#[derive(Accounts)] +pub struct EditStakedSettings<'info> { + #[account( + has_one = admin + )] + pub marginfi_group: AccountLoader<'info, MarginfiGroup>, + + pub admin: Signer<'info>, + + #[account( + mut, + has_one = marginfi_group + )] + pub staked_settings: AccountLoader<'info, StakedSettings>, +} + +#[derive(AnchorDeserialize, AnchorSerialize, Default)] +pub struct StakedSettingsEditConfig { + pub oracle: Option, + + pub asset_weight_init: Option, + pub asset_weight_maint: Option, + + pub deposit_limit: Option, + pub total_asset_value_init_limit: Option, + + pub oracle_max_age: Option, + /// WARN: You almost certainly want "Collateral", using Isolated risk tier makes the asset + /// worthless as collateral, making all outstanding accounts eligible to be liquidated, and is + /// generally useful only when creating a staked collateral pool for rewards purposes only. + pub risk_tier: Option, +} diff --git a/programs/marginfi/src/instructions/marginfi_group/init_staked_settings.rs b/programs/marginfi/src/instructions/marginfi_group/init_staked_settings.rs new file mode 100644 index 000000000..35966ccb5 --- /dev/null +++ b/programs/marginfi/src/instructions/marginfi_group/init_staked_settings.rs @@ -0,0 +1,75 @@ +// Used by the group admin to enable staked collateral banks and configure their default features +use crate::constants::STAKED_SETTINGS_SEED; +use crate::state::marginfi_group::{RiskTier, WrappedI80F48}; +use crate::state::staked_settings::StakedSettings; +use crate::MarginfiGroup; +use anchor_lang::prelude::*; + +pub fn initialize_staked_settings( + ctx: Context, + settings: StakedSettingsConfig, +) -> Result<()> { + let mut staked_settings = ctx.accounts.staked_settings.load_init()?; + + *staked_settings = StakedSettings::new( + ctx.accounts.staked_settings.key(), + ctx.accounts.marginfi_group.key(), + settings.oracle, + settings.asset_weight_init, + settings.asset_weight_maint, + settings.deposit_limit, + settings.total_asset_value_init_limit, + settings.oracle_max_age, + settings.risk_tier, + ); + + staked_settings.validate()?; + + Ok(()) +} + +#[derive(Accounts)] +pub struct InitStakedSettings<'info> { + #[account( + has_one = admin + )] + pub marginfi_group: AccountLoader<'info, MarginfiGroup>, + + pub admin: Signer<'info>, + + /// Pays the init fee + #[account(mut)] + pub fee_payer: Signer<'info>, + + #[account( + init, + seeds = [ + STAKED_SETTINGS_SEED.as_bytes(), + marginfi_group.key().as_ref() + ], + bump, + payer = fee_payer, + space = 8 + StakedSettings::LEN, + )] + pub staked_settings: AccountLoader<'info, StakedSettings>, + + pub rent: Sysvar<'info, Rent>, + pub system_program: Program<'info, System>, +} + +#[derive(AnchorDeserialize, AnchorSerialize, Default)] +pub struct StakedSettingsConfig { + pub oracle: Pubkey, + + pub asset_weight_init: WrappedI80F48, + pub asset_weight_maint: WrappedI80F48, + + pub deposit_limit: u64, + pub total_asset_value_init_limit: u64, + + pub oracle_max_age: u16, + /// WARN: You almost certainly want "Collateral", using Isolated risk tier makes the asset + /// worthless as collateral, and is generally useful only when creating a staked collateral pool + /// for rewards purposes only. + pub risk_tier: RiskTier, +} diff --git a/programs/marginfi/src/instructions/marginfi_group/mod.rs b/programs/marginfi/src/instructions/marginfi_group/mod.rs index 47ae9d15e..88a9f2d23 100644 --- a/programs/marginfi/src/instructions/marginfi_group/mod.rs +++ b/programs/marginfi/src/instructions/marginfi_group/mod.rs @@ -1,25 +1,33 @@ mod accrue_bank_interest; mod add_pool; +mod add_pool_permissionless; mod add_pool_with_seed; mod collect_bank_fees; mod config_group_fee; mod configure; mod configure_bank; mod edit_global_fee; +mod edit_stake_settings; mod handle_bankruptcy; mod init_global_fee_state; +mod init_staked_settings; mod initialize; mod propagate_fee_state; +mod propagate_staked_settings; pub use accrue_bank_interest::*; pub use add_pool::*; +pub use add_pool_permissionless::*; pub use add_pool_with_seed::*; pub use collect_bank_fees::*; pub use config_group_fee::*; pub use configure::*; pub use configure_bank::*; pub use edit_global_fee::*; +pub use edit_stake_settings::*; pub use handle_bankruptcy::*; pub use init_global_fee_state::*; +pub use init_staked_settings::*; pub use initialize::*; pub use propagate_fee_state::*; +pub use propagate_staked_settings::*; diff --git a/programs/marginfi/src/instructions/marginfi_group/propagate_staked_settings.rs b/programs/marginfi/src/instructions/marginfi_group/propagate_staked_settings.rs new file mode 100644 index 000000000..d9515bef1 --- /dev/null +++ b/programs/marginfi/src/instructions/marginfi_group/propagate_staked_settings.rs @@ -0,0 +1,50 @@ +use crate::constants::ASSET_TAG_STAKED; +// Permissionless ix to propagate a group's staked collateral settings to any bank in that group +use crate::state::marginfi_group::Bank; +use crate::state::staked_settings::StakedSettings; +use crate::MarginfiGroup; +use anchor_lang::prelude::*; + +pub fn propagate_staked_settings(ctx: Context) -> Result<()> { + let settings = ctx.accounts.staked_settings.load()?; + let mut bank = ctx.accounts.bank.load_mut()?; + + // Only validate the oracle if it has changed + if settings.oracle != bank.config.oracle_keys[0] { + bank.config + .validate_oracle_setup(ctx.remaining_accounts, None, None, None)?; + } + + bank.config.oracle_keys[0] = settings.oracle; + bank.config.asset_weight_init = settings.asset_weight_init; + bank.config.asset_weight_maint = settings.asset_weight_maint; + bank.config.deposit_limit = settings.deposit_limit; + bank.config.total_asset_value_init_limit = settings.total_asset_value_init_limit; + bank.config.oracle_max_age = settings.oracle_max_age; + bank.config.risk_tier = settings.risk_tier; + + bank.config.validate()?; + // ...Possibly emit event. + + Ok(()) +} + +#[derive(Accounts)] +pub struct PropagateStakedSettings<'info> { + pub marginfi_group: AccountLoader<'info, MarginfiGroup>, + + #[account( + has_one = marginfi_group + )] + pub staked_settings: AccountLoader<'info, StakedSettings>, + + #[account( + mut, + constraint = { + let bank = bank.load()?; + bank.group == marginfi_group.key() && + bank.config.asset_tag == ASSET_TAG_STAKED + } + )] + pub bank: AccountLoader<'info, Bank>, +} diff --git a/programs/marginfi/src/lib.rs b/programs/marginfi/src/lib.rs index 5f3a76dfd..7ba7c8023 100644 --- a/programs/marginfi/src/lib.rs +++ b/programs/marginfi/src/lib.rs @@ -58,6 +58,13 @@ pub mod marginfi { marginfi_group::lending_pool_add_bank_with_seed(ctx, bank_config.into(), bank_seed) } + pub fn lending_pool_add_bank_permissionless( + ctx: Context, + bank_seed: u64, + ) -> MarginfiResult { + marginfi_group::lending_pool_add_bank_permissionless(ctx, bank_seed) + } + pub fn lending_pool_configure_bank( ctx: Context, bank_config_opt: BankConfigOpt, @@ -264,6 +271,28 @@ pub mod marginfi { pub fn config_group_fee(ctx: Context, flag: u64) -> MarginfiResult { marginfi_group::config_group_fee(ctx, flag) } + + /// (group admin only) Init the Staked Settings account, which is used to create staked + /// collateral banks, and must run before any staked collateral bank can be created with + /// `add_pool_permissionless`. Running this ix effectively opts the group into the staked + /// collateral feature. + pub fn init_staked_settings( + ctx: Context, + settings: StakedSettingsConfig, + ) -> MarginfiResult { + marginfi_group::initialize_staked_settings(ctx, settings) + } + + pub fn edit_staked_settings( + ctx: Context, + settings: StakedSettingsEditConfig, + ) -> MarginfiResult { + marginfi_group::edit_staked_settings(ctx, settings) + } + + pub fn propagate_staked_settings(ctx: Context) -> MarginfiResult { + marginfi_group::propagate_staked_settings(ctx) + } } #[cfg(not(feature = "no-entrypoint"))] diff --git a/programs/marginfi/src/macros.rs b/programs/marginfi/src/macros.rs index 593dfa2af..e942eaa6b 100644 --- a/programs/marginfi/src/macros.rs +++ b/programs/marginfi/src/macros.rs @@ -107,3 +107,14 @@ macro_rules! assert_struct_align { static_assertions::const_assert_eq!(std::mem::align_of::<$struct>(), $align); }; } + +#[macro_export] +macro_rules! live { + () => { + cfg!(any( + feature = "mainnet-beta", + feature = "staging", + feature = "devnet" + )) + }; +} diff --git a/programs/marginfi/src/state/marginfi_account.rs b/programs/marginfi/src/state/marginfi_account.rs index ea3944d71..460a69c74 100644 --- a/programs/marginfi/src/state/marginfi_account.rs +++ b/programs/marginfi/src/state/marginfi_account.rs @@ -5,9 +5,9 @@ use super::{ use crate::{ assert_struct_align, assert_struct_size, check, constants::{ - BANKRUPT_THRESHOLD, EMISSIONS_FLAG_BORROW_ACTIVE, EMISSIONS_FLAG_LENDING_ACTIVE, - EMPTY_BALANCE_THRESHOLD, EXP_10_I80F48, MIN_EMISSIONS_START_TIME, SECONDS_PER_YEAR, - ZERO_AMOUNT_THRESHOLD, + ASSET_TAG_DEFAULT, ASSET_TAG_STAKED, BANKRUPT_THRESHOLD, EMISSIONS_FLAG_BORROW_ACTIVE, + EMISSIONS_FLAG_LENDING_ACTIVE, EMPTY_BALANCE_THRESHOLD, EXP_10_I80F48, + MIN_EMISSIONS_START_TIME, SECONDS_PER_YEAR, ZERO_AMOUNT_THRESHOLD, }, debug, math_error, prelude::{MarginfiError, MarginfiResult}, @@ -41,6 +41,9 @@ pub struct MarginfiAccount { /// Flags: /// - DISABLED_FLAG = 1 << 0 = 1 - This flag indicates that the account is disabled, /// and no further actions can be taken on it. + /// - IN_FLASHLOAN_FLAG (1 << 1) + /// - FLASHLOAN_ENABLED_FLAG (1 << 2) + /// - TRANSFER_AUTHORITY_ALLOWED_FLAG (1 << 3) pub account_flags: u64, // 8 pub _padding: [u64; 63], // 504 } @@ -172,41 +175,58 @@ impl<'info> BankAccountWithPriceFeed<'_, 'info> { .filter(|balance| balance.active) .collect::>(); - debug!("Expecting {} remaining accounts", active_balances.len() * 2); + let expected_accounts = active_balances + .iter() + .map(|balance| { + if balance.bank_asset_tag == ASSET_TAG_STAKED { + 4 + } else { + 2 + } + }) + .sum::(); + + debug!("Expecting {} remaining accounts", expected_accounts); debug!("Got {} remaining accounts", remaining_ais.len()); check!( - active_balances.len() * 2 <= remaining_ais.len(), + expected_accounts <= remaining_ais.len(), MarginfiError::MissingPythOrBankAccount ); let clock = Clock::get()?; + let mut account_index = 0; active_balances .iter() - .enumerate() - .map(|(i, balance)| { - let bank_index = i * 2; - let oracle_ai_idx = bank_index + 1; - - let bank_ai = remaining_ais.get(bank_index).unwrap(); + .map(|balance| { + // Determine number of accounts to process for this balance + let num_accounts = if balance.bank_asset_tag == ASSET_TAG_STAKED { + 4 + } else { + 2 + }; + // Get the bank + let bank_ai = remaining_ais.get(account_index).unwrap(); check!( balance.bank_pk.eq(bank_ai.key), MarginfiError::InvalidBankAccount ); + let bank_al = AccountLoader::::try_from(bank_ai)?; + let bank = bank_al.load()?; - let price_adapter = { - let oracle_ais = &remaining_ais[oracle_ai_idx..oracle_ai_idx + 1]; - let bank_al = AccountLoader::::try_from(bank_ai)?; - let bank = bank_al.load()?; + // Get the oracle, and the LST mint and sol pool if applicable (staked only) + let oracle_ai_idx = account_index + 1; + let oracle_ais = &remaining_ais[oracle_ai_idx..oracle_ai_idx + num_accounts - 1]; - Box::new(OraclePriceFeedAdapter::try_from_bank_config( - &bank.config, - oracle_ais, - &clock, - )) - }; + let price_adapter = Box::new(OraclePriceFeedAdapter::try_from_bank_config( + &bank.config, + oracle_ais, + &clock, + )); + + account_index += num_accounts; Ok(BankAccountWithPriceFeed { bank: bank_ai.clone(), @@ -320,6 +340,8 @@ impl<'info> BankAccountWithPriceFeed<'_, 'info> { Some(PriceBias::High), )?; + // If `ASSET_TAG_STAKED` assets can ever be borrowed, accomodate for that here... + calc_value( bank.get_liability_amount(self.balance.liability_shares.into())?, higher_price, @@ -750,7 +772,10 @@ assert_struct_align!(Balance, 8); pub struct Balance { pub active: bool, pub bank_pk: Pubkey, - pub _pad0: [u8; 7], + /// Inherited from the bank when the position is first created and CANNOT BE CHANGED after that. + /// Note that all balances created before the addition of this feature use `ASSET_TAG_DEFAULT` + pub bank_asset_tag: u8, + pub _pad0: [u8; 6], pub asset_shares: WrappedI80F48, pub liability_shares: WrappedI80F48, pub emissions_outstanding: WrappedI80F48, @@ -822,7 +847,8 @@ impl Balance { Balance { active: false, bank_pk: Pubkey::default(), - _pad0: [0; 7], + bank_asset_tag: ASSET_TAG_DEFAULT, + _pad0: [0; 6], asset_shares: WrappedI80F48::from(I80F48::ZERO), liability_shares: WrappedI80F48::from(I80F48::ZERO), emissions_outstanding: WrappedI80F48::from(I80F48::ZERO), @@ -882,7 +908,8 @@ impl<'a> BankAccountWrapper<'a> { lending_account.balances[empty_index] = Balance { active: true, bank_pk: *bank_pk, - _pad0: [0; 7], + bank_asset_tag: bank.config.asset_tag, + _pad0: [0; 6], asset_shares: I80F48::ZERO.into(), liability_shares: I80F48::ZERO.into(), emissions_outstanding: I80F48::ZERO.into(), @@ -1412,7 +1439,8 @@ mod test { balances: [Balance { active: true, bank_pk: bank_pk.into(), - _pad0: [0; 7], + bank_asset_tag: ASSET_TAG_DEFAULT, + _pad0: [0; 6], asset_shares: WrappedI80F48::default(), liability_shares: WrappedI80F48::default(), emissions_outstanding: WrappedI80F48::default(), diff --git a/programs/marginfi/src/state/marginfi_group.rs b/programs/marginfi/src/state/marginfi_group.rs index 146a7f39e..579766e06 100644 --- a/programs/marginfi/src/state/marginfi_group.rs +++ b/programs/marginfi/src/state/marginfi_group.rs @@ -21,6 +21,7 @@ use crate::{ }; use crate::{ borsh::{BorshDeserialize, BorshSerialize}, + constants::ASSET_TAG_DEFAULT, constants::FREEZE_SETTINGS, }; use anchor_lang::prelude::borsh; @@ -544,6 +545,7 @@ impl Bank { emissions_rate: 0, emissions_remaining: I80F48::ZERO.into(), emissions_mint: Pubkey::default(), + collected_program_fees_outstanding: I80F48::ZERO.into(), ..Default::default() } } @@ -702,6 +704,8 @@ impl Bank { set_if_some!(self.config.risk_tier, config.risk_tier); + set_if_some!(self.config.asset_tag, config.asset_tag); + set_if_some!( self.config.total_asset_value_init_limit, config.total_asset_value_init_limit @@ -1168,18 +1172,22 @@ impl Display for BankOperationalState { } #[repr(u8)] -#[derive(Copy, Clone, Debug, AnchorSerialize, AnchorDeserialize, PartialEq, Eq)] +#[derive(Copy, Clone, Debug, AnchorSerialize, AnchorDeserialize, PartialEq, Eq, Default)] pub enum RiskTier { - Collateral, + #[default] + Collateral = 0, /// ## Isolated Risk /// Assets in this trance can be borrowed only in isolation. /// They can't be borrowed together with other assets. /// /// For example, if users has USDC, and wants to borrow XYZ which is isolated, /// they can't borrow XYZ together with SOL, only XYZ alone. - Isolated, + Isolated = 1, } +unsafe impl Zeroable for RiskTier {} +unsafe impl Pod for RiskTier {} + #[repr(C)] #[cfg_attr( any(feature = "test", feature = "client"), @@ -1206,7 +1214,17 @@ pub struct BankConfigCompact { pub risk_tier: RiskTier, - pub _pad0: [u8; 7], + /// Determines what kinds of assets users of this bank can interact with. + /// Options: + /// * ASSET_TAG_DEFAULT (0) - A regular asset that can be comingled with any other regular asset + /// or with `ASSET_TAG_SOL` + /// * ASSET_TAG_SOL (1) - Accounts with a SOL position can comingle with **either** + /// `ASSET_TAG_DEFAULT` or `ASSET_TAG_STAKED` positions, but not both + /// * ASSET_TAG_STAKED (2) - Staked SOL assets. Accounts with a STAKED position can only deposit + /// other STAKED assets or SOL (`ASSET_TAG_SOL`) and can only borrow SOL + pub asset_tag: u8, + + pub _pad0: [u8; 6], /// USD denominated limit for calculating asset value for initialization margin requirements. /// Example, if total SOL deposits are equal to $1M and the limit it set to $500K, @@ -1244,7 +1262,8 @@ impl From for BankConfig { _pad0: [0; 6], borrow_limit: config.borrow_limit, risk_tier: config.risk_tier, - _pad1: [0; 7], + asset_tag: config.asset_tag, + _pad1: [0; 6], total_asset_value_init_limit: config.total_asset_value_init_limit, oracle_max_age: config.oracle_max_age, _padding: [0; 38], @@ -1266,7 +1285,8 @@ impl From for BankConfigCompact { oracle_key: config.oracle_keys[0], borrow_limit: config.borrow_limit, risk_tier: config.risk_tier, - _pad0: [0; 7], + asset_tag: config.asset_tag, + _pad0: [0; 6], total_asset_value_init_limit: config.total_asset_value_init_limit, oracle_max_age: config.oracle_max_age, } @@ -1305,7 +1325,17 @@ pub struct BankConfig { pub risk_tier: RiskTier, - pub _pad1: [u8; 7], + /// Determines what kinds of assets users of this bank can interact with. + /// Options: + /// * ASSET_TAG_DEFAULT (0) - A regular asset that can be comingled with any other regular asset + /// or with `ASSET_TAG_SOL` + /// * ASSET_TAG_SOL (1) - Accounts with a SOL position can comingle with **either** + /// `ASSET_TAG_DEFAULT` or `ASSET_TAG_STAKED` positions, but not both + /// * ASSET_TAG_STAKED (2) - Staked SOL assets. Accounts with a STAKED position can only deposit + /// other STAKED assets or SOL (`ASSET_TAG_SOL`) and can only borrow SOL + pub asset_tag: u8, + + pub _pad1: [u8; 6], /// USD denominated limit for calculating asset value for initialization margin requirements. /// Example, if total SOL deposits are equal to $1M and the limit it set to $500K, @@ -1320,6 +1350,7 @@ pub struct BankConfig { /// Time window in seconds for the oracle price feed to be considered live. pub oracle_max_age: u16, + // Note: 6 bytes of padding to next 8 byte alignment, then end padding pub _padding: [u8; 38], } @@ -1338,7 +1369,8 @@ impl Default for BankConfig { oracle_keys: [Pubkey::default(); MAX_ORACLE_KEYS], _pad0: [0; 6], risk_tier: RiskTier::Isolated, - _pad1: [0; 7], + asset_tag: ASSET_TAG_DEFAULT, + _pad1: [0; 6], total_asset_value_init_limit: TOTAL_ASSET_VALUE_INIT_LIMIT_INACTIVE, oracle_max_age: 0, _padding: [0; 38], @@ -1420,12 +1452,21 @@ impl BankConfig { self.borrow_limit != u64::MAX } - pub fn validate_oracle_setup(&self, ais: &[AccountInfo]) -> MarginfiResult { + /// * lst_mint, stake_pool, sol_pool - required only if configuring + /// `OracleSetup::StakedWithPythPush` on initial setup. If configuring a staked bank after + /// initial setup, can be omitted + pub fn validate_oracle_setup( + &self, + ais: &[AccountInfo], + lst_mint: Option, + stake_pool: Option, + sol_pool: Option, + ) -> MarginfiResult { check!( self.oracle_max_age >= ORACLE_MIN_AGE, MarginfiError::InvalidOracleSetup ); - OraclePriceFeedAdapter::validate_bank_config(self, ais)?; + OraclePriceFeedAdapter::validate_bank_config(self, ais, lst_mint, stake_pool, sol_pool)?; Ok(()) } @@ -1443,7 +1484,10 @@ impl BankConfig { } pub fn get_pyth_push_oracle_feed_id(&self) -> Option<&FeedId> { - if matches!(self.oracle_setup, OracleSetup::PythPushOracle) { + if matches!( + self.oracle_setup, + OracleSetup::PythPushOracle | OracleSetup::StakedWithPythPush + ) { let bytes: &[u8; 32] = self.oracle_keys[0].as_ref().try_into().unwrap(); Some(bytes) } else { @@ -1511,6 +1555,8 @@ pub struct BankConfigOpt { pub risk_tier: Option, + pub asset_tag: Option, + pub total_asset_value_init_limit: Option, pub oracle_max_age: Option, diff --git a/programs/marginfi/src/state/mod.rs b/programs/marginfi/src/state/mod.rs index 7b5dec9e2..1fa883b0f 100644 --- a/programs/marginfi/src/state/mod.rs +++ b/programs/marginfi/src/state/mod.rs @@ -2,3 +2,4 @@ pub mod fee_state; pub mod marginfi_account; pub mod marginfi_group; pub mod price; +pub mod staked_settings; diff --git a/programs/marginfi/src/state/price.rs b/programs/marginfi/src/state/price.rs index 2fe51ceb3..f8c1396fd 100644 --- a/programs/marginfi/src/state/price.rs +++ b/programs/marginfi/src/state/price.rs @@ -1,11 +1,12 @@ use std::{cell::Ref, cmp::min}; use anchor_lang::prelude::*; +use anchor_spl::token::Mint; use enum_dispatch::enum_dispatch; use fixed::types::I80F48; use pyth_sdk_solana::{state::SolanaPriceAccount, Price, PriceFeed}; use pyth_solana_receiver_sdk::price_update::{self, FeedId, PriceUpdateV2}; -use switchboard_on_demand::{CurrentResult, PullFeedAccountData}; +use switchboard_on_demand::{CurrentResult, PullFeedAccountData, SPL_TOKEN_PROGRAM_ID}; use switchboard_solana::{ AggregatorAccountData, AggregatorResolutionMode, SwitchboardDecimal, SWITCHBOARD_PROGRAM_ID, }; @@ -16,9 +17,10 @@ use crate::{ check, constants::{ CONF_INTERVAL_MULTIPLE, EXP_10, EXP_10_I80F48, MAX_CONF_INTERVAL, - MIN_PYTH_PUSH_VERIFICATION_LEVEL, PYTH_ID, STD_DEV_MULTIPLE, SWITCHBOARD_PULL_ID, + MIN_PYTH_PUSH_VERIFICATION_LEVEL, NATIVE_STAKE_ID, PYTH_ID, SPL_SINGLE_POOL_ID, + STD_DEV_MULTIPLE, SWITCHBOARD_PULL_ID, }, - debug, math_error, + debug, live, math_error, prelude::*, }; @@ -35,6 +37,7 @@ pub enum OracleSetup { SwitchboardV2, PythPushOracle, SwitchboardPull, + StakedWithPythPush, } #[derive(Copy, Clone, Debug)] @@ -71,9 +74,9 @@ pub enum OraclePriceFeedAdapter { } impl OraclePriceFeedAdapter { - pub fn try_from_bank_config( + pub fn try_from_bank_config<'info>( bank_config: &BankConfig, - ais: &[AccountInfo], + ais: &'info [AccountInfo<'info>], clock: &Clock, ) -> MarginfiResult { Self::try_from_bank_config_with_max_age( @@ -84,9 +87,9 @@ impl OraclePriceFeedAdapter { ) } - pub fn try_from_bank_config_with_max_age( + pub fn try_from_bank_config_with_max_age<'info>( bank_config: &BankConfig, - ais: &[AccountInfo], + ais: &'info [AccountInfo<'info>], clock: &Clock, max_age: u64, ) -> MarginfiResult { @@ -148,12 +151,102 @@ impl OraclePriceFeedAdapter { SwitchboardPullPriceFeed::load_checked(&ais[0], clock.unix_timestamp, max_age)?, )) } + OracleSetup::StakedWithPythPush => { + check!(ais.len() == 3, MarginfiError::InvalidOracleAccount); + + check!( + ais[1].key == &bank_config.oracle_keys[1] + && ais[2].key == &bank_config.oracle_keys[2], + MarginfiError::InvalidOracleAccount + ); + + let lst_mint = Account::<'info, Mint>::try_from(&ais[1]).unwrap(); + let lst_supply = lst_mint.supply; + let sol_pool_balance = ais[2].lamports(); + // Note: exchange rate is `sol_pool_balance / lst_supply`, but we will do the + // division last to avoid precision loss. Division does not need to be + // decimal-adjusted because both SOL and stake positions use 9 decimals + + // Note: mainnet/staging/devnet use "push" oracles, localnet uses legacy + if cfg!(any( + feature = "mainnet-beta", + feature = "staging", + feature = "devnet" + )) { + let account_info = &ais[0]; + + check!( + account_info.owner == &pyth_solana_receiver_sdk::id(), + MarginfiError::InvalidOracleAccount + ); + + let price_feed_id = bank_config.get_pyth_push_oracle_feed_id().unwrap(); + let mut feed = PythPushOraclePriceFeed::load_checked( + account_info, + price_feed_id, + clock, + max_age, + )?; + let adjusted_price = (feed.price.price as i128) + .checked_mul(sol_pool_balance as i128) + .ok_or_else(math_error!())? + .checked_div(lst_supply as i128) + .ok_or_else(math_error!())?; + feed.price.price = adjusted_price.try_into().unwrap(); + + let adjusted_ema_price = (feed.ema_price.price as i128) + .checked_mul(sol_pool_balance as i128) + .ok_or_else(math_error!())? + .checked_div(lst_supply as i128) + .ok_or_else(math_error!())?; + feed.ema_price.price = adjusted_ema_price.try_into().unwrap(); + + let price = OraclePriceFeedAdapter::PythPushOracle(feed); + Ok(price) + } else { + // Localnet only + check!( + ais[0].key == &bank_config.oracle_keys[0], + MarginfiError::InvalidOracleAccount + ); + + let account_info = &ais[0]; + let mut feed = PythLegacyPriceFeed::load_checked( + account_info, + clock.unix_timestamp, + max_age, + )?; + + let adjusted_price = (feed.price.price as i128) + .checked_mul(sol_pool_balance as i128) + .ok_or_else(math_error!())? + .checked_div(lst_supply as i128) + .ok_or_else(math_error!())?; + feed.price.price = adjusted_price.try_into().unwrap(); + + let adjusted_ema_price = (feed.ema_price.price as i128) + .checked_mul(sol_pool_balance as i128) + .ok_or_else(math_error!())? + .checked_div(lst_supply as i128) + .ok_or_else(math_error!())?; + feed.ema_price.price = adjusted_ema_price.try_into().unwrap(); + + let price = OraclePriceFeedAdapter::PythLegacy(feed); + Ok(price) + } + } } } + /// * lst_mint, stake_pool, sol_pool - required only if configuring + /// `OracleSetup::StakedWithPythPush` initially. (subsequent validations of staked banks can + /// omit these) pub fn validate_bank_config( bank_config: &BankConfig, oracle_ais: &[AccountInfo], + lst_mint: Option, + stake_pool: Option, + sol_pool: Option, ) -> MarginfiResult { match bank_config.oracle_setup { OracleSetup::None => Err(MarginfiError::OracleNotSetup.into()), @@ -200,6 +293,78 @@ impl OraclePriceFeedAdapter { Ok(()) } + OracleSetup::StakedWithPythPush => { + if lst_mint.is_some() && stake_pool.is_some() && sol_pool.is_some() { + check!(oracle_ais.len() == 3, MarginfiError::InvalidOracleAccount); + + // Note: mainnet/staging/devnet use "push" oracles, localnet uses legacy + if live!() { + PythPushOraclePriceFeed::check_ai_and_feed_id( + &oracle_ais[0], + bank_config.get_pyth_push_oracle_feed_id().unwrap(), + )?; + } else { + // Localnet only + check!( + oracle_ais[0].key == &bank_config.oracle_keys[0], + MarginfiError::InvalidOracleAccount + ); + + PythLegacyPriceFeed::check_ais(&oracle_ais[0])?; + } + + let lst_mint = lst_mint.unwrap(); + let stake_pool = stake_pool.unwrap(); + let sol_pool = sol_pool.unwrap(); + + let program_id = &SPL_SINGLE_POOL_ID; + let stake_pool_bytes = &stake_pool.to_bytes(); + // Validate the given stake_pool derives the same lst_mint, proving stake_pool is correct + let (exp_mint, _) = + Pubkey::find_program_address(&[b"mint", stake_pool_bytes], program_id); + check!( + exp_mint == lst_mint, + MarginfiError::StakePoolValidationFailed + ); + // Validate the now-proven stake_pool derives the given sol_pool + let (exp_pool, _) = + Pubkey::find_program_address(&[b"stake", stake_pool_bytes], program_id); + check!( + exp_pool == sol_pool.key(), + MarginfiError::StakePoolValidationFailed + ); + + // Sanity check the mint. Note: spl-single-pool uses a classic Token, never Token22 + check!( + oracle_ais[1].owner == &SPL_TOKEN_PROGRAM_ID + && oracle_ais[1].key() == lst_mint, + MarginfiError::StakePoolValidationFailed + ); + // Sanity check the pool is a native stake pool. Note: the native staking program is + // written in vanilla Solana and has no Anchor discriminator. + check!( + oracle_ais[2].owner == &NATIVE_STAKE_ID && oracle_ais[2].key() == sol_pool, + MarginfiError::StakePoolValidationFailed + ); + + Ok(()) + } else { + // light validation (after initial setup, only the Pyth oracle needs to be validated) + check!(oracle_ais.len() == 1, MarginfiError::InvalidOracleAccount); + // Note: mainnet/staging/devnet use push oracles, localnet uses legacy push + if live!() { + PythPushOraclePriceFeed::check_ai_and_feed_id( + &oracle_ais[0], + bank_config.get_pyth_push_oracle_feed_id().unwrap(), + )?; + } else { + // Localnet only + PythLegacyPriceFeed::check_ais(&oracle_ais[0])?; + } + + Ok(()) + } + } } } } @@ -214,13 +379,22 @@ impl PythLegacyPriceFeed { pub fn load_checked(ai: &AccountInfo, current_time: i64, max_age: u64) -> MarginfiResult { let price_feed = load_pyth_price_feed(ai)?; - let ema_price = price_feed - .get_ema_price_no_older_than(current_time, max_age) - .ok_or(MarginfiError::StaleOracle)?; + // Note: mainnet/staging/devnet use oracle age, localnet ignores oracle age + let ema_price = if live!() { + price_feed + .get_ema_price_no_older_than(current_time, max_age) + .ok_or(MarginfiError::StaleOracle)? + } else { + price_feed.get_ema_price_unchecked() + }; - let price = price_feed - .get_price_no_older_than(current_time, max_age) - .ok_or(MarginfiError::StaleOracle)?; + let price = if live!() { + price_feed + .get_price_no_older_than(current_time, max_age) + .ok_or(MarginfiError::StaleOracle)? + } else { + price_feed.get_price_unchecked() + }; Ok(Self { ema_price: Box::new(ema_price), diff --git a/programs/marginfi/src/state/staked_settings.rs b/programs/marginfi/src/state/staked_settings.rs new file mode 100644 index 000000000..1c50420c4 --- /dev/null +++ b/programs/marginfi/src/state/staked_settings.rs @@ -0,0 +1,116 @@ +use anchor_lang::prelude::*; +use fixed::types::I80F48; +use fixed_macro::types::I80F48; + +use crate::{assert_struct_align, assert_struct_size, check, MarginfiError, MarginfiResult}; + +use super::marginfi_group::{RiskTier, WrappedI80F48}; + +assert_struct_size!(StakedSettings, 256); +assert_struct_align!(StakedSettings, 8); + +/// Unique per-group. Staked Collateral banks created under a group automatically use these +/// settings. Groups that have not created this struct cannot create staked collateral banks. When +/// this struct updates, changes must be permissionlessly propogated to staked collateral banks. +/// Administrators can also edit the bank manually, i.e. with configure_bank, to temporarily make +/// changes such as raising the deposit limit for a single bank. +#[account(zero_copy)] +#[repr(C)] +pub struct StakedSettings { + /// This account's own key. A PDA derived from `marginfi_group` and `STAKED_SETTINGS_SEED` + pub key: Pubkey, + /// Group for which these settings apply + pub marginfi_group: Pubkey, + /// Generally, the Pyth push oracle for SOL + pub oracle: Pubkey, + + pub asset_weight_init: WrappedI80F48, + pub asset_weight_maint: WrappedI80F48, + + pub deposit_limit: u64, + pub total_asset_value_init_limit: u64, + + pub oracle_max_age: u16, + pub risk_tier: RiskTier, + _pad0: [u8; 5], + + /// The following values are irrelevant because staked collateral positions do not support + /// borrowing. + // * interest_config, + // * liability_weight_init + // * liability_weight_maint + // * borrow_limit + _reserved0: [u8; 8], + _reserved1: [u8; 32], + _reserved2: [u8; 64], +} + +impl StakedSettings { + pub const LEN: usize = std::mem::size_of::(); + + pub fn new( + key: Pubkey, + marginfi_group: Pubkey, + oracle: Pubkey, + asset_weight_init: WrappedI80F48, + asset_weight_maint: WrappedI80F48, + deposit_limit: u64, + total_asset_value_init_limit: u64, + oracle_max_age: u16, + risk_tier: RiskTier, + ) -> Self { + StakedSettings { + key, + marginfi_group, + oracle, + asset_weight_init, + asset_weight_maint, + deposit_limit, + total_asset_value_init_limit, + oracle_max_age, + risk_tier, + ..Default::default() + } + } + + /// Same as `bank.validate()`, except that liability rates and interest rates do not exist in + /// this context (since Staked Collateral accounts cannot be borrowed against and such Banks + /// will use placeholders for those values) + pub fn validate(&self) -> MarginfiResult { + let asset_init_w = I80F48::from(self.asset_weight_init); + let asset_maint_w = I80F48::from(self.asset_weight_maint); + + check!( + asset_init_w >= I80F48::ZERO && asset_init_w <= I80F48::ONE, + MarginfiError::InvalidConfig + ); + check!(asset_maint_w >= asset_init_w, MarginfiError::InvalidConfig); + + if self.risk_tier == RiskTier::Isolated { + check!(asset_init_w == I80F48::ZERO, MarginfiError::InvalidConfig); + check!(asset_maint_w == I80F48::ZERO, MarginfiError::InvalidConfig); + } + + Ok(()) + } +} + +impl Default for StakedSettings { + fn default() -> Self { + StakedSettings { + key: Pubkey::default(), + marginfi_group: Pubkey::default(), + oracle: Pubkey::default(), + asset_weight_init: I80F48!(0.8).into(), + asset_weight_maint: I80F48!(0.9).into(), + deposit_limit: 1_000_000, + total_asset_value_init_limit: 1_000_000, + oracle_max_age: 10, + risk_tier: RiskTier::Collateral, + _pad0: [0; 5], + _reserved0: [0; 8], + _reserved1: [0; 32], + _reserved2: [0; 64], + } + } +} diff --git a/programs/marginfi/src/utils.rs b/programs/marginfi/src/utils.rs index fc79d68b7..f9fd9ba0e 100644 --- a/programs/marginfi/src/utils.rs +++ b/programs/marginfi/src/utils.rs @@ -1,6 +1,10 @@ use crate::{ bank_authority_seed, bank_seed, - state::marginfi_group::{Bank, BankVaultType}, + constants::{ASSET_TAG_DEFAULT, ASSET_TAG_SOL, ASSET_TAG_STAKED}, + state::{ + marginfi_account::MarginfiAccount, + marginfi_group::{Bank, BankVaultType}, + }, MarginfiError, MarginfiResult, }; use anchor_lang::prelude::*; @@ -192,3 +196,63 @@ pub fn hex_to_bytes(hex: &str) -> Vec { }) .collect() } + +/// Validate that after a deposit to Bank, the users's account contains either all Default/SOL +/// balances, or all Staked/Sol balances. Default and Staked assets cannot mix. +pub fn validate_asset_tags(bank: &Bank, marginfi_account: &MarginfiAccount) -> MarginfiResult { + let mut has_default_asset = false; + let mut has_staked_asset = false; + + for balance in marginfi_account.lending_account.balances.iter() { + if balance.active { + match balance.bank_asset_tag { + ASSET_TAG_DEFAULT => has_default_asset = true, + ASSET_TAG_SOL => { /* Do nothing, SOL can mix with any asset type */ } + ASSET_TAG_STAKED => has_staked_asset = true, + _ => panic!("unsupported asset tag"), + } + } + } + + // 1. Regular assets (DEFAULT) cannot mix with Staked assets + if bank.config.asset_tag == ASSET_TAG_DEFAULT && has_staked_asset { + return err!(MarginfiError::AssetTagMismatch); + } + + // 2. Staked SOL cannot mix with Regular asset (DEFAULT) + if bank.config.asset_tag == ASSET_TAG_STAKED && has_default_asset { + return err!(MarginfiError::AssetTagMismatch); + } + + Ok(()) +} + +/// Validate that two banks are compatible based on their asset tags. See the following combinations +/// (* is wildcard, e.g. any tag): +/// +/// Allowed: +/// 1) Default/Default +/// 2) Sol/* +/// 3) Staked/Staked +/// +/// Forbidden: +/// 1) Default/Staked +/// +/// Returns an error if the two banks have mismatching asset tags according to the above. +pub fn validate_bank_asset_tags(bank_a: &Bank, bank_b: &Bank) -> MarginfiResult { + let is_bank_a_default = bank_a.config.asset_tag == ASSET_TAG_DEFAULT; + let is_bank_a_staked = bank_a.config.asset_tag == ASSET_TAG_STAKED; + let is_bank_b_default = bank_b.config.asset_tag == ASSET_TAG_DEFAULT; + let is_bank_b_staked = bank_b.config.asset_tag == ASSET_TAG_STAKED; + // Note: Sol is compatible with all other tags and doesn't matter... + + // 1. Default assets cannot mix with Staked assets + if is_bank_a_default && is_bank_b_staked { + return err!(MarginfiError::AssetTagMismatch); + } + if is_bank_a_staked && is_bank_b_default { + return err!(MarginfiError::AssetTagMismatch); + } + + Ok(()) +} diff --git a/programs/marginfi/tests/admin_actions/setup_bank.rs b/programs/marginfi/tests/admin_actions/setup_bank.rs index e2dccd205..8e408c33b 100644 --- a/programs/marginfi/tests/admin_actions/setup_bank.rs +++ b/programs/marginfi/tests/admin_actions/setup_bank.rs @@ -87,6 +87,7 @@ async fn add_bank_success() -> anyhow::Result<()> { emissions_rate, emissions_remaining, emissions_mint, + collected_program_fees_outstanding, _padding_0, _padding_1, .. // ignore internal padding @@ -116,6 +117,7 @@ async fn add_bank_success() -> anyhow::Result<()> { assert_eq!(emissions_rate, 0); assert_eq!(emissions_mint, Pubkey::new_from_array([0; 32])); assert_eq!(emissions_remaining, I80F48!(0.0).into()); + assert_eq!(collected_program_fees_outstanding, I80F48!(0.0).into()); assert_eq!(_padding_0, <[[u64; 2]; 27] as Default>::default()); assert_eq!(_padding_1, <[[u64; 2]; 32] as Default>::default()); @@ -220,6 +222,7 @@ async fn add_bank_with_seed_success() -> anyhow::Result<()> { emissions_rate, emissions_remaining, emissions_mint, + collected_program_fees_outstanding, _padding_0, _padding_1, .. // ignore internal padding @@ -249,6 +252,7 @@ async fn add_bank_with_seed_success() -> anyhow::Result<()> { assert_eq!(emissions_rate, 0); assert_eq!(emissions_mint, Pubkey::new_from_array([0; 32])); assert_eq!(emissions_remaining, I80F48!(0.0).into()); + assert_eq!(collected_program_fees_outstanding, I80F48!(0.0).into()); assert_eq!(_padding_0, <[[u64; 2]; 27] as Default>::default()); assert_eq!(_padding_1, <[[u64; 2]; 32] as Default>::default()); @@ -343,6 +347,7 @@ async fn configure_bank_success(bank_mint: BankMint) -> anyhow::Result<()> { operational_state, oracle, risk_tier, + asset_tag, total_asset_value_init_limit, oracle_max_age, permissionless_bad_debt_settlement, @@ -387,6 +392,7 @@ async fn configure_bank_success(bank_mint: BankMint) -> anyhow::Result<()> { check_bank_field!(borrow_limit); check_bank_field!(operational_state); check_bank_field!(risk_tier); + check_bank_field!(asset_tag); check_bank_field!(total_asset_value_init_limit); check_bank_field!(oracle_max_age); diff --git a/programs/marginfi/tests/misc/regression.rs b/programs/marginfi/tests/misc/regression.rs index 823ddebe4..5742cecc0 100644 --- a/programs/marginfi/tests/misc/regression.rs +++ b/programs/marginfi/tests/misc/regression.rs @@ -4,10 +4,13 @@ use anchor_lang::AccountDeserialize; use anyhow::bail; use base64::{prelude::BASE64_STANDARD, Engine}; use fixed::types::I80F48; -use marginfi::state::{ - marginfi_account::MarginfiAccount, - marginfi_group::{Bank, BankOperationalState, RiskTier}, - price::OracleSetup, +use marginfi::{ + constants::ASSET_TAG_DEFAULT, + state::{ + marginfi_account::MarginfiAccount, + marginfi_group::{Bank, BankOperationalState, RiskTier}, + price::OracleSetup, + }, }; use solana_account_decoder::UiAccountData; use solana_cli_output::CliAccount; @@ -50,7 +53,8 @@ async fn account_field_values_reg() -> anyhow::Result<()> { balance_1.bank_pk, pubkey!("2s37akK2eyBbp8DZgCm7RtsaEz8eJP3Nxd4urLHQv7yB") ); - assert_eq!(balance_1._pad0, [0; 7]); + assert_eq!(balance_1.bank_asset_tag, ASSET_TAG_DEFAULT); + assert_eq!(balance_1._pad0, [0; 6]); assert_eq!( I80F48::from(balance_1.asset_shares), I80F48::from_str("1650216221.466876226897366").unwrap() @@ -75,7 +79,8 @@ async fn account_field_values_reg() -> anyhow::Result<()> { balance_2.bank_pk, pubkey!("CCKtUs6Cgwo4aaQUmBPmyoApH2gUDErxNZCAntD6LYGh") ); - assert_eq!(balance_2._pad0, [0; 7]); + assert_eq!(balance_2.bank_asset_tag, ASSET_TAG_DEFAULT); + assert_eq!(balance_2._pad0, [0; 6]); assert_eq!( I80F48::from(balance_2.asset_shares), I80F48::from_str("0").unwrap() @@ -125,7 +130,8 @@ async fn account_field_values_reg() -> anyhow::Result<()> { balance_1.bank_pk, pubkey!("6hS9i46WyTq1KXcoa2Chas2Txh9TJAVr6n1t3tnrE23K") ); - assert_eq!(balance_1._pad0, [0; 7]); + assert_eq!(balance_1.bank_asset_tag, ASSET_TAG_DEFAULT); + assert_eq!(balance_1._pad0, [0; 6]); assert_eq!( I80F48::from(balance_1.asset_shares), I80F48::from_str("470.952530958931234").unwrap() @@ -150,7 +156,8 @@ async fn account_field_values_reg() -> anyhow::Result<()> { balance_2.bank_pk, pubkey!("11111111111111111111111111111111") ); - assert_eq!(balance_2._pad0, [0; 7]); + assert_eq!(balance_2.bank_asset_tag, ASSET_TAG_DEFAULT); + assert_eq!(balance_2._pad0, [0; 6]); assert_eq!( I80F48::from(balance_2.asset_shares), I80F48::from_str("0").unwrap() @@ -200,7 +207,8 @@ async fn account_field_values_reg() -> anyhow::Result<()> { balance_1.bank_pk, pubkey!("11111111111111111111111111111111") ); - assert_eq!(balance_1._pad0, [0; 7]); + assert_eq!(balance_1.bank_asset_tag, ASSET_TAG_DEFAULT); + assert_eq!(balance_1._pad0, [0; 6]); assert_eq!( I80F48::from(balance_1.asset_shares), I80F48::from_str("0").unwrap() @@ -635,7 +643,8 @@ async fn bank_field_values_reg() -> anyhow::Result<()> { assert_eq!(bank.config._pad0, [0; 6]); assert_eq!(bank.config.borrow_limit, 2000000000000); assert_eq!(bank.config.risk_tier, RiskTier::Collateral); - assert_eq!(bank.config._pad1, [0; 7]); + assert_eq!(bank.config.asset_tag, ASSET_TAG_DEFAULT); + assert_eq!(bank.config._pad1, [0; 6]); assert_eq!(bank.config.total_asset_value_init_limit, 0); assert_eq!(bank.config.oracle_max_age, 300); assert_eq!(bank.config._padding, [0; 38]); @@ -654,6 +663,11 @@ async fn bank_field_values_reg() -> anyhow::Result<()> { bank.emissions_mint, pubkey!("2b1kV6DkPAnxd5ixfnxCpjxmKwqjjaYmCZfHsFu24GXo") ); + // Legacy banks have no program fees + assert_eq!( + I80F48::from(bank.collected_program_fees_outstanding), + I80F48::from_str("0").unwrap() + ); assert_eq!(bank._padding_0, [[0, 0]; 27]); assert_eq!(bank._padding_1, [[0, 0]; 32]); diff --git a/tests/01_initGroup.spec.ts b/tests/01_initGroup.spec.ts index dd750e35b..d53624f74 100644 --- a/tests/01_initGroup.spec.ts +++ b/tests/01_initGroup.spec.ts @@ -1,15 +1,34 @@ -import { Program, workspace } from "@coral-xyz/anchor"; -import { Transaction } from "@solana/web3.js"; -import { groupInitialize } from "./utils/instructions"; +import { BN, Program, workspace } from "@coral-xyz/anchor"; +import { PublicKey, Transaction } from "@solana/web3.js"; +import { + editStakedSettings, + groupInitialize, + initStakedSettings, +} from "./utils/group-instructions"; import { Marginfi } from "../target/types/marginfi"; import { + ecosystem, globalFeeWallet, groupAdmin, marginfiGroup, + oracles, PROGRAM_FEE_FIXED, PROGRAM_FEE_RATE, + users, + verbose, } from "./rootHooks"; -import { assertI80F48Approx, assertKeysEqual } from "./utils/genericTests"; +import { + assertBNEqual, + assertI80F48Approx, + assertKeysEqual, +} from "./utils/genericTests"; +import { assert } from "chai"; +import { bigNumberToWrappedI80F48 } from "@mrgnlabs/mrgn-common"; +import { deriveStakedSettings } from "./utils/pdas"; +import { + defaultStakedInterestSettings, + StakedSettingsEdit, +} from "./utils/types"; describe("Init group", () => { const program = workspace.Marginfi as Program; @@ -32,6 +51,10 @@ describe("Init group", () => { marginfiGroup.publicKey ); assertKeysEqual(group.admin, groupAdmin.wallet.publicKey); + if (verbose) { + console.log("*init group: " + marginfiGroup.publicKey); + console.log(" group admin: " + group.admin); + } const feeCache = group.feeStateCache; const tolerance = 0.00001; @@ -39,4 +62,215 @@ describe("Init group", () => { assertI80F48Approx(feeCache.programFeeRate, PROGRAM_FEE_RATE, tolerance); assertKeysEqual(feeCache.globalFeeWallet, globalFeeWallet); }); + + it("(attacker) Tries to init staked settings - should fail", async () => { + const settings = defaultStakedInterestSettings( + oracles.wsolOracle.publicKey + ); + let failed = false; + try { + await users[0].mrgnProgram.provider.sendAndConfirm( + new Transaction().add( + await initStakedSettings(users[0].mrgnProgram, { + group: marginfiGroup.publicKey, + feePayer: groupAdmin.wallet.publicKey, + settings: settings, + }) + ) + ); + } catch (err) { + // generic signature error + failed = true; + } + + assert.ok(failed, "Transaction succeeded when it should have failed"); + }); + + it("(admin) Init staked settings for group - opts in to use staked collateral", async () => { + const settings = defaultStakedInterestSettings( + oracles.wsolOracle.publicKey + ); + await groupAdmin.mrgnProgram.provider.sendAndConfirm( + new Transaction().add( + await initStakedSettings(groupAdmin.mrgnProgram, { + group: marginfiGroup.publicKey, + feePayer: groupAdmin.wallet.publicKey, + settings: settings, + }) + ) + ); + + const [settingsKey] = deriveStakedSettings( + program.programId, + marginfiGroup.publicKey + ); + if (verbose) { + console.log("*init staked settings: " + settingsKey); + } + + let settingsAcc = await program.account.stakedSettings.fetch(settingsKey); + assertKeysEqual(settingsAcc.key, settingsKey); + assertKeysEqual(settingsAcc.oracle, oracles.wsolOracle.publicKey); + assertI80F48Approx(settingsAcc.assetWeightInit, 0.8); + assertI80F48Approx(settingsAcc.assetWeightMaint, 0.9); + assertBNEqual(settingsAcc.depositLimit, 1_000_000_000_000); + assertBNEqual(settingsAcc.totalAssetValueInitLimit, 150_000_000); + assert.equal(settingsAcc.oracleMaxAge, 60); + assert.deepEqual(settingsAcc.riskTier, { collateral: {} }); + }); + + it("(attacker) Tries to edit staked settings - should fail", async () => { + const settings: StakedSettingsEdit = { + oracle: PublicKey.default, + assetWeightInit: bigNumberToWrappedI80F48(0.2), + assetWeightMaint: bigNumberToWrappedI80F48(0.3), + depositLimit: new BN(42), + totalAssetValueInitLimit: new BN(43), + oracleMaxAge: 44, + riskTier: { + isolated: undefined, + }, + }; + let failed = false; + try { + const [settingsKey] = deriveStakedSettings( + program.programId, + marginfiGroup.publicKey + ); + + await users[0].mrgnProgram.provider.sendAndConfirm( + new Transaction().add( + await editStakedSettings(users[0].mrgnProgram, { + settingsKey: settingsKey, + settings: settings, + }) + ) + ); + } catch (err) { + // generic signature error + failed = true; + } + assert.ok(failed, "Transaction succeeded when it should have failed"); + }); + + // Note: there are no Staked Collateral positions in the end to end test suite (those are in the + // BankRun suite e.g. s01) so these settings do nothing. + + it("(admin) Edit staked settings for group", async () => { + const settings: StakedSettingsEdit = { + oracle: PublicKey.default, + assetWeightInit: bigNumberToWrappedI80F48(0.2), + assetWeightMaint: bigNumberToWrappedI80F48(0.3), + depositLimit: new BN(42), + totalAssetValueInitLimit: new BN(43), + oracleMaxAge: 44, + riskTier: { + collateral: undefined, + }, + }; + const [settingsKey] = deriveStakedSettings( + program.programId, + marginfiGroup.publicKey + ); + + await groupAdmin.mrgnProgram.provider.sendAndConfirm( + new Transaction().add( + await editStakedSettings(groupAdmin.mrgnProgram, { + settingsKey: settingsKey, + settings: settings, + }) + ) + ); + + if (verbose) { + console.log("*edit staked settings: " + settingsKey); + } + + let settingsAcc = await program.account.stakedSettings.fetch(settingsKey); + assertKeysEqual(settingsAcc.key, settingsKey); + assertKeysEqual(settingsAcc.oracle, PublicKey.default); + assertI80F48Approx(settingsAcc.assetWeightInit, 0.2); + assertI80F48Approx(settingsAcc.assetWeightMaint, 0.3); + assertBNEqual(settingsAcc.depositLimit, 42); + assertBNEqual(settingsAcc.totalAssetValueInitLimit, 43); + assert.equal(settingsAcc.oracleMaxAge, 44); + assert.deepEqual(settingsAcc.riskTier, { collateral: {} }); // no change + }); + + it("(admin) Partial settings update", async () => { + const settings: StakedSettingsEdit = { + oracle: null, + assetWeightInit: null, + assetWeightMaint: null, + depositLimit: null, + totalAssetValueInitLimit: null, + oracleMaxAge: 60, + riskTier: null, + }; + const [settingsKey] = deriveStakedSettings( + program.programId, + marginfiGroup.publicKey + ); + + await groupAdmin.mrgnProgram.provider.sendAndConfirm( + new Transaction().add( + await editStakedSettings(groupAdmin.mrgnProgram, { + settingsKey: settingsKey, + settings: settings, + }) + ) + ); + + let settingsAcc = await program.account.stakedSettings.fetch(settingsKey); + // No change + assertKeysEqual(settingsAcc.key, settingsKey); + assertKeysEqual(settingsAcc.oracle, PublicKey.default); + assertI80F48Approx(settingsAcc.assetWeightInit, 0.2); + assertI80F48Approx(settingsAcc.assetWeightMaint, 0.3); + assertBNEqual(settingsAcc.depositLimit, 42); + assertBNEqual(settingsAcc.totalAssetValueInitLimit, 43); + assert.deepEqual(settingsAcc.riskTier, { collateral: {} }); + + assert.equal(settingsAcc.oracleMaxAge, 60); + }); + + // Note: Isolated riskTier requires the weights to be zero, so this is invalid... + it("(admin) Bad settings update - should fail", async () => { + const settings: StakedSettingsEdit = { + oracle: null, + assetWeightInit: null, + assetWeightMaint: null, + depositLimit: null, + totalAssetValueInitLimit: null, + oracleMaxAge: 60, + riskTier: { + isolated: undefined, + }, + }; + const [settingsKey] = deriveStakedSettings( + program.programId, + marginfiGroup.publicKey + ); + + let failed = false; + try { + await groupAdmin.mrgnProgram.provider.sendAndConfirm( + new Transaction().add( + await editStakedSettings(groupAdmin.mrgnProgram, { + settingsKey: settingsKey, + settings: settings, + }) + ) + ); + } catch (err) { + // TODO create a util for this that fails with more detail + assert.ok( + err.logs.some((log: string) => + log.includes("Error Code: InvalidConfig") + ) + ); + failed = true; + } + assert.ok(failed, "Transaction succeeded when it should have failed"); + }); }); diff --git a/tests/02_configGroup.spec.ts b/tests/02_configGroup.spec.ts index 431c8d043..f44302f74 100644 --- a/tests/02_configGroup.spec.ts +++ b/tests/02_configGroup.spec.ts @@ -6,7 +6,7 @@ import { workspace, } from "@coral-xyz/anchor"; import { Keypair, Transaction } from "@solana/web3.js"; -import { groupConfigure } from "./utils/instructions"; +import { groupConfigure } from "./utils/group-instructions"; import { Marginfi } from "../target/types/marginfi"; import { groupAdmin, marginfiGroup } from "./rootHooks"; import { assertKeysEqual } from "./utils/genericTests"; diff --git a/tests/03_addBank.spec.ts b/tests/03_addBank.spec.ts index f54b12345..6dff0cd9d 100644 --- a/tests/03_addBank.spec.ts +++ b/tests/03_addBank.spec.ts @@ -1,6 +1,6 @@ import { BN, Program, workspace } from "@coral-xyz/anchor"; import { PublicKey, Transaction } from "@solana/web3.js"; -import { addBank } from "./utils/instructions"; +import { addBank } from "./utils/group-instructions"; import { Marginfi } from "../target/types/marginfi"; import { bankKeypairA, @@ -11,6 +11,7 @@ import { INIT_POOL_ORIGINATION_FEE, marginfiGroup, oracles, + printBuffers, verbose, } from "./rootHooks"; import { @@ -20,7 +21,7 @@ import { assertKeyDefault, assertKeysEqual, } from "./utils/genericTests"; -import { defaultBankConfig } from "./utils/types"; +import { ASSET_TAG_DEFAULT, defaultBankConfig } from "./utils/types"; import { deriveLiquidityVaultAuthority, deriveLiquidityVault, @@ -75,7 +76,9 @@ describe("Lending pool add bank (add bank to group)", () => { let bankData = ( await program.provider.connection.getAccountInfo(bankKey) ).data.subarray(8); - printBufferGroups(bankData, 16, 896); + if (printBuffers) { + printBufferGroups(bankData, 16, 896); + } const bank = await program.account.bank.fetch(bankKey); const config = bank.config; @@ -126,6 +129,7 @@ describe("Lending pool add bank (add bank to group)", () => { assertI80F48Equal(config.assetWeightInit, 1); assertI80F48Equal(config.assetWeightMaint, 1); assertI80F48Equal(config.liabilityWeightInit, 1); + assertI80F48Equal(config.liabilityWeightMaint, 1); assertBNEqual(config.depositLimit, 100_000_000_000); const tolerance = 0.000001; @@ -139,10 +143,13 @@ describe("Lending pool add bank (add bank to group)", () => { assertI80F48Approx(interest.protocolIrFee, 0.04, tolerance); assertI80F48Approx(interest.protocolOriginationFee, 0.01, tolerance); + assertI80F48Approx(interest.protocolOriginationFee, 0.01, tolerance); + assert.deepEqual(config.operationalState, { operational: {} }); assert.deepEqual(config.oracleSetup, { pythLegacy: {} }); assertBNEqual(config.borrowLimit, 100_000_000_000); assert.deepEqual(config.riskTier, { collateral: {} }); + assert.equal(config.assetTag, ASSET_TAG_DEFAULT); assertBNEqual(config.totalAssetValueInitLimit, 1_000_000_000_000); assert.equal(config.oracleMaxAge, 100); @@ -184,7 +191,9 @@ describe("Lending pool add bank (add bank to group)", () => { let bonkBankData = ( await program.provider.connection.getAccountInfo(bonkBankKey) ).data.subarray(8); - printBufferGroups(bonkBankData, 16, 896); + if (printBuffers) { + printBufferGroups(bonkBankData, 16, 896); + } let cloudBankKey = new PublicKey( "4kNXetv8hSv9PzvzPZzEs1CTH6ARRRi2b8h6jk1ad1nP" @@ -192,7 +201,9 @@ describe("Lending pool add bank (add bank to group)", () => { let cloudBankData = ( await program.provider.connection.getAccountInfo(cloudBankKey) ).data.subarray(8); - printBufferGroups(cloudBankData, 16, 896); + if (printBuffers) { + printBufferGroups(cloudBankData, 16, 896); + } const bbk = bonkBankKey; const bb = await program.account.bank.fetch(bonkBankKey); @@ -255,6 +266,9 @@ describe("Lending pool add bank (add bank to group)", () => { // assertI80F48Equal(interest.protocolFixedFeeApr, 0); // assertI80F48Equal(interest.protocolIrFee, 0); + // Bank added before this feature existed, should be zero + assertI80F48Equal(bonkInterest.protocolOriginationFee, 0); + assert.deepEqual(bonkConfig.operationalState, { operational: {} }); assert.deepEqual(bonkConfig.oracleSetup, { pythPushOracle: {} }); // roughly 26.41 billion BONK with 5 decimals. @@ -302,6 +316,9 @@ describe("Lending pool add bank (add bank to group)", () => { // 1 million CLOUD with 9 decimals (1_000_000_000_000_000) assertBNEqual(cloudConfig.depositLimit, 1_000_000_000_000_000); + // Bank added before this feature existed, should be zero + assertI80F48Equal(cloudInterest.protocolOriginationFee, 0); + assert.deepEqual(cloudConfig.operationalState, { operational: {} }); assert.deepEqual(cloudConfig.oracleSetup, { switchboardV2: {} }); // 50,000 CLOUD with 9 decimals (50_000_000_000_000) @@ -309,5 +326,24 @@ describe("Lending pool add bank (add bank to group)", () => { assert.deepEqual(cloudConfig.riskTier, { isolated: {} }); assertBNEqual(cloudConfig.totalAssetValueInitLimit, 0); assert.equal(cloudConfig.oracleMaxAge, 60); + + // Assert emissions mint (one of the last fields) is also aligned correctly. + let pyUsdcBankKey = new PublicKey( + "Fe5QkKPVAh629UPP5aJ8sDZu8HTfe6M26jDQkKyXVhoA" + ); + let pyUsdcBankData = ( + await program.provider.connection.getAccountInfo(pyUsdcBankKey) + ).data.subarray(8); + if (printBuffers) { + printBufferGroups(pyUsdcBankData, 16, 896); + } + + const pb = await program.account.bank.fetch(pyUsdcBankKey); + assertKeysEqual( + pb.emissionsMint, + new PublicKey("2b1kV6DkPAnxd5ixfnxCpjxmKwqjjaYmCZfHsFu24GXo") + ); }); }); + +// TODO add bank with seed diff --git a/tests/04_configureBank.spec.ts b/tests/04_configureBank.spec.ts index da194892e..1341717ac 100644 --- a/tests/04_configureBank.spec.ts +++ b/tests/04_configureBank.spec.ts @@ -1,10 +1,11 @@ import { BN, Program, workspace } from "@coral-xyz/anchor"; +import { configureBank } from "./utils/group-instructions"; import { PublicKey, Transaction } from "@solana/web3.js"; -import { configureBank } from "./utils/instructions"; import { Marginfi } from "../target/types/marginfi"; import { bankKeypairUsdc, groupAdmin, marginfiGroup } from "./rootHooks"; import { assertBNEqual, assertI80F48Approx } from "./utils/genericTests"; import { assert } from "chai"; +import { InterestRateConfigRaw } from "@mrgnlabs/marginfi-client-v2"; import { bigNumberToWrappedI80F48 } from "@mrgnlabs/mrgn-common"; import { ASSET_TAG_SOL, @@ -84,7 +85,7 @@ describe("Lending pool configure bank", () => { assert.deepEqual(config.oracleSetup, { pythLegacy: {} }); // no change assertBNEqual(config.borrowLimit, 10000); assert.deepEqual(config.riskTier, { collateral: {} }); // no change - // assert.equal(config.assetTag, ASSET_TAG_SOL); // TODO when staked collateral added + assert.equal(config.assetTag, ASSET_TAG_SOL); assertBNEqual(config.totalAssetValueInitLimit, 15000); assert.equal(config.oracleMaxAge, 50); }); diff --git a/tests/05_setupEmissions.spec.ts b/tests/05_setupEmissions.spec.ts new file mode 100644 index 000000000..b14b26679 --- /dev/null +++ b/tests/05_setupEmissions.spec.ts @@ -0,0 +1,154 @@ +import { + AnchorProvider, + BN, + getProvider, + Program, + Wallet, + workspace, +} from "@coral-xyz/anchor"; +import { Transaction } from "@solana/web3.js"; +import { setupEmissions, updateEmissions } from "./utils/group-instructions"; +import { Marginfi } from "../target/types/marginfi"; +import { + bankKeypairUsdc, + ecosystem, + groupAdmin, + marginfiGroup, + verbose, +} from "./rootHooks"; +import { + assertBNEqual, + assertI80F48Approx, + assertKeysEqual, + getTokenBalance, +} from "./utils/genericTests"; +import { assert } from "chai"; +import { + EMISSIONS_FLAG_BORROW_ACTIVE, + EMISSIONS_FLAG_LENDING_ACTIVE, +} from "./utils/types"; +import { createMintToInstruction } from "@solana/spl-token"; +import { deriveEmissionsAuth, deriveEmissionsTokenAccount } from "./utils/pdas"; + +describe("Lending pool set up emissions", () => { + const program = workspace.Marginfi as Program; + const provider = getProvider() as AnchorProvider; + const wallet = provider.wallet as Wallet; + + const emissionRate = new BN(500_000 * 10 ** ecosystem.tokenBDecimals); + const totalEmissions = new BN(1_000_000 * 10 ** ecosystem.tokenBDecimals); + + it("Mint token B to the group admin for funding emissions", async () => { + let tx: Transaction = new Transaction(); + tx.add( + createMintToInstruction( + ecosystem.tokenBMint.publicKey, + groupAdmin.tokenBAccount, + wallet.publicKey, + BigInt(100_000_000) * BigInt(10 ** ecosystem.tokenBDecimals) + ) + ); + await program.provider.sendAndConfirm(tx); + }); + + it("(admin) Set up to token B emissions on (USDC) bank - happy path", async () => { + const adminBBefore = await getTokenBalance( + provider, + groupAdmin.tokenBAccount + ); + const [emissionsAccKey] = deriveEmissionsTokenAccount( + program.programId, + bankKeypairUsdc.publicKey, + ecosystem.tokenBMint.publicKey + ); + // Note: an uninitialized account that does nothing... + const [emissionsAuthKey] = deriveEmissionsAuth( + program.programId, + bankKeypairUsdc.publicKey, + ecosystem.tokenBMint.publicKey + ); + + await groupAdmin.mrgnProgram!.provider.sendAndConfirm!( + new Transaction().add( + await setupEmissions(program, { + marginfiGroup: marginfiGroup.publicKey, + admin: groupAdmin.wallet.publicKey, + bank: bankKeypairUsdc.publicKey, + emissionsMint: ecosystem.tokenBMint.publicKey, + fundingAccount: groupAdmin.tokenBAccount, + emissionsFlags: new BN( + EMISSIONS_FLAG_BORROW_ACTIVE + EMISSIONS_FLAG_LENDING_ACTIVE + ), + emissionsRate: emissionRate, + totalEmissions: totalEmissions, + }) + ) + ); + + if (verbose) { + console.log("Started token B borrow/lending emissions on USDC bank"); + } + + const [bank, adminBAfter, emissionsAccAfter] = await Promise.all([ + program.account.bank.fetch(bankKeypairUsdc.publicKey), + getTokenBalance(provider, groupAdmin.tokenBAccount), + getTokenBalance(provider, emissionsAccKey), + ]); + + assertKeysEqual(bank.emissionsMint, ecosystem.tokenBMint.publicKey); + assertBNEqual(bank.emissionsRate, emissionRate); + assertI80F48Approx(bank.emissionsRemaining, totalEmissions); + assertBNEqual( + bank.flags, + new BN(EMISSIONS_FLAG_BORROW_ACTIVE + EMISSIONS_FLAG_LENDING_ACTIVE) + ); + assert.equal(adminBBefore - adminBAfter, totalEmissions.toNumber()); + assert.equal(emissionsAccAfter, totalEmissions.toNumber()); + }); + + it("(admin) Add more token B emissions on (USDC) bank - happy path", async () => { + const [emissionsAccKey] = deriveEmissionsTokenAccount( + program.programId, + bankKeypairUsdc.publicKey, + ecosystem.tokenBMint.publicKey + ); + const [adminBBefore, emissionsAccBefore] = await Promise.all([ + getTokenBalance(provider, groupAdmin.tokenBAccount), + getTokenBalance(provider, emissionsAccKey), + ]); + + await groupAdmin.mrgnProgram!.provider.sendAndConfirm!( + new Transaction().add( + await updateEmissions(program, { + marginfiGroup: marginfiGroup.publicKey, + admin: groupAdmin.wallet.publicKey, + bank: bankKeypairUsdc.publicKey, + emissionsMint: ecosystem.tokenBMint.publicKey, + fundingAccount: groupAdmin.tokenBAccount, + emissionsFlags: null, + emissionsRate: null, + additionalEmissions: totalEmissions, + }) + ) + ); + + const [bank, adminBAfter, emissionsAccAfter] = await Promise.all([ + program.account.bank.fetch(bankKeypairUsdc.publicKey), + getTokenBalance(provider, groupAdmin.tokenBAccount), + getTokenBalance(provider, emissionsAccKey), + ]); + + assertKeysEqual(bank.emissionsMint, ecosystem.tokenBMint.publicKey); + assertBNEqual(bank.emissionsRate, emissionRate); + assertI80F48Approx(bank.emissionsRemaining, totalEmissions.muln(2)); + assertBNEqual( + bank.flags, + new BN(EMISSIONS_FLAG_BORROW_ACTIVE + EMISSIONS_FLAG_LENDING_ACTIVE) + ); + assert.equal(adminBBefore - adminBAfter, totalEmissions.toNumber()); + assert.equal( + emissionsAccAfter, + emissionsAccBefore + totalEmissions.toNumber() + ); + }); +}); diff --git a/tests/06_initUser.spec.ts b/tests/06_initUser.spec.ts new file mode 100644 index 000000000..6fbb90b44 --- /dev/null +++ b/tests/06_initUser.spec.ts @@ -0,0 +1,69 @@ +import { Program, workspace } from "@coral-xyz/anchor"; +import { Keypair, Transaction } from "@solana/web3.js"; +import { Marginfi } from "../target/types/marginfi"; +import { marginfiGroup, users } from "./rootHooks"; +import { + assertBNEqual, + assertI80F48Equal, + assertKeyDefault, + assertKeysEqual, +} from "./utils/genericTests"; +import { assert } from "chai"; +import { accountInit } from "./utils/user-instructions"; +import { USER_ACCOUNT } from "./utils/mocks"; + +describe("Initialize user account", () => { + const program = workspace.Marginfi as Program; + + it("(user 0) Initialize user account - happy path", async () => { + const accountKeypair = Keypair.generate(); + const accountKey = accountKeypair.publicKey; + users[0].accounts.set(USER_ACCOUNT, accountKey); + + let tx: Transaction = new Transaction(); + tx.add( + await accountInit(program, { + marginfiGroup: marginfiGroup.publicKey, + marginfiAccount: accountKey, + authority: users[0].wallet.publicKey, + feePayer: users[0].wallet.publicKey, + }) + ); + await users[0].mrgnProgram.provider.sendAndConfirm(tx, [ + accountKeypair, + ]); + + const userAcc = await program.account.marginfiAccount.fetch(accountKey); + assertKeysEqual(userAcc.group, marginfiGroup.publicKey); + assertKeysEqual(userAcc.authority, users[0].wallet.publicKey); + const balances = userAcc.lendingAccount.balances; + for (let i = 0; i < balances.length; i++) { + assert.equal(balances[i].active, false); + assertKeyDefault(balances[i].bankPk); + assertI80F48Equal(balances[i].assetShares, 0); + assertI80F48Equal(balances[i].liabilityShares, 0); + assertI80F48Equal(balances[i].emissionsOutstanding, 0); + assertBNEqual(balances[i].lastUpdate, 0); + } + assertBNEqual(userAcc.accountFlags, 0); + }); + + it("(user 1) Initialize user account - happy path", async () => { + const accountKeypair = Keypair.generate(); + const accountKey = accountKeypair.publicKey; + users[1].accounts.set(USER_ACCOUNT, accountKey); + + let tx: Transaction = new Transaction(); + tx.add( + await accountInit(program, { + marginfiGroup: marginfiGroup.publicKey, + marginfiAccount: accountKey, + authority: users[1].wallet.publicKey, + feePayer: users[1].wallet.publicKey, + }) + ); + await users[1].mrgnProgram.provider.sendAndConfirm(tx, [ + accountKeypair, + ]); + }); +}); diff --git a/tests/07_deposit.spec.ts b/tests/07_deposit.spec.ts new file mode 100644 index 000000000..f4fdbbf20 --- /dev/null +++ b/tests/07_deposit.spec.ts @@ -0,0 +1,163 @@ +import { + AnchorProvider, + BN, + getProvider, + Program, + Wallet, + workspace, +} from "@coral-xyz/anchor"; +import { Transaction } from "@solana/web3.js"; +import { Marginfi } from "../target/types/marginfi"; +import { + bankKeypairA, + bankKeypairUsdc, + ecosystem, + marginfiGroup, + users, + verbose, +} from "./rootHooks"; +import { + assertBNApproximately, + assertI80F48Approx, + assertI80F48Equal, + getTokenBalance, +} from "./utils/genericTests"; +import { assert } from "chai"; +import { depositIx } from "./utils/user-instructions"; +import { USER_ACCOUNT } from "./utils/mocks"; +import { createMintToInstruction } from "@solana/spl-token"; +import { deriveLiquidityVault } from "./utils/pdas"; + +describe("Deposit funds", () => { + const program = workspace.Marginfi as Program; + const provider = getProvider() as AnchorProvider; + const wallet = provider.wallet as Wallet; + const depositAmountA = 2; + const depositAmountA_native = new BN( + depositAmountA * 10 ** ecosystem.tokenADecimals + ); + + const depositAmountUsdc = 100; + const depositAmountUsdc_native = new BN( + depositAmountUsdc * 10 ** ecosystem.usdcDecimals + ); + + it("(Fund user 0 and user 1 USDC/Token A token accounts", async () => { + let tx = new Transaction(); + for (let i = 0; i < users.length; i++) { + tx.add( + createMintToInstruction( + ecosystem.tokenAMint.publicKey, + users[i].tokenAAccount, + wallet.publicKey, + 100 * 10 ** ecosystem.tokenADecimals + ) + ); + tx.add( + createMintToInstruction( + ecosystem.usdcMint.publicKey, + users[i].usdcAccount, + wallet.publicKey, + 10000 * 10 ** ecosystem.usdcDecimals + ) + ); + } + await program.provider.sendAndConfirm(tx); + }); + + it("(user 0) deposit token A to bank - happy path", async () => { + const user = users[0]; + const [bankLiquidityVault] = deriveLiquidityVault( + program.programId, + bankKeypairA.publicKey + ); + const [userABefore, vaultABefore] = await Promise.all([ + getTokenBalance(provider, user.tokenAAccount), + getTokenBalance(provider, bankLiquidityVault), + ]); + if (verbose) { + console.log("user 0 A before: " + userABefore.toLocaleString()); + console.log("vault A before: " + vaultABefore.toLocaleString()); + } + + const user0Account = user.accounts.get(USER_ACCOUNT); + + await users[0].mrgnProgram.provider.sendAndConfirm( + new Transaction().add( + await depositIx(program, { + marginfiGroup: marginfiGroup.publicKey, + marginfiAccount: user0Account, + authority: user.wallet.publicKey, + bank: bankKeypairA.publicKey, + tokenAccount: user.tokenAAccount, + amount: depositAmountA_native, + }) + ) + ); + + const userAcc = await program.account.marginfiAccount.fetch(user0Account); + const balances = userAcc.lendingAccount.balances; + assert.equal(balances[0].active, true); + // Note: The first deposit issues shares 1:1 and the shares use the same decimals + assertI80F48Approx(balances[0].assetShares, depositAmountA_native); + assertI80F48Equal(balances[0].liabilityShares, 0); + assertI80F48Equal(balances[0].emissionsOutstanding, 0); + + let now = Math.floor(Date.now() / 1000); + assertBNApproximately(balances[0].lastUpdate, now, 2); + + const [userAAfter, vaultAAfter] = await Promise.all([ + getTokenBalance(provider, user.tokenAAccount), + getTokenBalance(provider, bankLiquidityVault), + ]); + if (verbose) { + console.log("user 0 A after: " + userAAfter.toLocaleString()); + console.log("vault A after: " + vaultAAfter.toLocaleString()); + } + assert.equal(userABefore - depositAmountA_native.toNumber(), userAAfter); + assert.equal(vaultABefore + depositAmountA_native.toNumber(), vaultAAfter); + }); + + it("(user 1) deposit USDC to bank - happy path", async () => { + const user = users[1]; + const userUsdcBefore = await getTokenBalance(provider, user.usdcAccount); + if (verbose) { + console.log("user 1 USDC before: " + userUsdcBefore.toLocaleString()); + } + + const user1Account = user.accounts.get(USER_ACCOUNT); + + await users[1].mrgnProgram.provider.sendAndConfirm( + new Transaction().add( + await depositIx(program, { + marginfiGroup: marginfiGroup.publicKey, + marginfiAccount: user1Account, + authority: user.wallet.publicKey, + bank: bankKeypairUsdc.publicKey, + tokenAccount: user.usdcAccount, + amount: depositAmountUsdc_native, + }) + ) + ); + + const userAcc = await program.account.marginfiAccount.fetch(user1Account); + const balances = userAcc.lendingAccount.balances; + assert.equal(balances[0].active, true); + // Note: The first deposit issues shares 1:1 and the shares use the same decimals + assertI80F48Approx(balances[0].assetShares, depositAmountUsdc_native); + assertI80F48Equal(balances[0].liabilityShares, 0); + assertI80F48Equal(balances[0].emissionsOutstanding, 0); + + let now = Math.floor(Date.now() / 1000); + assertBNApproximately(balances[0].lastUpdate, now, 2); + + const userUsdcAfter = await getTokenBalance(provider, user.usdcAccount); + if (verbose) { + console.log("user 1 USDC after: " + userUsdcAfter.toLocaleString()); + } + assert.equal( + userUsdcBefore - depositAmountUsdc_native.toNumber(), + userUsdcAfter + ); + }); +}); diff --git a/tests/08_borrow.spec.ts b/tests/08_borrow.spec.ts new file mode 100644 index 000000000..785c04702 --- /dev/null +++ b/tests/08_borrow.spec.ts @@ -0,0 +1,177 @@ +import { + AnchorProvider, + BN, + getProvider, + Program, + Wallet, + workspace, +} from "@coral-xyz/anchor"; +import { Transaction } from "@solana/web3.js"; +import { Marginfi } from "../target/types/marginfi"; +import { + bankKeypairA, + bankKeypairUsdc, + ecosystem, + marginfiGroup, + oracles, + users, + verbose, +} from "./rootHooks"; +import { + assertBNApproximately, + assertI80F48Approx, + assertI80F48Equal, + getTokenBalance, +} from "./utils/genericTests"; +import { assert } from "chai"; +import { borrowIx, depositIx } from "./utils/user-instructions"; +import { USER_ACCOUNT } from "./utils/mocks"; +import { createMintToInstruction } from "@solana/spl-token"; +import { updatePriceAccount } from "./utils/pyth_mocks"; +import { wrappedI80F48toBigNumber } from "@mrgnlabs/mrgn-common"; + +describe("Borrow funds", () => { + const program = workspace.Marginfi as Program; + const provider = getProvider() as AnchorProvider; + const wallet = provider.wallet as Wallet; + + // Bank has 100 USDC available to borrow + // User has 2 Token A (worth $20) deposited + const borrowAmountUsdc = 5; + const borrowAmountUsdc_native = new BN( + borrowAmountUsdc * 10 ** ecosystem.usdcDecimals + ); + + it("Oracle data refreshes", async () => { + const usdcPrice = BigInt(oracles.usdcPrice * 10 ** oracles.usdcDecimals); + await updatePriceAccount( + oracles.usdcOracle, + { + exponent: -oracles.usdcDecimals, + aggregatePriceInfo: { + price: usdcPrice, + conf: usdcPrice / BigInt(100), // 1% of the price + }, + twap: { + // aka ema + valueComponent: usdcPrice, + }, + }, + wallet + ); + + const tokenAPrice = BigInt( + oracles.tokenAPrice * 10 ** oracles.tokenADecimals + ); + await updatePriceAccount( + oracles.tokenAOracle, + { + exponent: -oracles.tokenADecimals, + aggregatePriceInfo: { + price: tokenAPrice, + conf: tokenAPrice / BigInt(100), // 1% of the price + }, + twap: { + // aka ema + valueComponent: tokenAPrice, + }, + }, + wallet + ); + }); + + it("(user 0) borrows USDC against their token A position - happy path", async () => { + const user = users[0]; + const bank = bankKeypairUsdc.publicKey; + const userUsdcBefore = await getTokenBalance(provider, user.usdcAccount); + const bankBefore = await program.account.bank.fetch(bank); + if (verbose) { + console.log("user 0 USDC before: " + userUsdcBefore.toLocaleString()); + console.log( + "usdc fees owed to bank: " + + wrappedI80F48toBigNumber( + bankBefore.collectedGroupFeesOutstanding + ).toString() + ); + console.log( + "usdc fees owed to program: " + + wrappedI80F48toBigNumber( + bankBefore.collectedProgramFeesOutstanding + ).toString() + ); + } + + const user0Account = user.accounts.get(USER_ACCOUNT); + + await users[0].mrgnProgram.provider.sendAndConfirm( + new Transaction().add( + await borrowIx(program, { + marginfiGroup: marginfiGroup.publicKey, + marginfiAccount: user0Account, + authority: user.wallet.publicKey, + bank: bank, + tokenAccount: user.usdcAccount, + remaining: [ + bankKeypairA.publicKey, + oracles.tokenAOracle.publicKey, + bank, + oracles.usdcOracle.publicKey, + ], + amount: borrowAmountUsdc_native, + }) + ) + ); + + const userAcc = await program.account.marginfiAccount.fetch(user0Account); + const bankAfter = await program.account.bank.fetch(bank); + const balances = userAcc.lendingAccount.balances; + const userUsdcAfter = await getTokenBalance(provider, user.usdcAccount); + if (verbose) { + console.log("user 0 USDC after: " + userUsdcAfter.toLocaleString()); + console.log( + "usdc fees owed to bank: " + + wrappedI80F48toBigNumber( + bankAfter.collectedGroupFeesOutstanding + ).toString() + ); + console.log( + "usdc fees owed to program: " + + wrappedI80F48toBigNumber( + bankAfter.collectedProgramFeesOutstanding + ).toString() + ); + } + + assert.equal(balances[1].active, true); + assertI80F48Equal(balances[1].assetShares, 0); + // Note: The first borrow issues shares 1:1 and the shares use the same decimals + // Note: An origination fee of 0.01 is also incurred here (configured during addBank) + const originationFee_native = borrowAmountUsdc_native.toNumber() * 0.01; + const amtUsdcWithFee_native = new BN( + borrowAmountUsdc_native.toNumber() + originationFee_native + ); + assertI80F48Approx(balances[1].liabilityShares, amtUsdcWithFee_native); + assertI80F48Equal(balances[1].emissionsOutstanding, 0); + + let now = Math.floor(Date.now() / 1000); + assertBNApproximately(balances[1].lastUpdate, now, 2); + + assert.equal( + userUsdcAfter - borrowAmountUsdc_native.toNumber(), + userUsdcBefore + ); + + // The origination fee is recorded on the bank. The group gets 98%, the program gets the + // remaining 2% (see PROGRAM_FEE_RATE) + const origination_fee_group = originationFee_native * 0.98; + const origination_fee_program = originationFee_native * 0.02; + assertI80F48Approx( + bankAfter.collectedGroupFeesOutstanding, + origination_fee_group + ); + assertI80F48Approx( + bankAfter.collectedProgramFeesOutstanding, + origination_fee_program + ); + }); +}); diff --git a/tests/fixtures/pyusd_bank.json b/tests/fixtures/pyusd_bank.json new file mode 100644 index 000000000..e59459d4d --- /dev/null +++ b/tests/fixtures/pyusd_bank.json @@ -0,0 +1,14 @@ +{ + "pubkey": "Fe5QkKPVAh629UPP5aJ8sDZu8HTfe6M26jDQkKyXVhoA", + "account": { + "lamports": 13864320, + "data": [ + "jjGm8jJCYbwXkkg7bIoqh7dHHYFPlZH5OVyECpzj2fTVun06S4p0ngbS7qNW7Dx5ehg9nAnFDP63jomJRxUTYMZvKp+sEMXJ9AAAAAAAAABqo0cIVQABAAAAAAAAAAAAerjNbJYAAQAAAAAAAAAAAD+qZNIhko6I815Qcr1imt+4Mav6RP0FS+3wO1rdzHb2//9rJOLCuVHJSdCU2JfYrAEawvoNUZ3rL2c5ocvqnISYjvz/AAAAAJVXzdUKawYAAAAAAAAAAAA78ZdGK1AwaMp/IAX8Hd174GpPOkna9ir36HsJ3+vLJf7+AAAAAAAAiYrUtxDQkwAAAAAAAAAAAKHCFhvpYRpXBQAAAAAAAADyQbEwcR8DqSUAAAAAAAAAujPXZgAAAAAAAIBmZmYAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAQAEAAAAAAAAAAACamZmZmRkBAAAAAAAAAAAAAID0IOa1AACamZmZmdkAAAAAAAAAAAAAmpmZmZkZAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMP1KFyPAgAAAAAAAAAAAADNzMzMzAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABA8HaG3PX8B593VSzdmz3/NZEOVrRT3CqcG7FOExZ52aSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgPQg5rUAAAAAAAAAAAAAAAAAAAAAAAAsAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAADoAwAAAAAAALimWlHsykcAAAAAAAAAAAAXkkg7bIoqh7dHHYFPlZH5OVyECpzj2fTVun06S4p0ngAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", + "base64" + ], + "owner": "stag8sTKds2h4KzjUw3zKTsxbqvT4XKHdaR9X9E6Rct", + "executable": false, + "rentEpoch": 18446744073709551615, + "space": 1864 + } +} \ No newline at end of file diff --git a/tests/fixtures/spl_single_pool.so b/tests/fixtures/spl_single_pool.so new file mode 100755 index 0000000000000000000000000000000000000000..79c650a190c442a92d87313d65e0901154569482 GIT binary patch literal 390632 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 e`22}s+-*V)*LBcezLNhxdH%onAM4c5^Z#%1; +export let banksClient: BanksClient; +/** keys copied into the bankrun instance */ +let copyKeys: PublicKey[] = []; export const mochaHooks = { beforeAll: async () => { - const program = workspace.Marginfi as Program; + // If this is false, you are in the wrong environment to run this test suite, try polyfill. + console.log("Environment supports crypto: ", !!global.crypto?.subtle); + + const mrgnProgram = workspace.Marginfi as Program; const provider = AnchorProvider.local(); const wallet = provider.wallet as Wallet; + copyKeys.push(wallet.publicKey); + if (verbose) { console.log("Global Ecosystem Information "); echoEcosystemInfo(ecosystem, { skipA: false, skipB: false, skipUsdc: false, - skipWsol: true, + skipWsol: false, }); console.log(""); } + const { ixes: wsolIxes, mint: wsolMint } = await createSimpleMint( + provider.publicKey, + provider.connection, + ecosystem.wsolDecimals, + ecosystem.wsolMint + ); const { ixes: usdcIxes, mint: usdcMint } = await createSimpleMint( provider.publicKey, provider.connection, ecosystem.usdcDecimals, ecosystem.usdcMint ); - const { ixes: aIxes, mint: aMint } = await createSimpleMint( provider.publicKey, provider.connection, @@ -80,15 +127,31 @@ export const mochaHooks = { ecosystem.tokenBDecimals, ecosystem.tokenBMint ); - const tx = new Transaction(); - tx.add(...usdcIxes); - tx.add(...aIxes); - tx.add(...bIxes); + const initMintsTx = new Transaction(); + initMintsTx.add(...wsolIxes); + initMintsTx.add(...usdcIxes); + initMintsTx.add(...aIxes); + initMintsTx.add(...bIxes); + + await provider.sendAndConfirm(initMintsTx, [ + wsolMint, + usdcMint, + aMint, + bMint, + ]); + copyKeys.push( + wsolMint.publicKey, + usdcMint.publicKey, + aMint.publicKey, + bMint.publicKey + ); + + let miscSetupTx = new Transaction(); let globalFeeKeypair = Keypair.generate(); globalFeeWallet = globalFeeKeypair.publicKey; // Send some sol to the global fee wallet for rent - tx.add( + miscSetupTx.add( SystemProgram.transfer({ fromPubkey: wallet.publicKey, toPubkey: globalFeeWallet, @@ -97,8 +160,8 @@ export const mochaHooks = { ); // Init the global fee state - tx.add( - await initGlobalFeeState(program, { + miscSetupTx.add( + await initGlobalFeeState(mrgnProgram, { payer: provider.publicKey, admin: wallet.payer.publicKey, wallet: globalFeeWallet, @@ -108,19 +171,30 @@ export const mochaHooks = { }) ); - await provider.sendAndConfirm(tx, [usdcMint, aMint, bMint]); + await provider.sendAndConfirm(miscSetupTx); + copyKeys.push( + globalFeeWallet, + deriveGlobalFeeState(mrgnProgram.programId)[0] + ); const setupUserOptions: SetupTestUserOptions = { - marginProgram: program, + marginProgram: mrgnProgram, forceWallet: undefined, // If mints are created, typically create the ATA too, otherwise pass undefined... - wsolMint: undefined, + wsolMint: ecosystem.wsolMint.publicKey, tokenAMint: ecosystem.tokenAMint.publicKey, tokenBMint: ecosystem.tokenBMint.publicKey, usdcMint: ecosystem.usdcMint.publicKey, }; groupAdmin = await setupTestUser(provider, wallet.payer, setupUserOptions); + validatorAdmin = await setupTestUser( + provider, + wallet.payer, + setupUserOptions + ); + copyKeys.push(groupAdmin.usdcAccount); + copyKeys.push(groupAdmin.wallet.publicKey); for (let i = 0; i < numUsers; i++) { const user = await setupTestUser( @@ -128,7 +202,7 @@ export const mochaHooks = { wallet.payer, setupUserOptions ); - users.push(user); + addUser(user); } // Global admin uses the payer wallet... @@ -151,5 +225,186 @@ export const mochaHooks = { ecosystem.tokenBDecimals, verbose ); + copyKeys.push(oracles.wsolOracle.publicKey); + copyKeys.push(oracles.usdcOracle.publicKey); + copyKeys.push(oracles.tokenAOracle.publicKey); + + for (let i = 0; i < numValidators; i++) { + const validator = await createValidator( + provider, + validatorAdmin.wallet, + validatorAdmin.wallet.publicKey + ); + if (verbose) { + console.log("Validator vote acc [" + i + "]: " + validator.voteAccount); + } + addValidator(validator); + + let { poolKey, poolMintKey, poolAuthority, poolStake } = + await createSplStakePool(provider, validator); + if (verbose) { + console.log(" pool..... " + poolKey); + console.log(" mint..... " + poolMintKey); + console.log(" auth..... " + poolAuthority); + console.log(" stake.... " + poolStake); + } + } + + // copyKeys.push(StakeProgram.programId); + copyKeys.push(SYSVAR_STAKE_HISTORY_PUBKEY); + + const accountKeys = copyKeys; + + const accounts = await provider.connection.getMultipleAccountsInfo( + accountKeys + ); + const addedAccounts = accountKeys.map((address, index) => ({ + address, + info: accounts[index], + })); + + bankrunContext = await startAnchor(path.resolve(), [], addedAccounts); + bankRunProvider = new BankrunProvider(bankrunContext); + bankrunProgram = new Program(mrgnProgram.idl, bankRunProvider); + banksClient = bankrunContext.banksClient; + + if (verbose) { + console.log("---End ecosystem setup---"); + console.log(""); + } }, }; + +const addValidator = (validator: Validator) => { + validators.push(validator); + // copyKeys.push(validator.authorizedVoter); + // copyKeys.push(validator.authorizedWithdrawer); + // copyKeys.push(validator.node); + copyKeys.push(validator.voteAccount); +}; + +const addUser = (user: MockUser) => { + users.push(user); + copyKeys.push(user.tokenAAccount); + // copyKeys.push(user.tokenBAccount); + copyKeys.push(user.usdcAccount); + copyKeys.push(user.wallet.publicKey); + copyKeys.push(user.wsolAccount); +}; + +/** + * Create a mock validator with given vote/withdraw authority + * * Note: Spl Pool fields (splPool, mint, authority, stake) are initialized to pubkey default. + * @param provider + * @param authorizedVoter - also pays init fees + * @param authorizedWithdrawer - also pays init fees + * @param comission - defaults to 0 + */ +export const createValidator = async ( + provider: AnchorProvider, + authorizedVoter: Keypair, + authorizedWithdrawer: PublicKey, + commission: number = 0 // Commission rate from 0 to 100 +) => { + const voteAccount = Keypair.generate(); + const node = Keypair.generate(); + + const tx = new Transaction().add( + // Create the vote account + SystemProgram.createAccount({ + fromPubkey: authorizedVoter.publicKey, + newAccountPubkey: voteAccount.publicKey, + lamports: await provider.connection.getMinimumBalanceForRentExemption( + VoteProgram.space + ), + space: VoteProgram.space, + programId: VoteProgram.programId, + }), + // Initialize the vote account + VoteProgram.initializeAccount({ + votePubkey: voteAccount.publicKey, + nodePubkey: node.publicKey, + voteInit: new VoteInit( + node.publicKey, + authorizedVoter.publicKey, + authorizedWithdrawer, + commission + ), + }) + ); + + await provider.sendAndConfirm(tx, [voteAccount, authorizedVoter, node]); + + const validator: Validator = { + node: node.publicKey, + authorizedVoter: authorizedVoter.publicKey, + authorizedWithdrawer: authorizedWithdrawer, + voteAccount: voteAccount.publicKey, + splPool: PublicKey.default, + splMint: PublicKey.default, + splAuthority: PublicKey.default, + splSolPool: PublicKey.default, + bank: PublicKey.default, + }; + + return validator; +}; + +/** + * Create a single-validator spl stake pool. Copys the pool, mint, authority, and stake accounts to + * the copyKeys slice to be deployed to bankrun + * @param provider + * @param validator - mutated, adds the spl keys (pool, mint, authority, stake) + */ +export const createSplStakePool = async ( + provider: AnchorProvider, + validator: Validator +) => { + let tx = await SinglePoolProgram.initialize( + // @ts-ignore // Doesn't matter + provider.connection, + validator.voteAccount, + users[0].wallet.publicKey, + true + ); + + // @ts-ignore // Doesn't matter + await provider.sendAndConfirm(tx, [users[0].wallet]); + + // Note: import the id from @solana/spl-single-pool (the classic version doesn't have it) + const poolKey = await findPoolAddress( + SINGLE_POOL_PROGRAM_ID, + validator.voteAccount + ); + validator.splPool = poolKey; + copyKeys.push(poolKey); + + const poolAcc = await provider.connection.getAccountInfo(poolKey); + // Rudimentary validation that this account now exists and is owned by the single pool program + assertKeysEqual(poolAcc.owner, SINGLE_POOL_PROGRAM_ID); + assert.equal(poolAcc.executable, false); + + const pool = decodeSinglePool(poolAcc.data); + assertKeysEqual(pool.voteAccountAddress, validator.voteAccount); + + const poolMintKey = await findPoolMintAddress( + SINGLE_POOL_PROGRAM_ID, + poolKey + ); + validator.splMint = poolMintKey; + copyKeys.push(poolMintKey); + + const poolStake = await findPoolStakeAddress(SINGLE_POOL_PROGRAM_ID, poolKey); + validator.splSolPool = poolStake; + copyKeys.push(poolStake); + + const poolAuthority = await findPoolStakeAuthorityAddress( + SINGLE_POOL_PROGRAM_ID, + poolKey + ); + validator.splAuthority = poolAuthority; + // Note: accounts that do not exist (blank PDAs) cannot be pushed to bankrun + // copyKeys.push(poolAuthority); + + return { poolKey, poolMintKey, poolAuthority, poolStake }; +}; diff --git a/tests/s01_usersStake.spec.ts b/tests/s01_usersStake.spec.ts new file mode 100644 index 000000000..931c9ce9e --- /dev/null +++ b/tests/s01_usersStake.spec.ts @@ -0,0 +1,316 @@ +import { BN } from "@coral-xyz/anchor"; +import { + LAMPORTS_PER_SOL, + PublicKey, + SystemProgram, + Transaction, +} from "@solana/web3.js"; +import { + bankrunContext, + bankRunProvider, + users, + validators, + verbose, + banksClient, + bankrunProgram, +} from "./rootHooks"; +import { + createStakeAccount, + delegateStake, + getEpochAndSlot, + getStakeAccount, + getStakeActivation, +} from "./utils/stake-utils"; +import { + assertBNEqual, + assertKeysEqual, + getTokenBalance, +} from "./utils/genericTests"; +import { u64MAX_BN } from "./utils/types"; +import { getAssociatedTokenAddressSync } from "@mrgnlabs/mrgn-common"; +import { + depositToSinglePoolIxes, + getBankrunBlockhash, +} from "./utils/spl-staking-utils"; +import { assert } from "chai"; +import { LST_ATA, STAKE_ACC } from "./utils/mocks"; + +describe("User stakes some native and creates an account", () => { + /** Users's validator 0 stake account */ + let user0StakeAccount: PublicKey; + const stake = 10; + + it("(user 0) Create user stake account and stake to validator", async () => { + let { createTx, stakeAccountKeypair } = createStakeAccount( + users[0], + stake * LAMPORTS_PER_SOL + ); + // Note: bankrunContext.lastBlockhash only works if non-bankrun tests didn't run previously + createTx.recentBlockhash = await getBankrunBlockhash(bankrunContext); + createTx.sign(users[0].wallet, stakeAccountKeypair); + await banksClient.processTransaction(createTx); + user0StakeAccount = stakeAccountKeypair.publicKey; + + if (verbose) { + console.log("Create stake account: " + user0StakeAccount); + console.log( + " Stake: " + + stake + + " SOL (" + + (stake * LAMPORTS_PER_SOL).toLocaleString() + + " in native)" + ); + } + users[0].accounts.set("v0_stakeAcc", user0StakeAccount); + + let delegateTx = delegateStake( + users[0], + user0StakeAccount, + validators[0].voteAccount + ); + delegateTx.recentBlockhash = await getBankrunBlockhash(bankrunContext); + delegateTx.sign(users[0].wallet); + await banksClient.processTransaction(delegateTx); + + if (verbose) { + console.log("user 0 delegated to " + validators[0].voteAccount); + } + + let { epoch, slot } = await getEpochAndSlot(banksClient); + const stakeAccountInfo = await bankRunProvider.connection.getAccountInfo( + user0StakeAccount + ); + const stakeAccBefore = getStakeAccount(stakeAccountInfo.data); + const meta = stakeAccBefore.meta; + const delegation = stakeAccBefore.stake.delegation; + const rent = new BN(meta.rentExemptReserve.toString()); + + assertKeysEqual(delegation.voterPubkey, validators[0].voteAccount); + assertBNEqual( + new BN(delegation.stake.toString()), + new BN(10 * LAMPORTS_PER_SOL).sub(rent) + ); + assertBNEqual(new BN(delegation.activationEpoch.toString()), epoch); + assertBNEqual(new BN(delegation.deactivationEpoch.toString()), u64MAX_BN); + + const stakeStatusBefore = await getStakeActivation( + bankRunProvider.connection, + user0StakeAccount, + epoch + ); + if (verbose) { + console.log("It is now epoch: " + epoch + " slot " + slot); + console.log( + "Stake active: " + + stakeStatusBefore.active.toLocaleString() + + " inactive " + + stakeStatusBefore.inactive.toLocaleString() + + " status: " + + stakeStatusBefore.status + ); + } + }); + + it("(user 1/2) Stakes and delegates too", async () => { + await stakeAndDelegateForUser(1, stake); + await stakeAndDelegateForUser(2, stake); + }); + + const stakeAndDelegateForUser = async ( + userIndex: number, + stakeAmount: number + ) => { + const user = users[userIndex]; + let { createTx, stakeAccountKeypair } = createStakeAccount( + user, + stakeAmount * LAMPORTS_PER_SOL + ); + + createTx.recentBlockhash = await getBankrunBlockhash(bankrunContext); + createTx.sign(user.wallet, stakeAccountKeypair); + await banksClient.processTransaction(createTx); + user.accounts.set(STAKE_ACC, stakeAccountKeypair.publicKey); + + let delegateTx = delegateStake( + user, + stakeAccountKeypair.publicKey, + validators[0].voteAccount + ); + delegateTx.recentBlockhash = await getBankrunBlockhash(bankrunContext); + delegateTx.sign(user.wallet); + await banksClient.processTransaction(delegateTx); + }; + + it("Advance the epoch", async () => { + bankrunContext.warpToEpoch(1n); + + let { epoch: epochAfterWarp, slot: slotAfterWarp } = await getEpochAndSlot( + banksClient + ); + if (verbose) { + console.log( + "Warped to epoch: " + epochAfterWarp + " slot " + slotAfterWarp + ); + } + + const stakeStatusAfter = await getStakeActivation( + bankRunProvider.connection, + user0StakeAccount, + epochAfterWarp + ); + if (verbose) { + console.log( + "Stake active: " + + stakeStatusAfter.active.toLocaleString() + + " inactive " + + stakeStatusAfter.inactive.toLocaleString() + + " status: " + + stakeStatusAfter.status + ); + console.log(""); + } + + // Advance a few slots and send some dummy txes to end the rewards period + + // NOTE: ALL STAKE PROGRAM IXES ARE DISABLED DURING THE REWARDS PERIOD. THIS MUST OCCUR OR THE + // STAKE PROGRAM CANNOT RUN + + if (verbose) { + console.log("Now stalling for a few slots to end the rewards period..."); + } + for (let i = 0; i < 3; i++) { + bankrunContext.warpToSlot(BigInt(i + slotAfterWarp + 1)); + const dummyTx = new Transaction(); + dummyTx.add( + SystemProgram.transfer({ + fromPubkey: users[0].wallet.publicKey, + toPubkey: bankrunProgram.provider.publicKey, + lamports: i, + }) + ); + dummyTx.recentBlockhash = await getBankrunBlockhash(bankrunContext); + dummyTx.sign(users[0].wallet); + await banksClient.processTransaction(dummyTx); + } + + let { epoch, slot } = await getEpochAndSlot(banksClient); + if (verbose) { + console.log("It is now epoch: " + epoch + " slot " + slot); + } + }); + + it("(user 0) Deposits " + stake + "stake to the v0 LST pool", async () => { + const userStakeAccount = users[0].accounts.get(STAKE_ACC); + // Note: use `findPoolMintAddress(SINGLE_POOL_PROGRAM_ID, splPool);` if mint is not known. + const lstAta = getAssociatedTokenAddressSync( + validators[0].splMint, + users[0].wallet.publicKey + ); + users[0].accounts.set(LST_ATA, lstAta); + + // Note: user stake account exists before, but is closed after + // Here we note the balance of the stake account prior + const stakeAccountInfo = await bankRunProvider.connection.getAccountInfo( + userStakeAccount + ); + const stakeAccBefore = getStakeAccount(stakeAccountInfo.data); + const rent = new BN(stakeAccBefore.meta.rentExemptReserve.toString()); + const delegationBefore = Number( + stakeAccBefore.stake.delegation.stake.toString() + ); + assertBNEqual( + new BN(delegationBefore), + new BN(10 * LAMPORTS_PER_SOL).sub(rent) + ); + + // The spl stake pool account is already infused with 1 SOL at init + const splStakeInfoBefore = await bankRunProvider.connection.getAccountInfo( + validators[0].splSolPool + ); + const splStakePoolBefore = getStakeAccount(splStakeInfoBefore.data); + const delegationSplPoolBefore = new BN( + splStakePoolBefore.stake.delegation.stake.toString() + ); + if (verbose) { + console.log("pool stake before: " + delegationSplPoolBefore.toString()); + } + + // Create lst ata, transfer authority, execute the deposit + let tx = new Transaction(); + const ixes = await depositToSinglePoolIxes( + bankRunProvider.connection, + users[0].wallet.publicKey, + validators[0].splPool, + userStakeAccount, + verbose + ); + tx.add(...ixes); + tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); + tx.sign(users[0].wallet); + await banksClient.processTransaction(tx); + + // The stake account no longer exists + try { + const accountInfo = await bankRunProvider.connection.getAccountInfo( + userStakeAccount + ); + assert.ok( + accountInfo === null, + "The account should not exist, but it does." + ); + } catch (err) { + assert.ok(true, "The account does not exist."); + } + + const [lstAfter, splStakePoolInfo] = await Promise.all([ + getTokenBalance(bankRunProvider, lstAta), + bankRunProvider.connection.getAccountInfo(validators[0].splSolPool), + ]); + if (verbose) { + console.log("lst after: " + lstAfter.toLocaleString()); + } + // LST tokens are issued 1:1 with stake because there has been zero appreciation + // Also note that LST tokens use the same decimals. + assert.equal(lstAfter, delegationBefore); + + const splStakePool = getStakeAccount(splStakePoolInfo.data); + const delegationSplPoolAfter = new BN( + splStakePool.stake.delegation.stake.toString() + ); + if (verbose) { + console.log("pool stake after: " + delegationSplPoolAfter.toString()); + } + // The stake pool gained all of the stake that was held in the user stake acc + assertBNEqual( + delegationSplPoolAfter.sub(delegationSplPoolBefore), + delegationBefore + ); + }); + + it("(user 1/2) deposits " + stake + " to the v0 stake pool too", async () => { + await depositForUser(1); + await depositForUser(2); + }); + + const depositForUser = async (userIndex: number) => { + const user = users[userIndex]; + let tx = new Transaction(); + const ixes = await depositToSinglePoolIxes( + bankRunProvider.connection, + user.wallet.publicKey, + validators[0].splPool, + user.accounts.get(STAKE_ACC), + verbose + ); + tx.add(...ixes); + tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); + tx.sign(user.wallet); + await banksClient.processTransaction(tx); + + const lstAta = getAssociatedTokenAddressSync( + validators[0].splMint, + user.wallet.publicKey + ); + user.accounts.set(LST_ATA, lstAta); + }; +}); diff --git a/tests/s02_addBank.spec.ts b/tests/s02_addBank.spec.ts new file mode 100644 index 000000000..5e87cc19f --- /dev/null +++ b/tests/s02_addBank.spec.ts @@ -0,0 +1,504 @@ +import { BN, Program, workspace } from "@coral-xyz/anchor"; +import { AccountMeta, Keypair, PublicKey, Transaction } from "@solana/web3.js"; +import { + addBank, + addBankPermissionless, + groupInitialize, + initStakedSettings, +} from "./utils/group-instructions"; +import { Marginfi } from "../target/types/marginfi"; +import { + bankKeypairSol, + bankKeypairUsdc, + bankrunContext, + bankrunProgram, + banksClient, + ecosystem, + groupAdmin, + marginfiGroup, + oracles, + users, + validators, + verbose, +} from "./rootHooks"; +import { + assertBankrunTxFailed, + assertBNEqual, + assertI80F48Approx, + assertI80F48Equal, + assertKeyDefault, + assertKeysEqual, +} from "./utils/genericTests"; +import { + ASSET_TAG_DEFAULT, + ASSET_TAG_SOL, + ASSET_TAG_STAKED, + defaultBankConfig, + defaultStakedInterestSettings, + I80F48_ONE, + SINGLE_POOL_PROGRAM_ID, +} from "./utils/types"; +import { assert } from "chai"; +import { getBankrunBlockhash } from "./utils/spl-staking-utils"; +import { + deriveBankWithSeed, + deriveFeeVault, + deriveFeeVaultAuthority, + deriveInsuranceVault, + deriveInsuranceVaultAuthority, + deriveLiquidityVault, + deriveLiquidityVaultAuthority, + deriveStakedSettings, +} from "./utils/pdas"; +import { TOKEN_PROGRAM_ID } from "@solana/spl-token"; + +describe("Init group and add banks with asset category flags", () => { + const program = workspace.Marginfi as Program; + + it("(admin) Init group - happy path", async () => { + let tx = new Transaction(); + + tx.add( + await groupInitialize(program, { + marginfiGroup: marginfiGroup.publicKey, + admin: groupAdmin.wallet.publicKey, + }) + ); + tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); + tx.sign(groupAdmin.wallet, marginfiGroup); + await banksClient.processTransaction(tx); + + let group = await bankrunProgram.account.marginfiGroup.fetch( + marginfiGroup.publicKey + ); + assertKeysEqual(group.admin, groupAdmin.wallet.publicKey); + if (verbose) { + console.log("*init group: " + marginfiGroup.publicKey); + console.log(" group admin: " + group.admin); + } + }); + + // TODO add bank permissionless fails prior to opting in + + it("(admin) Init staked settings for group - opts in to use staked collateral", async () => { + const settings = defaultStakedInterestSettings( + oracles.wsolOracle.publicKey + ); + let tx = new Transaction(); + + tx.add( + await initStakedSettings(groupAdmin.mrgnProgram, { + group: marginfiGroup.publicKey, + feePayer: groupAdmin.wallet.publicKey, + settings: settings, + }) + ); + tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); + tx.sign(groupAdmin.wallet); + await banksClient.processTransaction(tx); + + const [settingsKey] = deriveStakedSettings( + program.programId, + marginfiGroup.publicKey + ); + if (verbose) { + console.log("*init staked settings: " + settingsKey); + } + + let settingsAcc = await bankrunProgram.account.stakedSettings.fetch( + settingsKey + ); + assertKeysEqual(settingsAcc.key, settingsKey); + assertKeysEqual(settingsAcc.oracle, oracles.wsolOracle.publicKey); + assertI80F48Approx(settingsAcc.assetWeightInit, 0.8); + assertI80F48Approx(settingsAcc.assetWeightMaint, 0.9); + assertBNEqual(settingsAcc.depositLimit, 1_000_000_000_000); + assertBNEqual(settingsAcc.totalAssetValueInitLimit, 150_000_000); + assert.equal(settingsAcc.oracleMaxAge, 60); + assert.deepEqual(settingsAcc.riskTier, { collateral: {} }); + }); + + it("(admin) Add bank (USDC) - is neither SOL nor staked LST", async () => { + let setConfig = defaultBankConfig(oracles.usdcOracle.publicKey); + let bankKey = bankKeypairUsdc.publicKey; + + let tx = new Transaction(); + tx.add( + await addBank(program, { + marginfiGroup: marginfiGroup.publicKey, + admin: groupAdmin.wallet.publicKey, + feePayer: groupAdmin.wallet.publicKey, + bankMint: ecosystem.usdcMint.publicKey, + bank: bankKey, + config: setConfig, + }) + ); + tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); + tx.sign(groupAdmin.wallet, bankKeypairUsdc); + await banksClient.processTransaction(tx); + + if (verbose) { + console.log("*init USDC bank " + bankKey); + } + + const bank = await bankrunProgram.account.bank.fetch(bankKey); + assert.equal(bank.config.assetTag, ASSET_TAG_DEFAULT); + }); + + it("(admin) Add bank (SOL) - is tagged as SOL", async () => { + let setConfig = defaultBankConfig(oracles.wsolOracle.publicKey); + setConfig.assetTag = ASSET_TAG_SOL; + let bankKey = bankKeypairSol.publicKey; + + let tx = new Transaction(); + tx.add( + await addBank(program, { + marginfiGroup: marginfiGroup.publicKey, + admin: groupAdmin.wallet.publicKey, + feePayer: groupAdmin.wallet.publicKey, + bankMint: ecosystem.wsolMint.publicKey, + bank: bankKey, + config: setConfig, + }) + ); + tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); + tx.sign(groupAdmin.wallet, bankKeypairSol); + await banksClient.processTransaction(tx); + + if (verbose) { + console.log("*init SOL bank " + bankKey); + } + + const bank = await bankrunProgram.account.bank.fetch(bankKey); + assert.equal(bank.config.assetTag, ASSET_TAG_SOL); + }); + + it("(admin) Tries to add staked bank WITH permission - should fail", async () => { + let setConfig = defaultBankConfig(oracles.wsolOracle.publicKey); + setConfig.assetTag = ASSET_TAG_STAKED; + setConfig.borrowLimit = new BN(0); + let bankKeypair = Keypair.generate(); + + let tx = new Transaction(); + tx.add( + await addBank(groupAdmin.mrgnProgram, { + marginfiGroup: marginfiGroup.publicKey, + admin: groupAdmin.wallet.publicKey, + feePayer: groupAdmin.wallet.publicKey, + bankMint: validators[0].splMint, + bank: bankKeypair.publicKey, + config: setConfig, + }) + ); + tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); + tx.sign(groupAdmin.wallet, bankKeypair); + let result = await banksClient.tryProcessTransaction(tx); + // AddedStakedPoolManually + assertBankrunTxFailed(result, "0x17a0"); + }); + + it("(attacker) Add bank (validator 0) with bad accounts + bad metadata - should fail", async () => { + const [settingsKey] = deriveStakedSettings( + program.programId, + marginfiGroup.publicKey + ); + const goodStakePool = validators[0].splPool; + const goodLstMint = validators[0].splMint; + const goodSolPool = validators[0].splSolPool; + + // Attacker tries to sneak in the wrong validator's information + const badStakePool = validators[1].splPool; + const badLstMint = validators[1].splMint; + const badSolPool = validators[1].splSolPool; + + const stakePools = [goodStakePool, badStakePool]; + const lstMints = [goodLstMint, badLstMint]; + const solPools = [goodSolPool, badSolPool]; + + for (const stakePool of stakePools) { + for (const lstMint of lstMints) { + for (const solPool of solPools) { + // Skip the "all good" combination + if ( + stakePool.equals(goodStakePool) && + lstMint.equals(goodLstMint) && + solPool.equals(goodSolPool) + ) { + continue; + } + + // Skip the "all bad" combination (equivalent to a valid init of validator 1) + if ( + stakePool.equals(badStakePool) && + lstMint.equals(badLstMint) && + solPool.equals(badSolPool) + ) { + continue; + } + + const oracleMeta: AccountMeta = { + pubkey: oracles.wsolOracle.publicKey, + isSigner: false, + isWritable: false, + }; + const lstMeta: AccountMeta = { + pubkey: lstMint, + isSigner: false, + isWritable: false, + }; + const solPoolMeta: AccountMeta = { + pubkey: solPool, + isSigner: false, + isWritable: false, + }; + + const ix = await program.methods + .lendingPoolAddBankPermissionless(new BN(0)) + .accounts({ + stakedSettings: settingsKey, + feePayer: users[0].wallet.publicKey, + bankMint: lstMint, + solPool: solPool, + stakePool: stakePool, + tokenProgram: TOKEN_PROGRAM_ID, + }) + .remainingAccounts([oracleMeta, lstMeta, solPoolMeta]) + .instruction(); + + let tx = new Transaction(); + tx.add(ix); + tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); + tx.sign(users[0].wallet); + + let result = await banksClient.tryProcessTransaction(tx); + // StakePoolValidationFailed + assertBankrunTxFailed(result, "0x17a2"); + } + } + } + }); + + it("(attacker) Add bank (validator 0) with good accounts but bad metadata - should fail", async () => { + const [settingsKey] = deriveStakedSettings( + program.programId, + marginfiGroup.publicKey + ); + + const goodStakePool = validators[0].splPool; + const goodLstMint = validators[0].splMint; + const goodSolPool = validators[0].splSolPool; + + // Note: StakePool is N/A because we do not pass StakePool in meta. + // const badStakePool = validators[1].splPool; + const badLstMint = validators[1].splMint; + const badSolPool = validators[1].splSolPool; + + const lstMints = [goodLstMint, badLstMint]; + const solPools = [goodSolPool, badSolPool]; + + for (const lstMint of lstMints) { + for (const solPool of solPools) { + // Skip the all-good metadata case + if (lstMint.equals(goodLstMint) && solPool.equals(goodSolPool)) { + continue; + } + + const oracleMeta: AccountMeta = { + pubkey: oracles.wsolOracle.publicKey, + isSigner: false, + isWritable: false, + }; + const lstMeta: AccountMeta = { + pubkey: lstMint, + isSigner: false, + isWritable: false, + }; + const solPoolMeta: AccountMeta = { + pubkey: solPool, + isSigner: false, + isWritable: false, + }; + + const ix = await program.methods + .lendingPoolAddBankPermissionless(new BN(0)) + .accounts({ + stakedSettings: settingsKey, + feePayer: users[0].wallet.publicKey, + bankMint: goodLstMint, // Good key + solPool: goodSolPool, // Good key + stakePool: goodStakePool, // Good key + tokenProgram: TOKEN_PROGRAM_ID, + }) + .remainingAccounts([oracleMeta, lstMeta, solPoolMeta]) // Bad metadata keys + .instruction(); + + let tx = new Transaction(); + tx.add(ix); + tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); + tx.sign(users[0].wallet); + + let result = await banksClient.tryProcessTransaction(tx); + // StakePoolValidationFailed + assertBankrunTxFailed(result, "0x17a2"); + } + } + + // Bad oracle meta + const oracleMeta: AccountMeta = { + pubkey: oracles.usdcOracle.publicKey, // Bad meta + isSigner: false, + isWritable: false, + }; + const lstMeta: AccountMeta = { + pubkey: goodLstMint, + isSigner: false, + isWritable: false, + }; + const solPoolMeta: AccountMeta = { + pubkey: goodSolPool, + isSigner: false, + isWritable: false, + }; + + const ix = await program.methods + .lendingPoolAddBankPermissionless(new BN(0)) + .accounts({ + stakedSettings: settingsKey, + feePayer: users[0].wallet.publicKey, + bankMint: goodLstMint, // Good key + solPool: goodSolPool, // Good key + stakePool: goodStakePool, // Good key + tokenProgram: TOKEN_PROGRAM_ID, + }) + .remainingAccounts([oracleMeta, lstMeta, solPoolMeta]) // Bad oracle meta + .instruction(); + + let tx = new Transaction(); + tx.add(ix); + tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); + tx.sign(users[0].wallet); + + let result = await banksClient.tryProcessTransaction(tx); + // Note: different error + assertBankrunTxFailed(result, "0x1777"); + }); + + it("(permissionless) Add staked collateral bank (validator 0) - happy path", async () => { + const [bankKey] = deriveBankWithSeed( + program.programId, + marginfiGroup.publicKey, + validators[0].splMint, + new BN(0) + ); + validators[0].bank = bankKey; + + let tx = new Transaction(); + tx.add( + await addBankPermissionless(program, { + marginfiGroup: marginfiGroup.publicKey, + feePayer: groupAdmin.wallet.publicKey, + pythOracle: oracles.wsolOracle.publicKey, + stakePool: validators[0].splPool, + seed: new BN(0), + }) + ); + tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); + tx.sign(groupAdmin.wallet); + await banksClient.processTransaction(tx); + + if (verbose) { + console.log("*init LST bank " + validators[0].bank + " (validator 0)"); + } + const bank = await bankrunProgram.account.bank.fetch(validators[0].bank); + const [settingsKey] = deriveStakedSettings( + program.programId, + marginfiGroup.publicKey + ); + const settingsAcc = await bankrunProgram.account.stakedSettings.fetch( + settingsKey + ); + // Noteworthy fields + assert.equal(bank.config.assetTag, ASSET_TAG_STAKED); + + // Standard fields + const config = bank.config; + const interest = config.interestRateConfig; + const id = program.programId; + + assertKeysEqual(bank.mint, validators[0].splMint); + // Note: stake accounts use SOL decimals + assert.equal(bank.mintDecimals, ecosystem.wsolDecimals); + assertKeysEqual(bank.group, marginfiGroup.publicKey); + + // Keys and bumps... + const [_liqAuth, liqAuthBump] = deriveLiquidityVaultAuthority(id, bankKey); + const [liquidityVault, liqVaultBump] = deriveLiquidityVault(id, bankKey); + assertKeysEqual(bank.liquidityVault, liquidityVault); + assert.equal(bank.liquidityVaultBump, liqVaultBump); + assert.equal(bank.liquidityVaultAuthorityBump, liqAuthBump); + + const [_insAuth, insAuthBump] = deriveInsuranceVaultAuthority(id, bankKey); + const [insuranceVault, insurVaultBump] = deriveInsuranceVault(id, bankKey); + assertKeysEqual(bank.insuranceVault, insuranceVault); + assert.equal(bank.insuranceVaultBump, insurVaultBump); + assert.equal(bank.insuranceVaultAuthorityBump, insAuthBump); + + const [_feeVaultAuth, feeAuthBump] = deriveFeeVaultAuthority(id, bankKey); + const [feeVault, feeVaultBump] = deriveFeeVault(id, bankKey); + assertKeysEqual(bank.feeVault, feeVault); + assert.equal(bank.feeVaultBump, feeVaultBump); + assert.equal(bank.feeVaultAuthorityBump, feeAuthBump); + + assertKeyDefault(bank.emissionsMint); + + // Constants/Defaults... + assertI80F48Equal(bank.assetShareValue, 1); + assertI80F48Equal(bank.liabilityShareValue, 1); + assertI80F48Equal(bank.collectedInsuranceFeesOutstanding, 0); + assertI80F48Equal(bank.collectedGroupFeesOutstanding, 0); + assertI80F48Equal(bank.totalLiabilityShares, 0); + assertI80F48Equal(bank.totalAssetShares, 0); + assertBNEqual(bank.flags, 0); + assertBNEqual(bank.emissionsRate, 0); + assertI80F48Equal(bank.emissionsRemaining, 0); + + // Settings and non-default values... + assertI80F48Approx(config.assetWeightInit, settingsAcc.assetWeightInit); + assertI80F48Approx(config.assetWeightMaint, settingsAcc.assetWeightMaint); + assertI80F48Approx(config.liabilityWeightInit, 1.5); + assertI80F48Approx(config.liabilityWeightMaint, 1.25); + assertBNEqual(config.depositLimit, settingsAcc.depositLimit); + + assertI80F48Approx(interest.optimalUtilizationRate, 0.4); + assertI80F48Approx(interest.plateauInterestRate, 0.4); + assertI80F48Approx(interest.maxInterestRate, 3); + + assertI80F48Equal(interest.insuranceFeeFixedApr, 0); + assertI80F48Approx(interest.insuranceIrFee, 0.1); + assertI80F48Approx(interest.protocolFixedFeeApr, 0.01); + assertI80F48Equal(interest.protocolIrFee, 0); + + assertI80F48Equal(interest.protocolOriginationFee, 0); + + assert.deepEqual(config.operationalState, { operational: {} }); + assert.deepEqual(config.oracleSetup, { stakedWithPythPush: {} }); + assertBNEqual(config.borrowLimit, 0); + assert.deepEqual(config.riskTier, settingsAcc.riskTier); + assert.equal(config.assetTag, ASSET_TAG_STAKED); + assertBNEqual( + config.totalAssetValueInitLimit, + settingsAcc.totalAssetValueInitLimit + ); + + // Oracle information.... + assert.equal(config.oracleMaxAge, settingsAcc.oracleMaxAge); + assertKeysEqual(config.oracleKeys[0], settingsAcc.oracle); + assertKeysEqual(config.oracleKeys[1], validators[0].splMint); + assertKeysEqual(config.oracleKeys[2], validators[0].splSolPool); + + assertI80F48Equal(bank.collectedProgramFeesOutstanding, 0); + + // Timing is annoying to test in bankrun context due to clock warping + // assert.approximately(now, bank.lastUpdate.toNumber(), 2); + }); +}); diff --git a/tests/s03_deposit.spec.ts b/tests/s03_deposit.spec.ts new file mode 100644 index 000000000..35daf6a04 --- /dev/null +++ b/tests/s03_deposit.spec.ts @@ -0,0 +1,254 @@ +import { + AnchorProvider, + BN, + getProvider, + Program, + Wallet, + workspace, +} from "@coral-xyz/anchor"; +import { Keypair, Transaction } from "@solana/web3.js"; +import { Marginfi } from "../target/types/marginfi"; +import { + bankKeypairSol, + bankKeypairUsdc, + bankrunContext, + bankrunProgram, + banksClient, + ecosystem, + marginfiGroup, + users, + validators, +} from "./rootHooks"; +import { assertBankrunTxFailed, assertKeysEqual } from "./utils/genericTests"; +import { assert } from "chai"; +import { accountInit, depositIx } from "./utils/user-instructions"; +import { LST_ATA, USER_ACCOUNT } from "./utils/mocks"; +import { createMintToInstruction } from "@solana/spl-token"; +import { getBankrunBlockhash } from "./utils/spl-staking-utils"; + +describe("Deposit funds (included staked assets)", () => { + const program = workspace.Marginfi as Program; + const provider = getProvider() as AnchorProvider; + const wallet = provider.wallet as Wallet; + + it("(Fund user 0 and user 1 USDC/WSOL token accounts", async () => { + let tx = new Transaction(); + for (let i = 0; i < users.length; i++) { + // Note: WSOL is really just an spl token in this implementation, we don't simulate the + // exchange of SOL for WSOL, but that doesn't really matter. + tx.add( + createMintToInstruction( + ecosystem.wsolMint.publicKey, + users[i].wsolAccount, + wallet.publicKey, + 100 * 10 ** ecosystem.wsolDecimals + ) + ); + tx.add( + createMintToInstruction( + ecosystem.usdcMint.publicKey, + users[i].usdcAccount, + wallet.publicKey, + 10000 * 10 ** ecosystem.usdcDecimals + ) + ); + } + tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); + tx.sign(wallet.payer); + await banksClient.processTransaction(tx); + }); + + it("Initialize user accounts", async () => { + for (let i = 0; i < users.length; i++) { + const userAccKeypair = Keypair.generate(); + const userAccount = userAccKeypair.publicKey; + users[i].accounts.set(USER_ACCOUNT, userAccount); + + let user1Tx: Transaction = new Transaction(); + user1Tx.add( + await accountInit(program, { + marginfiGroup: marginfiGroup.publicKey, + marginfiAccount: userAccount, + authority: users[i].wallet.publicKey, + feePayer: users[i].wallet.publicKey, + }) + ); + user1Tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); + user1Tx.sign(users[i].wallet, userAccKeypair); + await banksClient.processTransaction(user1Tx); + } + }); + + it("(user 0) deposit USDC to bank - happy path", async () => { + const user = users[0]; + const userAccount = user.accounts.get(USER_ACCOUNT); + + let tx = new Transaction().add( + await depositIx(program, { + marginfiGroup: marginfiGroup.publicKey, + marginfiAccount: userAccount, + authority: user.wallet.publicKey, + bank: bankKeypairUsdc.publicKey, + tokenAccount: user.usdcAccount, + amount: new BN(10 * 10 ** ecosystem.usdcDecimals), + }) + ); + + tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); + tx.sign(user.wallet); + await banksClient.tryProcessTransaction(tx); + + // Verify the deposit worked and the account exists + const userAcc = await bankrunProgram.account.marginfiAccount.fetch( + userAccount + ); + const balances = userAcc.lendingAccount.balances; + assert.equal(balances[0].active, true); + assertKeysEqual(balances[0].bankPk, bankKeypairUsdc.publicKey); + }); + + it("(user 0) cannot deposit to staked bank if regular deposits exists - should fail", async () => { + const user = users[0]; + const userAccount = user.accounts.get(USER_ACCOUNT); + const userLstAta = user.accounts.get(LST_ATA); + + let tx = new Transaction().add( + await depositIx(program, { + marginfiGroup: marginfiGroup.publicKey, + marginfiAccount: userAccount, + authority: user.wallet.publicKey, + bank: validators[0].bank, + tokenAccount: userLstAta, + amount: new BN(1 * 10 ** ecosystem.wsolDecimals), + }) + ); + + tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); + tx.sign(user.wallet); + let result = await banksClient.tryProcessTransaction(tx); + // AssetTagMismatch + assertBankrunTxFailed(result, "0x17a1"); + + // Verify the deposit failed and the entry does not exist + const userAcc = await bankrunProgram.account.marginfiAccount.fetch( + userAccount + ); + const balances = userAcc.lendingAccount.balances; + assert.equal(balances[1].active, false); + }); + + it("(user 1) deposits SOL to SOL bank - happy path", async () => { + const user = users[1]; + const userAccount = user.accounts.get(USER_ACCOUNT); + + let tx = new Transaction().add( + await depositIx(program, { + marginfiGroup: marginfiGroup.publicKey, + marginfiAccount: userAccount, + authority: user.wallet.publicKey, + bank: bankKeypairSol.publicKey, + tokenAccount: user.wsolAccount, + amount: new BN(2 * 10 ** ecosystem.wsolDecimals), + }) + ); + + tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); + tx.sign(user.wallet); + await banksClient.tryProcessTransaction(tx); + + // Verify the deposit worked and the account exists + const userAcc = await bankrunProgram.account.marginfiAccount.fetch( + userAccount + ); + const balances = userAcc.lendingAccount.balances; + assert.equal(balances[0].active, true); + assertKeysEqual(balances[0].bankPk, bankKeypairSol.publicKey); + }); + + it("(user 1) deposits to staked bank - should succeed (SOL co-mingle is allowed)", async () => { + const user = users[1]; + const userAccount = user.accounts.get(USER_ACCOUNT); + const userLstAta = user.accounts.get(LST_ATA); + + let tx = new Transaction().add( + await depositIx(program, { + marginfiGroup: marginfiGroup.publicKey, + marginfiAccount: userAccount, + authority: user.wallet.publicKey, + bank: validators[0].bank, + tokenAccount: userLstAta, + amount: new BN(1 * 10 ** ecosystem.wsolDecimals), + }) + ); + + tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); + tx.sign(user.wallet); + await banksClient.tryProcessTransaction(tx); + + // Verify the deposit worked and the entry exists + const userAcc = await bankrunProgram.account.marginfiAccount.fetch( + userAccount + ); + const balances = userAcc.lendingAccount.balances; + assert.equal(balances[1].active, true); + assertKeysEqual(balances[1].bankPk, validators[0].bank); + }); + + it("(user 1) cannot deposit to regular banks (USDC) with staked assets - should fail", async () => { + const user = users[1]; + const userAccount = user.accounts.get(USER_ACCOUNT); + + let tx = new Transaction().add( + await depositIx(program, { + marginfiGroup: marginfiGroup.publicKey, + marginfiAccount: userAccount, + authority: user.wallet.publicKey, + bank: bankKeypairUsdc.publicKey, + tokenAccount: user.usdcAccount, + amount: new BN(1 * 10 ** ecosystem.usdcDecimals), + }) + ); + + tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); + tx.sign(user.wallet); + let result = await banksClient.tryProcessTransaction(tx); + // AssetTagMismatch + assertBankrunTxFailed(result, "0x17a1"); + + // Verify the deposit failed and the entry does not exist + const userAcc = await bankrunProgram.account.marginfiAccount.fetch( + userAccount + ); + const balances = userAcc.lendingAccount.balances; + assert.equal(balances[2].active, false); + }); + + it("(user 2) deposits to staked bank - should succeed", async () => { + const user = users[2]; + const userAccount = user.accounts.get(USER_ACCOUNT); + const userLstAta = user.accounts.get(LST_ATA); + + let tx = new Transaction().add( + await depositIx(program, { + marginfiGroup: marginfiGroup.publicKey, + marginfiAccount: userAccount, + authority: user.wallet.publicKey, + bank: validators[0].bank, + tokenAccount: userLstAta, + amount: new BN(1 * 10 ** ecosystem.wsolDecimals), + }) + ); + + tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); + tx.sign(user.wallet); + await banksClient.tryProcessTransaction(tx); + + // Verify the deposit worked and the entry exists + const userAcc = await bankrunProgram.account.marginfiAccount.fetch( + userAccount + ); + const balances = userAcc.lendingAccount.balances; + assert.equal(balances[0].active, true); + assertKeysEqual(balances[0].bankPk, validators[0].bank); + }); +}); diff --git a/tests/s04_borrow.spec.ts b/tests/s04_borrow.spec.ts new file mode 100644 index 000000000..20852085f --- /dev/null +++ b/tests/s04_borrow.spec.ts @@ -0,0 +1,124 @@ +import { + AnchorProvider, + BN, + getProvider, + Program, + Wallet, + workspace, +} from "@coral-xyz/anchor"; +import { Keypair, Transaction } from "@solana/web3.js"; +import { Marginfi } from "../target/types/marginfi"; +import { + bankKeypairA, + bankKeypairSol, + bankKeypairUsdc, + bankrunContext, + bankrunProgram, + bankRunProvider, + banksClient, + ecosystem, + groupAdmin, + marginfiGroup, + numUsers, + oracles, + users, + validators, + verbose, +} from "./rootHooks"; +import { + assertBankrunTxFailed, + assertBNApproximately, + assertI80F48Approx, + assertI80F48Equal, + assertKeysEqual, + getTokenBalance, +} from "./utils/genericTests"; +import { assert } from "chai"; +import { accountInit, borrowIx, depositIx } from "./utils/user-instructions"; +import { USER_ACCOUNT } from "./utils/mocks"; +import { createMintToInstruction } from "@solana/spl-token"; +import { deriveLiquidityVault } from "./utils/pdas"; +import { getBankrunBlockhash } from "./utils/spl-staking-utils"; +import { BanksTransactionResultWithMeta } from "solana-bankrun"; + +describe("Deposit funds (included staked assets)", () => { + const program = workspace.Marginfi as Program; + + // User 0 has a USDC deposit position + // User 1 has a SOL [0] and validator 0 Staked [1] deposit position + + it("(user 0) borrows SOL against their USDC position - succeeds (SOL/regular comingle is allowed)", async () => { + const user = users[0]; + const userAccount = user.accounts.get(USER_ACCOUNT); + + let tx = new Transaction().add( + await borrowIx(program, { + marginfiGroup: marginfiGroup.publicKey, + marginfiAccount: userAccount, + authority: user.wallet.publicKey, + bank: bankKeypairSol.publicKey, + tokenAccount: user.wsolAccount, + remaining: [ + bankKeypairUsdc.publicKey, + oracles.usdcOracle.publicKey, + bankKeypairSol.publicKey, + oracles.wsolOracle.publicKey, + ], + amount: new BN(0.01 * 10 ** ecosystem.wsolDecimals), + }) + ); + tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); + tx.sign(user.wallet); + await banksClient.processTransaction(tx); + + const userAcc = await bankrunProgram.account.marginfiAccount.fetch( + userAccount + ); + const balances = userAcc.lendingAccount.balances; + assert.equal(balances[1].active, true); + assertKeysEqual(balances[1].bankPk, bankKeypairSol.publicKey); + }); + + // Note: Borrowing STAKED assets is generally forbidden (their borrow cap is set to 0) + // If we ever change this, add a test here to validate user 0 cannot borrow staked assets + + it("(user 1) tries to borrow USDC - should fail (Regular assets cannot comingle with Staked)", async () => { + const user = users[1]; + const userAccount = user.accounts.get(USER_ACCOUNT); + + let tx = new Transaction().add( + await borrowIx(program, { + marginfiGroup: marginfiGroup.publicKey, + marginfiAccount: userAccount, + authority: user.wallet.publicKey, + bank: bankKeypairUsdc.publicKey, + tokenAccount: user.usdcAccount, + remaining: [ + bankKeypairSol.publicKey, + oracles.wsolOracle.publicKey, + validators[0].bank, + oracles.wsolOracle.publicKey, // Note the Staked bank uses wsol oracle too + validators[0].splMint, + validators[0].splSolPool, + bankKeypairUsdc.publicKey, + oracles.usdcOracle.publicKey, + ], + amount: new BN(0.1 * 10 ** ecosystem.usdcDecimals), + }) + ); + tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); + tx.sign(user.wallet); + let result = await banksClient.tryProcessTransaction(tx); + // AssetTagMismatch + assertBankrunTxFailed(result, "0x17a1"); + + // Verify the deposit worked and the entry does not exist + const userAcc = await bankrunProgram.account.marginfiAccount.fetch( + userAccount + ); + const balances = userAcc.lendingAccount.balances; + assert.equal(balances[2].active, false); + }); + + // TODO withdraw user 1's SOL collateral and verify they can borrow SOL +}); diff --git a/tests/s05_solAppreciates.spec.ts b/tests/s05_solAppreciates.spec.ts new file mode 100644 index 000000000..36b2885c2 --- /dev/null +++ b/tests/s05_solAppreciates.spec.ts @@ -0,0 +1,195 @@ +import { + AnchorProvider, + BN, + getProvider, + Program, + Wallet, + workspace, +} from "@coral-xyz/anchor"; +import { LAMPORTS_PER_SOL, SystemProgram, Transaction } from "@solana/web3.js"; +import { Marginfi } from "../target/types/marginfi"; +import { + bankKeypairSol, + bankrunContext, + bankrunProgram, + banksClient, + ecosystem, + marginfiGroup, + oracles, + users, + validators, + verbose, +} from "./rootHooks"; +import { + assertBankrunTxFailed, + assertI80F48Approx, + assertKeysEqual, +} from "./utils/genericTests"; +import { assert } from "chai"; +import { borrowIx } from "./utils/user-instructions"; +import { USER_ACCOUNT } from "./utils/mocks"; +import { getBankrunBlockhash } from "./utils/spl-staking-utils"; +import { wrappedI80F48toBigNumber } from "@mrgnlabs/mrgn-common"; +import { dumpBankrunLogs } from "./utils/tools"; + +describe("Borrow power grows as v0 Staked SOL gains value from appreciation", () => { + const program = workspace.Marginfi as Program; + const provider = getProvider() as AnchorProvider; + const wallet = provider.wallet as Wallet; + + // User 2 has a validator 0 staked depost [0] position - net value = 1 LST token + // Users 0/1/2 deposited 10 SOL each, so a total of 30 is staked with validator 0 + /** SOL to add to the validator as pretend-earned epoch rewards */ + const appreciation = 30; + + it("(user 2) tries to borrow 1.1 SOL against 1 v0 STAKED - fails, not enough funds", async () => { + const user = users[2]; + const userAccount = user.accounts.get(USER_ACCOUNT); + + let tx = new Transaction().add( + await borrowIx(program, { + marginfiGroup: marginfiGroup.publicKey, + marginfiAccount: userAccount, + authority: user.wallet.publicKey, + bank: bankKeypairSol.publicKey, + tokenAccount: user.wsolAccount, + remaining: [ + validators[0].bank, + oracles.wsolOracle.publicKey, + validators[0].splMint, + validators[0].splSolPool, + bankKeypairSol.publicKey, + oracles.wsolOracle.publicKey, + ], + amount: new BN(1.1 * 10 ** ecosystem.wsolDecimals), + }) + ); + tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); + tx.sign(user.wallet); + let result = await banksClient.tryProcessTransaction(tx); + + // 6010 (Generic risk engine rejection) + assertBankrunTxFailed(result, "0x177a"); + + const userAcc = await bankrunProgram.account.marginfiAccount.fetch( + userAccount + ); + const balances = userAcc.lendingAccount.balances; + assert.equal(balances[1].active, false); + }); + + // Note: there is also some natural appreciation here because a few epochs have elapsed... + + // Here we mock epoch rewards by simply minting SOL into the validator's pool without staking + it("v0 stake grows by " + appreciation + " SOL", async () => { + let tx = new Transaction(); + tx.add( + SystemProgram.transfer({ + fromPubkey: wallet.publicKey, + toPubkey: validators[0].splSolPool, + lamports: appreciation * LAMPORTS_PER_SOL, + }) + ); + tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); + tx.sign(wallet.payer); + await banksClient.processTransaction(tx); + }); + + it("(user 2 - attacker) ties to sneak in bad lst mint - should fail", async () => { + const user = users[2]; + const userAccount = user.accounts.get(USER_ACCOUNT); + let tx = new Transaction().add( + await borrowIx(program, { + marginfiGroup: marginfiGroup.publicKey, + marginfiAccount: userAccount, + authority: user.wallet.publicKey, + bank: bankKeypairSol.publicKey, + tokenAccount: user.wsolAccount, + remaining: [ + validators[0].bank, + oracles.wsolOracle.publicKey, + validators[1].splMint, // Bad mint + validators[0].splSolPool, + bankKeypairSol.publicKey, + oracles.wsolOracle.publicKey, + ], + amount: new BN(0.1 * 10 ** ecosystem.wsolDecimals), + }) + ); + tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); + tx.sign(user.wallet); + let result = await banksClient.tryProcessTransaction(tx); + + // Throws 6007 (InvalidOracleAccount) first at `try_from_bank_config_with_max_age` which is + // converted to 6010 (Generic risk engine rejection) downstream + assertBankrunTxFailed(result, "0x177a"); + }); + + it("(user 2 - attacker) ties to sneak in bad sol pool - should fail", async () => { + const user = users[2]; + const userAccount = user.accounts.get(USER_ACCOUNT); + let tx = new Transaction().add( + await borrowIx(program, { + marginfiGroup: marginfiGroup.publicKey, + marginfiAccount: userAccount, + authority: user.wallet.publicKey, + bank: bankKeypairSol.publicKey, + tokenAccount: user.wsolAccount, + remaining: [ + validators[0].bank, + oracles.wsolOracle.publicKey, + validators[0].splMint, + validators[1].splSolPool, // Bad pool + bankKeypairSol.publicKey, + oracles.wsolOracle.publicKey, + ], + amount: new BN(0.2 * 10 ** ecosystem.wsolDecimals), + }) + ); + tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); + tx.sign(user.wallet); + let result = await banksClient.tryProcessTransaction(tx); + + // Throws 6007 (InvalidOracleAccount) first at `try_from_bank_config_with_max_age` which is + // converted to 6010 (Generic risk engine rejection) downstream + assertBankrunTxFailed(result, "0x177a"); + }); + + // The account is now worth enough for this borrow to succeed! + it("(user 2) borrows 1.1 SOL against their STAKED position - succeeds", async () => { + const user = users[2]; + const userAccount = user.accounts.get(USER_ACCOUNT); + let tx = new Transaction().add( + await borrowIx(program, { + marginfiGroup: marginfiGroup.publicKey, + marginfiAccount: userAccount, + authority: user.wallet.publicKey, + bank: bankKeypairSol.publicKey, + tokenAccount: user.wsolAccount, + remaining: [ + validators[0].bank, + oracles.wsolOracle.publicKey, + validators[0].splMint, + validators[0].splSolPool, + bankKeypairSol.publicKey, + oracles.wsolOracle.publicKey, + ], + // Note: We use a different (slightly higher) amount, so Bankrun treats this as a different + // tx. Using the exact same values as above can cause the test to fail on faster machines + // because the same tx was already sent for this blockhash (i.e. "this transaction has + // already been processed") + amount: new BN(1.111 * 10 ** ecosystem.wsolDecimals), + }) + ); + tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); + tx.sign(user.wallet); + await banksClient.processTransaction(tx); + + const userAcc = await bankrunProgram.account.marginfiAccount.fetch( + userAccount + ); + const balances = userAcc.lendingAccount.balances; + assert.equal(balances[1].active, true); + assertKeysEqual(balances[1].bankPk, bankKeypairSol.publicKey); + }); +}); diff --git a/tests/s06_propagateSets.spec.ts b/tests/s06_propagateSets.spec.ts new file mode 100644 index 000000000..1d69552eb --- /dev/null +++ b/tests/s06_propagateSets.spec.ts @@ -0,0 +1,182 @@ +import { workspace, Program } from "@coral-xyz/anchor"; +import { PublicKey, Transaction } from "@solana/web3.js"; +import BN from "bn.js"; +import { Marginfi } from "../target/types/marginfi"; +import { + marginfiGroup, + validators, + groupAdmin, + oracles, + bankrunContext, + banksClient, + bankrunProgram, +} from "./rootHooks"; +import { + editStakedSettings, + propagateStakedSettings, +} from "./utils/group-instructions"; +import { deriveBankWithSeed, deriveStakedSettings } from "./utils/pdas"; +import { getBankrunBlockhash } from "./utils/spl-staking-utils"; +import { bigNumberToWrappedI80F48 } from "@mrgnlabs/mrgn-common"; +import { assert } from "chai"; +import { + assertKeysEqual, + assertI80F48Approx, + assertBNEqual, + assertBankrunTxFailed, +} from "./utils/genericTests"; +import { + defaultStakedInterestSettings, + StakedSettingsEdit, +} from "./utils/types"; + +describe("Edit and propagate staked settings", () => { + const program = workspace.Marginfi as Program; + + let settingsKey: PublicKey; + let bankKey: PublicKey; + + before(async () => { + [settingsKey] = deriveStakedSettings( + program.programId, + marginfiGroup.publicKey + ); + [bankKey] = deriveBankWithSeed( + program.programId, + marginfiGroup.publicKey, + validators[0].splMint, + new BN(0) + ); + }); + + it("(admin) edits some settings - happy path", async () => { + const settings: StakedSettingsEdit = { + oracle: oracles.usdcOracle.publicKey, + assetWeightInit: bigNumberToWrappedI80F48(0.2), + assetWeightMaint: bigNumberToWrappedI80F48(0.3), + depositLimit: new BN(42), + totalAssetValueInitLimit: new BN(43), + oracleMaxAge: 44, + riskTier: { + collateral: undefined, + }, + }; + let tx = new Transaction().add( + await editStakedSettings(groupAdmin.mrgnProgram, { + settingsKey: settingsKey, + settings: settings, + }) + ); + tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); + tx.sign(groupAdmin.wallet); + await banksClient.processTransaction(tx); + + let settingsAcc = await bankrunProgram.account.stakedSettings.fetch( + settingsKey + ); + assertKeysEqual(settingsAcc.key, settingsKey); + assertKeysEqual(settingsAcc.oracle, oracles.usdcOracle.publicKey); + assertI80F48Approx(settingsAcc.assetWeightInit, 0.2); + assertI80F48Approx(settingsAcc.assetWeightMaint, 0.3); + assertBNEqual(settingsAcc.depositLimit, 42); + assertBNEqual(settingsAcc.totalAssetValueInitLimit, 43); + assert.equal(settingsAcc.oracleMaxAge, 44); + assert.deepEqual(settingsAcc.riskTier, { collateral: {} }); + }); + + it("(permissionless) Propagate staked settings to a bank - happy path", async () => { + let tx = new Transaction(); + tx.add( + await propagateStakedSettings(program, { + settings: settingsKey, + bank: bankKey, + oracle: oracles.usdcOracle.publicKey, + }) + ); + tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); + tx.sign(groupAdmin.wallet); // just to the pay the fee + let result = await banksClient.tryProcessTransaction(tx); + + const bank = await bankrunProgram.account.bank.fetch(bankKey); + const config = bank.config; + assertKeysEqual(config.oracleKeys[0], oracles.usdcOracle.publicKey); + assertI80F48Approx(config.assetWeightInit, 0.2); + assertI80F48Approx(config.assetWeightMaint, 0.3); + assertBNEqual(config.depositLimit, 42); + assertBNEqual(config.totalAssetValueInitLimit, 43); + assert.equal(config.oracleMaxAge, 44); + assert.deepEqual(config.riskTier, { collateral: {} }); + }); + + it("(admin) sets a bad oracle - fails at propagation", async () => { + const settings: StakedSettingsEdit = { + oracle: PublicKey.default, + assetWeightInit: null, + assetWeightMaint: null, + depositLimit: null, + totalAssetValueInitLimit: null, + oracleMaxAge: null, + riskTier: null, + }; + let tx = new Transaction().add( + await editStakedSettings(groupAdmin.mrgnProgram, { + settingsKey: settingsKey, + settings: settings, + }) + ); + tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); + tx.sign(groupAdmin.wallet); + await banksClient.processTransaction(tx); + + let settingsAcc = await bankrunProgram.account.stakedSettings.fetch( + settingsKey + ); + assertKeysEqual(settingsAcc.oracle, PublicKey.default); + + tx = new Transaction(); + tx.add( + await propagateStakedSettings(program, { + settings: settingsKey, + bank: bankKey, + oracle: PublicKey.default, + }) + ); + tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); + tx.sign(groupAdmin.wallet); // just to the pay the fee + let result = await banksClient.tryProcessTransaction(tx); + + // 6007 (InvalidOracleAccount) + assertBankrunTxFailed(result, "0x1777"); + }); + + it("(admin) restores default settings - happy path", async () => { + const defaultSettings = defaultStakedInterestSettings( + oracles.wsolOracle.publicKey + ); + const settings: StakedSettingsEdit = { + oracle: defaultSettings.oracle, + assetWeightInit: defaultSettings.assetWeightInit, + assetWeightMaint: defaultSettings.assetWeightMaint, + depositLimit: defaultSettings.depositLimit, + totalAssetValueInitLimit: defaultSettings.totalAssetValueInitLimit, + oracleMaxAge: defaultSettings.oracleMaxAge, + riskTier: defaultSettings.riskTier, + }; + // Note you can pack propagates into the edit tx, so with a LUT you can easily propagate + // hundreds of banks in the same ts as edit + let tx = new Transaction().add( + await editStakedSettings(groupAdmin.mrgnProgram, { + settingsKey: settingsKey, + settings: settings, + }), + await propagateStakedSettings(program, { + settings: settingsKey, + bank: bankKey, + oracle: defaultSettings.oracle, + }) + ); + tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); + tx.sign(groupAdmin.wallet); + await banksClient.processTransaction(tx); + }); +}); diff --git a/tests/utils/genericTests.ts b/tests/utils/genericTests.ts index 56ef649f2..f9b0a2f79 100644 --- a/tests/utils/genericTests.ts +++ b/tests/utils/genericTests.ts @@ -3,9 +3,11 @@ import { WrappedI80F48, wrappedI80F48toBigNumber } from "@mrgnlabs/mrgn-common"; import type { RawAccount } from "@solana/spl-token"; import { AccountLayout } from "@solana/spl-token"; import { PublicKey } from "@solana/web3.js"; +import { BankrunProvider } from "anchor-bankrun"; import BigNumber from "bignumber.js"; import BN from "bn.js"; import { assert } from "chai"; +import { BanksTransactionResultWithMeta } from "solana-bankrun"; /** * Shorthand for `assert.equal(a.toString(), b.toString())` @@ -64,10 +66,10 @@ export const assertI80F48Equal = ( }; /** - * Shorthand to convert I80F48 to a string and compare against a BN, number, or other WrappedI80F48 within a given tolerance + * Shorthand to convert I80F48 to a BigNumber and compare against a BN, number, or other WrappedI80F48 within a given tolerance * @param a * @param b - * @param tolerance - the allowed difference between the two values + * @param tolerance - the allowed difference between the two values (default .000001) */ export const assertI80F48Approx = ( a: WrappedI80F48, @@ -92,7 +94,8 @@ export const assertI80F48Approx = ( if (diff.isGreaterThan(allowedDifference)) { throw new Error( - `Values are not approximately equal. Difference: ${diff.toString()}, Allowed Tolerance: ${tolerance}` + `Values are not approximately equal. A: ${bigA.toString()} B: ${bigB.toString()} + Difference: ${diff.toString()}, Allowed Tolerance: ${tolerance}` ); } }; @@ -131,7 +134,7 @@ export const assertBNApproximately = ( * @returns */ export const getTokenBalance = async ( - provider: AnchorProvider, + provider: AnchorProvider | BankrunProvider, account: PublicKey ) => { const accountInfo = await provider.connection.getAccountInfo(account); @@ -173,3 +176,23 @@ export const waitUntil = async ( const toWait = Math.ceil(time - now) * 1000; await new Promise((r) => setTimeout(r, toWait)); }; + +/** + * Assert a bankrun Tx executed with `tryProcessTransaction` failed with the expected error code. + * Throws an error if the tx succeeded or a different error was found. + * @param result + * @param expectedErrorCode - In hex, as you see in Anchor logs, e.g. for error 6047 pass `0x179f` + */ +export const assertBankrunTxFailed = ( + result: BanksTransactionResultWithMeta, + expectedErrorCode: string +) => { + expectedErrorCode = expectedErrorCode.toLocaleLowerCase(); + assert(result.meta.logMessages.length > 0); + assert(result.result, "TX succeeded when it should have failed"); + const lastLog = result.meta.logMessages.pop(); + assert( + lastLog.includes(expectedErrorCode), + "\nExpected code " + expectedErrorCode + " but got: " + lastLog + ); +}; diff --git a/tests/utils/group-instructions.ts b/tests/utils/group-instructions.ts new file mode 100644 index 000000000..3bf5bcb6f --- /dev/null +++ b/tests/utils/group-instructions.ts @@ -0,0 +1,451 @@ +import { BN, Program } from "@coral-xyz/anchor"; +import { AccountMeta, PublicKey, SYSVAR_RENT_PUBKEY } from "@solana/web3.js"; +import { Marginfi } from "../../target/types/marginfi"; +import { + deriveBankWithSeed, + deriveFeeVault, + deriveFeeVaultAuthority, + deriveInsuranceVault, + deriveInsuranceVaultAuthority, + deriveLiquidityVault, + deriveLiquidityVaultAuthority, + deriveStakedSettings, +} from "./pdas"; +import { + BankConfig, + BankConfigOptWithAssetTag, + SINGLE_POOL_PROGRAM_ID, + StakedSettingsConfig, + StakedSettingsEdit, +} from "./types"; +import { TOKEN_PROGRAM_ID } from "@solana/spl-token"; +import { BankConfigOptRaw } from "@mrgnlabs/marginfi-client-v2"; +import { WrappedI80F48 } from "@mrgnlabs/mrgn-common"; + +export const MAX_ORACLE_KEYS = 5; + +/** + * * admin/feePayer - must sign + * * bank - use a fresh keypair, must sign + */ +export type AddBankArgs = { + marginfiGroup: PublicKey; + admin: PublicKey; + feePayer: PublicKey; + bankMint: PublicKey; + bank: PublicKey; + config: BankConfig; +}; + +export const addBank = (program: Program, args: AddBankArgs) => { + // const id = program.programId; + // const bank = args.bank; + + // Note: oracle is passed as a key in config AND as an acc in remaining accs + const oracleMeta: AccountMeta = { + pubkey: args.config.oracleKey, + isSigner: false, + isWritable: false, + }; + + const ix = program.methods + .lendingPoolAddBank({ + assetWeightInit: args.config.assetWeightInit, + assetWeightMaint: args.config.assetWeightMaint, + liabilityWeightInit: args.config.liabilityWeightInit, + liabilityWeightMaint: args.config.liabilityWeightMain, + depositLimit: args.config.depositLimit, + interestRateConfig: args.config.interestRateConfig, + operationalState: args.config.operationalState, + oracleSetup: args.config.oracleSetup, + oracleKey: args.config.oracleKey, + borrowLimit: args.config.borrowLimit, + riskTier: args.config.riskTier, + assetTag: args.config.assetTag, + pad0: [0, 0, 0, 0, 0, 0], + totalAssetValueInitLimit: args.config.totalAssetValueInitLimit, + oracleMaxAge: args.config.oracleMaxAge, + }) + .accounts({ + marginfiGroup: args.marginfiGroup, + admin: args.admin, + feePayer: args.feePayer, + bankMint: args.bankMint, + bank: args.bank, + // globalFeeState: deriveGlobalFeeState(id), + // globalFeeWallet: args.globalFeeWallet, + // liquidityVaultAuthority = deriveLiquidityVaultAuthority(id, bank); + // liquidityVault = deriveLiquidityVault(id, bank); + // insuranceVaultAuthority = deriveInsuranceVaultAuthority(id, bank); + // insuranceVault = deriveInsuranceVault(id, bank); + // feeVaultAuthority = deriveFeeVaultAuthority(id, bank); + // feeVault = deriveFeeVault(id, bank); + // rent = SYSVAR_RENT_PUBKEY + tokenProgram: TOKEN_PROGRAM_ID, + // systemProgram: SystemProgram.programId, + }) + .remainingAccounts([oracleMeta]) + .instruction(); + + return ix; +}; + +/** + * newAdmin - (Optional) pass null to keep current admin + * admin - must sign, must be current admin of marginfiGroup + */ +export type GroupConfigureArgs = { + newAdmin: PublicKey | null; + marginfiGroup: PublicKey; + admin: PublicKey; +}; + +export const groupConfigure = ( + program: Program, + args: GroupConfigureArgs +) => { + const ix = program.methods + .marginfiGroupConfigure({ admin: args.newAdmin }) + .accounts({ + marginfiGroup: args.marginfiGroup, + admin: args.admin, + }) + .instruction(); + + return ix; +}; + +export type GroupInitializeArgs = { + marginfiGroup: PublicKey; + admin: PublicKey; +}; + +export const groupInitialize = ( + program: Program, + args: GroupInitializeArgs +) => { + const ix = program.methods + .marginfiGroupInitialize() + .accounts({ + marginfiGroup: args.marginfiGroup, + // feeState: deriveGlobalFeeState(id), + admin: args.admin, + // systemProgram: SystemProgram.programId, + }) + .instruction(); + + return ix; +}; + +export type ConfigureBankArgs = { + marginfiGroup: PublicKey; + admin: PublicKey; + bank: PublicKey; + bankConfigOpt: BankConfigOptWithAssetTag; // BankConfigOptRaw + assetTag +}; + +export const configureBank = ( + program: Program, + args: ConfigureBankArgs +) => { + const ix = program.methods + .lendingPoolConfigureBank(args.bankConfigOpt) + .accounts({ + marginfiGroup: args.marginfiGroup, + admin: args.admin, + bank: args.bank, + }) + .instruction(); + return ix; +}; + +export type SetupEmissionsArgs = { + marginfiGroup: PublicKey; + admin: PublicKey; + bank: PublicKey; + emissionsMint: PublicKey; + fundingAccount: PublicKey; + emissionsFlags: BN; + emissionsRate: BN; + totalEmissions: BN; +}; + +export const setupEmissions = ( + program: Program, + args: SetupEmissionsArgs +) => { + const ix = program.methods + .lendingPoolSetupEmissions( + args.emissionsFlags, + args.emissionsRate, + args.totalEmissions + ) + .accounts({ + marginfiGroup: args.marginfiGroup, + admin: args.admin, + bank: args.bank, + emissionsMint: args.emissionsMint, + // emissionsAuth: deriveEmissionsAuth() + // emissionsTokenAccount: deriveEmissionsTokenAccount() + emissionsFundingAccount: args.fundingAccount, + tokenProgram: TOKEN_PROGRAM_ID, + // systemProgram: SystemProgram.programId, + }) + .instruction(); + return ix; +}; + +export type UpdateEmissionsArgs = { + marginfiGroup: PublicKey; + admin: PublicKey; + bank: PublicKey; + emissionsMint: PublicKey; + fundingAccount: PublicKey; + emissionsFlags: BN | null; + emissionsRate: BN | null; + additionalEmissions: BN | null; +}; + +export const updateEmissions = ( + program: Program, + args: UpdateEmissionsArgs +) => { + const ix = program.methods + .lendingPoolUpdateEmissionsParameters( + args.emissionsFlags, + args.emissionsRate, + args.additionalEmissions + ) + .accounts({ + marginfiGroup: args.marginfiGroup, + admin: args.admin, + bank: args.bank, + emissionsMint: args.emissionsMint, + // emissionsAuth: deriveEmissionsAuth() + // emissionsTokenAccount: deriveEmissionsTokenAccount() + emissionsFundingAccount: args.fundingAccount, + tokenProgram: TOKEN_PROGRAM_ID, + // systemProgram: SystemProgram.programId, + }) + .instruction(); + return ix; +}; + +// ************* Below this line, not yet included in package **************** + +export type InitGlobalFeeStateArgs = { + payer: PublicKey; + admin: PublicKey; + wallet: PublicKey; + bankInitFlatSolFee: number; + programFeeFixed: WrappedI80F48; + programFeeRate: WrappedI80F48; +}; + +export const initGlobalFeeState = ( + program: Program, + args: InitGlobalFeeStateArgs +) => { + const ix = program.methods + .initGlobalFeeState( + args.admin, + args.wallet, + args.bankInitFlatSolFee, + args.programFeeFixed, + args.programFeeRate + ) + .accounts({ + payer: args.payer, + // feeState = deriveGlobalFeeState(id), + // rent = SYSVAR_RENT_PUBKEY, + // systemProgram: SystemProgram.programId, + }) + .instruction(); + + return ix; +}; + +export type EditGlobalFeeStateArgs = { + admin: PublicKey; + wallet: PublicKey; + bankInitFlatSolFee: number; + programFeeFixed: WrappedI80F48; + programFeeRate: WrappedI80F48; +}; + +// TODO add test for this +export const editGlobalFeeState = ( + program: Program, + args: EditGlobalFeeStateArgs +) => { + const ix = program.methods + .editGlobalFeeState( + args.wallet, + args.bankInitFlatSolFee, + args.programFeeFixed, + args.programFeeRate + ) + .accounts({ + globalFeeAdmin: args.admin, + // feeState = deriveGlobalFeeState(id), + }) + .instruction(); + + return ix; +}; + +// TODO propagate fee state and test + +export type InitStakedSettingsArgs = { + group: PublicKey; + feePayer: PublicKey; + settings: StakedSettingsConfig; +}; + +export const initStakedSettings = ( + program: Program, + args: InitStakedSettingsArgs +) => { + const ix = program.methods + .initStakedSettings(args.settings) + .accounts({ + marginfiGroup: args.group, + // admin: args.admin, // implied from group + feePayer: args.feePayer, + // staked_settings: deriveStakedSettings() + // rent = SYSVAR_RENT_PUBKEY, + // systemProgram: SystemProgram.programId, + }) + .instruction(); + + return ix; +}; + +export type EditStakedSettingsArgs = { + settingsKey: PublicKey; + settings: StakedSettingsEdit; +}; + +export const editStakedSettings = ( + program: Program, + args: EditStakedSettingsArgs +) => { + const ix = program.methods + .editStakedSettings(args.settings) + .accounts({ + // marginfiGroup: args.group, // implied from stakedSettings + // admin: args.admin, // implied from group + stakedSettings: args.settingsKey, + // rent = SYSVAR_RENT_PUBKEY, + // systemProgram: SystemProgram.programId, + }) + .instruction(); + + return ix; +}; + +/** + * oracle - required only if settings updates the oracle key + */ +export type PropagateStakedSettingsArgs = { + settings: PublicKey; + bank: PublicKey; + oracle?: PublicKey; +}; + +export const propagateStakedSettings = ( + program: Program, + args: PropagateStakedSettingsArgs +) => { + const remainingAccounts = args.oracle + ? [ + { + pubkey: args.oracle, + isSigner: false, + isWritable: false, + } as AccountMeta, + ] + : []; + + const ix = program.methods + .propagateStakedSettings() + .accounts({ + // marginfiGroup: args.group, // implied from stakedSettings + stakedSettings: args.settings, + bank: args.bank, + }) + .remainingAccounts(remainingAccounts) + .instruction(); + + return ix; +}; + +export type AddBankPermissionlessArgs = { + marginfiGroup: PublicKey; + feePayer: PublicKey; + pythOracle: PublicKey; + stakePool: PublicKey; + seed: BN; +}; + +export const addBankPermissionless = ( + program: Program, + args: AddBankPermissionlessArgs +) => { + const [settingsKey] = deriveStakedSettings( + program.programId, + args.marginfiGroup + ); + const [lstMint] = PublicKey.findProgramAddressSync( + [Buffer.from("mint"), args.stakePool.toBuffer()], + SINGLE_POOL_PROGRAM_ID + ); + const [solPool] = PublicKey.findProgramAddressSync( + [Buffer.from("stake"), args.stakePool.toBuffer()], + SINGLE_POOL_PROGRAM_ID + ); + + // Note: oracle and lst mint/pool are also passed in meta for validation + const oracleMeta: AccountMeta = { + pubkey: args.pythOracle, + isSigner: false, + isWritable: false, + }; + const lstMeta: AccountMeta = { + pubkey: lstMint, + isSigner: false, + isWritable: false, + }; + const solPoolMeta: AccountMeta = { + pubkey: solPool, + isSigner: false, + isWritable: false, + }; + + const ix = program.methods + .lendingPoolAddBankPermissionless(args.seed) + .accounts({ + // marginfiGroup: args.marginfiGroup, // implied from stakedSettings + stakedSettings: settingsKey, + feePayer: args.feePayer, + bankMint: lstMint, + solPool: solPool, + stakePool: args.stakePool, + // bank: bankKey, // deriveBankWithSeed + // globalFeeState: deriveGlobalFeeState(id), + // globalFeeWallet: // implied from globalFeeState, + // liquidityVaultAuthority = deriveLiquidityVaultAuthority(id, bank); + // liquidityVault = deriveLiquidityVault(id, bank); + // insuranceVaultAuthority = deriveInsuranceVaultAuthority(id, bank); + // insuranceVault = deriveInsuranceVault(id, bank); + // feeVaultAuthority = deriveFeeVaultAuthority(id, bank); + // feeVault = deriveFeeVault(id, bank); + // rent = SYSVAR_RENT_PUBKEY + tokenProgram: TOKEN_PROGRAM_ID, + // systemProgram: SystemProgram.programId, + }) + .remainingAccounts([oracleMeta, lstMeta, solPoolMeta]) + .instruction(); + + return ix; +}; diff --git a/tests/utils/mocks.ts b/tests/utils/mocks.ts index 99ab0db25..ac0398e5e 100644 --- a/tests/utils/mocks.ts +++ b/tests/utils/mocks.ts @@ -85,7 +85,7 @@ export const echoEcosystemInfo = ( /** * A typical user, with a wallet, ATAs for mock tokens, and a program to sign/send txes with. */ -export type mockUser = { +export type MockUser = { wallet: Keypair; /** Users's ATA for wsol*/ wsolAccount: PublicKey; @@ -97,8 +97,17 @@ export type mockUser = { usdcAccount: PublicKey; /** A program that uses the user's wallet */ mrgnProgram: Program | undefined; + /** A map to store arbitrary accounts related to the user using a string key */ + accounts: Map; }; +/** in mockUser.accounts, key used to get/set the users's account for group 0 */ +export const USER_ACCOUNT: string = "g0_acc"; +/** in mockUser.accounts, key used to get/set the users's LST ATA for validator 0 */ +export const LST_ATA = "v0_lstAta"; +/** in mockUser.accounts, key used to get/set the users's LST stake account for validator 0 */ +export const STAKE_ACC = "v0_stakeAcc"; + /** * Options to skip various parts of mock user setup */ @@ -200,7 +209,7 @@ export const setupTestUser = async ( await provider.sendAndConfirm(tx, [wallet]); - const user: mockUser = { + const user: MockUser = { wallet: userWalletKeypair, wsolAccount: wsolAccount, tokenAAccount: tokenAAccount, @@ -210,6 +219,7 @@ export const setupTestUser = async ( mrgnProgram: options.marginProgram ? getUserMarginfiProgram(options.marginProgram, userWalletKeypair) : undefined, + accounts: new Map(), }; return user; }; @@ -276,19 +286,19 @@ export const createSimpleMint = async ( }; export type Oracles = { - wsolOracle: Keypair, - wsolPrice: number, - wsolDecimals: number, - usdcOracle: Keypair, - usdcPrice: number, - usdcDecimals: number, - tokenAOracle: Keypair, - tokenAPrice: number, - tokenADecimals: number, - tokenBOracle: Keypair, - tokenBPrice: number, - tokenBDecimals:number, -} + wsolOracle: Keypair; + wsolPrice: number; + wsolDecimals: number; + usdcOracle: Keypair; + usdcPrice: number; + usdcDecimals: number; + tokenAOracle: Keypair; + tokenAPrice: number; + tokenADecimals: number; + tokenBOracle: Keypair; + tokenBPrice: number; + tokenBDecimals: number; +}; /** * Creates an account to store data arbitrary data. @@ -344,4 +354,21 @@ export const storeMockAccount = async ( .instruction() ); await program.provider.sendAndConfirm(tx, [wallet.payer, account]); -}; \ No newline at end of file +}; + +export type Validator = { + node: PublicKey; + authorizedVoter: PublicKey; + authorizedWithdrawer: PublicKey; + voteAccount: PublicKey; + /** The spl stake pool itself, all PDAs derive from this key */ + splPool: PublicKey; + /** spl pool's mint for the LST (a PDA automatically created on init) */ + splMint: PublicKey; + /** spl pool's authority for LST management, a PDA with no data/lamports */ + splAuthority: PublicKey; + /** spl pool's stake account (a PDA automatically created on init, contains the SOL held by the pool) */ + splSolPool: PublicKey; + /** bank created for this validator's LST on the "main" group */ + bank: PublicKey; +}; diff --git a/tests/utils/pdas.ts b/tests/utils/pdas.ts index 028b44310..3780dd11c 100644 --- a/tests/utils/pdas.ts +++ b/tests/utils/pdas.ts @@ -1,3 +1,4 @@ +import { BN } from "@coral-xyz/anchor"; import { PublicKey } from "@solana/web3.js"; export const deriveLiquidityVaultAuthority = ( @@ -51,9 +52,63 @@ export const deriveFeeVault = (programId: PublicKey, bank: PublicKey) => { ); }; +export const deriveEmissionsAuth = ( + programId: PublicKey, + bank: PublicKey, + mint: PublicKey +) => { + return PublicKey.findProgramAddressSync( + [ + Buffer.from("emissions_auth_seed", "utf-8"), + bank.toBuffer(), + mint.toBuffer(), + ], + programId + ); +}; + +export const deriveEmissionsTokenAccount = ( + programId: PublicKey, + bank: PublicKey, + mint: PublicKey +) => { + return PublicKey.findProgramAddressSync( + [ + Buffer.from("emissions_token_account_seed", "utf-8"), + bank.toBuffer(), + mint.toBuffer(), + ], + programId + ); +}; + +export const deriveBankWithSeed = ( + programId: PublicKey, + group: PublicKey, + bankMint: PublicKey, + seed: BN +) => { + return PublicKey.findProgramAddressSync( + [group.toBuffer(), bankMint.toBuffer(), seed.toArrayLike(Buffer, "le", 8)], + programId + ); +}; + +// ************* Below this line, not yet included in package **************** + export const deriveGlobalFeeState = (programId: PublicKey) => { return PublicKey.findProgramAddressSync( [Buffer.from("feestate", "utf-8")], programId ); }; + +export const deriveStakedSettings = ( + programId: PublicKey, + group: PublicKey +) => { + return PublicKey.findProgramAddressSync( + [Buffer.from("staked_settings", "utf-8"), group.toBuffer()], + programId + ); +}; diff --git a/tests/utils/pyth_mocks.ts b/tests/utils/pyth_mocks.ts index 929a9c755..23ef1b94c 100644 --- a/tests/utils/pyth_mocks.ts +++ b/tests/utils/pyth_mocks.ts @@ -1,4 +1,9 @@ -// Adapted from PsyLend +// TODO the Price struct has changed a bit since this copy-pasta was generated some time ago, +// however price and ema price/expo/conf are in the same spot, so if those are all you need, there's +// no need to update (all modern changes are backwards compatible, new versions of Pyth on-chain +// will still deserialize the price data) + +// Adapated from PsyLend, Jet labs, etc import { Program, Wallet, workspace } from "@coral-xyz/anchor"; import { Keypair, PublicKey } from "@solana/web3.js"; import { Oracles, createMockAccount, storeMockAccount } from "./mocks"; @@ -289,6 +294,10 @@ export const writeProductBuffer = ( * @param wsolDecimals * @param usdcPrice * @param usdcDecimals + * @param tokenAPrice: + * @param tokenADecimals: + * @param tokenBPrice: + * @param tokenBDecimals: * @param verbose * @param skips - set to true to skip sending txes, which makes tests run faster if you don't need * those oracles. diff --git a/tests/utils/spl-staking-utils.ts b/tests/utils/spl-staking-utils.ts new file mode 100644 index 000000000..3893af339 --- /dev/null +++ b/tests/utils/spl-staking-utils.ts @@ -0,0 +1,151 @@ +import { + findPoolMintAddress, + findPoolStakeAuthorityAddress, + SinglePoolInstruction, +} from "@solana/spl-single-pool-classic"; +import { + createAssociatedTokenAccountInstruction, + getAssociatedTokenAddressSync, +} from "@solana/spl-token"; +import { + Connection, + PublicKey, + StakeAuthorizationLayout, + StakeProgram, + TransactionInstruction, +} from "@solana/web3.js"; +import { SINGLE_POOL_PROGRAM_ID } from "./types"; +import { ProgramTestContext } from "solana-bankrun"; + +export enum SinglePoolAccountType { + Uninitialized = 0, + Pool = 1, +} + +export type SinglePool = { + accountType: SinglePoolAccountType; + voteAccountAddress: PublicKey; +}; + +const decodeSinglePoolAccountType = (buffer: Buffer, offset: number) => { + const accountType = buffer.readUInt8(offset); + if (accountType === 0) { + return SinglePoolAccountType.Uninitialized; + } else if (accountType === 1) { + return SinglePoolAccountType.Pool; + } else { + throw new Error("Unknown SinglePoolAccountType"); + } +}; + +/** + * Decode an spl single pool from buffer. + * + * Get the data buffer with `const data = (await provider.connection.getAccountInfo(poolKey)).data;` + * and note that there is no discriminator (i.e. pass data directly without additional slicing) + */ +export const decodeSinglePool = (buffer: Buffer) => { + let offset = 0; + + const accountType = decodeSinglePoolAccountType(buffer, offset); + offset += 1; + + const voteAccountAddress = new PublicKey( + buffer.subarray(offset, offset + 32) + ); + offset += 32; + + return { + accountType, + voteAccountAddress, + }; +}; + +// See `https://www.npmjs.com/package/@solana/spl-single-pool` transactions.ts for the original + +/** + * Builds ixes to create the LST ata as-needed, pass stake authority to the spl pool, and deposit to + * the stake pool + * @param connection + * @param userWallet + * @param splPool + * @param userStakeAccount + * @param verbose + * @returns + */ +export const depositToSinglePoolIxes = async ( + connection: Connection, + userWallet: PublicKey, + splPool: PublicKey, + userStakeAccount: PublicKey, + verbose: boolean = false +) => { + const splMint = await findPoolMintAddress(SINGLE_POOL_PROGRAM_ID, splPool); + + const splAuthority = await findPoolStakeAuthorityAddress( + SINGLE_POOL_PROGRAM_ID, + splPool + ); + + const ixes: TransactionInstruction[] = []; + const lstAta = getAssociatedTokenAddressSync(splMint, userWallet); + try { + await connection.getAccountInfo(lstAta); + if (verbose) { + console.log("Existing LST ata at: " + lstAta); + } + } catch (err) { + if (verbose) { + console.log("Failed to find ata, creating: " + lstAta); + } + ixes.push( + createAssociatedTokenAccountInstruction( + userWallet, + lstAta, + userWallet, + splMint + ) + ); + } + + const authorizeStakerIxes = StakeProgram.authorize({ + stakePubkey: userStakeAccount, + authorizedPubkey: userWallet, + newAuthorizedPubkey: splAuthority, + stakeAuthorizationType: StakeAuthorizationLayout.Staker, + }).instructions; + + ixes.push(...authorizeStakerIxes); + + const authorizeWithdrawIxes = StakeProgram.authorize({ + stakePubkey: userStakeAccount, + authorizedPubkey: userWallet, + newAuthorizedPubkey: splAuthority, + stakeAuthorizationType: StakeAuthorizationLayout.Withdrawer, + }).instructions; + + ixes.push(...authorizeWithdrawIxes); + + const depositIx = await SinglePoolInstruction.depositStake( + splPool, + userStakeAccount, + lstAta, + userWallet + ); + + ixes.push(depositIx); + + return ixes; +}; + +/** + * Generally, use this instead of `bankrunContext.lastBlockhash` (which does not work if the test + * has already run for some time and the blockhash has advanced) + * @param bankrunContext + * @returns + */ +export const getBankrunBlockhash = async ( + bankrunContext: ProgramTestContext +) => { + return (await bankrunContext.banksClient.getLatestBlockhash())[0]; +}; diff --git a/tests/utils/stake-utils.ts b/tests/utils/stake-utils.ts new file mode 100644 index 000000000..a970c46ac --- /dev/null +++ b/tests/utils/stake-utils.ts @@ -0,0 +1,517 @@ +import { + Keypair, + Transaction, + SystemProgram, + StakeProgram, + PublicKey, + Connection, + SYSVAR_CLOCK_PUBKEY, +} from "@solana/web3.js"; +import { MockUser } from "./mocks"; +import { BanksClient } from "solana-bankrun"; +import { BN } from "@coral-xyz/anchor"; + +/** + * Create a stake account for some user + * @param user + * @param amount - in SOL (lamports), in native decimals + * @returns + */ +export const createStakeAccount = (user: MockUser, amount: number) => { + const stakeAccount = Keypair.generate(); + const userPublicKey = user.wallet.publicKey; + + // Create a stake account and fund it with the specified amount of SOL + const tx = new Transaction().add( + SystemProgram.createAccount({ + fromPubkey: userPublicKey, + newAccountPubkey: stakeAccount.publicKey, + lamports: amount, + space: StakeProgram.space, // Space required for a stake account + programId: StakeProgram.programId, + }), + StakeProgram.initialize({ + stakePubkey: stakeAccount.publicKey, + authorized: { + staker: userPublicKey, + withdrawer: userPublicKey, + }, + }) + ); + + return { createTx: tx, stakeAccountKeypair: stakeAccount }; +}; + +/** + * Delegate a stake account to a validator. + * @param user - wallet signs + * @param stakeAccount + * @param validatorVoteAccount + */ +export const delegateStake = ( + user: MockUser, + stakeAccount: PublicKey, + validatorVoteAccount: PublicKey +) => { + return StakeProgram.delegate({ + stakePubkey: stakeAccount, + authorizedPubkey: user.wallet.publicKey, + votePubkey: validatorVoteAccount, + }); +}; + +/** + * Delegation information for a StakeAccount + * + * Copied from https://github.com/solana-developers/solana-rpc-get-stake-activation/blob/main/web3js-1.0/src/stake.ts + * */ +export type Delegation = { + voterPubkey: PublicKey; + stake: bigint; + activationEpoch: bigint; + deactivationEpoch: bigint; +}; + +/** + * Parsed content of an on-chain StakeAccount + * + * Copied from https://github.com/solana-developers/solana-rpc-get-stake-activation/blob/main/web3js-1.0/src/stake.ts + * */ +export type StakeAccount = { + discriminant: bigint; + meta: { + rentExemptReserve: bigint; + authorized: { + staker: PublicKey; + withdrawer: PublicKey; + }; + lockup: { + unixTimestamp: bigint; + epoch: bigint; + custodian: PublicKey; + }; + }; + stake: { + delegation: { + voterPubkey: PublicKey; + stake: bigint; + activationEpoch: bigint; + deactivationEpoch: bigint; + }; + creditsObserved: bigint; + }; +}; + +/** + * Decode a StakeAccount from parsed account data. + * + * Copied from https://github.com/solana-developers/solana-rpc-get-stake-activation/blob/main/web3js-1.0/src/stake.ts + * */ +export const getStakeAccount = function (data: Buffer): StakeAccount { + let offset = 0; + + // Discriminant (4 bytes) + const discriminant = data.readBigUInt64LE(offset); + offset += 4; + + // Meta + const rentExemptReserve = data.readBigUInt64LE(offset); + offset += 8; + + // Authorized staker and withdrawer (2 public keys) + const staker = new PublicKey(data.subarray(offset, offset + 32)); + offset += 32; + const withdrawer = new PublicKey(data.subarray(offset, offset + 32)); + offset += 32; + + // Lockup: unixTimestamp, epoch, custodian + const unixTimestamp = data.readBigUInt64LE(offset); + offset += 8; + const epoch = data.readBigUInt64LE(offset); + offset += 8; + const custodian = new PublicKey(data.subarray(offset, offset + 32)); + offset += 32; + + // Stake: Delegation + const voterPubkey = new PublicKey(data.subarray(offset, offset + 32)); + offset += 32; + const stake = data.readBigUInt64LE(offset); + offset += 8; + const activationEpoch = data.readBigUInt64LE(offset); + offset += 8; + const deactivationEpoch = data.readBigUInt64LE(offset); + offset += 8; + + // Credits observed + const creditsObserved = data.readBigUInt64LE(offset); + + // Return the parsed StakeAccount object + return { + discriminant, + meta: { + rentExemptReserve, + authorized: { + staker, + withdrawer, + }, + lockup: { + unixTimestamp, + epoch, + custodian, + }, + }, + stake: { + delegation: { + voterPubkey, + stake, + activationEpoch, + deactivationEpoch, + }, + creditsObserved, + }, + }; +}; + +/** + * Parsed content of an on-chain Stake History Entry + * + * Copied from https://github.com/solana-developers/solana-rpc-get-stake-activation/blob/main/web3js-1.0/src/stake.ts + * */ +export type StakeHistoryEntry = { + epoch: bigint; + effective: bigint; + activating: bigint; + deactivating: bigint; +}; + +/** + * Decode a StakeHistoryEntry from parsed account data. + * + * Copied from https://github.com/solana-developers/solana-rpc-get-stake-activation/blob/main/web3js-1.0/src/stake.ts + * and modified to directly read from buffer + * */ +export const getStakeHistory = function (data: Buffer): StakeHistoryEntry[] { + // Note: Is just `Vec<(Epoch, StakeHistoryEntry)>` internally + const stakeHistory: StakeHistoryEntry[] = []; + const entrySize = 32; // Each entry is 32 bytes (4 x 8-byte u64 fields) + + for ( + // skip the first 8 bytes for the Vec overhead + let offset = 8; + offset + entrySize < data.length; + offset += entrySize + ) { + const epoch = data.readBigUInt64LE(offset); // Note `epoch` is just a u64 renamed + const effective = data.readBigUInt64LE(offset + 8); // u64 effective + const activating = data.readBigUInt64LE(offset + 16); // u64 activating + const deactivating = data.readBigUInt64LE(offset + 24); // u64 deactivating + + // if (epoch < 10 && offset < 300) { + // console.log("epoch " + epoch); + // console.log("e " + effective); + // console.log("a " + activating); + // console.log("d " + deactivating); + // } + + stakeHistory.push({ + epoch, + effective, + activating, + deactivating, + }); + } + + return stakeHistory; +}; + +/** + * Representation of on-chain stake + * + * Copied from https://github.com/solana-developers/solana-rpc-get-stake-activation/blob/main/web3js-1.0/src/delegation.ts + */ +export interface StakeActivatingAndDeactivating { + effective: bigint; + activating: bigint; + deactivating: bigint; +} + +/** + * Representation of on-chain stake excluding deactivating stake + * + * Copied from https://github.com/solana-developers/solana-rpc-get-stake-activation/blob/main/web3js-1.0/src/delegation.ts + */ +export interface EffectiveAndActivating { + effective: bigint; + activating: bigint; +} + +/** + * Get stake histories for a given epoch + * + * Copied from https://github.com/solana-developers/solana-rpc-get-stake-activation/blob/main/web3js-1.0/src/delegation.ts + */ +function getStakeHistoryEntry( + epoch: bigint, + stakeHistory: StakeHistoryEntry[] +): StakeHistoryEntry | null { + for (const entry of stakeHistory) { + if (entry.epoch === epoch) { + return entry; + } + } + return null; +} + +const WARMUP_COOLDOWN_RATE = 0.09; + +/** + * Get on-chain status of activating stake + * + * Copied from https://github.com/solana-developers/solana-rpc-get-stake-activation/blob/main/web3js-1.0/src/delegation.ts + */ +export function getStakeAndActivating( + delegation: Delegation, + targetEpoch: bigint, + stakeHistory: StakeHistoryEntry[] +): EffectiveAndActivating { + if (delegation.activationEpoch === delegation.deactivationEpoch) { + // activated but instantly deactivated; no stake at all regardless of target_epoch + return { + effective: BigInt(0), + activating: BigInt(0), + }; + } else if (targetEpoch === delegation.activationEpoch) { + // all is activating + return { + effective: BigInt(0), + activating: delegation.stake, + }; + } else if (targetEpoch < delegation.activationEpoch) { + // not yet enabled + return { + effective: BigInt(0), + activating: BigInt(0), + }; + } + + let currentEpoch = delegation.activationEpoch; + let entry = getStakeHistoryEntry(currentEpoch, stakeHistory); + if (entry !== null) { + // target_epoch > self.activation_epoch + + // loop from my activation epoch until the target epoch summing up my entitlement + // current effective stake is updated using its previous epoch's cluster stake + let currentEffectiveStake = BigInt(0); + while (entry !== null) { + currentEpoch++; + const remaining = delegation.stake - currentEffectiveStake; + const weight = Number(remaining) / Number(entry.activating); + const newlyEffectiveClusterStake = + Number(entry.effective) * WARMUP_COOLDOWN_RATE; + const newlyEffectiveStake = BigInt( + Math.max(1, Math.round(weight * newlyEffectiveClusterStake)) + ); + + currentEffectiveStake += newlyEffectiveStake; + if (currentEffectiveStake >= delegation.stake) { + currentEffectiveStake = delegation.stake; + break; + } + + if ( + currentEpoch >= targetEpoch || + currentEpoch >= delegation.deactivationEpoch + ) { + break; + } + entry = getStakeHistoryEntry(currentEpoch, stakeHistory); + } + return { + effective: currentEffectiveStake, + activating: delegation.stake - currentEffectiveStake, + }; + } else { + // no history or I've dropped out of history, so assume fully effective + return { + effective: delegation.stake, + activating: BigInt(0), + }; + } +} + +/** + * Get on-chain status of activating and deactivating stake + * + * Copied from https://github.com/solana-developers/solana-rpc-get-stake-activation/blob/main/web3js-1.0/src/delegation.ts + */ +export function getStakeActivatingAndDeactivating( + delegation: Delegation, + targetEpoch: bigint, + stakeHistory: StakeHistoryEntry[] +): StakeActivatingAndDeactivating { + const { effective, activating } = getStakeAndActivating( + delegation, + targetEpoch, + stakeHistory + ); + + // then de-activate some portion if necessary + if (targetEpoch < delegation.deactivationEpoch) { + return { + effective, + activating, + deactivating: BigInt(0), + }; + } else if (targetEpoch == delegation.deactivationEpoch) { + // can only deactivate what's activated + return { + effective, + activating: BigInt(0), + deactivating: effective, + }; + } + let currentEpoch = delegation.deactivationEpoch; + let entry = getStakeHistoryEntry(currentEpoch, stakeHistory); + if (entry !== null) { + // target_epoch > self.activation_epoch + // loop from my deactivation epoch until the target epoch + // current effective stake is updated using its previous epoch's cluster stake + let currentEffectiveStake = effective; + while (entry !== null) { + currentEpoch++; + // if there is no deactivating stake at prev epoch, we should have been + // fully undelegated at this moment + if (entry.deactivating === BigInt(0)) { + break; + } + + // I'm trying to get to zero, how much of the deactivation in stake + // this account is entitled to take + const weight = Number(currentEffectiveStake) / Number(entry.deactivating); + + // portion of newly not-effective cluster stake I'm entitled to at current epoch + const newlyNotEffectiveClusterStake = + Number(entry.effective) * WARMUP_COOLDOWN_RATE; + const newlyNotEffectiveStake = BigInt( + Math.max(1, Math.round(weight * newlyNotEffectiveClusterStake)) + ); + + currentEffectiveStake -= newlyNotEffectiveStake; + if (currentEffectiveStake <= 0) { + currentEffectiveStake = BigInt(0); + break; + } + + if (currentEpoch >= targetEpoch) { + break; + } + entry = getStakeHistoryEntry(currentEpoch, stakeHistory); + } + + // deactivating stake should equal to all of currently remaining effective stake + return { + effective: currentEffectiveStake, + deactivating: currentEffectiveStake, + activating: BigInt(0), + }; + } else { + return { + effective: BigInt(0), + activating: BigInt(0), + deactivating: BigInt(0), + }; + } +} + +/** + * Representation of on-chain stake + * + * Copied from https://github.com/solana-developers/solana-rpc-get-stake-activation/blob/main/web3js-1.0/src/rpc.ts + */ +export interface StakeActivation { + status: string; + active: bigint; + inactive: bigint; +} + +/** + * Get on-chain stake status of a stake account (activating, inactive, etc) + * + * Copied from https://github.com/solana-developers/solana-rpc-get-stake-activation/blob/main/web3js-1.0/src/rpc.ts + */ +export async function getStakeActivation( + connection: Connection, + stakeAddress: PublicKey, + epoch: number | undefined = undefined // Added to bypass connection.getEpochInfo() when using a bankrun provider. +): Promise { + const SYSVAR_STAKE_HISTORY_ADDRESS = new PublicKey( + "SysvarStakeHistory1111111111111111111111111" + ); + const epochInfoPromise = + epoch !== undefined + ? Promise.resolve({ epoch }) + : connection.getEpochInfo(); + const [epochInfo, { stakeAccount, stakeAccountLamports }, stakeHistory] = + await Promise.all([ + epochInfoPromise, + (async () => { + const stakeAccountInfo = await connection.getAccountInfo(stakeAddress); + if (stakeAccountInfo === null) { + throw new Error("Account not found"); + } + const stakeAccount = getStakeAccount(stakeAccountInfo.data); + const stakeAccountLamports = stakeAccountInfo.lamports; + return { stakeAccount, stakeAccountLamports }; + })(), + (async () => { + const stakeHistoryInfo = await connection.getAccountInfo( + SYSVAR_STAKE_HISTORY_ADDRESS + ); + if (stakeHistoryInfo === null) { + throw new Error("StakeHistory not found"); + } + return getStakeHistory(stakeHistoryInfo.data); + })(), + ]); + + const targetEpoch = epoch ? epoch : epochInfo.epoch; + const { effective, activating, deactivating } = + getStakeActivatingAndDeactivating( + stakeAccount.stake.delegation, + BigInt(targetEpoch), + stakeHistory + ); + + let status; + if (deactivating > 0) { + status = "deactivating"; + } else if (activating > 0) { + status = "activating"; + } else if (effective > 0) { + status = "active"; + } else { + status = "inactive"; + } + const inactive = + BigInt(stakeAccountLamports) - + effective - + stakeAccount.meta.rentExemptReserve; + + return { + status, + active: effective, + inactive, + }; +} + +export const getEpochAndSlot = async (banksClient: BanksClient) => { + let clock = await banksClient.getAccount(SYSVAR_CLOCK_PUBKEY); + + // Slot is bytes 0-8 + let slot = new BN(clock.data.slice(0, 8), 10, "le").toNumber(); + + // Epoch is bytes 16-24 + let epoch = new BN(clock.data.slice(16, 24), 10, "le").toNumber(); + + return { epoch, slot }; +}; diff --git a/tests/utils/stakeCollatizer/pdas.ts b/tests/utils/stakeCollatizer/pdas.ts new file mode 100644 index 000000000..dd9fa3019 --- /dev/null +++ b/tests/utils/stakeCollatizer/pdas.ts @@ -0,0 +1,33 @@ +import { PublicKey } from "@solana/web3.js"; + +export const deriveStakeHolder = ( + programId: PublicKey, + voteAccount: PublicKey, + admin: PublicKey +) => { + return PublicKey.findProgramAddressSync( + [ + Buffer.from("stakeholder", "utf-8"), + voteAccount.toBuffer(), + admin.toBuffer(), + ], + programId + ); +}; + +export const deriveStakeHolderStakeAccount = ( + programId: PublicKey, + stakeholder: PublicKey +) => { + return PublicKey.findProgramAddressSync( + [Buffer.from("stakeacc", "utf-8"), stakeholder.toBuffer()], + programId + ); +}; + +export const deriveStakeUser = (programId: PublicKey, payer: PublicKey) => { + return PublicKey.findProgramAddressSync( + [Buffer.from("stakeuser", "utf-8"), payer.toBuffer()], + programId + ); +}; diff --git a/tests/utils/tools.ts b/tests/utils/tools.ts index 0ddcbad6b..c73355f64 100644 --- a/tests/utils/tools.ts +++ b/tests/utils/tools.ts @@ -1,3 +1,5 @@ +import { BanksTransactionResultWithMeta } from "solana-bankrun"; + /** * Function to print bytes from a Buffer in groups with column labels and color highlighting for non-zero values * @param buffer - The Buffer to process @@ -26,9 +28,11 @@ export const printBufferGroups = ( // Function to calculate RGB color based on row index const calculateGradientColor = (startIndex) => { const maxIndex = 255 * 3; - const normalizedIndex = (startIndex % maxIndex); + const normalizedIndex = startIndex % maxIndex; - let r = 0, g = 0, b = 0; + let r = 0, + g = 0, + b = 0; if (normalizedIndex < 255) { b = 255; @@ -70,9 +74,13 @@ export const printBufferGroups = ( const label = `${i.toString().padStart(3, " ")}-${(i + groupLength - 1) .toString() .padStart(3, " ")}`; - console.log( - `${color}${label}\x1b[0m | ${group.join(" | ")}` - ); + console.log(`${color}${label}\x1b[0m | ${group.join(" | ")}`); } } }; + +export const dumpBankrunLogs = (result: BanksTransactionResultWithMeta) => { + for (let i = 0; i < result.meta.logMessages.length; i++) { + console.log(i + " " + result.meta.logMessages[i]); + } +}; diff --git a/tests/utils/types.ts b/tests/utils/types.ts index 20bb0cb12..0b2b514fa 100644 --- a/tests/utils/types.ts +++ b/tests/utils/types.ts @@ -106,6 +106,7 @@ export const defaultBankConfigOptRaw = () => { riskTier: { collateral: undefined, }, + assetTag: ASSET_TAG_DEFAULT, totalAssetValueInitLimit: new BN(100_000_000_000), interestRateConfig: defaultInterestRateConfigRaw(), operationalState: { @@ -171,7 +172,7 @@ export const defaultStakedInterestSettings = (oracle: PublicKey) => { assetWeightMaint: bigNumberToWrappedI80F48(0.9), depositLimit: new BN(1_000_000_000_000), // 1000 SOL totalAssetValueInitLimit: new BN(150_000_000), - oracleMaxAge: 10, + oracleMaxAge: 60, riskTier: { collateral: undefined, }, @@ -238,6 +239,7 @@ export type BankConfigOptRaw = { depositLimit: BN | null; borrowLimit: BN | null; riskTier: { collateral: {} } | { isolated: {} } | null; + assetTag: number, totalAssetValueInitLimit: BN | null; interestRateConfig: InterestRateConfigRawWithOrigination | null; diff --git a/tests/utils/user-instructions.ts b/tests/utils/user-instructions.ts new file mode 100644 index 000000000..59f624952 --- /dev/null +++ b/tests/utils/user-instructions.ts @@ -0,0 +1,113 @@ +import { BN, Program } from "@coral-xyz/anchor"; +import { AccountMeta, PublicKey } from "@solana/web3.js"; +import { Marginfi } from "../../target/types/marginfi"; +import { TOKEN_PROGRAM_ID } from "@solana/spl-token"; + +export type AccountInitArgs = { + marginfiGroup: PublicKey; + marginfiAccount: PublicKey; + authority: PublicKey; + feePayer: PublicKey; +}; + +/** + * Init a user account for some group. + * * fee payer and authority must both sign. + * * account must be a fresh keypair and must also sign + * @param program + * @param args + * @returns + */ +export const accountInit = ( + program: Program, + args: AccountInitArgs +) => { + const ix = program.methods + .marginfiAccountInitialize() + .accounts({ + marginfiGroup: args.marginfiGroup, + marginfiAccount: args.marginfiAccount, + authority: args.authority, + feePayer: args.feePayer, + // systemProgram + }) + .instruction(); + + return ix; +}; + +export type DepositArgs = { + marginfiGroup: PublicKey; + marginfiAccount: PublicKey; + authority: PublicKey; + bank: PublicKey; + tokenAccount: PublicKey; + amount: BN; +}; + +/** + * Deposit to a bank + * * `authority` must sign and own the `tokenAccount` + * @param program + * @param args + * @returns + */ +export const depositIx = (program: Program, args: DepositArgs) => { + const ix = program.methods + .lendingAccountDeposit(args.amount) + .accounts({ + marginfiGroup: args.marginfiGroup, + marginfiAccount: args.marginfiAccount, + signer: args.authority, + bank: args.bank, + signerTokenAccount: args.tokenAccount, + // bankLiquidityVault = deriveLiquidityVault(id, bank) + tokenProgram: TOKEN_PROGRAM_ID, + }) + .instruction(); + + return ix; +}; + +export type BorrowIxArgs = { + marginfiGroup: PublicKey; + marginfiAccount: PublicKey; + authority: PublicKey; + bank: PublicKey; + tokenAccount: PublicKey; + remaining: PublicKey[]; + amount: BN; +}; + +/** + * Borrow from a bank + * * `authority` - must sign, but does not have to own the `tokenAccount` + * * `remaining` - pass bank/oracles for each bank the user is involved with, in the SAME ORDER they + * appear in userAcc.balances (e.g. `[bank0, oracle0, bank1, oracle1]`) + * @param program + * @param args + * @returns + */ +export const borrowIx = (program: Program, args: BorrowIxArgs) => { + const oracleMeta: AccountMeta[] = args.remaining.map((pubkey) => ({ + pubkey, + isSigner: false, + isWritable: false, + })); + const ix = program.methods + .lendingAccountBorrow(args.amount) + .accounts({ + marginfiGroup: args.marginfiGroup, + marginfiAccount: args.marginfiAccount, + signer: args.authority, + bank: args.bank, + destinationTokenAccount: args.tokenAccount, + // bankLiquidityVaultAuthority = deriveLiquidityVaultAuthority(id, bank); + // bankLiquidityVault = deriveLiquidityVault(id, bank) + tokenProgram: TOKEN_PROGRAM_ID, + }) + .remainingAccounts(oracleMeta) + .instruction(); + + return ix; +}; diff --git a/yarn.lock b/yarn.lock index 8436f363c..971c66a5b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,14 +2,7 @@ # yarn lockfile v1 -"@babel/runtime@^7.12.5", "@babel/runtime@^7.24.8": - version "7.25.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.25.0.tgz#3af9a91c1b739c569d5d80cc917280919c544ecb" - integrity sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw== - dependencies: - regenerator-runtime "^0.14.0" - -"@babel/runtime@^7.25.0": +"@babel/runtime@^7.12.5", "@babel/runtime@^7.25.0": version "7.26.0" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.26.0.tgz#8600c2f595f277c60815256418b85356a65173c1" integrity sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw== @@ -122,9 +115,9 @@ "@jridgewell/trace-mapping" "0.3.9" "@grpc/grpc-js@^1.8.13": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.11.1.tgz#a92f33e98f1959feffcd1b25a33b113d2c977b70" - integrity sha512-gyt/WayZrVPH2w/UTLansS7F9Nwld472JxxaETamrM8HNlsa+jSLNyKAZmhxI2Me4c3mQHFiS1wWHDY1g1Kthw== + version "1.12.4" + resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.12.4.tgz#3208808435ebf1e495f9a5c5c5a0bc3dc8c9e891" + integrity sha512-NBhrxEWnFh0FxeA0d//YP95lRFsSx2TNLEUQg4/W+5f/BMxcCjgOOIT24iD+ZB/tZw057j44DaIxja7w4XMrhg== dependencies: "@grpc/proto-loader" "^0.7.13" "@js-sdsl/ordered-map" "^4.4.2" @@ -162,6 +155,48 @@ resolved "https://registry.yarnpkg.com/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz#9299f82874bab9e4c7f9c48d865becbfe8d6907c" integrity sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw== +"@metaplex-foundation/umi-options@^0.8.9": + version "0.8.9" + resolved "https://registry.yarnpkg.com/@metaplex-foundation/umi-options/-/umi-options-0.8.9.tgz#9c9e269d9eee7d055ad6831dcb30a30127dcb0c5" + integrity sha512-jSQ61sZMPSAk/TXn8v8fPqtz3x8d0/blVZXLLbpVbo2/T5XobiI6/MfmlUosAjAUaQl6bHRF8aIIqZEFkJiy4A== + +"@metaplex-foundation/umi-public-keys@^0.8.9": + version "0.8.9" + resolved "https://registry.yarnpkg.com/@metaplex-foundation/umi-public-keys/-/umi-public-keys-0.8.9.tgz#ca7a927c924ed8e28d0f8bb3dc0f2adc1f9011ec" + integrity sha512-CxMzN7dgVGOq9OcNCJe2casKUpJ3RmTVoOvDFyeoTQuK+vkZ1YSSahbqC1iGuHEtKTLSjtWjKvUU6O7zWFTw3Q== + dependencies: + "@metaplex-foundation/umi-serializers-encodings" "^0.8.9" + +"@metaplex-foundation/umi-serializers-core@^0.8.9": + version "0.8.9" + resolved "https://registry.yarnpkg.com/@metaplex-foundation/umi-serializers-core/-/umi-serializers-core-0.8.9.tgz#cd5ae763a59e54dd01f1284f4a6bf4e78e4aab9c" + integrity sha512-WT82tkiYJ0Qmscp7uTj1Hz6aWQPETwaKLAENAUN5DeWghkuBKtuxyBKVvEOuoXerJSdhiAk0e8DWA4cxcTTQ/w== + +"@metaplex-foundation/umi-serializers-encodings@^0.8.9": + version "0.8.9" + resolved "https://registry.yarnpkg.com/@metaplex-foundation/umi-serializers-encodings/-/umi-serializers-encodings-0.8.9.tgz#0f02605ee3e6fbeac1abc4fb267a7cc96ecb4410" + integrity sha512-N3VWLDTJ0bzzMKcJDL08U3FaqRmwlN79FyE4BHj6bbAaJ9LEHjDQ9RJijZyWqTm0jE7I750fU7Ow5EZL38Xi6Q== + dependencies: + "@metaplex-foundation/umi-serializers-core" "^0.8.9" + +"@metaplex-foundation/umi-serializers-numbers@^0.8.9": + version "0.8.9" + resolved "https://registry.yarnpkg.com/@metaplex-foundation/umi-serializers-numbers/-/umi-serializers-numbers-0.8.9.tgz#28c10367f6aebac0276ec1bce81d0d8db54b05de" + integrity sha512-NtBf1fnVNQJHFQjLFzRu2i9GGnigb9hOm/Gfrk628d0q0tRJB7BOM3bs5C61VAs7kJs4yd+pDNVAERJkknQ7Lg== + dependencies: + "@metaplex-foundation/umi-serializers-core" "^0.8.9" + +"@metaplex-foundation/umi-serializers@^0.8.9": + version "0.8.9" + resolved "https://registry.yarnpkg.com/@metaplex-foundation/umi-serializers/-/umi-serializers-0.8.9.tgz#af6c5bb1a3276cbe252fd08e359b305ed80a3343" + integrity sha512-Sve8Etm3zqvLSUfza+MYRkjTnCpiaAFT7VWdqeHzA3n58P0AfT3p74RrZwVt/UFkxI+ln8BslwBDJmwzcPkuHw== + dependencies: + "@metaplex-foundation/umi-options" "^0.8.9" + "@metaplex-foundation/umi-public-keys" "^0.8.9" + "@metaplex-foundation/umi-serializers-core" "^0.8.9" + "@metaplex-foundation/umi-serializers-encodings" "^0.8.9" + "@metaplex-foundation/umi-serializers-numbers" "^0.8.9" + "@mrgnlabs/marginfi-client-v2@^4.0.0": version "4.0.0" resolved "https://registry.yarnpkg.com/@mrgnlabs/marginfi-client-v2/-/marginfi-client-v2-4.0.0.tgz#50676767dc9a06b5ffaccb25f3dc8f7a24b6f52d" @@ -179,22 +214,7 @@ decimal.js "^10.4.3" superstruct "^1.0.4" -"@mrgnlabs/mrgn-common@*": - version "1.7.0" - resolved "https://registry.yarnpkg.com/@mrgnlabs/mrgn-common/-/mrgn-common-1.7.0.tgz#0a40b7696057ee4119f4fe3950ead11623085545" - integrity sha512-vDeVmcSRB4tAXDZPNTrzlOIhWQFk+CD5akuBl6vaULwRrxMwkSmOxvkgnXHdxXvKgTH9CfU/0exkevOc4VXslQ== - dependencies: - "@coral-xyz/anchor" "^0.30.1" - "@solana/buffer-layout-utils" "^0.2.0" - "@solana/wallet-adapter-base" "^0.9.23" - "@solana/web3.js" "^1.93.2" - bignumber.js "^9.1.2" - bs58 "^6.0.0" - decimal.js "^10.4.3" - numeral "^2.0.6" - superstruct "^1.0.4" - -"@mrgnlabs/mrgn-common@^1.8.0": +"@mrgnlabs/mrgn-common@*", "@mrgnlabs/mrgn-common@^1.8.0": version "1.8.0" resolved "https://registry.yarnpkg.com/@mrgnlabs/mrgn-common/-/mrgn-common-1.8.0.tgz#76df1104b3a6b04054c56c297b4dc6a27236d8fe" integrity sha512-6VQ/2Ob8alyI1jsY3RETsWJ5W/myEp+h2yu1mFI/yzKHLffQMlt50FWPSDmCe2TBmkBioW48HOl+PqQf3+Wfbg== @@ -217,29 +237,27 @@ "@solana/buffer-layout" "=4.0.0" "@solana/buffer-layout-utils" "=0.2.0" -"@noble/curves@^1.0.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.5.0.tgz#7a9b9b507065d516e6dce275a1e31db8d2a100dd" - integrity sha512-J5EKamIHnKPyClwVrzmaf5wSdQXgdHcPZIZLu3bwnbeCx8/7NPK5q2ZBWF+5FvYGByjiQQsJYX6jfgB2wDPn3A== - dependencies: - "@noble/hashes" "1.4.0" - -"@noble/curves@^1.4.2": - version "1.4.2" - resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.4.2.tgz#40309198c76ed71bc6dbf7ba24e81ceb4d0d1fe9" - integrity sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw== +"@noble/curves@^1.0.0", "@noble/curves@^1.4.2": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.7.0.tgz#0512360622439256df892f21d25b388f52505e45" + integrity sha512-UTMhXK9SeDhFJVrHeUJ5uZlI6ajXg10O6Ddocf9S6GjbSBVZsJo88HzKwXznNfGpMTRDyJkqMjNDPYgf0qFWnw== dependencies: - "@noble/hashes" "1.4.0" + "@noble/hashes" "1.6.0" "@noble/ed25519@^1.7.1": version "1.7.3" resolved "https://registry.yarnpkg.com/@noble/ed25519/-/ed25519-1.7.3.tgz#57e1677bf6885354b466c38e2b620c62f45a7123" integrity sha512-iR8GBkDt0Q3GyaVcIu7mSsVIqnFbkbRzGLWlvhwunacoLwt4J3swfKhfaM6rN6WY+TBGoYT1GtT1mIh2/jGbRQ== -"@noble/hashes@1.4.0", "@noble/hashes@^1.3.0", "@noble/hashes@^1.3.1", "@noble/hashes@^1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.4.0.tgz#45814aa329f30e4fe0ba49426f49dfccdd066426" - integrity sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg== +"@noble/hashes@1.6.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.6.0.tgz#d4bfb516ad6e7b5111c216a5cc7075f4cf19e6c5" + integrity sha512-YUULf0Uk4/mAA89w+k3+yUYh6NrEvxZa5T6SY3wlMvE2chHkxFUUIDI8/XW1QSC357iA5pSnqt7XEhvFOqmDyQ== + +"@noble/hashes@^1.3.0", "@noble/hashes@^1.3.1", "@noble/hashes@^1.4.0": + version "1.6.1" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.6.1.tgz#df6e5943edcea504bac61395926d6fd67869a0d5" + integrity sha512-pq5D8h10hHBjyqX+cfBm0i8JUXJ0UhczFc4r74zbuT9XgewFo2E3J1cOaGtdZynILNmQ685YWGzGE1Zv6io50w== "@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": version "1.1.2" @@ -302,17 +320,17 @@ bn.js "^5.2.1" "@pythnetwork/pyth-solana-receiver@^0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@pythnetwork/pyth-solana-receiver/-/pyth-solana-receiver-0.8.0.tgz#d7bf3c5c97a0f0eab8ac19f53b11664117e1152d" - integrity sha512-5lhLtggAqsiHtffTPM8vcKJmhBdxzidBmiNNUlqPyg9XmhZ4Z+roY0dfzluEoX5xer9rEA1ThsBpX0bG1DRIGA== + version "0.8.2" + resolved "https://registry.yarnpkg.com/@pythnetwork/pyth-solana-receiver/-/pyth-solana-receiver-0.8.2.tgz#e1c54de017bad6c321c22245fe240e020e9c853d" + integrity sha512-WrrdwwhSYvvB5vJEL+SfPnfuxgkRKMeKdZvGFFwe6ENrMhrQCM05oDkvNNYfXATLcpQGRAyBu9l1xIxUxixpqw== dependencies: "@coral-xyz/anchor" "^0.29.0" "@noble/hashes" "^1.4.0" "@pythnetwork/price-service-sdk" ">=1.6.0" - "@pythnetwork/solana-utils" "*" + "@pythnetwork/solana-utils" "0.4.2" "@solana/web3.js" "^1.90.0" -"@pythnetwork/solana-utils@*": +"@pythnetwork/solana-utils@0.4.2": version "0.4.2" resolved "https://registry.yarnpkg.com/@pythnetwork/solana-utils/-/solana-utils-0.4.2.tgz#3e220eed518c02ad702ebb023488afd7c5649a87" integrity sha512-hKo7Bcs/kDWA5Fnqhg9zJSB94NMoUDIDjHjSi/uvZOzwizISUQI6oY3LWd2CXzNh4f8djjY2BS5iNHaM4cm8Bw== @@ -322,6 +340,19 @@ bs58 "^5.0.0" jito-ts "^3.0.1" +"@solana/addresses@2.0.0-experimental.21e994f": + version "2.0.0-experimental.21e994f" + resolved "https://registry.yarnpkg.com/@solana/addresses/-/addresses-2.0.0-experimental.21e994f.tgz#51509c4e48c3feae573f30a0ad7736d2054b1bdf" + integrity sha512-zmg+ALhjxZApKJKSjeGK7EgMT9NywdvGKlAjyNL2fieiFWp0lRTBmWyjPBCQQGdJjBkayCscq3GQkDF2MhC6fg== + dependencies: + "@metaplex-foundation/umi-serializers" "^0.8.9" + "@solana/assertions" "2.0.0-experimental.21e994f" + +"@solana/assertions@2.0.0-experimental.21e994f": + version "2.0.0-experimental.21e994f" + resolved "https://registry.yarnpkg.com/@solana/assertions/-/assertions-2.0.0-experimental.21e994f.tgz#a67143b41aaf1d810176b943a203f1508f4095df" + integrity sha512-iGOUpOqkqxzQ/xi4Q3YLiBQPASiQ43NYTalmQm99hmOhySRA4+yyQTmMW1PJ8FAm7Zf86cCiYTf19Exa7+DxoQ== + "@solana/buffer-layout-utils@=0.2.0", "@solana/buffer-layout-utils@^0.2.0": version "0.2.0" resolved "https://registry.yarnpkg.com/@solana/buffer-layout-utils/-/buffer-layout-utils-0.2.0.tgz#b45a6cab3293a2eb7597cceb474f229889d875ca" @@ -346,20 +377,6 @@ dependencies: buffer "~6.0.3" -"@solana/codecs-core@2.0.0-preview.2": - version "2.0.0-preview.2" - resolved "https://registry.yarnpkg.com/@solana/codecs-core/-/codecs-core-2.0.0-preview.2.tgz#689784d032fbc1fedbde40bb25d76cdcecf6553b" - integrity sha512-gLhCJXieSCrAU7acUJjbXl+IbGnqovvxQLlimztPoGgfLQ1wFYu+XJswrEVQqknZYK1pgxpxH3rZ+OKFs0ndQg== - dependencies: - "@solana/errors" "2.0.0-preview.2" - -"@solana/codecs-core@2.0.0-preview.4": - version "2.0.0-preview.4" - resolved "https://registry.yarnpkg.com/@solana/codecs-core/-/codecs-core-2.0.0-preview.4.tgz#770826105f2f884110a21662573e7a2014654324" - integrity sha512-A0VVuDDA5kNKZUinOqHxJQK32aKTucaVbvn31YenGzHX1gPqq+SOnFwgaEY6pq4XEopSmaK16w938ZQS8IvCnw== - dependencies: - "@solana/errors" "2.0.0-preview.4" - "@solana/codecs-core@2.0.0-rc.1": version "2.0.0-rc.1" resolved "https://registry.yarnpkg.com/@solana/codecs-core/-/codecs-core-2.0.0-rc.1.tgz#1a2d76b9c7b9e7b7aeb3bd78be81c2ba21e3ce22" @@ -367,24 +384,6 @@ dependencies: "@solana/errors" "2.0.0-rc.1" -"@solana/codecs-data-structures@2.0.0-preview.2": - version "2.0.0-preview.2" - resolved "https://registry.yarnpkg.com/@solana/codecs-data-structures/-/codecs-data-structures-2.0.0-preview.2.tgz#e82cb1b6d154fa636cd5c8953ff3f32959cc0370" - integrity sha512-Xf5vIfromOZo94Q8HbR04TbgTwzigqrKII0GjYr21K7rb3nba4hUW2ir8kguY7HWFBcjHGlU5x3MevKBOLp3Zg== - dependencies: - "@solana/codecs-core" "2.0.0-preview.2" - "@solana/codecs-numbers" "2.0.0-preview.2" - "@solana/errors" "2.0.0-preview.2" - -"@solana/codecs-data-structures@2.0.0-preview.4": - version "2.0.0-preview.4" - resolved "https://registry.yarnpkg.com/@solana/codecs-data-structures/-/codecs-data-structures-2.0.0-preview.4.tgz#f8a2470982a9792334737ea64000ccbdff287247" - integrity sha512-nt2k2eTeyzlI/ccutPcG36M/J8NAYfxBPI9h/nQjgJ+M+IgOKi31JV8StDDlG/1XvY0zyqugV3I0r3KAbZRJpA== - dependencies: - "@solana/codecs-core" "2.0.0-preview.4" - "@solana/codecs-numbers" "2.0.0-preview.4" - "@solana/errors" "2.0.0-preview.4" - "@solana/codecs-data-structures@2.0.0-rc.1": version "2.0.0-rc.1" resolved "https://registry.yarnpkg.com/@solana/codecs-data-structures/-/codecs-data-structures-2.0.0-rc.1.tgz#d47b2363d99fb3d643f5677c97d64a812982b888" @@ -394,22 +393,6 @@ "@solana/codecs-numbers" "2.0.0-rc.1" "@solana/errors" "2.0.0-rc.1" -"@solana/codecs-numbers@2.0.0-preview.2": - version "2.0.0-preview.2" - resolved "https://registry.yarnpkg.com/@solana/codecs-numbers/-/codecs-numbers-2.0.0-preview.2.tgz#56995c27396cd8ee3bae8bd055363891b630bbd0" - integrity sha512-aLZnDTf43z4qOnpTcDsUVy1Ci9im1Md8thWipSWbE+WM9ojZAx528oAql+Cv8M8N+6ALKwgVRhPZkto6E59ARw== - dependencies: - "@solana/codecs-core" "2.0.0-preview.2" - "@solana/errors" "2.0.0-preview.2" - -"@solana/codecs-numbers@2.0.0-preview.4": - version "2.0.0-preview.4" - resolved "https://registry.yarnpkg.com/@solana/codecs-numbers/-/codecs-numbers-2.0.0-preview.4.tgz#6a53b456bb7866f252d8c032c81a92651e150f66" - integrity sha512-Q061rLtMadsO7uxpguT+Z7G4UHnjQ6moVIxAQxR58nLxDPCC7MB1Pk106/Z7NDhDLHTcd18uO6DZ7ajHZEn2XQ== - dependencies: - "@solana/codecs-core" "2.0.0-preview.4" - "@solana/errors" "2.0.0-preview.4" - "@solana/codecs-numbers@2.0.0-rc.1": version "2.0.0-rc.1" resolved "https://registry.yarnpkg.com/@solana/codecs-numbers/-/codecs-numbers-2.0.0-rc.1.tgz#f34978ddf7ea4016af3aaed5f7577c1d9869a614" @@ -418,24 +401,6 @@ "@solana/codecs-core" "2.0.0-rc.1" "@solana/errors" "2.0.0-rc.1" -"@solana/codecs-strings@2.0.0-preview.2": - version "2.0.0-preview.2" - resolved "https://registry.yarnpkg.com/@solana/codecs-strings/-/codecs-strings-2.0.0-preview.2.tgz#8bd01a4e48614d5289d72d743c3e81305d445c46" - integrity sha512-EgBwY+lIaHHgMJIqVOGHfIfpdmmUDNoNO/GAUGeFPf+q0dF+DtwhJPEMShhzh64X2MeCZcmSO6Kinx0Bvmmz2g== - dependencies: - "@solana/codecs-core" "2.0.0-preview.2" - "@solana/codecs-numbers" "2.0.0-preview.2" - "@solana/errors" "2.0.0-preview.2" - -"@solana/codecs-strings@2.0.0-preview.4": - version "2.0.0-preview.4" - resolved "https://registry.yarnpkg.com/@solana/codecs-strings/-/codecs-strings-2.0.0-preview.4.tgz#4d06bb722a55a5d04598d362021bfab4bd446760" - integrity sha512-YDbsQePRWm+xnrfS64losSGRg8Wb76cjK1K6qfR8LPmdwIC3787x9uW5/E4icl/k+9nwgbIRXZ65lpF+ucZUnw== - dependencies: - "@solana/codecs-core" "2.0.0-preview.4" - "@solana/codecs-numbers" "2.0.0-preview.4" - "@solana/errors" "2.0.0-preview.4" - "@solana/codecs-strings@2.0.0-rc.1": version "2.0.0-rc.1" resolved "https://registry.yarnpkg.com/@solana/codecs-strings/-/codecs-strings-2.0.0-rc.1.tgz#e1d9167075b8c5b0b60849f8add69c0f24307018" @@ -445,28 +410,6 @@ "@solana/codecs-numbers" "2.0.0-rc.1" "@solana/errors" "2.0.0-rc.1" -"@solana/codecs@2.0.0-preview.2": - version "2.0.0-preview.2" - resolved "https://registry.yarnpkg.com/@solana/codecs/-/codecs-2.0.0-preview.2.tgz#d6615fec98f423166fb89409f9a4ad5b74c10935" - integrity sha512-4HHzCD5+pOSmSB71X6w9ptweV48Zj1Vqhe732+pcAQ2cMNnN0gMPMdDq7j3YwaZDZ7yrILVV/3+HTnfT77t2yA== - dependencies: - "@solana/codecs-core" "2.0.0-preview.2" - "@solana/codecs-data-structures" "2.0.0-preview.2" - "@solana/codecs-numbers" "2.0.0-preview.2" - "@solana/codecs-strings" "2.0.0-preview.2" - "@solana/options" "2.0.0-preview.2" - -"@solana/codecs@2.0.0-preview.4": - version "2.0.0-preview.4" - resolved "https://registry.yarnpkg.com/@solana/codecs/-/codecs-2.0.0-preview.4.tgz#a1923cc78a6f64ebe656c7ec6335eb6b70405b22" - integrity sha512-gLMupqI4i+G4uPi2SGF/Tc1aXcviZF2ybC81x7Q/fARamNSgNOCUUoSCg9nWu1Gid6+UhA7LH80sWI8XjKaRog== - dependencies: - "@solana/codecs-core" "2.0.0-preview.4" - "@solana/codecs-data-structures" "2.0.0-preview.4" - "@solana/codecs-numbers" "2.0.0-preview.4" - "@solana/codecs-strings" "2.0.0-preview.4" - "@solana/options" "2.0.0-preview.4" - "@solana/codecs@2.0.0-rc.1": version "2.0.0-rc.1" resolved "https://registry.yarnpkg.com/@solana/codecs/-/codecs-2.0.0-rc.1.tgz#146dc5db58bd3c28e04b4c805e6096c2d2a0a875" @@ -478,22 +421,6 @@ "@solana/codecs-strings" "2.0.0-rc.1" "@solana/options" "2.0.0-rc.1" -"@solana/errors@2.0.0-preview.2": - version "2.0.0-preview.2" - resolved "https://registry.yarnpkg.com/@solana/errors/-/errors-2.0.0-preview.2.tgz#e0ea8b008c5c02528d5855bc1903e5e9bbec322e" - integrity sha512-H2DZ1l3iYF5Rp5pPbJpmmtCauWeQXRJapkDg8epQ8BJ7cA2Ut/QEtC3CMmw/iMTcuS6uemFNLcWvlOfoQhvQuA== - dependencies: - chalk "^5.3.0" - commander "^12.0.0" - -"@solana/errors@2.0.0-preview.4": - version "2.0.0-preview.4" - resolved "https://registry.yarnpkg.com/@solana/errors/-/errors-2.0.0-preview.4.tgz#056ba76b6dd900dafa70117311bec3aef0f5250b" - integrity sha512-kadtlbRv2LCWr8A9V22On15Us7Nn8BvqNaOB4hXsTB3O0fU40D1ru2l+cReqLcRPij4znqlRzW9Xi0m6J5DIhA== - dependencies: - chalk "^5.3.0" - commander "^12.1.0" - "@solana/errors@2.0.0-rc.1": version "2.0.0-rc.1" resolved "https://registry.yarnpkg.com/@solana/errors/-/errors-2.0.0-rc.1.tgz#3882120886eab98a37a595b85f81558861b29d62" @@ -502,24 +429,22 @@ chalk "^5.3.0" commander "^12.1.0" -"@solana/options@2.0.0-preview.2": - version "2.0.0-preview.2" - resolved "https://registry.yarnpkg.com/@solana/options/-/options-2.0.0-preview.2.tgz#13ff008bf43a5056ef9a091dc7bb3f39321e867e" - integrity sha512-FAHqEeH0cVsUOTzjl5OfUBw2cyT8d5Oekx4xcn5hn+NyPAfQJgM3CEThzgRD6Q/4mM5pVUnND3oK/Mt1RzSE/w== - dependencies: - "@solana/codecs-core" "2.0.0-preview.2" - "@solana/codecs-numbers" "2.0.0-preview.2" +"@solana/functional@2.0.0-experimental.21e994f": + version "2.0.0-experimental.21e994f" + resolved "https://registry.yarnpkg.com/@solana/functional/-/functional-2.0.0-experimental.21e994f.tgz#e7ebdc8fcb14a0a2bc7d0f7df8667d171f54a10b" + integrity sha512-FMXFiTA+hsc9FCv0r47oF7njq/K9x7zh0H+To7tpeqwN65LtJPu5BMG7xZY3rn5TrudgKw6XPuIr3ARbI8+IWA== + +"@solana/instructions@2.0.0-experimental.21e994f": + version "2.0.0-experimental.21e994f" + resolved "https://registry.yarnpkg.com/@solana/instructions/-/instructions-2.0.0-experimental.21e994f.tgz#f308fdb671252ff52fcf08366fe7a1800b0d54b1" + integrity sha512-PuJJzvT7wtwE5UcGavUppnfVWnoxL8CPhZBb96HpOaQhQ2JuyhN445bfav5KkaUMCE6ubrVzOEqzrbtygD3aBg== -"@solana/options@2.0.0-preview.4": - version "2.0.0-preview.4" - resolved "https://registry.yarnpkg.com/@solana/options/-/options-2.0.0-preview.4.tgz#212d35d1da87c7efb13de4d3569ad9eb070f013d" - integrity sha512-tv2O/Frxql/wSe3jbzi5nVicIWIus/BftH+5ZR+r9r3FO0/htEllZS5Q9XdbmSboHu+St87584JXeDx3xm4jaA== +"@solana/keys@2.0.0-experimental.21e994f": + version "2.0.0-experimental.21e994f" + resolved "https://registry.yarnpkg.com/@solana/keys/-/keys-2.0.0-experimental.21e994f.tgz#52e9307a0a0055f2bbff23e76b38cb4ba7f75da3" + integrity sha512-Qsm7ARy69PdIuis7TZy8ELyhq0pcRFPXtaZ8vLFUvsukrcWRowiJ8JJs6Q3tA+gQK5vUn9ABp7a7Qs0FHzgbyw== dependencies: - "@solana/codecs-core" "2.0.0-preview.4" - "@solana/codecs-data-structures" "2.0.0-preview.4" - "@solana/codecs-numbers" "2.0.0-preview.4" - "@solana/codecs-strings" "2.0.0-preview.4" - "@solana/errors" "2.0.0-preview.4" + "@solana/assertions" "2.0.0-experimental.21e994f" "@solana/options@2.0.0-rc.1": version "2.0.0-rc.1" @@ -532,29 +457,47 @@ "@solana/codecs-strings" "2.0.0-rc.1" "@solana/errors" "2.0.0-rc.1" -"@solana/spl-token-group@^0.0.5": - version "0.0.5" - resolved "https://registry.yarnpkg.com/@solana/spl-token-group/-/spl-token-group-0.0.5.tgz#f955dcca782031c85e862b2b46878d1bb02db6c2" - integrity sha512-CLJnWEcdoUBpQJfx9WEbX3h6nTdNiUzswfFdkABUik7HVwSNA98u5AYvBVK2H93d9PGMOHAak2lHW9xr+zAJGQ== +"@solana/rpc-core@2.0.0-experimental.21e994f": + version "2.0.0-experimental.21e994f" + resolved "https://registry.yarnpkg.com/@solana/rpc-core/-/rpc-core-2.0.0-experimental.21e994f.tgz#294c0ea4d99c1bd6b11bb0c0cc67847adb6f3c3a" + integrity sha512-T7VcTLRi4dsqmpFYdnvcHZFS8Vcgdi6funMUrXcM7ofQqb8vWGJnlX6AX0eIZiVsmoYk5Ki8wW4D6Ul6bXZyZg== dependencies: - "@solana/codecs" "2.0.0-preview.4" - "@solana/spl-type-length-value" "0.1.0" + "@metaplex-foundation/umi-serializers" "^0.8.9" -"@solana/spl-token-metadata@^0.1.2": +"@solana/rpc-transport@2.0.0-experimental.21e994f": + version "2.0.0-experimental.21e994f" + resolved "https://registry.yarnpkg.com/@solana/rpc-transport/-/rpc-transport-2.0.0-experimental.21e994f.tgz#2b8c3f97f4853711daaeed03ff0700a1d44aca4a" + integrity sha512-PfGPzRuEodhfLyOD8ZneYQ389SWYgmj1Q/HWQZo8yZMsiAaW/lqCygoW88lecxXKlZF5gJYrBX154kgvGqEM7g== + +"@solana/spl-single-pool-classic@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@solana/spl-single-pool-classic/-/spl-single-pool-classic-1.0.2.tgz#f675cdf39037cd42a3a4690a030cc77c0837e40c" + integrity sha512-kh2D3KElYsJWZIoksCd5dlC9jsKict7WTS+lZvhaGXTarZbjMqhIaiiMTe5oqKgHSNwavoP05VJ8YlTmbTxTLg== + dependencies: + "@solana/spl-single-pool" "1.0.0" + "@solana/web3.js" "^1.91.6" + +"@solana/spl-single-pool@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@solana/spl-single-pool/-/spl-single-pool-1.0.0.tgz#eec9ca109ad63936b60cab6f2f6f9566e0cd0eeb" + integrity sha512-m2zNzRXcYXibd2n514TQhWM7WkWuCqddNHmxgPDcpSFpwbP9hNUigjGoJeR1khvKjRj5jV+PdiiwBEWi3pExfw== + dependencies: + "@solana/web3.js" "=2.0.0-experimental.21e994f" + +"@solana/spl-token-group@^0.0.7": + version "0.0.7" + resolved "https://registry.yarnpkg.com/@solana/spl-token-group/-/spl-token-group-0.0.7.tgz#83c00f0cd0bda33115468cd28b89d94f8ec1fee4" + integrity sha512-V1N/iX7Cr7H0uazWUT2uk27TMqlqedpXHRqqAbVO2gvmJyT0E0ummMEAVQeXZ05ZhQ/xF39DLSdBp90XebWEug== + dependencies: + "@solana/codecs" "2.0.0-rc.1" + +"@solana/spl-token-metadata@^0.1.2", "@solana/spl-token-metadata@^0.1.6": version "0.1.6" resolved "https://registry.yarnpkg.com/@solana/spl-token-metadata/-/spl-token-metadata-0.1.6.tgz#d240947aed6e7318d637238022a7b0981b32ae80" integrity sha512-7sMt1rsm/zQOQcUWllQX9mD2O6KhSAtY1hFR2hfFwgqfFWzSY9E9GDvFVNYUI1F0iQKcm6HmePU9QbKRXTEBiA== dependencies: "@solana/codecs" "2.0.0-rc.1" -"@solana/spl-token-metadata@^0.1.3": - version "0.1.4" - resolved "https://registry.yarnpkg.com/@solana/spl-token-metadata/-/spl-token-metadata-0.1.4.tgz#5cdc3b857a8c4a6877df24e24a8648c4132d22ba" - integrity sha512-N3gZ8DlW6NWDV28+vCCDJoTqaCZiF/jDUnk3o8GRkAFzHObiR60Bs1gXHBa8zCPdvOwiG6Z3dg5pg7+RW6XNsQ== - dependencies: - "@solana/codecs" "2.0.0-preview.2" - "@solana/spl-type-length-value" "0.1.0" - "@solana/spl-token@^0.3.4": version "0.3.11" resolved "https://registry.yarnpkg.com/@solana/spl-token/-/spl-token-0.3.11.tgz#cdc10f9472b29b39c8983c92592cadd06627fb9a" @@ -566,22 +509,24 @@ buffer "^6.0.3" "@solana/spl-token@^0.4.8": - version "0.4.8" - resolved "https://registry.yarnpkg.com/@solana/spl-token/-/spl-token-0.4.8.tgz#a84e4131af957fa9fbd2727e5fc45dfbf9083586" - integrity sha512-RO0JD9vPRi4LsAbMUdNbDJ5/cv2z11MGhtAvFeRzT4+hAGE/FUzRi0tkkWtuCfSIU3twC6CtmAihRp/+XXjWsA== + version "0.4.9" + resolved "https://registry.yarnpkg.com/@solana/spl-token/-/spl-token-0.4.9.tgz#24d032d2935f237925c3b058ba6bb1e1ece5428c" + integrity sha512-g3wbj4F4gq82YQlwqhPB0gHFXfgsC6UmyGMxtSLf/BozT/oKd59465DbnlUK8L8EcimKMavxsVAMoLcEdeCicg== dependencies: "@solana/buffer-layout" "^4.0.0" "@solana/buffer-layout-utils" "^0.2.0" - "@solana/spl-token-group" "^0.0.5" - "@solana/spl-token-metadata" "^0.1.3" + "@solana/spl-token-group" "^0.0.7" + "@solana/spl-token-metadata" "^0.1.6" buffer "^6.0.3" -"@solana/spl-type-length-value@0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@solana/spl-type-length-value/-/spl-type-length-value-0.1.0.tgz#b5930cf6c6d8f50c7ff2a70463728a4637a2f26b" - integrity sha512-JBMGB0oR4lPttOZ5XiUGyvylwLQjt1CPJa6qQ5oM+MBCndfjz2TKKkw0eATlLLcYmq1jBVsNlJ2cD6ns2GR7lA== +"@solana/transactions@2.0.0-experimental.21e994f": + version "2.0.0-experimental.21e994f" + resolved "https://registry.yarnpkg.com/@solana/transactions/-/transactions-2.0.0-experimental.21e994f.tgz#48dc6483a1d57e85cd23c88e854239b2ac0bd097" + integrity sha512-DunbTMBzlC7jmTzkFsRm5DhGe+MjaZ8m+SJ7V520mQq+kxrbPrRmI3ikfUVdejg0WaEV4Dy+RwQ5xllsrJ47kA== dependencies: - buffer "^6.0.3" + "@metaplex-foundation/umi-serializers" "^0.8.9" + "@solana/addresses" "2.0.0-experimental.21e994f" + "@solana/keys" "2.0.0-experimental.21e994f" "@solana/wallet-adapter-base@^0.9.23": version "0.9.23" @@ -601,31 +546,25 @@ "@wallet-standard/base" "^1.0.1" "@wallet-standard/features" "^1.0.3" -"@solana/web3.js@^1.32.0", "@solana/web3.js@^1.68.0", "@solana/web3.js@^1.90.0", "@solana/web3.js@^1.93.2", "@solana/web3.js@^1.95.2": - version "1.95.2" - resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.95.2.tgz#6f8a0362fa75886a21550dbec49aad54481463a6" - integrity sha512-SjlHp0G4qhuhkQQc+YXdGkI8EerCqwxvgytMgBpzMUQTafrkNant3e7pgilBGgjy/iM40ICvWBLgASTPMrQU7w== - dependencies: - "@babel/runtime" "^7.24.8" - "@noble/curves" "^1.4.2" - "@noble/hashes" "^1.4.0" - "@solana/buffer-layout" "^4.0.1" - agentkeepalive "^4.5.0" - bigint-buffer "^1.1.5" - bn.js "^5.2.1" - borsh "^0.7.0" - bs58 "^4.0.1" - buffer "6.0.3" +"@solana/web3.js@=2.0.0-experimental.21e994f": + version "2.0.0-experimental.21e994f" + resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-2.0.0-experimental.21e994f.tgz#c5568d88903f63c85de700c03b2acef2217d059f" + integrity sha512-Yy0D57nlNTDm0BhBRIM85Sn52T6vjxpBRRdwE/FOJJmN92n0Qpc4mTAwOPfEqoVpiTcluUBZ4l8FAWxjGCFMgQ== + dependencies: + "@metaplex-foundation/umi-serializers" "^0.8.9" + "@solana/addresses" "2.0.0-experimental.21e994f" + "@solana/functional" "2.0.0-experimental.21e994f" + "@solana/instructions" "2.0.0-experimental.21e994f" + "@solana/keys" "2.0.0-experimental.21e994f" + "@solana/rpc-core" "2.0.0-experimental.21e994f" + "@solana/rpc-transport" "2.0.0-experimental.21e994f" + "@solana/transactions" "2.0.0-experimental.21e994f" fast-stable-stringify "^1.0.0" - jayson "^4.1.1" - node-fetch "^2.7.0" - rpc-websockets "^9.0.2" - superstruct "^2.0.2" -"@solana/web3.js@^1.54.0", "@solana/web3.js@^1.93.0", "@solana/web3.js@^1.95.0": - version "1.95.7" - resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.95.7.tgz#0c0f4e883795bb3a93d1f336223e9907a722a475" - integrity sha512-9Sut9HhajumawFIz0wcPxlfBsHxDvq/nbJD/ZtZOXrxOj4WvgQx0AiGGzxG128RYZYjgZbjnwF6OlHsfQ//WRA== +"@solana/web3.js@^1.32.0", "@solana/web3.js@^1.68.0", "@solana/web3.js@^1.90.0", "@solana/web3.js@^1.91.6", "@solana/web3.js@^1.93.2", "@solana/web3.js@^1.95.2", "@solana/web3.js@^1.95.3", "@solana/web3.js@^1.95.8": + version "1.95.8" + resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.95.8.tgz#2d49abda23f7a79a3cc499ab6680f7be11786ee1" + integrity sha512-sBHzNh7dHMrmNS5xPD1d0Xa2QffW/RXaxu/OysRXBfwTp+LYqGGmMtCYYwrHPrN5rjAmJCsQRNAwv4FM0t3B6g== dependencies: "@babel/runtime" "^7.25.0" "@noble/curves" "^1.4.2" @@ -664,18 +603,19 @@ rpc-websockets "^7.5.1" superstruct "^0.14.2" -"@solworks/soltoolkit-sdk@^0.0.23": - version "0.0.23" - resolved "https://registry.yarnpkg.com/@solworks/soltoolkit-sdk/-/soltoolkit-sdk-0.0.23.tgz#ef32d0aa79f888bcf0f639d280005b2e97cdc624" - integrity sha512-O6lXT3EBR4gmcjt0/33i97VMHVEImwXGi+4TNrDDdifn3tyOUB7V6PR1VGxlavQb9hqmVai3xhedg/rmbQzX7w== +"@solworks/soltoolkit-sdk@^0.0.37": + version "0.0.37" + resolved "https://registry.yarnpkg.com/@solworks/soltoolkit-sdk/-/soltoolkit-sdk-0.0.37.tgz#53800f0e43c56962194b130e02c713d8d7fb6a7c" + integrity sha512-3+mNv9ymup0LTOmZRhIWvqGmf9Col1TKuZ2I9dqrnbSveOBnjCgNDUkfge4qJ2FcWNZdVEvHzUd3UkV902INAg== dependencies: "@solana/buffer-layout" "^4.0.0" "@solana/spl-token" "^0.3.4" - "@solana/web3.js" "^1.54.0" + "@solana/web3.js" "^1.95.3" "@types/bn.js" "^5.1.0" "@types/node" "^18.7.13" "@types/node-fetch" "^2.6.2" bn.js "^5.2.1" + bs58 "^5.0.0" decimal.js "^10.4.0" typescript "^4.8.2" @@ -685,44 +625,44 @@ integrity sha512-zA2oZluZmVvgZEDjF243KWD1S2J+1SH1MVynI0O1KRgDt1lU8nqk7AK3oQfW/WpwT51L5waGSU0xKF/9BTP5Cw== "@swc/helpers@^0.5.11": - version "0.5.12" - resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.12.tgz#37aaca95284019eb5d2207101249435659709f4b" - integrity sha512-KMZNXiGibsW9kvZAO1Pam2JPTDBm+KSHMMHWdsyI/1DbIZjT2A6Gy3hblVXUMEDvUAKq+e0vL0X0o54owWji7g== + version "0.5.15" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.15.tgz#79efab344c5819ecf83a43f3f9f811fc84b516d7" + integrity sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g== dependencies: - tslib "^2.4.0" + tslib "^2.8.0" -"@switchboard-xyz/common@^2.5.3": - version "2.5.5" - resolved "https://registry.yarnpkg.com/@switchboard-xyz/common/-/common-2.5.5.tgz#773c20584877af86abe724e9787de8f3e6385bce" - integrity sha512-/qUmZlrfQyckvHGzS5Cj2+Ocd3eE64rPjQb1eEocc5dv4HXZMqbBbpM6BwURrQhZ65i3jO1evhTcAk3TVqCA8w== +"@switchboard-xyz/common@^2.5.7": + version "2.5.7" + resolved "https://registry.yarnpkg.com/@switchboard-xyz/common/-/common-2.5.7.tgz#8b781a882318d7e2e661bab3bc3695575c3da20e" + integrity sha512-xUThQ2Zuf+2/nO1J459DC3BrQn1OxytbrU84mxuGZKw4APhtm7hKKCaIdQ1uzdASj9v3NRZ+/KIPeMaQfk+ZZA== dependencies: - "@solana/web3.js" "^1.93.0" - axios "^1.7.2" - big.js "^6.2.1" + "@solana/web3.js" "^1.95.8" + axios "^1.7.8" + big.js "^6.2.2" bn.js "^5.2.1" - bs58 "^5.0.0" + bs58 "^6.0.0" cron-validator "^1.3.1" decimal.js "^10.4.3" js-sha256 "^0.11.0" lodash "^4.17.21" - protobufjs "^7.2.6" - yaml "^2.5.0" + protobufjs "^7.4.0" + yaml "^2.6.1" "@switchboard-xyz/on-demand@^1.2.36": - version "1.2.51" - resolved "https://registry.yarnpkg.com/@switchboard-xyz/on-demand/-/on-demand-1.2.51.tgz#ad42a0855dcff59d3cd7e34ba4dc9ea4531bfddf" - integrity sha512-IqtAEtYdCRQqG8a3tL5WOcLgBco8Iionu60Q+hQzCslQw76zDlkToHkI+71ASulFdZ2z+2XjaKV5ZVqPcYgP7g== + version "1.2.54" + resolved "https://registry.yarnpkg.com/@switchboard-xyz/on-demand/-/on-demand-1.2.54.tgz#ddf88d8bbc9525c2a447505f6ef22323da34db28" + integrity sha512-R7f0LmtV/XEbWhPVTKCWFIzGnbBgu8caP9eOlUapgcR+07oChU2SIyFtoG/bjNbAwKgx8TNVOxEk5RaZe5EyiA== dependencies: "@brokerloop/ttlcache" "^3.2.3" "@coral-xyz/anchor-30" "npm:@coral-xyz/anchor@0.30.1" - "@solana/web3.js" "^1.95.0" - "@solworks/soltoolkit-sdk" "^0.0.23" - "@switchboard-xyz/common" "^2.5.3" - axios "^1.7.4" - big.js "^6.2.1" - bs58 "^5.0.0" + "@solana/web3.js" "^1.95.8" + "@solworks/soltoolkit-sdk" "^0.0.37" + "@switchboard-xyz/common" "^2.5.7" + axios "^1.7.8" + big.js "^6.2.2" + bs58 "^6.0.0" js-yaml "^4.1.0" - protobufjs "^7.2.6" + protobufjs "^7.4.0" "@tsconfig/node10@^1.0.7": version "1.0.11" @@ -745,21 +685,21 @@ integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== "@types/bn.js@^5.1.0": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.1.tgz#b51e1b55920a4ca26e9285ff79936bbdec910682" - integrity sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g== + version "5.1.6" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.6.tgz#9ba818eec0c85e4d3c679518428afdf611d03203" + integrity sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w== dependencies: "@types/node" "*" "@types/chai@^4.3.0": - version "4.3.4" - resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.4.tgz#e913e8175db8307d78b4e8fa690408ba6b65dee4" - integrity sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw== + version "4.3.20" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.20.tgz#cb291577ed342ca92600430841a00329ba05cecc" + integrity sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ== "@types/connect@^3.4.33": - version "3.4.35" - resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" - integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== + version "3.4.38" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858" + integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== dependencies: "@types/node" "*" @@ -781,17 +721,12 @@ "@types/node" "*" form-data "^4.0.0" -"@types/node@*": - version "18.11.13" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.13.tgz#dff34f226ec1ac0432ae3b136ec5552bd3b9c0fe" - integrity sha512-IASpMGVcWpUsx5xBOrxMj7Bl8lqfuTY7FKAnPmu5cHkfQVWF8GulWS1jbRqA934qZL35xh5xN/+Xe/i26Bod4w== - -"@types/node@>=13.7.0": - version "22.3.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.3.0.tgz#7f8da0e2b72c27c4f9bd3cb5ef805209d04d4f9e" - integrity sha512-nrWpWVaDZuaVc5X84xJ0vNrLvomM205oQyLsRt7OHNZbSHslcWsvgFR7O7hire2ZonjLrWBbedmotmIlJDVd6g== +"@types/node@*", "@types/node@>=13.7.0": + version "22.10.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.10.2.tgz#a485426e6d1fdafc7b0d4c7b24e2c78182ddabb9" + integrity sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ== dependencies: - undici-types "~6.18.2" + undici-types "~6.20.0" "@types/node@^12.12.54": version "12.20.55" @@ -799,9 +734,9 @@ integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== "@types/node@^18.7.13": - version "18.19.67" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.67.tgz#77c4b01641a1e3e1509aff7e10d39e4afd5ae06d" - integrity sha512-wI8uHusga+0ZugNp0Ol/3BqQfEcCCNfojtO6Oou9iVNGPTL6QNSdnUdqq85fRgIorLhLMuPIKpsN98QE9Nh+KQ== + version "18.19.68" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.68.tgz#f4f10d9927a7eaf3568c46a6d739cc0967ccb701" + integrity sha512-QGtpFH1vB99ZmTa63K4/FU8twThj4fuVSBkGddTp7uIL/cuoLWIUSL2RcOaigBhfR+hg5pgGkBnkoOxrTVBMKw== dependencies: undici-types "~5.26.4" @@ -818,23 +753,23 @@ "@types/node" "*" "@types/ws@^8.2.2": - version "8.5.12" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.12.tgz#619475fe98f35ccca2a2f6c137702d85ec247b7e" - integrity sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ== + version "8.5.13" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.13.tgz#6414c280875e2691d0d1e080b05addbf5cb91e20" + integrity sha512-osM/gWBTPKgHV8XkTunnegTRIsvF6owmf5w+JtAfOw472dptdm0dlGv4xCt6GwQRcC2XVOvvRE/0bAoQcL2QkA== dependencies: "@types/node" "*" -"@wallet-standard/base@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@wallet-standard/base/-/base-1.0.1.tgz#860dd94d47c9e3c5c43b79d91c6afdbd7a36264e" - integrity sha512-1To3ekMfzhYxe0Yhkpri+Fedq0SYcfrOfJi3vbLjMwF2qiKPjTGLwZkf2C9ftdQmxES+hmxhBzTwF4KgcOwf8w== +"@wallet-standard/base@^1.0.1", "@wallet-standard/base@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@wallet-standard/base/-/base-1.1.0.tgz#214093c0597a1e724ee6dbacd84191dfec62bb33" + integrity sha512-DJDQhjKmSNVLKWItoKThJS+CsJQjR9AOBOirBVT1F9YpRyC9oYHE+ZnSf8y8bxUphtKqdQMPVQ2mHohYdRvDVQ== "@wallet-standard/features@^1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@wallet-standard/features/-/features-1.0.3.tgz#c992876c5e4f7a0672f8869c4146c87e0dfe48c8" - integrity sha512-m8475I6W5LTatTZuUz5JJNK42wFRgkJTB0I9tkruMwfqBF2UN2eomkYNVf9RbrsROelCRzSFmugqjKZBFaubsA== + version "1.1.0" + resolved "https://registry.yarnpkg.com/@wallet-standard/features/-/features-1.1.0.tgz#f256d7b18940c8d134f66164330db358a8f5200e" + integrity sha512-hiEivWNztx73s+7iLxsuD1sOJ28xtRix58W7Xnz4XzzA/pF0+aicnWgjOdA10doVDEDZdUuZCIIqG96SFNlDUg== dependencies: - "@wallet-standard/base" "^1.0.1" + "@wallet-standard/base" "^1.1.0" JSONStream@^1.3.5: version "1.3.5" @@ -845,16 +780,16 @@ JSONStream@^1.3.5: through ">=2.2.7 <3" acorn-walk@^8.1.1: - version "8.3.3" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.3.tgz#9caeac29eefaa0c41e3d4c65137de4d6f34df43e" - integrity sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw== + version "8.3.4" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.4.tgz#794dd169c3977edf4ba4ea47583587c5866236b7" + integrity sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g== dependencies: acorn "^8.11.0" acorn@^8.11.0, acorn@^8.4.1: - version "8.12.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.1.tgz#71616bdccbe25e27a54439e0046e89ca76df2248" - integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg== + version "8.14.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.0.tgz#063e2c70cac5fb4f6467f0b11152e04c682795b0" + integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA== agentkeepalive@^4.2.1, agentkeepalive@^4.3.0, agentkeepalive@^4.5.0: version "4.5.0" @@ -863,6 +798,11 @@ agentkeepalive@^4.2.1, agentkeepalive@^4.3.0, agentkeepalive@^4.5.0: dependencies: humanize-ms "^1.2.1" +anchor-bankrun@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/anchor-bankrun/-/anchor-bankrun-0.4.1.tgz#6fbbf824673f5fcdf353b1f1003d561c14a67c79" + integrity sha512-ryCT84tw+lP4AqRpBsZJbt/KTRoVVKufkxFGd77gnx9iHkbwA5G/9cALk/eqLQm4xeUWTrJSJdEVyg2e74iP9A== + ansi-colors@^4.1.3: version "4.1.3" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" @@ -913,10 +853,10 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== -axios@^1.7.2, axios@^1.7.4: - version "1.7.8" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.8.tgz#1997b1496b394c21953e68c14aaa51b7b5de3d6e" - integrity sha512-Uu0wb7KNqK2t5K+YQyVCLM76prD5sRFjKHbJYCP1J7JFGEQ6nN7HWn9+04LAeiJ3ji54lgS/gZCH1oxyrf1SPw== +axios@^1.7.8: + version "1.7.9" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.9.tgz#d7d071380c132a24accda1b2cfc1535b79ec650a" + integrity sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw== dependencies: follow-redirects "^1.15.6" form-data "^4.0.0" @@ -928,9 +868,9 @@ balanced-match@^1.0.0: integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== base-x@^3.0.2: - version "3.0.9" - resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" - integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== + version "3.0.10" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.10.tgz#62de58653f8762b5d6f8d9fe30fa75f7b2585a75" + integrity sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ== dependencies: safe-buffer "^5.0.1" @@ -949,7 +889,7 @@ base64-js@^1.3.1: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -big.js@^6.2.1: +big.js@^6.2.1, big.js@^6.2.2: version "6.2.2" resolved "https://registry.yarnpkg.com/big.js/-/big.js-6.2.2.tgz#be3bb9ac834558b53b099deef2a1d06ac6368e1a" integrity sha512-y/ie+Faknx7sZA5MfGA2xKlu0GDv8RWrXGsmlteyJQ2lvoKv9GBK/fpRMc2qlSoBAgNxrixICFCBefIq8WCQpQ== @@ -967,9 +907,9 @@ bignumber.js@^9.0.1, bignumber.js@^9.1.2: integrity sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug== binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + version "2.3.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" + integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== bindings@^1.3.0: version "1.5.0" @@ -1005,11 +945,11 @@ brace-expansion@^2.0.1: balanced-match "^1.0.0" braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + version "3.0.3" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== dependencies: - fill-range "^7.0.1" + fill-range "^7.1.1" browser-stdout@^1.3.1: version "1.3.1" @@ -1056,9 +996,9 @@ buffer@6.0.3, buffer@^6.0.3, buffer@~6.0.3: ieee754 "^1.2.1" bufferutil@^4.0.1: - version "4.0.7" - resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.7.tgz#60c0d19ba2c992dd8273d3f73772ffc894c153ad" - integrity sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw== + version "4.0.8" + resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.8.tgz#1de6a71092d65d7766c4d8a522b261a6e787e8ea" + integrity sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw== dependencies: node-gyp-build "^4.3.0" @@ -1068,17 +1008,17 @@ camelcase@^6.0.0, camelcase@^6.3.0: integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== chai@^4.3.4: - version "4.3.7" - resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.7.tgz#ec63f6df01829088e8bf55fca839bcd464a8ec51" - integrity sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A== + version "4.5.0" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.5.0.tgz#707e49923afdd9b13a8b0b47d33d732d13812fd8" + integrity sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw== dependencies: assertion-error "^1.1.0" - check-error "^1.0.2" - deep-eql "^4.1.2" - get-func-name "^2.0.0" - loupe "^2.3.1" + check-error "^1.0.3" + deep-eql "^4.1.3" + get-func-name "^2.0.2" + loupe "^2.3.6" pathval "^1.1.1" - type-detect "^4.0.5" + type-detect "^4.1.0" chalk@^4.1.0: version "4.1.2" @@ -1093,10 +1033,12 @@ chalk@^5.3.0: resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385" integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== -check-error@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" - integrity sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA== +check-error@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.3.tgz#a6502e4312a7ee969f646e83bb3ddd56281bd694" + integrity sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg== + dependencies: + get-func-name "^2.0.2" chokidar@^3.5.3: version "3.6.0" @@ -1150,7 +1092,7 @@ combined-stream@^1.0.8: dependencies: delayed-stream "~1.0.0" -commander@^12.0.0, commander@^12.1.0: +commander@^12.1.0: version "12.1.0" resolved "https://registry.yarnpkg.com/commander/-/commander-12.1.0.tgz#01423b36f501259fdaac4d0e4d60c96c991585d3" integrity sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA== @@ -1171,11 +1113,11 @@ cron-validator@^1.3.1: integrity sha512-C1HsxuPCY/5opR55G5/WNzyEGDWFVG+6GLrA+fW/sCTcP6A6NTjUP2AK7B8n2PyFs90kDG2qzwm8LMheADku6A== cross-fetch@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" - integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== + version "3.1.8" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.8.tgz#0327eba65fd68a7d119f8fb2bf9334a1a7956f82" + integrity sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg== dependencies: - node-fetch "2.6.7" + node-fetch "^2.6.12" crypto-hash@^1.3.0: version "1.3.0" @@ -1183,11 +1125,11 @@ crypto-hash@^1.3.0: integrity sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg== debug@^4.3.5: - version "4.3.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.6.tgz#2ab2c38fbaffebf8aa95fdfe6d88438c7a13c52b" - integrity sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg== + version "4.4.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a" + integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== dependencies: - ms "2.1.2" + ms "^2.1.3" decamelize@^4.0.0: version "4.0.0" @@ -1199,10 +1141,10 @@ decimal.js@^10.4.0, decimal.js@^10.4.3: resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== -deep-eql@^4.1.2: - version "4.1.3" - resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.3.tgz#7c7775513092f7df98d8df9996dd085eb668cc6d" - integrity sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw== +deep-eql@^4.1.3: + version "4.1.4" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.4.tgz#d0d3912865911bb8fac5afb4e3acfa6a28dc72b7" + integrity sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg== dependencies: type-detect "^4.0.0" @@ -1240,9 +1182,9 @@ dot-case@^3.0.4: tslib "^2.0.3" dotenv@^16.0.3: - version "16.4.5" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.5.tgz#cdd3b3b604cb327e286b4762e13502f717cb099f" - integrity sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg== + version "16.4.7" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.7.tgz#0e20c5b82950140aa99be360a8a5f52335f53c26" + integrity sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ== emoji-regex@^8.0.0: version "8.0.0" @@ -1262,9 +1204,9 @@ es6-promisify@^5.0.0: es6-promise "^4.0.3" escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + version "3.2.0" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== escape-string-regexp@^4.0.0: version "4.0.0" @@ -1296,10 +1238,10 @@ file-uri-to-path@1.0.0: resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== dependencies: to-regex-range "^5.0.1" @@ -1336,19 +1278,19 @@ fs.realpath@^1.0.0: integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-func-name@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" - integrity sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig== +get-func-name@^2.0.1, get-func-name@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.2.tgz#0d7cf20cd13fda808669ffa88f4ffc7a3943fc41" + integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ== glob-parent@~5.1.2: version "5.1.2" @@ -1448,9 +1390,9 @@ isomorphic-ws@^4.0.1: integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w== jayson@^4.0.0, jayson@^4.1.0, jayson@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/jayson/-/jayson-4.1.1.tgz#282ff13d3cea09776db684b7eeca98c47b2fa99a" - integrity sha512-5ZWm4Q/0DHPyeMfAsrwViwUS2DMVsQgWh8bEEIVTkfb3DzHZ2L3G5WUnF+AKmGjjM9r1uAv73SaqC1/U4RL45w== + version "4.1.3" + resolved "https://registry.yarnpkg.com/jayson/-/jayson-4.1.3.tgz#db9be2e4287d9fef4fc05b5fe367abe792c2eee8" + integrity sha512-LtXh5aYZodBZ9Fc3j6f2w+MTNcnxteMOrb+QgIouguGOulWi0lieEkOUg+HkjjFs0DGoWDds6bi4E9hpNFLulQ== dependencies: "@types/connect" "^3.4.33" "@types/node" "^12.12.54" @@ -1496,7 +1438,7 @@ json-stringify-safe@^5.0.1: resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== -json5@^1.0.1: +json5@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== @@ -1538,12 +1480,12 @@ long@^5.0.0: resolved "https://registry.yarnpkg.com/long/-/long-5.2.3.tgz#a3ba97f3877cf1d778eccbcb048525ebb77499e1" integrity sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q== -loupe@^2.3.1: - version "2.3.6" - resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.6.tgz#76e4af498103c532d1ecc9be102036a21f787b53" - integrity sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA== +loupe@^2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.7.tgz#6e69b7d4db7d3ab436328013d37d1c8c3540c697" + integrity sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA== dependencies: - get-func-name "^2.0.0" + get-func-name "^2.0.1" lower-case@^2.0.2: version "2.0.2" @@ -1577,9 +1519,9 @@ minimatch@^5.0.1, minimatch@^5.1.6: brace-expansion "^2.0.1" minimist@^1.2.0, minimist@^1.2.6: - version "1.2.7" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" - integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== mkdirp@^0.5.1: version "0.5.6" @@ -1589,9 +1531,9 @@ mkdirp@^0.5.1: minimist "^1.2.6" mocha@^10.2.0: - version "10.7.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.7.0.tgz#9e5cbed8fa9b37537a25bd1f7fb4f6fc45458b9a" - integrity sha512-v8/rBWr2VO5YkspYINnvu81inSz2y3ODJrhO175/Exzor1RcEZZkizgE2A+w/CAXXoESS8Kys5E62dOHGHzULA== + version "10.8.2" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.8.2.tgz#8d8342d016ed411b12a429eb731b825f961afb96" + integrity sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg== dependencies: ansi-colors "^4.1.3" browser-stdout "^1.3.1" @@ -1614,11 +1556,6 @@ mocha@^10.2.0: yargs-parser "^20.2.9" yargs-unparser "^2.0.0" -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - ms@^2.0.0, ms@^2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" @@ -1632,14 +1569,7 @@ no-case@^3.0.4: lower-case "^2.0.2" tslib "^2.0.3" -node-fetch@2.6.7: - version "2.6.7" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" - integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== - dependencies: - whatwg-url "^5.0.0" - -node-fetch@^2.6.7, node-fetch@^2.7.0: +node-fetch@^2.6.12, node-fetch@^2.6.7, node-fetch@^2.7.0: version "2.7.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== @@ -1647,9 +1577,9 @@ node-fetch@^2.6.7, node-fetch@^2.7.0: whatwg-url "^5.0.0" node-gyp-build@^4.3.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.5.0.tgz#7a64eefa0b21112f89f58379da128ac177f20e40" - integrity sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg== + version "4.8.4" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.4.tgz#8a70ee85464ae52327772a90d66c6077a900cfc8" + integrity sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ== normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" @@ -1703,29 +1633,11 @@ picomatch@^2.0.4, picomatch@^2.2.1: integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== prettier@^2.6.2: - version "2.8.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.1.tgz#4e1fd11c34e2421bc1da9aea9bd8127cd0a35efc" - integrity sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg== - -protobufjs@^7.2.5: - version "7.3.2" - resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-7.3.2.tgz#60f3b7624968868f6f739430cfbc8c9370e26df4" - integrity sha512-RXyHaACeqXeqAKGLDl68rQKbmObRsTIn4TYVUUug1KfS47YWCo5MacGITEryugIgZqORCvJWEk4l449POg5Txg== - dependencies: - "@protobufjs/aspromise" "^1.1.2" - "@protobufjs/base64" "^1.1.2" - "@protobufjs/codegen" "^2.0.4" - "@protobufjs/eventemitter" "^1.1.0" - "@protobufjs/fetch" "^1.1.0" - "@protobufjs/float" "^1.0.2" - "@protobufjs/inquire" "^1.1.0" - "@protobufjs/path" "^1.1.2" - "@protobufjs/pool" "^1.1.0" - "@protobufjs/utf8" "^1.1.0" - "@types/node" ">=13.7.0" - long "^5.0.0" + version "2.8.8" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" + integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== -protobufjs@^7.2.6: +protobufjs@^7.2.5, protobufjs@^7.4.0: version "7.4.0" resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-7.4.0.tgz#7efe324ce9b3b61c82aae5de810d287bc08a248a" integrity sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw== @@ -1785,9 +1697,9 @@ rpc-websockets@^7.5.1: utf-8-validate "^5.0.2" rpc-websockets@^9.0.2: - version "9.0.2" - resolved "https://registry.yarnpkg.com/rpc-websockets/-/rpc-websockets-9.0.2.tgz#4c1568d00b8100f997379a363478f41f8f4b242c" - integrity sha512-YzggvfItxMY3Lwuax5rC18inhbjJv9Py7JXRHxTIi94JOLrqBsSsUUc5bbl5W6c11tXhdfpDPK0KzBhoGe8jjw== + version "9.0.4" + resolved "https://registry.yarnpkg.com/rpc-websockets/-/rpc-websockets-9.0.4.tgz#9d8ee82533b5d1e13d9ded729e3e38d0d8fa083f" + integrity sha512-yWZWN0M+bivtoNLnaDbtny4XchdAIF5Q4g/ZsC5UC61Ckbp0QczwO8fg44rV3uYmY4WHd+EZQbn90W1d8ojzqQ== dependencies: "@swc/helpers" "^0.5.11" "@types/uuid" "^8.3.4" @@ -1820,6 +1732,45 @@ snake-case@^3.0.4: dot-case "^3.0.4" tslib "^2.0.3" +solana-bankrun-darwin-arm64@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/solana-bankrun-darwin-arm64/-/solana-bankrun-darwin-arm64-0.3.1.tgz#65ab6cd2e74eef260c38251f4c53721cf5b9030f" + integrity sha512-9LWtH/3/WR9fs8Ve/srdo41mpSqVHmRqDoo69Dv1Cupi+o1zMU6HiEPUHEvH2Tn/6TDbPEDf18MYNfReLUqE6A== + +solana-bankrun-darwin-universal@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/solana-bankrun-darwin-universal/-/solana-bankrun-darwin-universal-0.3.1.tgz#bf691457cf046e8739c021ca11e48de5b4fefd45" + integrity sha512-muGHpVYWT7xCd8ZxEjs/bmsbMp8XBqroYGbE4lQPMDUuLvsJEIrjGqs3MbxEFr71sa58VpyvgywWd5ifI7sGIg== + +solana-bankrun-darwin-x64@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/solana-bankrun-darwin-x64/-/solana-bankrun-darwin-x64-0.3.1.tgz#c6f30c0a6bc3e1621ed90ce7562f26e93bf5303f" + integrity sha512-oCaxfHyt7RC3ZMldrh5AbKfy4EH3YRMl8h6fSlMZpxvjQx7nK7PxlRwMeflMnVdkKKp7U8WIDak1lilIPd3/lg== + +solana-bankrun-linux-x64-gnu@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/solana-bankrun-linux-x64-gnu/-/solana-bankrun-linux-x64-gnu-0.3.1.tgz#78b522f1a581955a48f43a8fb560709c11301cfd" + integrity sha512-PfRFhr7igGFNt2Ecfdzh3li9eFPB3Xhmk0Eib17EFIB62YgNUg3ItRnQQFaf0spazFjjJLnglY1TRKTuYlgSVA== + +solana-bankrun-linux-x64-musl@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/solana-bankrun-linux-x64-musl/-/solana-bankrun-linux-x64-musl-0.3.1.tgz#1a044a132138a0084e82406ec7bf4939f06bed68" + integrity sha512-6r8i0NuXg3CGURql8ISMIUqhE7Hx/O7MlIworK4oN08jYrP0CXdLeB/hywNn7Z8d1NXrox/NpYUgvRm2yIzAsQ== + +solana-bankrun@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/solana-bankrun/-/solana-bankrun-0.3.1.tgz#13665ab7c1c15ec2b3354aae56980d0ded514998" + integrity sha512-inRwON7fBU5lPC36HdEqPeDg15FXJYcf77+o0iz9amvkUMJepcwnRwEfTNyMVpVYdgjTOBW5vg+596/3fi1kGA== + dependencies: + "@solana/web3.js" "^1.68.0" + bs58 "^4.0.1" + optionalDependencies: + solana-bankrun-darwin-arm64 "0.3.1" + solana-bankrun-darwin-universal "0.3.1" + solana-bankrun-darwin-x64 "0.3.1" + solana-bankrun-linux-x64-gnu "0.3.1" + solana-bankrun-linux-x64-musl "0.3.1" + source-map-support@^0.5.6: version "0.5.21" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" @@ -1963,36 +1914,26 @@ ts-node@^10.9.1: yn "3.1.1" tsconfig-paths@^3.5.0: - version "3.14.1" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a" - integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ== + version "3.15.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" + integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== dependencies: "@types/json5" "^0.0.29" - json5 "^1.0.1" + json5 "^1.0.2" minimist "^1.2.6" strip-bom "^3.0.0" -tslib@^2.0.3: - version "2.4.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e" - integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA== - -tslib@^2.4.0: - version "2.6.3" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.3.tgz#0438f810ad7a9edcde7a241c3d80db693c8cbfe0" - integrity sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ== - -type-detect@^4.0.0, type-detect@^4.0.5: - version "4.0.8" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" - integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== +tslib@^2.0.3, tslib@^2.8.0: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== -typescript@^4.3.5: - version "4.9.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.4.tgz#a2a3d2756c079abda241d75f149df9d561091e78" - integrity sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg== +type-detect@^4.0.0, type-detect@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.1.0.tgz#deb2453e8f08dcae7ae98c626b13dddb0155906c" + integrity sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw== -typescript@^4.8.2: +typescript@^4.3.5, typescript@^4.8.2: version "4.9.5" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== @@ -2002,10 +1943,10 @@ undici-types@~5.26.4: resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== -undici-types@~6.18.2: - version "6.18.2" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.18.2.tgz#8b678cf939d4fc9ec56be3c68ed69c619dee28b0" - integrity sha512-5ruQbENj95yDYJNS3TvcaxPMshV7aizdv/hWYjGIKoANWKjhWNBsr2YEuYZKodQulB1b8l7ILOuDQep3afowQQ== +undici-types@~6.20.0: + version "6.20.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.20.0.tgz#8171bf22c1f588d1554d55bf204bc624af388433" + integrity sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg== utf-8-validate@^5.0.2: version "5.0.10" @@ -2062,16 +2003,16 @@ ws@^7.5.10: integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== ws@^8.5.0: - version "8.11.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.11.0.tgz#6a0d36b8edfd9f96d8b25683db2f8d7de6e8e143" - integrity sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg== + version "8.18.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" + integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== y18n@^5.0.5: version "5.0.8" resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== -yaml@^2.5.0: +yaml@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.6.1.tgz#42f2b1ba89203f374609572d5349fb8686500773" integrity sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg== From bd7efdadb0bdf9cf0f9e4299f9225dcdadc17635 Mon Sep 17 00:00:00 2001 From: Jon Gurary <91919816+jgur-psyops@users.noreply.github.com> Date: Tue, 24 Dec 2024 02:58:06 -0500 Subject: [PATCH 13/59] Transfer account guide (#267) * Guide to migrating a pwned account to a new wallet * Moar docs --- TRANSFER_ACCOUNT_GUIDE.md | 55 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 TRANSFER_ACCOUNT_GUIDE.md diff --git a/TRANSFER_ACCOUNT_GUIDE.md b/TRANSFER_ACCOUNT_GUIDE.md new file mode 100644 index 000000000..57528e7fd --- /dev/null +++ b/TRANSFER_ACCOUNT_GUIDE.md @@ -0,0 +1,55 @@ +## TRANSFER ACCOUNT GUIDE + +A user got their wallet pwned and you need to move them to a new mrgn account? Read on. + +Before you begin: + +- You must be an admin of the group where the user account is based. If this is a mrgn-owned group, + that's probably the multisig (AZtUUe9GvTFq9kfseu9jxTioSgdSfjgmZfGQBmhVpTj1). If this is arena, + that's the pool owner/creator. +- If you have admin, consider freezing the account with `SetAccountFlag` (passing `DISABLED_FLAG`) + to prevent the attacker from doing anything. + +You will need: + +- Contact with the affected user (they must sign to conclude the process) +- Access to the mrgn CLI (clients/rust/marginfi-cli) +- Rust 1.75.0 (as of December 2024) +- Access to either the front end (at /migrate/account) or a TS scripting environment where you can run a simple TS script. If using the latter, we'll assume the affected wallet is located at `/keys/affected_wallet.json` +- (Optional) A wallet with sol at a location you know. We'll assume it's at + `/keys/some_wallet.json`. You'll need this for most CLI interactions but not in this particular + use case. + +Steps: + +- Open terminal at `clients/rust/marginfi-cli` +- Create a profile: + +``` +cargo run profile create \ +--name mainnet-group-ms \ +--cluster mainnet \ +--rpc-url https://api.mainnet-beta.solana.com \ +--group 4qp6Fx6tnZkY5Wropq9wUYgtFxXKwE6viZxFHg3rdAG8 \ +--program-id MFv2hWf31Z9kbCa1snEPYctwafyhdvnV7FZnsebVacA \ +--multisig AZtUUe9GvTFq9kfseu9jxTioSgdSfjgmZfGQBmhVpTj1 \ +--keypair-path ~/keys/some_wallet.json \ +--fee-payer ~/keys/some_wallet.json +``` + +Feel free to use a custom rpc instead if you have one. Omit the last two lines if you don't have a local wallet with SOL. + +- `cargo run profile set mainnet-group-ms` to use this profile, `cargo run profile show` to confirm your settings. +- Run this ix to generate a tx to set the migration flag: +``` +cargo run account set-flag THE_COMPROMISED_ACCOUNT \ + --account-migration-enabled +``` +* confirm the profile name when prompted to proceed +* Copy the tx contents (everything between the --------) from the CLI output. Open Squads and go to + Developers > TX Builder> Import base28 encoded tx. Paste what you copied. +* Type a description for the tx and hit Initiate Transaction. Wait for votes and execute. + +Steps for User: +* After admin completes the above, navigate to the migration page (or script) to sign the finalized + migration ix. From 933e11ee9b49fbb2d98ec12c6f48189c43168dd6 Mon Sep 17 00:00:00 2001 From: Ilia Zyrin Date: Tue, 28 Jan 2025 00:37:11 +0100 Subject: [PATCH 14/59] Liquidate tests (#277) * enables liquidators to liquidate staked collateral accounts * Adds tests for normal and staked collateral liquidation to the TS suite. --- .../rust/marginfi-cli/src/processor/mod.rs | 2 +- package.json | 20 +- programs/marginfi/fuzz/src/lib.rs | 2 +- .../marginfi_account/liquidate.rs | 50 ++-- .../marginfi/src/state/marginfi_account.rs | 82 +++--- test-utils/src/marginfi_account.rs | 2 +- tests/01_initGroup.spec.ts | 1 - tests/02_configGroup.spec.ts | 3 - tests/04_configureBank.spec.ts | 3 +- tests/08_borrow.spec.ts | 3 +- tests/09_liquidate.spec.ts | 244 ++++++++++++++++++ tests/s02_addBank.spec.ts | 4 +- tests/s04_borrow.spec.ts | 19 +- tests/s05_solAppreciates.spec.ts | 4 - tests/s07_liquidate.spec.ts | 240 +++++++++++++++++ tests/utils/types.ts | 3 +- tests/utils/user-instructions.ts | 55 +++- yarn.lock | 15 +- 18 files changed, 631 insertions(+), 121 deletions(-) create mode 100644 tests/09_liquidate.spec.ts create mode 100644 tests/s07_liquidate.spec.ts diff --git a/clients/rust/marginfi-cli/src/processor/mod.rs b/clients/rust/marginfi-cli/src/processor/mod.rs index 47ec2a3ef..61f35ffb1 100644 --- a/clients/rust/marginfi-cli/src/processor/mod.rs +++ b/clients/rust/marginfi-cli/src/processor/mod.rs @@ -2362,7 +2362,7 @@ pub fn marginfi_account_liquidate( let mut ix = Instruction { program_id: config.program_id, accounts: marginfi::accounts::LendingAccountLiquidate { - marginfi_group: profile.marginfi_group.unwrap(), + group: profile.marginfi_group.unwrap(), asset_bank: asset_bank_pk, liab_bank: liability_bank_pk, liquidator_marginfi_account: marginfi_account_pk, diff --git a/package.json b/package.json index c7f215e6e..8e5e0f561 100644 --- a/package.json +++ b/package.json @@ -6,25 +6,25 @@ "dependencies": { "@coral-xyz/anchor": "^0.30.1", "@coral-xyz/spl-token": "^0.30.1", + "@mrgnlabs/marginfi-client-v2": "^4.0.0", + "@mrgnlabs/mrgn-common": "^1.8.0", + "@solana/spl-single-pool-classic": "^1.0.2", "@solana/spl-token": "^0.4.8", "@solana/web3.js": "^1.95.2", - "@solana/spl-single-pool-classic": "^1.0.2", - "@mrgnlabs/mrgn-common": "^1.8.0", - "@mrgnlabs/marginfi-client-v2": "^4.0.0", + "bignumber.js": "^9.1.2", "mocha": "^10.2.0", - "ts-mocha": "^10.0.0", - "bignumber.js": "^9.1.2" + "ts-mocha": "^10.0.0" }, "devDependencies": { - "anchor-bankrun": "^0.4.0", - "solana-bankrun": "^0.3.0", "@types/bn.js": "^5.1.0", "@types/chai": "^4.3.0", - "@types/mocha": "^9.0.0", + "@types/mocha": "^10.0.10", + "anchor-bankrun": "^0.4.0", + "big.js": "^6.2.1", "chai": "^4.3.4", "prettier": "^2.6.2", + "solana-bankrun": "^0.3.0", "ts-node": "^10.9.1", - "typescript": "^4.3.5", - "big.js": "^6.2.1" + "typescript": "^5.7.3" } } diff --git a/programs/marginfi/fuzz/src/lib.rs b/programs/marginfi/fuzz/src/lib.rs index 0c34b0b88..3b0aa28fa 100644 --- a/programs/marginfi/fuzz/src/lib.rs +++ b/programs/marginfi/fuzz/src/lib.rs @@ -773,7 +773,7 @@ impl<'state> MarginfiFuzzContext<'state> { Context::new( &marginfi::id(), &mut marginfi::instructions::LendingAccountLiquidate { - marginfi_group: AccountLoader::try_from(airls(&self.marginfi_group))?, + group: AccountLoader::try_from(airls(&self.marginfi_group))?, asset_bank: AccountLoader::try_from(airls(&asset_bank.bank))?, liab_bank: AccountLoader::try_from(airls(&liab_bank.bank))?, liquidator_marginfi_account: AccountLoader::try_from(airls( diff --git a/programs/marginfi/src/instructions/marginfi_account/liquidate.rs b/programs/marginfi/src/instructions/marginfi_account/liquidate.rs index 8355a529c..b25eb48ee 100644 --- a/programs/marginfi/src/instructions/marginfi_account/liquidate.rs +++ b/programs/marginfi/src/instructions/marginfi_account/liquidate.rs @@ -2,7 +2,9 @@ use crate::constants::{ INSURANCE_VAULT_SEED, LIQUIDATION_INSURANCE_FEE, LIQUIDATION_LIQUIDATOR_FEE, }; use crate::events::{AccountEventHeader, LendingAccountLiquidateEvent, LiquidationBalances}; -use crate::state::marginfi_account::{calc_amount, calc_value, RiskEngine}; +use crate::state::marginfi_account::{ + calc_amount, calc_value, get_remaining_accounts_per_bank, RiskEngine, +}; use crate::state::marginfi_group::{Bank, BankVaultType}; use crate::state::price::{OraclePriceFeedAdapter, OraclePriceType, PriceAdapter, PriceBias}; use crate::utils::{validate_asset_tags, validate_bank_asset_tags}; @@ -114,7 +116,7 @@ pub fn lending_account_liquidate<'info>( let LendingAccountLiquidate { liquidator_marginfi_account: liquidator_marginfi_account_loader, liquidatee_marginfi_account: liquidatee_marginfi_account_loader, - marginfi_group: marginfi_group_loader, + group: marginfi_group_loader, .. } = ctx.accounts; @@ -143,16 +145,18 @@ pub fn lending_account_liquidate<'info>( ctx.accounts.liab_bank.key(), )?; } - let init_liquidatee_remaining_len = liquidatee_marginfi_account.get_remaining_accounts_len(); - let pre_liquidation_health = { - let liquidatee_accounts_starting_pos = - ctx.remaining_accounts.len() - init_liquidatee_remaining_len; - let liquidatee_remaining_accounts = - &ctx.remaining_accounts[liquidatee_accounts_starting_pos..]; + let init_liquidatee_remaining_len = liquidatee_marginfi_account.get_remaining_accounts_len()?; + + let liquidatee_accounts_starting_pos = + ctx.remaining_accounts.len() - init_liquidatee_remaining_len; + let liquidatee_remaining_accounts = &ctx.remaining_accounts[liquidatee_accounts_starting_pos..]; + + let pre_liquidation_health = RiskEngine::new(&liquidatee_marginfi_account, liquidatee_remaining_accounts)? - .check_pre_liquidation_condition_and_get_account_health(&ctx.accounts.liab_bank.key())? - }; + .check_pre_liquidation_condition_and_get_account_health( + &ctx.accounts.liab_bank.key(), + )?; // ##Accounting changes## @@ -160,8 +164,10 @@ pub fn lending_account_liquidate<'info>( let asset_amount = I80F48::from_num(asset_amount); let mut asset_bank = ctx.accounts.asset_bank.load_mut()?; + let asset_bank_remaining_accounts_len = get_remaining_accounts_per_bank(&asset_bank)? - 1; + let asset_price = { - let oracle_ais = &ctx.remaining_accounts[0..1]; + let oracle_ais = &ctx.remaining_accounts[0..asset_bank_remaining_accounts_len]; let asset_pf = OraclePriceFeedAdapter::try_from_bank_config( &asset_bank.config, oracle_ais, @@ -171,8 +177,10 @@ pub fn lending_account_liquidate<'info>( }; let mut liab_bank = ctx.accounts.liab_bank.load_mut()?; + let liab_bank_remaining_accounts_len = get_remaining_accounts_per_bank(&liab_bank)? - 1; let liab_price = { - let oracle_ais = &ctx.remaining_accounts[1..2]; + let oracle_ais = &ctx.remaining_accounts[asset_bank_remaining_accounts_len + ..(asset_bank_remaining_accounts_len + liab_bank_remaining_accounts_len)]; let liab_pf = OraclePriceFeedAdapter::try_from_bank_config( &liab_bank.config, oracle_ais, @@ -364,12 +372,10 @@ pub fn lending_account_liquidate<'info>( // ## Risk checks ## - let liquidatee_accounts_starting_pos = - ctx.remaining_accounts.len() - init_liquidatee_remaining_len; + let liquidator_remaining_acc_len = liquidator_marginfi_account.get_remaining_accounts_len()?; let liquidator_accounts_starting_pos = - liquidatee_accounts_starting_pos - liquidator_marginfi_account.get_remaining_accounts_len(); + liquidatee_accounts_starting_pos - liquidator_remaining_acc_len; - let liquidatee_remaining_accounts = &ctx.remaining_accounts[liquidatee_accounts_starting_pos..]; let liquidator_remaining_accounts = &ctx.remaining_accounts[liquidator_accounts_starting_pos..liquidatee_accounts_starting_pos]; @@ -392,7 +398,7 @@ pub fn lending_account_liquidate<'info>( signer: Some(ctx.accounts.signer.key()), marginfi_account: liquidator_marginfi_account_loader.key(), marginfi_account_authority: liquidator_marginfi_account.authority, - marginfi_group: ctx.accounts.marginfi_group.key(), + marginfi_group: ctx.accounts.group.key(), }, liquidatee_marginfi_account: liquidatee_marginfi_account_loader.key(), liquidatee_marginfi_account_authority: liquidatee_marginfi_account.authority, @@ -411,23 +417,23 @@ pub fn lending_account_liquidate<'info>( #[derive(Accounts)] pub struct LendingAccountLiquidate<'info> { - pub marginfi_group: AccountLoader<'info, MarginfiGroup>, + pub group: AccountLoader<'info, MarginfiGroup>, #[account( mut, - constraint = asset_bank.load()?.group == marginfi_group.key() + has_one = group )] pub asset_bank: AccountLoader<'info, Bank>, #[account( mut, - constraint = liab_bank.load()?.group == marginfi_group.key() + has_one = group )] pub liab_bank: AccountLoader<'info, Bank>, #[account( mut, - constraint = liquidator_marginfi_account.load()?.group == marginfi_group.key() + has_one = group )] pub liquidator_marginfi_account: AccountLoader<'info, MarginfiAccount>, @@ -438,7 +444,7 @@ pub struct LendingAccountLiquidate<'info> { #[account( mut, - constraint = liquidatee_marginfi_account.load()?.group == marginfi_group.key() + has_one = group )] pub liquidatee_marginfi_account: AccountLoader<'info, MarginfiAccount>, diff --git a/programs/marginfi/src/state/marginfi_account.rs b/programs/marginfi/src/state/marginfi_account.rs index 460a69c74..581bfd5d9 100644 --- a/programs/marginfi/src/state/marginfi_account.rs +++ b/programs/marginfi/src/state/marginfi_account.rs @@ -5,9 +5,9 @@ use super::{ use crate::{ assert_struct_align, assert_struct_size, check, constants::{ - ASSET_TAG_DEFAULT, ASSET_TAG_STAKED, BANKRUPT_THRESHOLD, EMISSIONS_FLAG_BORROW_ACTIVE, - EMISSIONS_FLAG_LENDING_ACTIVE, EMPTY_BALANCE_THRESHOLD, EXP_10_I80F48, - MIN_EMISSIONS_START_TIME, SECONDS_PER_YEAR, ZERO_AMOUNT_THRESHOLD, + ASSET_TAG_DEFAULT, ASSET_TAG_SOL, ASSET_TAG_STAKED, BANKRUPT_THRESHOLD, + EMISSIONS_FLAG_BORROW_ACTIVE, EMISSIONS_FLAG_LENDING_ACTIVE, EMPTY_BALANCE_THRESHOLD, + EXP_10_I80F48, MIN_EMISSIONS_START_TIME, SECONDS_PER_YEAR, ZERO_AMOUNT_THRESHOLD, }, debug, math_error, prelude::{MarginfiError, MarginfiResult}, @@ -53,6 +53,25 @@ pub const IN_FLASHLOAN_FLAG: u64 = 1 << 1; pub const FLASHLOAN_ENABLED_FLAG: u64 = 1 << 2; pub const TRANSFER_AUTHORITY_ALLOWED_FLAG: u64 = 1 << 3; +/// 4 for `ASSET_TAG_STAKED` (bank, oracle, lst mint, lst pool), 2 for all others (bank, oracle) +pub fn get_remaining_accounts_per_bank(bank: &Bank) -> MarginfiResult { + get_remaining_accounts_per_asset_tag(bank.config.asset_tag) +} + +/// 4 for `ASSET_TAG_STAKED` (bank, oracle, lst mint, lst pool), 2 for all others (bank, oracle) +fn get_remaining_accounts_per_balance(balance: &Balance) -> MarginfiResult { + get_remaining_accounts_per_asset_tag(balance.bank_asset_tag) +} + +/// 4 for `ASSET_TAG_STAKED` (bank, oracle, lst mint, lst pool), 2 for all others (bank, oracle) +fn get_remaining_accounts_per_asset_tag(asset_tag: u8) -> MarginfiResult { + match asset_tag { + ASSET_TAG_DEFAULT | ASSET_TAG_SOL => Ok(2), + ASSET_TAG_STAKED => Ok(4), + _ => err!(MarginfiError::AssetTagMismatch), + } +} + impl MarginfiAccount { /// Set the initial data for the marginfi account. pub fn initialize(&mut self, group: Pubkey, authority: Pubkey) { @@ -60,13 +79,15 @@ impl MarginfiAccount { self.group = group; } - pub fn get_remaining_accounts_len(&self) -> usize { - self.lending_account - .balances - .iter() - .filter(|b| b.active) - .count() - * 2 // TODO: Make account count oracle setup specific + /// Expected length of remaining accounts to be passed in borrow/liquidate, INCLUDING the bank + /// key, oracle, and optional accounts like lst mint/pool, etc. + pub fn get_remaining_accounts_len(&self) -> MarginfiResult { + let mut total = 0usize; + for balance in self.lending_account.balances.iter().filter(|b| b.active) { + let num_accounts = get_remaining_accounts_per_balance(balance)?; + total += num_accounts; + } + Ok(total) } pub fn set_flag(&mut self, flag: u64) { @@ -169,51 +190,24 @@ impl<'info> BankAccountWithPriceFeed<'_, 'info> { lending_account: &'a LendingAccount, remaining_ais: &'info [AccountInfo<'info>], ) -> MarginfiResult>> { - let active_balances = lending_account - .balances - .iter() - .filter(|balance| balance.active) - .collect::>(); - - let expected_accounts = active_balances - .iter() - .map(|balance| { - if balance.bank_asset_tag == ASSET_TAG_STAKED { - 4 - } else { - 2 - } - }) - .sum::(); - - debug!("Expecting {} remaining accounts", expected_accounts); - debug!("Got {} remaining accounts", remaining_ais.len()); - - check!( - expected_accounts <= remaining_ais.len(), - MarginfiError::MissingPythOrBankAccount - ); - let clock = Clock::get()?; let mut account_index = 0; - active_balances + lending_account + .balances .iter() + .filter(|balance| balance.active) .map(|balance| { - // Determine number of accounts to process for this balance - let num_accounts = if balance.bank_asset_tag == ASSET_TAG_STAKED { - 4 - } else { - 2 - }; - // Get the bank let bank_ai = remaining_ais.get(account_index).unwrap(); + let bank_al = AccountLoader::::try_from(bank_ai)?; + + // Determine number of accounts to process for this balance + let num_accounts = get_remaining_accounts_per_balance(balance)?; check!( balance.bank_pk.eq(bank_ai.key), MarginfiError::InvalidBankAccount ); - let bank_al = AccountLoader::::try_from(bank_ai)?; let bank = bank_al.load()?; // Get the oracle, and the LST mint and sol pool if applicable (staked only) diff --git a/test-utils/src/marginfi_account.rs b/test-utils/src/marginfi_account.rs index 6eb85468e..4fc0d836e 100644 --- a/test-utils/src/marginfi_account.rs +++ b/test-utils/src/marginfi_account.rs @@ -424,7 +424,7 @@ impl MarginfiAccountFixture { let liab_bank = liab_bank_fixture.load().await; let mut accounts = marginfi::accounts::LendingAccountLiquidate { - marginfi_group: marginfi_account.group, + group: marginfi_account.group, asset_bank: asset_bank_fixture.key, liab_bank: liab_bank_fixture.key, liquidator_marginfi_account: self.key, diff --git a/tests/01_initGroup.spec.ts b/tests/01_initGroup.spec.ts index d53624f74..717ffdc7f 100644 --- a/tests/01_initGroup.spec.ts +++ b/tests/01_initGroup.spec.ts @@ -7,7 +7,6 @@ import { } from "./utils/group-instructions"; import { Marginfi } from "../target/types/marginfi"; import { - ecosystem, globalFeeWallet, groupAdmin, marginfiGroup, diff --git a/tests/02_configGroup.spec.ts b/tests/02_configGroup.spec.ts index f44302f74..bed028702 100644 --- a/tests/02_configGroup.spec.ts +++ b/tests/02_configGroup.spec.ts @@ -1,8 +1,5 @@ import { - AnchorProvider, - getProvider, Program, - Wallet, workspace, } from "@coral-xyz/anchor"; import { Keypair, Transaction } from "@solana/web3.js"; diff --git a/tests/04_configureBank.spec.ts b/tests/04_configureBank.spec.ts index 1341717ac..36ffdab54 100644 --- a/tests/04_configureBank.spec.ts +++ b/tests/04_configureBank.spec.ts @@ -1,11 +1,10 @@ import { BN, Program, workspace } from "@coral-xyz/anchor"; import { configureBank } from "./utils/group-instructions"; -import { PublicKey, Transaction } from "@solana/web3.js"; +import { Transaction } from "@solana/web3.js"; import { Marginfi } from "../target/types/marginfi"; import { bankKeypairUsdc, groupAdmin, marginfiGroup } from "./rootHooks"; import { assertBNEqual, assertI80F48Approx } from "./utils/genericTests"; import { assert } from "chai"; -import { InterestRateConfigRaw } from "@mrgnlabs/marginfi-client-v2"; import { bigNumberToWrappedI80F48 } from "@mrgnlabs/mrgn-common"; import { ASSET_TAG_SOL, diff --git a/tests/08_borrow.spec.ts b/tests/08_borrow.spec.ts index 785c04702..f569f9bd3 100644 --- a/tests/08_borrow.spec.ts +++ b/tests/08_borrow.spec.ts @@ -24,9 +24,8 @@ import { getTokenBalance, } from "./utils/genericTests"; import { assert } from "chai"; -import { borrowIx, depositIx } from "./utils/user-instructions"; +import { borrowIx } from "./utils/user-instructions"; import { USER_ACCOUNT } from "./utils/mocks"; -import { createMintToInstruction } from "@solana/spl-token"; import { updatePriceAccount } from "./utils/pyth_mocks"; import { wrappedI80F48toBigNumber } from "@mrgnlabs/mrgn-common"; diff --git a/tests/09_liquidate.spec.ts b/tests/09_liquidate.spec.ts new file mode 100644 index 000000000..edc20ab95 --- /dev/null +++ b/tests/09_liquidate.spec.ts @@ -0,0 +1,244 @@ +import { + AnchorProvider, + BN, + getProvider, + Program, + Wallet, + workspace, +} from "@coral-xyz/anchor"; +import { Transaction } from "@solana/web3.js"; +import { Marginfi } from "../target/types/marginfi"; +import { + bankKeypairA, + bankKeypairUsdc, + ecosystem, + groupAdmin, + marginfiGroup, + oracles, + users, + verbose, +} from "./rootHooks"; +import { + assertBNApproximately, + assertI80F48Approx, + assertI80F48Equal, + assertKeysEqual, + getTokenBalance, +} from "./utils/genericTests"; +import { assert } from "chai"; +import { liquidateIx } from "./utils/user-instructions"; +import { USER_ACCOUNT } from "./utils/mocks"; +import { updatePriceAccount } from "./utils/pyth_mocks"; +import { bigNumberToWrappedI80F48, wrappedI80F48toBigNumber } from "@mrgnlabs/mrgn-common"; +import { configureBank } from "./utils/instructions"; +import { defaultBankConfigOptRaw } from "./utils/types"; + +describe("Liquidate user", () => { + const program = workspace.Marginfi as Program; + const provider = getProvider() as AnchorProvider; + const wallet = provider.wallet as Wallet; + + const confidenceInterval = 0.0212; // 1% confidence * CONF_INTERVAL_MULTIPLE + const liquidateAmountA = .2; + const liquidateAmountA_native = new BN( + liquidateAmountA * 10 ** ecosystem.tokenADecimals + ); + + it("oracle data refreshes", async () => { + const usdcPrice = BigInt(oracles.usdcPrice * 10 ** oracles.usdcDecimals); + await updatePriceAccount( + oracles.usdcOracle, + { + exponent: -oracles.usdcDecimals, + aggregatePriceInfo: { + price: usdcPrice, + conf: usdcPrice / BigInt(100), // 1% of the price + }, + twap: { + // aka ema + valueComponent: usdcPrice, + }, + }, + wallet + ); + + const tokenAPrice = BigInt( + oracles.tokenAPrice * 10 ** oracles.tokenADecimals + ); + await updatePriceAccount( + oracles.tokenAOracle, + { + exponent: -oracles.tokenADecimals, + aggregatePriceInfo: { + price: tokenAPrice, + conf: tokenAPrice / BigInt(100), // 1% of the price + }, + twap: { + // aka ema + valueComponent: tokenAPrice, + }, + }, + wallet + ); + }); + + /** + * Maintenance ratio allowed = 10% + * Liquidator fee = 2.5% + * Insurance fee = 2.5% + * Confidence interval = 2.12% (1% confidence * 2.12 = 2.12%) + * + * Token A is worth $10 with conf $0.212 (worth $9.788 low, $10.212 high) + * USDC is worth $1 with conf $0.0212 (worth $0.9788 low, $1.0212 high) + * + * User has: + * ASSETS + * [index 0] 200,000,000 (2) Token A (worth $20) + * DEBTS + * [index 1] 5,050,000 (5.05) USDC (worth $5.05) + * Note: $5.05 is 25.25% of $20, which is more than 10%, so liquidation is allowed + * + * Liquidator tries to repay .2 token A (worth $2) of liquidatee's debt, so liquidator's assets + * increase by this value, while liquidatee's assets decrease by this value. Which also means that: + * + * Liquidator must pay + * value of A minus liquidator fee (low bias within the confidence interval): .2 * (1 - 0.025) * 9.788 = $1.90866 + * USDC equivalent (high bias): 1.90866 / 1.0212 = $1.869036 (1,869,036 native) + * + * Liquidatee receives + * value of A minus (liquidator fee + insurance) (low bias): .2 * (1 - 0.025 - 0.025) * 9.788 = $1.8608 + * USDC equivalent (high bias): 1.8608 / 1.0212 = $1.822457 (1,822,457 native) + * + * Insurance fund collects the difference + * USDC diff 1,869,036 - 1,822,457 = 46,579 + */ + + it("(user 1) liquidate user 0 who borrowed USDC against their token A position - happy path", async () => { + const liquidatee = users[0]; + const liquidator = users[1]; + + const assetBankKey = bankKeypairA.publicKey; + const assetBankBefore = await program.account.bank.fetch(assetBankKey); + const liabilityBankKey = bankKeypairUsdc.publicKey; + const liabilityBankBefore = await program.account.bank.fetch(liabilityBankKey); + + const liquidateeAccount = liquidatee.accounts.get(USER_ACCOUNT); + const liquidateeMarginfiAccount = await program.account.marginfiAccount.fetch(liquidateeAccount); + + const liquidatorAccount = liquidator.accounts.get(USER_ACCOUNT); + const liquidatorMarginfiAccount = await program.account.marginfiAccount.fetch(liquidatorAccount); + + const liquidateeBalances = liquidateeMarginfiAccount.lendingAccount.balances; + const liquidatorBalances = liquidatorMarginfiAccount.lendingAccount.balances; + const liabilitySharesBefore = liquidateeBalances[1].liabilityShares; + assertI80F48Equal(liquidatorBalances[1].assetShares, 0); + + const insuranceVaultBalance = await getTokenBalance(provider, liabilityBankBefore.insuranceVault); + assert.equal(insuranceVaultBalance, 0); + + const sharesA = wrappedI80F48toBigNumber(liquidateeBalances[0].assetShares).toNumber(); + const shareValueA = wrappedI80F48toBigNumber(assetBankBefore.assetShareValue).toNumber(); + const sharesUsdc = wrappedI80F48toBigNumber(liabilitySharesBefore).toNumber(); + const shareValueUsdc = wrappedI80F48toBigNumber(liabilityBankBefore.liabilityShareValue).toNumber(); + if (verbose) { + console.log("BEFORE"); + console.log("liability bank insurance vault before: " + insuranceVaultBalance.toLocaleString()); + console.log("user 0 (liquidatee) Token A asset shares: " + sharesA.toString()); + console.log(" value (in Token A native): " + (sharesA * shareValueA).toLocaleString()); + console.log(" value (in dollars): $" + (sharesA * shareValueA * oracles.tokenAPrice / 10 ** (oracles.tokenADecimals)).toLocaleString()); + console.log("user 0 (liquidatee) USDC liability shares: " + sharesUsdc.toString()); + console.log(" debt (in USDC native): " + (sharesUsdc * shareValueUsdc).toLocaleString()); + console.log(" debt (in dollars): $" + (sharesUsdc * shareValueUsdc * oracles.usdcPrice / 10 ** (oracles.usdcDecimals)).toLocaleString()); + console.log("user 1 (liquidator) USDC asset shares: " + wrappedI80F48toBigNumber(liquidatorBalances[0].assetShares).toString()); + console.log("user 1 (liquidator) USDC liability shares: " + wrappedI80F48toBigNumber(liquidatorBalances[0].liabilityShares).toString()); + } + + let config = defaultBankConfigOptRaw(); + config.assetWeightInit = bigNumberToWrappedI80F48(0.05); + config.assetWeightMaint = bigNumberToWrappedI80F48(0.1); + await groupAdmin.mrgnProgram!.provider.sendAndConfirm!( + new Transaction().add( + await configureBank(program, { + marginfiGroup: marginfiGroup.publicKey, + admin: groupAdmin.wallet.publicKey, + bank: assetBankKey, + bankConfigOpt: config, + }) + ) + ); + + const tokenALowPrice = oracles.tokenAPrice * (1 - confidenceInterval); // see top of test + const usdcHighPrice = oracles.usdcPrice * (1 + confidenceInterval); // see top of test + const insuranceToBeCollected = (liquidateAmountA * 0.025 * shareValueA * tokenALowPrice / (shareValueUsdc * usdcHighPrice)) * 10 ** (oracles.usdcDecimals); + + await liquidator.mrgnProgram.provider.sendAndConfirm( + new Transaction().add( + await liquidateIx(program, { + assetBankKey, + liabilityBankKey, + liquidatorMarginfiAccount: liquidatorAccount, + liquidatorMarginfiAccountAuthority: liquidatorMarginfiAccount.authority, + liquidateeMarginfiAccount: liquidateeAccount, + remaining: [ + oracles.tokenAOracle.publicKey, + oracles.usdcOracle.publicKey, + liabilityBankKey, + oracles.usdcOracle.publicKey, + assetBankKey, + oracles.tokenAOracle.publicKey, + assetBankKey, + oracles.tokenAOracle.publicKey, + liabilityBankKey, + oracles.usdcOracle.publicKey, + ], + amount: liquidateAmountA_native, + }) + ) + ); + + const liquidateeMarginfiAccountAfter = await program.account.marginfiAccount.fetch(liquidateeAccount); + const liquidatorMarginfiAccountAfter = await program.account.marginfiAccount.fetch(liquidatorAccount); + + const liquidateeBalancesAfter = liquidateeMarginfiAccountAfter.lendingAccount.balances; + const liquidatorBalancesAfter = liquidatorMarginfiAccountAfter.lendingAccount.balances; + + const sharesAAfter = wrappedI80F48toBigNumber(liquidateeBalancesAfter[0].assetShares).toNumber(); + const sharesUsdcAfter = wrappedI80F48toBigNumber(liquidateeBalancesAfter[1].liabilityShares).toNumber(); + + assertI80F48Equal(liquidateeBalancesAfter[0].assetShares, wrappedI80F48toBigNumber(liquidateeBalances[0].assetShares).toNumber() - liquidateAmountA_native.toNumber()); + assertI80F48Equal(liquidateeBalancesAfter[0].liabilityShares, 0); + assertI80F48Equal(liquidateeBalancesAfter[1].assetShares, 0); + + assertI80F48Equal(liquidatorBalancesAfter[0].liabilityShares, 0); + assertI80F48Equal(liquidatorBalancesAfter[1].assetShares, liquidateAmountA_native); + assertI80F48Equal(liquidatorBalancesAfter[1].liabilityShares, 0); + + const insuranceVaultBalanceAfter = await getTokenBalance(provider, liabilityBankBefore.insuranceVault); + + assert.approximately(insuranceVaultBalanceAfter, insuranceToBeCollected, (insuranceToBeCollected * .1)); // see top of test + + if (verbose) { + console.log("AFTER"); + console.log("liability bank insurance vault after (usdc): " + insuranceVaultBalanceAfter.toLocaleString()); + console.log("user 0 (liquidatee) Token A asset shares after: " + sharesAAfter.toString()); + console.log(" value (in Token A native): " + (sharesAAfter * shareValueA).toLocaleString()); + console.log(" value (in dollars): $" + (sharesAAfter * shareValueA * oracles.tokenAPrice / 10 ** (oracles.tokenADecimals)).toLocaleString()); + console.log("user 0 (liquidatee) USDC liability shares after: " + sharesUsdcAfter.toString()); + console.log(" debt (in USDC native): " + (sharesUsdcAfter * shareValueUsdc).toLocaleString()); + console.log(" debt (in dollars): $" + (sharesUsdcAfter * shareValueUsdc * oracles.usdcPrice / 10 ** (oracles.usdcDecimals)).toLocaleString()); + console.log("user 1 (liquidator) USDC asset shares after: " + wrappedI80F48toBigNumber(liquidatorBalancesAfter[0].assetShares).toString()); + console.log("user 1 (liquidator) USDC liability shares after: " + wrappedI80F48toBigNumber(liquidatorBalancesAfter[0].liabilityShares).toString()); + console.log("user 1 (liquidator) Token A asset shares after: " + wrappedI80F48toBigNumber(liquidatorBalancesAfter[1].assetShares).toString()); + console.log("user 1 (liquidator) Token A liability shares after: " + wrappedI80F48toBigNumber(liquidatorBalancesAfter[1].liabilityShares).toString()); + } + + assert.equal(liquidatorBalancesAfter[1].active, true); + assertKeysEqual(liquidatorBalancesAfter[1].bankPk, assetBankKey); + + let now = Math.floor(Date.now() / 1000); + assertBNApproximately(liquidatorBalancesAfter[0].lastUpdate, now, 2); + assertBNApproximately(liquidatorBalancesAfter[1].lastUpdate, now, 2); + assertBNApproximately(liquidateeBalancesAfter[0].lastUpdate, now, 2); + assertBNApproximately(liquidateeBalancesAfter[1].lastUpdate, now, 2); + }); +}); diff --git a/tests/s02_addBank.spec.ts b/tests/s02_addBank.spec.ts index 5e87cc19f..b632381e3 100644 --- a/tests/s02_addBank.spec.ts +++ b/tests/s02_addBank.spec.ts @@ -1,5 +1,5 @@ import { BN, Program, workspace } from "@coral-xyz/anchor"; -import { AccountMeta, Keypair, PublicKey, Transaction } from "@solana/web3.js"; +import { AccountMeta, Keypair, Transaction } from "@solana/web3.js"; import { addBank, addBankPermissionless, @@ -35,8 +35,6 @@ import { ASSET_TAG_STAKED, defaultBankConfig, defaultStakedInterestSettings, - I80F48_ONE, - SINGLE_POOL_PROGRAM_ID, } from "./utils/types"; import { assert } from "chai"; import { getBankrunBlockhash } from "./utils/spl-staking-utils"; diff --git a/tests/s04_borrow.spec.ts b/tests/s04_borrow.spec.ts index 20852085f..008f7dc61 100644 --- a/tests/s04_borrow.spec.ts +++ b/tests/s04_borrow.spec.ts @@ -1,45 +1,30 @@ import { - AnchorProvider, BN, - getProvider, Program, - Wallet, workspace, } from "@coral-xyz/anchor"; -import { Keypair, Transaction } from "@solana/web3.js"; +import { Transaction } from "@solana/web3.js"; import { Marginfi } from "../target/types/marginfi"; import { - bankKeypairA, bankKeypairSol, bankKeypairUsdc, bankrunContext, bankrunProgram, - bankRunProvider, banksClient, ecosystem, - groupAdmin, marginfiGroup, - numUsers, oracles, users, validators, - verbose, } from "./rootHooks"; import { assertBankrunTxFailed, - assertBNApproximately, - assertI80F48Approx, - assertI80F48Equal, assertKeysEqual, - getTokenBalance, } from "./utils/genericTests"; import { assert } from "chai"; -import { accountInit, borrowIx, depositIx } from "./utils/user-instructions"; +import { borrowIx } from "./utils/user-instructions"; import { USER_ACCOUNT } from "./utils/mocks"; -import { createMintToInstruction } from "@solana/spl-token"; -import { deriveLiquidityVault } from "./utils/pdas"; import { getBankrunBlockhash } from "./utils/spl-staking-utils"; -import { BanksTransactionResultWithMeta } from "solana-bankrun"; describe("Deposit funds (included staked assets)", () => { const program = workspace.Marginfi as Program; diff --git a/tests/s05_solAppreciates.spec.ts b/tests/s05_solAppreciates.spec.ts index 36b2885c2..a1c908a5a 100644 --- a/tests/s05_solAppreciates.spec.ts +++ b/tests/s05_solAppreciates.spec.ts @@ -18,19 +18,15 @@ import { oracles, users, validators, - verbose, } from "./rootHooks"; import { assertBankrunTxFailed, - assertI80F48Approx, assertKeysEqual, } from "./utils/genericTests"; import { assert } from "chai"; import { borrowIx } from "./utils/user-instructions"; import { USER_ACCOUNT } from "./utils/mocks"; import { getBankrunBlockhash } from "./utils/spl-staking-utils"; -import { wrappedI80F48toBigNumber } from "@mrgnlabs/mrgn-common"; -import { dumpBankrunLogs } from "./utils/tools"; describe("Borrow power grows as v0 Staked SOL gains value from appreciation", () => { const program = workspace.Marginfi as Program; diff --git a/tests/s07_liquidate.spec.ts b/tests/s07_liquidate.spec.ts new file mode 100644 index 000000000..f8f0e765d --- /dev/null +++ b/tests/s07_liquidate.spec.ts @@ -0,0 +1,240 @@ +import { + AnchorProvider, + BN, + getProvider, + Program, + workspace, +} from "@coral-xyz/anchor"; +import { PublicKey, Transaction } from "@solana/web3.js"; +import { Marginfi } from "../target/types/marginfi"; +import { + bankKeypairA, + bankKeypairSol, + bankKeypairUsdc, + bankrunContext, + bankrunProgram, + bankRunProvider, + banksClient, + ecosystem, + groupAdmin, + marginfiGroup, + oracles, + users, + validators, + verbose, +} from "./rootHooks"; +import { + assertBNApproximately, + assertI80F48Equal, + getTokenBalance, +} from "./utils/genericTests"; +import { assert } from "chai"; +import { liquidateIx } from "./utils/user-instructions"; +import { USER_ACCOUNT } from "./utils/mocks"; +import { getBankrunBlockhash } from "./utils/spl-staking-utils"; +import { bigNumberToWrappedI80F48, getMint, wrappedI80F48toBigNumber } from "@mrgnlabs/mrgn-common"; +import { defaultStakedInterestSettings, StakedSettingsEdit } from "./utils/types"; +import { editStakedSettings, propagateStakedSettings } from "./utils/group-instructions"; +import { deriveStakedSettings } from "./utils/pdas"; + +describe("Liquidate user (including staked assets)", () => { + const program = workspace.Marginfi as Program; + let settingsKey: PublicKey; + before(async () => { + [settingsKey] = deriveStakedSettings( + program.programId, + marginfiGroup.publicKey + ); + }); + + const confidenceInterval = 0.0212; // 1% confidence * CONF_INTERVAL_MULTIPLE + const liquidateAmountSol = 0.1; + const liquidateAmountSol_native = new BN( + liquidateAmountSol * 10 ** ecosystem.wsolDecimals + ); + + /** + * Maintenance ratio allowed = 10% + * Liquidator fee = 2.5% + * Insurance fee = 2.5% + * Confidence interval = 2.12% (1% confidence * 2.12 = 2.12%) + * + * + * Staked SOL (hereinafter Staked) is worth $305.04680972609873 with conf ~$6.46 (worth $298.573 low, $311.506 high) + * SOL is worth $150 with conf ~$3.18 (worth $146.82 low, $153.18 high) + * + * User 2 has a validator 0 Staked [0] deposit position and a SOL [1] debt position: + * ASSETS + * [index 0] 1,000,000,000 (1) Staked (worth $305.047) + * DEBTS + * [index 1] 1,122,110,000.0000017 (1.12211) SOL (worth $168.317) + * Note: $168.317 is ~55% of $305.047, which is more than 10%, so liquidation is allowed + * + * Liquidator tries to repay 0.1 Staked (worth $30.5047) of liquidatee's debt, so liquidator's assets + * increase by this value, while liquidatee's assets decrease by this value. Which also means that: + * + * Liquidator must pay + * value of Staked minus liquidator fee (low bias within the confidence interval): .1 * (1 - 0.025) * 298.573 = $29.133 + * SOL equivalent (high bias): 29.133 / 153.18 ~= 0.1902 (190,188,014 native) + * + * Liquidatee receives + * value of Staked minus (liquidator fee + insurance) (low bias): .1 * (1 - 0.025 - 0.025) * 298.573 = $27.659 + * SOL equivalent (high bias): 27.659 / 153.18 ~= 0.1806 (180,565,347 native) + * + * Insurance fund collects the difference + * SOL diff 190,188,014 - 180,565,347 = 9,622,667 (the actual number in the test can be different, since the Staked price is approximated) + */ + + it("(user 1) liquidates user 2 with staked SOL against their SOL position - succeeds", async () => { + const liquidatee = users[2]; + const liquidator = users[1]; + + const assetBankKey = validators[0].bank; + const assetBankBefore = await bankrunProgram.account.bank.fetch(assetBankKey); + const liabilityBankKey = bankKeypairSol.publicKey; + const liabilityBankBefore = await bankrunProgram.account.bank.fetch(liabilityBankKey); + + const liquidateeAccount = liquidatee.accounts.get(USER_ACCOUNT); + const liquidateeMarginfiAccount = await bankrunProgram.account.marginfiAccount.fetch(liquidateeAccount); + + const liquidatorAccount = liquidator.accounts.get(USER_ACCOUNT); + const liquidatorMarginfiAccount = await bankrunProgram.account.marginfiAccount.fetch(liquidatorAccount); + + const liquidateeBalances = liquidateeMarginfiAccount.lendingAccount.balances; + const liquidatorBalances = liquidatorMarginfiAccount.lendingAccount.balances; + + const insuranceVaultBalance = await getTokenBalance(bankRunProvider, liabilityBankBefore.insuranceVault); + assert.equal(insuranceVaultBalance, 0); + + const sharesStaked = wrappedI80F48toBigNumber(liquidateeBalances[0].assetShares).toNumber(); + const shareValueStaked = wrappedI80F48toBigNumber(assetBankBefore.assetShareValue).toNumber(); + const sharesSol = wrappedI80F48toBigNumber(liquidateeBalances[1].liabilityShares).toNumber(); + const shareValueSol = wrappedI80F48toBigNumber(liabilityBankBefore.liabilityShareValue).toNumber(); + + const solPool = await bankRunProvider.connection.getAccountInfo( + validators[0].splSolPool + ); + const solPoolLamports = solPool.lamports; + const mintData = await getMint(bankRunProvider.connection, validators[0].splMint); + const stakedPrice = oracles.wsolPrice * (solPoolLamports) / Number(mintData.supply); + + if (verbose) { + console.log("BEFORE"); + console.log("liability bank insurance vault before: " + insuranceVaultBalance.toLocaleString()); + console.log("user 0 (liquidatee) Staked asset shares: " + sharesStaked.toString()); + console.log(" value (in Staked native): " + (sharesStaked * shareValueStaked).toLocaleString()); + console.log(" value (in dollars): $" + (sharesStaked * shareValueStaked * stakedPrice / 10 ** (oracles.wsolDecimals)).toLocaleString()); + console.log("user 0 (liquidatee) SOL liability shares: " + sharesSol.toString()); + console.log(" debt (in SOL native): " + (sharesSol * shareValueSol).toLocaleString()); + console.log(" debt (in dollars): $" + (sharesSol * shareValueSol * oracles.wsolPrice / 10 ** (oracles.wsolDecimals)).toLocaleString()); + console.log("user 1 (liquidator) staked asset shares: " + wrappedI80F48toBigNumber(liquidatorBalances[0].assetShares).toString()); + console.log("user 1 (liquidator) USDC liability shares: " + wrappedI80F48toBigNumber(liquidatorBalances[0].liabilityShares).toString()); + } + + const defaultSettings = defaultStakedInterestSettings( + oracles.wsolOracle.publicKey + ); + const settings: StakedSettingsEdit = { + oracle: defaultSettings.oracle, + assetWeightInit: bigNumberToWrappedI80F48(0.05), + assetWeightMaint: bigNumberToWrappedI80F48(0.1), + depositLimit: defaultSettings.depositLimit, + totalAssetValueInitLimit: defaultSettings.totalAssetValueInitLimit, + oracleMaxAge: defaultSettings.oracleMaxAge, + riskTier: defaultSettings.riskTier, + }; + let editTx = new Transaction().add( + await editStakedSettings(groupAdmin.mrgnProgram, { + settingsKey: settingsKey, + settings: settings, + }), + await propagateStakedSettings(program, { + settings: settingsKey, + bank: assetBankKey, + oracle: defaultSettings.oracle, + }) + ); + editTx.recentBlockhash = await getBankrunBlockhash(bankrunContext); + editTx.sign(groupAdmin.wallet); + await banksClient.processTransaction(editTx); + + const stakedLowPrice = stakedPrice * (1 - confidenceInterval); // see top of test + const wsolHighPrice = oracles.wsolPrice * (1 + confidenceInterval); // see top of test + const insuranceToBeCollected = (liquidateAmountSol * 0.025 * shareValueStaked * stakedLowPrice / (shareValueSol * wsolHighPrice)) * 10 ** (oracles.wsolDecimals); + + let tx = new Transaction().add( + await liquidateIx(bankrunProgram, { + assetBankKey, + liabilityBankKey, + liquidatorMarginfiAccount: liquidatorAccount, + liquidatorMarginfiAccountAuthority: liquidatorMarginfiAccount.authority, + liquidateeMarginfiAccount: liquidateeAccount, + remaining: [ + oracles.wsolOracle.publicKey, + validators[0].splMint, + validators[0].splSolPool, + oracles.wsolOracle.publicKey, + liabilityBankKey, + oracles.wsolOracle.publicKey, + assetBankKey, + oracles.wsolOracle.publicKey, + validators[0].splMint, + validators[0].splSolPool, + assetBankKey, + oracles.wsolOracle.publicKey, + validators[0].splMint, + validators[0].splSolPool, + liabilityBankKey, + oracles.wsolOracle.publicKey, + ], + amount: liquidateAmountSol_native, + }) + ); + tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); + tx.sign(liquidator.wallet); + await banksClient.processTransaction(tx); + + const liquidateeMarginfiAccountAfter = await bankrunProgram.account.marginfiAccount.fetch(liquidateeAccount); + const liquidatorMarginfiAccountAfter = await bankrunProgram.account.marginfiAccount.fetch(liquidatorAccount); + + const liquidateeBalancesAfter = liquidateeMarginfiAccountAfter.lendingAccount.balances; + const liquidatorBalancesAfter = liquidatorMarginfiAccountAfter.lendingAccount.balances; + + const sharesStakedAfter = wrappedI80F48toBigNumber(liquidateeBalancesAfter[0].assetShares).toNumber(); + const sharesSolAfter = wrappedI80F48toBigNumber(liquidateeBalancesAfter[1].liabilityShares).toNumber(); + + assertI80F48Equal(liquidateeBalancesAfter[0].assetShares, wrappedI80F48toBigNumber(liquidateeBalances[0].assetShares).toNumber() - liquidateAmountSol_native.toNumber()); + assertI80F48Equal(liquidateeBalancesAfter[0].liabilityShares, 0); + assertI80F48Equal(liquidateeBalancesAfter[1].assetShares, 0); + + assertI80F48Equal(liquidatorBalancesAfter[0].liabilityShares, 0); + assertI80F48Equal(liquidatorBalancesAfter[1].assetShares, wrappedI80F48toBigNumber(liquidatorBalances[1].assetShares).toNumber() + liquidateAmountSol_native.toNumber()); + assertI80F48Equal(liquidatorBalancesAfter[1].liabilityShares, 0); + + const insuranceVaultBalanceAfter = await getTokenBalance(bankRunProvider, liabilityBankBefore.insuranceVault); + assert.approximately(insuranceVaultBalanceAfter, insuranceToBeCollected, (insuranceToBeCollected * .1)); // see top of test + + if (verbose) { + console.log("AFTER"); + console.log("liability bank insurance vault after (SOL): " + insuranceVaultBalanceAfter.toLocaleString()); + console.log("user 0 (liquidatee) Staked asset shares after: " + sharesStakedAfter.toString()); + console.log(" value (in Staked native): " + (sharesStakedAfter * shareValueStaked).toLocaleString()); + console.log(" value (in dollars): $" + (sharesStakedAfter * shareValueStaked * stakedPrice / 10 ** (oracles.wsolDecimals)).toLocaleString()); + console.log("user 0 (liquidatee) SOL liability shares after: " + sharesSolAfter.toString()); + console.log(" debt (in SOL native): " + (sharesSolAfter * shareValueSol).toLocaleString()); + console.log(" debt (in dollars): $" + (sharesSolAfter * shareValueSol * oracles.wsolPrice / 10 ** (oracles.wsolDecimals)).toLocaleString()); + console.log("user 1 (liquidator) SOL asset shares after: " + wrappedI80F48toBigNumber(liquidatorBalancesAfter[0].assetShares).toString()); + console.log("user 1 (liquidator) SOL liability shares after: " + wrappedI80F48toBigNumber(liquidatorBalancesAfter[0].liabilityShares).toString()); + console.log("user 1 (liquidator) Staked asset shares after: " + wrappedI80F48toBigNumber(liquidatorBalancesAfter[1].assetShares).toString()); + console.log("user 1 (liquidator) Staked liability shares after: " + wrappedI80F48toBigNumber(liquidatorBalancesAfter[1].liabilityShares).toString()); + } + + let now = Math.floor(Date.now() / 1000); + assertBNApproximately(liquidatorBalancesAfter[0].lastUpdate, now, 20); + assertBNApproximately(liquidatorBalancesAfter[1].lastUpdate, now, 20); + assertBNApproximately(liquidateeBalancesAfter[0].lastUpdate, now, 20); + assertBNApproximately(liquidateeBalancesAfter[1].lastUpdate, now, 20); + }); +}); + +// TODO: 0,1 - should fail \ No newline at end of file diff --git a/tests/utils/types.ts b/tests/utils/types.ts index 0b2b514fa..a73b8b904 100644 --- a/tests/utils/types.ts +++ b/tests/utils/types.ts @@ -255,7 +255,8 @@ export type BankConfigOptRaw = { | { pythLegacy: {} } | { switchboardV2: {} } | { pythPushOracle: {} } - | { switchboardPull: {} }; + | { switchboardPull: {} } + | { stakedWithPythPush: {} }; keys: PublicKey[]; } | null; diff --git a/tests/utils/user-instructions.ts b/tests/utils/user-instructions.ts index 59f624952..f8c8ceb10 100644 --- a/tests/utils/user-instructions.ts +++ b/tests/utils/user-instructions.ts @@ -29,7 +29,6 @@ export const accountInit = ( marginfiAccount: args.marginfiAccount, authority: args.authority, feePayer: args.feePayer, - // systemProgram }) .instruction(); @@ -61,7 +60,6 @@ export const depositIx = (program: Program, args: DepositArgs) => { signer: args.authority, bank: args.bank, signerTokenAccount: args.tokenAccount, - // bankLiquidityVault = deriveLiquidityVault(id, bank) tokenProgram: TOKEN_PROGRAM_ID, }) .instruction(); @@ -102,8 +100,6 @@ export const borrowIx = (program: Program, args: BorrowIxArgs) => { signer: args.authority, bank: args.bank, destinationTokenAccount: args.tokenAccount, - // bankLiquidityVaultAuthority = deriveLiquidityVaultAuthority(id, bank); - // bankLiquidityVault = deriveLiquidityVault(id, bank) tokenProgram: TOKEN_PROGRAM_ID, }) .remainingAccounts(oracleMeta) @@ -111,3 +107,54 @@ export const borrowIx = (program: Program, args: BorrowIxArgs) => { return ix; }; + +export type LiquidateIxArgs = { + assetBankKey: PublicKey; + liabilityBankKey: PublicKey; + liquidatorMarginfiAccount: PublicKey; + liquidatorMarginfiAccountAuthority: PublicKey; + liquidateeMarginfiAccount: PublicKey; + remaining: PublicKey[]; + amount: BN; +}; + +/** + * Creates a Liquidate instruction. + * `remaining`: + * liab_mint_ai (if token2022 mint), + * asset_oracle_ai, + * liab_oracle_ai, + * liquidator_observation_ais..., + * liquidatee_observation_ais..., + * + * @param program - The marginfi program instance. + * @param args - The arguments required to create the instruction. + * @returns The TransactionInstruction object. + */ +export const liquidateIx = ( + program: Program, + args: LiquidateIxArgs +) => { + const oracleMeta: AccountMeta[] = args.remaining.map((pubkey) => { + if (!(pubkey instanceof PublicKey)) { + console.error("Invalid remaining key:", pubkey); + throw new Error("remaining contains invalid keys"); + } + + return { pubkey, isSigner: false, isWritable: false }; + }); + + // Return the instruction + return program.methods + .lendingAccountLiquidate(args.amount) + .accounts({ + assetBank: args.assetBankKey, + liabBank: args.liabilityBankKey, + liquidatorMarginfiAccount: args.liquidatorMarginfiAccount, + signer: args.liquidatorMarginfiAccountAuthority, + liquidateeMarginfiAccount: args.liquidateeMarginfiAccount, + tokenProgram: TOKEN_PROGRAM_ID, + }) + .remainingAccounts(oracleMeta) + .instruction(); +}; \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 971c66a5b..f4362e60c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -708,10 +708,10 @@ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== -"@types/mocha@^9.0.0": - version "9.1.1" - resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-9.1.1.tgz#e7c4f1001eefa4b8afbd1eee27a237fee3bf29c4" - integrity sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw== +"@types/mocha@^10.0.10": + version "10.0.10" + resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-10.0.10.tgz#91f62905e8d23cbd66225312f239454a23bebfa0" + integrity sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q== "@types/node-fetch@^2.6.2": version "2.6.12" @@ -1933,11 +1933,16 @@ type-detect@^4.0.0, type-detect@^4.1.0: resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.1.0.tgz#deb2453e8f08dcae7ae98c626b13dddb0155906c" integrity sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw== -typescript@^4.3.5, typescript@^4.8.2: +typescript@^4.8.2: version "4.9.5" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== +typescript@^5.7.3: + version "5.7.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.7.3.tgz#919b44a7dbb8583a9b856d162be24a54bf80073e" + integrity sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw== + undici-types@~5.26.4: version "5.26.5" resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" From 56dc7c477c8f9507d03c45ec9752af77cad80e74 Mon Sep 17 00:00:00 2001 From: Jon Gurary <91919816+jgur-psyops@users.noreply.github.com> Date: Thu, 30 Jan 2025 11:18:24 -0500 Subject: [PATCH 15/59] Minor bug in staked settings propagation (#285) * minor bugfix and refactor for checking certain oracle settings when configuring staked banks --- programs/marginfi/src/events.rs | 8 +++++++- .../src/instructions/marginfi_group/add_pool.rs | 1 + .../marginfi_group/add_pool_permissionless.rs | 1 + .../marginfi_group/add_pool_with_seed.rs | 1 + .../marginfi_group/configure_bank.rs | 3 +++ .../marginfi_group/edit_stake_settings.rs | 6 ++++++ .../marginfi_group/propagate_staked_settings.rs | 17 +++++++++++------ programs/marginfi/src/state/marginfi_group.rs | 6 +++++- 8 files changed, 35 insertions(+), 8 deletions(-) diff --git a/programs/marginfi/src/events.rs b/programs/marginfi/src/events.rs index 24f6fe381..eca6c3c9b 100644 --- a/programs/marginfi/src/events.rs +++ b/programs/marginfi/src/events.rs @@ -1,4 +1,4 @@ -use crate::{prelude::*, state::marginfi_group::BankConfigOpt}; +use crate::{prelude::*, state::marginfi_group::BankConfigOpt, StakedSettingsEditConfig}; use anchor_lang::prelude::*; // Event headers @@ -54,6 +54,12 @@ pub struct LendingPoolBankConfigureFrozenEvent { pub borrow_limit: u64, } +#[event] +pub struct EditStakedSettingsEvent { + pub group: Pubkey, + pub settings: StakedSettingsEditConfig, +} + #[event] pub struct LendingPoolBankAccrueInterestEvent { pub header: GroupEventHeader, diff --git a/programs/marginfi/src/instructions/marginfi_group/add_pool.rs b/programs/marginfi/src/instructions/marginfi_group/add_pool.rs index 31e50c71a..bff17ad30 100644 --- a/programs/marginfi/src/instructions/marginfi_group/add_pool.rs +++ b/programs/marginfi/src/instructions/marginfi_group/add_pool.rs @@ -76,6 +76,7 @@ pub fn lending_pool_add_bank( bank.config.validate()?; bank.config .validate_oracle_setup(ctx.remaining_accounts, None, None, None)?; + bank.config.validate_oracle_age()?; emit!(LendingPoolBankCreateEvent { header: GroupEventHeader { diff --git a/programs/marginfi/src/instructions/marginfi_group/add_pool_permissionless.rs b/programs/marginfi/src/instructions/marginfi_group/add_pool_permissionless.rs index 51c1b9cce..2d4b28731 100644 --- a/programs/marginfi/src/instructions/marginfi_group/add_pool_permissionless.rs +++ b/programs/marginfi/src/instructions/marginfi_group/add_pool_permissionless.rs @@ -113,6 +113,7 @@ pub fn lending_pool_add_bank_permissionless( Some(stake_pool), Some(sol_pool), )?; + bank.config.validate_oracle_age()?; emit!(LendingPoolBankCreateEvent { header: GroupEventHeader { diff --git a/programs/marginfi/src/instructions/marginfi_group/add_pool_with_seed.rs b/programs/marginfi/src/instructions/marginfi_group/add_pool_with_seed.rs index 3cb3d8f6a..38162fe1f 100644 --- a/programs/marginfi/src/instructions/marginfi_group/add_pool_with_seed.rs +++ b/programs/marginfi/src/instructions/marginfi_group/add_pool_with_seed.rs @@ -76,6 +76,7 @@ pub fn lending_pool_add_bank_with_seed( bank.config.validate()?; bank.config .validate_oracle_setup(ctx.remaining_accounts, None, None, None)?; + bank.config.validate_oracle_age()?; emit!(LendingPoolBankCreateEvent { header: GroupEventHeader { diff --git a/programs/marginfi/src/instructions/marginfi_group/configure_bank.rs b/programs/marginfi/src/instructions/marginfi_group/configure_bank.rs index dd6ad5492..a240c3258 100644 --- a/programs/marginfi/src/instructions/marginfi_group/configure_bank.rs +++ b/programs/marginfi/src/instructions/marginfi_group/configure_bank.rs @@ -41,6 +41,9 @@ pub fn lending_pool_configure_bank( bank.config .validate_oracle_setup(ctx.remaining_accounts, None, None, None)?; } + if bank_config.oracle_max_age.is_some() { + bank.config.validate_oracle_age()?; + } emit!(LendingPoolBankConfigureEvent { header: GroupEventHeader { diff --git a/programs/marginfi/src/instructions/marginfi_group/edit_stake_settings.rs b/programs/marginfi/src/instructions/marginfi_group/edit_stake_settings.rs index c4a6f97f1..e67609b95 100644 --- a/programs/marginfi/src/instructions/marginfi_group/edit_stake_settings.rs +++ b/programs/marginfi/src/instructions/marginfi_group/edit_stake_settings.rs @@ -1,3 +1,4 @@ +use crate::events::EditStakedSettingsEvent; // Used by the group admin to edit the default features of staked collateral banks. Remember to // propagate afterwards. use crate::state::marginfi_group::{RiskTier, WrappedI80F48}; @@ -32,6 +33,11 @@ pub fn edit_staked_settings( staked_settings.validate()?; + emit!(EditStakedSettingsEvent { + group: ctx.accounts.marginfi_group.key(), + settings + }); + Ok(()) } diff --git a/programs/marginfi/src/instructions/marginfi_group/propagate_staked_settings.rs b/programs/marginfi/src/instructions/marginfi_group/propagate_staked_settings.rs index d9515bef1..ba8d63f40 100644 --- a/programs/marginfi/src/instructions/marginfi_group/propagate_staked_settings.rs +++ b/programs/marginfi/src/instructions/marginfi_group/propagate_staked_settings.rs @@ -9,11 +9,8 @@ pub fn propagate_staked_settings(ctx: Context) -> Resul let settings = ctx.accounts.staked_settings.load()?; let mut bank = ctx.accounts.bank.load_mut()?; - // Only validate the oracle if it has changed - if settings.oracle != bank.config.oracle_keys[0] { - bank.config - .validate_oracle_setup(ctx.remaining_accounts, None, None, None)?; - } + let (oracle_before, oracle_after) = (bank.config.oracle_keys[0], settings.oracle); + let (age_before, age_after) = (bank.config.oracle_max_age, settings.oracle_max_age); bank.config.oracle_keys[0] = settings.oracle; bank.config.asset_weight_init = settings.asset_weight_init; @@ -23,8 +20,16 @@ pub fn propagate_staked_settings(ctx: Context) -> Resul bank.config.oracle_max_age = settings.oracle_max_age; bank.config.risk_tier = settings.risk_tier; + // Only validate the oracle info if it has changed + if oracle_before != oracle_after { + bank.config + .validate_oracle_setup(ctx.remaining_accounts, None, None, None)?; + } + if age_before != age_after { + bank.config.validate_oracle_age()?; + } + bank.config.validate()?; - // ...Possibly emit event. Ok(()) } diff --git a/programs/marginfi/src/state/marginfi_group.rs b/programs/marginfi/src/state/marginfi_group.rs index 579766e06..b86010a30 100644 --- a/programs/marginfi/src/state/marginfi_group.rs +++ b/programs/marginfi/src/state/marginfi_group.rs @@ -1462,11 +1462,15 @@ impl BankConfig { stake_pool: Option, sol_pool: Option, ) -> MarginfiResult { + OraclePriceFeedAdapter::validate_bank_config(self, ais, lst_mint, stake_pool, sol_pool)?; + Ok(()) + } + + pub fn validate_oracle_age(&self) -> MarginfiResult { check!( self.oracle_max_age >= ORACLE_MIN_AGE, MarginfiError::InvalidOracleSetup ); - OraclePriceFeedAdapter::validate_bank_config(self, ais, lst_mint, stake_pool, sol_pool)?; Ok(()) } From 2d2c867f7bd5bee0b7c8f1fe0b9f8c004cd85b29 Mon Sep 17 00:00:00 2001 From: Jon Gurary <91919816+jgur-psyops@users.noreply.github.com> Date: Thu, 30 Jan 2025 14:12:22 -0500 Subject: [PATCH 16/59] Oracle config dedicated ix (#283) * Removes oracle configuration from add_bank, add_bank_with_seed, and configure_bank. * Oracle configuration is now a dedicated instruction. --- clients/rust/marginfi-cli/src/entrypoint.rs | 69 +++------ .../rust/marginfi-cli/src/processor/mod.rs | 118 +++++++++------- clients/rust/marginfi-cli/src/utils.rs | 8 +- programs/marginfi/fuzz/src/lib.rs | 43 ++++-- programs/marginfi/src/events.rs | 8 ++ .../instructions/marginfi_group/add_pool.rs | 8 +- .../marginfi_group/add_pool_permissionless.rs | 4 +- .../marginfi_group/add_pool_with_seed.rs | 8 +- .../marginfi_group/config_bank_oracle.rs | 58 ++++++++ .../marginfi_group/configure_bank.rs | 4 - .../src/instructions/marginfi_group/mod.rs | 2 + programs/marginfi/src/lib.rs | 12 +- programs/marginfi/src/state/marginfi_group.rs | 45 +++--- programs/marginfi/src/state/price.rs | 14 ++ .../tests/admin_actions/bankruptcy_auth.rs | 11 +- .../tests/admin_actions/setup_bank.rs | 29 ++-- .../misc/bank_variable_oracle_staleness.rs | 33 +++-- .../tests/misc/collateral_value_cap.rs | 22 +-- .../marginfi/tests/misc/operational_state.rs | 44 +++--- programs/marginfi/tests/misc/pyth_push.rs | 13 +- .../risk_engine_flexible_oracle_checks.rs | 48 ++++--- .../marginfi/tests/misc/token_extensions.rs | 13 +- .../marginfi/tests/user_actions/borrow.rs | 11 +- .../marginfi/tests/user_actions/deposit.rs | 11 +- .../marginfi/tests/user_actions/liquidate.rs | 78 +++++++---- test-utils/src/bank.rs | 45 ++++-- test-utils/src/marginfi_group.rs | 115 +++++++++++---- tests/03_addBank.spec.ts | 58 ++++++-- tests/04_configureBank.spec.ts | 132 ++++++++++++++++-- tests/s02_addBank.spec.ts | 49 ++++++- tests/utils/genericTests.ts | 71 ++++++++++ tests/utils/group-instructions.ts | 44 ++++-- tests/utils/types.ts | 44 ++---- 33 files changed, 871 insertions(+), 401 deletions(-) create mode 100644 programs/marginfi/src/instructions/marginfi_group/config_bank_oracle.rs diff --git a/clients/rust/marginfi-cli/src/entrypoint.rs b/clients/rust/marginfi-cli/src/entrypoint.rs index 3b27abd7d..eaf4a4b1d 100644 --- a/clients/rust/marginfi-cli/src/entrypoint.rs +++ b/clients/rust/marginfi-cli/src/entrypoint.rs @@ -15,9 +15,8 @@ use marginfi::{ marginfi_account::{Balance, LendingAccount, MarginfiAccount, FLASHLOAN_ENABLED_FLAG}, marginfi_group::{ Bank, BankConfig, BankConfigOpt, BankOperationalState, InterestRateConfig, - InterestRateConfigOpt, OracleConfig, RiskTier, WrappedI80F48, + InterestRateConfigOpt, RiskTier, WrappedI80F48, }, - price::OracleSetup, }, }; use pyth_solana_receiver_sdk::price_update::get_feed_id_from_hex; @@ -120,10 +119,6 @@ pub enum GroupCommand { #[clap(long)] borrow_limit_ui: u64, #[clap(long)] - oracle_key: Pubkey, - #[clap(long)] - feed_id: Option, - #[clap(long)] optimal_utilization_rate: f64, #[clap(long)] plateau_interest_rate: f64, @@ -139,8 +134,6 @@ pub enum GroupCommand { group_ir_fee: f64, #[clap(long, arg_enum)] risk_tier: RiskTierArg, - #[clap(long, arg_enum)] - oracle_type: OracleTypeArg, #[clap( long, help = "Max oracle age in seconds, 0 for default (60s)", @@ -208,25 +201,6 @@ impl From for RiskTier { } } -#[derive(Clone, Copy, Debug, Parser, ArgEnum)] -pub enum OracleTypeArg { - PythLegacy, - SwitchboardLegacy, - PythPushOracle, - SwitchboardPull, -} - -impl From for OracleSetup { - fn from(value: OracleTypeArg) -> Self { - match value { - OracleTypeArg::PythLegacy => OracleSetup::PythLegacy, - OracleTypeArg::SwitchboardLegacy => OracleSetup::SwitchboardV2, - OracleTypeArg::PythPushOracle => OracleSetup::PythPushOracle, - OracleTypeArg::SwitchboardPull => OracleSetup::SwitchboardPull, - } - } -} - #[derive(Clone, Copy, Debug, Parser, ArgEnum)] pub enum BankOperationalStateArg { Paused, @@ -294,10 +268,6 @@ pub enum BankCommand { risk_tier: Option, #[clap(long, help = "0 = default, 1 = SOL, 2 = Staked SOL LST")] asset_tag: Option, - #[clap(long, arg_enum, help = "Bank oracle type")] - oracle_type: Option, - #[clap(long, help = "Bank oracle account")] - oracle_key: Option, #[clap(long, help = "Soft USD init limit")] usd_init_limit: Option, #[clap(long, help = "Oracle max age in seconds, 0 to use default value (60s)")] @@ -313,6 +283,16 @@ pub enum BankCommand { )] freeze_settings: Option, }, + UpdateOracle { + bank_pk: Pubkey, + #[clap( + long, + help = "Bank oracle type (0 = Pyth Legacy, 1 = Switchboardv2, 3 = Pyth Pull, 4 = Switchboard Pull, 5 = Staked Pyth Pull" + )] + oracle_type: u8, + #[clap(long, help = "Bank oracle account (or feed if using Pyth Pull")] + oracle_key: Pubkey, + }, InspectPriceOracle { bank_pk: Pubkey, }, @@ -614,8 +594,6 @@ fn group(subcmd: GroupCommand, global_options: &GlobalOptions) -> Result<()> { asset_weight_maint, liability_weight_init, liability_weight_maint, - oracle_key, - feed_id, optimal_utilization_rate, plateau_interest_rate, max_interest_rate, @@ -626,7 +604,6 @@ fn group(subcmd: GroupCommand, global_options: &GlobalOptions) -> Result<()> { deposit_limit_ui, borrow_limit_ui, risk_tier, - oracle_type, oracle_max_age, global_fee_wallet, } => processor::group_add_bank( @@ -634,9 +611,6 @@ fn group(subcmd: GroupCommand, global_options: &GlobalOptions) -> Result<()> { profile, bank_mint, seed, - oracle_key, - feed_id, - oracle_type, asset_weight_init, asset_weight_maint, liability_weight_init, @@ -744,8 +718,6 @@ fn bank(subcmd: BankCommand, global_options: &GlobalOptions) -> Result<()> { pf_or, risk_tier, asset_tag, - oracle_type, - oracle_key, usd_init_limit, oracle_max_age, permissionless_bad_debt_settlement, @@ -773,18 +745,6 @@ fn bank(subcmd: BankCommand, global_options: &GlobalOptions) -> Result<()> { spl_token::ui_amount_to_amount(ui_amount, bank.mint_decimals) }), operational_state: operational_state.map(|x| x.into()), - oracle: oracle_key.map(|x| marginfi::state::marginfi_group::OracleConfig { - setup: oracle_type - .expect("Orcale type must be provided with oracle_key") - .into(), - keys: [ - x, - Pubkey::default(), - Pubkey::default(), - Pubkey::default(), - Pubkey::default(), - ], - }), interest_rate_config: Some(InterestRateConfigOpt { optimal_utilization_rate: opr_ur.map(|x| I80F48::from_num(x).into()), plateau_interest_rate: p_ir.map(|x| I80F48::from_num(x).into()), @@ -804,6 +764,11 @@ fn bank(subcmd: BankCommand, global_options: &GlobalOptions) -> Result<()> { }, ) } + BankCommand::UpdateOracle { + bank_pk, + oracle_type, + oracle_key, + } => processor::bank_configure_oracle(config, profile, bank_pk, oracle_type, oracle_key), BankCommand::InspectPriceOracle { bank_pk } => { processor::bank_inspect_price_oracle(config, bank_pk) } @@ -864,7 +829,6 @@ fn inspect_padding() -> Result<()> { marginfi::state::marginfi_group::Bank::type_layout() ); println!("BankConfig: {}", BankConfig::type_layout()); - println!("OracleConfig: {}", OracleConfig::type_layout()); println!("BankConfigOpt: {}", BankConfigOpt::type_layout()); println!("WrappedI80F48: {}", WrappedI80F48::type_layout()); @@ -886,7 +850,6 @@ fn inspect_size() -> Result<()> { size_of::() ); println!("BankConfig: {}", size_of::()); - println!("OracleConfig: {}", size_of::()); println!("BankConfigOpt: {}", size_of::()); println!("WrappedI80F48: {}", size_of::()); diff --git a/clients/rust/marginfi-cli/src/processor/mod.rs b/clients/rust/marginfi-cli/src/processor/mod.rs index 61f35ffb1..a84cae816 100644 --- a/clients/rust/marginfi-cli/src/processor/mod.rs +++ b/clients/rust/marginfi-cli/src/processor/mod.rs @@ -8,10 +8,10 @@ use { config::Config, profile::{self, get_cli_config_dir, load_profile, CliConfig, Profile}, utils::{ - bank_to_oracle_key, calc_emissions_rate, create_oracle_key_array, - find_bank_emssions_auth_pda, find_bank_emssions_token_account_pda, - find_bank_vault_authority_pda, find_bank_vault_pda, find_fee_state_pda, - load_observation_account_metas, process_transaction, EXP_10_I80F48, + bank_to_oracle_key, calc_emissions_rate, find_bank_emssions_auth_pda, + find_bank_emssions_token_account_pda, find_bank_vault_authority_pda, + find_bank_vault_pda, find_fee_state_pda, load_observation_account_metas, + process_transaction, EXP_10_I80F48, }, }, anchor_client::{ @@ -31,7 +31,7 @@ use { state::{ marginfi_account::{BankAccountWrapper, MarginfiAccount}, marginfi_group::{ - Bank, BankConfig, BankConfigOpt, BankOperationalState, BankVaultType, + Bank, BankConfigCompact, BankConfigOpt, BankOperationalState, BankVaultType, InterestRateConfig, WrappedI80F48, }, price::{OraclePriceFeedAdapter, OracleSetup, PriceAdapter, PythPushOraclePriceFeed}, @@ -299,9 +299,6 @@ pub fn group_add_bank( profile: Profile, bank_mint: Pubkey, seed: bool, - oracle_key: Pubkey, - feed_id: Option, - oracle_setup: crate::OracleTypeArg, asset_weight_init: f64, asset_weight_maint: f64, liability_weight_init: f64, @@ -375,8 +372,6 @@ pub fn group_add_bank( &rpc_client, bank_mint, token_program, - oracle_key, - feed_id, asset_weight_init, asset_weight_maint, liability_weight_init, @@ -384,7 +379,6 @@ pub fn group_add_bank( deposit_limit, borrow_limit, interest_rate_config, - oracle_setup, risk_tier, oracle_max_age, global_fee_wallet, @@ -396,8 +390,6 @@ pub fn group_add_bank( bank_mint, token_program, &bank_keypair, - oracle_key, - feed_id, asset_weight_init, asset_weight_maint, liability_weight_init, @@ -405,7 +397,6 @@ pub fn group_add_bank( deposit_limit, borrow_limit, interest_rate_config, - oracle_setup, risk_tier, oracle_max_age, global_fee_wallet, @@ -438,8 +429,6 @@ fn create_bank_ix_with_seed( rpc_client: &RpcClient, bank_mint: Pubkey, token_program: Pubkey, - oracle_key: Pubkey, - feed_id: Option, asset_weight_init: WrappedI80F48, asset_weight_maint: WrappedI80F48, liability_weight_init: WrappedI80F48, @@ -447,7 +436,6 @@ fn create_bank_ix_with_seed( deposit_limit: u64, borrow_limit: u64, interest_rate_config: InterestRateConfig, - oracle_setup: crate::OracleTypeArg, risk_tier: crate::RiskTierArg, oracle_max_age: u16, global_fee_wallet: Pubkey, @@ -523,24 +511,20 @@ fn create_bank_ix_with_seed( fee_state: find_fee_state_pda(&config.program_id).0, global_fee_wallet, }) - .accounts(AccountMeta::new_readonly(oracle_key, false)) .args(marginfi::instruction::LendingPoolAddBankWithSeed { - bank_config: BankConfig { + bank_config: BankConfigCompact { asset_weight_init, asset_weight_maint, liability_weight_init, liability_weight_maint, deposit_limit, borrow_limit, - interest_rate_config, + interest_rate_config: interest_rate_config.into(), operational_state: BankOperationalState::Operational, - oracle_setup: oracle_setup.into(), - oracle_keys: create_oracle_key_array(feed_id.unwrap_or(oracle_key)), risk_tier: risk_tier.into(), oracle_max_age, - ..BankConfig::default() - } - .into(), + ..BankConfigCompact::default() + }, bank_seed, }) .instructions()?; @@ -558,8 +542,6 @@ fn create_bank_ix( bank_mint: Pubkey, token_program: Pubkey, bank_keypair: &Keypair, - oracle_key: Pubkey, - feed_id: Option, asset_weight_init: WrappedI80F48, asset_weight_maint: WrappedI80F48, liability_weight_init: WrappedI80F48, @@ -567,7 +549,6 @@ fn create_bank_ix( deposit_limit: u64, borrow_limit: u64, interest_rate_config: InterestRateConfig, - oracle_setup: crate::OracleTypeArg, risk_tier: crate::RiskTierArg, oracle_max_age: u16, global_fee_wallet: Pubkey, @@ -622,24 +603,20 @@ fn create_bank_ix( fee_state: find_fee_state_pda(&config.program_id).0, global_fee_wallet, }) - .accounts(AccountMeta::new_readonly(oracle_key, false)) .args(marginfi::instruction::LendingPoolAddBank { - bank_config: BankConfig { + bank_config: BankConfigCompact { asset_weight_init, asset_weight_maint, liability_weight_init, liability_weight_maint, deposit_limit, borrow_limit, - interest_rate_config, + interest_rate_config: interest_rate_config.into(), operational_state: BankOperationalState::Operational, - oracle_setup: oracle_setup.into(), - oracle_keys: create_oracle_key_array(feed_id.unwrap_or(oracle_key)), risk_tier: risk_tier.into(), oracle_max_age, - ..BankConfig::default() - } - .into(), + ..BankConfigCompact::default() + }, }) .instructions()?; @@ -1683,7 +1660,42 @@ pub fn bank_configure( config: Config, profile: Profile, bank_pk: Pubkey, - mut bank_config_opt: BankConfigOpt, + bank_config_opt: BankConfigOpt, +) -> Result<()> { + let rpc_client = config.mfi_program.rpc(); + + let configure_bank_ixs_builder = config.mfi_program.request(); + let signing_keypairs = config.get_signers(false); + + let configure_bank_ixs = configure_bank_ixs_builder + .accounts(marginfi::accounts::LendingPoolConfigureBank { + marginfi_group: profile.marginfi_group.unwrap(), + admin: config.authority(), + bank: bank_pk, + }) + .args(marginfi::instruction::LendingPoolConfigureBank { + bank_config_opt: bank_config_opt.clone(), + }) + .instructions()?; + + let recent_blockhash = rpc_client.get_latest_blockhash().unwrap(); + let message = Message::new(&configure_bank_ixs, Some(&config.authority())); + let mut transaction = Transaction::new_unsigned(message); + transaction.partial_sign(&signing_keypairs, recent_blockhash); + + let sig = process_transaction(&transaction, &rpc_client, config.get_tx_mode())?; + + println!("Transaction signature: {}", sig); + + Ok(()) +} + +pub fn bank_configure_oracle( + config: Config, + profile: Profile, + bank_pk: Pubkey, + setup: u8, + oracle: Pubkey, ) -> Result<()> { let rpc_client = config.mfi_program.rpc(); @@ -1691,30 +1703,34 @@ pub fn bank_configure( let signing_keypairs = config.get_signers(false); let mut extra_accounts = vec![]; + // Pyth pull oracles pass the feed instead, all other kinds pass the key itself + let mut passed_oracle = oracle; - if let Some(oracle) = &mut bank_config_opt.oracle { - extra_accounts.push(AccountMeta::new_readonly(oracle.keys[0], false)); + extra_accounts.push(AccountMeta::new_readonly(oracle, false)); - if oracle.setup == OracleSetup::PythPushOracle { - let oracle_address = oracle.keys[0]; - let mut account = rpc_client.get_account(&oracle_address)?; - let ai = (&oracle_address, &mut account).into_account_info(); - let feed_id = PythPushOraclePriceFeed::peek_feed_id(&ai)?; + let setup_type = + OracleSetup::from_u8(setup).unwrap_or_else(|| panic!("unsupported oracle type")); - let feed_id_as_pubkey = Pubkey::new_from_array(feed_id); + if setup_type == OracleSetup::PythPushOracle || setup_type == OracleSetup::StakedWithPythPush { + let oracle_address = oracle; + let mut account = rpc_client.get_account(&oracle_address)?; + let ai = (&oracle_address, &mut account).into_account_info(); + let feed_id = PythPushOraclePriceFeed::peek_feed_id(&ai)?; - oracle.keys[0] = feed_id_as_pubkey; - } + let feed_id_as_pubkey = Pubkey::new_from_array(feed_id); + + passed_oracle = feed_id_as_pubkey; } let mut configure_bank_ixs = configure_bank_ixs_builder - .accounts(marginfi::accounts::LendingPoolConfigureBank { - marginfi_group: profile.marginfi_group.unwrap(), + .accounts(marginfi::accounts::LendingPoolConfigureBankOracle { + group: profile.marginfi_group.unwrap(), admin: config.authority(), bank: bank_pk, }) - .args(marginfi::instruction::LendingPoolConfigureBank { - bank_config_opt: bank_config_opt.clone(), + .args(marginfi::instruction::LendingPoolConfigureBankOracle { + setup, + oracle: passed_oracle, }) .instructions()?; diff --git a/clients/rust/marginfi-cli/src/utils.rs b/clients/rust/marginfi-cli/src/utils.rs index f936081c1..233937640 100644 --- a/clients/rust/marginfi-cli/src/utils.rs +++ b/clients/rust/marginfi-cli/src/utils.rs @@ -7,7 +7,7 @@ use { marginfi::{ bank_authority_seed, bank_seed, constants::{ - EMISSIONS_AUTH_SEED, EMISSIONS_TOKEN_ACCOUNT_SEED, FEE_STATE_SEED, MAX_ORACLE_KEYS, + EMISSIONS_AUTH_SEED, EMISSIONS_TOKEN_ACCOUNT_SEED, FEE_STATE_SEED, PYTH_PUSH_PYTH_SPONSORED_SHARD_ID, }, state::{ @@ -130,12 +130,6 @@ pub fn find_fee_state_pda(program_id: &Pubkey) -> (Pubkey, u8) { Pubkey::find_program_address(&[FEE_STATE_SEED.as_bytes()], program_id) } -pub fn create_oracle_key_array(oracle_key: Pubkey) -> [Pubkey; MAX_ORACLE_KEYS] { - let mut oracle_keys = [Pubkey::default(); MAX_ORACLE_KEYS]; - oracle_keys[0] = oracle_key; - oracle_keys -} - pub const EXP_10_I80F48: [I80F48; 15] = [ I80F48!(1), I80F48!(10), diff --git a/programs/marginfi/fuzz/src/lib.rs b/programs/marginfi/fuzz/src/lib.rs index 3b0aa28fa..11d281ae7 100644 --- a/programs/marginfi/fuzz/src/lib.rs +++ b/programs/marginfi/fuzz/src/lib.rs @@ -18,14 +18,18 @@ use arbitrary_helpers::{ }; use bank_accounts::{get_bank_map, BankAccounts}; use fixed_macro::types::I80F48; -use marginfi::{constants::FEE_STATE_SEED, state::fee_state::FeeState}; +use marginfi::{ + constants::FEE_STATE_SEED, + instructions::LendingPoolConfigureBankOracleBumps, + state::{fee_state::FeeState, marginfi_group::BankConfigCompact}, +}; use marginfi::{ errors::MarginfiError, instructions::LendingPoolAddBankBumps, prelude::MarginfiGroup, state::{ marginfi_account::MarginfiAccount, - marginfi_group::{Bank, BankConfig, BankVaultType, InterestRateConfig}, + marginfi_group::{Bank, BankVaultType, InterestRateConfig}, }, }; use metrics::{MetricAction, Metrics}; @@ -228,6 +232,7 @@ impl<'state> MarginfiFuzzContext<'state> { fee_vault: fee_vault_bump, fee_state: fee_state_bump, }; + let configure_bumps = LendingPoolConfigureBankOracleBumps {}; let token_program = match initial_bank_config.token_type { TokenType::Tokenkeg => state.new_program(spl_token::id()), @@ -264,10 +269,10 @@ impl<'state> MarginfiFuzzContext<'state> { token_program: Interface::try_from(airls(&token_program)).unwrap(), system_program: Program::try_from(airls(&self.system_program)).unwrap(), }, - &[ails(oracle.clone())], + &[], add_bank_bumps, ), - BankConfig { + BankConfigCompact { asset_weight_init: initial_bank_config.asset_weight_init, asset_weight_maint: initial_bank_config.asset_weight_maint, liability_weight_init: initial_bank_config.liability_weight_init, @@ -283,15 +288,8 @@ impl<'state> MarginfiFuzzContext<'state> { protocol_fixed_fee_apr: I80F48!(0.01).into(), protocol_ir_fee: I80F48!(0.1).into(), ..Default::default() - }, - oracle_setup: marginfi::state::price::OracleSetup::PythLegacy, - oracle_keys: [ - oracle.key(), - Pubkey::default(), - Pubkey::default(), - Pubkey::default(), - Pubkey::default(), - ], + } + .into(), operational_state: marginfi::state::marginfi_group::BankOperationalState::Operational, risk_tier: if !initial_bank_config.risk_tier_isolated { @@ -308,6 +306,25 @@ impl<'state> MarginfiFuzzContext<'state> { set_discriminator::(bank.clone()); + { + marginfi::instructions::marginfi_group::lending_pool_configure_bank_oracle( + Context::new( + &marginfi::ID, + &mut marginfi::instructions::LendingPoolConfigureBankOracle { + group: AccountLoader::try_from(airls(&self.marginfi_group)).unwrap(), + admin: Signer::try_from(airls(&self.owner)).unwrap(), + bank: AccountLoader::try_from_unchecked(&marginfi::ID, airls(&bank)) + .unwrap(), + }, + &[ails(oracle.clone())], + configure_bumps, + ), + 1, + oracle.key(), + ) + .unwrap(); + } + self.banks.push(BankAccounts { bank, oracle, diff --git a/programs/marginfi/src/events.rs b/programs/marginfi/src/events.rs index eca6c3c9b..ab63bbcbe 100644 --- a/programs/marginfi/src/events.rs +++ b/programs/marginfi/src/events.rs @@ -45,6 +45,14 @@ pub struct LendingPoolBankConfigureEvent { pub config: BankConfigOpt, } +#[event] +pub struct LendingPoolBankConfigureOracleEvent { + pub header: GroupEventHeader, + pub bank: Pubkey, + pub oracle_setup: u8, + pub oracle: Pubkey, +} + #[event] pub struct LendingPoolBankConfigureFrozenEvent { pub header: GroupEventHeader, diff --git a/programs/marginfi/src/instructions/marginfi_group/add_pool.rs b/programs/marginfi/src/instructions/marginfi_group/add_pool.rs index bff17ad30..3020b5c3d 100644 --- a/programs/marginfi/src/instructions/marginfi_group/add_pool.rs +++ b/programs/marginfi/src/instructions/marginfi_group/add_pool.rs @@ -8,7 +8,7 @@ use crate::{ events::{GroupEventHeader, LendingPoolBankCreateEvent}, state::{ fee_state::FeeState, - marginfi_group::{Bank, BankConfig, BankConfigCompact, MarginfiGroup}, + marginfi_group::{Bank, BankConfigCompact, MarginfiGroup}, }, MarginfiError, MarginfiResult, }; @@ -22,7 +22,7 @@ use anchor_spl::token_interface::*; /// TODO: Allow for different oracle configurations pub fn lending_pool_add_bank( ctx: Context, - bank_config: BankConfig, + bank_config: BankConfigCompact, ) -> MarginfiResult { // Transfer the flat sol init fee to the global fee wallet let fee_state = ctx.accounts.fee_state.load()?; @@ -58,7 +58,7 @@ pub fn lending_pool_add_bank( *bank = Bank::new( ctx.accounts.marginfi_group.key(), - bank_config, + bank_config.into(), bank_mint.key(), bank_mint.decimals, liquidity_vault.key(), @@ -74,8 +74,6 @@ pub fn lending_pool_add_bank( ); bank.config.validate()?; - bank.config - .validate_oracle_setup(ctx.remaining_accounts, None, None, None)?; bank.config.validate_oracle_age()?; emit!(LendingPoolBankCreateEvent { diff --git a/programs/marginfi/src/instructions/marginfi_group/add_pool_permissionless.rs b/programs/marginfi/src/instructions/marginfi_group/add_pool_permissionless.rs index 2d4b28731..431b4b23a 100644 --- a/programs/marginfi/src/instructions/marginfi_group/add_pool_permissionless.rs +++ b/programs/marginfi/src/instructions/marginfi_group/add_pool_permissionless.rs @@ -68,8 +68,6 @@ pub fn lending_pool_add_bank_permissionless( deposit_limit: settings.deposit_limit, interest_rate_config: default_ir_config.into(), // placeholder operational_state: BankOperationalState::Operational, - oracle_setup: OracleSetup::StakedWithPythPush, - oracle_key: settings.oracle, // becomes config.oracle_keys[0] borrow_limit: 0, risk_tier: settings.risk_tier, asset_tag: ASSET_TAG_STAKED, @@ -94,6 +92,8 @@ pub fn lending_pool_add_bank_permissionless( fee_vault_bump, fee_vault_authority_bump, ); + bank.config.oracle_setup = OracleSetup::StakedWithPythPush; + bank.config.oracle_keys[0] = settings.oracle; bank.config.validate()?; diff --git a/programs/marginfi/src/instructions/marginfi_group/add_pool_with_seed.rs b/programs/marginfi/src/instructions/marginfi_group/add_pool_with_seed.rs index 38162fe1f..41bfcf2d8 100644 --- a/programs/marginfi/src/instructions/marginfi_group/add_pool_with_seed.rs +++ b/programs/marginfi/src/instructions/marginfi_group/add_pool_with_seed.rs @@ -8,7 +8,7 @@ use crate::{ events::{GroupEventHeader, LendingPoolBankCreateEvent}, state::{ fee_state::FeeState, - marginfi_group::{Bank, BankConfig, BankConfigCompact, MarginfiGroup}, + marginfi_group::{Bank, BankConfigCompact, MarginfiGroup}, }, MarginfiError, MarginfiResult, }; @@ -21,7 +21,7 @@ use anchor_spl::token_interface::*; /// The previous lending_pool_add_bank is preserved for backwards-compatibility. pub fn lending_pool_add_bank_with_seed( ctx: Context, - bank_config: BankConfig, + bank_config: BankConfigCompact, _bank_seed: u64, ) -> MarginfiResult { // Transfer the flat sol init fee to the global fee wallet @@ -58,7 +58,7 @@ pub fn lending_pool_add_bank_with_seed( *bank = Bank::new( ctx.accounts.marginfi_group.key(), - bank_config, + bank_config.into(), bank_mint.key(), bank_mint.decimals, liquidity_vault.key(), @@ -74,8 +74,6 @@ pub fn lending_pool_add_bank_with_seed( ); bank.config.validate()?; - bank.config - .validate_oracle_setup(ctx.remaining_accounts, None, None, None)?; bank.config.validate_oracle_age()?; emit!(LendingPoolBankCreateEvent { diff --git a/programs/marginfi/src/instructions/marginfi_group/config_bank_oracle.rs b/programs/marginfi/src/instructions/marginfi_group/config_bank_oracle.rs new file mode 100644 index 000000000..c64ee7282 --- /dev/null +++ b/programs/marginfi/src/instructions/marginfi_group/config_bank_oracle.rs @@ -0,0 +1,58 @@ +use crate::constants::FREEZE_SETTINGS; +use crate::events::{GroupEventHeader, LendingPoolBankConfigureOracleEvent}; +use crate::state::price::OracleSetup; +use crate::{ + state::marginfi_group::{Bank, MarginfiGroup}, + MarginfiResult, +}; +use anchor_lang::prelude::*; + +pub fn lending_pool_configure_bank_oracle( + ctx: Context, + setup: u8, + oracle: Pubkey, +) -> MarginfiResult { + let mut bank = ctx.accounts.bank.load_mut()?; + + // If settings are frozen, you can only update the deposit and borrow limits, so this ix will fail + if bank.get_flag(FREEZE_SETTINGS) { + panic!("cannot change oracle settings on frozen banks"); + } else { + let setup_type = + OracleSetup::from_u8(setup).unwrap_or_else(|| panic!("unsupported oracle type")); + + bank.config.oracle_setup = setup_type; + bank.config.oracle_keys[0] = oracle; + + bank.config + .validate_oracle_setup(ctx.remaining_accounts, None, None, None)?; + + emit!(LendingPoolBankConfigureOracleEvent { + header: GroupEventHeader { + marginfi_group: ctx.accounts.group.key(), + signer: Some(*ctx.accounts.admin.key) + }, + bank: ctx.accounts.bank.key(), + oracle_setup: setup, + oracle + }); + } + + Ok(()) +} + +#[derive(Accounts)] +pub struct LendingPoolConfigureBankOracle<'info> { + #[account( + has_one = admin + )] + pub group: AccountLoader<'info, MarginfiGroup>, + + pub admin: Signer<'info>, + + #[account( + mut, + has_one = group, + )] + pub bank: AccountLoader<'info, Bank>, +} diff --git a/programs/marginfi/src/instructions/marginfi_group/configure_bank.rs b/programs/marginfi/src/instructions/marginfi_group/configure_bank.rs index a240c3258..dd26d2d59 100644 --- a/programs/marginfi/src/instructions/marginfi_group/configure_bank.rs +++ b/programs/marginfi/src/instructions/marginfi_group/configure_bank.rs @@ -37,10 +37,6 @@ pub fn lending_pool_configure_bank( // Settings are not frozen, everything updates bank.configure(&bank_config)?; - if bank_config.oracle.is_some() { - bank.config - .validate_oracle_setup(ctx.remaining_accounts, None, None, None)?; - } if bank_config.oracle_max_age.is_some() { bank.config.validate_oracle_age()?; } diff --git a/programs/marginfi/src/instructions/marginfi_group/mod.rs b/programs/marginfi/src/instructions/marginfi_group/mod.rs index 88a9f2d23..cb9c7fb58 100644 --- a/programs/marginfi/src/instructions/marginfi_group/mod.rs +++ b/programs/marginfi/src/instructions/marginfi_group/mod.rs @@ -3,6 +3,7 @@ mod add_pool; mod add_pool_permissionless; mod add_pool_with_seed; mod collect_bank_fees; +pub mod config_bank_oracle; mod config_group_fee; mod configure; mod configure_bank; @@ -20,6 +21,7 @@ pub use add_pool::*; pub use add_pool_permissionless::*; pub use add_pool_with_seed::*; pub use collect_bank_fees::*; +pub use config_bank_oracle::*; pub use config_group_fee::*; pub use configure::*; pub use configure_bank::*; diff --git a/programs/marginfi/src/lib.rs b/programs/marginfi/src/lib.rs index 7ba7c8023..21f430c2b 100644 --- a/programs/marginfi/src/lib.rs +++ b/programs/marginfi/src/lib.rs @@ -44,7 +44,7 @@ pub mod marginfi { ctx: Context, bank_config: BankConfigCompact, ) -> MarginfiResult { - marginfi_group::lending_pool_add_bank(ctx, bank_config.into()) + marginfi_group::lending_pool_add_bank(ctx, bank_config) } /// A copy of lending_pool_add_bank with an additional bank seed. @@ -55,7 +55,7 @@ pub mod marginfi { bank_config: BankConfigCompact, bank_seed: u64, ) -> MarginfiResult { - marginfi_group::lending_pool_add_bank_with_seed(ctx, bank_config.into(), bank_seed) + marginfi_group::lending_pool_add_bank_with_seed(ctx, bank_config, bank_seed) } pub fn lending_pool_add_bank_permissionless( @@ -72,6 +72,14 @@ pub mod marginfi { marginfi_group::lending_pool_configure_bank(ctx, bank_config_opt) } + pub fn lending_pool_configure_bank_oracle( + ctx: Context, + setup: u8, + oracle: Pubkey, + ) -> MarginfiResult { + marginfi_group::lending_pool_configure_bank_oracle(ctx, setup, oracle) + } + pub fn lending_pool_setup_emissions( ctx: Context, flags: u64, diff --git a/programs/marginfi/src/state/marginfi_group.rs b/programs/marginfi/src/state/marginfi_group.rs index b86010a30..8fa872ee7 100644 --- a/programs/marginfi/src/state/marginfi_group.rs +++ b/programs/marginfi/src/state/marginfi_group.rs @@ -694,10 +694,6 @@ impl Bank { set_if_some!(self.config.operational_state, config.operational_state); - set_if_some!(self.config.oracle_setup, config.oracle.map(|o| o.setup)); - - set_if_some!(self.config.oracle_keys, config.oracle.map(|o| o.keys)); - if let Some(ir_config) = &config.interest_rate_config { self.config.interest_rate_config.update(ir_config); } @@ -1207,9 +1203,6 @@ pub struct BankConfigCompact { pub interest_rate_config: InterestRateConfigCompact, pub operational_state: BankOperationalState, - pub oracle_setup: OracleSetup, - pub oracle_key: Pubkey, - pub borrow_limit: u64, pub risk_tier: RiskTier, @@ -1240,10 +1233,30 @@ pub struct BankConfigCompact { pub oracle_max_age: u16, } +impl Default for BankConfigCompact { + fn default() -> Self { + Self { + asset_weight_init: I80F48::ZERO.into(), + asset_weight_maint: I80F48::ZERO.into(), + liability_weight_init: I80F48::ONE.into(), + liability_weight_maint: I80F48::ONE.into(), + deposit_limit: 0, + borrow_limit: 0, + interest_rate_config: InterestRateConfigCompact::default(), + operational_state: BankOperationalState::Paused, + _pad0: [0; 6], + risk_tier: RiskTier::Isolated, + asset_tag: ASSET_TAG_DEFAULT, + total_asset_value_init_limit: TOTAL_ASSET_VALUE_INIT_LIMIT_INACTIVE, + oracle_max_age: 0, + } + } +} + impl From for BankConfig { fn from(config: BankConfigCompact) -> Self { let keys = [ - config.oracle_key, + Pubkey::default(), Pubkey::default(), Pubkey::default(), Pubkey::default(), @@ -1257,7 +1270,7 @@ impl From for BankConfig { deposit_limit: config.deposit_limit, interest_rate_config: config.interest_rate_config.into(), operational_state: config.operational_state, - oracle_setup: config.oracle_setup, + oracle_setup: OracleSetup::None, oracle_keys: keys, _pad0: [0; 6], borrow_limit: config.borrow_limit, @@ -1281,8 +1294,6 @@ impl From for BankConfigCompact { deposit_limit: config.deposit_limit, interest_rate_config: config.interest_rate_config.into(), operational_state: config.operational_state, - oracle_setup: config.oracle_setup, - oracle_key: config.oracle_keys[0], borrow_limit: config.borrow_limit, risk_tier: config.risk_tier, asset_tag: config.asset_tag, @@ -1553,8 +1564,6 @@ pub struct BankConfigOpt { pub operational_state: Option, - pub oracle: Option, - pub interest_rate_config: Option, pub risk_tier: Option, @@ -1570,16 +1579,6 @@ pub struct BankConfigOpt { pub freeze_settings: Option, } -#[cfg_attr( - any(feature = "test", feature = "client"), - derive(PartialEq, Eq, TypeLayout) -)] -#[derive(Clone, Copy, AnchorDeserialize, AnchorSerialize, Debug)] -pub struct OracleConfig { - pub setup: OracleSetup, - pub keys: [Pubkey; MAX_ORACLE_KEYS], -} - #[derive(Debug, Clone)] pub enum BankVaultType { Liquidity, diff --git a/programs/marginfi/src/state/price.rs b/programs/marginfi/src/state/price.rs index f8c1396fd..eabe82df4 100644 --- a/programs/marginfi/src/state/price.rs +++ b/programs/marginfi/src/state/price.rs @@ -40,6 +40,20 @@ pub enum OracleSetup { StakedWithPythPush, } +impl OracleSetup { + pub fn from_u8(value: u8) -> Option { + match value { + 0 => Some(Self::None), + 1 => Some(Self::PythLegacy), + 2 => Some(Self::SwitchboardV2), + 3 => Some(Self::PythPushOracle), + 4 => Some(Self::SwitchboardPull), + 5 => Some(Self::StakedWithPythPush), + _ => None, + } + } +} + #[derive(Copy, Clone, Debug)] pub enum PriceBias { Low, diff --git a/programs/marginfi/tests/admin_actions/bankruptcy_auth.rs b/programs/marginfi/tests/admin_actions/bankruptcy_auth.rs index 72a7eecd5..e61999ef2 100644 --- a/programs/marginfi/tests/admin_actions/bankruptcy_auth.rs +++ b/programs/marginfi/tests/admin_actions/bankruptcy_auth.rs @@ -185,10 +185,13 @@ async fn marginfi_group_handle_bankruptcy_perimssionless() -> anyhow::Result<()> let bank = test_f.get_bank(&BankMint::Usdc); - bank.update_config(BankConfigOpt { - permissionless_bad_debt_settlement: Some(true), - ..Default::default() - }) + bank.update_config( + BankConfigOpt { + permissionless_bad_debt_settlement: Some(true), + ..Default::default() + }, + None, + ) .await?; test_f diff --git a/programs/marginfi/tests/admin_actions/setup_bank.rs b/programs/marginfi/tests/admin_actions/setup_bank.rs index 8e408c33b..1caca7c57 100644 --- a/programs/marginfi/tests/admin_actions/setup_bank.rs +++ b/programs/marginfi/tests/admin_actions/setup_bank.rs @@ -329,7 +329,7 @@ async fn configure_bank_success(bank_mint: BankMint) -> anyhow::Result<()> { }), ..BankConfigOpt::default() }; - let res = bank.update_config(config_bank_opt.clone()).await; + let res = bank.update_config(config_bank_opt.clone(), None).await; assert!(res.is_ok()); // Load bank and check each property in config matches @@ -345,7 +345,6 @@ async fn configure_bank_success(bank_mint: BankMint) -> anyhow::Result<()> { deposit_limit, borrow_limit, operational_state, - oracle, risk_tier, asset_tag, total_asset_value_init_limit, @@ -373,7 +372,6 @@ async fn configure_bank_success(bank_mint: BankMint) -> anyhow::Result<()> { }; } - #[rustfmt::skip] let _ = { check_bank_field!(interest_rate_config, optimal_utilization_rate); check_bank_field!(interest_rate_config, plateau_interest_rate); @@ -396,32 +394,29 @@ async fn configure_bank_success(bank_mint: BankMint) -> anyhow::Result<()> { check_bank_field!(total_asset_value_init_limit); check_bank_field!(oracle_max_age); - - assert!(permissionless_bad_debt_settlement // If Some(...) check flag set properly .map(|set| set == bank.get_flag(PERMISSIONLESS_BAD_DEBT_SETTLEMENT_FLAG)) // If None check flag is unchanged - .unwrap_or( bank.get_flag(PERMISSIONLESS_BAD_DEBT_SETTLEMENT_FLAG) == old_bank.get_flag(PERMISSIONLESS_BAD_DEBT_SETTLEMENT_FLAG)) - ); + .unwrap_or( + bank.get_flag(PERMISSIONLESS_BAD_DEBT_SETTLEMENT_FLAG) + == old_bank.get_flag(PERMISSIONLESS_BAD_DEBT_SETTLEMENT_FLAG) + )); assert!(freeze_settings // If Some(...) check flag set properly .map(|set| set == bank.get_flag(FREEZE_SETTINGS)) // If None check flag is unchanged - .unwrap_or( bank.get_flag(FREEZE_SETTINGS) == old_bank.get_flag(FREEZE_SETTINGS)) - ); + .unwrap_or(bank.get_flag(FREEZE_SETTINGS) == old_bank.get_flag(FREEZE_SETTINGS))); + // Oracles no longer update in the standard config instruction assert_eq!( - bank.config.oracle_keys, - // If Some(...) check keys set properly - // If None check keys unchanged - oracle.map(|o| o.keys).unwrap_or(old_bank.config.oracle_keys)); + bank.config.oracle_keys, old_bank.config.oracle_keys, + "The config does not update oracles, try config_oracle" + ); assert_eq!( - bank.config.oracle_setup, - // If Some(...) check setup set properly - // If None check setup unchanged - oracle.map(|o| o.setup).unwrap_or(old_bank.config.oracle_setup) + bank.config.oracle_setup, old_bank.config.oracle_setup, + "The config does not update oracles, try config_oracle" ); }; diff --git a/programs/marginfi/tests/misc/bank_variable_oracle_staleness.rs b/programs/marginfi/tests/misc/bank_variable_oracle_staleness.rs index bba006d14..deb70924d 100644 --- a/programs/marginfi/tests/misc/bank_variable_oracle_staleness.rs +++ b/programs/marginfi/tests/misc/bank_variable_oracle_staleness.rs @@ -68,22 +68,31 @@ async fn bank_oracle_staleness_test() -> anyhow::Result<()> { // Make SOL feed non-stale usdc_bank - .update_config(BankConfigOpt { - oracle_max_age: Some(200), - ..Default::default() - }) + .update_config( + BankConfigOpt { + oracle_max_age: Some(200), + ..Default::default() + }, + None, + ) .await?; sol_bank - .update_config(BankConfigOpt { - oracle_max_age: Some(200), - ..Default::default() - }) + .update_config( + BankConfigOpt { + oracle_max_age: Some(200), + ..Default::default() + }, + None, + ) .await?; sol_eq_bank - .update_config(BankConfigOpt { - oracle_max_age: Some(200), - ..Default::default() - }) + .update_config( + BankConfigOpt { + oracle_max_age: Some(200), + ..Default::default() + }, + None, + ) .await?; // Borrow SOL diff --git a/programs/marginfi/tests/misc/collateral_value_cap.rs b/programs/marginfi/tests/misc/collateral_value_cap.rs index 129c07622..09bfc4ab4 100644 --- a/programs/marginfi/tests/misc/collateral_value_cap.rs +++ b/programs/marginfi/tests/misc/collateral_value_cap.rs @@ -14,10 +14,13 @@ async fn marginfi_group_init_limit_0() -> anyhow::Result<()> { let sol_bank = test_f.get_bank(&BankMint::Sol); usdc_bank - .update_config(BankConfigOpt { - total_asset_value_init_limit: Some(101), - ..BankConfigOpt::default() - }) + .update_config( + BankConfigOpt { + total_asset_value_init_limit: Some(101), + ..BankConfigOpt::default() + }, + None, + ) .await?; let sol_depositor = test_f.create_marginfi_account().await; @@ -61,10 +64,13 @@ async fn marginfi_group_init_limit_0() -> anyhow::Result<()> { .await; usdc_bank - .update_config(BankConfigOpt { - total_asset_value_init_limit: Some(TOTAL_ASSET_VALUE_INIT_LIMIT_INACTIVE), - ..BankConfigOpt::default() - }) + .update_config( + BankConfigOpt { + total_asset_value_init_limit: Some(TOTAL_ASSET_VALUE_INIT_LIMIT_INACTIVE), + ..BankConfigOpt::default() + }, + None, + ) .await?; assert!(res.is_ok()); diff --git a/programs/marginfi/tests/misc/operational_state.rs b/programs/marginfi/tests/misc/operational_state.rs index 88031bbab..60612cc5a 100644 --- a/programs/marginfi/tests/misc/operational_state.rs +++ b/programs/marginfi/tests/misc/operational_state.rs @@ -71,10 +71,13 @@ async fn marginfi_group_bank_reduce_only_withdraw_success() -> anyhow::Result<() .await?; usdc_bank_f - .update_config(BankConfigOpt { - operational_state: Some(BankOperationalState::ReduceOnly), - ..Default::default() - }) + .update_config( + BankConfigOpt { + operational_state: Some(BankOperationalState::ReduceOnly), + ..Default::default() + }, + None, + ) .await?; let res = lender_mfi_account_f @@ -131,10 +134,13 @@ async fn marginfi_group_bank_reduce_only_deposit_success() -> anyhow::Result<()> .await?; usdc_bank_f - .update_config(BankConfigOpt { - operational_state: Some(BankOperationalState::ReduceOnly), - ..Default::default() - }) + .update_config( + BankConfigOpt { + operational_state: Some(BankOperationalState::ReduceOnly), + ..Default::default() + }, + None, + ) .await?; let res = lender_2_mfi_account @@ -186,10 +192,13 @@ async fn marginfi_group_bank_reduce_only_borrow_failure() -> anyhow::Result<()> .await?; sol_bank_f - .update_config(BankConfigOpt { - operational_state: Some(BankOperationalState::ReduceOnly), - ..Default::default() - }) + .update_config( + BankConfigOpt { + operational_state: Some(BankOperationalState::ReduceOnly), + ..Default::default() + }, + None, + ) .await?; let borrower_token_account_sol = test_f.sol_mint.create_empty_token_account().await; @@ -218,10 +227,13 @@ async fn marginfi_group_bank_reduce_only_deposit_failure() -> anyhow::Result<()> let usdc_bank_f = test_f.get_bank(&BankMint::Usdc); usdc_bank_f - .update_config(BankConfigOpt { - operational_state: Some(BankOperationalState::ReduceOnly), - ..Default::default() - }) + .update_config( + BankConfigOpt { + operational_state: Some(BankOperationalState::ReduceOnly), + ..Default::default() + }, + None, + ) .await?; let lender_mfi_account_f = test_f.create_marginfi_account().await; diff --git a/programs/marginfi/tests/misc/pyth_push.rs b/programs/marginfi/tests/misc/pyth_push.rs index 0ba0a3574..fcfe763ce 100644 --- a/programs/marginfi/tests/misc/pyth_push.rs +++ b/programs/marginfi/tests/misc/pyth_push.rs @@ -193,11 +193,14 @@ async fn pyth_push_fullv_liquidate() -> anyhow::Result<()> { // Synthetically bring down the borrower account health by reducing the asset weights of the SOL bank sol_bank_f - .update_config(BankConfigOpt { - asset_weight_init: Some(I80F48!(0.25).into()), - asset_weight_maint: Some(I80F48!(0.5).into()), - ..Default::default() - }) + .update_config( + BankConfigOpt { + asset_weight_init: Some(I80F48!(0.25).into()), + asset_weight_maint: Some(I80F48!(0.5).into()), + ..Default::default() + }, + None, + ) .await?; lender_mfi_account_f diff --git a/programs/marginfi/tests/misc/risk_engine_flexible_oracle_checks.rs b/programs/marginfi/tests/misc/risk_engine_flexible_oracle_checks.rs index 6d27aa33a..8b466e42d 100644 --- a/programs/marginfi/tests/misc/risk_engine_flexible_oracle_checks.rs +++ b/programs/marginfi/tests/misc/risk_engine_flexible_oracle_checks.rs @@ -65,24 +65,33 @@ async fn re_one_oracle_stale_failure() -> anyhow::Result<()> { assert!(res.is_err()); assert_custom_error!(res.unwrap_err(), MarginfiError::RiskEngineInitRejected); - // Make SOLE feed not stale + // Make SOL feed not stale usdc_bank - .update_config(BankConfigOpt { - oracle_max_age: Some(200), - ..Default::default() - }) + .update_config( + BankConfigOpt { + oracle_max_age: Some(200), + ..Default::default() + }, + None, + ) .await?; sol_bank - .update_config(BankConfigOpt { - oracle_max_age: Some(200), - ..Default::default() - }) + .update_config( + BankConfigOpt { + oracle_max_age: Some(200), + ..Default::default() + }, + None, + ) .await?; sol_eq_bank - .update_config(BankConfigOpt { - oracle_max_age: Some(200), - ..Default::default() - }) + .update_config( + BankConfigOpt { + oracle_max_age: Some(200), + ..Default::default() + }, + None, + ) .await?; // Borrow SOL @@ -282,11 +291,14 @@ async fn re_liquidaiton_fail() -> anyhow::Result<()> { // Synthetically bring down the borrower account health by reducing the asset weights of the SOL bank sol_bank_f - .update_config(BankConfigOpt { - asset_weight_init: Some(I80F48!(0.25).into()), - asset_weight_maint: Some(I80F48!(0.5).into()), - ..Default::default() - }) + .update_config( + BankConfigOpt { + asset_weight_init: Some(I80F48!(0.25).into()), + asset_weight_maint: Some(I80F48!(0.5).into()), + ..Default::default() + }, + None, + ) .await?; // Make borrower asset bank stale diff --git a/programs/marginfi/tests/misc/token_extensions.rs b/programs/marginfi/tests/misc/token_extensions.rs index af3158596..3f0036350 100644 --- a/programs/marginfi/tests/misc/token_extensions.rs +++ b/programs/marginfi/tests/misc/token_extensions.rs @@ -106,11 +106,14 @@ async fn marginfi_account_liquidation_success_with_extension( // Synthetically bring down the borrower account health by reducing the asset weights of the SOL bank sol_bank_f - .update_config(BankConfigOpt { - asset_weight_init: Some(I80F48!(0.25).into()), - asset_weight_maint: Some(I80F48!(0.5).into()), - ..Default::default() - }) + .update_config( + BankConfigOpt { + asset_weight_init: Some(I80F48!(0.25).into()), + asset_weight_maint: Some(I80F48!(0.5).into()), + ..Default::default() + }, + None, + ) .await?; lender_mfi_account_f diff --git a/programs/marginfi/tests/user_actions/borrow.rs b/programs/marginfi/tests/user_actions/borrow.rs index e905a1360..67660b251 100644 --- a/programs/marginfi/tests/user_actions/borrow.rs +++ b/programs/marginfi/tests/user_actions/borrow.rs @@ -339,10 +339,13 @@ async fn marginfi_account_borrow_failure_borrow_limit( let debt_mint_decimals = test_f.get_bank(&debt_mint).mint.mint.decimals; test_f .get_bank_mut(&debt_mint) - .update_config(BankConfigOpt { - borrow_limit: Some(native!(borrow_cap, debt_mint_decimals, f64)), - ..Default::default() - }) + .update_config( + BankConfigOpt { + borrow_limit: Some(native!(borrow_cap, debt_mint_decimals, f64)), + ..Default::default() + }, + None, + ) .await?; let debt_bank_f = test_f.get_bank(&debt_mint); diff --git a/programs/marginfi/tests/user_actions/deposit.rs b/programs/marginfi/tests/user_actions/deposit.rs index ac98cb3d7..62667e3e2 100644 --- a/programs/marginfi/tests/user_actions/deposit.rs +++ b/programs/marginfi/tests/user_actions/deposit.rs @@ -134,10 +134,13 @@ async fn marginfi_account_deposit_failure_capacity_exceeded( // ------------------------------------------------------------------------- bank_f - .update_config(BankConfigOpt { - deposit_limit: Some(native!(deposit_cap, bank_f.mint.mint.decimals, f64)), - ..Default::default() - }) + .update_config( + BankConfigOpt { + deposit_limit: Some(native!(deposit_cap, bank_f.mint.mint.decimals, f64)), + ..Default::default() + }, + None, + ) .await?; let res = user_mfi_account_f diff --git a/programs/marginfi/tests/user_actions/liquidate.rs b/programs/marginfi/tests/user_actions/liquidate.rs index 41d60532e..10bdf9d95 100644 --- a/programs/marginfi/tests/user_actions/liquidate.rs +++ b/programs/marginfi/tests/user_actions/liquidate.rs @@ -122,11 +122,14 @@ async fn marginfi_account_liquidation_success( // Synthetically bring down the borrower account health by reducing the asset weights of the collateral bank test_f .get_bank_mut(&collateral_mint) - .update_config(BankConfigOpt { - asset_weight_init: Some(I80F48!(0.25).into()), - asset_weight_maint: Some(I80F48!(0.5).into()), - ..Default::default() - }) + .update_config( + BankConfigOpt { + asset_weight_init: Some(I80F48!(0.25).into()), + asset_weight_maint: Some(I80F48!(0.5).into()), + ..Default::default() + }, + None, + ) .await?; let collateral_bank_f = test_f.get_bank(&collateral_mint); @@ -314,11 +317,14 @@ async fn marginfi_account_liquidation_success_many_balances() -> anyhow::Result< // Synthetically bring down the borrower account health by reducing the asset weights of the SOL bank sol_bank_f - .update_config(BankConfigOpt { - asset_weight_init: Some(I80F48!(0.25).into()), - asset_weight_maint: Some(I80F48!(0.5).into()), - ..Default::default() - }) + .update_config( + BankConfigOpt { + asset_weight_init: Some(I80F48!(0.25).into()), + asset_weight_maint: Some(I80F48!(0.5).into()), + ..Default::default() + }, + None, + ) .await?; lender_mfi_account_f @@ -434,11 +440,14 @@ async fn marginfi_account_liquidation_success_swb() -> anyhow::Result<()> { // Synthetically bring down the borrower account health by reducing the asset weights of the SOL bank sol_bank_f - .update_config(BankConfigOpt { - asset_weight_init: Some(I80F48!(0.25).into()), - asset_weight_maint: Some(I80F48!(0.5).into()), - ..Default::default() - }) + .update_config( + BankConfigOpt { + asset_weight_init: Some(I80F48!(0.25).into()), + asset_weight_maint: Some(I80F48!(0.5).into()), + ..Default::default() + }, + None, + ) .await?; lender_mfi_account_f @@ -585,11 +594,14 @@ async fn marginfi_account_liquidation_failure_liquidation_too_severe() -> anyhow .await?; sol_bank_f - .update_config(BankConfigOpt { - asset_weight_init: Some(I80F48!(0.25).into()), - asset_weight_maint: Some(I80F48!(0.5).into()), - ..Default::default() - }) + .update_config( + BankConfigOpt { + asset_weight_init: Some(I80F48!(0.25).into()), + asset_weight_maint: Some(I80F48!(0.5).into()), + ..Default::default() + }, + None, + ) .await?; let res = lender_mfi_account_f @@ -661,11 +673,14 @@ async fn marginfi_account_liquidation_failure_liquidator_no_collateral() -> anyh .await?; sol_bank_f - .update_config(BankConfigOpt { - asset_weight_init: Some(I80F48!(0.25).into()), - asset_weight_maint: Some(I80F48!(0.3).into()), - ..Default::default() - }) + .update_config( + BankConfigOpt { + asset_weight_init: Some(I80F48!(0.25).into()), + asset_weight_maint: Some(I80F48!(0.3).into()), + ..Default::default() + }, + None, + ) .await?; let res = lender_mfi_account_f @@ -715,11 +730,14 @@ async fn marginfi_account_liquidation_failure_bank_not_liquidatable() -> anyhow: .await?; sol_bank_f - .update_config(BankConfigOpt { - asset_weight_init: Some(I80F48!(0.25).into()), - asset_weight_maint: Some(I80F48!(0.4).into()), - ..Default::default() - }) + .update_config( + BankConfigOpt { + asset_weight_init: Some(I80F48!(0.25).into()), + asset_weight_maint: Some(I80F48!(0.4).into()), + ..Default::default() + }, + None, + ) .await?; let res = lender_mfi_account_f diff --git a/test-utils/src/bank.rs b/test-utils/src/bank.rs index 9a24b41be..67091d202 100644 --- a/test-utils/src/bank.rs +++ b/test-utils/src/bank.rs @@ -85,24 +85,21 @@ impl BankFixture { load_and_deserialize::(self.ctx.clone(), &self.key).await } - pub async fn update_config(&self, config: BankConfigOpt) -> anyhow::Result<()> { - let mut accounts = marginfi::accounts::LendingPoolConfigureBank { + pub async fn update_config( + &self, + config: BankConfigOpt, + oracle_update: Option<(u8, Pubkey)>, + ) -> anyhow::Result<()> { + let mut instructions = Vec::new(); + + let accounts = marginfi::accounts::LendingPoolConfigureBank { marginfi_group: self.load().await.group, admin: self.ctx.borrow().payer.pubkey(), bank: self.key, } .to_account_metas(Some(true)); - if let Some(oracle_config) = config.oracle { - accounts.extend( - oracle_config - .keys - .iter() - .map(|k| AccountMeta::new_readonly(*k, false)), - ); - } - - let ix = Instruction { + let config_ix = Instruction { program_id: marginfi::id(), accounts, data: marginfi::instruction::LendingPoolConfigureBank { @@ -111,8 +108,30 @@ impl BankFixture { .data(), }; + instructions.push(config_ix); + + if let Some((setup, oracle)) = oracle_update { + let mut oracle_accounts = marginfi::accounts::LendingPoolConfigureBank { + marginfi_group: self.load().await.group, + admin: self.ctx.borrow().payer.pubkey(), + bank: self.key, + } + .to_account_metas(Some(true)); + + oracle_accounts.push(AccountMeta::new_readonly(oracle, false)); + + let oracle_ix = Instruction { + program_id: marginfi::id(), + accounts: oracle_accounts, + data: marginfi::instruction::LendingPoolConfigureBankOracle { setup, oracle } + .data(), + }; + + instructions.push(oracle_ix); + } + let tx = Transaction::new_signed_with_payer( - &[ix], + &instructions, Some(&self.ctx.borrow().payer.pubkey()), &[&self.ctx.borrow().payer], self.ctx.borrow().last_blockhash, diff --git a/test-utils/src/marginfi_group.rs b/test-utils/src/marginfi_group.rs index 6b09bea70..fa9e24dce 100644 --- a/test-utils/src/marginfi_group.rs +++ b/test-utils/src/marginfi_group.rs @@ -11,6 +11,8 @@ use marginfi::constants::{ PROTOCOL_FEE_RATE_DEFAULT, }; use marginfi::state::fee_state::FeeState; +use marginfi::state::marginfi_group::BankConfigCompact; +use marginfi::state::price::OracleSetup; use marginfi::{ prelude::MarginfiGroup, state::marginfi_group::{BankConfig, BankConfigOpt, BankVaultType, GroupConfig}, @@ -143,6 +145,10 @@ impl MarginfiGroupFixture { } } + /// Adds bank and configures the oracle. + /// + /// Note: AddBank and LendingPoolConfigureBankOracle were seperated to handle a tx size issue in + /// squads. This test fixture packs both ixes into one tx as is typical outside of squads. pub async fn try_lending_pool_add_bank( &self, bank_asset_mint_fixture: &MintFixture, @@ -152,8 +158,9 @@ impl MarginfiGroupFixture { let bank_mint = bank_asset_mint_fixture.key; let bank_fixture = BankFixture::new(self.ctx.clone(), bank_key.pubkey(), bank_asset_mint_fixture); + let config_compact: BankConfigCompact = bank_config.into(); - let mut accounts = marginfi::accounts::LendingPoolAddBank { + let accounts = marginfi::accounts::LendingPoolAddBank { marginfi_group: self.key, admin: self.ctx.borrow().payer.pubkey(), fee_payer: self.ctx.borrow().payer.pubkey(), @@ -173,29 +180,34 @@ impl MarginfiGroupFixture { } .to_account_metas(Some(true)); - let oracle_key = { - let oracle_key_or_feed_id = bank_config.oracle_keys[0]; - match bank_config.oracle_setup { - marginfi::state::price::OracleSetup::PythPushOracle => { - get_oracle_id_from_feed_id(oracle_key_or_feed_id).unwrap() - } - _ => oracle_key_or_feed_id, - } - }; - - accounts.push(AccountMeta::new_readonly(oracle_key, false)); - - let ix = Instruction { + let init_ix = Instruction { program_id: marginfi::id(), accounts, data: marginfi::instruction::LendingPoolAddBank { - bank_config: bank_config.into(), + bank_config: config_compact, } .data(), }; + let feed_oracle = { + if bank_config.oracle_setup == OracleSetup::PythPushOracle + || bank_config.oracle_setup == OracleSetup::StakedWithPythPush + { + Some(get_oracle_id_from_feed_id(bank_config.oracle_keys[0]).unwrap()) + } else { + None + } + }; + + let config_oracle_ix = self.make_lending_pool_configure_bank_oracle_ix( + &bank_fixture, + bank_config.oracle_setup as u8, + bank_config.oracle_keys[0], + feed_oracle, + ); + let tx = Transaction::new_signed_with_payer( - &[ix], + &[init_ix, config_oracle_ix], Some(&self.ctx.borrow().payer.pubkey().clone()), &[&self.ctx.borrow().payer, &bank_key], self.ctx.borrow().last_blockhash, @@ -210,6 +222,10 @@ impl MarginfiGroupFixture { Ok(bank_fixture) } + /// Adds bank and configures the oracle. + /// + /// Note: AddBank and LendingPoolConfigureBankOracle were seperated to handle a tx size issue in + /// squads. This test fixture packs both ixes into one tx as is typical outside of squads. pub async fn try_lending_pool_add_bank_with_seed( &self, bank_asset_mint_fixture: &MintFixture, @@ -231,8 +247,9 @@ impl MarginfiGroupFixture { let bank_mint = bank_asset_mint_fixture.key; let bank_fixture = BankFixture::new(self.ctx.clone(), pda, bank_asset_mint_fixture); + let config_compact: BankConfigCompact = bank_config.into(); - let mut accounts = marginfi::accounts::LendingPoolAddBankWithSeed { + let accounts = marginfi::accounts::LendingPoolAddBankWithSeed { marginfi_group: self.key, admin: self.ctx.borrow().payer.pubkey(), fee_payer: self.ctx.borrow().payer.pubkey(), @@ -252,20 +269,39 @@ impl MarginfiGroupFixture { } .to_account_metas(Some(true)); - accounts.push(AccountMeta::new_readonly(bank_config.oracle_keys[0], false)); - - let ix = Instruction { + let init_ix = Instruction { program_id: marginfi::id(), accounts, data: marginfi::instruction::LendingPoolAddBankWithSeed { - bank_config: bank_config.into(), + bank_config: config_compact, bank_seed, } .data(), }; + let feed_oracle = { + if bank_config.oracle_setup == OracleSetup::PythPushOracle + || bank_config.oracle_setup == OracleSetup::StakedWithPythPush + { + let id = get_oracle_id_from_feed_id(bank_config.oracle_keys[0]); + if id.is_none() { + panic!("Unsupported Pyth feed ID, this should never happen"); + } + id + } else { + None + } + }; + + let config_oracle_ix = self.make_lending_pool_configure_bank_oracle_ix( + &bank_fixture, + bank_config.oracle_setup as u8, + bank_config.oracle_keys[0], + feed_oracle, + ); + let tx = Transaction::new_signed_with_payer( - &[ix], + &[init_ix, config_oracle_ix], Some(&self.ctx.borrow().payer.pubkey().clone()), &[&self.ctx.borrow().payer], self.ctx.borrow().last_blockhash, @@ -285,26 +321,43 @@ impl MarginfiGroupFixture { bank: &BankFixture, bank_config_opt: BankConfigOpt, ) -> Instruction { - let mut accounts = marginfi::accounts::LendingPoolConfigureBank { + let accounts = marginfi::accounts::LendingPoolConfigureBank { bank: bank.key, marginfi_group: self.key, admin: self.ctx.borrow().payer.pubkey(), } .to_account_metas(Some(true)); - if let Some(oracle_config) = bank_config_opt.oracle { - accounts.extend( - oracle_config - .keys - .iter() - .map(|k| AccountMeta::new_readonly(*k, false)), - ); + Instruction { + program_id: marginfi::id(), + accounts, + data: marginfi::instruction::LendingPoolConfigureBank { bank_config_opt }.data(), } + } + + pub fn make_lending_pool_configure_bank_oracle_ix( + &self, + bank: &BankFixture, + setup: u8, + oracle: Pubkey, + feed_oracle: Option, + ) -> Instruction { + let mut accounts = marginfi::accounts::LendingPoolConfigureBankOracle { + bank: bank.key, + group: self.key, + admin: self.ctx.borrow().payer.pubkey(), + } + .to_account_metas(Some(true)); + + accounts.push(AccountMeta::new_readonly( + feed_oracle.unwrap_or(oracle), + false, + )); Instruction { program_id: marginfi::id(), accounts, - data: marginfi::instruction::LendingPoolConfigureBank { bank_config_opt }.data(), + data: marginfi::instruction::LendingPoolConfigureBankOracle { setup, oracle }.data(), } } diff --git a/tests/03_addBank.spec.ts b/tests/03_addBank.spec.ts index 6dff0cd9d..8a7a72f18 100644 --- a/tests/03_addBank.spec.ts +++ b/tests/03_addBank.spec.ts @@ -1,6 +1,6 @@ import { BN, Program, workspace } from "@coral-xyz/anchor"; -import { PublicKey, Transaction } from "@solana/web3.js"; -import { addBank } from "./utils/group-instructions"; +import { AccountMeta, PublicKey, Transaction } from "@solana/web3.js"; +import { addBank, configureBankOracle } from "./utils/group-instructions"; import { Marginfi } from "../target/types/marginfi"; import { bankKeypairA, @@ -21,7 +21,11 @@ import { assertKeyDefault, assertKeysEqual, } from "./utils/genericTests"; -import { ASSET_TAG_DEFAULT, defaultBankConfig } from "./utils/types"; +import { + ASSET_TAG_DEFAULT, + defaultBankConfig, + ORACLE_SETUP_PYTH_LEGACY, +} from "./utils/types"; import { deriveLiquidityVaultAuthority, deriveLiquidityVault, @@ -37,7 +41,7 @@ describe("Lending pool add bank (add bank to group)", () => { const program = workspace.Marginfi as Program; it("(admin) Add bank (USDC) - happy path", async () => { - let setConfig = defaultBankConfig(oracles.usdcOracle.publicKey); + let setConfig = defaultBankConfig(); let bankKey = bankKeypairUsdc.publicKey; const now = Date.now() / 1000; @@ -45,9 +49,9 @@ describe("Lending pool add bank (add bank to group)", () => { globalFeeWallet ); - await groupAdmin.mrgnProgram!.provider.sendAndConfirm!( + await groupAdmin.mrgnProgram.provider.sendAndConfirm( new Transaction().add( - await addBank(program, { + await addBank(groupAdmin.mrgnProgram, { marginfiGroup: marginfiGroup.publicKey, admin: groupAdmin.wallet.publicKey, feePayer: groupAdmin.wallet.publicKey, @@ -60,6 +64,18 @@ describe("Lending pool add bank (add bank to group)", () => { [bankKeypairUsdc] ); + // Note: you can pack this in the same tx if you use partial accounts. See test below for an + // example. Anchor account inference won't work if the bank doesn't exist yet. + await groupAdmin.mrgnProgram.provider.sendAndConfirm( + new Transaction().add( + await configureBankOracle(groupAdmin.mrgnProgram, { + bank: bankKey, + type: ORACLE_SETUP_PYTH_LEGACY, + oracle: oracles.usdcOracle.publicKey, + }) + ) + ); + const feeAccSolAfter = await program.provider.connection.getBalance( globalFeeWallet ); @@ -151,18 +167,37 @@ describe("Lending pool add bank (add bank to group)", () => { assert.deepEqual(config.riskTier, { collateral: {} }); assert.equal(config.assetTag, ASSET_TAG_DEFAULT); assertBNEqual(config.totalAssetValueInitLimit, 1_000_000_000_000); - assert.equal(config.oracleMaxAge, 100); + assert.equal(config.oracleMaxAge, 240); assertI80F48Equal(bank.collectedProgramFeesOutstanding, 0); }); it("(admin) Add bank (token A) - happy path", async () => { - let config = defaultBankConfig(oracles.tokenAOracle.publicKey); + let config = defaultBankConfig(); let bankKey = bankKeypairA.publicKey; - await groupAdmin.mrgnProgram!.provider.sendAndConfirm!( + // Example: packing the oracle config in the same tx as the bank init + const oracleMeta: AccountMeta = { + pubkey: oracles.tokenAOracle.publicKey, + isSigner: false, + isWritable: false, + }; + const config_ix = await program.methods + .lendingPoolConfigureBankOracle( + ORACLE_SETUP_PYTH_LEGACY, + oracles.tokenAOracle.publicKey + ) + .accountsPartial({ + group: marginfiGroup.publicKey, + bank: bankKey, + admin: groupAdmin.wallet.publicKey, + }) + .remainingAccounts([oracleMeta]) + .instruction(); + + await groupAdmin.mrgnProgram.provider.sendAndConfirm!( new Transaction().add( - await addBank(program, { + await addBank(groupAdmin.mrgnProgram, { marginfiGroup: marginfiGroup.publicKey, admin: groupAdmin.wallet.publicKey, feePayer: groupAdmin.wallet.publicKey, @@ -170,7 +205,8 @@ describe("Lending pool add bank (add bank to group)", () => { bank: bankKey, // globalFeeWallet: globalFeeWallet, config: config, - }) + }), + config_ix ), [bankKeypairA] ); diff --git a/tests/04_configureBank.spec.ts b/tests/04_configureBank.spec.ts index 36ffdab54..c03a73cc6 100644 --- a/tests/04_configureBank.spec.ts +++ b/tests/04_configureBank.spec.ts @@ -1,9 +1,21 @@ import { BN, Program, workspace } from "@coral-xyz/anchor"; -import { configureBank } from "./utils/group-instructions"; -import { Transaction } from "@solana/web3.js"; +import { configureBank, configureBankOracle } from "./utils/group-instructions"; +import { PublicKey, Transaction } from "@solana/web3.js"; import { Marginfi } from "../target/types/marginfi"; -import { bankKeypairUsdc, groupAdmin, marginfiGroup } from "./rootHooks"; -import { assertBNEqual, assertI80F48Approx } from "./utils/genericTests"; +import { + bankKeypairUsdc, + groupAdmin, + marginfiGroup, + oracles, + users, +} from "./rootHooks"; +import { + assertBNEqual, + assertI80F48Approx, + assertKeysEqual, + expectFailedTxWithError, + expectFailedTxWithMessage, +} from "./utils/genericTests"; import { assert } from "chai"; import { bigNumberToWrappedI80F48 } from "@mrgnlabs/mrgn-common"; import { @@ -44,8 +56,7 @@ describe("Lending pool configure bank", () => { operationalState: { paused: undefined, }, - oracle: null, - oracleMaxAge: 50, + oracleMaxAge: 150, permissionlessBadDebtSettlement: null, freezeSettings: null, }; @@ -86,7 +97,7 @@ describe("Lending pool configure bank", () => { assert.deepEqual(config.riskTier, { collateral: {} }); // no change assert.equal(config.assetTag, ASSET_TAG_SOL); assertBNEqual(config.totalAssetValueInitLimit, 15000); - assert.equal(config.oracleMaxAge, 50); + assert.equal(config.oracleMaxAge, 150); }); it("(admin) Restore default settings to bank (USDC)", async () => { @@ -102,6 +113,95 @@ describe("Lending pool configure bank", () => { ); }); + it("(admin) update oracle (USDC)", async () => { + const bankKey = bankKeypairUsdc.publicKey; + await groupAdmin.mrgnProgram!.provider.sendAndConfirm!( + new Transaction().add( + await configureBankOracle(groupAdmin.mrgnProgram, { + bank: bankKey, + type: 1, // pyth legacy + oracle: oracles.tokenAOracle.publicKey, + }) + ) + ); + const bank = await program.account.bank.fetch(bankKey); + const config = bank.config; + assert.deepEqual(config.oracleSetup, { pythLegacy: {} }); // no change + assertKeysEqual(config.oracleKeys[0], oracles.tokenAOracle.publicKey); + }); + + it("(admin) restore to valid oracle (USDC)", async () => { + const bankKey = bankKeypairUsdc.publicKey; + await groupAdmin.mrgnProgram!.provider.sendAndConfirm!( + new Transaction().add( + await configureBankOracle(groupAdmin.mrgnProgram, { + bank: bankKey, + type: 1, + oracle: oracles.usdcOracle.publicKey, + }) + ) + ); + const bank = await program.account.bank.fetch(bankKey); + const config = bank.config; + assert.deepEqual(config.oracleSetup, { pythLegacy: {} }); // no change + assertKeysEqual(config.oracleKeys[0], oracles.usdcOracle.publicKey); + }); + + it("(admin) update oracle to invalid state - should fail", async () => { + const bankKey = bankKeypairUsdc.publicKey; + await expectFailedTxWithError(async () => { + await groupAdmin.mrgnProgram!.provider.sendAndConfirm!( + new Transaction().add( + await configureBankOracle(groupAdmin.mrgnProgram, { + bank: bankKey, + type: 2, + oracle: oracles.tokenAOracle.publicKey, + }) + ) + ); + }, "InvalidOracleAccount"); + + await expectFailedTxWithMessage(async () => { + await groupAdmin.mrgnProgram!.provider.sendAndConfirm!( + new Transaction().add( + await configureBankOracle(groupAdmin.mrgnProgram, { + bank: bankKey, + type: 42, + oracle: oracles.tokenAOracle.publicKey, + }) + ) + ); + }, "unsupported oracle type"); + }); + + it("(attacker) tries to change oracle - should fail with generic signature failure", async () => { + const bankKey = bankKeypairUsdc.publicKey; + + await expectFailedTxWithError(async () => { + await users[0].mrgnProgram!.provider.sendAndConfirm!( + new Transaction().add( + await configureBankOracle(users[0].mrgnProgram, { + bank: bankKey, + type: 1, + oracle: oracles.wsolOracle.publicKey, + }) + ) + ); + }, "ConstraintHasOne"); + + await expectFailedTxWithMessage(async () => { + await users[0].mrgnProgram!.provider.sendAndConfirm!( + new Transaction().add( + await configureBankOracle(groupAdmin.mrgnProgram, { + bank: bankKey, + type: 1, + oracle: oracles.wsolOracle.publicKey, + }) + ) + ); + }, "Missing signature for"); + }); + it("(admin) Freeze USDC settings so they cannot be changed again (USDC)", async () => { let config = defaultBankConfigOptRaw(); config.freezeSettings = true; @@ -119,6 +219,22 @@ describe("Lending pool configure bank", () => { assertBNEqual(bank.flags, FREEZE_SETTINGS); }); + it("(admin) attempt to update oracle after freeze - fails with generic panic", async () => { + const bankKey = bankKeypairUsdc.publicKey; + + await expectFailedTxWithMessage(async () => { + await groupAdmin.mrgnProgram!.provider.sendAndConfirm!( + new Transaction().add( + await configureBankOracle(groupAdmin.mrgnProgram, { + bank: bankKey, + type: 1, + oracle: oracles.wsolOracle.publicKey, + }) + ) + ); + }, "change oracle settings on frozen banks"); + }); + it("(admin) Update settings after a freeze - only deposit/borrow caps update", async () => { let configNew = defaultBankConfigOptRaw(); const newDepositLimit = new BN(2_000_000_000); @@ -146,7 +262,7 @@ describe("Lending pool configure bank", () => { assertBNEqual(config.borrowLimit, newBorrowLimit); // Ignored fields didn't change.. - assert.equal(config.oracleMaxAge, 100); + assert.equal(config.oracleMaxAge, 240); assertBNEqual(bank.flags, FREEZE_SETTINGS); // still frozen }); }); diff --git a/tests/s02_addBank.spec.ts b/tests/s02_addBank.spec.ts index b632381e3..f67dace9d 100644 --- a/tests/s02_addBank.spec.ts +++ b/tests/s02_addBank.spec.ts @@ -35,6 +35,9 @@ import { ASSET_TAG_STAKED, defaultBankConfig, defaultStakedInterestSettings, + I80F48_ONE, + ORACLE_SETUP_PYTH_LEGACY, + SINGLE_POOL_PROGRAM_ID, } from "./utils/types"; import { assert } from "chai"; import { getBankrunBlockhash } from "./utils/spl-staking-utils"; @@ -117,19 +120,35 @@ describe("Init group and add banks with asset category flags", () => { }); it("(admin) Add bank (USDC) - is neither SOL nor staked LST", async () => { - let setConfig = defaultBankConfig(oracles.usdcOracle.publicKey); - let bankKey = bankKeypairUsdc.publicKey; + let setConfig = defaultBankConfig(); + const bankKey = bankKeypairUsdc.publicKey; + const oracle = oracles.usdcOracle.publicKey; + const oracleMeta: AccountMeta = { + pubkey: oracle, + isSigner: false, + isWritable: false, + }; + const config_ix = await groupAdmin.mrgnProgram.methods + .lendingPoolConfigureBankOracle(ORACLE_SETUP_PYTH_LEGACY, oracle) + .accountsPartial({ + group: marginfiGroup.publicKey, + bank: bankKey, + admin: groupAdmin.wallet.publicKey, + }) + .remainingAccounts([oracleMeta]) + .instruction(); let tx = new Transaction(); tx.add( - await addBank(program, { + await addBank(groupAdmin.mrgnProgram, { marginfiGroup: marginfiGroup.publicKey, admin: groupAdmin.wallet.publicKey, feePayer: groupAdmin.wallet.publicKey, bankMint: ecosystem.usdcMint.publicKey, bank: bankKey, config: setConfig, - }) + }), + config_ix ); tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); tx.sign(groupAdmin.wallet, bankKeypairUsdc); @@ -144,9 +163,24 @@ describe("Init group and add banks with asset category flags", () => { }); it("(admin) Add bank (SOL) - is tagged as SOL", async () => { - let setConfig = defaultBankConfig(oracles.wsolOracle.publicKey); + let setConfig = defaultBankConfig(); setConfig.assetTag = ASSET_TAG_SOL; let bankKey = bankKeypairSol.publicKey; + const oracle = oracles.wsolOracle.publicKey; + const oracleMeta: AccountMeta = { + pubkey: oracle, + isSigner: false, + isWritable: false, + }; + const config_ix = await groupAdmin.mrgnProgram.methods + .lendingPoolConfigureBankOracle(ORACLE_SETUP_PYTH_LEGACY, oracle) + .accountsPartial({ + group: marginfiGroup.publicKey, + bank: bankKey, + admin: groupAdmin.wallet.publicKey, + }) + .remainingAccounts([oracleMeta]) + .instruction(); let tx = new Transaction(); tx.add( @@ -157,7 +191,8 @@ describe("Init group and add banks with asset category flags", () => { bankMint: ecosystem.wsolMint.publicKey, bank: bankKey, config: setConfig, - }) + }), + config_ix ); tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); tx.sign(groupAdmin.wallet, bankKeypairSol); @@ -172,7 +207,7 @@ describe("Init group and add banks with asset category flags", () => { }); it("(admin) Tries to add staked bank WITH permission - should fail", async () => { - let setConfig = defaultBankConfig(oracles.wsolOracle.publicKey); + let setConfig = defaultBankConfig(); setConfig.assetTag = ASSET_TAG_STAKED; setConfig.borrowLimit = new BN(0); let bankKeypair = Keypair.generate(); diff --git a/tests/utils/genericTests.ts b/tests/utils/genericTests.ts index f9b0a2f79..2a9adba28 100644 --- a/tests/utils/genericTests.ts +++ b/tests/utils/genericTests.ts @@ -196,3 +196,74 @@ export const assertBankrunTxFailed = ( "\nExpected code " + expectedErrorCode + " but got: " + lastLog ); }; + +/** + * Typically used when catching the result of a tx sendAndConfirm. Asserts that the logs contain the + * given error code. + * @param logs + * @param errorCode + * @returns + */ +export function logContainsError(logs: string[], errorCode: string): boolean { + if (!logs || !Array.isArray(logs)) { + throw new Error("Invalid logs provided for verification."); + } + + return logs.some((log) => log.includes(`Error Code: ${errorCode}`)); +} + +/** + * Asserts that the contained transaction failed with the given error code. Fails if the tx did not + * fail or fails with the wrong error code. + * + * Invalid if not awaited. MAKE SURE TO CALL WITH AWAIT. + * @param transactionFn + * @param errorCode + */ +export async function expectFailedTxWithError( + transactionFn: () => Promise, + errorCode: string +): Promise { + let failed = false; + try { + await transactionFn(); + } catch (err) { + assert.ok( + logContainsError(err.logs, errorCode), + `Expected error code '${errorCode}' was not found in logs. Log dump: ${err.logs}` + ); + failed = true; + } + assert.ok(failed, "Transaction succeeded when it should have failed"); +} + +/** + * Asserts that the contained transaction failed with the given error code. Fails if the tx did not + * fail or fails without containing the given string + * + * Invalid if not awaited. MAKE SURE TO CALL WITH AWAIT. + * + * Generally, use `expectFailedTxWithError` unless catching a generic error like a panic or + * signature violations. + * @param transactionFn + * @param expectedString + */ +export async function expectFailedTxWithMessage( + transactionFn: () => Promise, + expectedString: string +): Promise { + let failed = false; + try { + await transactionFn(); + console.log("tx exec"); + } catch (err) { + let errString = err.toString(); + assert.ok( + errString.includes(expectedString), + `Expected error code '${expectedString}' was not found in logs. Log dump: ${err} or ${err.logs}` + ); + + failed = true; + } + assert.ok(failed, "Transaction succeeded when it should have failed"); +} diff --git a/tests/utils/group-instructions.ts b/tests/utils/group-instructions.ts index 3bf5bcb6f..826e6db68 100644 --- a/tests/utils/group-instructions.ts +++ b/tests/utils/group-instructions.ts @@ -38,16 +38,6 @@ export type AddBankArgs = { }; export const addBank = (program: Program, args: AddBankArgs) => { - // const id = program.programId; - // const bank = args.bank; - - // Note: oracle is passed as a key in config AND as an acc in remaining accs - const oracleMeta: AccountMeta = { - pubkey: args.config.oracleKey, - isSigner: false, - isWritable: false, - }; - const ix = program.methods .lendingPoolAddBank({ assetWeightInit: args.config.assetWeightInit, @@ -57,8 +47,6 @@ export const addBank = (program: Program, args: AddBankArgs) => { depositLimit: args.config.depositLimit, interestRateConfig: args.config.interestRateConfig, operationalState: args.config.operationalState, - oracleSetup: args.config.oracleSetup, - oracleKey: args.config.oracleKey, borrowLimit: args.config.borrowLimit, riskTier: args.config.riskTier, assetTag: args.config.assetTag, @@ -84,7 +72,6 @@ export const addBank = (program: Program, args: AddBankArgs) => { tokenProgram: TOKEN_PROGRAM_ID, // systemProgram: SystemProgram.programId, }) - .remainingAccounts([oracleMeta]) .instruction(); return ix; @@ -159,6 +146,35 @@ export const configureBank = ( return ix; }; +export type ConfigureBankOracleArgs = { + bank: PublicKey; + type: number; + oracle: PublicKey; + /** For Pyth Pull, pass the feed. For all others, ignore */ + feed?: PublicKey; +}; + +export const configureBankOracle = ( + program: Program, + args: ConfigureBankOracleArgs +) => { + const metaKey = args.feed ?? args.oracle; + const oracleMeta: AccountMeta = { + pubkey: metaKey, + isSigner: false, + isWritable: false, + }; + + const ix = program.methods + .lendingPoolConfigureBankOracle(args.type, args.oracle) + .accounts({ + bank: args.bank, + }) + .remainingAccounts([oracleMeta]) + .instruction(); + return ix; +}; + export type SetupEmissionsArgs = { marginfiGroup: PublicKey; admin: PublicKey; @@ -366,7 +382,7 @@ export const propagateStakedSettings = ( } as AccountMeta, ] : []; - + const ix = program.methods .propagateStakedSettings() .accounts({ diff --git a/tests/utils/types.ts b/tests/utils/types.ts index a73b8b904..acafb9811 100644 --- a/tests/utils/types.ts +++ b/tests/utils/types.ts @@ -31,17 +31,23 @@ export const ASSET_TAG_DEFAULT = 0; export const ASSET_TAG_SOL = 1; export const ASSET_TAG_STAKED = 2; +export const ORACLE_SETUP_NONE = 0; +export const ORACLE_SETUP_PYTH_LEGACY = 1; +export const ORACLE_SETUP_SWITCHBOARD_v2 = 2; +export const ORACLE_SETUP_PYTH_PUSH = 3; +export const ORACLE_SETUP_SWITCHBOARD_PULL = 4; +export const ORACLE_SETUP_STAKED_WITH_PYTH_PUSH = 5; + /** * The default bank config has * * all weights are 1 * * state = operational, risk tier = collateral - * * uses the given oracle, assumes it's = pythLegacy * * 100_000_000_000 deposit/borrow limit * * 1_000_000_000_000 total asset value limit * * asset tag default (`ASSET_TAG_DEFAULT`) * @returns */ -export const defaultBankConfig = (oracleKey: PublicKey) => { +export const defaultBankConfig = () => { let config: BankConfig = { assetWeightInit: I80F48_ONE, assetWeightMaint: I80F48_ONE, @@ -52,17 +58,13 @@ export const defaultBankConfig = (oracleKey: PublicKey) => { operationalState: { operational: undefined, }, - oracleSetup: { - pythLegacy: undefined, - }, - oracleKey: oracleKey, borrowLimit: new BN(100_000_000_000), riskTier: { collateral: undefined, }, assetTag: ASSET_TAG_DEFAULT, totalAssetValueInitLimit: new BN(1_000_000_000_000), - oracleMaxAge: 100, + oracleMaxAge: 240, }; return config; }; @@ -84,7 +86,7 @@ export const defaultBankConfigOpt = () => { interestRateConfig: defaultInterestRateConfig(), operationalState: OperationalState.Operational, oracle: null, - oracleMaxAge: 100, + oracleMaxAge: 240, permissionlessBadDebtSettlement: null, }; @@ -92,7 +94,7 @@ export const defaultBankConfigOpt = () => { }; /** - * The same parameters as `defaultBankConfig`, and no change to oracle + * The same parameters as `defaultBankConfig` * @returns */ export const defaultBankConfigOptRaw = () => { @@ -112,10 +114,9 @@ export const defaultBankConfigOptRaw = () => { operationalState: { operational: undefined, }, - oracle: null, - oracleMaxAge: 100, + oracleMaxAge: 240, permissionlessBadDebtSettlement: null, - freezeSettings: null + freezeSettings: null, }; return bankConfigOpt; @@ -215,10 +216,6 @@ export type BankConfig = { /** Paused = 0, Operational = 1, ReduceOnly = 2 */ operationalState: OperationalStateRaw; - /** None = 0, PythLegacy = 1, SwitchboardV2 = 2, PythPushOracle =3 */ - oracleSetup: OracleSetupRaw; - oracleKey: PublicKey; - borrowLimit: BN; /** Collateral = 0, Isolated = 1 */ riskTier: RiskTierRaw; @@ -239,7 +236,7 @@ export type BankConfigOptRaw = { depositLimit: BN | null; borrowLimit: BN | null; riskTier: { collateral: {} } | { isolated: {} } | null; - assetTag: number, + assetTag: number; totalAssetValueInitLimit: BN | null; interestRateConfig: InterestRateConfigRawWithOrigination | null; @@ -249,21 +246,10 @@ export type BankConfigOptRaw = { | { reduceOnly: {} } | null; - oracle: { - setup: - | { none: {} } - | { pythLegacy: {} } - | { switchboardV2: {} } - | { pythPushOracle: {} } - | { switchboardPull: {} } - | { stakedWithPythPush: {} }; - keys: PublicKey[]; - } | null; - oracleMaxAge: number | null; permissionlessBadDebtSettlement: boolean | null; freezeSettings: boolean | null; -} +}; // TODO remove when package updates export type StakedSettingsConfig = { From 2c5a75267494221942240a42bfcc61f4b083cb9f Mon Sep 17 00:00:00 2001 From: Jon Gurary <91919816+jgur-psyops@users.noreply.github.com> Date: Thu, 30 Jan 2025 14:45:48 -0500 Subject: [PATCH 17/59] Release Jan 30 (#288) * marks the program state as of the Jan 30 deployment to staging --- DEPLOY_GUIDE.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/DEPLOY_GUIDE.md b/DEPLOY_GUIDE.md index 48bac24b5..f8024008d 100644 --- a/DEPLOY_GUIDE.md +++ b/DEPLOY_GUIDE.md @@ -24,6 +24,12 @@ solana program set-buffer-authority --new-buffer-authority - * Click the pending upgrade to start a vote. * Execute after the vote passes. +## RECENT DEPLOY HASHES + +Here we list recent deployments to staging/mainnet. The hash is always the first 6 chars of the hash generated with the mainnet verified build guide above (even for staging, this is the mainnet hash, not the hash on staging. Staging does not get a verified build.). + +Staging deploy on Jan 30, 2025 ~2:35ET-- Hash: a4dd3e7 + ## DEPLOYING STAKED COLLATERAL TO STAGING The Staked Collateral feature uses spl-single-pool, developed by the Solana Foundation (https://github.com/solana-labs/solana-program-library/tree/master/single-pool). This guide will show you how to deploy that program. @@ -45,5 +51,4 @@ solana program deploy \ --keypair ~/keys/staging-deploy.json \ --fee-payer ~/keys/staging-deploy.json \ --url - ``` From 3b7bf0aceb684a762c8552412001c8d355033119 Mon Sep 17 00:00:00 2001 From: Andrei Montchik <159172825+andreimontchik@users.noreply.github.com> Date: Fri, 31 Jan 2025 11:06:40 -0600 Subject: [PATCH 18/59] Update marginfi Rust CLI README.md (#287) * Update marginfi Rust CLI README.md --- clients/rust/marginfi-cli/README.md | 42 ++++++++++++++--------------- 1 file changed, 20 insertions(+), 22 deletions(-) diff --git a/clients/rust/marginfi-cli/README.md b/clients/rust/marginfi-cli/README.md index 2470c95b4..6e38ae78b 100644 --- a/clients/rust/marginfi-cli/README.md +++ b/clients/rust/marginfi-cli/README.md @@ -2,46 +2,44 @@ ## Install the cli -1. Install the latest stable toolchain and set it to default: - -``` -rustup default stable-x86_64-apple-darwin - -$ rustc --version -rustc 1.71.1 -``` - -2. Navigate to the cli folder - -3. Make sure to build with the `--all-features` flag and target `x86_64`: - -``` -cargo install --path . --target x86_64-apple-darwin --all-features -``` +1. Install the Rust toolchain that is specified in the [workspace rust-toolchain.toml](../../../rust-toolchain.toml) and set it to default: + * Apple_x64: `rustup toolchain install 1.75.0-x86_64-apple-darwin; rustup default 1.75.0-x86_64-apple-darwin` + * Apple_ARM64: `rustup toolchain install 1.75.0-aarch64-apple-darwin; rustup default 1.75.0-aarch64-apple-darwin` +1. Confirm that the Cargo.lock is unchanged. That is the temporary work around for the [missing `solana_rbpf = "=0.8.0"` issue](https://github.com/mrgnlabs/marginfi-v2/issues/262) +1. Navigate to the cli folder +1. Make sure to build with the `--locked --force` and `--all-features` flags: + * Apple_x64: `cargo install --path . --target x86_64-apple-darwin --locked --force --all-features` + * Apple_ARM64: `cargo install --path . --target aarch64-apple-darwin --locked --force --all-features` ## Usage ``` -$ mfi +~> mfi marginfi-v2-cli 0.1.0 USAGE: mfi [OPTIONS] OPTIONS: - --dry-run Dry run for any transactions involved - -h, --help Print help information - -V, --version Print version information + --compute-unit-price + --dry-run Dry run for any transactions involved + -h, --help Print help information + -V, --version Print version information -y, --skip-confirmation SUBCOMMANDS: account bank + find-pyth-pull group - help Print this message or the help of the given subcommand(s) + help Print this message or the help of the given subcommand(s) inspect-padding + inspect-pyth-push-oracle-feed inspect-size - inspect-switchboard-feed + inspect-swb-pull-feed lip + make-test-i80f48 + patch-idl profile + show-oracle-ages ``` From a6965c2cbe5bccbb366f3b01f3347658d220fdfa Mon Sep 17 00:00:00 2001 From: Jon Gurary <91919816+jgur-psyops@users.noreply.github.com> Date: Fri, 7 Feb 2025 08:07:32 -0500 Subject: [PATCH 19/59] Minor fix for staked collateral pricing (#291) * Minor fix for staked collateral pricing when staked pools have a small balance. Now also uses the stake account stake directly so excess unstaked lamps sent to the account don't count --- DEPLOY_GUIDE.md | 32 +--- DEPLOY_GUIDE_STAGING.md | 28 ++- programs/marginfi/src/state/price.rs | 24 ++- tests/s05_solAppreciates.spec.ts | 71 +++++-- tests/s07_liquidate.spec.ts | 266 +++++++++++++++++++++------ 5 files changed, 319 insertions(+), 102 deletions(-) diff --git a/DEPLOY_GUIDE.md b/DEPLOY_GUIDE.md index f8024008d..8e5c179fe 100644 --- a/DEPLOY_GUIDE.md +++ b/DEPLOY_GUIDE.md @@ -24,31 +24,15 @@ solana program set-buffer-authority --new-buffer-authority - * Click the pending upgrade to start a vote. * Execute after the vote passes. +Voters: +* Clone the branch being deployed and run `./scripts/build-program-verifiable.sh marginfi mainnet`. +* Check that the program builds with the hash that the person who is deploying gave you. Check what characters other people have validated in Signal, post the next six characters of the hash to verify you have actually checked and aren't skipping this step out of laziness. +* Check that the buffer contains this hash too `solana-verify get-buffer-hash `. +* After the vote is executed and the contract is upgraded, check that the contract contains the same hash. For example for MFv2, this is `solana-verify get-program-hash MFv2hWf31Z9kbCa1snEPYctwafyhdvnV7FZnsebVacA` + ## RECENT DEPLOY HASHES Here we list recent deployments to staging/mainnet. The hash is always the first 6 chars of the hash generated with the mainnet verified build guide above (even for staging, this is the mainnet hash, not the hash on staging. Staging does not get a verified build.). -Staging deploy on Jan 30, 2025 ~2:35ET-- Hash: a4dd3e7 - -## DEPLOYING STAKED COLLATERAL TO STAGING - -The Staked Collateral feature uses spl-single-pool, developed by the Solana Foundation (https://github.com/solana-labs/solana-program-library/tree/master/single-pool). This guide will show you how to deploy that program. - -First you will need: -* Agave tools 2.1.0 or later (`sh -c "$(curl -sSfL https://release.anza.xyz/stable/install)"`) and possibly `agave-install init 2.1.0` -* A wallet with at least 2 SOL (this guide will assume your wallet is at `~/keys/staging-deploy.json`). Verify the pubkey of your wallet with `solana-keygen pubkey ~/keys/staging-deploy.json` and verify you have at least 2 SOL with `solana balance -k ~/keys/staging-deploy.json` -* An RPC provider connected to mainnet (`solana config set --url https://api.mainnet-beta.solana.com`). The solana public api is usually fine. - -Steps: -* Clone https://github.com/solana-labs/solana-program-library/tree/master/single-pool and pull latest -* Navigate to programs/single-pool and run `cargo build-sbf` -* Navigate back up to root, then navigate to target. Verify that `solana-keygen pubkey deploy/spl_single_pool-keypair.json` matches the program's declared id. If you want to generate a new id, delete this file and build again to generate a new program keypair. Don't forget to update the declare_id in lib.rs as needed. -* Deploy the program with: -``` -solana program deploy \ - deploy/spl_single_pool.so \ - --program-id deploy/spl_single_pool-keypair.json \ - --keypair ~/keys/staging-deploy.json \ - --fee-payer ~/keys/staging-deploy.json \ - --url -``` +Staging deploy on Jan 30, 2025 ~2:35ET -- Hash: a4dd3e7 +0.1.0-alpha mainnet on Fev 3, 2024 ~2:45ET -- Hash: ea5d15 diff --git a/DEPLOY_GUIDE_STAGING.md b/DEPLOY_GUIDE_STAGING.md index c3e1d0bed..cb46bc2e5 100644 --- a/DEPLOY_GUIDE_STAGING.md +++ b/DEPLOY_GUIDE_STAGING.md @@ -54,4 +54,30 @@ solana program extend \ --keypair ~/keys/staging-deploy.json \ stag8sTKds2h4KzjUw3zKTsxbqvT4XKHdaR9X9E6Rct 10000 ``` -* If you changed your wallet config, make sure to remove the staging wallet from your Solana config to avoid sausage fingers errors in the future: `solana config set --keypair ~/.config/solana/id.json` \ No newline at end of file +* If you changed your wallet config, make sure to remove the staging wallet from your Solana config to avoid sausage fingers errors in the future: `solana config set --keypair ~/.config/solana/id.json` + +## DEPLOYING STAKED COLLATERAL TO STAGING + +Note: Generally, don't bother doing this. Just use the actual mainnet deployment of the program at `SVSPxpvHdN29nkVg9rPapPNDddN5DipNLRUFhyjFThE`, maintained by the Solana Foundation. If for some reason you don't want to, read on. + +The Staked Collateral feature uses spl-single-pool, developed by the Solana Foundation (https://github.com/solana-labs/solana-program-library/tree/master/single-pool). This guide will show you how to deploy that program. + +First you will need: +* Agave tools 2.1.0 or later (`sh -c "$(curl -sSfL https://release.anza.xyz/stable/install)"`) and possibly `agave-install init 2.1.0` +* A wallet with at least 2 SOL (this guide will assume your wallet is at `~/keys/staging-deploy.json`). Verify the pubkey of your wallet with `solana-keygen pubkey ~/keys/staging-deploy.json` and verify you have at least 2 SOL with `solana balance -k ~/keys/staging-deploy.json` +* An RPC provider connected to mainnet (`solana config set --url https://api.mainnet-beta.solana.com`). The solana public api is usually fine. + +Steps: +* Clone https://github.com/solana-labs/solana-program-library/tree/master/single-pool and pull latest +* Navigate to programs/single-pool and run `cargo build-sbf` +* Navigate back up to root, then navigate to target. Verify that `solana-keygen pubkey deploy/spl_single_pool-keypair.json` matches the program's declared id. If you want to generate a new id, delete this file and build again to generate a new program keypair. Don't forget to update the declare_id in lib.rs as needed. +* Deploy the program with: +``` +solana program deploy \ + deploy/spl_single_pool.so \ + --program-id deploy/spl_single_pool-keypair.json \ + --keypair ~/keys/staging-deploy.json \ + --fee-payer ~/keys/staging-deploy.json \ + --url + +``` \ No newline at end of file diff --git a/programs/marginfi/src/state/price.rs b/programs/marginfi/src/state/price.rs index eabe82df4..9dca2e13f 100644 --- a/programs/marginfi/src/state/price.rs +++ b/programs/marginfi/src/state/price.rs @@ -6,6 +6,7 @@ use enum_dispatch::enum_dispatch; use fixed::types::I80F48; use pyth_sdk_solana::{state::SolanaPriceAccount, Price, PriceFeed}; use pyth_solana_receiver_sdk::price_update::{self, FeedId, PriceUpdateV2}; +use solana_program::{borsh1::try_from_slice_unchecked, stake::state::StakeStateV2}; use switchboard_on_demand::{CurrentResult, PullFeedAccountData, SPL_TOKEN_PROGRAM_ID}; use switchboard_solana::{ AggregatorAccountData, AggregatorResolutionMode, SwitchboardDecimal, SWITCHBOARD_PROGRAM_ID, @@ -176,7 +177,20 @@ impl OraclePriceFeedAdapter { let lst_mint = Account::<'info, Mint>::try_from(&ais[1]).unwrap(); let lst_supply = lst_mint.supply; - let sol_pool_balance = ais[2].lamports(); + let stake_state = try_from_slice_unchecked::(&ais[2].data.borrow())?; + let (_, stake) = match stake_state { + StakeStateV2::Stake(meta, stake, _) => (meta, stake), + _ => panic!("unsupported stake state"), // TODO emit more specific error + }; + let sol_pool_balance = stake.delegation.stake; + // Note: When the pool is fresh, it has 1 SOL in it (an initial and non-refundable + // balance that will stay in the pool forever). We don't want to include that + // balance when reading the quantity of SOL that has been staked from actual + // depositors (i.e. the amount that can actually be redeemed again). + let lamports_per_sol: u64 = 1_000_000_000; + let sol_pool_adjusted_balance = sol_pool_balance + .checked_sub(lamports_per_sol) + .ok_or_else(math_error!())?; // Note: exchange rate is `sol_pool_balance / lst_supply`, but we will do the // division last to avoid precision loss. Division does not need to be // decimal-adjusted because both SOL and stake positions use 9 decimals @@ -202,14 +216,14 @@ impl OraclePriceFeedAdapter { max_age, )?; let adjusted_price = (feed.price.price as i128) - .checked_mul(sol_pool_balance as i128) + .checked_mul(sol_pool_adjusted_balance as i128) .ok_or_else(math_error!())? .checked_div(lst_supply as i128) .ok_or_else(math_error!())?; feed.price.price = adjusted_price.try_into().unwrap(); let adjusted_ema_price = (feed.ema_price.price as i128) - .checked_mul(sol_pool_balance as i128) + .checked_mul(sol_pool_adjusted_balance as i128) .ok_or_else(math_error!())? .checked_div(lst_supply as i128) .ok_or_else(math_error!())?; @@ -232,14 +246,14 @@ impl OraclePriceFeedAdapter { )?; let adjusted_price = (feed.price.price as i128) - .checked_mul(sol_pool_balance as i128) + .checked_mul(sol_pool_adjusted_balance as i128) .ok_or_else(math_error!())? .checked_div(lst_supply as i128) .ok_or_else(math_error!())?; feed.price.price = adjusted_price.try_into().unwrap(); let adjusted_ema_price = (feed.ema_price.price as i128) - .checked_mul(sol_pool_balance as i128) + .checked_mul(sol_pool_adjusted_balance as i128) .ok_or_else(math_error!())? .checked_div(lst_supply as i128) .ok_or_else(math_error!())?; diff --git a/tests/s05_solAppreciates.spec.ts b/tests/s05_solAppreciates.spec.ts index a1c908a5a..0ebdf7f5d 100644 --- a/tests/s05_solAppreciates.spec.ts +++ b/tests/s05_solAppreciates.spec.ts @@ -12,29 +12,30 @@ import { bankKeypairSol, bankrunContext, bankrunProgram, + bankRunProvider, banksClient, ecosystem, marginfiGroup, oracles, users, validators, + verbose, } from "./rootHooks"; -import { - assertBankrunTxFailed, - assertKeysEqual, -} from "./utils/genericTests"; +import { assertBankrunTxFailed, assertKeysEqual } from "./utils/genericTests"; import { assert } from "chai"; -import { borrowIx } from "./utils/user-instructions"; -import { USER_ACCOUNT } from "./utils/mocks"; +import { borrowIx, depositIx } from "./utils/user-instructions"; +import { LST_ATA, USER_ACCOUNT } from "./utils/mocks"; import { getBankrunBlockhash } from "./utils/spl-staking-utils"; +import { getEpochAndSlot, getStakeActivation } from "./utils/stake-utils"; describe("Borrow power grows as v0 Staked SOL gains value from appreciation", () => { const program = workspace.Marginfi as Program; const provider = getProvider() as AnchorProvider; const wallet = provider.wallet as Wallet; - // User 2 has a validator 0 staked depost [0] position - net value = 1 LST token - // Users 0/1/2 deposited 10 SOL each, so a total of 30 is staked with validator 0 + // User 2 has a validator 0 staked depost [0] position - net value = 1 LST token Users 0/1/2 + // deposited 10 SOL each, so a total of 30 is staked with validator 0 (minus the 1 SOL staked to + // start the pool, which is non-refundable and doesn't function as collateral) /** SOL to add to the validator as pretend-earned epoch rewards */ const appreciation = 30; @@ -76,8 +77,8 @@ describe("Borrow power grows as v0 Staked SOL gains value from appreciation", () // Note: there is also some natural appreciation here because a few epochs have elapsed... - // Here we mock epoch rewards by simply minting SOL into the validator's pool without staking - it("v0 stake grows by " + appreciation + " SOL", async () => { + // Here we try to a troll exploit by sending SOL directly to the stake pool's sol balance. + it("v0 stake sol pool grows by " + appreciation + " SOL", async () => { let tx = new Transaction(); tx.add( SystemProgram.transfer({ @@ -151,8 +152,8 @@ describe("Borrow power grows as v0 Staked SOL gains value from appreciation", () assertBankrunTxFailed(result, "0x177a"); }); - // The account is now worth enough for this borrow to succeed! - it("(user 2) borrows 1.1 SOL against their STAKED position - succeeds", async () => { + // The stake hasn't changed (even though the SOL balance did) so this should still fail + it("(user 2) borrows 1.1 SOL against their STAKED position - fails", async () => { const user = users[2]; const userAccount = user.accounts.get(USER_ACCOUNT); let tx = new Transaction().add( @@ -174,7 +175,51 @@ describe("Borrow power grows as v0 Staked SOL gains value from appreciation", () // tx. Using the exact same values as above can cause the test to fail on faster machines // because the same tx was already sent for this blockhash (i.e. "this transaction has // already been processed") - amount: new BN(1.111 * 10 ** ecosystem.wsolDecimals), + amount: new BN(1.112 * 10 ** ecosystem.wsolDecimals), + }) + ); + tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); + tx.sign(user.wallet); + let result = await banksClient.tryProcessTransaction(tx); + + // 6010 (Generic risk engine rejection) + assertBankrunTxFailed(result, "0x177a"); + }); + + it("Generate stake income....", async () => { + // TODO how? + }); + + // Now the stake is worth enough and the user can borrow + it("(user 2) borrows 1.1 SOL against their STAKED position - succceds", async () => { + const user = users[2]; + const userAccount = user.accounts.get(USER_ACCOUNT); + const userLstAta = user.accounts.get(LST_ATA); + let tx = new Transaction().add( + // TODO if we find a way to make stake appreciate on localnet, remove... + await depositIx(program, { + marginfiGroup: marginfiGroup.publicKey, + marginfiAccount: userAccount, + authority: user.wallet.publicKey, + bank: validators[0].bank, + tokenAccount: userLstAta, + amount: new BN(1 * 10 ** ecosystem.wsolDecimals), + }), + await borrowIx(program, { + marginfiGroup: marginfiGroup.publicKey, + marginfiAccount: userAccount, + authority: user.wallet.publicKey, + bank: bankKeypairSol.publicKey, + tokenAccount: user.wsolAccount, + remaining: [ + validators[0].bank, + oracles.wsolOracle.publicKey, + validators[0].splMint, + validators[0].splSolPool, + bankKeypairSol.publicKey, + oracles.wsolOracle.publicKey, + ], + amount: new BN(1.113 * 10 ** ecosystem.wsolDecimals), }) ); tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); diff --git a/tests/s07_liquidate.spec.ts b/tests/s07_liquidate.spec.ts index f8f0e765d..b8d79b9fc 100644 --- a/tests/s07_liquidate.spec.ts +++ b/tests/s07_liquidate.spec.ts @@ -5,7 +5,7 @@ import { Program, workspace, } from "@coral-xyz/anchor"; -import { PublicKey, Transaction } from "@solana/web3.js"; +import { LAMPORTS_PER_SOL, PublicKey, Transaction } from "@solana/web3.js"; import { Marginfi } from "../target/types/marginfi"; import { bankKeypairA, @@ -32,10 +32,21 @@ import { assert } from "chai"; import { liquidateIx } from "./utils/user-instructions"; import { USER_ACCOUNT } from "./utils/mocks"; import { getBankrunBlockhash } from "./utils/spl-staking-utils"; -import { bigNumberToWrappedI80F48, getMint, wrappedI80F48toBigNumber } from "@mrgnlabs/mrgn-common"; -import { defaultStakedInterestSettings, StakedSettingsEdit } from "./utils/types"; -import { editStakedSettings, propagateStakedSettings } from "./utils/group-instructions"; +import { + bigNumberToWrappedI80F48, + getMint, + wrappedI80F48toBigNumber, +} from "@mrgnlabs/mrgn-common"; +import { + defaultStakedInterestSettings, + StakedSettingsEdit, +} from "./utils/types"; +import { + editStakedSettings, + propagateStakedSettings, +} from "./utils/group-instructions"; import { deriveStakedSettings } from "./utils/pdas"; +import { getStakeAccount } from "./utils/stake-utils"; describe("Liquidate user (including staked assets)", () => { const program = workspace.Marginfi as Program; @@ -58,11 +69,11 @@ describe("Liquidate user (including staked assets)", () => { * Liquidator fee = 2.5% * Insurance fee = 2.5% * Confidence interval = 2.12% (1% confidence * 2.12 = 2.12%) - * - * + * + * * Staked SOL (hereinafter Staked) is worth $305.04680972609873 with conf ~$6.46 (worth $298.573 low, $311.506 high) * SOL is worth $150 with conf ~$3.18 (worth $146.82 low, $153.18 high) - * + * * User 2 has a validator 0 Staked [0] deposit position and a SOL [1] debt position: * ASSETS * [index 0] 1,000,000,000 (1) Staked (worth $305.047) @@ -72,7 +83,7 @@ describe("Liquidate user (including staked assets)", () => { * * Liquidator tries to repay 0.1 Staked (worth $30.5047) of liquidatee's debt, so liquidator's assets * increase by this value, while liquidatee's assets decrease by this value. Which also means that: - * + * * Liquidator must pay * value of Staked minus liquidator fee (low bias within the confidence interval): .1 * (1 - 0.025) * 298.573 = $29.133 * SOL equivalent (high bias): 29.133 / 153.18 ~= 0.1902 (190,188,014 native) @@ -80,7 +91,7 @@ describe("Liquidate user (including staked assets)", () => { * Liquidatee receives * value of Staked minus (liquidator fee + insurance) (low bias): .1 * (1 - 0.025 - 0.025) * 298.573 = $27.659 * SOL equivalent (high bias): 27.659 / 153.18 ~= 0.1806 (180,565,347 native) - * + * * Insurance fund collects the difference * SOL diff 190,188,014 - 180,565,347 = 9,622,667 (the actual number in the test can be different, since the Staked price is approximated) */ @@ -90,45 +101,109 @@ describe("Liquidate user (including staked assets)", () => { const liquidator = users[1]; const assetBankKey = validators[0].bank; - const assetBankBefore = await bankrunProgram.account.bank.fetch(assetBankKey); + const assetBankBefore = await bankrunProgram.account.bank.fetch( + assetBankKey + ); const liabilityBankKey = bankKeypairSol.publicKey; - const liabilityBankBefore = await bankrunProgram.account.bank.fetch(liabilityBankKey); - + const liabilityBankBefore = await bankrunProgram.account.bank.fetch( + liabilityBankKey + ); + const liquidateeAccount = liquidatee.accounts.get(USER_ACCOUNT); - const liquidateeMarginfiAccount = await bankrunProgram.account.marginfiAccount.fetch(liquidateeAccount); + const liquidateeMarginfiAccount = + await bankrunProgram.account.marginfiAccount.fetch(liquidateeAccount); const liquidatorAccount = liquidator.accounts.get(USER_ACCOUNT); - const liquidatorMarginfiAccount = await bankrunProgram.account.marginfiAccount.fetch(liquidatorAccount); + const liquidatorMarginfiAccount = + await bankrunProgram.account.marginfiAccount.fetch(liquidatorAccount); - const liquidateeBalances = liquidateeMarginfiAccount.lendingAccount.balances; - const liquidatorBalances = liquidatorMarginfiAccount.lendingAccount.balances; - - const insuranceVaultBalance = await getTokenBalance(bankRunProvider, liabilityBankBefore.insuranceVault); + const liquidateeBalances = + liquidateeMarginfiAccount.lendingAccount.balances; + const liquidatorBalances = + liquidatorMarginfiAccount.lendingAccount.balances; + + const insuranceVaultBalance = await getTokenBalance( + bankRunProvider, + liabilityBankBefore.insuranceVault + ); assert.equal(insuranceVaultBalance, 0); - const sharesStaked = wrappedI80F48toBigNumber(liquidateeBalances[0].assetShares).toNumber(); - const shareValueStaked = wrappedI80F48toBigNumber(assetBankBefore.assetShareValue).toNumber(); - const sharesSol = wrappedI80F48toBigNumber(liquidateeBalances[1].liabilityShares).toNumber(); - const shareValueSol = wrappedI80F48toBigNumber(liabilityBankBefore.liabilityShareValue).toNumber(); - + const sharesStaked = wrappedI80F48toBigNumber( + liquidateeBalances[0].assetShares + ).toNumber(); + const shareValueStaked = wrappedI80F48toBigNumber( + assetBankBefore.assetShareValue + ).toNumber(); + const sharesSol = wrappedI80F48toBigNumber( + liquidateeBalances[1].liabilityShares + ).toNumber(); + const shareValueSol = wrappedI80F48toBigNumber( + liabilityBankBefore.liabilityShareValue + ).toNumber(); + const solPool = await bankRunProvider.connection.getAccountInfo( validators[0].splSolPool ); - const solPoolLamports = solPool.lamports; - const mintData = await getMint(bankRunProvider.connection, validators[0].splMint); - const stakedPrice = oracles.wsolPrice * (solPoolLamports) / Number(mintData.supply); + + // This is close enough in most cases, but in edge cases someone can send sol here as a troll.. + // const solPoolLamports = solPool.lamports; + + // What you really want to do is... + const splStakePoolBefore = getStakeAccount(solPool.data); + const stakeActual = Number(splStakePoolBefore.stake.delegation.stake); + const mintData = await getMint( + bankRunProvider.connection, + validators[0].splMint + ); + // there is 1 SOL used to init the pool that is non-refundable and doesn't count as stake + const stakedPrice = + (oracles.wsolPrice * (stakeActual - LAMPORTS_PER_SOL)) / + Number(mintData.supply); if (verbose) { console.log("BEFORE"); - console.log("liability bank insurance vault before: " + insuranceVaultBalance.toLocaleString()); - console.log("user 0 (liquidatee) Staked asset shares: " + sharesStaked.toString()); - console.log(" value (in Staked native): " + (sharesStaked * shareValueStaked).toLocaleString()); - console.log(" value (in dollars): $" + (sharesStaked * shareValueStaked * stakedPrice / 10 ** (oracles.wsolDecimals)).toLocaleString()); - console.log("user 0 (liquidatee) SOL liability shares: " + sharesSol.toString()); - console.log(" debt (in SOL native): " + (sharesSol * shareValueSol).toLocaleString()); - console.log(" debt (in dollars): $" + (sharesSol * shareValueSol * oracles.wsolPrice / 10 ** (oracles.wsolDecimals)).toLocaleString()); - console.log("user 1 (liquidator) staked asset shares: " + wrappedI80F48toBigNumber(liquidatorBalances[0].assetShares).toString()); - console.log("user 1 (liquidator) USDC liability shares: " + wrappedI80F48toBigNumber(liquidatorBalances[0].liabilityShares).toString()); + console.log( + "liability bank insurance vault before: " + + insuranceVaultBalance.toLocaleString() + ); + console.log( + "user 0 (liquidatee) Staked asset shares: " + sharesStaked.toString() + ); + console.log( + " value (in Staked native): " + + (sharesStaked * shareValueStaked).toLocaleString() + ); + console.log( + " value (in dollars): $" + + ( + (sharesStaked * shareValueStaked * stakedPrice) / + 10 ** oracles.wsolDecimals + ).toLocaleString() + ); + console.log( + "user 0 (liquidatee) SOL liability shares: " + sharesSol.toString() + ); + console.log( + " debt (in SOL native): " + + (sharesSol * shareValueSol).toLocaleString() + ); + console.log( + " debt (in dollars): $" + + ( + (sharesSol * shareValueSol * oracles.wsolPrice) / + 10 ** oracles.wsolDecimals + ).toLocaleString() + ); + console.log( + "user 1 (liquidator) staked asset shares: " + + wrappedI80F48toBigNumber(liquidatorBalances[0].assetShares).toString() + ); + console.log( + "user 1 (liquidator) USDC liability shares: " + + wrappedI80F48toBigNumber( + liquidatorBalances[0].liabilityShares + ).toString() + ); } const defaultSettings = defaultStakedInterestSettings( @@ -157,10 +232,13 @@ describe("Liquidate user (including staked assets)", () => { editTx.recentBlockhash = await getBankrunBlockhash(bankrunContext); editTx.sign(groupAdmin.wallet); await banksClient.processTransaction(editTx); - + const stakedLowPrice = stakedPrice * (1 - confidenceInterval); // see top of test const wsolHighPrice = oracles.wsolPrice * (1 + confidenceInterval); // see top of test - const insuranceToBeCollected = (liquidateAmountSol * 0.025 * shareValueStaked * stakedLowPrice / (shareValueSol * wsolHighPrice)) * 10 ** (oracles.wsolDecimals); + const insuranceToBeCollected = + ((liquidateAmountSol * 0.025 * shareValueStaked * stakedLowPrice) / + (shareValueSol * wsolHighPrice)) * + 10 ** oracles.wsolDecimals; let tx = new Transaction().add( await liquidateIx(bankrunProgram, { @@ -194,39 +272,109 @@ describe("Liquidate user (including staked assets)", () => { tx.sign(liquidator.wallet); await banksClient.processTransaction(tx); - const liquidateeMarginfiAccountAfter = await bankrunProgram.account.marginfiAccount.fetch(liquidateeAccount); - const liquidatorMarginfiAccountAfter = await bankrunProgram.account.marginfiAccount.fetch(liquidatorAccount); + const liquidateeMarginfiAccountAfter = + await bankrunProgram.account.marginfiAccount.fetch(liquidateeAccount); + const liquidatorMarginfiAccountAfter = + await bankrunProgram.account.marginfiAccount.fetch(liquidatorAccount); - const liquidateeBalancesAfter = liquidateeMarginfiAccountAfter.lendingAccount.balances; - const liquidatorBalancesAfter = liquidatorMarginfiAccountAfter.lendingAccount.balances; + const liquidateeBalancesAfter = + liquidateeMarginfiAccountAfter.lendingAccount.balances; + const liquidatorBalancesAfter = + liquidatorMarginfiAccountAfter.lendingAccount.balances; - const sharesStakedAfter = wrappedI80F48toBigNumber(liquidateeBalancesAfter[0].assetShares).toNumber(); - const sharesSolAfter = wrappedI80F48toBigNumber(liquidateeBalancesAfter[1].liabilityShares).toNumber(); + const sharesStakedAfter = wrappedI80F48toBigNumber( + liquidateeBalancesAfter[0].assetShares + ).toNumber(); + const sharesSolAfter = wrappedI80F48toBigNumber( + liquidateeBalancesAfter[1].liabilityShares + ).toNumber(); - assertI80F48Equal(liquidateeBalancesAfter[0].assetShares, wrappedI80F48toBigNumber(liquidateeBalances[0].assetShares).toNumber() - liquidateAmountSol_native.toNumber()); + assertI80F48Equal( + liquidateeBalancesAfter[0].assetShares, + wrappedI80F48toBigNumber(liquidateeBalances[0].assetShares).toNumber() - + liquidateAmountSol_native.toNumber() + ); assertI80F48Equal(liquidateeBalancesAfter[0].liabilityShares, 0); assertI80F48Equal(liquidateeBalancesAfter[1].assetShares, 0); assertI80F48Equal(liquidatorBalancesAfter[0].liabilityShares, 0); - assertI80F48Equal(liquidatorBalancesAfter[1].assetShares, wrappedI80F48toBigNumber(liquidatorBalances[1].assetShares).toNumber() + liquidateAmountSol_native.toNumber()); + assertI80F48Equal( + liquidatorBalancesAfter[1].assetShares, + wrappedI80F48toBigNumber(liquidatorBalances[1].assetShares).toNumber() + + liquidateAmountSol_native.toNumber() + ); assertI80F48Equal(liquidatorBalancesAfter[1].liabilityShares, 0); - const insuranceVaultBalanceAfter = await getTokenBalance(bankRunProvider, liabilityBankBefore.insuranceVault); - assert.approximately(insuranceVaultBalanceAfter, insuranceToBeCollected, (insuranceToBeCollected * .1)); // see top of test + const insuranceVaultBalanceAfter = await getTokenBalance( + bankRunProvider, + liabilityBankBefore.insuranceVault + ); + assert.approximately( + insuranceVaultBalanceAfter, + insuranceToBeCollected, + insuranceToBeCollected * 0.1 + ); // see top of test if (verbose) { console.log("AFTER"); - console.log("liability bank insurance vault after (SOL): " + insuranceVaultBalanceAfter.toLocaleString()); - console.log("user 0 (liquidatee) Staked asset shares after: " + sharesStakedAfter.toString()); - console.log(" value (in Staked native): " + (sharesStakedAfter * shareValueStaked).toLocaleString()); - console.log(" value (in dollars): $" + (sharesStakedAfter * shareValueStaked * stakedPrice / 10 ** (oracles.wsolDecimals)).toLocaleString()); - console.log("user 0 (liquidatee) SOL liability shares after: " + sharesSolAfter.toString()); - console.log(" debt (in SOL native): " + (sharesSolAfter * shareValueSol).toLocaleString()); - console.log(" debt (in dollars): $" + (sharesSolAfter * shareValueSol * oracles.wsolPrice / 10 ** (oracles.wsolDecimals)).toLocaleString()); - console.log("user 1 (liquidator) SOL asset shares after: " + wrappedI80F48toBigNumber(liquidatorBalancesAfter[0].assetShares).toString()); - console.log("user 1 (liquidator) SOL liability shares after: " + wrappedI80F48toBigNumber(liquidatorBalancesAfter[0].liabilityShares).toString()); - console.log("user 1 (liquidator) Staked asset shares after: " + wrappedI80F48toBigNumber(liquidatorBalancesAfter[1].assetShares).toString()); - console.log("user 1 (liquidator) Staked liability shares after: " + wrappedI80F48toBigNumber(liquidatorBalancesAfter[1].liabilityShares).toString()); + console.log( + "liability bank insurance vault after (SOL): " + + insuranceVaultBalanceAfter.toLocaleString() + ); + console.log( + "user 0 (liquidatee) Staked asset shares after: " + + sharesStakedAfter.toString() + ); + console.log( + " value (in Staked native): " + + (sharesStakedAfter * shareValueStaked).toLocaleString() + ); + console.log( + " value (in dollars): $" + + ( + (sharesStakedAfter * shareValueStaked * stakedPrice) / + 10 ** oracles.wsolDecimals + ).toLocaleString() + ); + console.log( + "user 0 (liquidatee) SOL liability shares after: " + + sharesSolAfter.toString() + ); + console.log( + " debt (in SOL native): " + + (sharesSolAfter * shareValueSol).toLocaleString() + ); + console.log( + " debt (in dollars): $" + + ( + (sharesSolAfter * shareValueSol * oracles.wsolPrice) / + 10 ** oracles.wsolDecimals + ).toLocaleString() + ); + console.log( + "user 1 (liquidator) SOL asset shares after: " + + wrappedI80F48toBigNumber( + liquidatorBalancesAfter[0].assetShares + ).toString() + ); + console.log( + "user 1 (liquidator) SOL liability shares after: " + + wrappedI80F48toBigNumber( + liquidatorBalancesAfter[0].liabilityShares + ).toString() + ); + console.log( + "user 1 (liquidator) Staked asset shares after: " + + wrappedI80F48toBigNumber( + liquidatorBalancesAfter[1].assetShares + ).toString() + ); + console.log( + "user 1 (liquidator) Staked liability shares after: " + + wrappedI80F48toBigNumber( + liquidatorBalancesAfter[1].liabilityShares + ).toString() + ); } let now = Math.floor(Date.now() / 1000); @@ -237,4 +385,4 @@ describe("Liquidate user (including staked assets)", () => { }); }); -// TODO: 0,1 - should fail \ No newline at end of file +// TODO: 0,1 - should fail From b702db29585d5374c8b0c473a0516cb42659265f Mon Sep 17 00:00:00 2001 From: Jon Gurary <91919816+jgur-psyops@users.noreply.github.com> Date: Fri, 7 Feb 2025 08:58:46 -0500 Subject: [PATCH 20/59] Deploy 0.1.1 to staging (#294) * 0.1.1 deploy notes --- Cargo.lock | 2 +- DEPLOY_GUIDE.md | 10 ++++++++-- programs/marginfi/Cargo.toml | 2 +- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5d2242bd2..f08b48bc0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2995,7 +2995,7 @@ dependencies = [ [[package]] name = "marginfi" -version = "0.1.0" +version = "0.1.1" dependencies = [ "anchor-lang 0.29.0", "anchor-lang 0.30.1", diff --git a/DEPLOY_GUIDE.md b/DEPLOY_GUIDE.md index 8e5c179fe..adb4af228 100644 --- a/DEPLOY_GUIDE.md +++ b/DEPLOY_GUIDE.md @@ -34,5 +34,11 @@ Voters: Here we list recent deployments to staging/mainnet. The hash is always the first 6 chars of the hash generated with the mainnet verified build guide above (even for staging, this is the mainnet hash, not the hash on staging. Staging does not get a verified build.). -Staging deploy on Jan 30, 2025 ~2:35ET -- Hash: a4dd3e7 -0.1.0-alpha mainnet on Fev 3, 2024 ~2:45ET -- Hash: ea5d15 +### STAGING + +* 0.1.0: Jan 30, 2025 ~2:35pm ET -- Hash: a4dd3e7 +* 0.1.1: Feb 7, 2025 ~8:15am ET -- Hash: 03455c + +### MAINNET + +* 0.1.0-alpha mainnet on Fev 3, 2024 ~2:45ET -- Hash: ea5d15 diff --git a/programs/marginfi/Cargo.toml b/programs/marginfi/Cargo.toml index c6ddc1471..d52920f05 100644 --- a/programs/marginfi/Cargo.toml +++ b/programs/marginfi/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "marginfi" -version = "0.1.0" +version = "0.1.1" description = "Created with Anchor" edition = "2021" From 0708d51e4af87da1158ee5cd087cc9a59138a038 Mon Sep 17 00:00:00 2001 From: jgur-psyops Date: Fri, 7 Feb 2025 15:30:54 -0500 Subject: [PATCH 21/59] Remove unsafe zero copy and transmute --- .../marginfi-cli/src/processor/emissions.rs | 2 +- .../rust/marginfi-cli/src/processor/mod.rs | 4 +- clients/rust/marginfi-cli/src/utils.rs | 2 +- programs/marginfi/fuzz/src/user_accounts.rs | 2 +- .../marginfi_group/handle_bankruptcy.rs | 2 +- .../marginfi/src/state/marginfi_account.rs | 93 ++++++++++++------- programs/marginfi/src/state/marginfi_group.rs | 87 +++++++---------- programs/marginfi/src/state/price.rs | 6 +- programs/marginfi/src/utils.rs | 2 +- programs/marginfi/tests/misc/regression.rs | 22 +++-- .../tests/user_actions/create_account.rs | 2 +- test-utils/src/marginfi_account.rs | 2 +- tests/07_deposit.spec.ts | 4 +- tests/08_borrow.spec.ts | 2 +- tests/09_liquidate.spec.ts | 2 +- tests/s03_deposit.spec.ts | 12 +-- tests/s04_borrow.spec.ts | 4 +- tests/s05_solAppreciates.spec.ts | 4 +- 18 files changed, 135 insertions(+), 119 deletions(-) diff --git a/clients/rust/marginfi-cli/src/processor/emissions.rs b/clients/rust/marginfi-cli/src/processor/emissions.rs index bef26c033..cef5a5b09 100644 --- a/clients/rust/marginfi-cli/src/processor/emissions.rs +++ b/clients/rust/marginfi-cli/src/processor/emissions.rs @@ -37,7 +37,7 @@ pub fn claim_all_emissions_for_bank( .lending_account .balances .iter() - .any(|balance| balance.active && balance.bank_pk == bank_pk) + .any(|balance| balance.is_active() && balance.bank_pk == bank_pk) { Some(address) } else { diff --git a/clients/rust/marginfi-cli/src/processor/mod.rs b/clients/rust/marginfi-cli/src/processor/mod.rs index a84cae816..5e2de40aa 100644 --- a/clients/rust/marginfi-cli/src/processor/mod.rs +++ b/clients/rust/marginfi-cli/src/processor/mod.rs @@ -686,7 +686,7 @@ pub fn group_auto_handle_bankruptcy_for_an_account( .balances .iter() .filter(|b| { - b.active + b.is_active() && banks .get(&b.bank_pk) .unwrap() @@ -816,7 +816,7 @@ pub fn handle_bankruptcy_for_accounts( .balances .iter() .filter(|b| { - b.active + b.is_active() && banks .get(&b.bank_pk) .unwrap() diff --git a/clients/rust/marginfi-cli/src/utils.rs b/clients/rust/marginfi-cli/src/utils.rs index 233937640..8be42b342 100644 --- a/clients/rust/marginfi-cli/src/utils.rs +++ b/clients/rust/marginfi-cli/src/utils.rs @@ -158,7 +158,7 @@ pub fn load_observation_account_metas( .lending_account .balances .iter() - .filter_map(|balance| balance.active.then_some(balance.bank_pk)) + .filter_map(|balance| balance.is_active().then_some(balance.bank_pk)) .collect::>(); for bank_pk in include_banks { diff --git a/programs/marginfi/fuzz/src/user_accounts.rs b/programs/marginfi/fuzz/src/user_accounts.rs index 05958137a..21e77a0c3 100644 --- a/programs/marginfi/fuzz/src/user_accounts.rs +++ b/programs/marginfi/fuzz/src/user_accounts.rs @@ -86,7 +86,7 @@ impl<'info> UserAccount<'info> { .lending_account .balances .iter() - .filter(|a| a.active && !exclude_banks.contains(&a.bank_pk)) + .filter(|a| a.is_active() && !exclude_banks.contains(&a.bank_pk)) .flat_map(|balance| { let bank_accounts = bank_map.get(&balance.bank_pk).unwrap(); assert_eq!(balance.bank_pk, bank_accounts.bank.key()); diff --git a/programs/marginfi/src/instructions/marginfi_group/handle_bankruptcy.rs b/programs/marginfi/src/instructions/marginfi_group/handle_bankruptcy.rs index 5a94e42e5..745a6bfa0 100644 --- a/programs/marginfi/src/instructions/marginfi_group/handle_bankruptcy.rs +++ b/programs/marginfi/src/instructions/marginfi_group/handle_bankruptcy.rs @@ -68,7 +68,7 @@ pub fn lending_pool_handle_bankruptcy<'info>( .lending_account .balances .iter_mut() - .find(|balance| balance.active && balance.bank_pk == bank_loader.key()); + .find(|balance| balance.is_active() && balance.bank_pk == bank_loader.key()); check!( lending_account_balance.is_some(), diff --git a/programs/marginfi/src/state/marginfi_account.rs b/programs/marginfi/src/state/marginfi_account.rs index 581bfd5d9..e098ae04d 100644 --- a/programs/marginfi/src/state/marginfi_account.rs +++ b/programs/marginfi/src/state/marginfi_account.rs @@ -13,24 +13,21 @@ use crate::{ prelude::{MarginfiError, MarginfiResult}, utils::NumTraitsWithTolerance, }; -use anchor_lang::prelude::*; +use anchor_lang::{prelude::*, Discriminator}; use anchor_spl::token_interface::Mint; +use bytemuck::{Pod, Zeroable}; use fixed::types::I80F48; use std::{ cmp::{max, min}, ops::Not, }; -#[cfg(any(feature = "test", feature = "client"))] use type_layout::TypeLayout; assert_struct_size!(MarginfiAccount, 2304); assert_struct_align!(MarginfiAccount, 8); -#[account(zero_copy(unsafe))] +#[account(zero_copy)] #[repr(C)] -#[cfg_attr( - any(feature = "test", feature = "client"), - derive(Debug, PartialEq, Eq, TypeLayout) -)] +#[derive(PartialEq, Eq, TypeLayout)] pub struct MarginfiAccount { pub group: Pubkey, // 32 pub authority: Pubkey, // 32 @@ -45,7 +42,8 @@ pub struct MarginfiAccount { /// - FLASHLOAN_ENABLED_FLAG (1 << 2) /// - TRANSFER_AUTHORITY_ALLOWED_FLAG (1 << 3) pub account_flags: u64, // 8 - pub _padding: [u64; 63], // 504 + pub _padding0: [u64; 32], // 504 + pub _padding1: [u64; 31], } pub const DISABLED_FLAG: u64 = 1 << 0; @@ -83,7 +81,12 @@ impl MarginfiAccount { /// key, oracle, and optional accounts like lst mint/pool, etc. pub fn get_remaining_accounts_len(&self) -> MarginfiResult { let mut total = 0usize; - for balance in self.lending_account.balances.iter().filter(|b| b.active) { + for balance in self + .lending_account + .balances + .iter() + .filter(|b| b.is_active()) + { let num_accounts = get_remaining_accounts_per_balance(balance)?; total += num_accounts; } @@ -196,7 +199,7 @@ impl<'info> BankAccountWithPriceFeed<'_, 'info> { lending_account .balances .iter() - .filter(|balance| balance.active) + .filter(|balance| balance.is_active()) .map(|balance| { // Get the bank let bank_ai = remaining_ais.get(account_index).unwrap(); @@ -249,10 +252,31 @@ impl<'info> BankAccountWithPriceFeed<'_, 'info> { { match self.balance.get_side() { Some(side) => { - // SAFETY: We are shortening 'info -> 'a - let shorter_bank: &'a AccountInfo<'a> = unsafe { core::mem::transmute(&self.bank) }; - let bank_al = AccountLoader::::try_from(shorter_bank)?; - let bank = bank_al.load()?; + // We want lifetime <'a> but we have <'info> and it's a pain to modify everything... + // To avoid an unsafe transmuation we just interpret the bank from bytes. Here we + // repeat some of the sanity checks from AccountLoader + if self.bank.owner != &Bank::owner() { + panic!("bank owned by wrong program, this should never happen"); + } + let bank_data = &self.bank.try_borrow_data()?; + if bank_data.len() < Bank::LEN + 8 { + panic!("bank too short, this should never happen"); + } + let bank_discrim: &[u8] = &bank_data[0..8]; + if bank_discrim != Bank::DISCRIMINATOR { + panic!("bad bank discriminator, this should never happen"); + } + let bank_data: &[u8] = &bank_data[8..]; + let bank = *bytemuck::from_bytes(bank_data); + + // Our alternative is this transmute, which is probably fine because are shortening + // 'info to 'a, but better not to tempt fate with transmute in case Anchor messes + // with lifetimes in a later version. + + // let shorter_bank: &'a AccountInfo<'a> = unsafe { core::mem::transmute(&self.bank) }; + // let bank_al = AccountLoader::::try_from(&self.bank)?; + // let bank = bank_al.load()?; + match side { BalanceSide::Assets => Ok(( self.calc_weighted_assets(requirement_type, &bank)?, @@ -725,11 +749,9 @@ const MAX_LENDING_ACCOUNT_BALANCES: usize = 16; assert_struct_size!(LendingAccount, 1728); assert_struct_align!(LendingAccount, 8); -#[zero_copy(unsafe)] #[repr(C)] -#[cfg_attr( - any(feature = "test", feature = "client"), - derive(Debug, PartialEq, Eq, TypeLayout) +#[derive( + AnchorDeserialize, AnchorSerialize, Copy, Clone, Zeroable, Pod, PartialEq, Eq, TypeLayout, )] pub struct LendingAccount { pub balances: [Balance; MAX_LENDING_ACCOUNT_BALANCES], // 104 * 16 = 1664 @@ -738,7 +760,7 @@ pub struct LendingAccount { impl LendingAccount { pub fn get_first_empty_balance(&self) -> Option { - self.balances.iter().position(|b| !b.active) + self.balances.iter().position(|b| !b.is_active()) } } @@ -747,24 +769,22 @@ impl LendingAccount { pub fn get_balance(&self, bank_pk: &Pubkey) -> Option<&Balance> { self.balances .iter() - .find(|balance| balance.active && balance.bank_pk.eq(bank_pk)) + .find(|balance| balance.is_active() && balance.bank_pk.eq(bank_pk)) } pub fn get_active_balances_iter(&self) -> impl Iterator { - self.balances.iter().filter(|b| b.active) + self.balances.iter().filter(|b| b.is_active()) } } assert_struct_size!(Balance, 104); assert_struct_align!(Balance, 8); -#[zero_copy(unsafe)] #[repr(C)] -#[cfg_attr( - any(feature = "test", feature = "client"), - derive(Debug, PartialEq, Eq, TypeLayout) +#[derive( + AnchorDeserialize, AnchorSerialize, Copy, Clone, Zeroable, Pod, PartialEq, Eq, TypeLayout, )] pub struct Balance { - pub active: bool, + pub active: u8, pub bank_pk: Pubkey, /// Inherited from the bank when the position is first created and CANNOT BE CHANGED after that. /// Note that all balances created before the addition of this feature use `ASSET_TAG_DEFAULT` @@ -778,6 +798,14 @@ pub struct Balance { } impl Balance { + pub fn is_active(&self) -> bool { + self.active != 0 + } + + pub fn set_active(&mut self, value: bool) { + self.active = value as u8; + } + /// Check whether a balance is empty while accounting for any rounding errors /// that might have occured during depositing/withdrawing. #[inline] @@ -839,7 +867,7 @@ impl Balance { pub fn empty_deactivated() -> Self { Balance { - active: false, + active: 0, bank_pk: Pubkey::default(), bank_asset_tag: ASSET_TAG_DEFAULT, _pad0: [0; 6], @@ -867,7 +895,7 @@ impl<'a> BankAccountWrapper<'a> { let balance = lending_account .balances .iter_mut() - .find(|balance| balance.active && balance.bank_pk.eq(bank_pk)) + .find(|balance| balance.is_active() && balance.bank_pk.eq(bank_pk)) .ok_or_else(|| error!(MarginfiError::BankAccountNotFound))?; Ok(Self { balance, bank }) @@ -883,7 +911,7 @@ impl<'a> BankAccountWrapper<'a> { let balance_index = lending_account .balances .iter() - .position(|balance| balance.active && balance.bank_pk.eq(bank_pk)); + .position(|balance| balance.is_active() && balance.bank_pk.eq(bank_pk)); match balance_index { Some(balance_index) => { @@ -900,7 +928,7 @@ impl<'a> BankAccountWrapper<'a> { .ok_or_else(|| error!(MarginfiError::LendingAccountBalanceSlotsFull))?; lending_account.balances[empty_index] = Balance { - active: true, + active: 1, bank_pk: *bank_pk, bank_asset_tag: bank.config.asset_tag, _pad0: [0; 6], @@ -1431,7 +1459,7 @@ mod test { authority: authority.into(), lending_account: LendingAccount { balances: [Balance { - active: true, + active: 1, bank_pk: bank_pk.into(), bank_asset_tag: ASSET_TAG_DEFAULT, _pad0: [0; 6], @@ -1444,7 +1472,8 @@ mod test { _padding: [0; 8], }, account_flags: TRANSFER_AUTHORITY_ALLOWED_FLAG, - _padding: [0; 63], + _padding0: [0; 32], + _padding1: [0; 31], }; assert!(acc.get_flag(TRANSFER_AUTHORITY_ALLOWED_FLAG)); diff --git a/programs/marginfi/src/state/marginfi_group.rs b/programs/marginfi/src/state/marginfi_group.rs index 8fa872ee7..7319826eb 100644 --- a/programs/marginfi/src/state/marginfi_group.rs +++ b/programs/marginfi/src/state/marginfi_group.rs @@ -37,17 +37,11 @@ use std::{ fmt::{Debug, Formatter}, ops::Not, }; - -#[cfg(any(feature = "test", feature = "client"))] use type_layout::TypeLayout; assert_struct_size!(MarginfiGroup, 1056); #[account(zero_copy)] -#[cfg_attr( - any(feature = "test", feature = "client"), - derive(Debug, PartialEq, Eq, TypeLayout) -)] -#[derive(Default)] +#[derive(Default, Debug, PartialEq, Eq, TypeLayout)] pub struct MarginfiGroup { pub admin: Pubkey, /// Bitmask for group settings flags. @@ -124,8 +118,7 @@ impl MarginfiGroup { } } -#[cfg_attr(any(feature = "test", feature = "client"), derive(TypeLayout))] -#[derive(AnchorSerialize, AnchorDeserialize, Default, Debug, Clone)] +#[derive(AnchorSerialize, AnchorDeserialize, Default, Debug, Clone, TypeLayout)] pub struct GroupConfig { pub admin: Option, } @@ -139,11 +132,7 @@ pub fn load_pyth_price_feed(ai: &AccountInfo) -> MarginfiResult { } #[repr(C)] -#[cfg_attr( - any(feature = "test", feature = "client"), - derive(PartialEq, Eq, TypeLayout) -)] -#[derive(Default, Debug, AnchorDeserialize, AnchorSerialize)] +#[derive(Default, Debug, AnchorDeserialize, AnchorSerialize, PartialEq, Eq)] pub struct InterestRateConfigCompact { // Curve Params pub optimal_utilization_rate: WrappedI80F48, @@ -191,13 +180,20 @@ impl From for InterestRateConfigCompact { } assert_struct_size!(InterestRateConfig, 240); -#[zero_copy] #[repr(C)] -#[cfg_attr( - any(feature = "test", feature = "client"), - derive(PartialEq, Eq, TypeLayout) +#[derive( + Default, + Debug, + Copy, + Clone, + AnchorSerialize, + AnchorDeserialize, + Zeroable, + Pod, + PartialEq, + Eq, + TypeLayout, )] -#[derive(Default, Debug)] pub struct InterestRateConfig { // Curve Params pub optimal_utilization_rate: WrappedI80F48, @@ -408,11 +404,7 @@ pub struct ComputedInterestRates { pub protocol_fee_apr: I80F48, } -#[cfg_attr( - any(feature = "test", feature = "client"), - derive(Debug, PartialEq, Eq, TypeLayout) -)] -#[derive(AnchorDeserialize, AnchorSerialize, Default, Clone)] +#[derive(AnchorDeserialize, AnchorSerialize, Default, Clone, Debug, PartialEq, Eq, TypeLayout)] pub struct InterestRateConfigOpt { pub optimal_utilization_rate: Option, pub plateau_interest_rate: Option, @@ -433,13 +425,9 @@ pub struct GroupBankConfig { assert_struct_size!(Bank, 1856); assert_struct_align!(Bank, 8); -#[account(zero_copy(unsafe))] +#[account(zero_copy)] #[repr(C)] -#[cfg_attr( - any(feature = "test", feature = "client"), - derive(Debug, PartialEq, Eq, TypeLayout) -)] -#[derive(Default)] +#[derive(Default, Debug, PartialEq, Eq, TypeLayout)] pub struct Bank { pub mint: Pubkey, pub mint_decimals: u8, @@ -503,6 +491,8 @@ pub struct Bank { } impl Bank { + pub const LEN: usize = std::mem::size_of::(); + #[allow(clippy::too_many_arguments)] pub fn new( marginfi_group_pk: Pubkey, @@ -1148,13 +1138,14 @@ fn calc_interest_payment_for_period(apr: I80F48, time_delta: u64, value: I80F48) } #[repr(u8)] -#[cfg_attr(any(feature = "test", feature = "client"), derive(PartialEq, Eq))] -#[derive(Copy, Clone, Debug, AnchorSerialize, AnchorDeserialize)] +#[derive(Debug, Clone, Copy, AnchorDeserialize, AnchorSerialize, PartialEq, Eq)] pub enum BankOperationalState { Paused, Operational, ReduceOnly, } +unsafe impl Zeroable for BankOperationalState {} +unsafe impl Pod for BankOperationalState {} #[cfg(feature = "client")] impl Display for BankOperationalState { @@ -1180,16 +1171,11 @@ pub enum RiskTier { /// they can't borrow XYZ together with SOL, only XYZ alone. Isolated = 1, } - unsafe impl Zeroable for RiskTier {} unsafe impl Pod for RiskTier {} #[repr(C)] -#[cfg_attr( - any(feature = "test", feature = "client"), - derive(PartialEq, Eq, TypeLayout) -)] -#[derive(AnchorDeserialize, AnchorSerialize, Debug)] +#[derive(AnchorDeserialize, AnchorSerialize, Debug, PartialEq, Eq)] /// TODO: Convert weights to (u64, u64) to avoid precision loss (maybe?) pub struct BankConfigCompact { pub asset_weight_init: WrappedI80F48, @@ -1279,7 +1265,8 @@ impl From for BankConfig { _pad1: [0; 6], total_asset_value_init_limit: config.total_asset_value_init_limit, oracle_max_age: config.oracle_max_age, - _padding: [0; 38], + _padding0: [0; 6], + _padding1: [0; 32], } } } @@ -1306,13 +1293,10 @@ impl From for BankConfigCompact { assert_struct_size!(BankConfig, 544); assert_struct_align!(BankConfig, 8); -#[zero_copy(unsafe)] #[repr(C)] -#[cfg_attr( - any(feature = "test", feature = "client"), - derive(PartialEq, Eq, TypeLayout) +#[derive( + Debug, Clone, Copy, AnchorDeserialize, AnchorSerialize, Zeroable, Pod, PartialEq, Eq, TypeLayout, )] -#[derive(Debug)] /// TODO: Convert weights to (u64, u64) to avoid precision loss (maybe?) pub struct BankConfig { pub asset_weight_init: WrappedI80F48, @@ -1362,7 +1346,8 @@ pub struct BankConfig { pub oracle_max_age: u16, // Note: 6 bytes of padding to next 8 byte alignment, then end padding - pub _padding: [u8; 38], + pub _padding0: [u8; 6], + pub _padding1: [u8; 32], } impl Default for BankConfig { @@ -1384,7 +1369,8 @@ impl Default for BankConfig { _pad1: [0; 6], total_asset_value_init_limit: TOTAL_ASSET_VALUE_INIT_LIMIT_INACTIVE, oracle_max_age: 0, - _padding: [0; 38], + _padding0: [0; 6], + _padding1: [0; 32], } } } @@ -1513,8 +1499,7 @@ impl BankConfig { #[zero_copy] #[repr(C, align(8))] -#[cfg_attr(any(feature = "test", feature = "client"), derive(TypeLayout))] -#[derive(Default, BorshDeserialize, BorshSerialize)] +#[derive(Default, BorshDeserialize, BorshSerialize, TypeLayout)] pub struct WrappedI80F48 { pub value: [u8; 16], } @@ -1547,11 +1532,7 @@ impl PartialEq for WrappedI80F48 { impl Eq for WrappedI80F48 {} -#[cfg_attr( - any(feature = "test", feature = "client"), - derive(Clone, PartialEq, Eq, TypeLayout) -)] -#[derive(AnchorDeserialize, AnchorSerialize, Default)] +#[derive(AnchorDeserialize, AnchorSerialize, Default, Clone, PartialEq, Eq, TypeLayout)] pub struct BankConfigOpt { pub asset_weight_init: Option, pub asset_weight_maint: Option, diff --git a/programs/marginfi/src/state/price.rs b/programs/marginfi/src/state/price.rs index 9dca2e13f..c539a9fa6 100644 --- a/programs/marginfi/src/state/price.rs +++ b/programs/marginfi/src/state/price.rs @@ -2,6 +2,7 @@ use std::{cell::Ref, cmp::min}; use anchor_lang::prelude::*; use anchor_spl::token::Mint; +use bytemuck::{Pod, Zeroable}; use enum_dispatch::enum_dispatch; use fixed::types::I80F48; use pyth_sdk_solana::{state::SolanaPriceAccount, Price, PriceFeed}; @@ -30,8 +31,7 @@ use anchor_lang::prelude::borsh; use pyth_solana_receiver_sdk::PYTH_PUSH_ORACLE_ID; #[repr(u8)] -#[cfg_attr(any(feature = "test", feature = "client"), derive(PartialEq, Eq))] -#[derive(Copy, Clone, Debug, AnchorSerialize, AnchorDeserialize)] +#[derive(Copy, Clone, Debug, AnchorSerialize, AnchorDeserialize, PartialEq, Eq)] pub enum OracleSetup { None, PythLegacy, @@ -40,6 +40,8 @@ pub enum OracleSetup { SwitchboardPull, StakedWithPythPush, } +unsafe impl Zeroable for OracleSetup {} +unsafe impl Pod for OracleSetup {} impl OracleSetup { pub fn from_u8(value: u8) -> Option { diff --git a/programs/marginfi/src/utils.rs b/programs/marginfi/src/utils.rs index f9fd9ba0e..b4a772815 100644 --- a/programs/marginfi/src/utils.rs +++ b/programs/marginfi/src/utils.rs @@ -204,7 +204,7 @@ pub fn validate_asset_tags(bank: &Bank, marginfi_account: &MarginfiAccount) -> M let mut has_staked_asset = false; for balance in marginfi_account.lending_account.balances.iter() { - if balance.active { + if balance.is_active() { match balance.bank_asset_tag { ASSET_TAG_DEFAULT => has_default_asset = true, ASSET_TAG_SOL => { /* Do nothing, SOL can mix with any asset type */ } diff --git a/programs/marginfi/tests/misc/regression.rs b/programs/marginfi/tests/misc/regression.rs index 5742cecc0..fb40f92ed 100644 --- a/programs/marginfi/tests/misc/regression.rs +++ b/programs/marginfi/tests/misc/regression.rs @@ -45,10 +45,11 @@ async fn account_field_values_reg() -> anyhow::Result<()> { pubkey!("Dq7wypbedtaqQK9QqEFvfrxc4ppfRGXCeTVd7ee7n2jw") ); assert_eq!(account.account_flags, 0); - assert_eq!(account._padding, [0; 63]); + assert_eq!(account._padding0, [0; 32]); + assert_eq!(account._padding1, [0; 31]); let balance_1 = account.lending_account.balances[0]; - assert!(balance_1.active); + assert!(balance_1.is_active()); assert_eq!( balance_1.bank_pk, pubkey!("2s37akK2eyBbp8DZgCm7RtsaEz8eJP3Nxd4urLHQv7yB") @@ -74,7 +75,7 @@ async fn account_field_values_reg() -> anyhow::Result<()> { assert_eq!(balance_1._padding, [0; 1]); let balance_2 = account.lending_account.balances[1]; - assert!(balance_2.active); + assert!(balance_2.is_active()); assert_eq!( balance_2.bank_pk, pubkey!("CCKtUs6Cgwo4aaQUmBPmyoApH2gUDErxNZCAntD6LYGh") @@ -122,10 +123,11 @@ async fn account_field_values_reg() -> anyhow::Result<()> { pubkey!("3T1kGHp7CrdeW9Qj1t8NMc2Ks233RyvzVhoaUPWoBEFK") ); assert_eq!(account.account_flags, 0); - assert_eq!(account._padding, [0; 63]); + assert_eq!(account._padding0, [0; 32]); + assert_eq!(account._padding1, [0; 31]); let balance_1 = account.lending_account.balances[0]; - assert!(balance_1.active); + assert!(balance_1.is_active()); assert_eq!( balance_1.bank_pk, pubkey!("6hS9i46WyTq1KXcoa2Chas2Txh9TJAVr6n1t3tnrE23K") @@ -151,7 +153,7 @@ async fn account_field_values_reg() -> anyhow::Result<()> { assert_eq!(balance_1._padding, [0; 1]); let balance_2 = account.lending_account.balances[1]; - assert!(!balance_2.active); + assert!(!balance_2.is_active()); assert_eq!( balance_2.bank_pk, pubkey!("11111111111111111111111111111111") @@ -199,10 +201,11 @@ async fn account_field_values_reg() -> anyhow::Result<()> { pubkey!("7hmfVTuXc7HeX3YQjpiCXGVQuTeXonzjp795jorZukVR") ); assert_eq!(account.account_flags, 0); - assert_eq!(account._padding, [0; 63]); + assert_eq!(account._padding0, [0; 32]); + assert_eq!(account._padding1, [0; 31]); let balance_1 = account.lending_account.balances[0]; - assert!(!balance_1.active); + assert!(!balance_1.is_active()); assert_eq!( balance_1.bank_pk, pubkey!("11111111111111111111111111111111") @@ -647,7 +650,8 @@ async fn bank_field_values_reg() -> anyhow::Result<()> { assert_eq!(bank.config._pad1, [0; 6]); assert_eq!(bank.config.total_asset_value_init_limit, 0); assert_eq!(bank.config.oracle_max_age, 300); - assert_eq!(bank.config._padding, [0; 38]); + assert_eq!(bank.config._padding0, [0; 6]); + assert_eq!(bank.config._padding1, [0; 32]); assert_eq!(bank.flags, 2); diff --git a/programs/marginfi/tests/user_actions/create_account.rs b/programs/marginfi/tests/user_actions/create_account.rs index a5bee889f..b4d89523c 100644 --- a/programs/marginfi/tests/user_actions/create_account.rs +++ b/programs/marginfi/tests/user_actions/create_account.rs @@ -51,7 +51,7 @@ async fn marginfi_account_create_success() -> anyhow::Result<()> { .lending_account .balances .iter() - .all(|bank| !bank.active)); + .all(|bank| !bank.is_active())); Ok(()) } diff --git a/test-utils/src/marginfi_account.rs b/test-utils/src/marginfi_account.rs index 4fc0d836e..d64b542ec 100644 --- a/test-utils/src/marginfi_account.rs +++ b/test-utils/src/marginfi_account.rs @@ -692,7 +692,7 @@ impl MarginfiAccountFixture { .balances .iter() .filter_map(|balance| { - if balance.active { + if balance.is_active() { Some(balance.bank_pk) } else { None diff --git a/tests/07_deposit.spec.ts b/tests/07_deposit.spec.ts index f4fdbbf20..95b6527c1 100644 --- a/tests/07_deposit.spec.ts +++ b/tests/07_deposit.spec.ts @@ -97,7 +97,7 @@ describe("Deposit funds", () => { const userAcc = await program.account.marginfiAccount.fetch(user0Account); const balances = userAcc.lendingAccount.balances; - assert.equal(balances[0].active, true); + assert.equal(balances[0].active, 1); // Note: The first deposit issues shares 1:1 and the shares use the same decimals assertI80F48Approx(balances[0].assetShares, depositAmountA_native); assertI80F48Equal(balances[0].liabilityShares, 0); @@ -142,7 +142,7 @@ describe("Deposit funds", () => { const userAcc = await program.account.marginfiAccount.fetch(user1Account); const balances = userAcc.lendingAccount.balances; - assert.equal(balances[0].active, true); + assert.equal(balances[0].active, 1); // Note: The first deposit issues shares 1:1 and the shares use the same decimals assertI80F48Approx(balances[0].assetShares, depositAmountUsdc_native); assertI80F48Equal(balances[0].liabilityShares, 0); diff --git a/tests/08_borrow.spec.ts b/tests/08_borrow.spec.ts index f569f9bd3..4115ca5c5 100644 --- a/tests/08_borrow.spec.ts +++ b/tests/08_borrow.spec.ts @@ -141,7 +141,7 @@ describe("Borrow funds", () => { ); } - assert.equal(balances[1].active, true); + assert.equal(balances[1].active, 1); assertI80F48Equal(balances[1].assetShares, 0); // Note: The first borrow issues shares 1:1 and the shares use the same decimals // Note: An origination fee of 0.01 is also incurred here (configured during addBank) diff --git a/tests/09_liquidate.spec.ts b/tests/09_liquidate.spec.ts index edc20ab95..5ac52bf81 100644 --- a/tests/09_liquidate.spec.ts +++ b/tests/09_liquidate.spec.ts @@ -232,7 +232,7 @@ describe("Liquidate user", () => { console.log("user 1 (liquidator) Token A liability shares after: " + wrappedI80F48toBigNumber(liquidatorBalancesAfter[1].liabilityShares).toString()); } - assert.equal(liquidatorBalancesAfter[1].active, true); + assert.equal(liquidatorBalancesAfter[1].active, 1); assertKeysEqual(liquidatorBalancesAfter[1].bankPk, assetBankKey); let now = Math.floor(Date.now() / 1000); diff --git a/tests/s03_deposit.spec.ts b/tests/s03_deposit.spec.ts index 35daf6a04..20d8d653c 100644 --- a/tests/s03_deposit.spec.ts +++ b/tests/s03_deposit.spec.ts @@ -103,7 +103,7 @@ describe("Deposit funds (included staked assets)", () => { userAccount ); const balances = userAcc.lendingAccount.balances; - assert.equal(balances[0].active, true); + assert.equal(balances[0].active, 1); assertKeysEqual(balances[0].bankPk, bankKeypairUsdc.publicKey); }); @@ -134,7 +134,7 @@ describe("Deposit funds (included staked assets)", () => { userAccount ); const balances = userAcc.lendingAccount.balances; - assert.equal(balances[1].active, false); + assert.equal(balances[1].active, 0); }); it("(user 1) deposits SOL to SOL bank - happy path", async () => { @@ -161,7 +161,7 @@ describe("Deposit funds (included staked assets)", () => { userAccount ); const balances = userAcc.lendingAccount.balances; - assert.equal(balances[0].active, true); + assert.equal(balances[0].active, 1); assertKeysEqual(balances[0].bankPk, bankKeypairSol.publicKey); }); @@ -190,7 +190,7 @@ describe("Deposit funds (included staked assets)", () => { userAccount ); const balances = userAcc.lendingAccount.balances; - assert.equal(balances[1].active, true); + assert.equal(balances[1].active, 1); assertKeysEqual(balances[1].bankPk, validators[0].bank); }); @@ -220,7 +220,7 @@ describe("Deposit funds (included staked assets)", () => { userAccount ); const balances = userAcc.lendingAccount.balances; - assert.equal(balances[2].active, false); + assert.equal(balances[2].active, 0); }); it("(user 2) deposits to staked bank - should succeed", async () => { @@ -248,7 +248,7 @@ describe("Deposit funds (included staked assets)", () => { userAccount ); const balances = userAcc.lendingAccount.balances; - assert.equal(balances[0].active, true); + assert.equal(balances[0].active, 1); assertKeysEqual(balances[0].bankPk, validators[0].bank); }); }); diff --git a/tests/s04_borrow.spec.ts b/tests/s04_borrow.spec.ts index 008f7dc61..09442d6f9 100644 --- a/tests/s04_borrow.spec.ts +++ b/tests/s04_borrow.spec.ts @@ -60,7 +60,7 @@ describe("Deposit funds (included staked assets)", () => { userAccount ); const balances = userAcc.lendingAccount.balances; - assert.equal(balances[1].active, true); + assert.equal(balances[1].active, 1); assertKeysEqual(balances[1].bankPk, bankKeypairSol.publicKey); }); @@ -102,7 +102,7 @@ describe("Deposit funds (included staked assets)", () => { userAccount ); const balances = userAcc.lendingAccount.balances; - assert.equal(balances[2].active, false); + assert.equal(balances[2].active, 0); }); // TODO withdraw user 1's SOL collateral and verify they can borrow SOL diff --git a/tests/s05_solAppreciates.spec.ts b/tests/s05_solAppreciates.spec.ts index 0ebdf7f5d..94d191797 100644 --- a/tests/s05_solAppreciates.spec.ts +++ b/tests/s05_solAppreciates.spec.ts @@ -72,7 +72,7 @@ describe("Borrow power grows as v0 Staked SOL gains value from appreciation", () userAccount ); const balances = userAcc.lendingAccount.balances; - assert.equal(balances[1].active, false); + assert.equal(balances[1].active, 0); }); // Note: there is also some natural appreciation here because a few epochs have elapsed... @@ -230,7 +230,7 @@ describe("Borrow power grows as v0 Staked SOL gains value from appreciation", () userAccount ); const balances = userAcc.lendingAccount.balances; - assert.equal(balances[1].active, true); + assert.equal(balances[1].active, 1); assertKeysEqual(balances[1].bankPk, bankKeypairSol.publicKey); }); }); From 87da8b7f4e62d465d23bb93fda591ac25ae1fbc2 Mon Sep 17 00:00:00 2001 From: Jon Gurary <91919816+jgur-psyops@users.noreply.github.com> Date: Fri, 7 Feb 2025 15:54:13 -0500 Subject: [PATCH 22/59] Withdraw staked tests 0.1.2 (#297) * Merges #280 upgrades into consolidation PR #295 --- .../rust/marginfi-cli/src/processor/mod.rs | 18 +- .../src/instructions/create_deposit.rs | 6 +- .../src/instructions/end_deposit.rs | 6 +- programs/marginfi/fuzz/src/lib.rs | 28 +- .../instructions/marginfi_account/borrow.rs | 32 +- .../instructions/marginfi_account/deposit.rs | 34 +- .../marginfi_account/emissions.rs | 18 +- .../instructions/marginfi_account/repay.rs | 36 +- .../instructions/marginfi_account/withdraw.rs | 32 +- .../marginfi/tests/user_actions/deposit.rs | 6 +- test-utils/src/marginfi_account.rs | 28 +- tests/07_deposit.spec.ts | 12 +- tests/08_borrow.spec.ts | 6 +- tests/09_withdraw_repay.spec.ts | 510 ++++++++++++++++++ ...liquidate.spec.ts => 10_liquidate.spec.ts} | 0 tests/rootHooks.ts | 7 +- tests/s01_usersStake.spec.ts | 15 +- tests/s02_addBank.spec.ts | 12 +- tests/s03_deposit.spec.ts | 24 +- tests/s04_borrow.spec.ts | 8 +- tests/s05_solAppreciates.spec.ts | 27 +- tests/s06_propagateSets.spec.ts | 42 +- tests/s07_withdraw_repay.spec.ts | 291 ++++++++++ ...iquidate.spec.ts => s08_liquidate.spec.ts} | 0 tests/utils/genericTests.ts | 10 +- tests/utils/mocks.ts | 3 + tests/utils/user-instructions.ts | 179 +++++- 27 files changed, 1154 insertions(+), 236 deletions(-) create mode 100644 tests/09_withdraw_repay.spec.ts rename tests/{09_liquidate.spec.ts => 10_liquidate.spec.ts} (100%) create mode 100644 tests/s07_withdraw_repay.spec.ts rename tests/{s07_liquidate.spec.ts => s08_liquidate.spec.ts} (100%) diff --git a/clients/rust/marginfi-cli/src/processor/mod.rs b/clients/rust/marginfi-cli/src/processor/mod.rs index 5e2de40aa..fd1dbb017 100644 --- a/clients/rust/marginfi-cli/src/processor/mod.rs +++ b/clients/rust/marginfi-cli/src/processor/mod.rs @@ -2101,12 +2101,12 @@ pub fn marginfi_account_deposit( let mut ix = Instruction { program_id: config.program_id, accounts: marginfi::accounts::LendingAccountDeposit { - marginfi_group: profile.marginfi_group.unwrap(), + group: profile.marginfi_group.unwrap(), marginfi_account: marginfi_account_pk, - signer: signer.pubkey(), + authority: signer.pubkey(), bank: bank_pk, signer_token_account: deposit_ata, - bank_liquidity_vault: bank.liquidity_vault, + liquidity_vault: bank.liquidity_vault, token_program, } .to_account_metas(Some(true)), @@ -2177,11 +2177,11 @@ pub fn marginfi_account_withdraw( let mut ix = Instruction { program_id: config.program_id, accounts: marginfi::accounts::LendingAccountWithdraw { - marginfi_group: profile.marginfi_group.unwrap(), + group: profile.marginfi_group.unwrap(), marginfi_account: marginfi_account_pk, - signer: signer.pubkey(), + authority: signer.pubkey(), bank: bank_pk, - bank_liquidity_vault: bank.liquidity_vault, + liquidity_vault: bank.liquidity_vault, token_program, destination_token_account: withdraw_ata, bank_liquidity_vault_authority: find_bank_vault_authority_pda( @@ -2276,11 +2276,11 @@ pub fn marginfi_account_borrow( let mut ix = Instruction { program_id: config.program_id, accounts: marginfi::accounts::LendingAccountBorrow { - marginfi_group: profile.marginfi_group.unwrap(), + group: profile.marginfi_group.unwrap(), marginfi_account: marginfi_account_pk, - signer: signer.pubkey(), + authority: signer.pubkey(), bank: bank_pk, - bank_liquidity_vault: bank.liquidity_vault, + liquidity_vault: bank.liquidity_vault, token_program, destination_token_account: borrow_ata, bank_liquidity_vault_authority: find_bank_vault_authority_pda( diff --git a/programs/liquidity-incentive-program/src/instructions/create_deposit.rs b/programs/liquidity-incentive-program/src/instructions/create_deposit.rs index c7ffa93e5..fd1e1f3df 100644 --- a/programs/liquidity-incentive-program/src/instructions/create_deposit.rs +++ b/programs/liquidity-incentive-program/src/instructions/create_deposit.rs @@ -80,12 +80,12 @@ pub fn process<'info>( let mut cpi_ctx = CpiContext::new_with_signer( ctx.accounts.marginfi_program.to_account_info(), marginfi::cpi::accounts::LendingAccountDeposit { - marginfi_group: ctx.accounts.marginfi_group.to_account_info(), + group: ctx.accounts.marginfi_group.to_account_info(), marginfi_account: ctx.accounts.marginfi_account.to_account_info(), - signer: ctx.accounts.mfi_pda_signer.to_account_info(), + authority: ctx.accounts.mfi_pda_signer.to_account_info(), bank: ctx.accounts.marginfi_bank.to_account_info(), signer_token_account: ctx.accounts.temp_token_account.to_account_info(), - bank_liquidity_vault: ctx.accounts.marginfi_bank_vault.to_account_info(), + liquidity_vault: ctx.accounts.marginfi_bank_vault.to_account_info(), token_program: ctx.accounts.token_program.to_account_info(), }, signer_seeds, diff --git a/programs/liquidity-incentive-program/src/instructions/end_deposit.rs b/programs/liquidity-incentive-program/src/instructions/end_deposit.rs index 2860e82a1..99c84d686 100644 --- a/programs/liquidity-incentive-program/src/instructions/end_deposit.rs +++ b/programs/liquidity-incentive-program/src/instructions/end_deposit.rs @@ -51,12 +51,12 @@ pub fn process<'info>(ctx: Context<'_, '_, '_, 'info, EndDeposit<'info>>) -> Res let mut cpi_ctx = CpiContext::new_with_signer( ctx.accounts.marginfi_program.to_account_info(), marginfi::cpi::accounts::LendingAccountWithdraw { - marginfi_group: ctx.accounts.marginfi_group.to_account_info(), + group: ctx.accounts.marginfi_group.to_account_info(), marginfi_account: ctx.accounts.marginfi_account.to_account_info(), - signer: ctx.accounts.mfi_pda_signer.to_account_info(), + authority: ctx.accounts.mfi_pda_signer.to_account_info(), bank: ctx.accounts.marginfi_bank.to_account_info(), destination_token_account: ctx.accounts.temp_token_account.to_account_info(), - bank_liquidity_vault: ctx.accounts.marginfi_bank_vault.to_account_info(), + liquidity_vault: ctx.accounts.marginfi_bank_vault.to_account_info(), bank_liquidity_vault_authority: ctx .accounts .marginfi_bank_vault_authority diff --git a/programs/marginfi/fuzz/src/lib.rs b/programs/marginfi/fuzz/src/lib.rs index 11d281ae7..b7b2b451b 100644 --- a/programs/marginfi/fuzz/src/lib.rs +++ b/programs/marginfi/fuzz/src/lib.rs @@ -412,16 +412,18 @@ impl<'state> MarginfiFuzzContext<'state> { Context::new( &marginfi::ID, &mut marginfi::instructions::LendingAccountDeposit { - marginfi_group: AccountLoader::try_from(airls(&self.marginfi_group))?, + group: AccountLoader::try_from(airls(&self.marginfi_group))?, marginfi_account: AccountLoader::try_from(airls( &marginfi_account.margin_account, ))?, - signer: Signer::try_from(airls(&self.owner))?, + authority: Signer::try_from(airls(&self.owner))?, bank: AccountLoader::try_from(airls(&bank.bank))?, signer_token_account: ails( marginfi_account.token_accounts[bank_idx.0 as usize].clone(), ), - bank_liquidity_vault: ails(bank.liquidity_vault.clone()), + liquidity_vault: InterfaceAccount::try_from(airls( + &bank.liquidity_vault.clone(), + ))?, token_program: Interface::try_from(airls(&bank.token_program))?, }, &remaining_accounts, @@ -483,16 +485,18 @@ impl<'state> MarginfiFuzzContext<'state> { Context::new( &marginfi::ID, &mut marginfi::instructions::LendingAccountRepay { - marginfi_group: AccountLoader::try_from(airls(&self.marginfi_group))?, + group: AccountLoader::try_from(airls(&self.marginfi_group))?, marginfi_account: AccountLoader::try_from(airls( &marginfi_account.margin_account, ))?, - signer: Signer::try_from(airls(&self.owner))?, + authority: Signer::try_from(airls(&self.owner))?, bank: AccountLoader::try_from(airls(&bank.bank))?, signer_token_account: ails( marginfi_account.token_accounts[bank_idx.0 as usize].clone(), ), - bank_liquidity_vault: ails(bank.liquidity_vault.clone()), + liquidity_vault: InterfaceAccount::try_from(airls( + &bank.liquidity_vault.clone(), + ))?, token_program: Interface::try_from(airls(&bank.token_program))?, }, &remaining_accounts, @@ -578,18 +582,18 @@ impl<'state> MarginfiFuzzContext<'state> { Context::new( &marginfi::ID, &mut marginfi::instructions::LendingAccountWithdraw { - marginfi_group: AccountLoader::try_from(airls(&self.marginfi_group))?, + group: AccountLoader::try_from(airls(&self.marginfi_group))?, marginfi_account: AccountLoader::try_from(airls( &marginfi_account.margin_account, ))?, - signer: Signer::try_from(airls(&self.owner))?, + authority: Signer::try_from(airls(&self.owner))?, bank: AccountLoader::try_from(airls(&bank.bank))?, token_program: Interface::try_from(airls(&bank.token_program))?, destination_token_account: InterfaceAccount::try_from(airls( &marginfi_account.token_accounts[bank_idx.0 as usize], ))?, bank_liquidity_vault_authority: ails(bank.liquidity_vault_authority.clone()), - bank_liquidity_vault: InterfaceAccount::try_from(airls(&bank.liquidity_vault))?, + liquidity_vault: InterfaceAccount::try_from(airls(&bank.liquidity_vault))?, }, aisls(&remaining_accounts), Default::default(), @@ -663,18 +667,18 @@ impl<'state> MarginfiFuzzContext<'state> { Context::new( &marginfi::ID, &mut marginfi::instructions::LendingAccountBorrow { - marginfi_group: AccountLoader::try_from(airls(&self.marginfi_group))?, + group: AccountLoader::try_from(airls(&self.marginfi_group))?, marginfi_account: AccountLoader::try_from(airls( &marginfi_account.margin_account, ))?, - signer: Signer::try_from(airls(&self.owner))?, + authority: Signer::try_from(airls(&self.owner))?, bank: AccountLoader::try_from(airls(&bank.bank))?, token_program: Interface::try_from(airls(&bank.token_program))?, destination_token_account: InterfaceAccount::try_from(airls( &marginfi_account.token_accounts[bank_idx.0 as usize], ))?, bank_liquidity_vault_authority: ails(bank.liquidity_vault_authority.clone()), - bank_liquidity_vault: InterfaceAccount::try_from(airls(&bank.liquidity_vault))?, + liquidity_vault: InterfaceAccount::try_from(airls(&bank.liquidity_vault))?, }, aisls(&remaining_accounts), Default::default(), diff --git a/programs/marginfi/src/instructions/marginfi_account/borrow.rs b/programs/marginfi/src/instructions/marginfi_account/borrow.rs index 82a44615a..fb7759b1b 100644 --- a/programs/marginfi/src/instructions/marginfi_account/borrow.rs +++ b/programs/marginfi/src/instructions/marginfi_account/borrow.rs @@ -1,6 +1,6 @@ use crate::{ bank_signer, check, - constants::{LIQUIDITY_VAULT_AUTHORITY_SEED, LIQUIDITY_VAULT_SEED}, + constants::LIQUIDITY_VAULT_AUTHORITY_SEED, events::{AccountEventHeader, LendingAccountBorrowEvent}, math_error, prelude::{MarginfiError, MarginfiGroup, MarginfiResult}, @@ -29,11 +29,11 @@ pub fn lending_account_borrow<'info>( let LendingAccountBorrow { marginfi_account: marginfi_account_loader, destination_token_account, - bank_liquidity_vault, + liquidity_vault: bank_liquidity_vault, token_program, bank_liquidity_vault_authority, bank: bank_loader, - marginfi_group: marginfi_group_loader, + group: marginfi_group_loader, .. } = ctx.accounts; let clock = Clock::get()?; @@ -123,7 +123,7 @@ pub fn lending_account_borrow<'info>( emit!(LendingAccountBorrowEvent { header: AccountEventHeader { - signer: Some(ctx.accounts.signer.key()), + signer: Some(ctx.accounts.authority.key()), marginfi_account: marginfi_account_loader.key(), marginfi_account_authority: marginfi_account.authority, marginfi_group: marginfi_account.group, @@ -174,22 +174,21 @@ pub fn lending_account_borrow<'info>( #[derive(Accounts)] pub struct LendingAccountBorrow<'info> { - pub marginfi_group: AccountLoader<'info, MarginfiGroup>, + pub group: AccountLoader<'info, MarginfiGroup>, #[account( mut, - constraint = marginfi_account.load() ?.group == marginfi_group.key(), + has_one = group, + has_one = authority )] pub marginfi_account: AccountLoader<'info, MarginfiAccount>, - #[account( - address = marginfi_account.load() ?.authority, - )] - pub signer: Signer<'info>, + pub authority: Signer<'info>, #[account( mut, - constraint = bank.load() ?.group == marginfi_group.key(), + has_one = group, + has_one = liquidity_vault )] pub bank: AccountLoader<'info, Bank>, @@ -207,15 +206,8 @@ pub struct LendingAccountBorrow<'info> { )] pub bank_liquidity_vault_authority: AccountInfo<'info>, - #[account( - mut, - seeds = [ - LIQUIDITY_VAULT_SEED.as_bytes(), - bank.key().as_ref(), - ], - bump = bank.load() ?.liquidity_vault_bump, - )] - pub bank_liquidity_vault: InterfaceAccount<'info, TokenAccount>, + #[account(mut)] + pub liquidity_vault: InterfaceAccount<'info, TokenAccount>, pub token_program: Interface<'info, TokenInterface>, } diff --git a/programs/marginfi/src/instructions/marginfi_account/deposit.rs b/programs/marginfi/src/instructions/marginfi_account/deposit.rs index 6285eb623..1b74d96dd 100644 --- a/programs/marginfi/src/instructions/marginfi_account/deposit.rs +++ b/programs/marginfi/src/instructions/marginfi_account/deposit.rs @@ -1,6 +1,5 @@ use crate::{ check, - constants::LIQUIDITY_VAULT_SEED, events::{AccountEventHeader, LendingAccountDepositEvent}, prelude::*, state::{ @@ -10,7 +9,7 @@ use crate::{ utils::{self, validate_asset_tags}, }; use anchor_lang::prelude::*; -use anchor_spl::token_interface::TokenInterface; +use anchor_spl::token_interface::{TokenAccount, TokenInterface}; use fixed::types::I80F48; use solana_program::clock::Clock; use solana_program::sysvar::Sysvar; @@ -27,12 +26,12 @@ pub fn lending_account_deposit<'info>( ) -> MarginfiResult { let LendingAccountDeposit { marginfi_account: marginfi_account_loader, - signer, + authority: signer, signer_token_account, - bank_liquidity_vault, + liquidity_vault: bank_liquidity_vault, token_program, bank: bank_loader, - marginfi_group: marginfi_group_loader, + group: marginfi_group_loader, .. } = ctx.accounts; let clock = Clock::get()?; @@ -102,22 +101,21 @@ pub fn lending_account_deposit<'info>( #[derive(Accounts)] pub struct LendingAccountDeposit<'info> { - pub marginfi_group: AccountLoader<'info, MarginfiGroup>, + pub group: AccountLoader<'info, MarginfiGroup>, #[account( mut, - constraint = marginfi_account.load()?.group == marginfi_group.key(), + has_one = group, + has_one = authority )] pub marginfi_account: AccountLoader<'info, MarginfiAccount>, - #[account( - address = marginfi_account.load()?.authority, - )] - pub signer: Signer<'info>, + pub authority: Signer<'info>, #[account( mut, - constraint = bank.load()?.group == marginfi_group.key(), + has_one = group, + has_one = liquidity_vault )] pub bank: AccountLoader<'info, Bank>, @@ -125,16 +123,8 @@ pub struct LendingAccountDeposit<'info> { #[account(mut)] pub signer_token_account: AccountInfo<'info>, - /// CHECK: Seed constraint check - #[account( - mut, - seeds = [ - LIQUIDITY_VAULT_SEED.as_bytes(), - bank.key().as_ref(), - ], - bump = bank.load()?.liquidity_vault_bump, - )] - pub bank_liquidity_vault: AccountInfo<'info>, + #[account(mut)] + pub liquidity_vault: InterfaceAccount<'info, TokenAccount>, pub token_program: Interface<'info, TokenInterface>, } diff --git a/programs/marginfi/src/instructions/marginfi_account/emissions.rs b/programs/marginfi/src/instructions/marginfi_account/emissions.rs index a83c071be..231cc6675 100644 --- a/programs/marginfi/src/instructions/marginfi_account/emissions.rs +++ b/programs/marginfi/src/instructions/marginfi_account/emissions.rs @@ -66,30 +66,27 @@ pub fn lending_account_withdraw_emissions<'info>( #[derive(Accounts)] pub struct LendingAccountWithdrawEmissions<'info> { - pub marginfi_group: AccountLoader<'info, MarginfiGroup>, + pub group: AccountLoader<'info, MarginfiGroup>, #[account( mut, - constraint = marginfi_account.load()?.group == marginfi_group.key(), + has_one = group, + has_one = authority )] pub marginfi_account: AccountLoader<'info, MarginfiAccount>, - #[account( - address = marginfi_account.load()?.authority, - )] - pub signer: Signer<'info>, + pub authority: Signer<'info>, #[account( mut, - constraint = bank.load()?.group == marginfi_group.key(), + has_one = group, + has_one = emissions_mint )] pub bank: AccountLoader<'info, Bank>, - #[account( - address = bank.load()?.emissions_mint - )] pub emissions_mint: InterfaceAccount<'info, Mint>, + /// CHECK: PDA seeds validated #[account( seeds = [ EMISSIONS_AUTH_SEED.as_bytes(), @@ -98,7 +95,6 @@ pub struct LendingAccountWithdrawEmissions<'info> { ], bump )] - /// CHECK: Asserted by PDA pub emissions_auth: AccountInfo<'info>, #[account( diff --git a/programs/marginfi/src/instructions/marginfi_account/repay.rs b/programs/marginfi/src/instructions/marginfi_account/repay.rs index 3abe9a158..b60e207fa 100644 --- a/programs/marginfi/src/instructions/marginfi_account/repay.rs +++ b/programs/marginfi/src/instructions/marginfi_account/repay.rs @@ -1,6 +1,5 @@ use crate::{ check, - constants::LIQUIDITY_VAULT_SEED, events::{AccountEventHeader, LendingAccountRepayEvent}, prelude::{MarginfiError, MarginfiGroup, MarginfiResult}, state::{ @@ -10,7 +9,7 @@ use crate::{ utils, }; use anchor_lang::prelude::*; -use anchor_spl::token_interface::TokenInterface; +use anchor_spl::token_interface::{TokenAccount, TokenInterface}; use fixed::types::I80F48; use solana_program::{clock::Clock, sysvar::Sysvar}; @@ -27,12 +26,12 @@ pub fn lending_account_repay<'info>( ) -> MarginfiResult { let LendingAccountRepay { marginfi_account: marginfi_account_loader, - signer, + authority: signer, signer_token_account, - bank_liquidity_vault, + liquidity_vault: bank_liquidity_vault, token_program, bank: bank_loader, - marginfi_group: marginfi_group_loader, + group: marginfi_group_loader, .. } = ctx.accounts; let clock = Clock::get()?; @@ -96,7 +95,7 @@ pub fn lending_account_repay<'info>( emit!(LendingAccountRepayEvent { header: AccountEventHeader { - signer: Some(ctx.accounts.signer.key()), + signer: Some(ctx.accounts.authority.key()), marginfi_account: marginfi_account_loader.key(), marginfi_account_authority: marginfi_account.authority, marginfi_group: marginfi_account.group, @@ -112,22 +111,21 @@ pub fn lending_account_repay<'info>( #[derive(Accounts)] pub struct LendingAccountRepay<'info> { - pub marginfi_group: AccountLoader<'info, MarginfiGroup>, + pub group: AccountLoader<'info, MarginfiGroup>, #[account( mut, - constraint = marginfi_account.load()?.group == marginfi_group.key(), + has_one = group, + has_one = authority )] pub marginfi_account: AccountLoader<'info, MarginfiAccount>, - #[account( - address = marginfi_account.load()?.authority, - )] - pub signer: Signer<'info>, + pub authority: Signer<'info>, #[account( mut, - constraint = bank.load()?.group == marginfi_group.key(), + has_one = group, + has_one = liquidity_vault )] pub bank: AccountLoader<'info, Bank>, @@ -135,16 +133,8 @@ pub struct LendingAccountRepay<'info> { #[account(mut)] pub signer_token_account: AccountInfo<'info>, - /// CHECK: Seed constraint check - #[account( - mut, - seeds = [ - LIQUIDITY_VAULT_SEED.as_bytes(), - bank.key().as_ref(), - ], - bump = bank.load()?.liquidity_vault_bump, - )] - pub bank_liquidity_vault: AccountInfo<'info>, + #[account(mut)] + pub liquidity_vault: InterfaceAccount<'info, TokenAccount>, pub token_program: Interface<'info, TokenInterface>, } diff --git a/programs/marginfi/src/instructions/marginfi_account/withdraw.rs b/programs/marginfi/src/instructions/marginfi_account/withdraw.rs index db42c550c..425b7a4f3 100644 --- a/programs/marginfi/src/instructions/marginfi_account/withdraw.rs +++ b/programs/marginfi/src/instructions/marginfi_account/withdraw.rs @@ -1,6 +1,6 @@ use crate::{ bank_signer, check, - constants::{LIQUIDITY_VAULT_AUTHORITY_SEED, LIQUIDITY_VAULT_SEED}, + constants::LIQUIDITY_VAULT_AUTHORITY_SEED, events::{AccountEventHeader, LendingAccountWithdrawEvent}, prelude::*, state::{ @@ -29,11 +29,11 @@ pub fn lending_account_withdraw<'info>( let LendingAccountWithdraw { marginfi_account: marginfi_account_loader, destination_token_account, - bank_liquidity_vault, + liquidity_vault: bank_liquidity_vault, token_program, bank_liquidity_vault_authority, bank: bank_loader, - marginfi_group: marginfi_group_loader, + group: marginfi_group_loader, .. } = ctx.accounts; let clock = Clock::get()?; @@ -107,7 +107,7 @@ pub fn lending_account_withdraw<'info>( emit!(LendingAccountWithdrawEvent { header: AccountEventHeader { - signer: Some(ctx.accounts.signer.key()), + signer: Some(ctx.accounts.authority.key()), marginfi_account: marginfi_account_loader.key(), marginfi_account_authority: marginfi_account.authority, marginfi_group: marginfi_account.group, @@ -128,22 +128,21 @@ pub fn lending_account_withdraw<'info>( #[derive(Accounts)] pub struct LendingAccountWithdraw<'info> { - pub marginfi_group: AccountLoader<'info, MarginfiGroup>, + pub group: AccountLoader<'info, MarginfiGroup>, #[account( mut, - constraint = marginfi_account.load()?.group == marginfi_group.key(), + has_one = group, + has_one = authority )] pub marginfi_account: AccountLoader<'info, MarginfiAccount>, - #[account( - address = marginfi_account.load()?.authority, - )] - pub signer: Signer<'info>, + pub authority: Signer<'info>, #[account( mut, - constraint = bank.load()?.group == marginfi_group.key(), + has_one = group, + has_one = liquidity_vault )] pub bank: AccountLoader<'info, Bank>, @@ -161,15 +160,8 @@ pub struct LendingAccountWithdraw<'info> { )] pub bank_liquidity_vault_authority: AccountInfo<'info>, - #[account( - mut, - seeds = [ - LIQUIDITY_VAULT_SEED.as_bytes(), - bank.key().as_ref(), - ], - bump = bank.load()?.liquidity_vault_bump, - )] - pub bank_liquidity_vault: InterfaceAccount<'info, TokenAccount>, + #[account(mut)] + pub liquidity_vault: InterfaceAccount<'info, TokenAccount>, pub token_program: Interface<'info, TokenInterface>, } diff --git a/programs/marginfi/tests/user_actions/deposit.rs b/programs/marginfi/tests/user_actions/deposit.rs index 62667e3e2..a267e9b56 100644 --- a/programs/marginfi/tests/user_actions/deposit.rs +++ b/programs/marginfi/tests/user_actions/deposit.rs @@ -184,12 +184,12 @@ async fn marginfi_account_deposit_failure_wrong_token_program() -> anyhow::Resul let marginfi_account = user_mfi_account_f.load().await; let accounts = marginfi::accounts::LendingAccountDeposit { - marginfi_group: marginfi_account.group, + group: marginfi_account.group, marginfi_account: user_mfi_account_f.key, - signer: test_f.context.borrow().payer.pubkey(), + authority: test_f.context.borrow().payer.pubkey(), bank: bank_f.key, signer_token_account: user_token_account.key, - bank_liquidity_vault: bank_f.get_vault(BankVaultType::Liquidity).0, + liquidity_vault: bank_f.get_vault(BankVaultType::Liquidity).0, token_program: spl_token::ID, } .to_account_metas(Some(true)); diff --git a/test-utils/src/marginfi_account.rs b/test-utils/src/marginfi_account.rs index d64b542ec..3579fa2f8 100644 --- a/test-utils/src/marginfi_account.rs +++ b/test-utils/src/marginfi_account.rs @@ -72,12 +72,12 @@ impl MarginfiAccountFixture { let ctx = self.ctx.borrow_mut(); let mut accounts = marginfi::accounts::LendingAccountDeposit { - marginfi_group: marginfi_account.group, + group: marginfi_account.group, marginfi_account: self.key, - signer: ctx.payer.pubkey(), + authority: ctx.payer.pubkey(), bank: bank.key, signer_token_account: funding_account, - bank_liquidity_vault: bank.get_vault(BankVaultType::Liquidity).0, + liquidity_vault: bank.get_vault(BankVaultType::Liquidity).0, token_program: bank.get_token_program(), } .to_account_metas(Some(true)); @@ -158,12 +158,12 @@ impl MarginfiAccountFixture { let marginfi_account = self.load().await; let mut accounts = marginfi::accounts::LendingAccountWithdraw { - marginfi_group: marginfi_account.group, + group: marginfi_account.group, marginfi_account: self.key, - signer: self.ctx.borrow().payer.pubkey(), + authority: self.ctx.borrow().payer.pubkey(), bank: bank.key, destination_token_account: destination_account, - bank_liquidity_vault: bank.get_vault(BankVaultType::Liquidity).0, + liquidity_vault: bank.get_vault(BankVaultType::Liquidity).0, bank_liquidity_vault_authority: bank.get_vault_authority(BankVaultType::Liquidity).0, token_program: bank.get_token_program(), } @@ -228,12 +228,12 @@ impl MarginfiAccountFixture { let marginfi_account = self.load().await; let mut accounts = marginfi::accounts::LendingAccountBorrow { - marginfi_group: marginfi_account.group, + group: marginfi_account.group, marginfi_account: self.key, - signer: self.ctx.borrow().payer.pubkey(), + authority: self.ctx.borrow().payer.pubkey(), bank: bank.key, destination_token_account: destination_account, - bank_liquidity_vault: bank.get_vault(BankVaultType::Liquidity).0, + liquidity_vault: bank.get_vault(BankVaultType::Liquidity).0, bank_liquidity_vault_authority: bank.get_vault_authority(BankVaultType::Liquidity).0, token_program: bank.get_token_program(), } @@ -333,12 +333,12 @@ impl MarginfiAccountFixture { let ctx = self.ctx.borrow_mut(); let mut accounts = marginfi::accounts::LendingAccountRepay { - marginfi_group: marginfi_account.group, + group: marginfi_account.group, marginfi_account: self.key, - signer: ctx.payer.pubkey(), + authority: ctx.payer.pubkey(), bank: bank.key, signer_token_account: funding_account, - bank_liquidity_vault: bank.get_vault(BankVaultType::Liquidity).0, + liquidity_vault: bank.get_vault(BankVaultType::Liquidity).0, token_program: bank.get_token_program(), } .to_account_metas(Some(true)); @@ -536,9 +536,9 @@ impl MarginfiAccountFixture { let ix = Instruction { program_id: marginfi::id(), accounts: marginfi::accounts::LendingAccountWithdrawEmissions { - marginfi_group: self.load().await.group, + group: self.load().await.group, marginfi_account: self.key, - signer: self.ctx.borrow().payer.pubkey(), + authority: self.ctx.borrow().payer.pubkey(), emissions_mint, emissions_auth: get_emissions_authority_address(bank.key, emissions_mint).0, emissions_vault: get_emissions_token_account_address(bank.key, emissions_mint).0, diff --git a/tests/07_deposit.spec.ts b/tests/07_deposit.spec.ts index 95b6527c1..798b589ad 100644 --- a/tests/07_deposit.spec.ts +++ b/tests/07_deposit.spec.ts @@ -82,12 +82,10 @@ describe("Deposit funds", () => { const user0Account = user.accounts.get(USER_ACCOUNT); - await users[0].mrgnProgram.provider.sendAndConfirm( + await user.mrgnProgram.provider.sendAndConfirm( new Transaction().add( - await depositIx(program, { - marginfiGroup: marginfiGroup.publicKey, + await depositIx(user.mrgnProgram, { marginfiAccount: user0Account, - authority: user.wallet.publicKey, bank: bankKeypairA.publicKey, tokenAccount: user.tokenAAccount, amount: depositAmountA_native, @@ -127,12 +125,10 @@ describe("Deposit funds", () => { const user1Account = user.accounts.get(USER_ACCOUNT); - await users[1].mrgnProgram.provider.sendAndConfirm( + await user.mrgnProgram.provider.sendAndConfirm( new Transaction().add( - await depositIx(program, { - marginfiGroup: marginfiGroup.publicKey, + await depositIx(user.mrgnProgram, { marginfiAccount: user1Account, - authority: user.wallet.publicKey, bank: bankKeypairUsdc.publicKey, tokenAccount: user.usdcAccount, amount: depositAmountUsdc_native, diff --git a/tests/08_borrow.spec.ts b/tests/08_borrow.spec.ts index 4115ca5c5..341d66a24 100644 --- a/tests/08_borrow.spec.ts +++ b/tests/08_borrow.spec.ts @@ -102,12 +102,10 @@ describe("Borrow funds", () => { const user0Account = user.accounts.get(USER_ACCOUNT); - await users[0].mrgnProgram.provider.sendAndConfirm( + await user.mrgnProgram.provider.sendAndConfirm( new Transaction().add( - await borrowIx(program, { - marginfiGroup: marginfiGroup.publicKey, + await borrowIx(user.mrgnProgram, { marginfiAccount: user0Account, - authority: user.wallet.publicKey, bank: bank, tokenAccount: user.usdcAccount, remaining: [ diff --git a/tests/09_withdraw_repay.spec.ts b/tests/09_withdraw_repay.spec.ts new file mode 100644 index 000000000..004999578 --- /dev/null +++ b/tests/09_withdraw_repay.spec.ts @@ -0,0 +1,510 @@ +import { + AnchorProvider, + BN, + getProvider, + Program, + Wallet, + workspace, +} from "@coral-xyz/anchor"; +import { Transaction } from "@solana/web3.js"; +import { Marginfi } from "../target/types/marginfi"; +import { + bankKeypairA, + bankKeypairUsdc, + ecosystem, + marginfiGroup, + oracles, + users, + verbose, +} from "./rootHooks"; +import { + assertBNApproximately, + assertBNEqual, + assertI80F48Approx, + assertI80F48Equal, + assertKeysEqual, + expectFailedTxWithError, + getTokenBalance, +} from "./utils/genericTests"; +import { assert } from "chai"; +import { + borrowIx, + depositIx, + repayIx, + withdrawEmissionsIx, + withdrawIx, +} from "./utils/user-instructions"; +import { USER_ACCOUNT } from "./utils/mocks"; +import { createMintToInstruction } from "@solana/spl-token"; +import { updatePriceAccount } from "./utils/pyth_mocks"; +import { createAssociatedTokenAccountIdempotentInstruction, wrappedI80F48toBigNumber } from "@mrgnlabs/mrgn-common"; +import { u64MAX_BN } from "./utils/types"; + +describe("Withdraw funds", () => { + const program = workspace.Marginfi as Program; + const provider = getProvider() as AnchorProvider; + const wallet = provider.wallet as Wallet; + + const withdrawAmountTokenA = 0.1; + const withdrawAmountTokenA_native = new BN( + withdrawAmountTokenA * 10 ** ecosystem.tokenADecimals + ); + createAssociatedTokenAccountIdempotentInstruction + + const repayAmountUsdc = 0.1; + const repayAmountUsdc_native = new BN( + repayAmountUsdc * 10 ** ecosystem.usdcDecimals + ); + + it("Oracle data refreshes", async () => { + const usdcPrice = BigInt(oracles.usdcPrice * 10 ** oracles.usdcDecimals); + await updatePriceAccount( + oracles.usdcOracle, + { + exponent: -oracles.usdcDecimals, + aggregatePriceInfo: { + price: usdcPrice, + conf: usdcPrice / BigInt(100), // 1% of the price + }, + twap: { + // aka ema + valueComponent: usdcPrice, + }, + }, + wallet + ); + + const tokenAPrice = BigInt( + oracles.tokenAPrice * 10 ** oracles.tokenADecimals + ); + await updatePriceAccount( + oracles.tokenAOracle, + { + exponent: -oracles.tokenADecimals, + aggregatePriceInfo: { + price: tokenAPrice, + conf: tokenAPrice / BigInt(100), // 1% of the price + }, + twap: { + // aka ema + valueComponent: tokenAPrice, + }, + }, + wallet + ); + }); + + it("(user 0) withdraws some token A - happy path", async () => { + const user = users[0]; + const userAccKey = user.accounts.get(USER_ACCOUNT); + + const bank = bankKeypairA.publicKey; + const bankBefore = await program.account.bank.fetch(bank); + const [userAccBefore, userTokenABefore, vaultTokenABefore] = + await Promise.all([ + program.account.marginfiAccount.fetch(userAccKey), + getTokenBalance(provider, user.tokenAAccount), + getTokenBalance(provider, bankBefore.liquidityVault), + ]); + const balancesBefore = userAccBefore.lendingAccount.balances; + + await user.mrgnProgram.provider.sendAndConfirm( + new Transaction().add( + await withdrawIx(user.mrgnProgram, { + marginfiAccount: userAccKey, + bank: bank, + tokenAccount: user.tokenAAccount, + remaining: [ + bankKeypairA.publicKey, + oracles.tokenAOracle.publicKey, + bankKeypairUsdc.publicKey, + oracles.usdcOracle.publicKey, + ], + amount: withdrawAmountTokenA_native, + }) + ) + ); + + const bankAfter = await program.account.bank.fetch(bank); + const [userAccAfter, userTokenAAfter, vaultTokenAAfter] = await Promise.all( + [ + program.account.marginfiAccount.fetch(userAccKey), + getTokenBalance(provider, user.tokenAAccount), + getTokenBalance(provider, bankAfter.liquidityVault), + ] + ); + const balancesAfter = userAccAfter.lendingAccount.balances; + + const withdrawExpected = withdrawAmountTokenA_native.toNumber(); + if (verbose) { + console.log( + "User 0 withdrew " + + withdrawAmountTokenA + + " token A (" + + withdrawExpected.toString() + + ") native" + ); + } + + // user gains the token A, the liquidity vault loses it.... + assert.equal(userTokenAAfter, userTokenABefore + withdrawExpected); + assert.equal(vaultTokenAAfter, vaultTokenABefore - withdrawExpected); + + // User loses the shares of Token A... + // Since there hasn't been any interest (no Token A borrowed), shares and Token A are 1:1 + const sharesBefore = wrappedI80F48toBigNumber( + balancesBefore[0].assetShares + ).toNumber(); + const sharesAfter = wrappedI80F48toBigNumber( + balancesAfter[0].assetShares + ).toNumber(); + assert.equal(sharesAfter, sharesBefore - withdrawExpected); + + // The bank has also lost the same amount of shares... + const bankSharesBefore = wrappedI80F48toBigNumber( + bankBefore.totalAssetShares + ).toNumber(); + const bankSharesAfter = wrappedI80F48toBigNumber( + bankAfter.totalAssetShares + ).toNumber(); + assert.equal(bankSharesAfter, bankSharesBefore - withdrawExpected); + }); + + it("(user 0) repays some USDC debt - happy path", async () => { + const user = users[0]; + const userAccKey = user.accounts.get(USER_ACCOUNT); + + const bank = bankKeypairUsdc.publicKey; + const bankBefore = await program.account.bank.fetch(bank); + const [userAccBefore, userUsdcBefore, vaultUsdcBefore] = await Promise.all([ + program.account.marginfiAccount.fetch(userAccKey), + getTokenBalance(provider, user.usdcAccount), + getTokenBalance(provider, bankBefore.liquidityVault), + ]); + const balancesBefore = userAccBefore.lendingAccount.balances; + + await user.mrgnProgram.provider.sendAndConfirm( + new Transaction().add( + await repayIx(user.mrgnProgram, { + marginfiAccount: userAccKey, + bank: bank, + tokenAccount: user.usdcAccount, + remaining: [ + bankKeypairA.publicKey, + oracles.tokenAOracle.publicKey, + bankKeypairUsdc.publicKey, + oracles.usdcOracle.publicKey, + ], + amount: repayAmountUsdc_native, + }) + ) + ); + + const bankAfter = await program.account.bank.fetch(bank); + const [userAccAfter, userUsdcAfter, vaultUsdcAfter] = await Promise.all([ + program.account.marginfiAccount.fetch(userAccKey), + getTokenBalance(provider, user.usdcAccount), + getTokenBalance(provider, bankAfter.liquidityVault), + ]); + const balancesAfter = userAccAfter.lendingAccount.balances; + + const repayExpected = repayAmountUsdc_native.toNumber(); + if (verbose) { + console.log( + "User 0 repaid " + + repayAmountUsdc + + " usdc (" + + repayExpected.toString() + + ") native" + ); + } + + // user loses the USDC, the liquidity vault gains it.... + assert.equal(userUsdcAfter, userUsdcBefore - repayExpected); + assert.equal(vaultUsdcAfter, vaultUsdcBefore + repayExpected); + + // User loses the liability shares of USDC... + // USDC has some borrows, so there is trivial interest here that affects accounting + const sharesBefore = wrappedI80F48toBigNumber( + balancesBefore[1].liabilityShares + ).toNumber(); + const sharesAfter = wrappedI80F48toBigNumber( + balancesAfter[1].liabilityShares + ).toNumber(); + assert.approximately(sharesAfter, sharesBefore - repayExpected, 1); + + // The bank has also lost the same amount of shares... + const bankSharesBefore = wrappedI80F48toBigNumber( + bankBefore.totalLiabilityShares + ).toNumber(); + const bankSharesAfter = wrappedI80F48toBigNumber( + bankAfter.totalLiabilityShares + ).toNumber(); + assert.approximately(bankSharesAfter, bankSharesBefore - repayExpected, 1); + }); + + it("(user 0) tries to repay all without claiming emissions - should fail", async () => { + const user = users[0]; + const userAccKey = user.accounts.get(USER_ACCOUNT); + const bank = bankKeypairUsdc.publicKey; + expectFailedTxWithError(async () => { + await user.mrgnProgram.provider.sendAndConfirm( + new Transaction().add( + await repayIx(user.mrgnProgram, { + marginfiAccount: userAccKey, + bank: bank, + tokenAccount: user.usdcAccount, + remaining: [ + bankKeypairA.publicKey, + oracles.tokenAOracle.publicKey, + bankKeypairUsdc.publicKey, + oracles.usdcOracle.publicKey, + ], + amount: u64MAX_BN, + repayAll: true, + }) + ) + ); + }, "CannotCloseOutstandingEmissions"); + }); + + it("(user 0) claims emissions (in token B) before repaying their balance - happy path", async () => { + const user = users[0]; + const userAccKey = user.accounts.get(USER_ACCOUNT); + const bank = bankKeypairUsdc.publicKey; + + const userBBefore = await getTokenBalance(provider, user.tokenBAccount); + + await user.mrgnProgram.provider.sendAndConfirm( + new Transaction().add( + await withdrawEmissionsIx(user.mrgnProgram, { + marginfiAccount: userAccKey, + bank: bank, + tokenAccount: user.tokenBAccount, + }) + ) + ); + + const userBAfter = await getTokenBalance(provider, user.tokenBAccount); + const diff = userBAfter - userBBefore; + if (verbose) { + console.log("Claimed Token B emissions: " + diff); + } + + // TODO we can probably assert a more specific balance here with some maths... + assert.ok(diff > 0); + + // TODO assert changes to the emissions accounts... + }); + + it("(user 0) repays all of their USDC debt - happy path", async () => { + const user = users[0]; + const userAccKey = user.accounts.get(USER_ACCOUNT); + + const bank = bankKeypairUsdc.publicKey; + const bankBefore = await program.account.bank.fetch(bank); + const [userAccBefore, userUsdcBefore, vaultUsdcBefore] = await Promise.all([ + program.account.marginfiAccount.fetch(userAccKey), + getTokenBalance(provider, user.usdcAccount), + getTokenBalance(provider, bankBefore.liquidityVault), + ]); + const balancesBefore = userAccBefore.lendingAccount.balances; + + const actualOwed = + wrappedI80F48toBigNumber(balancesBefore[1].liabilityShares).toNumber() * + wrappedI80F48toBigNumber(bankBefore.liabilityShareValue).toNumber(); + + await user.mrgnProgram.provider.sendAndConfirm( + new Transaction().add( + // Needs to occur within the same tx bundle even though we just collected it (a trivial + // amount can build up even in a single slot, and we don't want this to mess up accounting) + await withdrawEmissionsIx(user.mrgnProgram, { + marginfiAccount: userAccKey, + bank: bank, + tokenAccount: user.tokenBAccount, + }), + await repayIx(user.mrgnProgram, { + marginfiAccount: userAccKey, + bank: bank, + tokenAccount: user.usdcAccount, + remaining: [ + bankKeypairA.publicKey, + oracles.tokenAOracle.publicKey, + bankKeypairUsdc.publicKey, + oracles.usdcOracle.publicKey, + ], + amount: u64MAX_BN, + repayAll: true, + }) + ) + ); + + const bankAfter = await program.account.bank.fetch(bank); + const [userAccAfter, userUsdcAfter, vaultUsdcAfter] = await Promise.all([ + program.account.marginfiAccount.fetch(userAccKey), + getTokenBalance(provider, user.usdcAccount), + getTokenBalance(provider, bankAfter.liquidityVault), + ]); + const balancesAfter = userAccAfter.lendingAccount.balances; + + if (verbose) { + console.log( + "User 0 repaid entire USDC balance: ~" + actualOwed.toLocaleString() + ); + } + + // USDC has some borrows, so there is trivial interest here that affects accounting + + // user loses the USDC, the liquidity vault gains it.... + assert.approximately(userUsdcAfter, userUsdcBefore - actualOwed, 2); + assert.approximately(vaultUsdcAfter, vaultUsdcBefore + actualOwed, 2); + + // User loses the liability shares of USDC... + const sharesBefore = wrappedI80F48toBigNumber( + balancesBefore[1].liabilityShares + ).toNumber(); + const sharesAfter = wrappedI80F48toBigNumber( + balancesAfter[1].liabilityShares + ).toNumber(); + assert.approximately(sharesAfter, sharesBefore - actualOwed, 2); + // This balance is now inactive + assert.equal(balancesAfter[1].active, false); + + // The bank has also lost the same amount of shares... + const bankSharesBefore = wrappedI80F48toBigNumber( + bankBefore.totalLiabilityShares + ).toNumber(); + const bankSharesAfter = wrappedI80F48toBigNumber( + bankAfter.totalLiabilityShares + ).toNumber(); + assert.approximately(bankSharesAfter, bankSharesBefore - actualOwed, 2); + }); + + it("(user 0) withdraws all token A balance - happy path", async () => { + const user = users[0]; + const userAccKey = user.accounts.get(USER_ACCOUNT); + + const bank = bankKeypairA.publicKey; + const bankBefore = await program.account.bank.fetch(bank); + const [userAccBefore, userTokenABefore, vaultUsdcBefore] = + await Promise.all([ + program.account.marginfiAccount.fetch(userAccKey), + getTokenBalance(provider, user.tokenAAccount), + getTokenBalance(provider, bankBefore.liquidityVault), + ]); + const balancesBefore = userAccBefore.lendingAccount.balances; + + const actualDeposited = + wrappedI80F48toBigNumber(balancesBefore[0].assetShares).toNumber() * + wrappedI80F48toBigNumber(bankBefore.liabilityShareValue).toNumber(); + + await user.mrgnProgram.provider.sendAndConfirm( + new Transaction().add( + await withdrawIx(user.mrgnProgram, { + marginfiAccount: userAccKey, + bank: bank, + tokenAccount: user.tokenAAccount, + remaining: [ + bankKeypairA.publicKey, + oracles.tokenAOracle.publicKey, + bankKeypairUsdc.publicKey, + oracles.usdcOracle.publicKey, + ], + amount: withdrawAmountTokenA_native, + withdrawAll: true, + }) + ) + ); + + const bankAfter = await program.account.bank.fetch(bank); + + const [userAccAfter, vaultUsdcAfter, userTokenAAfter] = await Promise.all([ + program.account.marginfiAccount.fetch(userAccKey), + getTokenBalance(provider, bankAfter.liquidityVault), + getTokenBalance(provider, user.tokenAAccount), + ]); + const balancesAfter = userAccAfter.lendingAccount.balances; + + const withdrawExpected = actualDeposited; + if (verbose) { + console.log( + "User 0 withdrew all Token A: " + actualDeposited.toLocaleString() + ); + } + + // user gains the token A, the liquidity vault loses it.... + assert.equal(userTokenAAfter, userTokenABefore + withdrawExpected); + assert.equal(vaultUsdcAfter, vaultUsdcBefore - withdrawExpected); + + // User loses the shares of Token A... + // Since there hasn't been any interest (no Token A borrowed), shares and Token A are 1:1 + const sharesBefore = wrappedI80F48toBigNumber( + balancesBefore[0].assetShares + ).toNumber(); + const sharesAfter = wrappedI80F48toBigNumber( + balancesAfter[0].assetShares + ).toNumber(); + assert.equal(sharesAfter, sharesBefore - withdrawExpected); + // This balance is now inactive + assert.equal(balancesAfter[0].active, false); + + // The bank has also lost the same amount of shares... + const bankSharesBefore = wrappedI80F48toBigNumber( + bankBefore.totalAssetShares + ).toNumber(); + const bankSharesAfter = wrappedI80F48toBigNumber( + bankAfter.totalAssetShares + ).toNumber(); + assert.equal(bankSharesAfter, bankSharesBefore - withdrawExpected); + }); + + it("(user 0) restores previous Token A deposits and USDC borrows", async () => { + const user = users[0]; + const userAcc = user.accounts.get(USER_ACCOUNT); + + const depositAmountA = 2; + const depositAmountA_native = new BN( + depositAmountA * 10 ** ecosystem.tokenADecimals + ); + + await user.mrgnProgram.provider.sendAndConfirm( + new Transaction().add( + await depositIx(user.mrgnProgram, { + marginfiAccount: userAcc, + bank: bankKeypairA.publicKey, + tokenAccount: user.tokenAAccount, + amount: depositAmountA_native, + }) + ) + ); + + const borrowAmountUsdc = 5; + const borrowAmountUsdc_native = new BN( + borrowAmountUsdc * 10 ** ecosystem.usdcDecimals + ); + + await user.mrgnProgram.provider.sendAndConfirm( + new Transaction().add( + await borrowIx(user.mrgnProgram, { + marginfiAccount: userAcc, + bank: bankKeypairUsdc.publicKey, + tokenAccount: user.usdcAccount, + remaining: [ + bankKeypairA.publicKey, + oracles.tokenAOracle.publicKey, + bankKeypairUsdc.publicKey, + oracles.usdcOracle.publicKey, + ], + amount: borrowAmountUsdc_native, + }) + ) + ); + + const userAccAfter = await program.account.marginfiAccount.fetch(userAcc); + let balances = userAccAfter.lendingAccount.balances; + assert.equal(balances[0].active, true); + assertKeysEqual(balances[0].bankPk, bankKeypairA.publicKey); + assert.equal(balances[1].active, true); + assertKeysEqual(balances[1].bankPk, bankKeypairUsdc.publicKey); + }); +}); diff --git a/tests/09_liquidate.spec.ts b/tests/10_liquidate.spec.ts similarity index 100% rename from tests/09_liquidate.spec.ts rename to tests/10_liquidate.spec.ts diff --git a/tests/rootHooks.ts b/tests/rootHooks.ts index a17a6a347..cbc13b931 100644 --- a/tests/rootHooks.ts +++ b/tests/rootHooks.ts @@ -53,7 +53,7 @@ export let groupAdmin: MockUser = undefined; /** Administers valiator votes and withdraws */ export let validatorAdmin: MockUser = undefined; export const users: MockUser[] = []; -export const numUsers = 3; +export const numUsers = 4; export const validators: Validator[] = []; export const numValidators = 2; @@ -266,6 +266,11 @@ export const mochaHooks = { bankrunContext = await startAnchor(path.resolve(), [], addedAccounts); bankRunProvider = new BankrunProvider(bankrunContext); bankrunProgram = new Program(mrgnProgram.idl, bankRunProvider); + for (let i = 0; i < numUsers; i++) { + const wal = new Wallet(users[i].wallet); + const prov = new AnchorProvider(bankRunProvider.connection, wal, {}); + users[i].mrgnBankrunProgram = new Program(mrgnProgram.idl, prov); + } banksClient = bankrunContext.banksClient; if (verbose) { diff --git a/tests/s01_usersStake.spec.ts b/tests/s01_usersStake.spec.ts index 931c9ce9e..1be06e705 100644 --- a/tests/s01_usersStake.spec.ts +++ b/tests/s01_usersStake.spec.ts @@ -111,9 +111,10 @@ describe("User stakes some native and creates an account", () => { } }); - it("(user 1/2) Stakes and delegates too", async () => { + it("(user 1/2/3) Stakes and delegates too", async () => { await stakeAndDelegateForUser(1, stake); await stakeAndDelegateForUser(2, stake); + await stakeAndDelegateForUser(3, stake); }); const stakeAndDelegateForUser = async ( @@ -287,10 +288,14 @@ describe("User stakes some native and creates an account", () => { ); }); - it("(user 1/2) deposits " + stake + " to the v0 stake pool too", async () => { - await depositForUser(1); - await depositForUser(2); - }); + it( + "(user 1/2/3) deposits " + stake + " to the v0 stake pool too", + async () => { + await depositForUser(1); + await depositForUser(2); + await depositForUser(3); + } + ); const depositForUser = async (userIndex: number) => { const user = users[userIndex]; diff --git a/tests/s02_addBank.spec.ts b/tests/s02_addBank.spec.ts index f67dace9d..2808a5650 100644 --- a/tests/s02_addBank.spec.ts +++ b/tests/s02_addBank.spec.ts @@ -140,7 +140,7 @@ describe("Init group and add banks with asset category flags", () => { let tx = new Transaction(); tx.add( - await addBank(groupAdmin.mrgnProgram, { + await addBank(bankrunProgram, { marginfiGroup: marginfiGroup.publicKey, admin: groupAdmin.wallet.publicKey, feePayer: groupAdmin.wallet.publicKey, @@ -184,7 +184,7 @@ describe("Init group and add banks with asset category flags", () => { let tx = new Transaction(); tx.add( - await addBank(program, { + await addBank(bankrunProgram, { marginfiGroup: marginfiGroup.publicKey, admin: groupAdmin.wallet.publicKey, feePayer: groupAdmin.wallet.publicKey, @@ -285,7 +285,7 @@ describe("Init group and add banks with asset category flags", () => { isWritable: false, }; - const ix = await program.methods + const ix = await bankrunProgram.methods .lendingPoolAddBankPermissionless(new BN(0)) .accounts({ stakedSettings: settingsKey, @@ -352,7 +352,7 @@ describe("Init group and add banks with asset category flags", () => { isWritable: false, }; - const ix = await program.methods + const ix = await bankrunProgram.methods .lendingPoolAddBankPermissionless(new BN(0)) .accounts({ stakedSettings: settingsKey, @@ -393,7 +393,7 @@ describe("Init group and add banks with asset category flags", () => { isWritable: false, }; - const ix = await program.methods + const ix = await bankrunProgram.methods .lendingPoolAddBankPermissionless(new BN(0)) .accounts({ stakedSettings: settingsKey, @@ -427,7 +427,7 @@ describe("Init group and add banks with asset category flags", () => { let tx = new Transaction(); tx.add( - await addBankPermissionless(program, { + await addBankPermissionless(bankrunProgram, { marginfiGroup: marginfiGroup.publicKey, feePayer: groupAdmin.wallet.publicKey, pythOracle: oracles.wsolOracle.publicKey, diff --git a/tests/s03_deposit.spec.ts b/tests/s03_deposit.spec.ts index 20d8d653c..08df7c051 100644 --- a/tests/s03_deposit.spec.ts +++ b/tests/s03_deposit.spec.ts @@ -84,10 +84,8 @@ describe("Deposit funds (included staked assets)", () => { const userAccount = user.accounts.get(USER_ACCOUNT); let tx = new Transaction().add( - await depositIx(program, { - marginfiGroup: marginfiGroup.publicKey, + await depositIx(user.mrgnBankrunProgram, { marginfiAccount: userAccount, - authority: user.wallet.publicKey, bank: bankKeypairUsdc.publicKey, tokenAccount: user.usdcAccount, amount: new BN(10 * 10 ** ecosystem.usdcDecimals), @@ -113,10 +111,8 @@ describe("Deposit funds (included staked assets)", () => { const userLstAta = user.accounts.get(LST_ATA); let tx = new Transaction().add( - await depositIx(program, { - marginfiGroup: marginfiGroup.publicKey, + await depositIx(user.mrgnBankrunProgram, { marginfiAccount: userAccount, - authority: user.wallet.publicKey, bank: validators[0].bank, tokenAccount: userLstAta, amount: new BN(1 * 10 ** ecosystem.wsolDecimals), @@ -142,10 +138,8 @@ describe("Deposit funds (included staked assets)", () => { const userAccount = user.accounts.get(USER_ACCOUNT); let tx = new Transaction().add( - await depositIx(program, { - marginfiGroup: marginfiGroup.publicKey, + await depositIx(user.mrgnBankrunProgram, { marginfiAccount: userAccount, - authority: user.wallet.publicKey, bank: bankKeypairSol.publicKey, tokenAccount: user.wsolAccount, amount: new BN(2 * 10 ** ecosystem.wsolDecimals), @@ -171,10 +165,8 @@ describe("Deposit funds (included staked assets)", () => { const userLstAta = user.accounts.get(LST_ATA); let tx = new Transaction().add( - await depositIx(program, { - marginfiGroup: marginfiGroup.publicKey, + await depositIx(user.mrgnBankrunProgram, { marginfiAccount: userAccount, - authority: user.wallet.publicKey, bank: validators[0].bank, tokenAccount: userLstAta, amount: new BN(1 * 10 ** ecosystem.wsolDecimals), @@ -199,10 +191,8 @@ describe("Deposit funds (included staked assets)", () => { const userAccount = user.accounts.get(USER_ACCOUNT); let tx = new Transaction().add( - await depositIx(program, { - marginfiGroup: marginfiGroup.publicKey, + await depositIx(user.mrgnBankrunProgram, { marginfiAccount: userAccount, - authority: user.wallet.publicKey, bank: bankKeypairUsdc.publicKey, tokenAccount: user.usdcAccount, amount: new BN(1 * 10 ** ecosystem.usdcDecimals), @@ -229,10 +219,8 @@ describe("Deposit funds (included staked assets)", () => { const userLstAta = user.accounts.get(LST_ATA); let tx = new Transaction().add( - await depositIx(program, { - marginfiGroup: marginfiGroup.publicKey, + await depositIx(user.mrgnBankrunProgram, { marginfiAccount: userAccount, - authority: user.wallet.publicKey, bank: validators[0].bank, tokenAccount: userLstAta, amount: new BN(1 * 10 ** ecosystem.wsolDecimals), diff --git a/tests/s04_borrow.spec.ts b/tests/s04_borrow.spec.ts index 09442d6f9..07a8d5b4d 100644 --- a/tests/s04_borrow.spec.ts +++ b/tests/s04_borrow.spec.ts @@ -37,10 +37,8 @@ describe("Deposit funds (included staked assets)", () => { const userAccount = user.accounts.get(USER_ACCOUNT); let tx = new Transaction().add( - await borrowIx(program, { - marginfiGroup: marginfiGroup.publicKey, + await borrowIx(user.mrgnBankrunProgram, { marginfiAccount: userAccount, - authority: user.wallet.publicKey, bank: bankKeypairSol.publicKey, tokenAccount: user.wsolAccount, remaining: [ @@ -72,10 +70,8 @@ describe("Deposit funds (included staked assets)", () => { const userAccount = user.accounts.get(USER_ACCOUNT); let tx = new Transaction().add( - await borrowIx(program, { - marginfiGroup: marginfiGroup.publicKey, + await borrowIx(user.mrgnBankrunProgram, { marginfiAccount: userAccount, - authority: user.wallet.publicKey, bank: bankKeypairUsdc.publicKey, tokenAccount: user.usdcAccount, remaining: [ diff --git a/tests/s05_solAppreciates.spec.ts b/tests/s05_solAppreciates.spec.ts index 94d191797..6860be4a0 100644 --- a/tests/s05_solAppreciates.spec.ts +++ b/tests/s05_solAppreciates.spec.ts @@ -44,10 +44,8 @@ describe("Borrow power grows as v0 Staked SOL gains value from appreciation", () const userAccount = user.accounts.get(USER_ACCOUNT); let tx = new Transaction().add( - await borrowIx(program, { - marginfiGroup: marginfiGroup.publicKey, + await borrowIx(user.mrgnBankrunProgram, { marginfiAccount: userAccount, - authority: user.wallet.publicKey, bank: bankKeypairSol.publicKey, tokenAccount: user.wsolAccount, remaining: [ @@ -96,10 +94,8 @@ describe("Borrow power grows as v0 Staked SOL gains value from appreciation", () const user = users[2]; const userAccount = user.accounts.get(USER_ACCOUNT); let tx = new Transaction().add( - await borrowIx(program, { - marginfiGroup: marginfiGroup.publicKey, + await borrowIx(user.mrgnBankrunProgram, { marginfiAccount: userAccount, - authority: user.wallet.publicKey, bank: bankKeypairSol.publicKey, tokenAccount: user.wsolAccount, remaining: [ @@ -126,10 +122,8 @@ describe("Borrow power grows as v0 Staked SOL gains value from appreciation", () const user = users[2]; const userAccount = user.accounts.get(USER_ACCOUNT); let tx = new Transaction().add( - await borrowIx(program, { - marginfiGroup: marginfiGroup.publicKey, + await borrowIx(user.mrgnBankrunProgram, { marginfiAccount: userAccount, - authority: user.wallet.publicKey, bank: bankKeypairSol.publicKey, tokenAccount: user.wsolAccount, remaining: [ @@ -157,10 +151,8 @@ describe("Borrow power grows as v0 Staked SOL gains value from appreciation", () const user = users[2]; const userAccount = user.accounts.get(USER_ACCOUNT); let tx = new Transaction().add( - await borrowIx(program, { - marginfiGroup: marginfiGroup.publicKey, + await borrowIx(user.mrgnBankrunProgram, { marginfiAccount: userAccount, - authority: user.wallet.publicKey, bank: bankKeypairSol.publicKey, tokenAccount: user.wsolAccount, remaining: [ @@ -188,27 +180,24 @@ describe("Borrow power grows as v0 Staked SOL gains value from appreciation", () it("Generate stake income....", async () => { // TODO how? + // }); // Now the stake is worth enough and the user can borrow - it("(user 2) borrows 1.1 SOL against their STAKED position - succceds", async () => { + it("(user 2) borrows 1.1 SOL against their STAKED position - succeeds", async () => { const user = users[2]; const userAccount = user.accounts.get(USER_ACCOUNT); const userLstAta = user.accounts.get(LST_ATA); let tx = new Transaction().add( // TODO if we find a way to make stake appreciate on localnet, remove... - await depositIx(program, { - marginfiGroup: marginfiGroup.publicKey, + await depositIx(user.mrgnBankrunProgram, { marginfiAccount: userAccount, - authority: user.wallet.publicKey, bank: validators[0].bank, tokenAccount: userLstAta, amount: new BN(1 * 10 ** ecosystem.wsolDecimals), }), - await borrowIx(program, { - marginfiGroup: marginfiGroup.publicKey, + await borrowIx(user.mrgnBankrunProgram, { marginfiAccount: userAccount, - authority: user.wallet.publicKey, bank: bankKeypairSol.publicKey, tokenAccount: user.wsolAccount, remaining: [ diff --git a/tests/s06_propagateSets.spec.ts b/tests/s06_propagateSets.spec.ts index 1d69552eb..befe5fe95 100644 --- a/tests/s06_propagateSets.spec.ts +++ b/tests/s06_propagateSets.spec.ts @@ -62,10 +62,14 @@ describe("Edit and propagate staked settings", () => { }, }; let tx = new Transaction().add( - await editStakedSettings(groupAdmin.mrgnProgram, { - settingsKey: settingsKey, - settings: settings, - }) + await bankrunProgram.methods + .editStakedSettings(settings) + .accountsPartial({ + marginfiGroup: marginfiGroup.publicKey, + admin: groupAdmin.wallet.publicKey, + stakedSettings: settingsKey, + }) + .instruction() ); tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); tx.sign(groupAdmin.wallet); @@ -87,7 +91,7 @@ describe("Edit and propagate staked settings", () => { it("(permissionless) Propagate staked settings to a bank - happy path", async () => { let tx = new Transaction(); tx.add( - await propagateStakedSettings(program, { + await propagateStakedSettings(bankrunProgram, { settings: settingsKey, bank: bankKey, oracle: oracles.usdcOracle.publicKey, @@ -119,10 +123,14 @@ describe("Edit and propagate staked settings", () => { riskTier: null, }; let tx = new Transaction().add( - await editStakedSettings(groupAdmin.mrgnProgram, { - settingsKey: settingsKey, - settings: settings, - }) + await bankrunProgram.methods + .editStakedSettings(settings) + .accountsPartial({ + marginfiGroup: marginfiGroup.publicKey, + admin: groupAdmin.wallet.publicKey, + stakedSettings: settingsKey, + }) + .instruction() ); tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); tx.sign(groupAdmin.wallet); @@ -135,7 +143,7 @@ describe("Edit and propagate staked settings", () => { tx = new Transaction(); tx.add( - await propagateStakedSettings(program, { + await propagateStakedSettings(bankrunProgram, { settings: settingsKey, bank: bankKey, oracle: PublicKey.default, @@ -165,11 +173,15 @@ describe("Edit and propagate staked settings", () => { // Note you can pack propagates into the edit tx, so with a LUT you can easily propagate // hundreds of banks in the same ts as edit let tx = new Transaction().add( - await editStakedSettings(groupAdmin.mrgnProgram, { - settingsKey: settingsKey, - settings: settings, - }), - await propagateStakedSettings(program, { + await bankrunProgram.methods + .editStakedSettings(settings) + .accountsPartial({ + marginfiGroup: marginfiGroup.publicKey, + admin: groupAdmin.wallet.publicKey, + stakedSettings: settingsKey, + }) + .instruction(), + await propagateStakedSettings(bankrunProgram, { settings: settingsKey, bank: bankKey, oracle: defaultSettings.oracle, diff --git a/tests/s07_withdraw_repay.spec.ts b/tests/s07_withdraw_repay.spec.ts new file mode 100644 index 000000000..9afc233d4 --- /dev/null +++ b/tests/s07_withdraw_repay.spec.ts @@ -0,0 +1,291 @@ +import { workspace, Program } from "@coral-xyz/anchor"; +import { PublicKey, Transaction } from "@solana/web3.js"; +import BN from "bn.js"; +import { Marginfi } from "../target/types/marginfi"; +import { + marginfiGroup, + validators, + groupAdmin, + oracles, + bankrunContext, + banksClient, + bankrunProgram, + users, + ecosystem, + bankKeypairSol, + bankRunProvider, + verbose, +} from "./rootHooks"; +import { + editStakedSettings, + propagateStakedSettings, +} from "./utils/group-instructions"; +import { deriveBankWithSeed, deriveStakedSettings } from "./utils/pdas"; +import { getBankrunBlockhash } from "./utils/spl-staking-utils"; +import { + bigNumberToWrappedI80F48, + wrappedI80F48toBigNumber, +} from "@mrgnlabs/mrgn-common"; +import { assert } from "chai"; +import { + assertKeysEqual, + assertI80F48Approx, + assertBNEqual, + assertBankrunTxFailed, + getTokenBalance, + assertI80F48Equal, +} from "./utils/genericTests"; +import { + defaultStakedInterestSettings, + StakedSettingsEdit, +} from "./utils/types"; +import { LST_ATA, USER_ACCOUNT } from "./utils/mocks"; +import { + borrowIx, + depositIx, + repayIx, + withdrawIx, +} from "./utils/user-instructions"; + +describe("Withdraw staked asset", () => { + let settingsKey: PublicKey; + let bankKey: PublicKey; + + before(async () => { + [settingsKey] = deriveStakedSettings( + bankrunProgram.programId, + marginfiGroup.publicKey + ); + [bankKey] = deriveBankWithSeed( + bankrunProgram.programId, + marginfiGroup.publicKey, + validators[0].splMint, + new BN(0) + ); + }); + + it("(user 3) deposits some native staked and borrows SOL against it - happy path", async () => { + const user = users[3]; + const userAccount = user.accounts.get(USER_ACCOUNT); + const userLstAta = user.accounts.get(LST_ATA); + + let depositTx = new Transaction().add( + await depositIx(user.mrgnBankrunProgram, { + marginfiAccount: userAccount, + bank: validators[0].bank, + tokenAccount: userLstAta, + amount: new BN(1 * 10 ** ecosystem.wsolDecimals), + }) + ); + + depositTx.recentBlockhash = await getBankrunBlockhash(bankrunContext); + depositTx.sign(user.wallet); + await banksClient.tryProcessTransaction(depositTx); + + let borrowTx = new Transaction().add( + await borrowIx(user.mrgnBankrunProgram, { + marginfiAccount: userAccount, + bank: bankKeypairSol.publicKey, + tokenAccount: user.wsolAccount, + remaining: [ + validators[0].bank, + oracles.wsolOracle.publicKey, + validators[0].splMint, + validators[0].splSolPool, + bankKeypairSol.publicKey, + oracles.wsolOracle.publicKey, + ], + amount: new BN(0.5 * 10 ** ecosystem.wsolDecimals), + }) + ); + borrowTx.recentBlockhash = await getBankrunBlockhash(bankrunContext); + borrowTx.sign(user.wallet); + await banksClient.processTransaction(borrowTx); + }); + + it("(user 3) withdraws a small amount of native staked position - happy path", async () => { + const amtNative = 0.1 * 10 ** ecosystem.wsolDecimals; + const user = users[3]; + const userAccount = user.accounts.get(USER_ACCOUNT); + const userLstAta = user.accounts.get(LST_ATA); + + const lstBefore = await getTokenBalance(bankRunProvider, userLstAta); + + let tx = new Transaction().add( + await withdrawIx(user.mrgnBankrunProgram, { + marginfiAccount: userAccount, + bank: validators[0].bank, + tokenAccount: userLstAta, + amount: new BN(amtNative), + remaining: [ + validators[0].bank, + oracles.wsolOracle.publicKey, + validators[0].splMint, + validators[0].splSolPool, + bankKeypairSol.publicKey, + oracles.wsolOracle.publicKey, + ], + }) + ); + + tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); + tx.sign(user.wallet); + await banksClient.processTransaction(tx); + + const lstAfter = await getTokenBalance(bankRunProvider, userLstAta); + assert.equal(lstAfter, lstBefore + amtNative); + + const userAcc = await user.mrgnBankrunProgram.account.marginfiAccount.fetch( + userAccount + ); + const balances = userAcc.lendingAccount.balances; + assert.equal(balances[0].active, true); + + // TODO assert other balances changes as expected... + }); + + it("(user 3) repays a small amount of SOL borrowed against stake - happy path", async () => { + const amtNative = 0.1 * 10 ** ecosystem.wsolDecimals; + const user = users[3]; + const userAccount = user.accounts.get(USER_ACCOUNT); + + const solBefore = await getTokenBalance(bankRunProvider, user.wsolAccount); + + let tx = new Transaction().add( + await repayIx(user.mrgnBankrunProgram, { + marginfiAccount: userAccount, + bank: bankKeypairSol.publicKey, + tokenAccount: user.wsolAccount, + amount: new BN(amtNative), + remaining: [ + validators[0].bank, + oracles.wsolOracle.publicKey, + validators[0].splMint, + validators[0].splSolPool, + bankKeypairSol.publicKey, + oracles.wsolOracle.publicKey, + ], + }) + ); + + tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); + tx.sign(user.wallet); + await banksClient.processTransaction(tx); + + const solAfter = await getTokenBalance(bankRunProvider, user.wsolAccount); + assert.equal(solAfter, solBefore - amtNative); + + const userAcc = await user.mrgnBankrunProgram.account.marginfiAccount.fetch( + userAccount + ); + const balances = userAcc.lendingAccount.balances; + assert.equal(balances[1].active, true); + + // TODO assert other balances changes as expected... + }); + + it("(user 3) repays the entire borrowed SOL balance - happy path", async () => { + const amtNative = 0.1 * 10 ** ecosystem.wsolDecimals; + const user = users[3]; + const userAccount = user.accounts.get(USER_ACCOUNT); + + const solBefore = await getTokenBalance(bankRunProvider, user.wsolAccount); + const userAccBefore = + await user.mrgnBankrunProgram.account.marginfiAccount.fetch(userAccount); + const bankBefore = await user.mrgnBankrunProgram.account.bank.fetch( + bankKeypairSol.publicKey + ); + const amtExpected = + wrappedI80F48toBigNumber( + userAccBefore.lendingAccount.balances[1].liabilityShares + ).toNumber() * + wrappedI80F48toBigNumber(bankBefore.liabilityShareValue).toNumber(); + + let tx = new Transaction().add( + await repayIx(user.mrgnBankrunProgram, { + marginfiAccount: userAccount, + bank: bankKeypairSol.publicKey, + tokenAccount: user.wsolAccount, + amount: new BN(amtNative), + remaining: [ + validators[0].bank, + oracles.wsolOracle.publicKey, + validators[0].splMint, + validators[0].splSolPool, + bankKeypairSol.publicKey, + oracles.wsolOracle.publicKey, + ], + repayAll: true, + }) + ); + + tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); + tx.sign(user.wallet); + await banksClient.processTransaction(tx); + + const solAfter = await getTokenBalance(bankRunProvider, user.wsolAccount); + assert.approximately(solAfter, solBefore - amtExpected, 2); + + const userAcc = await user.mrgnBankrunProgram.account.marginfiAccount.fetch( + userAccount + ); + const balances = userAcc.lendingAccount.balances; + assertI80F48Equal(balances[1].liabilityShares, 0); + assert.equal(balances[1].active, false); + + // TODO assert other balances changes as expected... + }); + + it("(user 3) withdraws the entire native staked position - happy path", async () => { + const amtNative = 0.1 * 10 ** ecosystem.wsolDecimals; + const user = users[3]; + const userAccount = user.accounts.get(USER_ACCOUNT); + const userLstAta = user.accounts.get(LST_ATA); + + const lstBefore = await getTokenBalance(bankRunProvider, userLstAta); + const userAccBefore = + await user.mrgnBankrunProgram.account.marginfiAccount.fetch(userAccount); + const bankBefore = await user.mrgnBankrunProgram.account.bank.fetch( + bankKeypairSol.publicKey + ); + const amtExpected = + wrappedI80F48toBigNumber( + userAccBefore.lendingAccount.balances[0].assetShares + ).toNumber() * + wrappedI80F48toBigNumber(bankBefore.assetShareValue).toNumber(); + + let tx = new Transaction().add( + await withdrawIx(user.mrgnBankrunProgram, { + marginfiAccount: userAccount, + bank: validators[0].bank, + tokenAccount: userLstAta, + amount: new BN(amtNative), + remaining: [ + validators[0].bank, + oracles.wsolOracle.publicKey, + validators[0].splMint, + validators[0].splSolPool, + bankKeypairSol.publicKey, + oracles.wsolOracle.publicKey, + ], + withdrawAll: true, + }) + ); + + tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); + tx.sign(user.wallet); + await banksClient.processTransaction(tx); + + const lstAfter = await getTokenBalance(bankRunProvider, userLstAta); + assert.equal(lstAfter, lstBefore + amtExpected); + + const userAcc = await user.mrgnBankrunProgram.account.marginfiAccount.fetch( + userAccount + ); + const balances = userAcc.lendingAccount.balances; + assertI80F48Equal(balances[0].assetShares, 0); + assert.equal(balances[0].active, false); + + // TODO assert other balances changes as expected... + }); +}); diff --git a/tests/s07_liquidate.spec.ts b/tests/s08_liquidate.spec.ts similarity index 100% rename from tests/s07_liquidate.spec.ts rename to tests/s08_liquidate.spec.ts diff --git a/tests/utils/genericTests.ts b/tests/utils/genericTests.ts index 2a9adba28..64b1b9c6b 100644 --- a/tests/utils/genericTests.ts +++ b/tests/utils/genericTests.ts @@ -123,8 +123,14 @@ export const assertBNApproximately = ( const aB = BigInt(a.toString()); const bB = BigInt(b.toString()); const toleranceB = BigInt(tolerance.toString()); - assert.ok(aB >= bB - toleranceB); - assert.ok(aB <= bB + toleranceB); + const diff = aB >= bB ? aB - bB : bB - aB; + + if (diff > toleranceB) { + throw new Error( + `Values are not approximately equal. A: ${aB.toString()}, B: ${bB.toString()}, ` + + `Difference: ${diff.toString()}, Allowed Tolerance: ${toleranceB.toString()}` + ); + } }; /** diff --git a/tests/utils/mocks.ts b/tests/utils/mocks.ts index ac0398e5e..4e5231fec 100644 --- a/tests/utils/mocks.ts +++ b/tests/utils/mocks.ts @@ -97,6 +97,8 @@ export type MockUser = { usdcAccount: PublicKey; /** A program that uses the user's wallet */ mrgnProgram: Program | undefined; + /** A bankrun program that uses the user's wallet */ + mrgnBankrunProgram: Program | undefined; /** A map to store arbitrary accounts related to the user using a string key */ accounts: Map; }; @@ -219,6 +221,7 @@ export const setupTestUser = async ( mrgnProgram: options.marginProgram ? getUserMarginfiProgram(options.marginProgram, userWalletKeypair) : undefined, + mrgnBankrunProgram: undefined, accounts: new Map(), }; return user; diff --git a/tests/utils/user-instructions.ts b/tests/utils/user-instructions.ts index f8c8ceb10..d83f7a5e4 100644 --- a/tests/utils/user-instructions.ts +++ b/tests/utils/user-instructions.ts @@ -2,6 +2,7 @@ import { BN, Program } from "@coral-xyz/anchor"; import { AccountMeta, PublicKey } from "@solana/web3.js"; import { Marginfi } from "../../target/types/marginfi"; import { TOKEN_PROGRAM_ID } from "@solana/spl-token"; +import { deriveLiquidityVault } from "./pdas"; export type AccountInitArgs = { marginfiGroup: PublicKey; @@ -36,9 +37,7 @@ export const accountInit = ( }; export type DepositArgs = { - marginfiGroup: PublicKey; marginfiAccount: PublicKey; - authority: PublicKey; bank: PublicKey; tokenAccount: PublicKey; amount: BN; @@ -46,7 +45,7 @@ export type DepositArgs = { /** * Deposit to a bank - * * `authority` must sign and own the `tokenAccount` + * * `authority`- MarginfiAccount's authority must sign and own the `tokenAccount` * @param program * @param args * @returns @@ -55,11 +54,76 @@ export const depositIx = (program: Program, args: DepositArgs) => { const ix = program.methods .lendingAccountDeposit(args.amount) .accounts({ - marginfiGroup: args.marginfiGroup, + // marginfiGroup: args.marginfiGroup, // implied from bank marginfiAccount: args.marginfiAccount, - signer: args.authority, + // authority: args.authority, // implied from marginfiAccount bank: args.bank, signerTokenAccount: args.tokenAccount, + // bankLiquidityVault: deriveLiquidityVault(id, bank) + tokenProgram: TOKEN_PROGRAM_ID, + }) + .instruction(); + + return ix; +}; + +export type SettleEmissionsArgs = { + marginfiAccount: PublicKey; + bank: PublicKey; +}; + +/** + * (Permissionless) Settle emissions for a mrgnfi bank that is emitting some rewards. Generally runs + * for all users before rates are updated, otherwise past emissions are retroactively credited at + * the new rate as well. See `withdrawEmissionsIx` to actually claim the emissions to a wallet. + * * `authority`- MarginfiAccount's authority must sign and own the `tokenAccount` + * @param program + * @param args + * @returns + */ +export const settleEmissionsIx = ( + program: Program, + args: SettleEmissionsArgs +) => { + const ix = program.methods + .lendingAccountSettleEmissions() + .accounts({ + marginfiAccount: args.marginfiAccount, + bank: args.bank, + }) + .instruction(); + + return ix; +}; + +export type WithdrawEmissionsArgs = { + marginfiAccount: PublicKey; + bank: PublicKey; + tokenAccount: PublicKey; +}; + +/** + * Settles AND withdraws emissions to the user's given token account. Also see `settleEmissionsIx`, which settles but does not withdraw. + * * `authority`- MarginfiAccount's authority must sign but does not have to own the `tokenAccount` + * @param program + * @param args + * @returns + */ +export const withdrawEmissionsIx = ( + program: Program, + args: WithdrawEmissionsArgs +) => { + const ix = program.methods + .lendingAccountWithdrawEmissions() + .accounts({ + // group: args.marginfiGroup, // implied from bank + marginfiAccount: args.marginfiAccount, + // authority: args.authority, // implied from marginfiAccount + bank: args.bank, + // emissions_mint // implied from bank + // emissions_auth // pda derived from bank + // emissions_vault // pda derived from bank + destinationAccount: args.tokenAccount, tokenProgram: TOKEN_PROGRAM_ID, }) .instruction(); @@ -68,9 +132,7 @@ export const depositIx = (program: Program, args: DepositArgs) => { }; export type BorrowIxArgs = { - marginfiGroup: PublicKey; marginfiAccount: PublicKey; - authority: PublicKey; bank: PublicKey; tokenAccount: PublicKey; remaining: PublicKey[]; @@ -79,9 +141,10 @@ export type BorrowIxArgs = { /** * Borrow from a bank - * * `authority` - must sign, but does not have to own the `tokenAccount` + * * `authority` - marginfiAccount's authority must sign, but does not have to own the `tokenAccount` * * `remaining` - pass bank/oracles for each bank the user is involved with, in the SAME ORDER they - * appear in userAcc.balances (e.g. `[bank0, oracle0, bank1, oracle1]`) + * appear in userAcc.balances (e.g. `[bank0, oracle0, bank1, oracle1]`). For Token22 assets, pass + * the mint first, then the oracles/banks as described earlier. * @param program * @param args * @returns @@ -95,11 +158,59 @@ export const borrowIx = (program: Program, args: BorrowIxArgs) => { const ix = program.methods .lendingAccountBorrow(args.amount) .accounts({ - marginfiGroup: args.marginfiGroup, + // marginfiGroup: args.marginfiGroup, // implied from bank + marginfiAccount: args.marginfiAccount, + // authority: args.authority, // implied from account + bank: args.bank, + destinationTokenAccount: args.tokenAccount, + tokenProgram: TOKEN_PROGRAM_ID, + }) + .remainingAccounts(oracleMeta) + .instruction(); + + return ix; +}; + +export type WithdrawIxArgs = { + marginfiAccount: PublicKey; + bank: PublicKey; + tokenAccount: PublicKey; + remaining: PublicKey[]; + amount: BN; + withdrawAll?: boolean; +}; + +/** + * Withdraw from a bank + * * `authority` - marginfiAccount's authority must sign, but does not have to own the `tokenAccount` + * * `remaining` - pass bank/oracles for each bank the user is involved with, in the SAME ORDER they + * appear in userAcc.balances (e.g. `[bank0, oracle0, bank1, oracle1]`). For Token22 assets, pass + * the mint first, then the oracles/banks as described earlier. + * @param program + * @param args + * @returns + */ +export const withdrawIx = ( + program: Program, + args: WithdrawIxArgs +) => { + const oracleMeta: AccountMeta[] = args.remaining.map((pubkey) => ({ + pubkey, + isSigner: false, + isWritable: false, + })); + // False is the same as null, so if false we'll just pass null + const all = args.withdrawAll === true ? true : null; + const ix = program.methods + .lendingAccountWithdraw(args.amount, all) + .accounts({ + // marginfiGroup: args.marginfiGroup, // implied from bank marginfiAccount: args.marginfiAccount, - signer: args.authority, + // authority: args.authority, // implied from account bank: args.bank, destinationTokenAccount: args.tokenAccount, + // bankLiquidityVaultAuthority = deriveLiquidityVaultAuthority(id, bank); + // bankLiquidityVault = deriveLiquidityVault(id, bank) tokenProgram: TOKEN_PROGRAM_ID, }) .remainingAccounts(oracleMeta) @@ -108,6 +219,50 @@ export const borrowIx = (program: Program, args: BorrowIxArgs) => { return ix; }; +export type RepayIxArgs = { + marginfiAccount: PublicKey; + bank: PublicKey; + tokenAccount: PublicKey; + remaining: PublicKey[]; + amount: BN; + repayAll?: boolean; +}; + +/** + * Repay debt to a bank + * * `authority` - MarginfiAccount's authority must sign and own the `tokenAccount` + * * `remaining` - pass bank/oracles for each bank the user is involved with, in the SAME ORDER they + * appear in userAcc.balances (e.g. `[bank0, oracle0, bank1, oracle1]`). For Token22 assets, pass + * the mint first, then the oracles/banks as described earlier. + * @param program + * @param args + * @returns + */ +export const repayIx = (program: Program, args: RepayIxArgs) => { + const oracleMeta: AccountMeta[] = args.remaining.map((pubkey) => ({ + pubkey, + isSigner: false, + isWritable: false, + })); + // False is the same as null, so if false we'll just pass null + const all = args.repayAll === true ? true : null; + const ix = program.methods + .lendingAccountRepay(args.amount, all) + .accounts({ + // marginfiGroup: args.marginfiGroup, // implied from bank + marginfiAccount: args.marginfiAccount, + // authority: args.authority, // implied from account + bank: args.bank, + signerTokenAccount: args.tokenAccount, + // bankLiquidityVaultAuthority = deriveLiquidityVaultAuthority(id, bank); + // bankLiquidityVault = deriveLiquidityVault(id, bank) + tokenProgram: TOKEN_PROGRAM_ID, + }) + .remainingAccounts(oracleMeta) + .instruction(); + return ix; +}; + export type LiquidateIxArgs = { assetBankKey: PublicKey; liabilityBankKey: PublicKey; @@ -157,4 +312,4 @@ export const liquidateIx = ( }) .remainingAccounts(oracleMeta) .instruction(); -}; \ No newline at end of file +}; From 7f39b9831f1b4281ebd13a7b34fd427945619235 Mon Sep 17 00:00:00 2001 From: jgur-psyops Date: Fri, 7 Feb 2025 16:06:49 -0500 Subject: [PATCH 23/59] Moar has_one upgrade pass 1 --- .../instructions/marginfi_account/close.rs | 8 ++++++-- .../marginfi_account/close_balance.rs | 14 ++++++-------- .../marginfi_account/flashloan.rs | 19 +++++++++++++------ .../marginfi_account/liquidate.rs | 10 ++++------ .../marginfi_account/transfer_authority.rs | 18 ++++++++---------- .../marginfi/tests/user_actions/flash_loan.rs | 2 +- test-utils/src/marginfi_account.rs | 14 +++++++------- 7 files changed, 45 insertions(+), 40 deletions(-) diff --git a/programs/marginfi/src/instructions/marginfi_account/close.rs b/programs/marginfi/src/instructions/marginfi_account/close.rs index 817ed0121..5a326fc6e 100644 --- a/programs/marginfi/src/instructions/marginfi_account/close.rs +++ b/programs/marginfi/src/instructions/marginfi_account/close.rs @@ -16,9 +16,13 @@ pub fn close_account(ctx: Context) -> MarginfiResult { #[derive(Accounts)] pub struct MarginfiAccountClose<'info> { - #[account(mut, close = fee_payer)] + #[account( + mut, + has_one = authority, + close = fee_payer + )] pub marginfi_account: AccountLoader<'info, MarginfiAccount>, - #[account(address = marginfi_account.load()?.authority)] + pub authority: Signer<'info>, #[account(mut)] pub fee_payer: Signer<'info>, diff --git a/programs/marginfi/src/instructions/marginfi_account/close_balance.rs b/programs/marginfi/src/instructions/marginfi_account/close_balance.rs index 992718d9b..319e001b5 100644 --- a/programs/marginfi/src/instructions/marginfi_account/close_balance.rs +++ b/programs/marginfi/src/instructions/marginfi_account/close_balance.rs @@ -13,7 +13,7 @@ pub fn lending_account_close_balance(ctx: Context) - let LendingAccountCloseBalance { marginfi_account, bank: bank_loader, - marginfi_group: marginfi_group_loader, + group: marginfi_group_loader, .. } = ctx.accounts; @@ -45,22 +45,20 @@ pub fn lending_account_close_balance(ctx: Context) - #[derive(Accounts)] pub struct LendingAccountCloseBalance<'info> { - pub marginfi_group: AccountLoader<'info, MarginfiGroup>, + pub group: AccountLoader<'info, MarginfiGroup>, #[account( mut, - constraint = marginfi_account.load()?.group == marginfi_group.key(), + has_one = group, + has_one = authority )] pub marginfi_account: AccountLoader<'info, MarginfiAccount>, - #[account( - address = marginfi_account.load()?.authority, - )] - pub signer: Signer<'info>, + pub authority: Signer<'info>, #[account( mut, - constraint = bank.load()?.group == marginfi_group.key(), + has_one = group )] pub bank: AccountLoader<'info, Bank>, } diff --git a/programs/marginfi/src/instructions/marginfi_account/flashloan.rs b/programs/marginfi/src/instructions/marginfi_account/flashloan.rs index b5deb83ce..b6d518d40 100644 --- a/programs/marginfi/src/instructions/marginfi_account/flashloan.rs +++ b/programs/marginfi/src/instructions/marginfi_account/flashloan.rs @@ -28,10 +28,14 @@ pub fn lending_account_start_flashloan( #[derive(Accounts)] pub struct LendingAccountStartFlashloan<'info> { - #[account(mut)] + #[account( + mut, + has_one = authority + )] pub marginfi_account: AccountLoader<'info, MarginfiAccount>, - #[account(address = marginfi_account.load()?.authority)] - pub signer: Signer<'info>, + + pub authority: Signer<'info>, + /// CHECK: Instructions sysvar #[account(address = sysvar::instructions::ID)] pub ixs_sysvar: AccountInfo<'info>, @@ -140,8 +144,11 @@ pub fn lending_account_end_flashloan<'info>( #[derive(Accounts)] pub struct LendingAccountEndFlashloan<'info> { - #[account(mut)] + #[account( + mut, + has_one = authority + )] pub marginfi_account: AccountLoader<'info, MarginfiAccount>, - #[account(address = marginfi_account.load()?.authority)] - pub signer: Signer<'info>, + + pub authority: Signer<'info>, } diff --git a/programs/marginfi/src/instructions/marginfi_account/liquidate.rs b/programs/marginfi/src/instructions/marginfi_account/liquidate.rs index b25eb48ee..429d180fb 100644 --- a/programs/marginfi/src/instructions/marginfi_account/liquidate.rs +++ b/programs/marginfi/src/instructions/marginfi_account/liquidate.rs @@ -395,7 +395,7 @@ pub fn lending_account_liquidate<'info>( emit!(LendingAccountLiquidateEvent { header: AccountEventHeader { - signer: Some(ctx.accounts.signer.key()), + signer: Some(ctx.accounts.authority.key()), marginfi_account: liquidator_marginfi_account_loader.key(), marginfi_account_authority: liquidator_marginfi_account.authority, marginfi_group: ctx.accounts.group.key(), @@ -433,14 +433,12 @@ pub struct LendingAccountLiquidate<'info> { #[account( mut, - has_one = group + has_one = group, + has_one = authority )] pub liquidator_marginfi_account: AccountLoader<'info, MarginfiAccount>, - #[account( - address = liquidator_marginfi_account.load()?.authority - )] - pub signer: Signer<'info>, + pub authority: Signer<'info>, #[account( mut, diff --git a/programs/marginfi/src/instructions/marginfi_account/transfer_authority.rs b/programs/marginfi/src/instructions/marginfi_account/transfer_authority.rs index 57e808413..2b92f0370 100644 --- a/programs/marginfi/src/instructions/marginfi_account/transfer_authority.rs +++ b/programs/marginfi/src/instructions/marginfi_account/transfer_authority.rs @@ -18,19 +18,17 @@ pub fn set_account_transfer_authority( #[derive(Accounts)] pub struct MarginfiAccountSetAccountAuthority<'info> { - #[account(mut)] - pub marginfi_account: AccountLoader<'info, MarginfiAccount>, - - /// CHECK: The group is confirmed by the address macro #[account( - address = marginfi_account.load()?.group, + mut, + has_one = authority, + has_one = group )] - pub marginfi_group: AccountInfo<'info>, + pub marginfi_account: AccountLoader<'info, MarginfiAccount>, - #[account( - address = marginfi_account.load()?.authority, - )] - pub signer: Signer<'info>, + /// CHECK: Validated against account + pub group: AccountInfo<'info>, + + pub authority: Signer<'info>, /// CHECK: The new account authority doesn't need explicit checks pub new_authority: AccountInfo<'info>, diff --git a/programs/marginfi/tests/user_actions/flash_loan.rs b/programs/marginfi/tests/user_actions/flash_loan.rs index bf7b0f296..098359069 100644 --- a/programs/marginfi/tests/user_actions/flash_loan.rs +++ b/programs/marginfi/tests/user_actions/flash_loan.rs @@ -322,7 +322,7 @@ async fn flashloan_fail_missing_invalid_sysvar_ixs() -> anyhow::Result<()> { program_id: marginfi::id(), accounts: marginfi::accounts::LendingAccountStartFlashloan { marginfi_account: borrower_mfi_account_f.key, - signer: test_f.context.borrow().payer.pubkey(), + authority: test_f.context.borrow().payer.pubkey(), ixs_sysvar: Pubkey::default(), } .to_account_metas(Some(true)), diff --git a/test-utils/src/marginfi_account.rs b/test-utils/src/marginfi_account.rs index 3579fa2f8..73c8c959e 100644 --- a/test-utils/src/marginfi_account.rs +++ b/test-utils/src/marginfi_account.rs @@ -390,9 +390,9 @@ impl MarginfiAccountFixture { let ix = Instruction { program_id: marginfi::id(), accounts: marginfi::accounts::LendingAccountCloseBalance { - marginfi_group: marginfi_account.group, + group: marginfi_account.group, marginfi_account: self.key, - signer: ctx.payer.pubkey(), + authority: ctx.payer.pubkey(), bank: bank.key, } .to_account_metas(Some(true)), @@ -428,7 +428,7 @@ impl MarginfiAccountFixture { asset_bank: asset_bank_fixture.key, liab_bank: liab_bank_fixture.key, liquidator_marginfi_account: self.key, - signer: self.ctx.borrow().payer.pubkey(), + authority: self.ctx.borrow().payer.pubkey(), liquidatee_marginfi_account: liquidatee.key, bank_liquidity_vault_authority: liab_bank_fixture .get_vault_authority(BankVaultType::Liquidity) @@ -618,7 +618,7 @@ impl MarginfiAccountFixture { program_id: marginfi::id(), accounts: marginfi::accounts::LendingAccountStartFlashloan { marginfi_account: self.key, - signer: self.ctx.borrow().payer.pubkey(), + authority: self.ctx.borrow().payer.pubkey(), ixs_sysvar: sysvar::instructions::id(), } .to_account_metas(Some(true)), @@ -633,7 +633,7 @@ impl MarginfiAccountFixture { ) -> Instruction { let mut account_metas = marginfi::accounts::LendingAccountEndFlashloan { marginfi_account: self.key, - signer: self.ctx.borrow().payer.pubkey(), + authority: self.ctx.borrow().payer.pubkey(), } .to_account_metas(Some(true)); @@ -790,10 +790,10 @@ impl MarginfiAccountFixture { program_id: marginfi::id(), accounts: marginfi::accounts::MarginfiAccountSetAccountAuthority { marginfi_account: self.key, - signer: signer.pubkey(), + authority: signer.pubkey(), new_authority, fee_payer: signer.pubkey(), - marginfi_group: marginfi_account.group, + group: marginfi_account.group, } .to_account_metas(None), data: marginfi::instruction::SetNewAccountAuthority {}.data(), From dbb9ad282e6311cc2690a2b0d35f7b3616d52c13 Mon Sep 17 00:00:00 2001 From: jgur-psyops Date: Fri, 7 Feb 2025 18:09:49 -0500 Subject: [PATCH 24/59] Fix cli attempt 1 --- clients/rust/marginfi-cli/src/processor/mod.rs | 2 +- programs/marginfi/src/instructions/marginfi_account/close.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/clients/rust/marginfi-cli/src/processor/mod.rs b/clients/rust/marginfi-cli/src/processor/mod.rs index fd1dbb017..ef497d96d 100644 --- a/clients/rust/marginfi-cli/src/processor/mod.rs +++ b/clients/rust/marginfi-cli/src/processor/mod.rs @@ -2382,7 +2382,7 @@ pub fn marginfi_account_liquidate( asset_bank: asset_bank_pk, liab_bank: liability_bank_pk, liquidator_marginfi_account: marginfi_account_pk, - signer: signer.pubkey(), + authority: signer.pubkey(), liquidatee_marginfi_account: liquidatee_marginfi_account_pk, bank_liquidity_vault_authority: find_bank_vault_authority_pda( &liability_bank_pk, diff --git a/programs/marginfi/src/instructions/marginfi_account/close.rs b/programs/marginfi/src/instructions/marginfi_account/close.rs index 5a326fc6e..e8158608d 100644 --- a/programs/marginfi/src/instructions/marginfi_account/close.rs +++ b/programs/marginfi/src/instructions/marginfi_account/close.rs @@ -17,7 +17,7 @@ pub fn close_account(ctx: Context) -> MarginfiResult { #[derive(Accounts)] pub struct MarginfiAccountClose<'info> { #[account( - mut, + mut, has_one = authority, close = fee_payer )] From 881b1e09514996d3cbf626416538dd032f234ac9 Mon Sep 17 00:00:00 2001 From: jgur-psyops Date: Fri, 7 Feb 2025 19:51:54 -0500 Subject: [PATCH 25/59] Fix inferred accounts in fuzz and liquidate tests --- programs/marginfi/fuzz/Cargo.lock | 2 +- programs/marginfi/fuzz/src/lib.rs | 2 +- programs/marginfi/src/state/marginfi_account.rs | 6 +++--- tests/10_liquidate.spec.ts | 3 +-- tests/s08_liquidate.spec.ts | 3 +-- tests/utils/user-instructions.ts | 2 -- 6 files changed, 7 insertions(+), 11 deletions(-) diff --git a/programs/marginfi/fuzz/Cargo.lock b/programs/marginfi/fuzz/Cargo.lock index 7f6f2c814..09577936a 100644 --- a/programs/marginfi/fuzz/Cargo.lock +++ b/programs/marginfi/fuzz/Cargo.lock @@ -2742,7 +2742,7 @@ dependencies = [ [[package]] name = "marginfi" -version = "0.1.0" +version = "0.1.1" dependencies = [ "anchor-lang 0.29.0", "anchor-lang 0.30.1", diff --git a/programs/marginfi/fuzz/src/lib.rs b/programs/marginfi/fuzz/src/lib.rs index b7b2b451b..5e11363d0 100644 --- a/programs/marginfi/fuzz/src/lib.rs +++ b/programs/marginfi/fuzz/src/lib.rs @@ -800,7 +800,7 @@ impl<'state> MarginfiFuzzContext<'state> { liquidator_marginfi_account: AccountLoader::try_from(airls( &liquidator_account.margin_account, ))?, - signer: Signer::try_from(airls(&self.owner))?, + authority: Signer::try_from(airls(&self.owner))?, liquidatee_marginfi_account: AccountLoader::try_from(airls( &liquidatee_account.margin_account, ))?, diff --git a/programs/marginfi/src/state/marginfi_account.rs b/programs/marginfi/src/state/marginfi_account.rs index e098ae04d..4f5cb437b 100644 --- a/programs/marginfi/src/state/marginfi_account.rs +++ b/programs/marginfi/src/state/marginfi_account.rs @@ -269,9 +269,9 @@ impl<'info> BankAccountWithPriceFeed<'_, 'info> { let bank_data: &[u8] = &bank_data[8..]; let bank = *bytemuck::from_bytes(bank_data); - // Our alternative is this transmute, which is probably fine because are shortening - // 'info to 'a, but better not to tempt fate with transmute in case Anchor messes - // with lifetimes in a later version. + // Our alternative is this transmute, which is probably fine because we are + // shortening 'info to 'a, but better not to tempt fate with transmute in case + // Anchor messes with lifetimes in a later version. // let shorter_bank: &'a AccountInfo<'a> = unsafe { core::mem::transmute(&self.bank) }; // let bank_al = AccountLoader::::try_from(&self.bank)?; diff --git a/tests/10_liquidate.spec.ts b/tests/10_liquidate.spec.ts index 5ac52bf81..6f82bac1e 100644 --- a/tests/10_liquidate.spec.ts +++ b/tests/10_liquidate.spec.ts @@ -173,11 +173,10 @@ describe("Liquidate user", () => { await liquidator.mrgnProgram.provider.sendAndConfirm( new Transaction().add( - await liquidateIx(program, { + await liquidateIx(liquidator.mrgnProgram, { assetBankKey, liabilityBankKey, liquidatorMarginfiAccount: liquidatorAccount, - liquidatorMarginfiAccountAuthority: liquidatorMarginfiAccount.authority, liquidateeMarginfiAccount: liquidateeAccount, remaining: [ oracles.tokenAOracle.publicKey, diff --git a/tests/s08_liquidate.spec.ts b/tests/s08_liquidate.spec.ts index b8d79b9fc..f5f87899e 100644 --- a/tests/s08_liquidate.spec.ts +++ b/tests/s08_liquidate.spec.ts @@ -241,11 +241,10 @@ describe("Liquidate user (including staked assets)", () => { 10 ** oracles.wsolDecimals; let tx = new Transaction().add( - await liquidateIx(bankrunProgram, { + await liquidateIx(liquidator.mrgnBankrunProgram, { assetBankKey, liabilityBankKey, liquidatorMarginfiAccount: liquidatorAccount, - liquidatorMarginfiAccountAuthority: liquidatorMarginfiAccount.authority, liquidateeMarginfiAccount: liquidateeAccount, remaining: [ oracles.wsolOracle.publicKey, diff --git a/tests/utils/user-instructions.ts b/tests/utils/user-instructions.ts index d83f7a5e4..e59fc6c7a 100644 --- a/tests/utils/user-instructions.ts +++ b/tests/utils/user-instructions.ts @@ -267,7 +267,6 @@ export type LiquidateIxArgs = { assetBankKey: PublicKey; liabilityBankKey: PublicKey; liquidatorMarginfiAccount: PublicKey; - liquidatorMarginfiAccountAuthority: PublicKey; liquidateeMarginfiAccount: PublicKey; remaining: PublicKey[]; amount: BN; @@ -306,7 +305,6 @@ export const liquidateIx = ( assetBank: args.assetBankKey, liabBank: args.liabilityBankKey, liquidatorMarginfiAccount: args.liquidatorMarginfiAccount, - signer: args.liquidatorMarginfiAccountAuthority, liquidateeMarginfiAccount: args.liquidateeMarginfiAccount, tokenProgram: TOKEN_PROGRAM_ID, }) From 104d0256afc17d59243aebfb24115565d5f1da18 Mon Sep 17 00:00:00 2001 From: jgur-psyops Date: Sat, 8 Feb 2025 04:38:00 -0500 Subject: [PATCH 26/59] Try fix fuzz 1 --- .../marginfi/src/state/marginfi_account.rs | 38 +++++++++---------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/programs/marginfi/src/state/marginfi_account.rs b/programs/marginfi/src/state/marginfi_account.rs index 4f5cb437b..f6c38da2a 100644 --- a/programs/marginfi/src/state/marginfi_account.rs +++ b/programs/marginfi/src/state/marginfi_account.rs @@ -252,30 +252,30 @@ impl<'info> BankAccountWithPriceFeed<'_, 'info> { { match self.balance.get_side() { Some(side) => { - // We want lifetime <'a> but we have <'info> and it's a pain to modify everything... - // To avoid an unsafe transmuation we just interpret the bank from bytes. Here we - // repeat some of the sanity checks from AccountLoader - if self.bank.owner != &Bank::owner() { - panic!("bank owned by wrong program, this should never happen"); - } - let bank_data = &self.bank.try_borrow_data()?; - if bank_data.len() < Bank::LEN + 8 { - panic!("bank too short, this should never happen"); - } - let bank_discrim: &[u8] = &bank_data[0..8]; - if bank_discrim != Bank::DISCRIMINATOR { - panic!("bad bank discriminator, this should never happen"); - } - let bank_data: &[u8] = &bank_data[8..]; - let bank = *bytemuck::from_bytes(bank_data); + // // We want lifetime <'a> but we have <'info> and it's a pain to modify everything... + // // To avoid an unsafe transmuation we just interpret the bank from bytes. Here we + // // repeat some of the sanity checks from AccountLoader + // if self.bank.owner != &Bank::owner() { + // panic!("bank owned by wrong program, this should never happen"); + // } + // let bank_data = &self.bank.try_borrow_data()?; + // if bank_data.len() < Bank::LEN + 8 { + // panic!("bank too short, this should never happen"); + // } + // let bank_discrim: &[u8] = &bank_data[0..8]; + // if bank_discrim != Bank::DISCRIMINATOR { + // panic!("bad bank discriminator, this should never happen"); + // } + // let bank_data: &[u8] = &bank_data[8..]; + // let bank = *bytemuck::from_bytes(bank_data); // Our alternative is this transmute, which is probably fine because we are // shortening 'info to 'a, but better not to tempt fate with transmute in case // Anchor messes with lifetimes in a later version. - // let shorter_bank: &'a AccountInfo<'a> = unsafe { core::mem::transmute(&self.bank) }; - // let bank_al = AccountLoader::::try_from(&self.bank)?; - // let bank = bank_al.load()?; + let shorter_bank: &'a AccountInfo<'a> = unsafe { core::mem::transmute(&self.bank) }; + let bank_al = AccountLoader::::try_from(&shorter_bank)?; + let bank = bank_al.load()?; match side { BalanceSide::Assets => Ok(( From 036070e75455b380e5472985c8335b9f416f2d0a Mon Sep 17 00:00:00 2001 From: jgur-psyops Date: Mon, 10 Feb 2025 15:29:32 -0500 Subject: [PATCH 27/59] Try fix fuzz 2 --- programs/marginfi/fuzz/src/account_state.rs | 5 ++- .../marginfi/src/state/marginfi_account.rs | 38 +++++++++---------- 2 files changed, 22 insertions(+), 21 deletions(-) diff --git a/programs/marginfi/fuzz/src/account_state.rs b/programs/marginfi/fuzz/src/account_state.rs index 35e76e7de..f28a6424e 100644 --- a/programs/marginfi/fuzz/src/account_state.rs +++ b/programs/marginfi/fuzz/src/account_state.rs @@ -265,7 +265,8 @@ impl AccountsState { owner_pubkey: Pubkey, rent: Rent, ) -> AccountInfo { - let data_len = unpadded_len + 12; + let data_len = unpadded_len; + println!("len: {:?}", data_len); self.new_dex_owned_account_with_lamports( unpadded_len, rent.minimum_balance(data_len), @@ -321,7 +322,7 @@ impl AccountsState { fn allocate_dex_owned_account<'bump>(&'bump self, unpadded_size: usize) -> &mut [u8] { assert_eq!(unpadded_size % 8, 0); - let padded_size = unpadded_size + 12; + let padded_size = unpadded_size; let u64_data = self.bump.alloc_slice_fill_copy(padded_size / 8 + 1, 0u64); transmute_to_bytes_mut(u64_data) as _ diff --git a/programs/marginfi/src/state/marginfi_account.rs b/programs/marginfi/src/state/marginfi_account.rs index f6c38da2a..f32f146a7 100644 --- a/programs/marginfi/src/state/marginfi_account.rs +++ b/programs/marginfi/src/state/marginfi_account.rs @@ -252,30 +252,30 @@ impl<'info> BankAccountWithPriceFeed<'_, 'info> { { match self.balance.get_side() { Some(side) => { - // // We want lifetime <'a> but we have <'info> and it's a pain to modify everything... - // // To avoid an unsafe transmuation we just interpret the bank from bytes. Here we - // // repeat some of the sanity checks from AccountLoader - // if self.bank.owner != &Bank::owner() { - // panic!("bank owned by wrong program, this should never happen"); - // } - // let bank_data = &self.bank.try_borrow_data()?; - // if bank_data.len() < Bank::LEN + 8 { - // panic!("bank too short, this should never happen"); - // } - // let bank_discrim: &[u8] = &bank_data[0..8]; - // if bank_discrim != Bank::DISCRIMINATOR { - // panic!("bad bank discriminator, this should never happen"); - // } - // let bank_data: &[u8] = &bank_data[8..]; - // let bank = *bytemuck::from_bytes(bank_data); + // We want lifetime <'a> but we have <'info> and it's a pain to modify everything... + // To avoid an unsafe transmuation we just interpret the bank from bytes. Here we + // repeat some of the sanity checks from AccountLoader + if self.bank.owner != &Bank::owner() { + panic!("bank owned by wrong program, this should never happen"); + } + let bank_data = &self.bank.try_borrow_data()?; + if bank_data.len() < Bank::LEN + 8 { + panic!("bank too short, this should never happen"); + } + let bank_discrim: &[u8] = &bank_data[0..8]; + if bank_discrim != Bank::DISCRIMINATOR { + panic!("bad bank discriminator, this should never happen"); + } + let bank_data: &[u8] = &bank_data[8..]; + let bank = *bytemuck::from_bytes(bank_data); // Our alternative is this transmute, which is probably fine because we are // shortening 'info to 'a, but better not to tempt fate with transmute in case // Anchor messes with lifetimes in a later version. - let shorter_bank: &'a AccountInfo<'a> = unsafe { core::mem::transmute(&self.bank) }; - let bank_al = AccountLoader::::try_from(&shorter_bank)?; - let bank = bank_al.load()?; + // let shorter_bank: &'a AccountInfo<'a> = unsafe { core::mem::transmute(&self.bank) }; + // let bank_al = AccountLoader::::try_from(&shorter_bank)?; + // let bank = bank_al.load()?; match side { BalanceSide::Assets => Ok(( From 9b79825aa18f7b2e9c26da0aa2ca9b83c00a21f6 Mon Sep 17 00:00:00 2001 From: jgur-psyops Date: Tue, 11 Feb 2025 14:53:57 -0500 Subject: [PATCH 28/59] Final has_one constraint migration --- .../rust/marginfi-cli/src/processor/admin.rs | 6 ++-- .../rust/marginfi-cli/src/processor/mod.rs | 10 +++--- programs/marginfi/fuzz/src/lib.rs | 2 +- .../marginfi_group/accrue_bank_interest.rs | 7 ++-- .../marginfi_group/collect_bank_fees.rs | 26 +++++++------- .../marginfi_group/configure_bank.rs | 33 ++++++++++-------- .../marginfi_group/handle_bankruptcy.rs | 8 ++--- test-utils/src/bank.rs | 12 +++---- test-utils/src/marginfi_group.rs | 8 ++--- tests/04_configureBank.spec.ts | 34 +++++++------------ tests/05_setupEmissions.spec.ts | 10 ++---- tests/utils/group-instructions.ts | 12 ------- 12 files changed, 73 insertions(+), 95 deletions(-) diff --git a/clients/rust/marginfi-cli/src/processor/admin.rs b/clients/rust/marginfi-cli/src/processor/admin.rs index 2552761ac..cf0e7efc0 100644 --- a/clients/rust/marginfi-cli/src/processor/admin.rs +++ b/clients/rust/marginfi-cli/src/processor/admin.rs @@ -25,7 +25,7 @@ pub fn process_collect_fees(config: Config, bank_pk: Pubkey, fee_ata: Pubkey) -> let mut ix = Instruction { program_id: marginfi::id(), accounts: marginfi::accounts::LendingPoolCollectBankFees { - marginfi_group: bank.group, + group: bank.group, bank: bank_pk, fee_vault: bank.fee_vault, token_program: spl_token::id(), @@ -85,7 +85,7 @@ pub fn process_withdraw_fees( let mut ix = Instruction { program_id: marginfi::id(), accounts: marginfi::accounts::LendingPoolWithdrawFees { - marginfi_group: bank.group, + group: bank.group, bank: bank_pk, admin: config.authority(), fee_vault: bank.fee_vault, @@ -143,7 +143,7 @@ pub fn process_withdraw_insurance( let mut ix = Instruction { program_id: marginfi::id(), accounts: marginfi::accounts::LendingPoolWithdrawInsurance { - marginfi_group: bank.group, + group: bank.group, bank: bank_pk, admin: config.authority(), insurance_vault: bank.insurance_vault, diff --git a/clients/rust/marginfi-cli/src/processor/mod.rs b/clients/rust/marginfi-cli/src/processor/mod.rs index ef497d96d..a4a01b062 100644 --- a/clients/rust/marginfi-cli/src/processor/mod.rs +++ b/clients/rust/marginfi-cli/src/processor/mod.rs @@ -732,7 +732,7 @@ fn handle_bankruptcy_for_an_account( let mut handle_bankruptcy_ix = Instruction { program_id: config.program_id, accounts: marginfi::accounts::LendingPoolHandleBankruptcy { - marginfi_group: profile.marginfi_group.unwrap(), + group: profile.marginfi_group.unwrap(), signer: config.authority(), bank: bank_pk, marginfi_account: marginfi_account_pk, @@ -886,7 +886,7 @@ fn make_bankruptcy_ix( let mut handle_bankruptcy_ix = Instruction { program_id: config.program_id, accounts: marginfi::accounts::LendingPoolHandleBankruptcy { - marginfi_group: profile.marginfi_group.unwrap(), + group: profile.marginfi_group.unwrap(), signer: config.fee_payer.pubkey(), bank: bank_pk, marginfi_account: marginfi_account_pk, @@ -1501,7 +1501,7 @@ pub fn bank_setup_emissions( let ix = Instruction { program_id: config.program_id, accounts: marginfi::accounts::LendingPoolSetupEmissions { - marginfi_group: profile.marginfi_group.expect("marginfi group not set"), + group: profile.marginfi_group.expect("marginfi group not set"), admin: config.authority(), bank, emissions_mint: mint, @@ -1619,7 +1619,7 @@ pub fn bank_update_emissions( let ix = Instruction { program_id: config.program_id, accounts: marginfi::accounts::LendingPoolUpdateEmissionsParameters { - marginfi_group: profile.marginfi_group.expect("marginfi group not set"), + group: profile.marginfi_group.expect("marginfi group not set"), admin: config.authority(), bank: bank_pk, emissions_mint: emission_mint, @@ -1669,7 +1669,7 @@ pub fn bank_configure( let configure_bank_ixs = configure_bank_ixs_builder .accounts(marginfi::accounts::LendingPoolConfigureBank { - marginfi_group: profile.marginfi_group.unwrap(), + group: profile.marginfi_group.unwrap(), admin: config.authority(), bank: bank_pk, }) diff --git a/programs/marginfi/fuzz/src/lib.rs b/programs/marginfi/fuzz/src/lib.rs index 5e11363d0..c8851dca4 100644 --- a/programs/marginfi/fuzz/src/lib.rs +++ b/programs/marginfi/fuzz/src/lib.rs @@ -884,7 +884,7 @@ impl<'state> MarginfiFuzzContext<'state> { let res = marginfi::instructions::lending_pool_handle_bankruptcy(Context::new( &marginfi::ID, &mut marginfi::instructions::LendingPoolHandleBankruptcy { - marginfi_group: AccountLoader::try_from(airls(&self.marginfi_group))?, + group: AccountLoader::try_from(airls(&self.marginfi_group))?, signer: Signer::try_from(airls(&self.owner))?, bank: AccountLoader::try_from(airls(&bank.bank))?, marginfi_account: AccountLoader::try_from(airls(&marginfi_account.margin_account))?, diff --git a/programs/marginfi/src/instructions/marginfi_group/accrue_bank_interest.rs b/programs/marginfi/src/instructions/marginfi_group/accrue_bank_interest.rs index 838681c4e..0b93c5a0a 100644 --- a/programs/marginfi/src/instructions/marginfi_group/accrue_bank_interest.rs +++ b/programs/marginfi/src/instructions/marginfi_group/accrue_bank_interest.rs @@ -12,7 +12,7 @@ pub fn lending_pool_accrue_bank_interest( bank.accrue_interest( clock.unix_timestamp, - &*ctx.accounts.marginfi_group.load()?, + &*ctx.accounts.group.load()?, #[cfg(not(feature = "client"))] ctx.accounts.bank.key(), )?; @@ -22,11 +22,10 @@ pub fn lending_pool_accrue_bank_interest( #[derive(Accounts)] pub struct LendingPoolAccrueBankInterest<'info> { - pub marginfi_group: AccountLoader<'info, MarginfiGroup>, + pub group: AccountLoader<'info, MarginfiGroup>, #[account( - mut, - constraint = bank.load()?.group == marginfi_group.key(), + has_one = group )] pub bank: AccountLoader<'info, Bank>, } diff --git a/programs/marginfi/src/instructions/marginfi_group/collect_bank_fees.rs b/programs/marginfi/src/instructions/marginfi_group/collect_bank_fees.rs index dbd366fbb..2c50832d9 100644 --- a/programs/marginfi/src/instructions/marginfi_group/collect_bank_fees.rs +++ b/programs/marginfi/src/instructions/marginfi_group/collect_bank_fees.rs @@ -163,7 +163,7 @@ pub fn lending_pool_collect_bank_fees<'info>( emit!(LendingPoolBankCollectFeesEvent { header: GroupEventHeader { - marginfi_group: ctx.accounts.marginfi_group.key(), + marginfi_group: ctx.accounts.group.key(), signer: None }, bank: ctx.accounts.bank.key(), @@ -179,11 +179,11 @@ pub fn lending_pool_collect_bank_fees<'info>( #[derive(Accounts)] pub struct LendingPoolCollectBankFees<'info> { - pub marginfi_group: AccountLoader<'info, MarginfiGroup>, + pub group: AccountLoader<'info, MarginfiGroup>, #[account( mut, - constraint = bank.load()?.group == marginfi_group.key(), + has_one = group )] pub bank: AccountLoader<'info, Bank>, @@ -283,16 +283,16 @@ pub fn lending_pool_withdraw_fees<'info>( #[derive(Accounts)] pub struct LendingPoolWithdrawFees<'info> { - pub marginfi_group: AccountLoader<'info, MarginfiGroup>, - #[account( - constraint = bank.load()?.group == marginfi_group.key(), + has_one = admin )] - pub bank: AccountLoader<'info, Bank>, + pub group: AccountLoader<'info, MarginfiGroup>, #[account( - address = marginfi_group.load()?.admin, + has_one = group )] + pub bank: AccountLoader<'info, Bank>, + pub admin: Signer<'info>, /// CHECK: ⋐ ͡⋄ ω ͡⋄ ⋑ @@ -360,16 +360,16 @@ pub fn lending_pool_withdraw_insurance<'info>( #[derive(Accounts)] pub struct LendingPoolWithdrawInsurance<'info> { - pub marginfi_group: AccountLoader<'info, MarginfiGroup>, - #[account( - constraint = bank.load()?.group == marginfi_group.key(), + has_one = admin )] - pub bank: AccountLoader<'info, Bank>, + pub group: AccountLoader<'info, MarginfiGroup>, #[account( - address = marginfi_group.load()?.admin, + has_one = group )] + pub bank: AccountLoader<'info, Bank>, + pub admin: Signer<'info>, /// CHECK: ⋐ ͡⋄ ω ͡⋄ ⋑ diff --git a/programs/marginfi/src/instructions/marginfi_group/configure_bank.rs b/programs/marginfi/src/instructions/marginfi_group/configure_bank.rs index dd26d2d59..9e04edcaa 100644 --- a/programs/marginfi/src/instructions/marginfi_group/configure_bank.rs +++ b/programs/marginfi/src/instructions/marginfi_group/configure_bank.rs @@ -25,7 +25,7 @@ pub fn lending_pool_configure_bank( emit!(LendingPoolBankConfigureFrozenEvent { header: GroupEventHeader { - marginfi_group: ctx.accounts.marginfi_group.key(), + marginfi_group: ctx.accounts.group.key(), signer: Some(*ctx.accounts.admin.key) }, bank: ctx.accounts.bank.key(), @@ -43,7 +43,7 @@ pub fn lending_pool_configure_bank( emit!(LendingPoolBankConfigureEvent { header: GroupEventHeader { - marginfi_group: ctx.accounts.marginfi_group.key(), + marginfi_group: ctx.accounts.group.key(), signer: Some(*ctx.accounts.admin.key) }, bank: ctx.accounts.bank.key(), @@ -57,16 +57,17 @@ pub fn lending_pool_configure_bank( #[derive(Accounts)] pub struct LendingPoolConfigureBank<'info> { - pub marginfi_group: AccountLoader<'info, MarginfiGroup>, - #[account( - address = marginfi_group.load()?.admin, + mut, + has_one = admin, )] + pub group: AccountLoader<'info, MarginfiGroup>, + pub admin: Signer<'info>, #[account( mut, - constraint = bank.load()?.group == marginfi_group.key(), + has_one = group, )] pub bank: AccountLoader<'info, Bank>, } @@ -116,22 +117,24 @@ pub fn lending_pool_setup_emissions( #[derive(Accounts)] pub struct LendingPoolSetupEmissions<'info> { - pub marginfi_group: AccountLoader<'info, MarginfiGroup>, - #[account( mut, - address = marginfi_group.load()?.admin, + has_one = admin, )] + pub group: AccountLoader<'info, MarginfiGroup>, + + #[account(mut)] pub admin: Signer<'info>, #[account( mut, - constraint = bank.load()?.group == marginfi_group.key(), + has_one = group, )] pub bank: AccountLoader<'info, Bank>, pub emissions_mint: InterfaceAccount<'info, Mint>, + /// CHECK: Asserted by PDA constraints #[account( seeds = [ EMISSIONS_AUTH_SEED.as_bytes(), @@ -140,7 +143,6 @@ pub struct LendingPoolSetupEmissions<'info> { ], bump )] - /// CHECK: Asserted by PDA constraints pub emissions_auth: AccountInfo<'info>, #[account( @@ -233,17 +235,18 @@ pub fn lending_pool_update_emissions_parameters( #[derive(Accounts)] pub struct LendingPoolUpdateEmissionsParameters<'info> { - pub marginfi_group: AccountLoader<'info, MarginfiGroup>, - #[account( mut, - address = marginfi_group.load()?.admin, + has_one = admin )] + pub group: AccountLoader<'info, MarginfiGroup>, + + #[account(mut)] pub admin: Signer<'info>, #[account( mut, - constraint = bank.load()?.group == marginfi_group.key(), + has_one = group )] pub bank: AccountLoader<'info, Bank>, diff --git a/programs/marginfi/src/instructions/marginfi_group/handle_bankruptcy.rs b/programs/marginfi/src/instructions/marginfi_group/handle_bankruptcy.rs index 745a6bfa0..b41984e9b 100644 --- a/programs/marginfi/src/instructions/marginfi_group/handle_bankruptcy.rs +++ b/programs/marginfi/src/instructions/marginfi_group/handle_bankruptcy.rs @@ -33,7 +33,7 @@ pub fn lending_pool_handle_bankruptcy<'info>( insurance_vault, token_program, bank: bank_loader, - marginfi_group: marginfi_group_loader, + group: marginfi_group_loader, .. } = ctx.accounts; let bank = bank_loader.load()?; @@ -175,20 +175,20 @@ pub fn lending_pool_handle_bankruptcy<'info>( #[derive(Accounts)] pub struct LendingPoolHandleBankruptcy<'info> { - pub marginfi_group: AccountLoader<'info, MarginfiGroup>, + pub group: AccountLoader<'info, MarginfiGroup>, // #[account(address = marginfi_group.load()?.admin)] pub signer: Signer<'info>, #[account( mut, - constraint = bank.load()?.group == marginfi_group.key(), + has_one = group )] pub bank: AccountLoader<'info, Bank>, #[account( mut, - constraint = marginfi_account.load()?.group == marginfi_group.key(), + has_one = group )] pub marginfi_account: AccountLoader<'info, MarginfiAccount>, diff --git a/test-utils/src/bank.rs b/test-utils/src/bank.rs index 67091d202..2960317f1 100644 --- a/test-utils/src/bank.rs +++ b/test-utils/src/bank.rs @@ -93,7 +93,7 @@ impl BankFixture { let mut instructions = Vec::new(); let accounts = marginfi::accounts::LendingPoolConfigureBank { - marginfi_group: self.load().await.group, + group: self.load().await.group, admin: self.ctx.borrow().payer.pubkey(), bank: self.key, } @@ -112,7 +112,7 @@ impl BankFixture { if let Some((setup, oracle)) = oracle_update { let mut oracle_accounts = marginfi::accounts::LendingPoolConfigureBank { - marginfi_group: self.load().await.group, + group: self.load().await.group, admin: self.ctx.borrow().payer.pubkey(), bank: self.key, } @@ -220,7 +220,7 @@ impl BankFixture { let ix = Instruction { program_id: marginfi::id(), accounts: marginfi::accounts::LendingPoolSetupEmissions { - marginfi_group: self.load().await.group, + group: self.load().await.group, admin: self.ctx.borrow().payer.pubkey(), bank: self.key, emissions_mint, @@ -275,7 +275,7 @@ impl BankFixture { let ix = Instruction { program_id: marginfi::id(), accounts: marginfi::accounts::LendingPoolUpdateEmissionsParameters { - marginfi_group: self.load().await.group, + group: self.load().await.group, admin: self.ctx.borrow().payer.pubkey(), bank: self.key, emissions_mint: bank.emissions_mint, @@ -330,7 +330,7 @@ impl BankFixture { ); let mut accounts = marginfi::accounts::LendingPoolWithdrawFees { - marginfi_group: bank.group, + group: bank.group, token_program: receiving_account.token_program, bank: self.key, admin: signer_pk, @@ -375,7 +375,7 @@ impl BankFixture { ); let mut accounts = marginfi::accounts::LendingPoolWithdrawInsurance { - marginfi_group: bank.group, + group: bank.group, token_program: receiving_account.token_program, bank: self.key, admin: signer_pk, diff --git a/test-utils/src/marginfi_group.rs b/test-utils/src/marginfi_group.rs index fa9e24dce..454b29939 100644 --- a/test-utils/src/marginfi_group.rs +++ b/test-utils/src/marginfi_group.rs @@ -323,7 +323,7 @@ impl MarginfiGroupFixture { ) -> Instruction { let accounts = marginfi::accounts::LendingPoolConfigureBank { bank: bank.key, - marginfi_group: self.key, + group: self.key, admin: self.ctx.borrow().payer.pubkey(), } .to_account_metas(Some(true)); @@ -389,7 +389,7 @@ impl MarginfiGroupFixture { let ix = Instruction { program_id: marginfi::id(), accounts: marginfi::accounts::LendingPoolAccrueBankInterest { - marginfi_group: self.key, + group: self.key, bank: bank.key, } .to_account_metas(Some(true)), @@ -445,7 +445,7 @@ impl MarginfiGroupFixture { ); let mut accounts = marginfi::accounts::LendingPoolCollectBankFees { - marginfi_group: self.key, + group: self.key, bank: bank.key, liquidity_vault_authority: bank.get_vault_authority(BankVaultType::Liquidity).0, liquidity_vault: bank.get_vault(BankVaultType::Liquidity).0, @@ -494,7 +494,7 @@ impl MarginfiGroupFixture { nonce: u64, ) -> Result<(), BanksClientError> { let mut accounts = marginfi::accounts::LendingPoolHandleBankruptcy { - marginfi_group: self.key, + group: self.key, signer: self.ctx.borrow().payer.pubkey(), bank: bank.key, marginfi_account: marginfi_account.key, diff --git a/tests/04_configureBank.spec.ts b/tests/04_configureBank.spec.ts index c03a73cc6..d21dcedb9 100644 --- a/tests/04_configureBank.spec.ts +++ b/tests/04_configureBank.spec.ts @@ -61,11 +61,9 @@ describe("Lending pool configure bank", () => { freezeSettings: null, }; - await groupAdmin.mrgnProgram!.provider.sendAndConfirm!( + await groupAdmin.mrgnProgram.provider.sendAndConfirm!( new Transaction().add( - await configureBank(program, { - marginfiGroup: marginfiGroup.publicKey, - admin: groupAdmin.wallet.publicKey, + await configureBank(groupAdmin.mrgnProgram, { bank: bankKey, bankConfigOpt: bankConfigOpt, }) @@ -101,11 +99,9 @@ describe("Lending pool configure bank", () => { }); it("(admin) Restore default settings to bank (USDC)", async () => { - await groupAdmin.mrgnProgram!.provider.sendAndConfirm!( + await groupAdmin.mrgnProgram.provider.sendAndConfirm!( new Transaction().add( - await configureBank(program, { - marginfiGroup: marginfiGroup.publicKey, - admin: groupAdmin.wallet.publicKey, + await configureBank(groupAdmin.mrgnProgram, { bank: bankKeypairUsdc.publicKey, bankConfigOpt: defaultBankConfigOptRaw(), }) @@ -132,7 +128,7 @@ describe("Lending pool configure bank", () => { it("(admin) restore to valid oracle (USDC)", async () => { const bankKey = bankKeypairUsdc.publicKey; - await groupAdmin.mrgnProgram!.provider.sendAndConfirm!( + await groupAdmin.mrgnProgram.provider.sendAndConfirm!( new Transaction().add( await configureBankOracle(groupAdmin.mrgnProgram, { bank: bankKey, @@ -150,7 +146,7 @@ describe("Lending pool configure bank", () => { it("(admin) update oracle to invalid state - should fail", async () => { const bankKey = bankKeypairUsdc.publicKey; await expectFailedTxWithError(async () => { - await groupAdmin.mrgnProgram!.provider.sendAndConfirm!( + await groupAdmin.mrgnProgram.provider.sendAndConfirm!( new Transaction().add( await configureBankOracle(groupAdmin.mrgnProgram, { bank: bankKey, @@ -162,7 +158,7 @@ describe("Lending pool configure bank", () => { }, "InvalidOracleAccount"); await expectFailedTxWithMessage(async () => { - await groupAdmin.mrgnProgram!.provider.sendAndConfirm!( + await groupAdmin.mrgnProgram.provider.sendAndConfirm!( new Transaction().add( await configureBankOracle(groupAdmin.mrgnProgram, { bank: bankKey, @@ -178,7 +174,7 @@ describe("Lending pool configure bank", () => { const bankKey = bankKeypairUsdc.publicKey; await expectFailedTxWithError(async () => { - await users[0].mrgnProgram!.provider.sendAndConfirm!( + await users[0].mrgnProgram.provider.sendAndConfirm!( new Transaction().add( await configureBankOracle(users[0].mrgnProgram, { bank: bankKey, @@ -205,11 +201,9 @@ describe("Lending pool configure bank", () => { it("(admin) Freeze USDC settings so they cannot be changed again (USDC)", async () => { let config = defaultBankConfigOptRaw(); config.freezeSettings = true; - await groupAdmin.mrgnProgram!.provider.sendAndConfirm!( + await groupAdmin.mrgnProgram.provider.sendAndConfirm!( new Transaction().add( - await configureBank(program, { - marginfiGroup: marginfiGroup.publicKey, - admin: groupAdmin.wallet.publicKey, + await configureBank(groupAdmin.mrgnProgram, { bank: bankKeypairUsdc.publicKey, bankConfigOpt: config, }) @@ -223,7 +217,7 @@ describe("Lending pool configure bank", () => { const bankKey = bankKeypairUsdc.publicKey; await expectFailedTxWithMessage(async () => { - await groupAdmin.mrgnProgram!.provider.sendAndConfirm!( + await groupAdmin.mrgnProgram.provider.sendAndConfirm!( new Transaction().add( await configureBankOracle(groupAdmin.mrgnProgram, { bank: bankKey, @@ -246,11 +240,9 @@ describe("Lending pool configure bank", () => { configNew.oracleMaxAge = 42; configNew.freezeSettings = false; - await groupAdmin.mrgnProgram!.provider.sendAndConfirm!( + await groupAdmin.mrgnProgram.provider.sendAndConfirm!( new Transaction().add( - await configureBank(program, { - marginfiGroup: marginfiGroup.publicKey, - admin: groupAdmin.wallet.publicKey, + await configureBank(groupAdmin.mrgnProgram, { bank: bankKeypairUsdc.publicKey, bankConfigOpt: configNew, }) diff --git a/tests/05_setupEmissions.spec.ts b/tests/05_setupEmissions.spec.ts index b14b26679..ebdd1671b 100644 --- a/tests/05_setupEmissions.spec.ts +++ b/tests/05_setupEmissions.spec.ts @@ -68,11 +68,9 @@ describe("Lending pool set up emissions", () => { ecosystem.tokenBMint.publicKey ); - await groupAdmin.mrgnProgram!.provider.sendAndConfirm!( + await groupAdmin.mrgnProgram.provider.sendAndConfirm!( new Transaction().add( - await setupEmissions(program, { - marginfiGroup: marginfiGroup.publicKey, - admin: groupAdmin.wallet.publicKey, + await setupEmissions(groupAdmin.mrgnProgram, { bank: bankKeypairUsdc.publicKey, emissionsMint: ecosystem.tokenBMint.publicKey, fundingAccount: groupAdmin.tokenBAccount, @@ -119,9 +117,7 @@ describe("Lending pool set up emissions", () => { await groupAdmin.mrgnProgram!.provider.sendAndConfirm!( new Transaction().add( - await updateEmissions(program, { - marginfiGroup: marginfiGroup.publicKey, - admin: groupAdmin.wallet.publicKey, + await updateEmissions(groupAdmin.mrgnProgram, { bank: bankKeypairUsdc.publicKey, emissionsMint: ecosystem.tokenBMint.publicKey, fundingAccount: groupAdmin.tokenBAccount, diff --git a/tests/utils/group-instructions.ts b/tests/utils/group-instructions.ts index 826e6db68..52459ef92 100644 --- a/tests/utils/group-instructions.ts +++ b/tests/utils/group-instructions.ts @@ -125,8 +125,6 @@ export const groupInitialize = ( }; export type ConfigureBankArgs = { - marginfiGroup: PublicKey; - admin: PublicKey; bank: PublicKey; bankConfigOpt: BankConfigOptWithAssetTag; // BankConfigOptRaw + assetTag }; @@ -138,8 +136,6 @@ export const configureBank = ( const ix = program.methods .lendingPoolConfigureBank(args.bankConfigOpt) .accounts({ - marginfiGroup: args.marginfiGroup, - admin: args.admin, bank: args.bank, }) .instruction(); @@ -176,8 +172,6 @@ export const configureBankOracle = ( }; export type SetupEmissionsArgs = { - marginfiGroup: PublicKey; - admin: PublicKey; bank: PublicKey; emissionsMint: PublicKey; fundingAccount: PublicKey; @@ -197,8 +191,6 @@ export const setupEmissions = ( args.totalEmissions ) .accounts({ - marginfiGroup: args.marginfiGroup, - admin: args.admin, bank: args.bank, emissionsMint: args.emissionsMint, // emissionsAuth: deriveEmissionsAuth() @@ -212,8 +204,6 @@ export const setupEmissions = ( }; export type UpdateEmissionsArgs = { - marginfiGroup: PublicKey; - admin: PublicKey; bank: PublicKey; emissionsMint: PublicKey; fundingAccount: PublicKey; @@ -233,8 +223,6 @@ export const updateEmissions = ( args.additionalEmissions ) .accounts({ - marginfiGroup: args.marginfiGroup, - admin: args.admin, bank: args.bank, emissionsMint: args.emissionsMint, // emissionsAuth: deriveEmissionsAuth() From f1384c472f1df84557992c554dd90cd93f4438db Mon Sep 17 00:00:00 2001 From: jgur-psyops Date: Tue, 11 Feb 2025 15:57:26 -0500 Subject: [PATCH 29/59] Fix tests to reflect has_one anchor error instead of constraint fail --- .../src/instructions/marginfi_group/accrue_bank_interest.rs | 1 + programs/marginfi/tests/admin_actions/withdraw_fees.rs | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/programs/marginfi/src/instructions/marginfi_group/accrue_bank_interest.rs b/programs/marginfi/src/instructions/marginfi_group/accrue_bank_interest.rs index 0b93c5a0a..9803f9b92 100644 --- a/programs/marginfi/src/instructions/marginfi_group/accrue_bank_interest.rs +++ b/programs/marginfi/src/instructions/marginfi_group/accrue_bank_interest.rs @@ -25,6 +25,7 @@ pub struct LendingPoolAccrueBankInterest<'info> { pub group: AccountLoader<'info, MarginfiGroup>, #[account( + mut, has_one = group )] pub bank: AccountLoader<'info, Bank>, diff --git a/programs/marginfi/tests/admin_actions/withdraw_fees.rs b/programs/marginfi/tests/admin_actions/withdraw_fees.rs index 6344aea2b..be7e26e8b 100644 --- a/programs/marginfi/tests/admin_actions/withdraw_fees.rs +++ b/programs/marginfi/tests/admin_actions/withdraw_fees.rs @@ -118,7 +118,7 @@ async fn marginfi_group_withdraw_fees_and_insurance_fund_as_non_admin_failure( .await; // Unable to withdraw 1000 USDC from the insurance vault, because the signer is not the admin - assert_anchor_error!(res.unwrap_err(), ErrorCode::ConstraintAddress); + assert_anchor_error!(res.unwrap_err(), ErrorCode::ConstraintHasOne); // Mint `fee_vault_balance` USDC to the fee vault bank_f @@ -133,7 +133,7 @@ async fn marginfi_group_withdraw_fees_and_insurance_fund_as_non_admin_failure( .await; // Unable to withdraw `fee_vault_balance` USDC from the fee vault, because the signer is not the admin - assert_anchor_error!(res.unwrap_err(), ErrorCode::ConstraintAddress); + assert_anchor_error!(res.unwrap_err(), ErrorCode::ConstraintHasOne); Ok(()) } From f258b4ec850e88a885f2bc4d12a2eaf37123988f Mon Sep 17 00:00:00 2001 From: Jon Gurary <91919816+jgur-psyops@users.noreply.github.com> Date: Tue, 11 Feb 2025 16:05:05 -0500 Subject: [PATCH 30/59] Remove ignore fee deploy feature (#298) * Removes ignore-fee-deploy feature flag --------- Co-authored-by: lastemp --- DEPLOY_GUIDE_STAGING.md | 2 +- programs/brick/Cargo.toml | 1 - programs/liquidity-incentive-program/Cargo.toml | 1 - programs/marginfi/Cargo.toml | 1 - programs/marginfi/fuzz/Cargo.toml | 2 +- .../instructions/marginfi_group/init_global_fee_state.rs | 7 ------- programs/mocks/Cargo.toml | 1 - programs/test_transfer_hook/Cargo.toml | 1 - scripts/build-program.sh | 2 +- scripts/build-workspace.sh | 2 +- 10 files changed, 4 insertions(+), 16 deletions(-) diff --git a/DEPLOY_GUIDE_STAGING.md b/DEPLOY_GUIDE_STAGING.md index cb46bc2e5..e37e04a89 100644 --- a/DEPLOY_GUIDE_STAGING.md +++ b/DEPLOY_GUIDE_STAGING.md @@ -14,7 +14,7 @@ Staging is different from mainnet only in that it uses a different key. Ensure t * Note: this rarely works, the program is probably too chonky. * Build with `anchor build -p marginfi -- --no-default-features --features staging` -* If this is your first time deploying (to a new key), with `anchor build -p marginfi -- --no-default-features --features staging ignore-fee-deploy` +* If this is your first time deploying (to a new key), with `anchor build -p marginfi -- --no-default-features --features staging` * Ensure anchor.toml is configured like this: ``` [provider] diff --git a/programs/brick/Cargo.toml b/programs/brick/Cargo.toml index c62e59195..1bca36c77 100644 --- a/programs/brick/Cargo.toml +++ b/programs/brick/Cargo.toml @@ -15,7 +15,6 @@ cpi = ["no-entrypoint"] default = [] idl-build = ["anchor-lang/idl-build"] test = [] -ignore-fee-deploy = [] [dependencies] # Remove workspace = true if already defined in the root Cargo.toml diff --git a/programs/liquidity-incentive-program/Cargo.toml b/programs/liquidity-incentive-program/Cargo.toml index 88db143a8..a4eec9871 100644 --- a/programs/liquidity-incentive-program/Cargo.toml +++ b/programs/liquidity-incentive-program/Cargo.toml @@ -19,7 +19,6 @@ devnet = ["marginfi/devnet"] mainnet-beta = ["marginfi/mainnet-beta"] test = [] test-bpf = [] -ignore-fee-deploy = [] [dependencies] anchor-lang = { workspace = true } diff --git a/programs/marginfi/Cargo.toml b/programs/marginfi/Cargo.toml index d52920f05..670fabf75 100644 --- a/programs/marginfi/Cargo.toml +++ b/programs/marginfi/Cargo.toml @@ -22,7 +22,6 @@ devnet = [] mainnet-beta = [] debug = [] staging = [] -ignore-fee-deploy = [] [dependencies] solana-program = { workspace = true } diff --git a/programs/marginfi/fuzz/Cargo.toml b/programs/marginfi/fuzz/Cargo.toml index d6fbab2ab..7a2d82569 100644 --- a/programs/marginfi/fuzz/Cargo.toml +++ b/programs/marginfi/fuzz/Cargo.toml @@ -48,7 +48,7 @@ capture_log = ["log", "log4rs"] [dependencies.marginfi] path = ".." -features = ["no-entrypoint", "debug", "client", "ignore-fee-deploy"] +features = ["no-entrypoint", "debug", "client"] # Prevent this from interfering with workspaces [workspace] diff --git a/programs/marginfi/src/instructions/marginfi_group/init_global_fee_state.rs b/programs/marginfi/src/instructions/marginfi_group/init_global_fee_state.rs index 11476b893..050830724 100644 --- a/programs/marginfi/src/instructions/marginfi_group/init_global_fee_state.rs +++ b/programs/marginfi/src/instructions/marginfi_group/init_global_fee_state.rs @@ -15,13 +15,6 @@ pub fn initialize_fee_state( program_fee_rate: WrappedI80F48, ) -> Result<()> { let mut fee_state = ctx.accounts.fee_state.load_init()?; - cfg_if::cfg_if! { - if #[cfg(all(feature = "mainnet-beta", not(feature = "ignore-fee-deploy")))] { - if ctx.accounts.payer.key != &pubkey!("3HGdGLrnK9DsnHi1mCrUMLGfQHcu6xUrXhMY14GYjqvM") { - panic!("The mrgn program multisig must sign on mainnet."); - } - } - } fee_state.global_fee_admin = admin_key; fee_state.global_fee_wallet = fee_wallet; fee_state.key = ctx.accounts.fee_state.key(); diff --git a/programs/mocks/Cargo.toml b/programs/mocks/Cargo.toml index 66765715d..e1a5ff097 100644 --- a/programs/mocks/Cargo.toml +++ b/programs/mocks/Cargo.toml @@ -22,7 +22,6 @@ devnet = [] mainnet-beta = [] debug = [] staging = [] -ignore-fee-deploy = [] [dependencies] anchor-lang = { workspace = true } diff --git a/programs/test_transfer_hook/Cargo.toml b/programs/test_transfer_hook/Cargo.toml index 02687bc90..b23f23a7d 100644 --- a/programs/test_transfer_hook/Cargo.toml +++ b/programs/test_transfer_hook/Cargo.toml @@ -6,7 +6,6 @@ edition = "2021" [features] idl-build = [] no-entrypoint = [] -ignore-fee-deploy = [] [lib] crate-type = ["cdylib", "lib"] diff --git a/scripts/build-program.sh b/scripts/build-program.sh index c1e0eb733..1ca3556f1 100755 --- a/scripts/build-program.sh +++ b/scripts/build-program.sh @@ -21,6 +21,6 @@ else exit 1 fi -cmd="anchor build -p $program_lib_name -- $features ignore-fee-deploy" +cmd="anchor build -p $program_lib_name -- $features" echo "Running: $cmd" eval "$cmd" diff --git a/scripts/build-workspace.sh b/scripts/build-workspace.sh index 65899b826..222b1d084 100755 --- a/scripts/build-workspace.sh +++ b/scripts/build-workspace.sh @@ -2,6 +2,6 @@ ROOT=$(git rev-parse --show-toplevel) cd $ROOT -cmd="anchor build --no-idl -- --features ignore-fee-deploy" +cmd="anchor build --no-idl -- --features" echo "Running: $cmd" eval "$cmd" From 413792e23829eafdc2908ab1c18b7c2742a73298 Mon Sep 17 00:00:00 2001 From: jgur-psyops Date: Tue, 11 Feb 2025 16:35:25 -0500 Subject: [PATCH 31/59] Fix build script --- scripts/build-workspace.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/build-workspace.sh b/scripts/build-workspace.sh index 222b1d084..77055eada 100755 --- a/scripts/build-workspace.sh +++ b/scripts/build-workspace.sh @@ -2,6 +2,6 @@ ROOT=$(git rev-parse --show-toplevel) cd $ROOT -cmd="anchor build --no-idl -- --features" +cmd="anchor build --no-idl" echo "Running: $cmd" eval "$cmd" From a1e8120f211ef3fc632a18f8e9c881072072f98b Mon Sep 17 00:00:00 2001 From: Jon Gurary <91919816+jgur-psyops@users.noreply.github.com> Date: Wed, 12 Feb 2025 12:41:55 -0500 Subject: [PATCH 32/59] Deposit limit (#300) * Add deposit up to limit functionality --------- Co-authored-by: daniel --- clients/rust/marginfi-cli/src/entrypoint.rs | 15 +- .../rust/marginfi-cli/src/processor/mod.rs | 7 +- .../src/instructions/create_deposit.rs | 2 +- .../liquidity-incentive-program/tests/lip.rs | 4 +- programs/marginfi/fuzz/fuzz_targets/lend.rs | 4 +- programs/marginfi/fuzz/src/lib.rs | 21 +-- .../instructions/marginfi_account/deposit.rs | 42 ++++- programs/marginfi/src/lib.rs | 3 +- .../tests/admin_actions/bankruptcy.rs | 21 ++- .../tests/admin_actions/bankruptcy_auth.rs | 4 + .../tests/admin_actions/interest_accrual.rs | 13 +- .../misc/bank_ignore_stale_isolated_banks.rs | 23 +-- .../misc/bank_variable_oracle_staleness.rs | 6 +- .../tests/misc/collateral_value_cap.rs | 10 +- .../marginfi/tests/misc/operational_state.rs | 14 +- programs/marginfi/tests/misc/pyth_push.rs | 12 +- .../marginfi/tests/misc/real_oracle_data.rs | 8 +- .../risk_engine_flexible_oracle_checks.rs | 24 +-- .../marginfi/tests/misc/token_extensions.rs | 9 +- .../marginfi/tests/user_actions/borrow.rs | 12 +- .../tests/user_actions/close_account.rs | 4 +- .../tests/user_actions/close_balance.rs | 6 +- .../marginfi/tests/user_actions/deposit.rs | 150 +++++++++++++++--- .../marginfi/tests/user_actions/flash_loan.rs | 18 +-- .../marginfi/tests/user_actions/liquidate.rs | 47 +++--- programs/marginfi/tests/user_actions/mod.rs | 12 +- programs/marginfi/tests/user_actions/repay.rs | 6 + .../marginfi/tests/user_actions/withdraw.rs | 6 +- test-utils/src/marginfi_account.rs | 5 +- tests/07_deposit.spec.ts | 2 + tests/08_borrow.spec.ts | 24 +-- tests/s01_usersStake.spec.ts | 28 ++-- tests/s03_deposit.spec.ts | 6 + tests/utils/user-instructions.ts | 3 +- 34 files changed, 393 insertions(+), 178 deletions(-) diff --git a/clients/rust/marginfi-cli/src/entrypoint.rs b/clients/rust/marginfi-cli/src/entrypoint.rs index eaf4a4b1d..bacecdbb4 100644 --- a/clients/rust/marginfi-cli/src/entrypoint.rs +++ b/clients/rust/marginfi-cli/src/entrypoint.rs @@ -409,6 +409,7 @@ pub enum AccountCommand { Deposit { bank: Pubkey, ui_amount: f64, + deposit_up_to_limit: Option, }, Withdraw { bank: Pubkey, @@ -916,9 +917,17 @@ fn process_account_subcmd(subcmd: AccountCommand, global_options: &GlobalOptions AccountCommand::Get { account } => { processor::marginfi_account_get(profile, &config, account) } - AccountCommand::Deposit { bank, ui_amount } => { - processor::marginfi_account_deposit(&profile, &config, bank, ui_amount) - } + AccountCommand::Deposit { + bank, + ui_amount, + deposit_up_to_limit, + } => processor::marginfi_account_deposit( + &profile, + &config, + bank, + ui_amount, + deposit_up_to_limit, + ), AccountCommand::Withdraw { bank, ui_amount, diff --git a/clients/rust/marginfi-cli/src/processor/mod.rs b/clients/rust/marginfi-cli/src/processor/mod.rs index a4a01b062..cbf78ed74 100644 --- a/clients/rust/marginfi-cli/src/processor/mod.rs +++ b/clients/rust/marginfi-cli/src/processor/mod.rs @@ -2073,6 +2073,7 @@ pub fn marginfi_account_deposit( config: &Config, bank_pk: Pubkey, ui_amount: f64, + deposit_up_to_limit: Option, ) -> Result<()> { let rpc_client = config.mfi_program.rpc(); let signer = config.get_non_ms_authority_keypair()?; @@ -2110,7 +2111,11 @@ pub fn marginfi_account_deposit( token_program, } .to_account_metas(Some(true)), - data: marginfi::instruction::LendingAccountDeposit { amount }.data(), + data: marginfi::instruction::LendingAccountDeposit { + amount, + deposit_up_to_limit, + } + .data(), }; if token_program == spl_token_2022::ID { ix.accounts diff --git a/programs/liquidity-incentive-program/src/instructions/create_deposit.rs b/programs/liquidity-incentive-program/src/instructions/create_deposit.rs index fd1e1f3df..4e2c726ff 100644 --- a/programs/liquidity-incentive-program/src/instructions/create_deposit.rs +++ b/programs/liquidity-incentive-program/src/instructions/create_deposit.rs @@ -100,7 +100,7 @@ pub fn process<'info>( return Err(ProgramError::InvalidAccountData.into()); } - marginfi::cpi::lending_account_deposit(cpi_ctx, amount)?; + marginfi::cpi::lending_account_deposit(cpi_ctx, amount, None)?; close_account(CpiContext::new_with_signer( ctx.accounts.token_program.to_account_info(), diff --git a/programs/liquidity-incentive-program/tests/lip.rs b/programs/liquidity-incentive-program/tests/lip.rs index f9be67201..05422bc16 100644 --- a/programs/liquidity-incentive-program/tests/lip.rs +++ b/programs/liquidity-incentive-program/tests/lip.rs @@ -150,7 +150,7 @@ async fn campaign_mixed_yield() -> Result<()> { let sol_funding_account = test_f.sol_mint.create_token_account_and_mint_to(1000).await; borrower - .try_bank_deposit(sol_funding_account.key, &sol_bank, 1000) + .try_bank_deposit(sol_funding_account.key, &sol_bank, 1000, None) .await?; let usdc_borrowing_account = test_f @@ -243,7 +243,7 @@ async fn campaign_max_yield() -> Result<()> { let sol_funding_account = test_f.sol_mint.create_token_account_and_mint_to(1000).await; borrower - .try_bank_deposit(sol_funding_account.key, &sol_bank, 1000) + .try_bank_deposit(sol_funding_account.key, &sol_bank, 1000, None) .await?; let usdc_borrowing_account = test_f diff --git a/programs/marginfi/fuzz/fuzz_targets/lend.rs b/programs/marginfi/fuzz/fuzz_targets/lend.rs index a00182ac1..916e60b8c 100644 --- a/programs/marginfi/fuzz/fuzz_targets/lend.rs +++ b/programs/marginfi/fuzz/fuzz_targets/lend.rs @@ -19,6 +19,7 @@ enum Action { account: AccountIdx, bank: BankIdx, asset_amount: AssetAmount, + deposit_up_to_limit: bool, }, Borrow { account: AccountIdx, @@ -199,7 +200,8 @@ fn process_action<'bump>(action: &Action, mga: &'bump MarginfiFuzzContext<'bump> account, bank, asset_amount, - } => mga.process_action_deposit(account, bank, asset_amount)?, + deposit_up_to_limit, + } => mga.process_action_deposit(account, bank, asset_amount, Some(*deposit_up_to_limit))?, Action::Withdraw { account, bank, diff --git a/programs/marginfi/fuzz/src/lib.rs b/programs/marginfi/fuzz/src/lib.rs index c8851dca4..b4a072cac 100644 --- a/programs/marginfi/fuzz/src/lib.rs +++ b/programs/marginfi/fuzz/src/lib.rs @@ -139,6 +139,7 @@ impl<'state> MarginfiFuzzContext<'state> { * 10_u64 .pow(marginfi_state.banks[bank_idx as usize].mint_decimals.into()), ), + None, ) .unwrap(); } @@ -390,6 +391,7 @@ impl<'state> MarginfiFuzzContext<'state> { account_idx: &AccountIdx, bank_idx: &BankIdx, asset_amount: &AssetAmount, + deposit_up_to_limit: Option, ) -> anyhow::Result<()> { let marginfi_account = &self.marginfi_accounts[account_idx.0 as usize]; sort_balances(airls(&marginfi_account.margin_account)); @@ -430,6 +432,7 @@ impl<'state> MarginfiFuzzContext<'state> { Default::default(), ), asset_amount.0, + deposit_up_to_limit, ); let success = if res.is_err() { @@ -1052,7 +1055,7 @@ mod tests { assert_eq!(al.load().unwrap().admin, a.owner.key()); - a.process_action_deposit(&AccountIdx(0), &BankIdx(0), &AssetAmount(1000)) + a.process_action_deposit(&AccountIdx(0), &BankIdx(0), &AssetAmount(1000), None) .unwrap(); let marginfi_account_ai = AccountLoader::::try_from_unchecked( @@ -1073,9 +1076,9 @@ mod tests { let account_state = AccountsState::new(); let a = MarginfiFuzzContext::setup(&account_state, &[BankAndOracleConfig::dummy(); 2], 2); - a.process_action_deposit(&AccountIdx(1), &BankIdx(1), &AssetAmount(1000)) + a.process_action_deposit(&AccountIdx(1), &BankIdx(1), &AssetAmount(1000), None) .unwrap(); - a.process_action_deposit(&AccountIdx(0), &BankIdx(0), &AssetAmount(1000)) + a.process_action_deposit(&AccountIdx(0), &BankIdx(0), &AssetAmount(1000), None) .unwrap(); a.process_action_borrow(&AccountIdx(0), &BankIdx(1), &AssetAmount(100)) .unwrap(); @@ -1115,9 +1118,9 @@ mod tests { let account_state = AccountsState::new(); let a = MarginfiFuzzContext::setup(&account_state, &[BankAndOracleConfig::dummy(); 2], 3); - a.process_action_deposit(&AccountIdx(1), &BankIdx(1), &AssetAmount(1000)) + a.process_action_deposit(&AccountIdx(1), &BankIdx(1), &AssetAmount(1000), None) .unwrap(); - a.process_action_deposit(&AccountIdx(0), &BankIdx(0), &AssetAmount(1000)) + a.process_action_deposit(&AccountIdx(0), &BankIdx(0), &AssetAmount(1000), None) .unwrap(); a.process_action_borrow(&AccountIdx(0), &BankIdx(1), &AssetAmount(500)) .unwrap(); @@ -1153,7 +1156,7 @@ mod tests { println!("Health {health}"); } - a.process_action_deposit(&AccountIdx(2), &BankIdx(1), &AssetAmount(1000)) + a.process_action_deposit(&AccountIdx(2), &BankIdx(1), &AssetAmount(1000), None) .unwrap(); a.process_liquidate_account(&AccountIdx(2), &AccountIdx(0), &AssetAmount(50)) @@ -1179,9 +1182,9 @@ mod tests { let a = MarginfiFuzzContext::setup(&account_state, &[BankAndOracleConfig::dummy(); 2], 3); - a.process_action_deposit(&AccountIdx(1), &BankIdx(1), &AssetAmount(1000)) + a.process_action_deposit(&AccountIdx(1), &BankIdx(1), &AssetAmount(1000), None) .unwrap(); - a.process_action_deposit(&AccountIdx(0), &BankIdx(0), &AssetAmount(1000)) + a.process_action_deposit(&AccountIdx(0), &BankIdx(0), &AssetAmount(1000), None) .unwrap(); a.process_action_borrow(&AccountIdx(0), &BankIdx(1), &AssetAmount(500)) .unwrap(); @@ -1213,7 +1216,7 @@ mod tests { println!("Health {health}"); } - a.process_action_deposit(&AccountIdx(2), &BankIdx(1), &AssetAmount(1000)) + a.process_action_deposit(&AccountIdx(2), &BankIdx(1), &AssetAmount(1000), None) .unwrap(); a.process_liquidate_account(&AccountIdx(2), &AccountIdx(0), &AssetAmount(1000)) diff --git a/programs/marginfi/src/instructions/marginfi_account/deposit.rs b/programs/marginfi/src/instructions/marginfi_account/deposit.rs index 1b74d96dd..4a8a75901 100644 --- a/programs/marginfi/src/instructions/marginfi_account/deposit.rs +++ b/programs/marginfi/src/instructions/marginfi_account/deposit.rs @@ -1,6 +1,7 @@ use crate::{ check, events::{AccountEventHeader, LendingAccountDepositEvent}, + math_error, prelude::*, state::{ marginfi_account::{BankAccountWrapper, MarginfiAccount, DISABLED_FLAG}, @@ -23,6 +24,7 @@ use solana_program::sysvar::Sysvar; pub fn lending_account_deposit<'info>( mut ctx: Context<'_, '_, 'info, 'info, LendingAccountDeposit<'info>>, amount: u64, + deposit_up_to_limit: Option, ) -> MarginfiResult { let LendingAccountDeposit { marginfi_account: marginfi_account_loader, @@ -40,6 +42,7 @@ pub fn lending_account_deposit<'info>( &*bank_loader.load()?, token_program.key, )?; + let deposit_up_to_limit = deposit_up_to_limit.unwrap_or(false); let mut bank = bank_loader.load_mut()?; let mut marginfi_account = marginfi_account_loader.load_mut()?; @@ -51,6 +54,33 @@ pub fn lending_account_deposit<'info>( MarginfiError::AccountDisabled ); + let deposit_amount = if deposit_up_to_limit && bank.config.is_deposit_limit_active() { + let current_asset_amount = bank.get_asset_amount(bank.total_asset_shares.into())?; + let deposit_limit = I80F48::from_num(bank.config.deposit_limit); + + if current_asset_amount >= deposit_limit { + 0 + } else { + let remaining_capacity = deposit_limit + .checked_sub(current_asset_amount) + .ok_or_else(math_error!())? + .checked_sub(I80F48::ONE) // Subtract 1 to ensure we stay under limit: total_deposits_amount < deposit_limit + .ok_or_else(math_error!())? + .checked_floor() + .ok_or_else(math_error!())? + .checked_to_num::() + .ok_or_else(math_error!())?; + + std::cmp::min(amount, remaining_capacity) + } + } else { + amount + }; + + if deposit_amount == 0 { + return Ok(()); + } + bank.accrue_interest( clock.unix_timestamp, &*marginfi_group_loader.load()?, @@ -64,15 +94,19 @@ pub fn lending_account_deposit<'info>( &mut marginfi_account.lending_account, )?; - bank_account.deposit(I80F48::from_num(amount))?; + bank_account.deposit(I80F48::from_num(deposit_amount))?; let amount_pre_fee = maybe_bank_mint .as_ref() .map(|mint| { - utils::calculate_pre_fee_spl_deposit_amount(mint.to_account_info(), amount, clock.epoch) + utils::calculate_pre_fee_spl_deposit_amount( + mint.to_account_info(), + deposit_amount, + clock.epoch, + ) }) .transpose()? - .unwrap_or(amount); + .unwrap_or(deposit_amount); bank_account.deposit_spl_transfer( amount_pre_fee, @@ -93,7 +127,7 @@ pub fn lending_account_deposit<'info>( }, bank: bank_loader.key(), mint: bank.mint, - amount, + amount: deposit_amount, }); Ok(()) diff --git a/programs/marginfi/src/lib.rs b/programs/marginfi/src/lib.rs index 21f430c2b..b787419ad 100644 --- a/programs/marginfi/src/lib.rs +++ b/programs/marginfi/src/lib.rs @@ -120,8 +120,9 @@ pub mod marginfi { pub fn lending_account_deposit<'info>( ctx: Context<'_, '_, 'info, 'info, LendingAccountDeposit<'info>>, amount: u64, + deposit_up_to_limit: Option, ) -> MarginfiResult { - marginfi_account::lending_account_deposit(ctx, amount) + marginfi_account::lending_account_deposit(ctx, amount, deposit_up_to_limit) } pub fn lending_account_repay<'info>( diff --git a/programs/marginfi/tests/admin_actions/bankruptcy.rs b/programs/marginfi/tests/admin_actions/bankruptcy.rs index a0de966e4..66261082c 100644 --- a/programs/marginfi/tests/admin_actions/bankruptcy.rs +++ b/programs/marginfi/tests/admin_actions/bankruptcy.rs @@ -45,6 +45,7 @@ async fn marginfi_group_handle_bankruptcy_failure_not_bankrupt( lp_token_account_f_sol.key, test_f.get_bank(&debt_mint), lp_deposit_amount, + None, ) .await?; @@ -70,6 +71,7 @@ async fn marginfi_group_handle_bankruptcy_failure_not_bankrupt( user_collateral_token_account_f.key, test_f.get_bank(&collateral_mint), sufficient_collateral_amount, + None, ) .await?; user_mfi_account_f @@ -130,6 +132,7 @@ async fn marginfi_group_handle_bankruptcy_failure_no_debt( lp_token_account_f_sol.key, test_f.get_bank(&debt_mint), lp_deposit_amount, + None, ) .await?; @@ -155,6 +158,7 @@ async fn marginfi_group_handle_bankruptcy_failure_no_debt( user_collateral_token_account_f.key, test_f.get_bank(&collateral_mint), sufficient_collateral_amount, + None, ) .await?; user_mfi_account_f @@ -222,6 +226,7 @@ async fn marginfi_group_handle_bankruptcy_success( lp_token_account_f_sol.key, test_f.get_bank(&debt_mint), lp_deposit_amount, + None, ) .await?; @@ -247,6 +252,7 @@ async fn marginfi_group_handle_bankruptcy_success( user_collateral_token_account_f.key, test_f.get_bank(&collateral_mint), sufficient_collateral_amount, + None, ) .await?; user_mfi_account_f @@ -313,6 +319,7 @@ async fn marginfi_group_handle_bankruptcy_success_fully_insured( lp_token_account_f_sol.key, test_f.get_bank(&debt_mint), lp_deposit_amount, + None, ) .await?; @@ -338,6 +345,7 @@ async fn marginfi_group_handle_bankruptcy_success_fully_insured( user_collateral_token_account_f.key, test_f.get_bank(&collateral_mint), sufficient_collateral_amount, + None, ) .await?; user_mfi_account_f @@ -495,6 +503,7 @@ async fn marginfi_group_handle_bankruptcy_success_fully_insured( user_collateral_token_account_f.key, test_f.get_bank(&collateral_mint), 1, + None, ) .await; @@ -576,6 +585,7 @@ async fn marginfi_group_handle_bankruptcy_success_partially_insured( lp_token_account_f_sol.key, test_f.get_bank(&debt_mint), lp_deposit_amount, + None, ) .await?; @@ -601,6 +611,7 @@ async fn marginfi_group_handle_bankruptcy_success_partially_insured( user_collateral_token_account_f.key, test_f.get_bank(&collateral_mint), sufficient_collateral_amount, + None, ) .await?; user_mfi_account_f @@ -751,6 +762,7 @@ async fn marginfi_group_handle_bankruptcy_success_not_insured( lp_token_account_f_sol.key, test_f.get_bank(&debt_mint), lp_deposit_amount, + None, ) .await?; @@ -776,6 +788,7 @@ async fn marginfi_group_handle_bankruptcy_success_not_insured( user_collateral_token_account_f.key, test_f.get_bank(&collateral_mint), sufficient_collateral_amount, + None, ) .await?; user_mfi_account_f @@ -880,7 +893,7 @@ async fn marginfi_group_handle_bankruptcy_success_not_insured_3_depositors() -> .create_token_account_and_mint_to(100_000) .await; lender_1_mfi_account_f - .try_bank_deposit(lender_1_token_account.key, usdc_bank_f, 100_000) + .try_bank_deposit(lender_1_token_account.key, usdc_bank_f, 100_000, None) .await?; let lender_2_mfi_account_f = test_f.create_marginfi_account().await; @@ -889,7 +902,7 @@ async fn marginfi_group_handle_bankruptcy_success_not_insured_3_depositors() -> .create_token_account_and_mint_to(100_000) .await; lender_2_mfi_account_f - .try_bank_deposit(lender_2_token_account.key, usdc_bank_f, 100_000) + .try_bank_deposit(lender_2_token_account.key, usdc_bank_f, 100_000, None) .await?; let lender_3_mfi_account_f = test_f.create_marginfi_account().await; @@ -898,7 +911,7 @@ async fn marginfi_group_handle_bankruptcy_success_not_insured_3_depositors() -> .create_token_account_and_mint_to(100_000) .await; lender_3_mfi_account_f - .try_bank_deposit(lender_3_token_account.key, usdc_bank_f, 100_000) + .try_bank_deposit(lender_3_token_account.key, usdc_bank_f, 100_000, None) .await?; let borrower_mfi_account_f = test_f.create_marginfi_account().await; @@ -907,7 +920,7 @@ async fn marginfi_group_handle_bankruptcy_success_not_insured_3_depositors() -> .create_token_account_and_mint_to(1_001) .await; borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_sol.key, sol_bank_f, 1_001) + .try_bank_deposit(borrower_token_account_sol.key, sol_bank_f, 1_001, None) .await?; let borrower_token_account_usdc = test_f.usdc_mint.create_empty_token_account().await; borrower_mfi_account_f diff --git a/programs/marginfi/tests/admin_actions/bankruptcy_auth.rs b/programs/marginfi/tests/admin_actions/bankruptcy_auth.rs index e61999ef2..2701e28d1 100644 --- a/programs/marginfi/tests/admin_actions/bankruptcy_auth.rs +++ b/programs/marginfi/tests/admin_actions/bankruptcy_auth.rs @@ -44,6 +44,7 @@ async fn marginfi_group_handle_bankruptcy_unauthorized() -> anyhow::Result<()> { lender_token_account_usdc.key, test_f.get_bank(&BankMint::Usdc), 100_000, + None, ) .await?; @@ -58,6 +59,7 @@ async fn marginfi_group_handle_bankruptcy_unauthorized() -> anyhow::Result<()> { borrower_deposit_account.key, test_f.get_bank(&BankMint::Sol), 1_001, + None, ) .await?; @@ -139,6 +141,7 @@ async fn marginfi_group_handle_bankruptcy_perimssionless() -> anyhow::Result<()> lender_token_account_usdc.key, test_f.get_bank(&BankMint::Usdc), 100_000, + None, ) .await?; @@ -153,6 +156,7 @@ async fn marginfi_group_handle_bankruptcy_perimssionless() -> anyhow::Result<()> borrower_deposit_account.key, test_f.get_bank(&BankMint::Sol), 1_001, + None, ) .await?; diff --git a/programs/marginfi/tests/admin_actions/interest_accrual.rs b/programs/marginfi/tests/admin_actions/interest_accrual.rs index fe3cc9324..4bcd9b243 100644 --- a/programs/marginfi/tests/admin_actions/interest_accrual.rs +++ b/programs/marginfi/tests/admin_actions/interest_accrual.rs @@ -44,7 +44,7 @@ async fn marginfi_group_accrue_interest_rates_success_1() -> anyhow::Result<()> let lender_mfi_account_f = test_f.create_marginfi_account().await; let lender_token_account_usdc = test_f.usdc_mint.create_token_account_and_mint_to(100).await; lender_mfi_account_f - .try_bank_deposit(lender_token_account_usdc.key, usdc_bank_f, 100) + .try_bank_deposit(lender_token_account_usdc.key, usdc_bank_f, 100, None) .await?; let borrower_mfi_account_f = test_f.create_marginfi_account().await; @@ -53,7 +53,7 @@ async fn marginfi_group_accrue_interest_rates_success_1() -> anyhow::Result<()> .create_token_account_and_mint_to(1_000) .await; borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_sol.key, sol_bank_f, 999) + .try_bank_deposit(borrower_token_account_sol.key, sol_bank_f, 999, None) .await?; let borrower_token_account_usdc = test_f.usdc_mint.create_empty_token_account().await; borrower_mfi_account_f @@ -134,7 +134,12 @@ async fn marginfi_group_accrue_interest_rates_success_2() -> anyhow::Result<()> .create_token_account_and_mint_to(100_000_000) .await; lender_mfi_account_f - .try_bank_deposit(lender_token_account_usdc.key, usdc_bank_f, 100_000_000) + .try_bank_deposit( + lender_token_account_usdc.key, + usdc_bank_f, + 100_000_000, + None, + ) .await?; let borrower_mfi_account_f = test_f.create_marginfi_account().await; @@ -143,7 +148,7 @@ async fn marginfi_group_accrue_interest_rates_success_2() -> anyhow::Result<()> .create_token_account_and_mint_to(10_000_000) .await; borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_sol.key, sol_bank_f, 10_000_000) + .try_bank_deposit(borrower_token_account_sol.key, sol_bank_f, 10_000_000, None) .await?; let borrower_token_account_usdc = test_f.usdc_mint.create_empty_token_account().await; borrower_mfi_account_f diff --git a/programs/marginfi/tests/misc/bank_ignore_stale_isolated_banks.rs b/programs/marginfi/tests/misc/bank_ignore_stale_isolated_banks.rs index 878b45a08..5a6c74323 100644 --- a/programs/marginfi/tests/misc/bank_ignore_stale_isolated_banks.rs +++ b/programs/marginfi/tests/misc/bank_ignore_stale_isolated_banks.rs @@ -35,7 +35,7 @@ async fn stale_bank_should_error() -> anyhow::Result<()> { .create_token_account_and_mint_to(1_000) .await; lender_mfi_account_f - .try_bank_deposit(lender_token_account_sol.key, sol_bank, 1_000) + .try_bank_deposit(lender_token_account_sol.key, sol_bank, 1_000, None) .await?; // Fund SOL borrower @@ -51,11 +51,11 @@ async fn stale_bank_should_error() -> anyhow::Result<()> { let borrower_token_account_f_sol = test_f.sol_mint.create_empty_token_account().await; borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_f_usdc.key, usdc_bank, 500) + .try_bank_deposit(borrower_token_account_f_usdc.key, usdc_bank, 500, None) .await?; borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_f_sol_eq.key, sol_eq_bank, 100) + .try_bank_deposit(borrower_token_account_f_sol_eq.key, sol_eq_bank, 100, None) .await?; // Borrow SOL @@ -94,7 +94,7 @@ async fn non_stale_bank_should_error() -> anyhow::Result<()> { .create_token_account_and_mint_to(1_000) .await; lender_mfi_account_f - .try_bank_deposit(lender_token_account_sol.key, sol_bank, 1_000) + .try_bank_deposit(lender_token_account_sol.key, sol_bank, 1_000, None) .await?; // Fund SOL borrower @@ -110,11 +110,11 @@ async fn non_stale_bank_should_error() -> anyhow::Result<()> { let borrower_token_account_f_sol = test_f.sol_mint.create_empty_token_account().await; borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_f_usdc.key, usdc_bank, 15) + .try_bank_deposit(borrower_token_account_f_usdc.key, usdc_bank, 15, None) .await?; borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_f_sol_eq.key, sol_eq_bank, 100) + .try_bank_deposit(borrower_token_account_f_sol_eq.key, sol_eq_bank, 100, None) .await?; // Borrow SOL @@ -148,7 +148,7 @@ async fn isolated_stale_should_not_error() -> anyhow::Result<()> { .create_token_account_and_mint_to(1_000) .await; lender_mfi_account_f - .try_bank_deposit(lender_token_account_sol.key, sol_bank, 1_000) + .try_bank_deposit(lender_token_account_sol.key, sol_bank, 1_000, None) .await?; // Fund SOL borrower @@ -164,11 +164,16 @@ async fn isolated_stale_should_not_error() -> anyhow::Result<()> { let borrower_token_account_f_sol = test_f.sol_mint.create_empty_token_account().await; borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_f_usdc.key, usdc_bank, 1_000) + .try_bank_deposit(borrower_token_account_f_usdc.key, usdc_bank, 1_000, None) .await?; borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_f_sol_eq.key, sol_eq_iso_bank, 1_000) + .try_bank_deposit( + borrower_token_account_f_sol_eq.key, + sol_eq_iso_bank, + 1_000, + None, + ) .await?; // Borrow SOL diff --git a/programs/marginfi/tests/misc/bank_variable_oracle_staleness.rs b/programs/marginfi/tests/misc/bank_variable_oracle_staleness.rs index deb70924d..10d66c105 100644 --- a/programs/marginfi/tests/misc/bank_variable_oracle_staleness.rs +++ b/programs/marginfi/tests/misc/bank_variable_oracle_staleness.rs @@ -33,7 +33,7 @@ async fn bank_oracle_staleness_test() -> anyhow::Result<()> { .create_token_account_and_mint_to(1_000) .await; lender_mfi_account_f - .try_bank_deposit(lender_token_account_sol.key, sol_bank, 1_000) + .try_bank_deposit(lender_token_account_sol.key, sol_bank, 1_000, None) .await?; // Fund SOL borrower @@ -49,11 +49,11 @@ async fn bank_oracle_staleness_test() -> anyhow::Result<()> { let borrower_token_account_f_sol = test_f.sol_mint.create_empty_token_account().await; borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_f_usdc.key, usdc_bank, 500) + .try_bank_deposit(borrower_token_account_f_usdc.key, usdc_bank, 500, None) .await?; borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_f_sol_eq.key, sol_eq_bank, 50) + .try_bank_deposit(borrower_token_account_f_sol_eq.key, sol_eq_bank, 50, None) .await?; // Borrow SOL diff --git a/programs/marginfi/tests/misc/collateral_value_cap.rs b/programs/marginfi/tests/misc/collateral_value_cap.rs index 09bfc4ab4..3305792f2 100644 --- a/programs/marginfi/tests/misc/collateral_value_cap.rs +++ b/programs/marginfi/tests/misc/collateral_value_cap.rs @@ -29,7 +29,7 @@ async fn marginfi_group_init_limit_0() -> anyhow::Result<()> { let sol_token_account = test_f.sol_mint.create_token_account_and_mint_to(100).await; sol_depositor - .try_bank_deposit(sol_token_account.key, sol_bank, 100) + .try_bank_deposit(sol_token_account.key, sol_bank, 100, None) .await?; let usdc_token_account = test_f @@ -38,11 +38,11 @@ async fn marginfi_group_init_limit_0() -> anyhow::Result<()> { .await; sol_depositor - .try_bank_deposit(usdc_token_account.key, usdc_bank, 1900) + .try_bank_deposit(usdc_token_account.key, usdc_bank, 1900, None) .await?; usdc_depositor - .try_bank_deposit(usdc_token_account.key, usdc_bank, 100) + .try_bank_deposit(usdc_token_account.key, usdc_bank, 100, None) .await?; // Borrowing 10 SOL should fail bc of init limit @@ -76,11 +76,11 @@ async fn marginfi_group_init_limit_0() -> anyhow::Result<()> { assert!(res.is_ok()); sol_depositor - .try_bank_deposit(usdc_token_account.key, usdc_bank, 1901) + .try_bank_deposit(usdc_token_account.key, usdc_bank, 1901, None) .await?; usdc_depositor - .try_bank_deposit(usdc_token_account.key, usdc_bank, 100) + .try_bank_deposit(usdc_token_account.key, usdc_bank, 100, None) .await?; // Borrowing 10 SOL should succeed now diff --git a/programs/marginfi/tests/misc/operational_state.rs b/programs/marginfi/tests/misc/operational_state.rs index 60612cc5a..34925e62d 100644 --- a/programs/marginfi/tests/misc/operational_state.rs +++ b/programs/marginfi/tests/misc/operational_state.rs @@ -38,7 +38,7 @@ async fn marginfi_group_bank_paused_should_error() -> anyhow::Result<()> { .create_token_account_and_mint_to(100_000) .await; let res = lender_mfi_account_f - .try_bank_deposit(lender_token_account_usdc.key, usdc_bank_f, 100_000) + .try_bank_deposit(lender_token_account_usdc.key, usdc_bank_f, 100_000, None) .await; assert!(res.is_err()); @@ -67,7 +67,7 @@ async fn marginfi_group_bank_reduce_only_withdraw_success() -> anyhow::Result<() .create_token_account_and_mint_to(100_000) .await; lender_mfi_account_f - .try_bank_deposit(lender_token_account_usdc.key, usdc_bank_f, 100_000) + .try_bank_deposit(lender_token_account_usdc.key, usdc_bank_f, 100_000, None) .await?; usdc_bank_f @@ -116,7 +116,7 @@ async fn marginfi_group_bank_reduce_only_deposit_success() -> anyhow::Result<()> let lender_1_mfi_account = test_f.create_marginfi_account().await; let lender_1_token_account_sol = test_f.sol_mint.create_token_account_and_mint_to(100).await; lender_1_mfi_account - .try_bank_deposit(lender_1_token_account_sol.key, sol_bank_f, 100) + .try_bank_deposit(lender_1_token_account_sol.key, sol_bank_f, 100, None) .await?; let lender_2_mfi_account = test_f.create_marginfi_account().await; @@ -125,7 +125,7 @@ async fn marginfi_group_bank_reduce_only_deposit_success() -> anyhow::Result<()> .create_token_account_and_mint_to(100_000) .await; lender_2_mfi_account - .try_bank_deposit(lender_2_token_account_usdc.key, usdc_bank_f, 100_000) + .try_bank_deposit(lender_2_token_account_usdc.key, usdc_bank_f, 100_000, None) .await?; let lender_2_token_account_sol = test_f.sol_mint.create_empty_token_account().await; @@ -179,7 +179,7 @@ async fn marginfi_group_bank_reduce_only_borrow_failure() -> anyhow::Result<()> let lender_mfi_account = test_f.create_marginfi_account().await; let lender_token_account_sol = test_f.sol_mint.create_token_account_and_mint_to(100).await; lender_mfi_account - .try_bank_deposit(lender_token_account_sol.key, sol_bank_f, 100) + .try_bank_deposit(lender_token_account_sol.key, sol_bank_f, 100, None) .await?; let borrower_mfi_account = test_f.create_marginfi_account().await; @@ -188,7 +188,7 @@ async fn marginfi_group_bank_reduce_only_borrow_failure() -> anyhow::Result<()> .create_token_account_and_mint_to(100_000) .await; borrower_mfi_account - .try_bank_deposit(borrower_token_account_usdc.key, usdc_bank_f, 100_000) + .try_bank_deposit(borrower_token_account_usdc.key, usdc_bank_f, 100_000, None) .await?; sol_bank_f @@ -243,7 +243,7 @@ async fn marginfi_group_bank_reduce_only_deposit_failure() -> anyhow::Result<()> .await; let res = lender_mfi_account_f - .try_bank_deposit(lender_token_account_usdc.key, usdc_bank_f, 100_000) + .try_bank_deposit(lender_token_account_usdc.key, usdc_bank_f, 100_000, None) .await; assert!(res.is_err()); diff --git a/programs/marginfi/tests/misc/pyth_push.rs b/programs/marginfi/tests/misc/pyth_push.rs index fcfe763ce..55f691a67 100644 --- a/programs/marginfi/tests/misc/pyth_push.rs +++ b/programs/marginfi/tests/misc/pyth_push.rs @@ -42,7 +42,7 @@ async fn pyth_push_fullv_borrow() -> anyhow::Result<()> { .create_token_account_and_mint_to(1_000) .await; lender_mfi_account_f - .try_bank_deposit(lender_token_account_sol.key, sol_bank, 1_000) + .try_bank_deposit(lender_token_account_sol.key, sol_bank, 1_000, None) .await?; // Fund SOL borrower @@ -53,7 +53,7 @@ async fn pyth_push_fullv_borrow() -> anyhow::Result<()> { .await; let borrower_token_account_f_sol = test_f.sol_mint.create_token_account_and_mint_to(0).await; borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_f_usdc.key, usdc_bank, 1_000) + .try_bank_deposit(borrower_token_account_f_usdc.key, usdc_bank, 1_000, None) .await?; let res = borrower_mfi_account_f @@ -111,7 +111,7 @@ async fn pyth_push_partv_borrow() -> anyhow::Result<()> { .create_token_account_and_mint_to(1_000) .await; lender_mfi_account_f - .try_bank_deposit(lender_token_account_sol.key, sol_bank, 1_000) + .try_bank_deposit(lender_token_account_sol.key, sol_bank, 1_000, None) .await?; // Fund SOL borrower @@ -122,7 +122,7 @@ async fn pyth_push_partv_borrow() -> anyhow::Result<()> { .await; let borrower_token_account_f_sol = test_f.sol_mint.create_token_account_and_mint_to(0).await; borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_f_usdc.key, usdc_bank, 1_000) + .try_bank_deposit(borrower_token_account_f_usdc.key, usdc_bank, 1_000, None) .await?; let res = borrower_mfi_account_f @@ -174,7 +174,7 @@ async fn pyth_push_fullv_liquidate() -> anyhow::Result<()> { .create_token_account_and_mint_to(2_000) .await; lender_mfi_account_f - .try_bank_deposit(lender_token_account_usdc.key, usdc_bank_f, 2_000) + .try_bank_deposit(lender_token_account_usdc.key, usdc_bank_f, 2_000, None) .await?; let borrower_mfi_account_f = test_f.create_marginfi_account().await; @@ -183,7 +183,7 @@ async fn pyth_push_fullv_liquidate() -> anyhow::Result<()> { // Borrower deposits 100 SOL worth of $1000 borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_sol.key, sol_bank_f, 100) + .try_bank_deposit(borrower_token_account_sol.key, sol_bank_f, 100, None) .await?; // Borrower borrows $999 diff --git a/programs/marginfi/tests/misc/real_oracle_data.rs b/programs/marginfi/tests/misc/real_oracle_data.rs index d29a5c64b..4cb7be50a 100644 --- a/programs/marginfi/tests/misc/real_oracle_data.rs +++ b/programs/marginfi/tests/misc/real_oracle_data.rs @@ -39,7 +39,7 @@ async fn real_oracle_marginfi_account_borrow_success() -> anyhow::Result<()> { .create_token_account_and_mint_to(1_000) .await; lender_mfi_account_f - .try_bank_deposit(lender_token_account_sol.key, sol_bank, 1_000) + .try_bank_deposit(lender_token_account_sol.key, sol_bank, 1_000, None) .await?; // Fund SOL borrower @@ -50,7 +50,7 @@ async fn real_oracle_marginfi_account_borrow_success() -> anyhow::Result<()> { .await; let borrower_token_account_f_sol = test_f.sol_mint.create_token_account_and_mint_to(0).await; borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_f_usdc.key, usdc_bank, 1_000) + .try_bank_deposit(borrower_token_account_f_usdc.key, usdc_bank, 1_000, None) .await?; // Borrow SOL @@ -114,7 +114,7 @@ async fn real_oracle_pyth_push_marginfi_account_borrow_success() -> anyhow::Resu .create_token_account_and_mint_to(1_000) .await; lender_mfi_account_f - .try_bank_deposit(lender_token_account_sol.key, sol_bank, 1_000) + .try_bank_deposit(lender_token_account_sol.key, sol_bank, 1_000, None) .await?; // Fund SOL borrower @@ -125,7 +125,7 @@ async fn real_oracle_pyth_push_marginfi_account_borrow_success() -> anyhow::Resu .await; let borrower_token_account_f_sol = test_f.sol_mint.create_token_account_and_mint_to(0).await; borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_f_usdc.key, usdc_bank, 1_000) + .try_bank_deposit(borrower_token_account_f_usdc.key, usdc_bank, 1_000, None) .await?; // Borrow SOL diff --git a/programs/marginfi/tests/misc/risk_engine_flexible_oracle_checks.rs b/programs/marginfi/tests/misc/risk_engine_flexible_oracle_checks.rs index 8b466e42d..9ba344df5 100644 --- a/programs/marginfi/tests/misc/risk_engine_flexible_oracle_checks.rs +++ b/programs/marginfi/tests/misc/risk_engine_flexible_oracle_checks.rs @@ -34,7 +34,7 @@ async fn re_one_oracle_stale_failure() -> anyhow::Result<()> { .create_token_account_and_mint_to(1_000) .await; lender_mfi_account_f - .try_bank_deposit(lender_token_account_sol.key, sol_bank, 1_000) + .try_bank_deposit(lender_token_account_sol.key, sol_bank, 1_000, None) .await?; // Fund SOL borrower @@ -50,11 +50,11 @@ async fn re_one_oracle_stale_failure() -> anyhow::Result<()> { let borrower_token_account_f_sol = test_f.sol_mint.create_empty_token_account().await; borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_f_usdc.key, usdc_bank, 500) + .try_bank_deposit(borrower_token_account_f_usdc.key, usdc_bank, 500, None) .await?; borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_f_sol_eq.key, sol_eq_bank, 500) + .try_bank_deposit(borrower_token_account_f_sol_eq.key, sol_eq_bank, 500, None) .await?; // Borrow SOL @@ -126,7 +126,7 @@ async fn re_one_oracle_stale_success() -> anyhow::Result<()> { .create_token_account_and_mint_to(1_000) .await; lender_mfi_account_f - .try_bank_deposit(lender_token_account_sol.key, sol_bank, 1_000) + .try_bank_deposit(lender_token_account_sol.key, sol_bank, 1_000, None) .await?; // Fund SOL borrower @@ -142,11 +142,11 @@ async fn re_one_oracle_stale_success() -> anyhow::Result<()> { let borrower_token_account_f_sol = test_f.sol_mint.create_empty_token_account().await; borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_f_usdc.key, usdc_bank, 500) + .try_bank_deposit(borrower_token_account_f_usdc.key, usdc_bank, 500, None) .await?; borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_f_sol_eq.key, sol_eq_bank, 500) + .try_bank_deposit(borrower_token_account_f_sol_eq.key, sol_eq_bank, 500, None) .await?; // Borrow SOL @@ -184,7 +184,7 @@ async fn re_one_oracle_stale_failure_2() -> anyhow::Result<()> { .create_token_account_and_mint_to(1_000) .await; lender_mfi_account_f - .try_bank_deposit(lender_token_account_sol.key, sol_bank, 1_000) + .try_bank_deposit(lender_token_account_sol.key, sol_bank, 1_000, None) .await?; // Fund SOL borrower @@ -194,7 +194,7 @@ async fn re_one_oracle_stale_failure_2() -> anyhow::Result<()> { let borrower_token_account_f_sol = test_f.sol_mint.create_empty_token_account().await; borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_f_usdc.key, usdc_bank, 500) + .try_bank_deposit(borrower_token_account_f_usdc.key, usdc_bank, 500, None) .await?; // Make SOL oracle stale @@ -265,14 +265,14 @@ async fn re_liquidaiton_fail() -> anyhow::Result<()> { .create_token_account_and_mint_to(2_000) .await; lender_mfi_account_f - .try_bank_deposit(lender_token_account_usdc.key, usdc_bank_f, 2_000) + .try_bank_deposit(lender_token_account_usdc.key, usdc_bank_f, 2_000, None) .await?; let lender_token_account_sole = test_f .sol_equivalent_mint .create_token_account_and_mint_to(100) .await; lender_mfi_account_f - .try_bank_deposit(lender_token_account_sole.key, sole_bank_f, 100) + .try_bank_deposit(lender_token_account_sole.key, sole_bank_f, 100, None) .await?; let borrower_mfi_account_f = test_f.create_marginfi_account().await; @@ -281,7 +281,7 @@ async fn re_liquidaiton_fail() -> anyhow::Result<()> { // Borrower deposits 100 SOL worth $1000 borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_sol.key, sol_bank_f, 100) + .try_bank_deposit(borrower_token_account_sol.key, sol_bank_f, 100, None) .await?; // Borrower borrows $999 @@ -366,6 +366,7 @@ async fn re_bankruptcy_fail() -> anyhow::Result<()> { lender_token_account_usdc.key, test_f.get_bank(&BankMint::Usdc), 100_000, + None, ) .await?; @@ -380,6 +381,7 @@ async fn re_bankruptcy_fail() -> anyhow::Result<()> { borrower_deposit_account.key, test_f.get_bank(&BankMint::Sol), 1_001, + None, ) .await?; diff --git a/programs/marginfi/tests/misc/token_extensions.rs b/programs/marginfi/tests/misc/token_extensions.rs index 3f0036350..215f3383f 100644 --- a/programs/marginfi/tests/misc/token_extensions.rs +++ b/programs/marginfi/tests/misc/token_extensions.rs @@ -70,7 +70,12 @@ async fn marginfi_account_liquidation_success_with_extension( .create_token_account_and_mint_to(2_500) .await; lender_mfi_account_f - .try_bank_deposit(lender_token_account_usdc_t22.key, usdc_t22_bank_f, 2_000) + .try_bank_deposit( + lender_token_account_usdc_t22.key, + usdc_t22_bank_f, + 2_000, + None, + ) .await .unwrap(); @@ -80,7 +85,7 @@ async fn marginfi_account_liquidation_success_with_extension( // Borrower deposits 100 SOL worth of $1000 borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_sol.key, sol_bank_f, 100) + .try_bank_deposit(borrower_token_account_sol.key, sol_bank_f, 100, None) .await?; // Borrower borrows $999 diff --git a/programs/marginfi/tests/user_actions/borrow.rs b/programs/marginfi/tests/user_actions/borrow.rs index 67660b251..eb6328382 100644 --- a/programs/marginfi/tests/user_actions/borrow.rs +++ b/programs/marginfi/tests/user_actions/borrow.rs @@ -48,6 +48,7 @@ async fn marginfi_account_borrow_success( lp_collateral_token_account.key, test_f.get_bank(&debt_mint), lp_deposit_amount, + None, ) .await?; @@ -71,6 +72,7 @@ async fn marginfi_account_borrow_success( user_collateral_token_account_f.key, collateral_bank, deposit_amount, + None, ) .await?; @@ -213,6 +215,7 @@ async fn marginfi_account_borrow_failure_not_enough_collateral( lp_token_account_f_sol.key, test_f.get_bank(&debt_mint), lp_deposit_amount, + None, ) .await?; @@ -236,6 +239,7 @@ async fn marginfi_account_borrow_failure_not_enough_collateral( borrower_collateral_token_account_f.key, collateral_bank, deposit_amount, + None, ) .await?; @@ -303,6 +307,7 @@ async fn marginfi_account_borrow_failure_borrow_limit( lp_collateral_token_account.key, test_f.get_bank(&debt_mint), lp_deposit_amount, + None, ) .await .unwrap(); @@ -329,6 +334,7 @@ async fn marginfi_account_borrow_failure_borrow_limit( user_collateral_token_account_f.key, test_f.get_bank(&collateral_mint), sufficient_collateral_amount, + None, ) .await?; @@ -386,7 +392,7 @@ async fn isolated_borrows() -> anyhow::Result<()> { .create_token_account_and_mint_to(1_000) .await; lender_mfi_account_f - .try_bank_deposit(lender_token_account_sol.key, sol_eq_iso_bank, 1_000) + .try_bank_deposit(lender_token_account_sol.key, sol_eq_iso_bank, 1_000, None) .await?; let lender_token_account_sol = test_f @@ -394,7 +400,7 @@ async fn isolated_borrows() -> anyhow::Result<()> { .create_token_account_and_mint_to(1_000) .await; lender_mfi_account_f - .try_bank_deposit(lender_token_account_sol.key, sol_bank, 1_000) + .try_bank_deposit(lender_token_account_sol.key, sol_bank, 1_000, None) .await?; // Fund SOL borrower @@ -408,7 +414,7 @@ async fn isolated_borrows() -> anyhow::Result<()> { .create_empty_token_account() .await; borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_f_usdc.key, usdc_bank, 1_000) + .try_bank_deposit(borrower_token_account_f_usdc.key, usdc_bank, 1_000, None) .await?; // Borrow SOL EQ diff --git a/programs/marginfi/tests/user_actions/close_account.rs b/programs/marginfi/tests/user_actions/close_account.rs index 13795680a..9810fb816 100644 --- a/programs/marginfi/tests/user_actions/close_account.rs +++ b/programs/marginfi/tests/user_actions/close_account.rs @@ -21,7 +21,7 @@ async fn close_marginfi_account() -> anyhow::Result<()> { let usdc_bank_f = test_f.get_bank(&BankMint::Usdc); marginfi_account_f - .try_bank_deposit(token_account_f.key, usdc_bank_f, 1_000) + .try_bank_deposit(token_account_f.key, usdc_bank_f, 1_000, None) .await?; let res = marginfi_account_f.try_close_account(0).await; @@ -33,7 +33,7 @@ async fn close_marginfi_account() -> anyhow::Result<()> { let sol_account = test_f.sol_mint.create_token_account_and_mint_to(100).await; let depositor = test_f.create_marginfi_account().await; depositor - .try_bank_deposit(sol_account.key, sol_bank_f, 100) + .try_bank_deposit(sol_account.key, sol_bank_f, 100, None) .await?; let sol_account_2 = test_f.sol_mint.create_token_account_and_mint_to(0).await; diff --git a/programs/marginfi/tests/user_actions/close_balance.rs b/programs/marginfi/tests/user_actions/close_balance.rs index 23d0a05a7..9415d0d1c 100644 --- a/programs/marginfi/tests/user_actions/close_balance.rs +++ b/programs/marginfi/tests/user_actions/close_balance.rs @@ -21,7 +21,7 @@ async fn lending_account_close_balance() -> anyhow::Result<()> { .create_token_account_and_mint_to(1_000) .await; lender_mfi_account_f - .try_bank_deposit(lender_token_account_sol.key, sol_eq_bank, 1_000) + .try_bank_deposit(lender_token_account_sol.key, sol_eq_bank, 1_000, None) .await?; let lender_token_account_sol = test_f @@ -29,7 +29,7 @@ async fn lending_account_close_balance() -> anyhow::Result<()> { .create_token_account_and_mint_to(1_000) .await; lender_mfi_account_f - .try_bank_deposit(lender_token_account_sol.key, sol_bank, 1_000) + .try_bank_deposit(lender_token_account_sol.key, sol_bank, 1_000, None) .await?; let res = lender_mfi_account_f.try_balance_close(sol_bank).await; @@ -52,7 +52,7 @@ async fn lending_account_close_balance() -> anyhow::Result<()> { .create_token_account_and_mint_to(1_000) .await; borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_f_usdc.key, usdc_bank, 1_000) + .try_bank_deposit(borrower_token_account_f_usdc.key, usdc_bank, 1_000, None) .await?; // Borrow SOL EQ diff --git a/programs/marginfi/tests/user_actions/deposit.rs b/programs/marginfi/tests/user_actions/deposit.rs index a267e9b56..922cb15dd 100644 --- a/programs/marginfi/tests/user_actions/deposit.rs +++ b/programs/marginfi/tests/user_actions/deposit.rs @@ -59,7 +59,7 @@ async fn marginfi_account_deposit_success( .await; let res = user_mfi_account_f - .try_bank_deposit(token_account_f.key, &bank_f, deposit_amount) + .try_bank_deposit(token_account_f.key, &bank_f, deposit_amount, None) .await; assert!(res.is_ok()); @@ -69,32 +69,34 @@ async fn marginfi_account_deposit_success( .balance() .await; - let marginfi_account = user_mfi_account_f.load().await; - let active_balance_count = marginfi_account - .lending_account - .get_active_balances_iter() - .count(); - assert_eq!(1, active_balance_count); - - let maybe_balance = marginfi_account.lending_account.get_balance(&bank_f.key); - assert!(maybe_balance.is_some()); - - let balance = maybe_balance.unwrap(); - let expected_liquidity_vault_delta = I80F48::from(native!(deposit_amount, bank_f.mint.mint.decimals, f64)); let actual_liquidity_vault_delta = I80F48::from(post_vault_balance - pre_vault_balance); - let accounted_user_balance_delta = bank_f - .load() - .await - .get_asset_amount(balance.asset_shares.into()) - .unwrap(); assert_eq!(expected_liquidity_vault_delta, actual_liquidity_vault_delta); - assert_eq_with_tolerance!( - expected_liquidity_vault_delta, - accounted_user_balance_delta, - 1 - ); + + // If deposit_amount == 0, bank account doesn't get created -- no need to check balances + if deposit_amount > 0. { + let marginfi_account = user_mfi_account_f.load().await; + let active_balance_count = marginfi_account + .lending_account + .get_active_balances_iter() + .count(); + assert_eq!(1, active_balance_count); + let maybe_balance = marginfi_account.lending_account.get_balance(&bank_f.key); + assert!(maybe_balance.is_some()); + + let balance = maybe_balance.unwrap(); + let accounted_user_balance_delta = bank_f + .load() + .await + .get_asset_amount(balance.asset_shares.into()) + .unwrap(); + assert_eq_with_tolerance!( + expected_liquidity_vault_delta, + accounted_user_balance_delta, + 1 + ); + } Ok(()) } @@ -144,12 +146,12 @@ async fn marginfi_account_deposit_failure_capacity_exceeded( .await?; let res = user_mfi_account_f - .try_bank_deposit(user_token_account.key, bank_f, deposit_amount_failed) + .try_bank_deposit(user_token_account.key, bank_f, deposit_amount_failed, None) .await; assert_custom_error!(res.unwrap_err(), MarginfiError::BankAssetCapacityExceeded); let res = user_mfi_account_f - .try_bank_deposit(user_token_account.key, bank_f, deposit_amount_ok) + .try_bank_deposit(user_token_account.key, bank_f, deposit_amount_ok, None) .await; assert!(res.is_ok()); @@ -199,6 +201,7 @@ async fn marginfi_account_deposit_failure_wrong_token_program() -> anyhow::Resul accounts, data: marginfi::instruction::LendingAccountDeposit { amount: native!(deposit_amount, bank_f.mint.mint.decimals, f64), + deposit_up_to_limit: None, } .data(), }; @@ -219,3 +222,100 @@ async fn marginfi_account_deposit_failure_wrong_token_program() -> anyhow::Resul Ok(()) } + +#[test_case(1_000., 500., 800., 500., BankMint::Usdc)] +#[test_case(1_000., 500., 800., 500., BankMint::Sol)] +#[test_case(1_000., 500., 800., 500., BankMint::PyUSD)] +#[test_case(1_000., 500., 800., 500., BankMint::T22WithFee)] +#[tokio::test] +async fn marginfi_account_deposit_up_to_limit_success( + deposit_cap: f64, + first_deposit: f64, + second_deposit: f64, + third_deposit: f64, + bank_mint: BankMint, +) -> anyhow::Result<()> { + // ------------------------------------------------------------------------- + // Setup + // ------------------------------------------------------------------------- + + let test_f = TestFixture::new(Some(TestSettings::all_banks_payer_not_admin())).await; + + // User + let user_mfi_account_f = test_f.create_marginfi_account().await; + let user_wallet_balance = + get_max_deposit_amount_pre_fee(first_deposit + second_deposit + third_deposit); + let bank_f = test_f.get_bank(&bank_mint); + let user_token_account = bank_f + .mint + .create_token_account_and_mint_to(user_wallet_balance) + .await; + + // ------------------------------------------------------------------------- + // Test + // ------------------------------------------------------------------------- + + bank_f + .update_config(BankConfigOpt { + deposit_limit: Some(native!(deposit_cap, bank_f.mint.mint.decimals, f64)), + ..Default::default() + }) + .await?; + + // First deposit stays under limit + let res = user_mfi_account_f + .try_bank_deposit(user_token_account.key, bank_f, first_deposit, None) + .await; + assert!(res.is_ok()); + + // Second deposit goes over limit -- with deposit_up_to_limit set + let pre_vault_balance = bank_f + .get_vault_token_account(BankVaultType::Liquidity) + .await + .balance() + .await; + + let res = user_mfi_account_f + .try_bank_deposit(user_token_account.key, bank_f, second_deposit, Some(true)) + .await; + assert!(res.is_ok()); + + let post_vault_balance = bank_f + .get_vault_token_account(BankVaultType::Liquidity) + .await + .balance() + .await; + + let expected_remaining_capacity = deposit_cap - first_deposit; + let expected_second_deposit = I80F48::from(native!( + expected_remaining_capacity.min(second_deposit), + bank_f.mint.mint.decimals, + f64 + )); + let actual_deposit = I80F48::from(post_vault_balance - pre_vault_balance); + + assert_eq_with_tolerance!(expected_second_deposit, actual_deposit, 1); + + // Third deposit goes over limit -- with deposit_up_to_limit set -- when already at capacity + // Should succeed with no balance changes + let pre_vault_balance = bank_f + .get_vault_token_account(BankVaultType::Liquidity) + .await + .balance() + .await; + + let res = user_mfi_account_f + .try_bank_deposit(user_token_account.key, bank_f, third_deposit, Some(true)) + .await; + assert!(res.is_ok()); + + let post_vault_balance = bank_f + .get_vault_token_account(BankVaultType::Liquidity) + .await + .balance() + .await; + + assert_eq!(pre_vault_balance, post_vault_balance); + + Ok(()) +} diff --git a/programs/marginfi/tests/user_actions/flash_loan.rs b/programs/marginfi/tests/user_actions/flash_loan.rs index 098359069..a64d54013 100644 --- a/programs/marginfi/tests/user_actions/flash_loan.rs +++ b/programs/marginfi/tests/user_actions/flash_loan.rs @@ -33,7 +33,7 @@ async fn flashloan_success_1op() -> anyhow::Result<()> { .create_token_account_and_mint_to(1_000) .await; lender_mfi_account_f - .try_bank_deposit(lender_token_account_f_sol.key, sol_bank, 1_000) + .try_bank_deposit(lender_token_account_f_sol.key, sol_bank, 1_000, None) .await?; // Fund SOL borrower @@ -82,7 +82,7 @@ async fn flashloan_success_3op() -> anyhow::Result<()> { .create_token_account_and_mint_to(1_000) .await; lender_mfi_account_f - .try_bank_deposit(lender_token_account_f_sol.key, sol_bank, 1_000) + .try_bank_deposit(lender_token_account_f_sol.key, sol_bank, 1_000, None) .await?; // Fund SOL borrower @@ -137,7 +137,7 @@ async fn flashloan_fail_account_health() -> anyhow::Result<()> { .create_token_account_and_mint_to(1_000) .await; lender_mfi_account_f - .try_bank_deposit(lender_token_account_f_sol.key, sol_bank, 1_000) + .try_bank_deposit(lender_token_account_f_sol.key, sol_bank, 1_000, None) .await?; // Fund SOL borrower @@ -181,7 +181,7 @@ async fn flashloan_ok_missing_flag() -> anyhow::Result<()> { .create_token_account_and_mint_to(1_000) .await; lender_mfi_account_f - .try_bank_deposit(lender_token_account_f_sol.key, sol_bank, 1_000) + .try_bank_deposit(lender_token_account_f_sol.key, sol_bank, 1_000, None) .await?; // Fund SOL borrower @@ -226,7 +226,7 @@ async fn flashloan_fail_missing_fe_ix() -> anyhow::Result<()> { .create_token_account_and_mint_to(1_000) .await; lender_mfi_account_f - .try_bank_deposit(lender_token_account_f_sol.key, sol_bank, 1_000) + .try_bank_deposit(lender_token_account_f_sol.key, sol_bank, 1_000, None) .await?; // Fund SOL borrower @@ -290,7 +290,7 @@ async fn flashloan_fail_missing_invalid_sysvar_ixs() -> anyhow::Result<()> { .create_token_account_and_mint_to(1_000) .await; lender_mfi_account_f - .try_bank_deposit(lender_token_account_f_sol.key, sol_bank, 1_000) + .try_bank_deposit(lender_token_account_f_sol.key, sol_bank, 1_000, None) .await?; // Fund SOL borrower @@ -369,7 +369,7 @@ async fn flashloan_fail_invalid_end_fl_order() -> anyhow::Result<()> { .create_token_account_and_mint_to(1_000) .await; lender_mfi_account_f - .try_bank_deposit(lender_token_account_f_sol.key, sol_bank, 1_000) + .try_bank_deposit(lender_token_account_f_sol.key, sol_bank, 1_000, None) .await?; // Fund SOL borrower @@ -429,7 +429,7 @@ async fn flashloan_fail_invalid_end_fl_different_m_account() -> anyhow::Result<( .create_token_account_and_mint_to(1_000) .await; lender_mfi_account_f - .try_bank_deposit(lender_token_account_f_sol.key, sol_bank, 1_000) + .try_bank_deposit(lender_token_account_f_sol.key, sol_bank, 1_000, None) .await?; // Fund SOL borrower @@ -489,7 +489,7 @@ async fn flashloan_fail_already_in_flashloan() -> anyhow::Result<()> { .create_token_account_and_mint_to(1_000) .await; lender_mfi_account_f - .try_bank_deposit(lender_token_account_f_sol.key, sol_bank, 1_000) + .try_bank_deposit(lender_token_account_f_sol.key, sol_bank, 1_000, None) .await?; // Fund SOL borrower diff --git a/programs/marginfi/tests/user_actions/liquidate.rs b/programs/marginfi/tests/user_actions/liquidate.rs index 10bdf9d95..39af964d4 100644 --- a/programs/marginfi/tests/user_actions/liquidate.rs +++ b/programs/marginfi/tests/user_actions/liquidate.rs @@ -47,6 +47,7 @@ async fn marginfi_account_liquidation_success( lp_collateral_token_account.key, test_f.get_bank(&debt_mint), lp_deposit_amount, + None, ) .await?; } @@ -71,6 +72,7 @@ async fn marginfi_account_liquidation_success( liquidatee_collateral_token_account_f.key, test_f.get_bank(&collateral_mint), deposit_amount, + None, ) .await?; liquidatee_mfi_account_f @@ -109,6 +111,7 @@ async fn marginfi_account_liquidation_success( liquidator_collateral_token_account_f.key, test_f.get_bank(&debt_mint), borrow_amount_actual, + None, ) .await?; @@ -269,7 +272,7 @@ async fn marginfi_account_liquidation_success_many_balances() -> anyhow::Result< .create_token_account_and_mint_to(2_000) .await; lender_mfi_account_f - .try_bank_deposit(lender_token_account_usdc.key, usdc_bank_f, 2_000) + .try_bank_deposit(lender_token_account_usdc.key, usdc_bank_f, 2_000, None) .await?; let borrower_mfi_account_f = test_f.create_marginfi_account().await; @@ -282,7 +285,7 @@ async fn marginfi_account_liquidation_success_many_balances() -> anyhow::Result< // Borrower deposits 100 SOL worth of $1000 borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_sol.key, sol_bank_f, 100) + .try_bank_deposit(borrower_token_account_sol.key, sol_bank_f, 100, None) .await?; // Borrower borrows $999 @@ -291,28 +294,28 @@ async fn marginfi_account_liquidation_success_many_balances() -> anyhow::Result< .await?; borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_sol_eq.key, sol_eq_bank_f, 0) + .try_bank_deposit(borrower_token_account_sol_eq.key, sol_eq_bank_f, 0, None) .await?; borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_sol_eq.key, sol_eq1_bank_f, 0) + .try_bank_deposit(borrower_token_account_sol_eq.key, sol_eq1_bank_f, 0, None) .await?; borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_sol_eq.key, sol_eq2_bank_f, 0) + .try_bank_deposit(borrower_token_account_sol_eq.key, sol_eq2_bank_f, 0, None) .await?; borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_sol_eq.key, sol_eq3_bank_f, 0) + .try_bank_deposit(borrower_token_account_sol_eq.key, sol_eq3_bank_f, 0, None) .await?; borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_sol_eq.key, sol_eq4_bank_f, 0) + .try_bank_deposit(borrower_token_account_sol_eq.key, sol_eq4_bank_f, 0, None) .await?; borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_sol_eq.key, sol_eq5_bank_f, 0) + .try_bank_deposit(borrower_token_account_sol_eq.key, sol_eq5_bank_f, 0, None) .await?; borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_sol_eq.key, sol_eq6_bank_f, 0) + .try_bank_deposit(borrower_token_account_sol_eq.key, sol_eq6_bank_f, 0, None) .await?; borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_sol_eq.key, sol_eq7_bank_f, 0) + .try_bank_deposit(borrower_token_account_sol_eq.key, sol_eq7_bank_f, 0, None) .await?; // Synthetically bring down the borrower account health by reducing the asset weights of the SOL bank @@ -421,7 +424,7 @@ async fn marginfi_account_liquidation_success_swb() -> anyhow::Result<()> { .create_token_account_and_mint_to(2_000) .await; lender_mfi_account_f - .try_bank_deposit(lender_token_account_usdc.key, usdc_bank_f, 2_000) + .try_bank_deposit(lender_token_account_usdc.key, usdc_bank_f, 2_000, None) .await?; let borrower_mfi_account_f = test_f.create_marginfi_account().await; @@ -430,7 +433,7 @@ async fn marginfi_account_liquidation_success_swb() -> anyhow::Result<()> { // Borrower deposits 100 SOL worth of $1000 borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_sol.key, sol_bank_f, 100) + .try_bank_deposit(borrower_token_account_sol.key, sol_bank_f, 100, None) .await?; // Borrower borrows $999 @@ -544,7 +547,7 @@ async fn marginfi_account_liquidation_failure_liquidatee_not_unhealthy() -> anyh let lender_mfi_account_f = test_f.create_marginfi_account().await; let lender_token_account_usdc = test_f.usdc_mint.create_token_account_and_mint_to(200).await; lender_mfi_account_f - .try_bank_deposit(lender_token_account_usdc.key, usdc_bank_f, 200) + .try_bank_deposit(lender_token_account_usdc.key, usdc_bank_f, 200, None) .await?; let borrower_mfi_account_f = test_f.create_marginfi_account().await; @@ -552,7 +555,7 @@ async fn marginfi_account_liquidation_failure_liquidatee_not_unhealthy() -> anyh let borrower_token_account_usdc = test_f.usdc_mint.create_empty_token_account().await; borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_sol.key, sol_bank_f, 100) + .try_bank_deposit(borrower_token_account_sol.key, sol_bank_f, 100, None) .await?; borrower_mfi_account_f @@ -580,14 +583,14 @@ async fn marginfi_account_liquidation_failure_liquidation_too_severe() -> anyhow let lender_mfi_account_f = test_f.create_marginfi_account().await; let lender_token_account_usdc = test_f.usdc_mint.create_token_account_and_mint_to(200).await; lender_mfi_account_f - .try_bank_deposit(lender_token_account_usdc.key, usdc_bank_f, 200) + .try_bank_deposit(lender_token_account_usdc.key, usdc_bank_f, 200, None) .await?; let borrower_mfi_account_f = test_f.create_marginfi_account().await; let borrower_token_account_sol = test_f.sol_mint.create_token_account_and_mint_to(10).await; let borrower_token_account_usdc = test_f.usdc_mint.create_empty_token_account().await; borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_sol.key, sol_bank_f, 10) + .try_bank_deposit(borrower_token_account_sol.key, sol_bank_f, 10, None) .await?; borrower_mfi_account_f .try_bank_borrow(borrower_token_account_usdc.key, usdc_bank_f, 61) @@ -652,7 +655,7 @@ async fn marginfi_account_liquidation_failure_liquidator_no_collateral() -> anyh let lender_mfi_account_f = test_f.create_marginfi_account().await; let lender_token_account_usdc = test_f.usdc_mint.create_token_account_and_mint_to(200).await; lender_mfi_account_f - .try_bank_deposit(lender_token_account_usdc.key, usdc_bank_f, 200) + .try_bank_deposit(lender_token_account_usdc.key, usdc_bank_f, 200, None) .await?; let borrower_mfi_account_f = test_f.create_marginfi_account().await; @@ -663,10 +666,10 @@ async fn marginfi_account_liquidation_failure_liquidator_no_collateral() -> anyh .await; let borrower_token_account_usdc = test_f.usdc_mint.create_empty_token_account().await; borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_sol.key, sol_bank_f, 10) + .try_bank_deposit(borrower_token_account_sol.key, sol_bank_f, 10, None) .await?; borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_sol_eq.key, sol_eq_bank_f, 1) + .try_bank_deposit(borrower_token_account_sol_eq.key, sol_eq_bank_f, 1, None) .await?; borrower_mfi_account_f .try_bank_borrow(borrower_token_account_usdc.key, usdc_bank_f, 60) @@ -709,7 +712,7 @@ async fn marginfi_account_liquidation_failure_bank_not_liquidatable() -> anyhow: let lender_mfi_account_f = test_f.create_marginfi_account().await; let lender_token_account_usdc = test_f.usdc_mint.create_token_account_and_mint_to(200).await; lender_mfi_account_f - .try_bank_deposit(lender_token_account_usdc.key, usdc_bank_f, 200) + .try_bank_deposit(lender_token_account_usdc.key, usdc_bank_f, 200, None) .await?; let borrower_mfi_account_f = test_f.create_marginfi_account().await; @@ -720,10 +723,10 @@ async fn marginfi_account_liquidation_failure_bank_not_liquidatable() -> anyhow: .await; let borrower_token_account_usdc = test_f.usdc_mint.create_empty_token_account().await; borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_sol.key, sol_bank_f, 10) + .try_bank_deposit(borrower_token_account_sol.key, sol_bank_f, 10, None) .await?; borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_sol_eq.key, sol_eq_bank_f, 1) + .try_bank_deposit(borrower_token_account_sol_eq.key, sol_eq_bank_f, 1, None) .await?; borrower_mfi_account_f .try_bank_borrow(borrower_token_account_usdc.key, usdc_bank_f, 60) diff --git a/programs/marginfi/tests/user_actions/mod.rs b/programs/marginfi/tests/user_actions/mod.rs index f1c67ea06..732bc3fd6 100644 --- a/programs/marginfi/tests/user_actions/mod.rs +++ b/programs/marginfi/tests/user_actions/mod.rs @@ -40,7 +40,7 @@ async fn automatic_interest_payments() -> anyhow::Result<()> { .create_token_account_and_mint_to(1_000) .await; lender_mfi_account_f - .try_bank_deposit(lender_token_account_sol.key, sol_bank_f, 1_000) + .try_bank_deposit(lender_token_account_sol.key, sol_bank_f, 1_000, None) .await?; // Create borrower user accounts and deposit USDC asset @@ -50,7 +50,7 @@ async fn automatic_interest_payments() -> anyhow::Result<()> { .create_token_account_and_mint_to(1_000) .await; borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_usdc.key, usdc_bank_f, 1_000) + .try_bank_deposit(borrower_token_account_usdc.key, usdc_bank_f, 1_000, None) .await?; // Borrow SOL from borrower mfi account @@ -120,14 +120,14 @@ async fn marginfi_account_correct_balance_selection_after_closing_position() -> .create_token_account_and_mint_to(1_000) .await; lender_mfi_account_f - .try_bank_deposit(lender_token_account_sol.key, sol_bank_f, 1_000) + .try_bank_deposit(lender_token_account_sol.key, sol_bank_f, 1_000, None) .await?; let lender_token_account_usdc = test_f .usdc_mint .create_token_account_and_mint_to(2_000) .await; lender_mfi_account_f - .try_bank_deposit(lender_token_account_usdc.key, usdc_bank_f, 2_000) + .try_bank_deposit(lender_token_account_usdc.key, usdc_bank_f, 2_000, None) .await?; lender_mfi_account_f @@ -226,7 +226,7 @@ async fn emissions_test() -> anyhow::Result<()> { let sol_lender_token_account = test_f.sol_mint.create_token_account_and_mint_to(100).await; sol_lender_account - .try_bank_deposit(sol_lender_token_account.key, sol_bank, 100) + .try_bank_deposit(sol_lender_token_account.key, sol_bank, 100, None) .await?; // Create account and setup positions @@ -242,7 +242,7 @@ async fn emissions_test() -> anyhow::Result<()> { let lender_token_account_usdc = test_f.usdc_mint.create_token_account_and_mint_to(50).await; mfi_account_f - .try_bank_deposit(lender_token_account_usdc.key, usdc_bank, 50) + .try_bank_deposit(lender_token_account_usdc.key, usdc_bank, 50, None) .await?; let sol_account = test_f.sol_mint.create_empty_token_account().await; diff --git a/programs/marginfi/tests/user_actions/repay.rs b/programs/marginfi/tests/user_actions/repay.rs index ea045ced3..b7bad9b89 100644 --- a/programs/marginfi/tests/user_actions/repay.rs +++ b/programs/marginfi/tests/user_actions/repay.rs @@ -45,6 +45,7 @@ async fn marginfi_account_repay_success( lp_collateral_token_account.key, test_f.get_bank(&debt_mint), lp_deposit_amount, + None, ) .await?; @@ -70,6 +71,7 @@ async fn marginfi_account_repay_success( user_collateral_token_account_f.key, test_f.get_bank(&collateral_mint), sufficient_collateral_amount, + None, ) .await?; @@ -171,6 +173,7 @@ async fn marginfi_account_repay_all_success( lp_collateral_token_account.key, test_f.get_bank(&debt_mint), lp_deposit_amount, + None, ) .await?; @@ -196,6 +199,7 @@ async fn marginfi_account_repay_all_success( user_collateral_token_account_f.key, test_f.get_bank(&collateral_mint), sufficient_collateral_amount, + None, ) .await?; @@ -326,6 +330,7 @@ async fn marginfi_account_repay_failure_repaying_too_much( lp_collateral_token_account.key, test_f.get_bank(&debt_mint), lp_deposit_amount, + None, ) .await?; @@ -351,6 +356,7 @@ async fn marginfi_account_repay_failure_repaying_too_much( user_collateral_token_account_f.key, test_f.get_bank(&collateral_mint), sufficient_collateral_amount, + None, ) .await?; diff --git a/programs/marginfi/tests/user_actions/withdraw.rs b/programs/marginfi/tests/user_actions/withdraw.rs index f48c49362..7070019e3 100644 --- a/programs/marginfi/tests/user_actions/withdraw.rs +++ b/programs/marginfi/tests/user_actions/withdraw.rs @@ -43,7 +43,7 @@ async fn marginfi_account_withdraw_success( .await; let bank_f = test_f.get_bank(&bank_mint); marginfi_account_f - .try_bank_deposit(token_account_f.key, bank_f, deposit_amount) + .try_bank_deposit(token_account_f.key, bank_f, deposit_amount, None) .await .unwrap(); @@ -186,7 +186,7 @@ async fn marginfi_account_withdraw_all_success( let bank_f = test_f.get_bank(&bank_mint); marginfi_account_f - .try_bank_deposit(token_account_f.key, bank_f, deposit_amount) + .try_bank_deposit(token_account_f.key, bank_f, deposit_amount, None) .await .unwrap(); @@ -289,7 +289,7 @@ async fn marginfi_account_withdraw_failure_withdrawing_too_much( let bank_f = test_f.get_bank(&bank_mint); marginfi_account_f - .try_bank_deposit(token_account_f.key, bank_f, deposit_amount) + .try_bank_deposit(token_account_f.key, bank_f, deposit_amount, None) .await?; let res = marginfi_account_f diff --git a/test-utils/src/marginfi_account.rs b/test-utils/src/marginfi_account.rs index 73c8c959e..573a63b4d 100644 --- a/test-utils/src/marginfi_account.rs +++ b/test-utils/src/marginfi_account.rs @@ -67,6 +67,7 @@ impl MarginfiAccountFixture { funding_account: Pubkey, bank: &BankFixture, ui_amount: T, + deposit_up_to_limit: Option, ) -> Instruction { let marginfi_account = self.load().await; let ctx = self.ctx.borrow_mut(); @@ -90,6 +91,7 @@ impl MarginfiAccountFixture { accounts, data: marginfi::instruction::LendingAccountDeposit { amount: ui_to_native!(ui_amount.into(), bank.mint.mint.decimals), + deposit_up_to_limit, } .data(), } @@ -100,9 +102,10 @@ impl MarginfiAccountFixture { funding_account: Pubkey, bank: &BankFixture, ui_amount: T, + deposit_up_to_limit: Option, ) -> anyhow::Result<(), BanksClientError> { let mut ix = self - .make_bank_deposit_ix(funding_account, bank, ui_amount) + .make_bank_deposit_ix(funding_account, bank, ui_amount, deposit_up_to_limit) .await; // If t22 with transfer hook, add remaining accounts diff --git a/tests/07_deposit.spec.ts b/tests/07_deposit.spec.ts index 798b589ad..630c5febd 100644 --- a/tests/07_deposit.spec.ts +++ b/tests/07_deposit.spec.ts @@ -89,6 +89,7 @@ describe("Deposit funds", () => { bank: bankKeypairA.publicKey, tokenAccount: user.tokenAAccount, amount: depositAmountA_native, + depositUpToLimit: false, }) ) ); @@ -132,6 +133,7 @@ describe("Deposit funds", () => { bank: bankKeypairUsdc.publicKey, tokenAccount: user.usdcAccount, amount: depositAmountUsdc_native, + depositUpToLimit: false, }) ) ); diff --git a/tests/08_borrow.spec.ts b/tests/08_borrow.spec.ts index 341d66a24..08618e1a1 100644 --- a/tests/08_borrow.spec.ts +++ b/tests/08_borrow.spec.ts @@ -88,15 +88,15 @@ describe("Borrow funds", () => { console.log("user 0 USDC before: " + userUsdcBefore.toLocaleString()); console.log( "usdc fees owed to bank: " + - wrappedI80F48toBigNumber( - bankBefore.collectedGroupFeesOutstanding - ).toString() + wrappedI80F48toBigNumber( + bankBefore.collectedGroupFeesOutstanding + ).toString() ); console.log( "usdc fees owed to program: " + - wrappedI80F48toBigNumber( - bankBefore.collectedProgramFeesOutstanding - ).toString() + wrappedI80F48toBigNumber( + bankBefore.collectedProgramFeesOutstanding + ).toString() ); } @@ -127,15 +127,15 @@ describe("Borrow funds", () => { console.log("user 0 USDC after: " + userUsdcAfter.toLocaleString()); console.log( "usdc fees owed to bank: " + - wrappedI80F48toBigNumber( - bankAfter.collectedGroupFeesOutstanding - ).toString() + wrappedI80F48toBigNumber( + bankAfter.collectedGroupFeesOutstanding + ).toString() ); console.log( "usdc fees owed to program: " + - wrappedI80F48toBigNumber( - bankAfter.collectedProgramFeesOutstanding - ).toString() + wrappedI80F48toBigNumber( + bankAfter.collectedProgramFeesOutstanding + ).toString() ); } diff --git a/tests/s01_usersStake.spec.ts b/tests/s01_usersStake.spec.ts index 1be06e705..3008781f4 100644 --- a/tests/s01_usersStake.spec.ts +++ b/tests/s01_usersStake.spec.ts @@ -55,10 +55,10 @@ describe("User stakes some native and creates an account", () => { console.log("Create stake account: " + user0StakeAccount); console.log( " Stake: " + - stake + - " SOL (" + - (stake * LAMPORTS_PER_SOL).toLocaleString() + - " in native)" + stake + + " SOL (" + + (stake * LAMPORTS_PER_SOL).toLocaleString() + + " in native)" ); } users[0].accounts.set("v0_stakeAcc", user0StakeAccount); @@ -102,11 +102,11 @@ describe("User stakes some native and creates an account", () => { console.log("It is now epoch: " + epoch + " slot " + slot); console.log( "Stake active: " + - stakeStatusBefore.active.toLocaleString() + - " inactive " + - stakeStatusBefore.inactive.toLocaleString() + - " status: " + - stakeStatusBefore.status + stakeStatusBefore.active.toLocaleString() + + " inactive " + + stakeStatusBefore.inactive.toLocaleString() + + " status: " + + stakeStatusBefore.status ); } }); @@ -162,11 +162,11 @@ describe("User stakes some native and creates an account", () => { if (verbose) { console.log( "Stake active: " + - stakeStatusAfter.active.toLocaleString() + - " inactive " + - stakeStatusAfter.inactive.toLocaleString() + - " status: " + - stakeStatusAfter.status + stakeStatusAfter.active.toLocaleString() + + " inactive " + + stakeStatusAfter.inactive.toLocaleString() + + " status: " + + stakeStatusAfter.status ); console.log(""); } diff --git a/tests/s03_deposit.spec.ts b/tests/s03_deposit.spec.ts index 08df7c051..2590fc5da 100644 --- a/tests/s03_deposit.spec.ts +++ b/tests/s03_deposit.spec.ts @@ -89,6 +89,7 @@ describe("Deposit funds (included staked assets)", () => { bank: bankKeypairUsdc.publicKey, tokenAccount: user.usdcAccount, amount: new BN(10 * 10 ** ecosystem.usdcDecimals), + depositUpToLimit: false, }) ); @@ -116,6 +117,7 @@ describe("Deposit funds (included staked assets)", () => { bank: validators[0].bank, tokenAccount: userLstAta, amount: new BN(1 * 10 ** ecosystem.wsolDecimals), + depositUpToLimit: false, }) ); @@ -143,6 +145,7 @@ describe("Deposit funds (included staked assets)", () => { bank: bankKeypairSol.publicKey, tokenAccount: user.wsolAccount, amount: new BN(2 * 10 ** ecosystem.wsolDecimals), + depositUpToLimit: false, }) ); @@ -170,6 +173,7 @@ describe("Deposit funds (included staked assets)", () => { bank: validators[0].bank, tokenAccount: userLstAta, amount: new BN(1 * 10 ** ecosystem.wsolDecimals), + depositUpToLimit: false, }) ); @@ -196,6 +200,7 @@ describe("Deposit funds (included staked assets)", () => { bank: bankKeypairUsdc.publicKey, tokenAccount: user.usdcAccount, amount: new BN(1 * 10 ** ecosystem.usdcDecimals), + depositUpToLimit: false, }) ); @@ -224,6 +229,7 @@ describe("Deposit funds (included staked assets)", () => { bank: validators[0].bank, tokenAccount: userLstAta, amount: new BN(1 * 10 ** ecosystem.wsolDecimals), + depositUpToLimit: false, }) ); diff --git a/tests/utils/user-instructions.ts b/tests/utils/user-instructions.ts index e59fc6c7a..d4cc248aa 100644 --- a/tests/utils/user-instructions.ts +++ b/tests/utils/user-instructions.ts @@ -41,6 +41,7 @@ export type DepositArgs = { bank: PublicKey; tokenAccount: PublicKey; amount: BN; + depositUpToLimit: boolean; }; /** @@ -52,7 +53,7 @@ export type DepositArgs = { */ export const depositIx = (program: Program, args: DepositArgs) => { const ix = program.methods - .lendingAccountDeposit(args.amount) + .lendingAccountDeposit(args.amount, args.depositUpToLimit) .accounts({ // marginfiGroup: args.marginfiGroup, // implied from bank marginfiAccount: args.marginfiAccount, From 792c6d768612b0b2e3066e50a4907927efbf7f74 Mon Sep 17 00:00:00 2001 From: jgur-psyops Date: Wed, 12 Feb 2025 13:03:38 -0500 Subject: [PATCH 33/59] Reconcile merge 0.1.2-refactors --- programs/marginfi/tests/user_actions/deposit.rs | 11 +++++++---- tests/utils/user-instructions.ts | 4 ++-- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/programs/marginfi/tests/user_actions/deposit.rs b/programs/marginfi/tests/user_actions/deposit.rs index 922cb15dd..c754004eb 100644 --- a/programs/marginfi/tests/user_actions/deposit.rs +++ b/programs/marginfi/tests/user_actions/deposit.rs @@ -256,10 +256,13 @@ async fn marginfi_account_deposit_up_to_limit_success( // ------------------------------------------------------------------------- bank_f - .update_config(BankConfigOpt { - deposit_limit: Some(native!(deposit_cap, bank_f.mint.mint.decimals, f64)), - ..Default::default() - }) + .update_config( + BankConfigOpt { + deposit_limit: Some(native!(deposit_cap, bank_f.mint.mint.decimals, f64)), + ..Default::default() + }, + None, + ) .await?; // First deposit stays under limit diff --git a/tests/utils/user-instructions.ts b/tests/utils/user-instructions.ts index d4cc248aa..b33ffbac5 100644 --- a/tests/utils/user-instructions.ts +++ b/tests/utils/user-instructions.ts @@ -41,7 +41,7 @@ export type DepositArgs = { bank: PublicKey; tokenAccount: PublicKey; amount: BN; - depositUpToLimit: boolean; + depositUpToLimit?: boolean; }; /** @@ -53,7 +53,7 @@ export type DepositArgs = { */ export const depositIx = (program: Program, args: DepositArgs) => { const ix = program.methods - .lendingAccountDeposit(args.amount, args.depositUpToLimit) + .lendingAccountDeposit(args.amount, args.depositUpToLimit ?? false) .accounts({ // marginfiGroup: args.marginfiGroup, // implied from bank marginfiAccount: args.marginfiAccount, From e17fb9ec4fb9e706ad92d46b7065efa2140e3cb6 Mon Sep 17 00:00:00 2001 From: jgur-psyops Date: Wed, 12 Feb 2025 13:29:44 -0500 Subject: [PATCH 34/59] More has_one conversions, WIP TS test for deposit to limit --- .../instructions/marginfi_group/add_pool.rs | 8 +-- .../marginfi_group/add_pool_with_seed.rs | 8 +-- .../instructions/marginfi_group/configure.rs | 35 +++++----- .../marginfi_group/handle_bankruptcy.rs | 3 +- test-utils/src/marginfi_account.rs | 4 +- tests/02_configGroup.spec.ts | 39 +++++------ tests/03_addBank.spec.ts | 2 - tests/07_deposit.spec.ts | 46 +++++++++++++ tests/rootHooks.ts | 20 ++++++ tests/s02_addBank.spec.ts | 11 ++-- tests/utils/group-instructions.ts | 66 +++++++++++++++++-- 11 files changed, 183 insertions(+), 59 deletions(-) diff --git a/programs/marginfi/src/instructions/marginfi_group/add_pool.rs b/programs/marginfi/src/instructions/marginfi_group/add_pool.rs index 3020b5c3d..1ccf394ee 100644 --- a/programs/marginfi/src/instructions/marginfi_group/add_pool.rs +++ b/programs/marginfi/src/instructions/marginfi_group/add_pool.rs @@ -95,12 +95,12 @@ pub fn lending_pool_add_bank( #[derive(Accounts)] #[instruction(bank_config: BankConfigCompact)] pub struct LendingPoolAddBank<'info> { - pub marginfi_group: AccountLoader<'info, MarginfiGroup>, - #[account( - mut, - address = marginfi_group.load()?.admin, + has_one = admin )] + pub marginfi_group: AccountLoader<'info, MarginfiGroup>, + + #[account(mut)] pub admin: Signer<'info>, /// Pays to init accounts and pays `fee_state.bank_init_flat_sol_fee` lamports to the protocol diff --git a/programs/marginfi/src/instructions/marginfi_group/add_pool_with_seed.rs b/programs/marginfi/src/instructions/marginfi_group/add_pool_with_seed.rs index 41bfcf2d8..bfd6bb842 100644 --- a/programs/marginfi/src/instructions/marginfi_group/add_pool_with_seed.rs +++ b/programs/marginfi/src/instructions/marginfi_group/add_pool_with_seed.rs @@ -95,12 +95,12 @@ pub fn lending_pool_add_bank_with_seed( #[derive(Accounts)] #[instruction(bank_config: BankConfigCompact, bank_seed: u64)] pub struct LendingPoolAddBankWithSeed<'info> { - pub marginfi_group: AccountLoader<'info, MarginfiGroup>, - #[account( - mut, - address = marginfi_group.load()?.admin, + has_one = admin )] + pub marginfi_group: AccountLoader<'info, MarginfiGroup>, + + #[account(mut)] pub admin: Signer<'info>, /// Pays to init accounts and pays `fee_state.bank_init_flat_sol_fee` lamports to the protocol diff --git a/programs/marginfi/src/instructions/marginfi_group/configure.rs b/programs/marginfi/src/instructions/marginfi_group/configure.rs index 97099f1df..f3e4a1c5b 100644 --- a/programs/marginfi/src/instructions/marginfi_group/configure.rs +++ b/programs/marginfi/src/instructions/marginfi_group/configure.rs @@ -31,13 +31,12 @@ pub fn configure(ctx: Context, config: GroupConfig) -> M #[derive(Accounts)] pub struct MarginfiGroupConfigure<'info> { - #[account(mut)] - pub marginfi_group: AccountLoader<'info, MarginfiGroup>, - #[account( - // TODO moving to `marginfi_group` as `has_one` adds a mystery signer? - address = marginfi_group.load()?.admin, + mut, + has_one = admin )] + pub marginfi_group: AccountLoader<'info, MarginfiGroup>, + pub admin: Signer<'info>, } @@ -71,14 +70,17 @@ pub fn set_account_flag(ctx: Context, flag: u64) -> MarginfiResu #[derive(Accounts)] pub struct SetAccountFlag<'info> { - #[account(address = marginfi_account.load()?.group)] - pub marginfi_group: AccountLoader<'info, MarginfiGroup>, + #[account( + has_one = admin + )] + pub group: AccountLoader<'info, MarginfiGroup>, - #[account(mut)] + #[account( + mut, + has_one = group + )] pub marginfi_account: AccountLoader<'info, MarginfiAccount>, - /// Admin only - #[account(address = marginfi_group.load()?.admin)] pub admin: Signer<'info>, } @@ -94,14 +96,17 @@ pub fn unset_account_flag(ctx: Context, flag: u64) -> Marginfi #[derive(Accounts)] pub struct UnsetAccountFlag<'info> { - #[account(address = marginfi_account.load()?.group)] - pub marginfi_group: AccountLoader<'info, MarginfiGroup>, + #[account( + has_one = admin + )] + pub group: AccountLoader<'info, MarginfiGroup>, - #[account(mut)] + #[account( + mut, + has_one = group + )] pub marginfi_account: AccountLoader<'info, MarginfiAccount>, - /// Admin only - #[account(address = marginfi_group.load()?.admin)] pub admin: Signer<'info>, } diff --git a/programs/marginfi/src/instructions/marginfi_group/handle_bankruptcy.rs b/programs/marginfi/src/instructions/marginfi_group/handle_bankruptcy.rs index b41984e9b..2a2de0d0b 100644 --- a/programs/marginfi/src/instructions/marginfi_group/handle_bankruptcy.rs +++ b/programs/marginfi/src/instructions/marginfi_group/handle_bankruptcy.rs @@ -177,7 +177,8 @@ pub fn lending_pool_handle_bankruptcy<'info>( pub struct LendingPoolHandleBankruptcy<'info> { pub group: AccountLoader<'info, MarginfiGroup>, - // #[account(address = marginfi_group.load()?.admin)] + /// CHECK: The admin signer constraint is only validated (in handler) if bank + /// PERMISSIONLESS_BAD_DEBT_SETTLEMENT_FLAG is not set pub signer: Signer<'info>, #[account( diff --git a/test-utils/src/marginfi_account.rs b/test-utils/src/marginfi_account.rs index 573a63b4d..16d289906 100644 --- a/test-utils/src/marginfi_account.rs +++ b/test-utils/src/marginfi_account.rs @@ -571,7 +571,7 @@ impl MarginfiAccountFixture { let ix = Instruction { program_id: marginfi::id(), accounts: marginfi::accounts::SetAccountFlag { - marginfi_group: self.load().await.group, + group: self.load().await.group, marginfi_account: self.key, admin: self.ctx.borrow().payer.pubkey(), } @@ -597,7 +597,7 @@ impl MarginfiAccountFixture { let ix = Instruction { program_id: marginfi::id(), accounts: marginfi::accounts::UnsetAccountFlag { - marginfi_group: self.load().await.group, + group: self.load().await.group, marginfi_account: self.key, admin: self.ctx.borrow().payer.pubkey(), } diff --git a/tests/02_configGroup.spec.ts b/tests/02_configGroup.spec.ts index bed028702..153fdad83 100644 --- a/tests/02_configGroup.spec.ts +++ b/tests/02_configGroup.spec.ts @@ -1,7 +1,4 @@ -import { - Program, - workspace, -} from "@coral-xyz/anchor"; +import { Program, workspace } from "@coral-xyz/anchor"; import { Keypair, Transaction } from "@solana/web3.js"; import { groupConfigure } from "./utils/group-instructions"; import { Marginfi } from "../target/types/marginfi"; @@ -12,12 +9,11 @@ describe("Config group", () => { const program = workspace.Marginfi as Program; it("(admin) Config group - no change", async () => { - await groupAdmin.mrgnProgram!.provider.sendAndConfirm!( + await groupAdmin.mrgnProgram.provider.sendAndConfirm!( new Transaction().add( - await groupConfigure(program, { + await groupConfigure(groupAdmin.mrgnProgram, { newAdmin: null, marginfiGroup: marginfiGroup.publicKey, - admin: groupAdmin.wallet.publicKey, }) ) ); @@ -30,12 +26,11 @@ describe("Config group", () => { it("(admin) Config group - set new admin", async () => { let newAdmin = Keypair.generate(); - await groupAdmin.mrgnProgram!.provider.sendAndConfirm!( + await groupAdmin.mrgnProgram.provider.sendAndConfirm!( new Transaction().add( - await groupConfigure(program, { + await groupConfigure(groupAdmin.mrgnProgram, { newAdmin: newAdmin.publicKey, marginfiGroup: marginfiGroup.publicKey, - admin: groupAdmin.wallet.publicKey, }) ) ); @@ -46,20 +41,26 @@ describe("Config group", () => { assertKeysEqual(group.admin, newAdmin.publicKey); // Restore original - await groupAdmin.mrgnProgram!.provider.sendAndConfirm!( + await program.provider.sendAndConfirm!( new Transaction().add( - await groupConfigure(program, { - newAdmin: groupAdmin.wallet.publicKey, - marginfiGroup: marginfiGroup.publicKey, - admin: newAdmin.publicKey, - }) + await program.methods + .marginfiGroupConfigure({ admin: groupAdmin.wallet.publicKey }) + .accountsPartial({ + marginfiGroup: marginfiGroup.publicKey, + admin: newAdmin.publicKey, + }) + .instruction() + + // Note: Fails because admin is incorrectly implied, TODO figure out why... + // await groupConfigure(program, { + // newAdmin: groupAdmin.wallet.publicKey, + // marginfiGroup: marginfiGroup.publicKey, + // }) ), [newAdmin] ); - group = await program.account.marginfiGroup.fetch( - marginfiGroup.publicKey - ); + group = await program.account.marginfiGroup.fetch(marginfiGroup.publicKey); assertKeysEqual(group.admin, groupAdmin.wallet.publicKey); }); }); diff --git a/tests/03_addBank.spec.ts b/tests/03_addBank.spec.ts index 8a7a72f18..85e314b8b 100644 --- a/tests/03_addBank.spec.ts +++ b/tests/03_addBank.spec.ts @@ -53,7 +53,6 @@ describe("Lending pool add bank (add bank to group)", () => { new Transaction().add( await addBank(groupAdmin.mrgnProgram, { marginfiGroup: marginfiGroup.publicKey, - admin: groupAdmin.wallet.publicKey, feePayer: groupAdmin.wallet.publicKey, bankMint: ecosystem.usdcMint.publicKey, bank: bankKey, @@ -199,7 +198,6 @@ describe("Lending pool add bank (add bank to group)", () => { new Transaction().add( await addBank(groupAdmin.mrgnProgram, { marginfiGroup: marginfiGroup.publicKey, - admin: groupAdmin.wallet.publicKey, feePayer: groupAdmin.wallet.publicKey, bankMint: ecosystem.tokenAMint.publicKey, bank: bankKey, diff --git a/tests/07_deposit.spec.ts b/tests/07_deposit.spec.ts index 630c5febd..f459ec105 100644 --- a/tests/07_deposit.spec.ts +++ b/tests/07_deposit.spec.ts @@ -158,4 +158,50 @@ describe("Deposit funds", () => { userUsdcAfter ); }); + + it("(user 1) deposit up to limit - happy path", async () => { + const user = users[1]; + + // TODO make bank, give user funds, etc.... + + + // const userUsdcBefore = await getTokenBalance(provider, user.usdcAccount); + // if (verbose) { + // console.log("user 1 USDC before: " + userUsdcBefore.toLocaleString()); + // } + + // const user1Account = user.accounts.get(USER_ACCOUNT); + + // await user.mrgnProgram.provider.sendAndConfirm( + // new Transaction().add( + // await depositIx(user.mrgnProgram, { + // marginfiAccount: user1Account, + // bank: bankKeypairUsdc.publicKey, + // tokenAccount: user.usdcAccount, + // amount: depositAmountUsdc_native, + // depositUpToLimit: false, + // }) + // ) + // ); + + // const userAcc = await program.account.marginfiAccount.fetch(user1Account); + // const balances = userAcc.lendingAccount.balances; + // assert.equal(balances[0].active, 1); + // // Note: The first deposit issues shares 1:1 and the shares use the same decimals + // assertI80F48Approx(balances[0].assetShares, depositAmountUsdc_native); + // assertI80F48Equal(balances[0].liabilityShares, 0); + // assertI80F48Equal(balances[0].emissionsOutstanding, 0); + + // let now = Math.floor(Date.now() / 1000); + // assertBNApproximately(balances[0].lastUpdate, now, 2); + + // const userUsdcAfter = await getTokenBalance(provider, user.usdcAccount); + // if (verbose) { + // console.log("user 1 USDC after: " + userUsdcAfter.toLocaleString()); + // } + // assert.equal( + // userUsdcBefore - depositAmountUsdc_native.toNumber(), + // userUsdcAfter + // ); + }); }); diff --git a/tests/rootHooks.ts b/tests/rootHooks.ts index cbc13b931..3d3903d91 100644 --- a/tests/rootHooks.ts +++ b/tests/rootHooks.ts @@ -273,6 +273,26 @@ export const mochaHooks = { } banksClient = bankrunContext.banksClient; + groupAdmin.mrgnBankrunProgram = new Program( + mrgnProgram.idl, + new AnchorProvider( + bankRunProvider.connection, + new Wallet(groupAdmin.wallet), + {} + ) + ); + + validatorAdmin.mrgnBankrunProgram = new Program( + mrgnProgram.idl, + new AnchorProvider( + bankRunProvider.connection, + new Wallet(validatorAdmin.wallet), + {} + ) + ); + + banksClient = bankrunContext.banksClient; + if (verbose) { console.log("---End ecosystem setup---"); console.log(""); diff --git a/tests/s02_addBank.spec.ts b/tests/s02_addBank.spec.ts index 2808a5650..c330f4b21 100644 --- a/tests/s02_addBank.spec.ts +++ b/tests/s02_addBank.spec.ts @@ -60,7 +60,7 @@ describe("Init group and add banks with asset category flags", () => { let tx = new Transaction(); tx.add( - await groupInitialize(program, { + await groupInitialize(groupAdmin.mrgnBankrunProgram, { marginfiGroup: marginfiGroup.publicKey, admin: groupAdmin.wallet.publicKey, }) @@ -140,9 +140,8 @@ describe("Init group and add banks with asset category flags", () => { let tx = new Transaction(); tx.add( - await addBank(bankrunProgram, { + await addBank(groupAdmin.mrgnBankrunProgram, { marginfiGroup: marginfiGroup.publicKey, - admin: groupAdmin.wallet.publicKey, feePayer: groupAdmin.wallet.publicKey, bankMint: ecosystem.usdcMint.publicKey, bank: bankKey, @@ -184,9 +183,8 @@ describe("Init group and add banks with asset category flags", () => { let tx = new Transaction(); tx.add( - await addBank(bankrunProgram, { + await addBank(groupAdmin.mrgnBankrunProgram, { marginfiGroup: marginfiGroup.publicKey, - admin: groupAdmin.wallet.publicKey, feePayer: groupAdmin.wallet.publicKey, bankMint: ecosystem.wsolMint.publicKey, bank: bankKey, @@ -216,7 +214,6 @@ describe("Init group and add banks with asset category flags", () => { tx.add( await addBank(groupAdmin.mrgnProgram, { marginfiGroup: marginfiGroup.publicKey, - admin: groupAdmin.wallet.publicKey, feePayer: groupAdmin.wallet.publicKey, bankMint: validators[0].splMint, bank: bankKeypair.publicKey, @@ -427,7 +424,7 @@ describe("Init group and add banks with asset category flags", () => { let tx = new Transaction(); tx.add( - await addBankPermissionless(bankrunProgram, { + await addBankPermissionless(groupAdmin.mrgnBankrunProgram, { marginfiGroup: marginfiGroup.publicKey, feePayer: groupAdmin.wallet.publicKey, pythOracle: oracles.wsolOracle.publicKey, diff --git a/tests/utils/group-instructions.ts b/tests/utils/group-instructions.ts index 52459ef92..544a2c5cc 100644 --- a/tests/utils/group-instructions.ts +++ b/tests/utils/group-instructions.ts @@ -30,7 +30,6 @@ export const MAX_ORACLE_KEYS = 5; */ export type AddBankArgs = { marginfiGroup: PublicKey; - admin: PublicKey; feePayer: PublicKey; bankMint: PublicKey; bank: PublicKey; @@ -56,7 +55,7 @@ export const addBank = (program: Program, args: AddBankArgs) => { }) .accounts({ marginfiGroup: args.marginfiGroup, - admin: args.admin, + // admin: args.admin, // implied from group feePayer: args.feePayer, bankMint: args.bankMint, bank: args.bank, @@ -77,14 +76,71 @@ export const addBank = (program: Program, args: AddBankArgs) => { return ix; }; +/** + * * admin/feePayer - must sign + * * bank - use a fresh keypair, must sign + */ +export type AddBankWithSeedArgs = { + marginfiGroup: PublicKey; + feePayer: PublicKey; + bankMint: PublicKey; + bank: PublicKey; + config: BankConfig; +}; + +export const addBankWithSeed = ( + program: Program, + args: AddBankArgs +) => { + const ix = program.methods + .lendingPoolAddBankWithSeed( + { + assetWeightInit: args.config.assetWeightInit, + assetWeightMaint: args.config.assetWeightMaint, + liabilityWeightInit: args.config.liabilityWeightInit, + liabilityWeightMaint: args.config.liabilityWeightMain, + depositLimit: args.config.depositLimit, + interestRateConfig: args.config.interestRateConfig, + operationalState: args.config.operationalState, + borrowLimit: args.config.borrowLimit, + riskTier: args.config.riskTier, + assetTag: args.config.assetTag, + pad0: [0, 0, 0, 0, 0, 0], + totalAssetValueInitLimit: args.config.totalAssetValueInitLimit, + oracleMaxAge: args.config.oracleMaxAge, + }, + new BN(0) + ) + .accounts({ + marginfiGroup: args.marginfiGroup, + // admin: args.admin, // implied from group + feePayer: args.feePayer, + bankMint: args.bankMint, + // bank: args.bank, // derived from seed + // globalFeeState: deriveGlobalFeeState(id), + // globalFeeWallet: args.globalFeeWallet, + // liquidityVaultAuthority = deriveLiquidityVaultAuthority(id, bank); + // liquidityVault = deriveLiquidityVault(id, bank); + // insuranceVaultAuthority = deriveInsuranceVaultAuthority(id, bank); + // insuranceVault = deriveInsuranceVault(id, bank); + // feeVaultAuthority = deriveFeeVaultAuthority(id, bank); + // feeVault = deriveFeeVault(id, bank); + // rent = SYSVAR_RENT_PUBKEY + tokenProgram: TOKEN_PROGRAM_ID, + // systemProgram: SystemProgram.programId, + }) + .instruction(); + + return ix; +}; + /** * newAdmin - (Optional) pass null to keep current admin - * admin - must sign, must be current admin of marginfiGroup + * marginfiGroup's admin - must sign */ export type GroupConfigureArgs = { newAdmin: PublicKey | null; marginfiGroup: PublicKey; - admin: PublicKey; }; export const groupConfigure = ( @@ -95,7 +151,7 @@ export const groupConfigure = ( .marginfiGroupConfigure({ admin: args.newAdmin }) .accounts({ marginfiGroup: args.marginfiGroup, - admin: args.admin, + // admin: // implied from group }) .instruction(); From f46c647c09f68665a6cd6afdd976b8871b129576 Mon Sep 17 00:00:00 2001 From: jgur-psyops Date: Wed, 12 Feb 2025 14:18:33 -0500 Subject: [PATCH 35/59] Add deposit up to limit TS test --- tests/02_configGroup.spec.ts | 6 +- tests/07_deposit.spec.ts | 194 +++++++++++++++++++++++------- tests/utils/group-instructions.ts | 5 +- 3 files changed, 156 insertions(+), 49 deletions(-) diff --git a/tests/02_configGroup.spec.ts b/tests/02_configGroup.spec.ts index 153fdad83..c19163f18 100644 --- a/tests/02_configGroup.spec.ts +++ b/tests/02_configGroup.spec.ts @@ -41,9 +41,9 @@ describe("Config group", () => { assertKeysEqual(group.admin, newAdmin.publicKey); // Restore original - await program.provider.sendAndConfirm!( + await groupAdmin.mrgnProgram.provider.sendAndConfirm!( new Transaction().add( - await program.methods + await groupAdmin.mrgnProgram.methods .marginfiGroupConfigure({ admin: groupAdmin.wallet.publicKey }) .accountsPartial({ marginfiGroup: marginfiGroup.publicKey, @@ -52,7 +52,7 @@ describe("Config group", () => { .instruction() // Note: Fails because admin is incorrectly implied, TODO figure out why... - // await groupConfigure(program, { + // await groupConfigure(groupAdmin.mrgnProgram, { // newAdmin: groupAdmin.wallet.publicKey, // marginfiGroup: marginfiGroup.publicKey, // }) diff --git a/tests/07_deposit.spec.ts b/tests/07_deposit.spec.ts index f459ec105..eb256629f 100644 --- a/tests/07_deposit.spec.ts +++ b/tests/07_deposit.spec.ts @@ -6,13 +6,15 @@ import { Wallet, workspace, } from "@coral-xyz/anchor"; -import { Transaction } from "@solana/web3.js"; +import { AccountMeta, Transaction } from "@solana/web3.js"; import { Marginfi } from "../target/types/marginfi"; import { bankKeypairA, bankKeypairUsdc, ecosystem, + groupAdmin, marginfiGroup, + oracles, users, verbose, } from "./rootHooks"; @@ -23,10 +25,16 @@ import { getTokenBalance, } from "./utils/genericTests"; import { assert } from "chai"; -import { depositIx } from "./utils/user-instructions"; +import { depositIx, withdrawIx } from "./utils/user-instructions"; import { USER_ACCOUNT } from "./utils/mocks"; import { createMintToInstruction } from "@solana/spl-token"; -import { deriveLiquidityVault } from "./utils/pdas"; +import { deriveBankWithSeed, deriveLiquidityVault } from "./utils/pdas"; +import { addBank, addBankWithSeed } from "./utils/group-instructions"; +import { + defaultBankConfig, + ORACLE_SETUP_PYTH_LEGACY, + u64MAX_BN, +} from "./utils/types"; describe("Deposit funds", () => { const program = workspace.Marginfi as Program; @@ -160,48 +168,146 @@ describe("Deposit funds", () => { }); it("(user 1) deposit up to limit - happy path", async () => { + const depositAmount0 = 500; + const depositLimit = 10000; + + // Init a dummy bank for this test... + let config = defaultBankConfig(); + config.depositLimit = new BN(10_000); + const seed = new BN(0); + const [bankKey] = deriveBankWithSeed( + program.programId, + marginfiGroup.publicKey, + ecosystem.tokenAMint.publicKey, + seed + ); + await groupAdmin.mrgnProgram.provider.sendAndConfirm!( + new Transaction().add( + await addBankWithSeed(groupAdmin.mrgnProgram, { + marginfiGroup: marginfiGroup.publicKey, + feePayer: groupAdmin.wallet.publicKey, + bankMint: ecosystem.tokenAMint.publicKey, + bank: bankKey, + // globalFeeWallet: globalFeeWallet, + config: config, + seed: seed, + }), + await program.methods + .lendingPoolConfigureBankOracle( + ORACLE_SETUP_PYTH_LEGACY, + oracles.tokenAOracle.publicKey + ) + .accountsPartial({ + group: marginfiGroup.publicKey, + bank: bankKey, + admin: groupAdmin.wallet.publicKey, + }) + .remainingAccounts([ + { + pubkey: oracles.tokenAOracle.publicKey, + isSigner: false, + isWritable: false, + } as AccountMeta, + ]) + .instruction() + ) + ); + + // User 0 deposits a small amount of funds... + const user0Account = users[0].accounts.get(USER_ACCOUNT); + await users[0].mrgnProgram.provider.sendAndConfirm( + new Transaction().add( + await depositIx(users[0].mrgnProgram, { + marginfiAccount: user0Account, + bank: bankKey, + tokenAccount: users[0].tokenAAccount, + amount: new BN(depositAmount0), + depositUpToLimit: false, + }) + ) + ); + + // And now user user 1 attempts to deposit up to the deposit cap const user = users[1]; + const userTokenABefore = await getTokenBalance( + provider, + user.tokenAAccount + ); + if (verbose) { + console.log( + "user 1 Token A before: " + userTokenABefore.toLocaleString() + ); + } + + const user1Account = user.accounts.get(USER_ACCOUNT); + await user.mrgnProgram.provider.sendAndConfirm( + new Transaction().add( + await depositIx(user.mrgnProgram, { + marginfiAccount: user1Account, + bank: bankKey, + tokenAccount: user.tokenAAccount, + // NOTE: Pass u64::MAX to go up to the deposit limit regardless of amount, or pass some + // smaller amount to clamp to that amount (the actual amount deposited is always + // min(amount, deposit_amt_up_to_cap)) + amount: u64MAX_BN, + depositUpToLimit: true, + }) + ) + ); - // TODO make bank, give user funds, etc.... - - - // const userUsdcBefore = await getTokenBalance(provider, user.usdcAccount); - // if (verbose) { - // console.log("user 1 USDC before: " + userUsdcBefore.toLocaleString()); - // } - - // const user1Account = user.accounts.get(USER_ACCOUNT); - - // await user.mrgnProgram.provider.sendAndConfirm( - // new Transaction().add( - // await depositIx(user.mrgnProgram, { - // marginfiAccount: user1Account, - // bank: bankKeypairUsdc.publicKey, - // tokenAccount: user.usdcAccount, - // amount: depositAmountUsdc_native, - // depositUpToLimit: false, - // }) - // ) - // ); - - // const userAcc = await program.account.marginfiAccount.fetch(user1Account); - // const balances = userAcc.lendingAccount.balances; - // assert.equal(balances[0].active, 1); - // // Note: The first deposit issues shares 1:1 and the shares use the same decimals - // assertI80F48Approx(balances[0].assetShares, depositAmountUsdc_native); - // assertI80F48Equal(balances[0].liabilityShares, 0); - // assertI80F48Equal(balances[0].emissionsOutstanding, 0); - - // let now = Math.floor(Date.now() / 1000); - // assertBNApproximately(balances[0].lastUpdate, now, 2); - - // const userUsdcAfter = await getTokenBalance(provider, user.usdcAccount); - // if (verbose) { - // console.log("user 1 USDC after: " + userUsdcAfter.toLocaleString()); - // } - // assert.equal( - // userUsdcBefore - depositAmountUsdc_native.toNumber(), - // userUsdcAfter - // ); + const userTokenAAfter = await getTokenBalance(provider, user.tokenAAccount); + if (verbose) { + console.log("user 1 Token A after: " + userTokenAAfter.toLocaleString()); + } + // Note: We are always 1 token short of the deposit limit, because an internal check performs a + // < instead of a <= when validating the deposit limit + const expected = depositLimit - depositAmount0 - 1; + assert.equal( + userTokenABefore - userTokenAAfter, + depositLimit - depositAmount0 - 1 + ); + const userAcc = await program.account.marginfiAccount.fetch(user1Account); + assertI80F48Approx( + userAcc.lendingAccount.balances[1].assetShares, + expected + ); + + // withdraw amounts to restore to previous state... + + await user.mrgnProgram.provider.sendAndConfirm( + new Transaction().add( + await withdrawIx(user.mrgnProgram, { + marginfiAccount: user1Account, + bank: bankKey, + tokenAccount: user.tokenAAccount, + remaining: [ + bankKeypairUsdc.publicKey, + oracles.usdcOracle.publicKey, + bankKey, + oracles.tokenAOracle.publicKey, + ], + amount: new BN(1), // doesn't matter when withdrawing all... + withdrawAll: true, + }) + ) + ); + + await users[0].mrgnProgram.provider.sendAndConfirm( + new Transaction().add( + await withdrawIx(users[0].mrgnProgram, { + marginfiAccount: user0Account, + bank: bankKey, + tokenAccount: users[0].tokenAAccount, + remaining: [ + bankKeypairA.publicKey, + oracles.tokenAOracle.publicKey, + bankKey, + oracles.tokenAOracle.publicKey, + ], + amount: new BN(1), // doesn't matter when withdrawing all... + withdrawAll: true, + }) + ) + ); }); }); diff --git a/tests/utils/group-instructions.ts b/tests/utils/group-instructions.ts index 544a2c5cc..d3f71c927 100644 --- a/tests/utils/group-instructions.ts +++ b/tests/utils/group-instructions.ts @@ -86,11 +86,12 @@ export type AddBankWithSeedArgs = { bankMint: PublicKey; bank: PublicKey; config: BankConfig; + seed?: BN; }; export const addBankWithSeed = ( program: Program, - args: AddBankArgs + args: AddBankWithSeedArgs ) => { const ix = program.methods .lendingPoolAddBankWithSeed( @@ -109,7 +110,7 @@ export const addBankWithSeed = ( totalAssetValueInitLimit: args.config.totalAssetValueInitLimit, oracleMaxAge: args.config.oracleMaxAge, }, - new BN(0) + args.seed ?? new BN(0) ) .accounts({ marginfiGroup: args.marginfiGroup, From 2e1e4c9434b84bdd15b417c916d3bf27e8678b9b Mon Sep 17 00:00:00 2001 From: jgur-psyops Date: Wed, 12 Feb 2025 15:09:24 -0500 Subject: [PATCH 36/59] Fix cli attempt 1 --- clients/rust/marginfi-cli/src/processor/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clients/rust/marginfi-cli/src/processor/mod.rs b/clients/rust/marginfi-cli/src/processor/mod.rs index cbf78ed74..ae547a63d 100644 --- a/clients/rust/marginfi-cli/src/processor/mod.rs +++ b/clients/rust/marginfi-cli/src/processor/mod.rs @@ -942,7 +942,7 @@ pub fn process_set_user_flag( let ix = Instruction { accounts: marginfi::accounts::SetAccountFlag { marginfi_account: marginfi_account_pk, - marginfi_group: profile.marginfi_group.unwrap(), + group: profile.marginfi_group.unwrap(), admin: config.authority(), } .to_account_metas(Some(true)), From c2ad41c5df51080aedd2410eb30c21beba1e0210 Mon Sep 17 00:00:00 2001 From: Jon Gurary <91919816+jgur-psyops@users.noreply.github.com> Date: Wed, 12 Feb 2025 15:12:36 -0500 Subject: [PATCH 37/59] Close marginfi accounts via CLI #258 (#301) * Close accounts CLI instruction Co-authored-by: lastemp --- clients/rust/marginfi-cli/src/entrypoint.rs | 2 ++ .../rust/marginfi-cli/src/processor/mod.rs | 35 +++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/clients/rust/marginfi-cli/src/entrypoint.rs b/clients/rust/marginfi-cli/src/entrypoint.rs index bacecdbb4..3a65962c7 100644 --- a/clients/rust/marginfi-cli/src/entrypoint.rs +++ b/clients/rust/marginfi-cli/src/entrypoint.rs @@ -432,6 +432,7 @@ pub enum AccountCommand { ui_asset_amount: f64, }, Create, + Close, SetFlag { account_pk: Pubkey, #[clap(long)] @@ -950,6 +951,7 @@ fn process_account_subcmd(subcmd: AccountCommand, global_options: &GlobalOptions ui_asset_amount, ), AccountCommand::Create => processor::marginfi_account_create(&profile, &config), + AccountCommand::Close => processor::marginfi_account_close(&profile, &config), AccountCommand::SetFlag { flashloans_enabled: flashloan, account_pk, diff --git a/clients/rust/marginfi-cli/src/processor/mod.rs b/clients/rust/marginfi-cli/src/processor/mod.rs index ae547a63d..d42a3239c 100644 --- a/clients/rust/marginfi-cli/src/processor/mod.rs +++ b/clients/rust/marginfi-cli/src/processor/mod.rs @@ -2517,6 +2517,41 @@ pub fn marginfi_account_create(profile: &Profile, config: &Config) -> Result<()> Ok(()) } + +pub fn marginfi_account_close(profile: &Profile, config: &Config) -> Result<()> { + let signer = config.get_non_ms_authority_keypair()?; + + let rpc_client = config.mfi_program.rpc(); + + let marginfi_account_pk = profile.get_marginfi_account(); + println!("Closing marginfi account {}", marginfi_account_pk); + + let ix = Instruction { + program_id: config.program_id, + accounts: marginfi::accounts::MarginfiAccountClose { + marginfi_account: marginfi_account_pk, + authority: signer.pubkey(), + fee_payer: signer.pubkey(), + } + .to_account_metas(Some(true)), + data: marginfi::instruction::MarginfiAccountClose.data(), + }; + + let recent_blockhash = rpc_client.get_latest_blockhash().unwrap(); + let tx = Transaction::new_signed_with_payer( + &[ix], + Some(&signer.pubkey()), + &[signer], + recent_blockhash, + ); + + match process_transaction(&tx, &config.mfi_program.rpc(), config.get_tx_mode()) { + Ok(sig) => println!("Marginfi account closed successfully (sig: {})", sig), + Err(err) => println!("Error during marginfi account closure:\n{:#?}", err), + }; + + Ok(()) +} /// LIP /// From 437e0fe69af0c02970392655d186df22602cc6e7 Mon Sep 17 00:00:00 2001 From: jgur-psyops Date: Thu, 13 Feb 2025 13:09:52 -0500 Subject: [PATCH 38/59] Minor test fix, move guides to custom folder --- DEPLOY_GUIDE.md => guides/DEPLOY_GUIDE.md | 9 +++++++-- .../DEPLOY_GUIDE_STAGING.md | 0 guides/PROG_AUTH_MIGRATION.md | 9 +++++++++ .../TRANSFER_ACCOUNT_GUIDE.md | 0 tests/09_withdraw_repay.spec.ts | 14 ++++---------- 5 files changed, 20 insertions(+), 12 deletions(-) rename DEPLOY_GUIDE.md => guides/DEPLOY_GUIDE.md (92%) rename DEPLOY_GUIDE_STAGING.md => guides/DEPLOY_GUIDE_STAGING.md (100%) create mode 100644 guides/PROG_AUTH_MIGRATION.md rename TRANSFER_ACCOUNT_GUIDE.md => guides/TRANSFER_ACCOUNT_GUIDE.md (100%) diff --git a/DEPLOY_GUIDE.md b/guides/DEPLOY_GUIDE.md similarity index 92% rename from DEPLOY_GUIDE.md rename to guides/DEPLOY_GUIDE.md index adb4af228..2c50bca9e 100644 --- a/DEPLOY_GUIDE.md +++ b/guides/DEPLOY_GUIDE.md @@ -24,8 +24,12 @@ solana program set-buffer-authority --new-buffer-authority - * Click the pending upgrade to start a vote. * Execute after the vote passes. -Voters: -* Clone the branch being deployed and run `./scripts/build-program-verifiable.sh marginfi mainnet`. +### Voters: + +* Clone the branch being deployed (see the release tag the person who initated the upgrade has given you) and run: +``` +./scripts/build-program-verifiable.sh marginfi mainnet +``` * Check that the program builds with the hash that the person who is deploying gave you. Check what characters other people have validated in Signal, post the next six characters of the hash to verify you have actually checked and aren't skipping this step out of laziness. * Check that the buffer contains this hash too `solana-verify get-buffer-hash `. * After the vote is executed and the contract is upgraded, check that the contract contains the same hash. For example for MFv2, this is `solana-verify get-program-hash MFv2hWf31Z9kbCa1snEPYctwafyhdvnV7FZnsebVacA` @@ -42,3 +46,4 @@ Here we list recent deployments to staging/mainnet. The hash is always the first ### MAINNET * 0.1.0-alpha mainnet on Fev 3, 2024 ~2:45ET -- Hash: ea5d15 +* 0.1.1: SIGNATURES IN PROGRESS -- Hash: 03455c diff --git a/DEPLOY_GUIDE_STAGING.md b/guides/DEPLOY_GUIDE_STAGING.md similarity index 100% rename from DEPLOY_GUIDE_STAGING.md rename to guides/DEPLOY_GUIDE_STAGING.md diff --git a/guides/PROG_AUTH_MIGRATION.md b/guides/PROG_AUTH_MIGRATION.md new file mode 100644 index 000000000..af25251c2 --- /dev/null +++ b/guides/PROG_AUTH_MIGRATION.md @@ -0,0 +1,9 @@ +## MIGRATING PROGRAM AUTHORITY + +Migrating program authority to a new squads wallet? Read on. + +First, make sure the new squads wallet is configured with an appropriate threshold (typically at least 5) and all owners have been added. + +If a regular wallet owns the program, navigate to the new squads wallet, go to developers -> programs -> new program, follow the instructions to add the program via CLI. + +If the old squads wallet owns the program, navigate to the old squads wallet, go to developers -> programs, click the program to transfer, hit change authority, and use the address of the new squads wallet. \ No newline at end of file diff --git a/TRANSFER_ACCOUNT_GUIDE.md b/guides/TRANSFER_ACCOUNT_GUIDE.md similarity index 100% rename from TRANSFER_ACCOUNT_GUIDE.md rename to guides/TRANSFER_ACCOUNT_GUIDE.md diff --git a/tests/09_withdraw_repay.spec.ts b/tests/09_withdraw_repay.spec.ts index 004999578..a29867be5 100644 --- a/tests/09_withdraw_repay.spec.ts +++ b/tests/09_withdraw_repay.spec.ts @@ -12,16 +12,11 @@ import { bankKeypairA, bankKeypairUsdc, ecosystem, - marginfiGroup, oracles, users, verbose, } from "./rootHooks"; import { - assertBNApproximately, - assertBNEqual, - assertI80F48Approx, - assertI80F48Equal, assertKeysEqual, expectFailedTxWithError, getTokenBalance, @@ -35,7 +30,6 @@ import { withdrawIx, } from "./utils/user-instructions"; import { USER_ACCOUNT } from "./utils/mocks"; -import { createMintToInstruction } from "@solana/spl-token"; import { updatePriceAccount } from "./utils/pyth_mocks"; import { createAssociatedTokenAccountIdempotentInstruction, wrappedI80F48toBigNumber } from "@mrgnlabs/mrgn-common"; import { u64MAX_BN } from "./utils/types"; @@ -368,7 +362,7 @@ describe("Withdraw funds", () => { ).toNumber(); assert.approximately(sharesAfter, sharesBefore - actualOwed, 2); // This balance is now inactive - assert.equal(balancesAfter[1].active, false); + assert.equal(balancesAfter[1].active, 0); // The bank has also lost the same amount of shares... const bankSharesBefore = wrappedI80F48toBigNumber( @@ -446,7 +440,7 @@ describe("Withdraw funds", () => { ).toNumber(); assert.equal(sharesAfter, sharesBefore - withdrawExpected); // This balance is now inactive - assert.equal(balancesAfter[0].active, false); + assert.equal(balancesAfter[0].active, 0); // The bank has also lost the same amount of shares... const bankSharesBefore = wrappedI80F48toBigNumber( @@ -502,9 +496,9 @@ describe("Withdraw funds", () => { const userAccAfter = await program.account.marginfiAccount.fetch(userAcc); let balances = userAccAfter.lendingAccount.balances; - assert.equal(balances[0].active, true); + assert.equal(balances[0].active, 1); assertKeysEqual(balances[0].bankPk, bankKeypairA.publicKey); - assert.equal(balances[1].active, true); + assert.equal(balances[1].active, 1); assertKeysEqual(balances[1].bankPk, bankKeypairUsdc.publicKey); }); }); From 868d952313f2543a848eead91bbf53686d074299 Mon Sep 17 00:00:00 2001 From: jgur-psyops Date: Thu, 13 Feb 2025 14:26:10 -0500 Subject: [PATCH 39/59] Getting started dev guide --- guides/GETTING_STARTED_DEV.md | 55 +++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 guides/GETTING_STARTED_DEV.md diff --git a/guides/GETTING_STARTED_DEV.md b/guides/GETTING_STARTED_DEV.md new file mode 100644 index 000000000..5bc476e8e --- /dev/null +++ b/guides/GETTING_STARTED_DEV.md @@ -0,0 +1,55 @@ +## NEW DEV QUICKSTART GUIDE + +New developer getting started working on the mrgnv2 program side? Read on. + +### Things to Install (Feb 2025) + +* rust/cargo - latest stable +* node - 23.0.0 +* yarn - 1.22.22 +* avm - 0.30.1 +* anchor - 0.30.1 +* solana - 1.18.17 +* cargo-nextest - use `cargo install cargo-nextest --version "0.9.81" --locked` exactly +* cargo-fuzz - 0.12.0 + +## Running tests + + +### For unit tests: +``` +cargo test --lib +``` + +### For the TS test suite: + +``` +anchor build -p marginfi -- --no-default-features +anchor test --skip-build +``` +Note: you may need to build the other programs (mock, liquidity incentive, etc) if you have never run anchor build before + +### For the Rust test suite: + +``` +anchor build -p marginfi +./scripts/test-program.sh marginfi mainnet-beta +``` + +### To just one Rust test: + +``` +./scripts/single-test.sh marginfi accrue_interest --verbose +./scripts/single-test.sh test_name --verbose +``` + +## Common issues + +### The TS suite fails with `Environment supports crypto: false` at the top +Update Node + +### All the tests are failing in Rust and/or TS +Make sure you build the correct version, Rust requires the mainnet version (default features), TS wants localnet (no features) + + + From 95f2acf91ddba2cf41b3131f23b24b7856493d59 Mon Sep 17 00:00:00 2001 From: Jon Gurary <91919816+jgur-psyops@users.noreply.github.com> Date: Thu, 13 Feb 2025 16:48:20 -0500 Subject: [PATCH 40/59] Permissionless withdraw rewards (#302) * Permissionless withdraw rewards instruction --------- Co-authored-by: lastemp --- programs/marginfi/src/errors.rs | 4 + .../marginfi_account/emissions.rs | 175 ++++++++++++++++++ programs/marginfi/src/lib.rs | 12 ++ .../marginfi/src/state/marginfi_account.rs | 18 +- programs/marginfi/tests/misc/regression.rs | 6 +- 5 files changed, 209 insertions(+), 6 deletions(-) diff --git a/programs/marginfi/src/errors.rs b/programs/marginfi/src/errors.rs index a12acc9c5..58936d70b 100644 --- a/programs/marginfi/src/errors.rs +++ b/programs/marginfi/src/errors.rs @@ -104,6 +104,10 @@ pub enum MarginfiError { AssetTagMismatch, #[msg("Stake pool validation failed: check the stake pool, mint, or sol pool")] // 6050 StakePoolValidationFailed, + #[msg("Invalid emissions destination account")] // 6051 + InvalidEmissionsDestinationAccount, + #[msg("Emissions destination account is already set")] // 6052 + EmissionsDestinationAccountAlreadySet, } impl From for ProgramError { diff --git a/programs/marginfi/src/instructions/marginfi_account/emissions.rs b/programs/marginfi/src/instructions/marginfi_account/emissions.rs index 231cc6675..5017865bf 100644 --- a/programs/marginfi/src/instructions/marginfi_account/emissions.rs +++ b/programs/marginfi/src/instructions/marginfi_account/emissions.rs @@ -142,3 +142,178 @@ pub struct LendingAccountSettleEmissions<'info> { #[account(mut)] pub bank: AccountLoader<'info, Bank>, } + +/// emissions rewards will be withdrawn to the emissions_destination_account +pub fn marginfi_account_update_emissions_destination_account<'info>( + ctx: Context<'_, '_, 'info, 'info, MarginfiAccountUpdateEmissionsDestinationAccount<'info>>, +) -> MarginfiResult { + let mut marginfi_account = ctx.accounts.marginfi_account.load_mut()?; + + check!( + !marginfi_account.get_flag(DISABLED_FLAG), + MarginfiError::AccountDisabled + ); + + let emissions_destination_account = &marginfi_account.emissions_destination_account; + + // Ensure that the emissions_destination_account was not previously set by the user + check!( + emissions_destination_account.eq(&Pubkey::default()), + MarginfiError::EmissionsDestinationAccountAlreadySet + ); + + let _ = marginfi_account + .update_emissions_destination_account(ctx.accounts.destination_account.key()); + + Ok(()) +} + +#[derive(Accounts)] +pub struct MarginfiAccountUpdateEmissionsDestinationAccount<'info> { + pub marginfi_group: AccountLoader<'info, MarginfiGroup>, + + #[account( + mut, + constraint = marginfi_account.load()?.group == marginfi_group.key(), + )] + pub marginfi_account: AccountLoader<'info, MarginfiAccount>, + + #[account( + address = marginfi_account.load()?.authority, + )] + pub signer: Signer<'info>, + + #[account( + mut, + constraint = bank.load()?.group == marginfi_group.key(), + )] + pub bank: AccountLoader<'info, Bank>, + + #[account( + address = bank.load()?.emissions_mint + )] + pub emissions_mint: InterfaceAccount<'info, Mint>, + + #[account(mut)] + pub destination_account: Box>, +} + +/// Permissionlessly withdraw emissions to user emissions_destination_account +pub fn lending_account_withdraw_emissions_permissionless<'info>( + ctx: Context<'_, '_, 'info, 'info, LendingAccountWithdrawEmissionsPermissionless<'info>>, +) -> MarginfiResult { + let mut marginfi_account = ctx.accounts.marginfi_account.load_mut()?; + + check!( + !marginfi_account.get_flag(DISABLED_FLAG), + MarginfiError::AccountDisabled + ); + + let emissions_destination_account = &marginfi_account.emissions_destination_account; + + // Ensure that the emissions_destination_account was previously set by the user + check!( + !emissions_destination_account.eq(&Pubkey::default()), + MarginfiError::InvalidEmissionsDestinationAccount + ); + + // Ensure that the destination_account matches the stored one in MarginfiAccount + check!( + ctx.accounts + .destination_account + .key() + .eq(&emissions_destination_account), + MarginfiError::InvalidEmissionsDestinationAccount + ); + + let mut bank = ctx.accounts.bank.load_mut()?; + + let mut bank_account = BankAccountWrapper::find( + ctx.accounts.bank.to_account_info().key, + &mut bank, + &mut marginfi_account.lending_account, + )?; + + // Settle emissions + let emissions_settle_amount = bank_account.settle_emissions_and_get_transfer_amount()?; + + if emissions_settle_amount > 0 { + debug!("Transferring {} emissions to user", emissions_settle_amount); + + let signer_seeds: &[&[&[u8]]] = &[&[ + EMISSIONS_AUTH_SEED.as_bytes(), + &ctx.accounts.bank.key().to_bytes(), + &ctx.accounts.emissions_mint.key().to_bytes(), + &[ctx.bumps.emissions_auth], + ]]; + + transfer_checked( + CpiContext::new_with_signer( + ctx.accounts.token_program.to_account_info(), + TransferChecked { + from: ctx.accounts.emissions_vault.to_account_info(), + to: ctx.accounts.destination_account.to_account_info(), + authority: ctx.accounts.emissions_auth.to_account_info(), + mint: ctx.accounts.emissions_mint.to_account_info(), + }, + signer_seeds, + ), + emissions_settle_amount, + ctx.accounts.emissions_mint.decimals, + )?; + } + + Ok(()) +} + +#[derive(Accounts)] +pub struct LendingAccountWithdrawEmissionsPermissionless<'info> { + pub marginfi_group: AccountLoader<'info, MarginfiGroup>, + + #[account( + mut, + constraint = marginfi_account.load()?.group == marginfi_group.key(), + )] + pub marginfi_account: AccountLoader<'info, MarginfiAccount>, + + #[account( + address = marginfi_group.load()?.admin, + )] + pub admin: Signer<'info>, + + #[account( + mut, + constraint = bank.load()?.group == marginfi_group.key(), + )] + pub bank: AccountLoader<'info, Bank>, + + #[account( + address = bank.load()?.emissions_mint + )] + pub emissions_mint: InterfaceAccount<'info, Mint>, + + #[account( + seeds = [ + EMISSIONS_AUTH_SEED.as_bytes(), + bank.key().as_ref(), + emissions_mint.key().as_ref(), + ], + bump + )] + /// CHECK: Asserted by PDA + pub emissions_auth: AccountInfo<'info>, + + #[account( + mut, + seeds = [ + EMISSIONS_TOKEN_ACCOUNT_SEED.as_bytes(), + bank.key().as_ref(), + emissions_mint.key().as_ref(), + ], + bump, + )] + pub emissions_vault: Box>, + #[account(mut)] + pub destination_account: Box>, + pub token_program: Interface<'info, TokenInterface>, +} diff --git a/programs/marginfi/src/lib.rs b/programs/marginfi/src/lib.rs index b787419ad..a2ba828b9 100644 --- a/programs/marginfi/src/lib.rs +++ b/programs/marginfi/src/lib.rs @@ -187,6 +187,12 @@ pub mod marginfi { marginfi_account::lending_account_end_flashloan(ctx) } + pub fn marginfi_account_update_emissions_destination_account<'info>( + ctx: Context<'_, '_, 'info, 'info, MarginfiAccountUpdateEmissionsDestinationAccount<'info>>, + ) -> MarginfiResult { + marginfi_account::marginfi_account_update_emissions_destination_account(ctx) + } + // Operational instructions pub fn lending_pool_accrue_bank_interest( ctx: Context, @@ -232,6 +238,12 @@ pub mod marginfi { marginfi_account::close_account(ctx) } + pub fn lending_account_withdraw_emissions_permissionless<'info>( + ctx: Context<'_, '_, 'info, 'info, LendingAccountWithdrawEmissionsPermissionless<'info>>, + ) -> MarginfiResult { + marginfi_account::lending_account_withdraw_emissions_permissionless(ctx) + } + /// (Runs once per program) Configures the fee state account, where the global admin sets fees /// that are assessed to the protocol pub fn init_global_fee_state( diff --git a/programs/marginfi/src/state/marginfi_account.rs b/programs/marginfi/src/state/marginfi_account.rs index f32f146a7..a56515ef9 100644 --- a/programs/marginfi/src/state/marginfi_account.rs +++ b/programs/marginfi/src/state/marginfi_account.rs @@ -35,15 +35,17 @@ pub struct MarginfiAccount { /// The flags that indicate the state of the account. /// This is u64 bitfield, where each bit represents a flag. /// - /// Flags: + /// Flags:MarginfiAccount /// - DISABLED_FLAG = 1 << 0 = 1 - This flag indicates that the account is disabled, /// and no further actions can be taken on it. /// - IN_FLASHLOAN_FLAG (1 << 1) /// - FLASHLOAN_ENABLED_FLAG (1 << 2) /// - TRANSFER_AUTHORITY_ALLOWED_FLAG (1 << 3) pub account_flags: u64, // 8 + /// emissions rewards will be withdrawn to the emissions_destination_account + pub emissions_destination_account: Pubkey, // 32 pub _padding0: [u64; 32], // 504 - pub _padding1: [u64; 31], + pub _padding1: [u64; 27], } pub const DISABLED_FLAG: u64 = 1 << 0; @@ -75,6 +77,7 @@ impl MarginfiAccount { pub fn initialize(&mut self, group: Pubkey, authority: Pubkey) { self.authority = authority; self.group = group; + self.emissions_destination_account = Pubkey::default(); } /// Expected length of remaining accounts to be passed in borrow/liquidate, INCLUDING the bank @@ -129,6 +132,14 @@ impl MarginfiAccount { Ok(()) } + pub fn update_emissions_destination_account( + &mut self, + destination_account: Pubkey, + ) -> MarginfiResult { + self.emissions_destination_account = destination_account; + Ok(()) + } + pub fn can_be_closed(&self) -> bool { let is_disabled = self.get_flag(DISABLED_FLAG); let only_has_empty_balances = self @@ -1457,6 +1468,7 @@ mod test { let mut acc = MarginfiAccount { group: group.into(), authority: authority.into(), + emissions_destination_account: Pubkey::default(), lending_account: LendingAccount { balances: [Balance { active: 1, @@ -1473,7 +1485,7 @@ mod test { }, account_flags: TRANSFER_AUTHORITY_ALLOWED_FLAG, _padding0: [0; 32], - _padding1: [0; 31], + _padding1: [0; 27], }; assert!(acc.get_flag(TRANSFER_AUTHORITY_ALLOWED_FLAG)); diff --git a/programs/marginfi/tests/misc/regression.rs b/programs/marginfi/tests/misc/regression.rs index fb40f92ed..6b78d6a07 100644 --- a/programs/marginfi/tests/misc/regression.rs +++ b/programs/marginfi/tests/misc/regression.rs @@ -46,7 +46,7 @@ async fn account_field_values_reg() -> anyhow::Result<()> { ); assert_eq!(account.account_flags, 0); assert_eq!(account._padding0, [0; 32]); - assert_eq!(account._padding1, [0; 31]); + assert_eq!(account._padding1, [0; 27]); let balance_1 = account.lending_account.balances[0]; assert!(balance_1.is_active()); @@ -124,7 +124,7 @@ async fn account_field_values_reg() -> anyhow::Result<()> { ); assert_eq!(account.account_flags, 0); assert_eq!(account._padding0, [0; 32]); - assert_eq!(account._padding1, [0; 31]); + assert_eq!(account._padding1, [0; 27]); let balance_1 = account.lending_account.balances[0]; assert!(balance_1.is_active()); @@ -202,7 +202,7 @@ async fn account_field_values_reg() -> anyhow::Result<()> { ); assert_eq!(account.account_flags, 0); assert_eq!(account._padding0, [0; 32]); - assert_eq!(account._padding1, [0; 31]); + assert_eq!(account._padding1, [0; 27]); let balance_1 = account.lending_account.balances[0]; assert!(!balance_1.is_active()); From c8e33fe6e98605949d56c916b696132ed0ced654 Mon Sep 17 00:00:00 2001 From: jgur-psyops Date: Thu, 13 Feb 2025 18:17:01 -0500 Subject: [PATCH 41/59] Convert permissionless emissions to use a wallet/ATA approach, tests WIP --- programs/marginfi/src/errors.rs | 2 - .../marginfi_account/emissions.rs | 77 +++++--------- .../marginfi/src/state/marginfi_account.rs | 13 +-- scripts/test-program-remix.sh | 100 ++++++++++++++++++ tests/rootHooks.ts | 2 +- 5 files changed, 132 insertions(+), 62 deletions(-) create mode 100755 scripts/test-program-remix.sh diff --git a/programs/marginfi/src/errors.rs b/programs/marginfi/src/errors.rs index 58936d70b..d5d3efafd 100644 --- a/programs/marginfi/src/errors.rs +++ b/programs/marginfi/src/errors.rs @@ -106,8 +106,6 @@ pub enum MarginfiError { StakePoolValidationFailed, #[msg("Invalid emissions destination account")] // 6051 InvalidEmissionsDestinationAccount, - #[msg("Emissions destination account is already set")] // 6052 - EmissionsDestinationAccountAlreadySet, } impl From for ProgramError { diff --git a/programs/marginfi/src/instructions/marginfi_account/emissions.rs b/programs/marginfi/src/instructions/marginfi_account/emissions.rs index 5017865bf..c1e912447 100644 --- a/programs/marginfi/src/instructions/marginfi_account/emissions.rs +++ b/programs/marginfi/src/instructions/marginfi_account/emissions.rs @@ -1,6 +1,7 @@ use anchor_lang::{prelude::*, Accounts, ToAccountInfo}; -use anchor_spl::token_interface::{ - transfer_checked, Mint, TokenAccount, TokenInterface, TransferChecked, +use anchor_spl::{ + associated_token::get_associated_token_address_with_program_id, + token_interface::{transfer_checked, Mint, TokenAccount, TokenInterface, TransferChecked}, }; use crate::{ @@ -154,48 +155,25 @@ pub fn marginfi_account_update_emissions_destination_account<'info>( MarginfiError::AccountDisabled ); - let emissions_destination_account = &marginfi_account.emissions_destination_account; - - // Ensure that the emissions_destination_account was not previously set by the user - check!( - emissions_destination_account.eq(&Pubkey::default()), - MarginfiError::EmissionsDestinationAccountAlreadySet - ); - - let _ = marginfi_account - .update_emissions_destination_account(ctx.accounts.destination_account.key()); + marginfi_account.emissions_destination_account = ctx.accounts.destination_account.key(); Ok(()) } #[derive(Accounts)] pub struct MarginfiAccountUpdateEmissionsDestinationAccount<'info> { - pub marginfi_group: AccountLoader<'info, MarginfiGroup>, - #[account( mut, - constraint = marginfi_account.load()?.group == marginfi_group.key(), + has_one = authority )] pub marginfi_account: AccountLoader<'info, MarginfiAccount>, - #[account( - address = marginfi_account.load()?.authority, - )] - pub signer: Signer<'info>, - - #[account( - mut, - constraint = bank.load()?.group == marginfi_group.key(), - )] - pub bank: AccountLoader<'info, Bank>, - - #[account( - address = bank.load()?.emissions_mint - )] - pub emissions_mint: InterfaceAccount<'info, Mint>, + pub authority: Signer<'info>, - #[account(mut)] - pub destination_account: Box>, + /// User's earned emissions will be sent to the cannonical ATA of this wallet. + /// + /// CHECK: Completely unchecked, user picks a destination without restrictions + pub destination_account: AccountInfo<'info>, } /// Permissionlessly withdraw emissions to user emissions_destination_account @@ -209,20 +187,24 @@ pub fn lending_account_withdraw_emissions_permissionless<'info>( MarginfiError::AccountDisabled ); - let emissions_destination_account = &marginfi_account.emissions_destination_account; + let emissions_dest_wallet = &marginfi_account.emissions_destination_account; + let emissions_mint = &ctx.accounts.emissions_mint.key(); + let emissions_token_program = &ctx.accounts.token_program.key(); // Ensure that the emissions_destination_account was previously set by the user check!( - !emissions_destination_account.eq(&Pubkey::default()), + !emissions_dest_wallet.eq(&Pubkey::default()), MarginfiError::InvalidEmissionsDestinationAccount ); - // Ensure that the destination_account matches the stored one in MarginfiAccount + // Ensure the destination is the cannonical ATA of the user-specified wallet + let ata_expected = get_associated_token_address_with_program_id( + emissions_dest_wallet, + emissions_mint, + emissions_token_program, + ); check!( - ctx.accounts - .destination_account - .key() - .eq(&emissions_destination_account), + ata_expected == ctx.accounts.destination_account.key(), MarginfiError::InvalidEmissionsDestinationAccount ); @@ -268,28 +250,21 @@ pub fn lending_account_withdraw_emissions_permissionless<'info>( #[derive(Accounts)] pub struct LendingAccountWithdrawEmissionsPermissionless<'info> { - pub marginfi_group: AccountLoader<'info, MarginfiGroup>, + pub group: AccountLoader<'info, MarginfiGroup>, #[account( mut, - constraint = marginfi_account.load()?.group == marginfi_group.key(), + has_one = group )] pub marginfi_account: AccountLoader<'info, MarginfiAccount>, - #[account( - address = marginfi_group.load()?.admin, - )] - pub admin: Signer<'info>, - #[account( mut, - constraint = bank.load()?.group == marginfi_group.key(), + has_one = group, + has_one = emissions_mint )] pub bank: AccountLoader<'info, Bank>, - #[account( - address = bank.load()?.emissions_mint - )] pub emissions_mint: InterfaceAccount<'info, Mint>, #[account( @@ -313,7 +288,9 @@ pub struct LendingAccountWithdrawEmissionsPermissionless<'info> { bump, )] pub emissions_vault: Box>, + #[account(mut)] pub destination_account: Box>, + pub token_program: Interface<'info, TokenInterface>, } diff --git a/programs/marginfi/src/state/marginfi_account.rs b/programs/marginfi/src/state/marginfi_account.rs index a56515ef9..31cba00f7 100644 --- a/programs/marginfi/src/state/marginfi_account.rs +++ b/programs/marginfi/src/state/marginfi_account.rs @@ -42,7 +42,10 @@ pub struct MarginfiAccount { /// - FLASHLOAN_ENABLED_FLAG (1 << 2) /// - TRANSFER_AUTHORITY_ALLOWED_FLAG (1 << 3) pub account_flags: u64, // 8 - /// emissions rewards will be withdrawn to the emissions_destination_account + /// Set with `update_emissions_destination_account`. Emissions rewards can be withdrawn to the + /// cannonical ATA of this wallet without the user's input (withdraw_emissions_permissionless). + /// If pubkey default, the user has not opted into this feature, and must claim emissions + /// manually (withdraw_emissions). pub emissions_destination_account: Pubkey, // 32 pub _padding0: [u64; 32], // 504 pub _padding1: [u64; 27], @@ -132,14 +135,6 @@ impl MarginfiAccount { Ok(()) } - pub fn update_emissions_destination_account( - &mut self, - destination_account: Pubkey, - ) -> MarginfiResult { - self.emissions_destination_account = destination_account; - Ok(()) - } - pub fn can_be_closed(&self) -> bool { let is_disabled = self.get_flag(DISABLED_FLAG); let only_has_empty_balances = self diff --git a/scripts/test-program-remix.sh b/scripts/test-program-remix.sh new file mode 100755 index 000000000..01a6cc122 --- /dev/null +++ b/scripts/test-program-remix.sh @@ -0,0 +1,100 @@ +#!/usr/bin/env bash +set -euo pipefail + +# Fancy pants help screen +usage() { + cat < [-f ] [-l ] [-c ] [-- ] + +Options: + -p, --program Cargo package name to test (required) + -f, --features Comma-separated feature flags to pass to nextest (default: "test,test-bpf") + -l, --loglevel Log level for stable_log (e.g. "warn", default: "debug") + -c, --chain Chain to test against (e.g., mainnet-beta). This sets the TEST_CHAIN env variable. + -- Anything after this is passed as extra test flags (such as filters or test harness flags). +EOF + exit 1 +} + +# Default values. +features="test,test-bpf" +loglevel="debug" +program="" +chain="" +extra_args=() + +# Parse command-line arguments. +while [[ "$#" -gt 0 ]]; do + case "$1" in + -p|--program) + if [[ -z "${2-}" ]]; then + echo "Error: --program requires a value." + usage + fi + program="$2" + shift 2 + ;; + -f|--features) + if [[ -z "${2-}" ]]; then + echo "Error: --features requires a value." + usage + fi + features="$2" + shift 2 + ;; + -l|--loglevel) + if [[ -z "${2-}" ]]; then + echo "Error: --loglevel requires a value." + usage + fi + loglevel="$2" + shift 2 + ;; + -c|--chain) + if [[ -z "${2-}" ]]; then + echo "Error: --chain requires a value." + usage + fi + chain="$2" + shift 2 + ;; + --) + shift + extra_args=("$@") + break + ;; + *) + echo "Unknown parameter: $1" + usage + ;; + esac +done + +if [[ -z "$program" ]]; then + echo "Error: A program (cargo package) must be specified." + usage +fi + +# Determine the repository root. +ROOT=$(git rev-parse --show-toplevel 2>/dev/null || echo ".") +cd "$ROOT" + +# Set environment variables for the tests. +export SBF_OUT_DIR="$ROOT/target/deploy" +export RUST_LOG="solana_runtime::message_processor::stable_log=${loglevel}" + +# Set the chain environment variable if provided. +if [[ -n "$chain" ]]; then + export TEST_CHAIN="$chain" +fi + +# Build the cargo nextest command. +cmd=(cargo nextest run --no-fail-fast --package "$program" --features "$features") + +# Append any extra arguments (these are passed after '--') +if [ "${#extra_args[@]}" -gt 0 ]; then + cmd+=(-- "${extra_args[@]}") +fi + +echo "Running: ${cmd[*]}" +exec "${cmd[@]}" diff --git a/tests/rootHooks.ts b/tests/rootHooks.ts index 3d3903d91..2dd43d303 100644 --- a/tests/rootHooks.ts +++ b/tests/rootHooks.ts @@ -83,7 +83,7 @@ let copyKeys: PublicKey[] = []; export const mochaHooks = { beforeAll: async () => { - // If this is false, you are in the wrong environment to run this test suite, try polyfill. + // If false, you are in the wrong environment to run this, update Node or try polyfill console.log("Environment supports crypto: ", !!global.crypto?.subtle); const mrgnProgram = workspace.Marginfi as Program; From 736560b1514cb4d0dff8196254df9f1718f00166 Mon Sep 17 00:00:00 2001 From: jgur-psyops Date: Sat, 15 Feb 2025 03:29:26 -0500 Subject: [PATCH 42/59] WIP permissionless emissions test --- Anchor.toml | 4 +- guides/GETTING_STARTED_DEV.md | 6 ++ tests/rootHooks.ts | 1 + tests/s08_liquidate.spec.ts | 4 +- tests/s09_emissions.spec.ts | 108 ++++++++++++++++++++++++++++++++++ 5 files changed, 119 insertions(+), 4 deletions(-) create mode 100644 tests/s09_emissions.spec.ts diff --git a/Anchor.toml b/Anchor.toml index 5d7661d37..af4a92199 100644 --- a/Anchor.toml +++ b/Anchor.toml @@ -26,10 +26,10 @@ wallet = "~/.config/solana/id.json" # (remove RUST_LOG= to see bankRun logs) [scripts] -test = "RUST_LOG= yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/*.spec.ts --exit --require tests/rootHooks.ts" +# test = "RUST_LOG= yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/*.spec.ts --exit --require tests/rootHooks.ts" # Staked collateral tests only -# test = "RUST_LOG= yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/s*.spec.ts --exit --require tests/rootHooks.ts" +test = "RUST_LOG= yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/s*.spec.ts --exit --require tests/rootHooks.ts" [test] startup_wait = 60000 diff --git a/guides/GETTING_STARTED_DEV.md b/guides/GETTING_STARTED_DEV.md index 5bc476e8e..509d1f1ef 100644 --- a/guides/GETTING_STARTED_DEV.md +++ b/guides/GETTING_STARTED_DEV.md @@ -36,6 +36,12 @@ anchor build -p marginfi ./scripts/test-program.sh marginfi mainnet-beta ``` +### Customize Your Rust testing experience: + +``` +./scripts/test-program-remix.sh -p marginfi -l warn -c mainnet-beta -f mainnet-beta +``` + ### To just one Rust test: ``` diff --git a/tests/rootHooks.ts b/tests/rootHooks.ts index 2dd43d303..2617163bc 100644 --- a/tests/rootHooks.ts +++ b/tests/rootHooks.ts @@ -194,6 +194,7 @@ export const mochaHooks = { setupUserOptions ); copyKeys.push(groupAdmin.usdcAccount); + copyKeys.push(groupAdmin.tokenBAccount); copyKeys.push(groupAdmin.wallet.publicKey); for (let i = 0; i < numUsers; i++) { diff --git a/tests/s08_liquidate.spec.ts b/tests/s08_liquidate.spec.ts index f5f87899e..bc666f602 100644 --- a/tests/s08_liquidate.spec.ts +++ b/tests/s08_liquidate.spec.ts @@ -219,11 +219,11 @@ describe("Liquidate user (including staked assets)", () => { riskTier: defaultSettings.riskTier, }; let editTx = new Transaction().add( - await editStakedSettings(groupAdmin.mrgnProgram, { + await editStakedSettings(groupAdmin.mrgnBankrunProgram, { settingsKey: settingsKey, settings: settings, }), - await propagateStakedSettings(program, { + await propagateStakedSettings(bankrunProgram, { settings: settingsKey, bank: assetBankKey, oracle: defaultSettings.oracle, diff --git a/tests/s09_emissions.spec.ts b/tests/s09_emissions.spec.ts new file mode 100644 index 000000000..174f1ef33 --- /dev/null +++ b/tests/s09_emissions.spec.ts @@ -0,0 +1,108 @@ +/** + * The "point" of this test is to additional test emissions with Bankrun time warps, but it also + * serves a secondary purpose of validating that emissions works with eccentric bank setups like + * staked collateral. + */ + +import { + AnchorProvider, + BN, + getProvider, + Program, + Wallet, + workspace, +} from "@coral-xyz/anchor"; +import { LAMPORTS_PER_SOL, PublicKey, Transaction } from "@solana/web3.js"; +import { Marginfi } from "../target/types/marginfi"; +import { + bankKeypairA, + bankKeypairSol, + bankKeypairUsdc, + bankrunContext, + bankrunProgram, + bankRunProvider, + banksClient, + ecosystem, + groupAdmin, + marginfiGroup, + oracles, + users, + validators, + verbose, +} from "./rootHooks"; +import { + assertBNApproximately, + assertI80F48Equal, + getTokenBalance, +} from "./utils/genericTests"; +import { assert } from "chai"; +import { liquidateIx } from "./utils/user-instructions"; +import { USER_ACCOUNT } from "./utils/mocks"; +import { getBankrunBlockhash } from "./utils/spl-staking-utils"; +import { + bigNumberToWrappedI80F48, + getMint, + wrappedI80F48toBigNumber, +} from "@mrgnlabs/mrgn-common"; +import { + defaultStakedInterestSettings, + EMISSIONS_FLAG_BORROW_ACTIVE, + EMISSIONS_FLAG_LENDING_ACTIVE, + StakedSettingsEdit, +} from "./utils/types"; +import { + editStakedSettings, + propagateStakedSettings, + setupEmissions, +} from "./utils/group-instructions"; +import { deriveStakedSettings } from "./utils/pdas"; +import { getStakeAccount } from "./utils/stake-utils"; +import { createMintToInstruction } from "@solana/spl-token"; + +describe("Set up emissions on staked collateral assets", () => { + const program = workspace.Marginfi as Program; + const provider = getProvider() as AnchorProvider; + const wallet = provider.wallet as Wallet; + + const emissionRate = new BN(500_000 * 10 ** ecosystem.tokenBDecimals); + const totalEmissions = new BN(1_000_000 * 10 ** ecosystem.tokenBDecimals); + + before(async () => { + // Fund the group admin with a bunch of Token B for emissions + let fundTx: Transaction = new Transaction().add( + createMintToInstruction( + ecosystem.tokenBMint.publicKey, + groupAdmin.tokenBAccount, + wallet.publicKey, + BigInt(100_000_000) * BigInt(10 ** ecosystem.tokenBDecimals) + ) + ); + fundTx.recentBlockhash = await getBankrunBlockhash(bankrunContext); + fundTx.sign(wallet.payer); + await banksClient.processTransaction(fundTx); + + let setupTx = new Transaction().add( + await setupEmissions(groupAdmin.mrgnBankrunProgram, { + bank: validators[0].bank, + emissionsMint: ecosystem.tokenBMint.publicKey, + fundingAccount: groupAdmin.tokenBAccount, + // Note: borrow emissions do nothing for staked collateral + emissionsFlags: new BN( + EMISSIONS_FLAG_BORROW_ACTIVE + EMISSIONS_FLAG_LENDING_ACTIVE + ), + emissionsRate: emissionRate, + totalEmissions: totalEmissions, + }) + ); + setupTx.recentBlockhash = await getBankrunBlockhash(bankrunContext); + setupTx.sign(groupAdmin.wallet); + await banksClient.processTransaction(setupTx); + }); + + it("(user 1) liquidates user 2 with staked SOL against their SOL position - succeeds", async () => { + // TODO + console.log("hello world"); + }); +}); + +// TODO: 0,1 - should fail From 3a4273d3a07694f99cc998eeaaad0618d95c09d9 Mon Sep 17 00:00:00 2001 From: Jon Gurary <91919816+jgur-psyops@users.noreply.github.com> Date: Mon, 17 Feb 2025 23:59:41 -0500 Subject: [PATCH 43/59] Deploy 0.1.1 to mainnet (#305) * Record timestamp of mainnet 0.1.1 upgrade --- DEPLOY_GUIDE.md | 1 + 1 file changed, 1 insertion(+) diff --git a/DEPLOY_GUIDE.md b/DEPLOY_GUIDE.md index adb4af228..9f3a21e56 100644 --- a/DEPLOY_GUIDE.md +++ b/DEPLOY_GUIDE.md @@ -42,3 +42,4 @@ Here we list recent deployments to staging/mainnet. The hash is always the first ### MAINNET * 0.1.0-alpha mainnet on Fev 3, 2024 ~2:45ET -- Hash: ea5d15 +* 0.1.1: Feb 17, 2025 ~3:00pm ET -- Hash: 03455c From 15455fae637cb70cbb3de21b178dabb9f1303cb2 Mon Sep 17 00:00:00 2001 From: jgur-psyops Date: Tue, 18 Feb 2025 01:35:26 -0500 Subject: [PATCH 44/59] Claim emissions and permissionless claim tests --- Cargo.lock | 2 +- programs/marginfi/Cargo.toml | 2 +- .../marginfi_account/emissions.rs | 2 + tests/rootHooks.ts | 2 +- tests/s03_deposit.spec.ts | 2 +- tests/s07_withdraw_repay.spec.ts | 8 +- tests/s09_emissions.spec.ts | 427 +++++++++++++++++- tests/utils/user-instructions.ts | 69 +++ 8 files changed, 497 insertions(+), 17 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f08b48bc0..32a24c183 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2995,7 +2995,7 @@ dependencies = [ [[package]] name = "marginfi" -version = "0.1.1" +version = "0.1.2" dependencies = [ "anchor-lang 0.29.0", "anchor-lang 0.30.1", diff --git a/programs/marginfi/Cargo.toml b/programs/marginfi/Cargo.toml index 670fabf75..cf7b99ac6 100644 --- a/programs/marginfi/Cargo.toml +++ b/programs/marginfi/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "marginfi" -version = "0.1.1" +version = "0.1.2" description = "Created with Anchor" edition = "2021" diff --git a/programs/marginfi/src/instructions/marginfi_account/emissions.rs b/programs/marginfi/src/instructions/marginfi_account/emissions.rs index c1e912447..966dde887 100644 --- a/programs/marginfi/src/instructions/marginfi_account/emissions.rs +++ b/programs/marginfi/src/instructions/marginfi_account/emissions.rs @@ -289,6 +289,8 @@ pub struct LendingAccountWithdrawEmissionsPermissionless<'info> { )] pub emissions_vault: Box>, + /// CHECK: Handler will validate this is cannonical ATA of the `emissions_destination_account` + /// registered on `marginfi_account` #[account(mut)] pub destination_account: Box>, diff --git a/tests/rootHooks.ts b/tests/rootHooks.ts index 2617163bc..9738e0a0c 100644 --- a/tests/rootHooks.ts +++ b/tests/rootHooks.ts @@ -312,7 +312,7 @@ const addValidator = (validator: Validator) => { const addUser = (user: MockUser) => { users.push(user); copyKeys.push(user.tokenAAccount); - // copyKeys.push(user.tokenBAccount); + copyKeys.push(user.tokenBAccount); copyKeys.push(user.usdcAccount); copyKeys.push(user.wallet.publicKey); copyKeys.push(user.wsolAccount); diff --git a/tests/s03_deposit.spec.ts b/tests/s03_deposit.spec.ts index 2590fc5da..2f4d562d7 100644 --- a/tests/s03_deposit.spec.ts +++ b/tests/s03_deposit.spec.ts @@ -235,7 +235,7 @@ describe("Deposit funds (included staked assets)", () => { tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); tx.sign(user.wallet); - await banksClient.tryProcessTransaction(tx); + await banksClient.processTransaction(tx); // Verify the deposit worked and the entry exists const userAcc = await bankrunProgram.account.marginfiAccount.fetch( diff --git a/tests/s07_withdraw_repay.spec.ts b/tests/s07_withdraw_repay.spec.ts index 9afc233d4..296e69caa 100644 --- a/tests/s07_withdraw_repay.spec.ts +++ b/tests/s07_withdraw_repay.spec.ts @@ -139,7 +139,7 @@ describe("Withdraw staked asset", () => { userAccount ); const balances = userAcc.lendingAccount.balances; - assert.equal(balances[0].active, true); + assert.equal(balances[0].active, 1); // TODO assert other balances changes as expected... }); @@ -179,7 +179,7 @@ describe("Withdraw staked asset", () => { userAccount ); const balances = userAcc.lendingAccount.balances; - assert.equal(balances[1].active, true); + assert.equal(balances[1].active, 1); // TODO assert other balances changes as expected... }); @@ -231,7 +231,7 @@ describe("Withdraw staked asset", () => { ); const balances = userAcc.lendingAccount.balances; assertI80F48Equal(balances[1].liabilityShares, 0); - assert.equal(balances[1].active, false); + assert.equal(balances[1].active, 0); // TODO assert other balances changes as expected... }); @@ -284,7 +284,7 @@ describe("Withdraw staked asset", () => { ); const balances = userAcc.lendingAccount.balances; assertI80F48Equal(balances[0].assetShares, 0); - assert.equal(balances[0].active, false); + assert.equal(balances[0].active, 0); // TODO assert other balances changes as expected... }); diff --git a/tests/s09_emissions.spec.ts b/tests/s09_emissions.spec.ts index 174f1ef33..d1195148e 100644 --- a/tests/s09_emissions.spec.ts +++ b/tests/s09_emissions.spec.ts @@ -12,7 +12,13 @@ import { Wallet, workspace, } from "@coral-xyz/anchor"; -import { LAMPORTS_PER_SOL, PublicKey, Transaction } from "@solana/web3.js"; +import { + Keypair, + LAMPORTS_PER_SOL, + PublicKey, + SystemProgram, + Transaction, +} from "@solana/web3.js"; import { Marginfi } from "../target/types/marginfi"; import { bankKeypairA, @@ -25,22 +31,34 @@ import { ecosystem, groupAdmin, marginfiGroup, + numUsers, oracles, users, validators, verbose, } from "./rootHooks"; import { + assertBankrunTxFailed, assertBNApproximately, assertI80F48Equal, + assertKeyDefault, + assertKeysEqual, getTokenBalance, } from "./utils/genericTests"; import { assert } from "chai"; -import { liquidateIx } from "./utils/user-instructions"; +import { + liquidateIx, + settleEmissionsIx, + updateEmissionsDestination, + withdrawEmissionsIx, + withdrawEmissionsPermissionlessIx, +} from "./utils/user-instructions"; import { USER_ACCOUNT } from "./utils/mocks"; import { getBankrunBlockhash } from "./utils/spl-staking-utils"; import { bigNumberToWrappedI80F48, + createAssociatedTokenAccountInstruction, + getAssociatedTokenAddressSync, getMint, wrappedI80F48toBigNumber, } from "@mrgnlabs/mrgn-common"; @@ -56,17 +74,28 @@ import { setupEmissions, } from "./utils/group-instructions"; import { deriveStakedSettings } from "./utils/pdas"; -import { getStakeAccount } from "./utils/stake-utils"; +import { getEpochAndSlot, getStakeAccount } from "./utils/stake-utils"; import { createMintToInstruction } from "@solana/spl-token"; describe("Set up emissions on staked collateral assets", () => { - const program = workspace.Marginfi as Program; const provider = getProvider() as AnchorProvider; const wallet = provider.wallet as Wallet; const emissionRate = new BN(500_000 * 10 ** ecosystem.tokenBDecimals); const totalEmissions = new BN(1_000_000 * 10 ** ecosystem.tokenBDecimals); + // NOTE: these change slightly due to interest, but not enough to really matter for test purposes + let userDeposits: number[] = []; + let netDeposits: number; + + /// Some wallet the user wants to use for emissions. This could also be their own wallet, user can + /// pick arbitrarily. + const externalWallet: Keypair = Keypair.generate(); + const bAta = getAssociatedTokenAddressSync( + ecosystem.tokenBMint.publicKey, + externalWallet.publicKey + ); + before(async () => { // Fund the group admin with a bunch of Token B for emissions let fundTx: Transaction = new Transaction().add( @@ -97,12 +126,392 @@ describe("Set up emissions on staked collateral assets", () => { setupTx.recentBlockhash = await getBankrunBlockhash(bankrunContext); setupTx.sign(groupAdmin.wallet); await banksClient.processTransaction(setupTx); + + // Find all the validator 0 positions so we know how much each user is owed... + for (let i = 0; i < numUsers; i++) { + const userAccount = users[i].accounts.get(USER_ACCOUNT); + + const acc = await bankrunProgram.account.marginfiAccount.fetch( + userAccount + ); + const balances = acc.lendingAccount.balances; + let foundBalance = false; + for (let i = 0; i < balances.length; i++) { + if (balances[i].bankPk.equals(validators[0].bank)) { + const shares = wrappedI80F48toBigNumber( + balances[i].assetShares + ).toNumber(); + if (verbose) { + console.log("user [" + i + "] shares: " + shares); + } + userDeposits.push(shares); + foundBalance = true; + } + } + + // If the search loop above fails, then that user doesn't have any val 0 balance + if (!foundBalance) { + userDeposits.push(0); + if (verbose) { + console.log("user [" + i + "] has no validator 0 bank position"); + } + } + } + + const bankAcc = await bankrunProgram.account.bank.fetch(validators[0].bank); + netDeposits = wrappedI80F48toBigNumber(bankAcc.totalAssetShares).toNumber(); + if (verbose) { + console.log("net shares oustanding: " + netDeposits); + console.log(""); + } + }); + + it("(user 2) claims emissions when no time elapsed - nothing happens", async () => { + const user = users[2]; + const userAccount = user.accounts.get(USER_ACCOUNT); + + const tokenBefore = await getTokenBalance( + bankRunProvider, + users[2].tokenBAccount + ); + + let tx = new Transaction().add( + await settleEmissionsIx(user.mrgnBankrunProgram, { + marginfiAccount: userAccount, + bank: validators[0].bank, + }), + await withdrawEmissionsIx(user.mrgnBankrunProgram, { + marginfiAccount: userAccount, + bank: validators[0].bank, + tokenAccount: users[2].tokenBAccount, + }) + ); + + tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); + tx.sign(user.wallet); + await banksClient.processTransaction(tx); + + const tokenAfter = await getTokenBalance( + bankRunProvider, + users[2].tokenBAccount + ); + const diff = tokenAfter - tokenBefore; + assert.equal(diff, 0); + + if (verbose) { + console.log("User 2 claimed token B emissions"); + console.log( + "before: " + tokenBefore + " after: " + tokenAfter + " diff " + diff + ); + } }); - it("(user 1) liquidates user 2 with staked SOL against their SOL position - succeeds", async () => { - // TODO - console.log("hello world"); + it("time elapses", async () => { + let { epoch } = await getEpochAndSlot(banksClient); + const warpTo = BigInt(epoch + 5); + bankrunContext.warpToEpoch(warpTo); + if (verbose) { + console.log("Warped to epoch: " + warpTo); + } }); -}); -// TODO: 0,1 - should fail + let user2Claim: number; + it("(user 2) claims again after some time - happy path", async () => { + const user = users[2]; + const userAccount = user.accounts.get(USER_ACCOUNT); + + const tokenBefore = await getTokenBalance( + bankRunProvider, + user.tokenBAccount + ); + + let tx = new Transaction().add( + await settleEmissionsIx(user.mrgnBankrunProgram, { + marginfiAccount: userAccount, + bank: validators[0].bank, + }), + await withdrawEmissionsIx(user.mrgnBankrunProgram, { + marginfiAccount: userAccount, + bank: validators[0].bank, + tokenAccount: user.tokenBAccount, + }) + ); + + tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); + tx.sign(user.wallet); + await banksClient.processTransaction(tx); + + const tokenAfter = await getTokenBalance( + bankRunProvider, + user.tokenBAccount + ); + const diff = tokenAfter - tokenBefore; + user2Claim = diff; + assert.isAtLeast(diff, 100); // assures the gain is non-zero + + const expectedShare = (userDeposits[2] / netDeposits) * 100; + + if (verbose) { + console.log("User 2 claimed token B emissions"); + console.log( + "User expected share of emissions: " + expectedShare.toFixed(2) + "%" + ); + console.log( + "before: " + tokenBefore + " after: " + tokenAfter + " diff " + diff + ); + } + }); + + it("(user 1) claims at the same time - gets proportional fair share", async () => { + const user = users[1]; + const userAccount = user.accounts.get(USER_ACCOUNT); + + const tokenBefore = await getTokenBalance( + bankRunProvider, + user.tokenBAccount + ); + + let tx = new Transaction().add( + await settleEmissionsIx(user.mrgnBankrunProgram, { + marginfiAccount: userAccount, + bank: validators[0].bank, + }), + await withdrawEmissionsIx(user.mrgnBankrunProgram, { + marginfiAccount: userAccount, + bank: validators[0].bank, + tokenAccount: user.tokenBAccount, + }) + ); + + tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); + tx.sign(user.wallet); + await banksClient.processTransaction(tx); + + const tokenAfter = await getTokenBalance( + bankRunProvider, + user.tokenBAccount + ); + const diff = tokenAfter - tokenBefore; + const netClaimed = user2Claim + diff; + const claimedShareActual = (diff / netClaimed) * 100; + assert.isAtLeast(diff, 100); + + // This is true with 2 users.... + const expectedUser1Claim = user2Claim * (userDeposits[1] / userDeposits[2]); + // User 1 gets ~ + assert.approximately( + diff, + expectedUser1Claim, + expectedUser1Claim * 0.01, + "User 1's claim is not the expected proportion of user 2's claim" + ); + + const expectedShare = (userDeposits[1] / netDeposits) * 100; + + if (verbose) { + console.log("User 1 claimed token B emissions"); + console.log( + "User expected share of emissions: " + expectedShare.toFixed(2) + "%" + ); + console.log( + "before: " + tokenBefore + " after: " + tokenAfter + " diff " + diff + ); + console.log("actual claim share: " + claimedShareActual.toFixed(2) + "%"); + } + }); + + it("(user 2) settle is always permissionless (does nothing here, no time elapsed)", async () => { + const user = users[2]; + const userAccount = user.accounts.get(USER_ACCOUNT); + let tx = new Transaction().add( + await settleEmissionsIx(user.mrgnBankrunProgram, { + marginfiAccount: userAccount, + bank: validators[0].bank, + }) + ); + tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); + tx.sign(wallet.payer); // Provider wallet has to sign to pay tx fees + await banksClient.processTransaction(tx); + }); + + // TODO explain why this happens in more detail: + + // Note: You may assume the claim amount should be the same the second time around, since the same + // number of epochs have elapsed, but that's not typically the case (timing issues, interest + // growth, etc) + it("time elapses", async () => { + let { epoch } = await getEpochAndSlot(banksClient); + const warpTo = BigInt(epoch + 5); + bankrunContext.warpToEpoch(warpTo); + if (verbose) { + console.log("Warped to epoch: " + warpTo); + } + }); + + it("(user 2) sets up a wallet to accept permissionless emission claims", async () => { + // Note that the payer wallet pays here, just to get some SOL into this wallet for rent since + // this is what most users would do + let tx = new Transaction().add( + SystemProgram.transfer({ + fromPubkey: wallet.publicKey, + toPubkey: externalWallet.publicKey, + lamports: 0.1 * LAMPORTS_PER_SOL, + }), + createAssociatedTokenAccountInstruction( + wallet.publicKey, + bAta, + externalWallet.publicKey, + ecosystem.tokenBMint.publicKey + ) + ); + + tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); + tx.sign(wallet.payer); + await banksClient.processTransaction(tx); + }); + + it("(user 2) permissionless withdraw before opt-in - fails", async () => { + const user = users[2]; + const userAccount = user.accounts.get(USER_ACCOUNT); + + let tx = new Transaction().add( + await settleEmissionsIx(user.mrgnBankrunProgram, { + marginfiAccount: userAccount, + bank: validators[0].bank, + }), + await withdrawEmissionsPermissionlessIx(user.mrgnBankrunProgram, { + marginfiAccount: userAccount, + bank: validators[0].bank, + tokenAccount: bAta, + }) + ); + + tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); + tx.sign(user.wallet); + let result = await banksClient.tryProcessTransaction(tx); + + // InvalidEmissionsDestinationAccount 6051 + assertBankrunTxFailed(result, "0x17a3"); + }); + + it("(user 2) registers permissionless settle to some wallet - (happy path)", async () => { + const user = users[2]; + const userAccount = user.accounts.get(USER_ACCOUNT); + const accBefore = await bankrunProgram.account.marginfiAccount.fetch( + userAccount + ); + assertKeyDefault(accBefore.emissionsDestinationAccount); + + let tx = new Transaction().add( + await updateEmissionsDestination(user.mrgnBankrunProgram, { + marginfiAccount: userAccount, + destinationAccount: externalWallet.publicKey, + }) + ); + tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); + tx.sign(user.wallet); + await banksClient.processTransaction(tx); + + const accAfter = await bankrunProgram.account.marginfiAccount.fetch( + userAccount + ); + assertKeysEqual( + accAfter.emissionsDestinationAccount, + externalWallet.publicKey + ); + }); + + let user2PermissionlessClaim: number; + it("(user 2) permissionless withdraw after opt-in - happy path", async () => { + const user = users[2]; + const userAccount = user.accounts.get(USER_ACCOUNT); + + // Note: tokens are now going to the B ATA of the external wallet they picked + const tokenBefore = await getTokenBalance(bankRunProvider, bAta); + + let tx = new Transaction().add( + await settleEmissionsIx(user.mrgnBankrunProgram, { + marginfiAccount: userAccount, + bank: validators[0].bank, + }), + await withdrawEmissionsPermissionlessIx(user.mrgnBankrunProgram, { + marginfiAccount: userAccount, + bank: validators[0].bank, + tokenAccount: bAta, + }) + ); + + tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); + tx.sign(wallet.payer); // Note: not the user! + await banksClient.processTransaction(tx); + + const tokenAfter = await getTokenBalance(bankRunProvider, bAta); + const diff = tokenAfter - tokenBefore; + user2PermissionlessClaim = diff; + + if (verbose) { + console.log("User 2 claimed token B emissions permissionlessly"); + console.log( + "before: " + tokenBefore + " after: " + tokenAfter + " diff " + diff + ); + } + }); + + it("(user 1) can still claim with permission - still gets proportional fair share", async () => { + const user = users[1]; + const userAccount = user.accounts.get(USER_ACCOUNT); + + const tokenBefore = await getTokenBalance( + bankRunProvider, + user.tokenBAccount + ); + + let tx = new Transaction().add( + await settleEmissionsIx(user.mrgnBankrunProgram, { + marginfiAccount: userAccount, + bank: validators[0].bank, + }), + await withdrawEmissionsIx(user.mrgnBankrunProgram, { + marginfiAccount: userAccount, + bank: validators[0].bank, + tokenAccount: user.tokenBAccount, + }) + ); + + tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); + tx.sign(user.wallet); + await banksClient.processTransaction(tx); + + const tokenAfter = await getTokenBalance( + bankRunProvider, + user.tokenBAccount + ); + const diff = tokenAfter - tokenBefore; + const netClaimed = user2PermissionlessClaim + diff; + const claimedShareActual = (diff / netClaimed) * 100; + assert.isAtLeast(diff, 100); + + const expectedShare = (userDeposits[1] / netDeposits) * 100; + + if (verbose) { + console.log("User 1 claimed token B emissions"); + console.log( + "User expected share of emissions: " + expectedShare.toFixed(2) + "%" + ); + console.log( + "before: " + tokenBefore + " after: " + tokenAfter + " diff " + diff + ); + console.log("actual claim share: " + claimedShareActual.toFixed(2) + "%"); + } + + const expectedUser1Claim = + user2PermissionlessClaim * (userDeposits[1] / userDeposits[2]); + // User 1 gets ~ + assert.approximately( + diff, + expectedUser1Claim, + expectedUser1Claim * 0.01, + "User 1's claim is not the expected proportion of user 2's claim" + ); + }); +}); diff --git a/tests/utils/user-instructions.ts b/tests/utils/user-instructions.ts index b33ffbac5..a9d24cd28 100644 --- a/tests/utils/user-instructions.ts +++ b/tests/utils/user-instructions.ts @@ -132,6 +132,75 @@ export const withdrawEmissionsIx = ( return ix; }; +export type WithdrawEmissionsPermissionlessArgs = { + marginfiAccount: PublicKey; + bank: PublicKey; + /** Cannonical ATA of `emissions_destination_account` registered on `marginfiAccount` */ + tokenAccount: PublicKey; +}; + +/** + * (Permissionless) Settles AND withdraws emissions to the user's given token account. The user must + * have opted in to this feature by designating a wallet to receive claims with + * `marginfi_account_update_emissions_destination_account` + * * `tokenAccount`- must be cannonical ATA of `emissions_destination_account` + * @param program + * @param args + * @returns + */ +export const withdrawEmissionsPermissionlessIx = ( + program: Program, + args: WithdrawEmissionsPermissionlessArgs +) => { + const ix = program.methods + .lendingAccountWithdrawEmissionsPermissionless() + .accounts({ + // group: args.marginfiGroup, // implied from bank + marginfiAccount: args.marginfiAccount, + // authority: args.authority, // implied from marginfiAccount + bank: args.bank, + // emissions_mint // implied from bank + // emissions_auth // pda derived from bank + // emissions_vault // pda derived from bank + destinationAccount: args.tokenAccount, + tokenProgram: TOKEN_PROGRAM_ID, + }) + .instruction(); + + return ix; +}; + +export type UpdateEmissionsDestinationArgs = { + marginfiAccount: PublicKey; + destinationAccount: PublicKey; +}; + +/** + * (Permissionless) Opt in to claim permissionless emissions. The designated account/wallet will + * receive all the funds. Emissions go to the cannonical ATA of that account, and if the ATA doesn't + * exist, they may still not get distributed. We (mrgn) might pay to open SOME atas, or we might + * open some common ones when you opt in, or we might let the user pay and just let the tx fail it + * it doesn't exist. + * @param program + * @param args + * @returns + */ +export const updateEmissionsDestination = ( + program: Program, + args: UpdateEmissionsDestinationArgs +) => { + const ix = program.methods + .marginfiAccountUpdateEmissionsDestinationAccount() + .accounts({ + marginfiAccount: args.marginfiAccount, + // authority: //implied from marginfiAccount + destinationAccount: args.destinationAccount, + }) + .instruction(); + + return ix; +}; + export type BorrowIxArgs = { marginfiAccount: PublicKey; bank: PublicKey; From 80dd8fce7a3bfa46dd455795ed3aca15b5392f6b Mon Sep 17 00:00:00 2001 From: jgur-psyops Date: Sat, 1 Mar 2025 02:05:32 -0500 Subject: [PATCH 45/59] Remove another unsafe transmute --- .../marginfi/src/state/marginfi_account.rs | 33 ++++++++++++------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/programs/marginfi/src/state/marginfi_account.rs b/programs/marginfi/src/state/marginfi_account.rs index 31cba00f7..92a415092 100644 --- a/programs/marginfi/src/state/marginfi_account.rs +++ b/programs/marginfi/src/state/marginfi_account.rs @@ -730,17 +730,28 @@ impl<'info> RiskEngine<'_, 'info> { let n_balances_with_liablities = balances_with_liablities.clone().count(); - let is_in_isolated_risk_tier = balances_with_liablities.clone().any(|a| { - // SAFETY: We are shortening 'info -> 'a - let shorter_bank: &'a AccountInfo<'a> = unsafe { core::mem::transmute(&a.bank) }; - AccountLoader::::try_from(shorter_bank) - .unwrap() - .load() - .unwrap() - .config - .risk_tier - == RiskTier::Isolated - }); + let mut is_in_isolated_risk_tier = false; + + for a in balances_with_liablities { + if a.bank.owner != &Bank::owner() { + panic!("bank owned by wrong program, this should never happen"); + } + let bank_data = a.bank.try_borrow_data()?; + if bank_data.len() < Bank::LEN + 8 { + panic!("bank too short, this should never happen"); + } + let bank_discrim = &bank_data[0..8]; + if bank_discrim != Bank::DISCRIMINATOR { + panic!("bad bank discriminator, this should never happen"); + } + let bank_data = &bank_data[8..]; + let bank: Bank = *bytemuck::from_bytes(bank_data); + + if bank.config.risk_tier == RiskTier::Isolated { + is_in_isolated_risk_tier = true; + break; + } + } check!( !is_in_isolated_risk_tier || n_balances_with_liablities == 1, From 194e6c3a990e41d1a5dadc901bfbd123773b5bce Mon Sep 17 00:00:00 2001 From: jgur-psyops Date: Sat, 1 Mar 2025 03:01:21 -0500 Subject: [PATCH 46/59] Fix lint 1 --- programs/marginfi/src/state/marginfi_account.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/programs/marginfi/src/state/marginfi_account.rs b/programs/marginfi/src/state/marginfi_account.rs index 92a415092..c368436b8 100644 --- a/programs/marginfi/src/state/marginfi_account.rs +++ b/programs/marginfi/src/state/marginfi_account.rs @@ -746,7 +746,6 @@ impl<'info> RiskEngine<'_, 'info> { } let bank_data = &bank_data[8..]; let bank: Bank = *bytemuck::from_bytes(bank_data); - if bank.config.risk_tier == RiskTier::Isolated { is_in_isolated_risk_tier = true; break; From 135eb2b0862ae26d197418f197c10482357147af Mon Sep 17 00:00:00 2001 From: Jon Gurary <91919816+jgur-psyops@users.noreply.github.com> Date: Mon, 3 Mar 2025 17:25:10 -0500 Subject: [PATCH 47/59] Add logging on config ixes and failed risk engine (#306) * Echos settings changed in all configuration ixes, improving ease of debug using explorer tools. This is particularly useful when simulating a tx in squads. * Now logs risk engine health metrics on rejection, enabling easier debugging of pricing issues (upon request from integrators) * Allows the global fee admin to be configured (to move away from squads v3) --- clients/rust/marginfi-cli/src/entrypoint.rs | 4 + .../rust/marginfi-cli/src/processor/mod.rs | 2 + .../instructions/marginfi_group/add_pool.rs | 4 +- .../marginfi_group/add_pool_common.rs | 39 ++++ .../marginfi_group/add_pool_permissionless.rs | 3 + .../marginfi_group/add_pool_with_seed.rs | 3 + .../marginfi_group/config_bank_oracle.rs | 6 + .../marginfi_group/config_group_fee.rs | 2 + .../marginfi_group/configure_bank.rs | 8 + .../marginfi_group/edit_global_fee.rs | 12 + .../marginfi_group/init_staked_settings.rs | 15 ++ .../src/instructions/marginfi_group/mod.rs | 2 + programs/marginfi/src/lib.rs | 4 +- programs/marginfi/src/macros.rs | 39 ++++ .../marginfi/src/state/marginfi_account.rs | 24 +- programs/marginfi/src/state/price.rs | 100 ++++---- tests/utils/group-instructions.ts | 2 + tests/utils/instructions.ts | 215 ------------------ 18 files changed, 215 insertions(+), 269 deletions(-) create mode 100644 programs/marginfi/src/instructions/marginfi_group/add_pool_common.rs delete mode 100644 tests/utils/instructions.ts diff --git a/clients/rust/marginfi-cli/src/entrypoint.rs b/clients/rust/marginfi-cli/src/entrypoint.rs index 3a65962c7..6c920587f 100644 --- a/clients/rust/marginfi-cli/src/entrypoint.rs +++ b/clients/rust/marginfi-cli/src/entrypoint.rs @@ -167,6 +167,8 @@ pub enum GroupCommand { program_fee_rate: f64, }, EditFeeState { + #[clap(long)] + new_admin: Pubkey, #[clap(long)] fee_wallet: Pubkey, #[clap(long)] @@ -666,12 +668,14 @@ fn group(subcmd: GroupCommand, global_options: &GlobalOptions) -> Result<()> { program_fee_rate, ), GroupCommand::EditFeeState { + new_admin, fee_wallet, bank_init_flat_sol_fee, program_fee_fixed, program_fee_rate, } => processor::edit_fee_state( config, + new_admin, fee_wallet, bank_init_flat_sol_fee, program_fee_fixed, diff --git a/clients/rust/marginfi-cli/src/processor/mod.rs b/clients/rust/marginfi-cli/src/processor/mod.rs index d42a3239c..128a44f0e 100644 --- a/clients/rust/marginfi-cli/src/processor/mod.rs +++ b/clients/rust/marginfi-cli/src/processor/mod.rs @@ -1019,6 +1019,7 @@ pub fn initialize_fee_state( pub fn edit_fee_state( config: Config, + new_admin: Pubkey, fee_wallet: Pubkey, bank_init_flat_sol_fee: u32, program_fee_fixed: f64, @@ -1039,6 +1040,7 @@ pub fn edit_fee_state( fee_state: fee_state_pubkey, }) .args(marginfi::instruction::EditGlobalFeeState { + admin: new_admin, fee_wallet, bank_init_flat_sol_fee, program_fee_fixed, diff --git a/programs/marginfi/src/instructions/marginfi_group/add_pool.rs b/programs/marginfi/src/instructions/marginfi_group/add_pool.rs index 1ccf394ee..29792c3f7 100644 --- a/programs/marginfi/src/instructions/marginfi_group/add_pool.rs +++ b/programs/marginfi/src/instructions/marginfi_group/add_pool.rs @@ -6,6 +6,7 @@ use crate::{ LIQUIDITY_VAULT_SEED, }, events::{GroupEventHeader, LendingPoolBankCreateEvent}, + log_pool_info, state::{ fee_state::FeeState, marginfi_group::{Bank, BankConfigCompact, MarginfiGroup}, @@ -73,8 +74,7 @@ pub fn lending_pool_add_bank( fee_vault_authority_bump, ); - bank.config.validate()?; - bank.config.validate_oracle_age()?; + log_pool_info(&bank); emit!(LendingPoolBankCreateEvent { header: GroupEventHeader { diff --git a/programs/marginfi/src/instructions/marginfi_group/add_pool_common.rs b/programs/marginfi/src/instructions/marginfi_group/add_pool_common.rs new file mode 100644 index 000000000..8f7dd682c --- /dev/null +++ b/programs/marginfi/src/instructions/marginfi_group/add_pool_common.rs @@ -0,0 +1,39 @@ +use crate::state::marginfi_group::Bank; +use anchor_lang::prelude::*; + +/// Echo the information used to create banks to the log output. Useful for at-a-glance debugging +/// bank creation txes in explorer. Note: costs a lot of CU +pub fn log_pool_info(bank: &Bank) { + let conf = bank.config; + let asset_weight_init = u128::from_le_bytes(conf.asset_weight_init.value); + let asset_weight_maint = u128::from_le_bytes(bank.config.asset_weight_maint.value); + msg!( + "Asset weight init: {:?} maint: {:?}", + asset_weight_init, + asset_weight_maint + ); + let liab_weight_init = u128::from_le_bytes(conf.liability_weight_init.value); + let liab_weight_maint = u128::from_le_bytes(conf.liability_weight_maint.value); + msg!( + "Liab weight init: {:?} maint: {:?}", + liab_weight_init, + liab_weight_maint + ); + msg!( + "deposit limit: {:?} borrow limit: {:?} init val limit: {:?}", + conf.deposit_limit, + conf.borrow_limit, + conf.total_asset_value_init_limit + ); + msg!( + "op state: {:?} risk tier: {:?} asset tag: {:?}", + conf.operational_state as u8, + conf.risk_tier as u8, + conf.asset_tag + ); + msg!( + "oracle age: {:?} flags: {:?}", + conf.oracle_max_age as u8, + bank.flags as u8 + ); +} diff --git a/programs/marginfi/src/instructions/marginfi_group/add_pool_permissionless.rs b/programs/marginfi/src/instructions/marginfi_group/add_pool_permissionless.rs index 431b4b23a..a98c2e913 100644 --- a/programs/marginfi/src/instructions/marginfi_group/add_pool_permissionless.rs +++ b/programs/marginfi/src/instructions/marginfi_group/add_pool_permissionless.rs @@ -8,6 +8,7 @@ use crate::{ SPL_SINGLE_POOL_ID, }, events::{GroupEventHeader, LendingPoolBankCreateEvent}, + log_pool_info, state::{ marginfi_group::{ Bank, BankConfigCompact, BankOperationalState, InterestRateConfig, MarginfiGroup, @@ -95,6 +96,8 @@ pub fn lending_pool_add_bank_permissionless( bank.config.oracle_setup = OracleSetup::StakedWithPythPush; bank.config.oracle_keys[0] = settings.oracle; + log_pool_info(&bank); + bank.config.validate()?; check!( diff --git a/programs/marginfi/src/instructions/marginfi_group/add_pool_with_seed.rs b/programs/marginfi/src/instructions/marginfi_group/add_pool_with_seed.rs index bfd6bb842..4f94b84df 100644 --- a/programs/marginfi/src/instructions/marginfi_group/add_pool_with_seed.rs +++ b/programs/marginfi/src/instructions/marginfi_group/add_pool_with_seed.rs @@ -6,6 +6,7 @@ use crate::{ LIQUIDITY_VAULT_SEED, }, events::{GroupEventHeader, LendingPoolBankCreateEvent}, + log_pool_info, state::{ fee_state::FeeState, marginfi_group::{Bank, BankConfigCompact, MarginfiGroup}, @@ -73,6 +74,8 @@ pub fn lending_pool_add_bank_with_seed( fee_vault_authority_bump, ); + log_pool_info(&bank); + bank.config.validate()?; bank.config.validate_oracle_age()?; diff --git a/programs/marginfi/src/instructions/marginfi_group/config_bank_oracle.rs b/programs/marginfi/src/instructions/marginfi_group/config_bank_oracle.rs index c64ee7282..9237d8811 100644 --- a/programs/marginfi/src/instructions/marginfi_group/config_bank_oracle.rs +++ b/programs/marginfi/src/instructions/marginfi_group/config_bank_oracle.rs @@ -24,6 +24,12 @@ pub fn lending_pool_configure_bank_oracle( bank.config.oracle_setup = setup_type; bank.config.oracle_keys[0] = oracle; + msg!( + "setting oracle to type: {:?} key: {:?}", + bank.config.oracle_setup, + bank.config.oracle_keys[0] + ); + bank.config .validate_oracle_setup(ctx.remaining_accounts, None, None, None)?; diff --git a/programs/marginfi/src/instructions/marginfi_group/config_group_fee.rs b/programs/marginfi/src/instructions/marginfi_group/config_group_fee.rs index 303f3caca..026338ada 100644 --- a/programs/marginfi/src/instructions/marginfi_group/config_group_fee.rs +++ b/programs/marginfi/src/instructions/marginfi_group/config_group_fee.rs @@ -24,5 +24,7 @@ pub fn config_group_fee(ctx: Context, flag: u64) -> MarginfiResu marginfi_group.set_flags(flag)?; + msg!("flags set to: {:?}", flag); + Ok(()) } diff --git a/programs/marginfi/src/instructions/marginfi_group/configure_bank.rs b/programs/marginfi/src/instructions/marginfi_group/configure_bank.rs index 9e04edcaa..8207ad48c 100644 --- a/programs/marginfi/src/instructions/marginfi_group/configure_bank.rs +++ b/programs/marginfi/src/instructions/marginfi_group/configure_bank.rs @@ -92,6 +92,14 @@ pub fn lending_pool_setup_emissions( bank.emissions_rate = emissions_rate; bank.emissions_remaining = I80F48::from_num(total_emissions).into(); + msg!("init emissions with mint: {:?}", bank.emissions_mint,); + msg!( + "flags: {:?} rate: {:?} total: {:?}", + emissions_flags, + emissions_rate, + total_emissions + ); + let initial_emissions_amount_pre_fee = utils::calculate_pre_fee_spl_deposit_amount( ctx.accounts.emissions_mint.to_account_info(), total_emissions, diff --git a/programs/marginfi/src/instructions/marginfi_group/edit_global_fee.rs b/programs/marginfi/src/instructions/marginfi_group/edit_global_fee.rs index e538bb512..b214c00e3 100644 --- a/programs/marginfi/src/instructions/marginfi_group/edit_global_fee.rs +++ b/programs/marginfi/src/instructions/marginfi_group/edit_global_fee.rs @@ -8,17 +8,29 @@ use fee_state::FeeState; pub fn edit_fee_state( ctx: Context, + admin: Pubkey, fee_wallet: Pubkey, bank_init_flat_sol_fee: u32, program_fee_fixed: WrappedI80F48, program_fee_rate: WrappedI80F48, ) -> Result<()> { let mut fee_state = ctx.accounts.fee_state.load_mut()?; + fee_state.global_fee_admin = admin; fee_state.global_fee_wallet = fee_wallet; fee_state.bank_init_flat_sol_fee = bank_init_flat_sol_fee; fee_state.program_fee_fixed = program_fee_fixed; fee_state.program_fee_rate = program_fee_rate; + let fixed = u128::from_le_bytes(fee_state.program_fee_fixed.value); + let rate = u128::from_le_bytes(fee_state.program_fee_rate.value); + msg!("admin set to: {:?} fee wallet: {:?}", admin, fee_wallet); + msg!( + "flat sol: {:?} fixed: {:?} rate: {:?}", + fee_state.bank_init_flat_sol_fee, + fixed, + rate + ); + Ok(()) } diff --git a/programs/marginfi/src/instructions/marginfi_group/init_staked_settings.rs b/programs/marginfi/src/instructions/marginfi_group/init_staked_settings.rs index 35966ccb5..1ff7e182f 100644 --- a/programs/marginfi/src/instructions/marginfi_group/init_staked_settings.rs +++ b/programs/marginfi/src/instructions/marginfi_group/init_staked_settings.rs @@ -23,6 +23,21 @@ pub fn initialize_staked_settings( settings.risk_tier, ); + msg!( + "oracle: {:?} max age: {:?}", + staked_settings.oracle, + staked_settings.oracle_max_age + ); + let init = u128::from_le_bytes(staked_settings.asset_weight_init.value); + let maint = u128::from_le_bytes(staked_settings.asset_weight_maint.value); + msg!("asset weight init: {:?} maint: {:?}", init, maint); + msg!( + "deposit limit: {:?} value limit: {:?} risk tier: {:?}", + staked_settings.deposit_limit, + staked_settings.total_asset_value_init_limit, + staked_settings.risk_tier as u8 + ); + staked_settings.validate()?; Ok(()) diff --git a/programs/marginfi/src/instructions/marginfi_group/mod.rs b/programs/marginfi/src/instructions/marginfi_group/mod.rs index cb9c7fb58..e8c3ef92d 100644 --- a/programs/marginfi/src/instructions/marginfi_group/mod.rs +++ b/programs/marginfi/src/instructions/marginfi_group/mod.rs @@ -1,5 +1,6 @@ mod accrue_bank_interest; mod add_pool; +mod add_pool_common; mod add_pool_permissionless; mod add_pool_with_seed; mod collect_bank_fees; @@ -18,6 +19,7 @@ mod propagate_staked_settings; pub use accrue_bank_interest::*; pub use add_pool::*; +pub use add_pool_common::*; pub use add_pool_permissionless::*; pub use add_pool_with_seed::*; pub use collect_bank_fees::*; diff --git a/programs/marginfi/src/lib.rs b/programs/marginfi/src/lib.rs index a2ba828b9..ef3a81f6a 100644 --- a/programs/marginfi/src/lib.rs +++ b/programs/marginfi/src/lib.rs @@ -264,9 +264,10 @@ pub mod marginfi { ) } - /// (global fee admin only) Adjust fees or the destination wallet + /// (global fee admin only) Adjust fees, admin, or the destination wallet pub fn edit_global_fee_state( ctx: Context, + admin: Pubkey, fee_wallet: Pubkey, bank_init_flat_sol_fee: u32, program_fee_fixed: WrappedI80F48, @@ -274,6 +275,7 @@ pub mod marginfi { ) -> MarginfiResult { marginfi_group::edit_fee_state( ctx, + admin, fee_wallet, bank_init_flat_sol_fee, program_fee_fixed, diff --git a/programs/marginfi/src/macros.rs b/programs/marginfi/src/macros.rs index e942eaa6b..db72c8006 100644 --- a/programs/marginfi/src/macros.rs +++ b/programs/marginfi/src/macros.rs @@ -33,6 +33,45 @@ macro_rules! check { }; } +#[macro_export] +/// Checks if two values are equal, emits the error, line number, file name, and the contents of the +/// two values being compared on error. +macro_rules! check_eq { + ($left:expr, $right:expr, $err:expr) => { + if $left != $right { + let err_code: $crate::errors::MarginfiError = $err; + #[cfg(not(feature = "test-bpf"))] + anchor_lang::prelude::msg!( + "Error \"{}\" thrown at {}:{}: left = {:?}, right = {:?}", + err_code, + file!(), + line!(), + $left, + $right + ); + return Err(err_code.into()); + } + }; + + ($left:expr, $right:expr, $err:expr, $($arg:tt)+) => { + if $left != $right { + let err_code: $crate::errors::MarginfiError = $err; + #[cfg(not(feature = "test-bpf"))] + anchor_lang::prelude::msg!( + "Error \"{}\" thrown at {}:{}: left = {:?}, right = {:?}", + err_code, + file!(), + line!(), + $left, + $right + ); + #[cfg(not(feature = "test-bpf"))] + anchor_lang::prelude::msg!($($arg)+); + return Err(err_code.into()); + } + }; +} + #[macro_export] macro_rules! math_error { () => {{ diff --git a/programs/marginfi/src/state/marginfi_account.rs b/programs/marginfi/src/state/marginfi_account.rs index c368436b8..e2ff43030 100644 --- a/programs/marginfi/src/state/marginfi_account.rs +++ b/programs/marginfi/src/state/marginfi_account.rs @@ -561,15 +561,21 @@ impl<'info> RiskEngine<'_, 'info> { let (total_weighted_assets, total_weighted_liabilities) = self.get_account_health_components(requirement_type)?; - debug!( - "check_health: assets {} - liabs: {}", - total_weighted_assets, total_weighted_liabilities - ); - - check!( - total_weighted_assets >= total_weighted_liabilities, - MarginfiError::RiskEngineInitRejected - ); + if total_weighted_assets >= total_weighted_liabilities { + debug!( + "check_health: assets {} - liabs: {}", + total_weighted_assets, total_weighted_liabilities + ); + } else { + let assets_u128: u128 = total_weighted_assets.to_num(); + let liabs_u128: u128 = total_weighted_liabilities.to_num(); + msg!( + "check_health: assets {} - liabs: {}", + assets_u128, + liabs_u128 + ); + return err!(MarginfiError::RiskEngineInitRejected); + } self.check_account_risk_tiers()?; diff --git a/programs/marginfi/src/state/price.rs b/programs/marginfi/src/state/price.rs index c539a9fa6..f0d95d2a7 100644 --- a/programs/marginfi/src/state/price.rs +++ b/programs/marginfi/src/state/price.rs @@ -1,22 +1,20 @@ -use std::{cell::Ref, cmp::min}; - use anchor_lang::prelude::*; use anchor_spl::token::Mint; use bytemuck::{Pod, Zeroable}; use enum_dispatch::enum_dispatch; use fixed::types::I80F48; +pub use pyth_sdk_solana; use pyth_sdk_solana::{state::SolanaPriceAccount, Price, PriceFeed}; use pyth_solana_receiver_sdk::price_update::{self, FeedId, PriceUpdateV2}; use solana_program::{borsh1::try_from_slice_unchecked, stake::state::StakeStateV2}; +use std::{cell::Ref, cmp::min}; use switchboard_on_demand::{CurrentResult, PullFeedAccountData, SPL_TOKEN_PROGRAM_ID}; use switchboard_solana::{ AggregatorAccountData, AggregatorResolutionMode, SwitchboardDecimal, SWITCHBOARD_PROGRAM_ID, }; -pub use pyth_sdk_solana; - use crate::{ - check, + check, check_eq, constants::{ CONF_INTERVAL_MULTIPLE, EXP_10, EXP_10_I80F48, MAX_CONF_INTERVAL, MIN_PYTH_PUSH_VERIFICATION_LEVEL, NATIVE_STAKE_ID, PYTH_ID, SPL_SINGLE_POOL_ID, @@ -114,8 +112,9 @@ impl OraclePriceFeedAdapter { OracleSetup::None => Err(MarginfiError::OracleNotSetup.into()), OracleSetup::PythLegacy => { check!(ais.len() == 1, MarginfiError::InvalidOracleAccount); - check!( - ais[0].key == &bank_config.oracle_keys[0], + check_eq!( + ais[0].key, + &bank_config.oracle_keys[0], MarginfiError::InvalidOracleAccount ); @@ -127,8 +126,9 @@ impl OraclePriceFeedAdapter { } OracleSetup::SwitchboardV2 => { check!(ais.len() == 1, MarginfiError::InvalidOracleAccount); - check!( - ais[0].key == &bank_config.oracle_keys[0], + check_eq!( + ais[0].key, + &bank_config.oracle_keys[0], MarginfiError::InvalidOracleAccount ); @@ -140,9 +140,9 @@ impl OraclePriceFeedAdapter { check!(ais.len() == 1, MarginfiError::InvalidOracleAccount); let account_info = &ais[0]; - - check!( - account_info.owner == &pyth_solana_receiver_sdk::id(), + check_eq!( + account_info.owner, + &pyth_solana_receiver_sdk::id(), MarginfiError::InvalidOracleAccount ); @@ -159,8 +159,9 @@ impl OraclePriceFeedAdapter { } OracleSetup::SwitchboardPull => { check!(ais.len() == 1, MarginfiError::InvalidOracleAccount); - check!( - ais[0].key == &bank_config.oracle_keys[0], + check_eq!( + ais[0].key, + &bank_config.oracle_keys[0], MarginfiError::InvalidOracleAccount ); @@ -171,9 +172,14 @@ impl OraclePriceFeedAdapter { OracleSetup::StakedWithPythPush => { check!(ais.len() == 3, MarginfiError::InvalidOracleAccount); - check!( - ais[1].key == &bank_config.oracle_keys[1] - && ais[2].key == &bank_config.oracle_keys[2], + check_eq!( + ais[1].key, + &bank_config.oracle_keys[1], + MarginfiError::InvalidOracleAccount + ); + check_eq!( + ais[2].key, + &bank_config.oracle_keys[2], MarginfiError::InvalidOracleAccount ); @@ -205,8 +211,9 @@ impl OraclePriceFeedAdapter { )) { let account_info = &ais[0]; - check!( - account_info.owner == &pyth_solana_receiver_sdk::id(), + check_eq!( + account_info.owner, + &pyth_solana_receiver_sdk::id(), MarginfiError::InvalidOracleAccount ); @@ -235,8 +242,9 @@ impl OraclePriceFeedAdapter { Ok(price) } else { // Localnet only - check!( - ais[0].key == &bank_config.oracle_keys[0], + check_eq!( + ais[0].key, + &bank_config.oracle_keys[0], MarginfiError::InvalidOracleAccount ); @@ -282,8 +290,9 @@ impl OraclePriceFeedAdapter { OracleSetup::None => Err(MarginfiError::OracleNotSetup.into()), OracleSetup::PythLegacy => { check!(oracle_ais.len() == 1, MarginfiError::InvalidOracleAccount); - check!( - oracle_ais[0].key == &bank_config.oracle_keys[0], + check_eq!( + oracle_ais[0].key, + &bank_config.oracle_keys[0], MarginfiError::InvalidOracleAccount ); @@ -293,8 +302,9 @@ impl OraclePriceFeedAdapter { } OracleSetup::SwitchboardV2 => { check!(oracle_ais.len() == 1, MarginfiError::InvalidOracleAccount); - check!( - oracle_ais[0].key == &bank_config.oracle_keys[0], + check_eq!( + oracle_ais[0].key, + &bank_config.oracle_keys[0], MarginfiError::InvalidOracleAccount ); @@ -314,8 +324,9 @@ impl OraclePriceFeedAdapter { } OracleSetup::SwitchboardPull => { check!(oracle_ais.len() == 1, MarginfiError::InvalidOracleAccount); - check!( - oracle_ais[0].key == &bank_config.oracle_keys[0], + check_eq!( + oracle_ais[0].key, + &bank_config.oracle_keys[0], MarginfiError::InvalidOracleAccount ); @@ -335,8 +346,9 @@ impl OraclePriceFeedAdapter { )?; } else { // Localnet only - check!( - oracle_ais[0].key == &bank_config.oracle_keys[0], + check_eq!( + oracle_ais[0].key, + &bank_config.oracle_keys[0], MarginfiError::InvalidOracleAccount ); @@ -352,28 +364,31 @@ impl OraclePriceFeedAdapter { // Validate the given stake_pool derives the same lst_mint, proving stake_pool is correct let (exp_mint, _) = Pubkey::find_program_address(&[b"mint", stake_pool_bytes], program_id); - check!( - exp_mint == lst_mint, - MarginfiError::StakePoolValidationFailed - ); + check_eq!(exp_mint, lst_mint, MarginfiError::StakePoolValidationFailed); // Validate the now-proven stake_pool derives the given sol_pool let (exp_pool, _) = Pubkey::find_program_address(&[b"stake", stake_pool_bytes], program_id); - check!( - exp_pool == sol_pool.key(), - MarginfiError::StakePoolValidationFailed - ); + check_eq!(exp_pool, sol_pool, MarginfiError::StakePoolValidationFailed); // Sanity check the mint. Note: spl-single-pool uses a classic Token, never Token22 check!( - oracle_ais[1].owner == &SPL_TOKEN_PROGRAM_ID - && oracle_ais[1].key() == lst_mint, + oracle_ais[1].owner == &SPL_TOKEN_PROGRAM_ID, + MarginfiError::StakePoolValidationFailed + ); + check_eq!( + oracle_ais[1].key(), + lst_mint, MarginfiError::StakePoolValidationFailed ); // Sanity check the pool is a native stake pool. Note: the native staking program is // written in vanilla Solana and has no Anchor discriminator. check!( - oracle_ais[2].owner == &NATIVE_STAKE_ID && oracle_ais[2].key() == sol_pool, + oracle_ais[2].owner == &NATIVE_STAKE_ID, + MarginfiError::StakePoolValidationFailed + ); + check_eq!( + oracle_ais[2].key(), + sol_pool, MarginfiError::StakePoolValidationFailed ); @@ -873,8 +888,9 @@ impl PythPushOraclePriceFeed { pub fn check_ai_and_feed_id(ai: &AccountInfo, feed_id: &FeedId) -> MarginfiResult { let price_feed_account = load_price_update_v2_checked(ai)?; - check!( - &price_feed_account.price_message.feed_id.eq(feed_id), + check_eq!( + feed_id, + &price_feed_account.price_message.feed_id, MarginfiError::InvalidOracleAccount ); diff --git a/tests/utils/group-instructions.ts b/tests/utils/group-instructions.ts index d3f71c927..e7799de0a 100644 --- a/tests/utils/group-instructions.ts +++ b/tests/utils/group-instructions.ts @@ -332,6 +332,7 @@ export type EditGlobalFeeStateArgs = { bankInitFlatSolFee: number; programFeeFixed: WrappedI80F48; programFeeRate: WrappedI80F48; + newAdmin?: PublicKey; }; // TODO add test for this @@ -341,6 +342,7 @@ export const editGlobalFeeState = ( ) => { const ix = program.methods .editGlobalFeeState( + args.newAdmin ? args.newAdmin : args.admin, args.wallet, args.bankInitFlatSolFee, args.programFeeFixed, diff --git a/tests/utils/instructions.ts b/tests/utils/instructions.ts deleted file mode 100644 index 58fc2e72c..000000000 --- a/tests/utils/instructions.ts +++ /dev/null @@ -1,215 +0,0 @@ -import { Program } from "@coral-xyz/anchor"; -import { AccountMeta, PublicKey, SYSVAR_RENT_PUBKEY } from "@solana/web3.js"; -import { Marginfi } from "../../target/types/marginfi"; -import { - deriveFeeVault, - deriveFeeVaultAuthority, - deriveInsuranceVault, - deriveInsuranceVaultAuthority, - deriveLiquidityVault, - deriveLiquidityVaultAuthority, -} from "./pdas"; -import { - BankConfig, - BankConfigOptRaw, - BankConfigOptWithAssetTag, -} from "./types"; -import { TOKEN_PROGRAM_ID } from "@solana/spl-token"; -import { WrappedI80F48 } from "@mrgnlabs/mrgn-common"; - -export const MAX_ORACLE_KEYS = 5; - -/** - * * admin/feePayer - must sign - * * bank - use a fresh keypair, must sign - */ -export type AddBankArgs = { - marginfiGroup: PublicKey; - admin: PublicKey; - feePayer: PublicKey; - bankMint: PublicKey; - bank: PublicKey; - config: BankConfig; -}; - -export const addBank = (program: Program, args: AddBankArgs) => { - // const id = program.programId; - // const bank = args.bank; - - // Note that oracle is passed as a key in config and as an acc in remaining accs... - const oracleMeta: AccountMeta = { - pubkey: args.config.oracleKey, - isSigner: false, - isWritable: false, - }; - - const ix = program.methods - .lendingPoolAddBank({ - assetWeightInit: args.config.assetWeightInit, - assetWeightMaint: args.config.assetWeightMaint, - liabilityWeightInit: args.config.liabilityWeightInit, - liabilityWeightMaint: args.config.liabilityWeightMain, - depositLimit: args.config.depositLimit, - interestRateConfig: args.config.interestRateConfig, - operationalState: args.config.operationalState, - oracleSetup: args.config.oracleSetup, - oracleKey: args.config.oracleKey, - borrowLimit: args.config.borrowLimit, - riskTier: args.config.riskTier, - pad0: [0, 0, 0, 0, 0, 0, 0], - totalAssetValueInitLimit: args.config.totalAssetValueInitLimit, - oracleMaxAge: args.config.oracleMaxAge, - }) - .accounts({ - marginfiGroup: args.marginfiGroup, - admin: args.admin, - feePayer: args.feePayer, - bankMint: args.bankMint, - bank: args.bank, - // globalFeeState: deriveGlobalFeeState(id), - // globalFeeWallet: args.globalFeeWallet, - // liquidityVaultAuthority = deriveLiquidityVaultAuthority(id, bank); - // liquidityVault = deriveLiquidityVault(id, bank); - // insuranceVaultAuthority = deriveInsuranceVaultAuthority(id, bank); - // insuranceVault = deriveInsuranceVault(id, bank); - // feeVaultAuthority = deriveFeeVaultAuthority(id, bank); - // feeVault = deriveFeeVault(id, bank); - // rent = SYSVAR_RENT_PUBKEY - tokenProgram: TOKEN_PROGRAM_ID, - // systemProgram: SystemProgram.programId, - }) - .remainingAccounts([oracleMeta]) - .instruction(); - - return ix; -}; - -/** - * newAdmin - (Optional) pass null to keep current admin - * admin - must sign, must be current admin of marginfiGroup - */ -export type GroupConfigureArgs = { - newAdmin: PublicKey | null; - marginfiGroup: PublicKey; - admin: PublicKey; -}; - -export const groupConfigure = ( - program: Program, - args: GroupConfigureArgs -) => { - const ix = program.methods - .marginfiGroupConfigure({ admin: args.newAdmin }) - .accounts({ - marginfiGroup: args.marginfiGroup, - admin: args.admin, - }) - .instruction(); - - return ix; -}; - -export type GroupInitializeArgs = { - marginfiGroup: PublicKey; - admin: PublicKey; -}; - -export const groupInitialize = ( - program: Program, - args: GroupInitializeArgs -) => { - const ix = program.methods - .marginfiGroupInitialize() - .accounts({ - marginfiGroup: args.marginfiGroup, - // feeState: deriveGlobalFeeState(id), - admin: args.admin, - // systemProgram: SystemProgram.programId, - }) - .instruction(); - - return ix; -}; - -export type InitGlobalFeeStateArgs = { - payer: PublicKey; - admin: PublicKey; - wallet: PublicKey; - bankInitFlatSolFee: number; - programFeeFixed: WrappedI80F48; - programFeeRate: WrappedI80F48; -}; - -export const initGlobalFeeState = ( - program: Program, - args: InitGlobalFeeStateArgs -) => { - const ix = program.methods - .initGlobalFeeState( - args.admin, - args.wallet, - args.bankInitFlatSolFee, - args.programFeeFixed, - args.programFeeRate - ) - .accounts({ - payer: args.payer, - // feeState = deriveGlobalFeeState(id), - // rent = SYSVAR_RENT_PUBKEY, - // systemProgram: SystemProgram.programId, - }) - .instruction(); - - return ix; -}; - -export type EditGlobalFeeStateArgs = { - admin: PublicKey; - wallet: PublicKey; - bankInitFlatSolFee: number; - programFeeFixed: WrappedI80F48; - programFeeRate: WrappedI80F48; -}; - -// TODO add test for this -export const editGlobalFeeState = ( - program: Program, - args: EditGlobalFeeStateArgs -) => { - const ix = program.methods - .editGlobalFeeState( - args.wallet, - args.bankInitFlatSolFee, - args.programFeeFixed, - args.programFeeRate - ) - .accounts({ - globalFeeAdmin: args.admin, - // feeState = deriveGlobalFeeState(id), - }) - .instruction(); - - return ix; -}; - -export type ConfigureBankArgs = { - marginfiGroup: PublicKey; - admin: PublicKey; - bank: PublicKey; - bankConfigOpt: BankConfigOptRaw; // BankConfigOptRaw with origination fee + freeze -}; - -export const configureBank = ( - program: Program, - args: ConfigureBankArgs -) => { - const ix = program.methods - .lendingPoolConfigureBank(args.bankConfigOpt) - .accounts({ - marginfiGroup: args.marginfiGroup, - admin: args.admin, - bank: args.bank, - }) - .instruction(); - return ix; -}; From b3b391fa7a7c232e4b54f26d7c4d4672df9d04c0 Mon Sep 17 00:00:00 2001 From: jgur-psyops Date: Wed, 5 Mar 2025 14:49:14 -0500 Subject: [PATCH 48/59] Log echo changes to debt settlement or freeze flags --- programs/marginfi/src/state/marginfi_group.rs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/programs/marginfi/src/state/marginfi_group.rs b/programs/marginfi/src/state/marginfi_group.rs index 7319826eb..85bca2eb5 100644 --- a/programs/marginfi/src/state/marginfi_group.rs +++ b/programs/marginfi/src/state/marginfi_group.rs @@ -700,10 +700,18 @@ impl Bank { set_if_some!(self.config.oracle_max_age, config.oracle_max_age); if let Some(flag) = config.permissionless_bad_debt_settlement { + msg!( + "setting bad debt settlement: {:?}", + config.permissionless_bad_debt_settlement.unwrap() + ); self.update_flag(flag, PERMISSIONLESS_BAD_DEBT_SETTLEMENT_FLAG); } if let Some(flag) = config.freeze_settings { + msg!( + "setting freeze settings: {:?}", + config.freeze_settings.unwrap() + ); self.update_flag(flag, FREEZE_SETTINGS); } From a71ad93907a6eb3ef0e206e6e3d71b59245c761c Mon Sep 17 00:00:00 2001 From: Ilia Zyrin Date: Tue, 11 Mar 2025 20:24:35 +0100 Subject: [PATCH 49/59] Detailed errors (#310) * propagate actual MarginFi error for price feeds * Various improvements to logging and more specific errors when failures due to oracle issues occur --------- Co-authored-by: Ilia Zyrin --- .gitignore | 4 +- .vscode/tasks.json | 77 ++++++ programs/marginfi/src/errors.rs | 216 ++++++++++++---- .../marginfi/src/state/marginfi_account.rs | 36 +-- programs/marginfi/src/state/marginfi_group.rs | 11 +- programs/marginfi/src/state/price.rs | 231 ++++++++++-------- .../tests/admin_actions/setup_bank.rs | 2 +- programs/marginfi/tests/misc/pyth_push.rs | 12 +- .../risk_engine_flexible_oracle_checks.rs | 6 +- tests/04_configureBank.spec.ts | 2 +- tests/s02_addBank.spec.ts | 10 +- tests/s03_deposit.spec.ts | 4 +- tests/s04_borrow.spec.ts | 2 +- tests/s05_solAppreciates.spec.ts | 18 +- tests/s06_propagateSets.spec.ts | 4 +- 15 files changed, 429 insertions(+), 206 deletions(-) create mode 100644 .vscode/tasks.json diff --git a/.gitignore b/.gitignore index 1b76b4a13..464aa4e37 100644 --- a/.gitignore +++ b/.gitignore @@ -16,7 +16,6 @@ target # IDEs .idea *.iml -**/.vscode # other .env @@ -31,4 +30,5 @@ test-ledger/ # Allow specific json files !tests/fixtures/**/*.json -!programs/marginfi/tests/fixtures/**/*.json \ No newline at end of file +!programs/marginfi/tests/fixtures/**/*.json +!.vscode/tasks.json \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 000000000..533963911 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,77 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "Setup & Run Anchor Tests", + "type": "shell", + "command": "./scripts/build-workspace.sh && yarn install && anchor build -p marginfi -- --no-default-features && anchor build -p mocks && anchor build -p liquidity_incentive_program -- --no-default-features && anchor test --skip-build", + "problemMatcher": [], + "group": { + "kind": "test", + "isDefault": true + }, + "presentation": { + "echo": true, + "reveal": "always", + "focus": true, + "panel": "shared", + "showReuseMessage": true, + "clear": true + } + }, + { + "label": "Run Anchor Tests", + "type": "shell", + "command": "anchor test --skip-build", + "problemMatcher": [], + "group": { + "kind": "test", + "isDefault": true + }, + "presentation": { + "echo": true, + "reveal": "always", + "focus": true, + "panel": "shared", + "showReuseMessage": true, + "clear": true + } + }, + { + "label": "Setup & Run Rust Tests", + "type": "shell", + "command": "./scripts/build-workspace.sh && cargo fmt && ./scripts/test-program.sh all --sane", + "problemMatcher": [], + "group": { + "kind": "test", + "isDefault": true + }, + "presentation": { + "echo": true, + "reveal": "always", + "focus": true, + "panel": "shared", + "showReuseMessage": true, + "clear": true + } + }, + { + "label": "Run Rust Tests", + "type": "shell", + "command": "cargo fmt && ./scripts/test-program.sh all --sane", + "problemMatcher": [], + "group": { + "kind": "test", + "isDefault": true + }, + "presentation": { + "echo": true, + "reveal": "always", + "focus": true, + "panel": "shared", + "showReuseMessage": true, + "clear": true + } + }, + ] +} \ No newline at end of file diff --git a/programs/marginfi/src/errors.rs b/programs/marginfi/src/errors.rs index d5d3efafd..c5ff9cdc3 100644 --- a/programs/marginfi/src/errors.rs +++ b/programs/marginfi/src/errors.rs @@ -2,8 +2,8 @@ use anchor_lang::prelude::*; #[error_code] pub enum MarginfiError { - #[msg("Math error")] // 6000 - MathError, + #[msg("Internal Marginfi logic error")] // 6000 + InternalLogicError, #[msg("Invalid bank index")] // 6001 BankNotFound, #[msg("Lending account balance not found")] // 6002 @@ -16,95 +16,119 @@ pub enum MarginfiError { MissingPythOrBankAccount, #[msg("Missing Pyth account")] // 6006 MissingPythAccount, - #[msg("Invalid Pyth account")] // 6007 - InvalidOracleAccount, - #[msg("Missing Bank account")] // 6008 + #[msg("Missing Bank account")] // 6007 MissingBankAccount, - #[msg("Invalid Bank account")] // 6009 + #[msg("Invalid Bank account")] // 6008 InvalidBankAccount, - #[msg("RiskEngine rejected due to either bad health or stale oracles")] // 6010 + #[msg("RiskEngine rejected due to either bad health or stale oracles")] // 6009 RiskEngineInitRejected, - #[msg("Lending account balance slots are full")] // 6011 + #[msg("Lending account balance slots are full")] // 6010 LendingAccountBalanceSlotsFull, - #[msg("Bank already exists")] // 6012 + #[msg("Bank already exists")] // 6011 BankAlreadyExists, - #[msg("Illegal liquidation")] // 6013 + #[msg("Illegal liquidation")] // 6012 IllegalLiquidation, - #[msg("Account is not bankrupt")] // 6014 + #[msg("Account is not bankrupt")] // 6013 AccountNotBankrupt, - #[msg("Account balance is not bad debt")] // 6015 + #[msg("Account balance is not bad debt")] // 6014 BalanceNotBadDebt, - #[msg("Invalid group config")] // 6016 + #[msg("Invalid group config")] // 6015 InvalidConfig, - #[msg("Stale oracle data")] // 6017 - StaleOracle, - #[msg("Bank paused")] // 6018 + #[msg("Bank paused")] // 6016 BankPaused, - #[msg("Bank is ReduceOnly mode")] // 6019 + #[msg("Bank is ReduceOnly mode")] // 6017 BankReduceOnly, - #[msg("Bank is missing")] // 6020 + #[msg("Bank is missing")] // 6018 BankAccountNotFound, - #[msg("Operation is deposit-only")] // 6021 + #[msg("Operation is deposit-only")] // 6019 OperationDepositOnly, - #[msg("Operation is withdraw-only")] // 6022 + #[msg("Operation is withdraw-only")] // 6020 OperationWithdrawOnly, - #[msg("Operation is borrow-only")] // 6023 + #[msg("Operation is borrow-only")] // 6021 OperationBorrowOnly, - #[msg("Operation is repay-only")] // 6024 + #[msg("Operation is repay-only")] // 6022 OperationRepayOnly, - #[msg("No asset found")] // 6025 + #[msg("No asset found")] // 6023 NoAssetFound, - #[msg("No liability found")] // 6026 + #[msg("No liability found")] // 6024 NoLiabilityFound, - #[msg("Invalid oracle setup")] // 6027 + #[msg("Invalid oracle setup")] // 6025 InvalidOracleSetup, - #[msg("Invalid bank utilization ratio")] // 6028 + #[msg("Invalid bank utilization ratio")] // 6026 IllegalUtilizationRatio, - #[msg("Bank borrow cap exceeded")] // 6029 + #[msg("Bank borrow cap exceeded")] // 6027 BankLiabilityCapacityExceeded, - #[msg("Invalid Price")] // 6030 + #[msg("Invalid Price")] // 6028 InvalidPrice, - #[msg("Account can have only one liability when account is under isolated risk")] // 6031 - IsolatedAccountIllegalState, // 6032 - #[msg("Emissions already setup")] + #[msg("Account can have only one liability when account is under isolated risk")] // 6029 + IsolatedAccountIllegalState, + #[msg("Emissions already setup")] // 6030 EmissionsAlreadySetup, - #[msg("Oracle is not set")] // 6033 + #[msg("Oracle is not set")] // 6031 OracleNotSetup, - #[msg("Invalid switchboard decimal conversion")] // 6034 + #[msg("Invalid switchboard decimal conversion")] // 6032 InvalidSwitchboardDecimalConversion, - #[msg("Cannot close balance because of outstanding emissions")] // 6035 + #[msg("Cannot close balance because of outstanding emissions")] // 6033 CannotCloseOutstandingEmissions, - #[msg("Update emissions error")] //6036 + #[msg("Update emissions error")] //6034 EmissionsUpdateError, - #[msg("Account disabled")] // 6037 + #[msg("Account disabled")] // 6035 AccountDisabled, - #[msg("Account can't temporarily open 3 balances, please close a balance first")] // 6038 + #[msg("Account can't temporarily open 3 balances, please close a balance first")] // 6036 AccountTempActiveBalanceLimitExceeded, - #[msg("Illegal action during flashloan")] // 6039 + #[msg("Illegal action during flashloan")] // 6037 AccountInFlashloan, - #[msg("Illegal flashloan")] // 6040 + #[msg("Illegal flashloan")] // 6038 IllegalFlashloan, - #[msg("Illegal flag")] // 6041 + #[msg("Illegal flag")] // 6039 IllegalFlag, - #[msg("Illegal balance state")] // 6042 + #[msg("Illegal balance state")] // 6040 IllegalBalanceState, - #[msg("Illegal account authority transfer")] // 6043 + #[msg("Illegal account authority transfer")] // 6041 IllegalAccountAuthorityTransfer, - #[msg("Unauthorized")] // 6044 + #[msg("Unauthorized")] // 6042 Unauthorized, - #[msg("Invalid account authority")] // 6045 + #[msg("Invalid account authority")] // 6043 IllegalAction, - #[msg("Token22 Banks require mint account as first remaining account")] // 6046 + #[msg("Token22 Banks require mint account as first remaining account")] // 6044 T22MintRequired, - #[msg("Invalid ATA for global fee account")] // 6047 + #[msg("Invalid ATA for global fee account")] // 6045 InvalidFeeAta, - #[msg("Use add pool permissionless instead")] // 6048 + #[msg("Use add pool permissionless instead")] // 6046 AddedStakedPoolManually, - #[msg("Staked SOL accounts can only deposit staked assets and borrow SOL")] // 6049 + #[msg("Staked SOL accounts can only deposit staked assets and borrow SOL")] // 6047 AssetTagMismatch, - #[msg("Stake pool validation failed: check the stake pool, mint, or sol pool")] // 6050 + #[msg("Stake pool validation failed: check the stake pool, mint, or sol pool")] // 6048 StakePoolValidationFailed, - #[msg("Invalid emissions destination account")] // 6051 + #[msg("Switchboard oracle: stale price")] // 6049 + SwitchboardStalePrice, + #[msg("Pyth Push oracle: stale price")] // 6050 + PythPushStalePrice, + #[msg("Oracle error: wrong number of accounts")] // 6051 + WrongNumberOfOracleAccounts, + #[msg("Oracle error: wrong account keys")] // 6052 + WrongOracleAccountKeys, + #[msg("Pyth Push oracle: wrong account owner")] // 6053 + PythPushWrongAccountOwner, + #[msg("Staked Pyth Push oracle: wrong account owner")] // 6054 + StakedPythPushWrongAccountOwner, + #[msg("Pyth Push oracle: mismatched feed id")] // 6055 + PythPushMismatchedFeedId, + #[msg("Pyth Push oracle: insufficient verification level")] // 6056 + PythPushInsufficientVerificationLevel, + #[msg("Pyth Push oracle: feed id must be 32 Bytes")] // 6057 + PythPushFeedIdMustBe32Bytes, + #[msg("Pyth Push oracle: feed id contains non-hex characters")] // 6058 + PythPushFeedIdNonHexCharacter, + #[msg("Switchboard oracle: wrong account owner")] // 6059 + SwitchboardWrongAccountOwner, + #[msg("Pyth Push oracle: invalid account")] // 6060 + PythPushInvalidAccount, + #[msg("Switchboard oracle: invalid account")] // 6061 + SwitchboardInvalidAccount, + #[msg("Math error")] // 6062 + MathError, + #[msg("Invalid emissions destination account")] // 6063 InvalidEmissionsDestinationAccount, } @@ -113,3 +137,95 @@ impl From for ProgramError { ProgramError::Custom(e as u32) } } + +impl From for MarginfiError { + fn from(e: pyth_solana_receiver_sdk::error::GetPriceError) -> Self { + match e { + pyth_solana_receiver_sdk::error::GetPriceError::PriceTooOld => { + MarginfiError::PythPushStalePrice + } + pyth_solana_receiver_sdk::error::GetPriceError::MismatchedFeedId => { + MarginfiError::PythPushMismatchedFeedId + } + pyth_solana_receiver_sdk::error::GetPriceError::InsufficientVerificationLevel => { + MarginfiError::PythPushInsufficientVerificationLevel + } + pyth_solana_receiver_sdk::error::GetPriceError::FeedIdMustBe32Bytes => { + MarginfiError::PythPushFeedIdMustBe32Bytes + } + pyth_solana_receiver_sdk::error::GetPriceError::FeedIdNonHexCharacter => { + MarginfiError::PythPushFeedIdNonHexCharacter + } + } + } +} +impl From for MarginfiError { + fn from(value: u32) -> Self { + match value { + 6001 => MarginfiError::BankNotFound, + 6002 => MarginfiError::LendingAccountBalanceNotFound, + 6003 => MarginfiError::BankAssetCapacityExceeded, + 6004 => MarginfiError::InvalidTransfer, + 6005 => MarginfiError::MissingPythOrBankAccount, + 6006 => MarginfiError::MissingPythAccount, + 6007 => MarginfiError::MissingBankAccount, + 6008 => MarginfiError::InvalidBankAccount, + 6009 => MarginfiError::RiskEngineInitRejected, + 6010 => MarginfiError::LendingAccountBalanceSlotsFull, + 6011 => MarginfiError::BankAlreadyExists, + 6012 => MarginfiError::IllegalLiquidation, + 6013 => MarginfiError::AccountNotBankrupt, + 6014 => MarginfiError::BalanceNotBadDebt, + 6015 => MarginfiError::InvalidConfig, + 6016 => MarginfiError::BankPaused, + 6017 => MarginfiError::BankReduceOnly, + 6018 => MarginfiError::BankAccountNotFound, + 6019 => MarginfiError::OperationDepositOnly, + 6020 => MarginfiError::OperationWithdrawOnly, + 6021 => MarginfiError::OperationBorrowOnly, + 6022 => MarginfiError::OperationRepayOnly, + 6023 => MarginfiError::NoAssetFound, + 6024 => MarginfiError::NoLiabilityFound, + 6025 => MarginfiError::InvalidOracleSetup, + 6026 => MarginfiError::IllegalUtilizationRatio, + 6027 => MarginfiError::BankLiabilityCapacityExceeded, + 6028 => MarginfiError::InvalidPrice, + 6029 => MarginfiError::IsolatedAccountIllegalState, + 6030 => MarginfiError::EmissionsAlreadySetup, + 6031 => MarginfiError::OracleNotSetup, + 6032 => MarginfiError::InvalidSwitchboardDecimalConversion, + 6033 => MarginfiError::CannotCloseOutstandingEmissions, + 6034 => MarginfiError::EmissionsUpdateError, + 6035 => MarginfiError::AccountDisabled, + 6036 => MarginfiError::AccountTempActiveBalanceLimitExceeded, + 6037 => MarginfiError::AccountInFlashloan, + 6038 => MarginfiError::IllegalFlashloan, + 6039 => MarginfiError::IllegalFlag, + 6040 => MarginfiError::IllegalBalanceState, + 6041 => MarginfiError::IllegalAccountAuthorityTransfer, + 6042 => MarginfiError::Unauthorized, + 6043 => MarginfiError::IllegalAction, + 6044 => MarginfiError::T22MintRequired, + 6045 => MarginfiError::InvalidFeeAta, + 6046 => MarginfiError::AddedStakedPoolManually, + 6047 => MarginfiError::AssetTagMismatch, + 6048 => MarginfiError::StakePoolValidationFailed, + 6049 => MarginfiError::SwitchboardStalePrice, + 6050 => MarginfiError::PythPushStalePrice, + 6051 => MarginfiError::WrongNumberOfOracleAccounts, + 6052 => MarginfiError::WrongOracleAccountKeys, + 6053 => MarginfiError::PythPushWrongAccountOwner, + 6054 => MarginfiError::StakedPythPushWrongAccountOwner, + 6055 => MarginfiError::PythPushMismatchedFeedId, + 6056 => MarginfiError::PythPushInsufficientVerificationLevel, + 6057 => MarginfiError::PythPushFeedIdMustBe32Bytes, + 6058 => MarginfiError::PythPushFeedIdNonHexCharacter, + 6059 => MarginfiError::SwitchboardWrongAccountOwner, + 6060 => MarginfiError::PythPushInvalidAccount, + 6061 => MarginfiError::SwitchboardInvalidAccount, + 6062 => MarginfiError::MathError, + 6063 => MarginfiError::InvalidEmissionsDestinationAccount, + _ => MarginfiError::InternalLogicError, + } + } +} diff --git a/programs/marginfi/src/state/marginfi_account.rs b/programs/marginfi/src/state/marginfi_account.rs index e2ff43030..d7f429d9f 100644 --- a/programs/marginfi/src/state/marginfi_account.rs +++ b/programs/marginfi/src/state/marginfi_account.rs @@ -310,7 +310,7 @@ impl<'info> BankAccountWithPriceFeed<'_, 'info> { if matches!( (&price_feed, requirement_type), - (&Err(PriceFeedError::StaleOracle), RequirementType::Initial) + (&Err(_), RequirementType::Initial) ) { debug!("Skipping stale oracle"); return Ok(I80F48::ZERO); @@ -374,14 +374,26 @@ impl<'info> BankAccountWithPriceFeed<'_, 'info> { ) } - fn try_get_price_feed(&self) -> std::result::Result<&OraclePriceFeedAdapter, PriceFeedError> { + fn try_get_price_feed(&self) -> MarginfiResult<&OraclePriceFeedAdapter> { match self.price_feed.as_ref() { Ok(a) => Ok(a), #[allow(unused_variables)] - Err(e) => { - debug!("Price feed error: {:?}", e); - Err(PriceFeedError::StaleOracle) - } + Err(e) => match e { + anchor_lang::error::Error::AnchorError(inner) => { + let error_code = inner.as_ref().error_code_number; + let custom_error = MarginfiError::from(error_code); + Err(error!(custom_error)) + } + anchor_lang::error::Error::ProgramError(inner) => { + match inner.as_ref().program_error { + ProgramError::Custom(error_code) => { + let custom_error = MarginfiError::from(error_code); + Err(error!(custom_error)) + } + _ => Err(error!(MarginfiError::InternalLogicError)), + } + } + }, } } @@ -391,18 +403,6 @@ impl<'info> BankAccountWithPriceFeed<'_, 'info> { } } -enum PriceFeedError { - StaleOracle, -} - -impl From for Error { - fn from(value: PriceFeedError) -> Self { - match value { - PriceFeedError::StaleOracle => error!(MarginfiError::StaleOracle), - } - } -} - /// Calculate the value of an asset, given its quantity with a decimal exponent, and a price with a decimal exponent, and an optional weight. #[inline] pub fn calc_value( diff --git a/programs/marginfi/src/state/marginfi_group.rs b/programs/marginfi/src/state/marginfi_group.rs index 85bca2eb5..60b492fe4 100644 --- a/programs/marginfi/src/state/marginfi_group.rs +++ b/programs/marginfi/src/state/marginfi_group.rs @@ -10,7 +10,7 @@ use crate::{ EMISSION_FLAGS, FEE_VAULT_AUTHORITY_SEED, FEE_VAULT_SEED, GROUP_FLAGS, INSURANCE_VAULT_AUTHORITY_SEED, INSURANCE_VAULT_SEED, LIQUIDITY_VAULT_AUTHORITY_SEED, LIQUIDITY_VAULT_SEED, MAX_ORACLE_KEYS, MAX_PYTH_ORACLE_AGE, MAX_SWB_ORACLE_AGE, - ORACLE_MIN_AGE, PERMISSIONLESS_BAD_DEBT_SETTLEMENT_FLAG, PYTH_ID, SECONDS_PER_YEAR, + ORACLE_MIN_AGE, PERMISSIONLESS_BAD_DEBT_SETTLEMENT_FLAG, SECONDS_PER_YEAR, TOTAL_ASSET_VALUE_INIT_LIMIT_INACTIVE, }, debug, math_error, @@ -29,7 +29,6 @@ use anchor_lang::prelude::*; use anchor_spl::token_interface::*; use bytemuck::{Pod, Zeroable}; use fixed::types::I80F48; -use pyth_sdk_solana::{state::SolanaPriceAccount, PriceFeed}; use pyth_solana_receiver_sdk::price_update::FeedId; #[cfg(feature = "client")] use std::fmt::Display; @@ -123,14 +122,6 @@ pub struct GroupConfig { pub admin: Option, } -/// Load and validate a pyth price feed account. -pub fn load_pyth_price_feed(ai: &AccountInfo) -> MarginfiResult { - check!(ai.owner.eq(&PYTH_ID), MarginfiError::InvalidOracleAccount); - let price_feed = SolanaPriceAccount::account_info_to_feed(ai) - .map_err(|_| MarginfiError::InvalidOracleAccount)?; - Ok(price_feed) -} - #[repr(C)] #[derive(Default, Debug, AnchorDeserialize, AnchorSerialize, PartialEq, Eq)] pub struct InterestRateConfigCompact { diff --git a/programs/marginfi/src/state/price.rs b/programs/marginfi/src/state/price.rs index f0d95d2a7..3c2b21d34 100644 --- a/programs/marginfi/src/state/price.rs +++ b/programs/marginfi/src/state/price.rs @@ -111,12 +111,15 @@ impl OraclePriceFeedAdapter { match bank_config.oracle_setup { OracleSetup::None => Err(MarginfiError::OracleNotSetup.into()), OracleSetup::PythLegacy => { - check!(ais.len() == 1, MarginfiError::InvalidOracleAccount); - check_eq!( - ais[0].key, - &bank_config.oracle_keys[0], - MarginfiError::InvalidOracleAccount - ); + check!(ais.len() == 1, MarginfiError::WrongNumberOfOracleAccounts); + if ais[0].key != &bank_config.oracle_keys[0] { + msg!( + "Expected oracle key: {:?}, got: {:?}", + bank_config.oracle_keys[0], + ais[0].key + ); + return Err(error!(MarginfiError::WrongOracleAccountKeys)); + } let account_info = &ais[0]; @@ -125,25 +128,29 @@ impl OraclePriceFeedAdapter { )) } OracleSetup::SwitchboardV2 => { - check!(ais.len() == 1, MarginfiError::InvalidOracleAccount); - check_eq!( - ais[0].key, - &bank_config.oracle_keys[0], - MarginfiError::InvalidOracleAccount - ); + check!(ais.len() == 1, MarginfiError::WrongNumberOfOracleAccounts); + if ais[0].key != &bank_config.oracle_keys[0] { + msg!( + "Expected oracle key: {:?}, got: {:?}", + bank_config.oracle_keys[0], + ais[0].key + ); + return Err(error!(MarginfiError::WrongOracleAccountKeys)); + } Ok(OraclePriceFeedAdapter::SwitchboardV2( SwitchboardV2PriceFeed::load_checked(&ais[0], clock.unix_timestamp, max_age)?, )) } OracleSetup::PythPushOracle => { - check!(ais.len() == 1, MarginfiError::InvalidOracleAccount); + check!(ais.len() == 1, MarginfiError::WrongNumberOfOracleAccounts); let account_info = &ais[0]; + check_eq!( account_info.owner, &pyth_solana_receiver_sdk::id(), - MarginfiError::InvalidOracleAccount + MarginfiError::PythPushWrongAccountOwner ); let price_feed_id = bank_config.get_pyth_push_oracle_feed_id().unwrap(); @@ -158,30 +165,35 @@ impl OraclePriceFeedAdapter { )) } OracleSetup::SwitchboardPull => { - check!(ais.len() == 1, MarginfiError::InvalidOracleAccount); - check_eq!( - ais[0].key, - &bank_config.oracle_keys[0], - MarginfiError::InvalidOracleAccount - ); + check!(ais.len() == 1, MarginfiError::WrongNumberOfOracleAccounts); + if ais[0].key != &bank_config.oracle_keys[0] { + msg!( + "Expected oracle key: {:?}, got: {:?}", + bank_config.oracle_keys[0], + ais[0].key + ); + return Err(error!(MarginfiError::WrongOracleAccountKeys)); + } Ok(OraclePriceFeedAdapter::SwitchboardPull( SwitchboardPullPriceFeed::load_checked(&ais[0], clock.unix_timestamp, max_age)?, )) } OracleSetup::StakedWithPythPush => { - check!(ais.len() == 3, MarginfiError::InvalidOracleAccount); - - check_eq!( - ais[1].key, - &bank_config.oracle_keys[1], - MarginfiError::InvalidOracleAccount - ); - check_eq!( - ais[2].key, - &bank_config.oracle_keys[2], - MarginfiError::InvalidOracleAccount - ); + check!(ais.len() == 3, MarginfiError::WrongNumberOfOracleAccounts); + + if ais[1].key != &bank_config.oracle_keys[1] + || ais[2].key != &bank_config.oracle_keys[2] + { + msg!( + "Expected oracle keys: [1] {:?}, [2] {:?}, got: [1] {:?}, [2] {:?}", + bank_config.oracle_keys[1], + bank_config.oracle_keys[2], + ais[1].key, + ais[2].key + ); + return Err(error!(MarginfiError::WrongOracleAccountKeys)); + } let lst_mint = Account::<'info, Mint>::try_from(&ais[1]).unwrap(); let lst_supply = lst_mint.supply; @@ -214,7 +226,7 @@ impl OraclePriceFeedAdapter { check_eq!( account_info.owner, &pyth_solana_receiver_sdk::id(), - MarginfiError::InvalidOracleAccount + MarginfiError::StakedPythPushWrongAccountOwner ); let price_feed_id = bank_config.get_pyth_push_oracle_feed_id().unwrap(); @@ -242,11 +254,15 @@ impl OraclePriceFeedAdapter { Ok(price) } else { // Localnet only - check_eq!( - ais[0].key, - &bank_config.oracle_keys[0], - MarginfiError::InvalidOracleAccount - ); + + if ais[0].key != &bank_config.oracle_keys[0] { + msg!( + "Expected oracle key: {:?}, got: {:?}", + bank_config.oracle_keys[0], + ais[0].key + ); + return Err(error!(MarginfiError::WrongOracleAccountKeys)); + } let account_info = &ais[0]; let mut feed = PythLegacyPriceFeed::load_checked( @@ -289,31 +305,47 @@ impl OraclePriceFeedAdapter { match bank_config.oracle_setup { OracleSetup::None => Err(MarginfiError::OracleNotSetup.into()), OracleSetup::PythLegacy => { - check!(oracle_ais.len() == 1, MarginfiError::InvalidOracleAccount); - check_eq!( - oracle_ais[0].key, - &bank_config.oracle_keys[0], - MarginfiError::InvalidOracleAccount + check!( + oracle_ais.len() == 1, + MarginfiError::WrongNumberOfOracleAccounts ); + if oracle_ais[0].key != &bank_config.oracle_keys[0] { + msg!( + "Expected oracle key: {:?}, got: {:?}", + bank_config.oracle_keys[0], + oracle_ais[0].key + ); + return Err(error!(MarginfiError::WrongOracleAccountKeys)); + } + PythLegacyPriceFeed::check_ais(&oracle_ais[0])?; Ok(()) } OracleSetup::SwitchboardV2 => { - check!(oracle_ais.len() == 1, MarginfiError::InvalidOracleAccount); - check_eq!( - oracle_ais[0].key, - &bank_config.oracle_keys[0], - MarginfiError::InvalidOracleAccount + check!( + oracle_ais.len() == 1, + MarginfiError::WrongNumberOfOracleAccounts ); + if oracle_ais[0].key != &bank_config.oracle_keys[0] { + msg!( + "Expected oracle key: {:?}, got: {:?}", + bank_config.oracle_keys[0], + oracle_ais[0].key + ); + return Err(error!(MarginfiError::WrongOracleAccountKeys)); + } SwitchboardV2PriceFeed::check_ais(&oracle_ais[0])?; Ok(()) } OracleSetup::PythPushOracle => { - check!(oracle_ais.len() == 1, MarginfiError::InvalidOracleAccount); + check!( + oracle_ais.len() == 1, + MarginfiError::WrongNumberOfOracleAccounts + ); PythPushOraclePriceFeed::check_ai_and_feed_id( &oracle_ais[0], @@ -323,12 +355,18 @@ impl OraclePriceFeedAdapter { Ok(()) } OracleSetup::SwitchboardPull => { - check!(oracle_ais.len() == 1, MarginfiError::InvalidOracleAccount); - check_eq!( - oracle_ais[0].key, - &bank_config.oracle_keys[0], - MarginfiError::InvalidOracleAccount + check!( + oracle_ais.len() == 1, + MarginfiError::WrongNumberOfOracleAccounts ); + if oracle_ais[0].key != &bank_config.oracle_keys[0] { + msg!( + "Expected oracle key: {:?}, got: {:?}", + bank_config.oracle_keys[0], + oracle_ais[0].key + ); + return Err(error!(MarginfiError::WrongOracleAccountKeys)); + } SwitchboardPullPriceFeed::check_ais(&oracle_ais[0])?; @@ -336,7 +374,10 @@ impl OraclePriceFeedAdapter { } OracleSetup::StakedWithPythPush => { if lst_mint.is_some() && stake_pool.is_some() && sol_pool.is_some() { - check!(oracle_ais.len() == 3, MarginfiError::InvalidOracleAccount); + check!( + oracle_ais.len() == 3, + MarginfiError::WrongNumberOfOracleAccounts + ); // Note: mainnet/staging/devnet use "push" oracles, localnet uses legacy if live!() { @@ -346,11 +387,14 @@ impl OraclePriceFeedAdapter { )?; } else { // Localnet only - check_eq!( - oracle_ais[0].key, - &bank_config.oracle_keys[0], - MarginfiError::InvalidOracleAccount - ); + if oracle_ais[0].key != &bank_config.oracle_keys[0] { + msg!( + "Expected oracle key: {:?}, got: {:?}", + bank_config.oracle_keys[0], + oracle_ais[0].key + ); + return Err(error!(MarginfiError::WrongOracleAccountKeys)); + } PythLegacyPriceFeed::check_ais(&oracle_ais[0])?; } @@ -395,7 +439,10 @@ impl OraclePriceFeedAdapter { Ok(()) } else { // light validation (after initial setup, only the Pyth oracle needs to be validated) - check!(oracle_ais.len() == 1, MarginfiError::InvalidOracleAccount); + check!( + oracle_ais.len() == 1, + MarginfiError::WrongNumberOfOracleAccounts + ); // Note: mainnet/staging/devnet use push oracles, localnet uses legacy push if live!() { PythPushOraclePriceFeed::check_ai_and_feed_id( @@ -428,7 +475,7 @@ impl PythLegacyPriceFeed { let ema_price = if live!() { price_feed .get_ema_price_no_older_than(current_time, max_age) - .ok_or(MarginfiError::StaleOracle)? + .ok_or(MarginfiError::InternalLogicError)? } else { price_feed.get_ema_price_unchecked() }; @@ -436,7 +483,7 @@ impl PythLegacyPriceFeed { let price = if live!() { price_feed .get_price_no_older_than(current_time, max_age) - .ok_or(MarginfiError::StaleOracle)? + .ok_or(MarginfiError::InternalLogicError)? } else { price_feed.get_price_unchecked() }; @@ -540,16 +587,16 @@ impl SwitchboardPullPriceFeed { check!( ai.owner.eq(&SWITCHBOARD_PULL_ID), - MarginfiError::InvalidOracleAccount + MarginfiError::SwitchboardWrongAccountOwner ); - let feed = - PullFeedAccountData::parse(ai_data).map_err(|_| MarginfiError::InvalidOracleAccount)?; + let feed = PullFeedAccountData::parse(ai_data) + .map_err(|_| MarginfiError::SwitchboardInvalidAccount)?; // Check staleness let last_updated = feed.last_update_timestamp; if current_timestamp.saturating_sub(last_updated) > max_age as i64 { - return err!(MarginfiError::StaleOracle); + return err!(MarginfiError::SwitchboardStalePrice); } Ok(Self { @@ -562,10 +609,11 @@ impl SwitchboardPullPriceFeed { check!( ai.owner.eq(&SWITCHBOARD_PULL_ID), - MarginfiError::InvalidOracleAccount + MarginfiError::SwitchboardWrongAccountOwner ); - PullFeedAccountData::parse(ai_data).map_err(|_| MarginfiError::InvalidOracleAccount)?; + PullFeedAccountData::parse(ai_data) + .map_err(|_| MarginfiError::SwitchboardInvalidAccount)?; Ok(()) } @@ -653,15 +701,15 @@ impl SwitchboardV2PriceFeed { check!( ai.owner.eq(&SWITCHBOARD_PROGRAM_ID), - MarginfiError::InvalidOracleAccount + MarginfiError::InternalLogicError ); let aggregator_account = AggregatorAccountData::new_from_bytes(&ai_data) - .map_err(|_| MarginfiError::InvalidOracleAccount)?; + .map_err(|_| MarginfiError::InternalLogicError)?; aggregator_account .check_staleness(current_timestamp, max_age as i64) - .map_err(|_| MarginfiError::StaleOracle)?; + .map_err(|_| MarginfiError::InternalLogicError)?; Ok(Self { aggregator_account: Box::new(aggregator_account.into()), @@ -673,11 +721,11 @@ impl SwitchboardV2PriceFeed { check!( ai.owner.eq(&SWITCHBOARD_PROGRAM_ID), - MarginfiError::InvalidOracleAccount + MarginfiError::InternalLogicError ); AggregatorAccountData::new_from_bytes(&ai_data) - .map_err(|_| MarginfiError::InvalidOracleAccount)?; + .map_err(|_| MarginfiError::InternalLogicError)?; Ok(()) } @@ -750,7 +798,7 @@ impl PriceAdapter for SwitchboardV2PriceFeed { pub fn load_price_update_v2_checked(ai: &AccountInfo) -> MarginfiResult { check!( ai.owner.eq(&pyth_solana_receiver_sdk::id()), - MarginfiError::InvalidOracleAccount + MarginfiError::PythPushWrongAccountOwner ); let price_feed_data = ai.try_borrow_data()?; @@ -758,7 +806,7 @@ pub fn load_price_update_v2_checked(ai: &AccountInfo) -> MarginfiResult::DISCRIMINATOR, - MarginfiError::InvalidOracleAccount + MarginfiError::PythPushInvalidAccount ); Ok(PriceUpdateV2::deserialize( @@ -806,13 +854,8 @@ impl PythPushOraclePriceFeed { ) .map_err(|e| { debug!("Pyth push oracle error: {:?}", e); - - match e { - pyth_solana_receiver_sdk::error::GetPriceError::PriceTooOld => { - MarginfiError::StaleOracle - } - _ => MarginfiError::InvalidOracleAccount, - } + let error: MarginfiError = e.into(); + error })?; let ema_price = { @@ -846,13 +889,8 @@ impl PythPushOraclePriceFeed { .get_price_unchecked(&price_feed_account.price_message.feed_id) .map_err(|e| { println!("Pyth push oracle error: {:?}", e); - - match e { - pyth_solana_receiver_sdk::error::GetPriceError::PriceTooOld => { - MarginfiError::StaleOracle - } - _ => MarginfiError::InvalidOracleAccount, - } + let error: MarginfiError = e.into(); + error })?; let ema_price = { @@ -888,10 +926,9 @@ impl PythPushOraclePriceFeed { pub fn check_ai_and_feed_id(ai: &AccountInfo, feed_id: &FeedId) -> MarginfiResult { let price_feed_account = load_price_update_v2_checked(ai)?; - check_eq!( - feed_id, - &price_feed_account.price_message.feed_id, - MarginfiError::InvalidOracleAccount + check!( + &price_feed_account.price_message.feed_id.eq(feed_id), + MarginfiError::PythPushMismatchedFeedId ); Ok(()) @@ -1065,7 +1102,7 @@ impl LiteAggregatorAccountData { let min_oracle_results = self.min_oracle_results; let latest_confirmed_round_num_success = self.latest_confirmed_round_num_success; if min_oracle_results > latest_confirmed_round_num_success { - return Err(MarginfiError::InvalidOracleAccount.into()); + return Err(MarginfiError::SwitchboardInvalidAccount.into()); } Ok(self.latest_confirmed_round_result) } @@ -1092,9 +1129,9 @@ fn pyth_price_components_to_i80f48(price: I80F48, exponent: i32) -> MarginfiResu /// Load and validate a pyth price feed account. fn load_pyth_price_feed(ai: &AccountInfo) -> MarginfiResult { - check!(ai.owner.eq(&PYTH_ID), MarginfiError::InvalidOracleAccount); + check!(ai.owner.eq(&PYTH_ID), MarginfiError::InternalLogicError); let price_feed = SolanaPriceAccount::account_info_to_feed(ai) - .map_err(|_| MarginfiError::InvalidOracleAccount)?; + .map_err(|_| MarginfiError::InternalLogicError)?; Ok(price_feed) } diff --git a/programs/marginfi/tests/admin_actions/setup_bank.rs b/programs/marginfi/tests/admin_actions/setup_bank.rs index 1caca7c57..11632a382 100644 --- a/programs/marginfi/tests/admin_actions/setup_bank.rs +++ b/programs/marginfi/tests/admin_actions/setup_bank.rs @@ -300,7 +300,7 @@ async fn marginfi_group_add_bank_failure_inexistent_pyth_feed() -> anyhow::Resul .await; assert!(res.is_err()); - assert_custom_error!(res.unwrap_err(), MarginfiError::InvalidOracleAccount); + assert_custom_error!(res.unwrap_err(), MarginfiError::InternalLogicError); Ok(()) } diff --git a/programs/marginfi/tests/misc/pyth_push.rs b/programs/marginfi/tests/misc/pyth_push.rs index 55f691a67..4099e2079 100644 --- a/programs/marginfi/tests/misc/pyth_push.rs +++ b/programs/marginfi/tests/misc/pyth_push.rs @@ -129,16 +129,20 @@ async fn pyth_push_partv_borrow() -> anyhow::Result<()> { .try_bank_borrow(borrower_token_account_f_sol.key, sol_bank, 101) .await; - // TODO: Bad error, need to improve the flexible risk engine logic to correctly pass the - // unerlying error. - assert_custom_error!(res.unwrap_err(), MarginfiError::StaleOracle); + assert_custom_error!( + res.unwrap_err(), + MarginfiError::PythPushInsufficientVerificationLevel + ); // Borrow SOL let res = borrower_mfi_account_f .try_bank_borrow(borrower_token_account_f_sol.key, sol_bank, 100) .await; - assert_custom_error!(res.unwrap_err(), MarginfiError::StaleOracle); + assert_custom_error!( + res.unwrap_err(), + MarginfiError::PythPushInsufficientVerificationLevel + ); Ok(()) } diff --git a/programs/marginfi/tests/misc/risk_engine_flexible_oracle_checks.rs b/programs/marginfi/tests/misc/risk_engine_flexible_oracle_checks.rs index 9ba344df5..c99023ddd 100644 --- a/programs/marginfi/tests/misc/risk_engine_flexible_oracle_checks.rs +++ b/programs/marginfi/tests/misc/risk_engine_flexible_oracle_checks.rs @@ -209,7 +209,7 @@ async fn re_one_oracle_stale_failure_2() -> anyhow::Result<()> { .await; assert!(res.is_err()); - assert_custom_error!(res.unwrap_err(), MarginfiError::StaleOracle); + assert_custom_error!(res.unwrap_err(), MarginfiError::InternalLogicError); // Make SOL oracle not stale test_f.set_pyth_oracle_timestamp(PYTH_SOL_FEED, 120).await; @@ -315,7 +315,7 @@ async fn re_liquidaiton_fail() -> anyhow::Result<()> { .await; assert!(res.is_err()); - assert_custom_error!(res.unwrap_err(), MarginfiError::StaleOracle); + assert_custom_error!(res.unwrap_err(), MarginfiError::InternalLogicError); // Make borrower asset bank not stale test_f.set_pyth_oracle_timestamp(PYTH_SOL_FEED, 120).await; @@ -421,7 +421,7 @@ async fn re_bankruptcy_fail() -> anyhow::Result<()> { .await; assert!(res.is_err()); - assert_custom_error!(res.unwrap_err(), MarginfiError::StaleOracle); + assert_custom_error!(res.unwrap_err(), MarginfiError::InternalLogicError); // Make borrower liablity bank not stale test_f.set_pyth_oracle_timestamp(PYTH_USDC_FEED, 120).await; diff --git a/tests/04_configureBank.spec.ts b/tests/04_configureBank.spec.ts index d21dcedb9..a9673d9cb 100644 --- a/tests/04_configureBank.spec.ts +++ b/tests/04_configureBank.spec.ts @@ -155,7 +155,7 @@ describe("Lending pool configure bank", () => { }) ) ); - }, "InvalidOracleAccount"); + }, "InternalLogicError"); await expectFailedTxWithMessage(async () => { await groupAdmin.mrgnProgram.provider.sendAndConfirm!( diff --git a/tests/s02_addBank.spec.ts b/tests/s02_addBank.spec.ts index c330f4b21..5a53da165 100644 --- a/tests/s02_addBank.spec.ts +++ b/tests/s02_addBank.spec.ts @@ -224,7 +224,7 @@ describe("Init group and add banks with asset category flags", () => { tx.sign(groupAdmin.wallet, bankKeypair); let result = await banksClient.tryProcessTransaction(tx); // AddedStakedPoolManually - assertBankrunTxFailed(result, "0x17a0"); + assertBankrunTxFailed(result, "0x179e"); }); it("(attacker) Add bank (validator 0) with bad accounts + bad metadata - should fail", async () => { @@ -302,7 +302,7 @@ describe("Init group and add banks with asset category flags", () => { let result = await banksClient.tryProcessTransaction(tx); // StakePoolValidationFailed - assertBankrunTxFailed(result, "0x17a2"); + assertBankrunTxFailed(result, "0x17a0"); } } } @@ -369,7 +369,7 @@ describe("Init group and add banks with asset category flags", () => { let result = await banksClient.tryProcessTransaction(tx); // StakePoolValidationFailed - assertBankrunTxFailed(result, "0x17a2"); + assertBankrunTxFailed(result, "0x17a0"); } } @@ -409,8 +409,8 @@ describe("Init group and add banks with asset category flags", () => { tx.sign(users[0].wallet); let result = await banksClient.tryProcessTransaction(tx); - // Note: different error - assertBankrunTxFailed(result, "0x1777"); + // Note: WrongOracleAccountKeys + assertBankrunTxFailed(result, "0x17a4"); }); it("(permissionless) Add staked collateral bank (validator 0) - happy path", async () => { diff --git a/tests/s03_deposit.spec.ts b/tests/s03_deposit.spec.ts index 2f4d562d7..97b337626 100644 --- a/tests/s03_deposit.spec.ts +++ b/tests/s03_deposit.spec.ts @@ -125,7 +125,7 @@ describe("Deposit funds (included staked assets)", () => { tx.sign(user.wallet); let result = await banksClient.tryProcessTransaction(tx); // AssetTagMismatch - assertBankrunTxFailed(result, "0x17a1"); + assertBankrunTxFailed(result, "0x179f"); // Verify the deposit failed and the entry does not exist const userAcc = await bankrunProgram.account.marginfiAccount.fetch( @@ -208,7 +208,7 @@ describe("Deposit funds (included staked assets)", () => { tx.sign(user.wallet); let result = await banksClient.tryProcessTransaction(tx); // AssetTagMismatch - assertBankrunTxFailed(result, "0x17a1"); + assertBankrunTxFailed(result, "0x179f"); // Verify the deposit failed and the entry does not exist const userAcc = await bankrunProgram.account.marginfiAccount.fetch( diff --git a/tests/s04_borrow.spec.ts b/tests/s04_borrow.spec.ts index 07a8d5b4d..7f791ddcb 100644 --- a/tests/s04_borrow.spec.ts +++ b/tests/s04_borrow.spec.ts @@ -91,7 +91,7 @@ describe("Deposit funds (included staked assets)", () => { tx.sign(user.wallet); let result = await banksClient.tryProcessTransaction(tx); // AssetTagMismatch - assertBankrunTxFailed(result, "0x17a1"); + assertBankrunTxFailed(result, "0x179f"); // Verify the deposit worked and the entry does not exist const userAcc = await bankrunProgram.account.marginfiAccount.fetch( diff --git a/tests/s05_solAppreciates.spec.ts b/tests/s05_solAppreciates.spec.ts index 6860be4a0..d077c2fb8 100644 --- a/tests/s05_solAppreciates.spec.ts +++ b/tests/s05_solAppreciates.spec.ts @@ -63,8 +63,8 @@ describe("Borrow power grows as v0 Staked SOL gains value from appreciation", () tx.sign(user.wallet); let result = await banksClient.tryProcessTransaction(tx); - // 6010 (Generic risk engine rejection) - assertBankrunTxFailed(result, "0x177a"); + // 6009 (Generic risk engine rejection) + assertBankrunTxFailed(result, "0x1779"); const userAcc = await bankrunProgram.account.marginfiAccount.fetch( userAccount @@ -113,9 +113,8 @@ describe("Borrow power grows as v0 Staked SOL gains value from appreciation", () tx.sign(user.wallet); let result = await banksClient.tryProcessTransaction(tx); - // Throws 6007 (InvalidOracleAccount) first at `try_from_bank_config_with_max_age` which is - // converted to 6010 (Generic risk engine rejection) downstream - assertBankrunTxFailed(result, "0x177a"); + // 6009 (Generic risk engine rejection) + assertBankrunTxFailed(result, "0x1779"); }); it("(user 2 - attacker) ties to sneak in bad sol pool - should fail", async () => { @@ -141,9 +140,8 @@ describe("Borrow power grows as v0 Staked SOL gains value from appreciation", () tx.sign(user.wallet); let result = await banksClient.tryProcessTransaction(tx); - // Throws 6007 (InvalidOracleAccount) first at `try_from_bank_config_with_max_age` which is - // converted to 6010 (Generic risk engine rejection) downstream - assertBankrunTxFailed(result, "0x177a"); + // 6009 (Generic risk engine rejection) + assertBankrunTxFailed(result, "0x1779"); }); // The stake hasn't changed (even though the SOL balance did) so this should still fail @@ -174,8 +172,8 @@ describe("Borrow power grows as v0 Staked SOL gains value from appreciation", () tx.sign(user.wallet); let result = await banksClient.tryProcessTransaction(tx); - // 6010 (Generic risk engine rejection) - assertBankrunTxFailed(result, "0x177a"); + // 6009 (Generic risk engine rejection) + assertBankrunTxFailed(result, "0x1779"); }); it("Generate stake income....", async () => { diff --git a/tests/s06_propagateSets.spec.ts b/tests/s06_propagateSets.spec.ts index befe5fe95..e30ce0d3d 100644 --- a/tests/s06_propagateSets.spec.ts +++ b/tests/s06_propagateSets.spec.ts @@ -153,8 +153,8 @@ describe("Edit and propagate staked settings", () => { tx.sign(groupAdmin.wallet); // just to the pay the fee let result = await banksClient.tryProcessTransaction(tx); - // 6007 (InvalidOracleAccount) - assertBankrunTxFailed(result, "0x1777"); + // 6000 (InternalLogicError) + assertBankrunTxFailed(result, "0x1770"); }); it("(admin) restores default settings - happy path", async () => { From 5fae4998e67f55816b795468521be403a23966a7 Mon Sep 17 00:00:00 2001 From: Jon Gurary <91919816+jgur-psyops@users.noreply.github.com> Date: Tue, 11 Mar 2025 15:30:16 -0400 Subject: [PATCH 50/59] Health pulse (#307) * Adds an instruction that caches the risk engine's internal health information on-chain. * borrow/withdraw now also cache internal health information on success. --- Anchor.toml | 4 +- .../instructions/marginfi_account/borrow.rs | 13 +- .../marginfi_account/flashloan.rs | 13 +- .../marginfi_account/liquidate.rs | 3 + .../src/instructions/marginfi_account/mod.rs | 2 + .../marginfi_account/pulse_health.rs | 44 +++ .../instructions/marginfi_account/withdraw.rs | 13 +- programs/marginfi/src/lib.rs | 11 + programs/marginfi/src/state/health_cache.rs | 63 ++++ .../marginfi/src/state/marginfi_account.rs | 158 ++++---- programs/marginfi/src/state/marginfi_group.rs | 1 + programs/marginfi/src/state/mod.rs | 1 + programs/marginfi/tests/misc/regression.rs | 13 +- .../marginfi/tests/user_actions/borrow.rs | 28 ++ .../marginfi/tests/user_actions/withdraw.rs | 26 ++ test-utils/src/test.rs | 25 ++ tests/08_borrow.spec.ts | 50 ++- tests/09_withdraw_repay.spec.ts | 31 +- tests/10_liquidate.spec.ts | 326 ++++++++++++---- tests/11_health_pulse.spec.ts | 348 ++++++++++++++++++ tests/s08_liquidate.spec.ts | 8 +- tests/utils/mocks.ts | 2 + tests/utils/pyth_mocks.ts | 26 +- tests/utils/types.ts | 5 + tests/utils/user-instructions.ts | 55 ++- 25 files changed, 1097 insertions(+), 172 deletions(-) create mode 100644 programs/marginfi/src/instructions/marginfi_account/pulse_health.rs create mode 100644 programs/marginfi/src/state/health_cache.rs create mode 100644 tests/11_health_pulse.spec.ts diff --git a/Anchor.toml b/Anchor.toml index af4a92199..5d7661d37 100644 --- a/Anchor.toml +++ b/Anchor.toml @@ -26,10 +26,10 @@ wallet = "~/.config/solana/id.json" # (remove RUST_LOG= to see bankRun logs) [scripts] -# test = "RUST_LOG= yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/*.spec.ts --exit --require tests/rootHooks.ts" +test = "RUST_LOG= yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/*.spec.ts --exit --require tests/rootHooks.ts" # Staked collateral tests only -test = "RUST_LOG= yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/s*.spec.ts --exit --require tests/rootHooks.ts" +# test = "RUST_LOG= yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/s*.spec.ts --exit --require tests/rootHooks.ts" [test] startup_wait = 60000 diff --git a/programs/marginfi/src/instructions/marginfi_account/borrow.rs b/programs/marginfi/src/instructions/marginfi_account/borrow.rs index fb7759b1b..1790f197b 100644 --- a/programs/marginfi/src/instructions/marginfi_account/borrow.rs +++ b/programs/marginfi/src/instructions/marginfi_account/borrow.rs @@ -5,6 +5,7 @@ use crate::{ math_error, prelude::{MarginfiError, MarginfiGroup, MarginfiResult}, state::{ + health_cache::HealthCache, marginfi_account::{BankAccountWrapper, MarginfiAccount, RiskEngine, DISABLED_FLAG}, marginfi_group::{Bank, BankVaultType}, }, @@ -12,6 +13,7 @@ use crate::{ }; use anchor_lang::prelude::*; use anchor_spl::token_interface::{TokenAccount, TokenInterface}; +use bytemuck::Zeroable; use fixed::types::I80F48; use solana_program::{clock::Clock, sysvar::Sysvar}; @@ -165,9 +167,18 @@ pub fn lending_account_borrow<'info>( } } + let mut health_cache = HealthCache::zeroed(); + health_cache.timestamp = clock.unix_timestamp; + // Check account health, if below threshold fail transaction // Assuming `ctx.remaining_accounts` holds only oracle accounts - RiskEngine::check_account_init_health(&marginfi_account, ctx.remaining_accounts)?; + RiskEngine::check_account_init_health( + &marginfi_account, + ctx.remaining_accounts, + &mut Some(&mut health_cache), + )?; + health_cache.set_engine_ok(true); + marginfi_account.health_cache = health_cache; Ok(()) } diff --git a/programs/marginfi/src/instructions/marginfi_account/flashloan.rs b/programs/marginfi/src/instructions/marginfi_account/flashloan.rs index b6d518d40..fe881db45 100644 --- a/programs/marginfi/src/instructions/marginfi_account/flashloan.rs +++ b/programs/marginfi/src/instructions/marginfi_account/flashloan.rs @@ -1,14 +1,13 @@ -use anchor_lang::{prelude::*, Discriminator}; -use solana_program::{ - instruction::{get_stack_height, TRANSACTION_LEVEL_STACK_HEIGHT}, - sysvar::{self, instructions}, -}; - use crate::{ check, prelude::*, state::marginfi_account::{MarginfiAccount, RiskEngine, DISABLED_FLAG, IN_FLASHLOAN_FLAG}, }; +use anchor_lang::{prelude::*, Discriminator}; +use solana_program::{ + instruction::{get_stack_height, TRANSACTION_LEVEL_STACK_HEIGHT}, + sysvar::{self, instructions}, +}; pub fn lending_account_start_flashloan( ctx: Context, @@ -137,7 +136,7 @@ pub fn lending_account_end_flashloan<'info>( marginfi_account.unset_flag(IN_FLASHLOAN_FLAG); - RiskEngine::check_account_init_health(&marginfi_account, ctx.remaining_accounts)?; + RiskEngine::check_account_init_health(&marginfi_account, ctx.remaining_accounts, &mut None)?; Ok(()) } diff --git a/programs/marginfi/src/instructions/marginfi_account/liquidate.rs b/programs/marginfi/src/instructions/marginfi_account/liquidate.rs index 429d180fb..f3e53fbb2 100644 --- a/programs/marginfi/src/instructions/marginfi_account/liquidate.rs +++ b/programs/marginfi/src/instructions/marginfi_account/liquidate.rs @@ -387,10 +387,13 @@ pub fn lending_account_liquidate<'info>( pre_liquidation_health, )?; + // TODO consider if health cache update here is worth blowing the extra CU + // Verify liquidator account health RiskEngine::check_account_init_health( &liquidator_marginfi_account, liquidator_remaining_accounts, + &mut None, )?; emit!(LendingAccountLiquidateEvent { diff --git a/programs/marginfi/src/instructions/marginfi_account/mod.rs b/programs/marginfi/src/instructions/marginfi_account/mod.rs index 41b669784..ca17b3f6c 100644 --- a/programs/marginfi/src/instructions/marginfi_account/mod.rs +++ b/programs/marginfi/src/instructions/marginfi_account/mod.rs @@ -6,6 +6,7 @@ mod emissions; mod flashloan; mod initialize; mod liquidate; +mod pulse_health; mod repay; mod transfer_authority; mod withdraw; @@ -18,6 +19,7 @@ pub use emissions::*; pub use flashloan::*; pub use initialize::*; pub use liquidate::*; +pub use pulse_health::*; pub use repay::*; pub use transfer_authority::*; pub use withdraw::*; diff --git a/programs/marginfi/src/instructions/marginfi_account/pulse_health.rs b/programs/marginfi/src/instructions/marginfi_account/pulse_health.rs new file mode 100644 index 000000000..b0b32d614 --- /dev/null +++ b/programs/marginfi/src/instructions/marginfi_account/pulse_health.rs @@ -0,0 +1,44 @@ +use anchor_lang::prelude::*; +use bytemuck::Zeroable; +use solana_program::{clock::Clock, sysvar::Sysvar}; + +use crate::{ + state::{ + health_cache::HealthCache, + marginfi_account::{MarginfiAccount, RiskEngine}, + }, + MarginfiResult, +}; + +pub fn lending_account_pulse_health<'info>( + ctx: Context<'_, '_, 'info, 'info, PulseHealth<'info>>, +) -> MarginfiResult { + let clock = Clock::get()?; + let mut marginfi_account = ctx.accounts.marginfi_account.load_mut()?; + + let mut health_cache = HealthCache::zeroed(); + health_cache.timestamp = clock.unix_timestamp; + + match RiskEngine::check_account_init_health( + &marginfi_account, + ctx.remaining_accounts, + &mut Some(&mut health_cache), + ) { + Ok(()) => { + health_cache.set_engine_ok(true); + } + Err(_) => { + health_cache.set_engine_ok(false); + } + } + + marginfi_account.health_cache = health_cache; + + Ok(()) +} + +#[derive(Accounts)] +pub struct PulseHealth<'info> { + #[account(mut)] + pub marginfi_account: AccountLoader<'info, MarginfiAccount>, +} diff --git a/programs/marginfi/src/instructions/marginfi_account/withdraw.rs b/programs/marginfi/src/instructions/marginfi_account/withdraw.rs index 425b7a4f3..511c01c01 100644 --- a/programs/marginfi/src/instructions/marginfi_account/withdraw.rs +++ b/programs/marginfi/src/instructions/marginfi_account/withdraw.rs @@ -4,6 +4,7 @@ use crate::{ events::{AccountEventHeader, LendingAccountWithdrawEvent}, prelude::*, state::{ + health_cache::HealthCache, marginfi_account::{BankAccountWrapper, MarginfiAccount, RiskEngine, DISABLED_FLAG}, marginfi_group::{Bank, BankVaultType}, }, @@ -11,6 +12,7 @@ use crate::{ }; use anchor_lang::prelude::*; use anchor_spl::token_interface::{TokenAccount, TokenInterface}; +use bytemuck::Zeroable; use fixed::types::I80F48; use solana_program::{clock::Clock, sysvar::Sysvar}; @@ -119,9 +121,18 @@ pub fn lending_account_withdraw<'info>( }); } + let mut health_cache = HealthCache::zeroed(); + health_cache.timestamp = clock.unix_timestamp; + // Check account health, if below threshold fail transaction // Assuming `ctx.remaining_accounts` holds only oracle accounts - RiskEngine::check_account_init_health(&marginfi_account, ctx.remaining_accounts)?; + RiskEngine::check_account_init_health( + &marginfi_account, + ctx.remaining_accounts, + &mut Some(&mut health_cache), + )?; + health_cache.set_engine_ok(true); + marginfi_account.health_cache = health_cache; Ok(()) } diff --git a/programs/marginfi/src/lib.rs b/programs/marginfi/src/lib.rs index ef3a81f6a..de9485a80 100644 --- a/programs/marginfi/src/lib.rs +++ b/programs/marginfi/src/lib.rs @@ -244,6 +244,17 @@ pub mod marginfi { marginfi_account::lending_account_withdraw_emissions_permissionless(ctx) } + /// (Permissionless) Refresh the internal risk engine health cache. Useful for liquidators and + /// other consumers that want to see the internal risk state of a user account. This cache is + /// read-only and serves no purpose except being populated by this ix. + /// * remaining accounts expected in the same order as borrow, etc. I.e., for each balance the + /// user has, pass bank and oracle: + pub fn lending_account_pulse_health<'info>( + ctx: Context<'_, '_, 'info, 'info, PulseHealth<'info>>, + ) -> MarginfiResult { + marginfi_account::lending_account_pulse_health(ctx) + } + /// (Runs once per program) Configures the fee state account, where the global admin sets fees /// that are assessed to the protocol pub fn init_global_fee_state( diff --git a/programs/marginfi/src/state/health_cache.rs b/programs/marginfi/src/state/health_cache.rs new file mode 100644 index 000000000..e25f200e6 --- /dev/null +++ b/programs/marginfi/src/state/health_cache.rs @@ -0,0 +1,63 @@ +use super::{marginfi_account::MAX_LENDING_ACCOUNT_BALANCES, marginfi_group::WrappedI80F48}; +use crate::{assert_struct_align, assert_struct_size}; +use anchor_lang::prelude::*; +use bytemuck::{Pod, Zeroable}; +use type_layout::TypeLayout; + +assert_struct_size!(HealthCache, 304); +assert_struct_align!(HealthCache, 8); +#[repr(C)] +#[derive( + AnchorDeserialize, AnchorSerialize, Copy, Clone, Zeroable, Pod, PartialEq, Eq, TypeLayout, Debug, +)] +/// A read-only cache of the internal risk engine's information. Only valid in borrow/withdraw if +/// the tx does not fail. To see the state in any context, e.g. to figure out if the risk engine is +/// failing due to some bad price information, use `pulse_health`. +pub struct HealthCache { + pub asset_value: WrappedI80F48, + pub liability_value: WrappedI80F48, + /// Unix timestamp from the system clock when this cache was last updated + pub timestamp: i64, + /// The flags that indicate the state of the health cache This is u64 bitfield, where each bit + /// represents a flag. + /// + /// * HEALTHY = 1 - If set, the account cannot be liquidated. If 0, the account is unhealthy and + /// can be liquidated. + /// * ENGINE STATUS = 2 - If set, the engine did not error during the last health pulse. If 0, + /// the engine would have errored and this cache is likely invalid. + /// * 4, 8, 16, 32, 64, 128, etc - reserved for future use + pub flags: u64, + /// Each price corresponds to that index of Balances in the LendingAccount. Useful for debugging + /// or liquidator consumption, to determine how a user's position is priced internally. + /// * If a price overflows u64, shows u64::MAX + /// * If a price is negative for some reason (as several oracles support), pulse will panic + pub prices: [WrappedI80F48; MAX_LENDING_ACCOUNT_BALANCES], +} + +impl HealthCache { + /// True if account is healthy (cannot be liquidated) + pub fn is_healthy(&self) -> bool { + self.flags & 1 != 0 + } + + pub fn set_healthy(&mut self, healthy: bool) { + if healthy { + self.flags |= 1; + } else { + self.flags &= !1; + } + } + + /// True if the engine did not error during the last health pulse. + pub fn is_engine_ok(&self) -> bool { + self.flags & 2 != 0 + } + + pub fn set_engine_ok(&mut self, ok: bool) { + if ok { + self.flags |= 2; + } else { + self.flags &= !2; + } + } +} diff --git a/programs/marginfi/src/state/marginfi_account.rs b/programs/marginfi/src/state/marginfi_account.rs index d7f429d9f..68e9701bd 100644 --- a/programs/marginfi/src/state/marginfi_account.rs +++ b/programs/marginfi/src/state/marginfi_account.rs @@ -1,4 +1,5 @@ use super::{ + health_cache::HealthCache, marginfi_group::{Bank, RiskTier, WrappedI80F48}, price::{OraclePriceFeedAdapter, OraclePriceType, PriceAdapter, PriceBias}, }; @@ -47,8 +48,8 @@ pub struct MarginfiAccount { /// If pubkey default, the user has not opted into this feature, and must claim emissions /// manually (withdraw_emissions). pub emissions_destination_account: Pubkey, // 32 - pub _padding0: [u64; 32], // 504 - pub _padding1: [u64; 27], + pub health_cache: HealthCache, + pub _padding0: [u64; 21], } pub const DISABLED_FLAG: u64 = 1 << 0; @@ -208,7 +209,12 @@ impl<'info> BankAccountWithPriceFeed<'_, 'info> { .filter(|balance| balance.is_active()) .map(|balance| { // Get the bank - let bank_ai = remaining_ais.get(account_index).unwrap(); + let bank_ai: Option<&AccountInfo<'info>> = remaining_ais.get(account_index); + if bank_ai.is_none() { + msg!("Ran out of remaining accounts at {:?}", account_index); + return err!(MarginfiError::InvalidBankAccount); + } + let bank_ai = bank_ai.unwrap(); let bank_al = AccountLoader::::try_from(bank_ai)?; // Determine number of accounts to process for this balance @@ -241,18 +247,22 @@ impl<'info> BankAccountWithPriceFeed<'_, 'info> { } #[inline(always)] - /// Calculate the value of the assets and liabilities of the account in the form of (assets, liabilities) + /// Calculate the value of the balance, which is either an asset or a liability. If it is an + /// asset, returns (asset_value, 0, price), and if it is a liability, returns (0, liabilty + /// value, price), where price is the actual oracle price used to determine the value after bias + /// adjustments, etc. /// /// Nuances: /// 1. Maintenance requirement is calculated using the real time price feed. /// 2. Initial requirement is calculated using the time weighted price feed, if available. - /// 3. Initial requirement is discounted by the initial discount, if enabled and the usd limit is exceeded. + /// 3. Initial requirement is discounted by the initial discount, if enabled and the usd limit + /// is exceeded. /// 4. Assets are only calculated for collateral risk tier. /// 5. Oracle errors are ignored for deposits in isolated risk tier. - fn calc_weighted_assets_and_liabilities_values<'a>( + fn calc_weighted_value<'a>( &'a self, requirement_type: RequirementType, - ) -> MarginfiResult<(I80F48, I80F48)> + ) -> MarginfiResult<(I80F48, I80F48, I80F48)> where 'info: 'a, { @@ -284,26 +294,31 @@ impl<'info> BankAccountWithPriceFeed<'_, 'info> { // let bank = bank_al.load()?; match side { - BalanceSide::Assets => Ok(( - self.calc_weighted_assets(requirement_type, &bank)?, - I80F48::ZERO, - )), - BalanceSide::Liabilities => Ok(( - I80F48::ZERO, - self.calc_weighted_liabs(requirement_type, &bank)?, - )), + BalanceSide::Assets => { + // TODO: health_cache.prices[some_index] = the index of this in the bank_accounts_with_price Vec + let (value, price) = + self.calc_weighted_asset_value(requirement_type, &bank)?; + Ok((value, I80F48::ZERO, price)) + } + + BalanceSide::Liabilities => { + let (value, price) = + self.calc_weighted_liab_value(requirement_type, &bank)?; + Ok((I80F48::ZERO, value, price)) + } } } - None => Ok((I80F48::ZERO, I80F48::ZERO)), + None => Ok((I80F48::ZERO, I80F48::ZERO, I80F48::ZERO)), } } + /// Returns value, the net asset value in $, and the price used to determine that value. #[inline(always)] - fn calc_weighted_assets<'a>( + fn calc_weighted_asset_value<'a>( &'a self, requirement_type: RequirementType, bank: &'a Bank, - ) -> MarginfiResult { + ) -> MarginfiResult<(I80F48, I80F48)> { match bank.config.risk_tier { RiskTier::Collateral => { let price_feed = self.try_get_price_feed(); @@ -313,7 +328,7 @@ impl<'info> BankAccountWithPriceFeed<'_, 'info> { (&Err(_), RequirementType::Initial) ) { debug!("Skipping stale oracle"); - return Ok(I80F48::ZERO); + return Ok((I80F48::ZERO, I80F48::ZERO)); } let price_feed = price_feed?; @@ -337,23 +352,26 @@ impl<'info> BankAccountWithPriceFeed<'_, 'info> { } } - calc_value( + let value = calc_value( bank.get_asset_amount(self.balance.asset_shares.into())?, lower_price, bank.mint_decimals, Some(asset_weight), - ) + )?; + + Ok((value, lower_price)) } - RiskTier::Isolated => Ok(I80F48::ZERO), + RiskTier::Isolated => Ok((I80F48::ZERO, I80F48::ZERO)), } } + /// Returns value, the net liability value in $, and the price used to determine that value. #[inline(always)] - fn calc_weighted_liabs( + fn calc_weighted_liab_value( &self, requirement_type: RequirementType, bank: &Bank, - ) -> MarginfiResult { + ) -> MarginfiResult<(I80F48, I80F48)> { let price_feed = self.try_get_price_feed()?; let liability_weight = bank .config @@ -366,12 +384,14 @@ impl<'info> BankAccountWithPriceFeed<'_, 'info> { // If `ASSET_TAG_STAKED` assets can ever be borrowed, accomodate for that here... - calc_value( + let value = calc_value( bank.get_liability_amount(self.balance.liability_shares.into())?, higher_price, bank.mint_decimals, Some(liability_weight), - ) + )?; + + Ok((value, higher_price)) } fn try_get_price_feed(&self) -> MarginfiResult<&OraclePriceFeedAdapter> { @@ -508,13 +528,16 @@ impl<'info> RiskEngine<'_, 'info> { pub fn check_account_init_health<'a>( marginfi_account: &'a MarginfiAccount, remaining_ais: &'info [AccountInfo<'info>], + health_cache: &mut Option<&mut HealthCache>, ) -> MarginfiResult<()> { if marginfi_account.get_flag(IN_FLASHLOAN_FLAG) { + // Note: The health cache is not applicable to flashloans return Ok(()); } - Self::new_no_flashloan_check(marginfi_account, remaining_ais)? - .check_account_health(RiskRequirementType::Initial)?; + let risk_engine = Self::new_no_flashloan_check(marginfi_account, remaining_ais)?; + let requirement_type = RiskRequirementType::Initial; + risk_engine.check_account_health(requirement_type, health_cache)?; Ok(()) } @@ -523,57 +546,68 @@ impl<'info> RiskEngine<'_, 'info> { pub fn get_account_health_components( &self, requirement_type: RiskRequirementType, + health_cache: &mut Option<&mut HealthCache>, ) -> MarginfiResult<(I80F48, I80F48)> { - let mut total_assets = I80F48::ZERO; - let mut total_liabilities = I80F48::ZERO; + let mut total_assets: I80F48 = I80F48::ZERO; + let mut total_liabilities: I80F48 = I80F48::ZERO; + + for (i, bank_account) in self.bank_accounts_with_price.iter().enumerate() { + let requirement_type = requirement_type.to_weight_type(); + let (asset_val, liab_val, price) = + bank_account.calc_weighted_value(requirement_type)?; - for a in &self.bank_accounts_with_price { - let (assets, liabilities) = - a.calc_weighted_assets_and_liabilities_values(requirement_type.to_weight_type())?; + if let Some(health_cache) = health_cache { + health_cache.prices[i] = price.into(); + } debug!( "Balance {}, assets: {}, liabilities: {}", - a.balance.bank_pk, assets, liabilities + bank_account.balance.bank_pk, asset_val, liab_val ); - total_assets = total_assets.checked_add(assets).ok_or_else(math_error!())?; + total_assets = total_assets + .checked_add(asset_val) + .ok_or_else(math_error!())?; total_liabilities = total_liabilities - .checked_add(liabilities) + .checked_add(liab_val) .ok_or_else(math_error!())?; } + if let Some(health_cache) = health_cache { + health_cache.asset_value = total_assets.into(); + health_cache.liability_value = total_liabilities.into(); + } + Ok((total_assets, total_liabilities)) } - pub fn get_account_health( - &'info self, + /// Errors if risk account's liabilities exceed their assets. + fn check_account_health( + &self, requirement_type: RiskRequirementType, - ) -> MarginfiResult { + health_cache: &mut Option<&mut HealthCache>, + ) -> MarginfiResult<()> { let (total_weighted_assets, total_weighted_liabilities) = - self.get_account_health_components(requirement_type)?; + self.get_account_health_components(requirement_type, health_cache)?; - Ok(total_weighted_assets - .checked_sub(total_weighted_liabilities) - .ok_or_else(math_error!())?) - } + let healthy = total_weighted_assets >= total_weighted_liabilities; - fn check_account_health(&self, requirement_type: RiskRequirementType) -> MarginfiResult { - let (total_weighted_assets, total_weighted_liabilities) = - self.get_account_health_components(requirement_type)?; - - if total_weighted_assets >= total_weighted_liabilities { + if healthy { debug!( "check_health: assets {} - liabs: {}", total_weighted_assets, total_weighted_liabilities ); } else { - let assets_u128: u128 = total_weighted_assets.to_num(); - let liabs_u128: u128 = total_weighted_liabilities.to_num(); - msg!( - "check_health: assets {} - liabs: {}", - assets_u128, - liabs_u128 - ); + let assets_f64: f64 = total_weighted_assets.to_num(); + let liabs_f64: f64 = total_weighted_liabilities.to_num(); + msg!("check_health: assets {} - liabs: {}", assets_f64, liabs_f64); + } + + if let Some(cache) = health_cache { + cache.set_healthy(healthy); + } + + if !healthy { return err!(MarginfiError::RiskEngineInitRejected); } @@ -613,7 +647,7 @@ impl<'info> RiskEngine<'_, 'info> { ); let (assets, liabs) = - self.get_account_health_components(RiskRequirementType::Maintenance)?; + self.get_account_health_components(RiskRequirementType::Maintenance, &mut None)?; let account_health = assets.checked_sub(liabs).ok_or_else(math_error!())?; @@ -672,7 +706,7 @@ impl<'info> RiskEngine<'_, 'info> { ); let (assets, liabs) = - self.get_account_health_components(RiskRequirementType::Maintenance)?; + self.get_account_health_components(RiskRequirementType::Maintenance, &mut None)?; let account_health = assets.checked_sub(liabs).ok_or_else(math_error!())?; @@ -700,7 +734,7 @@ impl<'info> RiskEngine<'_, 'info> { /// Account needs to be insolvent and total value of assets need to be below the bankruptcy threshold. pub fn check_account_bankrupt(&self) -> MarginfiResult { let (total_assets, total_liabilities) = - self.get_account_health_components(RiskRequirementType::Equity)?; + self.get_account_health_components(RiskRequirementType::Equity, &mut None)?; check!( !self.marginfi_account.get_flag(IN_FLASHLOAN_FLAG), @@ -767,7 +801,7 @@ impl<'info> RiskEngine<'_, 'info> { } } -const MAX_LENDING_ACCOUNT_BALANCES: usize = 16; +pub const MAX_LENDING_ACCOUNT_BALANCES: usize = 16; assert_struct_size!(LendingAccount, 1728); assert_struct_align!(LendingAccount, 8); @@ -1495,8 +1529,8 @@ mod test { _padding: [0; 8], }, account_flags: TRANSFER_AUTHORITY_ALLOWED_FLAG, - _padding0: [0; 32], - _padding1: [0; 27], + health_cache: HealthCache::zeroed(), + _padding0: [0; 21], }; assert!(acc.get_flag(TRANSFER_AUTHORITY_ALLOWED_FLAG)); diff --git a/programs/marginfi/src/state/marginfi_group.rs b/programs/marginfi/src/state/marginfi_group.rs index 60b492fe4..341f4f440 100644 --- a/programs/marginfi/src/state/marginfi_group.rs +++ b/programs/marginfi/src/state/marginfi_group.rs @@ -466,6 +466,7 @@ pub struct Bank { /// - EMISSIONS_FLAG_BORROW_ACTIVE: 1 /// - EMISSIONS_FLAG_LENDING_ACTIVE: 2 /// - PERMISSIONLESS_BAD_DEBT_SETTLEMENT: 4 + /// - FREEZE_SETTINGS: 8 /// pub flags: u64, /// Emissions APR. diff --git a/programs/marginfi/src/state/mod.rs b/programs/marginfi/src/state/mod.rs index 1fa883b0f..66865081b 100644 --- a/programs/marginfi/src/state/mod.rs +++ b/programs/marginfi/src/state/mod.rs @@ -1,4 +1,5 @@ pub mod fee_state; +pub mod health_cache; pub mod marginfi_account; pub mod marginfi_group; pub mod price; diff --git a/programs/marginfi/tests/misc/regression.rs b/programs/marginfi/tests/misc/regression.rs index 6b78d6a07..430260f34 100644 --- a/programs/marginfi/tests/misc/regression.rs +++ b/programs/marginfi/tests/misc/regression.rs @@ -3,10 +3,12 @@ use std::{fs::File, io::Read, path::PathBuf, str::FromStr}; use anchor_lang::AccountDeserialize; use anyhow::bail; use base64::{prelude::BASE64_STANDARD, Engine}; +use bytemuck::Zeroable; use fixed::types::I80F48; use marginfi::{ constants::ASSET_TAG_DEFAULT, state::{ + health_cache::HealthCache, marginfi_account::MarginfiAccount, marginfi_group::{Bank, BankOperationalState, RiskTier}, price::OracleSetup, @@ -45,8 +47,9 @@ async fn account_field_values_reg() -> anyhow::Result<()> { pubkey!("Dq7wypbedtaqQK9QqEFvfrxc4ppfRGXCeTVd7ee7n2jw") ); assert_eq!(account.account_flags, 0); - assert_eq!(account._padding0, [0; 32]); - assert_eq!(account._padding1, [0; 27]); + // health cache doesn't exist on these old accounts, but it also doesn't matter since it's read-only + assert_eq!(account.health_cache, HealthCache::zeroed()); + assert_eq!(account._padding0, [0; 21]); let balance_1 = account.lending_account.balances[0]; assert!(balance_1.is_active()); @@ -123,8 +126,7 @@ async fn account_field_values_reg() -> anyhow::Result<()> { pubkey!("3T1kGHp7CrdeW9Qj1t8NMc2Ks233RyvzVhoaUPWoBEFK") ); assert_eq!(account.account_flags, 0); - assert_eq!(account._padding0, [0; 32]); - assert_eq!(account._padding1, [0; 27]); + assert_eq!(account._padding0, [0; 21]); let balance_1 = account.lending_account.balances[0]; assert!(balance_1.is_active()); @@ -201,8 +203,7 @@ async fn account_field_values_reg() -> anyhow::Result<()> { pubkey!("7hmfVTuXc7HeX3YQjpiCXGVQuTeXonzjp795jorZukVR") ); assert_eq!(account.account_flags, 0); - assert_eq!(account._padding0, [0; 32]); - assert_eq!(account._padding1, [0; 27]); + assert_eq!(account._padding0, [0; 21]); let balance_1 = account.lending_account.balances[0]; assert!(!balance_1.is_active()); diff --git a/programs/marginfi/tests/user_actions/borrow.rs b/programs/marginfi/tests/user_actions/borrow.rs index eb6328382..f8f4b8715 100644 --- a/programs/marginfi/tests/user_actions/borrow.rs +++ b/programs/marginfi/tests/user_actions/borrow.rs @@ -175,6 +175,34 @@ async fn marginfi_account_borrow_success( post_fee_group_fees ); + let health_cache = marginfi_account.health_cache; + assert!(health_cache.is_engine_ok()); + assert!(health_cache.is_healthy()); + + let asset_value: I80F48 = health_cache.asset_value.into(); + let asset_value: f64 = asset_value.to_num(); + let liab_value: I80F48 = health_cache.liability_value.into(); + let liab_value: f64 = liab_value.to_num(); + let collateral_price_roughly = get_mint_price(collateral_mint); + let liablility_price_roughly: f64 = get_mint_price(debt_mint); + // Apply a small discount to account for conf discounts, etc. + let disc: f64 = 0.95; + assert!(asset_value > deposit_amount * collateral_price_roughly * disc); + assert!(liab_value > borrow_amount * liablility_price_roughly * disc); + + for (i, bal) in marginfi_account.lending_account.balances.iter().enumerate() { + let shares: I80F48 = bal.asset_shares.into(); + if bal.is_active() { + let price: I80F48 = health_cache.prices[i].into(); + let price: f64 = price.to_num(); + if shares != I80F48::ZERO { + assert!(price >= (collateral_price_roughly * disc)); + } else { + assert!(price >= (liablility_price_roughly * disc)); + } + } + } + Ok(()) } diff --git a/programs/marginfi/tests/user_actions/withdraw.rs b/programs/marginfi/tests/user_actions/withdraw.rs index 7070019e3..d181dbce4 100644 --- a/programs/marginfi/tests/user_actions/withdraw.rs +++ b/programs/marginfi/tests/user_actions/withdraw.rs @@ -121,6 +121,9 @@ async fn marginfi_account_withdraw_success( .await .get_asset_amount(balance.asset_shares.into()) .unwrap(); + let post: I80F48 = post_accounted.into(); + let post: f64 = post.to_num(); + println!("post bal: {:?}", post); let active_balance_count = marginfi_account .lending_account @@ -143,6 +146,29 @@ async fn marginfi_account_withdraw_success( 1 ); + let health_cache = marginfi_account.health_cache; + let collateral_price_roughly = get_mint_price(bank_mint); + // Apply a small discount to account for conf discounts, etc. + let disc: f64 = 0.95; + assert!(health_cache.is_engine_ok()); + assert!(health_cache.is_healthy()); + + let asset_value: I80F48 = health_cache.asset_value.into(); + let asset_value: f64 = asset_value.to_num(); + let diff = deposit_amount - adjusted_withdraw_amount - withdraw_fee as f64; + assert!(asset_value >= (diff) * collateral_price_roughly * disc); + + for (i, bal) in marginfi_account.lending_account.balances.iter().enumerate() { + let shares: I80F48 = bal.asset_shares.into(); + if bal.is_active() { + let price: I80F48 = health_cache.prices[i].into(); + let price: f64 = price.to_num(); + if shares != I80F48::ZERO { + assert!(price >= (collateral_price_roughly * disc)); + } + } + } + Ok(()) } diff --git a/test-utils/src/test.rs b/test-utils/src/test.rs index de3e0003f..def01cd5b 100644 --- a/test-utils/src/test.rs +++ b/test-utils/src/test.rs @@ -905,3 +905,28 @@ impl TestFixture { get_max_deposit_amount_pre_fee(collateral_amount) } } + +pub fn get_mint_price(mint: BankMint) -> f64 { + match mint { + // For the T22 with fee variant, it's 50 cents + BankMint::T22WithFee => 0.5, + // For USDC-based and PYUSD mints, the price is roughly 1.0. + BankMint::Usdc | BankMint::UsdcSwb | BankMint::UsdcT22 | BankMint::PyUSD => 1.0, + // For SOL and its equivalents, use the SOL price (here, roughly 10.0). + BankMint::Sol + | BankMint::SolSwb + | BankMint::SolSwbPull + | BankMint::SolSwbOrigFee + | BankMint::SolEquivalent + | BankMint::SolEquivalent1 + | BankMint::SolEquivalent2 + | BankMint::SolEquivalent3 + | BankMint::SolEquivalent4 + | BankMint::SolEquivalent5 + | BankMint::SolEquivalent6 + | BankMint::SolEquivalent7 + | BankMint::SolEquivalent8 + | BankMint::SolEquivalent9 + | BankMint::SolEqIsolated => 10.0, + } +} diff --git a/tests/08_borrow.spec.ts b/tests/08_borrow.spec.ts index 08618e1a1..bf3c1fd97 100644 --- a/tests/08_borrow.spec.ts +++ b/tests/08_borrow.spec.ts @@ -21,6 +21,7 @@ import { assertBNApproximately, assertI80F48Approx, assertI80F48Equal, + expectFailedTxWithError, getTokenBalance, } from "./utils/genericTests"; import { assert } from "chai"; @@ -79,6 +80,31 @@ describe("Borrow funds", () => { ); }); + it("(user 0) tries to borrow usdc with a bad oracle - should fail", async () => { + const user = users[0]; + const user0Account = user.accounts.get(USER_ACCOUNT); + const bank = bankKeypairUsdc.publicKey; + await expectFailedTxWithError(async () => { + await user.mrgnProgram.provider.sendAndConfirm( + new Transaction().add( + await borrowIx(user.mrgnProgram, { + marginfiAccount: user0Account, + bank: bank, + tokenAccount: user.usdcAccount, + remaining: [ + bankKeypairA.publicKey, + oracles.tokenAOracle.publicKey, + bank, + oracles.fakeUsdc, // sneaky sneaky... + ], + amount: borrowAmountUsdc_native, + }) + ) + ); + // Note: the error logs describe this as "Invalid Pyth account" too, so this is enough detail... + }, "StaleOracle"); + }); + it("(user 0) borrows USDC against their token A position - happy path", async () => { const user = users[0]; const bank = bankKeypairUsdc.publicKey; @@ -88,15 +114,15 @@ describe("Borrow funds", () => { console.log("user 0 USDC before: " + userUsdcBefore.toLocaleString()); console.log( "usdc fees owed to bank: " + - wrappedI80F48toBigNumber( - bankBefore.collectedGroupFeesOutstanding - ).toString() + wrappedI80F48toBigNumber( + bankBefore.collectedGroupFeesOutstanding + ).toString() ); console.log( "usdc fees owed to program: " + - wrappedI80F48toBigNumber( - bankBefore.collectedProgramFeesOutstanding - ).toString() + wrappedI80F48toBigNumber( + bankBefore.collectedProgramFeesOutstanding + ).toString() ); } @@ -127,15 +153,15 @@ describe("Borrow funds", () => { console.log("user 0 USDC after: " + userUsdcAfter.toLocaleString()); console.log( "usdc fees owed to bank: " + - wrappedI80F48toBigNumber( - bankAfter.collectedGroupFeesOutstanding - ).toString() + wrappedI80F48toBigNumber( + bankAfter.collectedGroupFeesOutstanding + ).toString() ); console.log( "usdc fees owed to program: " + - wrappedI80F48toBigNumber( - bankAfter.collectedProgramFeesOutstanding - ).toString() + wrappedI80F48toBigNumber( + bankAfter.collectedProgramFeesOutstanding + ).toString() ); } diff --git a/tests/09_withdraw_repay.spec.ts b/tests/09_withdraw_repay.spec.ts index a29867be5..0197001a6 100644 --- a/tests/09_withdraw_repay.spec.ts +++ b/tests/09_withdraw_repay.spec.ts @@ -31,7 +31,7 @@ import { } from "./utils/user-instructions"; import { USER_ACCOUNT } from "./utils/mocks"; import { updatePriceAccount } from "./utils/pyth_mocks"; -import { createAssociatedTokenAccountIdempotentInstruction, wrappedI80F48toBigNumber } from "@mrgnlabs/mrgn-common"; +import { wrappedI80F48toBigNumber } from "@mrgnlabs/mrgn-common"; import { u64MAX_BN } from "./utils/types"; describe("Withdraw funds", () => { @@ -43,7 +43,6 @@ describe("Withdraw funds", () => { const withdrawAmountTokenA_native = new BN( withdrawAmountTokenA * 10 ** ecosystem.tokenADecimals ); - createAssociatedTokenAccountIdempotentInstruction const repayAmountUsdc = 0.1; const repayAmountUsdc_native = new BN( @@ -88,6 +87,32 @@ describe("Withdraw funds", () => { ); }); + it("(user 0) withdraws with bad oracle - should fail", async () => { + const user = users[0]; + const userAccKey = user.accounts.get(USER_ACCOUNT); + const bank = bankKeypairA.publicKey; + + await expectFailedTxWithError(async () => { + await user.mrgnProgram.provider.sendAndConfirm( + new Transaction().add( + await withdrawIx(user.mrgnProgram, { + marginfiAccount: userAccKey, + bank: bank, + tokenAccount: user.tokenAAccount, + remaining: [ + bankKeypairA.publicKey, + oracles.tokenAOracle.publicKey, + bankKeypairUsdc.publicKey, + oracles.fakeUsdc, + ], + amount: withdrawAmountTokenA_native, + }) + ) + ); + // Note: the error logs describe this as "Invalid Pyth account" too, so this is enough detail... + }, "StaleOracle"); + }); + it("(user 0) withdraws some token A - happy path", async () => { const user = users[0]; const userAccKey = user.accounts.get(USER_ACCOUNT); @@ -241,7 +266,7 @@ describe("Withdraw funds", () => { const user = users[0]; const userAccKey = user.accounts.get(USER_ACCOUNT); const bank = bankKeypairUsdc.publicKey; - expectFailedTxWithError(async () => { + await expectFailedTxWithError(async () => { await user.mrgnProgram.provider.sendAndConfirm( new Transaction().add( await repayIx(user.mrgnProgram, { diff --git a/tests/10_liquidate.spec.ts b/tests/10_liquidate.spec.ts index 6f82bac1e..eafde358e 100644 --- a/tests/10_liquidate.spec.ts +++ b/tests/10_liquidate.spec.ts @@ -23,15 +23,19 @@ import { assertI80F48Approx, assertI80F48Equal, assertKeysEqual, + expectFailedTxWithError, getTokenBalance, } from "./utils/genericTests"; import { assert } from "chai"; import { liquidateIx } from "./utils/user-instructions"; import { USER_ACCOUNT } from "./utils/mocks"; import { updatePriceAccount } from "./utils/pyth_mocks"; -import { bigNumberToWrappedI80F48, wrappedI80F48toBigNumber } from "@mrgnlabs/mrgn-common"; -import { configureBank } from "./utils/instructions"; +import { + bigNumberToWrappedI80F48, + wrappedI80F48toBigNumber, +} from "@mrgnlabs/mrgn-common"; import { defaultBankConfigOptRaw } from "./utils/types"; +import { configureBank } from "./utils/group-instructions"; describe("Liquidate user", () => { const program = workspace.Marginfi as Program; @@ -39,7 +43,7 @@ describe("Liquidate user", () => { const wallet = provider.wallet as Wallet; const confidenceInterval = 0.0212; // 1% confidence * CONF_INTERVAL_MULTIPLE - const liquidateAmountA = .2; + const liquidateAmountA = 0.2; const liquidateAmountA_native = new BN( liquidateAmountA * 10 ** ecosystem.tokenADecimals ); @@ -82,15 +86,103 @@ describe("Liquidate user", () => { ); }); + it("(user 1) tries to sneak in a bad oracle for itself - should fail", async () => { + const liquidatee = users[0]; + const liquidator = users[1]; + + const assetBankKey = bankKeypairA.publicKey; + const liabilityBankKey = bankKeypairUsdc.publicKey; + const liquidateeAccount = liquidatee.accounts.get(USER_ACCOUNT); + const liquidatorAccount = liquidator.accounts.get(USER_ACCOUNT); + + await expectFailedTxWithError(async () => { + await liquidator.mrgnProgram.provider.sendAndConfirm( + new Transaction().add( + await liquidateIx(liquidator.mrgnProgram, { + assetBankKey, + liabilityBankKey, + liquidatorMarginfiAccount: liquidatorAccount, + liquidateeMarginfiAccount: liquidateeAccount, + remaining: [ + oracles.tokenAOracle.publicKey, + oracles.usdcOracle.publicKey, + liabilityBankKey, + oracles.fakeUsdc, // sneaky sneaky + assetBankKey, + oracles.tokenAOracle.publicKey, + assetBankKey, + oracles.tokenAOracle.publicKey, + liabilityBankKey, + oracles.usdcOracle.publicKey, + ], + amount: liquidateAmountA_native, + }) + ) + ); + // TODO this should throw a more oracle-specific error further upstream, this is kinda dumb. + }, "IllegalLiquidation"); + }); + + it("(user 1) tries to sneak in a bad oracle for the liquidatee - should fail", async () => { + const liquidatee = users[0]; + const liquidator = users[1]; + + const assetBankKey = bankKeypairA.publicKey; + const liabilityBankKey = bankKeypairUsdc.publicKey; + const liquidateeAccount = liquidatee.accounts.get(USER_ACCOUNT); + const liquidatorAccount = liquidator.accounts.get(USER_ACCOUNT); + + await expectFailedTxWithError(async () => { + await liquidator.mrgnProgram.provider.sendAndConfirm( + new Transaction().add( + await liquidateIx(liquidator.mrgnProgram, { + assetBankKey, + liabilityBankKey, + liquidatorMarginfiAccount: liquidatorAccount, + liquidateeMarginfiAccount: liquidateeAccount, + remaining: [ + oracles.tokenAOracle.publicKey, + oracles.usdcOracle.publicKey, + liabilityBankKey, + oracles.usdcOracle.publicKey, + assetBankKey, + oracles.tokenAOracle.publicKey, + assetBankKey, + oracles.tokenAOracle.publicKey, + liabilityBankKey, + oracles.fakeUsdc, // sneaky sneaky + ], + amount: liquidateAmountA_native, + }) + ) + ); + // This gives you a generic Stale Oracle failure upstream of the ai failing to match the bank's + }, "StaleOracle"); + }); + + it("(admin) vastly reduce Token A bank collateral ratio to induce liquidation", async () => { + let config = defaultBankConfigOptRaw(); + config.assetWeightInit = bigNumberToWrappedI80F48(0.05); + config.assetWeightMaint = bigNumberToWrappedI80F48(0.1); + await groupAdmin.mrgnProgram.provider.sendAndConfirm!( + new Transaction().add( + await configureBank(groupAdmin.mrgnProgram, { + bank: bankKeypairA.publicKey, + bankConfigOpt: config, + }) + ) + ); + }); + /** * Maintenance ratio allowed = 10% * Liquidator fee = 2.5% * Insurance fee = 2.5% * Confidence interval = 2.12% (1% confidence * 2.12 = 2.12%) - * + * * Token A is worth $10 with conf $0.212 (worth $9.788 low, $10.212 high) * USDC is worth $1 with conf $0.0212 (worth $0.9788 low, $1.0212 high) - * + * * User has: * ASSETS * [index 0] 200,000,000 (2) Token A (worth $20) @@ -100,7 +192,7 @@ describe("Liquidate user", () => { * * Liquidator tries to repay .2 token A (worth $2) of liquidatee's debt, so liquidator's assets * increase by this value, while liquidatee's assets decrease by this value. Which also means that: - * + * * Liquidator must pay * value of A minus liquidator fee (low bias within the confidence interval): .2 * (1 - 0.025) * 9.788 = $1.90866 * USDC equivalent (high bias): 1.90866 / 1.0212 = $1.869036 (1,869,036 native) @@ -108,7 +200,7 @@ describe("Liquidate user", () => { * Liquidatee receives * value of A minus (liquidator fee + insurance) (low bias): .2 * (1 - 0.025 - 0.025) * 9.788 = $1.8608 * USDC equivalent (high bias): 1.8608 / 1.0212 = $1.822457 (1,822,457 native) - * + * * Insurance fund collects the difference * USDC diff 1,869,036 - 1,822,457 = 46,579 */ @@ -120,56 +212,95 @@ describe("Liquidate user", () => { const assetBankKey = bankKeypairA.publicKey; const assetBankBefore = await program.account.bank.fetch(assetBankKey); const liabilityBankKey = bankKeypairUsdc.publicKey; - const liabilityBankBefore = await program.account.bank.fetch(liabilityBankKey); + const liabilityBankBefore = await program.account.bank.fetch( + liabilityBankKey + ); const liquidateeAccount = liquidatee.accounts.get(USER_ACCOUNT); - const liquidateeMarginfiAccount = await program.account.marginfiAccount.fetch(liquidateeAccount); + const liquidateeMarginfiAccount = + await program.account.marginfiAccount.fetch(liquidateeAccount); const liquidatorAccount = liquidator.accounts.get(USER_ACCOUNT); - const liquidatorMarginfiAccount = await program.account.marginfiAccount.fetch(liquidatorAccount); + const liquidatorMarginfiAccount = + await program.account.marginfiAccount.fetch(liquidatorAccount); - const liquidateeBalances = liquidateeMarginfiAccount.lendingAccount.balances; - const liquidatorBalances = liquidatorMarginfiAccount.lendingAccount.balances; + const liquidateeBalances = + liquidateeMarginfiAccount.lendingAccount.balances; + const liquidatorBalances = + liquidatorMarginfiAccount.lendingAccount.balances; const liabilitySharesBefore = liquidateeBalances[1].liabilityShares; assertI80F48Equal(liquidatorBalances[1].assetShares, 0); - - const insuranceVaultBalance = await getTokenBalance(provider, liabilityBankBefore.insuranceVault); + + const insuranceVaultBalance = await getTokenBalance( + provider, + liabilityBankBefore.insuranceVault + ); assert.equal(insuranceVaultBalance, 0); - const sharesA = wrappedI80F48toBigNumber(liquidateeBalances[0].assetShares).toNumber(); - const shareValueA = wrappedI80F48toBigNumber(assetBankBefore.assetShareValue).toNumber(); - const sharesUsdc = wrappedI80F48toBigNumber(liabilitySharesBefore).toNumber(); - const shareValueUsdc = wrappedI80F48toBigNumber(liabilityBankBefore.liabilityShareValue).toNumber(); + const sharesA = wrappedI80F48toBigNumber( + liquidateeBalances[0].assetShares + ).toNumber(); + const shareValueA = wrappedI80F48toBigNumber( + assetBankBefore.assetShareValue + ).toNumber(); + const sharesUsdc = wrappedI80F48toBigNumber( + liabilitySharesBefore + ).toNumber(); + const shareValueUsdc = wrappedI80F48toBigNumber( + liabilityBankBefore.liabilityShareValue + ).toNumber(); if (verbose) { console.log("BEFORE"); - console.log("liability bank insurance vault before: " + insuranceVaultBalance.toLocaleString()); - console.log("user 0 (liquidatee) Token A asset shares: " + sharesA.toString()); - console.log(" value (in Token A native): " + (sharesA * shareValueA).toLocaleString()); - console.log(" value (in dollars): $" + (sharesA * shareValueA * oracles.tokenAPrice / 10 ** (oracles.tokenADecimals)).toLocaleString()); - console.log("user 0 (liquidatee) USDC liability shares: " + sharesUsdc.toString()); - console.log(" debt (in USDC native): " + (sharesUsdc * shareValueUsdc).toLocaleString()); - console.log(" debt (in dollars): $" + (sharesUsdc * shareValueUsdc * oracles.usdcPrice / 10 ** (oracles.usdcDecimals)).toLocaleString()); - console.log("user 1 (liquidator) USDC asset shares: " + wrappedI80F48toBigNumber(liquidatorBalances[0].assetShares).toString()); - console.log("user 1 (liquidator) USDC liability shares: " + wrappedI80F48toBigNumber(liquidatorBalances[0].liabilityShares).toString()); + console.log( + "liability bank insurance vault before: " + + insuranceVaultBalance.toLocaleString() + ); + console.log( + "user 0 (liquidatee) Token A asset shares: " + sharesA.toString() + ); + console.log( + " value (in Token A native): " + + (sharesA * shareValueA).toLocaleString() + ); + console.log( + " value (in dollars): $" + + ( + (sharesA * shareValueA * oracles.tokenAPrice) / + 10 ** oracles.tokenADecimals + ).toLocaleString() + ); + console.log( + "user 0 (liquidatee) USDC liability shares: " + sharesUsdc.toString() + ); + console.log( + " debt (in USDC native): " + + (sharesUsdc * shareValueUsdc).toLocaleString() + ); + console.log( + " debt (in dollars): $" + + ( + (sharesUsdc * shareValueUsdc * oracles.usdcPrice) / + 10 ** oracles.usdcDecimals + ).toLocaleString() + ); + console.log( + "user 1 (liquidator) USDC asset shares: " + + wrappedI80F48toBigNumber(liquidatorBalances[0].assetShares).toString() + ); + console.log( + "user 1 (liquidator) USDC liability shares: " + + wrappedI80F48toBigNumber( + liquidatorBalances[0].liabilityShares + ).toString() + ); } - let config = defaultBankConfigOptRaw(); - config.assetWeightInit = bigNumberToWrappedI80F48(0.05); - config.assetWeightMaint = bigNumberToWrappedI80F48(0.1); - await groupAdmin.mrgnProgram!.provider.sendAndConfirm!( - new Transaction().add( - await configureBank(program, { - marginfiGroup: marginfiGroup.publicKey, - admin: groupAdmin.wallet.publicKey, - bank: assetBankKey, - bankConfigOpt: config, - }) - ) - ); - const tokenALowPrice = oracles.tokenAPrice * (1 - confidenceInterval); // see top of test const usdcHighPrice = oracles.usdcPrice * (1 + confidenceInterval); // see top of test - const insuranceToBeCollected = (liquidateAmountA * 0.025 * shareValueA * tokenALowPrice / (shareValueUsdc * usdcHighPrice)) * 10 ** (oracles.usdcDecimals); + const insuranceToBeCollected = + ((liquidateAmountA * 0.025 * shareValueA * tokenALowPrice) / + (shareValueUsdc * usdcHighPrice)) * + 10 ** oracles.usdcDecimals; await liquidator.mrgnProgram.provider.sendAndConfirm( new Transaction().add( @@ -195,40 +326,109 @@ describe("Liquidate user", () => { ) ); - const liquidateeMarginfiAccountAfter = await program.account.marginfiAccount.fetch(liquidateeAccount); - const liquidatorMarginfiAccountAfter = await program.account.marginfiAccount.fetch(liquidatorAccount); + const liquidateeMarginfiAccountAfter = + await program.account.marginfiAccount.fetch(liquidateeAccount); + const liquidatorMarginfiAccountAfter = + await program.account.marginfiAccount.fetch(liquidatorAccount); - const liquidateeBalancesAfter = liquidateeMarginfiAccountAfter.lendingAccount.balances; - const liquidatorBalancesAfter = liquidatorMarginfiAccountAfter.lendingAccount.balances; + const liquidateeBalancesAfter = + liquidateeMarginfiAccountAfter.lendingAccount.balances; + const liquidatorBalancesAfter = + liquidatorMarginfiAccountAfter.lendingAccount.balances; - const sharesAAfter = wrappedI80F48toBigNumber(liquidateeBalancesAfter[0].assetShares).toNumber(); - const sharesUsdcAfter = wrappedI80F48toBigNumber(liquidateeBalancesAfter[1].liabilityShares).toNumber(); + const sharesAAfter = wrappedI80F48toBigNumber( + liquidateeBalancesAfter[0].assetShares + ).toNumber(); + const sharesUsdcAfter = wrappedI80F48toBigNumber( + liquidateeBalancesAfter[1].liabilityShares + ).toNumber(); - assertI80F48Equal(liquidateeBalancesAfter[0].assetShares, wrappedI80F48toBigNumber(liquidateeBalances[0].assetShares).toNumber() - liquidateAmountA_native.toNumber()); + assertI80F48Equal( + liquidateeBalancesAfter[0].assetShares, + wrappedI80F48toBigNumber(liquidateeBalances[0].assetShares).toNumber() - + liquidateAmountA_native.toNumber() + ); assertI80F48Equal(liquidateeBalancesAfter[0].liabilityShares, 0); assertI80F48Equal(liquidateeBalancesAfter[1].assetShares, 0); assertI80F48Equal(liquidatorBalancesAfter[0].liabilityShares, 0); - assertI80F48Equal(liquidatorBalancesAfter[1].assetShares, liquidateAmountA_native); + assertI80F48Equal( + liquidatorBalancesAfter[1].assetShares, + liquidateAmountA_native + ); assertI80F48Equal(liquidatorBalancesAfter[1].liabilityShares, 0); - const insuranceVaultBalanceAfter = await getTokenBalance(provider, liabilityBankBefore.insuranceVault); + const insuranceVaultBalanceAfter = await getTokenBalance( + provider, + liabilityBankBefore.insuranceVault + ); - assert.approximately(insuranceVaultBalanceAfter, insuranceToBeCollected, (insuranceToBeCollected * .1)); // see top of test + assert.approximately( + insuranceVaultBalanceAfter, + insuranceToBeCollected, + insuranceToBeCollected * 0.1 + ); // see top of test if (verbose) { console.log("AFTER"); - console.log("liability bank insurance vault after (usdc): " + insuranceVaultBalanceAfter.toLocaleString()); - console.log("user 0 (liquidatee) Token A asset shares after: " + sharesAAfter.toString()); - console.log(" value (in Token A native): " + (sharesAAfter * shareValueA).toLocaleString()); - console.log(" value (in dollars): $" + (sharesAAfter * shareValueA * oracles.tokenAPrice / 10 ** (oracles.tokenADecimals)).toLocaleString()); - console.log("user 0 (liquidatee) USDC liability shares after: " + sharesUsdcAfter.toString()); - console.log(" debt (in USDC native): " + (sharesUsdcAfter * shareValueUsdc).toLocaleString()); - console.log(" debt (in dollars): $" + (sharesUsdcAfter * shareValueUsdc * oracles.usdcPrice / 10 ** (oracles.usdcDecimals)).toLocaleString()); - console.log("user 1 (liquidator) USDC asset shares after: " + wrappedI80F48toBigNumber(liquidatorBalancesAfter[0].assetShares).toString()); - console.log("user 1 (liquidator) USDC liability shares after: " + wrappedI80F48toBigNumber(liquidatorBalancesAfter[0].liabilityShares).toString()); - console.log("user 1 (liquidator) Token A asset shares after: " + wrappedI80F48toBigNumber(liquidatorBalancesAfter[1].assetShares).toString()); - console.log("user 1 (liquidator) Token A liability shares after: " + wrappedI80F48toBigNumber(liquidatorBalancesAfter[1].liabilityShares).toString()); + console.log( + "liability bank insurance vault after (usdc): " + + insuranceVaultBalanceAfter.toLocaleString() + ); + console.log( + "user 0 (liquidatee) Token A asset shares after: " + + sharesAAfter.toString() + ); + console.log( + " value (in Token A native): " + + (sharesAAfter * shareValueA).toLocaleString() + ); + console.log( + " value (in dollars): $" + + ( + (sharesAAfter * shareValueA * oracles.tokenAPrice) / + 10 ** oracles.tokenADecimals + ).toLocaleString() + ); + console.log( + "user 0 (liquidatee) USDC liability shares after: " + + sharesUsdcAfter.toString() + ); + console.log( + " debt (in USDC native): " + + (sharesUsdcAfter * shareValueUsdc).toLocaleString() + ); + console.log( + " debt (in dollars): $" + + ( + (sharesUsdcAfter * shareValueUsdc * oracles.usdcPrice) / + 10 ** oracles.usdcDecimals + ).toLocaleString() + ); + console.log( + "user 1 (liquidator) USDC asset shares after: " + + wrappedI80F48toBigNumber( + liquidatorBalancesAfter[0].assetShares + ).toString() + ); + console.log( + "user 1 (liquidator) USDC liability shares after: " + + wrappedI80F48toBigNumber( + liquidatorBalancesAfter[0].liabilityShares + ).toString() + ); + console.log( + "user 1 (liquidator) Token A asset shares after: " + + wrappedI80F48toBigNumber( + liquidatorBalancesAfter[1].assetShares + ).toString() + ); + console.log( + "user 1 (liquidator) Token A liability shares after: " + + wrappedI80F48toBigNumber( + liquidatorBalancesAfter[1].liabilityShares + ).toString() + ); } assert.equal(liquidatorBalancesAfter[1].active, 1); diff --git a/tests/11_health_pulse.spec.ts b/tests/11_health_pulse.spec.ts new file mode 100644 index 000000000..08d1f4f15 --- /dev/null +++ b/tests/11_health_pulse.spec.ts @@ -0,0 +1,348 @@ +import { + AnchorProvider, + BN, + getProvider, + Program, + Wallet, + workspace, +} from "@coral-xyz/anchor"; +import { Transaction } from "@solana/web3.js"; +import { Marginfi } from "../target/types/marginfi"; +import { + bankKeypairA, + bankKeypairSol, + bankKeypairUsdc, + ecosystem, + groupAdmin, + marginfiGroup, + oracles, + users, + verbose, +} from "./rootHooks"; +import { + assertBNApproximately, + assertBNEqual, + assertI80F48Approx, + assertI80F48Equal, + assertKeysEqual, + getTokenBalance, +} from "./utils/genericTests"; +import { assert } from "chai"; +import { healthPulse, liquidateIx } from "./utils/user-instructions"; +import { USER_ACCOUNT } from "./utils/mocks"; +import { updatePriceAccount } from "./utils/pyth_mocks"; +import { + bigNumberToWrappedI80F48, + wrappedI80F48toBigNumber, +} from "@mrgnlabs/mrgn-common"; +import { + defaultBankConfigOptRaw, + HEALTH_CACHE_ENGINE_OK, + HEALTH_CACHE_HEALTHY, + HEALTH_CACHE_NONE, +} from "./utils/types"; +import { configureBank } from "./utils/group-instructions"; + +describe("Health pulse", () => { + const program = workspace.Marginfi as Program; + const provider = getProvider() as AnchorProvider; + const wallet = provider.wallet as Wallet; + + it("(user 1) health pulse with bad oracle - cache notes the missing price", async () => { + const user = users[1]; + const acc = user.accounts.get(USER_ACCOUNT); + await user.mrgnProgram.provider.sendAndConfirm!( + new Transaction().add( + await healthPulse(user.mrgnProgram, { + marginfiAccount: acc, + remaining: [ + bankKeypairUsdc.publicKey, + oracles.fakeUsdc, // sneaky sneaky + bankKeypairA.publicKey, + oracles.tokenAOracle.publicKey, + ], + }) + ) + ); + + const accAfter = await program.account.marginfiAccount.fetch(acc); + const cacheAfter = accAfter.healthCache; + const now = Date.now() / 1000; + const assetValue = wrappedI80F48toBigNumber(cacheAfter.assetValue); + const liabValue = wrappedI80F48toBigNumber(cacheAfter.liabilityValue); + + if (verbose) { + console.log("---user health state---"); + console.log("asset value: " + assetValue.toString()); + console.log("liab value: " + liabValue.toString()); + console.log("prices: "); + for (let i = 0; i < cacheAfter.prices.length; i++) { + const price = wrappedI80F48toBigNumber(cacheAfter.prices[i]).toNumber(); + if (price != 0) { + console.log(" [" + i + "] " + price); + } + } + } + + assert.approximately(cacheAfter.timestamp.toNumber(), now, 3); + // Note: still healthy, and the engine has technically resolved! + assertBNEqual( + cacheAfter.flags, + HEALTH_CACHE_HEALTHY + HEALTH_CACHE_ENGINE_OK + ); + // The fake usdc price is set to zero due to the bad oracle + assertI80F48Equal(cacheAfter.prices[0], 0); + // User 1 has a trivial amount of token A as well, but we note here it is almost worth zero. + assert.isAtMost(assetValue.toNumber(), 1); + }); + + it("(user 1) health pulse - happy path", async () => { + const user = users[1]; + const acc = user.accounts.get(USER_ACCOUNT); + await user.mrgnProgram.provider.sendAndConfirm!( + new Transaction().add( + await healthPulse(user.mrgnProgram, { + marginfiAccount: acc, + remaining: [ + bankKeypairUsdc.publicKey, + oracles.usdcOracle.publicKey, + bankKeypairA.publicKey, + oracles.tokenAOracle.publicKey, + ], + }) + ) + ); + + const accAfter = await program.account.marginfiAccount.fetch(acc); + const cacheAfter = accAfter.healthCache; + const now = Date.now() / 1000; + + const assetValue = wrappedI80F48toBigNumber(cacheAfter.assetValue); + const liabValue = wrappedI80F48toBigNumber(cacheAfter.liabilityValue); + if (verbose) { + console.log("---user health state---"); + console.log("asset value: " + assetValue.toString()); + console.log("liab value: " + liabValue.toString()); + console.log("prices: "); + for (let i = 0; i < cacheAfter.prices.length; i++) { + const price = wrappedI80F48toBigNumber(cacheAfter.prices[i]).toNumber(); + if (price != 0) { + console.log(" [" + i + "] " + price); + } + } + } + + assert.approximately(cacheAfter.timestamp.toNumber(), now, 3); + assertBNEqual( + cacheAfter.flags, + HEALTH_CACHE_HEALTHY + HEALTH_CACHE_ENGINE_OK + ); + assertI80F48Approx(cacheAfter.prices[0], oracles.usdcPrice); + assertI80F48Approx(cacheAfter.prices[1], oracles.tokenAPrice); + }); + + it("(user 0) health pulse in unhealthy state - happy path", async () => { + const user = users[0]; + const acc = user.accounts.get(USER_ACCOUNT); + await user.mrgnProgram.provider.sendAndConfirm!( + new Transaction().add( + await healthPulse(user.mrgnProgram, { + marginfiAccount: acc, + remaining: [ + bankKeypairA.publicKey, + oracles.tokenAOracle.publicKey, + bankKeypairUsdc.publicKey, + oracles.usdcOracle.publicKey, + ], + }) + ) + ); + + const accAfter = await program.account.marginfiAccount.fetch(acc); + const cacheAfter = accAfter.healthCache; + const now = Date.now() / 1000; + + const assetValue = wrappedI80F48toBigNumber(cacheAfter.assetValue); + const liabValue = wrappedI80F48toBigNumber(cacheAfter.liabilityValue); + let expectedValue: number; + let expectedDebt: number; + if (verbose) { + console.log("---user balances state---"); + const bals = accAfter.lendingAccount.balances; + for (let i = 0; i < bals.length; i++) { + const b = bals[i]; + const bankKey = b.bankPk; + const shares = wrappedI80F48toBigNumber(b.assetShares).toNumber(); + const debt = wrappedI80F48toBigNumber(b.liabilityShares).toNumber(); + if (shares != 0) { + const bankAcc = await program.account.bank.fetch(bankKey); + const config = bankAcc.config; + expectedValue = + shares * + wrappedI80F48toBigNumber(bankAcc.assetShareValue).toNumber() * + wrappedI80F48toBigNumber(config.assetWeightInit).toNumber(); + console.log( + " [" + i + "] (asset): " + shares + " of " + bankKey.toString() + ); + // Note: Multiply this by the asset price, e.g. for Token A this is $10 + console.log(" exp value/price: " + expectedValue); + } + if (debt != 0) { + const bankAcc = await program.account.bank.fetch(bankKey); + const config = bankAcc.config; + expectedDebt = + debt * + wrappedI80F48toBigNumber(bankAcc.liabilityShareValue).toNumber() * + wrappedI80F48toBigNumber(config.liabilityWeightInit).toNumber(); + console.log( + " [" + i + "] (debt): " + debt + " in " + bankKey.toString() + ); + // Note: Multiply this by the asset price, e.g. for Token A this is $1 + console.log(" exp value/price: " + expectedDebt); + } + } + + console.log("---user health state---"); + const flags = cacheAfter.flags.toNumber(); + const isHealthy = (flags & HEALTH_CACHE_HEALTHY) !== 0; + const engineOk = (flags & HEALTH_CACHE_ENGINE_OK) !== 0; + console.log("healthy: " + isHealthy); + console.log("engine ok: " + engineOk); + console.log("asset value: " + assetValue.toString()); + console.log("liab value: " + liabValue.toString()); + console.log("prices: "); + for (let i = 0; i < cacheAfter.prices.length; i++) { + const price = wrappedI80F48toBigNumber(cacheAfter.prices[i]).toNumber(); + if (price != 0) { + console.log(" [" + i + "] " + price); + } + } + } + + assert.approximately(cacheAfter.timestamp.toNumber(), now, 3); + // Note: cache is unhealthy (no HEALTH_CACHE_HEALTHY flag set) but price info is still populated. + assertBNEqual(cacheAfter.flags, 0); + assertI80F48Approx(cacheAfter.prices[0], oracles.tokenAPrice); + assertI80F48Approx(cacheAfter.prices[1], oracles.usdcPrice); + assert.approximately( + (expectedValue * oracles.tokenAPrice) / 10 ** oracles.tokenADecimals, + assetValue.toNumber(), + 0.01 + ); + assert.approximately( + (expectedDebt * oracles.usdcPrice) / 10 ** oracles.usdcDecimals, + liabValue.toNumber(), + 0.01 + ); + }); + + it("(admin) restore the default config to Token A bank", async () => { + let config = defaultBankConfigOptRaw(); + await groupAdmin.mrgnProgram.provider.sendAndConfirm!( + new Transaction().add( + await configureBank(groupAdmin.mrgnProgram, { + bank: bankKeypairA.publicKey, + bankConfigOpt: config, + }) + ) + ); + }); + + it("(user 0) health pulse in now-healthy state - happy path", async () => { + const user = users[0]; + const acc = user.accounts.get(USER_ACCOUNT); + await user.mrgnProgram.provider.sendAndConfirm!( + new Transaction().add( + await healthPulse(user.mrgnProgram, { + marginfiAccount: acc, + remaining: [ + bankKeypairA.publicKey, + oracles.tokenAOracle.publicKey, + bankKeypairUsdc.publicKey, + oracles.usdcOracle.publicKey, + ], + }) + ) + ); + + const accAfter = await program.account.marginfiAccount.fetch(acc); + const cacheAfter = accAfter.healthCache; + const now = Date.now() / 1000; + + const assetValue = wrappedI80F48toBigNumber(cacheAfter.assetValue); + const liabValue = wrappedI80F48toBigNumber(cacheAfter.liabilityValue); + let expectedValue: number; + let expectedDebt: number; + if (verbose) { + console.log("---user balances state---"); + const bals = accAfter.lendingAccount.balances; + for (let i = 0; i < bals.length; i++) { + const b = bals[i]; + const bankKey = b.bankPk; + const shares = wrappedI80F48toBigNumber(b.assetShares).toNumber(); + const debt = wrappedI80F48toBigNumber(b.liabilityShares).toNumber(); + if (shares != 0) { + const bankAcc = await program.account.bank.fetch(bankKey); + const config = bankAcc.config; + expectedValue = + shares * + wrappedI80F48toBigNumber(bankAcc.assetShareValue).toNumber() * + wrappedI80F48toBigNumber(config.assetWeightInit).toNumber(); + console.log( + " [" + i + "] (asset): " + shares + " of " + bankKey.toString() + ); + // Note: Multiply this by the asset price, e.g. for Token A this is $10 + console.log(" exp value/price: " + expectedValue); + } + if (debt != 0) { + const bankAcc = await program.account.bank.fetch(bankKey); + const config = bankAcc.config; + expectedDebt = + debt * + wrappedI80F48toBigNumber(bankAcc.liabilityShareValue).toNumber() * + wrappedI80F48toBigNumber(config.liabilityWeightInit).toNumber(); + console.log( + " [" + i + "] (debt): " + debt + " in " + bankKey.toString() + ); + // Note: Multiply this by the asset price, e.g. for Token A this is $1 + console.log(" exp value/price: " + expectedDebt); + } + } + + console.log("---user health state---"); + const flags = cacheAfter.flags.toNumber(); + const isHealthy = (flags & HEALTH_CACHE_HEALTHY) !== 0; + const engineOk = (flags & HEALTH_CACHE_ENGINE_OK) !== 0; + console.log("healthy: " + isHealthy); + console.log("engine ok: " + engineOk); + console.log("asset value: " + assetValue.toString()); + console.log("liab value: " + liabValue.toString()); + console.log("prices: "); + for (let i = 0; i < cacheAfter.prices.length; i++) { + const price = wrappedI80F48toBigNumber(cacheAfter.prices[i]).toNumber(); + if (price != 0) { + console.log(" [" + i + "] " + price); + } + } + } + + assert.approximately(cacheAfter.timestamp.toNumber(), now, 3); + // Note: cache is unhealthy (no HEALTH_CACHE_HEALTHY flag set) but price info is still populated. + assertBNEqual( + cacheAfter.flags, + HEALTH_CACHE_HEALTHY + HEALTH_CACHE_ENGINE_OK + ); + assertI80F48Approx(cacheAfter.prices[0], oracles.tokenAPrice); + assertI80F48Approx(cacheAfter.prices[1], oracles.usdcPrice); + assert.approximately( + (expectedValue * oracles.tokenAPrice) / 10 ** oracles.tokenADecimals, + assetValue.toNumber(), + 0.01 + ); + assert.approximately( + (expectedDebt * oracles.usdcPrice) / 10 ** oracles.usdcDecimals, + liabValue.toNumber(), + 0.01 + ); + }); +}); diff --git a/tests/s08_liquidate.spec.ts b/tests/s08_liquidate.spec.ts index bc666f602..0d959c23e 100644 --- a/tests/s08_liquidate.spec.ts +++ b/tests/s08_liquidate.spec.ts @@ -377,10 +377,10 @@ describe("Liquidate user (including staked assets)", () => { } let now = Math.floor(Date.now() / 1000); - assertBNApproximately(liquidatorBalancesAfter[0].lastUpdate, now, 20); - assertBNApproximately(liquidatorBalancesAfter[1].lastUpdate, now, 20); - assertBNApproximately(liquidateeBalancesAfter[0].lastUpdate, now, 20); - assertBNApproximately(liquidateeBalancesAfter[1].lastUpdate, now, 20); + assertBNApproximately(liquidatorBalancesAfter[0].lastUpdate, now, 30); + assertBNApproximately(liquidatorBalancesAfter[1].lastUpdate, now, 30); + assertBNApproximately(liquidateeBalancesAfter[0].lastUpdate, now, 30); + assertBNApproximately(liquidateeBalancesAfter[1].lastUpdate, now, 30); }); }); diff --git a/tests/utils/mocks.ts b/tests/utils/mocks.ts index 4e5231fec..ba61d4126 100644 --- a/tests/utils/mocks.ts +++ b/tests/utils/mocks.ts @@ -301,6 +301,8 @@ export type Oracles = { tokenBOracle: Keypair; tokenBPrice: number; tokenBDecimals: number; + /** Same initial price/decimals as USDC, but different key. */ + fakeUsdc: PublicKey; }; /** diff --git a/tests/utils/pyth_mocks.ts b/tests/utils/pyth_mocks.ts index 23ef1b94c..a3b021059 100644 --- a/tests/utils/pyth_mocks.ts +++ b/tests/utils/pyth_mocks.ts @@ -294,9 +294,9 @@ export const writeProductBuffer = ( * @param wsolDecimals * @param usdcPrice * @param usdcDecimals - * @param tokenAPrice: + * @param tokenAPrice: * @param tokenADecimals: - * @param tokenBPrice: + * @param tokenBPrice: * @param tokenBDecimals: * @param verbose * @param skips - set to true to skip sending txes, which makes tests run faster if you don't need @@ -363,6 +363,27 @@ export const setupPythOracles = async ( ); } + let fakeUsdcPythOracle = await createPriceAccount(wallet); + price = BigInt(usdcPrice * 10 ** usdcDecimals); + if (skips && skips.usdc) { + // do nothing + } else { + await updatePriceAccount( + fakeUsdcPythOracle, + { + exponent: -usdcDecimals, + aggregatePriceInfo: { + price: price, + conf: price / BigInt(100), // 1% of the price + }, + twap: { + valueComponent: price, + }, + }, + wallet + ); + } + let tokenAPythOracle = await createPriceAccount(wallet); price = BigInt(tokenAPrice * 10 ** tokenADecimals); if (skips && skips.a) { @@ -450,6 +471,7 @@ export const setupPythOracles = async ( usdcPrice: usdcPrice, tokenAPrice: tokenAPrice, tokenBPrice: tokenBPrice, + fakeUsdc: fakeUsdcPythOracle.publicKey, }; return oracles; }; diff --git a/tests/utils/types.ts b/tests/utils/types.ts index acafb9811..e1d75b460 100644 --- a/tests/utils/types.ts +++ b/tests/utils/types.ts @@ -38,6 +38,11 @@ export const ORACLE_SETUP_PYTH_PUSH = 3; export const ORACLE_SETUP_SWITCHBOARD_PULL = 4; export const ORACLE_SETUP_STAKED_WITH_PYTH_PUSH = 5; +export const HEALTH_CACHE_NONE = 0; +export const HEALTH_CACHE_HEALTHY = 1; +export const HEALTH_CACHE_ENGINE_OK = 2; + + /** * The default bank config has * * all weights are 1 diff --git a/tests/utils/user-instructions.ts b/tests/utils/user-instructions.ts index a9d24cd28..7e19cd9eb 100644 --- a/tests/utils/user-instructions.ts +++ b/tests/utils/user-instructions.ts @@ -326,11 +326,11 @@ export const repayIx = (program: Program, args: RepayIxArgs) => { signerTokenAccount: args.tokenAccount, // bankLiquidityVaultAuthority = deriveLiquidityVaultAuthority(id, bank); // bankLiquidityVault = deriveLiquidityVault(id, bank) - tokenProgram: TOKEN_PROGRAM_ID, + tokenProgram: TOKEN_PROGRAM_ID, }) .remainingAccounts(oracleMeta) .instruction(); - return ix; + return ix; }; export type LiquidateIxArgs = { @@ -344,12 +344,12 @@ export type LiquidateIxArgs = { /** * Creates a Liquidate instruction. - * `remaining`: - * liab_mint_ai (if token2022 mint), - * asset_oracle_ai, - * liab_oracle_ai, - * liquidator_observation_ais..., - * liquidatee_observation_ais..., + * * `remaining`: + * * liab_mint_ai (if token2022 mint), + * * asset_oracle_ai, + * * liab_oracle_ai, + * * liquidator_observation_ais..., + * * liquidatee_observation_ais..., * * @param program - The marginfi program instance. * @param args - The arguments required to create the instruction. @@ -368,7 +368,6 @@ export const liquidateIx = ( return { pubkey, isSigner: false, isWritable: false }; }); - // Return the instruction return program.methods .lendingAccountLiquidate(args.amount) .accounts({ @@ -381,3 +380,41 @@ export const liquidateIx = ( .remainingAccounts(oracleMeta) .instruction(); }; + +export type HealthPulseArgs = { + marginfiAccount: PublicKey; + remaining: PublicKey[]; +}; + +/** + * Creates a Health pulse instruction. This tx sets the user's risk engine health cache, a read-only + * way to access the on-chain risk engine's current state, typically for debugging purposes. + * * `remaining` - pass bank/oracles for each bank the user is involved with, in the SAME ORDER they + * appear in userAcc.balances (e.g. `[bank0, oracle0, bank1, oracle1]`). For staked collateral + * positions, pass the stake account and lst mint for the single pool as well: [bank0, oracle0, + * stakeAcc0, lstmint0] + * @param program + * @param args + * @returns + */ +export const healthPulse = ( + program: Program, + args: HealthPulseArgs +) => { + const oracleMeta: AccountMeta[] = args.remaining.map((pubkey) => { + if (!(pubkey instanceof PublicKey)) { + console.error("Invalid remaining key:", pubkey); + throw new Error("remaining contains invalid keys"); + } + + return { pubkey, isSigner: false, isWritable: false }; + }); + + return program.methods + .lendingAccountPulseHealth() + .accounts({ + marginfiAccount: args.marginfiAccount, + }) + .remainingAccounts(oracleMeta) + .instruction(); +}; From f38f467849cb41815f283549ae2f57f7611ac961 Mon Sep 17 00:00:00 2001 From: jgur-psyops Date: Tue, 11 Mar 2025 15:36:19 -0400 Subject: [PATCH 51/59] Reconcile new errors with localnet tests, add minor logging --- guides/GETTING_STARTED_DEV.md | 28 ++++++++++--------- .../marginfi_group/configure_bank.rs | 2 ++ tests/08_borrow.spec.ts | 4 +-- tests/09_withdraw_repay.spec.ts | 4 +-- tests/10_liquidate.spec.ts | 3 +- tests/s09_emissions.spec.ts | 6 ++-- 6 files changed, 26 insertions(+), 21 deletions(-) diff --git a/guides/GETTING_STARTED_DEV.md b/guides/GETTING_STARTED_DEV.md index 509d1f1ef..0772936de 100644 --- a/guides/GETTING_STARTED_DEV.md +++ b/guides/GETTING_STARTED_DEV.md @@ -4,19 +4,19 @@ New developer getting started working on the mrgnv2 program side? Read on. ### Things to Install (Feb 2025) -* rust/cargo - latest stable -* node - 23.0.0 -* yarn - 1.22.22 -* avm - 0.30.1 -* anchor - 0.30.1 -* solana - 1.18.17 -* cargo-nextest - use `cargo install cargo-nextest --version "0.9.81" --locked` exactly -* cargo-fuzz - 0.12.0 +- rust/cargo - latest stable +- node - 23.0.0 +- yarn - 1.22.22 +- avm - 0.30.1 +- anchor - 0.30.1 +- solana - 1.18.17 +- cargo-nextest - use `cargo install cargo-nextest --version "0.9.81" --locked` exactly +- cargo-fuzz - 0.12.0 ## Running tests - ### For unit tests: + ``` cargo test --lib ``` @@ -27,7 +27,10 @@ cargo test --lib anchor build -p marginfi -- --no-default-features anchor test --skip-build ``` -Note: you may need to build the other programs (mock, liquidity incentive, etc) if you have never run anchor build before + +Note: you may need to build the other programs (mock, liquidity incentive, etc) if you have never run anchor build before. + +Segmentation fault? Just try again. That happens sometimes. ### For the Rust test suite: @@ -52,10 +55,9 @@ anchor build -p marginfi ## Common issues ### The TS suite fails with `Environment supports crypto: false` at the top + Update Node ### All the tests are failing in Rust and/or TS -Make sure you build the correct version, Rust requires the mainnet version (default features), TS wants localnet (no features) - - +Make sure you build the correct version, Rust requires the mainnet version (default features), TS wants localnet (no features) diff --git a/programs/marginfi/src/instructions/marginfi_group/configure_bank.rs b/programs/marginfi/src/instructions/marginfi_group/configure_bank.rs index 8207ad48c..5f8d94a6e 100644 --- a/programs/marginfi/src/instructions/marginfi_group/configure_bank.rs +++ b/programs/marginfi/src/instructions/marginfi_group/configure_bank.rs @@ -23,6 +23,8 @@ pub fn lending_pool_configure_bank( if bank.get_flag(FREEZE_SETTINGS) { bank.configure_unfrozen_fields_only(&bank_config)?; + msg!("WARN: Only deposit+borrow limits updated. Other settings IGNORED for frozen banks!"); + emit!(LendingPoolBankConfigureFrozenEvent { header: GroupEventHeader { marginfi_group: ctx.accounts.group.key(), diff --git a/tests/08_borrow.spec.ts b/tests/08_borrow.spec.ts index bf3c1fd97..8f69747d0 100644 --- a/tests/08_borrow.spec.ts +++ b/tests/08_borrow.spec.ts @@ -101,8 +101,8 @@ describe("Borrow funds", () => { }) ) ); - // Note: the error logs describe this as "Invalid Pyth account" too, so this is enough detail... - }, "StaleOracle"); + // Note: you can now see expected vs actual keys in the msg! logs just before this error. + }, "WrongOracleAccountKeys"); }); it("(user 0) borrows USDC against their token A position - happy path", async () => { diff --git a/tests/09_withdraw_repay.spec.ts b/tests/09_withdraw_repay.spec.ts index 0197001a6..7519e9e36 100644 --- a/tests/09_withdraw_repay.spec.ts +++ b/tests/09_withdraw_repay.spec.ts @@ -109,8 +109,8 @@ describe("Withdraw funds", () => { }) ) ); - // Note: the error logs describe this as "Invalid Pyth account" too, so this is enough detail... - }, "StaleOracle"); + // Note: you can now see expected vs actual keys in the msg! logs just before this error. + }, "WrongOracleAccountKeys"); }); it("(user 0) withdraws some token A - happy path", async () => { diff --git a/tests/10_liquidate.spec.ts b/tests/10_liquidate.spec.ts index eafde358e..6408c1255 100644 --- a/tests/10_liquidate.spec.ts +++ b/tests/10_liquidate.spec.ts @@ -156,8 +156,7 @@ describe("Liquidate user", () => { }) ) ); - // This gives you a generic Stale Oracle failure upstream of the ai failing to match the bank's - }, "StaleOracle"); + }, "WrongOracleAccountKeys"); }); it("(admin) vastly reduce Token A bank collateral ratio to induce liquidation", async () => { diff --git a/tests/s09_emissions.spec.ts b/tests/s09_emissions.spec.ts index d1195148e..cb5a97e17 100644 --- a/tests/s09_emissions.spec.ts +++ b/tests/s09_emissions.spec.ts @@ -76,6 +76,7 @@ import { import { deriveStakedSettings } from "./utils/pdas"; import { getEpochAndSlot, getStakeAccount } from "./utils/stake-utils"; import { createMintToInstruction } from "@solana/spl-token"; +import { dumpBankrunLogs } from "./utils/tools"; describe("Set up emissions on staked collateral assets", () => { const provider = getProvider() as AnchorProvider; @@ -389,9 +390,10 @@ describe("Set up emissions on staked collateral assets", () => { tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); tx.sign(user.wallet); let result = await banksClient.tryProcessTransaction(tx); + dumpBankrunLogs(result); - // InvalidEmissionsDestinationAccount 6051 - assertBankrunTxFailed(result, "0x17a3"); + // InvalidEmissionsDestinationAccount 6063 + assertBankrunTxFailed(result, "0x17af"); }); it("(user 2) registers permissionless settle to some wallet - (happy path)", async () => { From e269218c63faad12642eab305611191b77df39e4 Mon Sep 17 00:00:00 2001 From: Jon Gurary <91919816+jgur-psyops@users.noreply.github.com> Date: Thu, 13 Mar 2025 12:27:13 -0400 Subject: [PATCH 52/59] Localnet mocks of Pyth oracles (#314) * Allows the mock program to make a pretend PriceUpdateV2 and feed, enabling the use of pull oracles on localnet. --- Anchor.toml | 11 + programs/marginfi/src/state/price.rs | 36 +++- tests/fixtures/sol_pyth_oracle.json | 14 ++ tests/fixtures/sol_pyth_price_feed.json | 14 ++ tests/p01_initPythPull.spec.ts | 262 ++++++++++++++++++++++++ tests/rootHooks.ts | 73 +++++-- tests/s09_emissions.spec.ts | 1 - tests/utils/mocks.ts | 46 ++++- tests/utils/pyth-pull-mocks.ts | 253 +++++++++++++++++++++++ tests/utils/pyth_mocks.ts | 41 +++- 10 files changed, 719 insertions(+), 32 deletions(-) create mode 100644 tests/fixtures/sol_pyth_oracle.json create mode 100644 tests/fixtures/sol_pyth_price_feed.json create mode 100644 tests/p01_initPythPull.spec.ts create mode 100644 tests/utils/pyth-pull-mocks.ts diff --git a/Anchor.toml b/Anchor.toml index 5d7661d37..18141c9c0 100644 --- a/Anchor.toml +++ b/Anchor.toml @@ -31,6 +31,9 @@ test = "RUST_LOG= yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/*.spec.t # Staked collateral tests only # test = "RUST_LOG= yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/s*.spec.ts --exit --require tests/rootHooks.ts" +# Pyth pull tests only +# test = "RUST_LOG= yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/p*.spec.ts --exit --require tests/rootHooks.ts" + [test] startup_wait = 60000 shutdown_wait = 2000 @@ -57,6 +60,14 @@ filename = "tests/fixtures/pyusd_bank.json" address = "8FRFC6MoGGkMFQwngccyu69VnYbzykGeez7ignHVAFSN" filename = "tests/fixtures/localnet_usdc.json" +[[test.validator.account]] +address = "7UVimffxr9ow1uXYxsr4LHAcV58mLzhmwaeKvJ1pjLiE" +filename = "tests/fixtures/sol_pyth_price_feed.json" + +[[test.validator.account]] +address = "H6ARHf6YXhGYeQfUzQNGk6rDNnLBQKrenN712K4AQJEG" +filename = "tests/fixtures/sol_pyth_oracle.json" + # To update: # clone https://github.com/solana-labs/solana-program-library/tree/master and run cargo build-sbf in spl_single_pool [[test.genesis]] diff --git a/programs/marginfi/src/state/price.rs b/programs/marginfi/src/state/price.rs index 3c2b21d34..99d3450a1 100644 --- a/programs/marginfi/src/state/price.rs +++ b/programs/marginfi/src/state/price.rs @@ -147,11 +147,18 @@ impl OraclePriceFeedAdapter { let account_info = &ais[0]; - check_eq!( - account_info.owner, - &pyth_solana_receiver_sdk::id(), - MarginfiError::PythPushWrongAccountOwner - ); + if live!() { + check_eq!( + *account_info.owner, + pyth_solana_receiver_sdk::id(), + MarginfiError::PythPushWrongAccountOwner + ); + } else { + // On localnet, allow the mock program ID -OR- the real one + let owner_ok = account_info.owner.eq(&PYTH_ID) + || account_info.owner.eq(&pyth_solana_receiver_sdk::id()); + check!(owner_ok, MarginfiError::PythPushWrongAccountOwner); + } let price_feed_id = bank_config.get_pyth_push_oracle_feed_id().unwrap(); @@ -796,10 +803,21 @@ impl PriceAdapter for SwitchboardV2PriceFeed { } pub fn load_price_update_v2_checked(ai: &AccountInfo) -> MarginfiResult { - check!( - ai.owner.eq(&pyth_solana_receiver_sdk::id()), - MarginfiError::PythPushWrongAccountOwner - ); + if live!() { + check_eq!( + *ai.owner, + pyth_solana_receiver_sdk::id(), + MarginfiError::PythPushWrongAccountOwner + ); + } else { + // On localnet, allow the mock program ID OR the real one (for regression tests against + // actual mainnet accounts). + // * Note: Typically price updates are owned by `pyth_solana_receiver_sdk` and the oracle + // feed account itself is owned by PYTH ID. On localnet, the mock program may own both for + // simplicity. + let owner_ok = ai.owner.eq(&PYTH_ID) || ai.owner.eq(&pyth_solana_receiver_sdk::id()); + check!(owner_ok, MarginfiError::PythPushWrongAccountOwner); + } let price_feed_data = ai.try_borrow_data()?; let discriminator = &price_feed_data[0..8]; diff --git a/tests/fixtures/sol_pyth_oracle.json b/tests/fixtures/sol_pyth_oracle.json new file mode 100644 index 000000000..217e1150c --- /dev/null +++ b/tests/fixtures/sol_pyth_oracle.json @@ -0,0 +1,14 @@ +{ + "pubkey": "H6ARHf6YXhGYeQfUzQNGk6rDNnLBQKrenN712K4AQJEG", + "account": { + "lamports": 23942400, + "data": [ + "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", + "base64" + ], + "owner": "FsJ3A3u2vn5cTVofAjvy6y5kwABJAqYWpe4975bi2epH", + "executable": false, + "rentEpoch": 18446744073709551615, + "space": 3312 + } +} \ No newline at end of file diff --git a/tests/fixtures/sol_pyth_price_feed.json b/tests/fixtures/sol_pyth_price_feed.json new file mode 100644 index 000000000..517086016 --- /dev/null +++ b/tests/fixtures/sol_pyth_price_feed.json @@ -0,0 +1,14 @@ +{ + "pubkey": "7UVimffxr9ow1uXYxsr4LHAcV58mLzhmwaeKvJ1pjLiE", + "account": { + "lamports": 1825020, + "data": [ + "IvEjY51+9M1gMUcENA3t3zcf1CRyFI8kjp0abRpesqw6zYt/1dayQwHvDYtv2izrpB2hXUCV0do5Kg0vjtDGx7wPTPrIwoC1bW2njwUFAAAARTozAQAAAAD4////1wN5ZwAAAADXA3lnAAAAAIRKaggFAAAAk1kTAQAAAAA8qpUSAAAAAAA=", + "base64" + ], + "owner": "rec5EKMGg6MxZYaMdyBfgwp4d5rB9T1VQH5pJv5LtFJ", + "executable": false, + "rentEpoch": 18446744073709551615, + "space": 134 + } +} \ No newline at end of file diff --git a/tests/p01_initPythPull.spec.ts b/tests/p01_initPythPull.spec.ts new file mode 100644 index 000000000..4b223a99f --- /dev/null +++ b/tests/p01_initPythPull.spec.ts @@ -0,0 +1,262 @@ +import { BN, Wallet, getProvider, AnchorProvider } from "@coral-xyz/anchor"; +import { AccountMeta, Keypair, Transaction } from "@solana/web3.js"; +import { + groupAdmin, + bankrunContext, + banksClient, + bankrunProgram, + verbose, + ecosystem, + oracles, + PYTH_ORACLE_SAMPLE, + PYTH_ORACLE_FEED_SAMPLE, + users, +} from "./rootHooks"; +import { + assertBNEqual, + assertI80F48Approx, + assertKeysEqual, +} from "./utils/genericTests"; +import { addBankWithSeed, groupInitialize } from "./utils/group-instructions"; +import { getBankrunBlockhash } from "./utils/spl-staking-utils"; +import { assert } from "chai"; +import { + defaultBankConfig, + ASSET_TAG_DEFAULT, + ORACLE_SETUP_PYTH_PUSH, + HEALTH_CACHE_ENGINE_OK, + HEALTH_CACHE_HEALTHY, +} from "./utils/types"; +import { deriveBankWithSeed } from "./utils/pdas"; +import { createMintToInstruction } from "@solana/spl-token"; +import { USER_ACCOUNT } from "./utils/mocks"; +import { accountInit, depositIx, healthPulse } from "./utils/user-instructions"; +import { wrappedI80F48toBigNumber } from "@mrgnlabs/mrgn-common"; + +const throwawayGroup = Keypair.generate(); +describe("Pyth pull oracles in localnet", () => { + it("(admin) Init group - happy path", async () => { + let tx = new Transaction(); + + tx.add( + await groupInitialize(groupAdmin.mrgnBankrunProgram, { + marginfiGroup: throwawayGroup.publicKey, + admin: groupAdmin.wallet.publicKey, + }) + ); + tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); + tx.sign(groupAdmin.wallet, throwawayGroup); + await banksClient.processTransaction(tx); + + let group = await bankrunProgram.account.marginfiGroup.fetch( + throwawayGroup.publicKey + ); + assertKeysEqual(group.admin, groupAdmin.wallet.publicKey); + if (verbose) { + console.log("*init group: " + throwawayGroup.publicKey); + console.log(" group admin: " + group.admin); + } + }); + + it("(admin) Add 'LST' bank with mainnet pyth pull oracles (Jup's Sol oracle)", async () => { + let setConfig = defaultBankConfig(); + const seed = new BN(42); + const [bankKey] = deriveBankWithSeed( + bankrunProgram.programId, + throwawayGroup.publicKey, + ecosystem.lstAlphaMint.publicKey, + seed + ); + const oracleMeta: AccountMeta = { + pubkey: PYTH_ORACLE_FEED_SAMPLE, // NOTE: This is the FEED (price V2) + isSigner: false, + isWritable: false, + }; + + let tx = new Transaction(); + tx.add( + await addBankWithSeed(groupAdmin.mrgnBankrunProgram, { + marginfiGroup: throwawayGroup.publicKey, + feePayer: groupAdmin.wallet.publicKey, + bankMint: ecosystem.lstAlphaMint.publicKey, + bank: bankKey, + config: setConfig, + seed, + }), + await groupAdmin.mrgnProgram.methods + // Note: This is the ORACLE (feed id) + .lendingPoolConfigureBankOracle( + ORACLE_SETUP_PYTH_PUSH, + PYTH_ORACLE_SAMPLE + ) + .accountsPartial({ + group: throwawayGroup.publicKey, + bank: bankKey, + admin: groupAdmin.wallet.publicKey, + }) + .remainingAccounts([oracleMeta]) + .instruction() + ); + tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); + tx.sign(groupAdmin.wallet); + await banksClient.tryProcessTransaction(tx); + + if (verbose) { + console.log("*init LST bank " + bankKey); + } + + const bank = await bankrunProgram.account.bank.fetch(bankKey); + assert.equal(bank.config.assetTag, ASSET_TAG_DEFAULT); + }); + + it("(admin) Add 'LST' bank with mock pyth pull oracles", async () => { + let setConfig = defaultBankConfig(); + const seed = new BN(43); + const [bankKey] = deriveBankWithSeed( + bankrunProgram.programId, + throwawayGroup.publicKey, + ecosystem.lstAlphaMint.publicKey, + seed + ); + const oracleMeta: AccountMeta = { + pubkey: oracles.pythPullLst.publicKey, // NOTE: This is the Price V2 update + isSigner: false, + isWritable: false, + }; + + let tx = new Transaction(); + tx.add( + await addBankWithSeed(groupAdmin.mrgnBankrunProgram, { + marginfiGroup: throwawayGroup.publicKey, + feePayer: groupAdmin.wallet.publicKey, + bankMint: ecosystem.lstAlphaMint.publicKey, + bank: bankKey, + config: setConfig, + seed: seed, + }), + await groupAdmin.mrgnProgram.methods + // Note: This is the feed id + .lendingPoolConfigureBankOracle( + ORACLE_SETUP_PYTH_PUSH, + oracles.pythPullLstOracleFeed.publicKey + ) + .accountsPartial({ + group: throwawayGroup.publicKey, + bank: bankKey, + admin: groupAdmin.wallet.publicKey, + }) + .remainingAccounts([oracleMeta]) + .instruction() + ); + tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); + tx.sign(groupAdmin.wallet); + await banksClient.processTransaction(tx); + + if (verbose) { + console.log("*init WSOL bank " + bankKey); + } + + const bank = await bankrunProgram.account.bank.fetch(bankKey); + assert.equal(bank.config.assetTag, ASSET_TAG_DEFAULT); + }); + + it("(user 3) optional account setup", async () => { + const user = users[3]; + + // Init mrgn account if needed. + if (!user.accounts.has(USER_ACCOUNT)) { + const userAccKeypair = Keypair.generate(); + const userAccount = userAccKeypair.publicKey; + user.accounts.set(USER_ACCOUNT, userAccount); + + let accountInitTx: Transaction = new Transaction(); + accountInitTx.add( + await accountInit(user.mrgnBankrunProgram, { + marginfiGroup: throwawayGroup.publicKey, + marginfiAccount: userAccount, + authority: user.wallet.publicKey, + feePayer: user.wallet.publicKey, + }) + ); + accountInitTx.recentBlockhash = await getBankrunBlockhash(bankrunContext); + accountInitTx.sign(user.wallet, userAccKeypair); + await banksClient.processTransaction(accountInitTx); + } + // Fund the user + const provider = getProvider() as AnchorProvider; + const wallet = provider.wallet as Wallet; + let fundUserTx = new Transaction(); + fundUserTx.add( + createMintToInstruction( + ecosystem.lstAlphaMint.publicKey, + user.lstAlphaAccount, + wallet.publicKey, + 10 * 10 ** ecosystem.lstAlphaDecimals + ) + ); + fundUserTx.recentBlockhash = await getBankrunBlockhash(bankrunContext); + fundUserTx.sign(wallet.payer); + await banksClient.processTransaction(fundUserTx); + }); + + it("(user 3) deposit into Pyth pull bank", async () => { + const user = users[3]; + const depositAmount = 2; + const userAcc = user.accounts.get(USER_ACCOUNT); + + const seed = new BN(43); + const [bankKey] = deriveBankWithSeed( + bankrunProgram.programId, + throwawayGroup.publicKey, + ecosystem.lstAlphaMint.publicKey, + seed + ); + + let depositTx = new Transaction().add( + await depositIx(user.mrgnBankrunProgram, { + marginfiAccount: userAcc, + bank: bankKey, + tokenAccount: user.lstAlphaAccount, + amount: new BN(depositAmount * 10 ** ecosystem.lstAlphaDecimals), + depositUpToLimit: false, + }), + // Pulse to view cache state and read prices + await healthPulse(user.mrgnBankrunProgram, { + marginfiAccount: userAcc, + remaining: [bankKey, oracles.pythPullLst.publicKey], + }) + ); + + depositTx.recentBlockhash = await getBankrunBlockhash(bankrunContext); + depositTx.sign(user.wallet); + await banksClient.processTransaction(depositTx); + + const acc = await bankrunProgram.account.marginfiAccount.fetch(userAcc); + const cache = acc.healthCache; + if (verbose) { + console.log( + "Shares: " + + wrappedI80F48toBigNumber( + acc.lendingAccount.balances[0].assetShares + ).toNumber() + ); + console.log( + "price actual: " + wrappedI80F48toBigNumber(cache.prices[0]).toNumber() + ); + console.log( + "assets actual: " + + wrappedI80F48toBigNumber(cache.assetValue).toNumber() + ); + } + + assertI80F48Approx( + acc.lendingAccount.balances[0].assetShares, + depositAmount * 10 ** ecosystem.lstAlphaDecimals + ); + assertBNEqual(cache.flags, HEALTH_CACHE_HEALTHY + HEALTH_CACHE_ENGINE_OK); + const priceExpected = + oracles.lstAlphaPrice - oracles.lstAlphaPrice * oracles.confidenceValue; + assertI80F48Approx(cache.prices[0], priceExpected); + assertI80F48Approx(cache.assetValue, priceExpected * depositAmount); + }); +}); diff --git a/tests/rootHooks.ts b/tests/rootHooks.ts index 9738e0a0c..4309aa584 100644 --- a/tests/rootHooks.ts +++ b/tests/rootHooks.ts @@ -78,8 +78,17 @@ export let bankrunContext: ProgramTestContext; export let bankRunProvider: BankrunProvider; export let bankrunProgram: Program; export let banksClient: BanksClient; +/** A mainnet Pyth pull feed (Jup's Sol feed) */ +export const PYTH_ORACLE_FEED_SAMPLE = new PublicKey( + "7UVimffxr9ow1uXYxsr4LHAcV58mLzhmwaeKvJ1pjLiE" +); +/** A mainnet Pyth pull oracle (Jup's Sol feed) */ +export const PYTH_ORACLE_SAMPLE = new PublicKey( + "H6ARHf6YXhGYeQfUzQNGk6rDNnLBQKrenN712K4AQJEG" +); + /** keys copied into the bankrun instance */ -let copyKeys: PublicKey[] = []; +let copyKeys: PublicKey[] = [PYTH_ORACLE_FEED_SAMPLE, PYTH_ORACLE_SAMPLE]; export const mochaHooks = { beforeAll: async () => { @@ -127,23 +136,34 @@ export const mochaHooks = { ecosystem.tokenBDecimals, ecosystem.tokenBMint ); - const initMintsTx = new Transaction(); - initMintsTx.add(...wsolIxes); - initMintsTx.add(...usdcIxes); - initMintsTx.add(...aIxes); - initMintsTx.add(...bIxes); - - await provider.sendAndConfirm(initMintsTx, [ + const { ixes: alphaIXes, mint: alphaMint } = await createSimpleMint( + provider.publicKey, + provider.connection, + ecosystem.lstAlphaDecimals, + ecosystem.lstAlphaMint + ); + const initMintsTx1 = new Transaction(); + initMintsTx1.add(...wsolIxes); + initMintsTx1.add(...usdcIxes); + initMintsTx1.add(...aIxes); + initMintsTx1.add(...bIxes); + // Note: too large for one tx. + const initMintsTx2 = new Transaction(); + initMintsTx2.add(...alphaIXes); + await provider.sendAndConfirm(initMintsTx1, [ wsolMint, usdcMint, aMint, bMint, ]); + await provider.sendAndConfirm(initMintsTx2, [alphaMint]); + copyKeys.push( wsolMint.publicKey, usdcMint.publicKey, aMint.publicKey, - bMint.publicKey + bMint.publicKey, + alphaMint.publicKey ); let miscSetupTx = new Transaction(); @@ -185,6 +205,7 @@ export const mochaHooks = { tokenAMint: ecosystem.tokenAMint.publicKey, tokenBMint: ecosystem.tokenBMint.publicKey, usdcMint: ecosystem.usdcMint.publicKey, + lstAlphaMint: ecosystem.lstAlphaMint.publicKey, }; groupAdmin = await setupTestUser(provider, wallet.payer, setupUserOptions); @@ -193,9 +214,11 @@ export const mochaHooks = { wallet.payer, setupUserOptions ); - copyKeys.push(groupAdmin.usdcAccount); - copyKeys.push(groupAdmin.tokenBAccount); - copyKeys.push(groupAdmin.wallet.publicKey); + copyKeys.push( + groupAdmin.usdcAccount, + groupAdmin.tokenBAccount, + groupAdmin.wallet.publicKey + ); for (let i = 0; i < numUsers; i++) { const user = await setupTestUser( @@ -224,11 +247,18 @@ export const mochaHooks = { ecosystem.tokenADecimals, 20, ecosystem.tokenBDecimals, + 175, + ecosystem.lstAlphaDecimals, + 0.02, // confidnece interval verbose ); - copyKeys.push(oracles.wsolOracle.publicKey); - copyKeys.push(oracles.usdcOracle.publicKey); - copyKeys.push(oracles.tokenAOracle.publicKey); + copyKeys.push( + oracles.wsolOracle.publicKey, + oracles.usdcOracle.publicKey, + oracles.tokenAOracle.publicKey, + oracles.pythPullLst.publicKey, + oracles.pythPullLstOracleFeed.publicKey + ); for (let i = 0; i < numValidators; i++) { const validator = await createValidator( @@ -311,11 +341,14 @@ const addValidator = (validator: Validator) => { const addUser = (user: MockUser) => { users.push(user); - copyKeys.push(user.tokenAAccount); - copyKeys.push(user.tokenBAccount); - copyKeys.push(user.usdcAccount); - copyKeys.push(user.wallet.publicKey); - copyKeys.push(user.wsolAccount); + copyKeys.push( + user.tokenAAccount, + user.tokenBAccount, + user.usdcAccount, + user.wallet.publicKey, + user.wsolAccount, + user.lstAlphaAccount + ); }; /** diff --git a/tests/s09_emissions.spec.ts b/tests/s09_emissions.spec.ts index cb5a97e17..f072a388f 100644 --- a/tests/s09_emissions.spec.ts +++ b/tests/s09_emissions.spec.ts @@ -390,7 +390,6 @@ describe("Set up emissions on staked collateral assets", () => { tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); tx.sign(user.wallet); let result = await banksClient.tryProcessTransaction(tx); - dumpBankrunLogs(result); // InvalidEmissionsDestinationAccount 6063 assertBankrunTxFailed(result, "0x17af"); diff --git a/tests/utils/mocks.ts b/tests/utils/mocks.ts index ba61d4126..3b61c0f34 100644 --- a/tests/utils/mocks.ts +++ b/tests/utils/mocks.ts @@ -26,6 +26,8 @@ export type Ecosystem = { tokenBMint: Keypair; /** A generic spl token mint like USDC (6 decimals) */ usdcMint: Keypair; + /** A generic LST-like mint (like wsol, 9 decimals) */ + lstAlphaMint: Keypair; /** 9 */ wsolDecimals: number; /** Decimals for token A (default 8) */ @@ -34,6 +36,8 @@ export type Ecosystem = { tokenBDecimals: number; /** 6 */ usdcDecimals: number; + /** Decimals for lst alpha (default 9)*/ + lstAlphaDecimals: number; }; /** @@ -48,10 +52,12 @@ export const getGenericEcosystem = () => { tokenAMint: Keypair.generate(), tokenBMint: Keypair.generate(), usdcMint: Keypair.generate(), + lstAlphaMint: Keypair.generate(), wsolDecimals: 9, tokenADecimals: 8, tokenBDecimals: 6, usdcDecimals: 6, + lstAlphaDecimals: 9, }; return ecosystem; }; @@ -62,7 +68,13 @@ export const getGenericEcosystem = () => { */ export const echoEcosystemInfo = ( ecosystem: Ecosystem, - { skipWsol = false, skipUsdc = false, skipA = false, skipB = false } + { + skipWsol = false, + skipUsdc = false, + skipA = false, + skipB = false, + skipAlpha = false, + } ) => { if (!skipWsol) { console.log("wsol mint:........... " + ecosystem.wsolMint.publicKey); @@ -80,6 +92,10 @@ export const echoEcosystemInfo = ( console.log("token b mint:........ " + ecosystem.tokenBMint.publicKey); console.log(" token b decimals:.. " + ecosystem.tokenBDecimals); } + if (!skipAlpha) { + console.log("lst alpha mint:...... " + ecosystem.lstAlphaMint.publicKey); + console.log(" lst alpha decimals: " + ecosystem.lstAlphaDecimals); + } }; /** @@ -95,6 +111,8 @@ export type MockUser = { tokenBAccount: PublicKey; /** Users's ATA for USDC */ usdcAccount: PublicKey; + /** Users's ATA for LST Alpha */ + lstAlphaAccount: PublicKey; /** A program that uses the user's wallet */ mrgnProgram: Program | undefined; /** A bankrun program that uses the user's wallet */ @@ -121,6 +139,7 @@ export interface SetupTestUserOptions { tokenAMint: PublicKey; tokenBMint: PublicKey; usdcMint: PublicKey; + lstAlphaMint: PublicKey; } /** @@ -209,6 +228,22 @@ export const setupTestUser = async ( ); } + let alphaAccount: PublicKey = PublicKey.default; + if (options.lstAlphaMint) { + alphaAccount = getAssociatedTokenAddressSync( + options.lstAlphaMint, + userWallet + ); + tx.add( + createAssociatedTokenAccountInstruction( + wallet.publicKey, + alphaAccount, + userWallet, + options.lstAlphaMint + ) + ); + } + await provider.sendAndConfirm(tx, [wallet]); const user: MockUser = { @@ -217,6 +252,7 @@ export const setupTestUser = async ( tokenAAccount: tokenAAccount, tokenBAccount: tokenBAccount, usdcAccount: usdcAccount, + lstAlphaAccount: alphaAccount, mrgnProgram: options.marginProgram ? getUserMarginfiProgram(options.marginProgram, userWalletKeypair) @@ -301,8 +337,16 @@ export type Oracles = { tokenBOracle: Keypair; tokenBPrice: number; tokenBDecimals: number; + lstAlphaPrice: number; + lstAlphaDecimals: number; + /** By default, oracle conf is this times price */ + confidenceValue: number; /** Same initial price/decimals as USDC, but different key. */ fakeUsdc: PublicKey; + /** Pyth pull oracle price feed that uses a SOL-like price and SOL decimals */ + pythPullLst: Keypair; + /** the feed ID that pythPullLst oracle uses. */ + pythPullLstOracleFeed: Keypair; }; /** diff --git a/tests/utils/pyth-pull-mocks.ts b/tests/utils/pyth-pull-mocks.ts new file mode 100644 index 000000000..a31dff84c --- /dev/null +++ b/tests/utils/pyth-pull-mocks.ts @@ -0,0 +1,253 @@ +import { Keypair, PublicKey } from "@solana/web3.js"; +import BN from "bn.js"; +import { createMockAccount, storeMockAccount } from "./mocks"; +import { Mocks } from "../../target/types/mocks"; +import { Program, Wallet, workspace } from "@coral-xyz/anchor"; +import { printBuffers } from "../rootHooks"; + +type VerificationLevel = + | { kind: "Partial"; num_signatures: number } + | { kind: "Full" }; + +interface PriceFeedMessage { + feed_id: PublicKey; // 32 bytes + price: BN; // i64 + conf: BN; // u64 + exponent: number; // i32 + publish_time: BN; // i64 (timestamp in seconds) + prev_publish_time: BN; // i64 + ema_price: BN; // i64 + ema_conf: BN; // u64 +} + +interface PriceUpdateV2 { + write_authority: PublicKey; // 32 bytes + verification_level: VerificationLevel; // 2 bytes (1 byte tag + 1 byte value/padding) + price_message: PriceFeedMessage; // 84 bytes + posted_slot: BN; // u64 (8 bytes) +} + +/** + * Decodes a base64 string (Borsh-serialized PriceUpdateV2) into the PriceUpdateV2 structure. + * + * Note: The first 8 bytes are assumed to be the Anchor account discriminator. + */ +function decodePriceUpdateV2(base64Data: string): PriceUpdateV2 { + const buffer = Buffer.from(base64Data, "base64"); + let offset = 0; + + // Skip the 8-byte discriminator. (34 241 35 99 157 126 244 205) + + // const discrim = buffer.subarray(offset, offset + 8); + // for (let i = 0; i < discrim.length; i++) { + // console.log(i + " " + discrim[i]); + // } + offset += 8; + + // 1. write_authority (32 bytes) + const write_authority = new PublicKey(buffer.subarray(offset, offset + 32)); + offset += 32; + + // 2. verification_level (2 bytes) + const verTag = buffer.readUInt8(offset); + offset += 1; + let verification_level: VerificationLevel; + if (verTag === 0) { + // "Partial" variant: the next byte is the num_signatures. + const num_signatures = buffer.readUInt8(offset); + offset += 1; + verification_level = { kind: "Partial", num_signatures }; + } else if (verTag === 1) { + // "Full" variant: the next byte is NOT SKIPPED, it is just one byte shorter! + // offset += 1; + verification_level = { kind: "Full" }; + } else { + throw new Error(`Unknown verification level tag: ${verTag}`); + } + + // 3. PriceFeedMessage + // - feed_id: 32 bytes + const feed_id = new PublicKey(buffer.subarray(offset, offset + 32)); + offset += 32; + // - price: i64 (8 bytes, little-endian) + const priceBN = new BN(buffer.subarray(offset, offset + 8), "le"); + offset += 8; + // - conf: u64 (8 bytes) + const conf = new BN(buffer.subarray(offset, offset + 8), "le"); + offset += 8; + // - exponent: i32 (4 bytes) + const exponent = buffer.readInt32LE(offset); + offset += 4; + // - publish_time: i64 (8 bytes) + const publishTimeBN = new BN(buffer.subarray(offset, offset + 8), "le"); + offset += 8; + // - prev_publish_time: i64 (8 bytes) + const prevPublishTimeBN = new BN(buffer.subarray(offset, offset + 8), "le"); + offset += 8; + // - ema_price: i64 (8 bytes) + const emaPriceBN = new BN(buffer.subarray(offset, offset + 8), "le"); + offset += 8; + // - ema_conf: u64 (8 bytes) + const ema_conf = new BN(buffer.subarray(offset, offset + 8), "le"); + offset += 8; + + const price_message: PriceFeedMessage = { + feed_id, + price: priceBN, + conf, + exponent, + publish_time: publishTimeBN, + prev_publish_time: prevPublishTimeBN, + ema_price: emaPriceBN, + ema_conf, + }; + + // 4. posted_slot: u64 (8 bytes) + const posted_slot = new BN(buffer.subarray(offset, offset + 8), "le"); + offset += 8; + + return { + write_authority, + verification_level, + price_message, + posted_slot, + }; +} + +/** + * Constructs a PriceUpdateV2 buffer (with discriminator) and writes it to the mock account. Pass `existingAccount` to update an existing feed. + * + * Layout: + * - 8 bytes: Discriminator (34, 241, 35, 99, 157, 126, 244, 205) + * - 32 bytes: write_authority (PublicKey) + * - 2 bytes: verification_level (Full => [1, 0]) + * - 32 bytes: feed_id (PublicKey) + * - 8 bytes: price (i64) + * - 8 bytes: conf (u64) + * - 4 bytes: exponent (i32) + * - 8 bytes: publish_time (i64) + * - 8 bytes: prev_publish_time (i64) + * - 8 bytes: ema_price (i64) + * - 8 bytes: ema_conf (u64) + * - 8 bytes: posted_slot (u64) + * + * Total: 134 bytes. + */ +export async function initOrUpdatePriceUpdateV2( + wallet: Wallet, + feed_id: PublicKey, + price: BN, + conf: BN, + ema_price: BN, + ema_conf: BN, + slot: BN, + exponent: number, + existingAccount?: Keypair +) { + const space = 134; + // Compute publish times. + const now = Math.floor(Date.now() / 1000); + const publish_time = new BN(now); + const prev_publish_time = new BN(now - 1); + // Allocate a 134-byte buffer. + const buf = Buffer.alloc(space); + let offset = 0; + // Write the 8-byte discriminator. + const discriminator = Buffer.from([34, 241, 35, 99, 157, 126, 244, 205]); + discriminator.copy(buf, offset); + offset += 8; + // Write the write_authority (32 bytes). + // Don't care about this key, use any value. + const writeAuthority = PublicKey.unique().toBuffer(); + writeAuthority.copy(buf, offset); + offset += 32; + // Write verification_level (2 bytes) - "Full": tag 1 and dummy 0. + buf.writeUInt8(1, offset); // tag for Full + offset += 1; + + // PriceFeedMessage: + // feed_id (32 bytes) + feed_id.toBuffer().copy(buf, offset); + offset += 32; + // price (i64, 8 bytes) + price.toArrayLike(Buffer, "le", 8).copy(buf, offset); + offset += 8; + // conf (u64, 8 bytes) + conf.toArrayLike(Buffer, "le", 8).copy(buf, offset); + offset += 8; + // exponent (i32, 4 bytes) + buf.writeInt32LE(exponent, offset); + offset += 4; + // publish_time (i64, 8 bytes) + publish_time.toArrayLike(Buffer, "le", 8).copy(buf, offset); + offset += 8; + // prev_publish_time (i64, 8 bytes) + prev_publish_time.toArrayLike(Buffer, "le", 8).copy(buf, offset); + offset += 8; + // ema_price (i64, 8 bytes) + ema_price.toArrayLike(Buffer, "le", 8).copy(buf, offset); + offset += 8; + // ema_conf (u64, 8 bytes) + ema_conf.toArrayLike(Buffer, "le", 8).copy(buf, offset); + offset += 8; + // posted_slot (u64, 8 bytes) + slot.toArrayLike(Buffer, "le", 8).copy(buf, offset); + offset += 8; + + if (printBuffers) { + console.log("PriceUpdateV2 Buffer (base64):", buf.toString("base64")); + } + + // Write the buffer to the mock account + const mockProgram: Program = workspace.Mocks; + if (existingAccount) { + await storeMockAccount(mockProgram, wallet, existingAccount, 0, buf); + return existingAccount; + } else { + let account = await createMockAccount(mockProgram, space, wallet); + await storeMockAccount(mockProgram, wallet, account, 0, buf); + return account; + } +} + +/** + * Price updates expect a `valid` feed, but don't actually read anything from it. If suffices to + * create an account of the correct size with "PYTH" as the owner. Pass this key as the `feed_id` to + * create price updates for an asset. This size of this account also doesn't matter, nor does the + * discrminator, etc. It can literally be any account owned by PYTH. + * @param wallet + * @returns + */ +export async function initBlankOracleFeed(wallet: Wallet) { + const space = 300; + const buf = Buffer.alloc(space); + + // Write the buffer to the mock account + const mockProgram: Program = workspace.Mocks; + let account = await createMockAccount(mockProgram, space, wallet); + await storeMockAccount(mockProgram, wallet, account, 0, buf); + + return account; +} + +// Sample usage (run with `ts-node pyth-pull-mocks.ts`) + +// const base64Data = "IvEjY51+9M0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQETiBzPres/ehv0qThWXLPfQ9hD11F3I/i9W1bPF+o7/QAW0L4oAAAAAMOd0AAAAAD3////vBLSZwAAAAC7EtJnAAAAAAAW0L4oAAAAAMOd0AAAAAAAAAAAAAAAAAA="; +// //const base64Data = +// // "IvEjY51+9M1gMUcENA3t3zcf1CRyFI8kjp0abRpesqw6zYt/1dayQwHvDYtv2izrpB2hXUCV0do5Kg0vjtDGx7wPTPrIwoC1bW2njwUFAAAARTozAQAAAAD4////1wN5ZwAAAADXA3lnAAAAAIRKaggFAAAAk1kTAQAAAAA8qpUSAAAAAAA="; +// const priceUpdate = decodePriceUpdateV2(base64Data); + +// // For debugging, output fields in a readable format. +// console.log("Write Authority (hex):", priceUpdate.write_authority.toString()); +// console.log("Verification Level:", priceUpdate.verification_level); +// console.log("Price Feed Message:", { +// feed_id: priceUpdate.price_message.feed_id.toString(), +// price: priceUpdate.price_message.price.toString(), +// conf: priceUpdate.price_message.conf.toString(), +// exponent: priceUpdate.price_message.exponent, +// publish_time: priceUpdate.price_message.publish_time.toString(), +// prev_publish_time: priceUpdate.price_message.prev_publish_time.toString(), +// ema_price: priceUpdate.price_message.ema_price.toString(), +// ema_conf: priceUpdate.price_message.ema_conf.toString(), +// }); +// console.log("Posted Slot:", priceUpdate.posted_slot.toString()); diff --git a/tests/utils/pyth_mocks.ts b/tests/utils/pyth_mocks.ts index a3b021059..10e865a87 100644 --- a/tests/utils/pyth_mocks.ts +++ b/tests/utils/pyth_mocks.ts @@ -4,10 +4,14 @@ // will still deserialize the price data) // Adapated from PsyLend, Jet labs, etc -import { Program, Wallet, workspace } from "@coral-xyz/anchor"; +import { BN, Program, Wallet, workspace } from "@coral-xyz/anchor"; import { Keypair, PublicKey } from "@solana/web3.js"; import { Oracles, createMockAccount, storeMockAccount } from "./mocks"; import { Mocks } from "../../target/types/mocks"; +import { + initBlankOracleFeed, + initOrUpdatePriceUpdateV2, +} from "./pyth-pull-mocks"; /** Copied from `@pythnetwork/client": "^2.19.0"`, used as a discriminator */ const Magic = 2712847316; @@ -313,12 +317,16 @@ export const setupPythOracles = async ( tokenADecimals: number, tokenBPrice: number, tokenBDecimals: number, + lstAlphaPrice: number, + lstAlphaDecimals: number, + oracleConfDefault: number, verbose: boolean, skips?: { wsol: boolean; usdc: boolean; a: boolean; b: boolean; + wsolPyth: boolean; } ) => { let wsolPythOracle = await createPriceAccount(wallet); @@ -426,12 +434,33 @@ export const setupPythOracles = async ( ); } + let lstPythPullOracle = Keypair.generate(); + let lstPythPullOracleFeed = Keypair.generate(); + let priceAlpha = lstAlphaPrice * 10 ** lstAlphaDecimals; + let confAlpha = lstAlphaPrice * oracleConfDefault * 10 ** lstAlphaDecimals; + if (skips && skips.wsolPyth) { + // do nothing + } else { + lstPythPullOracleFeed = await initBlankOracleFeed(wallet); + lstPythPullOracle = await initOrUpdatePriceUpdateV2( + wallet, + lstPythPullOracleFeed.publicKey, + new BN(priceAlpha), + new BN(confAlpha), + new BN(priceAlpha), + new BN(confAlpha), + new BN(0), + -lstAlphaDecimals + ); + } + if (verbose) { console.log("Mock Pyth price oracles:"); console.log("wsol price: \t" + wsolPythOracle.publicKey); console.log("usdc price: \t" + usdcPythOracle.publicKey); console.log("token a price: \t" + tokenAPythOracle.publicKey); console.log("token b price: \t" + tokenBPythOracle.publicKey); + console.log("lst pyth pull \t" + lstPythPullOracle.publicKey); console.log( "Price of 1 wsol.......$" + wsolPrice + @@ -456,6 +485,12 @@ export const setupPythOracles = async ( "\t one token in native decimals: " + (1 * 10 ** tokenBDecimals).toLocaleString() ); + console.log( + "Price of 1 LST alpha..$" + + lstAlphaPrice + + "\t one token in native decimals: " + + (1 * 10 ** lstAlphaDecimals).toLocaleString() + ); console.log(""); } let oracles: Oracles = { @@ -471,7 +506,11 @@ export const setupPythOracles = async ( usdcPrice: usdcPrice, tokenAPrice: tokenAPrice, tokenBPrice: tokenBPrice, + lstAlphaPrice: lstAlphaPrice, + lstAlphaDecimals: lstAlphaDecimals, fakeUsdc: fakeUsdcPythOracle.publicKey, + pythPullLst: lstPythPullOracle, + pythPullLstOracleFeed: lstPythPullOracleFeed, }; return oracles; }; From 3dcb32c779072ba5a5e1bb9f5e1c4ff3dba20d46 Mon Sep 17 00:00:00 2001 From: Ilia Zyrin Date: Fri, 14 Mar 2025 13:36:49 +0100 Subject: [PATCH 53/59] clarify IllegalLiquidation codes and get rid of redundant msg! calls (#315) * clarify IllegalLiquidation codes and get rid of redundant msg! calls * fix fuzz tests --------- Co-authored-by: Ilia Zyrin --- programs/marginfi/fuzz/Cargo.lock | 2 +- programs/marginfi/fuzz/src/lib.rs | 6 +++- programs/marginfi/src/errors.rs | 33 +++++++++++++++++-- .../marginfi_account/liquidate.rs | 11 ++----- .../marginfi/src/state/marginfi_account.rs | 19 ++++------- .../marginfi/tests/user_actions/liquidate.rs | 11 ++++--- tests/10_liquidate.spec.ts | 2 +- 7 files changed, 54 insertions(+), 30 deletions(-) diff --git a/programs/marginfi/fuzz/Cargo.lock b/programs/marginfi/fuzz/Cargo.lock index 09577936a..f5b285a25 100644 --- a/programs/marginfi/fuzz/Cargo.lock +++ b/programs/marginfi/fuzz/Cargo.lock @@ -2742,7 +2742,7 @@ dependencies = [ [[package]] name = "marginfi" -version = "0.1.1" +version = "0.1.2" dependencies = [ "anchor-lang 0.29.0", "anchor-lang 0.30.1", diff --git a/programs/marginfi/fuzz/src/lib.rs b/programs/marginfi/fuzz/src/lib.rs index b4a072cac..d079e78b2 100644 --- a/programs/marginfi/fuzz/src/lib.rs +++ b/programs/marginfi/fuzz/src/lib.rs @@ -832,7 +832,11 @@ impl<'state> MarginfiFuzzContext<'state> { MarginfiError::RiskEngineInitRejected.into(), MarginfiError::IsolatedAccountIllegalState.into(), MarginfiError::IllegalUtilizationRatio.into(), - MarginfiError::IllegalLiquidation.into(), + MarginfiError::ZeroLiquidationAmount.into(), + MarginfiError::OverliquidationAttempt.into(), + MarginfiError::HealthyAccount.into(), + MarginfiError::ExhaustedLiability.into(), + MarginfiError::TooSevereLiquidation.into(), MarginfiError::AccountDisabled.into(), MarginfiError::MathError.into(), // TODO: would be best to avoid this one ] diff --git a/programs/marginfi/src/errors.rs b/programs/marginfi/src/errors.rs index c5ff9cdc3..d04dcd035 100644 --- a/programs/marginfi/src/errors.rs +++ b/programs/marginfi/src/errors.rs @@ -26,8 +26,8 @@ pub enum MarginfiError { LendingAccountBalanceSlotsFull, #[msg("Bank already exists")] // 6011 BankAlreadyExists, - #[msg("Illegal liquidation")] // 6012 - IllegalLiquidation, + #[msg("Amount to liquidate must be positive")] // 6012 + ZeroLiquidationAmount, #[msg("Account is not bankrupt")] // 6013 AccountNotBankrupt, #[msg("Account balance is not bad debt")] // 6014 @@ -130,6 +130,24 @@ pub enum MarginfiError { MathError, #[msg("Invalid emissions destination account")] // 6063 InvalidEmissionsDestinationAccount, + #[msg("Asset and liability bank cannot be the same")] // 6064 + SameAssetAndLiabilityBanks, + #[msg("Trying to withdraw more assets than available")] // 6065 + OverliquidationAttempt, + #[msg("Liability bank has no liabilities")] // 6066 + NoLiabilitiesInLiabilityBank, + #[msg("Liability bank has assets")] // 6067 + AssetsInLiabilityBank, + #[msg("Account is healthy and cannot be liquidated")] // 6068 + HealthyAccount, + #[msg("Liability payoff too severe, exhausted liability")] // 6069 + ExhaustedLiability, + #[msg("Liability payoff too severe, liability balance has assets")] // 6070 + TooSeverePayoff, + #[msg("Liquidation too severe, account above maintenance requirement")] // 6071 + TooSevereLiquidation, + #[msg("Liquidation would worsen account health")] // 6072 + WorseHealthPostLiquidation, } impl From for ProgramError { @@ -173,7 +191,7 @@ impl From for MarginfiError { 6009 => MarginfiError::RiskEngineInitRejected, 6010 => MarginfiError::LendingAccountBalanceSlotsFull, 6011 => MarginfiError::BankAlreadyExists, - 6012 => MarginfiError::IllegalLiquidation, + 6012 => MarginfiError::ZeroLiquidationAmount, 6013 => MarginfiError::AccountNotBankrupt, 6014 => MarginfiError::BalanceNotBadDebt, 6015 => MarginfiError::InvalidConfig, @@ -225,6 +243,15 @@ impl From for MarginfiError { 6061 => MarginfiError::SwitchboardInvalidAccount, 6062 => MarginfiError::MathError, 6063 => MarginfiError::InvalidEmissionsDestinationAccount, + 6064 => MarginfiError::SameAssetAndLiabilityBanks, + 6065 => MarginfiError::OverliquidationAttempt, + 6066 => MarginfiError::NoLiabilitiesInLiabilityBank, + 6067 => MarginfiError::AssetsInLiabilityBank, + 6068 => MarginfiError::HealthyAccount, + 6069 => MarginfiError::ExhaustedLiability, + 6070 => MarginfiError::TooSeverePayoff, + 6071 => MarginfiError::TooSevereLiquidation, + 6072 => MarginfiError::WorseHealthPostLiquidation, _ => MarginfiError::InternalLogicError, } } diff --git a/programs/marginfi/src/instructions/marginfi_account/liquidate.rs b/programs/marginfi/src/instructions/marginfi_account/liquidate.rs index f3e53fbb2..1328d22fd 100644 --- a/programs/marginfi/src/instructions/marginfi_account/liquidate.rs +++ b/programs/marginfi/src/instructions/marginfi_account/liquidate.rs @@ -82,16 +82,11 @@ pub fn lending_account_liquidate<'info>( mut ctx: Context<'_, '_, 'info, 'info, LendingAccountLiquidate<'info>>, asset_amount: u64, ) -> MarginfiResult { - check!( - asset_amount > 0, - MarginfiError::IllegalLiquidation, - "Asset amount must be positive" - ); + check!(asset_amount > 0, MarginfiError::ZeroLiquidationAmount); check!( ctx.accounts.asset_bank.key() != ctx.accounts.liab_bank.key(), - MarginfiError::IllegalLiquidation, - "Asset and liability bank cannot be the same" + MarginfiError::SameAssetAndLiabilityBanks ); // Liquidators must repay debts in allowed asset types. A SOL debt can be repaid in any asset. A @@ -264,7 +259,7 @@ pub fn lending_account_liquidate<'info>( bank_account .withdraw(asset_amount) - .map_err(|_| MarginfiError::IllegalLiquidation)?; + .map_err(|_| MarginfiError::OverliquidationAttempt)?; let post_balance = bank_account .bank diff --git a/programs/marginfi/src/state/marginfi_account.rs b/programs/marginfi/src/state/marginfi_account.rs index 68e9701bd..3f547b092 100644 --- a/programs/marginfi/src/state/marginfi_account.rs +++ b/programs/marginfi/src/state/marginfi_account.rs @@ -638,12 +638,12 @@ impl<'info> RiskEngine<'_, 'info> { liability_bank_balance .is_empty(BalanceSide::Liabilities) .not(), - MarginfiError::IllegalLiquidation + MarginfiError::NoLiabilitiesInLiabilityBank ); check!( liability_bank_balance.is_empty(BalanceSide::Assets), - MarginfiError::IllegalLiquidation + MarginfiError::AssetsInLiabilityBank ); let (assets, liabs) = @@ -658,8 +658,7 @@ impl<'info> RiskEngine<'_, 'info> { check!( account_health <= I80F48::ZERO, - MarginfiError::IllegalLiquidation, - "Account not unhealthy" + MarginfiError::HealthyAccount ); Ok(account_health) @@ -695,14 +694,12 @@ impl<'info> RiskEngine<'_, 'info> { liability_bank_balance .is_empty(BalanceSide::Liabilities) .not(), - MarginfiError::IllegalLiquidation, - "Liability payoff too severe, exhausted liability" + MarginfiError::ExhaustedLiability ); check!( liability_bank_balance.is_empty(BalanceSide::Assets), - MarginfiError::IllegalLiquidation, - "Liability payoff too severe, liability balance has assets" + MarginfiError::TooSeverePayoff ); let (assets, liabs) = @@ -712,8 +709,7 @@ impl<'info> RiskEngine<'_, 'info> { check!( account_health <= I80F48::ZERO, - MarginfiError::IllegalLiquidation, - "Liquidation too severe, account above maintenance requirement" + MarginfiError::TooSevereLiquidation ); debug!( @@ -723,8 +719,7 @@ impl<'info> RiskEngine<'_, 'info> { check!( account_health > pre_liquidation_health, - MarginfiError::IllegalLiquidation, - "Post liquidation health worse" + MarginfiError::WorseHealthPostLiquidation ); Ok(account_health) diff --git a/programs/marginfi/tests/user_actions/liquidate.rs b/programs/marginfi/tests/user_actions/liquidate.rs index 39af964d4..972a094e9 100644 --- a/programs/marginfi/tests/user_actions/liquidate.rs +++ b/programs/marginfi/tests/user_actions/liquidate.rs @@ -568,7 +568,7 @@ async fn marginfi_account_liquidation_failure_liquidatee_not_unhealthy() -> anyh assert!(res.is_err()); - assert_custom_error!(res.unwrap_err(), MarginfiError::IllegalLiquidation); + assert_custom_error!(res.unwrap_err(), MarginfiError::HealthyAccount); Ok(()) } @@ -611,7 +611,7 @@ async fn marginfi_account_liquidation_failure_liquidation_too_severe() -> anyhow .try_liquidate(&borrower_mfi_account_f, sol_bank_f, 10, usdc_bank_f) .await; - assert_custom_error!(res.unwrap_err(), MarginfiError::IllegalLiquidation); + assert_custom_error!(res.unwrap_err(), MarginfiError::ExhaustedLiability); let res = lender_mfi_account_f .try_liquidate(&borrower_mfi_account_f, sol_bank_f, 1, usdc_bank_f) @@ -690,7 +690,7 @@ async fn marginfi_account_liquidation_failure_liquidator_no_collateral() -> anyh .try_liquidate(&borrower_mfi_account_f, sol_eq_bank_f, 2, usdc_bank_f) .await; - assert_custom_error!(res.unwrap_err(), MarginfiError::IllegalLiquidation); + assert_custom_error!(res.unwrap_err(), MarginfiError::OverliquidationAttempt); let res = lender_mfi_account_f .try_liquidate(&borrower_mfi_account_f, sol_eq_bank_f, 1, usdc_bank_f) @@ -747,7 +747,10 @@ async fn marginfi_account_liquidation_failure_bank_not_liquidatable() -> anyhow: .try_liquidate(&borrower_mfi_account_f, sol_eq_bank_f, 1, sol_bank_f) .await; - assert_custom_error!(res.unwrap_err(), MarginfiError::IllegalLiquidation); + assert_custom_error!( + res.unwrap_err(), + MarginfiError::NoLiabilitiesInLiabilityBank + ); let res = lender_mfi_account_f .try_liquidate(&borrower_mfi_account_f, sol_bank_f, 1, usdc_bank_f) diff --git a/tests/10_liquidate.spec.ts b/tests/10_liquidate.spec.ts index 6408c1255..f498e3e7b 100644 --- a/tests/10_liquidate.spec.ts +++ b/tests/10_liquidate.spec.ts @@ -120,7 +120,7 @@ describe("Liquidate user", () => { ) ); // TODO this should throw a more oracle-specific error further upstream, this is kinda dumb. - }, "IllegalLiquidation"); + }, "HealthyAccount"); }); it("(user 1) tries to sneak in a bad oracle for the liquidatee - should fail", async () => { From 7c09922ac21915770ab3d9ea73a0b18dd07d69a7 Mon Sep 17 00:00:00 2001 From: Jon Gurary <91919816+jgur-psyops@users.noreply.github.com> Date: Fri, 14 Mar 2025 13:28:40 -0400 Subject: [PATCH 54/59] Arena-limited groups (#312) * Adds a ARENA_GROUP flag to groups, which limits them to have only two or fewer banks. * Setting a group as an arena group is permanent and cannot be undone. --- clients/rust/marginfi-cli/src/entrypoint.rs | 42 +++++-- .../rust/marginfi-cli/src/processor/mod.rs | 17 ++- guides/GETTING_STARTED_DEV.md | 8 ++ programs/marginfi/fuzz/src/lib.rs | 45 ++++--- programs/marginfi/src/errors.rs | 4 + programs/marginfi/src/events.rs | 5 +- .../instructions/marginfi_account/borrow.rs | 4 +- .../marginfi_account/close_balance.rs | 4 +- .../instructions/marginfi_account/deposit.rs | 4 +- .../marginfi_account/emissions.rs | 8 +- .../marginfi_account/flashloan.rs | 20 ++-- .../instructions/marginfi_account/repay.rs | 4 +- .../instructions/marginfi_account/withdraw.rs | 4 +- .../instructions/marginfi_group/add_pool.rs | 7 ++ .../marginfi_group/add_pool_permissionless.rs | 5 +- .../marginfi_group/add_pool_with_seed.rs | 4 + .../marginfi_group/config_group_fee.rs | 14 ++- .../instructions/marginfi_group/configure.rs | 64 +++++----- .../marginfi_group/handle_bankruptcy.rs | 4 +- .../instructions/marginfi_group/initialize.rs | 21 +++- programs/marginfi/src/lib.rs | 19 ++- programs/marginfi/src/prelude.rs | 5 +- programs/marginfi/src/state/health_cache.rs | 15 ++- .../marginfi/src/state/marginfi_account.rs | 47 ++++---- programs/marginfi/src/state/marginfi_group.rs | 98 ++++++++++------ .../tests/admin_actions/account_transfer.rs | 21 +++- .../tests/admin_actions/bankruptcy.rs | 3 +- .../tests/admin_actions/bankruptcy_auth.rs | 16 +-- .../admin_actions/create_marginfi_group.rs | 9 +- .../tests/admin_actions/interest_accrual.rs | 7 +- .../tests/admin_actions/setup_bank.rs | 110 ++++++++++++++++++ .../tests/admin_actions/withdraw_fees.rs | 5 +- .../marginfi/tests/misc/operational_state.rs | 7 +- programs/marginfi/tests/misc/pyth_push.rs | 5 +- .../marginfi/tests/misc/real_oracle_data.rs | 4 +- .../risk_engine_flexible_oracle_checks.rs | 4 +- .../marginfi/tests/misc/token_extensions.rs | 5 +- .../marginfi/tests/user_actions/flash_loan.rs | 34 +----- .../marginfi/tests/user_actions/liquidate.rs | 3 - programs/marginfi/tests/user_actions/mod.rs | 30 ++--- test-utils/src/marginfi_account.rs | 54 ++++++--- test-utils/src/marginfi_group.rs | 35 ++++-- test-utils/src/test.rs | 18 +-- tests/02_configGroup.spec.ts | 2 +- tests/utils/group-instructions.ts | 18 ++- 45 files changed, 537 insertions(+), 325 deletions(-) diff --git a/clients/rust/marginfi-cli/src/entrypoint.rs b/clients/rust/marginfi-cli/src/entrypoint.rs index 6c920587f..27091cceb 100644 --- a/clients/rust/marginfi-cli/src/entrypoint.rs +++ b/clients/rust/marginfi-cli/src/entrypoint.rs @@ -8,11 +8,11 @@ use anchor_client::Cluster; use anyhow::Result; use clap::{clap_derive::ArgEnum, Parser}; use fixed::types::I80F48; -use marginfi::state::marginfi_account::TRANSFER_AUTHORITY_ALLOWED_FLAG; +use marginfi::state::marginfi_account::ACCOUNT_TRANSFER_AUTHORITY_ALLOWED; use marginfi::{ prelude::*, state::{ - marginfi_account::{Balance, LendingAccount, MarginfiAccount, FLASHLOAN_ENABLED_FLAG}, + marginfi_account::{Balance, LendingAccount, MarginfiAccount, ACCOUNT_FLAG_DEPRECATED}, marginfi_group::{ Bank, BankConfig, BankConfigOpt, BankOperationalState, InterestRateConfig, InterestRateConfigOpt, RiskTier, WrappedI80F48, @@ -96,9 +96,14 @@ pub enum GroupCommand { admin: Option, #[clap(short = 'f', long = "override")] override_existing_profile_group: bool, + #[clap(long)] + is_arena_group: bool, }, Update { - admin: Option, + #[clap(long)] + new_admin: Pubkey, + #[clap(long)] + is_arena_group: bool, }, AddBank { #[clap(long)] @@ -179,8 +184,11 @@ pub enum GroupCommand { program_fee_rate: f64, }, ConfigGroupFee { - #[clap(long)] - flag: u64, + #[clap( + long, + help = "True to enable collecting program fees for all banks in this group" + )] + enable_program_fee: bool, }, PropagateFee { #[clap(long)] @@ -587,9 +595,19 @@ fn group(subcmd: GroupCommand, global_options: &GlobalOptions) -> Result<()> { GroupCommand::Create { admin, override_existing_profile_group, - } => processor::group_create(config, profile, admin, override_existing_profile_group), + is_arena_group, + } => processor::group_create( + config, + profile, + admin, + override_existing_profile_group, + is_arena_group, + ), - GroupCommand::Update { admin } => processor::group_configure(config, profile, admin), + GroupCommand::Update { + new_admin, + is_arena_group, + } => processor::group_configure(config, profile, new_admin, is_arena_group), GroupCommand::AddBank { mint: bank_mint, @@ -681,7 +699,9 @@ fn group(subcmd: GroupCommand, global_options: &GlobalOptions) -> Result<()> { program_fee_fixed, program_fee_rate, ), - GroupCommand::ConfigGroupFee { flag } => processor::config_group_fee(config, profile, flag), + GroupCommand::ConfigGroupFee { enable_program_fee } => { + processor::config_group_fee(config, profile, enable_program_fee) + } GroupCommand::PropagateFee { marginfi_group } => { processor::propagate_fee(config, marginfi_group) } @@ -828,7 +848,6 @@ fn bank(subcmd: BankCommand, global_options: &GlobalOptions) -> Result<()> { fn inspect_padding() -> Result<()> { println!("MarginfiGroup: {}", MarginfiGroup::type_layout()); - println!("GroupConfig: {}", GroupConfig::type_layout()); println!("InterestRateConfig: {}", InterestRateConfig::type_layout()); println!( "Bank: {}", @@ -849,7 +868,6 @@ fn inspect_size() -> Result<()> { use std::mem::size_of; println!("MarginfiGroup: {}", size_of::()); - println!("GroupConfig: {}", size_of::()); println!("InterestRateConfig: {}", size_of::()); println!( "Bank: {}", @@ -965,12 +983,12 @@ fn process_account_subcmd(subcmd: AccountCommand, global_options: &GlobalOptions if flashloan { println!("Setting flashloan flag"); - flag |= FLASHLOAN_ENABLED_FLAG; + flag |= ACCOUNT_FLAG_DEPRECATED; } if account_migration_enabled { println!("Setting account migration flag"); - flag |= TRANSFER_AUTHORITY_ALLOWED_FLAG; + flag |= ACCOUNT_TRANSFER_AUTHORITY_ALLOWED; } if flag == 0 { diff --git a/clients/rust/marginfi-cli/src/processor/mod.rs b/clients/rust/marginfi-cli/src/processor/mod.rs index 128a44f0e..5247c3c69 100644 --- a/clients/rust/marginfi-cli/src/processor/mod.rs +++ b/clients/rust/marginfi-cli/src/processor/mod.rs @@ -209,6 +209,7 @@ pub fn group_create( profile: Profile, admin: Option, override_existing_profile_group: bool, + is_arena_group: bool, ) -> Result<()> { let rpc_client = config.mfi_program.rpc(); let admin = admin.unwrap_or_else(|| config.authority()); @@ -234,7 +235,7 @@ pub fn group_create( fee_state: find_fee_state_pda(&marginfi::id()).0, system_program: system_program::id(), }) - .args(marginfi::instruction::MarginfiGroupInitialize {}) + .args(marginfi::instruction::MarginfiGroupInitialize { is_arena_group }) .instructions()?; let recent_blockhash = rpc_client.get_latest_blockhash().unwrap(); @@ -256,7 +257,12 @@ pub fn group_create( Ok(()) } -pub fn group_configure(config: Config, profile: Profile, admin: Option) -> Result<()> { +pub fn group_configure( + config: Config, + profile: Profile, + new_admin: Pubkey, + is_arena_group: bool, +) -> Result<()> { let rpc_client = config.mfi_program.rpc(); if profile.marginfi_group.is_none() { @@ -275,7 +281,8 @@ pub fn group_configure(config: Config, profile: Profile, admin: Option) admin: config.authority(), }) .args(marginfi::instruction::MarginfiGroupConfigure { - config: GroupConfig { admin }, + new_admin, + is_arena_group, }) .instructions()?; @@ -1064,7 +1071,7 @@ pub fn edit_fee_state( Ok(()) } -pub fn config_group_fee(config: Config, profile: Profile, flag: u64) -> Result<()> { +pub fn config_group_fee(config: Config, profile: Profile, enable_program_fee: bool) -> Result<()> { let rpc_client = config.mfi_program.rpc(); let marginfi_group_pubkey = profile.marginfi_group.ok_or_else(|| { anyhow!( @@ -1083,7 +1090,7 @@ pub fn config_group_fee(config: Config, profile: Profile, flag: u64) -> Result<( global_fee_admin: config.authority(), fee_state: fee_state_pubkey, }) - .args(marginfi::instruction::ConfigGroupFee { flag }) + .args(marginfi::instruction::ConfigGroupFee { enable_program_fee }) .instructions()?; let recent_blockhash = rpc_client.get_latest_blockhash().unwrap(); diff --git a/guides/GETTING_STARTED_DEV.md b/guides/GETTING_STARTED_DEV.md index 0772936de..7909020b1 100644 --- a/guides/GETTING_STARTED_DEV.md +++ b/guides/GETTING_STARTED_DEV.md @@ -39,12 +39,20 @@ anchor build -p marginfi ./scripts/test-program.sh marginfi mainnet-beta ``` +This is much slower than the remix test command, but stable on any system. + ### Customize Your Rust testing experience: ``` ./scripts/test-program-remix.sh -p marginfi -l warn -c mainnet-beta -f mainnet-beta ``` +This will throttle your CPU and may error sporadically as a reminder to buy a better CPU if you try to do anything else (like say, compile another Rust repo) while this is running. + +Benchmarks: + +- 9700X: `Summary [ 6.302s] 238 tests run: 238 passed, 0 skipped` + ### To just one Rust test: ``` diff --git a/programs/marginfi/fuzz/src/lib.rs b/programs/marginfi/fuzz/src/lib.rs index d079e78b2..01ab89ccd 100644 --- a/programs/marginfi/fuzz/src/lib.rs +++ b/programs/marginfi/fuzz/src/lib.rs @@ -982,19 +982,26 @@ fn initialize_marginfi_group<'a>( let marginfi_group = state.new_owned_account(size_of::(), program_id, Rent::free()); - marginfi::instructions::marginfi_group::initialize_group(Context::new( - &marginfi::id(), - &mut marginfi::instructions::MarginfiGroupInitialize { - // Unchecked because we are initializing the account. - marginfi_group: AccountLoader::try_from_unchecked(&program_id, airls(&marginfi_group)) + marginfi::instructions::marginfi_group::initialize_group( + Context::new( + &marginfi::id(), + &mut marginfi::instructions::MarginfiGroupInitialize { + // Unchecked because we are initializing the account. + marginfi_group: AccountLoader::try_from_unchecked( + &program_id, + airls(&marginfi_group), + ) .unwrap(), - admin: Signer::try_from(airls(&admin)).unwrap(), - fee_state: AccountLoader::try_from_unchecked(&program_id, airls(&fee_state)).unwrap(), - system_program: Program::try_from(airls(&system_program)).unwrap(), - }, - &[], - Default::default(), - )) + admin: Signer::try_from(airls(&admin)).unwrap(), + fee_state: AccountLoader::try_from_unchecked(&program_id, airls(&fee_state)) + .unwrap(), + system_program: Program::try_from(airls(&system_program)).unwrap(), + }, + &[], + Default::default(), + ), + false, + ) .unwrap(); set_discriminator::(marginfi_group.clone()); @@ -1151,13 +1158,14 @@ mod tests { let re = RiskEngine::new(&marginfi_account, aisls(&remaining_accounts)).unwrap(); - let health = re - .get_account_health( + let (assets, liabs) = re + .get_account_health_components( marginfi::state::marginfi_account::RiskRequirementType::Maintenance, + &mut None, ) .unwrap(); - println!("Health {health}"); + println!("assets {assets} liabs: {liabs}"); } a.process_action_deposit(&AccountIdx(2), &BankIdx(1), &AssetAmount(1000), None) @@ -1211,13 +1219,14 @@ mod tests { let re = RiskEngine::new(&marginfi_account, aisls(&remaining_accounts)).unwrap(); - let health = re - .get_account_health( + let (assets, liabs) = re + .get_account_health_components( marginfi::state::marginfi_account::RiskRequirementType::Maintenance, + &mut None, ) .unwrap(); - println!("Health {health}"); + println!("assets {assets} liabs: {liabs}"); } a.process_action_deposit(&AccountIdx(2), &BankIdx(1), &AssetAmount(1000), None) diff --git a/programs/marginfi/src/errors.rs b/programs/marginfi/src/errors.rs index d04dcd035..b707619f9 100644 --- a/programs/marginfi/src/errors.rs +++ b/programs/marginfi/src/errors.rs @@ -148,6 +148,10 @@ pub enum MarginfiError { TooSevereLiquidation, #[msg("Liquidation would worsen account health")] // 6072 WorseHealthPostLiquidation, + #[msg("Arena groups can only support two banks")] // 6073 + ArenaBankLimit, + #[msg("Arena groups cannot return to non-arena status")] // 6074 + ArenaSettingCannotChange, } impl From for ProgramError { diff --git a/programs/marginfi/src/events.rs b/programs/marginfi/src/events.rs index ab63bbcbe..3132cf131 100644 --- a/programs/marginfi/src/events.rs +++ b/programs/marginfi/src/events.rs @@ -1,4 +1,4 @@ -use crate::{prelude::*, state::marginfi_group::BankConfigOpt, StakedSettingsEditConfig}; +use crate::{state::marginfi_group::BankConfigOpt, StakedSettingsEditConfig}; use anchor_lang::prelude::*; // Event headers @@ -27,7 +27,8 @@ pub struct MarginfiGroupCreateEvent { #[event] pub struct MarginfiGroupConfigureEvent { pub header: GroupEventHeader, - pub config: GroupConfig, + pub admin: Pubkey, + pub flags: u64, } #[event] diff --git a/programs/marginfi/src/instructions/marginfi_account/borrow.rs b/programs/marginfi/src/instructions/marginfi_account/borrow.rs index 1790f197b..9e8a7f609 100644 --- a/programs/marginfi/src/instructions/marginfi_account/borrow.rs +++ b/programs/marginfi/src/instructions/marginfi_account/borrow.rs @@ -6,7 +6,7 @@ use crate::{ prelude::{MarginfiError, MarginfiGroup, MarginfiResult}, state::{ health_cache::HealthCache, - marginfi_account::{BankAccountWrapper, MarginfiAccount, RiskEngine, DISABLED_FLAG}, + marginfi_account::{BankAccountWrapper, MarginfiAccount, RiskEngine, ACCOUNT_DISABLED}, marginfi_group::{Bank, BankVaultType}, }, utils::{self, validate_asset_tags}, @@ -50,7 +50,7 @@ pub fn lending_account_borrow<'info>( let program_fee_rate: I80F48 = group.fee_state_cache.program_fee_rate.into(); check!( - !marginfi_account.get_flag(DISABLED_FLAG), + !marginfi_account.get_flag(ACCOUNT_DISABLED), MarginfiError::AccountDisabled ); diff --git a/programs/marginfi/src/instructions/marginfi_account/close_balance.rs b/programs/marginfi/src/instructions/marginfi_account/close_balance.rs index 319e001b5..e2c99f3d5 100644 --- a/programs/marginfi/src/instructions/marginfi_account/close_balance.rs +++ b/programs/marginfi/src/instructions/marginfi_account/close_balance.rs @@ -4,7 +4,7 @@ use crate::{ check, prelude::*, state::{ - marginfi_account::{BankAccountWrapper, MarginfiAccount, DISABLED_FLAG}, + marginfi_account::{BankAccountWrapper, MarginfiAccount, ACCOUNT_DISABLED}, marginfi_group::Bank, }, }; @@ -21,7 +21,7 @@ pub fn lending_account_close_balance(ctx: Context) - let mut bank = bank_loader.load_mut()?; check!( - !marginfi_account.get_flag(DISABLED_FLAG), + !marginfi_account.get_flag(ACCOUNT_DISABLED), MarginfiError::AccountDisabled ); diff --git a/programs/marginfi/src/instructions/marginfi_account/deposit.rs b/programs/marginfi/src/instructions/marginfi_account/deposit.rs index 4a8a75901..7b1b86aab 100644 --- a/programs/marginfi/src/instructions/marginfi_account/deposit.rs +++ b/programs/marginfi/src/instructions/marginfi_account/deposit.rs @@ -4,7 +4,7 @@ use crate::{ math_error, prelude::*, state::{ - marginfi_account::{BankAccountWrapper, MarginfiAccount, DISABLED_FLAG}, + marginfi_account::{BankAccountWrapper, MarginfiAccount, ACCOUNT_DISABLED}, marginfi_group::Bank, }, utils::{self, validate_asset_tags}, @@ -50,7 +50,7 @@ pub fn lending_account_deposit<'info>( validate_asset_tags(&bank, &marginfi_account)?; check!( - !marginfi_account.get_flag(DISABLED_FLAG), + !marginfi_account.get_flag(ACCOUNT_DISABLED), MarginfiError::AccountDisabled ); diff --git a/programs/marginfi/src/instructions/marginfi_account/emissions.rs b/programs/marginfi/src/instructions/marginfi_account/emissions.rs index 966dde887..15236f325 100644 --- a/programs/marginfi/src/instructions/marginfi_account/emissions.rs +++ b/programs/marginfi/src/instructions/marginfi_account/emissions.rs @@ -10,7 +10,7 @@ use crate::{ debug, prelude::{MarginfiError, MarginfiResult}, state::{ - marginfi_account::{BankAccountWrapper, MarginfiAccount, DISABLED_FLAG}, + marginfi_account::{BankAccountWrapper, MarginfiAccount, ACCOUNT_DISABLED}, marginfi_group::{Bank, MarginfiGroup}, }, }; @@ -21,7 +21,7 @@ pub fn lending_account_withdraw_emissions<'info>( let mut marginfi_account = ctx.accounts.marginfi_account.load_mut()?; check!( - !marginfi_account.get_flag(DISABLED_FLAG), + !marginfi_account.get_flag(ACCOUNT_DISABLED), MarginfiError::AccountDisabled ); @@ -151,7 +151,7 @@ pub fn marginfi_account_update_emissions_destination_account<'info>( let mut marginfi_account = ctx.accounts.marginfi_account.load_mut()?; check!( - !marginfi_account.get_flag(DISABLED_FLAG), + !marginfi_account.get_flag(ACCOUNT_DISABLED), MarginfiError::AccountDisabled ); @@ -183,7 +183,7 @@ pub fn lending_account_withdraw_emissions_permissionless<'info>( let mut marginfi_account = ctx.accounts.marginfi_account.load_mut()?; check!( - !marginfi_account.get_flag(DISABLED_FLAG), + !marginfi_account.get_flag(ACCOUNT_DISABLED), MarginfiError::AccountDisabled ); diff --git a/programs/marginfi/src/instructions/marginfi_account/flashloan.rs b/programs/marginfi/src/instructions/marginfi_account/flashloan.rs index fe881db45..2dd7ffe33 100644 --- a/programs/marginfi/src/instructions/marginfi_account/flashloan.rs +++ b/programs/marginfi/src/instructions/marginfi_account/flashloan.rs @@ -1,7 +1,9 @@ use crate::{ check, prelude::*, - state::marginfi_account::{MarginfiAccount, RiskEngine, DISABLED_FLAG, IN_FLASHLOAN_FLAG}, + state::marginfi_account::{ + MarginfiAccount, RiskEngine, ACCOUNT_DISABLED, ACCOUNT_IN_FLASHLOAN, + }, }; use anchor_lang::{prelude::*, Discriminator}; use solana_program::{ @@ -20,7 +22,7 @@ pub fn lending_account_start_flashloan( )?; let mut marginfi_account = ctx.accounts.marginfi_account.load_mut()?; - marginfi_account.set_flag(IN_FLASHLOAN_FLAG); + marginfi_account.set_flag(ACCOUNT_IN_FLASHLOAN); Ok(()) } @@ -56,13 +58,7 @@ pub fn check_flashloan_can_start( sysvar_ixs: &AccountInfo, end_fl_idx: usize, ) -> MarginfiResult<()> { - // Note: FLASHLOAN_ENABLED_FLAG is now deprecated. - // Any non-disabled account can initiate a flash loan. - check!( - !marginfi_account.load()?.get_flag(DISABLED_FLAG), - MarginfiError::AccountDisabled - ); - + // Note: FLASHLOAN_ENABLED_FLAG is now deprecated, any non-disabled account can initiate a flash loan. let current_ix_idx: usize = instructions::load_current_index_checked(sysvar_ixs)?.into(); check!(current_ix_idx < end_fl_idx, MarginfiError::IllegalFlashloan); @@ -111,12 +107,12 @@ pub fn check_flashloan_can_start( let marginf_account = marginfi_account.load()?; check!( - !marginf_account.get_flag(DISABLED_FLAG), + !marginf_account.get_flag(ACCOUNT_DISABLED), MarginfiError::AccountDisabled ); check!( - !marginf_account.get_flag(IN_FLASHLOAN_FLAG), + !marginf_account.get_flag(ACCOUNT_IN_FLASHLOAN), MarginfiError::IllegalFlashloan ); @@ -134,7 +130,7 @@ pub fn lending_account_end_flashloan<'info>( let mut marginfi_account = ctx.accounts.marginfi_account.load_mut()?; - marginfi_account.unset_flag(IN_FLASHLOAN_FLAG); + marginfi_account.unset_flag(ACCOUNT_IN_FLASHLOAN); RiskEngine::check_account_init_health(&marginfi_account, ctx.remaining_accounts, &mut None)?; diff --git a/programs/marginfi/src/instructions/marginfi_account/repay.rs b/programs/marginfi/src/instructions/marginfi_account/repay.rs index b60e207fa..32f3687a8 100644 --- a/programs/marginfi/src/instructions/marginfi_account/repay.rs +++ b/programs/marginfi/src/instructions/marginfi_account/repay.rs @@ -3,7 +3,7 @@ use crate::{ events::{AccountEventHeader, LendingAccountRepayEvent}, prelude::{MarginfiError, MarginfiGroup, MarginfiResult}, state::{ - marginfi_account::{BankAccountWrapper, MarginfiAccount, DISABLED_FLAG}, + marginfi_account::{BankAccountWrapper, MarginfiAccount, ACCOUNT_DISABLED}, marginfi_group::Bank, }, utils, @@ -46,7 +46,7 @@ pub fn lending_account_repay<'info>( let mut marginfi_account = marginfi_account_loader.load_mut()?; check!( - !marginfi_account.get_flag(DISABLED_FLAG), + !marginfi_account.get_flag(ACCOUNT_DISABLED), MarginfiError::AccountDisabled ); diff --git a/programs/marginfi/src/instructions/marginfi_account/withdraw.rs b/programs/marginfi/src/instructions/marginfi_account/withdraw.rs index 511c01c01..247354deb 100644 --- a/programs/marginfi/src/instructions/marginfi_account/withdraw.rs +++ b/programs/marginfi/src/instructions/marginfi_account/withdraw.rs @@ -5,7 +5,7 @@ use crate::{ prelude::*, state::{ health_cache::HealthCache, - marginfi_account::{BankAccountWrapper, MarginfiAccount, RiskEngine, DISABLED_FLAG}, + marginfi_account::{BankAccountWrapper, MarginfiAccount, RiskEngine, ACCOUNT_DISABLED}, marginfi_group::{Bank, BankVaultType}, }, utils, @@ -44,7 +44,7 @@ pub fn lending_account_withdraw<'info>( let mut marginfi_account = marginfi_account_loader.load_mut()?; check!( - !marginfi_account.get_flag(DISABLED_FLAG), + !marginfi_account.get_flag(ACCOUNT_DISABLED), MarginfiError::AccountDisabled ); diff --git a/programs/marginfi/src/instructions/marginfi_group/add_pool.rs b/programs/marginfi/src/instructions/marginfi_group/add_pool.rs index 29792c3f7..2839e1e01 100644 --- a/programs/marginfi/src/instructions/marginfi_group/add_pool.rs +++ b/programs/marginfi/src/instructions/marginfi_group/add_pool.rs @@ -76,6 +76,12 @@ pub fn lending_pool_add_bank( log_pool_info(&bank); + let mut group = ctx.accounts.marginfi_group.load_mut()?; + group.add_bank()?; + + bank.config.validate()?; + bank.config.validate_oracle_age()?; + emit!(LendingPoolBankCreateEvent { header: GroupEventHeader { marginfi_group: ctx.accounts.marginfi_group.key(), @@ -96,6 +102,7 @@ pub fn lending_pool_add_bank( #[instruction(bank_config: BankConfigCompact)] pub struct LendingPoolAddBank<'info> { #[account( + mut, has_one = admin )] pub marginfi_group: AccountLoader<'info, MarginfiGroup>, diff --git a/programs/marginfi/src/instructions/marginfi_group/add_pool_permissionless.rs b/programs/marginfi/src/instructions/marginfi_group/add_pool_permissionless.rs index a98c2e913..e361c5ff2 100644 --- a/programs/marginfi/src/instructions/marginfi_group/add_pool_permissionless.rs +++ b/programs/marginfi/src/instructions/marginfi_group/add_pool_permissionless.rs @@ -39,7 +39,7 @@ pub fn lending_pool_add_bank_permissionless( let mut bank = bank_loader.load_init()?; let settings = ctx.accounts.staked_settings.load()?; - let group = ctx.accounts.marginfi_group.load()?; + let mut group = ctx.accounts.marginfi_group.load_mut()?; let liquidity_vault_bump = ctx.bumps.liquidity_vault; let liquidity_vault_authority_bump = ctx.bumps.liquidity_vault_authority; @@ -98,6 +98,8 @@ pub fn lending_pool_add_bank_permissionless( log_pool_info(&bank); + group.add_bank()?; + bank.config.validate()?; check!( @@ -133,6 +135,7 @@ pub fn lending_pool_add_bank_permissionless( #[derive(Accounts)] #[instruction(bank_seed: u64)] pub struct LendingPoolAddBankPermissionless<'info> { + #[account(mut)] pub marginfi_group: AccountLoader<'info, MarginfiGroup>, #[account( diff --git a/programs/marginfi/src/instructions/marginfi_group/add_pool_with_seed.rs b/programs/marginfi/src/instructions/marginfi_group/add_pool_with_seed.rs index 4f94b84df..b3bf93e38 100644 --- a/programs/marginfi/src/instructions/marginfi_group/add_pool_with_seed.rs +++ b/programs/marginfi/src/instructions/marginfi_group/add_pool_with_seed.rs @@ -76,6 +76,9 @@ pub fn lending_pool_add_bank_with_seed( log_pool_info(&bank); + let mut group = ctx.accounts.marginfi_group.load_mut()?; + group.add_bank()?; + bank.config.validate()?; bank.config.validate_oracle_age()?; @@ -99,6 +102,7 @@ pub fn lending_pool_add_bank_with_seed( #[instruction(bank_config: BankConfigCompact, bank_seed: u64)] pub struct LendingPoolAddBankWithSeed<'info> { #[account( + mut, has_one = admin )] pub marginfi_group: AccountLoader<'info, MarginfiGroup>, diff --git a/programs/marginfi/src/instructions/marginfi_group/config_group_fee.rs b/programs/marginfi/src/instructions/marginfi_group/config_group_fee.rs index 026338ada..a0570acc2 100644 --- a/programs/marginfi/src/instructions/marginfi_group/config_group_fee.rs +++ b/programs/marginfi/src/instructions/marginfi_group/config_group_fee.rs @@ -1,6 +1,5 @@ -use anchor_lang::prelude::*; - use crate::{constants::FEE_STATE_SEED, state::fee_state::FeeState, MarginfiGroup, MarginfiResult}; +use anchor_lang::prelude::*; #[derive(Accounts)] pub struct ConfigGroupFee<'info> { @@ -19,12 +18,17 @@ pub struct ConfigGroupFee<'info> { pub fee_state: AccountLoader<'info, FeeState>, } -pub fn config_group_fee(ctx: Context, flag: u64) -> MarginfiResult { +pub fn config_group_fee(ctx: Context, enable_program_fee: bool) -> MarginfiResult { let mut marginfi_group = ctx.accounts.marginfi_group.load_mut()?; + let flag_before = marginfi_group.group_flags; - marginfi_group.set_flags(flag)?; + marginfi_group.set_program_fee_enabled(enable_program_fee); - msg!("flags set to: {:?}", flag); + msg!( + "flag set to: {:?} was {:?}", + marginfi_group.group_flags, + flag_before + ); Ok(()) } diff --git a/programs/marginfi/src/instructions/marginfi_group/configure.rs b/programs/marginfi/src/instructions/marginfi_group/configure.rs index f3e4a1c5b..f45f98d0f 100644 --- a/programs/marginfi/src/instructions/marginfi_group/configure.rs +++ b/programs/marginfi/src/instructions/marginfi_group/configure.rs @@ -1,29 +1,35 @@ use crate::check; use crate::events::{GroupEventHeader, MarginfiGroupConfigureEvent}; use crate::prelude::MarginfiError; -use crate::state::marginfi_account::{ - MarginfiAccount, FLASHLOAN_ENABLED_FLAG, TRANSFER_AUTHORITY_ALLOWED_FLAG, -}; -use crate::{ - state::marginfi_group::{GroupConfig, MarginfiGroup}, - MarginfiResult, -}; +use crate::state::marginfi_account::{MarginfiAccount, ACCOUNT_TRANSFER_AUTHORITY_ALLOWED}; +use crate::{state::marginfi_group::MarginfiGroup, MarginfiResult}; use anchor_lang::prelude::*; -/// Configure margin group +/// Configure margin group. +/// +/// Note: not even the group admin can configure `PROGRAM_FEES_ENABLED`, only the program admin can +/// with `configure_group_fee` /// /// Admin only -pub fn configure(ctx: Context, config: GroupConfig) -> MarginfiResult { +pub fn configure( + ctx: Context, + new_admin: Pubkey, + is_arena_group: bool, +) -> MarginfiResult { let marginfi_group = &mut ctx.accounts.marginfi_group.load_mut()?; - marginfi_group.configure(&config)?; + marginfi_group.update_admin(new_admin); + marginfi_group.set_arena_group(is_arena_group)?; + + msg!("flags set to: {:?}", marginfi_group.group_flags); emit!(MarginfiGroupConfigureEvent { header: GroupEventHeader { marginfi_group: ctx.accounts.marginfi_group.key(), signer: Some(*ctx.accounts.admin.key) }, - config, + admin: new_admin, + flags: marginfi_group.group_flags }); Ok(()) @@ -50,7 +56,7 @@ pub struct MarginfiGroupConfigure<'info> { /// 0b1000 is a valid flag /// 0b01100 is a valid flag /// 0b0101 is not a valid flag -const CONFIGURABLE_FLAGS: u64 = FLASHLOAN_ENABLED_FLAG + TRANSFER_AUTHORITY_ALLOWED_FLAG; +const CONFIGURABLE_FLAGS: u64 = ACCOUNT_TRANSFER_AUTHORITY_ALLOWED; fn flag_can_be_set(flag: u64) -> bool { // If bitwise AND operation between flag and its bitwise NOT of CONFIGURABLE_FLAGS is 0, @@ -113,36 +119,34 @@ pub struct UnsetAccountFlag<'info> { #[cfg(test)] mod tests { use crate::state::marginfi_account::{ - DISABLED_FLAG, FLASHLOAN_ENABLED_FLAG, IN_FLASHLOAN_FLAG, TRANSFER_AUTHORITY_ALLOWED_FLAG, + ACCOUNT_DISABLED, ACCOUNT_FLAG_DEPRECATED, ACCOUNT_IN_FLASHLOAN, + ACCOUNT_TRANSFER_AUTHORITY_ALLOWED, }; #[test] - /// - /// 0b0001 is a valid flag - /// 0b0011 is a invalid flag - /// 0b0101 is a invalid flag - /// 0b1000 is a invalid flag fn test_check_flag() { - let flag1 = FLASHLOAN_ENABLED_FLAG; - let flag2 = FLASHLOAN_ENABLED_FLAG + IN_FLASHLOAN_FLAG; - let flag3 = IN_FLASHLOAN_FLAG + DISABLED_FLAG + FLASHLOAN_ENABLED_FLAG; - let flag4 = DISABLED_FLAG + IN_FLASHLOAN_FLAG; - let flag5 = FLASHLOAN_ENABLED_FLAG + TRANSFER_AUTHORITY_ALLOWED_FLAG; - let flag6 = DISABLED_FLAG + FLASHLOAN_ENABLED_FLAG + TRANSFER_AUTHORITY_ALLOWED_FLAG; - let flag7 = DISABLED_FLAG - + FLASHLOAN_ENABLED_FLAG - + IN_FLASHLOAN_FLAG - + TRANSFER_AUTHORITY_ALLOWED_FLAG; + let flag1 = ACCOUNT_FLAG_DEPRECATED; + let flag2 = ACCOUNT_FLAG_DEPRECATED + ACCOUNT_IN_FLASHLOAN; + let flag3 = ACCOUNT_IN_FLASHLOAN + ACCOUNT_DISABLED + ACCOUNT_FLAG_DEPRECATED; + let flag4 = ACCOUNT_DISABLED + ACCOUNT_IN_FLASHLOAN; + let flag5 = ACCOUNT_FLAG_DEPRECATED + ACCOUNT_TRANSFER_AUTHORITY_ALLOWED; + let flag6 = ACCOUNT_DISABLED + ACCOUNT_FLAG_DEPRECATED + ACCOUNT_TRANSFER_AUTHORITY_ALLOWED; + let flag7 = ACCOUNT_DISABLED + + ACCOUNT_FLAG_DEPRECATED + + ACCOUNT_IN_FLASHLOAN + + ACCOUNT_TRANSFER_AUTHORITY_ALLOWED; + let flag8 = ACCOUNT_TRANSFER_AUTHORITY_ALLOWED; // Malformed flags should fail + assert!(!super::flag_can_be_set(flag1)); assert!(!super::flag_can_be_set(flag2)); assert!(!super::flag_can_be_set(flag3)); assert!(!super::flag_can_be_set(flag4)); + assert!(!super::flag_can_be_set(flag5)); assert!(!super::flag_can_be_set(flag6)); assert!(!super::flag_can_be_set(flag7)); // Good flags should succeed - assert!(super::flag_can_be_set(flag1)); - assert!(super::flag_can_be_set(flag5)); + assert!(super::flag_can_be_set(flag8)); } } diff --git a/programs/marginfi/src/instructions/marginfi_group/handle_bankruptcy.rs b/programs/marginfi/src/instructions/marginfi_group/handle_bankruptcy.rs index 2a2de0d0b..58e278f56 100644 --- a/programs/marginfi/src/instructions/marginfi_group/handle_bankruptcy.rs +++ b/programs/marginfi/src/instructions/marginfi_group/handle_bankruptcy.rs @@ -9,7 +9,7 @@ use crate::{ math_error, prelude::MarginfiError, state::{ - marginfi_account::{BankAccountWrapper, MarginfiAccount, RiskEngine, DISABLED_FLAG}, + marginfi_account::{BankAccountWrapper, MarginfiAccount, RiskEngine, ACCOUNT_DISABLED}, marginfi_group::{Bank, BankVaultType, MarginfiGroup}, }, utils, MarginfiResult, @@ -154,7 +154,7 @@ pub fn lending_pool_handle_bankruptcy<'info>( )? .repay(bad_debt)?; - marginfi_account.set_flag(DISABLED_FLAG); + marginfi_account.set_flag(ACCOUNT_DISABLED); emit!(LendingPoolBankHandleBankruptcyEvent { header: AccountEventHeader { diff --git a/programs/marginfi/src/instructions/marginfi_group/initialize.rs b/programs/marginfi/src/instructions/marginfi_group/initialize.rs index 4b70804ef..c1e329004 100644 --- a/programs/marginfi/src/instructions/marginfi_group/initialize.rs +++ b/programs/marginfi/src/instructions/marginfi_group/initialize.rs @@ -4,16 +4,35 @@ use crate::state::fee_state::FeeState; use crate::{state::marginfi_group::MarginfiGroup, MarginfiResult}; use anchor_lang::prelude::*; -pub fn initialize_group(ctx: Context) -> MarginfiResult { +pub fn initialize_group( + ctx: Context, + is_arena_group: bool, +) -> MarginfiResult { let marginfi_group = &mut ctx.accounts.marginfi_group.load_init()?; marginfi_group.set_initial_configuration(ctx.accounts.admin.key()); + marginfi_group.set_arena_group(is_arena_group)?; + + msg!( + "Group admin: {:?} flags: {:?}", + marginfi_group.admin, + marginfi_group.group_flags + ); let fee_state = ctx.accounts.fee_state.load()?; marginfi_group.fee_state_cache.global_fee_wallet = fee_state.global_fee_wallet; marginfi_group.fee_state_cache.program_fee_fixed = fee_state.program_fee_fixed; marginfi_group.fee_state_cache.program_fee_rate = fee_state.program_fee_rate; + marginfi_group.banks = 0; + + let cache = marginfi_group.fee_state_cache; + msg!( + "global fee wallet: {:?}, fixed fee: {:?}, program free {:?}", + cache.global_fee_wallet, + cache.program_fee_fixed, + cache.program_fee_rate + ); emit!(MarginfiGroupCreateEvent { header: GroupEventHeader { diff --git a/programs/marginfi/src/lib.rs b/programs/marginfi/src/lib.rs index de9485a80..2b0b3cef7 100644 --- a/programs/marginfi/src/lib.rs +++ b/programs/marginfi/src/lib.rs @@ -29,15 +29,19 @@ cfg_if::cfg_if! { pub mod marginfi { use super::*; - pub fn marginfi_group_initialize(ctx: Context) -> MarginfiResult { - marginfi_group::initialize_group(ctx) + pub fn marginfi_group_initialize( + ctx: Context, + is_arena_group: bool, + ) -> MarginfiResult { + marginfi_group::initialize_group(ctx, is_arena_group) } pub fn marginfi_group_configure( ctx: Context, - config: GroupConfig, + new_admin: Pubkey, + is_arena_group: bool, ) -> MarginfiResult { - marginfi_group::configure(ctx, config) + marginfi_group::configure(ctx, new_admin, is_arena_group) } pub fn lending_pool_add_bank( @@ -302,8 +306,11 @@ pub mod marginfi { /// (global fee admin only) Enable or disable program fees for any group. Does not require the /// group admin to sign: the global fee state admin can turn program fees on or off for any /// group - pub fn config_group_fee(ctx: Context, flag: u64) -> MarginfiResult { - marginfi_group::config_group_fee(ctx, flag) + pub fn config_group_fee( + ctx: Context, + enable_program_fee: bool, + ) -> MarginfiResult { + marginfi_group::config_group_fee(ctx, enable_program_fee) } /// (group admin only) Init the Staked Settings account, which is used to create staked diff --git a/programs/marginfi/src/prelude.rs b/programs/marginfi/src/prelude.rs index dbd09e44b..f80d1ba35 100644 --- a/programs/marginfi/src/prelude.rs +++ b/programs/marginfi/src/prelude.rs @@ -2,7 +2,4 @@ use anchor_lang::prelude::*; pub type MarginfiResult = Result; -pub use crate::{ - errors::MarginfiError, - state::marginfi_group::{GroupConfig, MarginfiGroup}, -}; +pub use crate::{errors::MarginfiError, state::marginfi_group::MarginfiGroup}; diff --git a/programs/marginfi/src/state/health_cache.rs b/programs/marginfi/src/state/health_cache.rs index e25f200e6..6057b95d5 100644 --- a/programs/marginfi/src/state/health_cache.rs +++ b/programs/marginfi/src/state/health_cache.rs @@ -4,6 +4,9 @@ use anchor_lang::prelude::*; use bytemuck::{Pod, Zeroable}; use type_layout::TypeLayout; +pub const HEALTHY: u64 = 1; +pub const ENGINE_OK: u64 = 2; + assert_struct_size!(HealthCache, 304); assert_struct_align!(HealthCache, 8); #[repr(C)] @@ -37,27 +40,27 @@ pub struct HealthCache { impl HealthCache { /// True if account is healthy (cannot be liquidated) pub fn is_healthy(&self) -> bool { - self.flags & 1 != 0 + self.flags & HEALTHY != 0 } pub fn set_healthy(&mut self, healthy: bool) { if healthy { - self.flags |= 1; + self.flags |= HEALTHY; } else { - self.flags &= !1; + self.flags &= !HEALTHY; } } /// True if the engine did not error during the last health pulse. pub fn is_engine_ok(&self) -> bool { - self.flags & 2 != 0 + self.flags & ENGINE_OK != 0 } pub fn set_engine_ok(&mut self, ok: bool) { if ok { - self.flags |= 2; + self.flags |= ENGINE_OK; } else { - self.flags &= !2; + self.flags &= !ENGINE_OK; } } } diff --git a/programs/marginfi/src/state/marginfi_account.rs b/programs/marginfi/src/state/marginfi_account.rs index 3f547b092..3ef0ed96d 100644 --- a/programs/marginfi/src/state/marginfi_account.rs +++ b/programs/marginfi/src/state/marginfi_account.rs @@ -33,15 +33,17 @@ pub struct MarginfiAccount { pub group: Pubkey, // 32 pub authority: Pubkey, // 32 pub lending_account: LendingAccount, // 1728 - /// The flags that indicate the state of the account. - /// This is u64 bitfield, where each bit represents a flag. + /// The flags that indicate the state of the account. This is u64 bitfield, where each bit + /// represents a flag. /// /// Flags:MarginfiAccount - /// - DISABLED_FLAG = 1 << 0 = 1 - This flag indicates that the account is disabled, - /// and no further actions can be taken on it. - /// - IN_FLASHLOAN_FLAG (1 << 1) - /// - FLASHLOAN_ENABLED_FLAG (1 << 2) - /// - TRANSFER_AUTHORITY_ALLOWED_FLAG (1 << 3) + /// - 1: `ACCOUNT_DISABLED` - Indicates that the account is disabled and no further actions can + /// be taken on it. + /// - 2: `ACCOUNT_IN_FLASHLOAN` - Only set when an account is within a flash loan, e.g. when + /// start_flashloan is called, then unset when the flashloan ends. + /// - 4: `ACCOUNT_FLAG_DEPRECATED` - Deprecated, available for future use + /// - 8: `ACCOUNT_TRANSFER_AUTHORITY_ALLOWED` - the admin has flagged with account to be moved, + /// original owner can now call `set_account_transfer_authority` pub account_flags: u64, // 8 /// Set with `update_emissions_destination_account`. Emissions rewards can be withdrawn to the /// cannonical ATA of this wallet without the user's input (withdraw_emissions_permissionless). @@ -52,10 +54,10 @@ pub struct MarginfiAccount { pub _padding0: [u64; 21], } -pub const DISABLED_FLAG: u64 = 1 << 0; -pub const IN_FLASHLOAN_FLAG: u64 = 1 << 1; -pub const FLASHLOAN_ENABLED_FLAG: u64 = 1 << 2; -pub const TRANSFER_AUTHORITY_ALLOWED_FLAG: u64 = 1 << 3; +pub const ACCOUNT_DISABLED: u64 = 1 << 0; +pub const ACCOUNT_IN_FLASHLOAN: u64 = 1 << 1; +pub const ACCOUNT_FLAG_DEPRECATED: u64 = 1 << 2; +pub const ACCOUNT_TRANSFER_AUTHORITY_ALLOWED: u64 = 1 << 3; /// 4 for `ASSET_TAG_STAKED` (bank, oracle, lst mint, lst pool), 2 for all others (bank, oracle) pub fn get_remaining_accounts_per_bank(bank: &Bank) -> MarginfiResult { @@ -116,7 +118,7 @@ impl MarginfiAccount { pub fn set_new_account_authority_checked(&mut self, new_authority: Pubkey) -> MarginfiResult { // check if new account authority flag is set - if !self.get_flag(TRANSFER_AUTHORITY_ALLOWED_FLAG) || self.get_flag(DISABLED_FLAG) { + if !self.get_flag(ACCOUNT_TRANSFER_AUTHORITY_ALLOWED) || self.get_flag(ACCOUNT_DISABLED) { return Err(MarginfiError::IllegalAccountAuthorityTransfer.into()); } @@ -125,7 +127,7 @@ impl MarginfiAccount { self.authority = new_authority; // unset flag after updating the account authority - self.unset_flag(TRANSFER_AUTHORITY_ALLOWED_FLAG); + self.unset_flag(ACCOUNT_TRANSFER_AUTHORITY_ALLOWED); msg!( "Transferred account authority from {:?} to {:?} in group {:?}", @@ -137,7 +139,7 @@ impl MarginfiAccount { } pub fn can_be_closed(&self) -> bool { - let is_disabled = self.get_flag(DISABLED_FLAG); + let is_disabled = self.get_flag(ACCOUNT_DISABLED); let only_has_empty_balances = self .lending_account .balances @@ -295,7 +297,6 @@ impl<'info> BankAccountWithPriceFeed<'_, 'info> { match side { BalanceSide::Assets => { - // TODO: health_cache.prices[some_index] = the index of this in the bank_accounts_with_price Vec let (value, price) = self.calc_weighted_asset_value(requirement_type, &bank)?; Ok((value, I80F48::ZERO, price)) @@ -498,7 +499,7 @@ impl<'info> RiskEngine<'_, 'info> { remaining_ais: &'info [AccountInfo<'info>], ) -> MarginfiResult> { check!( - !marginfi_account.get_flag(IN_FLASHLOAN_FLAG), + !marginfi_account.get_flag(ACCOUNT_IN_FLASHLOAN), MarginfiError::AccountInFlashloan ); @@ -522,7 +523,7 @@ impl<'info> RiskEngine<'_, 'info> { /// Checks account is healthy after performing actions that increase risk (removing liquidity). /// - /// `IN_FLASHLOAN_FLAG` behavior. + /// `ACCOUNT_IN_FLASHLOAN` behavior. /// - Health check is skipped. /// - `remaining_ais` can be an empty vec. pub fn check_account_init_health<'a>( @@ -530,7 +531,7 @@ impl<'info> RiskEngine<'_, 'info> { remaining_ais: &'info [AccountInfo<'info>], health_cache: &mut Option<&mut HealthCache>, ) -> MarginfiResult<()> { - if marginfi_account.get_flag(IN_FLASHLOAN_FLAG) { + if marginfi_account.get_flag(ACCOUNT_IN_FLASHLOAN) { // Note: The health cache is not applicable to flashloans return Ok(()); } @@ -624,7 +625,7 @@ impl<'info> RiskEngine<'_, 'info> { bank_pk: &Pubkey, ) -> MarginfiResult { check!( - !self.marginfi_account.get_flag(IN_FLASHLOAN_FLAG), + !self.marginfi_account.get_flag(ACCOUNT_IN_FLASHLOAN), MarginfiError::AccountInFlashloan ); @@ -680,7 +681,7 @@ impl<'info> RiskEngine<'_, 'info> { pre_liquidation_health: I80F48, ) -> MarginfiResult { check!( - !self.marginfi_account.get_flag(IN_FLASHLOAN_FLAG), + !self.marginfi_account.get_flag(ACCOUNT_IN_FLASHLOAN), MarginfiError::AccountInFlashloan ); @@ -732,7 +733,7 @@ impl<'info> RiskEngine<'_, 'info> { self.get_account_health_components(RiskRequirementType::Equity, &mut None)?; check!( - !self.marginfi_account.get_flag(IN_FLASHLOAN_FLAG), + !self.marginfi_account.get_flag(ACCOUNT_IN_FLASHLOAN), MarginfiError::AccountInFlashloan ); @@ -1523,12 +1524,12 @@ mod test { }; 16], _padding: [0; 8], }, - account_flags: TRANSFER_AUTHORITY_ALLOWED_FLAG, + account_flags: ACCOUNT_TRANSFER_AUTHORITY_ALLOWED, health_cache: HealthCache::zeroed(), _padding0: [0; 21], }; - assert!(acc.get_flag(TRANSFER_AUTHORITY_ALLOWED_FLAG)); + assert!(acc.get_flag(ACCOUNT_TRANSFER_AUTHORITY_ALLOWED)); match acc.set_new_account_authority_checked(new_authority.into()) { Ok(_) => (), diff --git a/programs/marginfi/src/state/marginfi_group.rs b/programs/marginfi/src/state/marginfi_group.rs index 341f4f440..1f283fc14 100644 --- a/programs/marginfi/src/state/marginfi_group.rs +++ b/programs/marginfi/src/state/marginfi_group.rs @@ -38,20 +38,32 @@ use std::{ }; use type_layout::TypeLayout; +pub const PROGRAM_FEES_ENABLED: u64 = 1; +pub const ARENA_GROUP: u64 = 2; + assert_struct_size!(MarginfiGroup, 1056); #[account(zero_copy)] #[derive(Default, Debug, PartialEq, Eq, TypeLayout)] pub struct MarginfiGroup { pub admin: Pubkey, /// Bitmask for group settings flags. - /// * Bit 0: If set, program-level fees are enabled. + /// * 0: `PROGRAM_FEES_ENABLED` If set, program-level fees are enabled. + /// * 1: `ARENA_GROUP` If set, this is an arena group, which can only have two banks /// * Bits 1-63: Reserved for future use. pub group_flags: u64, /// Caches information from the global `FeeState` so the FeeState can be omitted on certain ixes pub fee_state_cache: FeeStateCache, - pub _padding_0: [[u64; 2]; 27], + // For groups initialized in versions 0.1.2 or greater (roughly the public launch of Arena), + // this is an authoritative count of the number of banks under this group. For groups + // initialized prior to 0.1.2, a non-authoritative count of the number of banks initiated after + // 0.1.2 went live. + pub banks: u16, + pub pad0: [u8; 6], + + pub _padding_0: [[u64; 2]; 26], pub _padding_1: [[u64; 2]; 32], pub _padding_3: u64, + pub _padding_4: u64, } #[derive( @@ -65,61 +77,79 @@ pub struct FeeStateCache { } impl MarginfiGroup { - const PROGRAM_FEES_ENABLED: u64 = 1; - - /// Bits in use for flag settings. - const ALLOWED_FLAGS: u64 = Self::PROGRAM_FEES_ENABLED; - // To add: const ALLOWED_FLAGS: u64 = PROGRAM_FEES_ENABLED | ANOTHER_FEATURE_BIT; - - /// Configure the group parameters. - /// This function validates config values so the group remains in a valid state. - /// Any modification of group config should happen through this function. - pub fn configure(&mut self, config: &GroupConfig) -> MarginfiResult { - set_if_some!(self.admin, config.admin); - - Ok(()) + pub fn update_admin(&mut self, new_admin: Pubkey) { + if self.admin == new_admin { + msg!("No change to admin: {:?}", new_admin); + // do nothing + } else { + msg!("Set admin from {:?} to {:?}", self.admin, new_admin); + self.admin = new_admin; + } } /// Set the group parameters when initializing a group. /// This should be called only when the group is first initialized. - /// Both margin requirements are initially set to 100% and should be configured before use. #[allow(clippy::too_many_arguments)] pub fn set_initial_configuration(&mut self, admin_pk: Pubkey) { self.admin = admin_pk; - self.group_flags = Self::PROGRAM_FEES_ENABLED; + self.set_program_fee_enabled(true); } pub fn get_group_bank_config(&self) -> GroupBankConfig { GroupBankConfig { - program_fees: self.group_flags == Self::PROGRAM_FEES_ENABLED, + program_fees: self.group_flags == PROGRAM_FEES_ENABLED, } } - /// Validates that only allowed flags are being set. - pub fn validate_flags(flag: u64) -> MarginfiResult { - // Note: 0xnnnn & 0x1110, is nonzero for 0x1000 & 0x1110 - let flag_ok = flag & !Self::ALLOWED_FLAGS == 0; - check!(flag_ok, MarginfiError::IllegalFlag); - - Ok(()) + pub fn set_program_fee_enabled(&mut self, fee_enabled: bool) { + if fee_enabled { + self.group_flags |= PROGRAM_FEES_ENABLED; + } else { + self.group_flags &= !PROGRAM_FEES_ENABLED; + } } - /// Sets flag and errors if a disallowed flag is set - pub fn set_flags(&mut self, flag: u64) -> MarginfiResult { - Self::validate_flags(flag)?; - self.group_flags = flag; + /// Set the `ARENA_GROUP` if `is_arena` is true. If trying to set as arena and the group already + /// has more than two banks, fails. If trying to set an arena bank as non-arena, fails. + pub fn set_arena_group(&mut self, is_arena: bool) -> MarginfiResult { + // If enabling arena mode, ensure the group doesn't already have more than two banks. + if is_arena && self.banks > 2 { + return err!(MarginfiError::ArenaBankLimit); + } + + // If the group is currently marked as arena, disallow switching it back to non-arena. + if self.is_arena_group() && !is_arena { + return err!(MarginfiError::ArenaSettingCannotChange); + } + + if is_arena { + self.group_flags |= ARENA_GROUP; + } else { + self.group_flags &= !ARENA_GROUP; + } Ok(()) } /// True if program fees are enabled pub fn program_fees_enabled(&self) -> bool { - (self.group_flags & Self::PROGRAM_FEES_ENABLED) != 0 + (self.group_flags & PROGRAM_FEES_ENABLED) != 0 + } + + /// True if this is an arena group + pub fn is_arena_group(&self) -> bool { + (self.group_flags & ARENA_GROUP) != 0 } -} -#[derive(AnchorSerialize, AnchorDeserialize, Default, Debug, Clone, TypeLayout)] -pub struct GroupConfig { - pub admin: Option, + // Increment the bank count by 1. If this is an arena group, which only supports two banks, + // errors if trying to add a third bank. If you managed to create 16,000 banks, congrats, does + // nothing. + pub fn add_bank(&mut self) -> MarginfiResult { + if self.is_arena_group() && self.banks >= 2 { + return err!(MarginfiError::ArenaBankLimit); + } + self.banks = self.banks.saturating_add(1); + Ok(()) + } } #[repr(C)] diff --git a/programs/marginfi/tests/admin_actions/account_transfer.rs b/programs/marginfi/tests/admin_actions/account_transfer.rs index 063563a9f..c802298df 100644 --- a/programs/marginfi/tests/admin_actions/account_transfer.rs +++ b/programs/marginfi/tests/admin_actions/account_transfer.rs @@ -1,5 +1,7 @@ use fixtures::{assert_custom_error, test::TestFixture}; -use marginfi::{errors::MarginfiError, state::marginfi_account::TRANSFER_AUTHORITY_ALLOWED_FLAG}; +use marginfi::{ + errors::MarginfiError, state::marginfi_account::ACCOUNT_TRANSFER_AUTHORITY_ALLOWED, +}; use solana_program_test::tokio; use solana_sdk::{signature::Keypair, signer::Signer}; @@ -31,13 +33,13 @@ async fn marginfi_account_authority_transfer_no_flag_set() -> anyhow::Result<()> // set the flag on the account marginfi_account - .try_set_flag(TRANSFER_AUTHORITY_ALLOWED_FLAG) + .try_set_flag(ACCOUNT_TRANSFER_AUTHORITY_ALLOWED) .await .unwrap(); // Check transfer authority flag let account = marginfi_account.load().await; - assert!(account.get_flag(TRANSFER_AUTHORITY_ALLOWED_FLAG)); + assert!(account.get_flag(ACCOUNT_TRANSFER_AUTHORITY_ALLOWED)); let new_authority_2 = Keypair::new().pubkey(); let res = marginfi_account @@ -60,13 +62,20 @@ async fn marginfi_account_authority_transfer_not_account_owner() -> anyhow::Resu let new_authority = Keypair::new().pubkey(); let signer = Keypair::new(); - let res = marginfi_account - .try_transfer_account_authority(new_authority, Some(signer)) + let tx = marginfi_account + .get_tx_transfer_account_authority(new_authority, Some(signer)) .await; + // Note: Sending this tx takes a very long time (longer than all the other tests combined) + // because for some reason it takes longer for a signature verification fail to return than it + // does for other errors. We simulate instead here for testing SPEEEEEED + let mut ctx = test_f.context.borrow_mut(); + let res = ctx.banks_client.simulate_transaction(tx).await; + let is_err = res.unwrap().result.unwrap().is_err(); + // Assert the response is an error due to fact that a non-owner of the // acount attempted to initialize this account transfer - assert!(res.is_err()); + assert!(is_err); Ok(()) } diff --git a/programs/marginfi/tests/admin_actions/bankruptcy.rs b/programs/marginfi/tests/admin_actions/bankruptcy.rs index 66261082c..4a8cc91b2 100644 --- a/programs/marginfi/tests/admin_actions/bankruptcy.rs +++ b/programs/marginfi/tests/admin_actions/bankruptcy.rs @@ -5,7 +5,7 @@ use fixed::types::I80F48; use fixed_macro::types::I80F48; use fixtures::{assert_custom_error, assert_eq_noise, native, prelude::*}; use marginfi::{ - prelude::{GroupConfig, MarginfiError}, + prelude::MarginfiError, state::marginfi_group::{BankConfig, BankVaultType}, }; use pretty_assertions::assert_eq; @@ -879,7 +879,6 @@ async fn marginfi_group_handle_bankruptcy_success_not_insured_3_depositors() -> }), }, ], - group_config: Some(GroupConfig { admin: None }), protocol_fees: false, })) .await; diff --git a/programs/marginfi/tests/admin_actions/bankruptcy_auth.rs b/programs/marginfi/tests/admin_actions/bankruptcy_auth.rs index 2701e28d1..24d3da9e1 100644 --- a/programs/marginfi/tests/admin_actions/bankruptcy_auth.rs +++ b/programs/marginfi/tests/admin_actions/bankruptcy_auth.rs @@ -6,8 +6,8 @@ use fixtures::{ use marginfi::{ errors::MarginfiError, state::{ - marginfi_account::DISABLED_FLAG, - marginfi_group::{BankConfig, BankConfigOpt, BankVaultType, GroupConfig}, + marginfi_account::ACCOUNT_DISABLED, + marginfi_group::{BankConfig, BankConfigOpt, BankVaultType}, }, }; use solana_program_test::tokio; @@ -16,7 +16,6 @@ use solana_sdk::pubkey::Pubkey; #[tokio::test] async fn marginfi_group_handle_bankruptcy_unauthorized() -> anyhow::Result<()> { let mut test_f = TestFixture::new(Some(TestSettings { - group_config: Some(GroupConfig { admin: None }), banks: vec![ TestBankSetting { mint: BankMint::Usdc, @@ -92,9 +91,7 @@ async fn marginfi_group_handle_bankruptcy_unauthorized() -> anyhow::Result<()> { test_f .marginfi_group - .try_update(GroupConfig { - admin: Some(Pubkey::new_unique()), - }) + .try_update(Pubkey::new_unique(), false) .await?; let bank = test_f.get_bank(&BankMint::Usdc); @@ -113,7 +110,6 @@ async fn marginfi_group_handle_bankruptcy_unauthorized() -> anyhow::Result<()> { #[tokio::test] async fn marginfi_group_handle_bankruptcy_perimssionless() -> anyhow::Result<()> { let mut test_f = TestFixture::new(Some(TestSettings { - group_config: Some(GroupConfig { admin: None }), banks: vec![ TestBankSetting { mint: BankMint::Usdc, @@ -200,9 +196,7 @@ async fn marginfi_group_handle_bankruptcy_perimssionless() -> anyhow::Result<()> test_f .marginfi_group - .try_update(GroupConfig { - admin: Some(Pubkey::new_unique()), - }) + .try_update(Pubkey::new_unique(), false) .await?; let res = test_f @@ -214,7 +208,7 @@ async fn marginfi_group_handle_bankruptcy_perimssionless() -> anyhow::Result<()> // Check borrower account is disabled and shares are let borrower_marginfi_account = borrower_account.load().await; - assert!(borrower_marginfi_account.get_flag(DISABLED_FLAG)); + assert!(borrower_marginfi_account.get_flag(ACCOUNT_DISABLED)); assert_eq!( borrower_marginfi_account.lending_account.balances[1].liability_shares, I80F48!(0.0).into() diff --git a/programs/marginfi/tests/admin_actions/create_marginfi_group.rs b/programs/marginfi/tests/admin_actions/create_marginfi_group.rs index efcd49b7f..13db1b55b 100644 --- a/programs/marginfi/tests/admin_actions/create_marginfi_group.rs +++ b/programs/marginfi/tests/admin_actions/create_marginfi_group.rs @@ -25,7 +25,10 @@ async fn marginfi_group_create_success() -> anyhow::Result<()> { let init_marginfi_group_ix = Instruction { program_id: marginfi::id(), accounts: accounts.to_account_metas(Some(true)), - data: marginfi::instruction::MarginfiGroupInitialize {}.data(), + data: marginfi::instruction::MarginfiGroupInitialize { + is_arena_group: false, + } + .data(), }; let tx = Transaction::new_signed_with_payer( &[init_marginfi_group_ix], @@ -49,6 +52,10 @@ async fn marginfi_group_create_success() -> anyhow::Result<()> { // Check basic properties assert_eq!(marginfi_group.admin, test_f.payer()); + // Program fees are always enabled by default (Note that mostly elsewhere in the test fixture, + // we send a config to disable them, to simplify testing) + assert_eq!(marginfi_group.program_fees_enabled(), true); + assert_eq!(marginfi_group.is_arena_group(), false); Ok(()) } diff --git a/programs/marginfi/tests/admin_actions/interest_accrual.rs b/programs/marginfi/tests/admin_actions/interest_accrual.rs index 4bcd9b243..2892d0d18 100644 --- a/programs/marginfi/tests/admin_actions/interest_accrual.rs +++ b/programs/marginfi/tests/admin_actions/interest_accrual.rs @@ -3,17 +3,13 @@ use anchor_spl::associated_token::get_associated_token_address_with_program_id; use fixed::types::I80F48; use fixed_macro::types::I80F48; use fixtures::{assert_eq_noise, native, prelude::*}; -use marginfi::{ - prelude::GroupConfig, - state::marginfi_group::{Bank, BankConfig, BankVaultType, InterestRateConfig}, -}; +use marginfi::state::marginfi_group::{Bank, BankConfig, BankVaultType, InterestRateConfig}; use pretty_assertions::assert_eq; use solana_program_test::*; #[tokio::test] async fn marginfi_group_accrue_interest_rates_success_1() -> anyhow::Result<()> { let test_f = TestFixture::new(Some(TestSettings { - group_config: Some(GroupConfig { admin: None }), banks: vec![ TestBankSetting { mint: BankMint::Usdc, @@ -120,7 +116,6 @@ async fn marginfi_group_accrue_interest_rates_success_2() -> anyhow::Result<()> }), }, ], - group_config: Some(GroupConfig { admin: None }), protocol_fees: false, })) .await; diff --git a/programs/marginfi/tests/admin_actions/setup_bank.rs b/programs/marginfi/tests/admin_actions/setup_bank.rs index 11632a382..b985519f3 100644 --- a/programs/marginfi/tests/admin_actions/setup_bank.rs +++ b/programs/marginfi/tests/admin_actions/setup_bank.rs @@ -422,3 +422,113 @@ async fn configure_bank_success(bank_mint: BankMint) -> anyhow::Result<()> { Ok(()) } + +#[tokio::test] +async fn add_too_many_arena_banks() -> anyhow::Result<()> { + let test_f = TestFixture::new(None).await; + let group_before = test_f.marginfi_group.load().await; + + let res = test_f + .marginfi_group + .try_update(group_before.admin, true) + .await; + assert!(res.is_ok()); + let group_after = test_f.marginfi_group.load().await; + assert_eq!(group_after.is_arena_group(), true); + + // The first two banks/mints, which will succeed + let mints = vec![ + ( + MintFixture::new(test_f.context.clone(), None, None).await, + *DEFAULT_USDC_TEST_BANK_CONFIG, + ), + ( + MintFixture::new_token_22( + test_f.context.clone(), + None, + None, + &[SupportedExtension::TransferFee], + ) + .await, + *DEFAULT_T22_WITH_FEE_TEST_BANK_CONFIG, + ), + ]; + + for (mint_f, bank_config) in mints { + let res = test_f + .marginfi_group + .try_lending_pool_add_bank(&mint_f, bank_config) + .await; + assert!(res.is_ok()); + } + + // Adding a third bank fails + let another_mint = + MintFixture::new_from_file(&test_f.context.clone(), "src/fixtures/pyUSD.json"); + let another_config = *DEFAULT_PYUSD_TEST_BANK_CONFIG; + + let res = test_f + .marginfi_group + .try_lending_pool_add_bank(&another_mint, another_config) + .await; + + assert!(res.is_err()); + assert_custom_error!(res.unwrap_err(), MarginfiError::ArenaBankLimit); + + // Arena banks cannot be restored to non-arena + + let res = test_f + .marginfi_group + .try_update(group_before.admin, false) + .await; + assert!(res.is_err()); + assert_custom_error!(res.unwrap_err(), MarginfiError::ArenaSettingCannotChange); + + Ok(()) +} + +#[tokio::test] +async fn config_group_as_arena_too_many_banks() -> anyhow::Result<()> { + let test_f = TestFixture::new(None).await; + + // Add three banks + let mints = vec![ + ( + MintFixture::new(test_f.context.clone(), None, None).await, + *DEFAULT_USDC_TEST_BANK_CONFIG, + ), + ( + MintFixture::new_token_22( + test_f.context.clone(), + None, + None, + &[SupportedExtension::TransferFee], + ) + .await, + *DEFAULT_T22_WITH_FEE_TEST_BANK_CONFIG, + ), + ( + MintFixture::new_from_file(&test_f.context.clone(), "src/fixtures/pyUSD.json"), + *DEFAULT_PYUSD_TEST_BANK_CONFIG, + ), + ]; + + for (mint_f, bank_config) in mints { + let res = test_f + .marginfi_group + .try_lending_pool_add_bank(&mint_f, bank_config) + .await; + assert!(res.is_ok()); + } + + let group_before = test_f.marginfi_group.load().await; + let res = test_f + .marginfi_group + .try_update(group_before.admin, true) + .await; + + assert!(res.is_err()); + assert_custom_error!(res.unwrap_err(), MarginfiError::ArenaBankLimit); + + Ok(()) +} diff --git a/programs/marginfi/tests/admin_actions/withdraw_fees.rs b/programs/marginfi/tests/admin_actions/withdraw_fees.rs index be7e26e8b..1caf3531b 100644 --- a/programs/marginfi/tests/admin_actions/withdraw_fees.rs +++ b/programs/marginfi/tests/admin_actions/withdraw_fees.rs @@ -6,7 +6,6 @@ use fixtures::{ assert_anchor_error, test::{BankMint, TestFixture, TestSettings}, }; -use marginfi::state::marginfi_group::GroupConfig; use solana_program_test::tokio; use solana_sdk::pubkey::Pubkey; use test_case::test_case; @@ -100,9 +99,7 @@ async fn marginfi_group_withdraw_fees_and_insurance_fund_as_non_admin_failure( // Update the admin of the marginfi group test_f .marginfi_group - .try_update(GroupConfig { - admin: Some(Pubkey::new_unique()), - }) + .try_update(Pubkey::new_unique(), false) .await?; // Mint `insurance_vault_balance` USDC to the insurance vault diff --git a/programs/marginfi/tests/misc/operational_state.rs b/programs/marginfi/tests/misc/operational_state.rs index 34925e62d..adf458815 100644 --- a/programs/marginfi/tests/misc/operational_state.rs +++ b/programs/marginfi/tests/misc/operational_state.rs @@ -1,7 +1,7 @@ use fixed_macro::types::I80F48; use fixtures::{assert_custom_error, prelude::*}; use marginfi::{ - prelude::{GroupConfig, MarginfiError}, + prelude::MarginfiError, state::marginfi_group::{BankConfig, BankConfigOpt, BankOperationalState}, }; use pretty_assertions::assert_eq; @@ -14,7 +14,6 @@ async fn marginfi_group_bank_paused_should_error() -> anyhow::Result<()> { mint: BankMint::Usdc, config: None, }], - group_config: Some(GroupConfig { admin: None }), protocol_fees: false, })) .await; @@ -54,7 +53,6 @@ async fn marginfi_group_bank_reduce_only_withdraw_success() -> anyhow::Result<() mint: BankMint::Usdc, config: None, }], - group_config: Some(GroupConfig { admin: None }), protocol_fees: false, })) .await; @@ -105,7 +103,6 @@ async fn marginfi_group_bank_reduce_only_deposit_success() -> anyhow::Result<()> }), }, ], - group_config: Some(GroupConfig { admin: None }), protocol_fees: false, })) .await; @@ -168,7 +165,6 @@ async fn marginfi_group_bank_reduce_only_borrow_failure() -> anyhow::Result<()> }), }, ], - group_config: Some(GroupConfig { admin: None }), protocol_fees: false, })) .await; @@ -219,7 +215,6 @@ async fn marginfi_group_bank_reduce_only_deposit_failure() -> anyhow::Result<()> mint: BankMint::Usdc, config: None, }], - group_config: Some(GroupConfig { admin: None }), protocol_fees: false, })) .await; diff --git a/programs/marginfi/tests/misc/pyth_push.rs b/programs/marginfi/tests/misc/pyth_push.rs index 4099e2079..3e7172944 100644 --- a/programs/marginfi/tests/misc/pyth_push.rs +++ b/programs/marginfi/tests/misc/pyth_push.rs @@ -10,7 +10,7 @@ use fixtures::{ }; use marginfi::{ errors::MarginfiError, - state::marginfi_group::{Bank, BankConfig, BankConfigOpt, BankVaultType, GroupConfig}, + state::marginfi_group::{Bank, BankConfig, BankConfigOpt, BankVaultType}, }; use solana_program_test::tokio; @@ -27,7 +27,6 @@ async fn pyth_push_fullv_borrow() -> anyhow::Result<()> { config: Some(*DEFAULT_SOL_TEST_PYTH_PUSH_FULLV_BANK_CONFIG), }, ], - group_config: Some(GroupConfig { admin: None }), protocol_fees: false, })) .await; @@ -96,7 +95,6 @@ async fn pyth_push_partv_borrow() -> anyhow::Result<()> { config: Some(*DEFAULT_SOL_TEST_PYTH_PUSH_PARTV_BANK_CONFIG), }, ], - group_config: Some(GroupConfig { admin: None }), protocol_fees: false, })) .await; @@ -164,7 +162,6 @@ async fn pyth_push_fullv_liquidate() -> anyhow::Result<()> { }), }, ], - group_config: Some(GroupConfig { admin: None }), protocol_fees: false, })) .await; diff --git a/programs/marginfi/tests/misc/real_oracle_data.rs b/programs/marginfi/tests/misc/real_oracle_data.rs index 4cb7be50a..0c50b870b 100644 --- a/programs/marginfi/tests/misc/real_oracle_data.rs +++ b/programs/marginfi/tests/misc/real_oracle_data.rs @@ -6,7 +6,7 @@ use fixtures::{ DEFAULT_USDC_TEST_REAL_BANK_CONFIG, }, }; -use marginfi::{errors::MarginfiError, state::marginfi_group::GroupConfig}; +use marginfi::errors::MarginfiError; use solana_program_test::tokio; #[tokio::test] @@ -22,7 +22,6 @@ async fn real_oracle_marginfi_account_borrow_success() -> anyhow::Result<()> { config: Some(*DEFAULT_SOL_TEST_REAL_BANK_CONFIG), }, ], - group_config: Some(GroupConfig { admin: None }), protocol_fees: false, })) .await; @@ -97,7 +96,6 @@ async fn real_oracle_pyth_push_marginfi_account_borrow_success() -> anyhow::Resu config: Some(*DEFAULT_PYTH_PUSH_SOL_TEST_REAL_BANK_CONFIG), }, ], - group_config: Some(GroupConfig { admin: None }), protocol_fees: false, })) .await; diff --git a/programs/marginfi/tests/misc/risk_engine_flexible_oracle_checks.rs b/programs/marginfi/tests/misc/risk_engine_flexible_oracle_checks.rs index c99023ddd..21066ed3b 100644 --- a/programs/marginfi/tests/misc/risk_engine_flexible_oracle_checks.rs +++ b/programs/marginfi/tests/misc/risk_engine_flexible_oracle_checks.rs @@ -8,7 +8,7 @@ use fixtures::{ }; use marginfi::{ prelude::MarginfiError, - state::marginfi_group::{BankConfig, BankConfigOpt, BankVaultType, GroupConfig}, + state::marginfi_group::{BankConfig, BankConfigOpt, BankVaultType}, }; use solana_program_test::tokio; @@ -248,7 +248,6 @@ async fn re_liquidaiton_fail() -> anyhow::Result<()> { }), }, ], - group_config: Some(GroupConfig { admin: None }), protocol_fees: false, })) .await; @@ -336,7 +335,6 @@ async fn re_liquidaiton_fail() -> anyhow::Result<()> { #[tokio::test] async fn re_bankruptcy_fail() -> anyhow::Result<()> { let mut test_f = TestFixture::new(Some(TestSettings { - group_config: Some(GroupConfig { admin: None }), banks: vec![ TestBankSetting { mint: BankMint::Usdc, diff --git a/programs/marginfi/tests/misc/token_extensions.rs b/programs/marginfi/tests/misc/token_extensions.rs index 215f3383f..33487f339 100644 --- a/programs/marginfi/tests/misc/token_extensions.rs +++ b/programs/marginfi/tests/misc/token_extensions.rs @@ -9,9 +9,7 @@ use fixtures::{ test::{BankMint, TestBankSetting, TestFixture, TestSettings, DEFAULT_SOL_TEST_BANK_CONFIG}, ui_to_native, }; -use marginfi::state::marginfi_group::{ - Bank, BankConfig, BankConfigOpt, BankVaultType, GroupConfig, -}; +use marginfi::state::marginfi_group::{Bank, BankConfig, BankConfigOpt, BankVaultType}; use solana_program_test::tokio; use test_case::test_case; @@ -54,7 +52,6 @@ async fn marginfi_account_liquidation_success_with_extension( }), }, ], - group_config: Some(GroupConfig { admin: None }), protocol_fees: false, }), &extensions, diff --git a/programs/marginfi/tests/user_actions/flash_loan.rs b/programs/marginfi/tests/user_actions/flash_loan.rs index a64d54013..6d9f49b46 100644 --- a/programs/marginfi/tests/user_actions/flash_loan.rs +++ b/programs/marginfi/tests/user_actions/flash_loan.rs @@ -1,6 +1,6 @@ use anchor_lang::{InstructionData, ToAccountMetas}; use fixtures::{assert_custom_error, prelude::*}; -use marginfi::{prelude::*, state::marginfi_account::FLASHLOAN_ENABLED_FLAG}; +use marginfi::prelude::*; use pretty_assertions::assert_eq; use solana_program::{instruction::Instruction, pubkey::Pubkey}; use solana_program_test::*; @@ -39,10 +39,6 @@ async fn flashloan_success_1op() -> anyhow::Result<()> { // Fund SOL borrower let borrower_mfi_account_f = test_f.create_marginfi_account().await; - borrower_mfi_account_f - .try_set_flag(FLASHLOAN_ENABLED_FLAG) - .await?; - let borrower_token_account_f_sol = test_f.sol_mint.create_empty_token_account().await; // Borrow SOL @@ -88,10 +84,6 @@ async fn flashloan_success_3op() -> anyhow::Result<()> { // Fund SOL borrower let borrower_mfi_account_f = test_f.create_marginfi_account().await; - borrower_mfi_account_f - .try_set_flag(FLASHLOAN_ENABLED_FLAG) - .await?; - let borrower_token_account_f_sol = test_f.sol_mint.create_empty_token_account().await; // Create borrow and repay instructions @@ -143,10 +135,6 @@ async fn flashloan_fail_account_health() -> anyhow::Result<()> { // Fund SOL borrower let borrower_mfi_account_f = test_f.create_marginfi_account().await; - borrower_mfi_account_f - .try_set_flag(FLASHLOAN_ENABLED_FLAG) - .await?; - let borrower_token_account_f_sol = test_f.sol_mint.create_empty_token_account().await; // Borrow SOL @@ -232,10 +220,6 @@ async fn flashloan_fail_missing_fe_ix() -> anyhow::Result<()> { // Fund SOL borrower let borrower_mfi_account_f = test_f.create_marginfi_account().await; - borrower_mfi_account_f - .try_set_flag(FLASHLOAN_ENABLED_FLAG) - .await?; - let borrower_token_account_f_sol = test_f.sol_mint.create_empty_token_account().await; // Borrow SOL @@ -296,10 +280,6 @@ async fn flashloan_fail_missing_invalid_sysvar_ixs() -> anyhow::Result<()> { // Fund SOL borrower let borrower_mfi_account_f = test_f.create_marginfi_account().await; - borrower_mfi_account_f - .try_set_flag(FLASHLOAN_ENABLED_FLAG) - .await?; - let borrower_token_account_f_sol = test_f.sol_mint.create_empty_token_account().await; // Borrow SOL @@ -375,10 +355,6 @@ async fn flashloan_fail_invalid_end_fl_order() -> anyhow::Result<()> { // Fund SOL borrower let borrower_mfi_account_f = test_f.create_marginfi_account().await; - borrower_mfi_account_f - .try_set_flag(FLASHLOAN_ENABLED_FLAG) - .await?; - let borrower_token_account_f_sol = test_f.sol_mint.create_empty_token_account().await; // Borrow SOL @@ -435,10 +411,6 @@ async fn flashloan_fail_invalid_end_fl_different_m_account() -> anyhow::Result<( // Fund SOL borrower let borrower_mfi_account_f = test_f.create_marginfi_account().await; - borrower_mfi_account_f - .try_set_flag(FLASHLOAN_ENABLED_FLAG) - .await?; - let borrower_token_account_f_sol = test_f.sol_mint.create_empty_token_account().await; // Borrow SOL @@ -495,10 +467,6 @@ async fn flashloan_fail_already_in_flashloan() -> anyhow::Result<()> { // Fund SOL borrower let borrower_mfi_account_f = test_f.create_marginfi_account().await; - borrower_mfi_account_f - .try_set_flag(FLASHLOAN_ENABLED_FLAG) - .await?; - let borrower_token_account_f_sol = test_f.sol_mint.create_empty_token_account().await; // Borrow SOL diff --git a/programs/marginfi/tests/user_actions/liquidate.rs b/programs/marginfi/tests/user_actions/liquidate.rs index 972a094e9..31dad5cf5 100644 --- a/programs/marginfi/tests/user_actions/liquidate.rs +++ b/programs/marginfi/tests/user_actions/liquidate.rs @@ -410,7 +410,6 @@ async fn marginfi_account_liquidation_success_swb() -> anyhow::Result<()> { }), }, ], - group_config: Some(GroupConfig { admin: None }), protocol_fees: false, })) .await; @@ -536,7 +535,6 @@ async fn marginfi_account_liquidation_failure_liquidatee_not_unhealthy() -> anyh }), }, ], - group_config: Some(GroupConfig { admin: None }), protocol_fees: false, })) .await; @@ -643,7 +641,6 @@ async fn marginfi_account_liquidation_failure_liquidator_no_collateral() -> anyh config: None, }, ], - group_config: Some(GroupConfig { admin: None }), protocol_fees: false, })) .await; diff --git a/programs/marginfi/tests/user_actions/mod.rs b/programs/marginfi/tests/user_actions/mod.rs index 732bc3fd6..df996f0ea 100644 --- a/programs/marginfi/tests/user_actions/mod.rs +++ b/programs/marginfi/tests/user_actions/mod.rs @@ -18,7 +18,8 @@ use marginfi::{ }, prelude::*, state::marginfi_account::{ - BankAccountWrapper, DISABLED_FLAG, FLASHLOAN_ENABLED_FLAG, IN_FLASHLOAN_FLAG, + BankAccountWrapper, ACCOUNT_DISABLED, ACCOUNT_FLAG_DEPRECATED, ACCOUNT_IN_FLASHLOAN, + ACCOUNT_TRANSFER_AUTHORITY_ALLOWED, }, }; use pretty_assertions::assert_eq; @@ -477,29 +478,28 @@ async fn account_flags() -> anyhow::Result<()> { let mfi_account_f = test_f.create_marginfi_account().await; - mfi_account_f.try_set_flag(FLASHLOAN_ENABLED_FLAG).await?; + let res = mfi_account_f.try_set_flag(ACCOUNT_FLAG_DEPRECATED).await; - let mfi_account_data = mfi_account_f.load().await; - - assert_eq!(mfi_account_data.account_flags, FLASHLOAN_ENABLED_FLAG); - - assert!(mfi_account_data.get_flag(FLASHLOAN_ENABLED_FLAG)); - - mfi_account_f.try_unset_flag(FLASHLOAN_ENABLED_FLAG).await?; - - let mfi_account_data = mfi_account_f.load().await; - - assert_eq!(mfi_account_data.account_flags, 0); + assert!(res.is_err()); + assert_custom_error!(res.unwrap_err(), MarginfiError::IllegalFlag); - let res = mfi_account_f.try_set_flag(DISABLED_FLAG).await; + let res = mfi_account_f.try_set_flag(ACCOUNT_DISABLED).await; assert!(res.is_err()); assert_custom_error!(res.unwrap_err(), MarginfiError::IllegalFlag); - let res = mfi_account_f.try_unset_flag(IN_FLASHLOAN_FLAG).await; + let res = mfi_account_f.try_unset_flag(ACCOUNT_IN_FLASHLOAN).await; assert!(res.is_err()); assert_custom_error!(res.unwrap_err(), MarginfiError::IllegalFlag); + let res = mfi_account_f + .try_set_flag(ACCOUNT_TRANSFER_AUTHORITY_ALLOWED) + .await; + + assert!(res.is_ok()); + let acc = mfi_account_f.load().await; + assert_eq!(acc.account_flags, ACCOUNT_TRANSFER_AUTHORITY_ALLOWED); + Ok(()) } diff --git a/test-utils/src/marginfi_account.rs b/test-utils/src/marginfi_account.rs index 16d289906..af0457652 100644 --- a/test-utils/src/marginfi_account.rs +++ b/test-utils/src/marginfi_account.rs @@ -1,7 +1,6 @@ use super::{bank::BankFixture, prelude::*}; use crate::ui_to_native; use anchor_lang::{prelude::*, system_program, InstructionData, ToAccountMetas}; - use marginfi::state::{ marginfi_account::MarginfiAccount, marginfi_group::{Bank, BankVaultType}, @@ -772,23 +771,17 @@ impl MarginfiAccountFixture { mem::size_of::() + 8 } - /// Use the client to send the transfer ix authority transaction - /// Pass the new authority as an argument - /// Optional: use a different signer (for negative test case) - pub async fn try_transfer_account_authority( + async fn build_transfer_authority_tx( &self, new_authority: Pubkey, signer_keypair: Option, - ) -> std::result::Result<(), BanksClientError> { + ) -> Transaction { + // Load account details let marginfi_account = self.load().await; - let mut ctx = self.ctx.borrow_mut(); - let signer = if let Some(s) = signer_keypair { - s - } else { - ctx.payer.insecure_clone() - }; + let ctx = self.ctx.borrow(); + let signer = signer_keypair.unwrap_or_else(|| ctx.payer.insecure_clone()); - // create instruction + // Create the transfer authority instruction let transfer_account_authority_ix = Instruction { program_id: marginfi::id(), accounts: marginfi::accounts::MarginfiAccountSetAccountAuthority { @@ -802,17 +795,44 @@ impl MarginfiAccountFixture { data: marginfi::instruction::SetNewAccountAuthority {}.data(), }; - // create transaction - let tx = Transaction::new_signed_with_payer( + // Build and sign the transaction + Transaction::new_signed_with_payer( &[transfer_account_authority_ix], - Some(&signer.pubkey().clone()), + Some(&signer.pubkey()), &[&signer], ctx.last_blockhash, - ); + ) + } + /// Use the client to send the transfer ix authority transaction + /// Pass the new authority as an argument + /// Optional: use a different signer (for negative test case) + pub async fn try_transfer_account_authority( + &self, + new_authority: Pubkey, + signer_keypair: Option, + ) -> std::result::Result<(), BanksClientError> { + let tx = self + .build_transfer_authority_tx(new_authority, signer_keypair) + .await; + let mut ctx = self.ctx.borrow_mut(); ctx.banks_client.process_transaction(tx).await } + /// Use the client to get the transfer ix authority transaction + /// Pass the new authority as an argument + /// Optional: use a different signer (for negative test case) + pub async fn get_tx_transfer_account_authority( + &self, + new_authority: Pubkey, + signer_keypair: Option, + ) -> Transaction { + let tx = self + .build_transfer_authority_tx(new_authority, signer_keypair) + .await; + tx + } + pub async fn try_close_account(&self, nonce: u64) -> std::result::Result<(), BanksClientError> { let mut ctx: std::cell::RefMut = self.ctx.borrow_mut(); diff --git a/test-utils/src/marginfi_group.rs b/test-utils/src/marginfi_group.rs index 454b29939..f2f9865c1 100644 --- a/test-utils/src/marginfi_group.rs +++ b/test-utils/src/marginfi_group.rs @@ -15,7 +15,7 @@ use marginfi::state::marginfi_group::BankConfigCompact; use marginfi::state::price::OracleSetup; use marginfi::{ prelude::MarginfiGroup, - state::marginfi_group::{BankConfig, BankConfigOpt, BankVaultType, GroupConfig}, + state::marginfi_group::{BankConfig, BankConfigOpt, BankVaultType}, }; use solana_program::sysvar; use solana_program_test::*; @@ -40,10 +40,7 @@ pub struct MarginfiGroupFixture { } impl MarginfiGroupFixture { - pub async fn new( - ctx: Rc>, - config: GroupConfig, - ) -> MarginfiGroupFixture { + pub async fn new(ctx: Rc>) -> MarginfiGroupFixture { let ctx_ref = ctx.clone(); let group_key = Keypair::new(); @@ -53,27 +50,35 @@ impl MarginfiGroupFixture { { let mut ctx = ctx.borrow_mut(); + let admin = ctx.payer.pubkey(); let initialize_marginfi_group_ix = Instruction { program_id: marginfi::id(), accounts: marginfi::accounts::MarginfiGroupInitialize { marginfi_group: group_key.pubkey(), - admin: ctx.payer.pubkey(), + admin, fee_state: fee_state_key, system_program: system_program::id(), } .to_account_metas(Some(true)), - data: marginfi::instruction::MarginfiGroupInitialize {}.data(), + data: marginfi::instruction::MarginfiGroupInitialize { + is_arena_group: false, + } + .data(), }; let configure_marginfi_group_ix = Instruction { program_id: marginfi::id(), accounts: marginfi::accounts::MarginfiGroupConfigure { marginfi_group: group_key.pubkey(), - admin: ctx.payer.pubkey(), + admin, } .to_account_metas(Some(true)), - data: marginfi::instruction::MarginfiGroupConfigure { config }.data(), + data: marginfi::instruction::MarginfiGroupConfigure { + new_admin: admin, + is_arena_group: false, + } + .data(), }; // Check if the fee state account already exists @@ -408,7 +413,11 @@ impl MarginfiGroupFixture { Ok(()) } - pub async fn try_update(&self, config: GroupConfig) -> Result<(), BanksClientError> { + pub async fn try_update( + &self, + new_admin: Pubkey, + is_arena_group: bool, + ) -> Result<(), BanksClientError> { let ix = Instruction { program_id: marginfi::id(), accounts: marginfi::accounts::MarginfiGroupConfigure { @@ -416,7 +425,11 @@ impl MarginfiGroupFixture { admin: self.ctx.borrow().payer.pubkey(), } .to_account_metas(Some(true)), - data: marginfi::instruction::MarginfiGroupConfigure { config }.data(), + data: marginfi::instruction::MarginfiGroupConfigure { + new_admin, + is_arena_group, + } + .data(), }; let tx = Transaction::new_signed_with_payer( diff --git a/test-utils/src/test.rs b/test-utils/src/test.rs index def01cd5b..ce4b1f79b 100644 --- a/test-utils/src/test.rs +++ b/test-utils/src/test.rs @@ -14,9 +14,7 @@ use lazy_static::lazy_static; use marginfi::{ constants::MAX_ORACLE_KEYS, state::{ - marginfi_group::{ - BankConfig, BankOperationalState, GroupConfig, InterestRateConfig, RiskTier, - }, + marginfi_group::{BankConfig, BankOperationalState, InterestRateConfig, RiskTier}, price::OracleSetup, }, }; @@ -28,7 +26,6 @@ use std::{cell::RefCell, collections::HashMap, rc::Rc}; #[derive(Default, Debug, Clone)] pub struct TestSettings { - pub group_config: Option, pub banks: Vec, pub protocol_fees: bool, } @@ -80,7 +77,6 @@ impl TestSettings { Self { banks, - group_config: Some(GroupConfig { admin: None }), protocol_fees: false, } } @@ -98,7 +94,6 @@ impl TestSettings { config: Some(*DEFAULT_SOL_TEST_SW_BANK_CONFIG), }, ], - group_config: Some(GroupConfig { admin: None }), protocol_fees: false, } } @@ -124,7 +119,6 @@ impl TestSettings { }), }, ], - group_config: Some(GroupConfig { admin: None }), protocol_fees: false, } } @@ -173,7 +167,6 @@ impl TestSettings { ..TestBankSetting::default() }, ], - group_config: Some(GroupConfig { admin: None }), protocol_fees: false, } } @@ -639,14 +632,7 @@ impl TestFixture { ) .await; - let tester_group = MarginfiGroupFixture::new( - Rc::clone(&context), - test_settings - .clone() - .map(|ts| ts.group_config.unwrap_or(GroupConfig { admin: None })) - .unwrap_or(GroupConfig { admin: None }), - ) - .await; + let tester_group = MarginfiGroupFixture::new(Rc::clone(&context)).await; tester_group .set_protocol_fees_flag(test_settings.clone().unwrap_or_default().protocol_fees) diff --git a/tests/02_configGroup.spec.ts b/tests/02_configGroup.spec.ts index c19163f18..91ae1c7a4 100644 --- a/tests/02_configGroup.spec.ts +++ b/tests/02_configGroup.spec.ts @@ -44,7 +44,7 @@ describe("Config group", () => { await groupAdmin.mrgnProgram.provider.sendAndConfirm!( new Transaction().add( await groupAdmin.mrgnProgram.methods - .marginfiGroupConfigure({ admin: groupAdmin.wallet.publicKey }) + .marginfiGroupConfigure(groupAdmin.wallet.publicKey, false) .accountsPartial({ marginfiGroup: marginfiGroup.publicKey, admin: newAdmin.publicKey, diff --git a/tests/utils/group-instructions.ts b/tests/utils/group-instructions.ts index e7799de0a..8aad81891 100644 --- a/tests/utils/group-instructions.ts +++ b/tests/utils/group-instructions.ts @@ -138,18 +138,26 @@ export const addBankWithSeed = ( /** * newAdmin - (Optional) pass null to keep current admin * marginfiGroup's admin - must sign + * isArena - default false */ export type GroupConfigureArgs = { - newAdmin: PublicKey | null; + newAdmin?: PublicKey | null; // optional; pass null or leave undefined to keep current admin marginfiGroup: PublicKey; + isArena?: boolean; // optional; defaults to false if not provided }; -export const groupConfigure = ( +export const groupConfigure = async ( program: Program, args: GroupConfigureArgs ) => { + const isArena = args.isArena ?? false; + let newAdmin = args.newAdmin; + if (newAdmin == null) { + const group = await program.account.marginfiGroup.fetch(args.marginfiGroup); + newAdmin = group.admin; + } const ix = program.methods - .marginfiGroupConfigure({ admin: args.newAdmin }) + .marginfiGroupConfigure(newAdmin, isArena) .accounts({ marginfiGroup: args.marginfiGroup, // admin: // implied from group @@ -162,14 +170,16 @@ export const groupConfigure = ( export type GroupInitializeArgs = { marginfiGroup: PublicKey; admin: PublicKey; + isArena?: boolean; // optional; defaults to false if not provided }; export const groupInitialize = ( program: Program, args: GroupInitializeArgs ) => { + const isArena = args.isArena ?? false; const ix = program.methods - .marginfiGroupInitialize() + .marginfiGroupInitialize(isArena) .accounts({ marginfiGroup: args.marginfiGroup, // feeState: deriveGlobalFeeState(id), From b16719aae59545aabacd98ca7b8f2ef47e505a94 Mon Sep 17 00:00:00 2001 From: jgur-psyops Date: Fri, 14 Mar 2025 13:48:18 -0400 Subject: [PATCH 55/59] Fix lint 1 --- test-utils/src/marginfi_account.rs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/test-utils/src/marginfi_account.rs b/test-utils/src/marginfi_account.rs index af0457652..66d48b2bc 100644 --- a/test-utils/src/marginfi_account.rs +++ b/test-utils/src/marginfi_account.rs @@ -827,10 +827,8 @@ impl MarginfiAccountFixture { new_authority: Pubkey, signer_keypair: Option, ) -> Transaction { - let tx = self - .build_transfer_authority_tx(new_authority, signer_keypair) - .await; - tx + self.build_transfer_authority_tx(new_authority, signer_keypair) + .await } pub async fn try_close_account(&self, nonce: u64) -> std::result::Result<(), BanksClientError> { From 09d011ade290407237ee49bb083fb71e7d887797 Mon Sep 17 00:00:00 2001 From: Jwalin Date: Thu, 10 Apr 2025 10:34:15 -0400 Subject: [PATCH 56/59] compiling w v1.0.2 --- Cargo.lock | 686 +- Cargo.toml | 12 +- audits/mfi_v2_ottersec_audit.pdf | Bin 164028 -> 0 bytes audits/mfi_v2_sec3_audit.pdf | Bin 367109 -> 0 bytes clients/rust/marginfi-cli/Cargo.toml | 60 - clients/rust/marginfi-cli/README.md | 45 - clients/rust/marginfi-cli/src/bin/main.rs | 7 - clients/rust/marginfi-cli/src/config.rs | 147 - clients/rust/marginfi-cli/src/entrypoint.rs | 1076 - clients/rust/marginfi-cli/src/lib.rs | 8 - clients/rust/marginfi-cli/src/macros.rs | 83 - .../rust/marginfi-cli/src/processor/admin.rs | 173 - .../marginfi-cli/src/processor/emissions.rs | 81 - .../rust/marginfi-cli/src/processor/group.rs | 330 - .../rust/marginfi-cli/src/processor/mod.rs | 2666 - .../rust/marginfi-cli/src/processor/oracle.rs | 107 - clients/rust/marginfi-cli/src/profile.rs | 299 - clients/rust/marginfi-cli/src/utils.rs | 212 - guides/DEPLOY_GUIDE.md | 50 - guides/DEPLOY_GUIDE_STAGING.md | 83 - guides/GETTING_STARTED_DEV.md | 71 - guides/PROG_AUTH_MIGRATION.md | 9 - guides/TRANSFER_ACCOUNT_GUIDE.md | 55 - observability/etl/dataflow-etls/.dockerignore | 6 - observability/etl/dataflow-etls/.gcloudignore | 7 - observability/etl/dataflow-etls/.gitignore | 7 - observability/etl/dataflow-etls/.mypy.ini | 32 - observability/etl/dataflow-etls/Dockerfile | 24 - observability/etl/dataflow-etls/MANIFEST.in | 1 - observability/etl/dataflow-etls/README.md | 26 - .../dataflow-etls/dataflow_etls/__init__.py | 0 .../dataflow_etls/account_parsing.py | 76 - .../dataflow_etls/idl_versions.py | 94 - .../marginfi-v0.json | 2309 - .../marginfi-v0.json | 1904 - .../marginfi-v1.json | 1907 - .../marginfi-v2.json | 1899 - .../marginfi-v3.json | 2032 - .../marginfi-v4.json | 2216 - .../marginfi-v0.json | 2478 - .../dataflow_etls/orm/__init__.py | 0 .../dataflow_etls/orm/accounts.py | 245 - .../dataflow-etls/dataflow_etls/orm/events.py | 473 - .../dataflow_etls/transaction_parsing.py | 240 - .../etl/dataflow-etls/dataflow_etls/utils.py | 40 - .../marginfi-v2-account-parsing-batch/job.py | 141 - .../metadata.json | 50 - .../marginfi-v2-account-parsing-stream/job.py | 146 - .../metadata.json | 46 - .../marginfi-v2-event-parsing-batch/job.py | 162 - .../metadata.json | 50 - .../marginfi-v2-event-parsing-stream/job.py | 156 - .../metadata.json | 46 - .../update_running_pipeline | 12 - observability/etl/dataflow-etls/poetry.toml | 3 - .../etl/dataflow-etls/pyproject.toml | 53 - .../dataflow-etls/scripts/build_job_template | 24 - .../scripts/generate_sample_events.sh | 131 - observability/etl/dataflow-etls/scripts/lint | 3 - .../etl/dataflow-etls/scripts/playground.py | 111 - .../dataflow-etls/scripts/sync_job_template | 22 - .../dataflow-etls/scripts/upload_job_template | 16 - observability/etl/dataflow-etls/setup.py | 14 - observability/indexer/.dockerignore | 6 - observability/indexer/.gitignore | 8 - observability/indexer/CHANGELOG.md | 35 - observability/indexer/Cargo.toml | 88 - observability/indexer/Dockerfile | 31 - observability/indexer/Dockerfile.dockerignore | 8 - observability/indexer/build.rs | 18 - observability/indexer/build_image | 23 - observability/indexer/protos/gcp_pubsub.proto | 33 - observability/indexer/protos/geyser.proto | 95 - .../protos/solana-storage-v1.10.40.proto | 118 - observability/indexer/src/bin/main.rs | 6 - .../indexer/src/commands/backfill.rs | 190 - .../indexer/src/commands/create_table.rs | 92 - .../indexer/src/commands/index_accounts.rs | 415 - .../src/commands/index_transactions.rs | 450 - observability/indexer/src/commands/mod.rs | 5 - .../indexer/src/commands/snapshot_accounts.rs | 765 - observability/indexer/src/common.rs | 174 - observability/indexer/src/entrypoint.rs | 122 - observability/indexer/src/lib.rs | 4 - observability/indexer/src/utils/big_query.rs | 96 - observability/indexer/src/utils/crossbar.rs | 165 - observability/indexer/src/utils/errors.rs | 7 - .../indexer/src/utils/marginfi_account_dup.rs | 203 - observability/indexer/src/utils/metrics.rs | 648 - observability/indexer/src/utils/mod.rs | 23 - observability/indexer/src/utils/protos.rs | 3 - observability/indexer/src/utils/snapshot.rs | 393 - observability/indexer/src/utils/swb_pull.rs | 51 - .../indexer/src/utils/transactions_crawler.rs | 442 - observability/indexer/upload_image | 11 - .../liquidity-incentive-program/Cargo.toml | 47 - .../liquidity-incentive-program/README.md | 57 - .../liquidity-incentive-program/Xargo.toml | 2 - .../images/logo.png | Bin 4967 -> 0 bytes .../src/constants.rs | 12 - .../liquidity-incentive-program/src/errors.rs | 11 - .../src/instructions/create_campaign.rs | 91 - .../src/instructions/create_deposit.rs | 206 - .../src/instructions/end_deposit.rs | 276 - .../src/instructions/mod.rs | 7 - .../liquidity-incentive-program/src/lib.rs | 80 - .../liquidity-incentive-program/src/state.rs | 23 - .../liquidity-incentive-program/tests/lip.rs | 345 - programs/marginfi/Cargo.toml | 3 +- .../marginfi/src/state/marginfi_account.rs | 11 +- programs/marginfi/src/state/price.rs | 19 +- .../tests/admin_actions/account_transfer.rs | 81 - .../tests/admin_actions/bankruptcy.rs | 967 - .../tests/admin_actions/bankruptcy_auth.rs | 218 - .../admin_actions/create_marginfi_group.rs | 61 - .../tests/admin_actions/interest_accrual.rs | 210 - programs/marginfi/tests/admin_actions/mod.rs | 7 - .../tests/admin_actions/setup_bank.rs | 534 - .../tests/admin_actions/withdraw_fees.rs | 136 - .../fixtures/bank/bank_pyusd_230822.json | 14 - .../tests/fixtures/bank/bank_sample_1.json | 14 - .../tests/fixtures/bank/bank_sample_2.json | 14 - .../tests/fixtures/bank/bank_sample_3.json | 14 - .../marginfi_account_sample_1.json | 14 - .../marginfi_account_sample_2.json | 14 - .../marginfi_account_sample_3.json | 14 - .../misc/bank_ignore_stale_isolated_banks.rs | 187 - .../misc/bank_variable_oracle_staleness.rs | 106 - .../tests/misc/collateral_value_cap.rs | 94 - programs/marginfi/tests/misc/mod.rs | 9 - .../marginfi/tests/misc/operational_state.rs | 248 - programs/marginfi/tests/misc/pyth_push.rs | 268 - .../marginfi/tests/misc/real_oracle_data.rs | 156 - programs/marginfi/tests/misc/regression.rs | 681 - .../risk_engine_flexible_oracle_checks.rs | 435 - .../marginfi/tests/misc/token_extensions.rs | 195 - programs/marginfi/tests/tests.rs | 3 - .../marginfi/tests/user_actions/borrow.rs | 488 - .../tests/user_actions/close_account.rs | 64 - .../tests/user_actions/close_balance.rs | 113 - .../tests/user_actions/create_account.rs | 57 - .../marginfi/tests/user_actions/deposit.rs | 324 - .../marginfi/tests/user_actions/flash_loan.rs | 505 - .../marginfi/tests/user_actions/liquidate.rs | 759 - programs/marginfi/tests/user_actions/mod.rs | 505 - programs/marginfi/tests/user_actions/repay.rs | 380 - .../marginfi/tests/user_actions/withdraw.rs | 328 - programs/mocks/Cargo.toml | 31 - programs/mocks/src/errors.rs | 7 - programs/mocks/src/instructions/do_nothing.rs | 14 - .../mocks/src/instructions/init_pool_auth.rs | 71 - programs/mocks/src/instructions/mod.rs | 7 - .../src/instructions/swap_like_jupiter.rs | 75 - programs/mocks/src/lib.rs | 53 - programs/mocks/src/macros.rs | 10 - programs/mocks/src/state/mod.rs | 3 - programs/mocks/src/state/pool_auth.rs | 15 - programs/test_transfer_hook/Cargo.toml | 17 - programs/test_transfer_hook/src/lib.rs | 260 - scripts/build-program-verifiable.sh | 32 - scripts/build-program.sh | 26 - scripts/build-workspace.sh | 7 - scripts/deploy-buffer.sh | 16 - scripts/deploy-staging-program.sh | 79 - scripts/fuzz-program.sh | 10 - scripts/lint.sh | 3 - scripts/setup-devnet.sh | 57 - scripts/single-test.sh | 31 - scripts/test-program-remix.sh | 100 - scripts/test-program.sh | 33 - scripts/verify.sh | 34 - test-utils/Cargo.toml | 55 - ...xWvnbbaVB4zFrf4hoq7Q8z1ZT14co42BGwGtfM.bin | Bin 1864 -> 0 bytes test-utils/data/pyth_legacy_sol_price.bin | Bin 3312 -> 0 bytes test-utils/data/pyth_legacy_usdc_price.bin | Bin 3312 -> 0 bytes test-utils/data/pyth_push_sol_price.bin | Bin 134 -> 0 bytes test-utils/data/swb_pull_sol_price.bin | Bin 3208 -> 0 bytes test-utils/src/bank.rs | 440 - test-utils/src/fixtures/pyUSD.json | 14 - test-utils/src/lib.rs | 11 - test-utils/src/lip.rs | 159 - test-utils/src/marginfi_account.rs | 857 - test-utils/src/marginfi_group.rs | 580 - test-utils/src/prelude.rs | 1 - test-utils/src/spl.rs | 722 - test-utils/src/test.rs | 918 - test-utils/src/utils.rs | 713 - tests/01_initGroup.spec.ts | 275 - tests/02_configGroup.spec.ts | 66 - tests/03_addBank.spec.ts | 383 - tests/04_configureBank.spec.ts | 260 - tests/05_setupEmissions.spec.ts | 150 - tests/06_initUser.spec.ts | 69 - tests/07_deposit.spec.ts | 313 - tests/08_borrow.spec.ts | 200 - tests/09_withdraw_repay.spec.ts | 529 - tests/10_liquidate.spec.ts | 442 - tests/11_health_pulse.spec.ts | 348 - tests/fixtures/bonk_bank.json | 14 - tests/fixtures/cloud_bank.json | 14 - tests/fixtures/localnet_usdc.json | 13 - tests/fixtures/pyusd_bank.json | 14 - tests/fixtures/sol_pyth_oracle.json | 14 - tests/fixtures/sol_pyth_price_feed.json | 14 - tests/fixtures/spl_single_pool.so | Bin 390632 -> 0 bytes tests/p01_initPythPull.spec.ts | 262 - tests/rootHooks.ts | 469 - tests/s01_usersStake.spec.ts | 321 - tests/s02_addBank.spec.ts | 534 - tests/s03_deposit.spec.ts | 248 - tests/s04_borrow.spec.ts | 105 - tests/s05_solAppreciates.spec.ts | 223 - tests/s06_propagateSets.spec.ts | 194 - tests/s07_withdraw_repay.spec.ts | 291 - tests/s08_liquidate.spec.ts | 387 - tests/s09_emissions.spec.ts | 518 - tests/utils/genericTests.ts | 275 - tests/utils/group-instructions.ts | 524 - tests/utils/mocks.ts | 423 - tests/utils/pdas.ts | 114 - tests/utils/pyth-pull-mocks.ts | 253 - tests/utils/pyth_mocks.ts | 516 - tests/utils/spl-staking-utils.ts | 151 - tests/utils/stake-utils.ts | 517 - tests/utils/stakeCollatizer/pdas.ts | 33 - tests/utils/tools.ts | 86 - tests/utils/types.ts | 285 - tests/utils/user-instructions.ts | 420 - tools/alerting/Cargo.toml | 30 - tools/alerting/src/main.rs | 514 - tools/llama-snapshot-tool/Cargo.toml | 41 - .../llama-snapshot-tool/solana.tokenlist.json | 155892 --------------- tools/llama-snapshot-tool/src/bin/main.rs | 277 - 233 files changed, 62 insertions(+), 210017 deletions(-) delete mode 100644 audits/mfi_v2_ottersec_audit.pdf delete mode 100644 audits/mfi_v2_sec3_audit.pdf delete mode 100644 clients/rust/marginfi-cli/Cargo.toml delete mode 100644 clients/rust/marginfi-cli/README.md delete mode 100644 clients/rust/marginfi-cli/src/bin/main.rs delete mode 100644 clients/rust/marginfi-cli/src/config.rs delete mode 100644 clients/rust/marginfi-cli/src/entrypoint.rs delete mode 100644 clients/rust/marginfi-cli/src/lib.rs delete mode 100644 clients/rust/marginfi-cli/src/macros.rs delete mode 100644 clients/rust/marginfi-cli/src/processor/admin.rs delete mode 100644 clients/rust/marginfi-cli/src/processor/emissions.rs delete mode 100644 clients/rust/marginfi-cli/src/processor/group.rs delete mode 100644 clients/rust/marginfi-cli/src/processor/mod.rs delete mode 100644 clients/rust/marginfi-cli/src/processor/oracle.rs delete mode 100644 clients/rust/marginfi-cli/src/profile.rs delete mode 100644 clients/rust/marginfi-cli/src/utils.rs delete mode 100644 guides/DEPLOY_GUIDE.md delete mode 100644 guides/DEPLOY_GUIDE_STAGING.md delete mode 100644 guides/GETTING_STARTED_DEV.md delete mode 100644 guides/PROG_AUTH_MIGRATION.md delete mode 100644 guides/TRANSFER_ACCOUNT_GUIDE.md delete mode 100644 observability/etl/dataflow-etls/.dockerignore delete mode 100644 observability/etl/dataflow-etls/.gcloudignore delete mode 100644 observability/etl/dataflow-etls/.gitignore delete mode 100644 observability/etl/dataflow-etls/.mypy.ini delete mode 100644 observability/etl/dataflow-etls/Dockerfile delete mode 100644 observability/etl/dataflow-etls/MANIFEST.in delete mode 100644 observability/etl/dataflow-etls/README.md delete mode 100644 observability/etl/dataflow-etls/dataflow_etls/__init__.py delete mode 100644 observability/etl/dataflow-etls/dataflow_etls/account_parsing.py delete mode 100644 observability/etl/dataflow-etls/dataflow_etls/idl_versions.py delete mode 100644 observability/etl/dataflow-etls/dataflow_etls/idls/devnet/5Lt5xXZG7bteZferQk9bsiiAS75JqGVPYcTbB8J6vvJK/marginfi-v0.json delete mode 100644 observability/etl/dataflow-etls/dataflow_etls/idls/devnet/A7vUDErNPCTt9qrB6SSM4F6GkxzUe9d8P3cXSmRg4eY4/marginfi-v0.json delete mode 100644 observability/etl/dataflow-etls/dataflow_etls/idls/devnet/A7vUDErNPCTt9qrB6SSM4F6GkxzUe9d8P3cXSmRg4eY4/marginfi-v1.json delete mode 100644 observability/etl/dataflow-etls/dataflow_etls/idls/devnet/A7vUDErNPCTt9qrB6SSM4F6GkxzUe9d8P3cXSmRg4eY4/marginfi-v2.json delete mode 100644 observability/etl/dataflow-etls/dataflow_etls/idls/devnet/A7vUDErNPCTt9qrB6SSM4F6GkxzUe9d8P3cXSmRg4eY4/marginfi-v3.json delete mode 100644 observability/etl/dataflow-etls/dataflow_etls/idls/devnet/A7vUDErNPCTt9qrB6SSM4F6GkxzUe9d8P3cXSmRg4eY4/marginfi-v4.json delete mode 100644 observability/etl/dataflow-etls/dataflow_etls/idls/mainnet/MFv2hWf31Z9kbCa1snEPYctwafyhdvnV7FZnsebVacA/marginfi-v0.json delete mode 100644 observability/etl/dataflow-etls/dataflow_etls/orm/__init__.py delete mode 100644 observability/etl/dataflow-etls/dataflow_etls/orm/accounts.py delete mode 100644 observability/etl/dataflow-etls/dataflow_etls/orm/events.py delete mode 100644 observability/etl/dataflow-etls/dataflow_etls/transaction_parsing.py delete mode 100644 observability/etl/dataflow-etls/dataflow_etls/utils.py delete mode 100644 observability/etl/dataflow-etls/jobs/marginfi-v2-account-parsing-batch/job.py delete mode 100644 observability/etl/dataflow-etls/jobs/marginfi-v2-account-parsing-batch/metadata.json delete mode 100644 observability/etl/dataflow-etls/jobs/marginfi-v2-account-parsing-stream/job.py delete mode 100644 observability/etl/dataflow-etls/jobs/marginfi-v2-account-parsing-stream/metadata.json delete mode 100644 observability/etl/dataflow-etls/jobs/marginfi-v2-event-parsing-batch/job.py delete mode 100644 observability/etl/dataflow-etls/jobs/marginfi-v2-event-parsing-batch/metadata.json delete mode 100644 observability/etl/dataflow-etls/jobs/marginfi-v2-event-parsing-stream/job.py delete mode 100644 observability/etl/dataflow-etls/jobs/marginfi-v2-event-parsing-stream/metadata.json delete mode 100644 observability/etl/dataflow-etls/jobs/marginfi-v2-event-parsing-stream/update_running_pipeline delete mode 100644 observability/etl/dataflow-etls/poetry.toml delete mode 100644 observability/etl/dataflow-etls/pyproject.toml delete mode 100755 observability/etl/dataflow-etls/scripts/build_job_template delete mode 100755 observability/etl/dataflow-etls/scripts/generate_sample_events.sh delete mode 100755 observability/etl/dataflow-etls/scripts/lint delete mode 100644 observability/etl/dataflow-etls/scripts/playground.py delete mode 100755 observability/etl/dataflow-etls/scripts/sync_job_template delete mode 100755 observability/etl/dataflow-etls/scripts/upload_job_template delete mode 100644 observability/etl/dataflow-etls/setup.py delete mode 100644 observability/indexer/.dockerignore delete mode 100644 observability/indexer/.gitignore delete mode 100644 observability/indexer/CHANGELOG.md delete mode 100644 observability/indexer/Cargo.toml delete mode 100644 observability/indexer/Dockerfile delete mode 100644 observability/indexer/Dockerfile.dockerignore delete mode 100644 observability/indexer/build.rs delete mode 100755 observability/indexer/build_image delete mode 100644 observability/indexer/protos/gcp_pubsub.proto delete mode 100644 observability/indexer/protos/geyser.proto delete mode 100644 observability/indexer/protos/solana-storage-v1.10.40.proto delete mode 100644 observability/indexer/src/bin/main.rs delete mode 100644 observability/indexer/src/commands/backfill.rs delete mode 100644 observability/indexer/src/commands/create_table.rs delete mode 100644 observability/indexer/src/commands/index_accounts.rs delete mode 100644 observability/indexer/src/commands/index_transactions.rs delete mode 100644 observability/indexer/src/commands/mod.rs delete mode 100644 observability/indexer/src/commands/snapshot_accounts.rs delete mode 100644 observability/indexer/src/common.rs delete mode 100644 observability/indexer/src/entrypoint.rs delete mode 100644 observability/indexer/src/lib.rs delete mode 100644 observability/indexer/src/utils/big_query.rs delete mode 100644 observability/indexer/src/utils/crossbar.rs delete mode 100644 observability/indexer/src/utils/errors.rs delete mode 100644 observability/indexer/src/utils/marginfi_account_dup.rs delete mode 100644 observability/indexer/src/utils/metrics.rs delete mode 100644 observability/indexer/src/utils/mod.rs delete mode 100644 observability/indexer/src/utils/protos.rs delete mode 100644 observability/indexer/src/utils/snapshot.rs delete mode 100644 observability/indexer/src/utils/swb_pull.rs delete mode 100644 observability/indexer/src/utils/transactions_crawler.rs delete mode 100755 observability/indexer/upload_image delete mode 100644 programs/liquidity-incentive-program/Cargo.toml delete mode 100644 programs/liquidity-incentive-program/README.md delete mode 100644 programs/liquidity-incentive-program/Xargo.toml delete mode 100644 programs/liquidity-incentive-program/images/logo.png delete mode 100644 programs/liquidity-incentive-program/src/constants.rs delete mode 100644 programs/liquidity-incentive-program/src/errors.rs delete mode 100644 programs/liquidity-incentive-program/src/instructions/create_campaign.rs delete mode 100644 programs/liquidity-incentive-program/src/instructions/create_deposit.rs delete mode 100644 programs/liquidity-incentive-program/src/instructions/end_deposit.rs delete mode 100644 programs/liquidity-incentive-program/src/instructions/mod.rs delete mode 100644 programs/liquidity-incentive-program/src/lib.rs delete mode 100644 programs/liquidity-incentive-program/src/state.rs delete mode 100644 programs/liquidity-incentive-program/tests/lip.rs delete mode 100644 programs/marginfi/tests/admin_actions/account_transfer.rs delete mode 100644 programs/marginfi/tests/admin_actions/bankruptcy.rs delete mode 100644 programs/marginfi/tests/admin_actions/bankruptcy_auth.rs delete mode 100644 programs/marginfi/tests/admin_actions/create_marginfi_group.rs delete mode 100644 programs/marginfi/tests/admin_actions/interest_accrual.rs delete mode 100644 programs/marginfi/tests/admin_actions/mod.rs delete mode 100644 programs/marginfi/tests/admin_actions/setup_bank.rs delete mode 100644 programs/marginfi/tests/admin_actions/withdraw_fees.rs delete mode 100644 programs/marginfi/tests/fixtures/bank/bank_pyusd_230822.json delete mode 100644 programs/marginfi/tests/fixtures/bank/bank_sample_1.json delete mode 100644 programs/marginfi/tests/fixtures/bank/bank_sample_2.json delete mode 100644 programs/marginfi/tests/fixtures/bank/bank_sample_3.json delete mode 100644 programs/marginfi/tests/fixtures/marginfi_account/marginfi_account_sample_1.json delete mode 100644 programs/marginfi/tests/fixtures/marginfi_account/marginfi_account_sample_2.json delete mode 100644 programs/marginfi/tests/fixtures/marginfi_account/marginfi_account_sample_3.json delete mode 100644 programs/marginfi/tests/misc/bank_ignore_stale_isolated_banks.rs delete mode 100644 programs/marginfi/tests/misc/bank_variable_oracle_staleness.rs delete mode 100644 programs/marginfi/tests/misc/collateral_value_cap.rs delete mode 100644 programs/marginfi/tests/misc/mod.rs delete mode 100644 programs/marginfi/tests/misc/operational_state.rs delete mode 100644 programs/marginfi/tests/misc/pyth_push.rs delete mode 100644 programs/marginfi/tests/misc/real_oracle_data.rs delete mode 100644 programs/marginfi/tests/misc/regression.rs delete mode 100644 programs/marginfi/tests/misc/risk_engine_flexible_oracle_checks.rs delete mode 100644 programs/marginfi/tests/misc/token_extensions.rs delete mode 100644 programs/marginfi/tests/tests.rs delete mode 100644 programs/marginfi/tests/user_actions/borrow.rs delete mode 100644 programs/marginfi/tests/user_actions/close_account.rs delete mode 100644 programs/marginfi/tests/user_actions/close_balance.rs delete mode 100644 programs/marginfi/tests/user_actions/create_account.rs delete mode 100644 programs/marginfi/tests/user_actions/deposit.rs delete mode 100644 programs/marginfi/tests/user_actions/flash_loan.rs delete mode 100644 programs/marginfi/tests/user_actions/liquidate.rs delete mode 100644 programs/marginfi/tests/user_actions/mod.rs delete mode 100644 programs/marginfi/tests/user_actions/repay.rs delete mode 100644 programs/marginfi/tests/user_actions/withdraw.rs delete mode 100644 programs/mocks/Cargo.toml delete mode 100644 programs/mocks/src/errors.rs delete mode 100644 programs/mocks/src/instructions/do_nothing.rs delete mode 100644 programs/mocks/src/instructions/init_pool_auth.rs delete mode 100644 programs/mocks/src/instructions/mod.rs delete mode 100644 programs/mocks/src/instructions/swap_like_jupiter.rs delete mode 100644 programs/mocks/src/lib.rs delete mode 100644 programs/mocks/src/macros.rs delete mode 100644 programs/mocks/src/state/mod.rs delete mode 100644 programs/mocks/src/state/pool_auth.rs delete mode 100644 programs/test_transfer_hook/Cargo.toml delete mode 100644 programs/test_transfer_hook/src/lib.rs delete mode 100755 scripts/build-program-verifiable.sh delete mode 100755 scripts/build-program.sh delete mode 100755 scripts/build-workspace.sh delete mode 100755 scripts/deploy-buffer.sh delete mode 100644 scripts/deploy-staging-program.sh delete mode 100755 scripts/fuzz-program.sh delete mode 100755 scripts/lint.sh delete mode 100755 scripts/setup-devnet.sh delete mode 100755 scripts/single-test.sh delete mode 100755 scripts/test-program-remix.sh delete mode 100755 scripts/test-program.sh delete mode 100755 scripts/verify.sh delete mode 100644 test-utils/Cargo.toml delete mode 100644 test-utils/data/DeyH7QxWvnbbaVB4zFrf4hoq7Q8z1ZT14co42BGwGtfM.bin delete mode 100644 test-utils/data/pyth_legacy_sol_price.bin delete mode 100644 test-utils/data/pyth_legacy_usdc_price.bin delete mode 100644 test-utils/data/pyth_push_sol_price.bin delete mode 100644 test-utils/data/swb_pull_sol_price.bin delete mode 100644 test-utils/src/bank.rs delete mode 100644 test-utils/src/fixtures/pyUSD.json delete mode 100644 test-utils/src/lib.rs delete mode 100644 test-utils/src/lip.rs delete mode 100644 test-utils/src/marginfi_account.rs delete mode 100644 test-utils/src/marginfi_group.rs delete mode 100644 test-utils/src/prelude.rs delete mode 100644 test-utils/src/spl.rs delete mode 100644 test-utils/src/test.rs delete mode 100644 test-utils/src/utils.rs delete mode 100644 tests/01_initGroup.spec.ts delete mode 100644 tests/02_configGroup.spec.ts delete mode 100644 tests/03_addBank.spec.ts delete mode 100644 tests/04_configureBank.spec.ts delete mode 100644 tests/05_setupEmissions.spec.ts delete mode 100644 tests/06_initUser.spec.ts delete mode 100644 tests/07_deposit.spec.ts delete mode 100644 tests/08_borrow.spec.ts delete mode 100644 tests/09_withdraw_repay.spec.ts delete mode 100644 tests/10_liquidate.spec.ts delete mode 100644 tests/11_health_pulse.spec.ts delete mode 100644 tests/fixtures/bonk_bank.json delete mode 100644 tests/fixtures/cloud_bank.json delete mode 100644 tests/fixtures/localnet_usdc.json delete mode 100644 tests/fixtures/pyusd_bank.json delete mode 100644 tests/fixtures/sol_pyth_oracle.json delete mode 100644 tests/fixtures/sol_pyth_price_feed.json delete mode 100755 tests/fixtures/spl_single_pool.so delete mode 100644 tests/p01_initPythPull.spec.ts delete mode 100644 tests/rootHooks.ts delete mode 100644 tests/s01_usersStake.spec.ts delete mode 100644 tests/s02_addBank.spec.ts delete mode 100644 tests/s03_deposit.spec.ts delete mode 100644 tests/s04_borrow.spec.ts delete mode 100644 tests/s05_solAppreciates.spec.ts delete mode 100644 tests/s06_propagateSets.spec.ts delete mode 100644 tests/s07_withdraw_repay.spec.ts delete mode 100644 tests/s08_liquidate.spec.ts delete mode 100644 tests/s09_emissions.spec.ts delete mode 100644 tests/utils/genericTests.ts delete mode 100644 tests/utils/group-instructions.ts delete mode 100644 tests/utils/mocks.ts delete mode 100644 tests/utils/pdas.ts delete mode 100644 tests/utils/pyth-pull-mocks.ts delete mode 100644 tests/utils/pyth_mocks.ts delete mode 100644 tests/utils/spl-staking-utils.ts delete mode 100644 tests/utils/stake-utils.ts delete mode 100644 tests/utils/stakeCollatizer/pdas.ts delete mode 100644 tests/utils/tools.ts delete mode 100644 tests/utils/types.ts delete mode 100644 tests/utils/user-instructions.ts delete mode 100644 tools/alerting/Cargo.toml delete mode 100644 tools/alerting/src/main.rs delete mode 100644 tools/llama-snapshot-tool/Cargo.toml delete mode 100644 tools/llama-snapshot-tool/solana.tokenlist.json delete mode 100644 tools/llama-snapshot-tool/src/bin/main.rs diff --git a/Cargo.lock b/Cargo.lock index 32a24c183..a33b068e8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -96,30 +96,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "alerting" -version = "0.1.0" -dependencies = [ - "anyhow", - "bytemuck", - "chrono", - "env_logger 0.11.5", - "log", - "marginfi", - "pagerduty-rs", - "pyth-sdk-solana", - "pyth-solana-receiver-sdk", - "serde", - "solana-account-decoder", - "solana-client", - "solana-sdk", - "structopt", - "switchboard-on-demand", - "switchboard-solana", - "time", - "toml 0.8.19", -] - [[package]] name = "aliasable" version = "0.1.3" @@ -156,7 +132,8 @@ dependencies = [ [[package]] name = "anchor-attribute-access-control" version = "0.30.1" -source = "git+https://github.com/mrgnlabs/anchor.git?rev=fdcf299dc55ecf7cfa8c4d598aecb1363b99c02d#fdcf299dc55ecf7cfa8c4d598aecb1363b99c02d" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47fe28365b33e8334dd70ae2f34a43892363012fe239cf37d2ee91693575b1f8" dependencies = [ "anchor-syn 0.30.1", "proc-macro2", @@ -180,7 +157,8 @@ dependencies = [ [[package]] name = "anchor-attribute-account" version = "0.30.1" -source = "git+https://github.com/mrgnlabs/anchor.git?rev=fdcf299dc55ecf7cfa8c4d598aecb1363b99c02d#fdcf299dc55ecf7cfa8c4d598aecb1363b99c02d" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c288d496168268d198d9b53ee9f4f9d260a55ba4df9877ea1d4486ad6109e0f" dependencies = [ "anchor-syn 0.30.1", "bs58 0.5.1", @@ -203,7 +181,8 @@ dependencies = [ [[package]] name = "anchor-attribute-constant" version = "0.30.1" -source = "git+https://github.com/mrgnlabs/anchor.git?rev=fdcf299dc55ecf7cfa8c4d598aecb1363b99c02d#fdcf299dc55ecf7cfa8c4d598aecb1363b99c02d" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49b77b6948d0eeaaa129ce79eea5bbbb9937375a9241d909ca8fb9e006bb6e90" dependencies = [ "anchor-syn 0.30.1", "quote", @@ -224,7 +203,8 @@ dependencies = [ [[package]] name = "anchor-attribute-error" version = "0.30.1" -source = "git+https://github.com/mrgnlabs/anchor.git?rev=fdcf299dc55ecf7cfa8c4d598aecb1363b99c02d#fdcf299dc55ecf7cfa8c4d598aecb1363b99c02d" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d20bb569c5a557c86101b944721d865e1fd0a4c67c381d31a44a84f07f84828" dependencies = [ "anchor-syn 0.30.1", "quote", @@ -246,7 +226,8 @@ dependencies = [ [[package]] name = "anchor-attribute-event" version = "0.30.1" -source = "git+https://github.com/mrgnlabs/anchor.git?rev=fdcf299dc55ecf7cfa8c4d598aecb1363b99c02d#fdcf299dc55ecf7cfa8c4d598aecb1363b99c02d" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cebd8d0671a3a9dc3160c48598d652c34c77de6be4d44345b8b514323284d57" dependencies = [ "anchor-syn 0.30.1", "proc-macro2", @@ -268,7 +249,8 @@ dependencies = [ [[package]] name = "anchor-attribute-program" version = "0.30.1" -source = "git+https://github.com/mrgnlabs/anchor.git?rev=fdcf299dc55ecf7cfa8c4d598aecb1363b99c02d#fdcf299dc55ecf7cfa8c4d598aecb1363b99c02d" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efb2a5eb0860e661ab31aff7bb5e0288357b176380e985bade4ccb395981b42d" dependencies = [ "anchor-lang-idl", "anchor-syn 0.30.1", @@ -281,24 +263,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "anchor-client" -version = "0.30.1" -source = "git+https://github.com/mrgnlabs/anchor.git?rev=fdcf299dc55ecf7cfa8c4d598aecb1363b99c02d#fdcf299dc55ecf7cfa8c4d598aecb1363b99c02d" -dependencies = [ - "anchor-lang 0.30.1", - "anyhow", - "futures", - "regex", - "serde", - "solana-account-decoder", - "solana-client", - "solana-sdk", - "thiserror", - "tokio", - "url", -] - [[package]] name = "anchor-derive-accounts" version = "0.29.0" @@ -313,7 +277,8 @@ dependencies = [ [[package]] name = "anchor-derive-accounts" version = "0.30.1" -source = "git+https://github.com/mrgnlabs/anchor.git?rev=fdcf299dc55ecf7cfa8c4d598aecb1363b99c02d#fdcf299dc55ecf7cfa8c4d598aecb1363b99c02d" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04368b5abef4266250ca8d1d12f4dff860242681e4ec22b885dcfe354fd35aa1" dependencies = [ "anchor-syn 0.30.1", "quote", @@ -336,10 +301,11 @@ dependencies = [ [[package]] name = "anchor-derive-serde" version = "0.30.1" -source = "git+https://github.com/mrgnlabs/anchor.git?rev=fdcf299dc55ecf7cfa8c4d598aecb1363b99c02d#fdcf299dc55ecf7cfa8c4d598aecb1363b99c02d" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0bb0e0911ad4a70cab880cdd6287fe1e880a1a9d8e4e6defa8e9044b9796a6c" dependencies = [ "anchor-syn 0.30.1", - "borsh-derive-internal 0.10.3", + "borsh-derive-internal 0.9.3", "proc-macro2", "quote", "syn 1.0.109", @@ -359,7 +325,8 @@ dependencies = [ [[package]] name = "anchor-derive-space" version = "0.30.1" -source = "git+https://github.com/mrgnlabs/anchor.git?rev=fdcf299dc55ecf7cfa8c4d598aecb1363b99c02d#fdcf299dc55ecf7cfa8c4d598aecb1363b99c02d" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ef415ff156dc82e9ecb943189b0cb241b3a6bfc26a180234dc21bd3ef3ce0cb" dependencies = [ "proc-macro2", "quote", @@ -394,7 +361,8 @@ dependencies = [ [[package]] name = "anchor-lang" version = "0.30.1" -source = "git+https://github.com/mrgnlabs/anchor.git?rev=fdcf299dc55ecf7cfa8c4d598aecb1363b99c02d#fdcf299dc55ecf7cfa8c4d598aecb1363b99c02d" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6620c9486d9d36a4389cab5e37dc34a42ed0bfaa62e6a75a2999ce98f8f2e373" dependencies = [ "anchor-attribute-access-control 0.30.1", "anchor-attribute-account 0.30.1", @@ -409,7 +377,7 @@ dependencies = [ "arrayref", "base64 0.21.7", "bincode", - "borsh 0.10.3", + "borsh 0.9.3", "bytemuck", "getrandom 0.2.15", "solana-program", @@ -418,8 +386,9 @@ dependencies = [ [[package]] name = "anchor-lang-idl" -version = "0.1.1" -source = "git+https://github.com/mrgnlabs/anchor.git?rev=fdcf299dc55ecf7cfa8c4d598aecb1363b99c02d#fdcf299dc55ecf7cfa8c4d598aecb1363b99c02d" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32e8599d21995f68e296265aa5ab0c3cef582fd58afec014d01bd0bce18a4418" dependencies = [ "anchor-lang-idl-spec", "anyhow", @@ -433,7 +402,8 @@ dependencies = [ [[package]] name = "anchor-lang-idl-spec" version = "0.1.0" -source = "git+https://github.com/mrgnlabs/anchor.git?rev=fdcf299dc55ecf7cfa8c4d598aecb1363b99c02d#fdcf299dc55ecf7cfa8c4d598aecb1363b99c02d" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bdf143115440fe621bdac3a29a1f7472e09f6cd82b2aa569429a0c13f103838" dependencies = [ "anyhow", "serde", @@ -455,7 +425,8 @@ dependencies = [ [[package]] name = "anchor-spl" version = "0.30.1" -source = "git+https://github.com/mrgnlabs/anchor.git?rev=fdcf299dc55ecf7cfa8c4d598aecb1363b99c02d#fdcf299dc55ecf7cfa8c4d598aecb1363b99c02d" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04bd077c34449319a1e4e0bc21cea572960c9ae0d0fefda0dd7c52fcc3c647a3" dependencies = [ "anchor-lang 0.30.1", "spl-associated-token-account 3.0.2", @@ -487,7 +458,8 @@ dependencies = [ [[package]] name = "anchor-syn" version = "0.30.1" -source = "git+https://github.com/mrgnlabs/anchor.git?rev=fdcf299dc55ecf7cfa8c4d598aecb1363b99c02d#fdcf299dc55ecf7cfa8c4d598aecb1363b99c02d" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f99daacb53b55cfd37ce14d6c9905929721137fd4c67bbab44a19802aecb622f" dependencies = [ "anyhow", "bs58 0.5.1", @@ -526,55 +498,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "anstream" -version = "0.6.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64e15c1ab1f89faffbf04a634d5e1962e9074f2741eef6d97f3c4e322426d526" -dependencies = [ - "anstyle", - "anstyle-parse", - "anstyle-query", - "anstyle-wincon", - "colorchoice", - "is_terminal_polyfill", - "utf8parse", -] - -[[package]] -name = "anstyle" -version = "1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bec1de6f59aedf83baf9ff929c98f2ad654b97c9510f4e70cf6f661d49fd5b1" - -[[package]] -name = "anstyle-parse" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb47de1e80c2b463c735db5b217a0ddc39d612e7ac9e2e96a5aed1f57616c1cb" -dependencies = [ - "utf8parse", -] - -[[package]] -name = "anstyle-query" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d36fc52c7f6c869915e99412912f22093507da8d9e942ceaf66fe4b7c14422a" -dependencies = [ - "windows-sys 0.52.0", -] - -[[package]] -name = "anstyle-wincon" -version = "3.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bf74e1b6e971609db8ca7a9ce79fd5768ab6ae46441c572e46cf596f59e57f8" -dependencies = [ - "anstyle", - "windows-sys 0.52.0", -] - [[package]] name = "anyhow" version = "1.0.89" @@ -826,20 +749,6 @@ dependencies = [ "syn 2.0.58", ] -[[package]] -name = "attohttpc" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fcf00bc6d5abb29b5f97e3c61a90b6d3caa12f3faf897d4a3e3607c050a35a7" -dependencies = [ - "http", - "log", - "native-tls", - "serde", - "serde_json", - "url", -] - [[package]] name = "atty" version = "0.2.14" @@ -857,32 +766,6 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" -[[package]] -name = "aws-creds" -version = "0.34.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3776743bb68d4ad02ba30ba8f64373f1be4e082fe47651767171ce75bb2f6cf5" -dependencies = [ - "attohttpc", - "dirs", - "log", - "quick-xml", - "rust-ini", - "serde", - "thiserror", - "time", - "url", -] - -[[package]] -name = "aws-region" -version = "0.25.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42fed2b9fca70f2908268d057a607f2a906f47edbf856ea8587de9038d264e22" -dependencies = [ - "thiserror", -] - [[package]] name = "az" version = "1.2.1" @@ -1360,7 +1243,6 @@ checksum = "4ea181bf566f71cb9a5d17a59e1871af638180a18fb0035c92ae62b705207123" dependencies = [ "atty", "bitflags 1.3.2", - "clap_derive", "clap_lex", "indexmap 1.9.3", "once_cell", @@ -1369,19 +1251,6 @@ dependencies = [ "textwrap 0.16.1", ] -[[package]] -name = "clap_derive" -version = "3.2.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae6371b8bdc8b7d3959e9cf7b22d4435ef3e79e138688421ec654acf8c81b008" -dependencies = [ - "heck 0.4.1", - "proc-macro-error", - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "clap_lex" version = "0.2.4" @@ -1391,12 +1260,6 @@ dependencies = [ "os_str_bytes", ] -[[package]] -name = "colorchoice" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3fd119d74b830634cea2a0f58bbd0d54540518a14397557951e79340abc28c0" - [[package]] name = "combine" version = "3.8.1" @@ -1666,7 +1529,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" dependencies = [ "powerfmt", - "serde", ] [[package]] @@ -1739,15 +1601,6 @@ dependencies = [ "walkdir", ] -[[package]] -name = "dirs" -version = "4.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059" -dependencies = [ - "dirs-sys", -] - [[package]] name = "dirs-next" version = "2.0.0" @@ -1758,17 +1611,6 @@ dependencies = [ "dirs-sys-next", ] -[[package]] -name = "dirs-sys" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" -dependencies = [ - "libc", - "redox_users", - "winapi", -] - [[package]] name = "dirs-sys-next" version = "0.1.2" @@ -1814,12 +1656,6 @@ dependencies = [ "syn 2.0.58", ] -[[package]] -name = "dlv-list" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0688c2a7f92e427f44895cd63841bff7b29f8d7a1648b9e7e07a4a365b2e1257" - [[package]] name = "downcast" version = "0.11.0" @@ -1951,16 +1787,6 @@ dependencies = [ "syn 2.0.58", ] -[[package]] -name = "env_filter" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f2c92ceda6ceec50f43169f9ee8424fe2db276791afde7b2cd8bc084cb376ab" -dependencies = [ - "log", - "regex", -] - [[package]] name = "env_logger" version = "0.9.3" @@ -1974,19 +1800,6 @@ dependencies = [ "termcolor", ] -[[package]] -name = "env_logger" -version = "0.11.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13fa619b91fb2381732789fc5de83b45675e882f66623b7d8cb4f643017018d" -dependencies = [ - "anstream", - "anstyle", - "env_filter", - "humantime", - "log", -] - [[package]] name = "equivalent" version = "1.0.1" @@ -2124,21 +1937,6 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" -[[package]] -name = "foreign-types" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" -dependencies = [ - "foreign-types-shared", -] - -[[package]] -name = "foreign-types-shared" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" - [[package]] name = "form_urlencoded" version = "1.2.1" @@ -2543,19 +2341,6 @@ dependencies = [ "tokio-rustls", ] -[[package]] -name = "hyper-tls" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" -dependencies = [ - "bytes", - "hyper", - "native-tls", - "tokio", - "tokio-native-tls", -] - [[package]] name = "iana-time-zone" version = "0.1.60" @@ -2690,12 +2475,6 @@ version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" -[[package]] -name = "is_terminal_polyfill" -version = "1.70.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" - [[package]] name = "itertools" version = "0.10.5" @@ -2898,53 +2677,6 @@ version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" -[[package]] -name = "liquidity-incentive-program" -version = "0.1.0" -dependencies = [ - "anchor-lang 0.30.1", - "anchor-spl 0.30.1", - "anyhow", - "assert_matches", - "bincode", - "cfg-if", - "fixed", - "futures", - "marginfi", - "pretty_assertions", - "solana-logger", - "solana-program", - "solana-program-test", - "solana-sdk", - "test-utilities", -] - -[[package]] -name = "llama-snapshot-tool" -version = "0.1.0" -dependencies = [ - "anchor-client", - "anchor-spl 0.30.1", - "anyhow", - "bytemuck", - "clap 3.2.25", - "env_logger 0.9.3", - "fixed", - "fixed-macro", - "futures", - "lazy_static", - "log", - "marginfi", - "reqwest", - "rust-s3", - "serde", - "serde_json", - "solana-account-decoder", - "solana-client", - "solana-sdk", - "tokio", -] - [[package]] name = "lock_api" version = "0.4.12" @@ -3031,65 +2763,9 @@ dependencies = [ "switchboard-on-demand", "switchboard-solana", "test-case", - "test-utilities", "type-layout", ] -[[package]] -name = "marginfi-v2-cli" -version = "0.1.0" -dependencies = [ - "anchor-client", - "anchor-spl 0.30.1", - "anyhow", - "bincode", - "borsh 0.10.3", - "bs58 0.4.0", - "bytemuck", - "chrono", - "clap 3.2.25", - "dirs", - "env_logger 0.9.3", - "fixed", - "fixed-macro", - "hex", - "liquidity-incentive-program", - "log", - "marginfi", - "pyth-sdk-solana", - "pyth-solana-receiver-sdk", - "rand 0.8.5", - "serde", - "serde_json", - "shellexpand", - "solana-account-decoder", - "solana-address-lookup-table-program", - "solana-client", - "solana-sdk", - "spl-associated-token-account 2.3.0", - "spl-token 4.0.0", - "switchboard-on-demand", - "switchboard-solana", - "type-layout", -] - -[[package]] -name = "maybe-async" -version = "0.2.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cf92c10c7e361d6b99666ec1c6f9805b0bea2c3bd8c78dc6fe98ac5bd78db11" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.58", -] - -[[package]] -name = "md5" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "490cc448043f947bae3cbee9c203358d62dbee0db12107a74be5c30ccfd09771" - [[package]] name = "memchr" version = "2.7.4" @@ -3150,15 +2826,6 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" -[[package]] -name = "minidom" -version = "0.15.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f45614075738ce1b77a1768912a60c0227525971b03e09122a05b8a34a2a6278" -dependencies = [ - "rxml", -] - [[package]] name = "minimal-lexical" version = "0.2.1" @@ -3212,16 +2879,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "mocks" -version = "0.1.0" -dependencies = [ - "anchor-lang 0.30.1", - "anchor-spl 0.30.1", - "bytemuck", - "static_assertions", -] - [[package]] name = "modular-bitfield" version = "0.11.2" @@ -3243,23 +2900,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "native-tls" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" -dependencies = [ - "libc", - "log", - "openssl", - "openssl-probe", - "openssl-sys", - "schannel", - "security-framework", - "security-framework-sys", - "tempfile", -] - [[package]] name = "nix" version = "0.26.4" @@ -3546,50 +3186,12 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" -[[package]] -name = "openssl" -version = "0.10.64" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95a0481286a310808298130d22dd1fef0fa571e05a8f44ec801801e84b216b1f" -dependencies = [ - "bitflags 2.6.0", - "cfg-if", - "foreign-types", - "libc", - "once_cell", - "openssl-macros", - "openssl-sys", -] - -[[package]] -name = "openssl-macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.58", -] - [[package]] name = "openssl-probe" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" -[[package]] -name = "openssl-sys" -version = "0.9.102" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c597637d56fbc83893a35eb0dd04b2b8e7a50c91e64e9493e398b5df4fb45fa2" -dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", -] - [[package]] name = "opentelemetry" version = "0.17.0" @@ -3609,16 +3211,6 @@ dependencies = [ "thiserror", ] -[[package]] -name = "ordered-multimap" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccd746e37177e1711c20dd619a1620f34f5c8b569c53590a72dedd5344d8924a" -dependencies = [ - "dlv-list", - "hashbrown 0.12.3", -] - [[package]] name = "os_str_bytes" version = "6.6.1" @@ -3648,18 +3240,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "pagerduty-rs" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd10bab2b6df910bbe6c4987d76aa4221235103d9a9c000cfabcee6a6abc8f7a" -dependencies = [ - "reqwest", - "serde", - "time", - "url", -] - [[package]] name = "parking_lot" version = "0.12.3" @@ -4028,16 +3608,6 @@ dependencies = [ "syn 2.0.58", ] -[[package]] -name = "quick-xml" -version = "0.26.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f50b1c63b38611e7d4d7f68b82d3ad0cc71a2ad2e7f61fc10f1328d917c93cd" -dependencies = [ - "memchr", - "serde", -] - [[package]] name = "quinn" version = "0.10.2" @@ -4297,12 +3867,10 @@ dependencies = [ "http-body", "hyper", "hyper-rustls", - "hyper-tls", "ipnet", "js-sys", "log", "mime", - "native-tls", "once_cell", "percent-encoding", "pin-project-lite", @@ -4314,14 +3882,12 @@ dependencies = [ "sync_wrapper", "system-configuration", "tokio", - "tokio-native-tls", "tokio-rustls", "tokio-util 0.7.11", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", - "wasm-streams", "web-sys", "webpki-roots 0.25.4", "winreg", @@ -4407,49 +3973,6 @@ dependencies = [ "windows-sys 0.48.0", ] -[[package]] -name = "rust-ini" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6d5f2436026b4f6e79dc829837d467cc7e9a55ee40e750d716713540715a2df" -dependencies = [ - "cfg-if", - "ordered-multimap", -] - -[[package]] -name = "rust-s3" -version = "0.33.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b2ac5ff6acfbe74226fa701b5ef793aaa054055c13ebb7060ad36942956e027" -dependencies = [ - "async-trait", - "aws-creds", - "aws-region", - "base64 0.13.1", - "bytes", - "cfg-if", - "futures", - "hex", - "hmac 0.12.1", - "http", - "log", - "maybe-async", - "md5", - "minidom", - "percent-encoding", - "quick-xml", - "reqwest", - "serde", - "serde_derive", - "sha2 0.10.8", - "thiserror", - "time", - "tokio", - "tokio-stream", - "url", -] - [[package]] name = "rust_decimal" version = "1.35.0" @@ -4558,23 +4081,6 @@ version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" -[[package]] -name = "rxml" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a98f186c7a2f3abbffb802984b7f1dfd65dac8be1aafdaabbca4137f53f0dff7" -dependencies = [ - "bytes", - "rxml_validation", - "smartstring", -] - -[[package]] -name = "rxml_validation" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22a197350ece202f19a166d1ad6d9d6de145e1d2a8ef47db299abe164dbd7530" - [[package]] name = "ryu" version = "1.0.18" @@ -4758,7 +4264,6 @@ version = "1.0.120" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4e0d21c9a8cae1235ad58a00c11cb40d4b1e5c784f1ef2c537876ed6ffd8b7c5" dependencies = [ - "indexmap 2.6.0", "itoa", "ryu", "serde", @@ -4892,15 +4397,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde" -[[package]] -name = "shellexpand" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ccc8076840c4da029af4f87e4e8daeb0fca6b87bbb02e10cb60b791450e11e4" -dependencies = [ - "dirs", -] - [[package]] name = "signal-hook-registry" version = "1.4.2" @@ -4962,17 +4458,6 @@ version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" -[[package]] -name = "smartstring" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fb72c633efbaa2dd666986505016c32c3044395ceaf881518399d2f4127ee29" -dependencies = [ - "autocfg", - "static_assertions", - "version_check", -] - [[package]] name = "socket2" version = "0.5.7" @@ -5394,7 +4879,7 @@ version = "1.18.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0511082fc62f2d086520fff5aa1917c389d8c840930c08ad255ae05952c08a2" dependencies = [ - "env_logger 0.9.3", + "env_logger", "lazy_static", "log", ] @@ -6666,30 +6151,6 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" -[[package]] -name = "structopt" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c6b5c64445ba8094a6ab0c3cd2ad323e07171012d9c98b0b15651daf1787a10" -dependencies = [ - "clap 2.34.0", - "lazy_static", - "structopt-derive", -] - -[[package]] -name = "structopt-derive" -version = "0.4.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcb5ae327f9cc13b68763b5749770cb9e048a99bd9dfdfa58d0cf05d5f64afe0" -dependencies = [ - "heck 0.3.3", - "proc-macro-error", - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "strum" version = "0.24.1" @@ -7057,54 +6518,6 @@ dependencies = [ "test-case-core", ] -[[package]] -name = "test-utilities" -version = "0.1.0" -dependencies = [ - "anchor-lang 0.29.0", - "anchor-lang 0.30.1", - "anchor-spl 0.30.1", - "anyhow", - "assert_matches", - "bincode", - "bytemuck", - "fixed", - "fixed-macro", - "futures", - "lazy_static", - "liquidity-incentive-program", - "marginfi", - "pretty_assertions", - "pyth-sdk-solana", - "pyth-solana-receiver-sdk", - "serde", - "serde_json", - "solana-cli-output", - "solana-logger", - "solana-program", - "solana-program-test", - "solana-sdk", - "spl-discriminator 0.2.2", - "spl-tlv-account-resolution 0.6.3", - "spl-token-2022 3.0.2", - "spl-transfer-hook-interface 0.6.3", - "static_assertions", - "switchboard-on-demand", - "switchboard-solana", - "test_transfer_hook", - "type-layout", -] - -[[package]] -name = "test_transfer_hook" -version = "0.1.0" -dependencies = [ - "solana-program", - "spl-tlv-account-resolution 0.6.3", - "spl-token-2022 3.0.2", - "spl-transfer-hook-interface 0.6.3", -] - [[package]] name = "textwrap" version = "0.11.0" @@ -7245,16 +6658,6 @@ dependencies = [ "syn 2.0.58", ] -[[package]] -name = "tokio-native-tls" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" -dependencies = [ - "native-tls", - "tokio", -] - [[package]] name = "tokio-rustls" version = "0.24.1" @@ -7626,12 +7029,6 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" -[[package]] -name = "utf8parse" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" - [[package]] name = "uuid" version = "1.10.0" @@ -7680,12 +7077,6 @@ dependencies = [ "sval_serde", ] -[[package]] -name = "vcpkg" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" - [[package]] name = "vec_map" version = "0.8.2" @@ -7801,19 +7192,6 @@ version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" -[[package]] -name = "wasm-streams" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b65dc4c90b63b118468cf747d8bf3566c1913ef60be765b5730ead9e0a3ba129" -dependencies = [ - "futures-util", - "js-sys", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - [[package]] name = "web-sys" version = "0.3.69" diff --git a/Cargo.toml b/Cargo.toml index 7b107333d..a532cd631 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [workspace] resolver = "2" -members = ["programs/*", "clients/rust/*", "tools/*"] +members = ["programs/*"] [workspace.dependencies] solana-cli-output = "=1.18.17" @@ -21,15 +21,11 @@ spl-tlv-account-resolution = "0.6.3" spl-discriminator = "0.2.2" spl-token-2022 = "3.0.2" -anchor-lang = { git = "https://github.com/mrgnlabs/anchor.git", rev = "fdcf299dc55ecf7cfa8c4d598aecb1363b99c02d" } +anchor-spl = { version = "0.30.1", features = ["token_2022_extensions"] } +anchor-lang = { version = "0.30.1", features = ["init-if-needed", "event-cpi"]} anchor-lang-29 = { version = "0.29.0", package = "anchor-lang" } -anchor-spl = { git = "https://github.com/mrgnlabs/anchor.git", features = [ - "token_2022", -], rev = "fdcf299dc55ecf7cfa8c4d598aecb1363b99c02d" } -anchor-client = { git = "https://github.com/mrgnlabs/anchor.git", rev = "fdcf299dc55ecf7cfa8c4d598aecb1363b99c02d" } - pyth-sdk-solana = "=0.10.1" -pyth-solana-receiver-sdk = "0.3.0" +pyth-solana-receiver-sdk = "=0.3.1" switchboard-solana = "0.29.0" switchboard-on-demand = "0.1.14" borsh = "0.10.3" diff --git a/audits/mfi_v2_ottersec_audit.pdf b/audits/mfi_v2_ottersec_audit.pdf deleted file mode 100644 index 1f58978d4088cb7c6cba0e05efb199032dd07574..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 164028 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

tozWWXz|8mDwA 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℞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 ArT_o{ diff --git a/audits/mfi_v2_sec3_audit.pdf b/audits/mfi_v2_sec3_audit.pdf deleted file mode 100644 index 0d107e42549556eeea1e625daf4778eb661edd9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 367109 zcmb@u19)Xymo6N;Vpher%}T|#ZQH2Wtk|}#if!Af*w`^{>U5v4``$jM`~3I6&sclx zk&&5aXTQ&!@0)>c_q-XUB z#&pB*$GCYfJz{{4P}5TIK&=;bOTgD+GYV!zQG$bnwnFpW;_^NJ%?^8tf~isZV7%~N`%x#K z4$`s|&pBPg;E}nUqD3CQ>gO5@5Icv?CC#IBvx8_Q(LTBH0M;-(r*egNks|5+=lz?q zu~n<`&DErIGk2NU@! zF|e9yMWdvau`7w|pn?f<=RFdDsLskk-|BKpA#?qC1}&V)eYkcEb*2Y?Hej~?P4WC* z2Lui%-N5Yi6O56y;lIQ3Vf}{p18K&8fHV`^pHMTf(tkkB@^?_jPt?Hl&?639skE?( z+9%axkZWOUiQAzB`w3|(TH<(m#Cdj${h)p9wYw+!45~J>B%3xH3rnCB+FvA$Og86a z?BczyyfbiGb+DIwPZPNZG{2(ydHx`CZ2L8NoL+0c;G$DpC>JJ?=6FOyPm(%b&wb)Z zdQ@j{(-i0!GYQvszw635s+)lwVsOili);%l-3P_?jqe^w7YN1J{P?c{VEP9DFfuUw zi2w&H;|BtaY<~wqMB;awId;T>SGj$eAI+;vSNnT?zV0e^-$2yGNusEr3cl1u4w1GH zx1L>ZZ{x~no5d;Aj||ut@O5H&q<@VO@RhI-@+GC|L%%EOIzU+rCdBcGmX6)?(e8i=z zst9MSVYM(@Vv=uzi>CZc4S1xVFcam-yffTMuX>b>xJMg1O!Di|?0nWEZ<*N7G7K@b z`NYYb@cFW#M3yAF=s>lMvlHfFNx&(VrL-%=>ixjle49^2x=2B{rmy)}EGJ7etz?6Y z1t(YX^^fG$!3rMk`>CBaX2_GV?x%cmNpv!o&S?vU&0ltz`>RAkYLXYMZhGYJ-!5*h zEtpP@609xX-!7v+#Ue~{c5-GZUnqO;CAl@#@2AHP+cj%5XL_ci?*S1 z$%QBq>-!f8AB8N4VhcvOkL|(m`FBk2d~T5R6gs(hKw1?t#knVTMG@ZYD#W^~TDs9h zQb!p}3q9b;|BTP_I8$VqRd`R)i&VfS5<1SoPoXgqmM~w@@p+|ITM8^e*>0j;qyAT} zApoOTCHrUJYIfun$!LS#45lW@WRuVttZ_}p&u%Ug8@Tuh5b^X@vY@A>GxwnXzCXlIz^hRw)K=74&(6aAqG{})3~4a{B2qB z0=naW(&8}}^`5_n8R#@3=^Sfu9m6|^l5?Gz$C!u|ai{a_-7O>|ZeriCc?NvK6QH_H z1Xp?8-ng7DSAAo#$q31?WFL=gYHN_f3|rd2%Mn6oBBsBK`f}*!_7igOS*g?Rt!ss$ z2nUpg#o-kjIjz~8cfo_)O1{O2vmQ9|`BpQ>Y0>&;2#>rI_l!p0Zd8?|39hINFpI|- z&%w-oA-M*mi%Uo#mF#9+bF<9}VlX%Nz_B0tO=bI@WTJgg2zw_|YmRPF!*`xW?SOV% zgEBWu8yJl{k<)FtDy(LSPv}k&nd908z2H{wF0Yz6whm5<>G~@h@Q+23XWL9Ru}gR; zlimi+L|Yip9S*ftLSn*2g;BAN`ol*ysk3G8@28J4KEOaLtBwPIO%lxifFu|gnEoUQ z26~p?JjuZPcP!DSd?B;Tj`*tbf)pV8VqqzwPQc%~X56wT9l#@9`b02=Eoh!b`Dx~^ zvy)AlLaNE95l>kz&DHo6YtqBbuGH@bp;Ad#L4hp{8%YH5T0?c80a3ZYk48W4RWY!B zXEH^M!$3lmOT>WdiERQjb@4t-ih7df2;`MO#R$KoAy=liTZ+fBlz1r?Z|)J&y|#*# zc{_UrUggn7HJl8Y9JI;)c7|HYO`09NY|=Q5eQH z?VaL%{8o!*1akzyI-gsS_G=TsD(dXfL7qqw{1Tt=rCMFT#PUrCM=s*~P*4*9Z~0QA zMpTCZti5T^TuYS=x z&8_93%8C;ymRqg-q;!%#IH?0vrepJc4SK=Z5|^|qp-e%Q;;;n7SoAXe3>PHT$+=9Z zt%QT$jV+qSEq$8x8s*&a>Y$~J@TU6q-F$KDAn~`pD*(`>?pt`qI=sgr$xfyO%xE@? z8dh@v(lek~XHOBN@4Pwd8UbG5-tR(^atGA!o~LnkzPKinX{AdXvdis|rI@alZj^14D)L7gH**p*y-VhX zSrz-BwS_i6<{^D9JApufs8mG6{+fMQ{sH^2G5_m4%)mtd`#{Xj`giP;pS)_l%8nSM z6PR=+L}Jg*O%n!W*SZ7-&C0)~kHAlxK9>d|b=u>Ep4PPKEhr}TiOBh5j!s0~hY;s-;0_tkWNTVTIJ8Jc?fa{~83bNpa{KHk6jn8THdZ5KI=$xfEHF}djgUxyteQbhdGw- zfuRvtX53I0J8z>1F!rzdA2ghKA!@=<8RSIDeLd$<)7?sr(t1b}XW3;T zB*BFN+abEL;=0bzvEMomg)}sU();A&;pZBDFuRvghYMg2+xHc25CGL;%;sCz{lP@Q5hl5JD7FMkxz_L38W4H?o%}1GvG2MN!OoJ0Y z6y+4ENEQ+Z2*XBQg>~vv;dW##+e&&Q_m9!Sf@OO#me@1T5`luiLL1+FZkQl7v*P!%I@Q zw{d0;*V7eVda=0oaB0@-5^-;VV(*8EY-H>Eh6ul25y&P%^`i++rDn9dDED)oZq*;R zh2^1ZtCBH>eyK6FY{r9Pak@MDdZ@S<*Nv{a8E~XfzjL`Xej9PiEAt5uoG-RDwvh_F z)Se>)T%GEvWAvpu~{`K zomR74Vgf^@FxaCFNsY_w#I$1`IwZtr;3Q|UeDc0=34j@Aq~(f_HMH%+Hv zG9zY$-g(d;?(W@!J~_x1PUjZ=+OOYYO}>%k zP-*M^259Q(Wfp}|Ub0YsZ+xjf6+4rOb$9n$h|3+of*x^@$0aJT5?!~>$EqL`@-Mpo zF&7ncY$e+Jha@mZPRqlmzYo2<2CbMl|n&a10;jd;?VlJ&Y>b3B5W*RM`pi}G+KNE6W*JWtb5X?(z z4I#4iz~(F!B-gE*6eJe>-4%}XXaEN3tAZOB&P+ztxJgDL`j&J75z;EXt0t#*%&GAr;s_g>KV1N1Hnc_S8q(C&QoD_i zh2PHz$M!M$BJW4YMq?W%S(j~i&%LE}EG`Xu4t}y}VtL|@vSD_VT_NpX(j*22z6+%k z0S4;?9^0SVw7p;NB(!uk%lS5SlvPGspRAqQn=`b$$}Wt{PSX1M*lgYk7I$Y5Cf&h; zKz8XpairSJJh|1p+z;E*BGH&@{lX8mVjAdb;e{4zhBy;c732g<$nyn-78-|sk|!#n zN>GN8p!LUw>5B=~#Pfl#dV9!cy}x=>l)Oe0P49bS54J>hxi(6BM`9uvGVh8;ya^JsKAk!i9ek>%u=LcIaX@Fkb34x_#kE*oc zuKzsOPrJ~T^rZnB4UVfwk5&}6%)G?7`cVHsdq!)0s0NCpIL*_c>d;tu4(POE+|f|W z+>#`ebwN61e^rj*{-_7i0pdMkYyE3|*|0siQRaNr38PZ}usv?{(LL*H%~R8*eC~K{ z$~3tkeGw-nb6SHEtAV+5SG%gG0=qc>gh$gA!?+a-YBKG!UsBReyz^&zm=aCLv-rvv z31pCEI2CJnZGB{O&%Mc``C}GfquBoap9QP#AqM6ooB{qMI zGHo7&mfJEFLMO+ntC*Uld-PiKDj_)ss|w!+PMxZnMowWIjkYMH6HMMj6MY;a^i2WF z>54n^9pVJ2K-EFf`AyY9ObKj(a)StiBa9QwmVNvM27Agoi@S!$v>>Lc^NH zSaUzZDij6i0)2m!XDYp)e4kIPQe?^}`JQv9QgI{2BBK6Uyjwh<9_a*EWmkG5SG8z> zL!^v<+}6hAxp|y5Al~)yf#BuzjrohNtnR6uPS`jWv{Wyg3n7cm$EvR*kx{9e zFh%>vHfTQk$9h7OLAk!NgEcu59s3h7WN8B(4P$J)r8HPUBXYxja5z=LN=g*~(9`7E<%ho$-ZPMmW1UB1S)~zP*T&i^H$+9-rPP4d65+?`eGRfs< zjxcW=$25}!r3d@$ehoR0=*=?N_HBs1@ANo2MlF4*Vbixc-PNZvpu29H;+vt9ew7!+ zeg+tlK|2dJXYR+%7?J_r9@1vI7;N+L>_Ynp3VAnvsr0>vyd%96y$#mz9bnh^|6z-~ zL_gp$-3^J1Esg#u4=h`YK02UYpZW~wqxy_Ou&*5Or9tmNe#=drmtp1rcck0r8|Hnp zvDwSjs}HF;SaLY!xWo2{;u*{|pws^kL6{))6nY4`MA|0m5ebNP-2(L}c^-AJ#YE$} z#N1|pdEMfIxk20~7!x?GTF1RZ^9bYV&(xQxDO!S^ZRoA|4~cHq*k%`L}H!qG)IAi zPFOpl4bzR`TK`x7P{~!yvDjQ!$JOrkza&?3{!@SU5DIbw{2>XOW!Vxj} z$-<;jGsrpR9CHr^r$cj5g#Mp6zI{jYLO{O7KjfeC&xYhj@WTb;fpSOu(=p7`x#a)F zSLNR%^p#`4{|`HKo$j=|tg9>=&sXG6x!Q42kp;t#^l>Us%#m+vg^_0{nn_5oGz99ifvtG!kQ)ly|N zXsmkm4Lx^Zrs08S1_c%9jg!ZXnoC}CmM4K{D%Xv=s+0B_43>$(jmAsT0varqMKcSZ zR!bTadYxAi>n{r{a2scr77)m?R$%nGa8^I>pr$m2v3JicAd$hZi0{PrG$yhObyko{ zLz|w2qRd(e*~Lm}D5S^FD5H^GH5&DcRat4-Q6^aF*_GN`8QD?FTAA6E(pXv9Q65;? z*_B>eIoY|F)bI5lwcBN45i*$@r;p)d)nTP!`D0mNDPRdQh8Q9aGFDx`McgHaLxjw(XJ75Fs+?>3wr=6Mb>1>=e>1eiles5ZRdp)kLe|K+g zYi)Twy>8U;@_IF3=vehq@b;cNkPS%$vlbTxJZkwv^0UOMbb+7C5bggNN z9<(~|msuDtDow$otLy7811_zbcQQ6!Wp$fg-mkmo=ekG3aW1r9?w+QqG=^598J63* z*6#ZK@tpf>d>0pl8(v=Sg1r~5f||;TH+f$VZpdV48+CNFJ6}c*Heb%3>pBxxLOWMY z=-Axc>k=5B0P_Gk7Uec~vJ2vko2I16m{e99y@B{xTPEUxtOx1&^5qW`gEJy)4EHsG=UHFe1)wz*oUj_$nAEtt6z^8jNka3o{j ziE~`SA@?(xxlO9d3Nu}0sC#O0rkOTw+<3-*9^(~5iskv@lguTmZ!ByXZ8Q9s=6DGzg!H&tWI?~GD47tlLM7m*_8NZRR} zo5Yq22A>Zw9(NnJSFL)HYonioI#<~|HCXkV@2yx}62U0XMRiW5d_QaW z)9@@{aice-2W_GUZ4UC9c5Ppr*}XKPHWzlA&K}NowFmy~x?0zZ7}S#bxWYfd3$DH; zdNns0V)p3mrS;F%o$>Y5-!(%cxISP_ju2(e2lIL0uD(muOFemH#L{tof4$uwWcz*{ zz8u}_4yoe^b%Jx9>tF8tBXBpb(nT~JzHx;=NxDizEJ=D0054HAYYwTw$y4c~%9)|U z_0V(FmT9KLp0UVu23vIFUbx$HRDbS>je)ap^8?*a;>1nVZdwngBOZ^yY($#LVtpwo zxPpCytsIeQp4UG-1`Bz-mt{dpD&aEBKTi&baHrv3oj!z^ z+z@4c>NUWHNAP&){HPl0mqC8}>zIh`AH+l~|Ee0Yu(1EmNBvzqG^S)>vqF#hN_D?W z8t@Ww6I&{ds4G}tO5|AokqY+#Py7~vomcVRAw7d03k<#>7H1TzxhXNhagUS)46z8Y zgJ_GR8{vE6xBDdzvco9T6Ti={yZ0+5lL|;5+k}crF^)+anL=c4nhoDM?q~k=kP_r^ zUsY!!4+|)tG6{2%Gqv4WnH=WK^Iq61^tQwkfhJ-M9d*gxYNd^S&P__ z^Fh(!U)+*lZgj9!w>2?gu~8TnM^9tq500MPF?2DVd(w&-ViijEDkO~@`Y_Unm5Z_s z@9@YoD8)B9gJue!^*AvFTCQ84c&*yq&V^5-X)E@d;tLbTT}yp+_jB;I@7*$)Y@zu% zCSQuhwEWz~+J?IH!7rUP-n=XsH>oBheV2q@6zrD5RS4bQECEhQ}02t@83aumY@;!mM{**OuHT zm0OKztEF|Yr!*)S;oP<&te?}KG)nH{$vPv*k|sLfn)KR_F4wftn841qr!<<{K}2Ce zyLkpW;Ll2u+9?xQsz4+3%JD&cv8hZVO~N4=@zgxK17*}%I6haauzn4$c&n7)`I01M zT15$!b0;SRKW4f*P~Cc?)bv{Ry>!u}{V2W3>$=h#5|V!~V*RUi{FeEU_xEV)!J;`} zhTc4FDCG*oh|wCG2JdPXxFHN+2q3ipD~7+Gj_m(rI{q1;GjK5fj?e#YHd04V!}xtg z6!JF04G&RMk-#G)7YGw4Ebu$ji|IyJR%wj9zNnjDbT~IU58$O&rM3l77B_A&oa<4i z(hOgl>7lzf=V(hEAoU7{UW0r2gjSxpS9IQ&47NDXA9S4XrArEuC~<`WRz(?q%$Te> zl!OQ%I+;wu=jRfx;p~j_rokQ2dX7Z3%%-pyhLaVpD1PH`JR1a$*q(qP30Kmh1PMwh zIG(W^TMg2@<=Yq%qjUzL-gLsJYdyB}(cT zn!t7jUTDp7YuEJUEh=S)n_-KC>flkqFX1S?bK^A9rL((x^kw7hTY3}7^+$0Gp|DPs zkFU+^Wi2L?glC!);!7G6ZqO7~mb%WU9f!dKYLTz;YSRWtFXzfR3UlxMiD?`s9^M*e zu+Qc#S;?O94P6(IQ>Q`GUjoTQ{||si!{3LPE6*Tyg<|Vn6fu zTJACYrX5LUamsE<(6MPq2;Istny$835s-o!6ySa3P+*5N98h`}TUDPH6u3LaA00~c z(dU>xZn=8O-P~Wg&@?&N;HvQr@XDaBwScf%Z7{10?qQa3Xf0B?6h5IPt`SZ5aeXXC&Sk6Jh4b-KF^kC}JWUBq5 zTiKn_tx0Blc_sX<+JMERYb}yV_naEO;tIHP73{_bK4`_Wx(j+=44f>POu^@ZP=J3f z0QmFPvV45c4z~Y5iYRb5vKAUDx|6|I##;t%cK^C<(UigX9>-ge5=$a4dfigm3)iBhlXk^*9Q$;N^T1Ee^+SW zT5?l=q3BV;1>}A!*-Pwu29t$~=nDj&RnWuNqi^kMbdc%pt=ib=i=b4x7~YyXG{3H{ z#t&{xMdGS(t)hrDQycDx*5cbE^43;^*KLN*N5{RJTH{W_N6Wk`dDqXQs%&WAy&mS% z?!Q=S==tk3274r2HRzR5Ur01%4tC$Ly>Gk$4*K`b7Aj0q8)VeLEm5kqy5NDiz%7UA zAhT{FZCmy$-$z+oi&kBvtkNu4aXOML9xB~0QlBd_9i(hDjFv8;7ajRr-|QE$WtD+f z!7MSV1-hhxpVKYiyM=($K%BwLLsU=!VfdRI?_FvphZB(}Z~%68fp%*XQ-?hlE&(S? zlS8jE5tBoXj8(5MVCB%N7}W&2Wj(e~oxjfu*Q;pRXtJQbPo3%mXy zobxRJA_srkdom)fo*Yf?z&CguaFxO3!fkM|4EQNdW8EM)7@W{wisq20ZCM*N^Z7)3 zMK{Calr@a(L@l>gTbF;mt5KGXibu6+hRlNQs66kN?)s={d0m7d&j|BE-PnXXKfL)` z9r+|d^b__IB{(OTGUY9~aeRmxlld+60{ILigyIoOS+1mxCa!Vzc>1^AFz_MnF6?-8 z-HjE{F&+#EUFlLN`h#C^$%7rRV+LIjKsSA*!`5*U$GX~=OI*n+keGBDuv_pdREC_1 zD|eLciN^GU&t3Rr5GWHw@E74ozwTN&q{MoC+-vo|YRpK$uEgrXBY)#RsVC`PGn4S+ zFoRvvm_aZ9l%o%kw31$3hya9K?AnI*eKKaYJ;CuJphjlYlD z8mH}yr`{)JKniHfQW9(4aUitSn4Zbc1s9A=iY(b!$?pg%N%Ed+(>f_qBgxJx-E3|g z%baiEdT(Dm)nHuzoN_VbO4P3Ob@AQ@lh)3vQ%ySm+rHm>xBeuc;FvF-Kg zGL0+rmNHs3#a5w@7I5$f7qFvU%65tSNr_D*fNA}uqK^j?5c@w>0GQ0`3R7#|?hTx6 zmsCb*Tkl#mh}e-05*$aM9Q`o1uNYG(3hUszukOcjXoZ# z>y?qce|xG*>m8nd?BBacy0C^HR9VF6{Qe++*$TPF2ZQi%r)@Pjh@kWR-l@ccrKwcA z^L-b&4$3!W-La z`_A3mg|_cI8-fRT$LWQ8|Lf6vr#tvN%LX8E9kOG&ZG_y@`1$#@_svCA4D1$H-z^fpv!Z5T4Tz__HIVTtWu z1-94n>~8NpZ$w={r$FtGg z7u43&ns)r1=;YL*kuw0)X5|>FvRu5d4U03e4N0tOB1hev5_shrSf>DOVH2K_eB>-6 z)&*F5*e@ z4I+^J#t@$tG9>zYXt1JvP?0pyF#|;48%ILj%sK9^wqh)@o$yph3ecopj2LpHmw8F*%itosbf0wH!i|7tQ_S&nU2E(J=>109(&V7S zOG>-LkG~2=1ND!E9rI_?(#_Oviiubb^>K?qgam#Mwe^dH68!|vHj&}mfKCq}0mfc-ZHo5g4UlSw}9_t(YcN5J|kUdt=55sG{36j#6o#Vu{l{dBW5Nu@&Q ziQ*1t!vBTYzTf0|0&0Kn$g_@{zuS293$Ot2^tdN*yaiA^2clV-cx!80W&{VTytj{g z`C#;@J*7grW|&)H``FF7>E>mfdjn2jNJ`dH}Etu z7$*WEmW zC9`s3AyZqWq@YPXcXwuFXF}Y;y1jn*J1Wz;M@{#4bepy4oprm6evJDv!JQ6%D_TvB zqo`-&f@t5eBw}MZ#_r(#;$KEsb2V}Ugf@v-zbY8XT(w7gesYa`@ufO0v$EQ$AdMlf zkb^O5S_mcnSfAwMAjiBl$>jYQQNbp6#j2NIT~%SzYa!$FWT>;(sD^;|aES$4=oAB` zB*;Ma(gm}*S^3GMf%662a;4e@+(?ngtHi-Z%20f-)di;(MsDu<^pUapQ&Cb>;Rs>T zt6dJO)IfZT-H7y69SOCmDUlw~%CV#xb;ln-4J6#Zwbbng*w_Ak88i1lSPTq6Sm4TL zmb-m*t2K7qB>nh7`_Ns)u2Gc$?(Pf~bXInGzJ{Lkl+qaL1_bs}*TxZ(wK;|x2iBcC zuX)zcat(4gxz?0efWvl#H)o9siM%ckXZAS5k3HW6(bry@P!?AjY{Y*z7zr?})(7nQ z`=1v!Ow%RA+=kh#(+{G;mS$!?Ce$aPr&VP~j}wijCz`3j6s!$kBLod6W|RPPzQ4H0 z%&urHD$3g2bh|y>I7xDG@qnj!d(}R@yV!ndbZ=SZbG4PqgmHs5tb%EwFjN?Nd;S&I zr3tjG&Dh)loN2Al<02fckiz}2{J*es1$1d(R z;JuDCU|8>_DAKXaBjWU~>D9h+MkhTv!I$CPv4W$cnfaYt5ifb^1agfV2Eo;{`7s;< zkMgDSlhjsfmy_=okS5qQ)MkM#Y2Q{FpvzTrymd@ z_{O7@c277e*m$CAC1YbHC8Hv9G@Mr{KU%G>KG-|5GZGG-BuCw1-Jfxy?P<>=KG)}v zc&KS&HuOoOAZEbgsIN7F7d^8>FIWT%w5ExXYO#H60zmFy$0Na7S!Zb9J_1vom&j5B zPo*ptlt14MN6BnZNN_lItFN7c1@)N;rCXoWu3Xoc0F%5~39O6&$icvEX+xb2OxGGV z*i`rYL4V6|Ar6ziZUNZ&OPnsf3=!s79cV;jwiA&5XsppzcH+m`e?Rb881hEkcxv%@ z3=WLAPi$>zCKC#R3HGz1p>P4_5dKNWz=C}AfF!=CF}^CSan~B@M^rumm&`TE+a=iz ziE4k&jZgDS2m}FuC}$LFQCzQ9p3?3S7+=Uz#CpKCopP?9$puR^+~n=emS z)ytq2*B;;7H-$eA+2>h4@ua9si|%*@V9K zM>r+ls{|(nkJ=7mNW))P;_zDDbs`|J-NNGW<}0=HfrBi7TS6_7>bCmefH=b}eVo&$ zzadM@O`sl0PEVj-Ny<&4K1xncq5^*;MLrTBKRv?yD#;K3cZC_|mqU&j`<)VoSJwVK zhwjX-b5exb^W1yO3wWhz(e51(-f83geztRcXU8{Dv}(t@9(i+QobHEFq}xxyZU-Zr z?uSsM+e^`G3qzXj2U(=sO~Gyp1Cj3cUZ~qi(QE^=pXPU8sM}7#ZUZxr=66x3+e*=F z4O5ubWOq6mySXWIo zuFFqAzioKsMmcpRJY*# zFi66vmgvj#YY_I_vP<;zfzm*=eQigl#{g!kjb-P=9MiPpR2N+)!%vOJ ziQWW38p%*u24`V(fBEZzeP9_OP#7-!$k%B!^H1?V)afW3eFu@B2HdD22`5XDNKcLE ze8uhQ4G7_d<7$EpHjF9}E5vrT@xK$}auE_-3FhDuXDZdB(2)3uUn5g|j?*ms2AmSC z&~3TFiZ&+UuSB2bq7UvMw5kr~AcRHZ*FuQe+e0GkNa~mr(#VKfD44$>CIQy2@-usw zUQSZh++RQp>VCa-m!yaN&GmlohK=v#cD*XAgGW0@h{$;paCPiZZFGI)3V3^krZUk5 zz?HXSc@P~3_X29S88$%9OuC_OM*)6M)!49ahxQ!w=%pC)UFTjNo~l1EFl630P&wuz zD##0PW%-SHvK<6Z@rj!Tvk1;Ri@YVvgrcBd07q8 zAxS?yGq6~$4BiFoH3=M@$p$T7>%Lvy-{5s_uJf_Yo&5Cb&qFDExa*%iNiJ6cSg7Jw zbN8?KB$%n^sUS6MPJG2JD5NmLs&)&*>CL53MlWe3a|+>IsaM$XsZg-|oIk-uPbYs8 zrTCcuoqal(JjOs)lP$xJQ<@?-2}ZAHXg{>oPln$kXCE}GJOV6Ju0 zT1zS_E_tJ|x%y&8*3tUnTu|qqkiY6HTrb8M4Mz%v=5y36)fEeV4|QKrt|fC~_nFZ= zet<}oz-d%U6>pebHLn6bjqnJ}u&b$NvPM^)=(@&Ibz{04=wy1?S)!aTn__CyBu)qp z&(Cz-^8Sf&n`G^s2Ury13xDQcl!@v1D8=6IA1Ab~|4d=TxopHw1m#`9#E|bl(a6O~ zzB?~qd)spltE!J#C7*TO7AnbkN?sLB(~jh7OwY82e^sUjm=`a#7exNtQ!36$tzGg? zlB!Z}Us;T>lGM;%GgsFbH#e#Ia2>61W;epKPUDO-Gp3q6qd_(07Vvo1Z&iWa z%`*d^4Ad6Kh-jh*<`o(vPEyVCrSj|mV_$^T7b8Gvjy}d)jXu;Gw?1T;wCZ?9th+xt-S6SO2W`Qd^lWuR|`t0oM2W3hgKC(VSb+fKKm z*ieQqAhBMjVzLCB&EG&QkR)_bIL`EW14n-o&>jR@O48@XP zcm&}n&crVwjvNK6<{+J@}=^bD5&6ziLy0Aq{nMW8E>Bk-xT zOg8TLvm!dqa2~HHcL`mX55W*fydl1aX}nRFzF4A=WDj8?Fsx)3W^42C*CMdc@7~wC zo7so-B#FL2akRrAWBfkUU7C(zKoT?51aTm0Lvz00NWqn9@}-ps>OPl!+qagSu|SO? z&i>5Do*X?JRNHf_`YH{m{RyK$S39I@ri zkYU4U3J-k5IoXoE&3AL6c$Os9cG}B%!KumHCxR-)`SPmrynTFqeqgM9afZO%x2~w= zeM;7@_uaD53manQ3!LE~5UR}AOdlS80N6N+t}WUjWp0^hWe*M6Pk>-k_MtLr*|Sy* z0732j$8RO;b{uXzd@}xecD?_0wR)CTaQQP*v@-Wx8QZIM{Tbk)F2&wp#zRxY-kyd_ zy0*CXpnm=^Vik(YjUw<>#;;aOS_YAa{~BzP`^SMVH-d&=on7Nemd4X|B@yp^ZS4!L z_ZuOTlSaMQLrqF_5}pitc+~a__RZ1pQ(4R*UCAq+88&9C`ShCk6TlfZO1d8)3Lht^ywnrK1bh=ULQ844WiQG^5j zOdDk}+7G#PL&de3d-e+Cjs9I_bE~`!YJSyXP?hh)6VG${=2{e6qZiJk z8+pjDlNj2YTGcT!x8XXkEwg4$Ha^rJ-9NuGi`QBhEzATcvr;QiF+m&?BRs@uq0cvu z@Ei4-cO)y0N04kr4=ft7jtP64aGYE*;lZ7&`Fn+!!y~Npqp!ixsD_Sl%QWgkzt)zo zmTVvUO>1Z8pyaBBd7dUfp@Y#^Jd;=;Hu6YwinBMfrC$;Xu)wiQ!i>|NErtpsr=DQY zlymUjxFXaZHZo+(Asexajd-;Fq>;{;MkWEYNx680V+}8VdF506L^ATqk@Nsl=ESHP z+6@?;Iuha>P8URfB3T9D4`YPO0O=_-mdI_MrIT_4q)^u_qW=EpIwSo;!+69mr}2``5d^`krMWD*r9Mm=f^Q|we%>eS+V zClt2}`V@TNCdFA=lQwq5rJ#V?o5zezk@BpsO>Ml^Aor`k%vSq_cE5MoHMS^?U>Ajz zd-=KbSU=gPc~3vtKC@IxiDwDc^dbp%@jbJtB>QwV=|ty|81Vi;7HQK5Kz`4naw^Y= zvPjbtGEdCUK-C8kI_h0|Yy~O$o?7X5)_uO`8Wt0)+=a=f@^TlYR zG^rD#IvBur=P$?6P8ixdqf^eWzj7?Qb+4O^cl>dnEsT(F^(3~7 zgGhwPP+f>ouJ~mm6qP>Lb9f|z$cRzfo>rOB+C05McfJw!WJv>*BSSx{RRt$FI6&?+ zwUzzzkwrKAaGZpwBzdeizl{;3wAxPd=c|@jQI77zx!{OP(O~gI?~IJIQdT5n4fO<>TDDo_O@j?Itv5@OG#` zQEsrCvgdpxDF~G!P1WQmO2&=yodC+~EjZ*sc8mst@GlW!--ly<3A=3AwIgwpi0nwS z?gXnu93s`?YB z*3q!idL$iOHhWkOxLzSee^ml7;Ot=on!9Nly+m;o2rDZePXfQ*}!-2MWO z|GrH1=QC6oSQ!4}p(&!FV@Vn|tHS7mo39l6a$u!M2Llq*R!CeF$Nk1}q#$8EpFq@d zt*k9)5)O$sWHueJw25Po&#W-!LFt$d#?D?GC$j1=PAEIosj05kUFtBD8dNt7sq7fi zlJ0kUPjBmAC}|6G=A`?SB?{6}M%3M-D09LDnppva&g!JhKc>Wm^)oUwGtwtys$E#Kg1?16qAdmIpx+cE@5G_p z(0wy=MIzXUjIoW>B8(FpyO5?OO`}exWKe^!W$0E64|N@sx(9BHKj{h)L-S02M@a8Fwv4_cTMjh^UXU_T;EkKxfCm(gwyTJOF#0X1<`S5|Uc z#4eJ`Z;+#eg9GE!s}BldMvjTGt9Q!hOEhvi6un0`{YJ!6jv|uJV!o2#xGp8#5Tl13 zS`w??Z^dTNOJNT1Uw<{ zupkz>XD3X#B)+1_RHWR_f?ozDeN=a|*ZQd-T};kK7@m#Z+x}_Wa-cQ*s2IB;FSUC> zps<{ugms?S+eK}eWd_=4IaXf-;suURtrcQ9pU;qB2pLWn*Al@wJJeOb%6C;CT@Wcb0L8RtwgCPffLIKtTbcpRi| zH6!5`P)Yr&Um_BRV6TvSGWECcSKzxdKSw-)Fe!Lx3?d0&3YfE_f7?6VqzC{7X8sv8 z4G$(8C=;TKiGz^Em;u~?S55OdCJ%U5l@SKxJy%QWsFZiBBC=H`Q3@#aCRnh*%>X0r zrUxUVr2ChU-D!yiV+9UO`L{Grh3$+{h3-ITT0crOw9@or%rBOGppDNUO)%IDLhwy< z@$XTuhVfPS>-nOI*Z%uI6a@Ifv-czM%<5Y5I9rB!;x$rgAyQmhYQG#elgusx2qfR(#51>|PhktMFLn65^PI5&QY3ypGN z?7$)ocCgXQ9g67Otj)c~{H*Z>2af7h*>38B)xT$vnOpBB(s~YFCY|(24S55*e#-U_ zux``g2GhC*J5-m2moJ*fJXWOK#XXj!bJ8Ap5D0b7;rbL&rC0`(0HakW@m8cEM&B*8 z_J}AKumTjTM;g`@+eSoo*w(WTIYQE8*#TGI^dL!VQ9tTBkjC~9dEZJ+(tm%AbY7XqPjP+|y#RgvW*`DL$ns2OQ!NpW8OVduqEZHu|H@7mq6&Nm>TzWSuy+JZCe}3XsxttPLd?lAjyDJH$*r{Mq-Caji$V> zK@(*B^b5Feeh#oy@-s}(aD;lRLkzeyfd}a_0W`0UuwneW@BiZK9HNBbfi~N=ZQHhO z+qP}nwr$()w{6?DJ>S2WGqad8o9wboom;6VHzj;dUMd7WkR>ldDjXup@gjEPc!yQN zLxy#Wj5?xN{E}}SUV4B$L*wjpny72Q`W8K)rzGvVY(9<8KkXDFOKmYV_1vzG zv{l&piEUt?QF2vv0y;OV+&M5qh3C;v^y+uUlu{;2!&T1!qGjS`@dXvI--1!o7&CUU ziFBLg75xRc#pkqy4X6KTxt+vPbR#;#Q$z3cKWhN-wKku!$5i9?#{^YWVXjUditbbC!?74rZ3oZgWv`XWdXc?9!>CWTL5 zDAj4kC6|fG{maw9f0*@tnj3+^~z2par4*3E+l6yqHBE~>TWG}p3SPYFP`rejyJFgJ+o#hokd-K9|!uLS8 z=Oc8*+4D?lV=_Fwpy8uM}aQbJCFa`>cvHL!TZ-- z4_{;He5hM_Yt{6epwd2%u3VGJW_NHc!uTyi z3B?rY*{Bg%N&6O@oSK`3T^j9GDPyL?_C0RpG%)cJT%~zu)jDzencSn}SkH0}Y zD@3s)46B1=<+UYAX4Y9P*o4zO(lc!ixS-Q6t6gAW=++k@*cqcO&GQ9KiN8n|7SPM; z%3&I(c=w%M<~jw?Nu1bF=)Msnv;(HW&mzObWcy%C8pghQ;8DH(8-}2HJj0QV-sjNz zkOpxMJIF5S!ck(ak`Tg)y4;TuZ=4Bf0Vf-D2=~vV4k)A?T5V1=O64L3@JK!d)otnI9{^$MFAJ=HMJU=>G?-{QpPm{|8n${x`ib60mWyGqe5Q z?6REdse+=87JgUzrN`=~(S?nGUQm^7rvieGgzKunP*eob)Pb!j(xNz^7D)|sh{i5b zEat+3!Rsa`5ho{C6gRez<9LWUPJ+d3cF3eSA5mceaTx=<^VCJSU~)SBr|i1xbk}{i zQoUE*g--zRE`W(p5+i$u+e_}e&v(#CCZ#4P*fyiTCAp3PJl{%UZkUMmWju)$uzv)w zIGfp~3EDPZod!%{3GkS2c0!-If#I+VfPhDFDx%@sZ2phjEfmNl8ujX>9V*=3om76k z9(v1$mO?8>0rjn~p&9^c{CI9=0<5(;V$V-|of32-+P3hm=L@jOk4TSpn(iO$I-w|( zH&4K6o$YN9Q8{u=z^?H2QQJpn8}>=@ClohufMsAK9tI>%j|Zy1<~2o2Z7Fnv7!ZBJ zw?q<&7*aQAuTJ@3k4(*?Ac};Px@tRvTsn;00CQHaQU}zzQ~W~s_Sz2%1VSswEdzqD z(_4u`0%`45;5^^sw-6$&rx()qU9~OQf`wOf++w#4!A%LSicqP_AlQ;emV7cr{_PU5 zRY~}BgkJ&KXJXa`qihKzO&+Z2FlD40FfcDh0Wyd%hfA=;IczWiSeO70Ot?q}M6w~2 z$pB2@J`hC^X#WsFTrP}_o%PXN+qAzZfsh1)nvPS6qq{F5VHUmUa}XWcMt2O_m2 zx?fEBgYq}b+@U8`xsaCR7O#|-FhYnBP>BE_6UlLfAZ9B@1QnIV2*dOU%=FMj2Z(ed z$W#N4`o1Dh(D*%vZQ0K=Ua!2i1*Yw2u8OR;B|e)Z)+^QfAO~AmtO2nm5U!CWO=PU` z#UfZ*4EjBhv?#ug@I=Z#vBt(nGq#x0gw#iiCJxdE)&Y%-0DA>Q+7g(_5=xfT(Z+{& zbqd3s3xb&fo$FBI%A_buu9F7A0zgm`1|f*&Pzw*xPXQ#7Xm%XnW<$8+0~sGGJ`(&1 zg3M9^N+G2Z2^+vwPH7y|5)PTz`Q4xNR0*{U1X`rCjy$$SzP7NpQ)CY^{VDb*%|l=-(%OssT1t#ujbpDTjyNrcaQtZ1ZBdr6ai8Z%sLWE~h(aKAeWGl7d6~0UAO9Iyjta`Jmr)4PD?9WCosb0HdF@NI(Mb@mCgE74^ z3*#onrH)ArQ=c`GOq1mN2?Hn=S4PS*yt2G95al*Xb{VLpP|O+V=^3;J2{ilYStNrC zlMVCA#+-H^%a1;7OB25m+9sAsq!n7KD)sq5d-x8xTh8~k-sl|*ee3!Le}li?9o1yb z|%HfryrNwQmth3aO?7TsE!C75`vD$c2G1GgWc+Bcdr9xK|I=_r~Qny4VRRyv#xF9x{^ zR1@_ZvM)04(w~MOOWFJ^OgM*kZXq1t5G}_z!#Kn^Xd=v6sP(yZuD6?P zH+$V}He|yEWV^y9Vg4E=aoMLS>!BnbThtn z<9(Pv&Q1F|M}bxn1NcbR`G^h)B_$~%9(gci}PqI-Xiej+L2uj*T77uWmt z75zs2X7y?Q9g}bEQ---oo#)bv@G)BWcV@RK_AV75I}iOmO~WAeH-YNHnhl4zSts># z#|Qp#&k=vWefpnYeEUCzQ!EI_1G_|=E}}^adp`haZcsFSSxtzWBqKh{f1e&iSKL=_wRcR6481M zO0NU@EMR{t!UI|a#9;sgp2O!hQo9TqFce}A%>$XifJ3_hqsq?XDi?y634)Xf%j1A6 za-e!0Sl=_53G+_}{&E0=8PI)$nGXr%fcB4aGGIVAAQ&xx2|MzQ9PnU-iQZGu1t4}n zh#e?lL`FMe#*7(BjHV`pRTJQXEG5SN~x3%l#AHo$fzkKbG=KUVG&7to|-XzA$gmJTo=M94YpqE%_jr|aIi zb$c5AMV)(V{I&aunsNl?qour;@(J^N$I;)H_A&i2`vF$hysPy;w7Sw?z3UkJWUp)e z9dKRscj$f5-!}M(#Fpl2f%NUb1Z>||GwFbpK5}bu04KT~fp#85(zE z?e5YYuCrWgvfgsN?sDVp?%Nr#vtVz+-jcl*;Qj~Kmc2>n#>~BJXV>1K{pj{hy_@I0 zkLyXko9TX_Yg%D5+x>*sLw+~v{lwQpe>eX11n5(6*Lw%g2SI{A9e!WvgMmLQexK-r zflEf0FEh6OUdRN~+*PU^5tsUx3lT|^a+7i{s zq*@cD3~3dWRaI6gl3Jpqk|m{%NhNJsjcJuOsn}^%H>v!z0@Nx&tGHKnVpXbDyIS>P zRlIq9%+Z{yV-8mn*gC629{(BPz^Eq^urkY|0X0=XSQ9`15qLTe*d>U?5+F8@ktIL? zBCKoyRydEOHF!3U)fd2aPudddc8}T;E;oSCO2+d>|CIgf+0s24Sm=3i!AfyQzO@MkbAUhsJGVjBn6N~IC%0H(ki((|w zgF#6&s)#@Z774*1DH=gQBo?1^;FO9>FFpa`EGwBbHVwfcCpOK9K`I{AKqMoJ#4`%P zpbU%TSWt#RTQJHwC-sWvYk+MVrdTTHsgL%n30H=XcgQkFyCe9Z0; zv=Z`E(>R?5eeBYyFq;s4EYqnmnE(Rh3tU?3yIEO39^Ke&Lc^$PA1J&I8$j z?!dn9IS?IS{#n6S7Jr5OS;AK;f5rS+GfV%G0_3Zxzp5_fSE_)1arGHSx7scRz^9D|D8ne5~Vc$1yr9 zdzKc-kVrNulAQsSXqFVo{6ID+<7Sthd$#R*`_cWemLcRkqyJyJte02)c{q9ch5t%plOApz;0R7^`TfQg%C$GP+ zKfS*_)2J-Vl5F9Bu-8aQHcOHnlWfT((}sCxnt^$SCfV35TjxwL(gmL@K4*Lu`KTl*L6H|&@1G}Y5~H={rEZU+9e*7Gc^V`f{S zy>n~G_M**6d0T~jM%JBqTZVmV#;rX4+_kiOQun6LajolW`{fqwEyjCw#@*k=|8buB z4Ae_duVHN&`XS3RxR+2b$bB;VTGVqvFDCt%)SFVTD*d$7`>f|_7qouhYxE0$)b&Si zB{kHMhuz%NR^#f{`*!!s1__RCFbG_N0D(XvVgL4aQ3z76FbGV@(LJcUTe*O5G0r8= zd~+7X9U^UD`vZCxpMUQy@@?7sl(&7ArRkw9LAD{)RyNzhdSkOKPPS>Ht?tGyeI2hY z@5a)5!_=*_%a(e?baWFNcn zSJ9ryd78~tpH~5Xh4@8-S5clgf4_5*RehS6e$}o`+or~^0RK|_v(c|8|I)myQIgqt zhNpQ)=jE_xDDSS+mvVouC4vX z_-hkId#|pkTGrWlXZxP){ETa@#Cynk|K-ijqkqeBpl#M}N2efc+WyhlGC=e;@uC{3G~>@K?b&1<+Rke=+<8(N_h3Y5WD!S1Et7`~}ljEg$*@>L#)iVH155 zp9_NvhYO1fj|-CvmkXIIT+#zM`2lTpbV~#N&H!q6^wR?#d*4@P6nq^4--y^JB=&)^ z>;Ty&NWPJhZ`kY|C)=2=>kiL<$Z%FMOOZy0WdVt3!_+uSy&yX82^hOkbJHq0c z0_U0pfIAxFnh2pADsV>x@R|k}BgRdggc;q67UdkZ6 zh-MDKA)|82aAc8>irK!=^2k7G#Y7-Ahos8DL=ll3VyZ)x#DHZHlN`G0y|5xGKhlbb ztD^8SN@P)5#SNWXdPnI_DFYyzAel{AWCJMKpjrkDCj)5PpvpSjk^#6(c>VCVxHnxLl!47vfN4hZQ3B%0v=ZV2iIpgN$c_pxfit{TAX2DIL>RtMP?mw?s` zczvL;54_g__B#Kkia@#l&*_|5h=I`wz(vCu2DL<+DduF!H&aHNDFxLDiFRhBn-J{; zu`Ru6iFH$gyV+;b$vf&KNTK0AY|VkbII*1 zt-tW@65Ly0e+F(pWXl=6>0oUy?O)tGH~$3x5%E8p-OlZHlD{3|?ZAF3()VP5KP%)( z3crWI8!JAC?-Fi5$J;6CcFDeFW_Gls8%^a5%ywqJ9k}V_e>-C2$r`?HJQb>0Z#vM> zlE${=wJmdPiDa8cs~d~d3AT22ts7_za&`nK2H5Jv6Ae)$KimIiqn7C>Ruckyc zrESx`aU7Z2ng=m2WYQ#?G%YP%oWP{G=Jv_)n&r20U$g9vyRj%xa(EiU*cCvZ;W2DZp9*DwzO->R4t0pj*i85{x&G{wYX*4%u4>?-HhB z&eakOvjMwk0?)n~>kQr9r#(V@iRK*LO}d?AN9if?8cKI>EFWofEfLscnNxmXobRZtS87^(uPN=fuZ|CvTv{}j9GE=!7RYBTaQNwzt1nO&AM z%Ph6W3`u4Hb-^#w<7YgCSl;brsV6pad8?;fZ#(kyP*!_^PZ{7?7JGqi830+Bq`rRQR_ay!sM6JAFiWYx zO=5`=YDN_t)5vDJ1E5?cSKCsxwVp24-ZsFgTRqQ;U0YU*YMlEyPGvwaN#!b0f`r1w zC)IPtn_o;~q`cDa_CSC4^qm*~Hr3|GN8~T>hnFgd@)8*LX#iT4QCb4~A_USZ1cN#R z*pzuq1Z)ESfyybON6=5!Pe`AX{%`7-fm0|BDY;~V!ZY+ctw%~v*t9X&}pp?4{swi>Or!zTkI@s#Wqz0TfRF_uW?|NL=B+nGNfE zpo`Eax785zqJGJnBBq>_ddbydNJ=7KqFsU1^CVp-Kx>iwY%;VWquP}7vD0!a>!S{5 zL{y`)U7B$PHv5#MC&0?l)MN6aa|NON1o`osf}~y&f68B|7n6RUpaze3Xi5@i1ud&e zy7z=uQ#_AI*u>pG{D0WT9GK+xNqfodIpCqR+v~^70rC5tzF2+#nt|8`+}=rDhKlto zcKt$b66Q(=0g(hw&CHA*5sYN+WsGZFADt5)Os$zbGvgVBn>vW7ub5`CaE^rb8?2t} z|1dYKF`%71&(Y1W=Kn%=gl}v@pZ1RzCeUjv`1(UW5c7o5X@XB0kh&c0t@j1jVd4w- z!rbVuM;-t@F!}(y31My;(2jr`K3U9X;Tw*9=aC89=xjoZxw2`9sq8aW&w5 zGdf}WKq=ojV}=QQaKC)P^McM8`gU)fF~$ks$zlfh-T`^y6EVilW8RE^8D1p@*Bsi) z8|}bPfA@HW;1S+6Prb-kKBBkm9R%wF1abe{9ONA_D0_}-vQDF7&SyHwln&~CiuC7k z%G6BZ47$BdXD6`q8Oyq(n~Ph0_jg&9dShGLh^oko1V_83mDRuad}1n%oz6m2r>mf> ztBFXXK6RQp$!D)<*vCD0;sU`l&ZJOVy%1ugMk3QE6gz5FQBRgAAxDf<7Np{07FS79 z!(wVy7M2Oz%+zXA#+EwakxFJ!RjKBp$|x_UVj6RC!7$HY|kleL2DB>>6Gu{v9Z=eMn&Q!h~zMWci}Rw!k{*y?tYQ^^k!`P5iP&s)7GBzM;@7Mddw%MJn%(LyCp(ZKG+#|sX&n%)PEI#tlEiid z;Z+aFdVy9R2YJMa?O@v>w5?Adu-4=+6RhVlod`#KMLmCo4_fQyw{3#V;>3eaXl-Fa zf}TkwUjgW)>NVtNi%-KU?vpgIP0hd111`=z_cJ3KXpU2fE7+GOYhEOz$g>~8fzP2)cqI|J2zIwUn&+U8zr zVZLGq0p;i8Fdi4Rdi*Qah{vC<_-&ie!@QU+Wvyi;ArC`W%)7kWm$GTf z@=;srinaH8SE3v_KilFSZdLUVO`f8b*^6r#yRo%mjPnFU;oTjpm}WQ}slcNf$9R+h zRG>*Cttq7>UI=%y92qw?`G&s)AXY!$?-l7CcckV;Sa(l3~}%Z*p2qIN7eyM>@q# zaW~=)syw}Kc^PbVTchI3u)z-nBTUlDI1^A`2+9B#lXIM5AWGdFHFr$OlF0eoQUv!%KXUwj*HX4=OETu!xlx8Oh&OG>#=^1VwQoe@P zu>(qKR38#NR86)z$XuLH0+$)4fCP17izRpk5*#>xYR$btpX=H@^??W;nSKnTj@l9=XyL@+eF8IRC zaC8|e1h@>)lla?&HoAT1_Anav%>)0i_c^W!{;6(CTzBE))6l_0kL=*M0Z!vb97k{? z^F7TUBM3!DG(%j(hB3Ag=^>&BzES*4ytBB04nl!H+k5r;9aV-9vkIdHvpO>&&cf_6 z;Upq%1cnjD2WNzpA9hSLal&|<3EYFHM*O}P&2{s*qa8HGHx-6^Pw3O9`93SxdV3sNj@N!9E{QGB+UiEeMZ1a%0{eKrG5O!zr9_ zFfW+RGI3Bu!%X(JRLxe{OY=gw557!$6~qcIB`lAh>)kKBIe@Ip--pa*_q*HO-fr``H=7oK>>ylF-2w=_ zFs92bL3Q86^Ax(G#p3E`=@{5c`ZU(So$6gvxvz&x=htq=Re|-i@j))l_tfPtkMxKC zG?!={+7$TZ*G~bh#OvnL&&C}X{(cf&SK&qKzSKKAri&1B;BLIrpx&m}MRPEjxJ?25is6y$6N6VO0j3dOY;%0UHvjlA!8 z_Rdon+;(T&Z!ZF>7x^#fF6!YA+G!j9yr^OA#GV7VNxWt_i4e~uS}?zuZ3wRe?uJ1! zM17%H&an>7nrvKVMdU$vs;VpC8Egq=IxTGbmPmM46fF(%V1M7V8aTAfZvbA4Q$v2O z-ssrGGQD)MfK~-dZ)rmL7OvQ*l+JA*9J?9X-7WRWFRbV>wj^Zu=q~IGsXNIoBr%il zHkY_E%zc66!CpBv0I!huuF6aD+a;T{i^?b1HIMw-=h6SLX@;nvTD+XIFY=Xf zd!mDmb?M#8}#Fs+jVEgpL`aZ68Uv5)1K{iV(HIu-v5$JoX|h~0P(i}AuJL_5Cc3+J6}^g?aS z3a`6>_ywzRHNWG%I6sl7x0|C89tXGx3qpRb~g7_`0Nz_CmgY3 zhi3b==$0PyhE+PqJ^Mspc~z?PMr2dqAJX}g^QgCK=JK4iV7A)cJ$tqXbl6xkb|Hwv zZAnna18z8_NU1vN1iWjYS8WLBmt*OJ^=t6GrET%!lU*6FnMp-j}q~j_)vD-{XU&!)=-Ha<5b(_ zQx*7QM!qNFc*rC4b>6+H8$QXD;3RXsGiN+A1%6m0uiR+Lkm3Z#H#nyYjsJ-?w=-Yu%Ygv2+@10NB7ogk( z%v%jA{)gXpg$q-Vk4q*t3H%{{Fu~}?;j>fATh@-EvArXjQQbw2UHm-7##x#KnCIen1LmJ6N|=A-4wz~K1{w)ZeSi|O^3jI^H6+VQLastwVtAR^ z;BAK4Zra^$Ad2Tq(+ip&+v=%m_=2EuzsFzCjxI~$hQ6!432mS0+R@Z4`_Y}iwV#5! zcb^0Pdjhi-(eNRsfpz3bxOC*2w5d0=(!y_I18vVA7tpQ!SvyFl936fCE9i_q@1M}RB~KKY#vKZXA76*`#yGNE zpXfl8?p)T`6$FoewCTWc$d?Jidam2t_MCQKIF>ti7rzb1F3fVrrgc4r+s@zS|Gd{n z-R@M261hX`To_^ZzjHns2h;?6iCfx<>jb0SCC8;)!+7>GPYUGI240-mf&aq8Y4U}k zmq2fZJN-{;?=|%sP;mX47FT!VGj76Lwc$wHf8K-BPYCwgo$p>Yy)LMZA{zf9&U=`zH1|$e2j5SoN1(xXQJ66!_2W2DY#TMhY6P5YO0iZ*gi_WtxQgMMkhriwX^|1HOR zPe21CER9ql6a+$h5TOkVA`B_Hfu0Zog(9qh1Sy3SXc0(D=*mKHs3?Y60B0y>pa-=U zbaFpPIjv12s*J`|p)#Q>1&C_c?Th=&*B*jC8vlC{{*Uu5?}c-Y^UU-2&+2< z+B*OJB|1M~+x-{qyTYXY`4fdpism!BWKBor^a*Oj#J343PP4E|0p zyUjzVOlR6X$i&X#k7LecZjCd-T}7YP)yaVLg7Ki%XVK?#QqSQZa^rAKx?H^D;`MK% z$6#!;-@x-0#t|%JXS;j9&!a82?JLp6Ku72mtI8YB8dfc>PTrI9)v}t1w3woKUO~)Y z?&Dsi=cJwDg&5ZPl~{}E-2J=L9v}p1ST3k6k~Y&xRpu+b0W99gmU;cs6mH zlfJScU9_RvFe&^U>88UlhBdFxujd`}$2R}5(^CTQH2}|EhJAp-*%a@e=ug{Sk;*-$ ze;3oaW-O(->1@`+d=m{vbdqWz*zdRlqXscvYy8E#sp{w519i=UVBHgbL^{n7{xYk! zne0q{S~TGdI0CiFPV$X^?j^buno%&%RGVCqbzMW>dlJkplPsyRYQQy$C457#?G^Q- zx&4#4_R#oj?)Espcm&=tyDZjP{p5Sgy(yuM9ms!z#jYlQycX%_?-vD`A7*#iMepo= z-FCCH1W3a_cKa;v89lm)1!cHsjXG3X@%XTl_ZP5}kzJHHTwsH~5Dw$bzo^?#9@eBg z0{m3`V2HCTYL^?#me`u=w$JTbd}TA+g-efBUSZ9r+PxS04oe$*SO#M}!n3qVG%xfX z!{O^a$(&$P$UlTSr*lb=dzd3TbdKcr|JByhPY6y^!Z)K7l&j8>jo)8X_rjF>wEw~y zNN)3KUeO`Kt_Q---%nxbo}SOWak1T*&Jah=B;xTzcEgF=GuyGn7Ttm0XGTZ$ksJMn zyF8NdTOy3Itj%08H=()yzVJANF$>qi0bOHmEy?(#sw}3YJ!M@ri zJ_E>_#hwi9me4;i+EGZ_ z&EXXJu_xstgPWh!v+N{u)y~J|o))#c7B$R^Te(o|o7Ax$*8M8LB(uIrzxWbRf4t97 zo+@wYm2g*=;hF8lAuAl6hHISCx&gx1t_(Mf9TT;*tAW2>2|MA8Yi~EaKxXvQ3j?p1*qrL$d6meeb-%==oa0WPJ#b~rW7{t#n8v@f=67nq zfbr~mJAzgzQ|Ka$tziA^d(1=ub1mJ}X<`VQZtyt~0qxd@0*bEJM>Aqa`IXd7od6wQ zlv9xlCrn$p5Lig|cW?bMuhh%wo=>EY0F5P@ENvo(%RfqMMX@Q>3yZ3_NggX|N;z+q z`3A;%o+!_6@JL5CydMO6*+5aIVdPAS7;9xu$2u~5^;HunzQBQgP z10U7>F&*iZc?0;(rNP-m$VbW4+8Cahz=mSS*6vWdFc+<@xMs_EH4D*Z2>-*}O00 z@cbo_R_w+W#Qva|!@H$UhwZblVlT+v&uVAC(>id@r)@{p?iMqjinX4aU|77CtY#`^ zTd=lm(j`)|>oH|Kv_ zea58H74A8;cYkzy)`xc0J;T)|eBQdW2)F4A%0#Te4r2Id#5)n$qvQ?q1xqN`siCZe?tEXW;dfhxXJ3> z0=jQ#{iv0z_ABmIUxua8Bn@t_K;L3H{V1?(JHE0car0s7*XP&5M`E{pTyyLs)a#ojuGEX?Z4&BR3 zPMlTMJjY3nD^uZ~5AjbTwnFnY+vv`&JabTkemDS{5J1NjxJ#|X(KPKlhtzygj3{p*FlZSYHe5MU@~|&GvB4(Ln^Zf2b|6!!-?H1+37Q_r$K) z6ZmhTFYkd}uCHbEm))LwbYh{q}DpUQN^BzCCaEe*gGdZ#=bg>i~6H6rgu# z`HEdqFqf*LmSdg=;ekE9%zH$?y#gP}GrmtS=~cv2o+*`zH{bT~?C+8xn8oNJ+~~^1 z0nv6%>Jiw9=n#9%3yiHM3(LZ=ymicY^How4Q#5nj=u1YYR9C1&>1@Mg0ZVuF{_@vc zOHBO~A4w&lJo?kVq^uvWruyWunU-s3m!kRJ#XNISr@fUX|C|8t>F zyi-3G-I*G(0vk@IU4xz^y`KOGL!V19deqHoPr4g(xUXc|yjSngYU*C5 zcZmN2rqDm_Z~fW3JL~Me=D$ITN}DKD1^f=0Kl=rkO#iUA{fqzbEEHZbw##Mrx$5bf zoO=dYer5iceZo@uYt1*m6x4rP{Ij4(->>+O3jMwBc-_%~5QRiBgvt<+B!E))fkzN3 zjgl7U3r`vulZY@7kziF2l=FzVFa+@sQx~!{2EZN^my47jHt!Y6TP$n^ql`)q1C*<2 z|Le4}xAr>UY+_on)>m^sW<0l@XYHsv0sKoju!p0`>G*dIZ`{@3t`LN8GdT*!F4%{Wz_jc22uZ`-J&W1Y0Mc zq;_b=vj2H_#yE4LFskLL!+pr1uP!laq+d$*Z7O@&%Bj=mXHY2@hcSz>8K*FgsmLqF zbq()(KYK3HrwjXah)@lY?z$#gYZ$Xy>r7)wYwUSYn8$j%Xt!8lA90=!)eDZU+1wek z45S~%9MAd*7bxC^shk7g7NRW{bf+GS?yo6;hks`f0Q;sKunJMitleE#H_ZLR#X6k( z{7a(hke*4!+(Y5Qvmw_-_H3=O-DEXmWjs?aFkW+0IyIX(ZL^ruIB(@lK;k;b4Mjfo z2aEdFdMx1bPVWtNi+y7}k*nR}gn#J2 z8OdE|yTK|)@V*O6)-ZY%sGKSZF4qwGPhx4gf1+CV05i@V$ z+8mlIrbO}*dXqkf)JHclk_HoE>$0VA=8nx9*xPy{#qC~*fTJKs!@k;{YKQ6w{Y+j| z&5c+4?_Gp+Vj4)-5Z`n+%(rltGFh-{u8V7$L@YD@qh-4Ym(@H&?5)K0qH4?=<)64_ z{FzK5)?0lEq<`*puNi(i(x!^F3;wASpzFsa(5J;?300u5O^DpZ>JZ8Yq@!%{=SWRB zCnu-Uz$cXo9M-w)gqzYa8@uKRt{gWhJ6Eu#aIuW*D`Wk{`e|O$<#-}v=dvChY*m^@ zC5*3Y0Ix65WiPXjyc5}?8~)xNY47x!z=@l?WK+5ne*RZUesgluDm!<{`Wk<1QjuaY z<`dwgZ)vzQD5dd6c8SIgDXLffwJsA#ojZ6@znl~b6{}xA(}nDI+F4A3_W|PG?i;K? zwduoNezWAK)>ejbmnOV(lYOGjsZ!;w2>dSjUYUF*7CG;7@bm$TanEc{>s@o^R`YtP z&TU*9ref#FE_L<_(MKRYH{O3&Qy#)$T$+nJn(|xmjjrlReI_h=fhC`921O)GZW)&{ z-Fi&;{VaR<)Urven`xDaF<&sgo6d62eE7*uq`8KvsMtk@;_MCfpN7me*Gg+g#bt!k;^iF)%oNs&o2+EU1b{un#nwiKR8SE|b@9ya$t9pBK z`I2h)3`^o;l$cMP%u98uPMz!b%J+V@e>{~g^a%Ks<|aNa19~dhChu-CQkeflOO|Sg z3stTnIO06OBTC&sNgj8%Znv6NI|NhPH-+b8)VvgyqdJ$#2qa@C5&w;IIgLS$)dk6IbC{3v`lNUt%-eIh8^iu6nZzyy|LtLIlkTVuXLs%NO1)kz zo%mn{Gu!2%6pdX{e+kz+{UVnPd5v_}9T^v*oXIO$r-#sVi?}8G$GJ4u*+Ux*sSe^s z-NKFJQ+$E2e!*AKK=_B)mTu>BX4z-J>lWlnHx)L*Yb_47rN z84>55egkZh+jH#>>T-QValW>fN9t`WKOk#n$@NFT3pQuDl>6SLeV=c?Pv_F>P2>;a<#2R)V`=~TK$}E7Yw6cLMD3Xy+<+UOnt`q(gRB$ETNaYI>5^SRjr+jE=Xd$ zlmG{1(FS}V1#FCM$of_dyUTjE9JYt`XPai)w(CH%`ypbKBkv1+rnx|M0RKRCNctu% z!B5n~Met^#7;m^Wk54voH5UJ9OM6bijPHBs45Kx>RtEILkC-FowOt2@&u(N5_0b2z z$56u#8%{9TK2;Fl;a{iE@5iXZ1a3vBhm2ThGiuy88y)<**EF5?*0ihG6r^WSXihRhLuFI2%a;U{r+ z(KmcJatEMD7dpQwytkJ7TYmJ}dB!KbUha z9gIZdR z)cPtt{YSwAA3krRF5%uU_r%oY!qDd&R+4ZR<98dQCnfr|V-KI+SS#_=YFy_dP8+Zd zaJf3HlUu}%J+E+XQXxwH_Q>iOJhx-9_(lSq>(Mw{oqb}|j_!wTTk`_T*ELxCxb;fx zH*Z|$E`W?or2*?zD`c#)mPraZ{s!;GKdR6=Epu$w^bOFpMN7mN`iOUF- z%Zzl>1x%YTiYS-n@1;#IQSi3zD$&6!pT0(^1!wP zeS&2*y%g$~mvpQPYft;wC4uGilk!5WH$JlIN8GX{0{`CHvQT#yGxf}O|M}&&(5)a^ zFX0icw}fgtw$*LnOzaQdH0B7g+%R@tyz~5*$~W)U(PbWNR}V|;R%vtjqfslBIr!-? zXDGMif3bE>F`|Ucq8;1VW81cE+umc_wr$(CZQHi(nX_+l&%?R-bDnO}5B<=|msC2P zs_Lq>m$ zA%Hru>L(xQQ${oD7!l|L`~ZsyTF4or@dYboXfwqTs2ej813~Y{hM~ZY2?P;)7@g-4 zOo&Ud8P9TjcH4iUPjznww#7_O*mi%te`aqLqI|2fjJFrV@EnQ+>q{i-wSs0{qnL8Y zz$I4eXPw`)wAd55zrrx4zPTOKjbcq@mg;|X=;#$1=24w*VC%nQS_xLLMRpl^z^N$L zZ=UNtOj+%Z6Jp|7U@QGDQQ5a^x~#%e+7pG8)CiOPo~= zyk$r1V!V_H+*-XMZ}d`f#K)X=T1xxjAXTPO;Rp=8vsay$j(&)cwyeQHuW?8-XbE$ZX*gU znW~i}(giU5jiR6@TOsYha<4sCGQKz++Bie&j(mcUxO_Z)`Xrrzx11_{Bn#>5;e115 z+?hc2qPSf}3+FZKrow7UWm5k``GV0N{Kl}V8&cyVouexF>81txHvZ3ctYqw8VDb_h zW|W*-On1KyD~t0yVUb?&_Pvwbv(~x)myvCC2*;h%=c@a~$!n zC7^nR`ZdZQwK+>0?-SK2Fe^Ffr2UFJvMIT19rcLut0na@yL2t+GlG8VKKs}Eo@Hbe zL(kH#Th(-Y(U*Kh@Cxv9xdHkzx^}&4bLVWk^els}imgqyab)j9-%DFp{Sq&I5Un`U zGwd_ky3SLdNjKSc{X49GN%u&+T_sF+V5L)ST<$r#qp*(WRZ8QCyZ)%wP0U?4>6L81 z`7GwN&i2$@YSE1CdS6DcXEgN@9nbgO)@TNi}f6PYIh@Zi}Pk<4AA*e&1=C> z8jel@!b&P~dC|5&da;M3wWjvp6GOC`zh4gfG$O7dm?k#HMO{Hx26(7n`sqII1s|j# zYiYz)PlzpAG7a zDzExNSXtD$8W)T2*UD<0S?w!@o!>3RYrTpya zxZC}k?-fxID3ZLM*b81~QEIlaMPGi@NszkTiKv>8iEEi?c_=XhHtO&uA=R8U%L)@! zK3%bd<#nOsdK<@+j5B`&nKV*JqLpCy{6hD__t;m|*9UcJihmpCT1~9aXf*QGRb=j* zqTcgz!TnDX`SQp3IMRzQZ9DmR? z8X#gqe`w*=hpU=Fvf~JluLT!e?Q!7`H@)=B;sjEgHpM<e(d8|AY_`75H^Y@{Lu9*xqZHHLmRkM>4Bp9PaES|6sXbAFJ&$BY$^ z)%tI2?u(u%{4g|7J%w!UQ_Vq#;dEP(Gg+}d56|J)1PauxBw7Ay_xXrI?@KJGjsEPn z8cmV6_6xPTPs-%3mqh&v>oNZ3*tl`4-nJ^~6=ueN++w$(whXePXQjpD1icz9+~%5| zlpg+4L#`n5n0&bSx9bnTOkJA42u|9D$o|E~sqJf8ykDlf(BBTF%^}N$r%5I(gPVTD z+}ByqSZVh8sl9VK3u+}=BIoETzU6l=oBu@N#n&-@sO`_(hkA0wLiU)gv?Z;qT^i|V zURTyDmvO^;v^L7Jwibr9Q{cBo!Ph2 zMl|+Z#U%dl{Yz#I#J+2sMHLrwEjOCN6-&Q^YDaT}x296x^bMcwc!fuK-G#oQnn+uy z6XYVQ$>jzwVU{hIEU?Hlzgz8>*0QxD*@3FAmG&r{tB4K}9P&U6Rzx28Y8jrp()Cy= z^XOH{F{pYV`y|Sx_gWKPweRi!%**Yc&GIgFB9%SMQLg&MW+z^eomsRoT+0a^i!L zs6gIW-?=!zhcZqqIk9#WJ+>yCQAYMiY3NtHV?Hw5(lVY1#Q@05^DF3D7Sne3DUW7yUz5BCByp*840blQ|4tY_yYxbtRazP2T%FA>mfIpCA0<()m2 z?XLYgmLu_Lt!qPhm3fv3RLS%#&@oEyYM&fWB9HDt*RgsOirFCuh(glcj-=GOHl|z! z)uePIGf( zB3PPk^r*2t;PcDYrZ!#N0qUJGT6faSW~pIf%zzRi`$%i}o*z;p50EV3DQ|W02P-{7 z#ouM(48=O()g}5InR?N)ac1o3r5R8olTa_WfY%?zv++M1B%CqlOmjj*S4v|pdD@c3 z8iPhV|9!sD4Y}d=I{;lDO_NuAFU!t{=qW+?#?woVL2KWWoC|_i<7hEm_gM+ z_SZAl+r8wYI#-pkw{u0;v%2|J*E1JQK=;Af6?TL5NOSD7Pmo?`l6mc(^{V)@Ben3E zAP>k1w2=ke>6ds89tQNV&&E3SK75bn2pd?}Z%5f|(S1shQyHiS2B%O_N?(rg4E!%Agi>|7C>8PDCDF$M%ovV7;TqIKGpz=U=mqAF_$?~DG)~ccN4st(vTve?J{}v+8&7Zwx-^)alCC(wmw;xoRzJBp zzOmOvG5$aPK67mRvUl~S7PNsn=}1~q`W?~L^5lFRb3(prJ*Fx> zqRk?e;t0k#$A02I0W3&*mh2Naco*cBA6hd4ec(7`_lU+~$+dEW$%M%ct>?pM0tD}{ z)gg637I=ZX{>m0WtFp30;4f=DE1P5&8eT$X*g6*}U*a*3Oq7OBOAgXgmH!i>!22oa z1Cj%J^A}@~peg$^#{rM{Ly&_4o9O9N7K3C^fW9uXta#L_qIg&i#dfp!N7w0ruH!>B zkaNB9j5#MEVPCZtBMrs}Y0-es|D3 z&+BufMZR@pUNQEB-dge=cZ<()D9QrBM_!e<-osCl8c#gA7XDvnn)UIju z_+33c_Ky24_!XLPOFljmgm z$BRoJwoyeEV>Rsa-xQT=hG`DJ?)u0gd^_O*b&i_(k{Pc!m|`x1Hr4C~4oTV&83ox_Z z(joy@04L%Vo~K%taMh{8N3=TVr^{NZ0*K`mWrjhe*bnJOzF`Rdt4~*GN863Z0?<9_ zk?4fWO>t^WH(WiBSq@W_MYT8czy@9J><&XI z%nMu{i8~o^sJ$#_;dc7P)pMP7LBA>!3Hdjsm2Dy2Rko{-c&rAOd0vCwgAx9vu-KHu zg(vwSr|ftEv?1x7@+G2V-NqbSGH&Za_hAIzzHS`Uu4t9m$i#cJP><`~Obhg*Peeme zZ-ZQ^L792=(0Y(#EBZBR((O}GQJ>w=#GAnq%^T>^?))#swY~1E^}%b>YdV%Y_Tnp|TRj4V(86#?>Rn)gb>x!0F8&Pg))d z+`OGJtbuloYw7+i+P+>;AJ2TX1-ZMZ+GL*x&OQ!HBqIBf2K-41(plUYpTx1J7Y=r% zHdh_QboNyDieAiHC7Fw@KW=0sA6={wPP;czV&0fu&2(`PdGuZgO!_=K=y062{Ez zL9@bC&N-~NW`OkUquK@FCKwu_=5dG&%O)EIHOs&i&?h~MZU3K?6=3EK3;$9A!LfCX zHBC11;qw~jL{4_2W}E(;LTA8k(Mz}|wWgSNb}@6dV2Z#6b8-{G$$WHF1yq`R3xwk0 zx^4LC2+Cz!0%`^`)TEG{d*zT{`stwRpg;Mwn#~aek^9{+y@+l;xuil`5K;^@p`%X5 zRH88&O@ihI86i_tajl}!>R{Ev)5I_-eWsv>hekoQvmDtW0++tsED2zh_t5eANIeEo zT4DCaF@%)MJxX($AeC3u{a+QewWfcr7@9*GemQc>DumKV^STju7BtH$>@G3Cxuu>Y z2Q88?pZ=6Tk5qPI*Q-n@0@sFBXrjM}Or!|G8_G6tGN7vEUvO#;qfx~gQjVrIOdvjE ztuRG=h9q}uUYo->hTrZ)JCFSor-{JCFP9B`Td*)RC#*d?qf}^&f5(PAebKTIm7GhhsGcmAqHf`@mJ>{qG|2Akj%ULTceC<#VZDLhw`#>&a^f5{u`6qa-8LG<(si7Jy>NCf*w(?ED>YTiJ;IN z>dzQ7SSgJPHUzs&gw@E61CH6;dMKkMQ+HL4aU&~ayo@7lc8dybW*DCR(sWX6Ri&qL zn3iyvD)^vWAqy@fI7uP&nf8UNzSblk*t+*KIKB@-2@L*4Co4Oz62X9_@}Zb&VJe6X zkx0)UcJ7_3azIX?ZFD2XzohP+s#VK^2&6=y;X4R)c+8*J9V$Vm(|TXUL!fHC9oSYouAHym(WLv)Jsm z#Q4d=LMei>Zucc5qrdxWy~no*_7NT$R+MVTD1ODp9DFz|De2nZF>9pm+}0MDsq^gm z`AsEL`Q%S_)T+m@pohJ#RhbDt=P7|aASyS{>DBJXYURjNt!3jkeex+^x+H^HCeH3m zz~|@1=RoBE?ZDK4+z#1}x$f_U-3~=3mEm!RhcC0qAgW~^<77lE=_BC#<(gM20Xv|Y zR1n5|ASSF~5S^pTVHX;yAK!eY9I4c7jI0nc^Cn8L@O0Er*W2OF$K&5mX$KM%k|sE{ zh&<^@IY#Nsu2tDYM&yL!6U_{{mnybGFp1ip9ph4Ds?7X<%ES#`X~|Im7>p)0S^ zLu%V7oM}?e(!l+V?+UXsyA7=7=zXUv8|>-`)|Kc9rRtbCmsnUC+?=fKu%U7!Uo_-Z zHbg@knH{YCyj|1Ui0el62~lPIU6;iJoo)rRGbKBiTm`?Qjv2a|nsB$VfK5%SJWvT; zx|bY`wpT2LO*_5Z=lG=Iqgyw)7yz-@!|b~t{Yaq~!Dmq7<{Y6~nxUv^!Qf1zBAzVw zf%K)o)K9>Wt1b-znQ;{RnefHHG+rpdd6~ICo5qCw_r&y%X%L3MDGxFcatkC1p+K^! zvWMvM5`~KVJksO&7QOS$lGsyO&dQ`y=E$fwW^4xL>I6mBZ~=;aROl1~E()+VEASRw zjDrOB{tV(r9s7{?NnB$#Ur-Eugzk*YKfKedRPOqu=cLXYjmtglKDko_?v8nyUiWma`ikHis8N82>AjTKV(dbwAky;r#|rWh=@DcX~HZ4@~wn_I0bM z>8*T;7pu@)oGrf8`D5T@Xj%2L=g=aT^1`fM8$YEMclyMSzsdf?@kEM%9I5rVtf>O6 zI-@{pzro0p}xD@+KfJs-fu_rUAe8>^=D+_YlrsJgBB^%Vti=#M!pJS}Ft#gvBl1k>gXf?-hmdoGtdYA4Um(j(s#1R}kVU z|HVcCJT0Ei_O@Z-0ucOXhW)vD#02`>En!W%D?85{`+>%}+RK>#Uv}@E5T-K&sdFr} zA{baF9Jj2aeA7(btAIQzm-Fs3f?G6$A8b5NK{HF=Z`i|vQ5KC*D|1m3%yPJ?MCH=B zFTU@*k#TPg)e@SWlK4Wm*iFIl(>>gA>#2ki*}M^QK%jkZaSBp|3hL*7e&qELTl)VH zrvF`h^50=%XJ-E&7^h2Yb0m{;yZ4D7`$p$G~1F!*w2^EL$SIKg~Rb8;{chRzE=~9b>oqd zH{-RV5J*V6sv*5%sJGiFx-Qei%0jim=d4&ztZDWyB`@mru{5|GfzCaS12Ej3T0#}19RlCIdw#gxQv;eP^SDYGi*-w8$) zQHvX`sG%sd8*yjszZ&^pbARkU(47`|?MN7PCBlLsR?+Zm(x@%T4v2OXA>}A&={U$a zSTkw~$VG-lwY2?qrM%!75Q9U_cn&cO7(T{Ep@tt(;d8x@;@qs97<$i#W>9C|zx3|` zW-Wh3PJB7A6)#bFSqQGv;-8(_&OW4I4W3mE&u z?7ugxwmAZ_z|x~LRa}4siZ}46otvf%P?T8H=6I&1v!rrQtvo z>mpkz8JHfAqqg(W#$~Dmw8+yqZDZ>>YQGO<;CMKDJ8yrki3sQyiA48{fv1(1F)!B^ zkmfx!iiwu9V=CQ6o^{pP3J`|oAI=0vj)i`*RZ}2?8mFylt)+t-4~}Rc3;*wzNx2{X z0cy6Pf@W>2de{jLW+G_Pus5}8V*q77(5T!z@mhyq=jx&cxnq3`Ec(5%@ZmHWRi5Ycn_=1T5a*8lU5c^X8Ao-34`TC3A4;EG^l%9F^r6pXc;7a8V$$Lz` z36D(C?Bxs6@=;^TrX`swBMEK(JXj#h@M7eHUcZbBc?ZB=^!~RNfh}`s7J94wMj0T& zPT4VS`>UOV4Vbn?7QIB&mSVDmEU^m{1?zs=`3wRkycV?h#M$??L()ZlnEU}FuLaZQ zTdRqBCjW2cM)TEh{H}vTi&t(;I=P@=3Wd3V7gCA3!^8^9nh+aeYyu{n7REPR9X%&5 zQEI3P&xgSNF z=4?L{`h*0_Xbw=e?yji)x3F8*Edbpq_tUQnewR87E_7R{+R$}^aqu+)3D0!{ex`b% z!gmpuJ68knXbKlghd5WFP(B2?xb<7|V2a_(VAK_ptk4+?VcH!>9bgXqC;%ZC1tE*g zV0kpd_W0ojn+s&Y@CFOp0U)ztSy~6T98dw3F)37BCuK^xWolL z?xvk-gRpv9cYKr-WU(XG2I11~6BQ#sxR-SB7Yi-b_G36*e7PlBvj>6vtwA*ULIK+- zAoB0lLue9Q06p^b$6%GP=OHu`0u|I#w1Y_U*npU|#3i>dB~lnC1*(e}2sKQR<%O$# z=;GS}w1yiUTM_gN=%9J1ye)z#T@* zij6OKAxD}ZFp7KyAhzDMw6*XHz z{N=L>75*GdNfvY)|kO~&qaL(y#%ndc911Ks9C3KQ;#t*nz7Y=Bpzc-J1!f*T5-q$s9`Xq{=Mit)s5et6h=yQxo0js|~^SQ1HB4^!PNTjgnc>Cbo8?c8%9K{!QOI z3$@F-b6D@L0NpDbXP^#m^e2IC5Dx-tv2VIOKwe8+5VtS#U6yL7s=I$~A5`7YP&#z_ za%tVhil@0%PgQ^a^?i8akR{Ww$$#XRi@(LZ0i~^KXrx{rSJdj zmtyWIeQGz#oGt0hpvs6b$kK?oeFxRHoL3PMRCUCCFqVAbB0%eqE14vJ=*nyJ0H9B98u54ShdtO#EM^hJ%EvW`zoOj(|6`g< z@e#*tqM)F*o0}$j>mLBJ1?4ykI-M2@0GcV(PY@3mKp+mjhhW_8ceY3s`FF}IZ>hE7Z^l-c3%~O|nDqMi0swslf{F~c;Z4`JvS}0G2)k?8CDG%_y znTyUnIL8b5t#r>E%v_z)0wE*itNa=yMcRX+XT7MhS<({N)+Ywa#i$m2X3uzyFKbdp zi)XXO>jIv^WgTPjYpXhK0UF2r(x^f#mh?!+C4{4w01v4Ph|50-q+J+nW@fHs#IPF# z|5Q=Yy=^j=Zwld>YkXpDdl~!5ym@fXc-;5_$-WOaVURbQ-)7C8Zvtq=jjuBBHw1Hm zv*!XE1LOM`Oyl4oQ^eQVjNr`Sgb61EjwMv^*6PWxXHK?*9|w`Jm2IXWd0v`CE0rb6 zNG}x2=Au&KSAxd#q-hxp7C}gN=nj!KJ^Bj%aouL*1Tl%vUGGR}R{tWh``QN6i|mkw z5~dV}xfAcl|CM7pN?5Rt6nY$07~bII7{gqcfOTt@{Z%_|d_M~Z^r3Kmgo`P!uc-2G zX8=?Y-m0q@0z}R$_570GDGR`G-cw_soQIkK%6xd&k0fhGqhLtr+8~@9&oG?)+BDop z#xT6d9YJc1%L!>hF!?2(UH8cu$vdUtM9`(YATgm+8n8a!y}!EVufZ7M{-Q%7Qm0_c)~N#3|$HdVMS(#A0UH<-(E@G3EUK+015Sev%~ z#FmxXbdvnAQ=tY#dZZ`$WMovskh~Ev>3%{I%+*pRmF`~`Bw)zxwRvN3YRTTw7|tm? z$X2+(%{myNshw$>{=%~b7tHk)lA!DARjQKR2hCfq z=up3kM)eLFC%1?FXQsy285qhyaz_+n6s8yj(Y z-xvPD$X5segr!i3tqHg89$>jGTu%!2Hb5`HzHfZ8V87XsB}*Vw|6c%rKhAwY_Imi< zfd-~uk^W1yrRE!mSRQ+|A$$FkN4SoG^dV`?%JsKo7Y979eNkn@38@k|PguC4u8=pkc-z<30y>F)kjjG^_)MxYZ*UR2|ls`_!6urGENE(y_>M0V56DjI-iq;0!r zLD$Cltr!%sH~f3F+*fLqFIGSlMM;^?mgMz#QH+(1IY_4GBb4owpUdfa9bP866Lm~M ziXcF*tlQStlv0kDPUY#qRfdwD?g=ij4G?aAAKW2&kQNW0-lP(I8za|$GHn&w3joY1 z_Ew?U2MIcbqk{Q8fG}1I2@N~qnjy){)-WTW>6x&h+#tY#m8X}1aJ!aP`4{)m=61V6 z=2pX=Q4NQ&0`hS>TUILu;g)ezxGT3*cctX9p|^%Hya4xM0QW8F0!M`xg?$9GMTOFv zC`$Tb#whPyPbecskzm(GeILcBm$AOmcRLgncnJaTbI%hkis^@Y$Wtnk&ekg`2bjii z*K6)KS*d*dEbY6kt31O(oGpI*_>h;Sjy{xN9w%&E`tHJ!3PvqPy)G*^;OAQP$X+#_ z&3gpBqHr{06hXzzn@vl|++cnK`9nk+kP2=dr~4OowXca$C2;5BFu=Q8#47-ah>jX` z`jo}_;Xjh;0=M5L*GdJ6@`ORA?#M_YVPxDL{OuOHP?;4*rITy?6#@*97DCQRmHKz9 za5iTv{d_{wrW0d+86Z9s90AZqFDu&b?mg#&vBG2@zw58E-<02f&Z#Ktu8>} zA5*Jb3j2~{Vm^l^e1*JOOKzhdox#>NJ9HbEP&X)=en7pdpV6y4IdDa&Y|is5`RVN7 zGB3y5_>&KbD*B(vujygm(eH$})ghu)hy4yXnQp_hts^&b?x9;&E4~7jK&Zw1OU&1M7jbt!m>Q4Iunpsc>TI$qlLKM0#t{~3zM*<7h>9&(KaC zBE>axds@lGlnxKgG*LQOAnm98?9>+I%?|e3|H83i^=!a7J!RHNX|CI3URRPhwjfdD zg(Gj5V*henXCbRe#zlzWD#kx#KV5_1SC>w7<^tE87!rs1{vA&n`ogMAarl;h)rf%U z8lHfmMB|39z>B~GJ$?M6#ipxh(_i^$7Fvr5P7vc~UPUx>GV<18jvS=j5Xi|{v&(#A zv+S#ZC`klP{AnNC6oN6QFtczzIFx6cttBq==W%rUYXztrgftsHNTzX_X0Ec|xTS$C zVVUMB#DrxVXxBI;<8Zuyxlp5U)p83oBELN^_FviNfXi8KGbSR)7s#3TBa((3k7+&y zdfK;T<24FLF!UC^=HP}cIWki@Fk)-JdcC!(>dIdUa{Ekud2fZV8vUw~fMF-)ojJ7+ z?_?DUZ;KRp7CQcszZq#;RS?&3mKK#V&|+FEJHABo*lQD|!v=r;=zlgaDLx^zf6TL= zoY25TCcBq!jI(&M-K7I_3;`~Ng4WLICI;d1<;$5su)yMpP%$5 zrZ{1*eNCOGc!N$-rVp-v-2`(ntgVRBa+ES$?qr__t}&IESzw@F=+@aRo!e@Rn>W&% z9Yj1INK6}FHv>hIOF&>jo*mo`Cs5A73#%dm72Hcj`-E}>mETyCLt32z=fT01T|7SU z652S<+!&kEd;@t;(|Qq@(|=!&L)9e~(5LCd)7tfJm(9CT!9KfaVu6}kXv(Bn3JaXY zX6vy`C^cL8cwS)vTw*?py0uf+Scdr8>uUO-Cnwl>CBXG$W=gZPXPzHN%YFNs!VHf< zRIr8)0FTThNS}Hl;xOe+FreTS*EYkyKxSf7s9RZ@9efwK?7&5Fwb=B#y-dKK2UrV2 zX9XUpk{7SDyX9kqMe_H`7(S7@HAfDOH9Iq$70fdQ@-CuVD97|&Z;GbJpHjTnNHbmZ zMIdBpc6@Px?o5`C503nnj`bA{2jhfcE0|)XlICju55vZ0suE=69kk}t+gj3Vp}YoD z*AlL|k#B00IfC-CLAL2@yU1Vz`UYlPne3|K2#*^fHk8P7O*i(-zm>MdLflgDy_?4uWS=p>u#Vh4Q-k$vHp$U> zI9qFl`3)R;1bAGwuR0TC5FOmdx$RBXo$3!dPh%qa%zRE{GYM+LjI5fmEu_wCX~X68 zB9-5UUM7Jah>e)*0hz5ptne9bQ|lKKaT<%Y+#1%{Y_(t+%QJ!3UN#_267yWW_SHi* zzM_MvcXIZaCewHLC#z88$ESIuTnjT;JDJ=7>w(9PQao>^{S+lqO}W~`1T+cz@lR z*X~WnH_-m>hGf-cbFA~rr9T(2cc%>3%bOcsccy0Fh7wP9#w}GJNbaJ)rieHI%7x1; zKJ2nu$Ac6{aNaa}D_i0Q- zFTHqWJaalO@BinQh;T4U9CH-%+jFcVDDuUc zv=+5&$snnTK}w>X`$(?k)8;s>itFBHpr~qfLIum4X#UXDeXd`<_X>EtW*%`&y5`Ok zH&`cdlC^8|tDj+<+h6`<`>|G$)5isn-<8y!|451picd=;6_+}79qTDr}a*rAC?9m;?V?dq)DQ+#ECvCVMAzL7uBI+ASC z7n(N@!iH}LcOTztXpMea7%%^CfsW1=U z6u?_}S0G9?7q=y$MHR__F?oSNnoUB)Rvk6O_AyNsbmolfq@H#-{Mu~`#ogDM(|wGm z?|>iGn7=3swiuYl&U#VddzHDFhghV{2LU_m(lV#Ycrtqzz7W%XdHRov9f5;w7A!;Z zQ>x~BwUPXUCk>MsyBj0(j+57XN8LR+5aBs-*gY;9j)@tdGh0q~+tJa>yi~flP%rSj zbFP({!0`{ByxDX!B9TYqI@yoYb*&Wn9ieA*Php3*K+ZF1?&X}(_FeSz0y;e;t(h3< z*9I)?ts3wv0q5j4E});?%c*3!4OW-ldP9UZTjlFkjhiMooD9&Ur%!E`MmG|}c{#k` zW$;i!%XuI>pU!W8CkiNt3a;B5vU|)np$$qatv&nE*7-$SzS&9DdVS3Ah|x6_N?!;n zA&i0h+tgW&K{h;`g0FNO+%7$k#%z2Ycn)5Q*KVZhAp41a^Qf1&v zE4l9L(d#s(@hfENH7-wU9;eNSR+T8RAB_CVteKorzT$4ei|d~mG)1=+iL?bin=P5? zrPBptLA(m0gS{cmUh)@^32HO(-~wNe?TH3bWxhYpFnN`{riD%i1u0j?H z0JFT3Qd?oM1*-+7zuCw8qH`%>mFzT9=SMzNO&DD@BzoZ!3CQ2n`~U$cwCZ^NLs8Gb zfKQKaYiI$>%}pn2Zsla+KqqQt;AA3fVq|M<^552KCT5oZQPpp$X*q7TAo;x3_9=-@ ztRVm*bP<~~##}aWBuevy<8l(2GB*ixaW@Mm7i743eC*C1hzcMHEI?isJqN-h^clW> zzHoBVOk8oMC!ei1&YNqHHpZS~%ZMI&1@lJf_Dt~=j)#X*h~>*M5M&V@d_HhI*+Y2l z*w##RsziwLm5y`M%$ZT=(k5hDr6+0h2+!vBe%-_1KvIBgW4n_dp@=CW6o7!2iO1H& z>c+$ltM6FsH%p zhr-H{W9GSDEL%XpyE7P@$;0tQ{Q^_^smqBUt)WG}&jY}Y{szM<0v9mjgLwAzDA2aU z)7wn}+ZS@$^YU`~La+FL5P_%AJvL0Cp=S96dGm!K0t?)Qq8Hy0!pZm9pHA;|`)cp&%8LDNm>YMm$Lk5MD9YJ1Ggu_y4 zO)x95?;XGi`teTz(b^O&;G10hRwSNK%12tZkO2qHA<#$0sb5zYM`BlSVr)fNGhiBz zCu?l~J>F*4I2-k9T*3`GuUQxs#X+)KUUMdZc2$h^Lxk>^30T3-0~SZtE;(}zn5knDQrm^Y zX$MRtOZcM&%_5cC)a0FJCGFFiU=Rm^DPOaeU{G*Q8Ssh^q>r^C6bfhr^B9K(-6^6A zw4o0W1JY!1rBqGPqJvM;9WU?t87Oq-an(DEtcr6G3KZ8})v5tt6Mt;8g{GA`TN!_@ zI|s|@V9wvI$D+*_H-}#=dvaHDSD}25MLsKLoH@W7{9;y(K$li>q206xHo#SWHb>fF#xU8%15 zZuv(6u<-F)8eI`L2b&}U^!3gVKDGbUa&PQrtT=9bCliH4w{Bo0WNICW@gxDNt|PgS z<8x;OdVdZ#0jdJXNrI)wr>2xnE!yDNn0kcA`vz&mIyZ7n=v3tOI@-olR!anMtDh^o{f|!W zY5cRSyi7cj(Oo~L_o-Pdz~nJx8s72&heeJ49-CGoSF?b-W{Znxo8|6OPdZ;$ZIVxq z+M_EkFcTNJoMWKbF#;?{4)=^jAmRH(4a2e090iS%pSv^WW?0ozRBPomnx{d~;8gj~ zot&I|dw7&-JOg42JaH}Fpn=xmh2QfJ(|wMP*jgr~duhw61&=Q^KJgm-LFg4qyN-46 z-HCKL$m4;ia<574x(*e7wdw2J1;2IfBMM?(8GG8@X1v~Gt(K_eefcMM(cbF{7Sd?5+8HMxQS$Rh*$lVYne)6E7|$?Fho0-lH3xFCokzn z@0$AQdW~MG>Zi$UlSL2LSF`yugvxVq5C1_VzYHHh4Zg2FB~H;CKj71$W+ zTc4%4PxceyhHWJ!;OIi#=BLV#@HSnDw`XWt141~|j(OL>8!IIgQkazEB@p2j z@l_K;#nlQ}OL2L7OK7YmqiI7*{u?HNdUmAx{JNN4$Q7KY9GIP)AI|PM^j=Tz61CIC z#oU?F+u7$s4Z6KhxVu4!L?4`N5ovky{?Z-b7gkJs1TROoMA!Kpw#aC`j*^i5vAv;6BVtMwdpvSjR>Jh7$i1TBZ!)fOE%rKnP=NO zHnXO5H^XLE`b)9=!#+a6pJ^HL`QG#%a~PdswHBv(dhE0cvw$c@3q8F4hV@~jpeUbO zeip7UlGrZ^=u8{7WkQp97w>T&zLDK5V#T8IUBWakii6j8L4IzCj~!#z9nyWB(oWGm zZEH&~IV=g8rk$JA?Tm?kq;))=H+Mib@`_o=nP;-2Tc##vRbgDPNC0$W)sQEwQfw=B zrsnThB_8du!L;O=;keeAW4LgXUT4&uGs!eRyeQYUB3|ol)vwY9uc2UN5z+>{YoTPy ziL7|^zAjm05Z}xeP<}^4tS#*@UgL+?p8&TDCuyho*vq-Crhc3b6vepyH77*-RD0Jm zMzm1?L_F{OqBUB-INM|_6Dm-nv(08Bja@9;axl@xR`ldN!O>b>c^JhuzkL3F;Xc^u zBsB8$QbgWB&@2Q?6s|LB?WD1?FxUf7Y^GO|U8L~f1s3g(j&Lrlw5SLK*jF=Oa&C}M z%9i2vG=V

fx7{+O<22AZXBXZcD6OW$rwE3b$QUg436U#`x&HG7JL_*AZRA~0oW z_WAd|FSdsVC#SD24CE~5aNFy0Va zAre{RPU7HVL6ly#QiEtKV;P5~u^AZeQVw8_i1jv%Z)p-(KGu!^slG|tCUv*s6aiO@1l9s^{C?3?pxL?#Jf z2xfUFRd=29WOVcVxO@^c`nq{e*Ugrb^X1I#;aiP0?e@dt>U+&oxmca;MnFD1eFF5v zh>j)C6gowPVKT%VM0-wLQ>q-l+q5&$<*6ZtBF5$6WC<@1Lk6Y31YQfotqANMGO#5t ziRb+e3nGB~o%LLPYJnY`>n$*H3L~4$Jul{;<@rbf5{e*>tYh9WEER$Kz9qpU(Rx4A zMA@WGkyapn9wJj9h<*4?6H{}ObPibc_`;Q3y*%zGo0KmQ&kjK!;IdqXKW4C)FI(|? zQ<4=E*a}%rkx2J(dNg^-?xv=+`LVc3N%3q*ALbk1e$`73Jh?>E3()xE7s1~^O31!_ zZ9hPiW-DW)T#>;t&>*A^x}^yi_OIW_WR;1)ll4cm+|w9`BmN(@(r$z@?Onnl41qxvaHP_x;hSZ`!du+G65!J0M^H>JFbchJ09>!U>p&jK+lJFzU?<$X4 zy-^SrRa8u?8L=Yd0ivo%!|~ESEp;0?y)C$ea603OVEE~DspEc@8dG7#z;4=O_?*ZB z``=Yn!>?(5{BoQHpMER<24t6VmH%SwoVr5^v>+YZwr$(CZQHhOpV-ccZRfXJ%n$`A=tdQeD&e*O~pl8m=h4fdGiaV{v*~jVHN!Oht*cv&h$}RA}6$3pIxlBs-ugxwE1-}eD0!yu5{u}Mkjt` zgZu8^>ABShz9TP82^&#tv&uL|!G3zrf<|fG$;*f2mkT?3k^b?pjb7wjdXFD9+EHow z#Fg0R>%r0te3`$07OO+S}{zYEAjm94J* z3T(C`*#XCxC`iz*yolB>sXBrr$#OpM@n*x;7iu0Dw1^=I>ro`K*jPwS@&KE2F%f1# z1SWNn%JyUouFm}N+KSs-h#yuEg-B2c^YV`?0bi8U{O0^m2q_G;AFtYY5PaTkkQz zfMgWV;zTQ#h4Kwn5a{t$FyT!YAY;bWMN(fh6jkcXgB|j?MygR$xs`t&yw~02j9pb| zK7PdKq&J9NeGC2rYKsZ+x0^84M<16*f9Jw%kUt%z!G{*LMhmMlx#yBAp|HKGW$DG7Vp_IfTa~jFB);(Mu2#xBMR%Yw zK+m?bbUSamsMEi8u(!SDy7j^lJ!Z8*QVHed&@}~ zWi;c6^~6}zE@oEjV+n&9=UpM)1Q}kZoJwbp;(j17ydp>Qd@t{BkGzhM1>{LRA+>J zAe&mcuI9IeOHmjf1k}H4_*ThUBUG^8*%$%)45p`2rS*G#*bsXK0aKYcQE`O9va+9F zi%P-_hbX@d2Gn>~KMN=@jdPWh^!LHxy$D00>`cNH7lR8Kk&|3QVRk9&%-amjABVgg zjzbH@W(!(&LYIRJh?HfUu;n9sFCp(q|Gmd3PJazJ_YscNIk>sEm^@*!vTOSNJ+wPp z_Dh7O-f12^tGqj8ycuVc_=DCFijGMm)ezAdXazOkho-Q9H`W4l)s-~DIzZRt8Fa#- z>@^^rV}^I~-JMX_jiNLo*E6^nZJO&Zc+AU^L6(JdrL$Wp?VpxIdoV+@?}DwTca>F& zglX1e+a0)_$#$fL+PV5IF$Ys1%LgC9k95zbgfYzg_4nB1EVJpzqRdl}Q(^ylNorD^ zMGL$=rzjQ_U8$>)oIwUJ_ZoJ_EkqK-DZ&M-OBAt9P47AoZH(p)a_H%>XeX0w`Bj$Y zG%Sh?^O-CE2~o6DD}&`=#Ox-{t}z>zZGucrUj1xAB-_eR#%Q8B&4b-#W!-HB7OX(V z89z7~m&3*`;zD0Wn$&dyy0#*>(@zu`8v)&+)M6v(&*O4~Ec+v6pi|bPpGH*}Rj*e; zgigWizc#>JsWZRM`C>K=Tv8J}#w$^#AUoU@(-p`X%55JUeR`i&lUCQi-yxLvA4wBdt8?{cefGT5<2i1f1 zxocT=y!cq|Xr9$C$gAwVrQ?4F_>w~LC`Nd>MC_Oo+yqcg&os(0PNUsL9rvrrkSIp9 zefbozQQNJ0jI_UDAiP8z(PkTwjR6ohkc=UW&@#6emuxcREzT)-U*e|T(=h9o#&z>o zt4@bNX0}muiboS&I2|z~do>lWxGK=MT7L9`h>qL9Cfw5wBw%SpKB+4I~o9+J% zjap?ZD0UTQ+Ik{)^X^A@qGPOewZoyP&@Moh=}$P{@fEq{c0IqnODOQHjSXT%GjC~+ z>!wg569PG=4JOTFwLXC=(Sy4aQBJ!ei%(tD-Dhnj_8v{i zPZs#}@{Xe8xv0%jnwV=*Q@ppF1hz>q(8ZLVG7fQ*$=K)==U^EdAo)Fr+_q^M%pf)M zN^ioN83cp~hlzm!F$W3>e==iq?_;b+M+#FS3`rgW?boc+W2|HLkbY6D=pxoB^rEKnZu`rDl&J}`~gA zf9U{Ty??8qYHn<#P^ZLrS0#9-Wp%Xr+H2c_jj(Rmmz#b*H_6X|}zF~S69(#?)?$U^;f4HE!oMn9AqC@FmMZK@C$ru!=y+sv$QdaM{+=r9#H)p*Uf!9br(HE3u(&Q|otNOcG z+`u0%+!q)Wff^P3^q(n6{M?f7;V$u-N3lBH~POMx)6c~gFeh?)_Ee@emdbk0flXNU5dv)=x$Av{%Na=XGw8DpEpFDI5;;rTZ|Vj z68T72d?9w=NRfiEgA~*uIIEyL8-xET{)m(WbgK)$4aV3d9|Xam4KDm!2T#H1F@Vnq z$wGFI@Q;NSZR3iDfq~)-zxGZE7e?8lcbFG%eNCCfBa+{3AGW5a?9RGNQ|9j0Em+&m zaSC0gv8lg7^1z_lu-G1w!pEb651c+!}3IKcLL<;3rXww$pY{;8xwo8WcmMJe<~70InOX z`weALkfez+XP^j%(Z0~DasFUG`tYggKB(UJz(GKR zPL$HWALashYp~+MTB`#tLO9_r;IhPT0YIhcwkX03NQuC-h2~V@F8qD@Iux8DaNY`m z#~6+rF}qhh3|L4hcR03y3A8=A0m~^N?|vl{V2RYM9}uOMC}AL`LbhIJQ~MnDL-m}( zk5|LpSnh3>AQ-$403*GIU-FOW3OlLeXacfCna9S?#daS}?M|n5j0)N-w&O`6CaD!Y zlsu?qrTY$^MnfJc`M$cPTR)Fag5cF`Rx}DGmgJg|tRkPW!3MJeU@Vm*Z=N(*qhCA; zX0(aARnfy8DzhLt*d5fa{L-8C%ky0_Pw-+56=fVC%#w;wGl~K45es#%2IRUVjuU-4c&P7 zMoh?#>6s}T`CfU)J7ae)nk8or>fut=0sBr8aVIqKiZ~);)I!^Ogo7AshPk-9_`f3J z4;GwQqTf?msO@+nIWc6WCTdZ!mk`G`g2XR+kWl?1BdmWWF3v7^G!6X;i3Uso_>34% zNC}Pa%U1w&W)Fb`f}F3WkLC`5EwPtzQBs|4JW!(skM14{o_$vE7)6OLXjLUi2w?zEc>QaxNeYemn^C0?xgVFWznczR*izrZS9vnu zhR{FOkO>o}xqHq-VJpBrr+;Y*$_YMxH`cNla`Phs{sh>RT{M2v+t^yUeIpaZQ_ew? zWn;g8Zu_dQ3I4@EzVA|R{d;i3Q?GuiWh|N^Ixv<1AM%rGxB2afE1QDUV&J1rN!2Ml zuF?ukV~QWQzl^8lJAip!Nz4SdDx&S%V+^pt5Su{U0L_5kmSadl@>futRaO$ZN2%$Jfl zq%Ebt5NbQ^jT7EahH)eMa^82Mlg=;j_nuS6F2edUlA4(SOWV=cOG7ZO!_6q<9awDH zkVh2fzVvuJf z30Bce(LY@k=o*)0oGOvUEjfXqSGv`6GA+;DPZorpe7|r<#+{^Yqp` z7sPSF|JTuNy4nW$K<=JI`#KW+z$cULCnGU?8LrC46zK>R@z^-2Ri$$51U-@o2-v|C zokyWJ9ZVw*H^JtD`}-0;S8lH+S8!;tmt3Y+YV4sPp9RC%{AeF_>QUImwG~IswY|Jt z?>atCSDS1yA$0kixqk4pWzIMdV57UUXQ9~GKZgn?)#&l zT-ytpR~_`GovR0a)n?NT|LimN>7C1GK_G7MohwRdn?#-w%`9&g){ zZA&xQcRTg8e7)X%xGd`Q{y&!`b&!T$2$0D}KG9}WDP zz;|H830Gi?yfhTYAmGxK%x4YY{_8xzXSC!2ifrKTou}eE5WL6U+sfB&1bP-{V$p#^ z=dm%~Vmt!6Ir-yWx*6bpVj(9Pw%NiXPmp0Yo*gn*e<@>mDbv*9;8K;56vsacti(X% zAC1dNeP8tKHqRdtO{Qw{44$evMH(B$i|gAXDcCTB_S}e0`;yf19mzWjjZ`G5%{;)u z-lne7yvG4>+H3^~Dk3(*6e5R^pr_-5RI2^NDwUDPGX*Nz7dax<3Fg)#eW@$3rjE>a zgmLJ`i#7|7Mw#*x;O?AYUmho`e<=c+$uz()(T0q)bY5Djwt*Sy@Hu61e7dDEA&$p* zPbpn@4+r(+3Q4tiobMSwco!t$)&!pt***vX3yI`PS|L|f30Q*gnQQZ4c+;f!Ht2bSPisnL$=XlJ6Bg%I^%u*fc6c3lF z;cp|WfgMMRX_P_Rl&p2(%-A)Gnf_VOoU#l*U22m<%-vD}@ z7Fc*+5IPuvqgAekk+$CMxNq|)LYL5l>xe||bNwEfuYNSE&W`7UdtNf4#l0(nh1vDx zg9}-os1?7m!DuU2w<5*={2~P&yZD~8h$?^{*yVP)qOhNf>^K5`4 z^MPB&jK0u*=w>C{(~e$tb!Sn&AbR-Tq}sI^&7J;3{tSDMVwL{u0u1xKxk1-t(O}zc zx?ia>@Gl=3wn4S_%viORe^v6d?(AsDkcC`6N_%HO z;Mm?J*}t|A6qxq$qIaGxVp)Ps`Hm&MABy})eZ}2~aQzdOsz1OwdMn$aHtxpcxjHP9 zF4;sGp*!tf;nU{n!Gj0<{`5#ciPQbgj<{{bKmr4nab7;PApqZzrNM79AYm?9?9VQ97|zgU)}?Y=vuW|*70om-5Pm+2(+rIs2Nbi6hy;*;RF!jh|h#~QOO$b+$9_sq2(_-kP3vcm>Bb3_?faWI6Ca|MJ1f! zhbWXLfN;G~Yb_Cq|DSbY=%zfn(qv>F>VOCNi<#J`NwBsM+My;0zP++zn7wxz<=z8P z!}+IQcV&a+UO<_Ad1k&<=0$#ee*rs4?0R^&F^X}wlLSdnFuh!ZN{9H1Qw zF0=hWw#R(>B~dcqp1Dc6Tt=5EPPTeq(XKUFBOia9y`^LddU8xLLnfRUb3$+}WHxb} z1%S(;&m3(|fxUF+Y`@}TF90yW`yYV1|0X;CCr%182Rp-m%Fa!7UFQupG~bt6gPn32 z*u+<&GqZ(?1-DE&<}5STPUb2T4iwQfE$KpOMY*o6@0V@@K%^7^-&Gv$YJ8hnq`>H3 zy4B0}p1UY#9;xM7mk;M>4NdYRR~Fa79!0M!9~?dX!_4&Srf@nZ;PB`Rrn8S!)k#1h zK+i+`RB>1DRQ8^{Cesv@IY(vgHmUl9s?zjB>cjcc(MxR(bA9xUPL8Ks9|KfXEY2nI zHOkuB<)xDg86R$(SndIL5vI@1LmjhJj&r@y^l9>ev4;cC-5&&yUSPCB1{bl3Us~-n z*h$YpDe$W(*vYD6&dXD;9r$emI`Dqm(eA;iIRs$K(@-3YVtsmU`?SF${%d|zUoG*i z@1dfnQL_n(fkA|$qtVw0d{HC*_P`avX94KML>JA2DKI%KVhN8EgbfHkTtCJ)qGLER z$}LtDMg6)dl+w zFwA}N&h+jzPZR)?>pN)E8*p5XKhT|PC zFR(E?AZ*a+Rt57E7^1>l4$SnPG3f~2^>Jf<*0Za8{#!OAFE1Z1Z2^pVNNTEO0xhTs z0D=Iy%yPFo02AGJ@)IcLGiIA?JUcT3;D_N$OnoPofn!0Ji&-9w z0gu2f;-{H{MO2k|ag zf4Q2$lR}&afrBv~`Vs=OO7B}?4@gZkR;pqvs|o-D7}4RD#>Rn$b{}yKE@TP%_b4+U zfZUTXsMalZmyCE^Gn)`Lc0mviqKzK7TD6FU0(?=&Je>aGu%@c5=3jSrz@ok48du|& zmeJZMKoqfjg$5n?KUTT|xH)6tZw|ETqFmXv%OzgM$wDQl*7-9~dUA{4w+%W|$9JlU z_I5`Hw_KXCM_!4;$s)ctrK_W{b`y_ys29~_LteN@g#1Y_j`}dF;qyI^qWT1Xmu|Oy zE!l4h!Gg4&0P8bk$zZ%0VL%CNC3l?xi(-!(!yfFv9c1Q4<~y~;!x^ji>Nyg=@jtBg zzlGFS(=xSch@q7#;rj$vq6UB*U}&Wc84|0V08SQC@HvKUJ$RcoroA+<>6_qgWQnHi zv@whh=B&0HZm85=M{h*iX6gIn43{k__{A?zywqFPfW8je2JXNR3FRA4zVr9axSz{# z=vKhIy5w7p$r&r{9VQvRX|e5yUu;2t%5cOGZ5h5wg3mg23_D&S5q_cGcT9jJq@~ye zOGQCmOF^KbsZ5{;;r)1I%u(>CY;~t-!IZ1M=&f(8Rw)XcJu$lC-=h;N)@L$#I0Pc) zDUNi;c64`EGgEkdzn4PCSdh-XdDZOE^8{Lo4H7R3U8oZ`S^?mRaI_M@ZB6>&kA|eU zN#4F3#gMYRCEgHS*bE+0?bs^R#MU|IIQ){O^-L8uN_I;fTU#;p%^9B?c$HVKrscit zV%WlEwpRmwahIa%pd7s@Kj2ues}U?$7lyrh-F4a01o z7uKl(LT+#I6WmQqisf?3Cx6FvHn6Ox*1#RS&tAYQhg)gMU1j~9qYU42L-7e4QNzIB zP@@6pEY!_#SfOukK>EIVC3~~1?tJ-?ADdMJP+{mI9Q9yaHe}8R|$EF_- zWG?#5hN|ys@k50xfvVFxp*1U@h=E7L)sKdHQCzm4D!@giB;EZ~CMnucek9kO%U6zw z_}1|iw4J(DOcZa(WD_Kd=}#OsI>K#M!P3I#!@Blb{vAKQHt9UE%SWpzf>$wvcuo?49})g#blks0YSND^)PkIO>bEH1(pbB|-|+6D@?xo{Cp{pa1$VF9^-HWW zEl8=;n#t^Wn8i6TK16n+hz%r-B^1NET7tF2fM8wngvt8{2TO@+S9UvfJ^)L7=06{;}McKbiX59K|_%Fr% zKJ^;`5*THpJZ^OZ1Qd~~f6tPaQ+0S9J6c$b@l28B%fBPH%eee- zZE623(}rx9!dL{zmdutbo=-m|JRfO12EjJ-qdkR7C2}DCynC3o85QUp`dCsO@vr^B zug0vjV?#7t?g=uh7@3Eu$`ryZ?3?Z^E9R@!D>#Jn0Gb|Yw&;5UW&b31*Lx6E5myyU zXM7GUt1g|X`>Xx?Cpyaj9S)u$N1MGibfWdfmDi|Ud0rhhklF$0D&Y%I9Gzpb|+3vVoN!tBCX?^PVoDsri8ps5G#Rta1< zU|sE%1!!C!0&&7qNQ?f&Ig%ivST9oMNTP*Mi!r78DW=p9t1QG?dJ#U@%A0lAU<`Po zTzz2eE7cxD6<2H89w2&Da|biO8D91APcm)FicPd}?V6~eO|0B< zgem_a%}O5E==>7!1_)3x4ocKyg*dB(Hqr|gp)T_&1~L;3bKciN7G^i{v2!vt-=|Nh z8a2&3)YUnJF=oXOov|Lotz%VJry$96`hD;Ixid}d#O zwzfJb+smFaG`_cl4Acz`;^+0{x!k_lBmocX7aF+9knM92F@2Rz*0nL!uF+&mwMWCK z*;cVi#-6e34bQ@pWr7BidE;Gd}wf(Df^CkGW`oq&F_uqJ*s26UFOYdibQ zH8vG-?~F?MNcpyw2JZH*v2=0XqqExBf30C{KfcNPa2fp1OqHIRO_zVYx>F})%Vp95 z7c3+3BZDv+2M1QO%?XTa5zX%Y=eN}*RT>e1LEebd#&WESAq}$sQ5m7jV!@FiCtj12K?PJ%zegc)2xnqz4~vkpqkvePDi^Zx}f z0Xa>|;4{IJ`_8aT!<|^37yOZG@1G=OCzDqcnjPpt>o2jY)V1A?gzX8*u_XFsIU1Hs zh0n_jBF@;@g~SybQmvgcBSxt|jgK#`OL9$%gHSjJ;pO7S6cFc!h;d-5dX+=o+V18v z)6y9}(T&pvj?tfFc{U%&tOOC2i`Eixp0x{Fo6!}T{+S?r7iYIqT-4>Yn5ZA2M2{O0 zCTRrx@K{7T#KjiCnNEj21V`d+4iyAk?jW_pPVJo4=eQU(VYE+pV_B@#8QUMWMC?v| zk!rm%Gd3gG7u|sf90?m}BjD{EwK*Y}KP@_NedrlnWoq3Twxqk&EX2jfyWtmZiW6k-KpEqrR6l{qVwW`n}`%r%f zfE{6JJ>}7kyW27bxm!-cV9ks5wl{NQqa>eQ=6#0-n}bV=k4>hLXJ<#y14%93E|Dfp zWv>ICGZ}2L7879%U;%5a@|4o%!@*sHr=N!4y{W2BHCw_V3m2{3xa(ZX5*DA2h7VU* zMk~>-*$5$P5+@Ug5(9MB(xq3+sJS2Om@^#Ez4hiydx#HY{SQ+De_#R!z_oV?MoWd` zBM+pp1OztfFw(IDS}7h8j!Kq9e^(^ky}bnBl#~4&!xevxnRCQ_UYh`n zhyek}L5FCue9;_i80H1yU}Un7+db|Q;nyL5kB*A0@|OGcVw|Ndvw{VLe}3^$!vQh8ld|mM~Za zm*WAw0SGqBNT-gjXYz5!tftto?y==}rhS?s3yR;J2sOi6^+Z%YA%L1IEGuqp#J(>4 zO~bzo10co*4YWWOBE}!oPmiP*VJh54U5Ps@cp)zV0@xQz!9X6kkRlApzt-nMBK`{l z#4R#ilhs+==Xn)oU1eLdFiQQQJhvwbcAL2H;S+eHd2XnK_;rMT*=%pf$0j?hPNEfR z(iWSW1_?Aa|E|ex4N%iGRCgxBU)SPn;~p@jjZM$NK~Ik!DPEcGJkzUT@c#AYEfYd%FE{Bk1sc0}+#j9CPV{6T%yK9s0 zj$~E>4q?&j-*XC)D-#rp5;*o^6E3V6!O2B!}c(vAjA=|rr<~P zQs04tx+>t|kKrlqXCvQS&IY9w-(ftPe=HyAB>)G&s0#aZSf}B54&%Rp`A=aY#sUy< z9Jq_@px_uFXo@rEVmPpHac~FE3BC+}v(Zrjo*|rn7>y7hz7dLm76{TLm~h5n zCG=56eVK~^O^yimu?nxUH4zNR5Cz~Is+uGX)XoV4^g>t!F%-fuQ!NC3bJFjfdgOoI zU!%2l?`G`vfMnQ``QZVuG5@8DOMt*YM_J_ODs1={g@&246r!p3Oeb>d0JB!eIoLRU zJwX>qX*e-oXXWmP0mfxIg8L4~GTM%i@(#xets2L+dh0RcXotnvvGWUSfKhXHarVt(5Bvf|&6E2o=X#6QL3bOG_C zyp*TpdTM{)6G`cinkg`fEd~|JT(|uGxq6gdbFK#o)L{<&*?E&!Vo3 zt^P6h?NSbJeyZA!JPABqWS5SCEvyV6k7~v~SJq&SD@Sb`)_d-JBK!T@iy(kJaU47e z&|7Um$Y@<-YPZ?UnO$m)b`_{C0|s?UgdjB|2sa}!ev+vCPQCMO7|bHD|HH7k9cK&#LOGBi%H4=$j!2 zt)*FKvF&dQ9LaK!s#M}eM&f&*6pVppo*#=#S?X0HEouTT>aLXWGAM*;5df4M#~~;O z2qx&QJve7PuCuUU2NO&k3KbKfm$O8{zOwHkL-fav6$wrPTfDiguy&mlObAzyjzS6Y zgmU!L+sK(XRD*k5+7Wwl7HtPQbm#g=;3&;?#Il6(rLO7I@LH6YI`Yc6b0a`EDK@k3 z<8_h;M8l!l=YfyrO(~p3zvl-uW5v9W*~t9#F8&v`lx!;>{N%|~_#ige4%`!LE>7)B z>&9lCz5KkDrM|Pbrv8aD=!6;^cMDT2;~C1r z$Cc^G7B4s*sqf_x+a#h8nodaO=Ju4sWxwsXzy+ng&u2cz-#tAVBO3br^`2 z8jR^9Er3lEZJI3w-2_v!i0&fthEye0HTl?P51N7Ol~V8xiB&^}m6|La^hug#&f4;c zOX1^mq>k>PA_1MF~OK&%J`r5EnSQVT zM*|~o`O?7_Q&4jsp#}WezS}$`2j6(ECOSk3NSN#0VBNLbAwa(>Ii>h;hBa=gsUn-9 z|9x??vvC`~)(9Us7&lZm(06XLr*8~#d#xJDDTNw|7pey0V3JJ1!0z4?>gsP!2%3Ws zsve$U9#8|LJX#{}63syvinepG*12!~XpNERaU$ zunb=cdN}SxECrlL?MH@qL1B)j{VOcze1oBU^5*k7+OeJeY$DOt0!xiTgk)1gnB_Hm zL}j&ln^@|$j7F63wc0D<>IS4Jaetl+IVxg`5)=2QWiZ0W1-|Q|eptHOJTCMrggnJx zOJO5gPh@jcAr5+$bM$m_KKtf$E=(%rP~A{)J6#bNO)cTtBWsNV?1^GJTplG>g6- z-oEc@movUhJu`K>igT09ZM8xJpL~-Nz0P`ze=zke6KcL#doSaaFeiiIPft3(;@4dq&Bg+MWn@m;XQMiUvd~uTWm!K&ILAUyV-kF zxRT;xqchHMwN`6cTzHxz?Zuhrvz7tp^E7~H`Th^S??yLaFGlQ@55f{WL@>m2W?dY| zZ|AV9(L2x**ikdBqO`%U~wk(($u2#s!@%1|K zw|i_RH}>fXjN;v+Vd#htJn)G%xrsF=9VEO>NurHQki$~u1{3bxLKuazIZLN?F3M@5 z8x)~##**dm;=0}AgzN)%9_=vaT;?y>5OqSa~F22aJcOamm7?`c}5z{lOPH_%$GMN7(cif zFY17Wz|6ODDF+3GaZFF$uU8~hOIXvJl3R0SwAhrVD#!FIIDtE%2b20g zAlx$@yuG&rq&pjR57Q)rxi{1q&S2fcYOAD0I;jr`(mvABT^ZsBNO?6_HEzRKHa@bLpw|V99P=H{ky)^$n_Xcn_5)=y662o2kdW6e zdP)%$yO=LhcM?cwKb~2}Y-{DZd-|!huDJ=x=Fa)pr@jD3c|)r&uvER6jVa+g+nB=R z{m4;bLHwC=nnsK%GjP9~1S7tl%4)u2*Bjdi5n$lRS{?-uYdRPORb(muoC}RqcmYPS zU=}uF#fbqDS+FoiBrYXYFp3Pqi!vL4X9Go={af`uKu%Cr8O*TkD@aiG2RM%GBF%?H z)6SfU_R=-zfTEQNY~+j)+%AES*MXOQTJT}J3Y|$%uM#gLTde*&tB+q~QyNC}VD(-^ ztuGXRK488Irt(8wERL2y=9r9{ikqY{>?T@NmpnQ`*6gDZEDTdd>FUCz>KIr@^NMto)C)|z6F-KU|!cD^?nf*(gwYL9|lRwv0bl0h~## zBjXz23~Ltn^mnEr=87S@0b$TIX#i26DjsPRtWhJsR_ysi;X)GouBBX5n40H;wCW^O zGsAGyteFrPaDt5Jq{FxVm^49hcd7h+z=cm4^_~C9v~Gh9CU{Ss(d)rb$YibF z2d55@*M@r5_RkeUvE?$FbTZ8u+ToS>cQMM^oY7;Q^qd5fY%;#Tl6Pdz-%ktygEP1J zE~Fq`%1t1v<2{aGD(?|(S%E}=4LAzVnbr}I@{yKB zVwV-KFuL%KwvM%F##ez`EJg$-I8(Gf+&_3$5>i%0h_O6^+CbqS5sY|-RP>A$_ixZ* zAvR;_b_u$Yv(oy3!?4K|br_pubTxNGjIDkcR(b5YXdlib#0o@Z@(8EgtIMbs*NK13 zSAFOhDIXA*o^aHw9bNSZ8#$_0x8N^UvX_P>o~B=J->2G1w2<1LlSr6&7vjz`mP^IW zkEryPbvIZ9+Gou927oy>qN+d~tagN4gbfnk>qps+@dKw$p6Cj?JtXe3tQ-9`om#g< zv64M^&s|`lc9t_Lp<8pozpk1&t_1da`j@vG!VYnxBD{|t!;~5kiV>rIrwQ%nc1|kM0KAfl) zvY^9WNFSr!@g0j3k~MaOkkRLZ&td`vG}R<73e{&Sx%wG414Qeiag*fzj6(6l8-~fq zDZjx6qvpa)Ba zbT^9{aX8!k+iKLfIb#disu#LdrmP0l>i*^{%!|0Z-_-gSiEOKQx1bFfL` z>Pv%#6&<1*eRp?XVHAFira& z1Jb;@&pg+)gj0GYX1bX?YCn6c*?dlp%xN+c8;X)o3A=dyyHLF;d_xVzuvN<{V^g@Y zn4`daUX-BRAoP@WgGh)pV?VG~^5#VjoNp=ivE z7}-|MmTwI;Vn^57t3d3I@MF1w3>X#I{J=ttlJXM*s2o0IN89@AESIE>HEzmWoTjmnz4RxI*c`#$Rek{I}u#pRzeD49u+m zIlYJK7x5cyh(A64px&TxY6&HxQN_i_j%}MI7EmCgy0DMI>*FrY(a-TW zF!)}pN%-F9WW!hB^pufZRUd;>8{qXi*I15;X}w6-MEn+!%MEaaUpisEauu~1@= zj2imF92qd;`))flXTU zV!#G>%+VA9uuD*(Zkx$>W@&eN!~Z(*4)FB4DI4k3eogm6!3vb&0tlb+VbbFRDu}3a z8co{oC;79XI#>Z}+oJugX6h#tFy@62tvH*}7R)xZPjr4Y7?xan3F0jK5!y`Sn%eyA zE&*K!@MgQew9FTTjYIn91CUq2d{RWvC_{b%GTuJ@;PZ`<^(J$g-HE#51x2TxaOWZg zhqKSu8M~CKzJv00hyUR)p=`PXeP}|4(st4WctXZtoFQx*{!9|~)2OVL(%3ETFf|29Ltcp5vcrb0gM^I4}WjyZGaaP z2q@C%7*km9$}?|vXE4ozU;zD1rI#;Cjr8v6`1YRsCseFpeuq0E!J=3Z;Xh?>1f>*! zH$QL6PpRCx`{%e0V$ig7r?yQJlSpqF2QfZQ-}X3tn}ByerrvEgS_%`l6})QYKd;K8 z!@XDnE>JPT2_aBz%?6jI`hrxq)ObTEZ_;_p^AKlXDrnc#hE%qS9gtiVVUag>-0gCr zZ0CvGyLPv}%yWnsD%7u?1^+9&{ zE*Bxm%ri*plom}|hfFo>Z1^*{_8x|9%~5MtrlMlZ(9WA(q#CE%vC(r=< z?dRvsdkol~G%M?XfD#mq>gG&LK~@w~WBBsWn_nC1!0!S4y4Nl_2J7*%Bg?Ugz2avX zp4d|WQxoW!lZvO_J;bB>j?TzXijy|VZO+|8mbNv3j2ZQBeT9KT>U_{K>PxM>xXp>u zi&*Z$LevcK=a9B5C`fsfN)6DnHwe&h3D8D0z=mH+P1XL0+abGLsy4s6L0Xa^f4sN3 z3s0)MPXBrJCU|bzig#~@NeBTLtgqhDE4TwVf+JbEwZ53)nJjW;+x}b2%}k}491owy z+`oOaC9)6}B~K7yalCNJD{^fxvZuUO_)`M09KT`q7NCzNjx;lTbXs@6-!ZaCIM=O5SRB{k9CLB9mdU33d2=n|WLn?oZi*)cCW)ob#et((8J>Mt%jH zoNWC5YJn9$XG;riDG9fSc<7t#k1Vm{OL3sy0I3&mcua>x7VF81kuLVTH!M8AklbnSB4qWe!d-pQ# zS$jMZeHddtP4>6@;cRPhs7fdu9X}vdV4YiHMrn`VLR3LV4N9wO>)w2F7!7f&V=ehX zSzS~}<;G}X+wdu& z9HHn_S@E68f6%@ke|#5gF&pL7`$oKPsIZ2;#G`>(L5D*pISs!i5W^g?CUAptj_;Sf z@tbpe?7@!Vx7gKsW6X$-5cL~s!PgL{y8_YDC|pWYeiDlVZ+JqEUr$F=xAm?KZlC-I zVj(s>;gJ_|=r)f}HrY!ziue?eEZMuP%6nXmh1@T7oR4trL=2403VN;|=6h!HWKyL% z;)ei~fgQJa%kt*BQ!ONs*M&pG7s( zmbTaWo8J#Z?j&14!~?nv)%P*DxvYHszH28J^F=N z0Cz??I79YIu?L94%T8%6!8?~h_2M100exV{C-p#^vYZVMDy_05UgRHR9Z*SmBknn7QJjx()qw$8a0wvbIrLL#WD<#Ia*F4ecv9)mG7_zl|e#tXkaJJ+eQfu~0ur4x6b>WM}YNu6^`S zVzzgPtV{YJ4>4YHqsS$~yf58a{ltJC_S^uk=tJ1uuRl`OI&b+jjvce~@E-z!zLq%S zH7eP=#VH$}cwPuo(fPze>0DT0ZB6uD=DXXF_nkF#vs6bDvNh@;0$C`CYm=ZxAmo+C zuq;oG7qH+;0oEM&9QOiK2C5uRtsg5N&k7zikEMq?H-%gq)$w){-*lR*kGHOuOZ%vJ zin~#-;WgKB>nUU@Z{%ylgK1cltS0BlW7hVTm%)crjjgb%A4uK4CCG&HEEBy#L)}*o z_CTlxYb6nj^6YD125RQJf~(7iV5HNp&#sBFO1c$z_(T0TF7BG7%$aD?3p5M@G+Y~M zwzs5}hj=HS@@;FCqQ4J$Rvz$Hq$LOZ|5o=_O+S22xOWS8&v7xPuY!ggY{=R{cEN*> zKSvtBxB-JX=w-vpa!rvr=vLaIwM2t8Fcyo^aLHpeW34Oa(ke{f%A7cN7~1d%MPIsI z?J2?=fp8?jLt_%g1JIb{*FZ66QC@m}cA`@%(o9EJ-2V$`P$MZRY38@F-4Szq&Dt0d~p z^S`lD?$V&Jp1~@pEFQW5@KW)G;H?GXfqnR|fsL2mS`qh5I_(?GrT>tCQpdJQI(LMZ zMBMu)(io+-EX$rtcbw6L1(0j*+fw+Xp>~^0dp&8}q-!#Q9#%7XpOi#)(m@ggnn@~I)mxdLs}OUdHgO{FSY06Q{pV%6cRa1!tXdx0lBY&up|KsJ z5z^gGysmdi3|J~qZ`dpA;a7oT;H(^dcD&MGvM;^WekKxWwnYgx7lk3B9*} z%?&)jaP|4`#bU!68$7?KUmRLOBOb;1>>3`0qLv=;eKwT99C^j;0wtwh6m8Y_M%xWp zbg6D-6@83M)PckCcoK7Im02+p3bBU!`m4s4yO{yB(R4dfVr|h0r9l_8$e?-kny}kD z=Oxr}X-vvh1CXmTsoM;3xmkFgJeU0^Qq3ODO9z9^*E^aeVA^@3kk!$|mO54nN4dsr z#Yun0*t~GA72WfN2+1^_iwpbv1%*;S$yIbeq+M=xv2orLuybkGR1AJJy8Ze##XC?A z*w&qb4eJ`&#PXBnclstw+1l7x^wr3oU(9FiZs#%VB-+zAHoR(^7cRB(ZnQa@=!iO=l=S}=Z*Fe&%v5sGeuiU9R;%k9_4t_Zn7e#1kta|A3gu)NH-q8@r-=8u*4 zEeo0iqOiYyrXV$YTqEkUqmwls9yWxv@2H2VcUzFqDs%Xr#Ua5u~ z$a^#l<5Fj-Kams6QL6-GxCLA%^z-sn*z&^%1`nig2IDFJH3H z_UKp(IsN*GWW!EsJYQIq`POlwcgwBq9!~?72Q+%Ym=(+x9Bkw^b#Z-|h+;_Dv@^O> z)AzO|4VbK{j9UFSlt;r>HrmI;8>!w57@^>S$3L=(y(NYngU-=w$Cn-nAt(PPQzvKk z26%c7hX-G)yqdT}LpeCvqa|IwM=o;^fM}#2P^}G)0*BTHIdZx}=_4RCFaZsNexo*w zjkFShvR3go8q=@#F3$%uc3cp?_v!+ zZ1*`j_=`~T6DaE=P;iH>l%!<-3XBtOxvx&r$Wti;^cYlT2T9u?B|;x0AWmnVd)v!# z+&r#)`tkSpd;m`>#k&!O!Z-V0a;O}3tlh%T{x$ig1AiluMGk8bVOaHgO9!K;WYG>#Jx9_iq00*2ZG1eMi40^o*=W9k} z*`YBmqgd8ERzeV~kp?$Y{{bfnmeGAyUL&P_?ma*<98J&(lG<_r!n1v*hO)@&TY3~A zgn%fw9%kcUviNIkx+ZsvkA-Kyk=#EmZ=4jv1E$*AGjp_x2GDr;Wk-C*Z7DF4zv+7u zB1}-Hd*B?V*_ZLkmi$w8xUYCUU9im+4j611&2!&aYLxW`y?XJfDY>oXg%^@&)(o-VMB36k^|`!dGl$1S>Z5f1eIYUt zG~AUlUA5!kpSdEzar|#;6E|oevakXDcy%_oYD-lQMg&pJstkfugfas(PpaO@JGT2@ zY!?E}YxD0$rHCI||Hfr^G;BU}q12H#qt^T@iuzE$)4XW3t;JP~KT!Vah(nEKlzIp_ zNA)lM!_|yrnB2uUW%k~|fOBo5UGj&G32R<*{70~XwJOUlKPOQeNLYflf6a@!nUSR= zbVY8K7Xf}5eCL8$wLWLErO_ho@>F3P!tz5#J^s2&V0OGq&{HP&%{5$eWbYJO3Nb(c zGq(g76vFhz`j=)n6(LNEX*f?lm{BmD$dHM@>o`wnaJ&+q5Eu*KM1XG;|K{4~LEmLB{_iA+ zPc(DOCDXc<;jYe#BRD%~YkM!}=zb`J_j=3y#dhgp;@}0 zOE5VWT{YKvfQ(*a0Cqnkf&Rr{=QJJ*QE<7g2oEC18;B%p!%D&ch)_9+@uwPRZYp0zC4L5}dw81+t5~j^}w#zT8KQrNwMu>^8%tY~u1} z3-7!p^<&NCjju|x!6vvC)RAUtQ4ShEo%uO%5JX{%E3mUP?j9%gsqZ8Svz1 zs_;3D>$u$shR2WWDZ>0S){PeBB5Z5rOW4AAveimV)TREVw(VU6r#wfKaGeM*Y1n@F%;#c=I zM+b|^FSE#X93cS?k##j#2L)h#gd``4P~KLPlB2b!j8oAa;$j1Ra8mfk{DMqwPljEk{QWAaUJE>>mvGR z9oIVw@7~HfE5M~gZHQ->efdOJhDvl`ElvXPA@ z3a;vnn?QHg~+UdUVh54>dI~QMVN3hDRt%h(qgPoW9hP57sw`|rM4%z zXkAqo!ra*Ttzr2oA-Ynsog-MnBy^HqE&_1GxQ+jaIcRtmWW@*0c{Weq`s<59?8`O| zJDK8pA7YtFg$1<>pR{blt0PAuFR*AGiDc%J<>S&$1Z(-@RsXdxaAyN-Q7sK0!Jh-U zd-kYo%XU3k;x)_duxCkg1lhaRNORQW>zT}ayPd>k9U;E|bcJx&mWA47J3g&(nMJw~ z7kMe(8eFhS;I>phAqt13-($Xk8)_A=wx-r2jy3jBG|5XlZq|ZFOex%<3olBkOwbQh zGiVo-l~B8%Z;C3Wbiue(UtobggheFV{m1Y(eEq8CR;P0Z5vQ1RtU}jFweflmgA9FP zA#A1$48d;yC6_Pm6^%Mh-wCA4?63F4;@C8Er0B;TbYv?YjfXCW_Bo=dBd5w^tJ(?$ZWq)WQ32_q_MXK# zV`07hEL9FUD69d#S~f@X>}WAuea;=yBUa!mAQ>X!585cR`(f2z7}I$sg^fL`HS~9E zdAizXUgCP9R=dv=)pEGriYxbb`A{eVDl2%Dk;37?NtBoiIULWxZRbkv$Lz~1tvWS9 z+m6oV;P$M36~3^wgPZehsDCs*lxZ)~V-gkBXL^n|0}nx48Lw)*{l)yY=F;)N*U4JI!^I z7s24;+&9oA+>6|1_3*HVFd_rt%iA-^0vy+fQIwmqtars8LCj29)WkLqC>^d1l(FYF%1U=$onhjFDJ$`6v7xVAbgz~@KVtjU`UADg|6iow$ zxI~^a@ue*AD~UP^)#=DI(y{G{tR%e|3Y6cW3_LP-b@u0Z_%UMqG;YUSU#&F^@Pz|N zg>j=7`PI>Q>^vD7Q1glBZ(y8BB=(%|2xOt*D|AN48C>ATO;I9ePDN+JVyrvTM~|PGaLs=0QEAJfRFlYaTPJ znscqbSnp;_D&U-U@~mlmTTIio!jj`}zcXFkLEWZXFGnB266l+hQ$$`_4&mFZJKQ~} zT|;(z#}GlboRhprcFk>;HZi~|ANlyPf;p@v21}~2E=&hjbUa$jY~66>&p;m-xkl%| zr#ATp1la?C0u9=xsG}tZH%sjhso>e_W>!(&B2Dh1Hfk|yoojp5_DpZ*D86P1cjlz9 z?Fq$yc1NnZ`4CTM?&Xr30u7eWfte6j8B1Ne{Bm2BJ8kD$I+^vVb8QojM<6{brzmhlkdSlyvAZ0$|2LYoY%?a-6r27Lcjw52v_taK;bMvj3J(^k>Z}d(tflz9 zAn6oo5k-RaZx>y6`Wr2nrZmA1C6%9A)*FVm_Ml|jW4{aN9;ShtpT_s396!zndY&Q{ zkz7||jcAfY;CYchmLiElFSX!wBPYh~=XyH>Kj7oBW%ZPr2GW5Yki+M_1%9 zOLpDIJ<$>O`a|!)C#cnoRbK?XxHZahh{jT|IK~(_9=}4?zKZO=I-uER)iaF7l#Nh! zHgE*j!R45vGB?}@RTTxLQ_bJ|hUJ`u-b`)w^l&HR&8+_KY<8~f;bEsf>#Fk-*Y`1C z0l=YR(PZgc22`v3se4{`@y@nH51g&0ylb!B_Yiu1sAhG5KHWtlE0tj>yyOSB%ZBEq z==Z&MzG9%|@~~e^6MUMFM#@5i8b;RpkAd?a)p%_s1;^goAYQ)?;oRb`zp0UQF)3bg zFrqG(0hR`-^4OpaNNGP=!0H~lmY$2=g*+VGB39EfNV%BYkhC{J4tOZ)vL-Y8Eov9? zY3@`?OXggc$vkeK>y6LUo-5WDjP80$1a ztlcMkQf)@Qdyin10V|@jmN}_vS(|BqBt(@XHqoOW4zx%MaaR?w zr2ev!Zp)h@?c{9o1nOik^V4pWn2b~5gn3Z9YF{U|<~G#vnM0i-F&^|tV>z?jmA(mH z>Rg?Zm}wt0*Ns?CbH6*Ao;8g7NlPM97U0X0!bY61W*SxLfaKS4!5FOp(22ZV=n*x2y6XKE1o$fwU`?Sc87WQM=M&B6$p3Vz29=~X4dezQx4{AM0vp4SjV z_1PbU*nC0|IiU@FM5ooRILIQPvMdEztT(a0b`%WjT!sJi-2bn@Ehc78&j0h{e^Y%U z;aAG(y;GA~5~L6=JPC^~nlh1aRIhY2T67z2Z>`vQ*-r!s2GZn$^W)im0t6%ACw;Bt zV(|jV4d9=By-*_m64gyPZpE3Ee0Vf5$8OA-wMBPq#DsOCb-!@>bn%JKgc*`VjU+9H zsT{#T`Q%Mw4s-MA_*3`k+(A%qgTC;VPf$?T{bBEsXkBcaVmn%)Uen_(Ts;d#%&txt zj#?7V_S7OtXARss7AX)Xi22F#&D{!MBHUP7Iym%cArNpka~t^V zhxx1I%xmO6FG>Ii%%|$dokF)AQMdK=JMH~agiopYt-@PD&1A|`5~D=ahxiWLjksrs zmLM_1VI}yYo0&L>3)xK$l&}a}=Zj=0Bq9Rf?2WczHYajM=+%mPBYZ1(eryvBj@MP2IaskAkyPjdy z*id1>ww}D;@Yhz{(hYuvva?asWQF~@%ga_>>(AvM?TaTE2!i>+;@!1T#JYGQkO}Ev z4K5zJR?BoJyN|@A^NNk8_Um@gi+KG;%j&-ZaE2zd)RN6DoLnpyw zEJw05->e+uL^{>s8*lW>-!^rBT(o?z141ldHJKL+?5?06lqR;JO=qZ4N+Mn!3IR8` zFT9X^Ox2mr{3%KcBoN5>p|*)eXL+jeJGq1kz>Pk-Ds&b#E^O7Wsb0Jf_4r^Y{UrW` zkd|0!j==bd+LP-iY>f0g?Jp1#bczcYh$iaN`lbeuz-T3)#Zz9$|{IVIKD8mseC)UqM;abWl3AqRlb5q>&(=`TL7wF7s z6zQf`YgH42eC3!Mv%^cg-aNA9Cn z(d`z0Iy4n|SV-^Ep&;}?^>xKH8jFGE9e~=Tb)@~O1 zHnMwH4L2$6omio6;$H46n0fr*Q7APITLjLVRQ5hDLa zyc4JHSJ9foz5RXoq}U6XOBk8QAynI zwXvH|dU1Z4d#=32e*M@J-n4Wz(&T0PJYIFx(`(tw=nuQ5^e^lHQ9&}~ZZ)!1C=&o= zV@3G#w=m!H$MvZp$LkAC{%rQ^{2Lm-RZM zSjwd+E-kD$w0Y?!R&oC^e>*zr&U5m%tZGm|-()fCT1Pjcj5OV!9rf#hgGM(ZnT?Qq zb6@y4P_ACNYRn<+VvKGpEm}b>NZIaAIhg1kpf1gfaVGwOe*)krJJJpC*BNlG<+maSjeuzhmI>xGY&e?)FUW}LYN zeVlW1mR{~tXq)j_c9Dq!W&COJ@w+}?dYE11Vb3;Rw(hEU8+-A3P_GTDONr*?e>=Ur zR7dRWexOOs2ZVD=ONpwdTFAsTX-}3$C1Q4>o7fz=FTi(}d}6-e1~F_iC%sU{3B3|9p#J1AoCqv zKmb%`zjj7mD>nH2`gVzYg%h1=13>L{7Dk22nm`amqVE}>!s-Dzh)6k*T@d~NmCx;DrjoLw`BNKgwi>jAz?O4+VK{iNST>d?w*l`d4UJ#bXd`nNMgSC}Ixw>U%X@ zer*v*Ikp+cL|4;>r;C~8Y1JKhFxqpLtw$)#*Ra}CUi#7o`{8WzPLOLI_4uLao8-Y_ z`brfwinbqH-qBlidojJEDryPzyuwjDnVplAL-ydBtNiW-+T3trN9047~Y}vcjE(E>dXY`6&u*F(ZfhyG%p0?ZR;O!P(}xEq zf3gC5`*6PKY<~LhXtDtSWq%?$MnWNi{pk?~*&c zUQh;XiAW$v_c{!>QT!idT?+WH=l_Z1HWaj@;OHZ01UZOz?Jv3Ap3{neU&ngXdg(4Y z+t2lm8BV&V5`cy5!ZT7az$PFB!-)Tdo?j7F+<`L((A5lU4KUj+D00Zj!7g&Hn-^l%D0=HG-P~w8Ad9PYTu3_X zL7w)0kwEc|%8}oMd&IS=^J-2viT$N~r*e)Ej&53?FQKK=s9iuO3hL1$`n?iwM10FL zCIO`FWgt-~E8;y>j((}JVc+IbnY(3Ax8jqx83iC2<05}+T5k;iDW!T#o|v%4TzF=A zbP7P}yM8mD4;Dlib;_^goFLah%T7izN4K+#%0^vMFsL823z8Tz5<-a5l>o!z2pAXS zH&qe6f*qd(@O$~C(_`NVkIp2?YalhF{$%z90w8o{Pd4kLM;H^8vugB|PDNs<##L6I zXGQ1~kv=;W)JlxPavjAEQTuPDA)>3On$~YrxW>^ci#UQNKs0T(MSCIHnG4F=EUNIqcDtF1b{IkB7-eH$^!v)kO zjx@?TN&Hu)pNwYB)@{FP-opZklm6bgnE_Mop{*<3gwtu>QaY|luDKisJSC^A14KNR zL{xZ~|4(|+g>kI&4iLb-pa!>9JLrP~KU!uwxV)|8FfW7WMtSmOpmTTopA5`0$~^smutuFI+gj}^)oPV)k9Pm>A{#wONO9oKV<65(k+ejHT~D$PXf zbStkuEsl0D{pzqVSaXwp&8l%HW9bsQ@iK459Q5OJs+x|ApXRBsOt8`|YwLCt6){zL z>}GG;nDfn**&6bNC}+eT7qj`Aajx zGuzw^KUW5}Gm}a`U_m#daWJ7~NLkHqR*DPlmUs)5V*xk_8VM^`3O;#gV!ETNhq=GQ zS(K)x+iu3D_w{x!=NK(r;<4BD=27M-ti)nIum#y=4MXCNpei{zz#~=Ak^jn!eOwr| zddv==*YQxt%hknT$vYCDrO>eLy7*n?-D9(;jz3sZL3op5h7?Uv;sI7eruW%7d2kS@ z&%#-O5Ms5uiICe= zlb7F)o_eZ)_w{@>v3U0SSYbc5@N#%RUh2k^r+_;!!$;SEM|bl(Aie;B2Xq?#tJh@54=zTDR8NWAE?C^ z&h|4J8W~~$pnwTF+%OXYkCAPWPq)e0Y};_fT@y$^j{IK0cR3*CkmyG{f){8)y^zG| zWczk_Q8AAN+;}G2=D*b3ANaUVxu1P^M{v!@yBKI^f-yuJpb_4XCj0n5{*j0#;}e@y|UvR z1`1yI)*Up$3kgpw6HAT8lfPRr&HnN10qy;HSB(xXyDJHAa!b$S5Fe(ooCOx`TTm<$ znC+%X0?bP#&N0BIeTT~Fuu5>&_0x%Y#svqP70G6*x{$`yz==|uMU^qV=!@sKKyLhj zBjz}<^|8Nxf{MyqO0|?B~mm*HR6uph#XjIGO8-c0& zHZ&f^_esV#ndnQ3zhWu9QDsM`0-gEEtcpe*PN(-upyNu0h@j~ME;h+oU@&~)gwkBF z&_#JRE(EU;7#k78qL=3YISgXyq|8AVNQjZA{XXvsz2sm$$UQ;<2)Cjo;QpEQ2SUuT#5&NckrM^1ll?SUwotsXE_A2Z=L} z=mq6R+(SqeXcXHUU zpwmo}n|*NDfPyn7&-ApoEB*DvBe!2+-?qGL{i3ih;LMw%*I#od4lT6!0rx|PQ4h-n zTdG^U+2N;3(p}YKd`&W>`Rn9uHi5LPn;~o^V?YF2jKQL83oBf@tP3TL=b18C_7BFz zLp_xHvH*|$L_#wti=vAZ3$PP0MZN^kGKyIgcPOT;>NstiD5DRI6Y0!Lnu|=*G9`$G zyx+Qd5bI?Nls8Ps6y?fVKqky2Z6^P%m~^Cl+9nkDQ$!bV8NXX97t?3L#cM^QIyh@` z>UF%?KKXrad!PKR*<@PgwF0EbEVY7q13dDVF&r#h?SGtpG0Ivn`94oV+1$78V20kr z!oErid44%Ae_omdqs%VfQ3>{`g7P8*RKPb9-F6>@%=p7;g~H&EvE}fz+MLi#mcChwqASz z;2K+pmUAA;XX$C)tZ<(+eRHGgtV=v7zfV`1E8Ci+OqqxIT3qay(Q%fk#YsS5vKcKD z!{##CGmaKS7W^nz!ng4F4lJi+)X>gSIfIS^cK5M7r0`q7^K-rfVb&<_L&qVe%f|f~ z|DMkAbOPIFqk;UR!Jpv%Czi;1!QOvxr|jvt{@X)_-5xR`S)Bh)&4RD+qYKKYViUo! z^LrM#RWJiRlsVm+0t zys)daEV+3(8-fRGO(^B+9IA0w@aLe9b2%?q;(MWfJXRWZWfIX4LntHP@1rd1B~Uz{ znaX)R_}ySSowSF7u-d-;c3R)6PQrDlC zl7~RbAHE?zzlr*xww>f@5l-6T;cI#*uOr@hcg!}a%Zfbae{e2-j5agQeNjM;5VGBA z0L*N|j8VvE%@J81o?CmSR8afbuq`rb_O|dFaT9_7Cx&4C$mQ|CA*IPz);&Mp&z!3Sh=oY<}b@sQ{#L z+$=6gbU^UG|Hl2<`6XMMO%nJ1)9dTMB3l`m{%?bLlDf3*1_wg-hx(*-m8eK0lH{0x zB7sfADjfoW8R#Y9RUiD?GFd!~mO1;6&xzpJJ+lTriG#${L56L}ym}E zAg$6Dd=P&#OG#W1EKo0;=ubEpx95OC-G0s{Oh3mxh027H!=kVaz4VF2!_VeFxB-J; zI7S&ftGIs-3Q&;O{MR$Ep;IZ+VUPTm;*?_q=B-8GpdQ+q_

R;Q-EqFB#zmSabnhIu!mJR@Sj8$@1_yI43u&x|MpSP+ z-FBa>F$+a>{uF~kL3G2rXGiiblXdif3*AULHL58#KKQTPXFo*+n*B?*7^C*S(Hn|i z=BfzfJGXRK_td}~?dZ($GF4e7!^(<7rc;TzGfWGx)QCY<8{0o=J~Xq(YK)-++L-pe zH&=-`3|L05UivyAy*bby0-&#pb;Fs3eoheMi6H5r@XjBJd6zU5oU9O$U zr@;>Vl#gNRk*}Sqw>__;sD5GWDHCZe zc{?sE4EFiE=yMQmo1O3Sac+zJx3XQ1^6Ntrrcu`A09i=dHeZztmQLgqDYU%!GN5-& zvE+I)g?U_j0Z*%0{dF+Cod1ITjW(>?cw((K&~iCNz||rg`ob^sF~_q;4!gto`n~Mi z26to8v<;wf z!>_MHJ%z4kZmA-T(|UMVbX1#TocJ9mXPbmG2rO~irgG=nEt^I)m&zXrFkoc@$o7JMP2 zVTZIfv*|3x&?8jmVrsi!QfOa^XP0?mHQl$+#9h$sr%o|=qQp$Y4d374nRN;C z^`D04e?=BEv$Om^d16c3gJs08YrVc=0RdVy^_QU)KBP-B%5i61>&iVwb*_>gZgVJje|hl~iX zMMJP(jr(7Q06vEPeG!)L=r>?ruRDh^W@W1CZp&Dz>!QGbt*Ex0P8IBk1ua~pZ6SW0 zw>LcX+9hQV))ED@-Bsqg{y+pL*y<@O*<03(E^V*L4w=b7Bu4b|X2g;_7t#udm^j_y$wE< zF=!>Th+#ej#1^&?%8Z^U9_ci0Yd}4e*g}S7WW?N>eYS9 zm^mkKlg&fwvcc2>1USNRdRxakY1%}48;;i%@hY1!67n|1`BlUHC@hgVWGgBNEkr9M zqb})+CM$Q7C|)fduFcxD{37wxm|>zf*zFSJzah zBofuoqd$!lQXDY#U8qL!_d}~cEjjo^?-*~u_DvYr2HB?$e8c(fJfkbb1M)ps<&*#3 zo-tr$uyNDwXw%|-v|s>$WzyIf&-G`al0atX;*t!@Zd0kwA_Tl$He_+;2Vat8hs#~= zc#Sa!B}<84O&^L8o4=N9I#~)cu0-j@xhm}eO4(eRnl}>sL)Ch#!)Tf(#|NOaXzs1O zlPCXOAko*oCjgPkFQpEbom9JklA!Q-aJ>1Gz6Ic$O?0oJ``d_|J$#t@ZmNDW*D4Vn z^x_jaTA*dHeRwp{+J3AQx7k)TO`}Sdj~$kC+s-`odDUET*Q5QZA0`qS$g2nYTzIT> ztF6S9K^P6Nj&Vw>oM;Pa)UHm*Z!7bSRnM@=)iaAFLK55GPSaT)dAm3J^EPJ_MdMzS zoqz&-luTKsU82gT&zvn5Xj1LVueICR$>+K<#XvW+RY9^n@ysUwJZy>^mUgh>Y}6tK z9<36GQy7H>&o;9@$LQGer*NVes;3^DB7^qP%Zcw@U-)C!tSxLM$AaJ587B2A)Cp^K zn8mB7>osZ9DGNBER*mgM%f`V<}|T-bSLeq+(Y)&~DHG*{Z^t zCilBQUWZXy2Xv24a$CICBafilMDpi{=B_C2;FvM{wKF z9)7^B;FlfG>iqDiD^Cc?VdXRej=~ZuTy6p*of68Nj$b_U6d~%UtOf%@d<7?0^<3&2 zi3i@x{Fgb*)&J(|R2~#PF~|TdB3i|RiLmS$QgWa9<`}cG7MmYb;w|*Fnbp4Wbb^z= z<9uIo-x$SN`Q{NU&jX!nFX_&Kl6x!BrGFeH#^_4?k7+Vho!K@D})7ukiDn%C)Cv~CFg2WfnRY!6SZQ(y^68l;(!mP@x1N9>fn@!w{W`p4TknDc#Clt z_((YvkxZF~0DbpzBVbS8M~b&W0QdtL+X^$tQGrFfa6ugimIa=p8KgqwTfyO7Mzj3j zG3Q>StuuC7N=I$ML&t(r&F_@QIF;lRq1!@NsLB+BzC#CkTx7{>IHVYC1`2R5M1gb*5ISl@GO? zh>*mLB=V;O&_nPxM;MMk183^H+?)UfvrpCbZL{psAm*CelZe@>ExN`hu!5Ms-CczH zK53BhhA=u7+QSlzm3N>dXuxgh#81A_4_h)jaoijrcJ|;oY%ET%xP$fDrn-}Tw3B^> zxT+4hq{>j`o{eO&yYY*Ob%SG{fS3u5DTD*1lYdJS#NGZ}xhD>bR+6-2O8W$TDv*^r z6(co_q}``+N4>Aw)Ns4&PS<~=Ru;|n8#bTWUY2+eAnl|h>8Z4cohH+ zUuSoWT)?RW6Gnut^NW%|vdOamNb^MgE4wJaBEs<{Z$i8#s&GOoHhfv9_$B`hb2PR{ zx?Syl68PMxpEi7%DGqMi}O#}*iB$8%4 zHc=!?%?1~8V~Kg+q;Tw+8JlpaA3`{I0!lZA8@YH@wg=!na~&8us|E@qgM87d`cr}( z^SXZQuFm|PVg|#*z^lR>y4yHt>z$_9vXfdGK@Ew)vWZ_R@#C~Qo6tpDmvu5FGk@+< zKU$w5h`}}h=sS|zjH9Ek-6G-JxgalTXdszC)7pI`xdcVMI{1NG35dR4%V-R0wnn|%-u z>GmqQHtYR*f4%Mbp(}#dHo2%ga!I8WbT15+)2lKFW{qU9V?%cer)AP{IEQz6MU)(l zb*nQ-;R@s(#IFhw#1Z3Lj(7KTajvVaMs;FntrNho!vE-2(9(~B>8i(5e}Cd6ry?=N z_Als;>Ao83a|LLlja}th0kTLOK zw*Knvli_8rq37d1Mk^f$XL7If<@!37Va}ndIcaSi0_Zmel7o;|Eq@}xk)U{(CC;a# zzEO0=os4Ur#(+M8?2wj#R;UAkS@8w5Tc7b`;&>t&$WCmKcj7f{^v)@I2jiw%D;!nT z@g0PdcGRJ6{B)~(Q%yY~9$h6gEiima24HLo z{a9C<=JokAf_<&fvwxkzm&Y?t`+Z+?Pf?e|NTcFdc6GV4nYv-SAb=36A2OlPjD6#I zARM3up%j4~xlS!oJnEQb5Fd2JK@jZjHhg!v9^u*`cTj@LJ~dq4wVm$w{U+9y^~RBX zw;*FaQ+ue1McJIBQDk1SW3g1}W3WiZA`9gCuPn}Ust}}G+Fri+)?a~xr-fMVKu~f4 z+hYRmbznAj(ADgx#YQRr?ebri`sq1Xk2T&*e1&JZPu@xT3ne65-m@Wa8-$;<(R$TY z{xP9?{&lYE-Fj?;r1@l`l&NO73Q+Fx98T%hw@!1aWk;D>VpES$Qe!sHR!CJ>iKxf(^n1x$FgM$rv>XYD#M%{9XZuYf6}m6_L4@G* z)n}(7L?Y-H9<6S9eu@U`BL=rO%1FCo@12BZijqqF;aG)0?Ie-&tVhG_O2R+Ay{(CJ zV{0~*I)0uwglEUpz)`N-h8qK- zZz!DPV{FW{M3)-2pcWQ;n|8+to#e$G)e5k@cL3$1o@f=H3)C|mz@fGro2XG7m2AOU zmFy{817W>wFGbpxDd#K6M2Wn8R*|ekGZU$N5+#lOniWJH`xWE-UK}ub(lCL*i*vX@ z5c&%(gnTcZGgWL*I8}E#CtPKqYFAEzdvKl=O-QI#y1rW!>(|@$@1FO2(7>W@d(oj< zo1aaoEt`^)2Dqn-)u{<8y!aFHR9XJVN?i%ec@R;HRVD zb-XqwCNGO9vluj9X{ht3Xm%)G%;Q3sE-bR0P9M6j>c+p zHUl>6-FmX%GIBD1!X;sIlwcfZ7y#7jaA!rDKjh_vkAT)#G3)zbDIoKFuA(Y{gGVOzN4d z&FxNI^)5C4IqELe9CH1)qwfDII?Keu{y)65m+G2!#3P8lE48QSz*!>JvieTeIN+Tv zFm?bV(DeF1o`m+4QYI<;qXYR(KnXuN6*cFE@SG&g;t8p@h8*Hk*q)YuJsu#QC6hgAJPpYg22LbC|we z7%@uugQsB2rR8XaTKQZz4Q@VsvLebaL!$D6pm{g2uWcG|>3Q+;C z$$DGlw+c%Uh(Tl??C;cR07lA5r$s}V7mWcDVn6=y+d!gd6r{=%SYOqR2w>#8p;(q9 zN2izf=C^Q@Jsb!V>Z%JWZZ;e?gw<10hQB3R!ERK@!QFwOB|=0;^jYH!b7FUX%=?m=+hpI;aF2I_w# z(+R!vzzPyeF|C|#!A~iIZV(Rn4bpm9&in<+CjocX!F7~-yRe6~#n|HtNc5%fy>2O1 zwj*@X{a2QehZW4=im5?o125oQ0NkRovOmo`mANwAcEyDYPXKHW>(5^}s98JSW#Z&t z)00C~Fh4ANHfIbgN$=fZltQ7DgnHu|3givq%CRiQsZtt`|9W&`yUccF@ao0ChmAQh zZ;VM%Pv{zW%0$h+KL|>AO`d`PE+rCLgRHJPh$Z-DaxcTQq}>ZxL@yRY7L+=n@q959 zc3xC+tF>IJKX3Tsa89Mlm6XFCg_~om5hKY;2j!eK^ek+SiDG!O_ zQ_y*=(U#ucz6}-EF)gCK^pxix`)8(qM6$A|Z(wD7q5nC3m?y2sx2x>b6vFmBbq(6or+nlpvGjd{K8eKwn7J`e!E_;DY~& zUyT;G>X4XbMt4feyPcroN#Nkz(~N|RC@b5#vf6h5)#M`DIV5ZXrYWblNh%zcM1J$I zd}$VYV^UekhsS^<{GQ7plXRF`2;ru#l_i4l;+hj-zaz-Tx;YpNj>4rh0T9n!gdNvL z%VAv%AM(1@vn~>UFarbkx{si*k-GmADmqu7Dtza8Pxb3Va8BTlN<-jaLTBV63E0ju zl81QYGlEwHS;pla3^o77$-k)8Tevor8)@u?KF?U9291$K$ZlVjC$Z2z8)OdbkQ-b; z#pv9wc9ZggFrE=+Yo8hk@R7G*iiIjO;e9m;X0ic=XbSqgBQ8&*OGY!{*kGcG>qTCm~F2ECF}<6_!RX7kC&7nR70<`k}p9 z^`C|?$6rdfZ9_YN@&__cC-m=Uwb`FKa30{vH8hh(`0X>MOD3Ksh}mx{LHQ(ScErXu zIX45{i0NbhD)~jS!_kzPQs{4Kn0f48)sDeQsf)#@QO#`gwm}V|mipD)#mtNz*^9i~Ce@Io(VZ}z%Z4+ZP{csE z4EaP6!3pWv%Sdanfh7%|RLBeK@SbFqaMA4RIKP3V!av2x6^!p>{xZjYUr~T?gv@8QtPCDogU5{Q7xL2mX}e4s=zf@)2+ZeBy)GG zDId57!#LJQE+u0O12HwQ62bx5%B;_<#zK3UY!Sz!K%v47lX<2V=qygt_*;bU6A)`J zlGtudsBtRucC*N&#>8`Udg1XEjr5H_o*~P0m=SzRetTQhVrOel}QouFcQf;5B$-_T(Zyhi@DN0AW$ac228mVGZ*x zr091NvFlhFh3t0H$$@n7AUG?(=NucfpGDNUFcn8SN? z^c1;Btt0N`s?KRO=65sHwojsnPfVtwvsE7Sn{gz^T5PH{@+SM}sDroF zojB-nrlaa>Om{=I@^@vGv)~X@$xEv;tum0@T@b04pa+)us21Y~7H~NG`)dqqoT5RW zC&9Q#ZMkB&M~}X`zN+s`Od;`W2#~8Q=C<`6*J!@hv=$trKBvK?epEvzbv-i&X|P0`4E_x~6FtCwbqpKW=f&!P0qb>X<8Mi4 z8EW}}xSRpdF7}>{1>ZUajVtA8QG-FPE_kbsyd{93IIi5#72B0F5|f=cLyi~PyoEVB zy5(3El;34f5`?j6KE#s^wGd&-B^qn$Li-~p=&ep)0RB!ewv?-3I-OKZ3SX7smOIj9 z-64FIgpB=FcG3H!+8Dhi$`(IC#I|sO^1*R22|URGy!UKxmgd&CB--b+mIhdPPsA$<^N&N>qaPfk+!& ze;+ZZ( zeYMU8t!7i*dUAQX9DZZwB%)Q@l!i%(oJ0aL(AKK8=^8WiC`{jMdNfL8YX{Ja1(k-O z3{nmz>pOI0Bt4DDA1McSGqMwpX*Bjm)25x_2!lDU(6C74F{0;r*{$JQCH8tFMeH8E zPY5diRTNUJ8i%@cQ5wBZKzs?{Jr;z(()C;k;le(cQ0yr34%{6&vz>1Ljez$DZfg(4 zRvVv%bmbGBKiUkSfx9C~EIK72rfPSSu`=(vx~(snETGka5iIGa8s^C*I+|c);7*0> z1@`Q)Wd5o`Ffo56hLW3T5OpG}a!bAXeNK9ILG^h)_BhkV{@mMwwbYCDxlGGcw8hJm zyn^g}Pg60?7!hXcCQdi|0!W?e+2G1#7vL2=+=JU)=<{C{A=hh;KjiNo>NrBvg*i^8 zA0A^4jtE>|$R|}^|J9BzYH*UI4OQ~{<|)Syf{Q;U?xZQ)KoiOl4o-D|$}PYS_YSx5 zWTkoMmV=?!Xo^IZ(MGIJ**f8B@sBDixU>fo4%abm^8rML78sPcXR5F>4sg5ob6LPM z3MnZwia;j)?8DuFKk3MBLStIOv=y&W>svCKUz$fd7)Y5@g~7fnITf+jMkaUGcf}>= zglpjdjOba<>x4vs%r97fD^6`wMaF}P46F!9SavW%BqPBrfme;fF4_T5`$uH+$Gr zkwyRs35Y^h)~aUAlDTNq9=3iXF+f}=n(vStYz6hwh_l*ZiXsLM<`3|mT$vs(^y}onm#pJof zl8HZB`)pSjQ*&x!Gp$`Hp^}Keo_^lafPgt3u!(v37>VUgje|%D(GT=mDLH-(PuinZ zfw6&h7yNHU104z%fVN&h>Z^dGq(`c8j=i+tMS!3C0BO#G7nSH4&gk<4aS%zR1I{3JcUfO4BdCi&ZD4&2|H^16ZTf zvCuF@Z&Os>{!_lrs(Llc7w^0Jm9B7*D=|BQ6}rverW4ro7W}xRrRV`L0bnFy{26Zf zEQfs->wr7FE;_DZ2Mor}dJ~tue@>}SQ}XlxKQp()-z81b?&st!Q*tV>t}S4t(0<=3 zRtkM2bGO#l)*1BS=#Q-OYQlfItj`YHHXtX!mk}(u+wPfhQ|2-5x6u(7@X4JO*WFdq z(W$@*st#dI0az2Kp4v8C7FP`59aQiDmFp81{^}wr;tLg99i6zv%rpmj%(r#(L%;%K zr2$5f(HZq;5I;OsMM#Jzbwtwv$;v%6#KUQ=XfRm;a?Vl9S0Cj{c^^u*PrTuu96zy5 zo@(mVZkx|t^0$d)7tV@2?D=iH-pZEzJkk4?lpp+|19D|Q7^FS6=M38RF|*PrCncsM&ZCmBJXm0_rh}rmlf0~! zYrPz|QSOO?DHzjwS@mpzv*1>)MC!4vGM&~C$NcO)XT>BWraes#<0nR7QEp#$UD&Kn z#cU$tkr)NC$E2;WTI$8Hf_cYT8Rvk17jYTk>n@11xMhf^a-DPte)FzpIu8X0Yy$F6 ziaW(RPjjn|k|oSE7BB32$T7XIfgKdyl^xM&xY_hCRhu{P-3LNu@(VQ!hIa2BFGbV- zPrM+!8Qt^{Q*&g?Y2;b{@NJ(>AsUI6x;KY8q%I00xS&mK;xOSJN~FN$2_rsnI`PoZ zxa62oRV;~TQg=iI(S-(eC6LQW=lLcDWS>^3>m0AB5(`^!-1l;1a|`f-n)1S!G9Zi+ z`iW*&9fUaLP!TWJ)4@iW=VPz0^8SDT zQvt>`|K%IZ^1sT*Ffwtn{QpzTO~1;^h8V)H@{%TAU#8}D4-kl=xL*K?K;R1bD0mB8 zo!BhffdtF`)6Lx2iR2>UudNO*P3PuzoOzI`8N+Yg;i);r<^E#(nSW8S=E)d#)@Gf% z>&lbf!lPl+D}{MVF+xPbf#OivZK7C!)EvE zW2`iefq)W94Hznozt(f$dwTKM$<|MmaH5VSd!PK7jE0)m0=!AH9a zO%R1FhSTucpViuI=(?7RsLY9`=sHKQNl?l_ojN+R_btzBW9j;LCY^H|7R4}dg~TIi znSR_@ldp4si-Gxmy}luLP!hcT@$Z(55?aN{V(GV>O%RK|!k?}48dn1ES?3kQ{-Tnk z1kM8M(fbiEr_9()_4*QXWTw3D-kj4OqYb{EP_-jrpZROd+umB6^v9Q=mE$kekK8%M z>?f$)5jyYN!rqC9Ay1gLH$iE>T$8=T>FfM1@xWVwVPsE$4^{GDI$vmwoEYVDLS9ur zlkiL!yRszs)z5_*?NfxN&Er0m#vzk?xXpcl$W7 zK5>@s2`rH@K0+CwG{`X0LgE`8BpOn;(y^T+Z2k9{T6)jg*bax>T~14g@-LSX@@spMICFXiBhxdNwU5z)OvrnD zTzl4;q&g#M1UMj4oRcVY7P#aC()}SxRersbdCI*b%T3Wpzt!q5St1W01K`Q#ai-6! zZOC;mno^AG^PZ>^0`*@dzsM?>UJPXVe&GvFHQY{Q;S6v;ws@D#@mSY$&oY!^eX`#TSg=BP}juD>mSyUN70jK%oYcb zm*uM958_!wk1u7~>XLHmWwyE_NQU0H8}dMX{Uc-q7F_%dbt&KxV;HpjtyR@q;EtPLxH^q=TW?t(I2v>KQ? z9GM(H5DWm=L(*OUZK(dQY_BX#EdOJu{&GNnnGmQxx%z^6@Xdi~WRwXBuFQ~3o!Ts- z=&Ma&@4FzO))UC=%=d#SjgYhWJ6>;wim@hfpQ#{d>+W-FX@SJQ9%st39YaKsC z@^~Z!hc%GMJk&bj-D>&4a7EaQ)wjFu^o#0NUopzJASoQTYWY`>k@s`>n*9zCrU z?WSNeVPTW+Ib5k^s#Uv4;PLT%`VSPM(B9FfPoe-sR+fN>W64BWhlajp82$Cag2ya4 z@wXhpT;}gx7K}sD=&O1^C=Wttu7k{;Ux89aiHWxtBc^qf#psv;USAIf78Db~Pu(w1 z_qJ|Zgb`C^?&5BT02E?^p`ZW>JSqw>V)!Q%Uj}T`te4YtzS<&G3J4~WDu#L;lRt*u z_Z`y}{49>E?w^+W(z`2ssZ4ni7cnD9AU_hcDCh*s9HXo=@O)3z%94WwrpXau0$9O7 zmhrGf7341s)ObB`Bij>Vmv&khA(W`3e%55Pd{^?TYmNNU?Gf7c_5}a;u*J|Wv#krj z#x+qU6Jf-t8VC{kvuFJyDg`{_PJ>g^Fs(D5sa$i?A&^5WWtA2kbq**s>a!V8_nE_)fxQW8z z4!=}$N#V0#cCjAWO zshyYmWYfSAiWd0T>{eg!VNC~LpRUhE%fe{fvd}y&0qY~-{ay$Vgz^}8Okifnl#p?O z_Jy~!W@ui%sxjcuhs`y7BZz5Wo*+@avZLZd`j}abWoengqww(gSN^k zhFsQdZ}!4XIix7!u9OuepZL_d2u18j6STg>ho#Nk6fj&5Z)}yido#PRMMuv z-~dGGI|`~6)4%bL%>VDx7^_wbKABr*<$COK;^;`Az}2=bw0!az&5O0?MqhFY3#(~_ zy|f;l;N7X&@e=q)%IPLtwQ=q$(rCY;uew_76L>(JSR#w`BVR@kh`nPWl>I$Gb67Ex zA{>D~%`}%Bvj7~XabfMl&?0)2E@~B%JF7dYOJec#o@R`RJKGMpIq?wW8yW6>OnSVo z*OpJ3uW?NA=BfIq-8-*x&u);JvN(EPF?Kege%t%qBlOry**Jh+iO|%w_rQns)HSyu za3&uKb{^!f8E&U( zmeksfE1_D+mg^Jx+V$7z%HQu?vYaE>yMI_X;rJXAa%-&9>wPMed8>cA)G?P;p-tzz zUVyFnL+VkHgu(|vz|>-Mi&z+wSGu2G0jSD|&QY#7Zv3ebkM$OaZ&VTtOrX`?H~d-k zKT3dB5;yhu{moVXgh^Uree}DnRUCM|&7Dm$cX~?$8wWQ(rh65ATr7FIx$R`a##xT@ zu%xEKx399&IX>xLdNw|nT*bcA>3Fj&^`zr`4hQpyGR+AxB`d7e;x+s0&<-`si7H7FF#IeFKk`1n>2t*f9t>YWvcQ8wH&61aG(05GzM*3hk#we za8sy!dbrM(hPv9H^)k5HpZK;F+W7?ewBgEdbCfWTzpEC?_?O2To&UKF(gbIbQd(>L zR0)l2Sv}=1!w2c(>?pV%cg2TrQT&+fxoC~xb*tny*QosRoxc5cWyp`XUB77xYTk&n zoIIG>-cr>a`!>f@V5t2ofXf4!p=zZfT>kdT)I4B)Ju0V}`9oTtE6u!A<)+}r%8L*lpn7>j!EW|F9{fwG z&5eTS9+w@3Vpjs8im*%xy<4}3JlL?FsD3MBLj!;pccPD*8o^@$PY4s&DEYg61 znXiZh*l9vGYto^Q3SQijaO1Bh(|*r`sR9R@*$jNn%cG#T5Ta2_CSoljJ@vQ7#0&_7MjG7pdiCh1eUK4k%ltf{QPWxn<3pv( zvX$?UD=#0rR~LP==$@rXdH{;YR!B*9Drjc;zM+sFK&B%5<3m*Ve1mmjD4)dAQD0CC zcDm%)&@6X0fyn0qgmkM@;T+1!yTan$RU469q2bR6>VX>|HL5q{&s=lb-LQ%TrpoAQ zAtH9-9uC+&`X?F|Y!iB+xQ$+uDPO7Qj<)RsYz`h?++D#jiF#NthO0s(m;aFgCbwRV*!9To+-@jDx(0V`%2cODAMWbG-Lp3xPq8C))J<#+Xd5}IW?P)o03Ogg)hAaSa+ceR0VlwS6F2Oy5i+`?e}i#bTUBu`>0{7$)?|%K7Rm=E3|-BzbtWclYWy(78QqZ*@2a!;@O22LCl>F z{sphSk(c0aLBLx@Gs<$e?7Tt2$YYQKAYAixEB_J#&gZnz>}e~ zkW1qK#1uNOO?8}B)=un}e@uJUT{qYQPrZ8j_%BjExIeCw{c8=1|gvxJ+Aaq&3 zzm`dcG9)x^FAI}`C)S&>Ftnydo8n5M z5cSl@a(KYb;~L<;9C`Cxv~8}>IR08KP2CiWVeU?fNT~9AefZRFUMt? zTGvZ*b1YW@*nD?`wQb#br)$7i4?3X>=r~n3Q{^0HK%f=IId2Mm+Rr)_XwMc6r{%dH zG|xm(R+iKKj2~@ zcYLsTfiX_LSn4{ZgPP5?0e8;oeyyAPhnxCC;5n2gh+HnJGcpB=yt?!}QwkbT2ILY| z4lg!ai!z>R(qac6Go-cuTeZRjx6sTor64vRv>uTXkIEuWt8pd3u&mc|f}SJzwA#l_ z^9_!-!fTNq>Vaq?o{IAZFL;tej^q#)$=i|y9g&`Fl*)lfe?Z>_bHaJ!v(2IJ0_Kn> z%XZ>rGGw?w^^kWH@>}>^Qw@Y>^2idrfDLE zR!KL0xO%R^r`%+A?Czxl z$^uW?vlH$XE0~e~#Q~F-$t3elVEAdqDLYRr!o+7HA|O6UdFOG9?K9B-*5x-If)xRAtoBCT3R{2QM z_(b$0t{5bZv10h74xiEna;YbfMrpI+^#Le;13khp3k70krq5;NvG9j-rFA4}b)cxl zU{p#Ql9Z5t!?T=m?nIHHCb>QyMC}bTa~2{-dZTl)5zN46Jl9nATVVGVk@0zaEMpxz z+Hh--_ucDzIqeVHLCci2Ym@*wH1~#w zYmOphT*<-Y@e2De1DIg6vW%p2?W8Z}OSjW& zDxvJ|zvAe&IjV6P4q(9>>4}22dn%t>S*m{ak}Ddpdy?|bfGD(%OVcVz=RKMNC@NVe~ZGH&XX&*|nGP~q}7ow|GIKSz|##0F3v`Fa$lp)l)j zKQ>aIxAJKb7C4(&U7O9+>27&}Tay7!N4|HH;!*Cf;Hsk48Rad9Y4!}A&|%-o{_4eN zCsd~YP1^Whh0+*V*ckpVy_f^R_oWu&aZGEmNkXat1O+q$@03mEsatN;>uMY27t zq^6c}xO0P(B!bK98t@cElOXIEdy|P-t-mz2SFy@=yFc`Y<4FfEovb^qwrXstuAZMbUIY)r#}O}G08V72hm%Ff-9<`TCpxxLSc363lgQhcpEP>;3)@Y)%M7hH!>I)!biG z6oZFXv!E|Nb^WKRpWb-_Mkd4>z6Y=4USBxssBrnar|b$l4~}a%?mLVcL)EuVIRVFF zq4r}5j=s8HFTE-7PL3>j)ZO<*o#znt!oTlPLv!hr1b!n9MY%j(cB2-sKR;7%%U`!ccOp?f` zk`&Nozz%qPwLn|l`&H*)q!HFfxLC*Z7tlkl)OIgTjY+(+d6Ks1dC8#C=rh@`HeRk? zjsZ$dCy=~(8^#`8*R>uN#KxmG?&r*&Ws3J0W&m+$o}p;*qVk;Ru9`DWdoyEy71mMk zzs~|-c=#4=r39#NYvJ+SOvd*T*ttxYk*mfbQXBFC@n?w<`0o$1#d}h)V&Ge(<#)y8 z5XRrRmT<|k-+|W2A-idkg)1ubNiWhWu4IuU?_PnkxTVi6)hIJL`GPUQ?8n0tOc5nD zX^<$vCJkHyL4vZ4>V-d}R7@bD8ZiDKJ)(gpz5Biqb7)M?0EKxuwp9A*9Lw30hLe%w z55>EEO|pCPUIGoi<`<>^Im9sRBaBFMq6+-GYfs{4zV%4jDBWg0)|p_>D$3&;*TH{$ z$P#}}-AV1X@>eEQgOh4V7@vW3mQ!qSS~MoHF%!Nkt&H5kEX-3>AHKp@z6%a<;19-I zXM8`_Ms7s+SB*BbI*{gtQm0zDs4&wq3a_N~&ie*6g zKujbeFJ=o)p7C`)&n@QUe2ac;QhLa7bWiAPbYqMZNJj40`o#*#os}%G+=!r5v-PQw ziotx&7YK4|g5EbA$Bzqxxdejgs{Zu8XXghFblP&Ux28b_bm{I|sI_ zhYuOyh~zwbw$sv6DXi2#2Y=pru%Y_uIRX?&cjZPG=5H#^R4i_r()DokV<>S2|Kn~dX1D2c~!H}WR1@b)^Z0`P{!HpdK! zgEEirg?859Z6X>*eTr$F#;g0Qc1i_i_!?a>DM&aePC~oSM!Cc=vKsFgm{- zgjVqsj*udjNXV}sOkC`VaVcJeTFW9 z9)im3?A~kruT~uBXIRk@twH;kFWRPzaepg-BQOBKt`~O0NJZ^?q}8| zrl@BZBj2Tr|3}ph|6b7hZ=?TzXVPY8`aed$_HUU3n(s{QZedfIW#poZ0*b{vof+Dd z^_+V>d`@3)Gp=^#AQKI#&G%OhH04~wJe6)OzKIkGJbceX_QvB?KBXPngxEh{UY`w? zsH0zW$-`OIdK7q-oz~ERDD!7ZN%&3Vq&}lhyW>O-?&VVN= zOGfQT$XF!C4=N&9dZE1@Mx-3ggb5z>#*Ziuh1vm0l0Z`kcx1UIh(Yu3CiuN#u3#|` z+1Hax{5+s=RSL#w1TxhB zbRAp$8DRhIIH&H`>Dw!|#V&6#-ds*9uSp8iMM?|L%j3Ta-=P!@rUc zy|vp<&*TY)`my!W37WXzc#0Ix8p#%uPdtg7z zN>GFuPE?ed!71^^zsCU+kaw~X0R3%e;@QK(EfNQxW2Kx zz6O42Yn#}byRYS01oCV5fiSJ@zn9(IUgqY~FwiNhft8K9DbV=G-%;HbYx;>46qNq- zH(hq~og=7U{GOLqzy$vvD)mrG@WVgqS2j+KU0MmlfZj#JG{5~ESK5DBVxG&cOst*frW^PP0OA;G0|Q+&a^SDGxi zX07fG_?*_7>-}N1hLOR&@W6c8MInpTy7}%{_=DujgFX{vA?H@~^yBt0R^6dCtGsQa zrj}c`C!y{C9*ys(;eqAZ022H@44;++a2{}7NBk~TDEjbBv!_BlDq~!Xo^dSQ!u9Tb z*^Dz5qSFV(A-%GYF;7bF02U=fmm8Oq0yD&)6@NFp!PM3262Nz)EIMZdOf2=qnu63T z6Mq+|w;#BoDTWc=5ae_u;+_aiD&r@gh~sZ+pvnu_t~5!RUomPRPLKO1gCnJSC=`-t zlcJIJm_~%;I6q$B0$@$Aw%W7|WxmCxI4^-%Bk5k>i;N+C7x{3Qll9t;6jWX)f1t5y{=PX( zo$Krlm^OP_Z4o?e5h%OwwT+q-h-N9rp%uSgfrnfqe^02@{9RS9HU4|iJi zDj>s!W8;H85e2R{@htGx6UJ>M;qAW0F|Oy(Po$oXKkYPJP9hh4O@skwD9p&ITJWh%(<=7@{jpQ_(ukx|TZ!ka)XH6yox%*(erQU%{UB z@+>IUi|O&JAgbiE#ZjOj*hX0kPg1;ezwgZ;q{m8lVQ3_BtG<*oDZ%(!wgK$^2#8@e ztYI}0B;~oahWPlhm-%oO(}baH-QroazobQ9WF7&J55IkV#8Du_=ou1Y6;c7$R3bg?_`GqKAJKE??`P2{UcmQd&lHT-iW@IE}I z=kKXw4-VxQBIYtb+V`kl88#fL;+$ovKCwh37wbKuD`{-HO#SbBgL8`*@=;+8-E%16 zGs6Id@e1Z{&1#ndpcn0!K7`_kpL^I(S~|4x@>=vz#HQ-d_dOlYR`n-5w3Z8VFAjL) zuVSVel)13x44$8Uqp#UImp0__)Rn78G_Y>i@5obq4ei7i@MZ71n+f?%l@B@@55+*b z7AynpZ)?BL;f4Vre2^dST)8?)(hLe@}Axk$LgVrV+ZkE!Tzo{>$J z(x~|AB4Znrcf|{esM8e_K6Nn(F@sz{C>u3S(2?TC%7W_Y?Y>4X`m@|XK;aqCx&OG& zT%84opc4FI?)0z{l$`6?o$fQW<~@|Q(j`odY%1-Y1b18xE2HZ%I*FOF-`DlV?mzc) zK$qGAZ$FB$QJIb7PxR7$AtkS-kgM|A3{+tx%Lit{Gf5{JL_vxAYffNIWON2GSo5fF zg}`)5%)(MZS-;n;r1@O}u9bDj53H5X)0buekZe<{(Oo>cGSp_Z5W+Qm(l0g#JHoA~ zr1awWl}%l5A?>S0LesWw`_R>=6$Kp#%iBI!CTYK*3LTft1y7uluPnS2qz>tLt74Dkq*>1t^4)wd6R@f4&J z%jDu+5$GUEOM&>L2JgjPSv9P?v^~Q?=Ncu2pb7FBnRhfS*Ws3a%Y6fiyd|khdM8Iq zl6QEi(YZGV19Qf7Ql>EY;lqO*LyJ_T_rXa~9XHJ+N0(i5rGUsnbYbUM6w);@G8@lk z1av;{B%ZOO@iqI)McIQD9oJM?22zWs$!DMuYpH5-yHKcAg^SIfq2l$mZln885a|>G zYH!|xJTCIOr;uSzbRE6XKg%?M=P2VQDl^WMAR&QOKTr$+xX+ua|Mr{9LBK#@XJiG- z!$U7-Y3*$4NH1n>=xi!tYHVj>N-tw-Ywm18z{t$O#`OPPFcL7cGjaTn7M|b~NDUNm zH2%-a{uRr{DuWmOpi*dhXm2&gDL0O~B^;qH4Odc&Z?|!M+zVK94{#o?e@(0-ce;7N5;7p)( ziv}G#>Daby+qP}|F*_aGwr$(CZQIuC(X02W?%K*`wRfua56AuX8_|+aOi0Je*8V&!g~SXAIUtz=(HSc$RS2n5ulgM6pAIPUY7@= zJRF1Ei~TEtK?pNgNDU3+9tw<-Ju{In3^9t>@t9bm;yVxz;}&r{57**{>7vn}KvzTr(A8af7#+c*Ez#Br=_p~!qXo7*q% zk|;<_k1H#r9E)pGOki@YfmGC%X zWJu|*QiD(}qGiy25M7JDs>QW%S^c60Zjo-5?h%5%;SnZ1bZm=d_Rti|49gJ9 zw%wv$f-Sz_kme~tOd6%AEWYPAO^|flJeg%fqwILHQxOlPJ{J{lES^+M(Qq-J>_7%` zI#xPX21!E*XFra0GEMwb@O($wG*E#VIP*d($g%ix!joZ2!(E~qQ^wG8ZO=H4DW8tM z9o5N5)d`zZMjO^ODsX=M2gN+i0C8T1D&4|TypmE$T2gJ5zr-H#-+`%#Un6pb4xS$(k=O z%yeJbrluY;s^Xj%aRn5MIppo{HNmR%l%kx!vcefoOIZG-FzX)!Vd#T)=AsU?F1HT1 zu47n7GFCHHvs5#PVHZSBM8*w69vB_ulP|x+x>#Q{E91(WYWjHSO7d1oKaHFtU#R(D zYhvqQ>#A$*99hP+n-~k*+S!&9F2(+f#SBK9hnL&2(J;-FD`NUKW_NbW@GI~OUgi%`8eT+p3QTu7arHQf}{OR)>E%dqnv7A>8v zvd%GO-2$5Cg-7s#bin5h=#n4cg3C9Tqp zHOE*Mj~rAHKLQoAY!@b?MYeyhV7SFQrqwp+Dm5WmB-lDj)>JpPEU$AEJ?74R?z=fY z%+@VJFx5g;}Z z;?oI|;s62k;wu@@sR#n;_**-mR133i{<$GQv>Tu;^#_6cn^KE;-G|!>^RNq18uEk) z`(OwhCtONOV|5htRdT->fqf#K4;yu01kPk*&=2>vtIru9^l!jfn&v1xa0yAUy z<9))(fq~Q*@me65I|{sk19uSLfREHr>{>{9BgW)iN@oFao~WW#@T^)|E@52n2)fg7 z^IMvBLvERVfIA+&0jA!d^l9`}9%8f+#AWD_hJRKqGnHacN*(eySkC~8dpHktsTiDI zUxhnd#VwcG0bFMo-f0+-)g9XMu5D+4+Z|q_5&C8LRxLMAz=?Z~4H2aY^O{g|ysZhh zBq{f(Tz$kPnU_WK)e(yc{u;s>NtQ{hOuQ(3Yye5dVXTf*=waLdi9VY?noM*oh>}Ef zyzwCir(pP~q>_x(D5aBDvjCbW zSb3;6ujX97+)-tD)vX z=R{wF-+SeRk0@r`_`a2gP<~wbzLAG`W*l(e*-1b@F5TzW_tJ;Z7t<%-H-jMn0SpF? zq)0?qKutgKJB_Ml-1@$~bI)x*SwDi?m-#!QhpAaktu%Dx9kF(mbtms9l-%*)o?(%bcwXH*WF9g}pPx)|~xXiprwBmLruQ z=~sKw@aMLLJ?zlzuXKq7ie$2d-|12d7F<)gX)F=@7Hm^_?&;DG7JQ@%M!QbCXta=p z?^!bWCR!r=b4FT1{0mB2ViT5NRfVel)czIz*8Um(iM?=Ivep)~RRvFt{%rGP>oPs= zNZT6rne5vUkNKSz^urmuvX9#67qZXA?#f-3+mE}I1~^|>IFj0@?C)94^Ub@6>vG%{ z?0BX zyv^(7(d8BAW$)WO_T4E0Ih?)lpfK=E^(IDUDZFZxYqhLLvS7+{D*G&%%PMTD99h?e zJxf`jZMOC&We<}c*E()`9Q0Z0(>>GHCs7Z}9w)y6+uZn>G1KHFtu>=SuZ7^if;m^n zkQh3*naH^U0l+Yp1hj<#kFmf^T%?33CazMPMT9UWK{m0tP6BeHU~PmkHFIU%G54IN znf0+dln`LK1i%0GEBxvX%vYFHc|z_2EAK4Nr78z6&$BAT0-#dBljf2n{+(9<9~a`J zKtT0gQrj>8L=7DH=NvR902%J*z(9yY1e-$~STX>SIs9iqTiH$5iLeIXR!=;&^0Ds* zZ-!z6Q0&I1S~**G5$(pRT3JJ!u->Z6giLPCH#rmGElqb!`pHaxWctsbb1S7cRN(K9!%j3QhtNhKe8^z)IY)YPO!hT?H=&E z&GAmTx%2VuMKHvY3BhDQF%!g@4CX{c0H^{|Asz^Ukqv=q0!bu-ML#8)6bQ?Uh=#^h zv&+o1&u~3Uwu{^@c*{|F)U+r~y^9JJEmgUa@FG$t$s)$A>eDW72b)!@_Usctv%~L* zqy|I7h}2|Im!s=(s;;vC~d;ilx}4* zQBnp`9fdcMUIvNpM0ikV_BcELq})P(`}^&&c0x%B5(SLsGL_3vsWd6ts&bZ2!&)9}UsX8lE5`Vn zhY^fh2jhw!RLA~20?YvkaiD+`Ow52IZu~2HKq7J&iUW!~!iWR4#29CKNJM6sv=vAF zz;l!4{=mK!_hsK#5d>jhamUa6E}tTx%pKSMK-W7o<_@#FpZ&FOhfQ!yDWb-Ce;$NO<>ZmA~oLFS)p{b~rv}EFg}u}J76SaNFp zp4?qbx-lh(ZMLxi z-`sFz=C$g8ZCG$c!o4)z=;&H4+c@T0rfZh6f$CbMYpTA%>RP31zOn)5TCiopz9G@D zamna4#n-Td!vHZw2w25o6rW-QY-Tc$Pf-HaGa1dNI04%_4Cqs&fVIL@l?`dt`G6d`A?>(T-=$t z(q>dK|IVTId!BEh-z@+6&sokS5c6zdIt%k?A@|UoxkH3Dtr=UtGr)eQoHozH3!4Kl;?0%Y?p3`qK2-sbew9LA%3tvzct0q!nTlVd`^s zb2csSOUOKkF1N`!=UY&_G_zv?TJ8{2XZWZy9B^izsm?tz44rLy;)=z)-hG( z(9*%ZnRU(N*48oMGvl-K716=U5(2*vH%pnPEL;*K*8;dod$w`mnI)NJLBz8_v%s@J zvcR-J4OPe~^(&`(D&xwND_1^me3!{mG+*L$(eo**F1t9Vb`joEX<4*&5m%KawuI#+ z*Xn8TltQtj+M9qyq}N-Oh%|(U zB$pJdv+qW`v8wRHPjh!;wcr_Sm3Fi3%HR2c%Xfv32v^WHayQ3s^zrDB<__uE!*f2f zVmY>kNt>;e$vPsL?6DTDw6@~j$$*s1rfJQSJp|f4kqG)$t!t2AuVlS;})$!SN$i}T$u~!Nom7(Z(s~Ko z*LIl1#-^E(DNsy`^+&R4BnhPA#iJ@7)1TvkU|i`o55;LFWEnWjLo%!jlg`Y->L_PU zR-x9$n1WGZpVl+e*xNeZAvayQHx<$Zt&8R-Gc_tW_Di3#M~68zx%Dsvl}v~_RBne0 zxgB_qID9=o7esh6js~4N@0s(T_IH*Xp|`-Iis)DuUXMKP69?YwlNM7B>NKmizpGRn zk;`t7l(nOiq3H@;F-TEiHFNj|LT$g+-FwixG;pq^icpw%NXBEHdk%=($MFR-IOKE} zxdlUC+S17E{q^^2Uf2~VcoW6?3Vb2>vE7Ok(Kr|om{TE+d4@2l^l+b34CDeBLqKMC zp`sTH8%pWmdTY?heuo)q%SZBPXWYNH4JVrkCz9IdPzp~$zpr-~}q6E~# zsFa!Na`d3LAFDs27+tAa0c7p~F!yE<-Z#^Bkbs&hCDruH+~D8xX}McWgO~E5CaAgx zh|zo1n*kB-9qDk7zHRF%u>g~~jH$+a%laZk zkLHUbY?F7?<;7m3Z*HMMwF5oFkr|7JRpiH6k!d9W@R(u7M<@n#H+_`tDIA> zb0N+_zQRbC@#oB|YR*co^VL1S(!@Xa3EamdRm)IJh-?dgH~PBO$qzbqdrsa|i0Oot zu*UzEROD4<-(43}@nGvxu;$fa*69*(u`=bw1K_wkp7)yKrff+m%-NV;;}+2}-I&L{8v#LJ5IsMc(mvRzj>rct1F~lpGJZ z?Q>VVr!>F!kpqTOb7EJOn!4+T-x+B_|Lu;MUGR#n^v+h1OI|bw}?foT!f`y506)Y zFk=tNQo*dXQD|u}z9?VeM|kg#&#A{#=)#jT8GclJ**U^z^NR$zl(@*H zaI2(zhcu+2pIxDG?46aA0Bba1{m8ks+TOy?Q76wM^QVJ-E9$v!(ORe+@@Ca9EvbAz zM_#<)ucjJL>m7U%RI8Nk^A+=yfwM}4Ade5uXzf>7&JhF$Kb2PoFKdS?y19r)=d6&f zGe(_;&~Zy#uKbxZ-AiqxP-A=%0A!~*&U2`RXBd~E3)GK!=eco4d-ZGEO!U>NQm3Z{ddBcySzUXCzue|8-zC@@PVT+aOudg3$dh|345YhCyWuYT+zp8NSa$S+7G;}Xu}r)Sx+wfmmXS1Y|G-hyrr|dE3b~w3%y0K| z^ePqiGOT-Gd|8dYxMPO+=scn;FSg?_O$H_@V8U;YA} zMQIHVO1Qg)t`2Uqzw>G>gE#s&?a~#4hwM&E<1O)4VoXi3Bz{SQFZF%XGTNQRz+h(+ zT)N(uuh^^eX9=~j<8VLHtk};HFAapJp1%_Y<(x(HPQZmS;)TFhCSm16@j@?*AP!dJ zfh`vX++mnQ7%CxgBXx{l(HDvRBCQkN8?p-FD!h@{wXkxL!+r*zURt&)7=|m4qVTkr zfxC6>!MeGroOqSkseSQ|DqfsCZe%exk*BLoV{*fzr1U|PoVt~n{Ee=$5}Y>5v={eI zg#4FU5-fXAvVy-a+;Yc*l$&opG#3qP-;h`8%N%amY1YW9~GgJI{ zLfH)d1`MTgI3`o>uixvzFp5rtNNI#{AhUO11?bK%@{m`wVv$D?zGmI71~X3I3t0M?yL*Sp{gnIE!eT@a+O`X+hzmmyzZ*MIF zKDkxHRPNZ>S;O@j z@6F$6$MqQh$ZI_ZiMi=JF>>NtMlu+Im!sB0%-s#P6SQBD?ZVf!b}x((R3bBNOA& z20OH6cZBjW%pt%VUrjh7dlh1sU$P%Yc zUZ^iJ(cdneZcu%tN}<)YgyT(nH`pKJPj%Y|RqMVx{tO{^O?^5*sFNSaPghP;`|b^6N8THi2dvrqk+%)Hx*4-uM#LU z9D$R?ay5$Yf;fSz!m(B^90vv2$iyuT#b?*H7sXY1eO&7lEy_UI*ams)1lM7D-hPfy zmVw?!#LxW5CcY{ESb9!!(KaU*LiYlgOP29b$#Ojm)qKvls4N|A99ZPqd}_n0T5oDojE@e^Ewd80$RD>J;5Oc1MH{o*=C^)N{fusp&h*uiO2Nck<^SOs**K z(>Ej@d7^vQb;>6t%%p;jRFO=3ffNWYL`307r<>Tf=hPbvt9LSi3=x`v;Z-VE)VYmc z83mz}tm*MW!z@1N>+*eiFmg4KSBBV{On&?OI?uu-v3!4gpxp;riDi3_L!n9-bAq25 zp)4)vdW8mMdlB=|2DpHQW*jp^|KN!z0(CO%0lBV*xPPU;ozcD%Uol@Z(BCp`4u8N9 zh&d}zz7s~}_8@0jbg9q}j9H=HO&3l)>GR4b5)*a4|jjoq(yq6d56R&QFOJ`r4WSeLH ztnpfehE?cDTD%k}mHZjSz9R?n442=-YKntY@2xH}h2S>emzTo_TWOUoiCx;E`m*_O z_w)#pDZqLn2lHY!+!m!*rQ7e+X?K(eMZZ4<0Cj4AJ4eBL;F ze#qGm@$2Q_M>Cu>s5p;`Hht8q$CbHaPJR&E5ZihIA#3yvJ)Ez^Gqat6jw$Vowu7(k zk#*@_?1!>9NVI|nZVLgP3f*jH1y5SROBbG%YVzkJTySO|QW4IP-xAtZFjtfnkMWrg zcq_)9n#xTj#ejPDgPLU+f)9{(Id%&T^RonFS| zaSKe}vUJYQv(kn*A$D#^I= zA+KvG>`cuvRoC(I+34S$x|apvcco9=FY7ut+u7>nIWs$i$?NcI*-qK-#^@{g%BAQ` zd!dUP+HJ4Rrj1ayjvb|Jmn*cb{c67m^^Kp2$|b(e7_SuB`_2#k01O|+WhpS3zaF?8 zwx2@2qyuX)39n*Qc(vJCsWdMVfayH6MMo^@R_g|pe@zYTnp4#M4uzI~8>m`d?#gRT zEuk49g(1GfNeiBeFO2(wu7<1tpFlfz{peGftO4j42~=y?y$SjQ|1&2f`x+34Bi2{r zG&yiD!KCiuobAo4SGv@aRX#V@Zvw90GO-g*LN$(hH-NF%-`gf|HCAoQr(Rlc2zb2! zH!FLhg062NKP(NB5S<^^cJZIm4;P5jtJnj?u!3M*iBCTiga;P1nVf$EWo-wpu4roY znS16T+)am*aTdy1*P-cEea9AsG0&oHdVRY>ubhxE({5^z#j`s$zq5VlH?7{T4VNc1 zUWLQ>iUuBa872+0BZwYEcCZujPvthm3aY{=I;)ZlYsf_`jFWNNWJMeTLT$^NLZ7QR zYhz~8>nQAJ-)+`Ku+2lnv~pf#T!}iu*wZruu|1!unO)n2{LD(dJN2AhNx!hB}cEBgtJ9eNGEU1sd=bRu% z-FX%qC3{|V%2gV+>8z-fh>mBfjR`&@TD6T=QFouTuf#|7Q|dh)!C3MUZ(YfzKEN;TGONgIL{vn8~Vk27}IDdw8- zA-taR!RDvCre(TOKa1Ce&a?&jMQTHr?s;;8u_frM%|tn4b_@7Ip!wI@?5@=v7GTyx z&{{%!u&bJKai<_{bn#?kNG59%HsJPOD)8=1^eLXx3^1yhKkag7hAagl+}(gAX@=Ph z4>TJZn(2;KK7(@~tx$9rxsj6wQ{L(O<)_;~m|0dogS6et*XQL&m99Tx*F>!Zds>H9 zfau4fcM6&$QgsU-mQhWBU57b^Ao^~KL7YNnm4doJ{s^o1c`JizUOf}kCDagluFM?+ zXB2ql24GYF8{Ww%SnJTjfBdBTnw?r(5(Ds-LC|K1X>Whwd3aKCDzMeKKvrt#rm=AP1~Z8ZBe@L9%Xvv6r+ZlcT8KNc5ZDskhCso z)G%8)@JgWtcY`ge4mG_URsN=R#|}wrYwq0>#n}{*ec2ZD`~pEAiY9aBi~`31UYqQ% z%YZ5SWAQi!K?J6)N897g0Je ztG6bq*bqAYKYmxe=;v+srQcaMQrR^ty8fM`q+c*y?;zX<^3H~lwBGO$_Zk>-`kTFW zB_hkc8SEA7+Ec&78AI!0?A12Nw7fd|*^To=q}AxPan+B9(?;2i^G&>l?oMSpvi2<_ zW>Q^3uqS2eQZc15W8T=3zY!d&65X=m0|Vs?l?xNd2=4G09jN2qJ<2?jm9>s&MD5Sc zKV3yZD&@gS!xmdN6CuMUfwMyEv#cwHh@B>~t>dXV~tdWxFP_ zCbNJdxDX0a3IbLkKA8+{=!1n)wg3jZxf{C8zjnB+U-I4dxfNh4v!E-}W^C3Qy$xjTjs}~zC9%0?FvnL@qJw<*{0~jxjJ;C{=3WRD)*1c?v z4pLK&mHnJYPzF--R9s7u#l;ONC-mrz3_EGHJKDB(D5QJEFh|1I6M|@rb#qs=H>pqb z317GdICCZ(Wg*gP9no%m`bLE`iE~nHy7`{~yshPk<-{8Ui>371zHVZEMK6`IC zL*%r^l-J};F~?m3QqD{j1Z849t@@O!%Q^niXBuSfsG=fOKq4=7*N`V{fS+%vpG(qa zc9GWEs%U;l@wBZY-f!!5(-!o|b!UXO=*Pyb15Z(&PBOdia9|F;7|F3rl}*FGvaG!A zZ@kVk^YDi;YffVF^sdt0eloa;NZm&Fr5A5;+*lI)QNlQST4*zXKIb6G$rp~1#9aw^ zl~Wiwl{n!Yc=Sq-uHm_G=;1TUF4EsM6wmZM^?!jol%b_Zi$jgq2#(9Qz!ha`umr@q zZ~gwj%P&CJ$v$?9qYPziwESd(N8r9>(+>l592qjTM8^m{kMT{XtR8LAs-4_^+Ru`q zWG*+;m}ySb3pBRtmijHtG{!`HBLcR_hqMZ3E;O>rADV#ZvJk?XxG^hMO_SQ3!gt3#Qw|q5xpSZ$K`tu$i*} z&-lt8#+{8W*U|~>F<H~Y?gDZ8)oO8RbpR*VVzFDU>8(ih6uydo3G z)x0#GDZ1W#g;s(3L6VLWEDKXh@_~;$%1zQeNhYJB?A2AQ<>34lgE;m&Tjt#(V1FJGs+98%Z7>M`Y=l@ z$Fr>QQWGz?5IccL#O@?yl2PpS{# zeZQzHWBXm$oT097QmX+s)evvJoZ$_RSffgw7dIZmoWbiaX!}9>+$()RPacB8d^oN* z{?B{KZDZ2@@HRZMHd%MfLqm&%qV~+6Vr1U>%SdV_^5b0U9 z^6cXhR@&gjZZ!FIcEHU7bwm87*2%ijamWv}N+M5z;x}}V(0~8j0YzF|(fr^vEuc~n zL@g`wf`z@}t7Va3-%}LZ3p)v{qY)O_mT)-99EY8)HzZG4g8FUO+t%tgUxKVgB-@st zeKRkbGz$%GnrYjvMY^IbYBh^l!?e?84B*$>U|%{;(Ea(sofvk9zMhpfQ6OfWHC_a% z2nikwT@3e&w{!7pT)#+)a+$OnNL$Ldlj zJPOxuJ@4VpW%9`Ju6uq0nXfN!sW`}p$nKx22t5ElAeT?mv>8*!^A2wHx5=1uMaabo zmQX|@zuMnd_*8rlasjjA+VC)V54ETO!`Rb9&ImW(39l|B+FYVKNU&-YAz#E@*opKy z$Cyv9KfR353sclmV_N+%81aK=y|~c)cN3A*5$tQqa{;a~as^7#)xMMM%lLC~rQy8h zBc&P_QITPkMOiiBm!ASL=md*e-V~PkBGyFR$1zHL0g5>x(Fa-q zKk*6YV@_s4O5||xh*o5_;Q~i`D7hFNiEIIFoD`W-UYrF{_r&dxk(m19FGNmfWb7Ioh#m~Q@oKAxjhyGm(eI}VXhWQj)cBY1Y0=J-h#;$a!JYDIml?t z@IZkAPcCq#*NcM@haEmjY(Bpvd(UD$v?`K0Q3A7Su1|vnCmd5PrZhpIM2w3u9Xdln znD|7PaseYsd@_-d=y-117$+=v%6)y)x=?n3VFo@uE)Q%Pjlml5hQCFH3EjBN^Xp6hktI=y*-xJTeZ$^A*`|P+c%i zL>Jr$iAe0q}Zz^^MNTKQB%5lOq2Zb7dhd z?f3NJ3$vKeF=THV!|rjCn;mQAYO8u6nx}rDWDb+T)9vXS5pMv#3C?yNg44j0nHh^m z(3w#G$>o>Dw2S7B4mktD19MB$+W-_3GJ|xmb5vtmk$L)lY@?}qpu2;{C(W6AH}l|F zE^sNY*}gNMFw31+qv82C#{7jV!Y62yxg91A6ziBRi+6R7gFXtag{3%|N4epa!^hMc zs~~;2w3xBnGV+{`M0k<%wPZKvub`$pSoC)S{@5pOY;VcK z55?j<{=FAtSl`I87*XVGNeA4`xNP51Mh9#M%>+k&CG7Z^kJ2^9aZCm3bd`pdRf#0+o|okyKBb61@)qx5;+Etq=RBdny#wSCABE8Vhf)0A72LW zYJbdK0{QO24y^|ZyzM*}2W&aFtICZn3YUfJ&Tn@Qy_&UojZ5h}EgEH7-GlwFHjH{a z_hf)v?%t`&0#Pg6HBjB|l18KzjTkGLM%43Cy_$ce8~P#82w}O{=f_25d{tJiujuc+ zD*qDjHmt@n!7VKJ8v&*@p+vX8lC>5|s^bGXlnCaeMyf`QPqBEGsKQ(xrfSqQ*#qzO zB z1>V@M576@@^8g7HiIlkEI_@IoYSEPColFZn>uj6uWuAr3RU1ED7(zG;&~2jiRwQ+k zG0zdS9j+-cpTY)&!cIa{DXE&oj85(M$DQXh`7M<0`PRoRx~{b%_O?f@lxyvozn3I>Jl*uB6^T(wYEqiha%L`6-T_(p&=A=` zYCaA7m?t+>$2K$@d7x&q?9;&K$yx2suj?d6*X%pJ! zKXF|<*G>F(JEne%dd4-)_AT63MbXG3Tq9Z|SmJR5dlU|V~#vF^PbG z_VQF3n!3Ss_Qm+6BN$UqR*9#+>17*%6Xw+#rx- zr)6%1yXI=n_2y;9npOzR>m-8C%Inz;%5P58?^chOY4>GDIY^-%4>KPR6Jc?q_$y(q zUQ-qWa{twiR-@eZs_56R4AVM@ApnBWoHycVTL^eKNpfx%D%%+$#97m$Xy>nZ&oaJH zbNnLajMa3iAye{(%byXM_$=5q(dsa|1FU%K->r=!GQ_4f1CJyN)Jz9N%*m4+=2Dmg z|0cE48OCbwJwq&UdRbnWwCxvG)_-8z3D|UtJWbv=o!ia=+QvpML?pMx%G(LJbn^@zl*Guw`u_J!JCWZN5$ zuAq($YtfGD_j#Qn>x0^iCQ*&)D(uH}>d*6N51SrvaLf z33bC%U~tF3X^t#SkON66_g|;JAL+LUr0^|SLzg`;IFLJ-nD~EU&;F}L6eecY|0~zg ziS4r*V1Nz2@rB0S5U$G@kRxN@g66Emop=U{t||;3Vhab1ZpgbzL!hh*eZCLUk14+_ zgXIYNDm3z%VfZ)%O6!af!E(G2M8k2|KNOVrWXU4O@A+yoP3vM5%wipqM@SdLxz^CZ zx1!%m!HDKO+RYD5Le?9FOxImMxEdVS99T<3%2vg= zF|%>$#MeoX$xt-zTL|WGYWeqlEo5-BMn0QKoTf0pPz{yEMwO$M2=RH2!|I`CgI`Gv zZlCj(ml=&fcxTfL{gO!{_x%U!nX5QK{D*_F{#W{X76w-K|7G%hAkr_zu>c}tH2d|W z65dVWM+Mq=y3aT)Xe!$Wrb6G*w5qS~^_M_HoFg6$pb3cN=y&zzO6($74>A=kHydW>XOT^cp1>|_E@&@sF9wpo zWbv6-8`IeuqA*QeS#Xa5W(dqPG%V`r6;n-y$+fw)WQNVPY=*e~VylT$184@;CNRxG ztCh{o&D+h2%`zW(A05^@)mACefV%~pf?WZ1SYfQ0N>PJ=kcE% zj>&nP<8dKP!VA*~oOq@wU@>gs@l(@63{0_VMT1UL9QJ8!)nT8A`d?axS2ncuXxjGL zH&*Zr0h7hWmg}q`7|eU@@YF0JtbV%;mD$3(_#BbdC%1z~`wmn6pbl5_tLNYP*3Ye8 z=U4*m6N+Cznq18i1+`{QQ-$f7|LQw-T{F3oy- z!yI2*7_C^oM_dl3Im6i#=oOcx?B?YS5e?Q$tmZ~X)8kR7*i?L=RK`?SNmW#2oZ>3) zTv^j6)WsYH{`WlQfeY6*dfzr}RhzDk=`U20DqmLA)+NKDQPx=O4(cmDW%D1cisn|r zxV|mzoK2!xOJ7m#si%NgV61ntapb6^_IPd!=Vgr3X@{5L*>;-)QRC7$QLs{fkA&`0XumbjQAjDb9g zULBbsCRWS=M#z9CU97)ux4;XvKwF%6_GLUYhmbV=&bkF#9FaA<`WRD;@7qrXY@T`K z$c!NPd&0ksS*2>ByXwI8ca^<^XX+rhYo&Kqr#Qj@96`*jfejRcEw4x`cf7v6K9Azi zVOFiDg0lkno(+s&n4@B_2g){*D3XyT3@G_VSb9}m*)_$F(Z}04L}2KNi&Riv5lxRjA1g$yjB0$!uGjV)$23< z{#e8EvK)}ps*9)ty^hL8N2sren&!xev5y!0$bh z-8%ODn&xu{li(0S`I;1P2Nd(l&a*e+KADml@enyAe;E*C*+>33C`#tQAr2rBXUsBA z8;3=6DCe45S;TZv%Q|4`t{ztna=M38Ei32H)m2m1D6OuS&^>^4(e)WgJNN1y(>#ZG zDtMRtsc&hLKWuE<}{w&|uzC|}2#ZBkAZWd+{W2HuA@#+D3H(Rw6~xa-JR(i`&hF=Zz% z%nK5onUGevYvz-rySb~=jj}sQ$=&1KJgD=&LQj(6x${|yCn8plBcB)7vT_*XA=ku8K;3#C5``^bi9aVWBwr0kflL+FB ztG`JGaU}IX$J!s|`-Z`fky5I|6_q^3>cvxZ6~#QN`j^MyBoi|!iIov7Y0Q)8(oLYE z(qKBNib<1QI}+G2W4gVm^BhKK*^Z2{qDI*q8vG6K6FJ1FX zb9B6OblmI1dwQs{d7?Hl=58~0zQ9oK=}+yAjhz*QiWV&^i$KN!6&4mAjh&tCiw<;C z)^=M#R(xG$q+lU2LGk$n&A)uE&B|K_uDR2(laEL@wL zgMyl4Y)FV#EB;+nSqkIsv6ZETb`_nKj+t}gU=k!QA|@tc!in?d$b4{*3#Ey)7l+$V zT#tR*$IhdoVDov&2UEbU(tFEjmAzCfEB**6(*x#Te z&GJJ$xe?`36}mofN^F{2yF-+xsZopbO*T5m9lG%JHeH@X%1ci}5i_ zUA?vR1ZH!o(}g2Z%?OQ(&NSu>>MdGL&9^R$iczQJ5Y2%CBBGT^M)EFvv!-ea3g?gz zZQ{yh)3k{ld07{eVs1W-q)sZn?>9>2lXY{Nv^~Dm^z`Hl2|s(oW2K6v=gS5|)VH(4 ze3ipI5|DC@5GWAbO#3>?e$JtIkgYSchrJk|rsCoTpRW?r4d(meH}tPQdW6h)(hpe( zCT}PQfLsTvg3OJ`bKma~^fI+RbLG4VtJY%ZopwwzHS$MzCJA0B1V|KLvVeg%SJdL7k&q~{N zWu7`>b>JZ%u9)#LARz zoZCps%DNn#eAccnq^EL`S(IbZa} z<#jFLJmpOpxWF!shgkaiTC~4wDb3ovO?Wp#vuOkus#(eZdDiZseFj}(+1glq5Ra|) zs_ovmi*3K#{YN)6DCW#?+pv-1_UQZQ+D7&U;++GA#xrgWgl5aw7;Ls)sJjSuny0Z#M$PGz zJg+?>GmPNz=KHCbpOhW7GqkEk3-oJyMvXc>q>4FWz+LPeypQ)d#(gtI*1X|eHTNiN z_1z_HimtqGr0ux-S%Up362N7G+da#6$7=RB&Mcs6GEb_~G)bkCBLM(~2-BX4w{Ksn$M=eRcTFc)mM$Q$wM0%Lpug&;?0y3fl%E zZr$Oyo_p(8@Jgdw3tW)^FK6+JBdg=}LmmRnE zfGtn|i!3IbHQLLC;8-yfTNITOak7Krt9M9l5A@X0hC#iD>ZUZAF9X)R6;^ue3ZBe(}%5U*RZ#qzWOWK~$ZbKh3+;ipwBE=0yQ?@|Vtg6^{0 zawwcmbltZ~!p$AX#uhdrv=7}<^y9aL{cZo7c!*~sZd`dB>DGYzJw1-hAyu6ByC}G$-+%f{1hAG7R12%ceLbO7uFML0eRO$iP6Dj}}AjFphAl|Eo|HPe^Lu zYWcyeylv0UmRt1=3Z9SV^{Lwg|5}`NFsP`WET_(FwYj%OO|iN2y0?n_-?gpE98Muw z_`i$yt6N2j?BN9-`<0=kmn4+aj@51t^XQ5UJWFkRe6|{Awkwy;3Oi9%JgXMN>)8L$ z46bYOo6ePeGkH$)oWQ}~ADF($S(g6QMLtjsjO$;@Y(<>sxhyeHPYflYzRNzXP`E?{ zlhHgDPQTl1)9q#PRrM%UWu8?fM3|xNQC1nsx`^UPlieuUt44@D+9mTEDY?(pY~ktP zGnLtgl3d0-wIDf{JUCX$JsZ$NUCt1VQ?2e4DDhZ+)*cSt_cfwj#WF^syHzir>IQo|zwDDvF5rIkuWr@lQVm0X}(V(E9Kg_}w0MJ;(m!mURB&>Ah{${zzL zX_;*5BwKW(VnMgwc3bIi3Wn{{?Fsj_5Ze(2I5%4aX7)>+4Q)ZtscISPA0FSo={&fj z4wg6*(F!#*0Cvd^1HtEYA)Itx!GyvDHyCoIr+if*%?8RhcNg*N(=mQL->7=O%xPg( z{yVdP@qa@0VPt3fFYZdbjOE~O#E|Q+2#za!^m}*mpkA94LHN&Hb6(U8y$~1Q)FVpR)&WoBZ75tYDCIfzi#QFI>3sy2j8+NLxJK#d(FP{kAx~LR;WQ6x~ z`?E(QwS`~bxrgUl@SzRNY}|}r$HbgPrtDtM14u8m>hFOt76@34G~!vMvlC{zBVhhw zYh|fPsy=-2$JfIrHb@a}(}`I6#MLgSr=mPWmW&!S%rlJ|AsSy33$em$*2p^rhBEd= z6Y8S=EXMfh!1nR2kXod)AgbXNz0Ug?tsW85{;g7*NGoL~coxg4gQ>k`ws>!f@6>Ih z`9~csdf6thv14IV9N3axVeHZL5Jk7QD$8oW0jvL1e*n?+T;XB=U6KDs*;oI6k^jFH znfZURlUdmQ>rP&jvD}wO9lrJE9nx-&M1JgS`YmXwX~#ep#YDiLXh}vtjJOcI<8yVO z#7PhINU)!rV`_i?cz@g;92yadvR^wvFp5 z1V|m&m~bB-k?~~*OcY7HL3y0?@v7^&(ntQLie6*DidJc+?mO-^NvrrU3zr0{pgJiczFN#cN(te5dJ|t z5WORP4*CeztXV!Vy<>g$`v~;ZPY|d>{{=3YrLg-8uk=;!_Oj4YxvBC<64gY z7jbNkS>yZ*U-F+i1@CCr?7s&73FJFVa0Br_kt2}EeM2HWo{_@2}0c0dw&qRGlT=AG^9*p6$OwrLp{vVDOC09BlOexBbe(#>nws0Ktm@b2Vi# zbRK|q3s9cy#4a*i+yHzmrYkY;8~?d3Gj?d{|o$3D719c z9!LO50Y`2;-obo%P+IfpID?(1_YKIpGQ7cIDYSq$2cdBbcD6R@-{PeBHv@owMAISu zstn6fDajiv(BH;}Urk!0p5`nxxft~~09$bW&`-)OGN+L4elIg6ovXx1=!WPl2k4`p zsUF$dOH~H4b{Y#ZY@%^$%qHi;36DLK_+ZJrdGZhq;K^8|`|C8t#B^%3>K)6{Z$=B} zxWO@@0fbA7o8%Lpzr%Vq990E2fGJs?E?m&u>!Mp2IDY+*%(^GdCX4(bz`z(;vteb;eKwJ8L4@Ju`1`$$c4jpy{1Cccf{9 z8u|d=F2t*T%IJuo_&*Q!J}g=@Al25fM3+z`d^0Gy#su9haO=Hb7qeLS(=gc^lgL*y zm0qzsarfg$1;3SAP$`8lW3?DG@_xz6ehbtIZC^agI{1saADAr>YaXbr0h8vqNu40C zq)!hP_QxE|0a7Hc)eySXfJ@T8^}i9q&RB#S!s&e2lN*ZaQ5;tgm(4+4h2WAGq;EZu z56qmwgEh)#zp7y(UjNt=6m?9T=^Zgu;+q36zVA4KJr$pjoL%FOA6CAc15VDQoFSV{ z1F^}0*y{+lKf!*6p?vEQ*2N0GkzS=0tI=Q_A@K3y@C=(%p+J{s7||Gwujf za{`T#k~;Vf)eI*lv>;-T0A^GkW>_i`4U()ddOZUi#!s+IQnVh?ni_iFa0B@hG7jjR zMO>6SrKMD?mRK@P0+|axn`UZ>W;NBkHHIkC?>`hj(ci!{MMsV6T|Lj{*D#VeLz-CS z!sIB)W+W=lG-KNDwpSm zDCrvMozfQ=0?0HqGgY-mS5rv16_w z*Ge?HRI|`cf2^yTwKq!e=HV?z8V}YbE|XM>|1R*Z&|0iCcBJ^E0Hp|^SCGsl7^GW_ zog>ea%+Ss3ShkqEDl~PkS4@{wcXt`u2Yd5cUS- z!&{5~wUThn%|0?sF70x`P$_5!{9O;qSW@K}chxmySV_lTU#GLU7N72vRXu~&F0QGt zydL>%KfHcU?uq*r1xL72d5XX1q71~dZ^2%-O*E#v>6`O(rE&#I?xJD?xb%1*sEZzj zN5oRb0C0h?Ub#M8&@3tE{UaFA;?exkcwIlSMK7N(lb5 zIN-3B?bRHy_kO%BG~jyGul+sg>S{y(j4q>d-x^iv_-yqLYb&}c+S<2cMl{{f$+B^0 zvX`7Gx}Zqim*wMoYKC(xCPCZ1@o)xmtZsm$V|~@hCu!&&$|~q^`;$BNq=DWiq$)+4 zJ)3SnQ5}9~$n~CwTH>zs57ow@-fMNjNg(k8gj5Xf>R`No!ZR7C8zXq#2M@7$ww2xl zF7==hcY;MN;9Q_gIjDt1^E%bTZZr?lSP=yqbnw=pE!V$5f^Css+d^`>=`ALEG$6C-%snHw-$x z6hV8;ZwFDzZ*ugYJtOp9A$#nxNG~A$_CR#|v6$g}`lw$~kzu_UVS^-5!>O2oHAulV z^yt2QQmqm8tx=X~eivavV5E7-x2;RLjN*eW;=|s=d-#eszsg>4ig&NY2ZXlJw^XEu zP>l8=q(|h^{Bw#FKTwzyqSZ_LtQHNjsjEe#eFCS4NsA)U7>o)HDoP=d zk;a#VVLhNVIa$ORSY1eeX^)$BWs$!D9vt$;5cn-PTnHG~9Gs`#5MEt;NSF+>a?&jQ zEh!vECWV$&Uc3QSH2Ma)Vv=Igs_em#=0p9ez+6wQ)=I2;oaQgTp8IUa?&qxMB28?8 zcFW#VSsx^Ew?|uKbgOd|4Cy& zPj2!DN!5Oh8H=xs|{Dlb!DR#HSenLhdJbT)!KA&z`W)gv3Wo;ww*yodrE&P%e}~ zTmUXCxV3x$wvzyXG=?<6B;usm{kj)x4~-toy5N(L<|_K!M0F#LN#q7{b0Lkf)COa7 zC5`FC2DJHhsV$WtljfL8Gr$UfV^Fbn-W&qg#9~dOxv^a5{9P0OWX@=Ac(L}@>~C#` zvo_ouZf%jdcHA6nZCj$>@QYKCKIcq!vKvEA(YPaDVd;F2d(?|K8`DbL%8V1ukW zit1v#?XDX5$`MVQM0E|<8K4Eg2+(&!9Jr;&_n)}|%?=8|^e?%E%^q^B#@6YLbc3Qh zK;3F2TCFdiCFf$LI|_EQC?+IbiES%xJVlX!cozOvLCd9KBb^Y8GCZB zqB7}}Hd-k%AP=!zHcvV7{AUVd!zdOTv0yr&u?B?*Sx-a`T0#$iCIDEu?og40mSS@6eWi1)@56>ItuppB}W@PRiWa7zAA5k zMOh4!9?)3)RovuMxV)^OAtq+2jaTsa;98Yq5(WMi%DTwc6d$uR%qg3B>SkSz(wHv0 zc+B~OwllIWQ)*0>U5a(iXkI>B7d180{9BfDN^M<|b8cl_6nPpvM#X?oPWXq}RD;KA+ z!)6h`UBdI+2mu}Lw{9nGgmR|KvUi6yUiF-k+8%0kAv46msK{(%E;H{K~uY>p6LW{*4MYk%jA{yX*S znC}$wTSCm88t=f~DQjc_Dx3fNMwoLf@f20A7&2S1#GUi+9+p#z={!fa$ca0v_AZB0 z{K-6tj&!O!l=fbcQ*!DYi;nDyJDSLyM#MgxQy`lXvuz&cwq#vrw9TDM`w-VD>vbVl zXXMqLO~e5Y>Wt?Z{&fN9w%jvE6uuoh&mqx6nB1&kOfH#M#@7+kL(KTo00dcqNHG4t=2PHju95N=ZI2S87~ zhOV|?tV!!hvnxGPM+~M+_DO?%hKjb(HECcIwr7S=cR!9Pp-E%>J&0q5V^%r(*jJ4E zjFPk&?tzbE4s?3D+FbYW;7Lnrt8G1`#4v*N7PUoUeTIAZ$V?+@eZ|@&iJ^JSUPeeY zbhs24Sg^pbqdH&};eN?4RlY%l$AJ$!K0(%Tl{M-O<3y`OntCA(2~BgF%R|Fg;q}oH z2kEbP6bH$e35hdu?ZO79MA>=3^e7kyS?Xb>R?@wLx`#Ny8Odj1$wTt?yzc&C_hw=! zG93c30R9*~76p+}BW$X|U1n6gY67_}v4qZqCKeTnQKxi*J)?pm8d?%dZlP!(qY{&a z%2eeVOQOjFb%xOK*dO)ZQbyg>DZ%y1E@QGBG)NAB>QN?l%CS4yF3zbU4&xr&1dzMb zAcYs)C=eZ`CZi@)yt#7~7M4~I@^_s84U z+wb4cKCWMTo7MT5;)wXS*{8JI7~%Ut>_oERj{Ak|RI-ux24R@AA>mF8%29{};qi>( ztSK{Ndap2L6T0IkL%?-v)TmNJrUv0^#3|u$`D#`uI3nR{bj>g=ZmOL`?O|^JfjG^( zTd8krC69@O*-vXFo)<31BnFS@W7J|zM%r&~B^ehkD@8r}X&@r(|A>i>V;D2NCRNe} zH%5x(OD-oWPNFvqN;3#ar}QNE#OvRIy;eGnni_?r5tBx^8&s#!Wsd5O(Ku94$8Q|E zv|{9_Fe8vqBxNrB0a|uC1dEjW%qfj*T|eNtw~r2dj*e(fbd=b-Ikc(i$`C z-zhz&HEPyOZ)&;G#5+{miH)&^J6K;pcJj%g`*whHGRC2ZyM#`P>LI{g#)qiJ5~4|{ z6*lz%`jQ^IRWWfrv=ZXtk8Np-aT#^uQN7@HQu19&=alAcs=MX3XjRGf{@CV#=bdnN zf8wf2vozKaYh83F2Gu@8T5Qg~R#xb}J&;cbj6D+VFbR7=i6Ih!Uxgh@bzf5}{E8ui zO>eXps85XUE-5c=&tT7<2`_BRt_t;@kUfsg2%Z=H)u8qZ+SM>mE5`G!Kr2DdaL)k{ zcUb5R{WoOnF5e9~{(rD>cd~%(eI8qQ< zQjffyFmwFZ9ph@>{zFE3B%U2w%n;nf0NvyO^P{4?dHbrqpDCP&+=HD zQf6$vwvK6CnNkp~M7311$aSv$W9TgmTk8Dpb12l4gJkX$k6#ypEg<=qbB!#s7+k)&E4Yl07-}A~Dra1_P{Sc~#(|4auz^yx zl1?bWo?>7wkY7zD<-l_f=ccJr>>KtSj!$L=$YZ&pmum%MdCYr1uw*&1 zm!8yZ@GGSnb65r%@O&PS{Bg8w|w~z*2Sl|^ipm(sqELKQ8y3SMz1Lr2QxIL{&%%Wqclmpbg+g!!xt3kKi<%UKRr<%ljSYPjp;-K zE$<1$C!c?hye(gF8+{IEH)M)@&gZJ@sG=G;RbJRl8+tu(%yd_j)Q!e`KA z@bQL+=EkD3Q#b>-*S&LRgdb@OW6O>jbW=nT$J6RDZf+B zFDG=ymFsFvjXKn04o2*_RvmSnGHi^KRSq4$2GZ%F{4F$CD(udFf3t}&>h#(Y39{hQaTC0dRt2kRLgvt)CI~XS@RS0Y|sAI7p zbg?4T$zh6DM7|_Dj|o?B%i{AO>+pMm#Y&aK9>vtwf8FPF2|#T1*0tJ`N2-&fw}^?}y( zYTAxS&w91>B9*m9&*phiN<5ut5E~Snd*7|sfhb%K{D*`$Tv6@D;;(5`NLP-1?slYe z24F$F%MG!#cA|K{!I59Fc_^r=D#*yBLAQaFn58O3isMu;<+pPsV* z!TXF3iNWjv0cu|hY@D{CD&(9r!?g4(5pzyLI&;WyKclS~Ig^{!nwXpG0?K%wMr)c4 zRACE6N3=cG|DaCEKt8`~PgIH;&dxRR;8SvPm9Is@lY1EA+T=NyqU8XNu61nGu5Btn z6KVRv1rD!OZsPxOVuRVgHEDsIJvbdfLJ5x_-;zXJY@MTB!Y@`f#Zz<> zxAI&VoSI#I66m|_`?`Qogf5?!fMXamv;_OgyvmQZK5yUl%=!FxGC1tgeSdem$(HE{ zMQA@yS}Bzc^7^M#MzAznXnu{|A9XXDp$dB=?oS@=>1{#gq9S8cWo8_!4B#Die%!xm zqkPsPV;95lePD4>@HZfRIho$lLDK@6G%!vtZ)4brJpk!H+4J&(dxA`EFn z!gChVbo_=VkPj6jbGo_|Op4;GuYcmIN|pew)z+%zK@9xVZ#z}##^1e&KH4?h5E`=1 z=Wq85F)$;yuU^>M?i3P{fHUNj3HlA*l2!aM(0!sc>BWkxG&P{l;+Md7EzTujuE*UC zQQtxUox7eRk5)5pOU!uT7#iJJj79dg-_Sv*1nX?JE{||3H=*^H;j{6BC}~(OHD! z$uAUrM;!V%+&NZ;fP3m81m4Bn-5{T~q+h;Y;88js0$M6Fg31D+XG+Bke|(WMS@sz! z$qJG4G4L%En=;d+FTuly6c>u7A2LWR==wbow+;J5g1CNTn2~^)8e*~TQzn^=68;@s z9Ong6r%Zo*wCAzY)`ap1WPq)%iCPY^`Y zAZ*Y2@C1@k4;6cCB4~X)NIO`(K2+!sH4%rTz+EA<=2)x2&?wNTO@()>5ey@Ub}xFy z-T(;(D^xiNsMIE{(mE9EUf*@XU$x+W0%FuAP&2CcV4&<9mMMP1c{0V+hz|78tUYNv-<Py-+^^Ei(;!;oVs>{~16 z6?hQi2yygPVtS_lGI~^)bq`qSyQ!%`{)Do-SICJn5RK(T;aDucc!ma{jnoN@8`0)N zMnm$jNoO{E_`#nD|8cPQIsU06HMvpr2EATn%4#MUJX#j8amayg;|9^Qk)p><>K=HJ z#C9{zi3sgO<{hvl*9K48r8vcJmcMIbZ>0Pu4(;kJ7=nhW52?zaXGAC|Al#_$t2X%Gp_V{B!xk<@{*70E>~*k=$`Vv&DK}o`Y^1Yf?)cf)d{Ovbd($yKHeeUVJmS=msSf z;@6<;^4#{6RW`&sD37V(Nb+_;V6*w{;Y{;2Uv=4rj#`@elxaZK73I*iZRMR?Irin9 z@Ac{tT|x7Ju8z@j27+jdj+b4rJN+LyG11s#-bhdwH=iEGOCX}wUV}tE1_-aN;N|%b z+CI{?f3l)^nUwGf4gyS1X3o-xg`^T*!Jo+0_>;$o1uh-Yia7MYm_#(ZKF-4Z0+hb0 zr^O>(tD=`1h5s}yt!&87)Kt#)!>VXHF-$l90h1p3K2Z52=kir8B-sQPg((%}mp3nz zMzl&Kz#sQ!Y?H>gmfP-@xwu#F_}EqbXHgyN_e|G+0W&);hCRxfAlNm}l2`G7j1-=u z<1s_iuJvbZRw|=LVe_h59S(fxypjleJR)~O1L4^P<8iya?R?^JetBv*fU$-<=z$M;?xjKE6uX9M#JGotw@ zL6x@yvuls_VOfaRvjp&S%h;nYjJjvqVmwOenX#OB*0(ZrLm*|w@LO#?(kwX0>8!5kq$OV(XWye`S%aoIn8oVMg#4UXN40n8}( zN=zR&*IHf~Z9fn*y74C{BS`QZ1z$zs3IZ<&x!$(>?>F`La~;h0%UK>9I0UVIvRvtni#9@2a{x#*`570Wm4B7a}Dng{}LN<^50d+#)7jY#yY~SQk zZAV*A{qQE`MeW4N{m9Hohd|85?-8!wp~6oExKaU!dIlk1Dvn%Q|CBnm1g_Z&;N$d# zf@W&mRomtLXk4Dmq3N?8WFrogpRKZFsvH6AuYWgp(#W23p4ZARrFDF1T)|`u3SB>S z`@KDxjOJtAy^AB!^%#G{DKff8)-w;IfhErt3X+CSlzD=W)Lk8)Z~&-06<>YH`F8!Yy0 zAv7$W_{K5VnFu!Qt8d#J>Au2N#Q*T#OpGcm8)Y``&VDYph{-O>N*9z`ggJyom8&l| zaU1bapVG^8LqU0Pl;RN!|2n1=U_SNn5anZiYzukIcV`JPu$OJs1GO>;HpsSO9<@>lD^^#Xe6bs4{Iz+7mz27+f4f^Fy`v z|8xLak{=rlSWh38rax`cP-oPb4C<{8m@{jF>J&QI)#GP&iS|Mlr$1+hlWWB8A|FR@ z5Fkh*#xf*UstT733=I$5VoU7iHi3CU^WS9m*y5$+f>(M7875MA`F`j4G8Kv~XAu^f z4^ND9su;1DY4LEot`lxM6;x71vb9Cf;=P)S>^fu&KW5@$py00|{8AUcOgj2z$in}{S0J#ORr`Nd09D^nYu&*ib>ZObGF zT4xD4IwN4jr#wo*@R)|wL_>PjBE+KIQ_9?@*!owEg$)SA(5Qtm)aXI&9fd188}P)N zX!oABpBa@y{;$U?>UxHm1d1U^C1e|%$OT)dq5{+lMXcpCJ1!$?^m*Ihpm_$^iST@A zAt@dFOI_w9^AWvd*QuX3?vI+D8PF$P9_YMm7|tcBY&>;(hVH|K^)gE^tNK$9j@M6*Al+G*t{p$St8M43a0626hxXqdV4-tu;;#(>*Y>;M;K2g2vM z@`k3^=tS~6Ybr&$pyF};)I_o8F7g@sf5v(P57}5K4`w7<7P+}NHdt2 zXcO$=OweaOPxyVxNb?MJc1^Zy^%G68;L_Efa$!0UxoAfC9pTtr%V0iF-k|=|1QK1s z3C)g#y#2ibG2*!YT2VxOl(3*I*SnCEHygTMdkWcyoa5zgoX7b}%|LR6K+VeQxa_QH zfht1Rz0%=b4*Iq`)Uk+d8LxW|dH93tr!*gi&;EH&#={u^3M?6S4s|(Z#}@N$O4n>3 zkAdJ6j%1oG#B^7nZ;7}TP-ZA=BiP&nWO~W46~a>{4=&`QaL(eg`9n7uTS-C5fFv&= zcu5j=$tvbV-qiKPIivdBUo-S}BO@hd9zs^hSzbiU?J)^7Q?%4ZRapF-p;0F6*jQZQ zCfMW5XMvHo96CLY0+@8_p0&KL^F)tDuf|H_nQTATGrG57C@r$ja;ypfCpxe0O0&mA zfkbC>FtX(uWlFM_W2U8FRk(iGH|1Tc;jm_H9zdpRc9P~^I>T62!qf53ARdk%Rws>p zRuyp?u$RIg5*$}Ch}L7h2cyZ-8lYXdsZldkSksHvTbi}J? zMX%Xlc9Tc|W9j3?ZRwz_NF%)~sS_Mi?k*>R^{i~TC7g+Qm=u<-*~Ut}dABaENraD9+8f*T!ZP@!uc3e-pt78zV>w!Ax!*MlApU4Uox88xC@a1Pd8$vv_D zsIWdbYcKP=E7-QUy%9VA9q*sDScCGiV6VnOoPS-)0De+n3LRkiuE8XbP%M83CWX#0 z>xck_if$2cKmdO;{yJirzX$)Kr|$0WV#QS9Cc30w~go`GQ0z zDso|#6{$i@k4H+`bV?!5*=yc5U^p{xViDowzD$*sH2siZb%dckJ{_96cwZ7t1x?js z&zmK%YOPvZm)hzX^V62)FXg`Jtl&7tM(jos28~ zCJ$0t6~xiR!l)<7=z$|qxl?}@s^#W1n|(wl$Q;h93n863xSh_OEW4flBP};|=y@AN z=*q}<{dfIb1}*XZ`|ft#IhLSYqDrH6v+ERt>Tdg;yS30Rz*zEkiJk3ZO!=C+F;(O? zx8nU_dDMgV+jp(@mw-%`IquGs$(TuE9Q9ZN0irl0R6=eXsNgFJQXD}*oFAC4UsDy} zVOh879I(+qzPiv%c`)^v*LA+S&{l?zD<8aXR#D}FZ)(c^$oV(ZWxB2H%W=JeO-wW( z{JHbphW+0beIiE4$yE1D_s+??7rtSHh0X=egn`TKlOxC5_OPwn7$-6KfmN$S{|xt_q+D)TG#ZPs@Ox6pZXSj6;8^?^-06G2DbY1xKgDt7F8agS-sPP@%#&bsY=O-d`3-Ack95zrFVITP`YG ztEh3`0NOi(B}3BV_}A?&r3_16tW*m<$MPdXFswM6kmnq#d!n#Gcq`*^Ka+7|h5l)x z0l4u)W@bvtE9KA)*6B)4;#PcrYKfD`UF^c<)ANC23Ybbj!%#Qk!^rI%x|~c}F+z!Z z4ZLh*t+q2QJZY^cPBZvkd=v-7=vuC?M{&N!qyQuR**4#MiHDypHu#lFmZJ@GJgThK z6+3**C;Ow*E2Dh=hw;@e{OElA(Z+~vgC zPlY6fZ6zwgPE~2*h+>f|w~*kI?~3~Ahv_X~Va-Nzf;43;&!A1RNdBNG&kPew63`t2 zs45IOk8*|*vxXk5I=tXbQN4*vCknkq_l?So=t z{1Upy7p!273T^}Xl_%}3uG_nKV?fP!bCZXZnU9W{CChj+qIm;>#VEfOifxq1@aUeN zM!jT_3SyZBZ+c8=BkVxk8dAY?z8yoQ#m!~(!iY^Bvcd_&kNr@-|sh=W$d37{(H#qx@R*n^<{YptJ(>0EV z_}8}PQ>MfDOC1=y@Z@mFjZb&A&Gsan5b`kcACS0;F!u;vOY1oo?zcRA3 z?rqahQ#`%TSVpz!K~+PkzSFa*Zb%r6`53v~Y#qt8TpcTRiI1XbL}g7u4vV3QLe;cB zhh}zl_E3T~@10JY6P0WXrb<`&bym(ly^kS@&HBEymJNLHC$Bf{gw8QfJcZ*Us6sPo zuc}csX?|R}WkkprJt%v^DT%FPE<<}c%Ig+Y>rv(g6{UEDunO9}6Z?w=b1}i9K~`ku zChw3HkOoOMoYMxMQ>k?O5JiuZkme*Ty9cekI*B*Br?4S;RF(;Xr!OV~Xzhd0>vj0 z0o%ry4>@qkNH>a|%dmtKMo|tX{8)9OUqqg_feFVDM0EshEG!=c=N77$8-U6{(hH9m zF7jMN*7qgi0#6vIO&4tj)$yC?wq~?OVkWUCPKvUUmu!a1TgAMHGnSWQVMh+7bHY;Q zxy^0+NUFs{n|s{Ew=?lP#LA64uZtar%qUUxG%p)+dG~lz;@9XnOr;BF84rLv8;-dcTcP>K|A8_1OEN@Mh$6(9#mbdHIN` zVEH~Vpf0~W%u_kjOwQ4Wm{$`SNn{h{w_szcDS%0peGwfY|#w;kW6Hg(3_ab$XR1vgIZrE|Ess7R{hT(I)MU&t8-CT zMPa+p`Uj-FHJRc;TJ}F4Y@5^u9LHbhZ2ND*Ik;j_&{gqFMn{JmvXqUav_mOMdVEVG zYMsHxYkS7UU?Kv~#%o4CZA5FRYIWqzVlG9k!^u|UTIx6(LOd^x#D^?4n*p6vUow;F zH&~+^tg#xw=(W^_gkwRXcfY7v4{u>Hf6`VR)oL zXQ(h38ZMC12;-CVk|x3tLybaD=>WH1^BE;T*5)II{wcHGDds1B!4EO+Wiq2{ zP$w<`(&fF)Vwt5W&GUb4GJz)tb!06l{WJ|GupmPKs1ERm4WyjJ$dakPs zmTqO=dTp1#5lVd{ATjFODYu1Fgj-=FAyxm{^afqbk~d5#SW~@sG8%PoNwuybeM_|> z7O{wd;fifsO%rNa`9k&6gak#9^bR>D3Ad7T410c9=5X3St*N>0 zIM# z80$^V`bkx*_Vhvqmwczxp}(jG5j|@G6id-m1V%@5)MVAehInbG3Pt&2$|jOqFl{gZ zV$BSj7VM}%n&a3S#P4ph240edW*{$2kV6eO1EWG+N{4kr9!XTmh_+B8-dH+G+AS2z zj(;|s>m66%T@CIhq*|N@i7sOQnR(edKLx%GZAs*iEhS!Vx0Rz}EILzHQ`BLQi+%VP zo#`19V=FfrUog$7aw)N%j6`TE820G_M1tw!G?qn9h~e7yIP$O;%|JA1N}|i{@~9<9 zYX%Mzv!1K!tH5MDlI>}8Ld*=Q|7c+Y$z`}6ZW-D$ z%7$CMp>{<<%U=TTKwMG;Tl>|d{e*mIUf0Y{syDxp9XEfG`V&q>lZuPNp>hC4LIWUj ziP>Awf}Tjw!ghU%Q`=fzSNXi%OC%GLk>VFmkIKd(y_UJ`2BKUShF4Uc>U}lfHx{&{ zD320CWPna5j$xYM;+TY!`(`pcCRWNMhfaD37pAT%!d{*eKaMrm=w(a6l#&l(48;fB z7qP&d9|dn;%Cxgovc_&#NNs;=?0mUi9WPqu_=xg)mHrB7^UK9TM9sCu3<&Fu%wMvI zH(E1b$aMSXz`>D?7&>r9&F_LU)8QXX_*!vhISR%H@lm<3!l)CuaBer&Y1ANLq7+Hq zgtV#BOJBnB7OZ_L!!jGo8o14tko!$<4@SXm&U;b-F)Wl)vYxZjFmuYj(k{M zB|DsZ7H-RXv-Lhy)Pv{w?ItF0CY|Yu|rsL8bKZS zTI%;&n+p*|R&MV0wv&zwAR$B}!Wq$=swd7kLYF|+WRI~ONMj7CjUg9H=YLakJTQvQ)yULZ=2!W-)x#;o{z>hqXCLE$zC?VFwu9R(HIFLE`aZ#A5fpl zFY&1VJ?2Kx5l7Qt$&j7}x5Ea44?h5Hz|QP(gU0s2^|p1dSvUeZqG|*CJU7z&|#38{CW7@Nix8oTE;52naoeX z`>c{j&oFuSy^(bdg*YXz(t^m07blUV=HliugeyIptqvB&J<$U1;dU_k7WFi-C%w3e z%;BCPO6H!DCwSptIEP_G_tah&MBD8`-y!unqovGYhK_}5&fTUs)FHnaQj}OfhNFAy z&mkeb5er*~0)P2#pOGoLo-2#-De~>HC&E6_luNjb3#b#&mK!PjrNY&Qiv9W&_M@y0 z5vtN^)O1t-G{i%`L7;Hq-pe^}r+MVdkL;~oJ+Zfv8=0Z&jud91g2?f);vB7s)~at? z9Wb+U$qGqZPHWUo1AE6|(Rxgn>#lL6!S(Sd^rc#PQ34I>kaZx56C_w<^8G#WGZK61Oe=fc9W zoY(Wz81#WMvCU>8XePA!Op3aEhLEOqWNY`(#;PPRA;CL45IUI{JhTzpeQhlhHIK?; zy{lJ0Mzj`mwB{m9_Er`rYMHe%YphM%bApq(wBtQFuV%=flD{kaVWc0cGnP~BC#s>B zXva~L_1);|UYuU}?cIl2*Oh*@Up|lKWN2=3=ovj0kvZ7zjnkS17j9kflztJ{QERk- z@SNrLnvmM`i8BXh4e7i(z*g3?+^}nWXLZmwAi5O#_{qCc43Vcw z3Gak;U zsGe9DI9e_#!ppkVy6(qsVfNB>4f^?x0<2HPhQ_l$VFr8D9ic-2ynQNS^Ar${0I6xx zA<3*ioP7iNDK0bxu9^?d=)M7PHZ1CiMUnOfCx4qovpV z2OG_X9}I3v+_FZ5aFQIy_Nw6Wf8>8533YpOC%OdPUmS{#3>|rR?ef(d4aPv%*gvl$80tDBQFWeBN;~T=S+-c2Hw`C<&!=s zUmtk}W$r4b2Qmko#r_a*)37A_^$fyvE?KTK$VjfQFYjI6`RVRp$#JBQ|uk}y$2jsrmPH!k|bY!{AZNT*T ztqj2ErY!Bl%tDz2f2{!`ilRZhI3XcH%EK=J3D-|yNVAYU0Z3tu!0k~)^<^O>Fr&?e zCCFmR#vNlgf5v0`x@`Aao1u?ux{V04uEVb$cFYZif|mSJCi-Qxu6CA=LMf|tK%S%- z$|&_Az8#(_r4Z*ARcb-p94?)gQAay6^CD}VOX51uKO-WJmg`-@pMA3Gizv;SDKQag zBsoS?A1=Rb;jf?uw#nbE;}q}UQR^+$m|k=Zx)BYJ- z8CT!A!nYc(U+?3|MD}OIu&a7WFTX`nZ4ow>h{_>j;z$#O!O4SysZU<6zSr%?7rcZR zagGdjPZ0lZib`Ip`}_u=_Mcyn`p{$lgBpyyL4_;XO!7hI+C9roJy;3#5Y!H%It^ zqodAlZZ|DA*RNmCla^1T5?&0qOze6~O$u{U&MN9Yo^n-JsEGK7bEGWLRmX6-=|1pK z7Msl$+1bKm4Ebzr`aV2zi-ftv17jdl%0MPLWEPe*N|d@(Dg;Ri^aA{5bM#7{c3Z&N__|JDB|gYIG15 z%f&GjEz&?H*r~ybe7chm3s!1|qTUWLeV(a5*>&&<7uVuCa9Sh9GA|1cTyN7oy<-o6 znYG0Th56aNJ~QV=Qu-RF2Y)PLb~s$tbHhgGzc@h;4!K_~aytMV^Z5~1IG|^wmot#SAthKwUPrAM#-FLZeXM(Ym3<-~57tn= zxa^`ru3Mhm;HO@9#*M4tPs@#*8~+t=-{8P^k)WnG(NmnnLh8bVC6Lg?5kKNKmz!+u zNh6->s~%QZz%y08eo^HQX6D1gB5H8;AMMl=u-Y$355}Y{MKEtva2?O`5Aste=JXIz z&I!(q3XT`;@SARzn9Yf&{+WvHEDvT(ypCP&9H?AIcoVHGFM~O79!+=_wUq0;KTn!K zlib61$n?G5In8El4u#}B24T8QDP~WS<}jsG>#1|IO&?h%e4O5b=i}xzzA}CFlj#l2 z*RLpM->}!(+F=pCW}!~qR$^u;j_iuu+H%l$DGdDJ;e|WKU%i5YLw$Y`yZ@DH%SnB=>?$;@>?`7c;11#MvQ%c>W+e->2B;e3wPYUeuw3P9H~r2aYjuIb_>Zk8r1b+Gc81n?1=S} z4=V16*{>T@Mv21L1h^!%GIF;T8qSFu16k(L%{>gbTU2*0?y8B(XStss7ml>LoI|~V zsf-y%B+1ov{y!C@JPC=`z@$=20}zu9*4P+w=F zWQLS@2+ zVn`M?{X?!oMO7Ai=fc)_625BVO#1&+_V@Q#04lE1*M}`r)~2#IGz!kO%fX1d_TCnl z&9L?Qe6=~3!san(9xWKl0mh9vQDkydMmOn43RD5sAjz4m)pp7n?VDhCemGCZJh*<4 zTM18Mb#|R;rjt@6U(DETMPa3>9~Q^o+rD{m&OEPS?j%@!K{zIW!3)oN3*0!2gBiuO=yYKdswp(Q|Fd`TeB%mKZulQ!jD+AiCO&PI})7dTWJh*70KOE zT8wchCMn5Kil{D|RlF#S*b>_AE+@$O)d3%{y&c*koCmCR?smmcR-)^fao>+oz>}V=`rKf@^CFX1QQW2;kCUw$Es+X55qp6tiqa`|?WZi* zHRE~{{tQmmf{}7)#E*q2%7tPg5XPo?5t&e{2$PjuaEgP>e;LrX>`u!jhk%7<{&E>g zQMYlH-zGW~Kf5iW^|<9ag!pzQ;qq8#LJ>#8)5F;`aK!_bPN%l&b1s9SXl4_s^Feg* zyvj+LX7vrmJKZ*l?*NCux;FvoT=Z*!!s1_(9LgDaC%&awNq0*Iwsr|7%O)PN!tZ|P zXC%&MBwJ*S`a~dCsLG>Q)c5gFW(77164m-%lOC+bKZn#vk1Gci0~)bOH{0~fEC}^Z zWcF?PHv@tlrJ}fC@#biihydY=RpAc`-H#X==mTXK9B0Zh_%0Ooo{v^d8Fg{kysq0dPb-pocdEng_`(+s@#CYq>(;FSZVld$=oVm$>Kh+_%tE+5?2aRI zM8KdeT;7!zf7>S-SZQV>a;qd9pW~T4Vr_hds;#o!&cctP?M!O*19Fng>AfahA<>Ef z+`_A8DTTl(xl?WQWKMt&1`Jck^@3D$zi%>0gZ7|g!?&DM>3edpQF(jkXDd{%>rz~) z6@No7kNiy2hX%_#*w?}4)pTD`i%#vMqu()E$hHP5#*b0B5*k^de6{oyUFD_o2t%B* z6khdIk9Bd@0M(Xt$)S0N0;cls{phB$Ke3k50Irs)h0Gybk)vPBj7%B*OeS0+?m%(e0CKGdQsT%JsBUK9m zePXhU#(UXm(f(4*Q^fIn)RHVNECGWCJtELSz6tp@TA;oeMaV_MG80WH!}JTez!#j( zE~HNsO2~z%mASFrf>Kl5mN}_`$dpWT1#t-Sm0}`VxCC=SKf>QfuobZQY1#+iG0KW~j-k}pf}Xtg zKIh{bUxjeO1VoVjErh!DGK)Oasdnzil$2!*A%JKlu}j zte9sDj(~ycBTW*(^K=eAl_7tWl3o^z&2gdRGHObk0v?kywYjxZV<#%saZA&D`XeUq zm!+qkE|^#2w<*tA3+P^N`3@_c1qDqAuS(HJm`0S1H?+w$xG%orJiN5%+w?sgdiL$^ z>>gI~#E;^+FMKf>d!dgi<@n_ z#XHg_*RAk7IhG%27{|BjIXR;xDQvC-)v>;$*LQIw{i{1#F`VXApEX2BS5C;ngHA5U z;c1T`n0Kl$Ii%U4oafK9 z%5E{p;(BBha^Zgb+8R5(qnxn#X>ml%nrg$;TkJJ?n`ZgADIm%sBCgS zYl(R_T^2S$ebS^SHL-I&?uk#ZvN~D9tKo7YZ0U_ob$N?Cy)sWf_`2^m^$uY7OkVheI6rIy!x@C0Ado|O^>>@);+%N4$1Xmzmw3_D$7p|#YeD2< zDY)aXH-kM;vvhBJE5fu>)b#4;H4IuG&(#8ce@K4JX)gF`XGgSvLA3D6ZxK$u&q^@$9y^?TDyGyHPmg^tg zJ{D$f1SuIeyqH=r%jHFi@5w$i=GF)o)#pf^i%*bG;}ahy({~EAaq++G@dpHJsAB|xQy8k{bk}$P&^l{R6<_iAGvdb^)x2KK=6?lGJCyg?z`W} zn|gDg-8;o_XPiv*D(I1R;2%tJdTDSLW*HGZ!YklofL;55hd3ejqg9JGlORyH``3*w zpUHV~*_YCSS+`x{8I!2P&uj#dR?QRk4N#mYj$=RP1EM|35NbDDA>z`UkSs_1hk@TB zYTX1HcMuQQklD5!7o^-FxI72Gjd{))w>o(2Vh{S4H3n=~sW|Cmi}u=seb-1Qp1*p( zERAMhP2?ZEVJ4?>qyK!Sk3QpsbUEl}dGO_$^SYSrR)~841LkQ8)hM@H#3Dl1cJuWi z4*H9r*XYjNOMlo?*=ap5H zFs`(!Q9M_fnT`)JKTG8(6jGP~2u5?r`5k8xI&!QQGYRge8_5RJ=ZT-3&$zvnHXQ&uBc#w~_2 z9Of#uFASLyZ?h*DggB%*wlDa>=)J*z7wv&P763>H+AWp}zuGv%-4-TR;Mys=kXcFZ z=^pC-%!+X)e%nX+^+XIt@d#s7m{T>kU2Vm8nCdh$Zl4yhXXP~IOIz{Sm6tc}sWGPJ zDo1t%(NN4{*kjxB@kZZ5o+cD?EKKlaJpDyZP>9;BO?ui-SXg3Lv#wOy2kcwB3drqTVj)>A)-@VLA+X(rsDrb8)x&X2 zf`>g|iZc&%`aI*14KcPBe{U{uQYYhYc@|~x{ZS6$43?cxHh?Aip+R=HX>+&b3 zdK;K=GjR72T`qeSC)lQmbM=R%*PgKzuHN(E!q7Q(4i*~t@&}nG0`Qpj4Sh5hwB7qX zfmuW-%~27+`}YbQH^J(&YTd58FYcJ)oi0c@l(#sU4X=j}(laR+EoJ}sw6o-6j~1?n zJIf(vv(jne2^41J`9OF^BR9Fcb1+E#_=nYC?lf&U0@CnGf< zxrq0$j$3WHmsSH0JTK}TOdG$LY}|63G9i#0HJRKht#l7%9FsVlM7!2qmLa%601bB} zR+Y`Vx;a;h4IRF2b?zvWDR}iS^>p-2*>lVTLh;Vg$KfJ`_ErF_)`Vc28+yk?l#*tA z^jR0o1(5|jUi^kHVuJmU;Ibn8g+?>f5!mL5e!|Lo zY3=6$o6{sm;LVF;I|?%3HO3+v+TpktjZN8j-|;{XxvKYehd!1DP8Wwy&A5L&wYO3x zZY^ag!EDJQ|Uu$!aCo`}8%m!aU)}J*tRkz*6_U@3awHpd`0^N&^K$v=8gx zIq&h?xlHtVS@PlM(v!f3ym|=<%nN3{pPmlJlaEF!L5&U@a1S?XKU_0yw+D8*Z}fej zb`#(l-pm=kyN>|4w12Tv?o-pqe}a9e@5C10a=c8Yn&uq7Nc3}b)A2tyI4~Ix7z;MO zER4x?F-;HfsB3bZG4D2OHyM>*tns07i(FTq%?cP~48{?pA_d+{S6jwXSNuvmMKQ zh|6$Q_agqJ(*wPEQccl=s<`DdQIDG1W#8C&|1J)H3w52Z{iZ}uF)=d@&md4bQaTb( zB-3G3i9#=XNj`_lHC*~SIi`QZs=)KZjs%`rv!l{L^|OHc+fba5B#34T+KmopQAr;w#7jVHrA-<&&Fr=hWq!AY=;FDj8lO>9)YgGXf+Jlpd zpS%@=(RvhXLgLM)g9B^P-WH=3idwjyTqQSLZ0QK;B4sYve?H+|9k!m~W_FH$Ic@%- zxf?NZLL|#w^nx+FY2jtjqB_UrG|!|W+YHNLm;=C=o_3attUG3Kz)Q0?h zUd5G~hl8F4(S(m?$=M_76$5}Ut z%5DTd9hS6)y_J=R$7tQX%U1R~T85XC z5;{Yrjl!<}(M?MaSH&uD&#ux7c^GSnkw*LkM$Dh$5ts6djY zW$b{N;*+1FPRmWG{d5Sc#r02jnv$*E#qer)LXv)oD<3k!|MlO3j#@tCbq>^)p-^V{-9gKn>VE&%6L?qcAs_MlPH>Je2W!Gh&9n#QDN~9kcy+)EIwSj#k23>MLb}x($9&~I!zpokb z9Q2>hlU~%b>_YfjAuc*L$F|ECTJvP7*M~Vv9knZ1klnWMtm>1(VpyK1@o@FwL9W{4 z{@am#?UAsvmRg?q`)-0{6J8yUk2RB9`}4Qk7?El3?hmzK>8`miRMIU`bxapz=MASW zQ=_ln&5pL(tEA?gc!X)MNpr{Fw=yq`f-FN!wTvo8n1>0tv+oG1UeDX(cw&ChPDnn$ z4$#tZ?Rl=-8*k|+D0<)*Rh#$Jr=#|0tB-Kxcwu1b&10zaMC5j=Z=+s1GD=%rvR}Sn z#GddXIO8;nG=oxWiz`xG=h??&9a}Hl<=P|9U*9UZ&nB|M>@J+PV+UJyVF0_z~s~MsisAuf_)Nz3tk?o9koYC)`Ije=lh^mFc zheSU5w26HnqEk92W5$jnBcJ`0XmY;u5oW35yG-Lcs%dl~ek3Z2g5P(ItGF|!k3~lH zj>V_pWqAc zZrr8tldza3g*>Dy<*d=Z@lg~QNt(n6dFH83G}BPbBQ`M?STj#WvH`e2xFlc_xks2@ z5Z5JYtRE8&9aUV-#7jRsf2+J1F(t5}#CnGHo@txXKlDh?;CvX}2dv1(E3eokJNHpQO&)2!lHTse`0Ch3}K zNs{e2QPk(t123!vhDrSbDa2rwM}LWI`f)AdFpNNL?|O3QAa^T9-}<~dK?;#1!Jz(! zJF9U7xtEYel$Xb%IO37MVC`k>sR};d`gj}>O;B*P75yYR@@MVMg?M7i4omi+>SSs= zJg2;aidm@Bmqn7YE+c5SovSTkc71w>?&0HV%^Z6;ximfx$N7u-Li0R{Ixq);oCo=0 zH{7dww!E|iDZlYXI2srVWyM0Nxz!lAhD&dW@>IrL+SAPer5Y!=GC}#hEu|9^5i1_F zDH(KP52&C^x(|B+%yp|DF%yxa7&e10`Kg(HcE3bG$rg*c8DRf-o3uF)Lm`*O<9h!8 z7f2u_v+JQLY732pH6`Tx7;7|7KWPMPK_nB*msFa6&n|cwW1>9*Z$vL7nL?q0peY+^ zTvQ0+uP@!Y|A`-u(+}p3T=Rgl$2E;RB)L#HOZSjdc;9dLwfcg!;_#hwwKhQt5bNk{ zYfua(gRX^C^xj)cB1$?T@@?+>B%-arAuvCqcw2j9rMJ{^q&YcKj4NR4AvprDQL4s5 zcc&L?YV9M!qwkf3X4ONn9ny$5wuQFxW_UJfy$PZd1E=(6sQdy;TVx=~d2mV%j`vQb zkVbnFf~Dc2*`O5NaxdXRDUlM~hE@6uJZ5 zWd=Vs=R|4D3p0OjGvz!$w&>eV^0Ga*v>_}$4PuKyu&^H#M>&yVSiUgxzK-E>8} zYBtFs<^2eCdH){mGO1?KR6fj;CDTK}9E(xdXo!q_~ zzJ|VaFyb)c&|YM?a>P#Bj*u!i9db6rsnJ6tA~JnWMa0=IH)rsn>A0SSNrc|l5wSY#nz!pvBCAxiRL(j_rUVl)(3XlCd;U!G2fP8K10 zAoW_YFO{zrObm=3ku<3^VJJl?$tF@S%6Aw;=xms5Xc8C_=q_jtU+GRHA+9y!PW?^+ zAul29OoB{?OvE+v&M@B{BO$$&2?g?=i3Y@r~|EyIX*FpLC^R=KSn%g(7Z; zLe22|=P6^Gy!WHgL+)r~ddVHmR-kL(YJdk#6?^eYNm)`02UER+EM2Owr16FQ=xWSG z0HDp{+95xgH)lOpe3>t1lofn^v7wwZG#y$-4Zk5@Izq-WxUL+Ek zJP5zlXeZN9q^&?tlMov+2)Wg4C(Bu!q999?9~(0WQ)~xer_Gs%s}fEb5GOn+xb@|` z-hBR{$~9$EoX((Zv7+#I;rTKPrCMsO*pWeUQ1*90jq(zu8EW&`=|O5x?sp-LGBhf` zK_*b)cM**eTE!34kg6_d8X3cC+f?>(?mddGai%qRa`)=hmvb3(;9*c2@8DsEcBqL>v&*;6V)ZB1iM<)ws8?WMA! zjIEBo7=1s8BgwnvxW!s*z*AWKV}in*26?bJcnEeY-s*>9imG4ICc|KQDTd_nKslwC z;&Z_d<>!n?-NH;|HQn05SrUXTvfL!}$#2RkMU-)Il9Kf(dCdjN%0h9lgK(0rWFj!C zhmxGRCFrpM7PR!O-C|#O%r75E1gAIvMTiz`rQDsYb{M2G#<{d3j7_Ne>%QMQ8*_wfvi^3iU_ znIAwCVzlWa7#pfKxb#VLK}<2iD=|XGoH3IFiR~i8(gANa7!e?i}&uE2>`bXfF=yU^Z}gSJ%_)!MJ9?1s~${@8>yB|j2jL-?LVzQB@|Z|Q8!YTcT%_d zwuex>etHR~X?7Ysa9uqDfLcuAG=xi|v%Gv!?}z;%O_{hX6AdwD1ZlCd`60;F zpAkSc2Ebv3i;b|1F7ar417R_pWe72if>N51l43UTvC?}ux@J+Qk)B>-(M2Mfc>*ux zLlRaa-KF}jQX+b23Q~4PJtcpRswJZ1EVS*9(;P?~zm8r)w_4s={8)2_>SVv`((CMN z!n&uUPZ3i)ayPl$seI|>lF@6Ixep$EZ6kLt{Gk*cZ(fo+B35n|qw~ARsyaGPH|yIMn> zS_3#XLsT{ch#5n?83TA#Lv&RG$oOpNzcnV&7wzE=i{Vb`;dTeaqwcu?X_4pAzx4Ke!;`i;%!t ziLBGHbSHoMa_<6hb;_kHtn)+AQsk$K)?m!t(35po&M(F8QMOp;a(BIuwS&3JxvTx1 zFBi7|6E`C)0Cu*2x_4mbTH*x7CKue|Xm&T`@_odOmr4 zID`j3?ZSmNn1W)7(9>1rkk@iD3mq8#IJR7UJ`DS1?aNK%8ERex_wq&z)fYK@{aa&` z+z8OzAXvLs{I%Th4Ad%_Md{UurWZXo1;dL``!rIi-sFRv+_%`oR`bPUUV(A3h_slr zbaNL*80fLt=k4yxloAlLSoqAnoj^-8x2a?r_d5-NF2b?T$D1Wf7Uhr^H7kk-D}Yc` zGYZ--Tf9$j>R&s1;h+H8LKgmrC63RvwtI4q`Pjs z)^F;<2Srpy*ii-~WXETRckM&l&*4slW<1rDQW@~CucA3?r)!&PACe%38;yCVSV&j{T&hN_ac9gBlAqgwF029V{5F_c zBbl8?+t4GOa5flbho_Hfvz~Htco6+I6e@f|wY78;-;R>jlMV-MK}}rdt1HL4_-%vs zpI55SZMNRqHqM3b;BXB1e_5@OsBvGInjT)65-JCoajg4+0 z(+Xk7@Ir{~PI%qZfhOk^PJQOgm3kDC&$aO-i^s&!B!{`Wz%nYk-xid2^7*4eOPc76 zZWs;rEUVR8Yxo0r?$}v|);zP_S&{<>(!Ng)hxWQWv8{|p z#d*8Bz+W(;&;Zb_4X{-Wa07@4;27~vim5QY-(VK3P7*fz-Fyod-R;CUYaHw{2=7E0 zo@87|?7BmF_N&CrU)52Q6>xSCh80^AcKohZ6 zCM98b?|Yp53rwjAxUu|~xrUAnJaE_TIRxHaPx||Ww)1V<5L2uHNNjx-B)SyXI&GgJ z`{pny=H60Zg(+DCGlzDVvMEiSk@?srmfD2d-o^**2I*27XmQNr_gDm=I0Xe_#rafc>wyWWTINEkDvPfc@<%I{1=Iz}pZnLq~v=lvro(In>b26Wmy$-YZn|BKDbLQZ!Nluo0RmpCrH&R z^ZsO_Paxl?QY(UOEvJr?YH&P%{!(1887mTE6NdRHPrKezvp(XeJr>a|-Ve`JcNd&~ zDLtvkirFP+Sw4`o3+1uT8nHq!P>qW8v6q zmk8fY4)6Mv!c|h*l-wz88!Ii&9))CN&j?0JgS--@&#jqZbr5tXHhTVs;9QL_`ohjT z;!Z?%_a2FX&M4w=OG&j~w4qzFF-N|2h7~GUl1jn9I`-{6#RHjw=EtDe!8e=*w1ZLz z1Hi3PcV&3aZ1=eIl<28R%>{|*b2Zjn^%QD>>FATq;4%^Mts=C-g-Mx4N#~DI_|eq7 zDj7v2eVg^6@r*@fu+a_!kxW!-sspj+Osd~czdYF{nAVT&oPG0gto0BqE9Q_EKp-!2 zkrtwV_OClb_^u3RG-wr95PeoOip6D!yEy9)(s$)MCrcfsNeYF^Yzg`mH<4> z4;4XPpnzW(nNCCiexOi5k!ivgNwE)0QK{l1`XeJ-s%rJ?dGfYQN*f~iN+yTWH6Ip6 zf0*UTB;_SaPnpp!wLCRH;6r0`k4Rt0z53Q|t!p}|8oM~GdN_R0@wyN8U02O#?KG}Y zGs&ylL+0$oN*5R5xWVaKH_<@p9CpoY#n_71=zF=m!RSReU;>GZ2rDZ_4me7((vh%< z>C=v;EHcA)3u%7kX|>`kZzdt*Tvn0iI6UG|QfyS#%*InFK35t_Z0f;QsA*4kSLvnO zqoY4AROgRPe~FWPMR;h4JMm0YjbwAeH3)1B?t6Ef}A1?XMnT1!|e;zyHGtW5>33rZA zi)JM)MF$^oNlGzmQhPWwGC(&x@Z_YUSjoymOg*WZmZWML;&cx40WQcM)tphh-ESEv zYYGbS2ce!r0=K80`5&N!rQw+#12#^i5|%dsHxU@m{a&(-Wdm)XyC2WTq(Y!i{lo+% zuFf*C0M4$H&?x)_hDi2@XTXh=YB7!L#B5eJ-b`SB(&POo=QH9+v80q&^KqgQy;>$s z+s_&qsk)x-WXWD}84QeJM_*r_SWJRd_4*1jA|lYn{dQ(^^CO6itS@;%4jny?bTp=i z0Gi4&&sFd$FJi5IGj<9^ncuUQrrr!PQ2+UN@_htm{4l6J}-w#`_08GO{f)>b(3MMK6{qk$kyGheF34 z&Ur{%gUor*>WuPYA452$^8skY0Nje?0B7KWAA6J#3v^L1{oa4`(`;<*i6l#hEu@7w z@s2ET+5j!hh{Vd7Bt!yxuIvd4ZiR8)`hEOR!bP#Oqeq>t?E-`KzqH1k7eV zaV&Af??4eZBuzVHmtr@(pRr+N@50=U2@JnGT*r?p^XO!smKqXqlW<2j>Y{KPuT*@X zi&};>cMj&Lgb!(Xv{tFb=>|_5Yd;d8UY;5rwnxt6km`=C(1yl(lrdC^sCM5j6l zr`yimhGdJF-!phx>)V)fZ$^J^l71O^@T?D1mtv&zuhX{ z+)pbUWR7hAz*HA3E&`M9gF435t+aq{;e|NQ=dSDTycjryQe6gW6*X!{tdH=UR3nl+ zYe?8Juqj{lyki@_6`XTU=qEEzC;l2{6r6gddrtpmGvucGqQ49|lSy@S+N!^SNhLhk z=DQu)8BgGdqtPCuncLn26h)U<^(89s$%CsEBSh#-=R1!~-cZ#!LB)Yr#}uON!TwG` z74n+wrS-Jt+=E=Pb|te@fRhM!r`Ih@Nq4w6-0Q(gmosgt$vP1aTN|wT$TMK-#Mp;cg(tN0slf>{^jnXg>R? z^hYYL^L_-SW&sCe@%X4Sh*{c~_|* zf0M-gW6_LH)}}l8wF5t|oY9|(^AmJsi@8Hk$0#I8Do@B3bh;Y^M}*U3bo+UDKTxAS z_=+~YU&(FG)={;c=;Il}${N#*DB`<@RIrJ7A1W`A)SdZ)rMpwMICyh;zT?aPEbcyx zX9dOlt>e8hz~_a#eZcQd=bL-|ZJvB76@Qi4n73)a0C!5h0-|E`kAinfQd7A;##3A{ zO6>d5D>&YbA9+YOz#Xe3Vl=!zBVE;ae+FEodf$5(6!K^&t`%OmC?>ciH{-3CouIB< z_N>&xr{^YU1$3a*1AOiNZT?q zMHEF@aTvcdY`(0Ul2yd!t{6v%7=2qhH$lcVkn zfT%9hy94WDnQBm1IOU#vN}G!5Hc{(cH?n(_vl3W4#&muW-J(XzUKqGX+XNwp6J=pM z+Bh3QwY}U~)+JG3;WuzIDe+6Vf4nQNI1Mm;WyFC0ZHb6sjkOQFs$i&o&m-wWq zjhN8Xh?iK6RR$nqBMkavD)HG4r1V)<+3>TuA*T^BKOZcQ3zv(fjpZvEp^K%3l|7dW zFEP-_+5p7$8vYf{Kuq`>iGw*WvEZ)+LUkE=LSbt=5FtA~fX)yA01&cs(lau%vKw-O zXbG7BOpFWwb_PZkIskx+nUjl^jqo2IVm{c{5RaXaF_)r<*gx`n{l!cC$-%*fi-Ez} z*_qy%ncmvYgn^Nhlam3!#K6Qv_ew!$?`q`$bfL4dC;1)Zzi>oA_J($*HV&rNR)oKB zfdLwE1U7R`&G26_Vc2+LFNqXv4rr4`BFjm}F%BXEsaAzvVPC z{3n}@qn*WXg)%Z^09k-6K~@g-uQ@XQEuYPw^zj!lUlU%LnEyMbSG)Z~i~q{y@;lpa z%Ku#_Jg+9_lCd^2HFgyNI)M0IZN^N;$VA7;qRhz7#l-e%HaY++7XZM+@Gq2q==C=Y zVLQ+(|KDM-at*tHi1P$%14S)`W z@*-j~Ky#2CArm8^v9;anF%Nb|znAIH)PDt%k>L`tHgx=DrH>+fj*g~AT%3#s2F3=g zKst6NMq@e_02`2wgTt7Wj*$ZdVB|CavT?Gr{RaD2-hadWXl3sJv@!(!7cMiiAqSJe zYZYhVWCqZ&Fc}-r8L%+3&~bn`fk0+PBQ_?s-^G2!{S)uM;o3VIn1Ku({$$}-JO9?s zlt8wBjs33#3sb&VAG16RzZ%VJ_z%cm1i!`pmG!@h_wQNp7#VWC>edqIzz4Lku`o3R z{%Va3uho@@;g6(0GWbRBVCrB2`j-#dcW)To(tD&!tW2)KPl<=6mdJCr6thL z!u6j`+lUWf%*w<^D%q|54ZfN(28Z;{VjH|ETMKrGfty@qcR9|21{N{xN_DS-p8<%Thx ze0WW-{=J13S*QA@pV~O5g%!4YnifHl`IcTB7%J$41b5pYZ0j}PblS~cC1qQfC3e#@ zCcbB>b42EnPQaQRSFR^)RfV=c8{TyNJ4`&c1Yz3Xbrizll_-YwRbv|CpkMfIif zoo<#LHXZ-QkA}+xN(v+AmG7tB_~J$P7hjH>Z0DcHAIti(G=Hwm)27?$0vICwG$Kjt zMVySqJ&irZJb|8qx{T$Kv%}__@E1^bVR!I%shmDEnc_dAI4^J$*}P>wq0WgUq9@9F zD}~NSntu4^XY8%<>F;iP${caBeoBA6nJUf2viZsU+l}}kbeDM&Yc144jDsWQRQ8%=^v<>G9@O#wYT z*DxrQTCkj#f>Y06*)b*K1(^2zZRHUlIP}o;P?8N_-NhYM8pO*ktclD3LDM}Owh&Zk z-f+p7@8E^LZ6}jz(n~1V(M^um95tT-zKj{^L>z8)o!cLi@aueAxr1c)kl9vet>CJ) zN}f7kY68HMphywcvec|rZ+!)n7Rus?${rixIK3!ZRYT-+JrYBZ#nvqv1p2N5ebIp| z?YfRUA@v#80YjCISwHFBu;&JqGzi z)2qfN5)P%P&vj*J*&WdFTaZHRGvN!b_MXnRBsVrr)D8bX#@;bVv!L4&uIjRF+x3)f z+qTUv+f`k*ZQE9tZQHgreZPqL;@*gNV&=rj$n$$eX70V#$-Op_$&jQk7$y+uRjBcQ z#Pz=klK6bdJjVvfEHdFZ>rLItIO%0ad#O&2m`W4X^@#Rbn=3ed1C53Hp_y$Y= zNz_bxT6f+{3h7}zcsWLv;RJZCyS@4FZ{^-+`00Q4#P+K^JR}&d=fkYjTMAq4bD};G z>su@L9$D)KuYSF3*S1}{TkT}3ETZx0(caTFQh41mzhQL|*Y;`Oqkl^Ig7wBXTH2Od z=3Ay7lC=@58%VbpylcH`d1|_^!Fhme$GaK)`{X?5KIQ(eA?|AMUlS3G#u#)-ZBT7t zYEY_iG(0QUJJ+k{@~L8BX>C}oxh}qohuQ7u?%BoO#s41VH~D}nX@yh;{XD=T#wpAb z*!uuB7%Ox)sGblYAk{%0%!~RF?R6aH4Q%oY?XtEGA&?L9gYYznp_H(+0U?5ql9`5y z=KnTk{xv{}^UE>Aec?$ywoX~smhy-?p36RgNL(1XW!*Yp$oSuz5h3EG{XZ@mj{ldF zpOJ%w@xQN{B6ZE!4K_sIms-ME44N|2yLlu~;0DQv772gCN_Gm$F1}?uH#+s@YqKAp z6GAenmIJVV*5gH?gL~{dxEVc_nOB}Y7JoC@7u;l-^=;Io88cIs^t^NRbXEEP+9doP zkC-gekg^V82|Z2^XO3(4ZL`dIp<(>;Vb!m(Vx+TtHude?n##0oMzP<~^Kl1=m5D}d zC=xSO?q{JwksYWkR?c}ktH#`3HPNCFiME5kkt!DG{DF$8qRb6eVL*cVw#FM|ZuH1H zDd-}Y8V*xsi8t!{vzuQSj%<9FocfF;Q^7TFv?;PP!QT(6keMfjgM&*eZj6-dHwe=p z&;X`19PUUlKa1_(Kg>3S;xRJv`|*x>6Mix`r~kgfD&xE-WZ|%$(UORTGB9^ms$VER zLS;mAJ?OEu!pax?EIxp1uKpLdBFP%%nOZ#@fK!o6u0ch{q{?KudV#k@fA)Rm=I0ei zdy~=skCDhITEgr>KZ+-!4F!%nBw?{=%yOJ|4M9OTI7RHuO<{O+Kg0ti@Nv||NdQ2` z#&iZpILO2xjwGA~@7HiUrEKKtVL+q;+$+^=krrtGo_~tyBV8ZBCV{w6ORq<0=9i0L zO(#!G5;g;}JoxX^q#Ip3e{XOJcmIz_MmeJbiatF=VY+G2K_e$4S|L#DonaPj6fc@} z{Rf)blAc1{naKz16vv8lx+#r=)<2>-#33X1#A&30LUo_lY;nD|)o2G~!_gKR?FRNC zhz!7H2VfGUWj+|Pzc<0X2pC{71|5{C#B4{0P|}FkNtuK*N!RKeDQ^iBpkL{`n=^ro zg*56VU_=ib259zM@OD`L#kZD_W2KE%*JEbIB3pQMJI441X?3aK7v!X;T%JVYtD- z6g61$)IL4t<(^J|fv)uMryQnl!yhmey5=f8!_nr1 zW{OX`J$-=fhJthxxZ4{J?Po-JIU8*<&+jraxd|UIv0niBwaw}AS?2k6>&d^VuWMRRdC)OCj-d|run1>GSY`SB zWlNnoB)yT02il8M=Y`)x%Xf{$*02AXl)`AF$Z;Zy=J8^ZZxvMk)TSd!y^L2yrks^l zTD@%|6T?`Wq{I#8Z3RNx-+S+}kA8y>6&(|2m7L<5vR(&1T7-UQ_o(}|BkMJNfkZPo z*k^R&U&tnyylK}VQTIIC=GS{ze7DCqYUD44<7txkts0f^`{_G!C2HI*XtYb})bIr6r&WdlD=n%QAw(AYE> zCrc-D>s$kQj7_WZ1(L%fQJuls6nlaZlyV4zry2gnLfr|8XQGP#EX)lCM#R{m%?#_` z4(Ja7f&+@ysbcZ6vqcC`d8ZsFEKq#%O+_A>CXC{kVjI$uJFGG18sPZU3QBs##}$!W zxGE`}?Ou&oMk?z3OnmFS1Kva>>nj3uw+PfdN3ox;XgRUHcWH`rFXhRK`>SY|rOaxEG8 zozy>2!H%@+GEi(y+6a)ZMc!9jRvEac=B!ucog>KAF}Os#y7}%*4WZXuDQs!5_2Q?n z%ouinL4A+EQ3NKv^th-WJwIUzQrcJ2kzzo(@Z&dBrrmyz&*L>$XxMXD6IeM4V zLVuz%S%&(mQXS1HC*PaU35yAUr|?&rZn10Ug?vyA1!OdDF()M?NkPm~%d$=}m1$t5 zKvy_&=(J^o+72`AhpI!hri-Rzvsf2iN!6RQI7i1lc}0f&j4IhVRW!8!;14al0!n$u zVYPA4D0)PG&OLGH=if~Vf&>jYXUjDWShGH!YT3e+OlhSvhpjZrIs*Gg)E-S#8;ES- z10^B`2Olz=3sbYeK$~mX>P9U2ILJBIa!0G5jWPy^MEwG3e1NDp9BQHRxHGUo07RTl z5Fa=E@p*&OkLl@%`mdK-E)uBz8^r)7ZIA=WftiycsOufs%JQ~-t?o*;048w0+0xuy8YrikJgMtxO%`h8F zF;nbv_{l_-(zs9lue{+gA5FCqy6uwqLigAWp|O)){4v|fgc7;DVM^d%dp;6WWPlC5@rB0Q5OzGDaD@z*V;s%j(rAHjupwin zZBWb--u8{a;7aQQ|5uE0r~N+9*NVz?${tfQ2rEoD!!Z(qClqT;=)$%eG~uOg$G%q7 z)VIZDo~4CdP+|QKs_Arf4xYEw1I7OjDlraky$+I7JION~iXvDv7C3iYli8(`%xpyG zez|H4-oq!-$=m~DS;&&dlN|70fjWRpll$Qx@Z#sGy4MgCu~K*i|x`Tr5D|E4(npE&>%2LlW1 z|6kScFSld+A6#oO*+T_Y9euc0yH<}iPl7$N4M=rswhYorqF~rja0pEhbTe6000+z_ zxs8|*I~r#n`QW!o6#fQEA_?cnA4jYyT$CA(F^K}>C~4$=%6_s?qKws9-dY@{jLEDw zzls^Jo9&P7PTi;OiVqOrTQMk18fN_1ZxWr!_g_GRB zo^<>qfX*xbPGJE-Z~^niXZdju|4G^wE7P?EOSmI7a`$@;+d$+6|fzYr<0N7}Y!1 z8o!|4Q?jycB(7?p0T{zY&`0 zJpR$<4{M|;6Zmyumq;J+yk`9M;Lq~QqrPS+YoMHJ__PSdcQ))Mn7fhikU|_Cgvh*e z2w#kd^_Za?GJj2E1gRSg`hTGsK&2Fo*Q|j(#@OEpqenJS<|*7+aN|H!VDKVjF*YxIFld(Kodr* zFeyNa9gjBSlC?Ne?-y8{1F%yWwA- zCSc$2t0k_uf#sh>l5Bi<_sEVqrn^RzGSpBG5p8f(6*py&{+s_aPbdJX-yLes9jqHM z7W6LIm;uKrPMGySQ(ZFR-r@PxINayvBa>AV3AM zRUMa1v^qsa;!^p!vrD_D3~#NTntd66MRbMmf;Bmv49tqBWv#_mQ-D@gO3Bp1c$4jV z*t+IbN<7Y2RDjr&1yd-F7iM8J)G*5d^?}@hVWNqW3?I3^vVVD^B&!Rv3wtz+X_iq;wn#BdwzR;`x??Y zr9+hi3ul(xi#qw@yaLgYM6wN)HrXPzF~lMJo3uC6%&zsDnQw;r!w7T|qHckB$cSSs zjZigotJad>k)U}Xk~jTozN-SOOHsyZg<6JI0lqrFYHda9BKT7{_|!_ZS}=O`)6zRk zvl45iT3)g>+IqNJ^LlTdS{LJ5+q}lNeKV|3bxcW|TJyZDrd@MW-DBN5!^zE}=Zg1S z_42^z3{8y2NZg0DURLK%=xg$KYr`XLv6{+E*fq4K*U28o%BygDrC(ibNka=jL0L;# zXQP|#^y9Ag%0qzFk+sm;NOYU``jXdL$bKVWqxmWE{NVg!g}_1dqGY9bF}hN^EVA;U z(i&v5vh$^wM(+XYR>D&RA+zTyg`3sw{8F`1-HfRZ*#xSosr7ZHBdHl+&7N1%p$0(< znMS}cWBYZk4+X0A%N)Y&qw8R01kKtlzqlqs%T>ILRUaa|Y>~@Pmw#s2>j|4mDk!QxD&92STf`#X8>cxe9M@|hk6Y({j7R~wkZj~w8 zdrHR_w1n0&^1(I0rMgvI;writrD$F0BiKYd$q^)H1{tIrWr3Yn8`Uuh2Rf}p2{ibl zm8pPve>0;Ue3WPb49WuTPD+8)o~H~aUuP2F@lWn6$|ul5hn)!drE?! z(TIK)0!9`D;c_5h3*gWN;;4dROu%o>Pp)BiB z&g+3#O>kIE$rtUwYfU(f76`x3NDddMCW{y9=CLLV`HlIqhlsgikDQT2Df4F(rBdqx zzvZ}-n?IR)3#tx&6qX+I^X~?|A@U_5958xw5cG@RYw%Iu3hz?z zVUrRJ9=P)mOrW?E%kPizgp}U14VEiB_#4i+GYn(#5DFIAr&=6A}EpYUcGi@cf}n9D%lW$;qntIpajeC zUNxJQ@l+_5L|v4(R1ua?e#rq!TRqjEl)8`Xmc*Y_zf}BK1>jVIRIHzR-kU4nW%JVC z1>n?#7Zq4#hRXJ=g0ahumMB@*B^?s7P$^`G%H3Jj$jU^LFAuri@QQhrzxYSy4roLKzb ztW>RLz2w=fXse{X$kr@;b${;e((S3|vkI%-1+FI?fs{@x9Tg<2N1_38k%wmE|2zxT zA*An4AeBef6v{S>zAgxH3Ynb`(*?G*XL|~KBOvdN;VEeEj_@wvhY18?i0B;T8wZhS zNImIq8VB>H02IOiRU&|dI_OLp!juNqn2&qh$CHKtV+c$eICP6t<)2&!Z8o5k1|x0I zyrMz+$AnQQ3Xx>UJ)RnRh%%mJU$o~B+L}>Q8sWZ3j!Z&2lcw1iDyLjYXhjxzqiM%v zJl5|(2_#EmVHwmQ(EA5OKg$?6G78I5_~*50JI}Qr`pL4AyplxE|nbLqOOi z;t8a)1+8VcQMq} zWPe8Y%6u}2r;X?y?D~^$`Ds&>Z^Q~b?LLF zSSAa8(|O?Wf*_U{_&IkjnKkF&-=~zadB#c7BUG_+3Vhi`;VJ^9WpQ!~q+G&@XSA~U zPAVcNmejg=kt#B&7TCHaXU-vJv#J@AD`mko%2Zocr@|f5PN(=& z#UCuO__N-g5-_JobVVage{yDxJf);hvFM6VnxgcARbHUzO64uVe8gzZoU}xH^OqjM zs`FEuQhJJ99<{aP_2m97u&rC^iwA>ZmKQoV z!JkuiSk)0~U`|4rL6m|<1||x#;Z}v6=6j~a%nd$4@+ys-Gjhp|T!3bmB|10AEm?Bu znxE40%9&r_@(P}ug?9*GoJ)E((9aKfX5`eEpCjuYM?Vj{JL+|@FH7Gdcas9vr00ZY@9tI>frW?a8&5W*Xbj_x&)w<>{tKB`1$v>&H@}EnY1~;oKzG(y(81F~l_&*&# z(Ld}5SjJU%vccsx#Ii}@Y=X)|Dy&N~F3N+8EX^{u$`nP@o_aN@Cr4f=-M?xXNDs!g zQEMql4~*tYfv}FEkLAkEMJu%&KamDAgvfcP{ z1@iHaY}#MG__h%oSnoWw13n>p8wk$C-{yR0e?s=(eQPVm2RL#jG^^mOw|r*!J}zn6 z^HDq{ii?1t^1&d3w~3s&%N7+>xB`N=Ge;$oNgs3k`#2D~3yHaACMiMCi`-^8A26zN zw@)5)zhwLpZNbxYm^UUFJ;--ZPwi#vsaQs)pq$3D*vuz2ou;$cF(yTw*fCA7)2096 zj2Hz!%#k=X_s;_3e2;a&I&=lPwz@EzYFY)a(AXs_W(BIFhj~Xc59c&=nq^CZ;+!=5 zQq560`)nH4yo7mT%*Bk`DT{|&$^@DyDa?j$KXq;TMzvpg4I4t>Cfu}u9&j*FIP4Xr7+6b=KaJGe3Xs2%4V9bD`MMbeq$4Vc*hyfwX}^P2odd#a~5Q zMO#H##o$2XK&6CF0*x^u-X0+BiXMA~DcP-E#q=8_f8}Ny;!cb3Gr-;+GIK{*xZ`6R zfmr=TU?lAwTz$*fGE9*cAYTv1H`wxuyRio|`8RbHU*8bIJ6iJeu|T2!e1c4keL& zN<}>JNNf(V#lQ6hYO9z#cXjnWD2ALpwT@Y3(VPYFF&Hk6fqw?V3-INT=U(go^vjD> z{Xw}S7F@)D6A|vL!828Fyy&-h#fb_47|`1IJJuonHb99An_>WN=@VInPTZA##cb)P zPyosmB9aLuPW!cCNPX#VS%*?GNS_AWX-Iw3p2b}dDtT(v%Ao;u8 z02c?u#ojM(_>(IO?%|l`gG+br0BJ@h2dowi2TOYCM#@;T1)cF??+oFGHXil;2%Qib z2h(*4Z3|`}$xI6x@!xbc{Vr`>E5{i+snC`bwxwGtBApfxS9_>(N93DPI8NB?N6uWL zC#SHwc?-@t)AOQsBY17RZih0{1=f#vKGHi2?9SPpj)3capEmB7@Z_h{dI?nxP)=*r)`G5gD#5!_A`_@f~19KACU-JJJ0mkx2d z^y1PMV04A5O-XA1gp{dzo!o)p|CSbztKVu(%7R|ci7l{ zN9SDp1z}Gqgi|Qq0&`r0F`^dEtS?-_NDCsmytk&+ovEFLo%NmRo#aH0P!!IL#B%?Z zIlgu2kFTq*^l$jhlnn+dp`Epzl#vIBtU(g@Uta?3r}STfFQ2xbSPdyvbQhx?Oj65mnPA=$2tEP9{ZiO`ocsWrK7ZQ*DqcBBr4Xd%8OE3aN^Qih_y?s|H9Vl_J(f zY;xslIi@L3VmB>7Rq8U$Me|eX6Gm_Vf>gl2>p~bw;Gn>!d9;WOuYy8AHVV7`;OZq4 z#|B!;nNCgGNNTT||ID2!^^hVDzk#(y+X(ltfbM15^4rm1p+RYkNjMR(y0hs)%u zad`}%7_ER1zJLh-Tv+%|fEXeS93fId9{e<_Y(B(eV9qQ~gCWpk2;VHiyD+;%Gr6F+ z1;9(lX>EhvG;D*2dw||vy^dx*`EuM9t+Qg2t}&lmhgw$+KPl|cP?J{r5XnQumn?Se z=vH|SlHve0iyB!JSq^24L$_!bc20w(UnibCV=ekpgnLY`Mfq~r6{V9(wP3u5Qa=hX zn0h#&;z6xHrTVbw-7G+-61iy9EJCOHFHv>TK&wP{5vf+7S)y*%s#d*N^n40gFJh~t zv#O+45Vh*%%7d>EJ}+C(TP_o7mdATAAvlus6#>j?^G?K`9d-0QdftOte$L!S5DqHyEr?`@$iGgP#8{p~?QDr;I?I35kdGI64BOu( z?Y#bE=G=`;Dmu+xvUte`a2mL#@#dV>_oo?THI8at(mJMaO=KNSLz@>jj%!|3IWBYM za$aQ3WIySNHZlDaHfsfCw$)Pn8uGp*>18~W+*`fKlKgg-!*Qz zNDynb)F%qSl6L(H$Iie61=WJK#fDBYUq^0hkc=a;9c`?Qn|IbS%V>#{^JQTs!po2h zGXt;O>84q0pt!BvTDs18$ab3HjrFRXK1l`?Fu&5g2leLhzv6VHJ&b#uVr+}nIw-am zOsm*dROu+&D_tycFSeiau;xvx<1FT3D-BwS=;pCi$es%|Yj!K^22bysC9AZq7qoOB zbjG&Dw&%JLxaB%9yN&Z+;ydO#_ZmDo=LjCb9m(gA`&WZAsvJnGza(P6mLdwhq$&+d85JTSiZrJsU+oq`RX zf|Hy=tc-5mD>;W)AGLMCcJI-9G=6^iXJK+xOhjvreXK64SrIb z`B8bDU3uPR(+c#J8B8T|${UOJWmo6yOYlny+^UIX7J#``x$$1DQ(vurHmUM+Z0nMM zh0aA;96?^;k2A=xV9aiz-V&Hc{;uI=t`w#8FI2PynWQ%sCyz_WoTh^k9uo?Vc7aR* zrkY7{<+|8mS2G>sGa&@dq1E3T+yeY5HKu&cQwQG1Y||T|0`e#%HKEZyQt(>k z|18CaoDoE+LSMbga>3)$Ax;Igq$WUHVH?QYUjjN2v>YuQJ%uiau>Up&;+Ke9pj`{j z(lp|x(qVj(G-1DB{}ZuK6}9AX8g7<;X(Ehq_1E@4VDiR{dq?IVs$5$W;hb$el2)*Z zWLiAHwND+WB(%(`ExuW<`|5gbklI09-^{wzVFGlPBg^!Z76SrRP6 zre6JOkXO)oNA8vc%sO%j0wQ#V<5_7)+PfaZap8#}E|B(yd19+StMO-+jsIkiq)du+ zfWM-6kf@nHjIy!|Ei@P{1!%7^kfCrR28qgxm^gNde4<$Rs@Vk}-`7(Bm}j74l$GZ$ z<~q;BR|EKmGtHBgAq2D+`2|Q3I@xD6a|lZ(0_wIDtf|ueUv^jbA@^Z zPM22QIC|=-#3)9DS_aD%Bmm~Aq+mY98fFH>8(wcYn50V2VAVzer?hez>W(LIxgcJg zkv;Sbk$%Z~AT!Oh*RtfPC&RB~Q-tRIJCgZ{ z>3$m+2ih)IGcn)wAnAVK9XX!&d&x8@2z*U8XF&*?{Ik79wXLNeJzh7O-fpRu&aO?Z z%`KZxPoi#Y02?bEM5wSpxCfAjg?RKuVvZ}>?CB6?)&_h=lYI^6i zRP@x&sH?WfOTkYPD#po*Y6|7-Y|Fp(VuAl00V|dON60K2YN?c2CbELeUS<|x)vPW22E2&okdumItv$|@|MuO@pP^JB5;3E*T*o*j%8!jqCH;Y&O z8gpO)^(t2~S3r2?vbLr?q6O20j!-=dqAItlA%)adb(b3#8#?mVGJ6R#=B+ATf(+~8 z%cWv~hSsiP7>x*~v-SUw(QZb*eOCq;1Nk&QdC2(-UN zynFNBOr<*matSgFR~y`CJ%5H*&Z}8BX`xKbnvz_UqnA7+Js2$Ph)t!&o%&XLQm+$f zRnrc-jLaqAA7wSGjdC6Ncw=AATofjvvBv|42^Ih~TGJRT2P_Kmql+Sf@W54rS1v%L z7qDwU1F`4@1-J^sj=>vC#VNAn;0>J*5M8ID%ZUl61Z}2lTSd*&rAwDCeRguhFyq0HS6V~Jc13~gvrB}W39Mz?AqPlJb}10U6T+anMKySwU7Bm zIL+8XxNK0go=H==ivj7IWt&B8Hy-YCtZV~_rj4dTY)^LPRq|9m2Oq<9kQ<6a?#32PsA&pz02U4>!gp%&0 zuGEDMkCc`}`IeA?tfmp==?5+)QNX2yN?IGYm7od>4af?$3l||VRcb$!?KjKxUr-`e zMZS%JmbTTL0%hS$!5rD;RG(lDeyi%^rXW7OWD*;Pd>+EVhWi|#t~wpT9{7>e_;*{< zzI!by}Xz?9e&Vl+H3965I{G)U|N@8_1Vt(36tOI&#%}Aqd|;+;HyyD zKZ5?2xljIVI!&mOp#epkWI`uELOgu?6)Nah)tp8z(Z|7sOwL^SRy6ES^;{XLSjZQK zrl!S)m+W1@#e6o`OA1eL=~C+V$4_b(rx^!*A1rcAhDK7<^p>Ya7&X>v8QXG1ujQLI zOAqF3C|zG+jRwDzorV-YWlLY{+Jvmp5RqRlb^6#mW>DWGBjq6wXPnx=4ud8{JlUgs z5?;WS&}zSDmmO5S{hVe~#yVsDk(Gn1ePKWe>2KBMkA6obD_g_`^i1|z_S(zz<-~=q zSNaoQ9q;9!UhNfYi}@{xMkd_w@UV2(@NhjV5IW3d-*=Vj|YBc$L|!=S}X$&^)utbf=qiub7*x8}1VwbBz4X z@@KQzV9$$Ta2?R8j93I!y0G5OUyfl33gz7>o(_pU?cuaWr* z=;^Es7rvF=k{;1g<1ipcL1J!ClGG{whIF+7i7PuBuwgz5vjw86?`C0Z{jD|-`pO9( zJS=O_7(gxEElPMv<+PBYiJZtMbdF=H5wLo^!*|hISNK+H3p7~{B_slopGd?~wd&I3GI)|GjAQxCLt;Wh=_-0Wy}&}IexqVfR^fKd$rSEI zc^5myo%wmv8Z1NH?BUf&a;C1scOix(vydNclwml7fh9Qn98ph6!{XKhDc99-*h#h} zCDBUiKtjfSF98XC=(=VR<5ZuY!jZj=e%FyZdlbY!13 zd-=@54GS*bII>0Su+)2D`|?xV%8R*-M$k1}$9;0h@Zgjfuv~9Lwrgv%gEcw5n%y;h zc?cF8-~^en9N&J<>4x$=cj#K#Q^5&&GPcfp4AKo*df&a6>#(^~IBdn91kRnUjVV0e zYSKhpXo%%9MoCN3E`&fsFRh$-G{nLcFLq$Lm@1}(UA#BcY)(l!U|Fp6;k*^|oAAcY zABWmfFh%OB$0#toxHd)RywG8|{cc9Kv$eC9!<)2PVW0uCO^-zeG~VjTIa&??Hzcg!A9%*br$b#vw4bN z-K?7lrH$?CvHRQnoyL71lY<|!Lt71k(ndMH6@sU>XhG-m42>)B)kRHTpONUtJeq7` zjdjO)MokAfSda_w(H~IUhUE2VYs_g{spXZpfb13UjN=6t=5aC_=fe3@tE2jc1ok}}-Jyt9 zI4Kdtn|&6!Et-~s4KRT1KI3kI)}kFU;jkp{XrJUAXEj8i4>+_+u{d)+OzGT->9a6Jp{&m3Z6#X@(yL7i6odBJu^mzlC`ittogFw7 zGL%STgox6C7AHD^C9>>kgD&pcGk{gI{T$bvv9W5-N}%Oq8ay+{a7t{krjeryzV_6B zpLsRv9jP?-gk$@}`4yDpVeEoDn{}4Z-2>(WLabDnYkHE;eTniFDA61^k)4noyqq6J zrpk6p0y?k73>A*BSjj#H`hM5uHV*rwzyA>^ySAA4R@jt9glXmMM$wEl*bK7VsO2E< z#Y}_|gf>cF+GF*flWKY1vL|kS%VtnwgjP$Q%GTc|auM=)+Fglvb`=cAOOR>W3Jmm4 z4@{|B!txmWSc_OE#ERr~VAhsK?c_+9{n4I$_VwtcrYYMK%*3tx-PyaSLMq-l*1EK- zItMe0D9<1_^Y6pyw}+56^O^Pq_OqmZyX9EUj4ZJj1b3Z)P;eTisjtVk!i1y?YfDR8 zMvh;0ohN=#sa`eXC z;0l(SXKd>c)x~vINob~cfzBw(npz?-)*=+ui4Bq$tK`)|c78He6w!()7I?)A(4^b# zFE0}y5asocckM6lZn0Nh*Dsq+rj5M2ZYplP-Cf_a6By6>>>AlBP~40p*?p?^6f{eX zwI~?tq8J^Ce;?bD7&BarY?_Uon~eu`T*g;7(XH%US4X*EC#O^(37|Y~=|T$gQSDvl z)8)7p#>}|RWJ<{)D26YXPGzmie}|i4G`3t#Wh6|pY_h@TaHbE~F^OiYkV7SgkRv<= zOHoUb@iWTEP#G(0KRU&V+gMGE)THEEcqr2t8)(J|WzX);KS*##9`AABDONQvoWwCF z8%rXi%y_dip0uB_$v-}@I02M?l+Pm3`B`>PEiOp57TRS7tdhXhs}&hfmEUZw4h=W@ zVklO_-zld3e9n5Fxgz!Ur`ki$TfT=w@uGVgTI{R1gXfkd$r}yz2Wv_k_5zpBJ93&G zN$lWq5+7SSWWUO%FX%NL}tU)sQ zF8$ER)D(M^P{ERfB7yYCzmfT+a|I!wrb+U>ksA^f@S(;)*(C)?fdi5_p(cveSW{C@ zxa;EOm2G-j;Qke>6z1Mkl*NTHzbM;z3zamap5-K%$}}+Xf|_Ev#ed?L8hnwLrK|LT zM2+j^HL&lG1S+UvxvJIC5hr<=uAOcfY=TN#99A_yjO;slhR(?{=ySL1kALnkb60;> zr9NcWDVx#Do?-FfCCW|gJGP*Z_UfnetS6PT2$UpR^4*~TehhP-g862YcW+mn4_bd8 z>cl5TaotnQsiD%{4@VrLMEDrRWv&YONFe0Hn5_J3YGl zjInP1MCX1ucg0kED5|_vx{p+beOSrCt;9J5E@Khp94+QnQZ|62J9d`0ZK=1tX;^G8LQlN_7KE5h2bVjWoSW8g z%L*;1DYV>14oLWNF>PIV2p6sysTanXi1k+%Ip@F3Rm-d}EpW3^XBCq?l;(RnxGit< z<FYYa8hI*u8V>}%i0IkR zV@a!DYc<>0TZ^_mrB6j}2-Az#XKGiqVh-_K1aIu9Ecw;+reyhCK7Df)_ZdzrLRUv9 z&tbH|@J4g1uh{DMg#i}uqU4aYLU|W~6 zstjUSsr4Gv;+L@ZN>V^I+xy?Gs&DyQ4s!cEm5AJB<}BD8TBlqSNuxBjrhh$j^B-!!b|qO)ps9)fV&lOktBkB^a@`nA?unq8s{iKX z`KrhR{vJa$qA4dVCZuNPviE$?#PXaU)NB!QI7&dBJrRX zQh}sR;jhAEc`hl{>ZFz-Cp=ybmP=~QXr4WSNG3?sNIa9h2_%q)wKpWSGf4!NZ{Ww$ zJC-)VwKjei*fqMQR^Sd&-z3^~xRSI5H*2IDQ1B_^l*J?sC3ZxICDpJvQs}Oi6!LA$ zU9ib-=luH{f@6IFZCHY7MQSPbMt9n@AW7GY^4Z>1u`FzVNoTE#JvHdUdL|n`gme7T zwTORIA#W$$JC77|^F8*xZ0}k;Fb<|a*g_`VnNSlLk_~4a=<$9af8q>6pS#MgY zpJ$824-^r+pI@ES{FqwwG?*wK$rFE^(w7aoG#HkH>Qfd|D8{5M>8AVMz;Qmb(%-UhYp;{K0zxuH0&@)wRl zdiZJ3gOex+G@mXK?X(!AFxoqH#t?w0TygXgFYY8_HTmt|^+|)cAG}Ks%z;9NKbPn^ zfgB0XB}f5ZB1uwo{WKK^`BfyV_^ZG~lp_0%3l zK);_I_(ku8Kw{MMhT0|{O|}RmN*%)-_9}nDJKW)=LoMz5^1z$N5m-K>{uZ#F2_%51 zRY71~Gcc3CoiUzlSObg3_B5*%R7V#@z%rIdrXKi(De&cN#X_Q=d3o`kul$Z9q;k7v zJHTkd-T>tJ>NU%Y(dL7g_{Klp5|<)w&Dr)hC8pQzcD7Q*)3_W=GGW6JE! z&;OOqP(r*;SQaS|M-Xssv+9>UA zAK{!lWH&#HZky0D89md}OrO*JWL-p3w^d^$VJ*opZ3 zz*`r@|HsP(61&|`Aj8_s6^$L1W~`R5FM9yf2ikHThSx;?_@^k<%K>BQUjnt=`SAfZ z-bV-}pA1cjS|*@kf(V*?E9LMD_*WolUNF1zA<-bJNHpcl9g>OzF%p3)EH$-}I9)6g zdXWn*4d1y8)jp*bYIAc$s15(g^>u76uzA{D?9Ap?W9N&HeC=_Sav< z-JS!S8^5MQ{cWVPvYj;UqHbRLttloJyO1XK)QKfCmOC3Fm2#_GQnWH|tKl3wV_&0* zzO{3<{wDAitF*n4P5a=f+oDGKkl!2O-#tTYm?fNEaI}rt?F8V=%s#ZuvTgR@Q`yz% zIZQ9NUqK27Ho5)cp}2#W0asm}IPi&1ZI^|1sE_yCqzE1u+ffE|B&f@3lAV7y_t!&|Q)>YcEuK+30 zBJHXx4UYA*IYY~w)0l2$a?>Ug$07pPKvXW?(TFWz?qWw?ObWM(9uBp5Ybua8`G>m^ zueqL_t``nIXfp!Fyg%mSs(%ZI5}4kUOz#Jc>p(Nw+wO@kD)W4R^x2sPw7#=R$tP3j zzd0NJ+>AJVquAoqe`B_Dn^85vdQPP6LSqef%s}NNRP5@tD>Bk-X|kE+K2~{U3gC~< zLiHk;*6dF^1>3lsymh9DW+|H2YqlR8E;lNqa{o+gJ}i>H7-b^?P%tVA8sVppvhDZCHRIkx`KC|acjjrAGF%B|;xE3&n8>mR zpLp&&<8FG1+y?8j?Y*fob#sz%7SbQ|=w%!4^RN4jSlru_-f28ql&-^`9AlWp9x#^Q z{|u~oPV1wOaE>W6Fh8SBbtdo>VCPnopIrBIVT*t7*B)eIb-e^lO1hBlQ0?}}Xo0mF zb3+qM(0-u3N%O4`z3Y)*ec|}?Bf`C8;eEZ-8tN~$!XvM|4CAW6L65|rG%IC~E<3#U zCS>K!0{UO1M$4sUn4!%4`F%6x<=LKV7l4gRilTv70k9p z^;WvLnc5qz#XN?ou7c_a!UX|`BtY;GTu*R!cL?ql-1Xq@ zF2UX1-Q7L7!@=D-xVxRrUAeUncdK@5Yvy78uBqvH=$h*3`v3l{zMZrI=%WH>mmhj9 zygca~J+n@~fQA|1=LI7cm2C_^VSxI)@I4R?3#o9bjb~-q5z_QyBC!x)hUh zp-rCb)$YyRMBjPTi5`u#3LXj%A}<1LB=OeT(^8C~&ZIPZkht{lK0;cXss>m>X8r)X zRGOzegJ1RRAzCZ|Bq%L$ez;>A6L0oqxn=H^tY`4y2tn-tt-dV6KDRQJkwG4ggf>B_ zcPlUKoX-W{iwCw%@L=t~t=UbV-$!9jjLGjFAI2;^(<+f?3O`v(`NAHFwd>6nH;*;I z--BmC)K&!!(Bicq+?#6lKei zly`-={&jA9i4nuJ4~cQi9?7#ob#+-QEbulgq{$&JYl_#U7Ph|-wp-CmFG+Et1bgxC z@6^xU2I(2Mwx+;PuncJR~&its}t82 z{*X^7?|~zZBoC;QtZ1`B33<$X*|hME)w?i|s;CC_ z&b#^28Ueu?0S7%1N)xv+d@UmH>%(|cv^g{BGE~NnEr?5<8d@7G_dI%j~X`QXx?zi((mcy^3`-N|$x5VV1^Uq8QP0s|CS@e=w_qu@%nH6zST zPfM4gC8R@pOJ>gWwINwYc_olNSaDLWu?4YrtFjlrD0HYuVA*0k_X=cQeEjNc$@iiZ z#v2K|-F$)0y^u4taV%=enAhjekRZhb3fe%{7BNvDf+ zEw8$Yc}KLorulZmY!$f{v?}Iq{M6J8JaFwOB0dt?EG!(czaS~5?)kSkAfq{FK9%Q8 z!?qU$S0-AL8_l`oMSW@oe@>t1d?=~j|NirWVubq=j`OGgGnUK6I~T8(#JYCqVdrIa zjj*TmqyvtO)zxT$)Fi6;Db{zI=D9};H;wR7CV6TfQEXEqSDGVfv{mx7MKh#4Hv?=_ zVL%jmgQ!h}yFwm$*+jkQ`rpjH1?fi#GRThPS=-Ft1uYzG3dcj#1t6@`*mjVXLMjUzBWv^8PkO z;T#dfXGhDE>BU`|#2SLk0zeYs=r!rC1%vzyzQ`2vEdnS{S6z2r^ocRRg>JzON#)DlRAY}=<&?1P&aO#*4WiE zBrhM!Cz~1cD)pc(Oyw4Bk!m^FbQ=+?voV%ki*nd4--(uarfU8?!h6_OkH)kLzObr~ zg#oz}?W&+gy+&V;sX3*L1d1lAD(B!CF!IPj580+N;NF>uCu~xKv^~xO>x0dV7!Cc9 zRUqv4E+?UZ|3oXND6Iy9yrk1~dF56}v172vwe)na8G&)Vfl|WI6-d(%Wuzb?mhgLY2#mk^-;-?-& z4JAkFhwTN{u?VW=dWxpxv*WsN_z4&WT;Qb6ioz)Ghuhl}x6L{b;4Z zbMl72j8uN&Ab%0v5qDwm{3yMXb;|B$C@!XTeZQHQ+|h4k8N+ddKpIoLt<)B9hI6*~ zz?(Tg8VU5t85QfkiK2ZYp78so5~8Uau3&1=i4ooj_ZK~u+oWn6{^%=$633o}U2So? z1ZI4Yxt~JG_5cSv;%M@bU4HJpv!mnV#cigi@4*rv$R+LLdemLuF%z79n|Zm{DD*_V zRVE0VInT7|e>A)aHQEw*4HbAGYwLRfL z>!7h@yKruvCXz;=B1`v>E|NEez_kdgEwG(+sr^NNw}nG+@3AcHpv$98?e~=&(G4MK z7K$KXK3`VUfX%A4+_$oW-<#@hxOTtFj@nefR{K(<0B5wJn-hzEC)QEn)3aI``zyqv z=GW?cb!XXX3YV^vcOz0p5r16R1ubFnuhr(|m9tCA_1;u(=C3@+xBT%t#XMjq>@6K? zaB9px)sZRkm@Iv_Hc{YNMzs&IhgI4Jx#J{v8c=E`Mx{QqwV{IJ+oS_A{N%V205Lww zg~a-Z**AgqP%g_zE+Ty21m{g^b?V-L0Cpw^% zNboVq7}-gj%-y!e9Etu@yv@5qjHSi4Oh(M)A>y+gXozw`G=0bzR`t`VWms9xp*9B~Dk`E+6(9__!7HoLmy$a&3*jA@?Hzjz^Xi%omLeH28$MA`tdVyR+m zg{RfXjK|nYZXRrQ6I{M++5j#tk_Y}J1tYjFzU?ML9BrYV_==KDbF4K~_~Ign~icqeQ&D(F9ye@g5;(%D>fSPSAp z8T;%cltm{jtt}2AQwr}|biauEn^enxUNgypZxaYE2FK)J2o zJRz8{4}DZ=Lq@9i`I<=cLP%)TbtH?I6pI=q6F zV6!!oGLms>HOoAH&$u_;ognB8J0DK7uWVDc0lCc$rb}iX8%~Jr#)@g|6C`AuVeH2Y zx*JZ-Mq>;VjTwOi*tAUJ=<5@XZ?pHrY%>w<%ljAW1(f@q(}mvtdX+Jh31r`m-x(0TB%0;qCO35PtlH#&b6mrlVS6H@SGMxM=xtwY z!SijyZMN`&{+aL4E)72h~lps5iVTuMe^}H<*usJk)DAyyK;nanho0FE91YcoB~_0 zUH-yTNu4KsmZ*?*zATd+NJT1aI6zJjfN4skalb@xbEFt%=iuXt*&;FVwXkLRnt@{6 z&67`3*2C3-06CLd#pIbU7A_j82-53kZcP6u*{hq};5n{~=^gKeF}EUiGO+<`J! zyh~%*l>5|3Z_~R|@g>V^B|hTa;NNF6`%VUNB0z=rDsIBu^;e(YAw7Htp2KC# zW%N_4Cv{7lYNqhvv3uHvsML;SESS3ESv^>>BC9?d<@Z8}E8)3AlIS7kZobLnaTqY8N5&r$@N|@KHoO%9!Xl-Eh6#Ar%;K5Y2mgZC=q^*41X~gf^K$fgbVP z+G)lG`P|$_{?9I&N|_$QY8m;t_ChbtPPK6t0&uO7%roGn85fu>Ha-+757I)@?jq>N zAtcGz1}kK!Y$mFxj@91~oJ_yVxCiDpDIgsrl2OsH5N+Y16H46xgvrqVdZnh!Rsu=8 zOU6}(g;oB3u}?Lm6mYKqa2ooGvU;~?kIE331F)d0o$ z^j$qjX2m)xQ{>d^1|xSI)=E=9$%ZnJ#l-44^c16cc%<5H%+yZwzj@ z6N&IS!ax1I8|caWv{&0Naa?%Wl_uTE6W(;OPaxn&=#}2Qrtg1u$0MDs=cno>hdZ}L z(M7z7(TU)m_Si?C;{Snn6f%53-!X9=2`Rc$<{j_6Eu5dyKYKPbeEsqcG6(HfA$y3` zq&^l+Tn74nBIwtopSgdkob}fo)gL!O?53{?GO3@J+1J7%f7KxQVy%ZQDZ?cj41+b= z)EuInF@=_JF|3U>@*AS`U?*7o1g@{fQ38J84ySFZftGlwoIeP0c6JA*&DWp-Ab#8o zy1^Jg-a8tItP`s|uw9x0%aNL==sVKJISzj%qRd; zD@gSUs`)2~dg7Cub&;X7m!FCP4^kV~`+2sb(T~B0oXxbYGd}Ry%B^?DRsx&e0k;-N zqe3^OmfmrKMale8iXh3KaRZMO3p=I=C{dwh5- zAZ&TbKzG?{Vt%=~v~`}N5z%Oy7olv?P$TIuSG)smwYAAu87u@rU+LiVy7J1dhwlcmS>9vr;}FP>Yy~mj|m$ zvKj;!-LKW{Nyg<%agFG*n5yf!3s*7N+Pm(jeYjxpD#KX_{tzBuT%WlDeRT0tO!#b0~VjQHr7 z2=%6>s!NE+^!%Qq?N>SQ)6xI#ft`gg7PM^kwv%h@`Aer>nt2an>QQ{P4YMLAje!d$ zXF=_IMYeILFmoruRT)5{eTCZjBov}#Ma%vkn&@s6$}rKwesLa;+YsYOpIrUq{$-0! zkRk)(IN|i1Mo7t3CvRMROnlp^XB07^7Srpql+xYTR*5{-Y9h72kPD7H1HXYsnq~=n z48{s>w7h>4h7u<6(7pMF+t+nLwsLdu0m};cTA+083ExuLoaK&p=eu-vcm0^lH9mIH zIM@7^ah=gN7i0nEfKKQVqJj+%J>g-!3SQ{G^b^q!SGa0|hn1(;C@8rhDGo@=mGB50 zq-Bq{O9CjqrfIu`)mSyUIR5+~Z&QIITl9bUG(27v#yARM)7J zcRLeevfe4SOc)(I@@@1|P-R4xNL?$x{!0riD+eQez*h(a4!AuVOY!$|5~&6@X!&$Z z;ZPpi5__7N9&V-Y-noxuI9Cw1L+xUtZRfUGA1dr1(iVmk{!4nx*H&i$ikVNw^+~Lq z?(Xoq!1dtkq@}(EETNw>(bAvw=?)rU%n;Tf(nkyTk@VOgq81p|90Unow0bgQU5QqP zs@J%}uP?#cxbbWLMCaxm-D@EMvGzo>53OBIuU&axkchw?0+nARGnT(Ei|mGPdlGE9 zHse|wH4rRHp23+7b!2crlOng2xOYPXste@Z$OJvaqDMEHG0lf5kM}l+y+2a0pCKY! zSp7WDQ`uX05GS9I)yDc@mx0cR5A#2MK z1JipGpGGO!7$yS>J~Y?)kiH9vVtnrB&;CF$B?uLaU& zx5Pzy1pY0lxNkywai|xY2KfMmf`A?+#x?8cb+Ux$+4nt(vMbf=_c}eo(Tuqff6;jq zodt4;_mEgq*m_#$1!>eQ#{Ntih|OUFvaWreBT}Qhzt8pJsOmy#AL)=O2p)_V^VT#7n@UzZ^e9upQ3442d@MCg-v_@$z2#K7fTXo$ z`4Z&mL?H$_Whqa(KS}_%p0KZ3nFSoROFXkNj-l~zrOJ5694Gfpca#q0!=SgL_;k(sVj0>U-+ zaSe)7L@%v{_R(0v3Eo>{7k3*BXtYlolbb{q`QJU8FT6;Us^p}Fo!A^9Fap3!jffA^ zMh&6@62OzVMoBa-`%?AkqV5?-*=bz?*e@aD|=-2w9NftvKOtnsl|RrIu`3Ham$`sc`S$~L3!H82gE!u6c$?! zUHA<6I%El8hZ|7D7Q9IcPFSsod%X&)pUT6>7OeY1j~Mt6qW`g+A$w{F;G%QMYTMy) z-?<&rkA81je(mqpw)b9`9&NnkeSDmik8HX@QyzhOp(m6nkb8%IZ2oh%?TJtTkjnCw z#v1eT4xCT}nh4%i-u*muTCyxu6(DVj>)F;C)UE;AVvQkrl&$Okt7COmL%IUKESfCe zq47eH-olsLbfnfj0b`%MYwilZMbl`=iF9dA$F!aj`-4Cfx?#Anv5n z_MK&ck~#z5{GDMNQ= zEAOATYd%Qp>M11bX=X4p7QKd{TZA`eFl^X&U|8S~H-}uHjnm4LZi!>%6~z(qiQnhX zYnnqEy=XFtVdQ;U*3*Q6mo?4p2bs#9p`(?Ybo6Ma-}J6D9p3Rd<{qQFm1@%U4(=_d{+RKg5!M%CAv>%=t@LgR>*th$px7CqM^0#lS4mxrlUGdnG zmB0B&q1*6A;{>d`rYLL{0?v)XJnOOt!s(TA5|>5=Qd4{4@ZaQqMojvb!(<>VO0aNM zYDCgiCZ|U6wIe#qSlH9Ai(xh`+a}0 z)WW47d!te8m$h;Pm$psU$T@ZHKO=0XYT1IIdCdPnvwvtk$Ju5K9Injszc#SN2dFCp5EU)c1%GmDj>M_qkLOyANnizh*Pw zk+h7sT-<6=^^9&~v@sm8Y8Z)*-~mA)Q1x@Qi=I*DQwa_P$TJ^Gkkoz6%FHm6R-u@p z>8hDl?Y->Zczh;w*}(3KUEPYaGNto@{qf4J^0Oc%8{1^Khu3l?@=S$l$?`Pc@ibos zi2ZGv0K)o46hNrA4}T zdJ3t{%=5}b6$>l!;S=nD54Qg?Hq3(&;VVTA$Hbe}Q2GXL1mm~8x3;BuqsL$&z8tepR2&>Y@YRkn_5pIbKBK@g*}I$9hdp_?J6w)Awr@9iWU=mJ1|Y z*yj$@G7HtiR%>mfXdPPqisjM(BwD4W}p-;$(v$&bwO;hHv9$=tKrE*qPnzddr zIFG!3)e|Fx7_ZA{vG(_ednda4oG0;3FlQy(m?D~czbBq-A;bKevKxD|On8UZK3Yv( zU~^_=q_b$qIj2V2GS6L01{Z@%0vNlbU8vFb(e43MV$+Mw-7?3Y2$IX70g=(L@-K^` zJTdunqXTJh!34&Zk`KF&AfMzP%6|u^wguo>n6!5_Pl7_TNZf^{{<#tX{5EvS;%%S6 zirqCX%eHmo7So3hb=3?u@>Y5-l}k9D_4;~oSx;u0@|c+g6k`wVv)EhuT8^X)GG0HI zPQSh`X;-jhPw3k|hDYta2Zid*bA^#-FVJsp3Dq#A?Y~xSXVD^*nxU>t<1eGv_5?Xw zm`?T2Py6w0bgGIu<_I-aag{VI!BH1vC5)I}Oq=wXQGbVAhlSn;L_B zzEL2-;$2lDo~V1&qU|$al@YAuLY-h*v_|%Bwnt`&rOq$|uHU<16vJp?BHCZJ&r&aO zK6^hOy?Ni9=CNWD#c&mAoEUdB_4pw$0fEk73gO$r&edcW9po0}TJc<`gqL(jZIwU?e z;Ux1ROD~~Kyfj=B7ryKhw{Jyzw<%38Bg*0K53bwfuyh~h{;9{Zj8Z341L+tWgbAj9wu+m~8WiG6*<` zj7R*p9@E(MdGb=JX*t@O=)jUq2TuV@0(Lyef(4m1mk>IAt4OBpd>K=Te?!b#Q0FHB zEf)0+)%#g1T~_6zuTj)_EkRc498&|2YWE~x)L`sL$s3l>hXotr5hwKck6z*0{N;ph?E+FM`Zm{`R<&9eCMj2TeB+v zSo<*7s1*)-r;%dTrLPALd0a?z6d>EIe3xQ*e~~)z%n22xocG<dD8o!jq|e(nXjtlwJ27ViK7#-1h;j1&63R5_S!In2n1dsh55!~9X_Ev??Q;ZfM@(=p60 zqE-G`6XUTzzU^JX3dImCTFvefIR6N=q(i@jT(V!z9^*X6 z%_;kYD6L1UJR$o;|43+tKY$zRU67N(T-Le{PF%}4kbbZmZP^0)s*Up3X>JZ5UV2jl^h0B~e7nq2an#BO9i_!CVozuePV|k^*M6P=2)TlfF3G zu-gc??UQ++`A%H3ymd<6Mk^1ywQ$u9e;zIa^z<`iyb%+M5$N_$mWr3{Q$XajqrRkb z9N)X)@{~gQd+n7WxILB5F|HNsr&5`QGv5jl^Z7A=)mmFa@-5#Fuv2##Yvk9O6))5;hW|!5oI`lnP!V0hzGF5Or z>(wK!bu)|o%-q8_7u*nJ%az)bOcBX?b{7p}t6kfRvhtlQq_iC6cWNAH|R_sc9#pt#?4F2?)bryeFSdtlp6dmFgw zG>1YRT+_Gp87S{-tOFc{u-AO^#e+?&5%Iu8Osep%lr~9t<{y##%ll<}Q9{FZag6=8 z(W<`6?#yS!^rxxX7(0#swQ&7vCLLd;zuRWr6zwAKtw7v__sA3o9e8ePZ&uBo9R#>OUifpG{|lZf5deaYefJ^C|h= zMm3<-gJ_eR4t1EPwWFJ{-{Y94-B_=h7L)A|3C)w59;$@AbQxJ~XEG#XeZP|n({Pb>0E{`zQhXQ0`2%Q4TUlhPFIIRM|9&QFaG zp3x)w)CE>>CdUd($sW^7uCzrDGWZWk>U+J!c%=&mPbkMHtU&?kS`+7ObBp@dksVj~ z3*+)$(S1iM1Fv4T}puKej{je|Id86lR`km9J(gk^bu@E4E@p zYQh`o`uK%;y`6a}9LR2f`BOF9(z*qU%QJ6FI$0g>yQg3^bMzk14at+nfQ!MUR&6oX zi7>J+vd`L$CH$3l8|r;uooR8M_`tMLH$Ai%E)XZ8$t0ewdXf+Gs&JxFi_x`0Ml71_ z&}^S_u<1n*Q`|T5p2mdp1_CEuYOfGD<+MnPCklu=+&^vS>{mvivq-BzFzTgl_k!X<51v_SCSi{oZ)2Pl|y7r zLU(IT#dU^P(25SRD(snZ&?z5|^RrV5*OS&D3yS``&BX2L8nLs_Rt_-9V4A-kW~)g> zKMF!{tL4?Qm@3+~cIIAB?LqvQtwCB5u z#2-l*O?+Dd-p}4&f5&RHVI=2DE^F+^qYbcmID}92kX#YO{~vlcb1v zNO^`yVc}4ZGdjrjB!H#>NmDmJ`H_Ck(tiNA&y9&Z;&K_{9%eg)ISL!D&u3(xP=2-S zWc;$FFp45b#bM(43FO$znjvv$vkoFmnsUjRK^h1Nw)tBUWYcdcEYA0kRj-JTLodoK zBi27QkkD#ON~fVf5*3=%%MAMNHT3;jpNeW=#7%OyhvXo1L5g6gUT9kM)bQb#7dc}? zf{eck$?h2OM5@0Py~A$_NBw9S@k7&nYj~G`WkZ2d__0Horj-YTa$1w3%%9nFt2m^B zzrGH~=0Q0UoZ--H~(8HVz+=la2lYVCL=2Qv2Y#WT(;dFjkMU& zhp2W^SK^z5)>ne2I?yKfeH!L*UYM@a6T%%Luo+6tTRE{yo%prnIv~N#8XO9(^86@( zdUmYFC%~yU8FKReXe)0$WBYeA^L#7H8{g57NZA%^c!hqRP4zFd0@GK`Jpe*Ls_T8jleW6B54v?fqR{_(|yl=q3GCj1Ag;o@Zl^GX(!^khO|%H>o{W4uxrCiDlG zV<}X6`4f2)#p^O{VK<^uWJLkY5lV8;pH0Y3U=D5*na7;QSf!{;s7>Gx#Kw%rNXJB^ z;7mT7@S5Nsz>I+@mz1juB8wvPw54%maYWmKnd6mYaD;H=aKxzc5sT23s*4fx5Q`D> zwMB6x+Txl0Kslh88x1KvDL}aJv20raD8hm3fO!l^nWE&OM4zWE(-sN}1Z9DuKuMq= z2cjaDBD5lsgU?b>MPG{eiUJJiF1hp${!-`84lq$mF^K{Sn}wOVZ`n6IV|a;siAITANDO3!K(Mp3w}V?Ja2V|$5RiF}D0i8_f{iNlmJN-he7dAu?!aw}r)p*PB7s$m=SsvgiTb@e2~C%$+PP%dZd;>dV=gD*sGV*E!cQV6{g>8>EbS92)tYUxEF+BnlX)`-HmW#J#55{4*}XGCFqq;(;r53vJ;@&Ct0%AZmD zfcQ7zcwdPd6v+>wQ32BD5K>6&|7YX>>Jo%3xk@C-LuwvEdLCOy5Z@>q?;-(0HpvNR z1x_G1ukyhFO|uS74~P9G5)sa&u~?zk`VZ|UdAuOz*8jEIQP2b>&V z3;J>q69axIAj0_j3;Gi)e1q}(9E)-zNPmR#;*US0=J~?tEoggwJbw4t=X}(_!$Mx5 z70_s+SXT){nRJ(pBROoP$U*d+hl%7%#XUud=4Eh#A{_- zK_7skSj6v*9#z->!ld31U}i_MnC^!sXq1&W%?gr)mO-!82SuVnDS!Em@?pLF3!;C= z@r3Xe)+E6ALhuIjj}SZ>AU4LX4#Fr_zQ8`{eK->iKU*vGPMeueJ#gD0o=$leYrb9mKg8=o8i9pl%qZD0q( z1NeI+boGf7N$&VbM(p&7`H=KmAlf!3Cros}ch3C1=SMbzA-a%Wp-O^JuYLTrSZ7cj zee|_xDd)X(YklmM*3eqLrnPXe?1qg{m9VF^&6q8fP!)B}@ReU_dL3#Jc`k>K`0W_f z;gkIaSNSqE3O7hngY^Af)R=Gkc+XX3vRrN%jM6JM2-3K6F^7SB>$Hr@9W<#pocsj; zef-S(S!fgVUQ_AUyTlli@6?Aab3sMI?)9oO!hppBslDo@@Bz@&wT`6NP{Dx)`jnKz z!YF+dc!*>F$gI}(ueQGtVRrVA2k@xYmA=CFeNxEP`KMxZ5MRcY=)?gowa+zs@0P0B zWdy87p}d+rQv;hLtV{FK)JR~{+|)?VmS;@MP;Pxps227Gi9$W7$t=H$i3zP&AQD zzDptt+$vLI7_80qXIUY9WKR2De@UKDX!h@cS*mA|L;F#=aIH|RLsMeQI6;yKj9)&J z>vehmK`rw=CyDYs!x-9Hhx{uNS_1Gs@=U)E-P0^FXfL^c0IPG{&czA!_S(npzbrlS zLI{>xIvJSMh8cY*&WxY*#h0ZSA_I-YuIE_f)DQv}>+j#(5v(tpl!!9~tZ*ypPi>L%7qc zL)g>HVtDdv<&h;%X9-?gXxcH3&nFC5r|#9mty6+Lll27TvZgPSthH z+|%l)IwrI+o3^wO{ARTEtQ?q{okO2*aBo$z(y_{w9aXB*(aKd8HUIr#S~yw&7lJJq z7G8F7#ivzS7Aj|C*o0-3=Y;3xHEs=+i`?UCD$;S`%S&@<)X^HXQIsep_yXqXB}|oP zP-Rdw4K02Ps)T$VLmxqzhyLqdO25;a2XQ z&LtFefWkSXRU{Tt{=2BHun6U7?zHJ#bLQ?q;+dABVS6GjT zM0kv{U$*|Z->DVcH?@<-Z{NGP%JnG4@9!T}y?=G7Fx2SX?}u;{aVmk7X`@GAM`U;8 z4Q~`wd19s=2OTHTOm6=0Veuw&de+BT*_g=ZpLLR^C$e&wo5T-hyD`n4Nn0(f+RC@4 z+Hvhz{Q9k|_p74WN4b-PpKo(FnpevULhKuu#;5;^jP#Ek^ z$Top{X(P8yk)sSZYgNGumCRM{stwcWY3Gj`YmK*%X~*nvUW!ewg5pfQu?kCO+-|qu zzxqZPNtp4T%d2hH)ax&uL&VD88sMe2{R*V#j;^^#Y zqB_`0gMI}Pqnn^n|9a3Zi>;?I9=9m@L0ltO;`ny3b?P(i&Nt09?Vj!E1M%7fYrM1B zl9^O{O@TI$yXBvBBF$SG^pJe6; z9R9RD{x}o`d2<9;QAZzXVJ zCCX#oM9swj=wkSfzV$p&$T(k4*0kzhv=WuIs3p^?<;tj|%BW>pSP8YT8iA>t_V{h0 zvuI$wNUeL^1TXsMR~{?>_}1GX{Kr0u50I;;F0zPrM-8(fG>BH8|2B0T-)9Htvn%eS z&%Sj_uyuo^cZ;ES1KseHIsKHFHlfd*bHxO>CIVdXUou6Nb&jKN?pSXcGAE>tWXNnI z>4N`p5E#0LWV-v%*7@~sn*d1SFWblU{N|^{J{{wjQ7bf>jb)D+^$GbIq=q+^A2!2|R`v#Rq zBIa^_@!t2Rh}ZDo2PP^SAy3OZgjL z^*|;{m(fIUxD_{72MPe-qht1}KkuI{67*zw3@o|!Q$y*ITn9|Q=bAIwUl)}8o6f$9 z=#MNPX`t@ROmIR?bWXq5rd~a%Z!JvL`zLt2QMjAB$rwjYbA5Rn{+#Yy*Kjz*#Y2q5 z`8u#b$V0)*PVzWww4F&f;~Mm{GWU1rOt{t{p%<1lo<-hg<=?uRiU&jU)M|=Lxe>RY zcZaVv((U_74ZfJ%1)f!6&=3HWQDpVT&S4$6v;00Ekz_j!j!#AkII(F^%F4@42bW%m*}8ukTnod601o}DI^ z?e{2TGSM-kr-{kM<YyFUoRpdi68Mnh?VM9ejQA1zIlfu%{ zGdlliYXS+zC;BJGxEAmnqA=y3`MyNKqbKF7@nYB(HSN}XrOHammJ0n*MM^E5gdtU5 zuRE$xpQv3V$W?((#gWK-z;lqtHLyO-+ly}+%_z?_%{YCMIWx#Hm)gdAYi8T_11Xw*@$RQadwUt6wf5-Q#`G7_I7=XkX92i`5mP~ zfD!OV!62_TQCSA{;oHGq%ccu4IA@D zw!aAq8VY*!B9t|eN(&dwh=nHWVY05DV{*B#HVL&Xb4JaSpN<`-z1c6p!AcAG9bSTIZ*h7t(~JQzqMmKXMN8%c7G^ zDrOpDmmFo7k7>uHB|N{_amb-QB)bH5VU;XT^Uv@P=xXrPJ&5W^@C|Yxub`f$f+d_3 zo%pxGk2on>eowmn_D(Xc=FVI#+@ITd+NCz=bb_i8OX+I5J|M7<=8RV|?^f9Q(w_*+ z-8Vpse;5CONpoxKR@_=F8AC%>`LeZTR&Hk=z)}s>8h5#>Gze+==9Di8&+W!sR%wzr zm%H3UNY=mVP6(WizIJ%>Wx-snxd!c^@#Qe&a2Tu&vY{O9TSQ+>|#|$J2U~9I`d$W#(Sc)(>MQ zjmTs_K+Dy$8*&EWFqy{-Pn`1yukVZ30LrP$B>SZ5WODGk2i=ZZ|2rmu8@=~>0MHHf zmxy;VUN1{(AWOtyo#L(yQ^b-xaSw~SEB&4?N%4K<()B9-2EI<)g&IdT-o{Y7p-lmv z3BgBgD@NRt1k79k2HbGW3+OeGt-hpzP7bp=w^*CQzrqoACHcVrT+tNk3W>cz#=dt_lxf4bj z?FP5F$K^9*Vf7cD*aslcFNgn^!OcHqIf__6)G9 z`UC29@^Vl&r-oVqtdiHB8~(eFS`ka7ti5n--o#l{M`dZ=*;#nw_rXbWd)0+Hu(Dy1 ztD=|N7Q^AsLt_nzQ(-h{w%tE^wvJnl0~F=lDK`_=9%fUXz!_h_nU0ilB}#uFtv!_T z46k=!>9yg${hNnvO1NaP%<&{ke98zMb~}&MnvBq%Cbvk%tx|IAw4vQHgTowzXBVlP zi*+LEQKy@qa$@4qrkkgB(sIw^k)&I-bkyXLrCW1*2h*hphMoE? z-#9zVm^y$cQ5P>z+=>@3?(XjH?ry~$3KVyDcXzkq?r?E;y}-rozV6E=yD!-vo0m*7 znPf75COMNiGw1v4eV*H{mb&g8K5G3H`|1Sed>~;0L4gB8PP=ybQo!Z6`!Mf5fqay6 z(bsx`!nkwOS291nfNH_{ymJhKNvF+td?(Y`6KI7)%FX1Yc3dhKgfeHmGPr*T;Ci25 z43B>aE+cyCJ#N^ih6Pq}-i!kXenUB-B9D-8VTSGfA_ydN!i*hZ=E5G`^UVH@aSM}; zIdyWp8N|w!r0Y!UFs+YTI+) zH15nek@r}H^4MocGWFhf&}tVXz~Rkzl!zt&a<_*Jb}HW2BwXyl|AFYCrt zj{-1gS*u&V{5eB_4EiA)2n!9lVFUjSxg8Y}is%^?A_3LBCCJLksHL^>2doJRGM)&T z)wkRDFA>HMH3(4@<2I%(Ar=}O;k@r8sQ|k9uP`?cu;*Fgr&w?|3W) z6wN_^co_S9dNWa8E0kFwxOWtPC>LX*ZV1N#Ur$8rzam=DQO59e!;Z$dbfdrUS)~16;nSllm{SrX&V`N$Ez=yTeO7;s0r@4En1)k?IcQ=|*)u@qtD# z+ru*5C+?#(-Ek=Oc(ykr029K0dbWim0l)znE(zH!vp|9}iw;LT^K&w!8QPc@u4GUU zxpV?0IcZip!I~0BVvKpWTztf#O87Ug#t1u_Bs11K>L60;$ifPUVI{g@WlR!4%Gu48@oi++{)LN0)}=t6g{CFx(h0V6 zIsH@4rIg$vhkHJ^GNNQr{tBF(1DbRBj#~G5iWT=Yw{nz+691(<*f}9Qv0&@3NF~N> z*%EV7c;ZF+D@Yw94|0NwJKva~rhl-mUhN&X^KThggyY(TX6#w~!L^pin74?=z34fc ze%ijn_C)Lv-!}PIK2^}b7CW*CohijQNB&CRBh^w7sYDCe#?j(?Yy3;y>(%UH$q}A3^-rVii)?7~d|8upYy`-yw5wS#J>K zh2K9j!cK*?u|~gF<*;cwa<7B;zpW{yz(! zPL|zbziVjMelZt4f>^>&EX^S#CtbC0nesnAN-$4*5Ne`Ge944IO^q1Ddquv{7cXdn z$5ii2@aZS{*ys5~ME$0okpB>*T9AKGg&BVo%cW&BHeHf-O*rhmU9(6&CU!K|5&R4b z)wQXXO2#;fa<0rKF-)wRSP{?6rahU2aZb=9O&iDBThO6c8FOP%bV$xR#O{#4M#Xhb z^VPggcsnwFNqA?Y>zq9@JQ6&_*`s_@_#{`1Oub9yqeV22pu?~~WY=b(HA|^Zc(|)T zm!Z{=c%e}l4tK^X+gC5NDa@=SPpMW>@3bjkQKwCzSg&fW%sDUTsi>{YI$4ZbQG zsgky7%q%Sh!NU<8ts0Mub0KAiDg-4R7W14bAW|)kJFkc6uMVFbA98gl1X$LyZsJ}= zdr)#G_%b zllPM*prvob@S+a1^5*pk8&H(y=+8kl&3K&rvizS~G|Y5R>6{*uc9*g;L zV~0s?rtNWOhp~e*P zSk1lKKyxo9G#|;hb#P?ur)gqgJzrdlg6MJr>#w)|P=A#Z3&%^1}Q zT0hRHw7%^EO;5cuCxNc4;&%$2I+DyC>LtU7x*D(5>xF$ z6Eaq_RnuL%uHr5ZySlM%1|ARYUhZZaS^Ns*)SB{OSd{S=3bQ7|y1Qsj-vBv!!sFb9 z@#VU^u%#96skEBg(2V&0QtLw*KKCpRkhD>mx!aHPf z{Cm=hUh7TWzct6JF4u@!cRLK)ExYqiywtnXx+@LX>pC?Dqi#rhe%6(y;ZBtWs}W@5 zXXDU)ooO4>(7^%woV;m_4iIq+)ii_|s*45%-A^)KtLceyf96E)(AMq~VIEzBkqf8q;bsCk_@u&KnAK17`O7OY z)Pnt`s|t=&RRpx}Ij*OQ447ixWVsg@3oYin(2JmFA49e`WS6-I`Vg-;b#n)Go5o8z zmvX&Dm>CYu0tg<;s%$7*3e8T(=J}?9CyaN9A4ugn{C9uAK?IROB7|}jpQ3*AV0?<* z81wSFDm^VPs-8gg(!Fu^x!kJ5FT?(=U{=2HKuCHLacZ@JVN#+dOJ#1!U%8jz+JLu> z4>HelbG$G7T?p&d6du^joqc)xX-aO@%n(hr#e_x^3`1su`o~Nkt2?`brBXH``t^CF zG)E@5-pu^>Jfx*)C0aHyh7$7-JPKt65GWDKJaSZfZ?C#wKJ^kYnXtC3n`3+b$ZL#` zGQLut7s8(ePTDGH_B;skcp(bya8JSkyfW1(KvjzB^ske}1VcVB7JWemJ~*$ZEFA{+ z>a*241-AZN3dJOTa<-?a$qvxTXWw%nhTT+MF>z1r9L7p)qImGX|IzOgC9@*2FDcUt z3FxnQw`Qy(&?IGqfulr5(iAC&q;-eCZPCiDNRaqTW!&~5AKvuw7Q0AW~ z7^aedvbgubq7#*KRls6ZDC?TyP;U`7Xza!ny6A;&hw$~C+VPlP?~l3y2&oql>-JBc zFg>c8$aJIvv4&zd<46&&E>f!6++pvtG$7thd6eE<_l1@l!Qf~T#fbOF4Xb1#Un9wA z@`2}`NcX|`V-*2$>Yp=Mf!`2JdOe(i8gd+(8s`2d^8G>$$?|*1Pcc-J;7kAC<-(PV}jvgb>YGPUPT%-6!;QwSeP zvj{!c^pHX+Ut0fEhYD6ox0Ov3 zN(W0i>a`PY0jR)Kb6v7(Zh*rDFi;cf>R%eEA`n8UvJ3Kr7ODFAcyIE_@-#-Lc5voBBjrddGA9TI`2QVgkgkK^g!Oltte!>kZG>zU-Tgf$pxJx7|RH8kn z_Fz_>Gs{J(zIgP%!M=hhtPZ8R&FLJV%Q6oY@|I zQdBa)ZkK#I>G_3;3C(wJ|8(3)n#eF&n%x$6Okw8I^T5V>9 ze<2LmqXz9NY#c9tkBBbU#HkO-g9 z3p9ssq4;#6pVJWg*yGdN^~T%f-g;$aAK?(-wgEUE!@j*@3OLfu%8DKdm4CqJtTt?G zWl-y~aGS0?uQd7#1bMs0w2+IjOq;vtcxMfNe$k6MN$ROz-(THLZ>X$FS68do8>_U6De1w4p>Em3)~0ZU%ET)NMw5(s?dL0c zqwu{l>;i_gS?S^5{FGDH0pqR~ahu!f^kljFiS=?7V<#+$*8`UPft!P7Jol6nT_T

8TvEnan3h&`+7t$EX#ZxH` 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 mfi -marginfi-v2-cli 0.1.0 - -USAGE: - mfi [OPTIONS] - -OPTIONS: - --compute-unit-price - --dry-run Dry run for any transactions involved - -h, --help Print help information - -V, --version Print version information - -y, --skip-confirmation - -SUBCOMMANDS: - account - bank - find-pyth-pull - group - help Print this message or the help of the given subcommand(s) - inspect-padding - inspect-pyth-push-oracle-feed - inspect-size - inspect-swb-pull-feed - lip - make-test-i80f48 - patch-idl - profile - show-oracle-ages -``` diff --git a/clients/rust/marginfi-cli/src/bin/main.rs b/clients/rust/marginfi-cli/src/bin/main.rs deleted file mode 100644 index d51c6abb3..000000000 --- a/clients/rust/marginfi-cli/src/bin/main.rs +++ /dev/null @@ -1,7 +0,0 @@ -use anyhow::Result; -use clap::Parser; -use marginfi_v2_cli::Opts; - -fn main() -> Result<()> { - marginfi_v2_cli::entry(Opts::parse()) -} diff --git a/clients/rust/marginfi-cli/src/config.rs b/clients/rust/marginfi-cli/src/config.rs deleted file mode 100644 index 20066f54c..000000000 --- a/clients/rust/marginfi-cli/src/config.rs +++ /dev/null @@ -1,147 +0,0 @@ -use { - anchor_client::{Client, Cluster, Program}, - clap::Parser, - serde::{Deserialize, Serialize}, - solana_sdk::{ - commitment_config::CommitmentConfig, - pubkey::Pubkey, - signature::{Keypair, Signer}, - }, - std::ops::Deref, - std::str::FromStr, -}; - -#[derive(Default, Debug, Parser)] -pub struct GlobalOptions { - // /// Cluster override. - // #[clap(global = true, long = "cluster")] - // pub cluster: Option, - // /// Wallet override. - // #[clap(global = true, long = "wallet")] - // pub wallet: Option, - // /// Program ID override. - // #[clap(global = true, long = "pid")] - // pub pid: Option, - // /// Commitment. - // #[clap(global = true, long = "commitment")] - // pub commitment: Option, - /// Dry run for any transactions involved. - #[clap(global = true, long = "dry-run", action, default_value_t = false)] - pub dry_run: bool, - - #[clap( - global = true, - long = "skip-confirmation", - short = 'y', - action, - default_value_t = false - )] - pub skip_confirmation: bool, - - #[clap(global = true, long)] - pub compute_unit_price: Option, -} - -#[derive(Copy, Clone, Debug)] -pub enum TxMode { - DryRun, - Multisig, - Normal, -} - -pub enum CliSigner { - Keypair(Keypair), -} - -pub fn clone_keypair(keypair: &Keypair) -> Keypair { - Keypair::from_bytes(&keypair.to_bytes()).unwrap() -} - -impl Clone for CliSigner { - fn clone(&self) -> Self { - match self { - CliSigner::Keypair(keypair) => CliSigner::Keypair(clone_keypair(keypair)), - } - } -} - -impl Deref for CliSigner { - type Target = Keypair; - - fn deref(&self) -> &Self::Target { - match self { - CliSigner::Keypair(keypair) => keypair, - } - } -} - -#[allow(dead_code)] -pub struct Config { - #[allow(dead_code)] - pub cluster: Cluster, - pub fee_payer: Keypair, - pub multisig: Option, - pub program_id: Pubkey, - #[allow(dead_code)] - pub commitment: CommitmentConfig, - pub dry_run: bool, - #[allow(dead_code)] - pub client: Client, - pub mfi_program: Program, - #[allow(dead_code)] - pub lip_program: Program, -} - -impl Config { - /// Use this only for transations that have a separate fee payer and authority. - pub fn explicit_fee_payer(&self) -> Pubkey { - self.fee_payer.pubkey() - } - - /// Either the fee payer or the multisig authority. - pub fn authority(&self) -> Pubkey { - if let Some(multisig) = &self.multisig { - *multisig - } else { - self.fee_payer.pubkey() - } - } - - pub fn get_tx_mode(&self) -> TxMode { - if self.dry_run { - TxMode::DryRun - } else if self.multisig.is_some() { - TxMode::Multisig - } else { - TxMode::Normal - } - } - - pub fn get_signers(&self, explicit_fee_payer: bool) -> Vec<&Keypair> { - if explicit_fee_payer || self.multisig.is_none() { - vec![&self.fee_payer] - } else { - vec![] - } - } - - /// Get the authority keypair for signing transactions. - /// This errors if the authority is a multisig. - pub fn get_non_ms_authority_keypair(&self) -> anyhow::Result<&Keypair> { - if self.multisig.is_none() { - Ok(&self.fee_payer) - } else { - Err(anyhow::anyhow!("Cannot get authority keypair for multisig")) - } - } -} - -#[derive(Debug, Clone, Serialize, Deserialize)] -pub struct AccountEntry { - // Base58 pubkey string. - pub address: String, - // Name of JSON file containing the account data. - pub filename: String, -} - -crate::home_path!(WalletPath, ".config/solana/id.json"); diff --git a/clients/rust/marginfi-cli/src/entrypoint.rs b/clients/rust/marginfi-cli/src/entrypoint.rs deleted file mode 100644 index 27091cceb..000000000 --- a/clients/rust/marginfi-cli/src/entrypoint.rs +++ /dev/null @@ -1,1076 +0,0 @@ -use crate::processor::oracle::find_pyth_push_oracles_for_feed_id; -use crate::{ - config::GlobalOptions, - processor::{self, process_set_user_flag}, - profile::{load_profile, Profile}, -}; -use anchor_client::Cluster; -use anyhow::Result; -use clap::{clap_derive::ArgEnum, Parser}; -use fixed::types::I80F48; -use marginfi::state::marginfi_account::ACCOUNT_TRANSFER_AUTHORITY_ALLOWED; -use marginfi::{ - prelude::*, - state::{ - marginfi_account::{Balance, LendingAccount, MarginfiAccount, ACCOUNT_FLAG_DEPRECATED}, - marginfi_group::{ - Bank, BankConfig, BankConfigOpt, BankOperationalState, InterestRateConfig, - InterestRateConfigOpt, RiskTier, WrappedI80F48, - }, - }, -}; -use pyth_solana_receiver_sdk::price_update::get_feed_id_from_hex; -use rand::Rng; -use solana_sdk::{commitment_config::CommitmentLevel, pubkey::Pubkey}; -use type_layout::TypeLayout; - -pub const VERSION: &str = env!("CARGO_PKG_VERSION"); - -#[derive(Debug, Parser)] -#[clap(version = VERSION)] -pub struct Opts { - #[clap(flatten)] - pub cfg_override: GlobalOptions, - #[clap(subcommand)] - pub command: Command, -} - -#[derive(Debug, Parser)] -pub enum Command { - Group { - #[clap(subcommand)] - subcmd: GroupCommand, - }, - Bank { - #[clap(subcommand)] - subcmd: BankCommand, - }, - Profile { - #[clap(subcommand)] - subcmd: ProfileCommand, - }, - - InspectPadding {}, - - PatchIdl { - idl_path: String, - }, - - InspectSize {}, - - MakeTestI80F48, - Account { - #[clap(subcommand)] - subcmd: AccountCommand, - }, - #[cfg(feature = "lip")] - Lip { - #[clap(subcommand)] - subcmd: LipCommand, - }, - // - // InspectSwitchboardFeed { switchboard_feed: Pubkey }, - ShowOracleAges { - #[clap(long, action)] - only_stale: bool, - }, - InspectPythPushOracleFeed { - pyth_feed: Pubkey, - }, - FindPythPull { - feed_id: String, - }, - InspectSwbPullFeed { - address: Pubkey, - }, -} - -#[allow(clippy::large_enum_variant)] -#[derive(Debug, Parser)] -pub enum GroupCommand { - Get { - marginfi_group: Option, - }, - GetAll {}, - Create { - admin: Option, - #[clap(short = 'f', long = "override")] - override_existing_profile_group: bool, - #[clap(long)] - is_arena_group: bool, - }, - Update { - #[clap(long)] - new_admin: Pubkey, - #[clap(long)] - is_arena_group: bool, - }, - AddBank { - #[clap(long)] - mint: Pubkey, - /// Generates a PDA for the bank key - #[clap(long, action)] - seed: bool, - #[clap(long)] - asset_weight_init: f64, - #[clap(long)] - asset_weight_maint: f64, - #[clap(long)] - liability_weight_init: f64, - #[clap(long)] - liability_weight_maint: f64, - #[clap(long)] - deposit_limit_ui: u64, - #[clap(long)] - borrow_limit_ui: u64, - #[clap(long)] - optimal_utilization_rate: f64, - #[clap(long)] - plateau_interest_rate: f64, - #[clap(long)] - max_interest_rate: f64, - #[clap(long)] - insurance_fee_fixed_apr: f64, - #[clap(long)] - insurance_ir_fee: f64, - #[clap(long)] - group_fixed_fee_apr: f64, - #[clap(long)] - group_ir_fee: f64, - #[clap(long, arg_enum)] - risk_tier: RiskTierArg, - #[clap( - long, - help = "Max oracle age in seconds, 0 for default (60s)", - default_value = "60" - )] - oracle_max_age: u16, - #[clap(long)] - global_fee_wallet: Pubkey, - }, - HandleBankruptcy { - accounts: Vec, - }, - UpdateLookupTable { - #[clap(short = 't', long)] - existing_token_lookup_tables: Vec, - }, - CheckLookupTable { - #[clap(short = 't', long)] - existing_token_lookup_tables: Vec, - }, - InitFeeState { - #[clap(long)] - admin: Pubkey, - #[clap(long)] - fee_wallet: Pubkey, - #[clap(long)] - bank_init_flat_sol_fee: u32, - #[clap(long)] - program_fee_fixed: f64, - #[clap(long)] - program_fee_rate: f64, - }, - EditFeeState { - #[clap(long)] - new_admin: Pubkey, - #[clap(long)] - fee_wallet: Pubkey, - #[clap(long)] - bank_init_flat_sol_fee: u32, - #[clap(long)] - program_fee_fixed: f64, - #[clap(long)] - program_fee_rate: f64, - }, - ConfigGroupFee { - #[clap( - long, - help = "True to enable collecting program fees for all banks in this group" - )] - enable_program_fee: bool, - }, - PropagateFee { - #[clap(long)] - marginfi_group: Pubkey, - }, -} - -#[derive(Clone, Copy, Debug, Parser, ArgEnum)] -pub enum RiskTierArg { - Collateral, - Isolated, -} - -impl From for RiskTier { - fn from(value: RiskTierArg) -> Self { - match value { - RiskTierArg::Collateral => RiskTier::Collateral, - RiskTierArg::Isolated => RiskTier::Isolated, - } - } -} - -#[derive(Clone, Copy, Debug, Parser, ArgEnum)] -pub enum BankOperationalStateArg { - Paused, - Operational, - ReduceOnly, -} - -impl From for BankOperationalState { - fn from(val: BankOperationalStateArg) -> Self { - match val { - BankOperationalStateArg::Paused => BankOperationalState::Paused, - BankOperationalStateArg::Operational => BankOperationalState::Operational, - BankOperationalStateArg::ReduceOnly => BankOperationalState::ReduceOnly, - } - } -} - -#[allow(clippy::large_enum_variant)] -#[derive(Debug, Parser)] -pub enum BankCommand { - Get { - bank: Option, - }, - GetAll { - marginfi_group: Option, - }, - Update { - bank_pk: Pubkey, - #[clap(long)] - asset_weight_init: Option, - #[clap(long)] - asset_weight_maint: Option, - - #[clap(long)] - liability_weight_init: Option, - #[clap(long)] - liability_weight_maint: Option, - - #[clap(long)] - deposit_limit_ui: Option, - - #[clap(long)] - borrow_limit_ui: Option, - - #[clap(long, arg_enum)] - operational_state: Option, - - #[clap(long, help = "Optimal utilization rate")] - opr_ur: Option, - #[clap(long, help = "Plateau interest rate")] - p_ir: Option, - #[clap(long, help = "Max interest rate")] - m_ir: Option, - #[clap(long, help = "Insurance fee fixed APR")] - if_fa: Option, - #[clap(long, help = "Insurance IR fee")] - if_ir: Option, - #[clap(long, help = "Protocol fixed fee APR")] - pf_fa: Option, - #[clap(long, help = "Protocol IR fee")] - pf_ir: Option, - #[clap(long, help = "Protocol origination fee")] - pf_or: Option, - #[clap(long, arg_enum, help = "Bank risk tier")] - risk_tier: Option, - #[clap(long, help = "0 = default, 1 = SOL, 2 = Staked SOL LST")] - asset_tag: Option, - #[clap(long, help = "Soft USD init limit")] - usd_init_limit: Option, - #[clap(long, help = "Oracle max age in seconds, 0 to use default value (60s)")] - oracle_max_age: Option, - #[clap( - long, - help = "Permissionless bad debt settlement, if true the group admin is not required to settle bad debt" - )] - permissionless_bad_debt_settlement: Option, - #[clap( - long, - help = "If enabled, will prevent this Update ix from ever running against after this invokation" - )] - freeze_settings: Option, - }, - UpdateOracle { - bank_pk: Pubkey, - #[clap( - long, - help = "Bank oracle type (0 = Pyth Legacy, 1 = Switchboardv2, 3 = Pyth Pull, 4 = Switchboard Pull, 5 = Staked Pyth Pull" - )] - oracle_type: u8, - #[clap(long, help = "Bank oracle account (or feed if using Pyth Pull")] - oracle_key: Pubkey, - }, - InspectPriceOracle { - bank_pk: Pubkey, - }, - SetupEmissions { - bank: Pubkey, - #[clap(long)] - deposits: bool, - #[clap(long)] - borrows: bool, - #[clap(long)] - mint: Pubkey, - #[clap(long)] - rate_apr: f64, - #[clap(long)] - total_amount_ui: f64, - }, - UpdateEmissions { - bank: Pubkey, - #[clap(long)] - deposits: bool, - #[clap(long)] - borrows: bool, - #[clap(long)] - disable: bool, - #[clap(long)] - rate: Option, - #[clap(long)] - additional_amount_ui: Option, - }, - SettleAllEmissions { - bank: Pubkey, - }, - CollectFees { - bank: Pubkey, - #[clap(help = "The ATA for fee_state.global_fee_wallet and the bank's mint")] - fee_ata: Pubkey, - }, - WithdrawFees { - bank: Pubkey, - amount: f64, - #[clap(help = "Destination address, defaults to the profile authority")] - destination_address: Option, - }, - WithdrawInsurance { - bank: Pubkey, - amount: f64, - #[clap(help = "Destination address, defaults to the profile authority")] - destination_address: Option, - }, -} - -#[derive(Debug, Parser)] -pub enum ProfileCommand { - Create { - #[clap(long)] - name: String, - #[clap(long)] - cluster: Cluster, - #[clap(long)] - keypair_path: String, - #[clap(long)] - multisig: Option, - #[clap(long)] - rpc_url: String, - #[clap(long)] - program_id: Option, - #[clap(long)] - commitment: Option, - #[clap(long)] - group: Option, - #[clap(long)] - account: Option, - }, - Show, - List, - Set { - name: String, - }, - Update { - name: String, - #[clap(long)] - new_name: Option, - #[clap(long)] - cluster: Option, - #[clap(long)] - keypair_path: Option, - #[clap(long)] - multisig: Option, - #[clap(long)] - rpc_url: Option, - #[clap(long)] - program_id: Option, - #[clap(long)] - commitment: Option, - #[clap(long)] - group: Option, - #[clap(long)] - account: Option, - }, - Delete { - name: String, - }, -} - -#[derive(Debug, Parser)] -pub enum AccountCommand { - List, - Use { - account: Pubkey, - }, - Get { - account: Option, - }, - Deposit { - bank: Pubkey, - ui_amount: f64, - deposit_up_to_limit: Option, - }, - Withdraw { - bank: Pubkey, - ui_amount: f64, - #[clap(short = 'a', long = "all")] - withdraw_all: bool, - }, - Borrow { - bank: Pubkey, - ui_amount: f64, - }, - Liquidate { - #[clap(long)] - liquidatee_marginfi_account: Pubkey, - #[clap(long)] - asset_bank: Pubkey, - #[clap(long)] - liability_bank: Pubkey, - #[clap(long)] - ui_asset_amount: f64, - }, - Create, - Close, - SetFlag { - account_pk: Pubkey, - #[clap(long)] - flashloans_enabled: bool, - #[clap(long)] - account_migration_enabled: bool, - }, -} - -#[derive(Debug, Parser)] -#[cfg(feature = "lip")] -pub enum LipCommand { - ListCampaigns, - ListDeposits, -} - -pub fn entry(opts: Opts) -> Result<()> { - env_logger::init(); - - match opts.command { - Command::Group { subcmd } => group(subcmd, &opts.cfg_override), - Command::Bank { subcmd } => bank(subcmd, &opts.cfg_override), - Command::Profile { subcmd } => profile(subcmd), - - Command::InspectPadding {} => inspect_padding(), - - Command::PatchIdl { idl_path } => patch_marginfi_idl(idl_path), - Command::Account { subcmd } => process_account_subcmd(subcmd, &opts.cfg_override), - #[cfg(feature = "lip")] - Command::Lip { subcmd } => process_lip_subcmd(subcmd, &opts.cfg_override), - - Command::InspectSize {} => inspect_size(), - - Command::ShowOracleAges { only_stale } => { - let profile = load_profile()?; - let config = profile.get_config(Some(&opts.cfg_override))?; - - processor::show_oracle_ages(config, only_stale)?; - - Ok(()) - } - - Command::MakeTestI80F48 => { - process_make_test_i80f48(); - - Ok(()) - } - Command::InspectPythPushOracleFeed { pyth_feed } => { - let profile = load_profile()?; - let config = profile.get_config(Some(&opts.cfg_override))?; - - processor::oracle::inspect_pyth_push_feed(&config, pyth_feed)?; - - Ok(()) - } - Command::FindPythPull { feed_id } => { - let profile = load_profile()?; - let config = profile.get_config(Some(&opts.cfg_override))?; - let feed_id = get_feed_id_from_hex(&feed_id).unwrap(); - - let rpc = config.mfi_program.rpc(); - - find_pyth_push_oracles_for_feed_id(&rpc, feed_id)?; - - Ok(()) - } - Command::InspectSwbPullFeed { address } => { - let profile = load_profile()?; - let config = profile.get_config(Some(&opts.cfg_override))?; - - processor::oracle::inspect_swb_pull_feed(&config, address)?; - - Ok(()) - } - } -} - -fn profile(subcmd: ProfileCommand) -> Result<()> { - match subcmd { - ProfileCommand::Create { - name, - cluster, - keypair_path, - multisig, - rpc_url, - program_id, - commitment, - group, - account, - } => processor::create_profile( - name, - cluster, - keypair_path, - multisig, - rpc_url, - program_id, - commitment, - group, - account, - ), - ProfileCommand::Show => processor::show_profile(), - ProfileCommand::List => processor::list_profiles(), - ProfileCommand::Set { name } => processor::set_profile(name), - ProfileCommand::Update { - cluster, - keypair_path, - multisig, - rpc_url, - program_id, - commitment, - group, - name, - new_name, - account, - } => processor::configure_profile( - name, - new_name, - cluster, - keypair_path, - multisig, - rpc_url, - program_id, - commitment, - group, - account, - ), - ProfileCommand::Delete { name } => processor::delete_profile(name), - } -} - -fn group(subcmd: GroupCommand, global_options: &GlobalOptions) -> Result<()> { - let profile = load_profile()?; - let config = profile.get_config(Some(global_options))?; - - if !global_options.skip_confirmation { - match subcmd { - GroupCommand::Get { marginfi_group: _ } => (), - GroupCommand::GetAll {} => (), - - _ => get_consent(&subcmd, &profile)?, - } - } - - match subcmd { - GroupCommand::Get { marginfi_group } => { - processor::group_get(config, marginfi_group.or(profile.marginfi_group)) - } - GroupCommand::GetAll {} => processor::group_get_all(config), - - GroupCommand::Create { - admin, - override_existing_profile_group, - is_arena_group, - } => processor::group_create( - config, - profile, - admin, - override_existing_profile_group, - is_arena_group, - ), - - GroupCommand::Update { - new_admin, - is_arena_group, - } => processor::group_configure(config, profile, new_admin, is_arena_group), - - GroupCommand::AddBank { - mint: bank_mint, - seed, - asset_weight_init, - asset_weight_maint, - liability_weight_init, - liability_weight_maint, - optimal_utilization_rate, - plateau_interest_rate, - max_interest_rate, - insurance_fee_fixed_apr, - insurance_ir_fee, - group_fixed_fee_apr, - group_ir_fee, - deposit_limit_ui, - borrow_limit_ui, - risk_tier, - oracle_max_age, - global_fee_wallet, - } => processor::group_add_bank( - config, - profile, - bank_mint, - seed, - asset_weight_init, - asset_weight_maint, - liability_weight_init, - liability_weight_maint, - deposit_limit_ui, - borrow_limit_ui, - optimal_utilization_rate, - plateau_interest_rate, - max_interest_rate, - insurance_fee_fixed_apr, - insurance_ir_fee, - group_fixed_fee_apr, - group_ir_fee, - risk_tier, - oracle_max_age, - global_options.compute_unit_price, - global_fee_wallet, - ), - - GroupCommand::HandleBankruptcy { accounts } => { - processor::handle_bankruptcy_for_accounts(&config, &profile, accounts) - } - - GroupCommand::CheckLookupTable { - existing_token_lookup_tables, - } => processor::group::process_check_lookup_tables( - &config, - &profile, - existing_token_lookup_tables, - ), - - GroupCommand::UpdateLookupTable { - existing_token_lookup_tables, - } => processor::group::process_update_lookup_tables( - &config, - &profile, - existing_token_lookup_tables, - ), - GroupCommand::InitFeeState { - admin, - fee_wallet, - bank_init_flat_sol_fee, - program_fee_fixed, - program_fee_rate, - } => processor::initialize_fee_state( - config, - admin, - fee_wallet, - bank_init_flat_sol_fee, - program_fee_fixed, - program_fee_rate, - ), - GroupCommand::EditFeeState { - new_admin, - fee_wallet, - bank_init_flat_sol_fee, - program_fee_fixed, - program_fee_rate, - } => processor::edit_fee_state( - config, - new_admin, - fee_wallet, - bank_init_flat_sol_fee, - program_fee_fixed, - program_fee_rate, - ), - GroupCommand::ConfigGroupFee { enable_program_fee } => { - processor::config_group_fee(config, profile, enable_program_fee) - } - GroupCommand::PropagateFee { marginfi_group } => { - processor::propagate_fee(config, marginfi_group) - } - } -} - -fn bank(subcmd: BankCommand, global_options: &GlobalOptions) -> Result<()> { - let profile = load_profile()?; - let config = profile.get_config(Some(global_options))?; - - if !global_options.skip_confirmation { - match subcmd { - BankCommand::Get { .. } | BankCommand::GetAll { .. } => (), - - BankCommand::InspectPriceOracle { .. } => (), - #[allow(unreachable_patterns)] - _ => get_consent(&subcmd, &profile)?, - } - } - - match subcmd { - BankCommand::Get { bank } => processor::bank_get(config, bank), - BankCommand::GetAll { marginfi_group } => processor::bank_get_all(config, marginfi_group), - BankCommand::Update { - asset_weight_init, - asset_weight_maint, - liability_weight_init, - liability_weight_maint, - deposit_limit_ui, - borrow_limit_ui, - operational_state, - bank_pk, - opr_ur, - p_ir, - m_ir, - if_fa, - if_ir, - pf_fa, - pf_ir, - pf_or, - risk_tier, - asset_tag, - usd_init_limit, - oracle_max_age, - permissionless_bad_debt_settlement, - freeze_settings, - } => { - let bank = config - .mfi_program - .account::(bank_pk) - .unwrap(); - processor::bank_configure( - config, - profile, // - bank_pk, - BankConfigOpt { - asset_weight_init: asset_weight_init.map(|x| I80F48::from_num(x).into()), - asset_weight_maint: asset_weight_maint.map(|x| I80F48::from_num(x).into()), - liability_weight_init: liability_weight_init - .map(|x| I80F48::from_num(x).into()), - liability_weight_maint: liability_weight_maint - .map(|x| I80F48::from_num(x).into()), - deposit_limit: deposit_limit_ui.map(|ui_amount| { - spl_token::ui_amount_to_amount(ui_amount, bank.mint_decimals) - }), - borrow_limit: borrow_limit_ui.map(|ui_amount| { - spl_token::ui_amount_to_amount(ui_amount, bank.mint_decimals) - }), - operational_state: operational_state.map(|x| x.into()), - interest_rate_config: Some(InterestRateConfigOpt { - optimal_utilization_rate: opr_ur.map(|x| I80F48::from_num(x).into()), - plateau_interest_rate: p_ir.map(|x| I80F48::from_num(x).into()), - max_interest_rate: m_ir.map(|x| I80F48::from_num(x).into()), - insurance_fee_fixed_apr: if_fa.map(|x| I80F48::from_num(x).into()), - insurance_ir_fee: if_ir.map(|x| I80F48::from_num(x).into()), - protocol_fixed_fee_apr: pf_fa.map(|x| I80F48::from_num(x).into()), - protocol_ir_fee: pf_ir.map(|x| I80F48::from_num(x).into()), - protocol_origination_fee: pf_or.map(|x| I80F48::from_num(x).into()), - }), - risk_tier: risk_tier.map(|x| x.into()), - asset_tag, - total_asset_value_init_limit: usd_init_limit, - oracle_max_age, - permissionless_bad_debt_settlement, - freeze_settings, - }, - ) - } - BankCommand::UpdateOracle { - bank_pk, - oracle_type, - oracle_key, - } => processor::bank_configure_oracle(config, profile, bank_pk, oracle_type, oracle_key), - BankCommand::InspectPriceOracle { bank_pk } => { - processor::bank_inspect_price_oracle(config, bank_pk) - } - BankCommand::SetupEmissions { - bank, - deposits, - borrows, - mint, - rate_apr: rate, - total_amount_ui: total_ui, - } => processor::bank_setup_emissions( - &config, &profile, bank, deposits, borrows, mint, rate, total_ui, - ), - BankCommand::UpdateEmissions { - bank, - deposits, - borrows, - disable, - rate, - additional_amount_ui, - } => processor::bank_update_emissions( - &config, - &profile, - bank, - deposits, - borrows, - disable, - rate, - additional_amount_ui, - ), - BankCommand::SettleAllEmissions { bank } => { - processor::emissions::claim_all_emissions_for_bank(&config, &profile, bank) - } - BankCommand::CollectFees { bank, fee_ata } => { - processor::admin::process_collect_fees(config, bank, fee_ata) - } - BankCommand::WithdrawFees { - bank, - amount, - destination_address, - } => processor::admin::process_withdraw_fees(config, bank, amount, destination_address), - BankCommand::WithdrawInsurance { - bank, - amount, - destination_address, - } => { - processor::admin::process_withdraw_insurance(config, bank, amount, destination_address) - } - } -} - -fn inspect_padding() -> Result<()> { - println!("MarginfiGroup: {}", MarginfiGroup::type_layout()); - println!("InterestRateConfig: {}", InterestRateConfig::type_layout()); - println!( - "Bank: {}", - marginfi::state::marginfi_group::Bank::type_layout() - ); - println!("BankConfig: {}", BankConfig::type_layout()); - println!("BankConfigOpt: {}", BankConfigOpt::type_layout()); - println!("WrappedI80F48: {}", WrappedI80F48::type_layout()); - - println!("MarginfiAccount: {}", MarginfiAccount::type_layout()); - println!("LendingAccount: {}", LendingAccount::type_layout()); - println!("Balance: {}", Balance::type_layout()); - - Ok(()) -} - -fn inspect_size() -> Result<()> { - use std::mem::size_of; - - println!("MarginfiGroup: {}", size_of::()); - println!("InterestRateConfig: {}", size_of::()); - println!( - "Bank: {}", - size_of::() - ); - println!("BankConfig: {}", size_of::()); - println!("BankConfigOpt: {}", size_of::()); - println!("WrappedI80F48: {}", size_of::()); - - println!("MarginfiAccount: {}", size_of::()); - println!("LendingAccount: {}", size_of::()); - println!("Balance: {}", size_of::()); - - Ok(()) -} - -fn patch_marginfi_idl(target_dir: String) -> Result<()> { - use crate::patch_type_layout; - - let idl_path = format!("{}/idl/marginfi.json", target_dir); - - let file = std::fs::File::open(&idl_path)?; - let reader = std::io::BufReader::new(file); - let mut idl: serde_json::Value = serde_json::from_reader(reader)?; - - let idl_original_path = idl_path.replace(".json", "_original.json"); - let file = std::fs::File::create(idl_original_path)?; - let writer = std::io::BufWriter::new(file); - serde_json::to_writer_pretty(writer, &idl)?; - - // Patch IDL - - if let Some(types) = idl.get_mut("types").and_then(|t| t.as_array_mut()) { - if let Some(pos) = types - .iter() - .position(|t| t["name"] == "OraclePriceFeedAdapter") - { - types.remove(pos); - } - } - - patch_type_layout!(idl, "Bank", Bank, "types"); - patch_type_layout!(idl, "Balance", Balance, "types"); - patch_type_layout!(idl, "BankConfig", BankConfig, "types"); - patch_type_layout!(idl, "BankConfigCompact", BankConfig, "types"); - - let file = std::fs::File::create(&idl_path)?; - let writer = std::io::BufWriter::new(file); - serde_json::to_writer_pretty(writer, &idl)?; - - Ok(()) -} - -fn process_account_subcmd(subcmd: AccountCommand, global_options: &GlobalOptions) -> Result<()> { - let profile = load_profile()?; - let config = profile.get_config(Some(global_options))?; - - if !global_options.skip_confirmation { - match subcmd { - AccountCommand::Get { .. } | AccountCommand::List => (), - _ => get_consent(&subcmd, &profile)?, - } - } - - match subcmd { - AccountCommand::List => processor::marginfi_account_list(profile, &config), - AccountCommand::Use { account } => { - processor::marginfi_account_use(profile, &config, account) - } - AccountCommand::Get { account } => { - processor::marginfi_account_get(profile, &config, account) - } - AccountCommand::Deposit { - bank, - ui_amount, - deposit_up_to_limit, - } => processor::marginfi_account_deposit( - &profile, - &config, - bank, - ui_amount, - deposit_up_to_limit, - ), - AccountCommand::Withdraw { - bank, - ui_amount, - withdraw_all, - } => processor::marginfi_account_withdraw(&profile, &config, bank, ui_amount, withdraw_all), - AccountCommand::Borrow { bank, ui_amount } => { - processor::marginfi_account_borrow(&profile, &config, bank, ui_amount) - } - AccountCommand::Liquidate { - asset_bank: asset_bank_pk, - liability_bank: liability_bank_pk, - liquidatee_marginfi_account: liquidatee_marginfi_account_pk, - ui_asset_amount, - } => processor::marginfi_account_liquidate( - &profile, - &config, - liquidatee_marginfi_account_pk, - asset_bank_pk, - liability_bank_pk, - ui_asset_amount, - ), - AccountCommand::Create => processor::marginfi_account_create(&profile, &config), - AccountCommand::Close => processor::marginfi_account_close(&profile, &config), - AccountCommand::SetFlag { - flashloans_enabled: flashloan, - account_pk, - account_migration_enabled, - } => { - let mut flag = 0; - - if flashloan { - println!("Setting flashloan flag"); - flag |= ACCOUNT_FLAG_DEPRECATED; - } - - if account_migration_enabled { - println!("Setting account migration flag"); - flag |= ACCOUNT_TRANSFER_AUTHORITY_ALLOWED; - } - - if flag == 0 { - println!("No flag provided"); - std::process::exit(1); - } - - process_set_user_flag(config, &profile, account_pk, flag) - } - }?; - - Ok(()) -} - -#[cfg(feature = "lip")] -fn process_lip_subcmd( - subcmd: LipCommand, - cfg_override: &GlobalOptions, -) -> Result<(), anyhow::Error> { - let profile = load_profile()?; - let config = profile.get_config(Some(cfg_override))?; - - match subcmd { - LipCommand::ListCampaigns => processor::process_list_lip_campaigns(&config), - LipCommand::ListDeposits => processor::process_list_deposits(&config), - } - - Ok(()) -} - -fn get_consent(cmd: T, profile: &Profile) -> Result<()> { - let mut input = String::new(); - println!("Command: {cmd:#?}"); - println!("{profile:#?}"); - println!( - "Type the name of the profile [{}] to continue", - profile.name.clone() - ); - std::io::stdin().read_line(&mut input)?; - if input.trim() != profile.name { - println!("Aborting"); - std::process::exit(1); - } - - Ok(()) -} - -pub fn process_make_test_i80f48() { - let mut rng = rand::thread_rng(); - - let i80f48s: Vec = (0..30i128) - .map(|_| { - let i = rng.gen_range(-1_000_000_000_000i128..1_000_000_000_000i128); - I80F48::from_num(i) / I80F48::from_num(1_000_000) - }) - .collect(); - - println!("const testCases = ["); - for i80f48 in i80f48s { - println!( - " {{ number: {:?}, innerValue: {:?} }},", - i80f48, - marginfi::state::marginfi_group::WrappedI80F48::from(i80f48).value - ); - } - - let explicit = vec![ - 0., - 1., - -1., - 0.328934, - 423947246342.487, - 1783921462347640., - 0.00000000000232, - ]; - for f in explicit { - let i80f48 = I80F48::from_num(f); - println!( - " {{ number: {:?}, innerValue: {:?} }},", - i80f48, - marginfi::state::marginfi_group::WrappedI80F48::from(i80f48).value - ); - } - println!("];"); -} diff --git a/clients/rust/marginfi-cli/src/lib.rs b/clients/rust/marginfi-cli/src/lib.rs deleted file mode 100644 index d5e61036d..000000000 --- a/clients/rust/marginfi-cli/src/lib.rs +++ /dev/null @@ -1,8 +0,0 @@ -mod config; -mod entrypoint; -mod macros; -mod processor; -mod profile; -mod utils; - -pub use entrypoint::*; diff --git a/clients/rust/marginfi-cli/src/macros.rs b/clients/rust/marginfi-cli/src/macros.rs deleted file mode 100644 index 1ab2e955a..000000000 --- a/clients/rust/marginfi-cli/src/macros.rs +++ /dev/null @@ -1,83 +0,0 @@ -#[macro_export] -macro_rules! home_path { - ($my_struct:ident, $path:literal) => { - #[derive(Clone, Debug)] - pub struct $my_struct(String); - - impl Default for $my_struct { - fn default() -> Self { - match dirs::home_dir() { - None => { - println!("$HOME doesn't exist. This probably won't do what you want."); - $my_struct(".".to_string()) - } - Some(mut path) => { - path.push($path); - $my_struct(path.as_path().display().to_string()) - } - } - } - } - - impl ToString for $my_struct { - fn to_string(&self) -> String { - self.0.clone() - } - } - - impl FromStr for $my_struct { - type Err = anyhow::Error; - - fn from_str(s: &str) -> Result { - Ok(Self(s.to_string())) - } - } - }; -} - -#[macro_export] -macro_rules! patch_type_layout { - ($idl:expr, $typename:expr, $struct:ty, $category:expr) => { - let target_type = $idl[$category] - .as_array_mut() - .unwrap() - .iter_mut() - .find(|el| el["name"] == $typename) - .unwrap(); - - let target_type_layout = <$struct>::type_layout(); - let idl_fields = target_type["type"]["fields"].as_array_mut().unwrap(); - - let mut padding_field_counter = 0; - for (index, field) in target_type_layout.fields.iter().enumerate() { - match field { - type_layout::Field::Field { name, .. } => { - if name == "risk_tier" { - let padding_field = serde_json::json!( - { - "name": format!("auto_padding_{}", padding_field_counter), - "type": { - "array": ["u8", 7] - } - } - ); - idl_fields.insert(index + 1, padding_field); - padding_field_counter += 1; - } - } - type_layout::Field::Padding { size } => { - let padding_field = serde_json::json!( - { - "name": format!("auto_padding_{}", padding_field_counter), - "type": { - "array": ["u8", size] - } - } - ); - idl_fields.insert(index, padding_field); - padding_field_counter += 1; - } - } - } - }; -} diff --git a/clients/rust/marginfi-cli/src/processor/admin.rs b/clients/rust/marginfi-cli/src/processor/admin.rs deleted file mode 100644 index cf0e7efc0..000000000 --- a/clients/rust/marginfi-cli/src/processor/admin.rs +++ /dev/null @@ -1,173 +0,0 @@ -use crate::{ - config::Config, - utils::{find_fee_state_pda, process_transaction, ui_to_native}, -}; -use anchor_client::anchor_lang::{prelude::*, InstructionData}; -use anchor_spl::associated_token; -use anyhow::Result; -use marginfi::{ - bank_authority_seed, - state::marginfi_group::{Bank, BankVaultType}, -}; -use solana_sdk::{ - instruction::Instruction, message::Message, pubkey::Pubkey, transaction::Transaction, -}; - -pub fn process_collect_fees(config: Config, bank_pk: Pubkey, fee_ata: Pubkey) -> Result<()> { - let bank = config.mfi_program.account::(bank_pk)?; - let rpc_client = config.mfi_program.rpc(); - - let (liquidity_vault_authority, _) = Pubkey::find_program_address( - bank_authority_seed!(BankVaultType::Liquidity, bank_pk), - &marginfi::id(), - ); - - let mut ix = Instruction { - program_id: marginfi::id(), - accounts: marginfi::accounts::LendingPoolCollectBankFees { - group: bank.group, - bank: bank_pk, - fee_vault: bank.fee_vault, - token_program: spl_token::id(), - liquidity_vault_authority, - liquidity_vault: bank.liquidity_vault, - insurance_vault: bank.insurance_vault, - fee_state: find_fee_state_pda(&marginfi::id()).0, - fee_ata, - } - .to_account_metas(Some(true)), - data: marginfi::instruction::LendingPoolCollectBankFees {}.data(), - }; - ix.accounts - .push(AccountMeta::new_readonly(bank.mint, false)); - - let recent_blockhash = rpc_client.get_latest_blockhash().unwrap(); - let signing_keypairs = config.get_signers(false); - - let message = Message::new(&[ix], Some(&config.authority())); - let mut transaction = Transaction::new_unsigned(message); - transaction.partial_sign(&signing_keypairs, recent_blockhash); - - match process_transaction(&transaction, &rpc_client, config.get_tx_mode()) { - Ok(sig) => println!("Tx succeded (sig: {})", sig), - Err(err) => println!("Error:\n{:#?}", err), - }; - - Ok(()) -} - -pub fn process_withdraw_fees( - config: Config, - bank_pk: Pubkey, - amount_ui: f64, - dst_address: Option, -) -> Result<()> { - let bank = config.mfi_program.account::(bank_pk)?; - let amount = ui_to_native(amount_ui, bank.mint_decimals); - let dst_address = dst_address.unwrap_or(config.authority()); - let ata = associated_token::get_associated_token_address(&dst_address, &bank.mint); - - let rpc_client = config.mfi_program.rpc(); - - let (fee_vault_authority, _) = Pubkey::find_program_address( - bank_authority_seed!(BankVaultType::Fee, bank_pk), - &marginfi::id(), - ); - - let create_ata_ix = - spl_associated_token_account::instruction::create_associated_token_account_idempotent( - &config.authority(), - &config.authority(), - &bank.mint, - &spl_token::id(), - ); - - let mut ix = Instruction { - program_id: marginfi::id(), - accounts: marginfi::accounts::LendingPoolWithdrawFees { - group: bank.group, - bank: bank_pk, - admin: config.authority(), - fee_vault: bank.fee_vault, - fee_vault_authority, - dst_token_account: ata, - token_program: spl_token::id(), - } - .to_account_metas(Some(true)), - data: marginfi::instruction::LendingPoolWithdrawFees { amount }.data(), - }; - ix.accounts - .push(AccountMeta::new_readonly(bank.mint, false)); - - let recent_blockhash = rpc_client.get_latest_blockhash().unwrap(); - let signing_keypairs = config.get_signers(false); - - let message = Message::new(&[create_ata_ix, ix], Some(&config.authority())); - let mut transaction = Transaction::new_unsigned(message); - transaction.partial_sign(&signing_keypairs, recent_blockhash); - - match process_transaction(&transaction, &rpc_client, config.get_tx_mode()) { - Ok(sig) => println!("Tx succeded (sig: {})", sig), - Err(err) => println!("Error:\n{:#?}", err), - }; - - Ok(()) -} - -pub fn process_withdraw_insurance( - config: Config, - bank_pk: Pubkey, - amount_ui: f64, - dst_address: Option, -) -> Result<()> { - let bank = config.mfi_program.account::(bank_pk)?; - let amount = ui_to_native(amount_ui, bank.mint_decimals); - let dst_address = dst_address.unwrap_or(config.authority()); - let ata = associated_token::get_associated_token_address(&dst_address, &bank.mint); - - let rpc_client = config.mfi_program.rpc(); - - let (insurance_vault_authority, _) = Pubkey::find_program_address( - bank_authority_seed!(BankVaultType::Insurance, bank_pk), - &marginfi::id(), - ); - - let create_ata_ix = - spl_associated_token_account::instruction::create_associated_token_account_idempotent( - &config.authority(), - &config.authority(), - &bank.mint, - &spl_token::id(), - ); - - let mut ix = Instruction { - program_id: marginfi::id(), - accounts: marginfi::accounts::LendingPoolWithdrawInsurance { - group: bank.group, - bank: bank_pk, - admin: config.authority(), - insurance_vault: bank.insurance_vault, - insurance_vault_authority, - dst_token_account: ata, - token_program: spl_token::id(), - } - .to_account_metas(Some(true)), - data: marginfi::instruction::LendingPoolWithdrawInsurance { amount }.data(), - }; - ix.accounts - .push(AccountMeta::new_readonly(bank.mint, false)); - - let recent_blockhash = rpc_client.get_latest_blockhash().unwrap(); - let signing_keypairs = config.get_signers(false); - - let message = Message::new(&[create_ata_ix, ix], Some(&config.authority())); - let mut transaction = Transaction::new_unsigned(message); - transaction.partial_sign(&signing_keypairs, recent_blockhash); - - match process_transaction(&transaction, &rpc_client, config.get_tx_mode()) { - Ok(sig) => println!("Tx succeded (sig: {})", sig), - Err(err) => println!("Error:\n{:#?}", err), - }; - - Ok(()) -} diff --git a/clients/rust/marginfi-cli/src/processor/emissions.rs b/clients/rust/marginfi-cli/src/processor/emissions.rs deleted file mode 100644 index cef5a5b09..000000000 --- a/clients/rust/marginfi-cli/src/processor/emissions.rs +++ /dev/null @@ -1,81 +0,0 @@ -use { - crate::{config::Config, profile::Profile}, - anchor_client::anchor_lang::{AnchorSerialize, InstructionData, ToAccountMetas}, - anyhow::Result, - marginfi::state::marginfi_account::MarginfiAccount, - solana_client::rpc_filter::{Memcmp, RpcFilterType}, - solana_sdk::{ - instruction::Instruction, message::Message, pubkey::Pubkey, transaction::Transaction, - }, -}; - -const CHUNK_SIZE: usize = 22; - -pub fn claim_all_emissions_for_bank( - config: &Config, - profile: &Profile, - bank_pk: Pubkey, -) -> Result<()> { - let rpc_client = config.mfi_program.rpc(); - - let group = profile.marginfi_group.expect("group not set"); - - let signing_keypairs = config.get_signers(false); - - let marginfi_accounts = - config - .mfi_program - .accounts::(vec![RpcFilterType::Memcmp(Memcmp::new_raw_bytes( - 8, - group.try_to_vec()?, - ))])?; - - let ixs = marginfi_accounts - .into_iter() - .filter_map(|(address, account)| { - if account - .lending_account - .balances - .iter() - .any(|balance| balance.is_active() && balance.bank_pk == bank_pk) - { - Some(address) - } else { - None - } - }) - .map(|address| Instruction { - program_id: marginfi::id(), - accounts: marginfi::accounts::LendingAccountSettleEmissions { - marginfi_account: address, - bank: bank_pk, - } - .to_account_metas(Some(true)), - data: marginfi::instruction::LendingAccountSettleEmissions {}.data(), - }) - .collect::>(); - - println!("Found {} accounts", ixs.len()); - - let ixs_batches = ixs.chunks(CHUNK_SIZE); - let ixs_batches_count = ixs_batches.len(); - - // Send txs and show progress to user [n/total] - println!("Sending {} txs", ixs_batches_count); - - for (i, ixs) in ixs_batches.enumerate() { - let blockhash = rpc_client.get_latest_blockhash()?; - - let message = Message::new(ixs, Some(&config.authority())); - let mut transaction = Transaction::new_unsigned(message); - transaction.partial_sign(&signing_keypairs, blockhash); - - let sig = rpc_client.send_and_confirm_transaction_with_spinner(&transaction)?; - - println!("Sent [{}/{}] {}", i + 1, ixs_batches_count, sig); - } - - println!("Done!"); - - Ok(()) -} diff --git a/clients/rust/marginfi-cli/src/processor/group.rs b/clients/rust/marginfi-cli/src/processor/group.rs deleted file mode 100644 index 1c6fd1e5a..000000000 --- a/clients/rust/marginfi-cli/src/processor/group.rs +++ /dev/null @@ -1,330 +0,0 @@ -use crate::{config::Config, profile::Profile, utils}; -use anyhow::Result; -use log::{debug, info, warn}; -use marginfi::state::marginfi_group::Bank; -use solana_address_lookup_table_program::{ - instruction::{create_lookup_table, extend_lookup_table}, - state::AddressLookupTable, -}; -use solana_client::rpc_filter::{Memcmp, RpcFilterType}; -use solana_sdk::{ - account::Account, pubkey::Pubkey, signer::Signer, system_program, transaction::Transaction, -}; -use std::mem::size_of; - -const CHUNK_SIZE: usize = 22; -const KEY_BATCH_SIZE: usize = 20; - -pub fn process_check_lookup_tables( - config: &Config, - profile: &Profile, - existing_lookup_tables: Vec, -) -> Result<()> { - let rpc = config.mfi_program.rpc(); - let marginfi_group = profile.marginfi_group.expect("group not set"); - - let mut accounts: Vec = vec![]; - - for chunk in existing_lookup_tables.chunks(CHUNK_SIZE) { - let accounts_2: Vec = rpc - .get_multiple_accounts(chunk)? - .into_iter() - .flatten() - .collect(); - - accounts.extend(accounts_2); - } - - let lookup_tables: Vec = accounts - .iter_mut() - .zip(existing_lookup_tables.iter()) - .map(|(account, address)| { - let lookup_table = AddressLookupTable::deserialize(&account.data).unwrap(); - println!( - "Loaded table {} with {} addresses", - address, - lookup_table.addresses.len() - ); - - if lookup_table.meta.authority != Some(config.authority()) { - println!( - "Lookup table {} has wrong authority {:?}", - address, lookup_table.meta.authority, - ); - } - - lookup_table - }) - .collect(); - - let banks = config - .mfi_program - .accounts::(vec![RpcFilterType::Memcmp(Memcmp::new_raw_bytes( - 8 + size_of::() + size_of::(), - marginfi_group.to_bytes().to_vec(), - ))])?; - - let _bank_pks = banks.iter().map(|(pk, _)| *pk).collect::>(); - - let oracle_pks = banks - .iter() - .flat_map(|(_, bank)| bank.config.oracle_keys) - .filter(|pk| pk != &Pubkey::default()) - .collect::>(); - - // Dedup the oracle pks. - let _oracle_pks = oracle_pks - .into_iter() - .fold(vec![], |mut acc, pk| { - if !acc.contains(&pk) { - acc.push(pk); - } - acc - }) - .into_iter() - .collect::>(); - - // Join keys - let mut keys = vec![ - config.mfi_program.id(), - marginfi_group, - spl_token::id(), - system_program::id(), - ]; - - for (bank_pk, bank) in banks.iter() { - keys.push(*bank_pk); - keys.push(bank.liquidity_vault); - let (vault_auth, _) = utils::find_bank_vault_authority_pda( - bank_pk, - marginfi::state::marginfi_group::BankVaultType::Liquidity, - &marginfi::ID, - ); - - keys.push(vault_auth); - - keys.extend_from_slice( - &bank - .config - .oracle_keys - .iter() - .filter(|pk| **pk != Pubkey::default()) - .cloned() - .collect::>(), - ); - } - - keys.dedup(); - - // Find missing keys in lookup tables - let missing_keys = keys - .iter() - .filter(|pk| { - let missing = !lookup_tables - .iter() - .any(|lookup_table| lookup_table.addresses.iter().any(|address| &address == pk)); - - println!("Key {} missing: {}", pk, missing); - - missing - }) - .cloned() - .collect::>(); - - println!("Missing {} keys", missing_keys.len()); - - Ok(()) -} - -pub fn process_update_lookup_tables( - config: &Config, - profile: &Profile, - existing_lookup_tables: Vec, -) -> Result<()> { - let rpc = config.mfi_program.rpc(); - let marginfi_group = profile.marginfi_group.expect("group not set"); - - let mut accounts: Vec = vec![]; - - for chunk in existing_lookup_tables.chunks(CHUNK_SIZE) { - let accounts_2: Vec = rpc - .get_multiple_accounts(chunk)? - .into_iter() - .flatten() - .collect(); - - accounts.extend(accounts_2); - } - - let lookup_tables: Vec = accounts - .iter_mut() - .zip(existing_lookup_tables.iter()) - .map(|(account, address)| { - let lookup_table = AddressLookupTable::deserialize(&account.data).unwrap(); - info!( - "Loaded table {} with {} addresses", - address, - lookup_table.addresses.len() - ); - - if lookup_table.meta.authority != Some(config.authority()) { - warn!( - "Lookup table {} has wrong authority {:?}", - address, lookup_table.meta.authority, - ); - } - - lookup_table - }) - .collect(); - - let banks = config - .mfi_program - .accounts::(vec![RpcFilterType::Memcmp(Memcmp::new_raw_bytes( - 8 + size_of::() + size_of::(), - marginfi_group.to_bytes().to_vec(), - ))])?; - - let _bank_pks = banks.iter().map(|(pk, _)| *pk).collect::>(); - - let oracle_pks = banks - .iter() - .flat_map(|(_, bank)| bank.config.oracle_keys) - .filter(|pk| pk != &Pubkey::default()) - .collect::>(); - - // Dedup the oracle pks. - let _oracle_pks = oracle_pks - .into_iter() - .fold(vec![], |mut acc, pk| { - if !acc.contains(&pk) { - acc.push(pk); - } - acc - }) - .into_iter() - .collect::>(); - - // Join keys - let mut keys = vec![ - config.mfi_program.id(), - marginfi_group, - spl_token::id(), - system_program::id(), - ]; - // keys.extend(bank_pks); - // keys.extend(oracle_pks); - - // Add bank signers - for (bank_pk, bank) in banks.iter() { - keys.push(*bank_pk); - keys.push(bank.liquidity_vault); - let (vault_auth, _) = utils::find_bank_vault_authority_pda( - bank_pk, - marginfi::state::marginfi_group::BankVaultType::Liquidity, - &marginfi::ID, - ); - - keys.push(vault_auth); - - keys.extend_from_slice( - &bank - .config - .oracle_keys - .iter() - .filter(|pk| **pk != Pubkey::default()) - .cloned() - .collect::>(), - ); - } - - keys.dedup(); - - // Find missing keys in lookup tables - let mut missing_keys = keys - .iter() - .filter(|pk| { - let missing = !lookup_tables - .iter() - .any(|lookup_table| lookup_table.addresses.iter().any(|address| &address == pk)); - - debug!("Key {} missing: {}", pk, missing); - - missing - }) - .cloned() - .collect::>(); - - info!("Missing {} keys", missing_keys.len()); - - // Extend exsiting lookup tables if possible - for (table, address) in lookup_tables.iter().zip(existing_lookup_tables.iter()) { - add_to_lut( - config, - &rpc, - &mut missing_keys, - table.addresses.len(), - *address, - )?; - } - - while !missing_keys.is_empty() { - let lut_address = create_new_lut(config, &rpc)?; - add_to_lut(config, &rpc, &mut missing_keys, 0, lut_address)?; - } - - println!("Done"); - - Ok(()) -} - -fn create_new_lut(config: &Config, rpc: &solana_client::rpc_client::RpcClient) -> Result { - let recent_slot = rpc.get_slot()?; - // Create new lookup tables - let (ix, address) = create_lookup_table(config.authority(), config.authority(), recent_slot); - let recent_blockhash = rpc.get_latest_blockhash()?; - let mut tx = Transaction::new_with_payer(&[ix], Some(&config.fee_payer.pubkey())); - - tx.sign(&[&config.fee_payer], recent_blockhash); - - let sig = rpc.send_and_confirm_transaction_with_spinner(&tx)?; - - info!("Created new lookup table {} {}", address, sig); - println!("Created new lookup table {} {}", address, sig); - - Ok(address) -} - -fn add_to_lut( - config: &Config, - rpc: &solana_client::rpc_client::RpcClient, - missing_keys: &mut Vec, - table_current_size: usize, - address: Pubkey, -) -> Result<()> { - let remaining_room = 256 - table_current_size; - let n_keys_to_add_to_table = missing_keys.len().min(remaining_room); - - let keys = missing_keys - .drain(..n_keys_to_add_to_table) - .collect::>(); - - for chunk in keys.chunks(KEY_BATCH_SIZE) { - let ix = extend_lookup_table( - address, - config.authority(), - Some(config.authority()), - chunk.to_vec(), - ); - - let recent_blockhash = rpc.get_latest_blockhash()?; - - let mut tx = Transaction::new_with_payer(&[ix], Some(&config.fee_payer.pubkey())); - tx.sign(&[&config.fee_payer], recent_blockhash); - - let sig = rpc.send_and_confirm_transaction_with_spinner(&tx)?; - info!("Added {} keys to table {} {}", chunk.len(), address, sig); - } - - Ok(()) -} diff --git a/clients/rust/marginfi-cli/src/processor/mod.rs b/clients/rust/marginfi-cli/src/processor/mod.rs deleted file mode 100644 index 5247c3c69..000000000 --- a/clients/rust/marginfi-cli/src/processor/mod.rs +++ /dev/null @@ -1,2666 +0,0 @@ -pub mod admin; -pub mod emissions; -pub mod group; -pub mod oracle; - -use { - crate::{ - config::Config, - profile::{self, get_cli_config_dir, load_profile, CliConfig, Profile}, - utils::{ - bank_to_oracle_key, calc_emissions_rate, find_bank_emssions_auth_pda, - find_bank_emssions_token_account_pda, find_bank_vault_authority_pda, - find_bank_vault_pda, find_fee_state_pda, load_observation_account_metas, - process_transaction, EXP_10_I80F48, - }, - }, - anchor_client::{ - anchor_lang::{InstructionData, ToAccountMetas}, - Cluster, - }, - anchor_spl::token_2022::spl_token_2022, - anyhow::{anyhow, bail, Result}, - fixed::types::I80F48, - log::info, - marginfi::{ - constants::{ - EMISSIONS_FLAG_BORROW_ACTIVE, EMISSIONS_FLAG_LENDING_ACTIVE, - PYTH_PUSH_PYTH_SPONSORED_SHARD_ID, ZERO_AMOUNT_THRESHOLD, - }, - prelude::*, - state::{ - marginfi_account::{BankAccountWrapper, MarginfiAccount}, - marginfi_group::{ - Bank, BankConfigCompact, BankConfigOpt, BankOperationalState, BankVaultType, - InterestRateConfig, WrappedI80F48, - }, - price::{OraclePriceFeedAdapter, OracleSetup, PriceAdapter, PythPushOraclePriceFeed}, - }, - utils::NumTraitsWithTolerance, - }, - pyth_sdk_solana::state::{load_price_account, SolanaPriceAccount}, - solana_client::{ - rpc_client::RpcClient, - rpc_filter::{Memcmp, RpcFilterType}, - }, - solana_sdk::{ - account::ReadableAccount, - account_info::IntoAccountInfo, - clock::Clock, - commitment_config::CommitmentLevel, - compute_budget::ComputeBudgetInstruction, - instruction::{AccountMeta, Instruction}, - message::Message, - program_pack::Pack, - pubkey::Pubkey, - signature::Keypair, - signer::Signer, - system_program, - sysvar::{self}, - transaction::Transaction, - }, - spl_associated_token_account::{ - get_associated_token_address, instruction::create_associated_token_account_idempotent, - }, - std::{ - collections::HashMap, - fs, io, - mem::size_of, - ops::{Neg, Not}, - time::{Duration, SystemTime, UNIX_EPOCH}, - }, - switchboard_solana::AggregatorAccountData, -}; - -// -------------------------------------------------------------------------------------------------------------------- -// marginfi group -// -------------------------------------------------------------------------------------------------------------------- - -pub fn group_get(config: Config, marginfi_group: Option) -> Result<()> { - if let Some(marginfi_group) = marginfi_group { - println!("Address: {marginfi_group}"); - println!("============="); - print_group_banks(config, marginfi_group)?; - } else { - group_get_all(config)?; - } - Ok(()) -} - -pub fn group_get_all(config: Config) -> Result<()> { - let accounts: Vec<(Pubkey, MarginfiGroup)> = config.mfi_program.accounts(vec![])?; - - accounts - .iter() - .for_each(|(address, group)| print_group(address, group)); - - Ok(()) -} - -fn print_group(address: &Pubkey, group: &MarginfiGroup) { - println!( - r#" -Group: {} -Admin: {} -"#, - address, group.admin - ); -} - -pub fn print_group_banks(config: Config, marginfi_group: Pubkey) -> Result<()> { - let banks = config - .mfi_program - .accounts::(vec![RpcFilterType::Memcmp(Memcmp::new_raw_bytes( - 8 + size_of::() + size_of::(), - marginfi_group.to_bytes().to_vec(), - ))])?; - - println!("--------\nBanks:"); - - banks - .iter() - .for_each(|(address, bank)| print_bank(address, bank)); - - Ok(()) -} - -fn print_bank(address: &Pubkey, bank: &Bank) { - println!( - r#" -Group: {}, -Bank: {} -Mint: {}, -Total Deposits: {} -Total Liabilities: {} -Config: - State: {:?} - Risk Tier: {:?} - USD Soft limit: {:?} - Asset: - Weight Init: {:?}, Maint: {:?} - Limit: {} - Liab: - Weight Init: {:?}, Maint: {:?} - Limit: {} - Interest Rate Config: - Curve: opt_ur: {:?} pl_ir: {:?} max_ir: {:?} - Fees - Insurance: ir: {:?} fix: {:?}, Group: ir: {:?} fix: {:?} - Oracle Setup: - Type: {:?} - Keys: {:#?} - Max Age: {:#?}s -Emissions: - Flags: 0b{:b} - Rate: {:?} - Mint: {:?} - Remaining: {:?} -Unclaimed - Fees: {:?} - Insurance: {:?} -Last Update: {:?}h ago ({}) -"#, - bank.group, - address, - bank.mint, - bank.get_asset_amount(bank.total_asset_shares.into()) - .unwrap() - / EXP_10_I80F48[bank.mint_decimals as usize], - bank.get_liability_amount(bank.total_liability_shares.into()) - .unwrap() - / EXP_10_I80F48[bank.mint_decimals as usize], - bank.config.operational_state, - bank.config.risk_tier, - bank.config.total_asset_value_init_limit, - bank.config.asset_weight_init, - bank.config.asset_weight_maint, - I80F48::from_num(bank.config.deposit_limit) / EXP_10_I80F48[bank.mint_decimals as usize], - bank.config.liability_weight_init, - bank.config.liability_weight_maint, - I80F48::from_num(bank.config.borrow_limit) / EXP_10_I80F48[bank.mint_decimals as usize], - bank.config.interest_rate_config.optimal_utilization_rate, - bank.config.interest_rate_config.plateau_interest_rate, - bank.config.interest_rate_config.max_interest_rate, - bank.config.interest_rate_config.insurance_fee_fixed_apr, - bank.config.interest_rate_config.insurance_ir_fee, - bank.config.interest_rate_config.protocol_fixed_fee_apr, - bank.config.interest_rate_config.protocol_ir_fee, - bank.config.oracle_setup, - bank.config.oracle_keys, - bank.config.get_oracle_max_age(), - bank.flags, - I80F48::from(bank.emissions_rate), - bank.emissions_mint, - I80F48::from(bank.emissions_remaining), - I80F48::from(bank.collected_group_fees_outstanding) - / EXP_10_I80F48[bank.mint_decimals as usize], - I80F48::from(bank.collected_insurance_fees_outstanding) - / EXP_10_I80F48[bank.mint_decimals as usize], - SystemTime::now() - .duration_since(UNIX_EPOCH + Duration::from_secs(bank.last_update as u64)) - .unwrap() - .as_secs_f32() - / 3600_f32, - bank.last_update - ) -} - -pub fn group_create( - config: Config, - profile: Profile, - admin: Option, - override_existing_profile_group: bool, - is_arena_group: bool, -) -> Result<()> { - let rpc_client = config.mfi_program.rpc(); - let admin = admin.unwrap_or_else(|| config.authority()); - - if profile.marginfi_group.is_some() && !override_existing_profile_group { - bail!( - "Marginfi group already exists for profile [{}]", - profile.name - ); - } - - let marginfi_group_keypair = Keypair::new(); - - let init_marginfi_group_ixs_builder = config.mfi_program.request(); - - let mut signing_keypairs = config.get_signers(false); - signing_keypairs.push(&marginfi_group_keypair); - - let init_marginfi_group_ixs = init_marginfi_group_ixs_builder - .accounts(marginfi::accounts::MarginfiGroupInitialize { - marginfi_group: marginfi_group_keypair.pubkey(), - admin, - fee_state: find_fee_state_pda(&marginfi::id()).0, - system_program: system_program::id(), - }) - .args(marginfi::instruction::MarginfiGroupInitialize { is_arena_group }) - .instructions()?; - - let recent_blockhash = rpc_client.get_latest_blockhash().unwrap(); - let message = Message::new(&init_marginfi_group_ixs, Some(&config.authority())); - let mut transaction = Transaction::new_unsigned(message); - transaction.partial_sign(&signing_keypairs, recent_blockhash); - - match process_transaction(&transaction, &rpc_client, config.get_tx_mode()) { - Ok(sig) => println!("marginfi group created (sig: {})", sig), - Err(err) => { - println!("Error during marginfi group creation:\n{:#?}", err); - return Err(anyhow!("Error during marginfi group creation")); - } - }; - - let mut profile = profile; - profile.set_marginfi_group(marginfi_group_keypair.pubkey())?; - - Ok(()) -} - -pub fn group_configure( - config: Config, - profile: Profile, - new_admin: Pubkey, - is_arena_group: bool, -) -> Result<()> { - let rpc_client = config.mfi_program.rpc(); - - if profile.marginfi_group.is_none() { - bail!("Marginfi group not specified in profile [{}]", profile.name); - } - - let signing_keypairs = config.get_signers(false); - let configure_marginfi_group_ixs_builder = config - .mfi_program - .request() - .signer(*signing_keypairs.first().unwrap()); - - let configure_marginfi_group_ixs = configure_marginfi_group_ixs_builder - .accounts(marginfi::accounts::MarginfiGroupConfigure { - marginfi_group: profile.marginfi_group.unwrap(), - admin: config.authority(), - }) - .args(marginfi::instruction::MarginfiGroupConfigure { - new_admin, - is_arena_group, - }) - .instructions()?; - - let recent_blockhash = rpc_client.get_latest_blockhash().unwrap(); - let message = Message::new(&configure_marginfi_group_ixs, Some(&config.authority())); - let mut transaction = Transaction::new_unsigned(message); - transaction.partial_sign(&signing_keypairs, recent_blockhash); - - match process_transaction(&transaction, &rpc_client, config.get_tx_mode()) { - Ok(sig) => println!("marginfi group created (sig: {})", sig), - Err(err) => println!("Error during marginfi group creation:\n{:#?}", err), - }; - - Ok(()) -} - -#[allow(clippy::too_many_arguments)] - -pub fn group_add_bank( - config: Config, - profile: Profile, - bank_mint: Pubkey, - seed: bool, - asset_weight_init: f64, - asset_weight_maint: f64, - liability_weight_init: f64, - liability_weight_maint: f64, - deposit_limit_ui: u64, - borrow_limit_ui: u64, - optimal_utilization_rate: f64, - plateau_interest_rate: f64, - max_interest_rate: f64, - insurance_fee_fixed_apr: f64, - insurance_ir_fee: f64, - group_fixed_fee_apr: f64, - group_ir_fee: f64, - risk_tier: crate::RiskTierArg, - oracle_max_age: u16, - compute_unit_price: Option, - global_fee_wallet: Pubkey, -) -> Result<()> { - let rpc_client = config.mfi_program.rpc(); - - if profile.marginfi_group.is_none() { - bail!("Marginfi group not specified in profile [{}]", profile.name); - } - - let asset_weight_init: WrappedI80F48 = I80F48::from_num(asset_weight_init).into(); - let asset_weight_maint: WrappedI80F48 = I80F48::from_num(asset_weight_maint).into(); - let liability_weight_init: WrappedI80F48 = I80F48::from_num(liability_weight_init).into(); - let liability_weight_maint: WrappedI80F48 = I80F48::from_num(liability_weight_maint).into(); - - let optimal_utilization_rate: WrappedI80F48 = I80F48::from_num(optimal_utilization_rate).into(); - let plateau_interest_rate: WrappedI80F48 = I80F48::from_num(plateau_interest_rate).into(); - let max_interest_rate: WrappedI80F48 = I80F48::from_num(max_interest_rate).into(); - let insurance_fee_fixed_apr: WrappedI80F48 = I80F48::from_num(insurance_fee_fixed_apr).into(); - let insurance_ir_fee: WrappedI80F48 = I80F48::from_num(insurance_ir_fee).into(); - let group_fixed_fee_apr: WrappedI80F48 = I80F48::from_num(group_fixed_fee_apr).into(); - let group_ir_fee: WrappedI80F48 = I80F48::from_num(group_ir_fee).into(); - - let mint_account = rpc_client.get_account(&bank_mint)?; - let token_program = mint_account.owner; - let mint = spl_token_2022::state::Mint::unpack( - &mint_account.data[..spl_token_2022::state::Mint::LEN], - )?; - let deposit_limit = deposit_limit_ui * 10_u64.pow(mint.decimals as u32); - let borrow_limit = borrow_limit_ui * 10_u64.pow(mint.decimals as u32); - - let interest_rate_config = InterestRateConfig { - optimal_utilization_rate, - plateau_interest_rate, - max_interest_rate, - insurance_fee_fixed_apr, - insurance_ir_fee, - protocol_fixed_fee_apr: group_fixed_fee_apr, - protocol_ir_fee: group_ir_fee, - ..InterestRateConfig::default() - }; - - // Create signing keypairs -- if the PDA is used, no explicit fee payer. - let mut signing_keypairs = config.get_signers(false); - - let bank_keypair = Keypair::new(); - if !seed { - signing_keypairs.push(&bank_keypair); - } - - // Generate the PDA for the bank keypair if the seed bool is set - // Issue tx with the seed - let add_bank_ixs: Vec = if seed { - create_bank_ix_with_seed( - &config, - profile, - &rpc_client, - bank_mint, - token_program, - asset_weight_init, - asset_weight_maint, - liability_weight_init, - liability_weight_maint, - deposit_limit, - borrow_limit, - interest_rate_config, - risk_tier, - oracle_max_age, - global_fee_wallet, - )? - } else { - create_bank_ix( - &config, - profile, - bank_mint, - token_program, - &bank_keypair, - asset_weight_init, - asset_weight_maint, - liability_weight_init, - liability_weight_maint, - deposit_limit, - borrow_limit, - interest_rate_config, - risk_tier, - oracle_max_age, - global_fee_wallet, - )? - }; - - let mut ixs = vec![ComputeBudgetInstruction::set_compute_unit_price( - compute_unit_price.unwrap_or(1), - )]; - ixs.extend(add_bank_ixs); - - let recent_blockhash = rpc_client.get_latest_blockhash().unwrap(); - let message = Message::new(&ixs, None); - let mut transaction = Transaction::new_unsigned(message); - transaction.partial_sign(&signing_keypairs, recent_blockhash); - - match process_transaction(&transaction, &rpc_client, config.get_tx_mode()) { - Ok(sig) => println!("bank created (sig: {})", sig), - Err(err) => println!("Error during bank creation:\n{:#?}", err), - }; - - Ok(()) -} - -#[allow(clippy::too_many_arguments)] - -fn create_bank_ix_with_seed( - config: &Config, - profile: Profile, - rpc_client: &RpcClient, - bank_mint: Pubkey, - token_program: Pubkey, - asset_weight_init: WrappedI80F48, - asset_weight_maint: WrappedI80F48, - liability_weight_init: WrappedI80F48, - liability_weight_maint: WrappedI80F48, - deposit_limit: u64, - borrow_limit: u64, - interest_rate_config: InterestRateConfig, - risk_tier: crate::RiskTierArg, - oracle_max_age: u16, - global_fee_wallet: Pubkey, -) -> Result> { - use solana_sdk::commitment_config::CommitmentConfig; - - let mut bank_pda = Pubkey::default(); - let mut bank_seed: u64 = u64::default(); - let group_key = profile.marginfi_group.unwrap(); - - // Iterate through to find the next canonical seed - for i in 0..u64::MAX { - println!("Seed option enabled -- generating a PDA account"); - let (pda, _) = Pubkey::find_program_address( - [group_key.as_ref(), bank_mint.as_ref(), &i.to_le_bytes()].as_slice(), - &config.program_id, - ); - if rpc_client - .get_account_with_commitment(&pda, CommitmentConfig::default())? - .value - .is_none() - { - // Bank address is free - println!("Succesffuly generated a PDA account"); - bank_pda = pda; - bank_seed = i; - break; - } - } - - let add_bank_ixs_builder = config.mfi_program.request(); - let add_bank_ixs = add_bank_ixs_builder - .accounts(marginfi::accounts::LendingPoolAddBankWithSeed { - marginfi_group: profile.marginfi_group.unwrap(), - admin: config.authority(), - bank_mint, - bank: bank_pda, - fee_vault: find_bank_vault_pda(&bank_pda, BankVaultType::Fee, &config.program_id).0, - fee_vault_authority: find_bank_vault_authority_pda( - &bank_pda, - BankVaultType::Fee, - &config.program_id, - ) - .0, - insurance_vault: find_bank_vault_pda( - &bank_pda, - BankVaultType::Insurance, - &config.program_id, - ) - .0, - insurance_vault_authority: find_bank_vault_authority_pda( - &bank_pda, - BankVaultType::Insurance, - &config.program_id, - ) - .0, - liquidity_vault: find_bank_vault_pda( - &bank_pda, - BankVaultType::Liquidity, - &config.program_id, - ) - .0, - liquidity_vault_authority: find_bank_vault_authority_pda( - &bank_pda, - BankVaultType::Liquidity, - &config.program_id, - ) - .0, - rent: sysvar::rent::id(), - token_program, - system_program: system_program::id(), - fee_payer: config.authority(), - fee_state: find_fee_state_pda(&config.program_id).0, - global_fee_wallet, - }) - .args(marginfi::instruction::LendingPoolAddBankWithSeed { - bank_config: BankConfigCompact { - asset_weight_init, - asset_weight_maint, - liability_weight_init, - liability_weight_maint, - deposit_limit, - borrow_limit, - interest_rate_config: interest_rate_config.into(), - operational_state: BankOperationalState::Operational, - risk_tier: risk_tier.into(), - oracle_max_age, - ..BankConfigCompact::default() - }, - bank_seed, - }) - .instructions()?; - - println!("Bank address (PDA): {}", bank_pda); - - Ok(add_bank_ixs) -} - -#[allow(clippy::too_many_arguments)] - -fn create_bank_ix( - config: &Config, - profile: Profile, - bank_mint: Pubkey, - token_program: Pubkey, - bank_keypair: &Keypair, - asset_weight_init: WrappedI80F48, - asset_weight_maint: WrappedI80F48, - liability_weight_init: WrappedI80F48, - liability_weight_maint: WrappedI80F48, - deposit_limit: u64, - borrow_limit: u64, - interest_rate_config: InterestRateConfig, - risk_tier: crate::RiskTierArg, - oracle_max_age: u16, - global_fee_wallet: Pubkey, -) -> Result> { - let add_bank_ixs_builder = config.mfi_program.request(); - let add_bank_ixs = add_bank_ixs_builder - .accounts(marginfi::accounts::LendingPoolAddBank { - marginfi_group: profile.marginfi_group.unwrap(), - admin: config.authority(), - bank: bank_keypair.pubkey(), - bank_mint, - fee_vault: find_bank_vault_pda( - &bank_keypair.pubkey(), - BankVaultType::Fee, - &config.program_id, - ) - .0, - fee_vault_authority: find_bank_vault_authority_pda( - &bank_keypair.pubkey(), - BankVaultType::Fee, - &config.program_id, - ) - .0, - insurance_vault: find_bank_vault_pda( - &bank_keypair.pubkey(), - BankVaultType::Insurance, - &config.program_id, - ) - .0, - insurance_vault_authority: find_bank_vault_authority_pda( - &bank_keypair.pubkey(), - BankVaultType::Insurance, - &config.program_id, - ) - .0, - liquidity_vault: find_bank_vault_pda( - &bank_keypair.pubkey(), - BankVaultType::Liquidity, - &config.program_id, - ) - .0, - liquidity_vault_authority: find_bank_vault_authority_pda( - &bank_keypair.pubkey(), - BankVaultType::Liquidity, - &config.program_id, - ) - .0, - rent: sysvar::rent::id(), - token_program, - system_program: system_program::id(), - fee_payer: config.explicit_fee_payer(), - fee_state: find_fee_state_pda(&config.program_id).0, - global_fee_wallet, - }) - .args(marginfi::instruction::LendingPoolAddBank { - bank_config: BankConfigCompact { - asset_weight_init, - asset_weight_maint, - liability_weight_init, - liability_weight_maint, - deposit_limit, - borrow_limit, - interest_rate_config: interest_rate_config.into(), - operational_state: BankOperationalState::Operational, - risk_tier: risk_tier.into(), - oracle_max_age, - ..BankConfigCompact::default() - }, - }) - .instructions()?; - - println!("Bank address: {}", bank_keypair.pubkey()); - - Ok(add_bank_ixs) -} - -#[allow(clippy::too_many_arguments, dead_code)] - -pub fn group_handle_bankruptcy( - config: &Config, - profile: Profile, - bank_pk: Pubkey, - marginfi_account_pk: Pubkey, -) -> Result<()> { - let rpc_client = config.mfi_program.rpc(); - - if profile.marginfi_group.is_none() { - bail!("Marginfi group not specified in profile [{}]", profile.name); - } - - let banks = HashMap::from_iter(load_all_banks( - config, - Some(profile.marginfi_group.unwrap()), - )?); - - let marginfi_account = config - .mfi_program - .account::(marginfi_account_pk)?; - - handle_bankruptcy_for_an_account( - config, - &profile, - &rpc_client, - &banks, - marginfi_account_pk, - &marginfi_account, - bank_pk, - )?; - - Ok(()) -} - -#[allow(dead_code)] -pub fn group_auto_handle_bankruptcy_for_an_account( - config: &Config, - profile: Profile, - marginfi_account_pk: Pubkey, -) -> Result<()> { - let rpc_client = config.mfi_program.rpc(); - - if profile.marginfi_group.is_none() { - bail!("Marginfi group not specified in profile [{}]", profile.name); - } - - let banks = HashMap::from_iter(load_all_banks( - config, - Some(profile.marginfi_group.unwrap()), - )?); - let marginfi_account = config - .mfi_program - .account::(marginfi_account_pk)?; - - marginfi_account - .lending_account - .balances - .iter() - .filter(|b| { - b.is_active() - && banks - .get(&b.bank_pk) - .unwrap() - .get_liability_amount(b.liability_shares.into()) - .unwrap() - .is_positive_with_tolerance(ZERO_AMOUNT_THRESHOLD) - }) - .map(|b| b.bank_pk) - .collect::>() - .iter() - .for_each(|bank_pk| { - handle_bankruptcy_for_an_account( - config, - &profile, - &rpc_client, - &banks, - marginfi_account_pk, - &marginfi_account, - *bank_pk, - ) - .unwrap(); - }); - - Ok(()) -} - -#[allow(dead_code)] -fn handle_bankruptcy_for_an_account( - config: &Config, - profile: &Profile, - rpc_client: &RpcClient, - banks: &HashMap, - marginfi_account_pk: Pubkey, - marginfi_account: &MarginfiAccount, - bank_pk: Pubkey, -) -> Result<()> { - println!("Handling bankruptcy for bank {}", bank_pk); - - let bank = banks.get(&bank_pk).unwrap(); - - let bank_mint_account = rpc_client.get_account(&bank.mint)?; - let token_program = bank_mint_account.owner; - let mut handle_bankruptcy_ix = Instruction { - program_id: config.program_id, - accounts: marginfi::accounts::LendingPoolHandleBankruptcy { - group: profile.marginfi_group.unwrap(), - signer: config.authority(), - bank: bank_pk, - marginfi_account: marginfi_account_pk, - liquidity_vault: find_bank_vault_pda( - &bank_pk, - BankVaultType::Liquidity, - &config.program_id, - ) - .0, - insurance_vault: find_bank_vault_pda( - &bank_pk, - BankVaultType::Insurance, - &config.program_id, - ) - .0, - insurance_vault_authority: find_bank_vault_authority_pda( - &bank_pk, - BankVaultType::Insurance, - &config.program_id, - ) - .0, - token_program, - } - .to_account_metas(Some(true)), - data: marginfi::instruction::LendingPoolHandleBankruptcy {}.data(), - }; - - if token_program == spl_token_2022::ID { - handle_bankruptcy_ix - .accounts - .push(AccountMeta::new_readonly(bank.mint, false)); - } - handle_bankruptcy_ix - .accounts - .extend(load_observation_account_metas( - marginfi_account, - banks, - vec![bank_pk], - vec![], - )); - - let recent_blockhash = rpc_client.get_latest_blockhash().unwrap(); - - let signing_keypairs = config.get_signers(false); - - let message = Message::new(&[handle_bankruptcy_ix], Some(&config.authority())); - let mut transaction = Transaction::new_unsigned(message); - transaction.partial_sign(&signing_keypairs, recent_blockhash); - - match process_transaction(&transaction, rpc_client, config.get_tx_mode()) { - Ok(sig) => println!("Bankruptcy handled (sig: {})", sig), - Err(err) => println!("Error during bankruptcy handling:\n{:#?}", err), - }; - - Ok(()) -} - -const BANKRUPTCY_CHUNKS: usize = 4; - -pub fn handle_bankruptcy_for_accounts( - config: &Config, - profile: &Profile, - accounts: Vec, -) -> Result<()> { - let mut instructions = vec![]; - let rpc_client = config.mfi_program.rpc(); - - let banks = HashMap::from_iter(load_all_banks( - config, - Some(profile.marginfi_group.unwrap()), - )?); - - for account in accounts { - let marginfi_account = config - .mfi_program - .account::(account) - .unwrap(); - - marginfi_account - .lending_account - .balances - .iter() - .filter(|b| { - b.is_active() - && banks - .get(&b.bank_pk) - .unwrap() - .get_liability_amount(b.liability_shares.into()) - .unwrap() - .is_positive_with_tolerance(ZERO_AMOUNT_THRESHOLD) - }) - .map(|b| b.bank_pk) - .collect::>() - .iter() - .for_each(|bank_pk| { - instructions.push( - make_bankruptcy_ix( - config, - profile, - &banks, - account, - &marginfi_account, - *bank_pk, - ) - .unwrap(), - ); - }); - } - - println!("Handling {} bankruptcies", instructions.len()); - - let chunks = instructions.chunks(BANKRUPTCY_CHUNKS); - - for chunk in chunks { - let recent_blockhash = rpc_client.get_latest_blockhash().unwrap(); - - let signing_keypairs = config.get_signers(false); - - let mut ixs = vec![ComputeBudgetInstruction::set_compute_unit_limit(1_400_000)]; - ixs.extend_from_slice(chunk); - - let message = Message::new(&ixs, Some(&config.authority())); - - let mut transaction = Transaction::new_unsigned(message); - transaction.partial_sign(&signing_keypairs, recent_blockhash); - - match process_transaction(&transaction, &rpc_client, config.get_tx_mode()) { - Ok(sig) => println!("Bankruptcy handled (sig: {})", sig), - Err(err) => println!("Error during bankruptcy handling:\n{:#?}", err), - }; - } - - Ok(()) -} - -fn make_bankruptcy_ix( - config: &Config, - profile: &Profile, - banks: &HashMap, - marginfi_account_pk: Pubkey, - marginfi_account: &MarginfiAccount, - bank_pk: Pubkey, -) -> Result { - println!("Handling bankruptcy for bank {}", bank_pk); - let rpc_client = config.mfi_program.rpc(); - - let bank = banks.get(&bank_pk).unwrap(); - - let bank_mint_account = rpc_client.get_account(&bank.mint)?; - let token_program = bank_mint_account.owner; - let mut handle_bankruptcy_ix = Instruction { - program_id: config.program_id, - accounts: marginfi::accounts::LendingPoolHandleBankruptcy { - group: profile.marginfi_group.unwrap(), - signer: config.fee_payer.pubkey(), - bank: bank_pk, - marginfi_account: marginfi_account_pk, - liquidity_vault: find_bank_vault_pda( - &bank_pk, - BankVaultType::Liquidity, - &config.program_id, - ) - .0, - insurance_vault: find_bank_vault_pda( - &bank_pk, - BankVaultType::Insurance, - &config.program_id, - ) - .0, - insurance_vault_authority: find_bank_vault_authority_pda( - &bank_pk, - BankVaultType::Insurance, - &config.program_id, - ) - .0, - token_program, - } - .to_account_metas(Some(true)), - data: marginfi::instruction::LendingPoolHandleBankruptcy {}.data(), - }; - - if token_program == spl_token_2022::ID { - handle_bankruptcy_ix - .accounts - .push(AccountMeta::new_readonly(bank.mint, false)); - } - handle_bankruptcy_ix - .accounts - .extend(load_observation_account_metas( - marginfi_account, - banks, - vec![bank_pk], - vec![], - )); - - Ok(handle_bankruptcy_ix) -} - -pub fn process_set_user_flag( - config: Config, - profile: &Profile, - marginfi_account_pk: Pubkey, - flag: u64, -) -> Result<()> { - let rpc_client = config.mfi_program.rpc(); - - let ix = Instruction { - accounts: marginfi::accounts::SetAccountFlag { - marginfi_account: marginfi_account_pk, - group: profile.marginfi_group.unwrap(), - admin: config.authority(), - } - .to_account_metas(Some(true)), - data: marginfi::instruction::SetAccountFlag { flag }.data(), - program_id: config.program_id, - }; - - let recent_blockhash = rpc_client.get_latest_blockhash().unwrap(); - - let signing_keypairs = config.get_signers(false); - - let message = Message::new(&[ix], Some(&config.authority())); - - let mut transaction = Transaction::new_unsigned(message); - - transaction.partial_sign(&signing_keypairs, recent_blockhash); - - match process_transaction(&transaction, &rpc_client, config.get_tx_mode()) { - Ok(sig) => println!("User flag set (sig: {})", sig), - Err(err) => println!("Error during user flag set:\n{:#?}", err), - }; - - Ok(()) -} - -pub fn initialize_fee_state( - config: Config, - admin: Pubkey, - fee_wallet: Pubkey, - bank_init_flat_sol_fee: u32, - program_fee_fixed: f64, - program_fee_rate: f64, -) -> Result<()> { - let program_fee_fixed: WrappedI80F48 = I80F48::from_num(program_fee_fixed).into(); - let program_fee_rate: WrappedI80F48 = I80F48::from_num(program_fee_rate).into(); - - let rpc_client = config.mfi_program.rpc(); - - let fee_state_pubkey = find_fee_state_pda(&config.program_id).0; - - let initialize_fee_state_ixs_builder = config.mfi_program.request(); - - let initialize_fee_state_ixs = initialize_fee_state_ixs_builder - .accounts(marginfi::accounts::InitFeeState { - payer: config.authority(), - fee_state: fee_state_pubkey, - rent: sysvar::rent::id(), - system_program: system_program::id(), - }) - .args(marginfi::instruction::InitGlobalFeeState { - admin, - fee_wallet, - bank_init_flat_sol_fee, - program_fee_fixed, - program_fee_rate, - }) - .instructions()?; - - let recent_blockhash = rpc_client.get_latest_blockhash().unwrap(); - let message = Message::new(&initialize_fee_state_ixs, Some(&config.authority())); - let mut transaction = Transaction::new_unsigned(message); - transaction.partial_sign(&config.get_signers(false), recent_blockhash); - - match process_transaction(&transaction, &rpc_client, config.get_tx_mode()) { - Ok(sig) => println!("Fee state initialized (sig: {})", sig), - Err(err) => { - println!("Error during fee state initialization:\n{:#?}", err); - return Err(anyhow!("Error during fee state initialization")); - } - }; - - Ok(()) -} - -pub fn edit_fee_state( - config: Config, - new_admin: Pubkey, - fee_wallet: Pubkey, - bank_init_flat_sol_fee: u32, - program_fee_fixed: f64, - program_fee_rate: f64, -) -> Result<()> { - let program_fee_fixed: WrappedI80F48 = I80F48::from_num(program_fee_fixed).into(); - let program_fee_rate: WrappedI80F48 = I80F48::from_num(program_fee_rate).into(); - - let rpc_client = config.mfi_program.rpc(); - - let fee_state_pubkey = find_fee_state_pda(&config.program_id).0; - - let edit_fee_state_ixs_builder = config.mfi_program.request(); - - let edit_fee_state_ixs = edit_fee_state_ixs_builder - .accounts(marginfi::accounts::EditFeeState { - global_fee_admin: config.authority(), - fee_state: fee_state_pubkey, - }) - .args(marginfi::instruction::EditGlobalFeeState { - admin: new_admin, - fee_wallet, - bank_init_flat_sol_fee, - program_fee_fixed, - program_fee_rate, - }) - .instructions()?; - - let recent_blockhash = rpc_client.get_latest_blockhash().unwrap(); - let message = Message::new(&edit_fee_state_ixs, Some(&config.authority())); - let mut transaction = Transaction::new_unsigned(message); - transaction.partial_sign(&config.get_signers(false), recent_blockhash); - - match process_transaction(&transaction, &rpc_client, config.get_tx_mode()) { - Ok(sig) => println!("Fee state edited (sig: {})", sig), - Err(err) => { - println!("Error during fee state edit:\n{:#?}", err); - return Err(anyhow!("Error during fee state edit")); - } - }; - - Ok(()) -} - -pub fn config_group_fee(config: Config, profile: Profile, enable_program_fee: bool) -> Result<()> { - let rpc_client = config.mfi_program.rpc(); - let marginfi_group_pubkey = profile.marginfi_group.ok_or_else(|| { - anyhow!( - "Marginfi group does not exist for profile [{}]", - profile.name - ) - })?; - - let fee_state_pubkey = find_fee_state_pda(&profile.program_id.unwrap()).0; - - let config_group_fee_ixs_builder = config.mfi_program.request(); - - let config_group_fee_ixs = config_group_fee_ixs_builder - .accounts(marginfi::accounts::ConfigGroupFee { - marginfi_group: marginfi_group_pubkey, - global_fee_admin: config.authority(), - fee_state: fee_state_pubkey, - }) - .args(marginfi::instruction::ConfigGroupFee { enable_program_fee }) - .instructions()?; - - let recent_blockhash = rpc_client.get_latest_blockhash().unwrap(); - let message = Message::new(&config_group_fee_ixs, Some(&config.authority())); - let mut transaction = Transaction::new_unsigned(message); - transaction.partial_sign(&config.get_signers(false), recent_blockhash); - - match process_transaction(&transaction, &rpc_client, config.get_tx_mode()) { - Ok(sig) => println!("Config group fee updated (sig: {})", sig), - Err(err) => { - println!("Error during config group fee update:\n{:#?}", err); - return Err(anyhow!("Error during config group fee update")); - } - }; - - Ok(()) -} - -/// Note: doing this one group at a time is tedious, consider running the script instead. -pub fn propagate_fee(config: Config, marginfi_group: Pubkey) -> Result<()> { - let rpc_client = config.mfi_program.rpc(); - - let fee_state_pubkey = find_fee_state_pda(&config.program_id).0; - - let propagate_fee_ixs_builder = config.mfi_program.request(); - - let propagate_fee_ixs = propagate_fee_ixs_builder - .accounts(marginfi::accounts::PropagateFee { - fee_state: fee_state_pubkey, - marginfi_group, - }) - .args(marginfi::instruction::PropagateFeeState {}) - .instructions()?; - - let recent_blockhash = rpc_client.get_latest_blockhash().unwrap(); - let message = Message::new(&propagate_fee_ixs, None); - let mut transaction = Transaction::new_unsigned(message); - transaction.partial_sign(&config.get_signers(false), recent_blockhash); - - match process_transaction(&transaction, &rpc_client, config.get_tx_mode()) { - Ok(sig) => println!("Fee propagated (sig: {})", sig), - Err(err) => { - println!("Error during fee propagation:\n{:#?}", err); - return Err(anyhow!("Error during fee propagation")); - } - }; - - Ok(()) -} - -// -------------------------------------------------------------------------------------------------------------------- -// bank -// -------------------------------------------------------------------------------------------------------------------- - -pub fn bank_get(config: Config, bank_pk: Option) -> Result<()> { - let rpc_client = config.mfi_program.rpc(); - - if let Some(address) = bank_pk { - let mut bank: Bank = config.mfi_program.account(address)?; - let group: MarginfiGroup = config.mfi_program.account(bank.group)?; - - let current_timestamp = SystemTime::now() - .duration_since(UNIX_EPOCH) - .expect("Time went backwards"); - let current_timestamp = current_timestamp.as_secs() as i64; - - bank.accrue_interest(current_timestamp, &group)?; - println!(" Cranking interest at: {:?}", current_timestamp); - - print_bank(&address, &bank); - - let liquidity_vault_balance = - rpc_client.get_token_account_balance(&bank.liquidity_vault)?; - let fee_vault_balance = rpc_client.get_token_account_balance(&bank.fee_vault)?; - let insurance_vault_balance = - rpc_client.get_token_account_balance(&bank.insurance_vault)?; - - println!("============="); - println!("Token balances:"); - println!( - "\tliquidity vault: {} (native: {})", - liquidity_vault_balance.ui_amount.unwrap(), - liquidity_vault_balance.amount - ); - println!( - "\tfee vault: {} (native: {})", - fee_vault_balance.ui_amount.unwrap(), - fee_vault_balance.amount - ); - println!( - "\tinsurance vault: {} (native: {})", - insurance_vault_balance.ui_amount.unwrap(), - insurance_vault_balance.amount - ); - if bank.emissions_mint != Pubkey::default() { - let emissions_token_account = find_bank_emssions_token_account_pda( - address, - bank.emissions_mint, - config.program_id, - ) - .0; - let emissions_vault_balance = - rpc_client.get_token_account_balance(&emissions_token_account)?; - println!( - "\temissions vault: {} (native: {} - TA: {})", - emissions_vault_balance.ui_amount.unwrap(), - emissions_vault_balance.amount, - emissions_token_account - ); - } - } else { - group_get_all(config)?; - } - Ok(()) -} - -fn load_all_banks(config: &Config, marginfi_group: Option) -> Result> { - info!("Loading banks for group {:?}", marginfi_group); - let filters = match marginfi_group { - Some(marginfi_group) => vec![RpcFilterType::Memcmp(Memcmp::new_raw_bytes( - 8 + size_of::() + size_of::(), - marginfi_group.to_bytes().to_vec(), - ))], - None => vec![], - }; - - let banks_with_addresses = config.mfi_program.accounts::(filters)?; - - Ok(banks_with_addresses) -} - -pub fn bank_get_all(config: Config, marginfi_group: Option) -> Result<()> { - let accounts = load_all_banks(&config, marginfi_group)?; - for (address, state) in accounts { - print_bank(&address, &state); - } - Ok(()) -} - -pub fn bank_inspect_price_oracle(config: Config, bank_pk: Pubkey) -> Result<()> { - use marginfi::state::price::{OraclePriceType, PriceBias}; - - let bank: Bank = config.mfi_program.account(bank_pk)?; - let mut price_oracle_account = config - .mfi_program - .rpc() - .get_account(&bank.config.oracle_keys[0])?; - let price_oracle_ai = - (&bank.config.oracle_keys[0], &mut price_oracle_account).into_account_info(); - - let opfa = OraclePriceFeedAdapter::try_from_bank_config_with_max_age( - &bank.config, - &[price_oracle_ai], - &Clock::default(), - u64::MAX, - ) - .unwrap(); - - let (real_price, maint_asset_price, maint_liab_price, init_asset_price, init_liab_price) = ( - opfa.get_price_of_type(OraclePriceType::RealTime, None)?, - opfa.get_price_of_type(OraclePriceType::RealTime, Some(PriceBias::Low))?, - opfa.get_price_of_type(OraclePriceType::RealTime, Some(PriceBias::High))?, - opfa.get_price_of_type(OraclePriceType::TimeWeighted, Some(PriceBias::Low))?, - opfa.get_price_of_type(OraclePriceType::TimeWeighted, Some(PriceBias::High))?, - ); - - let keys = bank - .config - .oracle_keys - .iter() - .filter(|k| k != &&Pubkey::default()) - .collect::>(); - - println!( - r##" -Oracle Setup: {setup:?} -Oracle Keys: {keys:#?} -Prince: - Realtime: {real_price} - Maint: {maint_asset_price} (asset) {maint_liab_price} (liab) - Init: {init_asset_price} (asset) {init_liab_price} (liab) - "##, - setup = bank.config.oracle_setup, - keys = keys, - real_price = real_price, - maint_asset_price = maint_asset_price, - maint_liab_price = maint_liab_price, - init_asset_price = init_asset_price, - init_liab_price = init_liab_price, - ); - - Ok(()) -} - -pub fn show_oracle_ages(config: Config, only_stale: bool) -> Result<()> { - let banks = config - .mfi_program - .accounts::(vec![RpcFilterType::Memcmp(Memcmp::new_raw_bytes( - 8 + size_of::() + size_of::(), - solana_sdk::pubkey!("4qp6Fx6tnZkY5Wropq9wUYgtFxXKwE6viZxFHg3rdAG8") - .to_bytes() - .to_vec(), - ))])?; - - let (pyth_feeds, swb_feeds): (Vec<_>, Vec<_>) = banks - .into_iter() - .map(|(_, b)| { - ( - b.config.oracle_setup, - b.config.oracle_max_age, - b.mint, - *b.config.oracle_keys.clone().first().unwrap(), - ) - }) - .partition(|(setup, _, _, _)| match setup { - OracleSetup::PythLegacy => true, - OracleSetup::SwitchboardV2 => false, - _ => panic!("Unknown oracle setup"), - }); - - let pyth_feeds = pyth_feeds - .into_iter() - .map(|(_, max_age, mint, key)| (max_age, mint, key)) - .collect::>(); - - let swb_feeds = swb_feeds - .into_iter() - .map(|(_, max_age, mint, key)| (max_age, mint, key)) - .collect::>(); - - let mut pyth_max_ages: HashMap = HashMap::from_iter( - pyth_feeds - .iter() - .map(|(max_age, mint, _)| (*max_age, *mint)) - .map(|(max_age, mint)| (mint, (max_age, 0f64))), - ); - let mut swb_max_ages: HashMap = HashMap::from_iter( - swb_feeds - .iter() - .map(|(max_age, mint, _)| (*max_age, *mint)) - .map(|(max_age, mint)| (mint, (max_age, 0f64))), - ); - - loop { - let pyth_keys = pyth_feeds - .iter() - .map(|(_, _, key)| *key) - .collect::>(); - let pyth_mints = pyth_feeds - .iter() - .map(|(_, key, _)| *key) - .collect::>(); - let pyth_max_age = pyth_feeds - .iter() - .map(|(max_age, _, _)| *max_age) - .collect::>(); - let pyth_feed_accounts = config - .mfi_program - .rpc() - .get_multiple_accounts(pyth_keys.as_slice())? - .into_iter() - .zip(pyth_mints) - .zip(pyth_max_age) - .map(|((maybe_account, mint), max_age)| { - let account = maybe_account.unwrap(); - let pa: SolanaPriceAccount = *load_price_account(account.data()).unwrap(); - - (mint, pa, max_age) - }) - .collect::>(); - - let swb_keys = swb_feeds.iter().map(|(_, _, key)| *key).collect::>(); - let swb_mints = swb_feeds.iter().map(|(_, key, _)| *key).collect::>(); - let swb_max_age = swb_feeds - .iter() - .map(|(max_age, _, _)| *max_age) - .collect::>(); - let swb_feed_accounts = config - .mfi_program - .rpc() - .get_multiple_accounts(swb_keys.as_slice())? - .into_iter() - .zip(swb_mints) - .zip(swb_max_age) - .map(|((maybe_account, mint), max_age)| { - let account = maybe_account.unwrap(); - let pa = *AggregatorAccountData::new_from_bytes(account.data()).unwrap(); - - (mint, pa, max_age) - }) - .collect::>(); - - let now = SystemTime::now() - .duration_since(UNIX_EPOCH) - .expect("Time went backwards") - .as_secs() as i64; - - let mut pyth_ages = pyth_feed_accounts - .iter() - .map(|(mint, pa, _)| ((now - pa.get_publish_time()) as f64 / 60f64, *mint)) - .collect::>(); - pyth_ages.sort_by(|(a, _), (b, _)| b.partial_cmp(a).unwrap()); - - let mut swb_ages = swb_feed_accounts - .iter() - .map(|(mint, pa, _)| { - ( - (now - pa.latest_confirmed_round.round_open_timestamp) as f64 / 60f64, - *mint, - ) - }) - .collect::>(); - swb_ages.sort_by(|(a, _), (b, _)| b.partial_cmp(a).unwrap()); - - println!("Pyth"); - for (pa, mint) in pyth_ages.into_iter() { - let (max_age, max_duration) = pyth_max_ages.get_mut(&mint).unwrap(); - *max_duration = pa.max(*max_duration); - - let max_age = if *max_age == 0 { - 1f64 - } else { - *max_age as f64 / 60f64 - }; - - if only_stale && *max_duration < max_age { - continue; - } - println!( - "- {:?}: {:.2}min (max: {:.2}min) - allowed: {:.2}min", - mint, pa, max_duration, max_age - ); - } - println!("Switchboard"); - for (pa, mint) in swb_ages.into_iter() { - let (max_age, max_duration) = swb_max_ages.get_mut(&mint).unwrap(); - *max_duration = pa.max(*max_duration); - - let max_age = if *max_age == 0 { - 1f64 - } else { - *max_age as f64 / 60f64 - }; - - if only_stale && *max_duration < max_age { - continue; - } - println!( - "- {:?}: {:.2}min (max: {:.2}min) - allowed: {:.2}min", - mint, pa, max_duration, max_age - ); - } - } -} - -#[allow(clippy::too_many_arguments)] - -pub fn bank_setup_emissions( - config: &Config, - profile: &Profile, - bank: Pubkey, - deposits: bool, - borrows: bool, - mint: Pubkey, - rate: f64, - total: f64, -) -> Result<()> { - let rpc_client = config.mfi_program.rpc(); - - let mut flags = 0; - - if deposits { - flags |= EMISSIONS_FLAG_LENDING_ACTIVE; - } - - if borrows { - flags |= EMISSIONS_FLAG_BORROW_ACTIVE; - } - - let emissions_mint_account = config.mfi_program.rpc().get_account(&mint).unwrap(); - let token_program = emissions_mint_account.owner; - - let funding_account_ata = - anchor_spl::associated_token::get_associated_token_address_with_program_id( - &config.authority(), - &mint, - &token_program, - ); - - let emissions_mint = spl_token_2022::state::Mint::unpack( - &emissions_mint_account.data[..spl_token_2022::state::Mint::LEN], - ) - .unwrap(); - let emissions_mint_decimals = emissions_mint.decimals; - - let total_emissions = (total * 10u64.pow(emissions_mint_decimals as u32) as f64) as u64; - let rate = crate::utils::calc_emissions_rate(rate, emissions_mint_decimals); - - println!( - "Native rate: {} tokens per 1 bank token (UI) per YEAR", - rate - ); - println!("Emissions flag: {:b}", flags); - println!("Total native emissions: {}", total_emissions); - - // Get (y or n) input from user - println!("Is this correct? (y/n)"); - let mut input = String::new(); - io::stdin().read_line(&mut input).unwrap(); - let input = input.trim(); - - if input != "y" { - println!("Aborting"); - return Ok(()); - } - - let ix = Instruction { - program_id: config.program_id, - accounts: marginfi::accounts::LendingPoolSetupEmissions { - group: profile.marginfi_group.expect("marginfi group not set"), - admin: config.authority(), - bank, - emissions_mint: mint, - emissions_auth: find_bank_emssions_auth_pda(bank, mint, config.program_id).0, - emissions_token_account: find_bank_emssions_token_account_pda( - bank, - mint, - config.program_id, - ) - .0, - emissions_funding_account: funding_account_ata, - token_program, - system_program: system_program::id(), - } - .to_account_metas(Some(true)), - data: marginfi::instruction::LendingPoolSetupEmissions { - flags, - rate, - total_emissions, - } - .data(), - }; - - let recent_blockhash = rpc_client.get_latest_blockhash().unwrap(); - let signing_keypairs = config.get_signers(false); - - let message = Message::new(&[ix], Some(&config.authority())); - let mut transaction = Transaction::new_unsigned(message); - transaction.partial_sign(&signing_keypairs, recent_blockhash); - - match process_transaction(&transaction, &rpc_client, config.get_tx_mode()) { - Ok(sig) => println!("Tx succeded (sig: {})", sig), - Err(err) => println!("Error :\n{:#?}", err), - }; - - Ok(()) -} - -#[allow(clippy::too_many_arguments)] - -pub fn bank_update_emissions( - config: &Config, - profile: &Profile, - bank_pk: Pubkey, - deposits: bool, - borrows: bool, - disable: bool, - rate: Option, - additional_emissions: Option, -) -> Result<()> { - assert!(!(disable && (deposits || borrows))); - - let rpc_client = config.mfi_program.rpc(); - - let bank = config - .mfi_program - .account::(bank_pk) - .unwrap_or_else(|_| panic!("Bank {} not found", bank_pk)); - - let emission_mint = bank.emissions_mint; - let funding_account_ata = get_associated_token_address(&config.authority(), &emission_mint); - - let emissions_mint_decimals = config - .mfi_program - .rpc() - .get_account(&emission_mint) - .unwrap(); - - let emissions_mint_decimals = spl_token_2022::state::Mint::unpack( - &emissions_mint_decimals.data[..spl_token_2022::state::Mint::LEN], - ) - .unwrap() - .decimals; - - let emissions_rate = rate.map(|rate| calc_emissions_rate(rate, emissions_mint_decimals)); - let additional_emissions = additional_emissions - .map(|emissions| (emissions * 10u64.pow(emissions_mint_decimals as u32) as f64) as u64); - let emissions_flags = if disable { - Some(0) - } else if deposits || borrows { - let mut flags = 0; - - if deposits { - flags |= EMISSIONS_FLAG_LENDING_ACTIVE; - } - - if borrows { - flags |= EMISSIONS_FLAG_BORROW_ACTIVE; - } - - Some(flags) - } else { - None - }; - - println!( - "Changes:\n\tRate: {:?}\n\tAdditional emissions: {:?}\n\tFlags: {:?}", - emissions_rate.map(|rate| format!("{} tokens per 1M bank tokens per YEAR", rate)), - additional_emissions, - emissions_flags.map(|flags| format!("{:b}", flags)), - ); - - // Get (y or n) input from user - println!("Is this correct? (y/n)"); - - let mut input = String::new(); - io::stdin().read_line(&mut input).unwrap(); - let input = input.trim(); - - if input != "y" { - println!("Aborting"); - return Ok(()); - } - - let ix = Instruction { - program_id: config.program_id, - accounts: marginfi::accounts::LendingPoolUpdateEmissionsParameters { - group: profile.marginfi_group.expect("marginfi group not set"), - admin: config.authority(), - bank: bank_pk, - emissions_mint: emission_mint, - emissions_token_account: find_bank_emssions_token_account_pda( - bank_pk, - emission_mint, - config.program_id, - ) - .0, - emissions_funding_account: funding_account_ata, - token_program: spl_token::id(), - } - .to_account_metas(Some(true)), - data: marginfi::instruction::LendingPoolUpdateEmissionsParameters { - emissions_flags, - emissions_rate, - additional_emissions, - } - .data(), - }; - - let recent_blockhash = rpc_client.get_latest_blockhash().unwrap(); - let signing_keypairs = config.get_signers(false); - - let message = Message::new(&[ix], Some(&config.authority())); - let mut transaction = Transaction::new_unsigned(message); - transaction.partial_sign(&signing_keypairs, recent_blockhash); - - match process_transaction(&transaction, &rpc_client, config.get_tx_mode()) { - Ok(sig) => println!("Tx succeded (sig: {})", sig), - Err(err) => println!("Error:\n{:#?}", err), - }; - - Ok(()) -} - -pub fn bank_configure( - config: Config, - profile: Profile, - bank_pk: Pubkey, - bank_config_opt: BankConfigOpt, -) -> Result<()> { - let rpc_client = config.mfi_program.rpc(); - - let configure_bank_ixs_builder = config.mfi_program.request(); - let signing_keypairs = config.get_signers(false); - - let configure_bank_ixs = configure_bank_ixs_builder - .accounts(marginfi::accounts::LendingPoolConfigureBank { - group: profile.marginfi_group.unwrap(), - admin: config.authority(), - bank: bank_pk, - }) - .args(marginfi::instruction::LendingPoolConfigureBank { - bank_config_opt: bank_config_opt.clone(), - }) - .instructions()?; - - let recent_blockhash = rpc_client.get_latest_blockhash().unwrap(); - let message = Message::new(&configure_bank_ixs, Some(&config.authority())); - let mut transaction = Transaction::new_unsigned(message); - transaction.partial_sign(&signing_keypairs, recent_blockhash); - - let sig = process_transaction(&transaction, &rpc_client, config.get_tx_mode())?; - - println!("Transaction signature: {}", sig); - - Ok(()) -} - -pub fn bank_configure_oracle( - config: Config, - profile: Profile, - bank_pk: Pubkey, - setup: u8, - oracle: Pubkey, -) -> Result<()> { - let rpc_client = config.mfi_program.rpc(); - - let configure_bank_ixs_builder = config.mfi_program.request(); - let signing_keypairs = config.get_signers(false); - - let mut extra_accounts = vec![]; - // Pyth pull oracles pass the feed instead, all other kinds pass the key itself - let mut passed_oracle = oracle; - - extra_accounts.push(AccountMeta::new_readonly(oracle, false)); - - let setup_type = - OracleSetup::from_u8(setup).unwrap_or_else(|| panic!("unsupported oracle type")); - - if setup_type == OracleSetup::PythPushOracle || setup_type == OracleSetup::StakedWithPythPush { - let oracle_address = oracle; - let mut account = rpc_client.get_account(&oracle_address)?; - let ai = (&oracle_address, &mut account).into_account_info(); - let feed_id = PythPushOraclePriceFeed::peek_feed_id(&ai)?; - - let feed_id_as_pubkey = Pubkey::new_from_array(feed_id); - - passed_oracle = feed_id_as_pubkey; - } - - let mut configure_bank_ixs = configure_bank_ixs_builder - .accounts(marginfi::accounts::LendingPoolConfigureBankOracle { - group: profile.marginfi_group.unwrap(), - admin: config.authority(), - bank: bank_pk, - }) - .args(marginfi::instruction::LendingPoolConfigureBankOracle { - setup, - oracle: passed_oracle, - }) - .instructions()?; - - configure_bank_ixs[0].accounts.extend(extra_accounts); - - let recent_blockhash = rpc_client.get_latest_blockhash().unwrap(); - let message = Message::new(&configure_bank_ixs, Some(&config.authority())); - let mut transaction = Transaction::new_unsigned(message); - transaction.partial_sign(&signing_keypairs, recent_blockhash); - - let sig = process_transaction(&transaction, &rpc_client, config.get_tx_mode())?; - - println!("Transaction signature: {}", sig); - - Ok(()) -} - -// -------------------------------------------------------------------------------------------------------------------- -// Profile -// -------------------------------------------------------------------------------------------------------------------- - -#[allow(clippy::too_many_arguments)] -pub fn create_profile( - name: String, - cluster: Cluster, - keypair_path: String, - multisig: Option, - rpc_url: String, - program_id: Option, - commitment: Option, - marginfi_group: Option, - marginfi_account: Option, -) -> Result<()> { - let cli_config_dir = get_cli_config_dir(); - let profile = Profile::new( - name, - cluster, - keypair_path, - multisig, - rpc_url, - program_id, - commitment, - marginfi_group, - marginfi_account, - ); - if !cli_config_dir.exists() { - fs::create_dir(&cli_config_dir)?; - - let cli_config_file = cli_config_dir.join("config.json"); - - fs::write( - cli_config_file, - serde_json::to_string(&CliConfig { - profile_name: profile.name.clone(), - })?, - )?; - } - - let cli_profiles_dir = cli_config_dir.join("profiles"); - - if !cli_profiles_dir.exists() { - fs::create_dir(&cli_profiles_dir)?; - } - - let profile_file = cli_profiles_dir.join(profile.name.clone() + ".json"); - if profile_file.exists() { - return Err(anyhow!("Profile {} already exists", profile.name)); - } - - println!("Creating profile {profile:#?}"); - - fs::write(&profile_file, serde_json::to_string(&profile)?)?; - - Ok(()) -} - -pub fn show_profile() -> Result<()> { - let profile = load_profile()?; - println!("{profile:?}"); - Ok(()) -} - -pub fn set_profile(name: String) -> Result<()> { - let cli_config_dir = get_cli_config_dir(); - let cli_config_file = cli_config_dir.join("config.json"); - - if !cli_config_file.exists() { - return Err(anyhow!("Profiles not configured, run `mfi profile create`")); - } - - let profile_file = cli_config_dir.join("profiles").join(format!("{name}.json")); - - if !profile_file.exists() { - return Err(anyhow!("Profile {} does not exist", name)); - } - - let cli_config = fs::read_to_string(&cli_config_file)?; - let mut cli_config: CliConfig = serde_json::from_str(&cli_config)?; - - cli_config.profile_name = name; - - fs::write(&cli_config_file, serde_json::to_string(&cli_config)?)?; - - Ok(()) -} - -pub fn list_profiles() -> Result<()> { - let cli_config_dir = get_cli_config_dir(); - let cli_profiles_dir = cli_config_dir.join("profiles"); - - if !cli_profiles_dir.exists() { - return Err(anyhow!("Profiles not configured, run `mfi profile create`")); - } - - let mut profiles = fs::read_dir(&cli_profiles_dir)? - .map(|entry| entry.unwrap().file_name().into_string().unwrap()) - .collect::>(); - - if profiles.is_empty() { - println!("No profiles exist"); - } - - let cli_config = serde_json::from_str::(&fs::read_to_string( - cli_config_dir.join("config.json"), - )?)?; - - println!("Current profile: {}", cli_config.profile_name); - - profiles.sort(); - - println!("Found {} profiles", profiles.len()); - for profile in profiles { - println!("{profile}"); - } - - Ok(()) -} - -#[allow(clippy::too_many_arguments)] -pub fn configure_profile( - name: String, - new_name: Option, - cluster: Option, - keypair_path: Option, - multisig: Option, - rpc_url: Option, - program_id: Option, - commitment: Option, - group: Option, - account: Option, -) -> Result<()> { - let mut profile = profile::load_profile_by_name(&name)?; - let using_new_name = new_name.is_some(); - profile.config( - new_name, - cluster, - keypair_path, - multisig, - rpc_url, - program_id, - commitment, - group, - account, - )?; - - if using_new_name { - if let Err(e) = profile::delete_profile_by_name(&name) { - println!("failed to delete old profile {name}: {e:?}"); - return Err(e); - } - } - - Ok(()) -} - -pub fn delete_profile(name: String) -> Result<()> { - profile::delete_profile_by_name(&name) -} - -// -------------------------------------------------------------------------------------------------------------------- -// Marginfi Accounts -// -------------------------------------------------------------------------------------------------------------------- - -pub fn marginfi_account_list(profile: Profile, config: &Config) -> Result<()> { - let group = profile.marginfi_group.expect("Missing marginfi group"); - let authority = config.authority(); - - let banks = HashMap::from_iter(load_all_banks(config, Some(group))?); - - let accounts = config.mfi_program.accounts::(vec![ - RpcFilterType::Memcmp(Memcmp::new_raw_bytes(8, group.to_bytes().to_vec())), - RpcFilterType::Memcmp(Memcmp::new_raw_bytes(8 + 32, authority.to_bytes().to_vec())), - ])?; - - if accounts.is_empty() { - println!("No marginfi accounts found"); - } - - for (address, marginfi_account) in accounts { - print_account( - address, - marginfi_account, - banks.clone(), - profile - .marginfi_account - .map_or(false, |default_account| default_account == address), - )?; - } - - Ok(()) -} - -pub fn print_account( - address: Pubkey, - marginfi_account: MarginfiAccount, - banks: HashMap, - default: bool, -) -> Result<()> { - println!( - "Address: {} {}", - address, - if default { "(default)" } else { "" } - ); - println!("Lending Account Balances:"); - marginfi_account - .lending_account - .get_active_balances_iter() - .for_each(|balance| { - let bank = banks.get(&balance.bank_pk).expect("Bank not found"); - let balance_amount = if balance - .is_empty(marginfi::state::marginfi_account::BalanceSide::Assets) - .not() - { - let native_value = bank.get_asset_amount(balance.asset_shares.into()).unwrap(); - - native_value / EXP_10_I80F48[bank.mint_decimals as usize] - } else if balance - .is_empty(marginfi::state::marginfi_account::BalanceSide::Liabilities) - .not() - { - let native_value = bank - .get_liability_amount(balance.liability_shares.into()) - .unwrap(); - - (native_value / EXP_10_I80F48[bank.mint_decimals as usize]).neg() - } else { - I80F48::ZERO - }; - - let mut bank = *bank; - let mut balance = *balance; - - let mut baw = BankAccountWrapper { - bank: &mut bank, - balance: &mut balance, - }; - - // Current timestamp - let current_timestamp = SystemTime::now() - .duration_since(UNIX_EPOCH) - .unwrap() - .as_secs(); - - baw.claim_emissions(current_timestamp).unwrap(); - - println!( - "\tBalance: {:.3}, Bank: {} (mint: {}), Emissions: {}", - balance_amount, - balance.bank_pk, - bank.mint, - I80F48::from(balance.emissions_outstanding) - ) - }); - Ok(()) -} - -pub fn marginfi_account_use( - mut profile: Profile, - config: &Config, - marginfi_account_pk: Pubkey, -) -> Result<()> { - let group = profile.marginfi_group.expect("Missing marginfi group"); - let authority = config.authority(); - - let marginfi_account = config - .mfi_program - .account::(marginfi_account_pk)?; - - if marginfi_account.group != group { - return Err(anyhow!("Marginfi account does not belong to group")); - } - - if marginfi_account.authority != authority { - return Err(anyhow!("Marginfi account does not belong to authority")); - } - - profile.config( - None, - None, - None, - None, - None, - None, - None, - None, - Some(marginfi_account_pk), - )?; - - println!("Default marginfi account set to: {marginfi_account_pk}"); - - Ok(()) -} - -/// Print the marginfi account for the provided address or the default marginfi account if none is provided -/// -/// If marginfi account address is provided use the group in the marginfi account data, otherwise use the profile defaults -pub fn marginfi_account_get( - profile: Profile, - config: &Config, - marginfi_account_pk: Option, -) -> Result<()> { - let marginfi_account_pk = - marginfi_account_pk.unwrap_or_else(|| profile.marginfi_account.unwrap()); - - let marginfi_account = config - .mfi_program - .account::(marginfi_account_pk)?; - - let group = marginfi_account.group; - - let banks = HashMap::from_iter(load_all_banks(config, Some(group))?); - - print_account(marginfi_account_pk, marginfi_account, banks, false)?; - - Ok(()) -} - -pub fn marginfi_account_deposit( - profile: &Profile, - config: &Config, - bank_pk: Pubkey, - ui_amount: f64, - deposit_up_to_limit: Option, -) -> Result<()> { - let rpc_client = config.mfi_program.rpc(); - let signer = config.get_non_ms_authority_keypair()?; - let marginfi_account_pk = profile.get_marginfi_account(); - - let bank = config.mfi_program.account::(bank_pk)?; - - let amount = (I80F48::from_num(ui_amount) * EXP_10_I80F48[bank.mint_decimals as usize]) - .floor() - .to_num::(); - - // Check that bank belongs to the correct group - if bank.group != profile.marginfi_group.unwrap() { - bail!("Bank does not belong to group") - } - - let bank_mint_account = rpc_client.get_account(&bank.mint)?; - let token_program = bank_mint_account.owner; - - let deposit_ata = anchor_spl::associated_token::get_associated_token_address_with_program_id( - &signer.pubkey(), - &bank.mint, - &token_program, - ); - - let mut ix = Instruction { - program_id: config.program_id, - accounts: marginfi::accounts::LendingAccountDeposit { - group: profile.marginfi_group.unwrap(), - marginfi_account: marginfi_account_pk, - authority: signer.pubkey(), - bank: bank_pk, - signer_token_account: deposit_ata, - liquidity_vault: bank.liquidity_vault, - token_program, - } - .to_account_metas(Some(true)), - data: marginfi::instruction::LendingAccountDeposit { - amount, - deposit_up_to_limit, - } - .data(), - }; - if token_program == spl_token_2022::ID { - ix.accounts - .push(AccountMeta::new_readonly(bank.mint, false)); - } - - let recent_blockhash = rpc_client.get_latest_blockhash().unwrap(); - let tx = Transaction::new_signed_with_payer( - &[ix], - Some(&signer.pubkey()), - &[signer], - recent_blockhash, - ); - - match process_transaction(&tx, &rpc_client, config.get_tx_mode()) { - Ok(sig) => println!("Deposit successful: {sig}"), - Err(err) => println!("Error during deposit:\n{err:#?}"), - } - - Ok(()) -} - -pub fn marginfi_account_withdraw( - profile: &Profile, - config: &Config, - bank_pk: Pubkey, - ui_amount: f64, - withdraw_all: bool, -) -> Result<()> { - let signer = config.get_non_ms_authority_keypair()?; - - let rpc_client = config.mfi_program.rpc(); - - let marginfi_account_pk = profile.get_marginfi_account(); - - let banks = HashMap::from_iter(load_all_banks( - config, - Some(profile.marginfi_group.unwrap()), - )?); - let bank = banks.get(&bank_pk).expect("Bank not found"); - - let marginfi_account = config - .mfi_program - .account::(marginfi_account_pk)?; - - let amount = (I80F48::from_num(ui_amount) * EXP_10_I80F48[bank.mint_decimals as usize]) - .floor() - .to_num::(); - - // Check that bank belongs to the correct group - if bank.group != profile.marginfi_group.unwrap() { - bail!("Bank does not belong to group") - } - - let bank_mint_account = rpc_client.get_account(&bank.mint)?; - let token_program = bank_mint_account.owner; - - let withdraw_ata = anchor_spl::associated_token::get_associated_token_address_with_program_id( - &signer.pubkey(), - &bank.mint, - &token_program, - ); - - let mut ix = Instruction { - program_id: config.program_id, - accounts: marginfi::accounts::LendingAccountWithdraw { - group: profile.marginfi_group.unwrap(), - marginfi_account: marginfi_account_pk, - authority: signer.pubkey(), - bank: bank_pk, - liquidity_vault: bank.liquidity_vault, - token_program, - destination_token_account: withdraw_ata, - bank_liquidity_vault_authority: find_bank_vault_authority_pda( - &bank_pk, - BankVaultType::Liquidity, - &config.program_id, - ) - .0, - } - .to_account_metas(Some(true)), - data: marginfi::instruction::LendingAccountWithdraw { - amount, - withdraw_all: if withdraw_all { Some(true) } else { None }, - } - .data(), - }; - - if token_program == spl_token_2022::ID { - ix.accounts - .push(AccountMeta::new_readonly(bank.mint, false)); - } - ix.accounts.extend(load_observation_account_metas( - &marginfi_account, - &banks, - vec![], - if withdraw_all { vec![bank_pk] } else { vec![] }, - )); - - let create_ide_ata_ix = create_associated_token_account_idempotent( - &signer.pubkey(), - &signer.pubkey(), - &bank.mint, - &token_program, - ); - - let recent_blockhash = rpc_client.get_latest_blockhash().unwrap(); - let tx = Transaction::new_signed_with_payer( - &[create_ide_ata_ix, ix], - Some(&signer.pubkey()), - &[signer], - recent_blockhash, - ); - - match process_transaction(&tx, &rpc_client, config.get_tx_mode()) { - Ok(sig) => println!("Withdraw successful: {sig}"), - Err(err) => println!("Error during withdraw:\n{err:#?}"), - } - - Ok(()) -} - -pub fn marginfi_account_borrow( - profile: &Profile, - config: &Config, - bank_pk: Pubkey, - ui_amount: f64, -) -> Result<()> { - let signer = config.get_non_ms_authority_keypair()?; - - let rpc_client = config.mfi_program.rpc(); - - let marginfi_account_pk = profile.get_marginfi_account(); - - let banks = HashMap::from_iter(load_all_banks( - config, - Some(profile.marginfi_group.unwrap()), - )?); - let bank = banks.get(&bank_pk).expect("Bank not found"); - - let marginfi_account = config - .mfi_program - .account::(marginfi_account_pk)?; - - let amount = (I80F48::from_num(ui_amount) * EXP_10_I80F48[bank.mint_decimals as usize]) - .floor() - .to_num::(); - - // Check that bank belongs to the correct group - if bank.group != profile.marginfi_group.unwrap() { - bail!("Bank does not belong to group") - } - - let bank_mint_account = rpc_client.get_account(&bank.mint)?; - let token_program = bank_mint_account.owner; - - let borrow_ata = anchor_spl::associated_token::get_associated_token_address_with_program_id( - &signer.pubkey(), - &bank.mint, - &token_program, - ); - - let mut ix = Instruction { - program_id: config.program_id, - accounts: marginfi::accounts::LendingAccountBorrow { - group: profile.marginfi_group.unwrap(), - marginfi_account: marginfi_account_pk, - authority: signer.pubkey(), - bank: bank_pk, - liquidity_vault: bank.liquidity_vault, - token_program, - destination_token_account: borrow_ata, - bank_liquidity_vault_authority: find_bank_vault_authority_pda( - &bank_pk, - BankVaultType::Liquidity, - &config.program_id, - ) - .0, - } - .to_account_metas(Some(true)), - data: marginfi::instruction::LendingAccountBorrow { amount }.data(), - }; - - if token_program == spl_token_2022::ID { - ix.accounts - .push(AccountMeta::new_readonly(bank.mint, false)); - } - ix.accounts.extend(load_observation_account_metas( - &marginfi_account, - &banks, - vec![bank_pk], - vec![], - )); - - let create_ide_ata_ix = create_associated_token_account_idempotent( - &signer.pubkey(), - &signer.pubkey(), - &bank.mint, - &token_program, - ); - - let recent_blockhash = rpc_client.get_latest_blockhash().unwrap(); - let tx = Transaction::new_signed_with_payer( - &[create_ide_ata_ix, ix], - Some(&signer.pubkey()), - &[signer], - recent_blockhash, - ); - - match process_transaction(&tx, &rpc_client, config.get_tx_mode()) { - Ok(sig) => println!("Borrow successful: {sig}"), - Err(err) => println!("Error during borrow:\n{err:#?}"), - } - - Ok(()) -} - -pub fn marginfi_account_liquidate( - profile: &Profile, - config: &Config, - liquidatee_marginfi_account_pk: Pubkey, - asset_bank_pk: Pubkey, - liability_bank_pk: Pubkey, - ui_asset_amount: f64, -) -> Result<()> { - let signer = config.get_non_ms_authority_keypair()?; - - let rpc_client = config.mfi_program.rpc(); - - let marginfi_account_pk = profile.get_marginfi_account(); - - let banks = HashMap::from_iter(load_all_banks( - config, - Some(profile.marginfi_group.unwrap()), - )?); - let asset_bank = banks.get(&asset_bank_pk).expect("Asset bank not found"); - let liability_bank = banks - .get(&liability_bank_pk) - .expect("Liability bank not found"); - - let marginfi_account = config - .mfi_program - .account::(marginfi_account_pk)?; - - let liquidatee_marginfi_account = config - .mfi_program - .account::(liquidatee_marginfi_account_pk)?; - - let asset_amount = (I80F48::from_num(ui_asset_amount) - * EXP_10_I80F48[asset_bank.mint_decimals as usize]) - .floor() - .to_num::(); - - // Check that banks belong to the correct group - if asset_bank.group != profile.marginfi_group.unwrap() { - bail!("Asset bank does not belong to group") - } - if liability_bank.group != profile.marginfi_group.unwrap() { - bail!("Liability bank does not belong to group") - } - - let liability_mint_account = rpc_client.get_account(&liability_bank.mint)?; - let token_program = liability_mint_account.owner; - - let mut ix = Instruction { - program_id: config.program_id, - accounts: marginfi::accounts::LendingAccountLiquidate { - group: profile.marginfi_group.unwrap(), - asset_bank: asset_bank_pk, - liab_bank: liability_bank_pk, - liquidator_marginfi_account: marginfi_account_pk, - authority: signer.pubkey(), - liquidatee_marginfi_account: liquidatee_marginfi_account_pk, - bank_liquidity_vault_authority: find_bank_vault_authority_pda( - &liability_bank_pk, - BankVaultType::Liquidity, - &config.program_id, - ) - .0, - bank_liquidity_vault: liability_bank.liquidity_vault, - bank_insurance_vault: liability_bank.insurance_vault, - token_program, - } - .to_account_metas(Some(true)), - data: marginfi::instruction::LendingAccountLiquidate { asset_amount }.data(), - }; - - let oracle_accounts = vec![asset_bank.config, liability_bank.config] - .into_iter() - .map(|bank_config| { - let oracle_key = bank_to_oracle_key(&bank_config, PYTH_PUSH_PYTH_SPONSORED_SHARD_ID); - AccountMeta::new_readonly(oracle_key, false) - }); - - ix.accounts.extend(oracle_accounts); - - let oracle_accounts = vec![asset_bank.config, liability_bank.config] - .into_iter() - .map(|bank_config| { - let oracle_key = bank_to_oracle_key(&bank_config, PYTH_PUSH_PYTH_SPONSORED_SHARD_ID); - AccountMeta::new_readonly(oracle_key, false) - }); - - ix.accounts.extend(oracle_accounts); - - if token_program == spl_token_2022::ID { - ix.accounts - .push(AccountMeta::new_readonly(liability_bank.mint, false)); - } - ix.accounts.push(AccountMeta { - pubkey: asset_bank.config.oracle_keys[0], - is_signer: false, - is_writable: false, - }); - ix.accounts.push(AccountMeta { - pubkey: liability_bank.config.oracle_keys[0], - is_signer: false, - is_writable: false, - }); - ix.accounts.extend(load_observation_account_metas( - &marginfi_account, - &banks, - vec![liability_bank_pk, asset_bank_pk], - vec![], - )); - ix.accounts.extend(load_observation_account_metas( - &liquidatee_marginfi_account, - &banks, - vec![], - vec![], - )); - - let cu_ix = ComputeBudgetInstruction::set_compute_unit_limit(1_400_000); - - let recent_blockhash = rpc_client.get_latest_blockhash().unwrap(); - let tx = Transaction::new_signed_with_payer( - &[ix, cu_ix], - Some(&signer.pubkey()), - &[signer], - recent_blockhash, - ); - - match process_transaction(&tx, &config.mfi_program.rpc(), config.get_tx_mode()) { - Ok(sig) => println!("Liquidation successful: {sig}"), - Err(err) => println!("Error during liquidation:\n{err:#?}"), - } - - Ok(()) -} - -pub fn marginfi_account_create(profile: &Profile, config: &Config) -> Result<()> { - let signer = config.get_non_ms_authority_keypair()?; - - let rpc_client = config.mfi_program.rpc(); - - let marginfi_account_key = Keypair::new(); - - let ix = Instruction { - program_id: config.program_id, - accounts: marginfi::accounts::MarginfiAccountInitialize { - marginfi_group: profile.marginfi_group.unwrap(), - marginfi_account: marginfi_account_key.pubkey(), - system_program: system_program::ID, - authority: signer.pubkey(), - fee_payer: signer.pubkey(), - } - .to_account_metas(Some(true)), - data: marginfi::instruction::MarginfiAccountInitialize.data(), - }; - - let recent_blockhash = rpc_client.get_latest_blockhash().unwrap(); - let tx = Transaction::new_signed_with_payer( - &[ix], - Some(&signer.pubkey()), - &[signer, &marginfi_account_key], - recent_blockhash, - ); - - let marginfi_account_pk = marginfi_account_key.pubkey(); - - match process_transaction(&tx, &config.mfi_program.rpc(), config.get_tx_mode()) { - Ok(_sig) => print!("{marginfi_account_pk}"), - Err(err) => println!("Error during initialize:\n{err:#?}"), - } - - let mut profile = profile.clone(); - - profile.config( - None, - None, - None, - None, - None, - None, - None, - None, - Some(marginfi_account_key.pubkey()), - )?; - - Ok(()) -} - -pub fn marginfi_account_close(profile: &Profile, config: &Config) -> Result<()> { - let signer = config.get_non_ms_authority_keypair()?; - - let rpc_client = config.mfi_program.rpc(); - - let marginfi_account_pk = profile.get_marginfi_account(); - println!("Closing marginfi account {}", marginfi_account_pk); - - let ix = Instruction { - program_id: config.program_id, - accounts: marginfi::accounts::MarginfiAccountClose { - marginfi_account: marginfi_account_pk, - authority: signer.pubkey(), - fee_payer: signer.pubkey(), - } - .to_account_metas(Some(true)), - data: marginfi::instruction::MarginfiAccountClose.data(), - }; - - let recent_blockhash = rpc_client.get_latest_blockhash().unwrap(); - let tx = Transaction::new_signed_with_payer( - &[ix], - Some(&signer.pubkey()), - &[signer], - recent_blockhash, - ); - - match process_transaction(&tx, &config.mfi_program.rpc(), config.get_tx_mode()) { - Ok(sig) => println!("Marginfi account closed successfully (sig: {})", sig), - Err(err) => println!("Error during marginfi account closure:\n{:#?}", err), - }; - - Ok(()) -} -/// LIP -/// - -#[cfg(feature = "lip")] -pub fn process_list_lip_campaigns(config: &Config) { - use liquidity_incentive_program::state::Campaign; - - let campaings = config.lip_program.accounts::(vec![]).unwrap(); - - print!("Found {} campaigns", campaings.len()); - - campaings.iter().for_each(|(address, campaign)| { - let bank = config - .mfi_program - .account::(campaign.marginfi_bank_pk) - .unwrap(); - - print!( - r#" -Campaign: {} -Bank: {} -Mint: {} -Total Capacity: {} -Remaining Capacity: {} -Lockup Period: {} days -Max Rewards: {} -"#, - address, - campaign.marginfi_bank_pk, - bank.mint, - campaign.max_deposits as f32 / 10.0_f32.powi(bank.mint_decimals as i32), - campaign.remaining_capacity as f32 / 10.0_f32.powi(bank.mint_decimals as i32), - campaign.lockup_period / (24 * 60 * 60), - campaign.max_rewards as f32 / 10.0_f32.powi(bank.mint_decimals as i32), - ); - }); -} - -#[cfg(feature = "lip")] -pub fn process_list_deposits(config: &Config) { - use liquidity_incentive_program::state::{Campaign, Deposit}; - use solana_sdk::clock::SECONDS_PER_DAY; - - let mut deposits = config.lip_program.accounts::(vec![]).unwrap(); - let campaings = HashMap::::from_iter( - config.lip_program.accounts::(vec![]).unwrap(), - ); - let banks = - HashMap::::from_iter(config.mfi_program.accounts::(vec![]).unwrap()); - - deposits.sort_by(|(_, a), (_, b)| a.start_time.cmp(&b.start_time)); - - deposits.iter().for_each(|(address, deposit)| { - let campaign = campaings.get(&deposit.campaign).unwrap(); - let bank = banks.get(&campaign.marginfi_bank_pk).unwrap(); - - let time_now = SystemTime::now() - .duration_since(UNIX_EPOCH) - .unwrap() - .as_secs(); - - let end_time = deposit.start_time as u64 + campaign.lockup_period; - let maturity_string = { - if time_now > end_time { - "mature".to_owned() - } else { - let days_to_maturity = end_time.saturating_sub(time_now) / SECONDS_PER_DAY; - format!("mature in {} days", days_to_maturity) - } - }; - - println!( - r#" -Deposit: {}, -Campaign: {}, -Asset Mint: {}, -Owner: {}, -Amount: {}, -Deposit start {}, end {} ({}) -"#, - address, - deposit.campaign, - bank.mint, - deposit.owner, - deposit.amount as f32 / 10.0_f32.powi(bank.mint_decimals as i32), - timestamp_to_string(deposit.start_time), - timestamp_to_string(end_time as i64), - maturity_string, - ) - }) -} - -#[cfg(feature = "lip")] -fn timestamp_to_string(timestamp: i64) -> String { - use chrono::{DateTime, Utc}; - - DateTime::::from_naive_utc_and_offset( - DateTime::from_timestamp(timestamp, 0).unwrap().naive_utc(), - Utc, - ) - .format("%Y-%m-%d %H:%M:%S") - .to_string() -} diff --git a/clients/rust/marginfi-cli/src/processor/oracle.rs b/clients/rust/marginfi-cli/src/processor/oracle.rs deleted file mode 100644 index 03b084820..000000000 --- a/clients/rust/marginfi-cli/src/processor/oracle.rs +++ /dev/null @@ -1,107 +0,0 @@ -use crate::config::Config; -use borsh::BorshDeserialize; -use chrono::{DateTime, Local, TimeZone}; -use fixed::types::I80F48; -use marginfi::{ - constants::EXP_10_I80F48, - state::price::{PriceAdapter, PythPushOraclePriceFeed}, -}; -use pyth_solana_receiver_sdk::price_update::{FeedId, PriceUpdateV2}; -use solana_account_decoder::UiAccountEncoding; -use solana_client::rpc_client::RpcClient; -use solana_client::rpc_config::{RpcAccountInfoConfig, RpcProgramAccountsConfig}; -use solana_client::rpc_filter::{Memcmp, RpcFilterType}; -use solana_sdk::account_info::IntoAccountInfo; -use solana_sdk::pubkey::Pubkey; -use std::time::{SystemTime, UNIX_EPOCH}; -use switchboard_on_demand::PullFeedAccountData; - -pub fn find_pyth_push_oracles_for_feed_id( - rpc_client: &RpcClient, - feed_id: FeedId, -) -> anyhow::Result<()> { - let mut res = rpc_client.get_program_accounts_with_config( - &pyth_solana_receiver_sdk::ID, - RpcProgramAccountsConfig { - filters: Some(vec![RpcFilterType::Memcmp(Memcmp::new_raw_bytes( - 8 + 32 + 1, - feed_id.to_vec(), - ))]), - account_config: RpcAccountInfoConfig { - encoding: Some(UiAccountEncoding::Base64), - ..Default::default() - }, - ..Default::default() - }, - )?; - - println!("Found {} price feeds", res.len()); - - for (ref address, account) in res.iter_mut() { - let ai = (address, account).into_account_info(); - let price_update_v2 = marginfi::state::price::load_price_update_v2_checked(&ai)?; - - let feed_id = &price_update_v2.price_message.feed_id; - let current_timestamp = SystemTime::now().duration_since(UNIX_EPOCH)?.as_secs() as i64; - let age_secs = current_timestamp - price_update_v2.price_message.publish_time; - let verification_level = price_update_v2.verification_level; - - let feed_id_hex = hex::encode(feed_id); - println!( - "Found pyth account {}, feed_id: 0x{}, min_verification_level: {:?}, age: {}s", - address, feed_id_hex, verification_level, age_secs - ); - } - - Ok(()) -} - -pub fn inspect_pyth_push_feed(config: &Config, address: Pubkey) -> anyhow::Result<()> { - let mut account = config.mfi_program.rpc().get_account(&address)?; - let ai = (&address, &mut account).into_account_info(); - - let mut data = &ai.try_borrow_data()?[8..]; - let price_update = PriceUpdateV2::deserialize(&mut data)?; - - println!("Pyth Push Feed: {}", address); - let feed = PythPushOraclePriceFeed::load_unchecked(&ai)?; - - println!( - "Price: {}", - feed.get_price_of_type(marginfi::state::price::OraclePriceType::RealTime, None)? - ); - - let feed_id = price_update.price_message.feed_id; - - println!("Feed id: {:?}", feed_id); - println!("Feed id hex: 0x{}", hex::encode(feed_id)); - - Ok(()) -} - -pub fn inspect_swb_pull_feed(config: &Config, address: Pubkey) -> anyhow::Result<()> { - let mut account = config.mfi_program.rpc().get_account(&address)?; - - let ai = (&address, &mut account).into_account_info(); - let feed = PullFeedAccountData::parse(ai.data.borrow())?; - - let price: I80F48 = I80F48::from_num(feed.result.value) - .checked_div(EXP_10_I80F48[switchboard_on_demand::PRECISION as usize]) - .unwrap(); - - let last_updated = feed.last_update_timestamp; - let current_timestamp = SystemTime::now().duration_since(UNIX_EPOCH)?.as_secs() as i64; - let age = current_timestamp.saturating_sub(last_updated); - let datetime: DateTime = Local.timestamp_opt(last_updated, 0).unwrap(); - - println!("price: {}", price); - println!( - "last updated: {} (ts: {}; slot {})", - datetime, - last_updated, - feed.result.result_slot().unwrap_or(0) - ); - println!("age: {}s", age); - - Ok(()) -} diff --git a/clients/rust/marginfi-cli/src/profile.rs b/clients/rust/marginfi-cli/src/profile.rs deleted file mode 100644 index 56d6bb5d3..000000000 --- a/clients/rust/marginfi-cli/src/profile.rs +++ /dev/null @@ -1,299 +0,0 @@ -use { - crate::config::{CliSigner, Config, GlobalOptions}, - anchor_client::{Client, Cluster}, - anyhow::{anyhow, bail, Result}, - dirs::home_dir, - serde::{Deserialize, Serialize}, - solana_sdk::{ - commitment_config::{CommitmentConfig, CommitmentLevel}, - pubkey, - pubkey::Pubkey, - signature::{read_keypair_file, Keypair}, - }, - std::{fs, path::PathBuf}, -}; - -#[derive(Serialize, Deserialize, Clone)] -pub struct Profile { - pub name: String, - pub cluster: Cluster, - pub keypair_path: String, - pub multisig: Option, - pub rpc_url: String, - pub program_id: Option, - pub commitment: Option, - pub marginfi_group: Option, - pub marginfi_account: Option, -} - -#[derive(Serialize, Deserialize)] -pub struct CliConfig { - pub profile_name: String, -} - -impl Profile { - #[allow(clippy::too_many_arguments)] - pub fn new( - name: String, - cluster: Cluster, - keypair_path: String, - multisig: Option, - rpc_url: String, - program_id: Option, - commitment: Option, - marginfi_group: Option, - marginfi_account: Option, - ) -> Self { - Profile { - name, - cluster, - keypair_path, - multisig, - rpc_url, - program_id, - commitment, - marginfi_group, - marginfi_account, - } - } - - pub fn get_config(&self, global_options: Option<&GlobalOptions>) -> Result { - let fee_payer = read_keypair_file(&*shellexpand::tilde(&self.keypair_path)) - .expect("Example requires a keypair file"); - - let multisig = self.multisig; - - let dry_run = match global_options { - Some(options) => options.dry_run, - None => false, - }; - let cluster = self.cluster.clone(); - let program_id = match self.program_id { - Some(pid) => pid, - None => { - match cluster { - Cluster::Localnet => pubkey!("Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS"), - Cluster::Devnet => pubkey!("mf2iDQbVTAE3tT4tgAZBhBAmKUW56GsXX7H3oeH4atr"), - Cluster::Mainnet => pubkey!("MFv2hWf31Z9kbCa1snEPYctwafyhdvnV7FZnsebVacA"), - _ => bail!("cluster {:?} does not have a default target program ID, please provide it through the --pid option", cluster) - } - } - }; - let commitment = CommitmentConfig { - commitment: self.commitment.unwrap_or(CommitmentLevel::Processed), - }; - let client = Client::new_with_options( - Cluster::Custom(self.rpc_url.clone(), "https://dontcare.com:123".to_string()), - CliSigner::Keypair(Keypair::new()), - commitment, - ); - let program = client.program(program_id).unwrap(); - let lip_program = client - .program(match cluster { - Cluster::Mainnet => pubkey!("LipsxuAkFkwa4RKNzn51wAsW7Dedzt1RNHMkTkDEZUW"), - Cluster::Devnet => pubkey!("sexyDKo4Khm38YdJeiRdNNd5aMQqNtfDkxv7MnYNFeU"), - _ => bail!( - "cluster {:?} doesn't have a default program ID for the LIP", - cluster - ), - }) - .unwrap(); - - Ok(Config { - cluster, - fee_payer, - multisig, - program_id, - commitment, - dry_run, - client, - mfi_program: program, - lip_program, - }) - } - - #[allow(clippy::too_many_arguments)] - pub fn config( - &mut self, - new_name: Option, - cluster: Option, - keypair_path: Option, - multisig: Option, - rpc_url: Option, - program_id: Option, - commitment: Option, - group: Option, - account: Option, - ) -> Result<()> { - if let Some(name) = new_name { - self.name = name; - } - - if let Some(cluster) = cluster { - self.cluster = cluster; - } - - if let Some(keypair_path) = keypair_path { - self.keypair_path = keypair_path; - } - - if let Some(multisig) = multisig { - self.multisig = Some(multisig); - } - - if let Some(rpc_url) = rpc_url { - self.rpc_url = rpc_url; - } - - if let Some(program_id) = program_id { - self.program_id = Some(program_id); - } - - if let Some(commitment) = commitment { - self.commitment = Some(commitment); - } - - if let Some(group) = group { - self.marginfi_group = Some(group); - } - - if let Some(account) = account { - self.marginfi_account = Some(account); - } - - self.write_to_file()?; - - Ok(()) - } - - pub fn get_marginfi_account(&self) -> Pubkey { - self.marginfi_account - .unwrap_or_else(|| panic!("No marginfi account set for profile \"{}\"", self.name)) - } - - pub fn set_marginfi_group(&mut self, address: Pubkey) -> Result<()> { - self.marginfi_group = Some(address); - self.write_to_file()?; - - Ok(()) - } - - fn write_to_file(&self) -> Result<()> { - let cli_config_dir = get_cli_config_dir(); - let cli_profiles_dir = cli_config_dir.join("profiles"); - let profile_file = cli_profiles_dir.join(self.name.clone() + ".json"); - - fs::write(profile_file, serde_json::to_string(&self)?)?; - - Ok(()) - } -} - -pub fn load_profile() -> Result { - let cli_config_dir = get_cli_config_dir(); - let cli_config_file = cli_config_dir.join("config.json"); - - if !cli_config_file.exists() { - return Err(anyhow!("Profiles not configured, run `mfi profile create`")); - } - - let cli_config = fs::read_to_string(&cli_config_file)?; - let cli_config: CliConfig = serde_json::from_str(&cli_config)?; - - let profile_file = cli_config_dir - .join("profiles") - .join(format!("{}.json", cli_config.profile_name)); - - if !profile_file.exists() { - return Err(anyhow!( - "Profile {} does not exist", - cli_config.profile_name - )); - } - - let profile = fs::read_to_string(&profile_file)?; - let profile: Profile = serde_json::from_str(&profile)?; - - Ok(profile) -} - -pub fn load_profile_by_name(name: &str) -> Result { - let cli_config_dir = get_cli_config_dir(); - let profile_file = cli_config_dir.join("profiles").join(format!("{name}.json")); - - if !profile_file.exists() { - return Err(anyhow!("Profile {} does not exist", name)); - } - - let profile = fs::read_to_string(&profile_file)?; - let profile: Profile = serde_json::from_str(&profile)?; - - Ok(profile) -} - -pub fn delete_profile_by_name(name: &str) -> Result<()> { - let cli_config_dir = get_cli_config_dir(); - let profile_file = cli_config_dir.join("profiles").join(format!("{name}.json")); - - if !profile_file.exists() { - return Err(anyhow!("Profile {} does not exist", name)); - } - - match fs::remove_file(profile_file) { - Ok(()) => { - println!("successfully deleted profile {name}"); - Ok(()) - } - Err(e) => { - println!("failed to delete profile {name}: {e:?}"); - Err(e.into()) - } - } -} - -pub fn get_cli_config_dir() -> PathBuf { - home_dir() - .expect("$HOME not set") - .as_path() - .join(".config/mfi-cli") -} - -impl std::fmt::Debug for Profile { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - let config = self.get_config(None).map_err(|_| std::fmt::Error)?; - write!( - f, - r#" -Profile: - Name: {} - Program: {} - Marginfi Group: {} - Marginfi Account: {} - Cluster: {} - Rpc URL: {} - Fee Payer: {} - Authority: {} - Keypair: {} - Multisig: {} - "#, - self.name, - config.program_id, - self.marginfi_group - .map(|x| x.to_string()) - .unwrap_or_else(|| "None".to_owned()), - self.marginfi_account - .map(|x| x.to_string()) - .unwrap_or_else(|| "None".to_owned()), - self.cluster, - self.rpc_url, - config.explicit_fee_payer(), - config.authority(), - self.keypair_path.clone(), - self.multisig - .map(|x| x.to_string()) - .unwrap_or_else(|| "None".to_owned()), - )?; - - Ok(()) - } -} diff --git a/clients/rust/marginfi-cli/src/utils.rs b/clients/rust/marginfi-cli/src/utils.rs deleted file mode 100644 index 8be42b342..000000000 --- a/clients/rust/marginfi-cli/src/utils.rs +++ /dev/null @@ -1,212 +0,0 @@ -use { - crate::config::TxMode, - anyhow::{bail, Result}, - fixed::types::I80F48, - fixed_macro::types::I80F48, - log::error, - marginfi::{ - bank_authority_seed, bank_seed, - constants::{ - EMISSIONS_AUTH_SEED, EMISSIONS_TOKEN_ACCOUNT_SEED, FEE_STATE_SEED, - PYTH_PUSH_PYTH_SPONSORED_SHARD_ID, - }, - state::{ - marginfi_account::MarginfiAccount, - marginfi_group::{Bank, BankConfig, BankVaultType}, - price::PythPushOraclePriceFeed, - }, - }, - solana_client::rpc_client::RpcClient, - solana_sdk::{ - instruction::AccountMeta, pubkey::Pubkey, signature::Signature, transaction::Transaction, - }, - std::collections::HashMap, -}; - -pub fn process_transaction( - tx: &Transaction, - rpc_client: &RpcClient, - tx_mode: TxMode, -) -> Result { - match tx_mode { - TxMode::DryRun => match rpc_client.simulate_transaction(tx) { - Ok(response) => { - println!("------- program logs -------"); - response - .value - .logs - .unwrap() - .into_iter() - .for_each(|line| println!("{line}")); - println!("----------------------------"); - Ok(Signature::default()) - } - Err(err) => bail!(err), - }, - TxMode::Multisig => { - let bytes = bincode::serialize(tx)?; - let tx_size = bytes.len(); - let tx_serialized = bs58::encode(bytes).into_string(); - - println!("tx size: {} bytes", tx_size); - println!("------- transaction -------"); - println!("{}", tx_serialized); - println!("---------------------------"); - - Ok(Signature::default()) - } - TxMode::Normal => match rpc_client.send_and_confirm_transaction_with_spinner(tx) { - Ok(sig) => Ok(sig), - Err(err) => { - error!("transaction failed: {:?}", err); - bail!(err); - } - }, - } -} - -pub fn bank_to_oracle_key(bank_config: &BankConfig, shard_id: u16) -> Pubkey { - let oracle_key_or_price_feed_id = bank_config.oracle_keys.first().unwrap(); - - match bank_config.oracle_setup { - marginfi::state::price::OracleSetup::PythPushOracle => { - PythPushOraclePriceFeed::find_oracle_address( - shard_id, - bank_config.get_pyth_push_oracle_feed_id().unwrap(), - ) - .0 - } - _ => *oracle_key_or_price_feed_id, - } -} - -pub fn find_bank_vault_pda( - bank_pk: &Pubkey, - vault_type: BankVaultType, - program_id: &Pubkey, -) -> (Pubkey, u8) { - Pubkey::find_program_address(bank_seed!(vault_type, bank_pk), program_id) -} - -pub fn find_bank_vault_authority_pda( - bank_pk: &Pubkey, - vault_type: BankVaultType, - program_id: &Pubkey, -) -> (Pubkey, u8) { - Pubkey::find_program_address(bank_authority_seed!(vault_type, bank_pk), program_id) -} - -pub fn find_bank_emssions_auth_pda( - bank: Pubkey, - emissions_mint: Pubkey, - program_id: Pubkey, -) -> (Pubkey, u8) { - Pubkey::find_program_address( - &[ - EMISSIONS_AUTH_SEED.as_bytes(), - bank.as_ref(), - emissions_mint.as_ref(), - ], - &program_id, - ) -} - -pub fn find_bank_emssions_token_account_pda( - bank: Pubkey, - emissions_mint: Pubkey, - program_id: Pubkey, -) -> (Pubkey, u8) { - Pubkey::find_program_address( - &[ - EMISSIONS_TOKEN_ACCOUNT_SEED.as_bytes(), - bank.as_ref(), - emissions_mint.as_ref(), - ], - &program_id, - ) -} - -pub fn find_fee_state_pda(program_id: &Pubkey) -> (Pubkey, u8) { - Pubkey::find_program_address(&[FEE_STATE_SEED.as_bytes()], program_id) -} - -pub const EXP_10_I80F48: [I80F48; 15] = [ - I80F48!(1), - I80F48!(10), - I80F48!(100), - I80F48!(1_000), - I80F48!(10_000), - I80F48!(100_000), - I80F48!(1_000_000), - I80F48!(10_000_000), - I80F48!(100_000_000), - I80F48!(1_000_000_000), - I80F48!(10_000_000_000), - I80F48!(100_000_000_000), - I80F48!(1_000_000_000_000), - I80F48!(10_000_000_000_000), - I80F48!(100_000_000_000_000), -]; - -pub fn load_observation_account_metas( - marginfi_account: &MarginfiAccount, - banks_map: &HashMap, - include_banks: Vec, - exclude_banks: Vec, -) -> Vec { - let mut bank_pks = marginfi_account - .lending_account - .balances - .iter() - .filter_map(|balance| balance.is_active().then_some(balance.bank_pk)) - .collect::>(); - - for bank_pk in include_banks { - if !bank_pks.contains(&bank_pk) { - bank_pks.push(bank_pk); - } - } - - bank_pks.retain(|bank_pk| !exclude_banks.contains(bank_pk)); - - let mut banks = vec![]; - for bank_pk in bank_pks.clone() { - let bank = banks_map.get(&bank_pk).unwrap(); - banks.push(bank); - } - - let account_metas = banks - .iter() - .zip(bank_pks.iter()) - .flat_map(|(bank, bank_pk)| { - let oracle_key = bank_to_oracle_key(&bank.config, PYTH_PUSH_PYTH_SPONSORED_SHARD_ID); - - vec![ - AccountMeta { - pubkey: *bank_pk, - is_signer: false, - is_writable: false, - }, - AccountMeta { - pubkey: oracle_key, - is_signer: false, - is_writable: false, - }, - ] - }) - .collect::>(); - account_metas -} - -pub fn calc_emissions_rate(ui_rate: f64, emissions_mint_decimals: u8) -> u64 { - (ui_rate * 10u64.pow(emissions_mint_decimals as u32) as f64) as u64 -} - -pub fn ui_to_native(ui_amount: f64, decimals: u8) -> u64 { - (ui_amount * (10u64.pow(decimals as u32) as f64)) as u64 -} - -#[allow(dead_code)] -pub fn native_to_ui(native_amount: u64, decimals: u8) -> f64 { - native_amount as f64 / 10u64.pow(decimals as u32) as f64 -} diff --git a/guides/DEPLOY_GUIDE.md b/guides/DEPLOY_GUIDE.md deleted file mode 100644 index 9179600e6..000000000 --- a/guides/DEPLOY_GUIDE.md +++ /dev/null @@ -1,50 +0,0 @@ -## MAINNET VERIFIED DEPLOY GUIDE - -Marginfi program authority is managed by squads (https://v3.squads.so/dashboard/M05MQ1FNRDdmUTdCQjc2aTY0aGpMRUNYTEFFNHpmeFJ2UTdlYVREVEo2elo=) and uses verified builds. - - -First you will need: -* Solana tools 1.18.20 or later (`solana-install init 1.18.20`) -* solana-verify (`cargo install solana-verify`) -* Docker (https://docs.docker.com/engine/install/ubuntu/) -* A wallet with at least 10 SOL (this guide will assume your wallet is at `~/keys/mainnet-deploy.json`). Verify the pubkey of your wallet with `solana-keygen pubkey ~/keys/mainnet-deploy.json` and verify you have at least 10 SOL with `solana balance -k ~/keys/mainnet-deploy.json` -* An RPC provider connected to mainnet (`solana config set --url https://api.mainnet-beta.solana.com`). The solana public api is usually fine. - - -Steps: -* Make sure you are on the main branch and you have pulled latest. -* Run `./scripts/build-program-verifiable.sh marginfi mainnet`. Other people signing on the multisig should also run this and validate that the hash matches. -* Deploy the buffer with `./scripts/deploy-buffer.sh marginfi ~/keys/mainnet-deploy.json` -* Go to squads, developers, programs, pick marginfi. The buffer address is the output of the previous command. The buffer refund is the public key of the wallet you have used so far (`solana-keygen pubkey ~/keys/mainnet-deploy.json` if you don't know it). Click next. -* Go back to your cli and paste the command Squads gave you in step 2. If this key is not the one used in your solana CLI, make sure it pass it with -k, e.g.: -``` -solana program set-buffer-authority --new-buffer-authority -k ~/keys/mainnet-deploy.json -``` -* Back up the current working program somewhere with `solana -um program dump MFv2hWf31Z9kbCa1snEPYctwafyhdvnV7FZnsebVacA mfi_backup.so` -* Click the pending upgrade to start a vote. -* Execute after the vote passes. - -### Voters: - -* Clone the branch being deployed (see the release tag the person who initated the upgrade has given you) and run: -``` -./scripts/build-program-verifiable.sh marginfi mainnet -``` -* Check that the program builds with the hash that the person who is deploying gave you. Check what characters other people have validated in Signal, post the next six characters of the hash to verify you have actually checked and aren't skipping this step out of laziness. -* Check that the buffer contains this hash too `solana-verify get-buffer-hash `. -* After the vote is executed and the contract is upgraded, check that the contract contains the same hash. For example for MFv2, this is `solana-verify get-program-hash MFv2hWf31Z9kbCa1snEPYctwafyhdvnV7FZnsebVacA` - -## RECENT DEPLOY HASHES - -Here we list recent deployments to staging/mainnet. The hash is always the first 6 chars of the hash generated with the mainnet verified build guide above (even for staging, this is the mainnet hash, not the hash on staging. Staging does not get a verified build.). - -### STAGING - -* 0.1.0: Jan 30, 2025 ~2:35pm ET -- Hash: a4dd3e7 -* 0.1.1: Feb 7, 2025 ~8:15am ET -- Hash: 03455c -* 0.1.2: Pending - -### MAINNET - -* 0.1.0-alpha mainnet on Fev 3, 2024 ~2:45ET -- Hash: ea5d15 -* 0.1.1: Feb 17, 2025 ~3:00pm ET -- Hash: 03455c diff --git a/guides/DEPLOY_GUIDE_STAGING.md b/guides/DEPLOY_GUIDE_STAGING.md deleted file mode 100644 index e37e04a89..000000000 --- a/guides/DEPLOY_GUIDE_STAGING.md +++ /dev/null @@ -1,83 +0,0 @@ -## DEPLOYING TO STAGING - -Staging is different from mainnet only in that it uses a different key. Ensure that the key in lib.rs matches the intended staging key (typically stag8sTKds2h4KzjUw3zKTsxbqvT4XKHdaR9X9E6Rct) - -### Requirements - -* You have access to the staging program authority wallet (we will assume it is at `~/keys/staging-deploy.json` from here on) -* Anchor 0.30.1 -* Solana 1.18.17 - -## Steps - -### With Anchor - -* Note: this rarely works, the program is probably too chonky. -* Build with `anchor build -p marginfi -- --no-default-features --features staging` -* If this is your first time deploying (to a new key), with `anchor build -p marginfi -- --no-default-features --features staging` -* Ensure anchor.toml is configured like this: -``` -[provider] -cluster = "https://api.mainnet-beta.solana.com" -wallet = "~/keys/staging-deploy.json" -``` -Adjust the cluster as needed if using a custom rpc. -* Deploy with `anchor upgrade target/deploy/marginfi.so --program-id stag8sTKds2h4KzjUw3zKTsxbqvT4XKHdaR9X9E6Rct`. Use deploy instead upgrade if this is your first deployment, and use the keypair.json in the target folder instead of the program's id for program-id. - -### If Anchor is busted (for any number of reasons) - -* Run: -``` -solana program deploy --use-rpc \ - target/deploy/marginfi.so \ - --program-id stag8sTKds2h4KzjUw3zKTsxbqvT4XKHdaR9X9E6Rct \ - --keypair ~/keys/staging-deploy.json \ - --fee-payer ~/keys/staging-deploy.json \ - --url -``` -If this is your first time deploying, use the keypair.json in the target folder instead of the program's id for program-id -* Failed? That happens often. `solana program close --buffers -k ~/keys/staging-deploy.json` to recover the buffer funds and try again (Note: this costs you .02 SOL to try again) -* Still failing? That happens. Try to recover the buffer instead of closing it: `solana-keygen recover -o recovered-buffer.json` (then enter the buffer seed phrase). Then: -``` -solana program deploy --use-rpc \ - target/deploy/marginfi.so \ - --program-id stag8sTKds2h4KzjUw3zKTsxbqvT4XKHdaR9X9E6Rct \ - --keypair ~/keys/staging-deploy.json \ - --fee-payer ~/keys/staging-deploy.json \ - --url \ - --buffer recovered-buffer.json -``` -* Program buffer full? Use: -``` -solana program extend \ - --url \ - --keypair ~/keys/staging-deploy.json \ - stag8sTKds2h4KzjUw3zKTsxbqvT4XKHdaR9X9E6Rct 10000 -``` -* If you changed your wallet config, make sure to remove the staging wallet from your Solana config to avoid sausage fingers errors in the future: `solana config set --keypair ~/.config/solana/id.json` - -## DEPLOYING STAKED COLLATERAL TO STAGING - -Note: Generally, don't bother doing this. Just use the actual mainnet deployment of the program at `SVSPxpvHdN29nkVg9rPapPNDddN5DipNLRUFhyjFThE`, maintained by the Solana Foundation. If for some reason you don't want to, read on. - -The Staked Collateral feature uses spl-single-pool, developed by the Solana Foundation (https://github.com/solana-labs/solana-program-library/tree/master/single-pool). This guide will show you how to deploy that program. - -First you will need: -* Agave tools 2.1.0 or later (`sh -c "$(curl -sSfL https://release.anza.xyz/stable/install)"`) and possibly `agave-install init 2.1.0` -* A wallet with at least 2 SOL (this guide will assume your wallet is at `~/keys/staging-deploy.json`). Verify the pubkey of your wallet with `solana-keygen pubkey ~/keys/staging-deploy.json` and verify you have at least 2 SOL with `solana balance -k ~/keys/staging-deploy.json` -* An RPC provider connected to mainnet (`solana config set --url https://api.mainnet-beta.solana.com`). The solana public api is usually fine. - -Steps: -* Clone https://github.com/solana-labs/solana-program-library/tree/master/single-pool and pull latest -* Navigate to programs/single-pool and run `cargo build-sbf` -* Navigate back up to root, then navigate to target. Verify that `solana-keygen pubkey deploy/spl_single_pool-keypair.json` matches the program's declared id. If you want to generate a new id, delete this file and build again to generate a new program keypair. Don't forget to update the declare_id in lib.rs as needed. -* Deploy the program with: -``` -solana program deploy \ - deploy/spl_single_pool.so \ - --program-id deploy/spl_single_pool-keypair.json \ - --keypair ~/keys/staging-deploy.json \ - --fee-payer ~/keys/staging-deploy.json \ - --url - -``` \ No newline at end of file diff --git a/guides/GETTING_STARTED_DEV.md b/guides/GETTING_STARTED_DEV.md deleted file mode 100644 index 7909020b1..000000000 --- a/guides/GETTING_STARTED_DEV.md +++ /dev/null @@ -1,71 +0,0 @@ -## NEW DEV QUICKSTART GUIDE - -New developer getting started working on the mrgnv2 program side? Read on. - -### Things to Install (Feb 2025) - -- rust/cargo - latest stable -- node - 23.0.0 -- yarn - 1.22.22 -- avm - 0.30.1 -- anchor - 0.30.1 -- solana - 1.18.17 -- cargo-nextest - use `cargo install cargo-nextest --version "0.9.81" --locked` exactly -- cargo-fuzz - 0.12.0 - -## Running tests - -### For unit tests: - -``` -cargo test --lib -``` - -### For the TS test suite: - -``` -anchor build -p marginfi -- --no-default-features -anchor test --skip-build -``` - -Note: you may need to build the other programs (mock, liquidity incentive, etc) if you have never run anchor build before. - -Segmentation fault? Just try again. That happens sometimes. - -### For the Rust test suite: - -``` -anchor build -p marginfi -./scripts/test-program.sh marginfi mainnet-beta -``` - -This is much slower than the remix test command, but stable on any system. - -### Customize Your Rust testing experience: - -``` -./scripts/test-program-remix.sh -p marginfi -l warn -c mainnet-beta -f mainnet-beta -``` - -This will throttle your CPU and may error sporadically as a reminder to buy a better CPU if you try to do anything else (like say, compile another Rust repo) while this is running. - -Benchmarks: - -- 9700X: `Summary [ 6.302s] 238 tests run: 238 passed, 0 skipped` - -### To just one Rust test: - -``` -./scripts/single-test.sh marginfi accrue_interest --verbose -./scripts/single-test.sh test_name --verbose -``` - -## Common issues - -### The TS suite fails with `Environment supports crypto: false` at the top - -Update Node - -### All the tests are failing in Rust and/or TS - -Make sure you build the correct version, Rust requires the mainnet version (default features), TS wants localnet (no features) diff --git a/guides/PROG_AUTH_MIGRATION.md b/guides/PROG_AUTH_MIGRATION.md deleted file mode 100644 index af25251c2..000000000 --- a/guides/PROG_AUTH_MIGRATION.md +++ /dev/null @@ -1,9 +0,0 @@ -## MIGRATING PROGRAM AUTHORITY - -Migrating program authority to a new squads wallet? Read on. - -First, make sure the new squads wallet is configured with an appropriate threshold (typically at least 5) and all owners have been added. - -If a regular wallet owns the program, navigate to the new squads wallet, go to developers -> programs -> new program, follow the instructions to add the program via CLI. - -If the old squads wallet owns the program, navigate to the old squads wallet, go to developers -> programs, click the program to transfer, hit change authority, and use the address of the new squads wallet. \ No newline at end of file diff --git a/guides/TRANSFER_ACCOUNT_GUIDE.md b/guides/TRANSFER_ACCOUNT_GUIDE.md deleted file mode 100644 index 57528e7fd..000000000 --- a/guides/TRANSFER_ACCOUNT_GUIDE.md +++ /dev/null @@ -1,55 +0,0 @@ -## TRANSFER ACCOUNT GUIDE - -A user got their wallet pwned and you need to move them to a new mrgn account? Read on. - -Before you begin: - -- You must be an admin of the group where the user account is based. If this is a mrgn-owned group, - that's probably the multisig (AZtUUe9GvTFq9kfseu9jxTioSgdSfjgmZfGQBmhVpTj1). If this is arena, - that's the pool owner/creator. -- If you have admin, consider freezing the account with `SetAccountFlag` (passing `DISABLED_FLAG`) - to prevent the attacker from doing anything. - -You will need: - -- Contact with the affected user (they must sign to conclude the process) -- Access to the mrgn CLI (clients/rust/marginfi-cli) -- Rust 1.75.0 (as of December 2024) -- Access to either the front end (at /migrate/account) or a TS scripting environment where you can run a simple TS script. If using the latter, we'll assume the affected wallet is located at `/keys/affected_wallet.json` -- (Optional) A wallet with sol at a location you know. We'll assume it's at - `/keys/some_wallet.json`. You'll need this for most CLI interactions but not in this particular - use case. - -Steps: - -- Open terminal at `clients/rust/marginfi-cli` -- Create a profile: - -``` -cargo run profile create \ ---name mainnet-group-ms \ ---cluster mainnet \ ---rpc-url https://api.mainnet-beta.solana.com \ ---group 4qp6Fx6tnZkY5Wropq9wUYgtFxXKwE6viZxFHg3rdAG8 \ ---program-id MFv2hWf31Z9kbCa1snEPYctwafyhdvnV7FZnsebVacA \ ---multisig AZtUUe9GvTFq9kfseu9jxTioSgdSfjgmZfGQBmhVpTj1 \ ---keypair-path ~/keys/some_wallet.json \ ---fee-payer ~/keys/some_wallet.json -``` - -Feel free to use a custom rpc instead if you have one. Omit the last two lines if you don't have a local wallet with SOL. - -- `cargo run profile set mainnet-group-ms` to use this profile, `cargo run profile show` to confirm your settings. -- Run this ix to generate a tx to set the migration flag: -``` -cargo run account set-flag THE_COMPROMISED_ACCOUNT \ - --account-migration-enabled -``` -* confirm the profile name when prompted to proceed -* Copy the tx contents (everything between the --------) from the CLI output. Open Squads and go to - Developers > TX Builder> Import base28 encoded tx. Paste what you copied. -* Type a description for the tx and hit Initiate Transaction. Wait for votes and execute. - -Steps for User: -* After admin completes the above, navigate to the migration page (or script) to sign the finalized - migration ix. diff --git a/observability/etl/dataflow-etls/.dockerignore b/observability/etl/dataflow-etls/.dockerignore deleted file mode 100644 index 7a9b36523..000000000 --- a/observability/etl/dataflow-etls/.dockerignore +++ /dev/null @@ -1,6 +0,0 @@ -# Ignore everything except for Python files and the requirements file. -* -!setup.py -!MANIFEST.in -!dataflow_etls/ -!jobs/ diff --git a/observability/etl/dataflow-etls/.gcloudignore b/observability/etl/dataflow-etls/.gcloudignore deleted file mode 100644 index 2f71adf0b..000000000 --- a/observability/etl/dataflow-etls/.gcloudignore +++ /dev/null @@ -1,7 +0,0 @@ -# Ignore everything except for Python files and the requirements file. -* -!setup.py -!MANIFEST.in -!Dockerfile -!dataflow_etls/ -!jobs/ diff --git a/observability/etl/dataflow-etls/.gitignore b/observability/etl/dataflow-etls/.gitignore deleted file mode 100644 index 0d2e53e51..000000000 --- a/observability/etl/dataflow-etls/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -__pycache__ -.mypy_cache -.venv -poetry.lock -parsed_event_* -.idea* -beam-temp-* \ No newline at end of file diff --git a/observability/etl/dataflow-etls/.mypy.ini b/observability/etl/dataflow-etls/.mypy.ini deleted file mode 100644 index 8e12ff881..000000000 --- a/observability/etl/dataflow-etls/.mypy.ini +++ /dev/null @@ -1,32 +0,0 @@ -[mypy] -pretty = False -show_absolute_path = True -show_column_numbers = True -show_error_codes = True -files = . -exclude = scripts/playground.py - -# This is mostly equivalent to strict=true as of v0.770 -check_untyped_defs = True -disallow_any_generics = True -disallow_incomplete_defs = True -disallow_subclassing_any = True -disallow_untyped_calls = True -disallow_untyped_decorators = False -disallow_untyped_defs = True -no_implicit_optional = True -no_implicit_reexport = True -strict_equality = True -warn_redundant_casts = True -warn_return_any = True -warn_unused_configs = True -warn_unused_ignores = True - -# It's hard to make tests compliant using unittest.mock -[mypy-tests.*] -check_untyped_defs = False -allow_untyped_defs = True - -# There is no type hinting for pytest -[mypy-pytest] -ignore_missing_imports = True \ No newline at end of file diff --git a/observability/etl/dataflow-etls/Dockerfile b/observability/etl/dataflow-etls/Dockerfile deleted file mode 100644 index 1f8cfe003..000000000 --- a/observability/etl/dataflow-etls/Dockerfile +++ /dev/null @@ -1,24 +0,0 @@ -FROM gcr.io/dataflow-templates-base/python39-template-launcher-base - -ARG JOB_DIRECTORY -ARG WORKDIR=/dataflow/template -RUN mkdir -p ${WORKDIR} -WORKDIR ${WORKDIR} - -COPY setup.py . -COPY MANIFEST.in . - -ENV FLEX_TEMPLATE_PYTHON_PY_FILE="/${WORKDIR}/job.py" -ENV FLEX_TEMPLATE_PYTHON_SETUP_FILE="/${WORKDIR}/setup.py" - -# Upgrade pip and install the requirements. -RUN pip install --no-cache-dir --upgrade pip \ - && pip install --no-cache-dir . \ - # Download the requirements to speed up launching the Dataflow job. - && pip download --no-cache-dir --dest /tmp/dataflow-etls-requirements-cache . - -COPY dataflow_etls/ dataflow_etls/ -COPY ${JOB_DIRECTORY}/job.py . - -# Since we already downloaded all the dependencies, there's no need to rebuild everything. -ENV PIP_NO_DEPS=True diff --git a/observability/etl/dataflow-etls/MANIFEST.in b/observability/etl/dataflow-etls/MANIFEST.in deleted file mode 100644 index 35ccb0628..000000000 --- a/observability/etl/dataflow-etls/MANIFEST.in +++ /dev/null @@ -1 +0,0 @@ -include dataflow_etls/idls/**/*.json \ No newline at end of file diff --git a/observability/etl/dataflow-etls/README.md b/observability/etl/dataflow-etls/README.md deleted file mode 100644 index bf0938b9f..000000000 --- a/observability/etl/dataflow-etls/README.md +++ /dev/null @@ -1,26 +0,0 @@ -- Test pipeline locally: - -``` -python job.py \ - --temp_location gs://dataflow_jobs_marginfi_v2/tmp/ \ - --project marginfi-dev \ - --input_table marginfi-dev.marginfi_v2_devnet.transactions_raw \ - --output_table_namespace local_file \ - --cluster devnet \ - --min_idl_version 3 \ - --start_date 2022-11-27 \ - --end_date 2022-11-29 -``` - -- Build image and upload to Artifact Registry: - -``` -./scripts/build_job_template -./scripts/upload_job_template -``` - -- Create/Update template and associate metadata file: - -``` -./scripts/sync_job_template -``` diff --git a/observability/etl/dataflow-etls/dataflow_etls/__init__.py b/observability/etl/dataflow-etls/dataflow_etls/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/observability/etl/dataflow-etls/dataflow_etls/account_parsing.py b/observability/etl/dataflow-etls/dataflow_etls/account_parsing.py deleted file mode 100644 index 8318bd07a..000000000 --- a/observability/etl/dataflow-etls/dataflow_etls/account_parsing.py +++ /dev/null @@ -1,76 +0,0 @@ -import base64 -from dataclasses import asdict -from datetime import datetime -from typing import List, TypedDict, Dict, Any, Tuple, Generator -from decimal import Decimal - -from anchorpy_core.idl import Idl -from based58 import based58 # type: ignore -from solders.pubkey import Pubkey -import apache_beam as beam # type: ignore -from anchorpy.program.common import NamedInstruction as NamedAccountData - -from dataflow_etls.idl_versions import VersionedProgram, IdlPool, Cluster -from dataflow_etls.orm.accounts import ACCOUNT_UPDATE_TO_RECORD_TYPE, AccountUpdateRecord - -AccountUpdateRaw = TypedDict('AccountUpdateRaw', { - 'id': str, - 'created_at': datetime, - 'timestamp': datetime, - 'owner': str, - 'slot': Decimal, - 'pubkey': str, - 'txn_signature': str, - 'lamports': Decimal, - 'executable': bool, - 'rent_epoch': Decimal, - 'data': str, -}) - - -class OwnerProgramNotSupported(Exception): - pass - - -def parse_account(account_update: AccountUpdateRaw, min_idl_version: int, cluster: Cluster, - idl_pool: IdlPool) -> List[AccountUpdateRecord]: - owner_program_id_str = account_update["owner"] - owner_program_id = Pubkey.from_string(owner_program_id_str) - account_update_slot = int(account_update["slot"]) - - try: - idl_raw, idl_version = idl_pool.get_idl_for_slot(owner_program_id_str, account_update_slot) - except KeyError: - raise OwnerProgramNotSupported(f"Unsupported program {owner_program_id_str}") - - idl = Idl.from_json(idl_raw) - program = VersionedProgram(cluster, idl_version, idl, owner_program_id) - - if idl_version < min_idl_version: - return [] - - account_data_bytes = base64.b64decode(account_update["data"]) - - try: - parsed_account_data: NamedAccountData = program.coder.accounts.parse(account_data_bytes) - except Exception as e: - print(f"failed to parse account data in update {account_update['id']}", e) - return [] - - if parsed_account_data.name not in ACCOUNT_UPDATE_TO_RECORD_TYPE: - print(f"discarding unsupported account type {parsed_account_data.name} in update {account_update['id']}") - return [] - else: - # noinspection PyPep8Naming - AccountUpdateRecordType = ACCOUNT_UPDATE_TO_RECORD_TYPE[parsed_account_data.name] - return [AccountUpdateRecordType(parsed_account_data, account_update, idl_version)] - - -class DispatchEventsDoFn(beam.DoFn): # type: ignore - def process(self, record: AccountUpdateRecord, *args: Tuple[Any], **kwargs: Dict[str, Tuple[Any]]) -> Generator[ - str, None, None]: - yield beam.pvalue.TaggedOutput(record.get_tag(), record) - - -def dictionify_record(record: AccountUpdateRecord) -> Dict[str, Any]: - return asdict(record) diff --git a/observability/etl/dataflow-etls/dataflow_etls/idl_versions.py b/observability/etl/dataflow-etls/dataflow_etls/idl_versions.py deleted file mode 100644 index b1cbbd88d..000000000 --- a/observability/etl/dataflow-etls/dataflow_etls/idl_versions.py +++ /dev/null @@ -1,94 +0,0 @@ -import glob -import os -from pathlib import Path -from typing import List, Literal, Tuple, Optional, Dict -from anchorpy import Program, Provider, Wallet -from anchorpy.utils.rpc import AsyncClient -from anchorpy_core.idl import Idl -from solders.pubkey import Pubkey - -Cluster = Literal["devnet", "mainnet"] -IdlBoundary = tuple[int, int] -ProgramIdlBoundaries = dict[str, List[IdlBoundary]] -ClusterIdlBoundaries = dict[Cluster, ProgramIdlBoundaries] - - -class VersionedProgram(Program): - version: int - cluster: Cluster - - def __init__(self, cluster: Cluster, version: int, idl: Idl, program_id: Pubkey, - provider: Optional[Provider] = None): - self.version = version - self.cluster = cluster - super(VersionedProgram, self).__init__(idl, program_id, - provider or Provider(AsyncClient("http://localhost:8899"), - Wallet.dummy())) - - -# /!\ Boundaries need to be ordered /!\ -IDL_VERSIONS: ClusterIdlBoundaries = { - "devnet": { - # "A7vUDErNPCTt9qrB6SSM4F6GkxzUe9d8P3cXSmRg4eY4": [(196494976, 0), (196520454, 1), (197246719, 2), (197494521, 3)], - "5Lt5xXZG7bteZferQk9bsiiAS75JqGVPYcTbB8J6vvJK": [], - }, - "mainnet": { - "MFv2hWf31Z9kbCa1snEPYctwafyhdvnV7FZnsebVacA": [], - } -} - - -class ClusterNotSupported(Exception): - pass - - -class IdlPool: - idls_per_program: Dict[str, Tuple[List[Tuple[int, Tuple[int, str]]], str, int]] - - def __init__(self, cluster): - idl_dir = os.path.join(os.path.dirname(os.path.realpath(__file__)), f"idls/{cluster}") - try: - boundaries_per_program = IDL_VERSIONS[cluster] - except KeyError: - raise ClusterNotSupported(f"Cluster {cluster} is not supported") - - self.idls_per_program = {} - - for program_id in boundaries_per_program: - # Find latest IDL - sorted_idls = [int(os.path.basename(path).removesuffix(".json").removeprefix("marginfi-v")) for path in - glob.glob(f"{idl_dir}/{program_id}/marginfi-v*.json")] - sorted_idls.sort() - latest_idl_version = sorted_idls[-1] - - path = Path(f"{idl_dir}/{program_id}/marginfi-v{latest_idl_version}.json") - latest_idl_raw = path.read_text() - - self.idls_per_program[program_id] = ([], latest_idl_raw, latest_idl_version) - - # Load all IDLs - boundaries = boundaries_per_program[program_id] - for boundary in boundaries: - version_end_slot = boundary[0] - idl_version = boundary[1] - path = Path(f"{idl_dir}/{program_id}/marginfi-v{idl_version}.json") - idl_raw = path.read_text() - self.idls_per_program[program_id][0].append((version_end_slot, (idl_version, idl_raw))) - - def get_idl_for_slot(self, program_id: str, slot: int) -> Tuple[str, int]: - idl_boundaries, latest_idl, latest_idl_version = self.idls_per_program[program_id] - - idl = None - idl_version = None - for version_end_slot, (current_idl_version, current_idl) in idl_boundaries: - # todo: returns latest for upgrade slot, can throw if tx executed in same slot, before upgrade - if version_end_slot > slot: - idl = current_idl - idl_version = current_idl_version - break - - if idl is None: - idl = latest_idl - idl_version = latest_idl_version - - return idl, idl_version diff --git a/observability/etl/dataflow-etls/dataflow_etls/idls/devnet/5Lt5xXZG7bteZferQk9bsiiAS75JqGVPYcTbB8J6vvJK/marginfi-v0.json b/observability/etl/dataflow-etls/dataflow_etls/idls/devnet/5Lt5xXZG7bteZferQk9bsiiAS75JqGVPYcTbB8J6vvJK/marginfi-v0.json deleted file mode 100644 index 8229bc326..000000000 --- a/observability/etl/dataflow-etls/dataflow_etls/idls/devnet/5Lt5xXZG7bteZferQk9bsiiAS75JqGVPYcTbB8J6vvJK/marginfi-v0.json +++ /dev/null @@ -1,2309 +0,0 @@ -{ - "version": "0.1.0", - "name": "marginfi", - "instructions": [ - { - "name": "marginfiGroupInitialize", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": true, - "isSigner": true - }, - { - "name": "admin", - "isMut": true, - "isSigner": true - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [] - }, - { - "name": "marginfiGroupConfigure", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": true, - "isSigner": false - }, - { - "name": "admin", - "isMut": false, - "isSigner": true - } - ], - "args": [ - { - "name": "config", - "type": { - "defined": "GroupConfig" - } - } - ] - }, - { - "name": "lendingPoolAddBank", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "admin", - "isMut": true, - "isSigner": true - }, - { - "name": "bankMint", - "isMut": false, - "isSigner": false - }, - { - "name": "bank", - "isMut": true, - "isSigner": true - }, - { - "name": "liquidityVaultAuthority", - "isMut": false, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault_auth" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "liquidityVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "insuranceVaultAuthority", - "isMut": false, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "insurance_vault_auth" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "insuranceVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "insurance_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "feeVaultAuthority", - "isMut": false, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "fee_vault_auth" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "feeVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "fee_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "rent", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "bankConfig", - "type": { - "defined": "BankConfig" - } - } - ] - }, - { - "name": "lendingPoolConfigureBank", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "admin", - "isMut": false, - "isSigner": true - }, - { - "name": "bank", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "bankConfigOpt", - "type": { - "defined": "BankConfigOpt" - } - } - ] - }, - { - "name": "lendingPoolHandleBankruptcy", - "docs": [ - "Handle bad debt of a bankrupt marginfi account for a given bank." - ], - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "admin", - "isMut": false, - "isSigner": true - }, - { - "name": "bank", - "isMut": true, - "isSigner": false - }, - { - "name": "marginfiAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "liquidityVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "insuranceVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "insurance_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "insuranceVaultAuthority", - "isMut": false, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "insurance_vault_auth" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [] - }, - { - "name": "marginfiAccountInitialize", - "docs": [ - "Initialize a marginfi account for a given group" - ], - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "marginfiAccount", - "isMut": true, - "isSigner": true - }, - { - "name": "authority", - "isMut": false, - "isSigner": true - }, - { - "name": "feePayer", - "isMut": true, - "isSigner": true - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [] - }, - { - "name": "lendingAccountDeposit", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "marginfiAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "signer", - "isMut": false, - "isSigner": true - }, - { - "name": "bank", - "isMut": true, - "isSigner": false - }, - { - "name": "signerTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "bankLiquidityVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "amount", - "type": "u64" - } - ] - }, - { - "name": "lendingAccountRepay", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "marginfiAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "signer", - "isMut": false, - "isSigner": true - }, - { - "name": "bank", - "isMut": true, - "isSigner": false - }, - { - "name": "signerTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "bankLiquidityVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "amount", - "type": "u64" - }, - { - "name": "repayAll", - "type": { - "option": "bool" - } - } - ] - }, - { - "name": "lendingAccountWithdraw", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "marginfiAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "signer", - "isMut": false, - "isSigner": true - }, - { - "name": "bank", - "isMut": true, - "isSigner": false - }, - { - "name": "destinationTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "bankLiquidityVaultAuthority", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault_auth" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "bankLiquidityVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "amount", - "type": "u64" - }, - { - "name": "withdrawAll", - "type": { - "option": "bool" - } - } - ] - }, - { - "name": "lendingAccountBorrow", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "marginfiAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "signer", - "isMut": false, - "isSigner": true - }, - { - "name": "bank", - "isMut": true, - "isSigner": false - }, - { - "name": "destinationTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "bankLiquidityVaultAuthority", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault_auth" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "bankLiquidityVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "amount", - "type": "u64" - } - ] - }, - { - "name": "lendingAccountLiquidate", - "docs": [ - "Liquidate a lending account balance of an unhealthy marginfi account" - ], - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "assetBank", - "isMut": true, - "isSigner": false - }, - { - "name": "liabBank", - "isMut": true, - "isSigner": false - }, - { - "name": "liquidatorMarginfiAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "signer", - "isMut": false, - "isSigner": true - }, - { - "name": "liquidateeMarginfiAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "bankLiquidityVaultAuthority", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault_auth" - }, - { - "kind": "account", - "type": "publicKey", - "path": "liab_bank" - } - ] - } - }, - { - "name": "bankLiquidityVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "liab_bank" - } - ] - } - }, - { - "name": "bankInsuranceVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "insurance_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "liab_bank" - } - ] - } - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "assetAmount", - "type": "u64" - } - ] - }, - { - "name": "lendingPoolAccrueBankInterest", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "bank", - "isMut": true, - "isSigner": false - } - ], - "args": [] - }, - { - "name": "lendingPoolCollectBankFees", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "bank", - "isMut": true, - "isSigner": false - }, - { - "name": "liquidityVaultAuthority", - "isMut": false, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault_auth" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "liquidityVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "insuranceVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "insurance_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "feeVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "fee_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [] - } - ], - "accounts": [ - { - "name": "MarginfiAccount", - "type": { - "kind": "struct", - "fields": [ - { - "name": "group", - "type": "publicKey" - }, - { - "name": "authority", - "type": "publicKey" - }, - { - "name": "lendingAccount", - "type": { - "defined": "LendingAccount" - } - }, - { - "name": "padding", - "type": { - "array": [ - "u64", - 64 - ] - } - } - ] - } - }, - { - "name": "MarginfiGroup", - "type": { - "kind": "struct", - "fields": [ - { - "name": "admin", - "type": "publicKey" - }, - { - "name": "padding0", - "type": { - "array": [ - "u128", - 32 - ] - } - }, - { - "name": "padding1", - "type": { - "array": [ - "u128", - 32 - ] - } - } - ] - } - }, - { - "name": "Bank", - "type": { - "kind": "struct", - "fields": [ - { - "name": "mint", - "type": "publicKey" - }, - { - "name": "mintDecimals", - "type": "u8" - }, - { - "name": "group", - "type": "publicKey" - }, - { - "name": "ignore1", - "type": { - "array": [ - "u8", - 7 - ] - } - }, - { - "name": "assetShareValue", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "liabilityShareValue", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "liquidityVault", - "type": "publicKey" - }, - { - "name": "liquidityVaultBump", - "type": "u8" - }, - { - "name": "liquidityVaultAuthorityBump", - "type": "u8" - }, - { - "name": "insuranceVault", - "type": "publicKey" - }, - { - "name": "insuranceVaultBump", - "type": "u8" - }, - { - "name": "insuranceVaultAuthorityBump", - "type": "u8" - }, - { - "name": "ignore2", - "type": { - "array": [ - "u8", - 4 - ] - } - }, - { - "name": "collectedInsuranceFeesOutstanding", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "feeVault", - "type": "publicKey" - }, - { - "name": "feeVaultBump", - "type": "u8" - }, - { - "name": "feeVaultAuthorityBump", - "type": "u8" - }, - { - "name": "ignore3", - "type": { - "array": [ - "u8", - 6 - ] - } - }, - { - "name": "collectedGroupFeesOutstanding", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "totalLiabilityShares", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "totalAssetShares", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "lastUpdate", - "type": "i64" - }, - { - "name": "config", - "type": { - "defined": "BankConfig" - } - }, - { - "name": "padding0", - "type": { - "array": [ - "u128", - 32 - ] - } - }, - { - "name": "padding1", - "type": { - "array": [ - "u128", - 32 - ] - } - } - ] - } - } - ], - "types": [ - { - "name": "GroupEventHeader", - "type": { - "kind": "struct", - "fields": [ - { - "name": "signer", - "type": { - "option": "publicKey" - } - }, - { - "name": "marginfiGroup", - "type": "publicKey" - } - ] - } - }, - { - "name": "AccountEventHeader", - "type": { - "kind": "struct", - "fields": [ - { - "name": "signer", - "type": { - "option": "publicKey" - } - }, - { - "name": "marginfiAccount", - "type": "publicKey" - }, - { - "name": "marginfiAccountAuthority", - "type": "publicKey" - }, - { - "name": "marginfiGroup", - "type": "publicKey" - } - ] - } - }, - { - "name": "LiquidationBalances", - "type": { - "kind": "struct", - "fields": [ - { - "name": "liquidateeAssetBalance", - "type": "f64" - }, - { - "name": "liquidateeLiabilityBalance", - "type": "f64" - }, - { - "name": "liquidatorAssetBalance", - "type": "f64" - }, - { - "name": "liquidatorLiabilityBalance", - "type": "f64" - } - ] - } - }, - { - "name": "LendingAccount", - "type": { - "kind": "struct", - "fields": [ - { - "name": "balances", - "type": { - "array": [ - { - "defined": "Balance" - }, - 16 - ] - } - }, - { - "name": "padding", - "type": { - "array": [ - "u64", - 8 - ] - } - } - ] - } - }, - { - "name": "Balance", - "type": { - "kind": "struct", - "fields": [ - { - "name": "active", - "type": "bool" - }, - { - "name": "bankPk", - "type": "publicKey" - }, - { - "name": "ignore1", - "type": { - "array": [ - "u8", - 7 - ] - } - }, - { - "name": "assetShares", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "liabilityShares", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "padding", - "type": { - "array": [ - "u64", - 4 - ] - } - } - ] - } - }, - { - "name": "GroupConfig", - "type": { - "kind": "struct", - "fields": [ - { - "name": "admin", - "type": { - "option": "publicKey" - } - } - ] - } - }, - { - "name": "InterestRateConfig", - "type": { - "kind": "struct", - "fields": [ - { - "name": "optimalUtilizationRate", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "plateauInterestRate", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "maxInterestRate", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "insuranceFeeFixedApr", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "insuranceIrFee", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "protocolFixedFeeApr", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "protocolIrFee", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "padding", - "type": { - "array": [ - "u128", - 8 - ] - } - } - ] - } - }, - { - "name": "InterestRateConfigOpt", - "type": { - "kind": "struct", - "fields": [ - { - "name": "optimalUtilizationRate", - "type": { - "option": { - "defined": "WrappedI80F48" - } - } - }, - { - "name": "plateauInterestRate", - "type": { - "option": { - "defined": "WrappedI80F48" - } - } - }, - { - "name": "maxInterestRate", - "type": { - "option": { - "defined": "WrappedI80F48" - } - } - }, - { - "name": "insuranceFeeFixedApr", - "type": { - "option": { - "defined": "WrappedI80F48" - } - } - }, - { - "name": "insuranceIrFee", - "type": { - "option": { - "defined": "WrappedI80F48" - } - } - }, - { - "name": "protocolFixedFeeApr", - "type": { - "option": { - "defined": "WrappedI80F48" - } - } - }, - { - "name": "protocolIrFee", - "type": { - "option": { - "defined": "WrappedI80F48" - } - } - } - ] - } - }, - { - "name": "BankConfig", - "docs": [ - "TODO: Convert weights to (u64, u64) to avoid precision loss (maybe?)" - ], - "type": { - "kind": "struct", - "fields": [ - { - "name": "assetWeightInit", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "assetWeightMaint", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "liabilityWeightInit", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "liabilityWeightMaint", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "depositLimit", - "type": "u64" - }, - { - "name": "interestRateConfig", - "type": { - "defined": "InterestRateConfig" - } - }, - { - "name": "operationalState", - "type": { - "defined": "BankOperationalState" - } - }, - { - "name": "oracleSetup", - "type": { - "defined": "OracleSetup" - } - }, - { - "name": "oracleKeys", - "type": { - "array": [ - "publicKey", - 5 - ] - } - }, - { - "name": "ignore1", - "type": { - "array": [ - "u8", - 6 - ] - } - }, - { - "name": "borrowLimit", - "type": "u64" - }, - { - "name": "riskTier", - "type": { - "defined": "RiskTier" - } - }, - { - "name": "padding", - "type": { - "array": [ - "u64", - 6 - ] - } - } - ] - } - }, - { - "name": "WrappedI80F48", - "type": { - "kind": "struct", - "fields": [ - { - "name": "value", - "type": "i128" - } - ] - } - }, - { - "name": "BankConfigOpt", - "type": { - "kind": "struct", - "fields": [ - { - "name": "assetWeightInit", - "type": { - "option": { - "defined": "WrappedI80F48" - } - } - }, - { - "name": "assetWeightMaint", - "type": { - "option": { - "defined": "WrappedI80F48" - } - } - }, - { - "name": "liabilityWeightInit", - "type": { - "option": { - "defined": "WrappedI80F48" - } - } - }, - { - "name": "liabilityWeightMaint", - "type": { - "option": { - "defined": "WrappedI80F48" - } - } - }, - { - "name": "depositLimit", - "type": { - "option": "u64" - } - }, - { - "name": "borrowLimit", - "type": { - "option": "u64" - } - }, - { - "name": "ignore1", - "type": { - "array": [ - "u64", - 22 - ] - } - }, - { - "name": "operationalState", - "type": { - "option": { - "defined": "BankOperationalState" - } - } - }, - { - "name": "oracle", - "type": { - "option": { - "defined": "OracleConfig" - } - } - }, - { - "name": "interestRateConfig", - "type": { - "option": { - "defined": "InterestRateConfigOpt" - } - } - }, - { - "name": "riskTier", - "type": { - "option": { - "defined": "RiskTier" - } - } - }, - { - "name": "ignore2", - "type": { - "array": [ - "u64", - 21 - ] - } - } - ] - } - }, - { - "name": "OracleConfig", - "type": { - "kind": "struct", - "fields": [ - { - "name": "setup", - "type": { - "defined": "OracleSetup" - } - }, - { - "name": "keys", - "type": { - "array": [ - "publicKey", - 5 - ] - } - } - ] - } - }, - { - "name": "BalanceIncreaseType", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Any" - }, - { - "name": "RepayOnly" - }, - { - "name": "DepositOnly" - } - ] - } - }, - { - "name": "BalanceDecreaseType", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Any" - }, - { - "name": "WithdrawOnly" - }, - { - "name": "BorrowOnly" - }, - { - "name": "BypassBorrowLimit" - } - ] - } - }, - { - "name": "WeightType", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Initial" - }, - { - "name": "Maintenance" - } - ] - } - }, - { - "name": "BalanceSide", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Assets" - }, - { - "name": "Liabilities" - } - ] - } - }, - { - "name": "RiskRequirementType", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Initial" - }, - { - "name": "Maintenance" - } - ] - } - }, - { - "name": "BankOperationalState", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Paused" - }, - { - "name": "Operational" - }, - { - "name": "ReduceOnly" - } - ] - } - }, - { - "name": "OracleSetup", - "type": { - "kind": "enum", - "variants": [ - { - "name": "None" - }, - { - "name": "Pyth" - } - ] - } - }, - { - "name": "OracleKey", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Pyth", - "fields": [ - "publicKey" - ] - } - ] - } - }, - { - "name": "RiskTier", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Collateral" - }, - { - "name": "Isolated" - } - ] - } - }, - { - "name": "BankVaultType", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Liquidity" - }, - { - "name": "Insurance" - }, - { - "name": "Fee" - } - ] - } - } - ], - "events": [ - { - "name": "MarginfiGroupCreateEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "GroupEventHeader" - }, - "index": false - } - ] - }, - { - "name": "MarginfiGroupConfigureEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "GroupEventHeader" - }, - "index": false - }, - { - "name": "config", - "type": { - "defined": "GroupConfig" - }, - "index": false - } - ] - }, - { - "name": "LendingPoolBankCreateEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "GroupEventHeader" - }, - "index": false - }, - { - "name": "bank", - "type": "publicKey", - "index": false - }, - { - "name": "mint", - "type": "publicKey", - "index": false - } - ] - }, - { - "name": "LendingPoolBankConfigureEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "GroupEventHeader" - }, - "index": false - }, - { - "name": "bank", - "type": "publicKey", - "index": false - }, - { - "name": "mint", - "type": "publicKey", - "index": false - }, - { - "name": "config", - "type": { - "defined": "BankConfigOpt" - }, - "index": false - } - ] - }, - { - "name": "LendingPoolBankAccrueInterestEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "GroupEventHeader" - }, - "index": false - }, - { - "name": "bank", - "type": "publicKey", - "index": false - }, - { - "name": "mint", - "type": "publicKey", - "index": false - }, - { - "name": "delta", - "type": "u64", - "index": false - }, - { - "name": "feesCollected", - "type": "f64", - "index": false - }, - { - "name": "insuranceCollected", - "type": "f64", - "index": false - } - ] - }, - { - "name": "LendingPoolBankCollectFeesEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "GroupEventHeader" - }, - "index": false - }, - { - "name": "bank", - "type": "publicKey", - "index": false - }, - { - "name": "mint", - "type": "publicKey", - "index": false - }, - { - "name": "groupFeesCollected", - "type": "f64", - "index": false - }, - { - "name": "groupFeesOutstanding", - "type": "f64", - "index": false - }, - { - "name": "insuranceFeesCollected", - "type": "f64", - "index": false - }, - { - "name": "insuranceFeesOutstanding", - "type": "f64", - "index": false - } - ] - }, - { - "name": "LendingPoolBankHandleBankruptcyEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "AccountEventHeader" - }, - "index": false - }, - { - "name": "bank", - "type": "publicKey", - "index": false - }, - { - "name": "mint", - "type": "publicKey", - "index": false - }, - { - "name": "badDebt", - "type": "f64", - "index": false - }, - { - "name": "coveredAmount", - "type": "f64", - "index": false - }, - { - "name": "socializedAmount", - "type": "f64", - "index": false - } - ] - }, - { - "name": "MarginfiAccountCreateEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "AccountEventHeader" - }, - "index": false - } - ] - }, - { - "name": "LendingAccountDepositEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "AccountEventHeader" - }, - "index": false - }, - { - "name": "bank", - "type": "publicKey", - "index": false - }, - { - "name": "mint", - "type": "publicKey", - "index": false - }, - { - "name": "amount", - "type": "u64", - "index": false - } - ] - }, - { - "name": "LendingAccountRepayEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "AccountEventHeader" - }, - "index": false - }, - { - "name": "bank", - "type": "publicKey", - "index": false - }, - { - "name": "mint", - "type": "publicKey", - "index": false - }, - { - "name": "amount", - "type": "u64", - "index": false - }, - { - "name": "closeBalance", - "type": "bool", - "index": false - } - ] - }, - { - "name": "LendingAccountBorrowEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "AccountEventHeader" - }, - "index": false - }, - { - "name": "bank", - "type": "publicKey", - "index": false - }, - { - "name": "mint", - "type": "publicKey", - "index": false - }, - { - "name": "amount", - "type": "u64", - "index": false - } - ] - }, - { - "name": "LendingAccountWithdrawEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "AccountEventHeader" - }, - "index": false - }, - { - "name": "bank", - "type": "publicKey", - "index": false - }, - { - "name": "mint", - "type": "publicKey", - "index": false - }, - { - "name": "amount", - "type": "u64", - "index": false - }, - { - "name": "closeBalance", - "type": "bool", - "index": false - } - ] - }, - { - "name": "LendingAccountLiquidateEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "AccountEventHeader" - }, - "index": false - }, - { - "name": "liquidateeMarginfiAccount", - "type": "publicKey", - "index": false - }, - { - "name": "liquidateeMarginfiAccountAuthority", - "type": "publicKey", - "index": false - }, - { - "name": "assetBank", - "type": "publicKey", - "index": false - }, - { - "name": "assetMint", - "type": "publicKey", - "index": false - }, - { - "name": "liabilityBank", - "type": "publicKey", - "index": false - }, - { - "name": "liabilityMint", - "type": "publicKey", - "index": false - }, - { - "name": "liquidateePreHealth", - "type": "f64", - "index": false - }, - { - "name": "liquidateePostHealth", - "type": "f64", - "index": false - }, - { - "name": "preBalances", - "type": { - "defined": "LiquidationBalances" - }, - "index": false - }, - { - "name": "postBalances", - "type": { - "defined": "LiquidationBalances" - }, - "index": false - } - ] - } - ], - "errors": [ - { - "code": 6000, - "name": "MathError", - "msg": "Math error" - }, - { - "code": 6001, - "name": "BankNotFound", - "msg": "Invalid bank index" - }, - { - "code": 6002, - "name": "LendingAccountBalanceNotFound", - "msg": "Lending account balance not found" - }, - { - "code": 6003, - "name": "BankAssetCapacityExceeded", - "msg": "Bank deposit capacity exceeded" - }, - { - "code": 6004, - "name": "InvalidTransfer", - "msg": "Invalid transfer" - }, - { - "code": 6005, - "name": "MissingPythOrBankAccount", - "msg": "Missing Pyth or Bank account" - }, - { - "code": 6006, - "name": "MissingPythAccount", - "msg": "Missing Pyth account" - }, - { - "code": 6007, - "name": "InvalidOracleAccount", - "msg": "Invalid Pyth account" - }, - { - "code": 6008, - "name": "MissingBankAccount", - "msg": "Missing Bank account" - }, - { - "code": 6009, - "name": "InvalidBankAccount", - "msg": "Invalid Bank account" - }, - { - "code": 6010, - "name": "BadAccountHealth", - "msg": "Bad account health" - }, - { - "code": 6011, - "name": "LendingAccountBalanceSlotsFull", - "msg": "Lending account balance slots are full" - }, - { - "code": 6012, - "name": "BankAlreadyExists", - "msg": "Bank already exists" - }, - { - "code": 6013, - "name": "IllegalLiquidation", - "msg": "Illegal post liquidation state, account is either not unhealthy or liquidation was too big" - }, - { - "code": 6014, - "name": "AccountNotBankrupt", - "msg": "Account is not bankrupt" - }, - { - "code": 6015, - "name": "BalanceNotBadDebt", - "msg": "Account balance is not bad debt" - }, - { - "code": 6016, - "name": "InvalidConfig", - "msg": "Invalid group config" - }, - { - "code": 6017, - "name": "StaleOracle", - "msg": "Stale oracle data" - }, - { - "code": 6018, - "name": "BankPaused", - "msg": "Bank paused" - }, - { - "code": 6019, - "name": "BankReduceOnly", - "msg": "Bank is ReduceOnly mode" - }, - { - "code": 6020, - "name": "BankAccoutNotFound", - "msg": "Bank is missing" - }, - { - "code": 6021, - "name": "OperationDepositOnly", - "msg": "Operation is deposit-only" - }, - { - "code": 6022, - "name": "OperationWithdrawOnly", - "msg": "Operation is withdraw-only" - }, - { - "code": 6023, - "name": "OperationBorrowOnly", - "msg": "Operation is borrow-only" - }, - { - "code": 6024, - "name": "OperationRepayOnly", - "msg": "Operation is repay-only" - }, - { - "code": 6025, - "name": "NoAssetFound", - "msg": "No asset found" - }, - { - "code": 6026, - "name": "NoLiabilityFound", - "msg": "No liability found" - }, - { - "code": 6027, - "name": "InvalidOracleSetup", - "msg": "Invalid oracle setup" - }, - { - "code": 6028, - "name": "IllegalUtilizationRatio", - "msg": "Invalid bank utilization ratio" - }, - { - "code": 6029, - "name": "BankLiabilityCapacityExceeded", - "msg": "Bank borrow cap exceeded" - }, - { - "code": 6030, - "name": "InvalidPrice", - "msg": "Invalid Price" - }, - { - "code": 6031, - "name": "IsolatedAccountIllegalState", - "msg": "Account can have only one liablity when account is under isolated risk" - } - ] -} diff --git a/observability/etl/dataflow-etls/dataflow_etls/idls/devnet/A7vUDErNPCTt9qrB6SSM4F6GkxzUe9d8P3cXSmRg4eY4/marginfi-v0.json b/observability/etl/dataflow-etls/dataflow_etls/idls/devnet/A7vUDErNPCTt9qrB6SSM4F6GkxzUe9d8P3cXSmRg4eY4/marginfi-v0.json deleted file mode 100644 index 734709431..000000000 --- a/observability/etl/dataflow-etls/dataflow_etls/idls/devnet/A7vUDErNPCTt9qrB6SSM4F6GkxzUe9d8P3cXSmRg4eY4/marginfi-v0.json +++ /dev/null @@ -1,1904 +0,0 @@ -{ - "version": "0.1.0", - "name": "marginfi", - "instructions": [ - { - "name": "marginfiGroupInitialize", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": true, - "isSigner": true - }, - { - "name": "admin", - "isMut": true, - "isSigner": true - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [] - }, - { - "name": "marginfiGroupConfigure", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": true, - "isSigner": false - }, - { - "name": "admin", - "isMut": false, - "isSigner": true - } - ], - "args": [ - { - "name": "config", - "type": { - "defined": "GroupConfig" - } - } - ] - }, - { - "name": "lendingPoolAddBank", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "admin", - "isMut": true, - "isSigner": true - }, - { - "name": "bankMint", - "isMut": false, - "isSigner": false - }, - { - "name": "bank", - "isMut": true, - "isSigner": true - }, - { - "name": "liquidityVaultAuthority", - "isMut": false, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault_auth" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "liquidityVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "insuranceVaultAuthority", - "isMut": false, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "insurance_vault_auth" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "insuranceVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "insurance_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "feeVaultAuthority", - "isMut": false, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "fee_vault_auth" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "feeVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "fee_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "rent", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "bankConfig", - "type": { - "defined": "BankConfig" - } - } - ] - }, - { - "name": "lendingPoolConfigureBank", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "admin", - "isMut": false, - "isSigner": true - }, - { - "name": "bank", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "bankConfigOpt", - "type": { - "defined": "BankConfigOpt" - } - } - ] - }, - { - "name": "lendingPoolHandleBankruptcy", - "docs": [ - "Handle bad debt of a bankrupt marginfi account for a given bank." - ], - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "admin", - "isMut": false, - "isSigner": true - }, - { - "name": "bank", - "isMut": true, - "isSigner": false - }, - { - "name": "marginfiAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "liquidityVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "insuranceVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "insurance_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "insuranceVaultAuthority", - "isMut": false, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "insurance_vault_auth" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [] - }, - { - "name": "marginfiAccountInitialize", - "docs": [ - "Initialize a marginfi account for a given group" - ], - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "marginfiAccount", - "isMut": true, - "isSigner": true - }, - { - "name": "authority", - "isMut": false, - "isSigner": true - }, - { - "name": "feePayer", - "isMut": true, - "isSigner": true - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [] - }, - { - "name": "lendingAccountDeposit", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "marginfiAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "signer", - "isMut": false, - "isSigner": true - }, - { - "name": "bank", - "isMut": true, - "isSigner": false - }, - { - "name": "signerTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "bankLiquidityVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "amount", - "type": "u64" - } - ] - }, - { - "name": "lendingAccountRepay", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "marginfiAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "signer", - "isMut": false, - "isSigner": true - }, - { - "name": "bank", - "isMut": true, - "isSigner": false - }, - { - "name": "signerTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "bankLiquidityVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "amount", - "type": "u64" - }, - { - "name": "repayAll", - "type": { - "option": "bool" - } - } - ] - }, - { - "name": "lendingAccountWithdraw", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "marginfiAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "signer", - "isMut": false, - "isSigner": true - }, - { - "name": "bank", - "isMut": true, - "isSigner": false - }, - { - "name": "destinationTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "bankLiquidityVaultAuthority", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault_auth" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "bankLiquidityVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "amount", - "type": "u64" - }, - { - "name": "withdrawAll", - "type": { - "option": "bool" - } - } - ] - }, - { - "name": "lendingAccountBorrow", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "marginfiAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "signer", - "isMut": false, - "isSigner": true - }, - { - "name": "bank", - "isMut": true, - "isSigner": false - }, - { - "name": "destinationTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "bankLiquidityVaultAuthority", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault_auth" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "bankLiquidityVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "amount", - "type": "u64" - } - ] - }, - { - "name": "lendingAccountLiquidate", - "docs": [ - "Liquidate a lending account balance of an unhealthy marginfi account" - ], - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "assetBank", - "isMut": true, - "isSigner": false - }, - { - "name": "liabBank", - "isMut": true, - "isSigner": false - }, - { - "name": "liquidatorMarginfiAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "signer", - "isMut": false, - "isSigner": true - }, - { - "name": "liquidateeMarginfiAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "bankLiquidityVaultAuthority", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault_auth" - }, - { - "kind": "account", - "type": "publicKey", - "path": "liab_bank" - } - ] - } - }, - { - "name": "bankLiquidityVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "liab_bank" - } - ] - } - }, - { - "name": "bankInsuranceVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "insurance_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "liab_bank" - } - ] - } - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "assetAmount", - "type": "u64" - } - ] - }, - { - "name": "lendingPoolAccrueBankInterest", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "bank", - "isMut": true, - "isSigner": false - } - ], - "args": [] - }, - { - "name": "lendingPoolCollectBankFees", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "bank", - "isMut": true, - "isSigner": false - }, - { - "name": "liquidityVaultAuthority", - "isMut": false, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault_auth" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "liquidityVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "insuranceVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "insurance_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "feeVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "fee_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [] - } - ], - "accounts": [ - { - "name": "MarginfiAccount", - "type": { - "kind": "struct", - "fields": [ - { - "name": "group", - "type": "publicKey" - }, - { - "name": "authority", - "type": "publicKey" - }, - { - "name": "lendingAccount", - "type": { - "defined": "LendingAccount" - } - }, - { - "name": "padding", - "type": { - "array": [ - "u64", - 64 - ] - } - } - ] - } - }, - { - "name": "MarginfiGroup", - "type": { - "kind": "struct", - "fields": [ - { - "name": "admin", - "type": "publicKey" - }, - { - "name": "padding0", - "type": { - "array": [ - "u128", - 32 - ] - } - }, - { - "name": "padding1", - "type": { - "array": [ - "u128", - 32 - ] - } - } - ] - } - }, - { - "name": "Bank", - "type": { - "kind": "struct", - "fields": [ - { - "name": "mint", - "type": "publicKey" - }, - { - "name": "mintDecimals", - "type": "u8" - }, - { - "name": "group", - "type": "publicKey" - }, - { - "name": "assetShareValue", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "liabilityShareValue", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "liquidityVault", - "type": "publicKey" - }, - { - "name": "liquidityVaultBump", - "type": "u8" - }, - { - "name": "liquidityVaultAuthorityBump", - "type": "u8" - }, - { - "name": "insuranceVault", - "type": "publicKey" - }, - { - "name": "insuranceVaultBump", - "type": "u8" - }, - { - "name": "insuranceVaultAuthorityBump", - "type": "u8" - }, - { - "name": "collectedInsuranceFeesOutstanding", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "feeVault", - "type": "publicKey" - }, - { - "name": "feeVaultBump", - "type": "u8" - }, - { - "name": "feeVaultAuthorityBump", - "type": "u8" - }, - { - "name": "collectedGroupFeesOutstanding", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "totalLiabilityShares", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "totalAssetShares", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "lastUpdate", - "type": "i64" - }, - { - "name": "config", - "type": { - "defined": "BankConfig" - } - }, - { - "name": "padding0", - "type": { - "array": [ - "u128", - 32 - ] - } - }, - { - "name": "padding1", - "type": { - "array": [ - "u128", - 32 - ] - } - } - ] - } - } - ], - "types": [ - { - "name": "GroupEventHeader", - "type": { - "kind": "struct", - "fields": [ - { - "name": "version", - "type": "string" - }, - { - "name": "signer", - "type": { - "option": "publicKey" - } - }, - { - "name": "marginfiGroup", - "type": "publicKey" - } - ] - } - }, - { - "name": "AccountEventHeader", - "type": { - "kind": "struct", - "fields": [ - { - "name": "version", - "type": "string" - }, - { - "name": "signer", - "type": "publicKey" - }, - { - "name": "marginfiAccount", - "type": "publicKey" - }, - { - "name": "marginfiGroup", - "type": "publicKey" - } - ] - } - }, - { - "name": "LendingAccount", - "type": { - "kind": "struct", - "fields": [ - { - "name": "balances", - "type": { - "array": [ - { - "defined": "Balance" - }, - 16 - ] - } - }, - { - "name": "padding", - "type": { - "array": [ - "u64", - 8 - ] - } - } - ] - } - }, - { - "name": "Balance", - "type": { - "kind": "struct", - "fields": [ - { - "name": "active", - "type": "bool" - }, - { - "name": "bankPk", - "type": "publicKey" - }, - { - "name": "assetShares", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "liabilityShares", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "padding", - "type": { - "array": [ - "u64", - 4 - ] - } - } - ] - } - }, - { - "name": "GroupConfig", - "type": { - "kind": "struct", - "fields": [ - { - "name": "admin", - "type": { - "option": "publicKey" - } - } - ] - } - }, - { - "name": "InterestRateConfig", - "type": { - "kind": "struct", - "fields": [ - { - "name": "optimalUtilizationRate", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "plateauInterestRate", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "maxInterestRate", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "insuranceFeeFixedApr", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "insuranceIrFee", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "protocolFixedFeeApr", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "protocolIrFee", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "padding", - "type": { - "array": [ - "u128", - 8 - ] - } - } - ] - } - }, - { - "name": "BankConfig", - "docs": [ - "TODO: Convert weights to (u64, u64) to avoid precision loss (maybe?)" - ], - "type": { - "kind": "struct", - "fields": [ - { - "name": "assetWeightInit", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "assetWeightMaint", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "liabilityWeightInit", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "liabilityWeightMaint", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "depositLimit", - "type": "u64" - }, - { - "name": "interestRateConfig", - "type": { - "defined": "InterestRateConfig" - } - }, - { - "name": "operationalState", - "type": { - "defined": "BankOperationalState" - } - }, - { - "name": "oracleSetup", - "type": { - "defined": "OracleSetup" - } - }, - { - "name": "oracleKeys", - "type": { - "array": [ - "publicKey", - 5 - ] - } - }, - { - "name": "borrowLimit", - "type": "u64" - }, - { - "name": "padding", - "type": { - "array": [ - "u64", - 7 - ] - } - } - ] - } - }, - { - "name": "WrappedI80F48", - "type": { - "kind": "struct", - "fields": [ - { - "name": "value", - "type": "i128" - } - ] - } - }, - { - "name": "BankConfigOpt", - "type": { - "kind": "struct", - "fields": [ - { - "name": "assetWeightInit", - "type": { - "option": { - "defined": "WrappedI80F48" - } - } - }, - { - "name": "assetWeightMaint", - "type": { - "option": { - "defined": "WrappedI80F48" - } - } - }, - { - "name": "liabilityWeightInit", - "type": { - "option": { - "defined": "WrappedI80F48" - } - } - }, - { - "name": "liabilityWeightMaint", - "type": { - "option": { - "defined": "WrappedI80F48" - } - } - }, - { - "name": "depositLimit", - "type": { - "option": "u64" - } - }, - { - "name": "borrowLimit", - "type": { - "option": "u64" - } - }, - { - "name": "operationalState", - "type": { - "option": { - "defined": "BankOperationalState" - } - } - }, - { - "name": "oracle", - "type": { - "option": { - "defined": "OracleConfig" - } - } - } - ] - } - }, - { - "name": "OracleConfig", - "type": { - "kind": "struct", - "fields": [ - { - "name": "setup", - "type": { - "defined": "OracleSetup" - } - }, - { - "name": "keys", - "type": { - "array": [ - "publicKey", - 5 - ] - } - } - ] - } - }, - { - "name": "BalanceIncreaseType", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Any" - }, - { - "name": "RepayOnly" - }, - { - "name": "DepositOnly" - } - ] - } - }, - { - "name": "BalanceDecreaseType", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Any" - }, - { - "name": "WithdrawOnly" - }, - { - "name": "BorrowOnly" - }, - { - "name": "BypassBorrowLimit" - } - ] - } - }, - { - "name": "WeightType", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Initial" - }, - { - "name": "Maintenance" - } - ] - } - }, - { - "name": "BalanceSide", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Assets" - }, - { - "name": "Liabilities" - } - ] - } - }, - { - "name": "RiskRequirementType", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Initial" - }, - { - "name": "Maintenance" - } - ] - } - }, - { - "name": "BankOperationalState", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Paused" - }, - { - "name": "Operational" - }, - { - "name": "ReduceOnly" - } - ] - } - }, - { - "name": "OracleSetup", - "type": { - "kind": "enum", - "variants": [ - { - "name": "None" - }, - { - "name": "Pyth" - } - ] - } - }, - { - "name": "OracleKey", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Pyth", - "fields": [ - "publicKey" - ] - } - ] - } - }, - { - "name": "BankVaultType", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Liquidity" - }, - { - "name": "Insurance" - }, - { - "name": "Fee" - } - ] - } - } - ], - "events": [ - { - "name": "LendingPoolBankAddEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "GroupEventHeader" - }, - "index": false - }, - { - "name": "bank", - "type": "publicKey", - "index": false - }, - { - "name": "mint", - "type": "publicKey", - "index": false - } - ] - }, - { - "name": "LendingPoolBankAccrueInterestEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "GroupEventHeader" - }, - "index": false - }, - { - "name": "mint", - "type": "publicKey", - "index": false - }, - { - "name": "delta", - "type": "u64", - "index": false - }, - { - "name": "feesCollected", - "type": "f64", - "index": false - }, - { - "name": "insuranceCollected", - "type": "f64", - "index": false - } - ] - }, - { - "name": "MarginfiAccountCreateEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "AccountEventHeader" - }, - "index": false - } - ] - }, - { - "name": "LendingAccountDepositEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "AccountEventHeader" - }, - "index": false - }, - { - "name": "bank", - "type": "publicKey", - "index": false - }, - { - "name": "mint", - "type": "publicKey", - "index": false - }, - { - "name": "amount", - "type": "u64", - "index": false - } - ] - }, - { - "name": "LendingAccountRepayEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "AccountEventHeader" - }, - "index": false - }, - { - "name": "bank", - "type": "publicKey", - "index": false - }, - { - "name": "mint", - "type": "publicKey", - "index": false - }, - { - "name": "amount", - "type": "u64", - "index": false - }, - { - "name": "closeBalance", - "type": "bool", - "index": false - } - ] - }, - { - "name": "LendingAccountBorrowEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "AccountEventHeader" - }, - "index": false - }, - { - "name": "bank", - "type": "publicKey", - "index": false - }, - { - "name": "mint", - "type": "publicKey", - "index": false - }, - { - "name": "amount", - "type": "u64", - "index": false - } - ] - }, - { - "name": "LendingAccountWithdrawEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "AccountEventHeader" - }, - "index": false - }, - { - "name": "bank", - "type": "publicKey", - "index": false - }, - { - "name": "mint", - "type": "publicKey", - "index": false - }, - { - "name": "amount", - "type": "u64", - "index": false - }, - { - "name": "closeBalance", - "type": "bool", - "index": false - } - ] - } - ], - "errors": [ - { - "code": 6000, - "name": "MathError", - "msg": "Math error" - }, - { - "code": 6001, - "name": "BankNotFound", - "msg": "Invalid bank index" - }, - { - "code": 6002, - "name": "LendingAccountBalanceNotFound", - "msg": "Lending account balance not found" - }, - { - "code": 6003, - "name": "BankAssetCapacityExceeded", - "msg": "Bank deposit capacity exceeded" - }, - { - "code": 6004, - "name": "InvalidTransfer", - "msg": "Invalid transfer" - }, - { - "code": 6005, - "name": "MissingPythOrBankAccount", - "msg": "Missing Pyth or Bank account" - }, - { - "code": 6006, - "name": "MissingPythAccount", - "msg": "Missing Pyth account" - }, - { - "code": 6007, - "name": "InvalidOracleAccount", - "msg": "Invalid Pyth account" - }, - { - "code": 6008, - "name": "MissingBankAccount", - "msg": "Missing Bank account" - }, - { - "code": 6009, - "name": "InvalidBankAccount", - "msg": "Invalid Bank account" - }, - { - "code": 6010, - "name": "BadAccountHealth", - "msg": "Bad account health" - }, - { - "code": 6011, - "name": "LendingAccountBalanceSlotsFull", - "msg": "Lending account balance slots are full" - }, - { - "code": 6012, - "name": "BankAlreadyExists", - "msg": "Bank already exists" - }, - { - "code": 6013, - "name": "IllegalLiquidation", - "msg": "Illegal post liquidation state, account is either not unhealthy or liquidation was too big" - }, - { - "code": 6014, - "name": "AccountNotBankrupt", - "msg": "Account is not bankrupt" - }, - { - "code": 6015, - "name": "BalanceNotBadDebt", - "msg": "Account balance is not bad debt" - }, - { - "code": 6016, - "name": "InvalidConfig", - "msg": "Invalid group config" - }, - { - "code": 6017, - "name": "StaleOracle", - "msg": "Stale oracle data" - }, - { - "code": 6018, - "name": "BankPaused", - "msg": "Bank paused" - }, - { - "code": 6019, - "name": "BankReduceOnly", - "msg": "Bank is ReduceOnly mode" - }, - { - "code": 6020, - "name": "BankAccoutNotFound", - "msg": "Bank is missing" - }, - { - "code": 6021, - "name": "OperationDepositOnly", - "msg": "Operation is deposit-only" - }, - { - "code": 6022, - "name": "OperationWithdrawOnly", - "msg": "Operation is withdraw-only" - }, - { - "code": 6023, - "name": "OperationBorrowOnly", - "msg": "Operation is borrow-only" - }, - { - "code": 6024, - "name": "OperationRepayOnly", - "msg": "Operation is repay-only" - }, - { - "code": 6025, - "name": "NoAssetFound", - "msg": "No asset found" - }, - { - "code": 6026, - "name": "NoLiabilityFound", - "msg": "No liability found" - }, - { - "code": 6027, - "name": "InvalidOracleSetup", - "msg": "Invalid oracle setup" - }, - { - "code": 6028, - "name": "IllegalUtilizationRatio", - "msg": "Invalid bank utilization ratio" - }, - { - "code": 6029, - "name": "BankLiabilityCapacityExceeded", - "msg": "Bank borrow cap exceeded" - } - ] -} \ No newline at end of file diff --git a/observability/etl/dataflow-etls/dataflow_etls/idls/devnet/A7vUDErNPCTt9qrB6SSM4F6GkxzUe9d8P3cXSmRg4eY4/marginfi-v1.json b/observability/etl/dataflow-etls/dataflow_etls/idls/devnet/A7vUDErNPCTt9qrB6SSM4F6GkxzUe9d8P3cXSmRg4eY4/marginfi-v1.json deleted file mode 100644 index 2d27f7a88..000000000 --- a/observability/etl/dataflow-etls/dataflow_etls/idls/devnet/A7vUDErNPCTt9qrB6SSM4F6GkxzUe9d8P3cXSmRg4eY4/marginfi-v1.json +++ /dev/null @@ -1,1907 +0,0 @@ -{ - "version": "0.1.0", - "name": "marginfi", - "instructions": [ - { - "name": "marginfiGroupInitialize", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": true, - "isSigner": true - }, - { - "name": "admin", - "isMut": true, - "isSigner": true - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [] - }, - { - "name": "marginfiGroupConfigure", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": true, - "isSigner": false - }, - { - "name": "admin", - "isMut": false, - "isSigner": true - } - ], - "args": [ - { - "name": "config", - "type": { - "defined": "GroupConfig" - } - } - ] - }, - { - "name": "lendingPoolAddBank", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "admin", - "isMut": true, - "isSigner": true - }, - { - "name": "bankMint", - "isMut": false, - "isSigner": false - }, - { - "name": "bank", - "isMut": true, - "isSigner": true - }, - { - "name": "liquidityVaultAuthority", - "isMut": false, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault_auth" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "liquidityVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "insuranceVaultAuthority", - "isMut": false, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "insurance_vault_auth" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "insuranceVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "insurance_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "feeVaultAuthority", - "isMut": false, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "fee_vault_auth" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "feeVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "fee_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "rent", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "bankConfig", - "type": { - "defined": "BankConfig" - } - } - ] - }, - { - "name": "lendingPoolConfigureBank", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "admin", - "isMut": false, - "isSigner": true - }, - { - "name": "bank", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "bankConfigOpt", - "type": { - "defined": "BankConfigOpt" - } - } - ] - }, - { - "name": "lendingPoolHandleBankruptcy", - "docs": [ - "Handle bad debt of a bankrupt marginfi account for a given bank." - ], - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "admin", - "isMut": false, - "isSigner": true - }, - { - "name": "bank", - "isMut": true, - "isSigner": false - }, - { - "name": "marginfiAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "liquidityVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "insuranceVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "insurance_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "insuranceVaultAuthority", - "isMut": false, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "insurance_vault_auth" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [] - }, - { - "name": "marginfiAccountInitialize", - "docs": [ - "Initialize a marginfi account for a given group" - ], - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "marginfiAccount", - "isMut": true, - "isSigner": true - }, - { - "name": "authority", - "isMut": false, - "isSigner": true - }, - { - "name": "feePayer", - "isMut": true, - "isSigner": true - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [] - }, - { - "name": "lendingAccountDeposit", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "marginfiAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "signer", - "isMut": false, - "isSigner": true - }, - { - "name": "bank", - "isMut": true, - "isSigner": false - }, - { - "name": "signerTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "bankLiquidityVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "amount", - "type": "u64" - } - ] - }, - { - "name": "lendingAccountRepay", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "marginfiAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "signer", - "isMut": false, - "isSigner": true - }, - { - "name": "bank", - "isMut": true, - "isSigner": false - }, - { - "name": "signerTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "bankLiquidityVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "amount", - "type": "u64" - }, - { - "name": "repayAll", - "type": { - "option": "bool" - } - } - ] - }, - { - "name": "lendingAccountWithdraw", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "marginfiAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "signer", - "isMut": false, - "isSigner": true - }, - { - "name": "bank", - "isMut": true, - "isSigner": false - }, - { - "name": "destinationTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "bankLiquidityVaultAuthority", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault_auth" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "bankLiquidityVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "amount", - "type": "u64" - }, - { - "name": "withdrawAll", - "type": { - "option": "bool" - } - } - ] - }, - { - "name": "lendingAccountBorrow", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "marginfiAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "signer", - "isMut": false, - "isSigner": true - }, - { - "name": "bank", - "isMut": true, - "isSigner": false - }, - { - "name": "destinationTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "bankLiquidityVaultAuthority", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault_auth" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "bankLiquidityVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "amount", - "type": "u64" - } - ] - }, - { - "name": "lendingAccountLiquidate", - "docs": [ - "Liquidate a lending account balance of an unhealthy marginfi account" - ], - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "assetBank", - "isMut": true, - "isSigner": false - }, - { - "name": "liabBank", - "isMut": true, - "isSigner": false - }, - { - "name": "liquidatorMarginfiAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "signer", - "isMut": false, - "isSigner": true - }, - { - "name": "liquidateeMarginfiAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "bankLiquidityVaultAuthority", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault_auth" - }, - { - "kind": "account", - "type": "publicKey", - "path": "liab_bank" - } - ] - } - }, - { - "name": "bankLiquidityVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "liab_bank" - } - ] - } - }, - { - "name": "bankInsuranceVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "insurance_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "liab_bank" - } - ] - } - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "assetAmount", - "type": "u64" - } - ] - }, - { - "name": "lendingPoolAccrueBankInterest", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "bank", - "isMut": true, - "isSigner": false - } - ], - "args": [] - }, - { - "name": "lendingPoolCollectBankFees", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "bank", - "isMut": true, - "isSigner": false - }, - { - "name": "liquidityVaultAuthority", - "isMut": false, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault_auth" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "liquidityVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "insuranceVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "insurance_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "feeVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "fee_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [] - } - ], - "accounts": [ - { - "name": "MarginfiAccount", - "type": { - "kind": "struct", - "fields": [ - { - "name": "group", - "type": "publicKey" - }, - { - "name": "authority", - "type": "publicKey" - }, - { - "name": "lendingAccount", - "type": { - "defined": "LendingAccount" - } - }, - { - "name": "padding", - "type": { - "array": [ - "u64", - 64 - ] - } - } - ] - } - }, - { - "name": "MarginfiGroup", - "type": { - "kind": "struct", - "fields": [ - { - "name": "admin", - "type": "publicKey" - }, - { - "name": "padding0", - "type": { - "array": [ - "u128", - 32 - ] - } - }, - { - "name": "padding1", - "type": { - "array": [ - "u128", - 32 - ] - } - } - ] - } - }, - { - "name": "Bank", - "type": { - "kind": "struct", - "fields": [ - { - "name": "mint", - "type": "publicKey" - }, - { - "name": "mintDecimals", - "type": "u8" - }, - { - "name": "group", - "type": "publicKey" - }, - { - "name": "assetShareValue", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "liabilityShareValue", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "liquidityVault", - "type": "publicKey" - }, - { - "name": "liquidityVaultBump", - "type": "u8" - }, - { - "name": "liquidityVaultAuthorityBump", - "type": "u8" - }, - { - "name": "insuranceVault", - "type": "publicKey" - }, - { - "name": "insuranceVaultBump", - "type": "u8" - }, - { - "name": "insuranceVaultAuthorityBump", - "type": "u8" - }, - { - "name": "collectedInsuranceFeesOutstanding", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "feeVault", - "type": "publicKey" - }, - { - "name": "feeVaultBump", - "type": "u8" - }, - { - "name": "feeVaultAuthorityBump", - "type": "u8" - }, - { - "name": "collectedGroupFeesOutstanding", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "totalLiabilityShares", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "totalAssetShares", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "lastUpdate", - "type": "i64" - }, - { - "name": "config", - "type": { - "defined": "BankConfig" - } - }, - { - "name": "padding0", - "type": { - "array": [ - "u128", - 32 - ] - } - }, - { - "name": "padding1", - "type": { - "array": [ - "u128", - 32 - ] - } - } - ] - } - } - ], - "types": [ - { - "name": "GroupEventHeader", - "type": { - "kind": "struct", - "fields": [ - { - "name": "version", - "type": "u16" - }, - { - "name": "signer", - "type": { - "option": "publicKey" - } - }, - { - "name": "marginfiGroup", - "type": "publicKey" - } - ] - } - }, - { - "name": "AccountEventHeader", - "type": { - "kind": "struct", - "fields": [ - { - "name": "version", - "type": "u16" - }, - { - "name": "signer", - "type": "publicKey" - }, - { - "name": "marginfiAccount", - "type": "publicKey" - }, - { - "name": "marginfiGroup", - "type": "publicKey" - } - ] - } - }, - { - "name": "LendingAccount", - "type": { - "kind": "struct", - "fields": [ - { - "name": "balances", - "type": { - "array": [ - { - "defined": "Balance" - }, - 16 - ] - } - }, - { - "name": "padding", - "type": { - "array": [ - "u64", - 8 - ] - } - } - ] - } - }, - { - "name": "Balance", - "type": { - "kind": "struct", - "fields": [ - { - "name": "active", - "type": "bool" - }, - { - "name": "bankPk", - "type": "publicKey" - }, - { - "name": "assetShares", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "liabilityShares", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "padding", - "type": { - "array": [ - "u64", - 4 - ] - } - } - ] - } - }, - { - "name": "GroupConfig", - "type": { - "kind": "struct", - "fields": [ - { - "name": "admin", - "type": { - "option": "publicKey" - } - } - ] - } - }, - { - "name": "InterestRateConfig", - "type": { - "kind": "struct", - "fields": [ - { - "name": "optimalUtilizationRate", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "plateauInterestRate", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "maxInterestRate", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "insuranceFeeFixedApr", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "insuranceIrFee", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "protocolFixedFeeApr", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "protocolIrFee", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "padding", - "type": { - "array": [ - "u128", - 8 - ] - } - } - ] - } - }, - { - "name": "BankConfig", - "docs": [ - "TODO: Convert weights to (u64, u64) to avoid precision loss (maybe?)" - ], - "type": { - "kind": "struct", - "fields": [ - { - "name": "assetWeightInit", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "assetWeightMaint", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "liabilityWeightInit", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "liabilityWeightMaint", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "depositLimit", - "type": "u64" - }, - { - "name": "interestRateConfig", - "type": { - "defined": "InterestRateConfig" - } - }, - { - "name": "operationalState", - "type": { - "defined": "BankOperationalState" - } - }, - { - "name": "oracleSetup", - "type": { - "defined": "OracleSetup" - } - }, - { - "name": "oracleKeys", - "type": { - "array": [ - "publicKey", - 5 - ] - } - }, - { - "name": "borrowLimit", - "type": "u64" - }, - { - "name": "padding", - "type": { - "array": [ - "u64", - 7 - ] - } - } - ] - } - }, - { - "name": "WrappedI80F48", - "type": { - "kind": "struct", - "fields": [ - { - "name": "value", - "type": "i128" - } - ] - } - }, - { - "name": "BankConfigOpt", - "type": { - "kind": "struct", - "fields": [ - { - "name": "assetWeightInit", - "type": { - "option": { - "defined": "WrappedI80F48" - } - } - }, - { - "name": "assetWeightMaint", - "type": { - "option": { - "defined": "WrappedI80F48" - } - } - }, - { - "name": "liabilityWeightInit", - "type": { - "option": { - "defined": "WrappedI80F48" - } - } - }, - { - "name": "liabilityWeightMaint", - "type": { - "option": { - "defined": "WrappedI80F48" - } - } - }, - { - "name": "depositLimit", - "type": { - "option": "u64" - } - }, - { - "name": "borrowLimit", - "type": { - "option": "u64" - } - }, - { - "name": "operationalState", - "type": { - "option": { - "defined": "BankOperationalState" - } - } - }, - { - "name": "oracle", - "type": { - "option": { - "defined": "OracleConfig" - } - } - } - ] - } - }, - { - "name": "OracleConfig", - "type": { - "kind": "struct", - "fields": [ - { - "name": "setup", - "type": { - "defined": "OracleSetup" - } - }, - { - "name": "keys", - "type": { - "array": [ - "publicKey", - 5 - ] - } - } - ] - } - }, - { - "name": "BalanceIncreaseType", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Any" - }, - { - "name": "RepayOnly" - }, - { - "name": "DepositOnly" - } - ] - } - }, - { - "name": "BalanceDecreaseType", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Any" - }, - { - "name": "WithdrawOnly" - }, - { - "name": "BorrowOnly" - }, - { - "name": "BypassBorrowLimit" - } - ] - } - }, - { - "name": "WeightType", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Initial" - }, - { - "name": "Maintenance" - } - ] - } - }, - { - "name": "BalanceSide", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Assets" - }, - { - "name": "Liabilities" - } - ] - } - }, - { - "name": "RiskRequirementType", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Initial" - }, - { - "name": "Maintenance" - } - ] - } - }, - { - "name": "BankOperationalState", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Paused" - }, - { - "name": "Operational" - }, - { - "name": "ReduceOnly" - } - ] - } - }, - { - "name": "OracleSetup", - "type": { - "kind": "enum", - "variants": [ - { - "name": "None" - }, - { - "name": "Pyth" - } - ] - } - }, - { - "name": "OracleKey", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Pyth", - "fields": [ - "publicKey" - ] - } - ] - } - }, - { - "name": "BankVaultType", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Liquidity" - }, - { - "name": "Insurance" - }, - { - "name": "Fee" - } - ] - } - } - ], - "events": [ - { - "name": "LendingPoolBankAddEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "GroupEventHeader" - }, - "index": false - }, - { - "name": "bank", - "type": "publicKey", - "index": false - }, - { - "name": "mint", - "type": "publicKey", - "index": false - } - ] - }, - { - "name": "LendingPoolBankAccrueInterestEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "GroupEventHeader" - }, - "index": false - }, - { - "name": "mint", - "type": "publicKey", - "index": false - }, - { - "name": "delta", - "type": "u64", - "index": false - }, - { - "name": "feesCollected", - "type": "f64", - "index": false - }, - { - "name": "insuranceCollected", - "type": "f64", - "index": false - } - ] - }, - { - "name": "MarginfiAccountCreateEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "AccountEventHeader" - }, - "index": false - } - ] - }, - { - "name": "LendingAccountDepositEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "AccountEventHeader" - }, - "index": false - }, - { - "name": "bank", - "type": "publicKey", - "index": false - }, - { - "name": "mint", - "type": "publicKey", - "index": false - }, - { - "name": "amount", - "type": "u64", - "index": false - } - ] - }, - { - "name": "LendingAccountRepayEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "AccountEventHeader" - }, - "index": false - }, - { - "name": "bank", - "type": "publicKey", - "index": false - }, - { - "name": "mint", - "type": "publicKey", - "index": false - }, - { - "name": "amount", - "type": "u64", - "index": false - }, - { - "name": "closeBalance", - "type": "bool", - "index": false - } - ] - }, - { - "name": "LendingAccountBorrowEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "AccountEventHeader" - }, - "index": false - }, - { - "name": "bank", - "type": "publicKey", - "index": false - }, - { - "name": "mint", - "type": "publicKey", - "index": false - }, - { - "name": "amount", - "type": "u64", - "index": false - } - ] - }, - { - "name": "LendingAccountWithdrawEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "AccountEventHeader" - }, - "index": false - }, - { - "name": "bank", - "type": "publicKey", - "index": false - }, - { - "name": "mint", - "type": "publicKey", - "index": false - }, - { - "name": "amount", - "type": "u64", - "index": false - }, - { - "name": "closeBalance", - "type": "bool", - "index": false - } - ] - } - ], - "errors": [ - { - "code": 6000, - "name": "MathError", - "msg": "Math error" - }, - { - "code": 6001, - "name": "BankNotFound", - "msg": "Invalid bank index" - }, - { - "code": 6002, - "name": "LendingAccountBalanceNotFound", - "msg": "Lending account balance not found" - }, - { - "code": 6003, - "name": "BankAssetCapacityExceeded", - "msg": "Bank deposit capacity exceeded" - }, - { - "code": 6004, - "name": "InvalidTransfer", - "msg": "Invalid transfer" - }, - { - "code": 6005, - "name": "MissingPythOrBankAccount", - "msg": "Missing Pyth or Bank account" - }, - { - "code": 6006, - "name": "MissingPythAccount", - "msg": "Missing Pyth account" - }, - { - "code": 6007, - "name": "InvalidOracleAccount", - "msg": "Invalid Pyth account" - }, - { - "code": 6008, - "name": "MissingBankAccount", - "msg": "Missing Bank account" - }, - { - "code": 6009, - "name": "InvalidBankAccount", - "msg": "Invalid Bank account" - }, - { - "code": 6010, - "name": "BadAccountHealth", - "msg": "Bad account health" - }, - { - "code": 6011, - "name": "LendingAccountBalanceSlotsFull", - "msg": "Lending account balance slots are full" - }, - { - "code": 6012, - "name": "BankAlreadyExists", - "msg": "Bank already exists" - }, - { - "code": 6013, - "name": "IllegalLiquidation", - "msg": "Illegal post liquidation state, account is either not unhealthy or liquidation was too big" - }, - { - "code": 6014, - "name": "AccountNotBankrupt", - "msg": "Account is not bankrupt" - }, - { - "code": 6015, - "name": "BalanceNotBadDebt", - "msg": "Account balance is not bad debt" - }, - { - "code": 6016, - "name": "InvalidConfig", - "msg": "Invalid group config" - }, - { - "code": 6017, - "name": "StaleOracle", - "msg": "Stale oracle data" - }, - { - "code": 6018, - "name": "BankPaused", - "msg": "Bank paused" - }, - { - "code": 6019, - "name": "BankReduceOnly", - "msg": "Bank is ReduceOnly mode" - }, - { - "code": 6020, - "name": "BankAccoutNotFound", - "msg": "Bank is missing" - }, - { - "code": 6021, - "name": "OperationDepositOnly", - "msg": "Operation is deposit-only" - }, - { - "code": 6022, - "name": "OperationWithdrawOnly", - "msg": "Operation is withdraw-only" - }, - { - "code": 6023, - "name": "OperationBorrowOnly", - "msg": "Operation is borrow-only" - }, - { - "code": 6024, - "name": "OperationRepayOnly", - "msg": "Operation is repay-only" - }, - { - "code": 6025, - "name": "NoAssetFound", - "msg": "No asset found" - }, - { - "code": 6026, - "name": "NoLiabilityFound", - "msg": "No liability found" - }, - { - "code": 6027, - "name": "InvalidOracleSetup", - "msg": "Invalid oracle setup" - }, - { - "code": 6028, - "name": "IllegalUtilizationRatio", - "msg": "Invalid bank utilization ratio" - }, - { - "code": 6029, - "name": "BankLiabilityCapacityExceeded", - "msg": "Bank borrow cap exceeded" - } - ], - "metadata": { - "address": "A7vUDErNPCTt9qrB6SSM4F6GkxzUe9d8P3cXSmRg4eY4" - } -} \ No newline at end of file diff --git a/observability/etl/dataflow-etls/dataflow_etls/idls/devnet/A7vUDErNPCTt9qrB6SSM4F6GkxzUe9d8P3cXSmRg4eY4/marginfi-v2.json b/observability/etl/dataflow-etls/dataflow_etls/idls/devnet/A7vUDErNPCTt9qrB6SSM4F6GkxzUe9d8P3cXSmRg4eY4/marginfi-v2.json deleted file mode 100644 index e1cfe965e..000000000 --- a/observability/etl/dataflow-etls/dataflow_etls/idls/devnet/A7vUDErNPCTt9qrB6SSM4F6GkxzUe9d8P3cXSmRg4eY4/marginfi-v2.json +++ /dev/null @@ -1,1899 +0,0 @@ -{ - "version": "0.1.0", - "name": "marginfi", - "instructions": [ - { - "name": "marginfiGroupInitialize", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": true, - "isSigner": true - }, - { - "name": "admin", - "isMut": true, - "isSigner": true - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [] - }, - { - "name": "marginfiGroupConfigure", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": true, - "isSigner": false - }, - { - "name": "admin", - "isMut": false, - "isSigner": true - } - ], - "args": [ - { - "name": "config", - "type": { - "defined": "GroupConfig" - } - } - ] - }, - { - "name": "lendingPoolAddBank", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "admin", - "isMut": true, - "isSigner": true - }, - { - "name": "bankMint", - "isMut": false, - "isSigner": false - }, - { - "name": "bank", - "isMut": true, - "isSigner": true - }, - { - "name": "liquidityVaultAuthority", - "isMut": false, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault_auth" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "liquidityVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "insuranceVaultAuthority", - "isMut": false, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "insurance_vault_auth" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "insuranceVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "insurance_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "feeVaultAuthority", - "isMut": false, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "fee_vault_auth" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "feeVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "fee_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "rent", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "bankConfig", - "type": { - "defined": "BankConfig" - } - } - ] - }, - { - "name": "lendingPoolConfigureBank", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "admin", - "isMut": false, - "isSigner": true - }, - { - "name": "bank", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "bankConfigOpt", - "type": { - "defined": "BankConfigOpt" - } - } - ] - }, - { - "name": "lendingPoolHandleBankruptcy", - "docs": [ - "Handle bad debt of a bankrupt marginfi account for a given bank." - ], - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "admin", - "isMut": false, - "isSigner": true - }, - { - "name": "bank", - "isMut": true, - "isSigner": false - }, - { - "name": "marginfiAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "liquidityVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "insuranceVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "insurance_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "insuranceVaultAuthority", - "isMut": false, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "insurance_vault_auth" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [] - }, - { - "name": "marginfiAccountInitialize", - "docs": [ - "Initialize a marginfi account for a given group" - ], - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "marginfiAccount", - "isMut": true, - "isSigner": true - }, - { - "name": "authority", - "isMut": false, - "isSigner": true - }, - { - "name": "feePayer", - "isMut": true, - "isSigner": true - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [] - }, - { - "name": "lendingAccountDeposit", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "marginfiAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "signer", - "isMut": false, - "isSigner": true - }, - { - "name": "bank", - "isMut": true, - "isSigner": false - }, - { - "name": "signerTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "bankLiquidityVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "amount", - "type": "u64" - } - ] - }, - { - "name": "lendingAccountRepay", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "marginfiAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "signer", - "isMut": false, - "isSigner": true - }, - { - "name": "bank", - "isMut": true, - "isSigner": false - }, - { - "name": "signerTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "bankLiquidityVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "amount", - "type": "u64" - }, - { - "name": "repayAll", - "type": { - "option": "bool" - } - } - ] - }, - { - "name": "lendingAccountWithdraw", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "marginfiAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "signer", - "isMut": false, - "isSigner": true - }, - { - "name": "bank", - "isMut": true, - "isSigner": false - }, - { - "name": "destinationTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "bankLiquidityVaultAuthority", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault_auth" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "bankLiquidityVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "amount", - "type": "u64" - }, - { - "name": "withdrawAll", - "type": { - "option": "bool" - } - } - ] - }, - { - "name": "lendingAccountBorrow", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "marginfiAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "signer", - "isMut": false, - "isSigner": true - }, - { - "name": "bank", - "isMut": true, - "isSigner": false - }, - { - "name": "destinationTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "bankLiquidityVaultAuthority", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault_auth" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "bankLiquidityVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "amount", - "type": "u64" - } - ] - }, - { - "name": "lendingAccountLiquidate", - "docs": [ - "Liquidate a lending account balance of an unhealthy marginfi account" - ], - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "assetBank", - "isMut": true, - "isSigner": false - }, - { - "name": "liabBank", - "isMut": true, - "isSigner": false - }, - { - "name": "liquidatorMarginfiAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "signer", - "isMut": false, - "isSigner": true - }, - { - "name": "liquidateeMarginfiAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "bankLiquidityVaultAuthority", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault_auth" - }, - { - "kind": "account", - "type": "publicKey", - "path": "liab_bank" - } - ] - } - }, - { - "name": "bankLiquidityVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "liab_bank" - } - ] - } - }, - { - "name": "bankInsuranceVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "insurance_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "liab_bank" - } - ] - } - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "assetAmount", - "type": "u64" - } - ] - }, - { - "name": "lendingPoolAccrueBankInterest", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "bank", - "isMut": true, - "isSigner": false - } - ], - "args": [] - }, - { - "name": "lendingPoolCollectBankFees", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "bank", - "isMut": true, - "isSigner": false - }, - { - "name": "liquidityVaultAuthority", - "isMut": false, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault_auth" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "liquidityVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "insuranceVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "insurance_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "feeVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "fee_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [] - } - ], - "accounts": [ - { - "name": "MarginfiAccount", - "type": { - "kind": "struct", - "fields": [ - { - "name": "group", - "type": "publicKey" - }, - { - "name": "authority", - "type": "publicKey" - }, - { - "name": "lendingAccount", - "type": { - "defined": "LendingAccount" - } - }, - { - "name": "padding", - "type": { - "array": [ - "u64", - 64 - ] - } - } - ] - } - }, - { - "name": "MarginfiGroup", - "type": { - "kind": "struct", - "fields": [ - { - "name": "admin", - "type": "publicKey" - }, - { - "name": "padding0", - "type": { - "array": [ - "u128", - 32 - ] - } - }, - { - "name": "padding1", - "type": { - "array": [ - "u128", - 32 - ] - } - } - ] - } - }, - { - "name": "Bank", - "type": { - "kind": "struct", - "fields": [ - { - "name": "mint", - "type": "publicKey" - }, - { - "name": "mintDecimals", - "type": "u8" - }, - { - "name": "group", - "type": "publicKey" - }, - { - "name": "assetShareValue", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "liabilityShareValue", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "liquidityVault", - "type": "publicKey" - }, - { - "name": "liquidityVaultBump", - "type": "u8" - }, - { - "name": "liquidityVaultAuthorityBump", - "type": "u8" - }, - { - "name": "insuranceVault", - "type": "publicKey" - }, - { - "name": "insuranceVaultBump", - "type": "u8" - }, - { - "name": "insuranceVaultAuthorityBump", - "type": "u8" - }, - { - "name": "collectedInsuranceFeesOutstanding", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "feeVault", - "type": "publicKey" - }, - { - "name": "feeVaultBump", - "type": "u8" - }, - { - "name": "feeVaultAuthorityBump", - "type": "u8" - }, - { - "name": "collectedGroupFeesOutstanding", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "totalLiabilityShares", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "totalAssetShares", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "lastUpdate", - "type": "i64" - }, - { - "name": "config", - "type": { - "defined": "BankConfig" - } - }, - { - "name": "padding0", - "type": { - "array": [ - "u128", - 32 - ] - } - }, - { - "name": "padding1", - "type": { - "array": [ - "u128", - 32 - ] - } - } - ] - } - } - ], - "types": [ - { - "name": "GroupEventHeader", - "type": { - "kind": "struct", - "fields": [ - { - "name": "signer", - "type": { - "option": "publicKey" - } - }, - { - "name": "marginfiGroup", - "type": "publicKey" - } - ] - } - }, - { - "name": "AccountEventHeader", - "type": { - "kind": "struct", - "fields": [ - { - "name": "signer", - "type": "publicKey" - }, - { - "name": "marginfiAccount", - "type": "publicKey" - }, - { - "name": "marginfiGroup", - "type": "publicKey" - } - ] - } - }, - { - "name": "LendingAccount", - "type": { - "kind": "struct", - "fields": [ - { - "name": "balances", - "type": { - "array": [ - { - "defined": "Balance" - }, - 16 - ] - } - }, - { - "name": "padding", - "type": { - "array": [ - "u64", - 8 - ] - } - } - ] - } - }, - { - "name": "Balance", - "type": { - "kind": "struct", - "fields": [ - { - "name": "active", - "type": "bool" - }, - { - "name": "bankPk", - "type": "publicKey" - }, - { - "name": "assetShares", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "liabilityShares", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "padding", - "type": { - "array": [ - "u64", - 4 - ] - } - } - ] - } - }, - { - "name": "GroupConfig", - "type": { - "kind": "struct", - "fields": [ - { - "name": "admin", - "type": { - "option": "publicKey" - } - } - ] - } - }, - { - "name": "InterestRateConfig", - "type": { - "kind": "struct", - "fields": [ - { - "name": "optimalUtilizationRate", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "plateauInterestRate", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "maxInterestRate", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "insuranceFeeFixedApr", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "insuranceIrFee", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "protocolFixedFeeApr", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "protocolIrFee", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "padding", - "type": { - "array": [ - "u128", - 8 - ] - } - } - ] - } - }, - { - "name": "BankConfig", - "docs": [ - "TODO: Convert weights to (u64, u64) to avoid precision loss (maybe?)" - ], - "type": { - "kind": "struct", - "fields": [ - { - "name": "assetWeightInit", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "assetWeightMaint", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "liabilityWeightInit", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "liabilityWeightMaint", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "depositLimit", - "type": "u64" - }, - { - "name": "interestRateConfig", - "type": { - "defined": "InterestRateConfig" - } - }, - { - "name": "operationalState", - "type": { - "defined": "BankOperationalState" - } - }, - { - "name": "oracleSetup", - "type": { - "defined": "OracleSetup" - } - }, - { - "name": "oracleKeys", - "type": { - "array": [ - "publicKey", - 5 - ] - } - }, - { - "name": "borrowLimit", - "type": "u64" - }, - { - "name": "padding", - "type": { - "array": [ - "u64", - 7 - ] - } - } - ] - } - }, - { - "name": "WrappedI80F48", - "type": { - "kind": "struct", - "fields": [ - { - "name": "value", - "type": "i128" - } - ] - } - }, - { - "name": "BankConfigOpt", - "type": { - "kind": "struct", - "fields": [ - { - "name": "assetWeightInit", - "type": { - "option": { - "defined": "WrappedI80F48" - } - } - }, - { - "name": "assetWeightMaint", - "type": { - "option": { - "defined": "WrappedI80F48" - } - } - }, - { - "name": "liabilityWeightInit", - "type": { - "option": { - "defined": "WrappedI80F48" - } - } - }, - { - "name": "liabilityWeightMaint", - "type": { - "option": { - "defined": "WrappedI80F48" - } - } - }, - { - "name": "depositLimit", - "type": { - "option": "u64" - } - }, - { - "name": "borrowLimit", - "type": { - "option": "u64" - } - }, - { - "name": "operationalState", - "type": { - "option": { - "defined": "BankOperationalState" - } - } - }, - { - "name": "oracle", - "type": { - "option": { - "defined": "OracleConfig" - } - } - } - ] - } - }, - { - "name": "OracleConfig", - "type": { - "kind": "struct", - "fields": [ - { - "name": "setup", - "type": { - "defined": "OracleSetup" - } - }, - { - "name": "keys", - "type": { - "array": [ - "publicKey", - 5 - ] - } - } - ] - } - }, - { - "name": "BalanceIncreaseType", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Any" - }, - { - "name": "RepayOnly" - }, - { - "name": "DepositOnly" - } - ] - } - }, - { - "name": "BalanceDecreaseType", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Any" - }, - { - "name": "WithdrawOnly" - }, - { - "name": "BorrowOnly" - }, - { - "name": "BypassBorrowLimit" - } - ] - } - }, - { - "name": "WeightType", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Initial" - }, - { - "name": "Maintenance" - } - ] - } - }, - { - "name": "BalanceSide", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Assets" - }, - { - "name": "Liabilities" - } - ] - } - }, - { - "name": "RiskRequirementType", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Initial" - }, - { - "name": "Maintenance" - } - ] - } - }, - { - "name": "BankOperationalState", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Paused" - }, - { - "name": "Operational" - }, - { - "name": "ReduceOnly" - } - ] - } - }, - { - "name": "OracleSetup", - "type": { - "kind": "enum", - "variants": [ - { - "name": "None" - }, - { - "name": "Pyth" - } - ] - } - }, - { - "name": "OracleKey", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Pyth", - "fields": [ - "publicKey" - ] - } - ] - } - }, - { - "name": "BankVaultType", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Liquidity" - }, - { - "name": "Insurance" - }, - { - "name": "Fee" - } - ] - } - } - ], - "events": [ - { - "name": "LendingPoolBankAddEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "GroupEventHeader" - }, - "index": false - }, - { - "name": "bank", - "type": "publicKey", - "index": false - }, - { - "name": "mint", - "type": "publicKey", - "index": false - } - ] - }, - { - "name": "LendingPoolBankAccrueInterestEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "GroupEventHeader" - }, - "index": false - }, - { - "name": "mint", - "type": "publicKey", - "index": false - }, - { - "name": "delta", - "type": "u64", - "index": false - }, - { - "name": "feesCollected", - "type": "f64", - "index": false - }, - { - "name": "insuranceCollected", - "type": "f64", - "index": false - } - ] - }, - { - "name": "MarginfiAccountCreateEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "AccountEventHeader" - }, - "index": false - } - ] - }, - { - "name": "LendingAccountDepositEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "AccountEventHeader" - }, - "index": false - }, - { - "name": "bank", - "type": "publicKey", - "index": false - }, - { - "name": "mint", - "type": "publicKey", - "index": false - }, - { - "name": "amount", - "type": "u64", - "index": false - } - ] - }, - { - "name": "LendingAccountRepayEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "AccountEventHeader" - }, - "index": false - }, - { - "name": "bank", - "type": "publicKey", - "index": false - }, - { - "name": "mint", - "type": "publicKey", - "index": false - }, - { - "name": "amount", - "type": "u64", - "index": false - }, - { - "name": "closeBalance", - "type": "bool", - "index": false - } - ] - }, - { - "name": "LendingAccountBorrowEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "AccountEventHeader" - }, - "index": false - }, - { - "name": "bank", - "type": "publicKey", - "index": false - }, - { - "name": "mint", - "type": "publicKey", - "index": false - }, - { - "name": "amount", - "type": "u64", - "index": false - } - ] - }, - { - "name": "LendingAccountWithdrawEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "AccountEventHeader" - }, - "index": false - }, - { - "name": "bank", - "type": "publicKey", - "index": false - }, - { - "name": "mint", - "type": "publicKey", - "index": false - }, - { - "name": "amount", - "type": "u64", - "index": false - }, - { - "name": "closeBalance", - "type": "bool", - "index": false - } - ] - } - ], - "errors": [ - { - "code": 6000, - "name": "MathError", - "msg": "Math error" - }, - { - "code": 6001, - "name": "BankNotFound", - "msg": "Invalid bank index" - }, - { - "code": 6002, - "name": "LendingAccountBalanceNotFound", - "msg": "Lending account balance not found" - }, - { - "code": 6003, - "name": "BankAssetCapacityExceeded", - "msg": "Bank deposit capacity exceeded" - }, - { - "code": 6004, - "name": "InvalidTransfer", - "msg": "Invalid transfer" - }, - { - "code": 6005, - "name": "MissingPythOrBankAccount", - "msg": "Missing Pyth or Bank account" - }, - { - "code": 6006, - "name": "MissingPythAccount", - "msg": "Missing Pyth account" - }, - { - "code": 6007, - "name": "InvalidOracleAccount", - "msg": "Invalid Pyth account" - }, - { - "code": 6008, - "name": "MissingBankAccount", - "msg": "Missing Bank account" - }, - { - "code": 6009, - "name": "InvalidBankAccount", - "msg": "Invalid Bank account" - }, - { - "code": 6010, - "name": "BadAccountHealth", - "msg": "Bad account health" - }, - { - "code": 6011, - "name": "LendingAccountBalanceSlotsFull", - "msg": "Lending account balance slots are full" - }, - { - "code": 6012, - "name": "BankAlreadyExists", - "msg": "Bank already exists" - }, - { - "code": 6013, - "name": "IllegalLiquidation", - "msg": "Illegal post liquidation state, account is either not unhealthy or liquidation was too big" - }, - { - "code": 6014, - "name": "AccountNotBankrupt", - "msg": "Account is not bankrupt" - }, - { - "code": 6015, - "name": "BalanceNotBadDebt", - "msg": "Account balance is not bad debt" - }, - { - "code": 6016, - "name": "InvalidConfig", - "msg": "Invalid group config" - }, - { - "code": 6017, - "name": "StaleOracle", - "msg": "Stale oracle data" - }, - { - "code": 6018, - "name": "BankPaused", - "msg": "Bank paused" - }, - { - "code": 6019, - "name": "BankReduceOnly", - "msg": "Bank is ReduceOnly mode" - }, - { - "code": 6020, - "name": "BankAccoutNotFound", - "msg": "Bank is missing" - }, - { - "code": 6021, - "name": "OperationDepositOnly", - "msg": "Operation is deposit-only" - }, - { - "code": 6022, - "name": "OperationWithdrawOnly", - "msg": "Operation is withdraw-only" - }, - { - "code": 6023, - "name": "OperationBorrowOnly", - "msg": "Operation is borrow-only" - }, - { - "code": 6024, - "name": "OperationRepayOnly", - "msg": "Operation is repay-only" - }, - { - "code": 6025, - "name": "NoAssetFound", - "msg": "No asset found" - }, - { - "code": 6026, - "name": "NoLiabilityFound", - "msg": "No liability found" - }, - { - "code": 6027, - "name": "InvalidOracleSetup", - "msg": "Invalid oracle setup" - }, - { - "code": 6028, - "name": "IllegalUtilizationRatio", - "msg": "Invalid bank utilization ratio" - }, - { - "code": 6029, - "name": "BankLiabilityCapacityExceeded", - "msg": "Bank borrow cap exceeded" - } - ], - "metadata": { - "address": "A7vUDErNPCTt9qrB6SSM4F6GkxzUe9d8P3cXSmRg4eY4" - } -} \ No newline at end of file diff --git a/observability/etl/dataflow-etls/dataflow_etls/idls/devnet/A7vUDErNPCTt9qrB6SSM4F6GkxzUe9d8P3cXSmRg4eY4/marginfi-v3.json b/observability/etl/dataflow-etls/dataflow_etls/idls/devnet/A7vUDErNPCTt9qrB6SSM4F6GkxzUe9d8P3cXSmRg4eY4/marginfi-v3.json deleted file mode 100644 index a075a0885..000000000 --- a/observability/etl/dataflow-etls/dataflow_etls/idls/devnet/A7vUDErNPCTt9qrB6SSM4F6GkxzUe9d8P3cXSmRg4eY4/marginfi-v3.json +++ /dev/null @@ -1,2032 +0,0 @@ -{ - "version": "0.1.0", - "name": "marginfi", - "instructions": [ - { - "name": "marginfiGroupInitialize", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": true, - "isSigner": true - }, - { - "name": "admin", - "isMut": true, - "isSigner": true - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [] - }, - { - "name": "marginfiGroupConfigure", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": true, - "isSigner": false - }, - { - "name": "admin", - "isMut": false, - "isSigner": true - } - ], - "args": [ - { - "name": "config", - "type": { - "defined": "GroupConfig" - } - } - ] - }, - { - "name": "lendingPoolAddBank", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "admin", - "isMut": true, - "isSigner": true - }, - { - "name": "bankMint", - "isMut": false, - "isSigner": false - }, - { - "name": "bank", - "isMut": true, - "isSigner": true - }, - { - "name": "liquidityVaultAuthority", - "isMut": false, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault_auth" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "liquidityVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "insuranceVaultAuthority", - "isMut": false, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "insurance_vault_auth" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "insuranceVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "insurance_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "feeVaultAuthority", - "isMut": false, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "fee_vault_auth" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "feeVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "fee_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "rent", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "bankConfig", - "type": { - "defined": "BankConfig" - } - } - ] - }, - { - "name": "lendingPoolConfigureBank", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "admin", - "isMut": false, - "isSigner": true - }, - { - "name": "bank", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "bankConfigOpt", - "type": { - "defined": "BankConfigOpt" - } - } - ] - }, - { - "name": "lendingPoolHandleBankruptcy", - "docs": [ - "Handle bad debt of a bankrupt marginfi account for a given bank." - ], - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "admin", - "isMut": false, - "isSigner": true - }, - { - "name": "bank", - "isMut": true, - "isSigner": false - }, - { - "name": "marginfiAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "liquidityVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "insuranceVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "insurance_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "insuranceVaultAuthority", - "isMut": false, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "insurance_vault_auth" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [] - }, - { - "name": "marginfiAccountInitialize", - "docs": [ - "Initialize a marginfi account for a given group" - ], - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "marginfiAccount", - "isMut": true, - "isSigner": true - }, - { - "name": "authority", - "isMut": false, - "isSigner": true - }, - { - "name": "feePayer", - "isMut": true, - "isSigner": true - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [] - }, - { - "name": "lendingAccountDeposit", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "marginfiAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "signer", - "isMut": false, - "isSigner": true - }, - { - "name": "bank", - "isMut": true, - "isSigner": false - }, - { - "name": "signerTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "bankLiquidityVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "amount", - "type": "u64" - } - ] - }, - { - "name": "lendingAccountRepay", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "marginfiAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "signer", - "isMut": false, - "isSigner": true - }, - { - "name": "bank", - "isMut": true, - "isSigner": false - }, - { - "name": "signerTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "bankLiquidityVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "amount", - "type": "u64" - }, - { - "name": "repayAll", - "type": { - "option": "bool" - } - } - ] - }, - { - "name": "lendingAccountWithdraw", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "marginfiAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "signer", - "isMut": false, - "isSigner": true - }, - { - "name": "bank", - "isMut": true, - "isSigner": false - }, - { - "name": "destinationTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "bankLiquidityVaultAuthority", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault_auth" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "bankLiquidityVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "amount", - "type": "u64" - }, - { - "name": "withdrawAll", - "type": { - "option": "bool" - } - } - ] - }, - { - "name": "lendingAccountBorrow", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "marginfiAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "signer", - "isMut": false, - "isSigner": true - }, - { - "name": "bank", - "isMut": true, - "isSigner": false - }, - { - "name": "destinationTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "bankLiquidityVaultAuthority", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault_auth" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "bankLiquidityVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "amount", - "type": "u64" - } - ] - }, - { - "name": "lendingAccountLiquidate", - "docs": [ - "Liquidate a lending account balance of an unhealthy marginfi account" - ], - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "assetBank", - "isMut": true, - "isSigner": false - }, - { - "name": "liabBank", - "isMut": true, - "isSigner": false - }, - { - "name": "liquidatorMarginfiAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "signer", - "isMut": false, - "isSigner": true - }, - { - "name": "liquidateeMarginfiAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "bankLiquidityVaultAuthority", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault_auth" - }, - { - "kind": "account", - "type": "publicKey", - "path": "liab_bank" - } - ] - } - }, - { - "name": "bankLiquidityVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "liab_bank" - } - ] - } - }, - { - "name": "bankInsuranceVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "insurance_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "liab_bank" - } - ] - } - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "assetAmount", - "type": "u64" - } - ] - }, - { - "name": "lendingPoolAccrueBankInterest", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "bank", - "isMut": true, - "isSigner": false - } - ], - "args": [] - }, - { - "name": "lendingPoolCollectBankFees", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "bank", - "isMut": true, - "isSigner": false - }, - { - "name": "liquidityVaultAuthority", - "isMut": false, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault_auth" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "liquidityVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "insuranceVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "insurance_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "feeVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "fee_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [] - } - ], - "accounts": [ - { - "name": "MarginfiAccount", - "type": { - "kind": "struct", - "fields": [ - { - "name": "group", - "type": "publicKey" - }, - { - "name": "authority", - "type": "publicKey" - }, - { - "name": "lendingAccount", - "type": { - "defined": "LendingAccount" - } - }, - { - "name": "padding", - "type": { - "array": [ - "u64", - 64 - ] - } - } - ] - } - }, - { - "name": "MarginfiGroup", - "type": { - "kind": "struct", - "fields": [ - { - "name": "admin", - "type": "publicKey" - }, - { - "name": "padding0", - "type": { - "array": [ - "u128", - 32 - ] - } - }, - { - "name": "padding1", - "type": { - "array": [ - "u128", - 32 - ] - } - } - ] - } - }, - { - "name": "Bank", - "type": { - "kind": "struct", - "fields": [ - { - "name": "mint", - "type": "publicKey" - }, - { - "name": "mintDecimals", - "type": "u8" - }, - { - "name": "group", - "type": "publicKey" - }, - { - "name": "assetShareValue", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "liabilityShareValue", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "liquidityVault", - "type": "publicKey" - }, - { - "name": "liquidityVaultBump", - "type": "u8" - }, - { - "name": "liquidityVaultAuthorityBump", - "type": "u8" - }, - { - "name": "insuranceVault", - "type": "publicKey" - }, - { - "name": "insuranceVaultBump", - "type": "u8" - }, - { - "name": "insuranceVaultAuthorityBump", - "type": "u8" - }, - { - "name": "collectedInsuranceFeesOutstanding", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "feeVault", - "type": "publicKey" - }, - { - "name": "feeVaultBump", - "type": "u8" - }, - { - "name": "feeVaultAuthorityBump", - "type": "u8" - }, - { - "name": "collectedGroupFeesOutstanding", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "totalLiabilityShares", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "totalAssetShares", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "lastUpdate", - "type": "i64" - }, - { - "name": "config", - "type": { - "defined": "BankConfig" - } - }, - { - "name": "padding0", - "type": { - "array": [ - "u128", - 32 - ] - } - }, - { - "name": "padding1", - "type": { - "array": [ - "u128", - 32 - ] - } - } - ] - } - } - ], - "types": [ - { - "name": "GroupEventHeader", - "type": { - "kind": "struct", - "fields": [ - { - "name": "signer", - "type": { - "option": "publicKey" - } - }, - { - "name": "marginfiGroup", - "type": "publicKey" - } - ] - } - }, - { - "name": "AccountEventHeader", - "type": { - "kind": "struct", - "fields": [ - { - "name": "signer", - "type": "publicKey" - }, - { - "name": "marginfiAccount", - "type": "publicKey" - }, - { - "name": "marginfiAccountAuthority", - "type": "publicKey" - }, - { - "name": "marginfiGroup", - "type": "publicKey" - } - ] - } - }, - { - "name": "LiquidationBalances", - "type": { - "kind": "struct", - "fields": [ - { - "name": "liquidateeAssetBalance", - "type": "f64" - }, - { - "name": "liquidateeLiabilityBalance", - "type": "f64" - }, - { - "name": "liquidatorAssetBalance", - "type": "f64" - }, - { - "name": "liquidatorLiabilityBalance", - "type": "f64" - } - ] - } - }, - { - "name": "LendingAccount", - "type": { - "kind": "struct", - "fields": [ - { - "name": "balances", - "type": { - "array": [ - { - "defined": "Balance" - }, - 16 - ] - } - }, - { - "name": "padding", - "type": { - "array": [ - "u64", - 8 - ] - } - } - ] - } - }, - { - "name": "Balance", - "type": { - "kind": "struct", - "fields": [ - { - "name": "active", - "type": "bool" - }, - { - "name": "bankPk", - "type": "publicKey" - }, - { - "name": "assetShares", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "liabilityShares", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "padding", - "type": { - "array": [ - "u64", - 4 - ] - } - } - ] - } - }, - { - "name": "GroupConfig", - "type": { - "kind": "struct", - "fields": [ - { - "name": "admin", - "type": { - "option": "publicKey" - } - } - ] - } - }, - { - "name": "InterestRateConfig", - "type": { - "kind": "struct", - "fields": [ - { - "name": "optimalUtilizationRate", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "plateauInterestRate", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "maxInterestRate", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "insuranceFeeFixedApr", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "insuranceIrFee", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "protocolFixedFeeApr", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "protocolIrFee", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "padding", - "type": { - "array": [ - "u128", - 8 - ] - } - } - ] - } - }, - { - "name": "BankConfig", - "docs": [ - "TODO: Convert weights to (u64, u64) to avoid precision loss (maybe?)" - ], - "type": { - "kind": "struct", - "fields": [ - { - "name": "assetWeightInit", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "assetWeightMaint", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "liabilityWeightInit", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "liabilityWeightMaint", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "depositLimit", - "type": "u64" - }, - { - "name": "interestRateConfig", - "type": { - "defined": "InterestRateConfig" - } - }, - { - "name": "operationalState", - "type": { - "defined": "BankOperationalState" - } - }, - { - "name": "oracleSetup", - "type": { - "defined": "OracleSetup" - } - }, - { - "name": "oracleKeys", - "type": { - "array": [ - "publicKey", - 5 - ] - } - }, - { - "name": "borrowLimit", - "type": "u64" - }, - { - "name": "padding", - "type": { - "array": [ - "u64", - 7 - ] - } - } - ] - } - }, - { - "name": "WrappedI80F48", - "type": { - "kind": "struct", - "fields": [ - { - "name": "value", - "type": "i128" - } - ] - } - }, - { - "name": "BankConfigOpt", - "type": { - "kind": "struct", - "fields": [ - { - "name": "assetWeightInit", - "type": { - "option": { - "defined": "WrappedI80F48" - } - } - }, - { - "name": "assetWeightMaint", - "type": { - "option": { - "defined": "WrappedI80F48" - } - } - }, - { - "name": "liabilityWeightInit", - "type": { - "option": { - "defined": "WrappedI80F48" - } - } - }, - { - "name": "liabilityWeightMaint", - "type": { - "option": { - "defined": "WrappedI80F48" - } - } - }, - { - "name": "depositLimit", - "type": { - "option": "u64" - } - }, - { - "name": "borrowLimit", - "type": { - "option": "u64" - } - }, - { - "name": "operationalState", - "type": { - "option": { - "defined": "BankOperationalState" - } - } - }, - { - "name": "oracle", - "type": { - "option": { - "defined": "OracleConfig" - } - } - } - ] - } - }, - { - "name": "OracleConfig", - "type": { - "kind": "struct", - "fields": [ - { - "name": "setup", - "type": { - "defined": "OracleSetup" - } - }, - { - "name": "keys", - "type": { - "array": [ - "publicKey", - 5 - ] - } - } - ] - } - }, - { - "name": "BalanceIncreaseType", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Any" - }, - { - "name": "RepayOnly" - }, - { - "name": "DepositOnly" - } - ] - } - }, - { - "name": "BalanceDecreaseType", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Any" - }, - { - "name": "WithdrawOnly" - }, - { - "name": "BorrowOnly" - }, - { - "name": "BypassBorrowLimit" - } - ] - } - }, - { - "name": "WeightType", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Initial" - }, - { - "name": "Maintenance" - } - ] - } - }, - { - "name": "BalanceSide", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Assets" - }, - { - "name": "Liabilities" - } - ] - } - }, - { - "name": "RiskRequirementType", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Initial" - }, - { - "name": "Maintenance" - } - ] - } - }, - { - "name": "BankOperationalState", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Paused" - }, - { - "name": "Operational" - }, - { - "name": "ReduceOnly" - } - ] - } - }, - { - "name": "OracleSetup", - "type": { - "kind": "enum", - "variants": [ - { - "name": "None" - }, - { - "name": "Pyth" - } - ] - } - }, - { - "name": "OracleKey", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Pyth", - "fields": [ - "publicKey" - ] - } - ] - } - }, - { - "name": "BankVaultType", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Liquidity" - }, - { - "name": "Insurance" - }, - { - "name": "Fee" - } - ] - } - } - ], - "events": [ - { - "name": "LendingPoolBankAddEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "GroupEventHeader" - }, - "index": false - }, - { - "name": "bank", - "type": "publicKey", - "index": false - }, - { - "name": "mint", - "type": "publicKey", - "index": false - } - ] - }, - { - "name": "LendingPoolBankAccrueInterestEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "GroupEventHeader" - }, - "index": false - }, - { - "name": "bank", - "type": "publicKey", - "index": false - }, - { - "name": "mint", - "type": "publicKey", - "index": false - }, - { - "name": "delta", - "type": "u64", - "index": false - }, - { - "name": "feesCollected", - "type": "f64", - "index": false - }, - { - "name": "insuranceCollected", - "type": "f64", - "index": false - } - ] - }, - { - "name": "MarginfiAccountCreateEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "AccountEventHeader" - }, - "index": false - } - ] - }, - { - "name": "LendingAccountDepositEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "AccountEventHeader" - }, - "index": false - }, - { - "name": "bank", - "type": "publicKey", - "index": false - }, - { - "name": "mint", - "type": "publicKey", - "index": false - }, - { - "name": "amount", - "type": "u64", - "index": false - } - ] - }, - { - "name": "LendingAccountRepayEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "AccountEventHeader" - }, - "index": false - }, - { - "name": "bank", - "type": "publicKey", - "index": false - }, - { - "name": "mint", - "type": "publicKey", - "index": false - }, - { - "name": "amount", - "type": "u64", - "index": false - }, - { - "name": "closeBalance", - "type": "bool", - "index": false - } - ] - }, - { - "name": "LendingAccountBorrowEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "AccountEventHeader" - }, - "index": false - }, - { - "name": "bank", - "type": "publicKey", - "index": false - }, - { - "name": "mint", - "type": "publicKey", - "index": false - }, - { - "name": "amount", - "type": "u64", - "index": false - } - ] - }, - { - "name": "LendingAccountWithdrawEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "AccountEventHeader" - }, - "index": false - }, - { - "name": "bank", - "type": "publicKey", - "index": false - }, - { - "name": "mint", - "type": "publicKey", - "index": false - }, - { - "name": "amount", - "type": "u64", - "index": false - }, - { - "name": "closeBalance", - "type": "bool", - "index": false - } - ] - }, - { - "name": "LendingPoolHandleBankruptcyEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "AccountEventHeader" - }, - "index": false - }, - { - "name": "bank", - "type": "publicKey", - "index": false - }, - { - "name": "mint", - "type": "publicKey", - "index": false - }, - { - "name": "badDebt", - "type": "f64", - "index": false - }, - { - "name": "coveredAmount", - "type": "f64", - "index": false - }, - { - "name": "socializedAmount", - "type": "f64", - "index": false - } - ] - }, - { - "name": "LendingAccountLiquidateEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "AccountEventHeader" - }, - "index": false - }, - { - "name": "liquidateeMarginfiAccount", - "type": "publicKey", - "index": false - }, - { - "name": "liquidateeMarginfiAccountAuthority", - "type": "publicKey", - "index": false - }, - { - "name": "assetBank", - "type": "publicKey", - "index": false - }, - { - "name": "assetMint", - "type": "publicKey", - "index": false - }, - { - "name": "liabilityBank", - "type": "publicKey", - "index": false - }, - { - "name": "liabilityMint", - "type": "publicKey", - "index": false - }, - { - "name": "liquidateePreHealth", - "type": "f64", - "index": false - }, - { - "name": "liquidateePostHealth", - "type": "f64", - "index": false - }, - { - "name": "preBalances", - "type": { - "defined": "LiquidationBalances" - }, - "index": false - }, - { - "name": "postBalances", - "type": { - "defined": "LiquidationBalances" - }, - "index": false - } - ] - } - ], - "errors": [ - { - "code": 6000, - "name": "MathError", - "msg": "Math error" - }, - { - "code": 6001, - "name": "BankNotFound", - "msg": "Invalid bank index" - }, - { - "code": 6002, - "name": "LendingAccountBalanceNotFound", - "msg": "Lending account balance not found" - }, - { - "code": 6003, - "name": "BankAssetCapacityExceeded", - "msg": "Bank deposit capacity exceeded" - }, - { - "code": 6004, - "name": "InvalidTransfer", - "msg": "Invalid transfer" - }, - { - "code": 6005, - "name": "MissingPythOrBankAccount", - "msg": "Missing Pyth or Bank account" - }, - { - "code": 6006, - "name": "MissingPythAccount", - "msg": "Missing Pyth account" - }, - { - "code": 6007, - "name": "InvalidOracleAccount", - "msg": "Invalid Pyth account" - }, - { - "code": 6008, - "name": "MissingBankAccount", - "msg": "Missing Bank account" - }, - { - "code": 6009, - "name": "InvalidBankAccount", - "msg": "Invalid Bank account" - }, - { - "code": 6010, - "name": "BadAccountHealth", - "msg": "Bad account health" - }, - { - "code": 6011, - "name": "LendingAccountBalanceSlotsFull", - "msg": "Lending account balance slots are full" - }, - { - "code": 6012, - "name": "BankAlreadyExists", - "msg": "Bank already exists" - }, - { - "code": 6013, - "name": "IllegalLiquidation", - "msg": "Illegal post liquidation state, account is either not unhealthy or liquidation was too big" - }, - { - "code": 6014, - "name": "AccountNotBankrupt", - "msg": "Account is not bankrupt" - }, - { - "code": 6015, - "name": "BalanceNotBadDebt", - "msg": "Account balance is not bad debt" - }, - { - "code": 6016, - "name": "InvalidConfig", - "msg": "Invalid group config" - }, - { - "code": 6017, - "name": "StaleOracle", - "msg": "Stale oracle data" - }, - { - "code": 6018, - "name": "BankPaused", - "msg": "Bank paused" - }, - { - "code": 6019, - "name": "BankReduceOnly", - "msg": "Bank is ReduceOnly mode" - }, - { - "code": 6020, - "name": "BankAccoutNotFound", - "msg": "Bank is missing" - }, - { - "code": 6021, - "name": "OperationDepositOnly", - "msg": "Operation is deposit-only" - }, - { - "code": 6022, - "name": "OperationWithdrawOnly", - "msg": "Operation is withdraw-only" - }, - { - "code": 6023, - "name": "OperationBorrowOnly", - "msg": "Operation is borrow-only" - }, - { - "code": 6024, - "name": "OperationRepayOnly", - "msg": "Operation is repay-only" - }, - { - "code": 6025, - "name": "NoAssetFound", - "msg": "No asset found" - }, - { - "code": 6026, - "name": "NoLiabilityFound", - "msg": "No liability found" - }, - { - "code": 6027, - "name": "InvalidOracleSetup", - "msg": "Invalid oracle setup" - }, - { - "code": 6028, - "name": "IllegalUtilizationRatio", - "msg": "Invalid bank utilization ratio" - }, - { - "code": 6029, - "name": "BankLiabilityCapacityExceeded", - "msg": "Bank borrow cap exceeded" - } - ] -} \ No newline at end of file diff --git a/observability/etl/dataflow-etls/dataflow_etls/idls/devnet/A7vUDErNPCTt9qrB6SSM4F6GkxzUe9d8P3cXSmRg4eY4/marginfi-v4.json b/observability/etl/dataflow-etls/dataflow_etls/idls/devnet/A7vUDErNPCTt9qrB6SSM4F6GkxzUe9d8P3cXSmRg4eY4/marginfi-v4.json deleted file mode 100644 index db9029fbc..000000000 --- a/observability/etl/dataflow-etls/dataflow_etls/idls/devnet/A7vUDErNPCTt9qrB6SSM4F6GkxzUe9d8P3cXSmRg4eY4/marginfi-v4.json +++ /dev/null @@ -1,2216 +0,0 @@ -{ - "version": "0.1.0", - "name": "marginfi", - "instructions": [ - { - "name": "marginfiGroupInitialize", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": true, - "isSigner": true - }, - { - "name": "admin", - "isMut": true, - "isSigner": true - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [] - }, - { - "name": "marginfiGroupConfigure", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": true, - "isSigner": false - }, - { - "name": "admin", - "isMut": false, - "isSigner": true - } - ], - "args": [ - { - "name": "config", - "type": { - "defined": "GroupConfig" - } - } - ] - }, - { - "name": "lendingPoolAddBank", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "admin", - "isMut": true, - "isSigner": true - }, - { - "name": "bankMint", - "isMut": false, - "isSigner": false - }, - { - "name": "bank", - "isMut": true, - "isSigner": true - }, - { - "name": "liquidityVaultAuthority", - "isMut": false, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault_auth" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "liquidityVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "insuranceVaultAuthority", - "isMut": false, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "insurance_vault_auth" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "insuranceVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "insurance_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "feeVaultAuthority", - "isMut": false, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "fee_vault_auth" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "feeVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "fee_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "rent", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "bankConfig", - "type": { - "defined": "BankConfig" - } - } - ] - }, - { - "name": "lendingPoolConfigureBank", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "admin", - "isMut": false, - "isSigner": true - }, - { - "name": "bank", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "bankConfigOpt", - "type": { - "defined": "BankConfigOpt" - } - } - ] - }, - { - "name": "lendingPoolHandleBankruptcy", - "docs": [ - "Handle bad debt of a bankrupt marginfi account for a given bank." - ], - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "admin", - "isMut": false, - "isSigner": true - }, - { - "name": "bank", - "isMut": true, - "isSigner": false - }, - { - "name": "marginfiAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "liquidityVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "insuranceVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "insurance_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "insuranceVaultAuthority", - "isMut": false, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "insurance_vault_auth" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [] - }, - { - "name": "marginfiAccountInitialize", - "docs": [ - "Initialize a marginfi account for a given group" - ], - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "marginfiAccount", - "isMut": true, - "isSigner": true - }, - { - "name": "authority", - "isMut": false, - "isSigner": true - }, - { - "name": "feePayer", - "isMut": true, - "isSigner": true - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [] - }, - { - "name": "lendingAccountDeposit", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "marginfiAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "signer", - "isMut": false, - "isSigner": true - }, - { - "name": "bank", - "isMut": true, - "isSigner": false - }, - { - "name": "signerTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "bankLiquidityVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "amount", - "type": "u64" - } - ] - }, - { - "name": "lendingAccountRepay", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "marginfiAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "signer", - "isMut": false, - "isSigner": true - }, - { - "name": "bank", - "isMut": true, - "isSigner": false - }, - { - "name": "signerTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "bankLiquidityVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "amount", - "type": "u64" - }, - { - "name": "repayAll", - "type": { - "option": "bool" - } - } - ] - }, - { - "name": "lendingAccountWithdraw", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "marginfiAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "signer", - "isMut": false, - "isSigner": true - }, - { - "name": "bank", - "isMut": true, - "isSigner": false - }, - { - "name": "destinationTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "bankLiquidityVaultAuthority", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault_auth" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "bankLiquidityVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "amount", - "type": "u64" - }, - { - "name": "withdrawAll", - "type": { - "option": "bool" - } - } - ] - }, - { - "name": "lendingAccountBorrow", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "marginfiAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "signer", - "isMut": false, - "isSigner": true - }, - { - "name": "bank", - "isMut": true, - "isSigner": false - }, - { - "name": "destinationTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "bankLiquidityVaultAuthority", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault_auth" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "bankLiquidityVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "amount", - "type": "u64" - } - ] - }, - { - "name": "lendingAccountLiquidate", - "docs": [ - "Liquidate a lending account balance of an unhealthy marginfi account" - ], - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "assetBank", - "isMut": true, - "isSigner": false - }, - { - "name": "liabBank", - "isMut": true, - "isSigner": false - }, - { - "name": "liquidatorMarginfiAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "signer", - "isMut": false, - "isSigner": true - }, - { - "name": "liquidateeMarginfiAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "bankLiquidityVaultAuthority", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault_auth" - }, - { - "kind": "account", - "type": "publicKey", - "path": "liab_bank" - } - ] - } - }, - { - "name": "bankLiquidityVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "liab_bank" - } - ] - } - }, - { - "name": "bankInsuranceVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "insurance_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "liab_bank" - } - ] - } - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "assetAmount", - "type": "u64" - } - ] - }, - { - "name": "lendingPoolAccrueBankInterest", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "bank", - "isMut": true, - "isSigner": false - } - ], - "args": [] - }, - { - "name": "lendingPoolCollectBankFees", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "bank", - "isMut": true, - "isSigner": false - }, - { - "name": "liquidityVaultAuthority", - "isMut": false, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault_auth" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "liquidityVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "insuranceVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "insurance_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "feeVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "fee_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [] - } - ], - "accounts": [ - { - "name": "MarginfiAccount", - "type": { - "kind": "struct", - "fields": [ - { - "name": "group", - "type": "publicKey" - }, - { - "name": "authority", - "type": "publicKey" - }, - { - "name": "lendingAccount", - "type": { - "defined": "LendingAccount" - } - }, - { - "name": "padding", - "type": { - "array": [ - "u64", - 64 - ] - } - } - ] - } - }, - { - "name": "MarginfiGroup", - "type": { - "kind": "struct", - "fields": [ - { - "name": "admin", - "type": "publicKey" - }, - { - "name": "padding0", - "type": { - "array": [ - "u128", - 32 - ] - } - }, - { - "name": "padding1", - "type": { - "array": [ - "u128", - 32 - ] - } - } - ] - } - }, - { - "name": "Bank", - "type": { - "kind": "struct", - "fields": [ - { - "name": "mint", - "type": "publicKey" - }, - { - "name": "mintDecimals", - "type": "u8" - }, - { - "name": "group", - "type": "publicKey" - }, - { - "name": "assetShareValue", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "liabilityShareValue", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "liquidityVault", - "type": "publicKey" - }, - { - "name": "liquidityVaultBump", - "type": "u8" - }, - { - "name": "liquidityVaultAuthorityBump", - "type": "u8" - }, - { - "name": "insuranceVault", - "type": "publicKey" - }, - { - "name": "insuranceVaultBump", - "type": "u8" - }, - { - "name": "insuranceVaultAuthorityBump", - "type": "u8" - }, - { - "name": "collectedInsuranceFeesOutstanding", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "feeVault", - "type": "publicKey" - }, - { - "name": "feeVaultBump", - "type": "u8" - }, - { - "name": "feeVaultAuthorityBump", - "type": "u8" - }, - { - "name": "collectedGroupFeesOutstanding", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "totalLiabilityShares", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "totalAssetShares", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "lastUpdate", - "type": "i64" - }, - { - "name": "config", - "type": { - "defined": "BankConfig" - } - }, - { - "name": "padding0", - "type": { - "array": [ - "u128", - 32 - ] - } - }, - { - "name": "padding1", - "type": { - "array": [ - "u128", - 32 - ] - } - } - ] - } - } - ], - "types": [ - { - "name": "GroupEventHeader", - "type": { - "kind": "struct", - "fields": [ - { - "name": "signer", - "type": { - "option": "publicKey" - } - }, - { - "name": "marginfiGroup", - "type": "publicKey" - } - ] - } - }, - { - "name": "AccountEventHeader", - "type": { - "kind": "struct", - "fields": [ - { - "name": "signer", - "type": { - "option": "publicKey" - } - }, - { - "name": "marginfiAccount", - "type": "publicKey" - }, - { - "name": "marginfiAccountAuthority", - "type": "publicKey" - }, - { - "name": "marginfiGroup", - "type": "publicKey" - } - ] - } - }, - { - "name": "LiquidationBalances", - "type": { - "kind": "struct", - "fields": [ - { - "name": "liquidateeAssetBalance", - "type": "f64" - }, - { - "name": "liquidateeLiabilityBalance", - "type": "f64" - }, - { - "name": "liquidatorAssetBalance", - "type": "f64" - }, - { - "name": "liquidatorLiabilityBalance", - "type": "f64" - } - ] - } - }, - { - "name": "LendingAccount", - "type": { - "kind": "struct", - "fields": [ - { - "name": "balances", - "type": { - "array": [ - { - "defined": "Balance" - }, - 16 - ] - } - }, - { - "name": "padding", - "type": { - "array": [ - "u64", - 8 - ] - } - } - ] - } - }, - { - "name": "Balance", - "type": { - "kind": "struct", - "fields": [ - { - "name": "active", - "type": "bool" - }, - { - "name": "bankPk", - "type": "publicKey" - }, - { - "name": "assetShares", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "liabilityShares", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "padding", - "type": { - "array": [ - "u64", - 4 - ] - } - } - ] - } - }, - { - "name": "GroupConfig", - "type": { - "kind": "struct", - "fields": [ - { - "name": "admin", - "type": { - "option": "publicKey" - } - } - ] - } - }, - { - "name": "InterestRateConfig", - "type": { - "kind": "struct", - "fields": [ - { - "name": "optimalUtilizationRate", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "plateauInterestRate", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "maxInterestRate", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "insuranceFeeFixedApr", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "insuranceIrFee", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "protocolFixedFeeApr", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "protocolIrFee", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "padding", - "type": { - "array": [ - "u128", - 8 - ] - } - } - ] - } - }, - { - "name": "InterestRateConfigOpt", - "type": { - "kind": "struct", - "fields": [ - { - "name": "optimalUtilizationRate", - "type": { - "option": { - "defined": "WrappedI80F48" - } - } - }, - { - "name": "plateauInterestRate", - "type": { - "option": { - "defined": "WrappedI80F48" - } - } - }, - { - "name": "maxInterestRate", - "type": { - "option": { - "defined": "WrappedI80F48" - } - } - }, - { - "name": "insuranceFeeFixedApr", - "type": { - "option": { - "defined": "WrappedI80F48" - } - } - }, - { - "name": "insuranceIrFee", - "type": { - "option": { - "defined": "WrappedI80F48" - } - } - }, - { - "name": "protocolFixedFeeApr", - "type": { - "option": { - "defined": "WrappedI80F48" - } - } - }, - { - "name": "protocolIrFee", - "type": { - "option": { - "defined": "WrappedI80F48" - } - } - } - ] - } - }, - { - "name": "BankConfig", - "docs": [ - "TODO: Convert weights to (u64, u64) to avoid precision loss (maybe?)" - ], - "type": { - "kind": "struct", - "fields": [ - { - "name": "assetWeightInit", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "assetWeightMaint", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "liabilityWeightInit", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "liabilityWeightMaint", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "depositLimit", - "type": "u64" - }, - { - "name": "interestRateConfig", - "type": { - "defined": "InterestRateConfig" - } - }, - { - "name": "operationalState", - "type": { - "defined": "BankOperationalState" - } - }, - { - "name": "oracleSetup", - "type": { - "defined": "OracleSetup" - } - }, - { - "name": "oracleKeys", - "type": { - "array": [ - "publicKey", - 5 - ] - } - }, - { - "name": "borrowLimit", - "type": "u64" - }, - { - "name": "padding", - "type": { - "array": [ - "u64", - 7 - ] - } - } - ] - } - }, - { - "name": "WrappedI80F48", - "type": { - "kind": "struct", - "fields": [ - { - "name": "value", - "type": "i128" - } - ] - } - }, - { - "name": "BankConfigOpt", - "type": { - "kind": "struct", - "fields": [ - { - "name": "assetWeightInit", - "type": { - "option": { - "defined": "WrappedI80F48" - } - } - }, - { - "name": "assetWeightMaint", - "type": { - "option": { - "defined": "WrappedI80F48" - } - } - }, - { - "name": "liabilityWeightInit", - "type": { - "option": { - "defined": "WrappedI80F48" - } - } - }, - { - "name": "liabilityWeightMaint", - "type": { - "option": { - "defined": "WrappedI80F48" - } - } - }, - { - "name": "depositLimit", - "type": { - "option": "u64" - } - }, - { - "name": "borrowLimit", - "type": { - "option": "u64" - } - }, - { - "name": "operationalState", - "type": { - "option": { - "defined": "BankOperationalState" - } - } - }, - { - "name": "oracle", - "type": { - "option": { - "defined": "OracleConfig" - } - } - }, - { - "name": "interestRateConfig", - "type": { - "option": { - "defined": "InterestRateConfigOpt" - } - } - } - ] - } - }, - { - "name": "OracleConfig", - "type": { - "kind": "struct", - "fields": [ - { - "name": "setup", - "type": { - "defined": "OracleSetup" - } - }, - { - "name": "keys", - "type": { - "array": [ - "publicKey", - 5 - ] - } - } - ] - } - }, - { - "name": "BalanceIncreaseType", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Any" - }, - { - "name": "RepayOnly" - }, - { - "name": "DepositOnly" - } - ] - } - }, - { - "name": "BalanceDecreaseType", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Any" - }, - { - "name": "WithdrawOnly" - }, - { - "name": "BorrowOnly" - }, - { - "name": "BypassBorrowLimit" - } - ] - } - }, - { - "name": "WeightType", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Initial" - }, - { - "name": "Maintenance" - } - ] - } - }, - { - "name": "BalanceSide", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Assets" - }, - { - "name": "Liabilities" - } - ] - } - }, - { - "name": "RiskRequirementType", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Initial" - }, - { - "name": "Maintenance" - } - ] - } - }, - { - "name": "BankOperationalState", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Paused" - }, - { - "name": "Operational" - }, - { - "name": "ReduceOnly" - } - ] - } - }, - { - "name": "OracleSetup", - "type": { - "kind": "enum", - "variants": [ - { - "name": "None" - }, - { - "name": "Pyth" - } - ] - } - }, - { - "name": "OracleKey", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Pyth", - "fields": [ - "publicKey" - ] - } - ] - } - }, - { - "name": "BankVaultType", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Liquidity" - }, - { - "name": "Insurance" - }, - { - "name": "Fee" - } - ] - } - } - ], - "events": [ - { - "name": "MarginfiGroupCreateEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "GroupEventHeader" - }, - "index": false - } - ] - }, - { - "name": "MarginfiGroupConfigureEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "GroupEventHeader" - }, - "index": false - }, - { - "name": "config", - "type": { - "defined": "GroupConfig" - }, - "index": false - } - ] - }, - { - "name": "LendingPoolBankCreateEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "GroupEventHeader" - }, - "index": false - }, - { - "name": "bank", - "type": "publicKey", - "index": false - }, - { - "name": "mint", - "type": "publicKey", - "index": false - } - ] - }, - { - "name": "LendingPoolBankConfigureEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "GroupEventHeader" - }, - "index": false - }, - { - "name": "bank", - "type": "publicKey", - "index": false - }, - { - "name": "mint", - "type": "publicKey", - "index": false - }, - { - "name": "config", - "type": { - "defined": "BankConfigOpt" - }, - "index": false - } - ] - }, - { - "name": "LendingPoolBankAccrueInterestEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "GroupEventHeader" - }, - "index": false - }, - { - "name": "bank", - "type": "publicKey", - "index": false - }, - { - "name": "mint", - "type": "publicKey", - "index": false - }, - { - "name": "delta", - "type": "u64", - "index": false - }, - { - "name": "feesCollected", - "type": "f64", - "index": false - }, - { - "name": "insuranceCollected", - "type": "f64", - "index": false - } - ] - }, - { - "name": "LendingPoolBankCollectFeesEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "GroupEventHeader" - }, - "index": false - }, - { - "name": "bank", - "type": "publicKey", - "index": false - }, - { - "name": "mint", - "type": "publicKey", - "index": false - }, - { - "name": "groupFeesCollected", - "type": "f64", - "index": false - }, - { - "name": "groupFeesOutstanding", - "type": "f64", - "index": false - }, - { - "name": "insuranceFeesCollected", - "type": "f64", - "index": false - }, - { - "name": "insuranceFeesOutstanding", - "type": "f64", - "index": false - } - ] - }, - { - "name": "LendingPoolBankHandleBankruptcyEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "AccountEventHeader" - }, - "index": false - }, - { - "name": "bank", - "type": "publicKey", - "index": false - }, - { - "name": "mint", - "type": "publicKey", - "index": false - }, - { - "name": "badDebt", - "type": "f64", - "index": false - }, - { - "name": "coveredAmount", - "type": "f64", - "index": false - }, - { - "name": "socializedAmount", - "type": "f64", - "index": false - } - ] - }, - { - "name": "MarginfiAccountCreateEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "AccountEventHeader" - }, - "index": false - } - ] - }, - { - "name": "LendingAccountDepositEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "AccountEventHeader" - }, - "index": false - }, - { - "name": "bank", - "type": "publicKey", - "index": false - }, - { - "name": "mint", - "type": "publicKey", - "index": false - }, - { - "name": "amount", - "type": "u64", - "index": false - } - ] - }, - { - "name": "LendingAccountRepayEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "AccountEventHeader" - }, - "index": false - }, - { - "name": "bank", - "type": "publicKey", - "index": false - }, - { - "name": "mint", - "type": "publicKey", - "index": false - }, - { - "name": "amount", - "type": "u64", - "index": false - }, - { - "name": "closeBalance", - "type": "bool", - "index": false - } - ] - }, - { - "name": "LendingAccountBorrowEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "AccountEventHeader" - }, - "index": false - }, - { - "name": "bank", - "type": "publicKey", - "index": false - }, - { - "name": "mint", - "type": "publicKey", - "index": false - }, - { - "name": "amount", - "type": "u64", - "index": false - } - ] - }, - { - "name": "LendingAccountWithdrawEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "AccountEventHeader" - }, - "index": false - }, - { - "name": "bank", - "type": "publicKey", - "index": false - }, - { - "name": "mint", - "type": "publicKey", - "index": false - }, - { - "name": "amount", - "type": "u64", - "index": false - }, - { - "name": "closeBalance", - "type": "bool", - "index": false - } - ] - }, - { - "name": "LendingAccountLiquidateEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "AccountEventHeader" - }, - "index": false - }, - { - "name": "liquidateeMarginfiAccount", - "type": "publicKey", - "index": false - }, - { - "name": "liquidateeMarginfiAccountAuthority", - "type": "publicKey", - "index": false - }, - { - "name": "assetBank", - "type": "publicKey", - "index": false - }, - { - "name": "assetMint", - "type": "publicKey", - "index": false - }, - { - "name": "liabilityBank", - "type": "publicKey", - "index": false - }, - { - "name": "liabilityMint", - "type": "publicKey", - "index": false - }, - { - "name": "liquidateePreHealth", - "type": "f64", - "index": false - }, - { - "name": "liquidateePostHealth", - "type": "f64", - "index": false - }, - { - "name": "preBalances", - "type": { - "defined": "LiquidationBalances" - }, - "index": false - }, - { - "name": "postBalances", - "type": { - "defined": "LiquidationBalances" - }, - "index": false - } - ] - } - ], - "errors": [ - { - "code": 6000, - "name": "MathError", - "msg": "Math error" - }, - { - "code": 6001, - "name": "BankNotFound", - "msg": "Invalid bank index" - }, - { - "code": 6002, - "name": "LendingAccountBalanceNotFound", - "msg": "Lending account balance not found" - }, - { - "code": 6003, - "name": "BankAssetCapacityExceeded", - "msg": "Bank deposit capacity exceeded" - }, - { - "code": 6004, - "name": "InvalidTransfer", - "msg": "Invalid transfer" - }, - { - "code": 6005, - "name": "MissingPythOrBankAccount", - "msg": "Missing Pyth or Bank account" - }, - { - "code": 6006, - "name": "MissingPythAccount", - "msg": "Missing Pyth account" - }, - { - "code": 6007, - "name": "InvalidOracleAccount", - "msg": "Invalid Pyth account" - }, - { - "code": 6008, - "name": "MissingBankAccount", - "msg": "Missing Bank account" - }, - { - "code": 6009, - "name": "InvalidBankAccount", - "msg": "Invalid Bank account" - }, - { - "code": 6010, - "name": "BadAccountHealth", - "msg": "Bad account health" - }, - { - "code": 6011, - "name": "LendingAccountBalanceSlotsFull", - "msg": "Lending account balance slots are full" - }, - { - "code": 6012, - "name": "BankAlreadyExists", - "msg": "Bank already exists" - }, - { - "code": 6013, - "name": "IllegalLiquidation", - "msg": "Illegal post liquidation state, account is either not unhealthy or liquidation was too big" - }, - { - "code": 6014, - "name": "AccountNotBankrupt", - "msg": "Account is not bankrupt" - }, - { - "code": 6015, - "name": "BalanceNotBadDebt", - "msg": "Account balance is not bad debt" - }, - { - "code": 6016, - "name": "InvalidConfig", - "msg": "Invalid group config" - }, - { - "code": 6017, - "name": "StaleOracle", - "msg": "Stale oracle data" - }, - { - "code": 6018, - "name": "BankPaused", - "msg": "Bank paused" - }, - { - "code": 6019, - "name": "BankReduceOnly", - "msg": "Bank is ReduceOnly mode" - }, - { - "code": 6020, - "name": "BankAccoutNotFound", - "msg": "Bank is missing" - }, - { - "code": 6021, - "name": "OperationDepositOnly", - "msg": "Operation is deposit-only" - }, - { - "code": 6022, - "name": "OperationWithdrawOnly", - "msg": "Operation is withdraw-only" - }, - { - "code": 6023, - "name": "OperationBorrowOnly", - "msg": "Operation is borrow-only" - }, - { - "code": 6024, - "name": "OperationRepayOnly", - "msg": "Operation is repay-only" - }, - { - "code": 6025, - "name": "NoAssetFound", - "msg": "No asset found" - }, - { - "code": 6026, - "name": "NoLiabilityFound", - "msg": "No liability found" - }, - { - "code": 6027, - "name": "InvalidOracleSetup", - "msg": "Invalid oracle setup" - }, - { - "code": 6028, - "name": "IllegalUtilizationRatio", - "msg": "Invalid bank utilization ratio" - }, - { - "code": 6029, - "name": "BankLiabilityCapacityExceeded", - "msg": "Bank borrow cap exceeded" - }, - { - "code": 6030, - "name": "InvalidPrice", - "msg": "Invalid Price" - } - ], - "metadata": { - "address": "A7vUDErNPCTt9qrB6SSM4F6GkxzUe9d8P3cXSmRg4eY4" - } -} \ No newline at end of file diff --git a/observability/etl/dataflow-etls/dataflow_etls/idls/mainnet/MFv2hWf31Z9kbCa1snEPYctwafyhdvnV7FZnsebVacA/marginfi-v0.json b/observability/etl/dataflow-etls/dataflow_etls/idls/mainnet/MFv2hWf31Z9kbCa1snEPYctwafyhdvnV7FZnsebVacA/marginfi-v0.json deleted file mode 100644 index 50d97aa60..000000000 --- a/observability/etl/dataflow-etls/dataflow_etls/idls/mainnet/MFv2hWf31Z9kbCa1snEPYctwafyhdvnV7FZnsebVacA/marginfi-v0.json +++ /dev/null @@ -1,2478 +0,0 @@ -{ - "version": "0.1.0", - "name": "marginfi", - "instructions": [ - { - "name": "marginfiGroupInitialize", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": true, - "isSigner": true - }, - { - "name": "admin", - "isMut": true, - "isSigner": true - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [] - }, - { - "name": "marginfiGroupConfigure", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": true, - "isSigner": false - }, - { - "name": "admin", - "isMut": false, - "isSigner": true - } - ], - "args": [ - { - "name": "config", - "type": { - "defined": "GroupConfig" - } - } - ] - }, - { - "name": "lendingPoolAddBank", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "admin", - "isMut": true, - "isSigner": true - }, - { - "name": "bankMint", - "isMut": false, - "isSigner": false - }, - { - "name": "bank", - "isMut": true, - "isSigner": true - }, - { - "name": "liquidityVaultAuthority", - "isMut": false, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault_auth" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "liquidityVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "insuranceVaultAuthority", - "isMut": false, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "insurance_vault_auth" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "insuranceVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "insurance_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "feeVaultAuthority", - "isMut": false, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "fee_vault_auth" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "feeVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "fee_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "rent", - "isMut": false, - "isSigner": false - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "bankConfig", - "type": { - "defined": "BankConfigArg" - } - } - ] - }, - { - "name": "lendingPoolConfigureBank", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "admin", - "isMut": false, - "isSigner": true - }, - { - "name": "bank", - "isMut": true, - "isSigner": false - } - ], - "args": [ - { - "name": "bankConfigOpt", - "type": { - "defined": "BankConfigOptArg" - } - } - ] - }, - { - "name": "lendingPoolHandleBankruptcy", - "docs": [ - "Handle bad debt of a bankrupt marginfi account for a given bank." - ], - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "admin", - "isMut": false, - "isSigner": true - }, - { - "name": "bank", - "isMut": true, - "isSigner": false - }, - { - "name": "marginfiAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "liquidityVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "insuranceVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "insurance_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "insuranceVaultAuthority", - "isMut": false, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "insurance_vault_auth" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [] - }, - { - "name": "marginfiAccountInitialize", - "docs": [ - "Initialize a marginfi account for a given group" - ], - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "marginfiAccount", - "isMut": true, - "isSigner": true - }, - { - "name": "authority", - "isMut": false, - "isSigner": true - }, - { - "name": "feePayer", - "isMut": true, - "isSigner": true - }, - { - "name": "systemProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [] - }, - { - "name": "lendingAccountDeposit", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "marginfiAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "signer", - "isMut": false, - "isSigner": true - }, - { - "name": "bank", - "isMut": true, - "isSigner": false - }, - { - "name": "signerTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "bankLiquidityVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "amount", - "type": "u64" - } - ] - }, - { - "name": "lendingAccountRepay", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "marginfiAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "signer", - "isMut": false, - "isSigner": true - }, - { - "name": "bank", - "isMut": true, - "isSigner": false - }, - { - "name": "signerTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "bankLiquidityVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "amount", - "type": "u64" - }, - { - "name": "repayAll", - "type": { - "option": "bool" - } - } - ] - }, - { - "name": "lendingAccountWithdraw", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "marginfiAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "signer", - "isMut": false, - "isSigner": true - }, - { - "name": "bank", - "isMut": true, - "isSigner": false - }, - { - "name": "destinationTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "bankLiquidityVaultAuthority", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault_auth" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "bankLiquidityVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "amount", - "type": "u64" - }, - { - "name": "withdrawAll", - "type": { - "option": "bool" - } - } - ] - }, - { - "name": "lendingAccountBorrow", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "marginfiAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "signer", - "isMut": false, - "isSigner": true - }, - { - "name": "bank", - "isMut": true, - "isSigner": false - }, - { - "name": "destinationTokenAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "bankLiquidityVaultAuthority", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault_auth" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "bankLiquidityVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "amount", - "type": "u64" - } - ] - }, - { - "name": "lendingAccountLiquidate", - "docs": [ - "Liquidate a lending account balance of an unhealthy marginfi account" - ], - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "assetBank", - "isMut": true, - "isSigner": false - }, - { - "name": "liabBank", - "isMut": true, - "isSigner": false - }, - { - "name": "liquidatorMarginfiAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "signer", - "isMut": false, - "isSigner": true - }, - { - "name": "liquidateeMarginfiAccount", - "isMut": true, - "isSigner": false - }, - { - "name": "bankLiquidityVaultAuthority", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault_auth" - }, - { - "kind": "account", - "type": "publicKey", - "path": "liab_bank" - } - ] - } - }, - { - "name": "bankLiquidityVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "liab_bank" - } - ] - } - }, - { - "name": "bankInsuranceVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "insurance_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "liab_bank" - } - ] - } - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [ - { - "name": "assetAmount", - "type": "u64" - } - ] - }, - { - "name": "lendingPoolAccrueBankInterest", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "bank", - "isMut": true, - "isSigner": false - } - ], - "args": [] - }, - { - "name": "lendingPoolCollectBankFees", - "accounts": [ - { - "name": "marginfiGroup", - "isMut": false, - "isSigner": false - }, - { - "name": "bank", - "isMut": true, - "isSigner": false - }, - { - "name": "liquidityVaultAuthority", - "isMut": false, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault_auth" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "liquidityVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "liquidity_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "insuranceVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "insurance_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "feeVault", - "isMut": true, - "isSigner": false, - "pda": { - "seeds": [ - { - "kind": "const", - "type": "string", - "value": "fee_vault" - }, - { - "kind": "account", - "type": "publicKey", - "path": "bank" - } - ] - } - }, - { - "name": "tokenProgram", - "isMut": false, - "isSigner": false - } - ], - "args": [] - } - ], - "accounts": [ - { - "name": "MarginfiAccount", - "type": { - "kind": "struct", - "fields": [ - { - "name": "group", - "type": "publicKey" - }, - { - "name": "authority", - "type": "publicKey" - }, - { - "name": "lendingAccount", - "type": { - "defined": "LendingAccount" - } - }, - { - "name": "padding", - "type": { - "array": [ - "u64", - 64 - ] - } - } - ] - } - }, - { - "name": "MarginfiGroup", - "type": { - "kind": "struct", - "fields": [ - { - "name": "admin", - "type": "publicKey" - }, - { - "name": "padding0", - "type": { - "array": [ - "u128", - 32 - ] - } - }, - { - "name": "padding1", - "type": { - "array": [ - "u128", - 32 - ] - } - } - ] - } - }, - { - "name": "Bank", - "type": { - "kind": "struct", - "fields": [ - { - "name": "mint", - "type": "publicKey" - }, - { - "name": "mintDecimals", - "type": "u8" - }, - { - "name": "group", - "type": "publicKey" - }, - { - "name": "ignore1", - "type": { - "array": [ - "u8", - 7 - ] - } - }, - { - "name": "assetShareValue", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "liabilityShareValue", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "liquidityVault", - "type": "publicKey" - }, - { - "name": "liquidityVaultBump", - "type": "u8" - }, - { - "name": "liquidityVaultAuthorityBump", - "type": "u8" - }, - { - "name": "insuranceVault", - "type": "publicKey" - }, - { - "name": "insuranceVaultBump", - "type": "u8" - }, - { - "name": "insuranceVaultAuthorityBump", - "type": "u8" - }, - { - "name": "ignore2", - "type": { - "array": [ - "u8", - 4 - ] - } - }, - { - "name": "collectedInsuranceFeesOutstanding", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "feeVault", - "type": "publicKey" - }, - { - "name": "feeVaultBump", - "type": "u8" - }, - { - "name": "feeVaultAuthorityBump", - "type": "u8" - }, - { - "name": "ignore3", - "type": { - "array": [ - "u8", - 6 - ] - } - }, - { - "name": "collectedGroupFeesOutstanding", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "totalLiabilityShares", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "totalAssetShares", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "lastUpdate", - "type": "i64" - }, - { - "name": "config", - "type": { - "defined": "BankConfig" - } - }, - { - "name": "padding0", - "type": { - "array": [ - "u128", - 32 - ] - } - }, - { - "name": "padding1", - "type": { - "array": [ - "u128", - 32 - ] - } - } - ] - } - } - ], - "types": [ - { - "name": "GroupEventHeader", - "type": { - "kind": "struct", - "fields": [ - { - "name": "signer", - "type": { - "option": "publicKey" - } - }, - { - "name": "marginfiGroup", - "type": "publicKey" - } - ] - } - }, - { - "name": "AccountEventHeader", - "type": { - "kind": "struct", - "fields": [ - { - "name": "signer", - "type": { - "option": "publicKey" - } - }, - { - "name": "marginfiAccount", - "type": "publicKey" - }, - { - "name": "marginfiAccountAuthority", - "type": "publicKey" - }, - { - "name": "marginfiGroup", - "type": "publicKey" - } - ] - } - }, - { - "name": "LiquidationBalances", - "type": { - "kind": "struct", - "fields": [ - { - "name": "liquidateeAssetBalance", - "type": "f64" - }, - { - "name": "liquidateeLiabilityBalance", - "type": "f64" - }, - { - "name": "liquidatorAssetBalance", - "type": "f64" - }, - { - "name": "liquidatorLiabilityBalance", - "type": "f64" - } - ] - } - }, - { - "name": "LendingAccount", - "type": { - "kind": "struct", - "fields": [ - { - "name": "balances", - "type": { - "array": [ - { - "defined": "Balance" - }, - 16 - ] - } - }, - { - "name": "padding", - "type": { - "array": [ - "u64", - 8 - ] - } - } - ] - } - }, - { - "name": "Balance", - "type": { - "kind": "struct", - "fields": [ - { - "name": "active", - "type": "bool" - }, - { - "name": "bankPk", - "type": "publicKey" - }, - { - "name": "ignore1", - "type": { - "array": [ - "u8", - 7 - ] - } - }, - { - "name": "assetShares", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "liabilityShares", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "padding", - "type": { - "array": [ - "u64", - 4 - ] - } - } - ] - } - }, - { - "name": "GroupConfig", - "type": { - "kind": "struct", - "fields": [ - { - "name": "admin", - "type": { - "option": "publicKey" - } - } - ] - } - }, - { - "name": "InterestRateConfig", - "type": { - "kind": "struct", - "fields": [ - { - "name": "optimalUtilizationRate", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "plateauInterestRate", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "maxInterestRate", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "insuranceFeeFixedApr", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "insuranceIrFee", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "protocolFixedFeeApr", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "protocolIrFee", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "padding", - "type": { - "array": [ - "u128", - 8 - ] - } - } - ] - } - }, - { - "name": "InterestRateConfigOpt", - "type": { - "kind": "struct", - "fields": [ - { - "name": "optimalUtilizationRate", - "type": { - "option": { - "defined": "WrappedI80F48" - } - } - }, - { - "name": "plateauInterestRate", - "type": { - "option": { - "defined": "WrappedI80F48" - } - } - }, - { - "name": "maxInterestRate", - "type": { - "option": { - "defined": "WrappedI80F48" - } - } - }, - { - "name": "insuranceFeeFixedApr", - "type": { - "option": { - "defined": "WrappedI80F48" - } - } - }, - { - "name": "insuranceIrFee", - "type": { - "option": { - "defined": "WrappedI80F48" - } - } - }, - { - "name": "protocolFixedFeeApr", - "type": { - "option": { - "defined": "WrappedI80F48" - } - } - }, - { - "name": "protocolIrFee", - "type": { - "option": { - "defined": "WrappedI80F48" - } - } - } - ] - } - }, - { - "name": "BankConfig", - "docs": [ - "TODO: Convert weights to (u64, u64) to avoid precision loss (maybe?)" - ], - "type": { - "kind": "struct", - "fields": [ - { - "name": "assetWeightInit", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "assetWeightMaint", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "liabilityWeightInit", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "liabilityWeightMaint", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "depositLimit", - "type": "u64" - }, - { - "name": "interestRateConfig", - "type": { - "defined": "InterestRateConfig" - } - }, - { - "name": "operationalState", - "type": { - "defined": "BankOperationalState" - } - }, - { - "name": "oracleSetup", - "type": { - "defined": "OracleSetup" - } - }, - { - "name": "oracleKeys", - "type": { - "array": [ - "publicKey", - 5 - ] - } - }, - { - "name": "ignore1", - "type": { - "array": [ - "u64", - 6 - ] - } - }, - { - "name": "borrowLimit", - "type": "u64" - }, - { - "name": "riskTier", - "type": { - "defined": "RiskTier" - } - }, - { - "name": "padding", - "type": { - "array": [ - "u64", - 6 - ] - } - } - ] - } - }, - { - "name": "BankConfigArg", - "docs": [ - "TODO: Convert weights to (u64, u64) to avoid precision loss (maybe?)" - ], - "type": { - "kind": "struct", - "fields": [ - { - "name": "assetWeightInit", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "assetWeightMaint", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "liabilityWeightInit", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "liabilityWeightMaint", - "type": { - "defined": "WrappedI80F48" - } - }, - { - "name": "depositLimit", - "type": "u64" - }, - { - "name": "interestRateConfig", - "type": { - "defined": "InterestRateConfig" - } - }, - { - "name": "operationalState", - "type": { - "defined": "BankOperationalState" - } - }, - { - "name": "oracleSetup", - "type": { - "defined": "OracleSetup" - } - }, - { - "name": "oracleKeys", - "type": { - "array": [ - "publicKey", - 5 - ] - } - }, - { - "name": "borrowLimit", - "type": "u64" - }, - { - "name": "riskTier", - "type": { - "defined": "RiskTier" - } - }, - { - "name": "padding", - "type": { - "array": [ - "u64", - 6 - ] - } - } - ] - } - }, - { - "name": "WrappedI80F48", - "type": { - "kind": "struct", - "fields": [ - { - "name": "value", - "type": "i128" - } - ] - } - }, - { - "name": "BankConfigOpt", - "type": { - "kind": "struct", - "fields": [ - { - "name": "assetWeightInit", - "type": { - "option": { - "defined": "WrappedI80F48" - } - } - }, - { - "name": "assetWeightMaint", - "type": { - "option": { - "defined": "WrappedI80F48" - } - } - }, - { - "name": "liabilityWeightInit", - "type": { - "option": { - "defined": "WrappedI80F48" - } - } - }, - { - "name": "liabilityWeightMaint", - "type": { - "option": { - "defined": "WrappedI80F48" - } - } - }, - { - "name": "depositLimit", - "type": { - "option": "u64" - } - }, - { - "name": "borrowLimit", - "type": { - "option": "u64" - } - }, - { - "name": "ignore1", - "type": { - "array": [ - "u64", - 176 - ] - } - }, - { - "name": "operationalState", - "type": { - "option": { - "defined": "BankOperationalState" - } - } - }, - { - "name": "oracle", - "type": { - "option": { - "defined": "OracleConfig" - } - } - }, - { - "name": "interestRateConfig", - "type": { - "option": { - "defined": "InterestRateConfigOpt" - } - } - }, - { - "name": "riskTier", - "type": { - "option": { - "defined": "RiskTier" - } - } - }, - { - "name": "ignore2", - "type": { - "array": [ - "u64", - 168 - ] - } - } - ] - } - }, - { - "name": "BankConfigOptArg", - "type": { - "kind": "struct", - "fields": [ - { - "name": "assetWeightInit", - "type": { - "option": { - "defined": "WrappedI80F48" - } - } - }, - { - "name": "assetWeightMaint", - "type": { - "option": { - "defined": "WrappedI80F48" - } - } - }, - { - "name": "liabilityWeightInit", - "type": { - "option": { - "defined": "WrappedI80F48" - } - } - }, - { - "name": "liabilityWeightMaint", - "type": { - "option": { - "defined": "WrappedI80F48" - } - } - }, - { - "name": "depositLimit", - "type": { - "option": "u64" - } - }, - { - "name": "borrowLimit", - "type": { - "option": "u64" - } - }, - { - "name": "operationalState", - "type": { - "option": { - "defined": "BankOperationalState" - } - } - }, - { - "name": "oracle", - "type": { - "option": { - "defined": "OracleConfig" - } - } - }, - { - "name": "interestRateConfig", - "type": { - "option": { - "defined": "InterestRateConfigOpt" - } - } - }, - { - "name": "riskTier", - "type": { - "option": { - "defined": "RiskTier" - } - } - } - ] - } - }, - { - "name": "OracleConfig", - "type": { - "kind": "struct", - "fields": [ - { - "name": "setup", - "type": { - "defined": "OracleSetup" - } - }, - { - "name": "keys", - "type": { - "array": [ - "publicKey", - 5 - ] - } - } - ] - } - }, - { - "name": "BalanceIncreaseType", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Any" - }, - { - "name": "RepayOnly" - }, - { - "name": "DepositOnly" - } - ] - } - }, - { - "name": "BalanceDecreaseType", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Any" - }, - { - "name": "WithdrawOnly" - }, - { - "name": "BorrowOnly" - }, - { - "name": "BypassBorrowLimit" - } - ] - } - }, - { - "name": "WeightType", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Initial" - }, - { - "name": "Maintenance" - } - ] - } - }, - { - "name": "BalanceSide", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Assets" - }, - { - "name": "Liabilities" - } - ] - } - }, - { - "name": "RiskRequirementType", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Initial" - }, - { - "name": "Maintenance" - } - ] - } - }, - { - "name": "BankOperationalState", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Paused" - }, - { - "name": "Operational" - }, - { - "name": "ReduceOnly" - } - ] - } - }, - { - "name": "OracleSetup", - "type": { - "kind": "enum", - "variants": [ - { - "name": "None" - }, - { - "name": "Pyth" - } - ] - } - }, - { - "name": "OracleKey", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Pyth", - "fields": [ - "publicKey" - ] - } - ] - } - }, - { - "name": "RiskTier", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Collateral" - }, - { - "name": "Isolated" - } - ] - } - }, - { - "name": "BankVaultType", - "type": { - "kind": "enum", - "variants": [ - { - "name": "Liquidity" - }, - { - "name": "Insurance" - }, - { - "name": "Fee" - } - ] - } - } - ], - "events": [ - { - "name": "MarginfiGroupCreateEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "GroupEventHeader" - }, - "index": false - } - ] - }, - { - "name": "MarginfiGroupConfigureEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "GroupEventHeader" - }, - "index": false - }, - { - "name": "config", - "type": { - "defined": "GroupConfig" - }, - "index": false - } - ] - }, - { - "name": "LendingPoolBankCreateEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "GroupEventHeader" - }, - "index": false - }, - { - "name": "bank", - "type": "publicKey", - "index": false - }, - { - "name": "mint", - "type": "publicKey", - "index": false - } - ] - }, - { - "name": "LendingPoolBankConfigureEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "GroupEventHeader" - }, - "index": false - }, - { - "name": "bank", - "type": "publicKey", - "index": false - }, - { - "name": "mint", - "type": "publicKey", - "index": false - }, - { - "name": "config", - "type": { - "defined": "BankConfigOptArg" - }, - "index": false - } - ] - }, - { - "name": "LendingPoolBankAccrueInterestEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "GroupEventHeader" - }, - "index": false - }, - { - "name": "bank", - "type": "publicKey", - "index": false - }, - { - "name": "mint", - "type": "publicKey", - "index": false - }, - { - "name": "delta", - "type": "u64", - "index": false - }, - { - "name": "feesCollected", - "type": "f64", - "index": false - }, - { - "name": "insuranceCollected", - "type": "f64", - "index": false - } - ] - }, - { - "name": "LendingPoolBankCollectFeesEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "GroupEventHeader" - }, - "index": false - }, - { - "name": "bank", - "type": "publicKey", - "index": false - }, - { - "name": "mint", - "type": "publicKey", - "index": false - }, - { - "name": "groupFeesCollected", - "type": "f64", - "index": false - }, - { - "name": "groupFeesOutstanding", - "type": "f64", - "index": false - }, - { - "name": "insuranceFeesCollected", - "type": "f64", - "index": false - }, - { - "name": "insuranceFeesOutstanding", - "type": "f64", - "index": false - } - ] - }, - { - "name": "LendingPoolBankHandleBankruptcyEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "AccountEventHeader" - }, - "index": false - }, - { - "name": "bank", - "type": "publicKey", - "index": false - }, - { - "name": "mint", - "type": "publicKey", - "index": false - }, - { - "name": "badDebt", - "type": "f64", - "index": false - }, - { - "name": "coveredAmount", - "type": "f64", - "index": false - }, - { - "name": "socializedAmount", - "type": "f64", - "index": false - } - ] - }, - { - "name": "MarginfiAccountCreateEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "AccountEventHeader" - }, - "index": false - } - ] - }, - { - "name": "LendingAccountDepositEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "AccountEventHeader" - }, - "index": false - }, - { - "name": "bank", - "type": "publicKey", - "index": false - }, - { - "name": "mint", - "type": "publicKey", - "index": false - }, - { - "name": "amount", - "type": "u64", - "index": false - } - ] - }, - { - "name": "LendingAccountRepayEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "AccountEventHeader" - }, - "index": false - }, - { - "name": "bank", - "type": "publicKey", - "index": false - }, - { - "name": "mint", - "type": "publicKey", - "index": false - }, - { - "name": "amount", - "type": "u64", - "index": false - }, - { - "name": "closeBalance", - "type": "bool", - "index": false - } - ] - }, - { - "name": "LendingAccountBorrowEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "AccountEventHeader" - }, - "index": false - }, - { - "name": "bank", - "type": "publicKey", - "index": false - }, - { - "name": "mint", - "type": "publicKey", - "index": false - }, - { - "name": "amount", - "type": "u64", - "index": false - } - ] - }, - { - "name": "LendingAccountWithdrawEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "AccountEventHeader" - }, - "index": false - }, - { - "name": "bank", - "type": "publicKey", - "index": false - }, - { - "name": "mint", - "type": "publicKey", - "index": false - }, - { - "name": "amount", - "type": "u64", - "index": false - }, - { - "name": "closeBalance", - "type": "bool", - "index": false - } - ] - }, - { - "name": "LendingAccountLiquidateEvent", - "fields": [ - { - "name": "header", - "type": { - "defined": "AccountEventHeader" - }, - "index": false - }, - { - "name": "liquidateeMarginfiAccount", - "type": "publicKey", - "index": false - }, - { - "name": "liquidateeMarginfiAccountAuthority", - "type": "publicKey", - "index": false - }, - { - "name": "assetBank", - "type": "publicKey", - "index": false - }, - { - "name": "assetMint", - "type": "publicKey", - "index": false - }, - { - "name": "liabilityBank", - "type": "publicKey", - "index": false - }, - { - "name": "liabilityMint", - "type": "publicKey", - "index": false - }, - { - "name": "liquidateePreHealth", - "type": "f64", - "index": false - }, - { - "name": "liquidateePostHealth", - "type": "f64", - "index": false - }, - { - "name": "preBalances", - "type": { - "defined": "LiquidationBalances" - }, - "index": false - }, - { - "name": "postBalances", - "type": { - "defined": "LiquidationBalances" - }, - "index": false - } - ] - } - ], - "errors": [ - { - "code": 6000, - "name": "MathError", - "msg": "Math error" - }, - { - "code": 6001, - "name": "BankNotFound", - "msg": "Invalid bank index" - }, - { - "code": 6002, - "name": "LendingAccountBalanceNotFound", - "msg": "Lending account balance not found" - }, - { - "code": 6003, - "name": "BankAssetCapacityExceeded", - "msg": "Bank deposit capacity exceeded" - }, - { - "code": 6004, - "name": "InvalidTransfer", - "msg": "Invalid transfer" - }, - { - "code": 6005, - "name": "MissingPythOrBankAccount", - "msg": "Missing Pyth or Bank account" - }, - { - "code": 6006, - "name": "MissingPythAccount", - "msg": "Missing Pyth account" - }, - { - "code": 6007, - "name": "InvalidOracleAccount", - "msg": "Invalid Pyth account" - }, - { - "code": 6008, - "name": "MissingBankAccount", - "msg": "Missing Bank account" - }, - { - "code": 6009, - "name": "InvalidBankAccount", - "msg": "Invalid Bank account" - }, - { - "code": 6010, - "name": "BadAccountHealth", - "msg": "Bad account health" - }, - { - "code": 6011, - "name": "LendingAccountBalanceSlotsFull", - "msg": "Lending account balance slots are full" - }, - { - "code": 6012, - "name": "BankAlreadyExists", - "msg": "Bank already exists" - }, - { - "code": 6013, - "name": "IllegalLiquidation", - "msg": "Illegal post liquidation state, account is either not unhealthy or liquidation was too big" - }, - { - "code": 6014, - "name": "AccountNotBankrupt", - "msg": "Account is not bankrupt" - }, - { - "code": 6015, - "name": "BalanceNotBadDebt", - "msg": "Account balance is not bad debt" - }, - { - "code": 6016, - "name": "InvalidConfig", - "msg": "Invalid group config" - }, - { - "code": 6017, - "name": "StaleOracle", - "msg": "Stale oracle data" - }, - { - "code": 6018, - "name": "BankPaused", - "msg": "Bank paused" - }, - { - "code": 6019, - "name": "BankReduceOnly", - "msg": "Bank is ReduceOnly mode" - }, - { - "code": 6020, - "name": "BankAccoutNotFound", - "msg": "Bank is missing" - }, - { - "code": 6021, - "name": "OperationDepositOnly", - "msg": "Operation is deposit-only" - }, - { - "code": 6022, - "name": "OperationWithdrawOnly", - "msg": "Operation is withdraw-only" - }, - { - "code": 6023, - "name": "OperationBorrowOnly", - "msg": "Operation is borrow-only" - }, - { - "code": 6024, - "name": "OperationRepayOnly", - "msg": "Operation is repay-only" - }, - { - "code": 6025, - "name": "NoAssetFound", - "msg": "No asset found" - }, - { - "code": 6026, - "name": "NoLiabilityFound", - "msg": "No liability found" - }, - { - "code": 6027, - "name": "InvalidOracleSetup", - "msg": "Invalid oracle setup" - }, - { - "code": 6028, - "name": "IllegalUtilizationRatio", - "msg": "Invalid bank utilization ratio" - }, - { - "code": 6029, - "name": "BankLiabilityCapacityExceeded", - "msg": "Bank borrow cap exceeded" - }, - { - "code": 6030, - "name": "InvalidPrice", - "msg": "Invalid Price" - }, - { - "code": 6031, - "name": "IsolatedAccountIllegalState", - "msg": "Account can have only one liablity when account is under isolated risk" - } - ] -} diff --git a/observability/etl/dataflow-etls/dataflow_etls/orm/__init__.py b/observability/etl/dataflow-etls/dataflow_etls/orm/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/observability/etl/dataflow-etls/dataflow_etls/orm/accounts.py b/observability/etl/dataflow-etls/dataflow_etls/orm/accounts.py deleted file mode 100644 index 66ffb6026..000000000 --- a/observability/etl/dataflow-etls/dataflow_etls/orm/accounts.py +++ /dev/null @@ -1,245 +0,0 @@ -import json -import uuid -from dataclasses import dataclass -from typing import Union, Dict, Type, TYPE_CHECKING -from anchorpy.program.common import NamedInstruction as NamedAccountData - -from dataflow_etls.utils import pascal_to_snake_case, time_str, wrapped_i80f48_to_float, enum_to_str - -if TYPE_CHECKING: - from dataflow_etls.account_parsing import AccountUpdateRaw - -# IDL account names -MARGINFI_GROUP_ACCOUNT_NAME = 'MarginfiGroup' -MARGINFI_ACCOUNT_ACCOUNT_NAME = 'MarginfiAccount' -LENDING_POOL_BANK_ACCOUNT_NAME = 'Bank' - - -@dataclass -class AccountUpdateRecordBase: - SCHEMA = ",".join( - [ - "id:STRING", - "created_at:TIMESTAMP", - "idl_version:INTEGER", - "timestamp:TIMESTAMP", - "owner_program:STRING", - "pubkey:STRING", - ] - ) - - id: str - created_at: str - idl_version: int - timestamp: str - owner_program: str - pubkey: str - - def __init__(self, _parsed_data: NamedAccountData, account_update: "AccountUpdateRaw", idl_version: int): - self.id = str(uuid.uuid4()) - self.created_at = time_str() - self.timestamp = time_str(account_update['timestamp']) - self.idl_version = idl_version - self.owner_program = str(account_update['owner']) - self.pubkey = str(account_update['pubkey']) - - @classmethod - def get_tag(cls, snake_case: bool = False) -> str: - if snake_case: - return pascal_to_snake_case(cls.__name__) - else: - return cls.__name__ - - -# Event headers - - -@dataclass -class MarginfiGroupUpdateRecord(AccountUpdateRecordBase): - SCHEMA = AccountUpdateRecordBase.SCHEMA + "," + ",".join( - [ - "admin:STRING", - ] - ) - - admin: str - - def __init__(self, parsed_data: NamedAccountData, account_update: "AccountUpdateRaw", idl_version: int): - super().__init__(parsed_data, account_update, idl_version) - - self.admin = str(parsed_data.data.admin) - - -@dataclass -class MarginfiAccountUpdateRecord(AccountUpdateRecordBase): - SCHEMA = AccountUpdateRecordBase.SCHEMA + "," + ",".join( - [ - "group:STRING", - "authority:STRING", - "active_balances:STRING", - ] - ) - - group: str - authority: str - active_balances: str - - def __init__(self, parsed_data: NamedAccountData, account_update: "AccountUpdateRaw", idl_version: int): - super().__init__(parsed_data, account_update, idl_version) - - self.group = str(parsed_data.data.group) - self.authority = str(parsed_data.data.authority) - self.active_balances = json.dumps([{"bank": str(balance.bank_pk), - "asset_shares": wrapped_i80f48_to_float(balance.asset_shares), - "liability_shares": wrapped_i80f48_to_float(balance.liability_shares) - } for balance in parsed_data.data.lending_account.balances if - balance.active]) - - -@dataclass -class LendingPoolBankUpdateRecord(AccountUpdateRecordBase): - SCHEMA = AccountUpdateRecordBase.SCHEMA + "," + ",".join( - [ - "mint:STRING", - "mint_decimals:INTEGER", - "group:STRING", - "asset_share_value:BIGNUMERIC", - "liability_share_value:BIGNUMERIC", - "liquidity_vault:STRING", - "liquidity_vault_bump:INTEGER", - "liquidity_vault_authority_bump:INTEGER", - "insurance_vault:STRING", - "insurance_vault_bump:INTEGER", - "insurance_vault_authority_bump:INTEGER", - "fee_vault:STRING", - "fee_vault_bump:INTEGER", - "fee_vault_authority_bump:INTEGER", - "collected_insurance_fees_outstanding:BIGNUMERIC", - "collected_group_fees_outstanding:BIGNUMERIC", - "total_liability_shares:BIGNUMERIC", - "total_asset_shares:BIGNUMERIC", - "last_update:BIGNUMERIC", - "config_asset_weight_init:BIGNUMERIC", - "config_asset_weight_maint:BIGNUMERIC", - "config_liability_weight_init:BIGNUMERIC", - "config_liability_weight_maint:BIGNUMERIC", - "config_deposit_limit:BIGNUMERIC", - "config_borrow_limit:BIGNUMERIC", - "config_interest_rate_config_optimal_utilization_rate:BIGNUMERIC", - "config_interest_rate_config_plateau_interest_rate:BIGNUMERIC", - "config_interest_rate_config_max_interest_rate:BIGNUMERIC", - "config_interest_rate_config_insurance_fee_fixed_apr:BIGNUMERIC", - "config_interest_rate_config_insurance_ir_fee:BIGNUMERIC", - "config_interest_rate_config_group_fixed_fee_apr:BIGNUMERIC", - "config_interest_rate_config_group_ir_fee:BIGNUMERIC", - "config_operational_state:STRING", - "config_oracle_setup:STRING", - "config_oracle_keys:STRING", - "config_risk_tier:STRING", - ] - ) - - mint: str - mint_decimals: int - group: str - asset_share_value: float - liability_share_value: float - liquidity_vault: str - liquidity_vault_bump: int - liquidity_vault_authority_bump: int - insurance_vault: str - insurance_vault_bump: int - insurance_vault_authority_bump: int - fee_vault: str - fee_vault_bump: int - fee_vault_authority_bump: int - collected_insurance_fees_outstanding: float - collected_group_fees_outstanding: float - total_liability_shares: float - total_asset_shares: float - last_update: int - config_asset_weight_init: float - config_asset_weight_maint: float - config_liability_weight_init: float - config_liability_weight_maint: float - config_deposit_limit: int - config_borrow_limit: int - config_interest_rate_config_optimal_utilization_rate: float - config_interest_rate_config_plateau_interest_rate: float - config_interest_rate_config_max_interest_rate: float - config_interest_rate_config_insurance_fee_fixed_apr: float - config_interest_rate_config_insurance_ir_fee: float - config_interest_rate_config_group_fixed_fee_apr: float - config_interest_rate_config_group_ir_fee: float - config_operational_state: str - config_oracle_setup: str - config_oracle_keys: str - config_risk_tier: str - - def __init__(self, parsed_data: NamedAccountData, account_update: "AccountUpdateRaw", idl_version: int): - super().__init__(parsed_data, account_update, idl_version) - - self.mint = str(parsed_data.data.mint) - self.mint_decimals = int(parsed_data.data.mint_decimals) - self.group = str(parsed_data.data.group) - self.asset_share_value = wrapped_i80f48_to_float(parsed_data.data.asset_share_value) - self.liability_share_value = wrapped_i80f48_to_float(parsed_data.data.liability_share_value) - self.liquidity_vault = str(parsed_data.data.liquidity_vault) - self.liquidity_vault_bump = int(parsed_data.data.liquidity_vault_bump) - self.liquidity_vault_authority_bump = int(parsed_data.data.liquidity_vault_authority_bump) - self.insurance_vault = str(parsed_data.data.insurance_vault) - self.insurance_vault_bump = int(parsed_data.data.insurance_vault_bump) - self.insurance_vault_authority_bump = int(parsed_data.data.insurance_vault_authority_bump) - self.fee_vault = str(parsed_data.data.fee_vault) - self.fee_vault_bump = int(parsed_data.data.fee_vault_bump) - self.fee_vault_authority_bump = int(parsed_data.data.fee_vault_authority_bump) - self.collected_insurance_fees_outstanding = wrapped_i80f48_to_float( - parsed_data.data.collected_insurance_fees_outstanding) - self.collected_group_fees_outstanding = wrapped_i80f48_to_float( - parsed_data.data.collected_group_fees_outstanding) - self.total_liability_shares = wrapped_i80f48_to_float(parsed_data.data.total_liability_shares) - self.total_asset_shares = wrapped_i80f48_to_float(parsed_data.data.total_asset_shares) - self.last_update = int(parsed_data.data.last_update) - - self.config_asset_weight_init = wrapped_i80f48_to_float(parsed_data.data.config.asset_weight_init) - self.config_asset_weight_maint = wrapped_i80f48_to_float(parsed_data.data.config.asset_weight_maint) - self.config_liability_weight_init = wrapped_i80f48_to_float(parsed_data.data.config.liability_weight_init) - self.config_liability_weight_maint = wrapped_i80f48_to_float(parsed_data.data.config.liability_weight_maint) - self.config_deposit_limit = int(parsed_data.data.config.deposit_limit) - self.config_borrow_limit = int(parsed_data.data.config.borrow_limit) - self.config_operational_state = enum_to_str(parsed_data.data.config.operational_state) - self.config_oracle_setup = enum_to_str(parsed_data.data.config.oracle_setup) - self.config_oracle_keys = str([str(pk) for pk in parsed_data.data.config.oracle_keys]) - self.config_risk_tier = enum_to_str(parsed_data.data.config.risk_tier) - - self.config_interest_rate_config_optimal_utilization_rate = wrapped_i80f48_to_float( - parsed_data.data.config.interest_rate_config.optimal_utilization_rate) - self.config_interest_rate_config_plateau_interest_rate = wrapped_i80f48_to_float( - parsed_data.data.config.interest_rate_config.plateau_interest_rate) - self.config_interest_rate_config_max_interest_rate = wrapped_i80f48_to_float( - parsed_data.data.config.interest_rate_config.max_interest_rate) - self.config_interest_rate_config_insurance_fee_fixed_apr = wrapped_i80f48_to_float( - parsed_data.data.config.interest_rate_config.insurance_fee_fixed_apr) - self.config_interest_rate_config_insurance_ir_fee = wrapped_i80f48_to_float( - parsed_data.data.config.interest_rate_config.insurance_ir_fee) - self.config_interest_rate_config_group_fixed_fee_apr = wrapped_i80f48_to_float( - parsed_data.data.config.interest_rate_config.group_fixed_fee_apr) - self.config_interest_rate_config_group_ir_fee = wrapped_i80f48_to_float( - parsed_data.data.config.interest_rate_config.group_ir_fee) - - -AccountUpdateRecordTypes = [MarginfiGroupUpdateRecord, - MarginfiAccountUpdateRecord, - LendingPoolBankUpdateRecord] - -AccountUpdateRecord = Union[ - MarginfiGroupUpdateRecord, - MarginfiAccountUpdateRecord, - LendingPoolBankUpdateRecord -] - -ACCOUNT_UPDATE_TO_RECORD_TYPE: Dict[str, Type[AccountUpdateRecord]] = { - f"{MARGINFI_GROUP_ACCOUNT_NAME}": MarginfiGroupUpdateRecord, - f"{MARGINFI_ACCOUNT_ACCOUNT_NAME}": MarginfiAccountUpdateRecord, - f"{LENDING_POOL_BANK_ACCOUNT_NAME}": LendingPoolBankUpdateRecord, -} diff --git a/observability/etl/dataflow-etls/dataflow_etls/orm/events.py b/observability/etl/dataflow-etls/dataflow_etls/orm/events.py deleted file mode 100644 index 1ccc51cb2..000000000 --- a/observability/etl/dataflow-etls/dataflow_etls/orm/events.py +++ /dev/null @@ -1,473 +0,0 @@ -import uuid -from dataclasses import dataclass -from typing import Union, Optional, Dict, Type, TYPE_CHECKING -from anchorpy import Event, NamedInstruction - -from dataflow_etls.utils import pascal_to_snake_case, wrapped_i80f48_to_float, time_str, map_optional - -if TYPE_CHECKING: - from dataflow_etls.transaction_parsing import InstructionWithLogs - -# IDL event names -MARGINFI_GROUP_CREATE_EVENT_NAME = 'MarginfiGroupCreateEvent' -MARGINFI_GROUP_CONFIGURE_EVENT_NAME = 'MarginfiGroupConfigureEvent' -LENDING_POOL_BANK_CREATE_EVENT_NAME = 'LendingPoolBankCreateEvent' -LENDING_POOL_BANK_CONFIGURE_EVENT_NAME = 'LendingPoolBankConfigureEvent' -LENDING_POOL_BANK_ACCRUE_INTEREST_EVENT_NAME = 'LendingPoolBankAccrueInterestEvent' -LENDING_POOL_BANK_COLLECT_FEES_EVENT_NAME = 'LendingPoolBankCollectFeesEvent' -LENDING_POOL_BANK_HANDLE_BANKRUPTCY_EVENT_NAME = 'LendingPoolBankHandleBankruptcyEvent' -MARGINFI_ACCOUNT_CREATE_EVENT_NAME = 'MarginfiAccountCreateEvent' -LENDING_ACCOUNT_DEPOSIT_EVENT_NAME = 'LendingAccountDepositEvent' -LENDING_ACCOUNT_WITHDRAW_EVENT_NAME = 'LendingAccountWithdrawEvent' -LENDING_ACCOUNT_BORROW_EVENT_NAME = 'LendingAccountBorrowEvent' -LENDING_ACCOUNT_REPAY_EVENT_NAME = 'LendingAccountRepayEvent' -LENDING_ACCOUNT_LIQUIDATE_EVENT_NAME = 'LendingAccountLiquidateEvent' - - -@dataclass -class RecordBase: - SCHEMA = ",".join( - [ - "id:STRING", - "created_at:TIMESTAMP", - "idl_version:INTEGER", - "is_cpi:BOOLEAN", - "timestamp:TIMESTAMP", - "signature:STRING", - "indexing_address:STRING", - ] - ) - - id: str - created_at: str - idl_version: int - is_cpi: bool - # call_stack: List[str] - timestamp: str - signature: str - indexing_address: str - - def __init__(self, _event: Event, instruction: "InstructionWithLogs", _instruction_args: NamedInstruction): - self.id = str(uuid.uuid4()) - self.created_at = time_str() - self.timestamp = time_str(instruction.timestamp) - self.idl_version = instruction.idl_version - self.is_cpi = instruction.is_cpi - # self.call_stack=[str(pk) for pk in instruction.call_stack] - self.signature = instruction.signature - self.indexing_address = str(instruction.message.program_id) - - @classmethod - def get_tag(cls, snake_case: bool = False) -> str: - if snake_case: - return pascal_to_snake_case(cls.__name__) - else: - return cls.__name__ - - -# Event headers - -@dataclass -class AccountRecordBase(RecordBase): - SCHEMA = RecordBase.SCHEMA + "," + ",".join( - [ - "signer:STRING", - "marginfi_group:STRING", - "marginfi_account:STRING", - "marginfi_account_authority:STRING", - ] - ) - - signer: Optional[str] - marginfi_group: str - marginfi_account: str - marginfi_account_authority: str - - def __init__(self, event: Event, instruction: "InstructionWithLogs", instruction_args: NamedInstruction): - super().__init__(event, instruction, instruction_args) - - self.signer = str(event.data.header.signer) if event.data.header.signer is not None else None - self.marginfi_group = str(event.data.header.marginfi_group) - self.marginfi_account = str(event.data.header.marginfi_account) - self.marginfi_account_authority = str(event.data.header.marginfi_account_authority) - - -@dataclass -class GroupRecordBase(RecordBase): - SCHEMA = RecordBase.SCHEMA + "," + ",".join( - [ - "signer:STRING", - "marginfi_group:STRING", - ] - ) - - signer: Optional[str] - marginfi_group: str - - def __init__(self, event: Event, instruction: "InstructionWithLogs", instruction_args: NamedInstruction): - super().__init__(event, instruction, instruction_args) - - self.signer = str(event.data.header.signer) if event.data.header.signer is not None else None - self.marginfi_group = str(event.data.header.marginfi_group) - - -# Group events - - -@dataclass -class MarginfiGroupCreateRecord(GroupRecordBase): - SCHEMA = GroupRecordBase.SCHEMA - - def __init__(self, event: Event, instruction: "InstructionWithLogs", instruction_args: NamedInstruction): - super().__init__(event, instruction, instruction_args) - - -@dataclass -class MarginfiGroupConfigureRecord(GroupRecordBase): - SCHEMA = GroupRecordBase.SCHEMA + "," + ",".join( - [ - "admin:STRING", - ] - ) - - admin: Optional[str] - - def __init__(self, event: Event, instruction: "InstructionWithLogs", instruction_args: NamedInstruction): - super().__init__(event, instruction, instruction_args) - - self.admin = event.data.config.admin - - -@dataclass -class LendingPoolBankCreateRecord(GroupRecordBase): - SCHEMA = GroupRecordBase.SCHEMA + "," + ",".join( - [ - "bank:STRING", - "mint:STRING", - ] - ) - - bank: str - mint: str - - def __init__(self, event: Event, instruction: "InstructionWithLogs", instruction_args: NamedInstruction): - super().__init__(event, instruction, instruction_args) - - self.bank = str(event.data.bank) - self.mint = str(event.data.mint) - - -@dataclass -class LendingPoolBankConfigureRecord(GroupRecordBase): - SCHEMA = GroupRecordBase.SCHEMA + "," + ",".join( - [ - "bank:STRING", - "mint:STRING", - "asset_weight_init:NUMERIC", - "asset_weight_maint:NUMERIC", - "liability_weight_init:NUMERIC", - "liability_weight_maint:NUMERIC", - "deposit_limit:BIGNUMERIC", - "borrow_limit:BIGNUMERIC", - "operational_state:STRING", - "oracle_setup:STRING", - "oracle_keys:STRING", - "optimal_utilization_rate:NUMERIC", - "plateau_interest_rate:NUMERIC", - "max_interest_rate:NUMERIC", - "insurance_fee_fixed_apr:NUMERIC", - "insurance_ir_fee:NUMERIC", - "group_fixed_fee_apr:NUMERIC", - "group_ir_fee:NUMERIC", - ] - ) - - bank: str - mint: str - - asset_weight_init: Optional[float] - asset_weight_maint: Optional[float] - - liability_weight_init: Optional[float] - liability_weight_maint: Optional[float] - - deposit_limit: Optional[int] - borrow_limit: Optional[int] - - operational_state: Optional[str] - oracle_setup: Optional[str] - oracle_keys: Optional[str] - - optimal_utilization_rate: Optional[float] - plateau_interest_rate: Optional[float] - max_interest_rate: Optional[float] - - insurance_fee_fixed_apr: Optional[float] - insurance_ir_fee: Optional[float] - group_fixed_fee_apr: Optional[float] - group_ir_fee: Optional[float] - - def __init__(self, event: Event, instruction: "InstructionWithLogs", instruction_args: NamedInstruction): - super().__init__(event, instruction, instruction_args) - - self.bank = str(event.data.bank) - self.mint = str(event.data.mint) - - self.asset_weight_init = map_optional(event.data.config.asset_weight_init, wrapped_i80f48_to_float) - self.asset_weight_maint = map_optional(event.data.config.asset_weight_maint, wrapped_i80f48_to_float) - self.liability_weight_init = map_optional(event.data.config.liability_weight_init, wrapped_i80f48_to_float) - self.liability_weight_maint = map_optional(event.data.config.liability_weight_maint, wrapped_i80f48_to_float) - self.deposit_limit = event.data.config.deposit_limit - self.borrow_limit = event.data.config.borrow_limit - - self.operational_state = map_optional(event.data.config.operational_state, str) - if event.data.config.oracle: - self.oracle_setup = str(event.data.config.oracle.setup) - self.oracle_keys = str([str(pk) for pk in event.data.config.oracle.keys]) - else: - self.oracle_setup = None - self.oracle_keys = None - - self.optimal_utilization_rate = map_optional( - event.data.config.interest_rate_config.optimal_utilization_rate, wrapped_i80f48_to_float) - self.plateau_interest_rate = map_optional( - event.data.config.interest_rate_config.plateau_interest_rate, wrapped_i80f48_to_float) - self.max_interest_rate = map_optional( - event.data.config.interest_rate_config.max_interest_rate, wrapped_i80f48_to_float) - self.insurance_fee_fixed_apr = map_optional( - event.data.config.interest_rate_config.insurance_fee_fixed_apr, wrapped_i80f48_to_float) - self.insurance_ir_fee = map_optional( - event.data.config.interest_rate_config.insurance_ir_fee, wrapped_i80f48_to_float) - self.group_fixed_fee_apr = map_optional( - event.data.config.interest_rate_config.group_fixed_fee_apr, wrapped_i80f48_to_float) - self.group_ir_fee = map_optional( - event.data.config.interest_rate_config.group_ir_fee, wrapped_i80f48_to_float) - - -@dataclass -class LendingPoolBankAccrueInterestRecord(GroupRecordBase): - SCHEMA = GroupRecordBase.SCHEMA + "," + ",".join( - [ - "bank:STRING", - "mint:STRING", - "delta:BIGNUMERIC", - "fees_collected:BIGNUMERIC", - "insurance_collected:BIGNUMERIC", - ] - ) - - bank: str - mint: str - delta: int - fees_collected: float - insurance_collected: float - - def __init__(self, event: Event, instruction: "InstructionWithLogs", instruction_args: NamedInstruction): - super().__init__(event, instruction, instruction_args) - - self.bank = str(event.data.bank) - self.mint = str(event.data.mint) - self.delta = event.data.delta - self.fees_collected = event.data.fees_collected - self.insurance_collected = event.data.insurance_collected - - -@dataclass -class LendingPoolBankCollectFeesRecord(GroupRecordBase): - SCHEMA = GroupRecordBase.SCHEMA + "," + ",".join( - [ - "bank:STRING", - "mint:STRING", - "group_fees_collected:BIGNUMERIC", - "group_fees_outstanding:BIGNUMERIC", - "insurance_fees_collected:BIGNUMERIC", - "insurance_fees_outstanding:BIGNUMERIC", - ] - ) - - bank: str - mint: str - group_fees_collected: float - group_fees_outstanding: float - insurance_fees_collected: float - insurance_fees_outstanding: float - - def __init__(self, event: Event, instruction: "InstructionWithLogs", instruction_args: NamedInstruction): - super().__init__(event, instruction, instruction_args) - - self.bank = str(event.data.bank) - self.mint = str(event.data.mint) - self.group_fees_collected = event.data.group_fees_collected - self.group_fees_outstanding = event.data.group_fees_outstanding - self.insurance_fees_collected = event.data.insurance_fees_collected - self.insurance_fees_outstanding = event.data.insurance_fees_outstanding - - -@dataclass -class LendingPoolBankHandleBankruptcyRecord(GroupRecordBase): - SCHEMA = GroupRecordBase.SCHEMA + "," + ",".join( - [ - "bank:STRING", - "mint:STRING", - "bad_debt:BIGNUMERIC", - "covered_amount:BIGNUMERIC", - "socialized_amount:BIGNUMERIC", - ] - ) - - bank: str - mint: str - bad_debt: float - covered_amount: float - socialized_amount: float - - def __init__(self, event: Event, instruction: "InstructionWithLogs", instruction_args: NamedInstruction): - super().__init__(event, instruction, instruction_args) - - self.bank = str(event.data.bank) - self.mint = str(event.data.mint) - self.bad_debt = event.data.bad_debt - self.covered_amount = event.data.covered_amount - self.socialized_amount = event.data.socialized_amount - - -# Account events - -@dataclass -class MarginfiAccountCreateRecord(AccountRecordBase): - SCHEMA = AccountRecordBase.SCHEMA - - def __init__(self, event: Event, instruction: "InstructionWithLogs", instruction_args: NamedInstruction): - super().__init__(event, instruction, instruction_args) - - -@dataclass -class LendingAccountChangeLiquidityRecord(AccountRecordBase): - SCHEMA = AccountRecordBase.SCHEMA + "," + ",".join( - [ - "operation:STRING", - "bank:STRING", - "mint:STRING", - "amount:BIGNUMERIC", - "balance_closed:BOOLEAN" - ] - ) - - operation: str - bank: str - mint: str - amount: int - balance_closed: bool - - def __init__(self, event: Event, instruction: "InstructionWithLogs", instruction_args: NamedInstruction): - super().__init__(event, instruction, instruction_args) - - self.operation = event.name.removeprefix("LendingAccount").removesuffix("Event").lower() - self.bank = str(event.data.bank) - self.mint = str(event.data.mint) - self.amount = event.data.amount - self.balance_closed = False - if event.name == LENDING_ACCOUNT_REPAY_EVENT_NAME or event.name == LENDING_ACCOUNT_WITHDRAW_EVENT_NAME: - self.balance_closed = event.data.close_balance - - -@dataclass -class LendingAccountLiquidateRecord(AccountRecordBase): - SCHEMA = AccountRecordBase.SCHEMA + "," + ",".join( - [ - "liquidatee_marginfi_account:STRING", - "liquidatee_marginfi_account_authority:STRING", - "asset_bank:STRING", - "asset_mint:STRING", - "liability_bank:STRING", - "liability_mint:STRING", - "liquidatee_pre_health:BIGNUMERIC", - "liquidatee_post_health:BIGNUMERIC", - "liquidatee_asset_pre_balance:BIGNUMERIC", - "liquidatee_liability_pre_balance:BIGNUMERIC", - "liquidator_asset_pre_balance:BIGNUMERIC", - "liquidator_liability_pre_balance:BIGNUMERIC", - "liquidatee_asset_post_balance:BIGNUMERIC", - "liquidatee_liability_post_balance:BIGNUMERIC", - "liquidator_asset_post_balance:BIGNUMERIC", - "liquidator_liability_post_balance:BIGNUMERIC", - ] - ) - - liquidatee_marginfi_account: str - liquidatee_marginfi_account_authority: str - asset_bank: str - asset_mint: str - liability_bank: str - liability_mint: str - liquidatee_pre_health: float - liquidatee_post_health: float - liquidatee_asset_pre_balance: float - liquidatee_liability_pre_balance: float - liquidator_asset_pre_balance: float - liquidator_liability_pre_balance: float - liquidatee_asset_post_balance: float - liquidatee_liability_post_balance: float - liquidator_asset_post_balance: float - liquidator_liability_post_balance: float - - def __init__(self, event: Event, instruction: "InstructionWithLogs", instruction_args: NamedInstruction): - super().__init__(event, instruction, instruction_args) - - self.liquidatee_marginfi_account = str(event.data.liquidatee_marginfi_account) - self.liquidatee_marginfi_account_authority = str(event.data.liquidatee_marginfi_account_authority) - self.asset_bank = str(event.data.asset_bank) - self.asset_mint = str(event.data.asset_mint) - self.liability_bank = str(event.data.liability_bank) - self.liability_mint = str(event.data.liability_mint) - self.liquidatee_pre_health = event.data.liquidatee_pre_health - self.liquidatee_post_health = event.data.liquidatee_post_health - self.liquidatee_asset_pre_balance = event.data.pre_balances.liquidatee_asset_balance - self.liquidatee_liability_pre_balance = event.data.pre_balances.liquidatee_liability_balance - self.liquidator_asset_pre_balance = event.data.pre_balances.liquidator_asset_balance - self.liquidator_liability_pre_balance = event.data.pre_balances.liquidator_liability_balance - self.liquidatee_asset_post_balance = event.data.post_balances.liquidatee_asset_balance - self.liquidatee_liability_post_balance = event.data.post_balances.liquidatee_liability_balance - self.liquidator_asset_post_balance = event.data.post_balances.liquidator_asset_balance - self.liquidator_liability_post_balance = event.data.post_balances.liquidator_liability_balance - - -EventRecordTypes = [MarginfiGroupCreateRecord, - MarginfiGroupConfigureRecord, - LendingPoolBankCreateRecord, - LendingPoolBankConfigureRecord, - LendingPoolBankAccrueInterestRecord, - LendingPoolBankCollectFeesRecord, - LendingPoolBankHandleBankruptcyRecord, - MarginfiAccountCreateRecord, - LendingAccountChangeLiquidityRecord, - LendingAccountLiquidateRecord] - -EventRecord = Union[ - MarginfiGroupCreateRecord, - MarginfiGroupConfigureRecord, - LendingPoolBankCreateRecord, - LendingPoolBankConfigureRecord, - LendingPoolBankAccrueInterestRecord, - LendingPoolBankCollectFeesRecord, - LendingPoolBankHandleBankruptcyRecord, - MarginfiAccountCreateRecord, - LendingAccountChangeLiquidityRecord, - LendingAccountLiquidateRecord -] - -EVENT_TO_RECORD_TYPE: Dict[str, Type[EventRecord]] = { - f"{MARGINFI_GROUP_CREATE_EVENT_NAME}": MarginfiGroupCreateRecord, - f"{MARGINFI_GROUP_CONFIGURE_EVENT_NAME}": MarginfiGroupConfigureRecord, - f"{LENDING_POOL_BANK_CREATE_EVENT_NAME}": LendingPoolBankCreateRecord, - f"{LENDING_POOL_BANK_CONFIGURE_EVENT_NAME}": LendingPoolBankConfigureRecord, - f"{LENDING_POOL_BANK_ACCRUE_INTEREST_EVENT_NAME}": LendingPoolBankAccrueInterestRecord, - f"{LENDING_POOL_BANK_COLLECT_FEES_EVENT_NAME}": LendingPoolBankCollectFeesRecord, - f"{LENDING_POOL_BANK_HANDLE_BANKRUPTCY_EVENT_NAME}": LendingPoolBankHandleBankruptcyRecord, - f"{MARGINFI_ACCOUNT_CREATE_EVENT_NAME}": MarginfiAccountCreateRecord, - f"{LENDING_ACCOUNT_DEPOSIT_EVENT_NAME}": LendingAccountChangeLiquidityRecord, - f"{LENDING_ACCOUNT_WITHDRAW_EVENT_NAME}": LendingAccountChangeLiquidityRecord, - f"{LENDING_ACCOUNT_BORROW_EVENT_NAME}": LendingAccountChangeLiquidityRecord, - f"{LENDING_ACCOUNT_REPAY_EVENT_NAME}": LendingAccountChangeLiquidityRecord, - f"{LENDING_ACCOUNT_LIQUIDATE_EVENT_NAME}": LendingAccountLiquidateRecord, -} diff --git a/observability/etl/dataflow-etls/dataflow_etls/transaction_parsing.py b/observability/etl/dataflow-etls/dataflow_etls/transaction_parsing.py deleted file mode 100644 index 81b9247c3..000000000 --- a/observability/etl/dataflow-etls/dataflow_etls/transaction_parsing.py +++ /dev/null @@ -1,240 +0,0 @@ -import base64 -import json -import re -from dataclasses import dataclass, asdict -from datetime import datetime -from typing import List, Any, Callable, Optional, Dict, Sequence, Tuple, Generator, Union, TypedDict -from decimal import Decimal - -from anchorpy_core.idl import Idl -from solders.message import Message, MessageV0 -from based58 import based58 # type: ignore -from anchorpy import NamedInstruction -from solders.instruction import CompiledInstruction -from solders.pubkey import Pubkey -import apache_beam as beam # type: ignore - -from dataflow_etls.idl_versions import VersionedProgram, IdlPool, Cluster -from dataflow_etls.orm.events import EVENT_TO_RECORD_TYPE, EventRecord - - -@dataclass -class Instruction: - program_id: Pubkey - accounts: List[Pubkey] - data: bytes - - -@dataclass -class InstructionWithLogs: - timestamp: datetime - idl_version: int - signature: str - message: Instruction - logs: List[str] - inner_instructions: List["InstructionWithLogs"] - logs_truncated: bool - is_cpi: bool - # call_stack: List[Pubkey] - - -INVOKE_MESSAGE = "Program log: " -PROGRAM_LOG = "Program log: " -PROGRAM_DATA = "Program data: " -LOG_TRUNCATED = "Log truncated" - -TransactionRaw = TypedDict('TransactionRaw', { - 'id': str, - 'created_at': datetime, - 'timestamp': datetime, - 'signature': str, - 'indexing_address': str, - 'slot': Decimal, - 'signer': str, - 'success': bool, - 'version': str, - 'fee': Decimal, - 'meta': str, - 'message': str, -}) - - -class IndexedProgramNotSupported(Exception): - pass - - -def extract_events_from_tx(tx: TransactionRaw, min_idl_version: int, cluster: Cluster, idl_pool: IdlPool) -> List[ - EventRecord]: - indexed_program_id_str = tx["indexing_address"] - indexed_program_id = Pubkey.from_string(indexed_program_id_str) - tx_slot = int(tx["slot"]) - - try: - idl_raw, idl_version = idl_pool.get_idl_for_slot(indexed_program_id_str, tx_slot) - except KeyError: - raise IndexedProgramNotSupported(f"Unsupported indexed program {indexed_program_id_str}") - - idl = Idl.from_json(idl_raw) - program = VersionedProgram(cluster, idl_version, idl, indexed_program_id) - - if min_idl_version is not None and idl_version < min_idl_version: - return [] - - meta = json.loads(tx["meta"]) - message_bytes = base64.b64decode(tx["message"]) - - tx_version = tx["version"] - message_decoded: Union[Message, MessageV0] - if tx_version == "legacy": - message_decoded = Message.from_bytes(message_bytes) - elif tx_version == "0": - message_decoded = MessageV0.from_bytes(message_bytes[1:]) - else: - return [] - - merged_instructions = merge_instructions_and_cpis(message_decoded.instructions, meta["innerInstructions"]) - expanded_instructions = expand_instructions(message_decoded.account_keys, merged_instructions) - ixs_with_logs = reconcile_instruction_logs(tx["timestamp"], tx["signature"], expanded_instructions, - meta["logMessages"], idl_version) - - records_list = [] - for ix_with_logs in ixs_with_logs: - records_list.extend(extract_events_from_ix(ix_with_logs, program)) - - return records_list - - -def merge_instructions_and_cpis(message_instructions: List[CompiledInstruction], inner_instructions: List[Any]) -> List[ - CompiledInstruction]: - def search(array: List[Any], callback: Callable[[Any], bool]) -> Optional[int]: - for i, elem in enumerate(array): - if callback(elem): - return i - return None - - compiled_instructions: List[CompiledInstruction] = [] - for ix_index, instruction in enumerate(message_instructions): - compiled_instructions.append(instruction) - inner_ixs_index = search(inner_instructions, lambda inner_ixs: bool(inner_ixs["index"] == ix_index)) - if inner_ixs_index is not None: - for ix_raw in inner_instructions[inner_ixs_index]["instructions"]: - compiled_instructions.append( - CompiledInstruction(program_id_index=ix_raw["programIdIndex"], accounts=bytes(ix_raw["accounts"]), - data=based58.b58decode(str.encode(ix_raw["data"])))) - - return compiled_instructions - - -def expand_instructions(account_keys: List[Pubkey], compiled_instructions: List[CompiledInstruction]) -> List[ - Instruction]: - expanded_instructions = [] - for ix in compiled_instructions: - expanded_instruction = Instruction(data=ix.data, - accounts=[account_keys[account_index] for account_index in ix.accounts], - program_id=account_keys[ix.program_id_index]) - expanded_instructions.append(expanded_instruction) - return expanded_instructions - - -def reconcile_instruction_logs(timestamp: datetime, signature: str, instructions: List[Instruction], logs: List[str], - idl_version: int) -> \ - List[InstructionWithLogs]: - depth = 0 - instructions_consumed = 0 - instructions_with_logs: List[InstructionWithLogs] = [] - - for log in logs: - if log.startswith(LOG_TRUNCATED): - ix = get_latest_ix_ref(instructions_with_logs, depth) - ix.logs_truncated = True - else: - invoke_regex = r"Program (?P\w+) invoke" - matches = re.search(invoke_regex, log) - if matches is not None: - target_instruction_list = instructions_with_logs - for i in range(depth): - target_instruction_list = target_instruction_list[-1].inner_instructions - - message = instructions[instructions_consumed] - target_instruction_list.append( - InstructionWithLogs(timestamp=timestamp, idl_version=idl_version, signature=signature, logs=[log], - message=message, - inner_instructions=[], logs_truncated=False, is_cpi=(depth > 0))) - depth += 1 - instructions_consumed += 1 - else: - if "success" in log or "failed" in log: - ix = get_latest_ix_ref(instructions_with_logs, depth) - ix.logs.append(log) - depth -= 1 - else: - ix = get_latest_ix_ref(instructions_with_logs, depth) - ix.logs.append(log) - - return instructions_with_logs - - -def get_latest_ix_ref(instructions: List[InstructionWithLogs], stack_depth: int) -> "InstructionWithLogs": - target_instruction_list = instructions - for i in range(stack_depth - 1): - target_instruction_list = target_instruction_list[-1].inner_instructions - return target_instruction_list[-1] - - -def extract_events_from_ix(ix: InstructionWithLogs, program: VersionedProgram) -> List[EventRecord]: - ix_events: List[EventRecord] = [] - - if ix.message.program_id == program.program_id: - ix_events.extend(create_records_from_ix(ix, program)) - - for inner_ix in ix.inner_instructions: - ix_events.extend(extract_events_from_ix(inner_ix, program)) - - return ix_events - - -def create_records_from_ix(ix: InstructionWithLogs, program: VersionedProgram) -> Sequence[EventRecord]: - records: List[EventRecord] = [] - - try: - parsed_ix: NamedInstruction = program.coder.instruction.parse(ix.message.data) - except Exception as e: - print(f"failed to parse instruction data in tx {ix.signature} ({ix.timestamp})", e) - return records - - for log in ix.logs: - if not log.startswith(PROGRAM_DATA): - continue - - event_encoded = log[len(PROGRAM_DATA):] - try: - event_bytes = base64.b64decode(event_encoded) - except Exception as e: - print(f"error: failed to decode base64 event string in tx {ix.signature}", e) - continue - - try: - event = program.coder.events.parse(event_bytes) - except Exception as e: - print(f"failed to parse event in tx {ix.signature}", e) - continue - - if event is None or event.name not in EVENT_TO_RECORD_TYPE: - print(f"discarding unsupported event in tx {ix.signature}") - print(event) - else: - # noinspection PyPep8Naming - RecordType = EVENT_TO_RECORD_TYPE[event.name] - records.append(RecordType(event, ix, parsed_ix)) - - return records - - -class DispatchEventsDoFn(beam.DoFn): # type: ignore - def process(self, record: EventRecord, *args: Tuple[Any], **kwargs: Dict[str, Tuple[Any]]) -> Generator[ - str, None, None]: - yield beam.pvalue.TaggedOutput(record.get_tag(), record) - - -def dictionify_record(record: EventRecord) -> Dict[str, Any]: - return asdict(record) diff --git a/observability/etl/dataflow-etls/dataflow_etls/utils.py b/observability/etl/dataflow-etls/dataflow_etls/utils.py deleted file mode 100644 index 8d44c156c..000000000 --- a/observability/etl/dataflow-etls/dataflow_etls/utils.py +++ /dev/null @@ -1,40 +0,0 @@ -import re -from datetime import datetime, timezone -from typing import NamedTuple, TypeVar, Optional, Callable, Any - -from decimal import Decimal - - -def pascal_to_snake_case(string: str) -> str: - return re.sub('(?!^)([A-Z]+)', r'_\1', string).lower() - - -WrappedI80F48 = NamedTuple('WrappedI80F48', [('value', int)]) - - -def wrapped_i80f48_to_float(wrapped_i80f48: WrappedI80F48) -> float: - nb_of_fractional_bits = 48 - value = Decimal(wrapped_i80f48.value) - value = value / 2 ** nb_of_fractional_bits - return float(value) - - -def enum_to_str(enum: Any) -> str: - return enum.__class__.__name__.lower() - - -InputType = TypeVar('InputType') -OutputType = TypeVar('OutputType') - - -def map_optional(element: Optional[InputType], fn: Callable[[InputType], OutputType]) -> Optional[OutputType]: - if element is not None: - return fn(element) - else: - return None - - -def time_str(dt: Optional[datetime] = None) -> str: - if dt is None: - dt = datetime.now(timezone.utc) - return dt.strftime("%Y-%m-%d %H:%M:%S %Z") diff --git a/observability/etl/dataflow-etls/jobs/marginfi-v2-account-parsing-batch/job.py b/observability/etl/dataflow-etls/jobs/marginfi-v2-account-parsing-batch/job.py deleted file mode 100644 index 6f33d274a..000000000 --- a/observability/etl/dataflow-etls/jobs/marginfi-v2-account-parsing-batch/job.py +++ /dev/null @@ -1,141 +0,0 @@ -import argparse -import logging -from typing import List, Optional, Any, Dict, Union -import apache_beam as beam # type: ignore -from apache_beam.options.pipeline_options import PipelineOptions # type: ignore - -from dataflow_etls.account_parsing import parse_account, OwnerProgramNotSupported, dictionify_record, DispatchEventsDoFn -from dataflow_etls.idl_versions import Cluster, IdlPool -from dataflow_etls.orm.accounts import AccountUpdateRecordTypes, AccountUpdateRecord - - -def run( - input_table: str, - output_table_namespace: str, - cluster: Cluster, - min_idl_version: int, - start_date: Optional[str] = None, - end_date: Optional[str] = None, - beam_args: Optional[List[str]] = None, -) -> None: - if beam_args is None: - beam_args = [] - - idl_pool = IdlPool(cluster) - - def parse_account_internal(tx: Any) -> List[AccountUpdateRecord]: - try: - return parse_account(tx, min_idl_version, cluster, idl_pool) - except OwnerProgramNotSupported: - return [] - - """Build and run the pipeline.""" - pipeline_options = PipelineOptions(beam_args, save_main_session=True) - - if start_date is not None and end_date is not None: - input_query = f'SELECT * FROM `{input_table}` WHERE DATE(timestamp) >= "{start_date}" AND DATE(timestamp) < "{end_date}"' - elif start_date is not None: - input_query = ( - f'SELECT * FROM `{input_table}` WHERE DATE(timestamp) >= "{start_date}"' - ) - elif end_date is not None: - input_query = ( - f'SELECT * FROM `{input_table}` WHERE DATE(timestamp) < "{end_date}"' - ) - else: - input_query = f"SELECT * FROM `{input_table}`" - - with beam.Pipeline(options=pipeline_options) as pipeline: - # Define steps - read_raw_txs = beam.io.ReadFromBigQuery(query=input_query, use_standard_sql=True) - - extract_events = beam.FlatMap(parse_account_internal) - - dispatch_events = beam.ParDo(DispatchEventsDoFn()).with_outputs( - *[rt.get_tag() for rt in AccountUpdateRecordTypes]) - - dictionify_events = beam.Map(dictionify_record) - - writers: Dict[str, Union[beam.io.WriteToText, beam.io.WriteToBigQuery]] = {} - for rt in AccountUpdateRecordTypes: - if output_table_namespace == "local_file": # For testing purposes - writers[rt.get_tag()] = beam.io.WriteToText(f"account_updates_{rt.get_tag(snake_case=True)}") - else: - writers[rt.get_tag()] = beam.io.WriteToBigQuery( - f"{output_table_namespace}_{rt.get_tag(snake_case=True)}", - schema=rt.SCHEMA, - write_disposition=beam.io.BigQueryDisposition.WRITE_APPEND, - create_disposition=beam.io.BigQueryDisposition.CREATE_IF_NEEDED, - ) - - # Define pipeline - tagged_events = ( - pipeline - | "ReadRawTxs" >> read_raw_txs - | "ExtractEvents" >> extract_events - | "DispatchEvents" >> dispatch_events - ) - - for rt in AccountUpdateRecordTypes: - (tagged_events[rt.get_tag()] - | f"Dictionify{rt.get_tag()}" >> dictionify_events - | f"Write{rt.get_tag()}" >> writers[rt.get_tag()] - ) - - -def main() -> None: - logging.getLogger().setLevel(logging.INFO) - - parser = argparse.ArgumentParser() - parser.add_argument( - "--input_table", - type=str, - required=True, - help="Input BigQuery table specified as: " - "PROJECT.DATASET.TABLE.", - ) - parser.add_argument( - "--output_table_namespace", - type=str, - required=True, - help="Output BigQuery namespace where parsed account tables are located: PROJECT:DATASET.TABLE", - ) - parser.add_argument( - "--cluster", - type=str, - required=False, - default="mainnet", - help="Solana cluster being indexed: mainnet | devnet", - ) - parser.add_argument( - "--min_idl_version", - type=int, - required=False, - default=0, - help="Minimum IDL version to consider: int", - ) - parser.add_argument( - "--start_date", - type=str, - help="Start date to consider (inclusive) as: YYYY-MM-DD", - ) - parser.add_argument( - "--end_date", - type=str, - help="End date to consider (exclusive) as: YYYY-MM-DD", - ) - known_args, remaining_args = parser.parse_known_args() - - run( - input_table=known_args.input_table, - output_table_namespace=known_args.output_table_namespace, - cluster=known_args.cluster, - min_idl_version=known_args.min_idl_version, - start_date=known_args.start_date, - end_date=known_args.end_date, - beam_args=remaining_args, - ) - - -if __name__ == "__main__": - main() diff --git a/observability/etl/dataflow-etls/jobs/marginfi-v2-account-parsing-batch/metadata.json b/observability/etl/dataflow-etls/jobs/marginfi-v2-account-parsing-batch/metadata.json deleted file mode 100644 index 5a82d4b2c..000000000 --- a/observability/etl/dataflow-etls/jobs/marginfi-v2-account-parsing-batch/metadata.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "name": "marginfi-v2-account-parsing-batch", - "description": "Parses individual account updates from a BigQuery table and stores them in dedicated BigQuery tables.", - "parameters": [ - { - "name": "input_table", - "label": "BigQuery input table name.", - "helpText": "Name of the input table to consume from.", - "regexes": [ - "([^.]+.)?[^.]+[.].+" - ] - }, - { - "name": "output_table_namespace", - "label": "BigQuery output tables namespace.", - "helpText": "Namespace where the BigQuery output tables are located.", - "regexes": [ - "([^:]+:)?[^.]+[.].+" - ] - }, - { - "name": "cluster", - "label": "Solana cluster.", - "isOptional": true, - "helpText": "Cluster where the account updates are executed (used to pull IDL version depending on tx slot).", - "regexes": ["mainnet|devnet"] - }, - { - "name": "min_idl_version", - "label": "Minimum IDL version.", - "isOptional": true, - "helpText": "Minimum IDL version for which txs will be parsed. Default: 0", - "regexes": [] - }, - { - "name": "start_date", - "label": "Start date.", - "isOptional": true, - "helpText": "Start date to consider (inclusive).", - "regexes": [] - }, - { - "name": "end_date", - "label": "End date.", - "isOptional": true, - "helpText": "End date to consider (exclusive).", - "regexes": [] - } - ] -} diff --git a/observability/etl/dataflow-etls/jobs/marginfi-v2-account-parsing-stream/job.py b/observability/etl/dataflow-etls/jobs/marginfi-v2-account-parsing-stream/job.py deleted file mode 100644 index f1a926bcb..000000000 --- a/observability/etl/dataflow-etls/jobs/marginfi-v2-account-parsing-stream/job.py +++ /dev/null @@ -1,146 +0,0 @@ -import argparse -from dateutil import parser -import json -import logging -from typing import List, Optional, Any, Dict, Union -from decimal import Decimal - -import apache_beam as beam # type: ignore -from apache_beam.options.pipeline_options import PipelineOptions # type: ignore - -from dataflow_etls.account_parsing import parse_account, OwnerProgramNotSupported, dictionify_record, \ - DispatchEventsDoFn, AccountUpdateRaw -from dataflow_etls.idl_versions import Cluster, IdlPool -from dataflow_etls.orm.accounts import AccountUpdateRecordTypes, AccountUpdateRecord - - -def parse_json(message: bytes) -> AccountUpdateRaw: - account_update_raw = json.loads(message.decode("utf-8")) - return AccountUpdateRaw( - id=account_update_raw['id'], - created_at=parser.parse(account_update_raw['created_at']), - timestamp=parser.parse(account_update_raw['timestamp']), - owner=account_update_raw['owner'], - slot=Decimal(account_update_raw['slot']), - pubkey=account_update_raw['pubkey'], - txn_signature=account_update_raw['txn_signature'], - lamports=Decimal(account_update_raw['lamports']), - executable=bool(account_update_raw['executable']), - rent_epoch=Decimal(account_update_raw['rent_epoch']), - data=account_update_raw['data'], - ) - - -def run( - input_topic: str, - input_subscription: str, - output_table_namespace: str, - cluster: Cluster, - min_idl_version: int, - beam_args: Optional[List[str]] = None, -) -> None: - if beam_args is None: - beam_args = [] - - idl_pool = IdlPool(cluster) - - def parse_account_internal(tx: Any) -> List[AccountUpdateRecord]: - try: - return parse_account(tx, min_idl_version, cluster, idl_pool) - except OwnerProgramNotSupported: - return [] - - """Build and run the pipeline.""" - pipeline_options = PipelineOptions(beam_args, save_main_session=True, streaming=True) - - with beam.Pipeline(options=pipeline_options) as pipeline: - # Define steps - read_raw_txs = beam.io.ReadFromPubSub( - topic=input_topic, subscription=input_subscription - ).with_output_types(bytes) - - parse_to_raw_txs = beam.Map(parse_json) - - extract_events = beam.FlatMap(parse_account_internal) - - dispatch_events = beam.ParDo(DispatchEventsDoFn()).with_outputs( - *[rt.get_tag() for rt in AccountUpdateRecordTypes]) - - dictionify_events = beam.Map(dictionify_record) - - writers: Dict[str, Union[beam.io.WriteToText, beam.io.WriteToBigQuery]] = {} - for rt in AccountUpdateRecordTypes: - if output_table_namespace == "local_file": # For testing purposes - writers[rt.get_tag()] = beam.io.WriteToText(f"account_updates_{rt.get_tag(snake_case=True)}") - else: - writers[rt.get_tag()] = beam.io.WriteToBigQuery( - f"{output_table_namespace}_{rt.get_tag(snake_case=True)}", - schema=rt.SCHEMA, - write_disposition=beam.io.BigQueryDisposition.WRITE_APPEND, - create_disposition=beam.io.BigQueryDisposition.CREATE_IF_NEEDED, - ) - - # Define pipeline - tagged_events = ( - pipeline - | "ReadRawTxs" >> read_raw_txs - | "ParseTxsToRawTxs" >> parse_to_raw_txs - | "ExtractEvents" >> extract_events - | "DispatchEvents" >> dispatch_events - ) - - for rt in AccountUpdateRecordTypes: - (tagged_events[rt.get_tag()] - | f"Dictionify{rt.get_tag()}" >> dictionify_events - | f"Write{rt.get_tag()}" >> writers[rt.get_tag()] - ) - - -def main() -> None: - logging.getLogger().setLevel(logging.INFO) - - parser = argparse.ArgumentParser() - parser.add_argument( - "--input_topic", - type=str, - help='Input PubSub topic of the form "projects//topics/."', - ) - parser.add_argument( - "--input_subscription", - type=str, - help='Input PubSub subscription of the form "projects//subscriptions/."', - ) - parser.add_argument( - "--output_table_namespace", - type=str, - required=True, - help="Output BigQuery namespace where parsed account tables are located: PROJECT:DATASET.TABLE", - ) - parser.add_argument( - "--cluster", - type=str, - required=False, - default="mainnet", - help="Solana cluster being indexed: mainnet | devnet", - ) - parser.add_argument( - "--min_idl_version", - type=int, - required=False, - default=0, - help="Minimum IDL version to consider: int", - ) - known_args, remaining_args = parser.parse_known_args() - - run( - input_topic=known_args.input_topic, - input_subscription=known_args.input_subscription, - output_table_namespace=known_args.output_table_namespace, - cluster=known_args.cluster, - min_idl_version=known_args.min_idl_version, - beam_args=remaining_args, - ) - - -if __name__ == "__main__": - main() diff --git a/observability/etl/dataflow-etls/jobs/marginfi-v2-account-parsing-stream/metadata.json b/observability/etl/dataflow-etls/jobs/marginfi-v2-account-parsing-stream/metadata.json deleted file mode 100644 index ed2ce4bc0..000000000 --- a/observability/etl/dataflow-etls/jobs/marginfi-v2-account-parsing-stream/metadata.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "name": "marginfi-v2-account-parsing-stream", - "description": "Parses individual account updates from a Pub/Sub topic/subscription and stores them in dedicated BigQuery tables.", - "parameters": [ - { - "name": "input_topic", - "label": "Input PubSub topic.", - "isOptional": true, - "helpText": "Name of the input PubSub topic to consume from.", - "regexes": [ - "projects/[^/]+/topics/[a-zA-Z][-_.~+%a-zA-Z0-9]{2,}" - ] - }, - { - "name": "input_subscription", - "label": "Input PubSub subscription.", - "isOptional": true, - "helpText": "Name of the input PubSub subscription to consume from.", - "regexes": [ - "projects/[^/]+/subscriptions/[a-zA-Z][-_.~+%a-zA-Z0-9]{2,}" - ] - }, - { - "name": "output_table_namespace", - "label": "BigQuery output tables namespace.", - "helpText": "Namespace where the BigQuery output tables are located.", - "regexes": [ - "([^:]+:)?[^.]+[.].+" - ] - }, - { - "name": "cluster", - "label": "Solana cluster.", - "isOptional": true, - "helpText": "Cluster where the account updates are executed (used to pull IDL version depending on tx slot).", - "regexes": ["mainnet|devnet"] - }, - { - "name": "min_idl_version", - "label": "Minimum IDL version.", - "isOptional": true, - "helpText": "Minimum IDL version for which txs will be parsed. Default: 0", - "regexes": [] - } - ] -} diff --git a/observability/etl/dataflow-etls/jobs/marginfi-v2-event-parsing-batch/job.py b/observability/etl/dataflow-etls/jobs/marginfi-v2-event-parsing-batch/job.py deleted file mode 100644 index 4c24d8ee2..000000000 --- a/observability/etl/dataflow-etls/jobs/marginfi-v2-event-parsing-batch/job.py +++ /dev/null @@ -1,162 +0,0 @@ -import argparse -import logging -from typing import List, Optional, Union, Any, Dict -import apache_beam as beam # type: ignore -from apache_beam.options.pipeline_options import PipelineOptions # type: ignore - -from dataflow_etls.orm.events import EventRecordTypes, EventRecord -from dataflow_etls.idl_versions import Cluster, IdlPool -from dataflow_etls.transaction_parsing import dictionify_record, DispatchEventsDoFn, extract_events_from_tx, \ - IndexedProgramNotSupported - - -def run( - input_table: str, - output_table_namespace: str, - cluster: Cluster, - min_idl_version: int, - start_date: Optional[str] = None, - end_date: Optional[str] = None, - start_timestamp: Optional[str] = None, - end_timestamp: Optional[str] = None, - beam_args: Optional[List[str]] = None, -) -> None: - if beam_args is None: - beam_args = [] - - idl_pool = IdlPool(cluster) - - def extract_events_from_tx_internal(tx: Any) -> List[EventRecord]: - try: - return extract_events_from_tx(tx, min_idl_version, cluster, idl_pool) - except IndexedProgramNotSupported: - return [] - - """Build and run the pipeline.""" - pipeline_options = PipelineOptions(beam_args, save_main_session=True) - - if start_date is not None and end_date is not None: - input_query = f'SELECT * FROM `{input_table}` WHERE DATE(timestamp) >= "{start_date}" AND DATE(timestamp) < "{end_date}"' - elif start_timestamp is not None and end_timestamp is not None: - input_query = f'SELECT * FROM `{input_table}` WHERE timestamp >= "{start_timestamp}" AND timestamp < "{end_timestamp}"' - elif start_date is not None: - input_query = ( - f'SELECT * FROM `{input_table}` WHERE DATE(timestamp) >= "{start_date}"' - ) - elif end_date is not None: - input_query = ( - f'SELECT * FROM `{input_table}` WHERE DATE(timestamp) < "{end_date}"' - ) - elif end_timestamp is not None: - input_query = ( - f'SELECT * FROM `{input_table}` WHERE timestamp < "{end_timestamp}"' - ) - print("yes", input_query) - else: - input_query = f"SELECT * FROM `{input_table}`" - - with beam.Pipeline(options=pipeline_options) as pipeline: - # Define steps - read_raw_txs = beam.io.ReadFromBigQuery(query=input_query, use_standard_sql=True) - - extract_events = beam.FlatMap(extract_events_from_tx_internal) - - dispatch_events = beam.ParDo(DispatchEventsDoFn()).with_outputs(*[rt.get_tag() for rt in EventRecordTypes]) - - dictionify_events = beam.Map(dictionify_record) - - writers: Dict[str, Union[beam.io.WriteToText, beam.io.WriteToBigQuery]] = {} - for rt in EventRecordTypes: - if output_table_namespace == "local_file": # For testing purposes - writers[rt.get_tag()] = beam.io.WriteToText(f"events_{rt.get_tag(snake_case=True)}") - else: - writers[rt.get_tag()] = beam.io.WriteToBigQuery( - f"{output_table_namespace}_{rt.get_tag(snake_case=True)}", - schema=rt.SCHEMA, - write_disposition=beam.io.BigQueryDisposition.WRITE_APPEND, - create_disposition=beam.io.BigQueryDisposition.CREATE_IF_NEEDED, - ) - - # Define pipeline - tagged_events = ( - pipeline - | "ReadRawTxs" >> read_raw_txs - | "ExtractEvents" >> extract_events - | "DispatchEvents" >> dispatch_events - ) - - for rt in EventRecordTypes: - (tagged_events[rt.get_tag()] - | f"Dictionify{rt.get_tag()}" >> dictionify_events - | f"Write{rt.get_tag()}" >> writers[rt.get_tag()] - ) - - -def main() -> None: - logging.getLogger().setLevel(logging.INFO) - - parser = argparse.ArgumentParser() - parser.add_argument( - "--input_table", - type=str, - required=True, - help="Input BigQuery table specified as: " - "PROJECT.DATASET.TABLE.", - ) - parser.add_argument( - "--output_table_namespace", - type=str, - required=True, - help="Output BigQuery namespace where event tables are located: PROJECT:DATASET.TABLE", - ) - parser.add_argument( - "--cluster", - type=str, - required=False, - default="mainnet", - help="Solana cluster being indexed: mainnet | devnet", - ) - parser.add_argument( - "--min_idl_version", - type=int, - required=False, - default=0, - help="Minimum IDL version to consider: int", - ) - parser.add_argument( - "--start_date", - type=str, - help="Start date to consider (inclusive) as: YYYY-MM-DD", - ) - parser.add_argument( - "--end_date", - type=str, - help="End date to consider (exclusive) as: YYYY-MM-DD", - ) - parser.add_argument( - "--start_timestamp", - type=str, - help="Start timestamp to consider (inclusive) as: YYYY-MM-DD HH:MM:SS", - ) - parser.add_argument( - "--end_timestamp", - type=str, - help="End timestamp to consider (exclusive) as: YYYY-MM-DD HH:MM:SS", - ) - known_args, remaining_args = parser.parse_known_args() - - run( - input_table=known_args.input_table, - output_table_namespace=known_args.output_table_namespace, - cluster=known_args.cluster, - min_idl_version=known_args.min_idl_version, - start_date=known_args.start_date, - end_date=known_args.end_date, - start_timestamp=known_args.start_timestamp, - end_timestamp=known_args.end_timestamp, - beam_args=remaining_args, - ) - - -if __name__ == "__main__": - main() diff --git a/observability/etl/dataflow-etls/jobs/marginfi-v2-event-parsing-batch/metadata.json b/observability/etl/dataflow-etls/jobs/marginfi-v2-event-parsing-batch/metadata.json deleted file mode 100644 index 4bac544d5..000000000 --- a/observability/etl/dataflow-etls/jobs/marginfi-v2-event-parsing-batch/metadata.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "name": "marginfi-v2-event-parsing-batch", - "description": "Parses individual raw transactions from a BigQuery table and stores them in dedicated BigQuery tables.", - "parameters": [ - { - "name": "input_table", - "label": "BigQuery input table name.", - "helpText": "Name of the input table to consume from.", - "regexes": [ - "([^.]+.)?[^.]+[.].+" - ] - }, - { - "name": "output_table_namespace", - "label": "BigQuery output tables namespace.", - "helpText": "Namespace where the BigQuery output tables are located.", - "regexes": [ - "([^:]+:)?[^.]+[.].+" - ] - }, - { - "name": "cluster", - "label": "Solana cluster.", - "isOptional": true, - "helpText": "Cluster where the processed txs are executed (used to pull IDL version depending on tx slot).", - "regexes": ["mainnet|devnet"] - }, - { - "name": "min_idl_version", - "label": "Minimum IDL version.", - "isOptional": true, - "helpText": "Minimum IDL version for which txs will be parsed. Default: 0", - "regexes": [] - }, - { - "name": "start_date", - "label": "Start date.", - "isOptional": true, - "helpText": "Start date to consider (inclusive).", - "regexes": [] - }, - { - "name": "end_date", - "label": "End date.", - "isOptional": true, - "helpText": "End date to consider (exclusive).", - "regexes": [] - } - ] -} diff --git a/observability/etl/dataflow-etls/jobs/marginfi-v2-event-parsing-stream/job.py b/observability/etl/dataflow-etls/jobs/marginfi-v2-event-parsing-stream/job.py deleted file mode 100644 index afbbec204..000000000 --- a/observability/etl/dataflow-etls/jobs/marginfi-v2-event-parsing-stream/job.py +++ /dev/null @@ -1,156 +0,0 @@ -import argparse -from dateutil import parser -import json -import logging -from typing import List, Optional, Union, Any, Dict -from decimal import Decimal - -import apache_beam as beam # type: ignore -from apache_beam.options.pipeline_options import PipelineOptions # type: ignore - -from dataflow_etls.orm.events import EventRecord, EventRecordTypes -from dataflow_etls.idl_versions import Cluster, IdlPool -from dataflow_etls.transaction_parsing import extract_events_from_tx, dictionify_record, DispatchEventsDoFn, \ - TransactionRaw, IndexedProgramNotSupported - - -def parse_json(message: bytes) -> TransactionRaw: - tx_raw = json.loads(message.decode("utf-8")) - return TransactionRaw( - id=tx_raw["id"], - created_at=parser.parse(tx_raw['created_at']), - timestamp=parser.parse(tx_raw['timestamp']), - signature=tx_raw['signature'], - indexing_address=tx_raw['indexing_address'], - slot=Decimal(tx_raw['slot']), - signer=tx_raw['signer'], - success=bool(tx_raw['success']), - version=tx_raw['version'], - fee=Decimal(tx_raw['fee']), - meta=tx_raw['meta'], - message=tx_raw['message'], - ) - - -def run( - input_topic: str, - input_subscription: str, - output_table_namespace: str, - cluster: Cluster, - min_idl_version: int, - # window_interval_sec: int = 60, - beam_args: Optional[List[str]] = None, -) -> None: - if beam_args is None: - beam_args = [] - - idl_pool = IdlPool(cluster) - - def extract_events_from_tx_internal(tx: Any) -> List[EventRecord]: - try: - return extract_events_from_tx(tx, min_idl_version, cluster, idl_pool) - except IndexedProgramNotSupported: - return [] - - """Build and run the pipeline.""" - pipeline_options = PipelineOptions(beam_args, save_main_session=True, streaming=True) - - with beam.Pipeline(options=pipeline_options) as pipeline: - # Define steps - read_raw_txs = beam.io.ReadFromPubSub( - topic=input_topic, subscription=input_subscription - ).with_output_types(bytes) - - parse_to_raw_txs = beam.Map(parse_json) - - # group_in_windows = beam.WindowInto(window.FixedWindows(window_interval_sec, 0)) - - extract_events = beam.FlatMap(extract_events_from_tx_internal) - - dispatch_events = beam.ParDo(DispatchEventsDoFn()).with_outputs(*[rt.get_tag() for rt in EventRecordTypes]) - - dictionify_events = beam.Map(dictionify_record) - - writers: Dict[str, Union[beam.io.WriteToText, beam.io.WriteToBigQuery]] = {} - for rt in EventRecordTypes: - if output_table_namespace == "local_file": # For testing purposes - writers[rt.get_tag()] = beam.io.WriteToText(f"events_{rt.get_tag(snake_case=True)}") - else: - writers[rt.get_tag()] = beam.io.WriteToBigQuery( - f"{output_table_namespace}_{rt.get_tag(snake_case=True)}", - schema=rt.SCHEMA, - write_disposition=beam.io.BigQueryDisposition.WRITE_APPEND, - create_disposition=beam.io.BigQueryDisposition.CREATE_IF_NEEDED, - ) - - # Define pipeline - tagged_events = ( - pipeline - | "ReadRawTxs" >> read_raw_txs - | "ParseTxsToRawTxs" >> parse_to_raw_txs - | "ExtractEvents" >> extract_events - | "DispatchEvents" >> dispatch_events - ) - - for rt in EventRecordTypes: - (tagged_events[rt.get_tag()] - | f"Dictionify{rt.get_tag()}" >> dictionify_events - | f"Write{rt.get_tag()}" >> writers[rt.get_tag()] - ) - - -def main() -> None: - logging.getLogger().setLevel(logging.INFO) - - parser = argparse.ArgumentParser() - parser.add_argument( - "--input_topic", - type=str, - help='Input PubSub topic of the form "projects//topics/."', - ) - parser.add_argument( - "--input_subscription", - type=str, - help='Input PubSub subscription of the form "projects//subscriptions/."', - ) - parser.add_argument( - "--output_table_namespace", - type=str, - required=True, - help="Output BigQuery namespace where event tables are located: PROJECT:DATASET.TABLE", - ) - parser.add_argument( - "--window_interval_sec", - default=60, - type=int, - help="Window interval in seconds for grouping incoming messages.", - ) - parser.add_argument( - "--cluster", - type=str, - required=False, - default="mainnet", - help="Solana cluster being indexed: mainnet | devnet", - ) - parser.add_argument( - "--min_idl_version", - type=int, - required=False, - default=0, - help="Minimum IDL version to consider: int", - ) - known_args, remaining_args = parser.parse_known_args() - - run( - input_topic=known_args.input_topic, - input_subscription=known_args.input_subscription, - output_table_namespace=known_args.output_table_namespace, - # window_interval_sec=known_args.window_interval_sec, - cluster=known_args.cluster, - min_idl_version=known_args.min_idl_version, - beam_args=remaining_args, - ) - - -if __name__ == "__main__": - main() diff --git a/observability/etl/dataflow-etls/jobs/marginfi-v2-event-parsing-stream/metadata.json b/observability/etl/dataflow-etls/jobs/marginfi-v2-event-parsing-stream/metadata.json deleted file mode 100644 index 252e77a6d..000000000 --- a/observability/etl/dataflow-etls/jobs/marginfi-v2-event-parsing-stream/metadata.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "name": "marginfi-v2-event-parsing-stream", - "description": "Parses individual raw transactions from a Pub/Sub topic/subscription and stores them in dedicated BigQuery tables.", - "parameters": [ - { - "name": "input_topic", - "label": "Input PubSub topic.", - "isOptional": true, - "helpText": "Name of the input PubSub topic to consume from.", - "regexes": [ - "projects/[^/]+/topics/[a-zA-Z][-_.~+%a-zA-Z0-9]{2,}" - ] - }, - { - "name": "input_subscription", - "label": "Input PubSub subscription.", - "isOptional": true, - "helpText": "Name of the input PubSub subscription to consume from.", - "regexes": [ - "projects/[^/]+/subscriptions/[a-zA-Z][-_.~+%a-zA-Z0-9]{2,}" - ] - }, - { - "name": "output_table_namespace", - "label": "BigQuery output tables namespace.", - "helpText": "Namespace where the BigQuery output tables are located.", - "regexes": [ - "([^:]+:)?[^.]+[.].+" - ] - }, - { - "name": "cluster", - "label": "Solana cluster.", - "isOptional": true, - "helpText": "Cluster where the processed txs are executed (used to pull IDL version depending on tx slot).", - "regexes": ["mainnet|devnet"] - }, - { - "name": "min_idl_version", - "label": "Minimum IDL version.", - "isOptional": true, - "helpText": "Minimum IDL version for which txs will be parsed. Default: 0", - "regexes": [] - } - ] -} diff --git a/observability/etl/dataflow-etls/jobs/marginfi-v2-event-parsing-stream/update_running_pipeline b/observability/etl/dataflow-etls/jobs/marginfi-v2-event-parsing-stream/update_running_pipeline deleted file mode 100644 index 3aecd96a8..000000000 --- a/observability/etl/dataflow-etls/jobs/marginfi-v2-event-parsing-stream/update_running_pipeline +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env bash -set -e - -job_id=$1 - -[ -z "$job_id" ] && echo "Missing job_id argument" && exit 1 - -gcloud dataflow flex-template run "$job_id" \ - --template-file-gcs-location gs://dataflow_jobs_marginfi_v2/templates/marginfi-v2-event-parsing-stream.json \ - --region us-central1 \ - --parameters input_topic=projects/marginfi-dev/topics/marginfi-v2-mainnet-transactions-raw,output_table_namespace=marginfi-dev:marginfi_v2.event,cluster=mainnet \ - --update \ No newline at end of file diff --git a/observability/etl/dataflow-etls/poetry.toml b/observability/etl/dataflow-etls/poetry.toml deleted file mode 100644 index 62e2dff2a..000000000 --- a/observability/etl/dataflow-etls/poetry.toml +++ /dev/null @@ -1,3 +0,0 @@ -[virtualenvs] -in-project = true -create = true diff --git a/observability/etl/dataflow-etls/pyproject.toml b/observability/etl/dataflow-etls/pyproject.toml deleted file mode 100644 index a6bfee777..000000000 --- a/observability/etl/dataflow-etls/pyproject.toml +++ /dev/null @@ -1,53 +0,0 @@ -[tool.poetry] -name = "dataflow_etls" -version = "0.1.0" -description = "" -authors = ["man0s <95379755+losman0s@users.noreply.github.com>"] - -[tool.poetry.scripts] -job = "dataflow_etls.job:main" - -[tool.poetry.dependencies] -python = "^3.9" -wheel = "^0.38.4" -apache-beam = { extras = ["gcp"], version = "2.44.0" } -solders = "^0.14.0" -anchorpy = "^0.16.0" -based58 = "^0.1.1" -isort = "^5.12.0" - -[tool.poetry.group.dev.dependencies] -typer = "^0.7.0" -ipython = "^8.10.0" -autoflake = "^2.0.1" -genpy = "^2022.1" -solana = "^0.29.1" -pre-commit = "^2.18.1" -mypy = "^0.950" - -[tool.black] -line-length = 132 -target-version = ['py37', 'py38', 'py39', 'py310' ] -include = '(src\/scripts\/.*$|\.pyi?$)' -exclude = ''' -/( - \.git - | __pycache__ - | \.tox - | \.venv - | \.poetry - | build - | dist - | docs - | notes -)/ -''' - -[tool.isort] -profile = "black" -line_length = 132 -skip_glob = [ "docs", "notes" ] - -[build-system] -requires = ["poetry-core>=1.0.0"] -build-backend = "poetry.core.masonry.api" diff --git a/observability/etl/dataflow-etls/scripts/build_job_template b/observability/etl/dataflow-etls/scripts/build_job_template deleted file mode 100755 index f4dd9e90e..000000000 --- a/observability/etl/dataflow-etls/scripts/build_job_template +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/env bash -set -e - -SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) -ROOT_DIR=$(realpath "${SCRIPT_DIR}/../") - -job_dir=$1 -image_version=$2 - -[ -z "$job_dir" ] && echo "Missing job_dir argument" && exit 1 -[ -z "$image_version" ] && echo "Missing image_version argument" && exit 1 - - -job_dir=$(realpath "$job_dir") -job_name=$(basename "$job_dir") -job_dir_rel=$(realpath --relative-to="$ROOT_DIR" "$job_dir") - -cd "$ROOT_DIR" - -local_image_name="$job_name" -gcp_image_name="us-east1-docker.pkg.dev/marginfi-dev/main/dataflow/$local_image_name" - -docker build --platform=linux/amd64 --build-arg JOB_DIRECTORY="$job_dir_rel" --tag "$job_name" "$ROOT_DIR" -docker tag "$local_image_name" "$gcp_image_name:$image_version" diff --git a/observability/etl/dataflow-etls/scripts/generate_sample_events.sh b/observability/etl/dataflow-etls/scripts/generate_sample_events.sh deleted file mode 100755 index d56e201ba..000000000 --- a/observability/etl/dataflow-etls/scripts/generate_sample_events.sh +++ /dev/null @@ -1,131 +0,0 @@ -#!/usr/bin/env bash -set -e - -PROGRAM_ID=5Lt5xXZG7bteZferQk9bsiiAS75JqGVPYcTbB8J6vvJK - -random_id=$(echo $RANDOM | md5sum | head -c 20; echo) -test_profile="test-devnet-$random_id" - -RPC_ENDPOINT=https://devnet.rpcpool.com/ -KEYPAIR_PATH=~/.config/solana/id.json - -echo "-> Creating test profile $test_profile" -mfi profile create \ - --cluster devnet \ - --name "$test_profile" \ - --keypair-path "$KEYPAIR_PATH" \ - --rpc-url "$RPC_ENDPOINT" \ - --program-id "$PROGRAM_ID" - -mfi profile set "$test_profile" - -echo "-> Admin creates marginfi group" -mfi group create -y - -echo "-> Admin updates marginfi group" -mfi group update -y - -echo "-> Admin creates USDC bank" -usdc_bank=$(mfi group add-bank \ - --mint F9jRT1xL7PCRepBuey5cQG5vWHFSbnvdWxJWKqtzMDsd \ - --asset-weight-init 0.85 \ - --asset-weight-maint 0.9 \ - --liability-weight-maint 1.1 \ - --liability-weight-init 1.15 \ - --deposit-limit 1000000000000000\ - --borrow-limit 1000000000000000\ - --pyth-oracle 5SSkXsEKQepHHAewytPVwdej4epN1nxgLVM84L4KXgy7 \ - --optimal-utilization-rate 0.9 \ - --plateau-interest-rate 1 \ - --max-interest-rate 10 \ - --insurance-fee-fixed-apr 0.01 \ - --insurance-ir-fee 0.1 \ - --protocol-fixed-fee-apr 0.01 \ - --protocol-ir-fee 0.1 \ - --risk-tier collateral \ - -y) -echo "USDC bank: $usdc_bank" - -echo "-> Admin creates SOL bank" -sol_bank=$(mfi group add-bank \ - --mint 4Bn9Wn1sgaD5KfMRZjxwKFcrUy6NKdyqLPtzddazYc4x \ - --asset-weight-init 0.75 \ - --asset-weight-maint 0.8 \ - --liability-weight-maint 1.2 \ - --liability-weight-init 1.25 \ - --deposit-limit 1000000000000000\ - --borrow-limit 1000000000000000\ - --pyth-oracle J83w4HKfqxwcq3BEMMkPFSppX3gqekLyLJBexebFVkix \ - --optimal-utilization-rate 0.8 \ - --plateau-interest-rate 1 \ - --max-interest-rate 20 \ - --insurance-fee-fixed-apr 0.01 \ - --insurance-ir-fee 0.1 \ - --protocol-fixed-fee-apr 0.01 \ - --protocol-ir-fee 0.1 \ - --risk-tier collateral \ - -y) -echo "SOL bank: $sol_bank" - -echo "-> Admin configures SOL bank" -mfi bank update "$sol_bank" \ - --asset-weight-init 1 \ - --asset-weight-maint 1 \ - -y - -echo "-> Admin configures USDC bank" -mfi bank update "$usdc_bank" \ - --asset-weight-init 1 \ - --asset-weight-maint 1 \ - -y - -mfi account create -y - -echo "-> Random user lends USDC" -mfi account deposit "$usdc_bank" 0.01 -y - -echo "-> Liquidatee creates new mfi account" -liquidatee_account=$(mfi account create -y) -echo "liquidatee account: $liquidatee_account" - -echo "-> Liquidatee deposits SOL" -mfi account deposit "$sol_bank" 0.01 -y - -echo "-> Liquidatee borrows USDC" -mfi account borrow "$usdc_bank" 0.01 -y - -echo "-> Admin triggers bad health by setting SOL asset weights to 0" -mfi bank update "$sol_bank" \ - --asset-weight-init 0 \ - --asset-weight-maint 0 \ - -y - -echo "-> Liquidator creates mfi account" -mfi account create -y - -echo "-> Liquidator deposits USDC to pay off liquidatee's debt" -mfi account deposit "$usdc_bank" 0.01 -y - -echo "-> Liquidator liquidates liquidatee for half its assets" -mfi account liquidate \ - --liquidatee-marginfi-account="$liquidatee_account" \ - --asset-bank="$sol_bank" \ - --liability-bank="$usdc_bank" \ - --ui-asset-amount=0.0001 \ - -y - -echo "-> Admin handles remainder of bad debt through handle bankruptcy" -mfi bank handle-bankruptcy \ - --bank="$usdc_bank" \ - --marginfi-account="$liquidatee_account" \ - -y - -echo "-> Admin collects fees on USDC bank" -mfi bank collect-fees \ - --bank="$usdc_bank" \ - -y - -echo "-> Admin collects fees on SOL bank" -mfi bank collect-fees \ - --bank="$sol_bank" \ - -y diff --git a/observability/etl/dataflow-etls/scripts/lint b/observability/etl/dataflow-etls/scripts/lint deleted file mode 100755 index fa697155a..000000000 --- a/observability/etl/dataflow-etls/scripts/lint +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env bash - -poetry run mypy . \ No newline at end of file diff --git a/observability/etl/dataflow-etls/scripts/playground.py b/observability/etl/dataflow-etls/scripts/playground.py deleted file mode 100644 index 35c1fab08..000000000 --- a/observability/etl/dataflow-etls/scripts/playground.py +++ /dev/null @@ -1,111 +0,0 @@ -from pathlib import Path -from pprint import pprint -import based58 -from anchorpy import Program -from anchorpy_core.idl import Idl -from solana.rpc.api import Client -from solders.pubkey import Pubkey -from solders.signature import Signature - -from decimal import Decimal - - -def wrapped_i80f48_to_float(wrapped_i80f48_value: int): - nb_of_fractional_bits = 48 - value = Decimal(wrapped_i80f48_value) - value = value / 2 ** nb_of_fractional_bits - return value - - -print(wrapped_i80f48_to_float(-54953626681867088)) - -sample_logs = ["Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL invoke [1]", "Program log: CreateIdempotent", - "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL consumed 7338 of 400000 compute units", - "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL success", - "Program A7vUDErNPCTt9qrB6SSM4F6GkxzUe9d8P3cXSmRg4eY4 invoke [1]", - "Program log: Instruction: LendingAccountWithdraw", - "Program log: Withdrawing all: 1000000 of F9jRT1xL7PCRepBuey5cQG5vWHFSbnvdWxJWKqtzMDsd in GhV6ZftLXv3o38CHMhX6nu8GkxS3kvrHSSCVpGFTysUC", - "Program log: withdraw_spl_transfer: amount: 1000000 from J9SAzLYETfcXBdrvswRaNUiGaMtmLiucwEJKEFW8d3FA to 4U3UNQU7spMKzY1cUviRdj9zAT2cVbGQEzioey1mCCZM, auth Fx99GAAXXk43peMfHxS2S7xTubazffA5h7ftmTEJK2bk", - "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: Transfer", - "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 4645 of 315437 compute units", - "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", - "Program data: A9yU8yH5NlgFAAAAMC4xLjAF3hNv9VErtBxgns6TItDZs+IZ/Y6TNWGuTe16nnh4ye4CH6/bWLrtvuQMibfybmkmRSqFhHygh92ElC0GqUlcO8hKNv2sSk0p0XfYfozLqjspIR2sHsbx0eDvsV5tGY7pPk3uIRtapASqm9ALTdv++zxMXXSinbwKl99MTnuDkdJAOsgK1DjHp0u5LCmsGj4g7ioWbEEtiXn/B9aQ3U+4QEIPAAAAAAAB", - "Program log: Expecting 0 remaining accounts", "Program log: Got 0 remaining accounts", - "Program log: check_health: assets 0 - liabs: 0", - "Program A7vUDErNPCTt9qrB6SSM4F6GkxzUe9d8P3cXSmRg4eY4 consumed 88164 of 392662 compute units", - "Program A7vUDErNPCTt9qrB6SSM4F6GkxzUe9d8P3cXSmRg4eY4 success"] - -sample_inner_ixs = [ - {"index": 1, "instructions": [{"programIdIndex": 9, "accounts": [5, 1, 4], - "data": "11115hc6izQ5YEyLuqy666n8aGeujSQofY7ibwnRv64oCXeYpCg8t6ZaiuSwwbw6ev76Ut"}]}] - -sample_message = "gAEABgwF3hNv9VErtBxgns6TItDZs+IZ/Y6TNWGuTe16nnh4yTOAiZ9axygRNRuzZCiQK4q5zvPfaH0CnR4tEUdeu2zY7gIfr9tYuu2+5AyJt/JuaSZFKoWEfKCH3YSULQapSVzpPk3uIRtapASqm9ALTdv++zxMXXSinbwKl99MTnuDkd4jxKWJrU3oI9SPceEA9wtTBJ5T78IpGTiq1XRzIrqD/r/JWnhhuWaJpdf6l+yCA38eN/l9xqMSjBXsYMAOea2MlyWPTiSJ8bs9ECkUjg2DC1oTmdr/EIQEjnvY2+n4WdJAOsgK1DjHp0u5LCmsGj4g7ioWbEEtiXn/B9aQ3U+4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG3fbh12Whk9nL4UbO63msHLSF7V9bN5E6jPWFfv8AqYd/H/1F6tUC+2l0WY9HS4WATM+2LA2i9Tq46cjeMS2lO8hKNv2sSk0p0XfYfozLqjspIR2sHsbx0eDvsV5tGY4/gcRh2keI2GQribtQSPXEZxYR1wZZ93XFhp/+f3fIFAIGBgABAAcICQEBCggLAgADAQQFCRIkSEoT0tLAwEBCDwAAAAAAAQEA" - -http_client = Client("https://api.devnet.solana.com") -tx = http_client.get_transaction( - Signature.from_string("4WdMP6s8SasqWrWpscurrN1r8ueLZNSdq81nLRJfyhsDU7xMz47t8xYh4hTvTy2C2sZ8Frc3x8urjfkYwKTg7dNT"), - max_supported_transaction_version=0) - -message = tx.value.transaction.transaction.message -pprint(message) -ix_data = message.instructions[0].data -# message_bytes = base64.b64decode(cpi.data) -# message_decoded = MessageV0.from_bytes(message_bytes[1:]) - -# merged_instructions = merge_instructions_and_cpis(message_decoded.instructions, sample_inner_ixs) -# expanded_instructions = expand_instructions(message_decoded.account_keys, merged_instructions) -# ix_with_logs = reconcile_instruction_logs("zrozUUvTujLSCxyT7JHtX48V5MYgkdQi4FAh5HreaH7p8n93bCDCo1huJsVBYiBkNXvFij7QgqYFC5jRRcXxpzi", expanded_instructions, sample_logs) - -path = Path("idls/devnet/marginfi-v2.json") -raw = path.read_text() -idl = Idl.from_json(raw) - -program = Program(idl, Pubkey.from_string("A7vUDErNPCTt9qrB6SSM4F6GkxzUe9d8P3cXSmRg4eY4")) -print(ix_data) -# message_bytes = based58.b58decode(b"CkHi86f1tcCVWQEX8TFsY7AwRnzu5ZQsh8Jnva7t4euknF6qyvtJuFDkiNsaraQBtLZcUNRCPJhAwexoH9EbTGFGi6uWVukVidkGz3LTaeevMSN6uqj5xjvVrDZVA5buqKQz86uErcvki7RNvez7QeoaBc19PV4YcLSfHkZpWUGxCCW87cfsShqCJgrsdjW45gkfKxqxb7t8T8FwVpudj2v7hZJzBqHSVvnQKWHW5ENmHHbYfSAFUGjQUhct6AnAWsoJ5XWoAUrm8G3ppN3fJe8vMGCvPfEnz76ea9LYQDeYSCqKg9f8QwZ2jj8z7xNfBUJw3MJh2hSxWxL635Hrx2xKnRpFT7vNugx2fpwwasGfBYkfMivjVfTVKcjJWSK46NXzmqhKX16ct7vpeBasue8eUM9hAtG5KDqs8XXQ3QkqeChm6qX2GJ7ohY6TRZAoQid767qLY84ZHEutqUibTQCtRUT15hHwbRRBAmAStWeBKJDopDUyHvxRXMxsG7dddT4pqNEukFRNu1chj4Sn2k2D8j9gehTESuKxtD6KVKBD3zb1MwpXGJK41TkUtTrDfn81REFmcAATB5srpXdfVig9XFDkZa2CUNrXwmmgMwR2LNx5Fv1mUtXwr93cvULv1VeXc5Qmfy66LK1mDaFVtR5iGqKAD4Tjf7vwJTA4i1Q1EFHrcZfFS3YT3QqVbbnjDGj59rnDtLqoWqzTLMSdnekbLnU98rndUgc8XUL3EX") -message_bytes = based58.b58decode(str.encode(str(ix_data))) -parsed = program.coder.instruction.parse(message_bytes) -print(parsed) - -# for ix in ix_with_logs: -# print("\n\n=============================================") -# print("pid:", ix.message.program_id) -# # print(log) -# if ix.message.program_id == program.program_id: -# parsed = program.coder.instruction.parse(ix.message.data) -# print(parsed) -# -# for inner_ix in ix.inner_instructions: -# print("\n CPI <<<<") -# print("pid:", inner_ix.message.program_id) -# if inner_ix.message.program_id == program.program_id: -# parsed = program.coder.instruction.parse(inner_ix.message.data) -# print(parsed) - -# events_coder: EventCoder = EventCoder(idl) -# -# parser = EventParser(program.program_id, program.coder) -# events = [] -# parser.parse_logs(sample_log, lambda evt: print(evt)) - -# event = MarginfiAccountCreateEvent(header=AccountEventHeader( -# version="0.1.0", -# signer=Pubkey.from_string("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"), -# marginfi_account=Pubkey.from_string("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"), -# marginfi_group=Pubkey.from_string("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"), -# )) -# -# pprint.pprint(str(event.__dataclass_fields__)) - -# test = bytes([3, 3, 3]) -# test1 = base64.b64encode(test) -# test2 = base64.b64decode(test1) -# print(test2) -# -# ix_coder = program.coder.instruction -# message = "" -# sample_message_bytes = base64.b64decode(message) -# print(sample_message_bytes) -# sample_message = MessageV0.from_bytes(sample_message_bytes[1:]) -# print(sample_message) -# message_decoded = ix_coder.parse(bytes) diff --git a/observability/etl/dataflow-etls/scripts/sync_job_template b/observability/etl/dataflow-etls/scripts/sync_job_template deleted file mode 100755 index 2cd6126c1..000000000 --- a/observability/etl/dataflow-etls/scripts/sync_job_template +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env bash -set -e - -job_dir=$1 -image_version=$2 - -[ -z "$job_dir" ] && echo "Missing job_dir argument" && exit 1 -[ -z "$image_version" ] && echo "Missing image_version argument" && exit 1 - -job_dir=$(realpath "$job_dir") -job_name=$(basename "$job_dir") - -local_image_name="$job_name" -gcp_image_name="us-east1-docker.pkg.dev/marginfi-dev/main/dataflow/$local_image_name" -gcp_template_gs_path="gs://dataflow_jobs_marginfi_v2/templates/$job_name.json" -metadata_local_path="$job_dir/metadata.json" - -gcloud dataflow flex-template build \ - "$gcp_template_gs_path" \ - --image "$gcp_image_name:$image_version" \ - --sdk-language "PYTHON" \ - --metadata-file "$metadata_local_path" diff --git a/observability/etl/dataflow-etls/scripts/upload_job_template b/observability/etl/dataflow-etls/scripts/upload_job_template deleted file mode 100755 index 5475179c3..000000000 --- a/observability/etl/dataflow-etls/scripts/upload_job_template +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env bash -set -e - -job_dir=$1 -image_version=$2 - -[ -z "$job_dir" ] && echo "Missing job_dir argument" && exit 1 -[ -z "$image_version" ] && echo "Missing image_version argument" && exit 1 - -job_dir=$(realpath "$job_dir") -job_name=$(basename "$job_dir") - -local_image_name="$job_name" -gcp_image_name="us-east1-docker.pkg.dev/marginfi-dev/main/dataflow/$local_image_name" - -docker push "$gcp_image_name:$image_version" diff --git a/observability/etl/dataflow-etls/setup.py b/observability/etl/dataflow-etls/setup.py deleted file mode 100644 index 5b626d13a..000000000 --- a/observability/etl/dataflow-etls/setup.py +++ /dev/null @@ -1,14 +0,0 @@ -import setuptools - -setuptools.setup( - name='dataflow_etls', - version='0.1.0', - install_requires=[ - 'anchorpy==0.16.0', - 'apache-beam[gcp]==2.45.0', - "based58==0.1.1", - "solders==0.14.4 ", - ], - packages=setuptools.find_packages(), - include_package_data=True -) diff --git a/observability/indexer/.dockerignore b/observability/indexer/.dockerignore deleted file mode 100644 index 82c1af3b6..000000000 --- a/observability/indexer/.dockerignore +++ /dev/null @@ -1,6 +0,0 @@ -# Ignore everything except for Cargo and src files -* -!Cargo.toml -!build.rs -!src/ -!protos/ diff --git a/observability/indexer/.gitignore b/observability/indexer/.gitignore deleted file mode 100644 index c0a149819..000000000 --- a/observability/indexer/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# rust/cargo -target/ - -# IDEs -.idea -.vscode - -.env diff --git a/observability/indexer/CHANGELOG.md b/observability/indexer/CHANGELOG.md deleted file mode 100644 index 701c93e09..000000000 --- a/observability/indexer/CHANGELOG.md +++ /dev/null @@ -1,35 +0,0 @@ -# Changelog - -All notable changes to this project will be documented in this file. - -## [Unreleased] - -## [0.1.4] - 2023-03-10 - -### Added - -- Interest rates and fees to bank metrics. -- Positions summary to marginfi account metrics. - -## [0.1.3] - 2023-03-08 - -### Fixed - -- Wrong unit for bank deposit/withdraw limit units. - -## [0.1.2] - 2023-03-07 - -### Added - -- Accounts snapshot command. - -### Changed - -- Make crate part of top-level project. -- Switch to custom fork of google-cloud-rust for `tokio` compatibility with solana crates. - -## [0.1.1] - Skipped - -## [0.1.0] - 2023-03-01 - -- Initial release \ No newline at end of file diff --git a/observability/indexer/Cargo.toml b/observability/indexer/Cargo.toml deleted file mode 100644 index 48aa7a79a..000000000 --- a/observability/indexer/Cargo.toml +++ /dev/null @@ -1,88 +0,0 @@ -[package] -name = "marginfi-v2-indexer" -version = "0.1.0" -edition = "2021" - -[[bin]] -name = "mfi-index" -path = "src/bin/main.rs" - -[features] -mainnet-beta = ["marginfi/mainnet-beta"] - -[dependencies] -solana-client = { workspace = true } -solana-measure = { workspace = true } -solana-metrics = { workspace = true } -solana-sdk = { workspace = true } -solana-transaction-status = { workspace = true } -solana-account-decoder = { workspace = true } -anchor-client = { workspace = true } - -pyth-sdk-solana = { workspace = true } -spl-token = { workspace = true } - -marginfi = { path = "../../programs/marginfi", features = [ - "no-entrypoint", - "client", -] } - -gcp-bigquery-client = "0.16.7" -google-cloud-default = { git = " https://github.com/mrgnlabs/google-cloud-rust.git", rev = "3f651f2d9fd8cca547bb11490d2575d9bf90f994", features = [ - "pubsub", -] } -google-cloud-auth = { git = " https://github.com/mrgnlabs/google-cloud-rust.git", rev = "3f651f2d9fd8cca547bb11490d2575d9bf90f994" } -google-cloud-pubsub = { git = " https://github.com/mrgnlabs/google-cloud-rust.git", rev = "3f651f2d9fd8cca547bb11490d2575d9bf90f994" } -google-cloud-gax = { git = " https://github.com/mrgnlabs/google-cloud-rust.git", rev = "3f651f2d9fd8cca547bb11490d2575d9bf90f994" } -google-cloud-googleapis = { git = " https://github.com/mrgnlabs/google-cloud-rust.git", rev = "3f651f2d9fd8cca547bb11490d2575d9bf90f994", features = [ - "bytes", - "pubsub", -] } -yup-oauth2 = "8.3.0" -yellowstone-grpc-client = { git = "https://github.com/rpcpool/yellowstone-grpc.git", rev = "87e1755b0d7a4e8101cb5feb6f30063aa91f343f" } -yellowstone-grpc-proto = { git = "https://github.com/rpcpool/yellowstone-grpc.git", rev = "87e1755b0d7a4e8101cb5feb6f30063aa91f343f" } -switchboard-on-demand-client = "0.2.4" -switchboard-on-demand = "0.1.15" -hex = "0.4.3" -fixed = "1.12.0" -fixed-macro = "1.2.0" -dotenv = "0.15.0" -bytemuck = "1.13.1" -tracing = "0.1.36" -tracing-stackdriver = "0.6.1" -tracing-subscriber = { version = "0.3.15", features = ["env-filter", "fmt"] } -clap = { version = "3.2.23", features = ["derive"] } -envconfig = "0.10.0" -itertools = "0.10.5" -json = "0.12.4" -bincode = "1.3.3" -serde = "1.0.147" -serde_json = "1.0.88" -serde_yaml = "0.9.14" -concurrent-queue = "2.0.0" -tonic = { version = "0.8.3", features = [ - "tls", - "tls-roots", - "tls-webpki-roots", -] } -bs58 = "0.4.0" -bytes = "1.3.0" -thiserror = "1.0" -prost = "0.11.0" -prost-derive = "0.11.2" -tokio = { version = "1.14.1", features = ["full"] } -tokio-stream = "0.1.12" -futures = "0.3.25" -lazy_static = "1.4.0" -chrono = "0.4.23" -base64 = "0.21.0" -uuid = { version = "1.2.2", features = ["v4"] } -chrono-tz = "0.8.0" -backoff = { version = "0.4.0", features = ["tokio"] } -rayon = "1.6" -anyhow = "1.0.62" - -[build-dependencies] -anyhow = "1.0.58" -tonic-build = "0.8.2" -protobuf-src = "1.1.0" diff --git a/observability/indexer/Dockerfile b/observability/indexer/Dockerfile deleted file mode 100644 index ed1b39efb..000000000 --- a/observability/indexer/Dockerfile +++ /dev/null @@ -1,31 +0,0 @@ -FROM rust:1.75 as builder - -RUN apt-get update -y && apt-get install -y pkg-config build-essential libudev-dev clang cmake protobuf-compiler -RUN rustup component add rustfmt clippy - -WORKDIR /app - -COPY ./Cargo.lock ./Cargo.lock -COPY ./Cargo.toml ./Cargo.toml -COPY ./programs ./programs -COPY ./observability/indexer ./observability/indexer -COPY ./test-utils ./test-utils -COPY ./tools ./tools -COPY ./clients/rust ./clients/rust - -ENV CARGO_NET_GIT_FETCH_WITH_CLI=true - -RUN cargo build --release --locked - - -FROM debian:stable-slim as runner - -WORKDIR /app - -RUN apt-get update -y && apt-get install -y ca-certificates openssl - -COPY --from=builder /app/target/release/mfi-index ./ - -ENV RUST_LOG=info - -CMD ["/app/mfi-index"] diff --git a/observability/indexer/Dockerfile.dockerignore b/observability/indexer/Dockerfile.dockerignore deleted file mode 100644 index 6e35c17ea..000000000 --- a/observability/indexer/Dockerfile.dockerignore +++ /dev/null @@ -1,8 +0,0 @@ -# Ignore everything except for Cargo and src files -**/.env -**/.git -**/target -**/.DS_Store -**/Dockerfile -**/docs -**/*.log diff --git a/observability/indexer/build.rs b/observability/indexer/build.rs deleted file mode 100644 index 8a74cf06b..000000000 --- a/observability/indexer/build.rs +++ /dev/null @@ -1,18 +0,0 @@ -fn main() -> anyhow::Result<()> { - compile_protos()?; - Ok(()) -} - -fn compile_protos() -> anyhow::Result<()> { - std::env::set_var("PROTOC", protobuf_src::protoc()); - tonic_build::configure() - .protoc_arg("--experimental_allow_proto3_optional") - .type_attribute("PubsubTransaction", "#[derive(serde::Serialize)]") - .type_attribute("PubsubAccountUpdate", "#[derive(serde::Serialize)]") - .compile( - &["protos/geyser.proto", "protos/gcp_pubsub.proto"], - &["protos"], - ) - .unwrap(); - Ok(()) -} diff --git a/observability/indexer/build_image b/observability/indexer/build_image deleted file mode 100755 index 837697fe8..000000000 --- a/observability/indexer/build_image +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env bash -set -e - -script_dir=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) -root_dir=$(git rev-parse --show-toplevel) - -image_tag=$1 - -echo "$root_dir" -echo "$script_dir" - -[ -z "$image_tag" ] && echo "Missing image_tag argument" && exit 1 - -crate_dir_rel=$(realpath --relative-to="$root_dir" "$script_dir") - -echo "$crate_dir_rel" - -cd "$root_dir" - -local_image_name="marginfi-v2-indexer" -gcp_image_name="us-east1-docker.pkg.dev/marginfi-dev/main/$local_image_name" - -docker build -f "$crate_dir_rel/Dockerfile" --platform=linux/amd64 --tag "$gcp_image_name:$image_tag" . diff --git a/observability/indexer/protos/gcp_pubsub.proto b/observability/indexer/protos/gcp_pubsub.proto deleted file mode 100644 index f725265c9..000000000 --- a/observability/indexer/protos/gcp_pubsub.proto +++ /dev/null @@ -1,33 +0,0 @@ -syntax = "proto2"; - -package gcp_pubsub; - -message PubsubTransaction { - required string id = 1; - required string created_at = 2; - required string timestamp = 3; - required string signature = 4; - required string indexing_address = 5; - required uint64 slot = 6; - required string signer = 7; - required bool success = 8; - required string version = 9; - required uint64 fee = 10; - required string meta = 11; - required string message = 12; -} - -message PubsubAccountUpdate { - required string id = 1; - required string created_at = 2; - required string timestamp = 3; - required string owner = 4; - required uint64 slot = 5; - required string pubkey = 6; - optional string txn_signature = 7; - optional uint64 write_version = 8; - required uint64 lamports = 9; - required bool executable = 10; - required uint64 rent_epoch = 11; - required string data = 12; -} diff --git a/observability/indexer/protos/geyser.proto b/observability/indexer/protos/geyser.proto deleted file mode 100644 index 84d22d59d..000000000 --- a/observability/indexer/protos/geyser.proto +++ /dev/null @@ -1,95 +0,0 @@ -syntax = "proto3"; - -import public "solana-storage-v1.10.40.proto"; - -package geyser; - -service Geyser { - rpc Subscribe(stream SubscribeRequest) returns (stream SubscribeUpdate) {} -} - -message SubscribeRequest { - map accounts = 1; - map slots = 2; - map transactions = 3; - map blocks = 4; -} - -message SubscribeRequestFilterAccounts { - repeated string account = 2; - repeated string owner = 3; -} - -message SubscribeRequestFilterSlots {} - -message SubscribeRequestFilterTransactions { - optional bool vote = 1; - optional bool failed = 2; - repeated string account_include = 3; - repeated string account_exclude = 4; -} - -message SubscribeRequestFilterBlocks {} - -message SubscribeUpdate { - repeated string filters = 1; - oneof update_oneof { - SubscribeUpdateAccount account = 2; - SubscribeUpdateSlot slot = 3; - SubscribeUpdateTransaction transaction = 4; - SubscribeUpdateBlock block = 5; - SubscribeUpdatePing ping = 6; - } -} - -message SubscribeUpdateAccount { - SubscribeUpdateAccountInfo account = 1; - uint64 slot = 2; - bool is_startup = 3; -} - -message SubscribeUpdateAccountInfo { - bytes pubkey = 1; - uint64 lamports = 2; - bytes owner = 3; - bool executable = 4; - uint64 rent_epoch = 5; - bytes data = 6; - uint64 write_version = 7; - optional bytes txn_signature = 8; -} - -message SubscribeUpdateSlot { - uint64 slot = 1; - optional uint64 parent = 2; - SubscribeUpdateSlotStatus status = 3; -} - -enum SubscribeUpdateSlotStatus { - PROCESSED = 0; - CONFIRMED = 1; - FINALIZED = 2; -} - -message SubscribeUpdateTransaction { - SubscribeUpdateTransactionInfo transaction = 1; - uint64 slot = 2; -} - -message SubscribeUpdateTransactionInfo { - bytes signature = 1; - bool is_vote = 2; - solana.storage.ConfirmedBlock.Transaction transaction = 3; - solana.storage.ConfirmedBlock.TransactionStatusMeta meta = 4; - // uint64 index = 5; -} - -message SubscribeUpdateBlock { - uint64 slot = 1; - string blockhash = 2; - solana.storage.ConfirmedBlock.Rewards rewards = 3; - solana.storage.ConfirmedBlock.UnixTimestamp block_time = 4; - solana.storage.ConfirmedBlock.BlockHeight block_height = 5; -} - -message SubscribeUpdatePing {} \ No newline at end of file diff --git a/observability/indexer/protos/solana-storage-v1.10.40.proto b/observability/indexer/protos/solana-storage-v1.10.40.proto deleted file mode 100644 index 2be3e7a0c..000000000 --- a/observability/indexer/protos/solana-storage-v1.10.40.proto +++ /dev/null @@ -1,118 +0,0 @@ -syntax = "proto3"; - -package solana.storage.ConfirmedBlock; - -message ConfirmedBlock { - string previous_blockhash = 1; - string blockhash = 2; - uint64 parent_slot = 3; - repeated ConfirmedTransaction transactions = 4; - repeated Reward rewards = 5; - UnixTimestamp block_time = 6; - BlockHeight block_height = 7; -} - -message ConfirmedTransaction { - Transaction transaction = 1; - TransactionStatusMeta meta = 2; -} - -message Transaction { - repeated bytes signatures = 1; - Message message = 2; -} - -message Message { - MessageHeader header = 1; - repeated bytes account_keys = 2; - bytes recent_blockhash = 3; - repeated CompiledInstruction instructions = 4; - bool versioned = 5; - repeated MessageAddressTableLookup address_table_lookups = 6; -} - -message MessageHeader { - uint32 num_required_signatures = 1; - uint32 num_readonly_signed_accounts = 2; - uint32 num_readonly_unsigned_accounts = 3; -} - -message MessageAddressTableLookup { - bytes account_key = 1; - bytes writable_indexes = 2; - bytes readonly_indexes = 3; -} - -message TransactionStatusMeta { - TransactionError err = 1; - uint64 fee = 2; - repeated uint64 pre_balances = 3; - repeated uint64 post_balances = 4; - repeated InnerInstructions inner_instructions = 5; - bool inner_instructions_none = 10; - repeated string log_messages = 6; - bool log_messages_none = 11; - repeated TokenBalance pre_token_balances = 7; - repeated TokenBalance post_token_balances = 8; - repeated Reward rewards = 9; - repeated bytes loaded_writable_addresses = 12; - repeated bytes loaded_readonly_addresses = 13; -} - -message TransactionError { - bytes err = 1; -} - -message InnerInstructions { - uint32 index = 1; - repeated CompiledInstruction instructions = 2; -} - -message CompiledInstruction { - uint32 program_id_index = 1; - bytes accounts = 2; - bytes data = 3; -} - -message TokenBalance { - uint32 account_index = 1; - string mint = 2; - UiTokenAmount ui_token_amount = 3; - string owner = 4; - string program_id = 5; -} - -message UiTokenAmount { - double ui_amount = 1; - uint32 decimals = 2; - string amount = 3; - string ui_amount_string = 4; -} - -enum RewardType { - Unspecified = 0; - Fee = 1; - Rent = 2; - Staking = 3; - Voting = 4; -} - -message Reward { - string pubkey = 1; - int64 lamports = 2; - uint64 post_balance = 3; - RewardType reward_type = 4; - string commission = 5; -} - -message Rewards { - repeated Reward rewards = 1; -} - -message UnixTimestamp { - int64 timestamp = 1; -} - -message BlockHeight { - uint64 block_height = 1; -} \ No newline at end of file diff --git a/observability/indexer/src/bin/main.rs b/observability/indexer/src/bin/main.rs deleted file mode 100644 index 00ccbbcf6..000000000 --- a/observability/indexer/src/bin/main.rs +++ /dev/null @@ -1,6 +0,0 @@ -use anyhow::Result; -use clap::Parser; - -fn main() -> Result<()> { - marginfi_v2_indexer::entrypoint::entry(marginfi_v2_indexer::entrypoint::Opts::parse()) -} diff --git a/observability/indexer/src/commands/backfill.rs b/observability/indexer/src/commands/backfill.rs deleted file mode 100644 index 049ed769e..000000000 --- a/observability/indexer/src/commands/backfill.rs +++ /dev/null @@ -1,190 +0,0 @@ -use crate::{ - common::Target, - utils::{ - big_query::DATE_FORMAT_STR, - protos::gcp_pubsub, - transactions_crawler::{ - TransactionsCrawler, TransactionsCrawlerConfig, TransactionsCrawlerContext, - }, - }, -}; -use anyhow::Result; -use base64::{engine::general_purpose, Engine}; -use chrono::{NaiveDateTime, Utc}; -use envconfig::Envconfig; -use futures::future::join_all; -use google_cloud_default::WithAuthExt; -use google_cloud_googleapis::pubsub::v1::PubsubMessage; -use google_cloud_pubsub::client::{Client, ClientConfig}; -use itertools::Itertools; -use solana_sdk::{pubkey::Pubkey, signature::Signature, transaction::TransactionVersion}; -use std::{str::FromStr, sync::Arc, time::Duration}; -use tracing::error; -use uuid::Uuid; - -#[derive(Envconfig, Debug, Clone)] -pub struct BackfillConfig { - #[envconfig(from = "BACKFILL_RPC_ENDPOINT")] - pub rpc_endpoint: String, - #[envconfig(from = "BACKFILL_SIGNATURE_FETCH_LIMIT")] - pub signature_fetch_limit: usize, - #[envconfig(from = "BACKFILL_MAX_CONCURRENT_REQUESTS")] - pub max_concurrent_requests: usize, - #[envconfig(from = "BACKFILL_MAX_PENDING_SIGNATURES")] - pub max_pending_signatures: usize, - #[envconfig(from = "BACKFILL_MONITOR_INTERVAL")] - pub monitor_interval: u64, - #[envconfig(from = "BACKFILL_PROGRAM_ID")] - pub program_id: Pubkey, - #[envconfig(from = "BACKFILL_BEFORE_SIGNATURE")] - pub before: Option, - #[envconfig(from = "BACKFILL_UNTIL_SIGNATURE")] - pub until: Option, - - #[envconfig(from = "BACKFILL_PROJECT_ID")] - pub project_id: String, - #[envconfig(from = "BACKFILL_PUBSUB_TOPIC_NAME")] - pub topic_name: String, - #[envconfig(from = "GOOGLE_APPLICATION_CREDENTIALS_JSON")] - pub gcp_sa_key: String, -} - -pub async fn backfill(config: BackfillConfig) -> Result<()> { - let config_clone = config.clone(); - - let tx_crawler = TransactionsCrawler::new_with_config(TransactionsCrawlerConfig { - rpc_endpoint: config_clone.rpc_endpoint, - signature_fetch_limit: config_clone.signature_fetch_limit, - max_concurrent_requests: config_clone.max_concurrent_requests, - max_pending_signatures: config_clone.max_pending_signatures, - monitor_interval: config_clone.monitor_interval, - targets: [Target { - before: config_clone - .before - .map(|sig_str| Signature::from_str(&sig_str).unwrap()), - until: config_clone - .until - .map(|sig_str| Signature::from_str(&sig_str).unwrap()), - address: config_clone.program_id, - }] - .to_vec(), - }); - - let transaction_processor = |ctx: Arc| async move { - push_transactions_to_pubsub(ctx, config).await.unwrap() - }; - - tx_crawler.run_async(&transaction_processor).await.unwrap(); - - Ok(()) -} - -pub async fn push_transactions_to_pubsub( - ctx: Arc, - config: BackfillConfig, -) -> Result<()> { - let topic_name = config.topic_name.as_str(); - - let client_config = ClientConfig::default().with_auth().await?; - let client = Client::new(client_config).await?; - - let topic = client.topic(topic_name); - topic - .exists(None, None) - .await - .unwrap_or_else(|_| panic!("topic {} not found", topic_name)); - - let publisher = topic.new_publisher(None); - - loop { - let mut transactions_data = vec![]; - { - let signatures_queue = ctx.transaction_queue.lock().unwrap(); - while !signatures_queue.is_empty() { - transactions_data.push(signatures_queue.pop().unwrap()); - } - } - if transactions_data.is_empty() { - tokio::time::sleep(Duration::from_millis(10)).await; - continue; - } - - let mut messages = vec![]; - - transactions_data.iter().for_each(|transaction_data| { - let now = Utc::now(); - - let tx_with_meta = &transaction_data.transaction.transaction; - let tx_decoded = tx_with_meta.transaction.decode().unwrap(); - - // println!( - // "{:?} - {}", - // transaction_data.indexing_address, - // tx_decoded.signatures.first().unwrap().to_string(), - // ); - - let message = gcp_pubsub::PubsubTransaction { - id: Uuid::new_v4().to_string(), - created_at: now.format(DATE_FORMAT_STR).to_string(), - timestamp: NaiveDateTime::from_timestamp_opt( - transaction_data.transaction.block_time.unwrap_or(0), - 0, - ) - .unwrap() - .format(DATE_FORMAT_STR) - .to_string(), - signature: tx_decoded.signatures.first().unwrap().to_string(), - indexing_address: transaction_data.indexing_address.to_string(), - slot: transaction_data.transaction.slot, - signer: tx_decoded - .message - .static_account_keys() - .first() - .unwrap() - .to_string(), - success: tx_with_meta.meta.clone().unwrap().err.is_none(), - version: tx_with_meta - .version - .clone() - .map(|v| match v { - TransactionVersion::Legacy(_) => "legacy".to_string(), - TransactionVersion::Number(version) => version.to_string(), - }) - .unwrap_or_else(|| "unknown".to_string()), - fee: tx_with_meta.meta.clone().map(|meta| meta.fee).unwrap_or(0), - meta: tx_with_meta - .meta - .clone() - .map(|meta| serde_json::to_string(&meta).unwrap()) - .unwrap(), - message: general_purpose::STANDARD.encode(tx_decoded.message.serialize()), - }; - - let message_str = serde_json::to_string(&message).unwrap(); - let message_bytes = message_str.as_bytes().to_vec(); - messages.push(PubsubMessage { - data: message_bytes.into(), - ..PubsubMessage::default() - }); - }); - - // Send a message. There are also `publish_bulk` and `publish_immediately` methods. - let awaiters = publisher.publish_bulk(messages).await; - - // The get method blocks until a server-generated ID or an error is returned for the published message. - let pub_results = join_all( - awaiters - .into_iter() - .map(|awaiter| awaiter.get(None)) - .collect_vec(), - ) - .await; - - pub_results.into_iter().for_each(|result| match result { - Ok(_) => {} - Err(err) => { - error!("Error sending to pubsub: {:?}", err.message()) // TODO: retry logic - } - }); - } -} diff --git a/observability/indexer/src/commands/create_table.rs b/observability/indexer/src/commands/create_table.rs deleted file mode 100644 index b3e41826c..000000000 --- a/observability/indexer/src/commands/create_table.rs +++ /dev/null @@ -1,92 +0,0 @@ -use anyhow::{anyhow, Result}; -use gcp_bigquery_client::{ - error::BQError, - model::{table::Table, time_partitioning::TimePartitioning}, -}; -use std::str::FromStr; -use tracing::{info, warn}; -use yup_oauth2::parse_service_account_key; - -use crate::utils::big_query::{ - ACCOUNT_SCHEMA, METRIC_LENDING_POOL_BANK_SCHEMA, METRIC_MARGINFI_ACCOUNT_SCHEMA, - METRIC_MARGINFI_GROUP_SCHEMA, NOT_FOUND_CODE, TRANSACTION_SCHEMA, -}; - -#[derive(Debug)] -pub enum TableType { - Transaction, - Account, - MetricMarginfiGroup, - MetricLendingPoolBank, - MetricMarginfiAccount, -} - -impl FromStr for TableType { - type Err = anyhow::Error; - - fn from_str(s: &str) -> Result { - match s { - "transaction" => Ok(Self::Transaction), - "account" => Ok(Self::Account), - "metric_group" => Ok(Self::MetricMarginfiGroup), - "metric_bank" => Ok(Self::MetricLendingPoolBank), - "metric_account" => Ok(Self::MetricMarginfiAccount), - _ => Err(anyhow!("Invalid table type")), - } - } -} - -pub async fn create_table( - project_id: String, - dataset_id: String, - table_id: String, - table_type: TableType, - table_friendly_name: Option, - table_description: Option, -) -> Result<()> { - // Init BigQuery client - let sa_key = - parse_service_account_key(std::env::var("GOOGLE_APPLICATION_CREDENTIALS_JSON").unwrap()) - .unwrap(); - let client = gcp_bigquery_client::Client::from_service_account_key(sa_key, false) - .await - .unwrap(); - - let schema = match table_type { - TableType::Transaction => TRANSACTION_SCHEMA.to_owned(), - TableType::Account => ACCOUNT_SCHEMA.to_owned(), - TableType::MetricMarginfiGroup => METRIC_MARGINFI_GROUP_SCHEMA.to_owned(), - TableType::MetricLendingPoolBank => METRIC_LENDING_POOL_BANK_SCHEMA.to_owned(), - TableType::MetricMarginfiAccount => METRIC_MARGINFI_ACCOUNT_SCHEMA.to_owned(), - }; - - // Create a new table if needed - match client - .table() - .get(&project_id, &dataset_id, &table_id, None) - .await - { - Ok(_) => info!("Table {} already exists", table_id), - Err(error) => match error { - BQError::ResponseError { error } if error.error.code == NOT_FOUND_CODE => { - warn!("Table {} not found, creating", table_id); - match client - .table() - .create( - Table::new(&project_id, &dataset_id, &table_id, schema) - .friendly_name(&table_friendly_name.unwrap_or_default()) - .description(&table_description.unwrap_or_default()) - .time_partitioning(TimePartitioning::per_day().field("timestamp")), - ) - .await - { - Ok(_) => info!("Table {} created", table_id), - Err(error) => panic!("Error creating table {}: {:#?}", table_id, error), - }; - } - _ => panic!("Error fetching table {}: {:#?}", table_id, error), - }, - }; - - Ok(()) -} diff --git a/observability/indexer/src/commands/index_accounts.rs b/observability/indexer/src/commands/index_accounts.rs deleted file mode 100644 index 729006f26..000000000 --- a/observability/indexer/src/commands/index_accounts.rs +++ /dev/null @@ -1,415 +0,0 @@ -use crate::utils::{big_query::DATE_FORMAT_STR, convert_account, protos::gcp_pubsub}; -use anyhow::Result; -use base64::{engine::general_purpose, Engine}; -use chrono::{DateTime, Utc}; -use envconfig::Envconfig; -use futures::{future::join_all, StreamExt}; -use google_cloud_default::WithAuthExt; -use google_cloud_googleapis::pubsub::v1::PubsubMessage; -use google_cloud_pubsub::client::{Client, ClientConfig}; -use itertools::Itertools; -use solana_measure::measure::Measure; -use solana_sdk::{account::Account, pubkey::Pubkey, signature::Signature}; -use std::{ - collections::{BTreeMap, BTreeSet, HashMap}, - sync::{ - atomic::{AtomicU64, Ordering}, - Arc, Mutex, - }, - time::Duration, -}; -use tonic::Status; -use tracing::{debug, error, info, warn}; -use uuid::Uuid; -use yellowstone_grpc_client::GeyserGrpcClient; -use yellowstone_grpc_proto::geyser::{ - subscribe_update::UpdateOneof, CommitmentLevel, SubscribeRequest, - SubscribeRequestFilterAccounts, SubscribeRequestFilterSlots, -}; - -#[derive(Envconfig, Debug, Clone)] -pub struct IndexAccountsConfig { - #[envconfig(from = "INDEX_ACCOUNTS_RPC_ENDPOINT")] - pub rpc_endpoint: String, - #[envconfig(from = "INDEX_ACCOUNTS_RPC_TOKEN")] - pub rpc_token: String, - #[envconfig(from = "INDEX_ACCOUNTS_SLOTS_BUFFER_SIZE")] - pub slots_buffer_size: u32, - #[envconfig(from = "INDEX_ACCOUNTS_MAX_CONCURRENT_REQUESTS")] - pub max_concurrent_requests: usize, - #[envconfig(from = "INDEX_ACCOUNTS_MONITOR_INTERVAL")] - pub monitor_interval: u64, - #[envconfig(from = "INDEX_ACCOUNTS_PROGRAM_ID")] - pub program_id: Pubkey, - - #[envconfig(from = "INDEX_ACCOUNTS_PROJECT_ID")] - pub project_id: String, - #[envconfig(from = "INDEX_ACCOUNTS_PUBSUB_TOPIC_NAME")] - pub topic_name: String, - #[envconfig(from = "GOOGLE_APPLICATION_CREDENTIALS_JSON")] - pub gcp_sa_key: Option, -} - -#[derive(Debug, Clone)] -pub struct AccountUpdateData { - pub timestamp: DateTime, - pub slot: u64, - pub address: Pubkey, - pub txn_signature: Option, - pub write_version: Option, - pub account_data: Account, -} - -#[derive(Clone)] -pub struct Context { - pub config: Arc, - account_updates_queue: Arc>>>, - account_updates_counter: Arc, - latest_slots_with_commitment: Arc>>, - stream_disconnection_count: Arc, - update_processing_error_count: Arc, -} - -impl Context { - pub async fn new(config: &IndexAccountsConfig) -> Self { - Self { - config: Arc::new(config.clone()), - account_updates_queue: Arc::new(Mutex::new(BTreeMap::new())), - account_updates_counter: Arc::new(AtomicU64::new(0)), - latest_slots_with_commitment: Arc::new(Mutex::new(BTreeSet::new())), - stream_disconnection_count: Arc::new(AtomicU64::new(0)), - update_processing_error_count: Arc::new(AtomicU64::new(0)), - } - } -} - -pub async fn index_accounts(config: IndexAccountsConfig) -> Result<()> { - let context = Arc::new(Context::new(&config).await); - - let listen_to_updates_handle = tokio::spawn({ - let context = context.clone(); - async move { listen_to_updates(context).await } - }); - let process_account_updates_handle = tokio::spawn({ - let context = context.clone(); - async move { push_transactions_to_pubsub(context).await.unwrap() } - }); - let monitor_handle = tokio::spawn({ - let context = context.clone(); - async move { monitor(context).await } - }); - - join_all([ - listen_to_updates_handle, - process_account_updates_handle, - monitor_handle, - ]) - .await; - - Ok(()) -} - -async fn listen_to_updates(ctx: Arc) { - loop { - info!("Connecting geyser client"); - let geyser_client_connection_result = - GeyserGrpcClient::build_from_shared(ctx.config.rpc_endpoint.to_string()) - .unwrap() - .x_token(Some(ctx.config.rpc_token.to_string())) - .unwrap() - .connect() - .await; - - let mut geyser_client = match geyser_client_connection_result { - Ok(geyser_client) => geyser_client, - Err(err) => { - error!("Error connecting to geyser client: {}", err); - tokio::time::sleep(Duration::from_secs(1)).await; - continue; - } - }; - - let subscribe_request = SubscribeRequest { - accounts: HashMap::from_iter([( - ctx.config.program_id.to_string(), - SubscribeRequestFilterAccounts { - owner: vec![ctx.config.program_id.to_string()], - account: vec![], - ..Default::default() - }, - )]), - slots: HashMap::from_iter([( - "slots".to_string(), - SubscribeRequestFilterSlots::default(), - )]), - ..Default::default() - }; - - // Establish streams - let (_, mut stream) = match geyser_client - .subscribe_with_request(Some(subscribe_request)) - .await - { - Ok(value) => value, - Err(e) => { - error!("Error subscribing geyser client {e}"); - continue; - } - }; - - while let Some(received) = stream.next().await { - match received { - Ok(received) => { - if let Some(update) = received.update_oneof { - match process_update(ctx.clone(), update) { - Ok(_) => {} - Err(err) => { - error!("Error processing update: {}", err); - ctx.update_processing_error_count - .fetch_add(1, Ordering::Relaxed); - } - } - } - } - Err(err) => { - error!("Error pulling next update: {}", err); - tokio::time::sleep(Duration::from_secs(1)).await; - break; - } - } - } - - error!("Stream got disconnected"); - ctx.stream_disconnection_count - .fetch_add(1, Ordering::Relaxed); - } -} - -fn process_update(ctx: Arc, update: UpdateOneof) -> Result<()> { - match update { - UpdateOneof::Account(account_update) => { - let update_slot = account_update.slot; - if let Some(account_info) = account_update.account { - let address = &Pubkey::try_from(account_info.pubkey.clone()).unwrap(); - let txn_signature = account_info - .txn_signature - .clone() - .map(|sig_bytes| Signature::try_from(sig_bytes).unwrap()); - let mut account_updates_queue = ctx.account_updates_queue.lock().unwrap(); - - let slot_account_updates = match account_updates_queue.get_mut(&update_slot) { - Some(slot_account_updates) => slot_account_updates, - None => { - account_updates_queue.insert(update_slot, HashMap::default()); - account_updates_queue.get_mut(&update_slot).unwrap() - } - }; - - slot_account_updates.insert( - *address, - AccountUpdateData { - address: *address, - timestamp: Utc::now(), - slot: update_slot, - txn_signature, - write_version: Some(account_info.write_version), - account_data: convert_account(account_info).unwrap(), - }, - ); - } else { - anyhow::bail!("Expected `transaction` in `UpdateOneof::Transaction` update"); - } - } - UpdateOneof::Slot(slot) => { - if slot.status == CommitmentLevel::Confirmed as i32 - || slot.status == CommitmentLevel::Finalized as i32 - { - let mut latest_slots = ctx.latest_slots_with_commitment.lock().unwrap(); - let slot_inserted = latest_slots.insert(slot.slot); - if slot_inserted && latest_slots.len() > ctx.config.slots_buffer_size as usize { - let oldest_slot = *latest_slots.first().unwrap(); - latest_slots.remove(&oldest_slot); - } - } - } - UpdateOneof::Ping(_) => { - debug!("ping"); - } - _ => { - warn!("unknown update"); - } - } - - Ok(()) -} - -pub async fn push_transactions_to_pubsub(ctx: Arc) -> Result<()> { - let topic_name = ctx.config.topic_name.as_str(); - - let client_config = ClientConfig::default().with_auth().await?; - let client = Client::new(client_config).await?; - - let topic = client.topic(topic_name); - topic - .exists(None, None) - .await - .unwrap_or_else(|_| panic!("topic {} not found", topic_name)); - - let publisher = topic.new_publisher(None); - - loop { - let mut account_updates_data: Vec = vec![]; - { - let mut account_updates_per_slot = ctx.account_updates_queue.lock().unwrap(); - let latest_slots_with_commitment = ctx.latest_slots_with_commitment.lock().unwrap(); - - // Remove all transactions received in a slot that has not been confirmed in allotted time - if let Some(oldest_slot_with_commitment) = latest_slots_with_commitment.first() { - account_updates_per_slot.retain(|slot, account_updates| { - if slot < oldest_slot_with_commitment { - debug!( - "throwing away txs {:?} from slot {}", - account_updates - .iter() - .map(|(address, _)| address.to_string()) - .collect_vec(), - slot - ); - } - - slot >= oldest_slot_with_commitment - }); - } - - // Add transactions from confirmed slots to the queue of transactions to be indexed - for (slot, slot_account_updates) in account_updates_per_slot.clone().iter() { - if let Some(latest_slot_with_commitment) = latest_slots_with_commitment.last() { - if slot > latest_slot_with_commitment { - break; // Ok because transactions_per_slot is sorted (BtreeMap) - } - } - - if latest_slots_with_commitment.contains(slot) { - account_updates_data.extend(slot_account_updates.values().cloned()); - account_updates_per_slot.remove(slot); - } - } - } - - if account_updates_data.is_empty() { - tokio::time::sleep(Duration::from_millis(10)).await; - continue; - } - - let mut messages = vec![]; - - account_updates_data.iter().for_each(|account_update_data| { - ctx.account_updates_counter.fetch_add(1, Ordering::Relaxed); - - let now = Utc::now(); - - let message = gcp_pubsub::PubsubAccountUpdate { - id: Uuid::new_v4().to_string(), - created_at: now.format(DATE_FORMAT_STR).to_string(), - timestamp: account_update_data - .timestamp - .format(DATE_FORMAT_STR) - .to_string(), - owner: account_update_data.account_data.owner.to_string(), - slot: account_update_data.slot, - pubkey: account_update_data.address.to_string(), - txn_signature: account_update_data.txn_signature.map(|sig| sig.to_string()), - write_version: account_update_data.write_version, - lamports: account_update_data.account_data.lamports, - executable: account_update_data.account_data.executable, - rent_epoch: account_update_data.account_data.rent_epoch, - data: general_purpose::STANDARD.encode(&account_update_data.account_data.data), - }; - - let message_str = serde_json::to_string(&message).unwrap(); - let message_bytes = message_str.as_bytes().to_vec(); - messages.push(PubsubMessage { - data: message_bytes.into(), - ..PubsubMessage::default() - }); - }); - - // Send a message. There are also `publish_bulk` and `publish_immediately` methods. - let awaiters = publisher.publish_bulk(messages).await; - - // The get method blocks until a server-generated ID or an error is returned for the published message. - let pub_results: Vec> = join_all( - awaiters - .into_iter() - .map(|awaiter| awaiter.get(None)) - .collect_vec(), - ) - .await; - - pub_results.into_iter().for_each(|result| match result { - Ok(_) => {} - Err(status) => { - error!( - "Error sending tx to pubsub (code {:?}): {:?}", - status.code(), - status.message() - ) - } - }); - } -} - -async fn monitor(ctx: Arc) { - let mut main_timing = Measure::start("main"); - let mut last_fetch_count = 0u64; - let mut last_fetch_time = 0f32; - - loop { - tokio::time::sleep(Duration::from_secs(ctx.config.monitor_interval)).await; - main_timing.stop(); - let latest_slots = ctx.latest_slots_with_commitment.lock().unwrap().clone(); - let account_updates_queue = ctx.account_updates_queue.lock().unwrap().clone(); - let earliest_block_with_commitment = latest_slots.first().unwrap_or(&0); - let latest_block_with_commitment = latest_slots.last().unwrap_or(&u64::MAX); - let earliest_pending_slot = account_updates_queue - .first_key_value() - .map(|(slot, _)| slot) - .unwrap_or(&0); - let latest_pending_slot = account_updates_queue - .first_key_value() - .map(|(slot, _)| slot) - .unwrap_or(&u64::MAX); - let current_fetch_count = ctx.account_updates_counter.load(Ordering::Relaxed); - let stream_disconnection_count = ctx.stream_disconnection_count.load(Ordering::Relaxed); - let update_processing_error_count = - ctx.update_processing_error_count.load(Ordering::Relaxed); - let current_fetch_time = main_timing.as_s(); - - let ingest_rate = if (current_fetch_time - last_fetch_time) > 0.0 { - (current_fetch_count - last_fetch_count) as f32 / (current_fetch_time - last_fetch_time) - } else { - f32::INFINITY - }; - let account_updates_queue_size = ctx.account_updates_queue.lock().unwrap().len(); - - debug!( - "Time: {:.1}s | Total account udpates: {} | {:.1}s count: {} | {:.1}s rate: {:.1} tx/s | Tx Q size: {} | Stream disconnections: {} | Processing errors: {} | Earliest confirmed slot: {} | Latest confirmed slot: {} | Earliest pending slot: {} | Latest pending slot: {}", - current_fetch_time, - current_fetch_count, - current_fetch_time - last_fetch_time, - current_fetch_count - last_fetch_count, - current_fetch_time - last_fetch_time, - ingest_rate, - account_updates_queue_size, - stream_disconnection_count, - update_processing_error_count, - earliest_block_with_commitment, - latest_block_with_commitment, - earliest_pending_slot, - latest_pending_slot, - ); - - last_fetch_count = current_fetch_count; - last_fetch_time = current_fetch_time; - } -} diff --git a/observability/indexer/src/commands/index_transactions.rs b/observability/indexer/src/commands/index_transactions.rs deleted file mode 100644 index b40b98f90..000000000 --- a/observability/indexer/src/commands/index_transactions.rs +++ /dev/null @@ -1,450 +0,0 @@ -use crate::utils::{big_query::DATE_FORMAT_STR, protos::gcp_pubsub}; -use anyhow::Result; -use base64::{engine::general_purpose, Engine}; -use chrono::{DateTime, Utc}; -use envconfig::Envconfig; -use futures::{future::join_all, StreamExt}; -use google_cloud_default::WithAuthExt; -use google_cloud_googleapis::pubsub::v1::PubsubMessage; -use google_cloud_pubsub::client::{Client, ClientConfig}; -use itertools::Itertools; -use solana_measure::measure::Measure; -use solana_sdk::{pubkey::Pubkey, signature::Signature, transaction::TransactionVersion}; -use solana_transaction_status::{ - TransactionWithStatusMeta, UiTransactionStatusMeta, VersionedTransactionWithStatusMeta, -}; -use std::{ - collections::{BTreeMap, BTreeSet, HashMap}, - sync::{ - atomic::{AtomicU64, Ordering}, - Arc, Mutex, - }, - time::Duration, -}; -use tonic::Status; -use tracing::{debug, error, info, warn}; -use uuid::Uuid; -use yellowstone_grpc_client::GeyserGrpcClient; -use yellowstone_grpc_proto::{ - convert_from, - geyser::{ - subscribe_update::UpdateOneof, CommitmentLevel, SubscribeRequest, - SubscribeRequestFilterSlots, SubscribeRequestFilterTransactions, - }, -}; - -#[derive(Envconfig, Debug, Clone)] -pub struct IndexTransactionsConfig { - #[envconfig(from = "INDEX_TRANSACTIONS_RPC_ENDPOINT")] - pub rpc_endpoint: String, - #[envconfig(from = "INDEX_TRANSACTIONS_RPC_TOKEN")] - pub rpc_token: String, - #[envconfig(from = "INDEX_TRANSACTIONS_SLOTS_BUFFER_SIZE")] - pub slots_buffer_size: u32, - #[envconfig(from = "INDEX_TRANSACTIONS_MONITOR_INTERVAL")] - pub monitor_interval: u64, - #[envconfig(from = "INDEX_TRANSACTIONS_PROGRAM_ID")] - pub program_id: Pubkey, - - #[envconfig(from = "INDEX_TRANSACTIONS_PROJECT_ID")] - pub project_id: String, - #[envconfig(from = "INDEX_TRANSACTIONS_PUBSUB_TOPIC_NAME")] - pub topic_name: String, - #[envconfig(from = "GOOGLE_APPLICATION_CREDENTIALS_JSON")] - pub gcp_sa_key: Option, -} - -#[derive(Debug, Clone)] -pub struct TransactionData { - pub timestamp: DateTime, - pub slot: u64, - pub signature: Signature, - pub indexing_addresses: Vec, - pub transaction: VersionedTransactionWithStatusMeta, -} - -#[derive(Clone)] -pub struct Context { - pub config: Arc, - transactions_queue: Arc>>>, - transactions_counter: Arc, - latest_slots_with_commitment: Arc>>, - stream_disconnection_count: Arc, - update_processing_error_count: Arc, -} - -impl Context { - pub async fn new(config: &IndexTransactionsConfig) -> Self { - Self { - config: Arc::new(config.clone()), - transactions_queue: Arc::new(Mutex::new(BTreeMap::new())), - transactions_counter: Arc::new(AtomicU64::new(0)), - latest_slots_with_commitment: Arc::new(Mutex::new(BTreeSet::new())), - stream_disconnection_count: Arc::new(AtomicU64::new(0)), - update_processing_error_count: Arc::new(AtomicU64::new(0)), - } - } -} - -pub async fn index_transactions(config: IndexTransactionsConfig) -> Result<()> { - let context = Arc::new(Context::new(&config).await); - - let listen_to_updates_handle = tokio::spawn({ - let context = context.clone(); - async move { listen_to_updates(context).await } - }); - let process_transactions_handle = tokio::spawn({ - let context = context.clone(); - async move { push_transactions_to_pubsub(context).await.unwrap() } - }); - let monitor_handle = tokio::spawn({ - let context = context.clone(); - async move { monitor(context).await } - }); - - join_all([ - listen_to_updates_handle, - process_transactions_handle, - monitor_handle, - ]) - .await; - - Ok(()) -} - -async fn listen_to_updates(ctx: Arc) { - loop { - info!("Connecting geyser client"); - let geyser_client_connection_result = - GeyserGrpcClient::build_from_shared(ctx.config.rpc_endpoint.to_string()) - .unwrap() - .x_token(Some(ctx.config.rpc_token.to_string())) - .unwrap() - .connect() - .await; - - let mut geyser_client = match geyser_client_connection_result { - Ok(geyser_client) => geyser_client, - Err(err) => { - error!("Error connecting to geyser client: {}", err); - tokio::time::sleep(Duration::from_secs(1)).await; - continue; - } - }; - - let subscribe_request = SubscribeRequest { - slots: HashMap::from_iter([( - "client".to_string(), - SubscribeRequestFilterSlots { - filter_by_commitment: Some(false), - }, - )]), - transactions: HashMap::from_iter([( - ctx.config.program_id.to_string(), - SubscribeRequestFilterTransactions { - vote: Some(false), - failed: Some(false), - account_include: vec![ctx.config.program_id.to_string()], - account_exclude: vec![], - ..Default::default() - }, - )]), - commitment: Some(CommitmentLevel::Processed as i32), - ..Default::default() - }; - - // Establish streams - let (_, mut stream) = match geyser_client - .subscribe_with_request(Some(subscribe_request)) - .await - { - Ok(value) => value, - Err(e) => { - error!("Error subscribing geyser client {e}"); - continue; - } - }; - - while let Some(received) = stream.next().await { - match received { - Ok(received) => { - if let Some(update) = received.update_oneof { - match process_update(ctx.clone(), &received.filters, update) { - Ok(_) => {} - Err(err) => { - error!("Error processing update: {}", err); - ctx.update_processing_error_count - .fetch_add(1, Ordering::Relaxed); - } - } - } - } - Err(err) => { - error!("Error pulling next update: {}", err); - tokio::time::sleep(Duration::from_secs(1)).await; - break; - } - } - } - - error!("Stream got disconnected"); - ctx.stream_disconnection_count - .fetch_add(1, Ordering::Relaxed); - } -} - -fn process_update(ctx: Arc, filters: &[String], update: UpdateOneof) -> Result<()> { - match update { - UpdateOneof::Transaction(transaction_update) => { - if let Some(transaction_info) = transaction_update.transaction { - let signature = transaction_info.signature.clone(); - let transaction = convert_from::create_tx_with_meta(transaction_info).unwrap(); - let mut transactions_queue = ctx.transactions_queue.lock().unwrap(); - - let slot_transactions = match transactions_queue.get_mut(&transaction_update.slot) { - Some(slot_transactions) => slot_transactions, - None => { - transactions_queue.insert(transaction_update.slot, vec![]); - transactions_queue - .get_mut(&transaction_update.slot) - .unwrap() - } - }; - - let transaction = match transaction { - TransactionWithStatusMeta::MissingMetadata(transaction) => { - error!( - "Missing metadata for transaction {}. Skipping potentially relevant transaction.", - transaction.signatures.first().unwrap() - ); - return Ok(()); - } - TransactionWithStatusMeta::Complete(transaction_with_meta) => { - transaction_with_meta - } - }; - - slot_transactions.push(TransactionData { - timestamp: Utc::now(), - signature: Signature::try_from(signature).unwrap(), - slot: transaction_update.slot, - indexing_addresses: filters.to_vec(), - transaction, - }); - } else { - anyhow::bail!("Expected `transaction` in `UpdateOneof::Transaction` update"); - } - } - UpdateOneof::Slot(slot) => { - if slot.status == CommitmentLevel::Confirmed as i32 - || slot.status == CommitmentLevel::Finalized as i32 - { - let mut latest_slots = ctx.latest_slots_with_commitment.lock().unwrap(); - let slot_inserted = latest_slots.insert(slot.slot); - if slot_inserted && latest_slots.len() > ctx.config.slots_buffer_size as usize { - let oldest_slot = *latest_slots.first().unwrap(); - latest_slots.remove(&oldest_slot); - } - } - } - UpdateOneof::Ping(_) => { - debug!("ping"); - } - _ => { - warn!("unknown update: {:?}", update); - } - } - - Ok(()) -} - -pub async fn push_transactions_to_pubsub(ctx: Arc) -> Result<()> { - let topic_name = ctx.config.topic_name.as_str(); - - let client_config = ClientConfig::default().with_auth().await?; - let client = Client::new(client_config).await.unwrap(); - - let topic = client.topic(topic_name); - topic - .exists(None, None) - .await - .unwrap_or_else(|_| panic!("topic {} not found", topic_name)); - - let publisher = topic.new_publisher(None); - - loop { - let mut transactions_data: Vec = vec![]; - { - let mut transactions_per_slot = ctx.transactions_queue.lock().unwrap(); - let latest_slots_with_commitment = ctx.latest_slots_with_commitment.lock().unwrap(); - - // Remove all transactions received in a slot that has not been confirmed in allotted time - if let Some(oldest_slot_with_commitment) = latest_slots_with_commitment.first() { - transactions_per_slot.retain(|slot, transactions| { - if slot < oldest_slot_with_commitment { - debug!( - "throwing away txs {:?} from slot {}", - transactions - .iter() - .map(|tx| tx.signature.to_string()) - .collect_vec(), - slot - ); - } - - slot >= oldest_slot_with_commitment - }); - } - - // Add transactions from confirmed slots to the queue of transactions to be indexed - for (slot, slot_transactions) in transactions_per_slot.clone().iter() { - if let Some(latest_slot_with_commitment) = latest_slots_with_commitment.last() { - if slot > latest_slot_with_commitment { - break; // Ok because transactions_per_slot is sorted (BtreeMap) - } - } - - if latest_slots_with_commitment.contains(slot) { - transactions_data.extend(slot_transactions.clone()); - transactions_per_slot.remove(slot); - } - } - } - - if transactions_data.is_empty() { - tokio::time::sleep(Duration::from_millis(10)).await; - continue; - } - - let mut messages = vec![]; - - transactions_data.iter().for_each(|transaction_data| { - ctx.transactions_counter.fetch_add(1, Ordering::Relaxed); - - let now = Utc::now(); - - transaction_data - .indexing_addresses - .iter() - .for_each(|indexing_address| { - let message = gcp_pubsub::PubsubTransaction { - id: Uuid::new_v4().to_string(), - created_at: now.format(DATE_FORMAT_STR).to_string(), - timestamp: transaction_data - .timestamp - .format(DATE_FORMAT_STR) - .to_string(), - signature: transaction_data.signature.to_string(), - indexing_address: indexing_address.to_string(), - slot: transaction_data.slot, - signer: transaction_data - .transaction - .transaction - .message - .static_account_keys() - .first() - .unwrap() - .to_string(), - success: transaction_data.transaction.meta.status.is_ok(), - version: match transaction_data.transaction.transaction.version() { - TransactionVersion::Legacy(_) => "legacy".to_string(), - TransactionVersion::Number(version) => version.to_string(), - }, - - fee: transaction_data.transaction.meta.fee, - meta: serde_json::to_string(&UiTransactionStatusMeta::from( - transaction_data.transaction.meta.clone(), - )) - .unwrap(), - message: general_purpose::STANDARD - .encode(transaction_data.transaction.transaction.message.serialize()), - }; - - let message_str = serde_json::to_string(&message).unwrap(); - let message_bytes = message_str.as_bytes().to_vec(); - messages.push(PubsubMessage { - data: message_bytes.into(), - ..PubsubMessage::default() - }); - }); - }); - - // Send a message. There are also `publish_bulk` and `publish_immediately` methods. - let awaiters = publisher.publish_bulk(messages).await; - - // The get method blocks until a server-generated ID or an error is returned for the published message. - let pub_results: Vec> = join_all( - awaiters - .into_iter() - .map(|awaiter| awaiter.get(None)) - .collect_vec(), - ) - .await; - - pub_results.into_iter().for_each(|result| match result { - Ok(_) => {} - Err(status) => { - error!( - "Error sending tx to pubsub (code {:?}): {:?}", - status.code(), - status.message() - ) - } - }); - } -} - -async fn monitor(ctx: Arc) { - let mut main_timing = Measure::start("main"); - let mut last_fetch_count = 0u64; - let mut last_fetch_time = 0f32; - - loop { - tokio::time::sleep(Duration::from_secs(ctx.config.monitor_interval)).await; - main_timing.stop(); - let latest_slots = ctx.latest_slots_with_commitment.lock().unwrap().clone(); - let tx_queue = ctx.transactions_queue.lock().unwrap().clone(); - let earliest_block_with_commitment = latest_slots.first().unwrap_or(&0); - let latest_block_with_commitment = latest_slots.last().unwrap_or(&u64::MAX); - let earliest_pending_slot = tx_queue - .first_key_value() - .map(|(slot, _)| slot) - .unwrap_or(&0); - let latest_pending_slot = tx_queue - .first_key_value() - .map(|(slot, _)| slot) - .unwrap_or(&u64::MAX); - let current_fetch_count = ctx.transactions_counter.load(Ordering::Relaxed); - let stream_disconnection_count = ctx.stream_disconnection_count.load(Ordering::Relaxed); - let update_processing_error_count = - ctx.update_processing_error_count.load(Ordering::Relaxed); - let current_fetch_time = main_timing.as_s(); - - let ingest_rate = if (current_fetch_time - last_fetch_time) > 0.0 { - (current_fetch_count - last_fetch_count) as f32 / (current_fetch_time - last_fetch_time) - } else { - f32::INFINITY - }; - let tx_queue_size = ctx.transactions_queue.lock().unwrap().len(); - - debug!( - "Time: {:.1}s | Total txs: {} | {:.1}s count: {} | {:.1}s rate: {:.1} tx/s | Tx Q size: {} | Stream disconnections: {} | Processing errors: {} | Earliest confirmed slot: {} | Latest confirmed slot: {} | Earliest pending slot: {} | Latest pending slot: {}", - current_fetch_time, - current_fetch_count, - current_fetch_time - last_fetch_time, - current_fetch_count - last_fetch_count, - current_fetch_time - last_fetch_time, - ingest_rate, - tx_queue_size, - stream_disconnection_count, - update_processing_error_count, - earliest_block_with_commitment, - latest_block_with_commitment, - earliest_pending_slot, - latest_pending_slot, - ); - - last_fetch_count = current_fetch_count; - last_fetch_time = current_fetch_time; - } -} diff --git a/observability/indexer/src/commands/mod.rs b/observability/indexer/src/commands/mod.rs deleted file mode 100644 index 7c423c762..000000000 --- a/observability/indexer/src/commands/mod.rs +++ /dev/null @@ -1,5 +0,0 @@ -pub mod backfill; -pub mod create_table; -pub mod index_accounts; -pub mod index_transactions; -pub mod snapshot_accounts; diff --git a/observability/indexer/src/commands/snapshot_accounts.rs b/observability/indexer/src/commands/snapshot_accounts.rs deleted file mode 100644 index f62d7192c..000000000 --- a/observability/indexer/src/commands/snapshot_accounts.rs +++ /dev/null @@ -1,765 +0,0 @@ -use crate::utils::convert_account; -use crate::utils::crossbar::{CrossbarCache, SwbPullFeedMeta}; -use crate::utils::metrics::{LendingPoolBankMetrics, MarginfiAccountMetrics, MarginfiGroupMetrics}; -use crate::utils::snapshot::{AccountRoutingType, BankUpdateRoutingType}; -use crate::utils::snapshot::{OracleData, Snapshot}; -use crate::utils::swb_pull::overwrite_price_from_sim; -use anyhow::Result; -use chrono::{DateTime, Utc}; -use envconfig::Envconfig; -use futures::SinkExt; -use futures::{future::join_all, StreamExt}; -use gcp_bigquery_client::model::table_data_insert_all_request::TableDataInsertAllRequest; -use itertools::Itertools; -use rayon::prelude::*; -use solana_client::nonblocking::rpc_client::RpcClient; -use solana_measure::measure::Measure; -use solana_sdk::{ - account::Account, commitment_config::CommitmentConfig, pubkey::Pubkey, signature::Signature, -}; -use std::sync::atomic::AtomicI64; -use std::{ - collections::{BTreeMap, BTreeSet, HashMap}, - fmt::Debug, - str::FromStr, - sync::{ - atomic::{AtomicU64, Ordering}, - Arc, - }, - time::Duration, -}; -use tokio::sync::Mutex; -use tokio::time::Instant; -use tracing::{debug, error, info, warn}; -use yellowstone_grpc_client::GeyserGrpcClient; -use yellowstone_grpc_proto::geyser::subscribe_update::UpdateOneof; -use yellowstone_grpc_proto::geyser::{ - CommitmentLevel, SubscribeRequest, SubscribeRequestFilterAccounts, - SubscribeRequestFilterBlocksMeta, SubscribeRequestFilterSlots, -}; -use yup_oauth2::parse_service_account_key; - -#[derive(Debug, Clone)] -pub struct PubkeyVec(pub Vec); // Ugh - -impl FromStr for PubkeyVec { - type Err = anyhow::Error; - - fn from_str(s: &str) -> Result { - let targets_raw = json::parse(s).unwrap(); - if !targets_raw.is_array() { - return Err(anyhow::Error::msg(format!( - "Invalid base58 pubkey array: {}", - s - ))); - } - - let mut targets: Vec = vec![]; - for i in 0..targets_raw.len() { - targets.push(Pubkey::from_str(targets_raw[i].as_str().unwrap()).unwrap()); - } - Ok(Self(targets)) - } -} - -#[derive(Envconfig, Debug, Clone)] -pub struct SnapshotAccountsConfig { - #[envconfig(from = "SNAPSHOT_ACCOUNTS_RPC_ENDPOINT")] - pub rpc_endpoint: String, - #[envconfig(from = "SNAPSHOT_ACCOUNTS_RPC_ENDPOINT_GEYSER")] - pub rpc_endpoint_geyser: String, - #[envconfig(from = "SNAPSHOT_ACCOUNTS_RPC_TOKEN")] - pub rpc_token: String, - #[envconfig(from = "SNAPSHOT_ACCOUNTS_SLOTS_BUFFER_SIZE")] - pub slots_buffer_size: u32, - #[envconfig(from = "SNAPSHOT_ACCOUNTS_MONITOR_INTERVAL")] - pub monitor_interval: u64, - #[envconfig(from = "SNAPSHOT_ACCOUNTS_SNAP_INTERVAL")] - pub snap_interval: u64, - #[envconfig(from = "SNAPSHOT_ACCOUNTS_PROGRAM_ID")] - pub program_id: Pubkey, - #[envconfig(from = "SNAPSHOT_ACCOUNTS_ADDITIONAL_ACCOUNTS")] - pub additional_accounts: PubkeyVec, - - #[envconfig(from = "SNAPSHOT_ACCOUNTS_PROJECT_ID")] - pub project_id: String, - #[envconfig(from = "SNAPSHOT_ACCOUNTS_DATASET_ID")] - pub dataset_id: String, - #[envconfig(from = "SNAPSHOT_ACCOUNTS_TABLE_GROUP_METRICS")] - pub table_group: String, - #[envconfig(from = "SNAPSHOT_ACCOUNTS_TABLE_BANK_METRICS")] - pub table_bank: String, - #[envconfig(from = "SNAPSHOT_ACCOUNTS_TABLE_ACCOUNT_METRICS")] - pub table_account: String, - #[envconfig(from = "GOOGLE_APPLICATION_CREDENTIALS_JSON")] - pub gcp_sa_key: Option, -} - -#[derive(Clone, Debug)] -pub struct AccountUpdate { - pub timestamp: DateTime, - pub slot: u64, - pub address: Pubkey, - pub txn_signature: Option, - pub write_version: Option, - pub account_data: Account, -} - -#[derive(Clone)] -pub struct Context { - pub timestamp: Arc, - pub config: Arc, - pub rpc_client: Arc, - pub geyser_subscription_config: Arc>, - account_updates_queue: Arc>>>, - latest_slots_with_commitment: Arc>>, - account_snapshot: Arc>, - crossbar_store: Arc, - stream_disconnection_count: Arc, - update_processing_error_count: Arc, -} - -impl Context { - pub async fn new(config: &SnapshotAccountsConfig) -> Self { - let rpc_endpoint = format!("{}/{}", config.rpc_endpoint, config.rpc_token); - let rpc_client = Arc::new(RpcClient::new_with_commitment( - rpc_endpoint, - CommitmentConfig { - commitment: solana_sdk::commitment_config::CommitmentLevel::Finalized, - }, - )); - Self { - timestamp: Arc::new(AtomicI64::new(0)), - config: Arc::new(config.clone()), - rpc_client: rpc_client.clone(), - geyser_subscription_config: Arc::new(Mutex::new((false, SubscribeRequest::default()))), - account_updates_queue: Arc::new(Mutex::new(BTreeMap::new())), - latest_slots_with_commitment: Arc::new(Mutex::new(BTreeSet::new())), - account_snapshot: Arc::new(Mutex::new(Snapshot::new(config.program_id, rpc_client))), - crossbar_store: Arc::new(CrossbarCache::new()), - stream_disconnection_count: Arc::new(AtomicU64::new(0)), - update_processing_error_count: Arc::new(AtomicU64::new(0)), - } - } -} - -async fn compute_geyser_config( - config: &SnapshotAccountsConfig, - non_program_pubkeys: &[Pubkey], -) -> SubscribeRequest { - let mut accounts = config.additional_accounts.0.clone(); - accounts.append(&mut non_program_pubkeys.to_vec()); - accounts.sort(); - accounts.dedup(); - - SubscribeRequest { - accounts: HashMap::from_iter([ - ( - config.program_id.to_string(), - SubscribeRequestFilterAccounts { - owner: vec![config.program_id.to_string()], - ..Default::default() - }, - ), - ( - "lol".to_string(), - SubscribeRequestFilterAccounts { - account: accounts.iter().map(|x| x.to_string()).collect_vec(), - ..Default::default() - }, - ), - ]), - slots: HashMap::from_iter([( - "slots".to_string(), - SubscribeRequestFilterSlots { - filter_by_commitment: Some(false), - }, - )]), - blocks_meta: HashMap::from_iter([( - "blocks_meta".to_string(), - SubscribeRequestFilterBlocksMeta::default(), - )]), - commitment: Some(CommitmentLevel::Processed as i32), - ..Default::default() - } -} - -pub async fn snapshot_accounts(config: SnapshotAccountsConfig) -> Result<()> { - let context = Arc::new(Context::new(&config).await); - - info!("Fetching initial snapshot"); - let non_program_accounts = { - let mut snapshot = context.account_snapshot.lock().await; - snapshot.init().await.unwrap(); - info!("Summary: {snapshot}"); - - let swb_feed_accounts_and_hashes = snapshot - .price_feeds - .iter() - .filter_map(|(pk, od)| match od { - OracleData::SwitchboardPull(feed) => Some((*pk, hex::encode(feed.feed.feed_hash))), - _ => None, - }) - .collect::>(); - - context.crossbar_store.track_feeds( - swb_feed_accounts_and_hashes - .into_iter() - .map(|(feed_address, feed_hash)| SwbPullFeedMeta { - feed_hash, - feed_address, - }) - .collect::>(), - ); - context.crossbar_store.refresh_prices().await.unwrap(); - - snapshot - .routing_lookup - .iter() - .filter(|(_, routing_type)| match routing_type { - AccountRoutingType::MarginfiGroup => false, - AccountRoutingType::MarginfiAccount => false, - AccountRoutingType::Bank(_, bank_update_routing_type) => { - !matches!(bank_update_routing_type, BankUpdateRoutingType::State) - } - _ => true, - }) - .map(|(pubkey, _)| *pubkey) - .unique() - .collect_vec() - }; - - let geyser_subscription_config = compute_geyser_config(&config, &non_program_accounts).await; - *context.geyser_subscription_config.lock().await = (false, geyser_subscription_config.clone()); - - let update_crossbar_cache_handle = tokio::spawn({ - let context = context.clone(); - async move { - loop { - let mut retry_count = 0; - while retry_count < 3 { - match context.crossbar_store.refresh_prices().await { - Ok(_) => break, - Err(e) => { - retry_count += 1; - if retry_count == 3 { - error!("Failed to refresh prices after 3 attempts: {:?}", e); - } else { - tokio::time::sleep(std::time::Duration::from_secs(1)).await; - } - } - } - } - let mut snapshot = context.account_snapshot.lock().await; - let feeds_per_address: HashMap = - context.crossbar_store.get_prices_per_address(); - for (address, price) in feeds_per_address { - if let Some(od) = snapshot.price_feeds.get_mut(&address) { - if let OracleData::SwitchboardPull(feed) = od { - overwrite_price_from_sim(feed, &price); - } - } - } - tokio::time::sleep(std::time::Duration::from_secs(20)).await; - } - } - }); - - let listen_to_updates_handle = tokio::spawn({ - let context = context.clone(); - async move { listen_to_updates(context).await } - }); - - let update_account_map_handle = tokio::spawn({ - let context = context.clone(); - async move { update_account_map(context).await } - }); - let process_account_updates_handle = tokio::spawn({ - let context = context.clone(); - async move { push_transactions_to_bigquery(context).await } - }); - let monitor_handle = tokio::spawn({ - let context = context.clone(); - async move { monitor(context).await } - }); - - join_all([ - update_crossbar_cache_handle, - listen_to_updates_handle, - process_account_updates_handle, - update_account_map_handle, - monitor_handle, - ]) - .await; - - Ok(()) -} - -async fn listen_to_updates(ctx: Arc) { - loop { - info!("Connecting geyser client"); - let geyser_client_connection_result = - GeyserGrpcClient::build_from_shared(ctx.config.rpc_endpoint.to_string()) - .unwrap() - .x_token(Some(ctx.config.rpc_token.to_string())) - .unwrap() - .connect() - .await; - - info!("Connected"); - - let mut geyser_client = match geyser_client_connection_result { - Ok(geyser_client) => geyser_client, - Err(err) => { - error!("Error connecting to geyser client: {}", err); - tokio::time::sleep(Duration::from_secs(1)).await; - continue; - } - }; - - // Establish streams - let geyser_sub_config = ctx.geyser_subscription_config.lock().await; - let (mut subscribe_request_sink, mut stream) = match geyser_client - .subscribe_with_request(Some(geyser_sub_config.1.clone())) - .await - { - Ok(value) => value, - Err(e) => { - error!("Error subscribing geyser client {e}"); - continue; - } - }; - drop(geyser_sub_config); - - debug!("Starting to listen to updates"); - - // Main loop - while let Some(received) = stream.next().await { - // Check if we need to update the subscription - let mut geyser_sub_config = ctx.geyser_subscription_config.lock().await; - if geyser_sub_config.0 { - debug!("Config update"); - geyser_sub_config.0 = false; - - match subscribe_request_sink - .send(geyser_sub_config.1.clone()) - .await - { - Ok(()) => info!("Successfully sent subscription config update"), - Err(e) => { - error!("Error updating config: {:?}", e); - } - } - } - - // Process next update - match received { - Ok(received) => { - if let Some(update) = received.update_oneof { - match process_update(ctx.clone(), update).await { - Ok(_) => {} - Err(err) => { - error!("Error processing update: {}", err); - ctx.update_processing_error_count - .fetch_add(1, Ordering::Relaxed); - } - } - } - } - Err(err) => { - error!("Error pulling next update: {}", err); - tokio::time::sleep(Duration::from_secs(1)).await; - break; - } - } - } - - error!("Stream got disconnected"); - ctx.stream_disconnection_count - .fetch_add(1, Ordering::Relaxed); - } -} - -async fn process_update(ctx: Arc, update: UpdateOneof) -> Result<()> { - match update { - UpdateOneof::Account(account_update) => { - let update_slot = account_update.slot; - if let Some(account_info) = account_update.account { - let address = Pubkey::try_from(account_info.pubkey.clone()).unwrap(); - let txn_signature = account_info - .txn_signature - .clone() - .map(|sig_bytes| Signature::try_from(sig_bytes).unwrap()); - let mut account_updates_queue = ctx.account_updates_queue.lock().await; - - let slot_account_updates = match account_updates_queue.get_mut(&update_slot) { - Some(slot_account_updates) => slot_account_updates, - None => { - account_updates_queue.insert(update_slot, HashMap::default()); - account_updates_queue.get_mut(&update_slot).unwrap() - } - }; - - slot_account_updates.insert( - address, - AccountUpdate { - address, - timestamp: Utc::now(), - slot: update_slot, - txn_signature, - write_version: Some(account_info.write_version), - account_data: convert_account(account_info).unwrap(), - }, - ); - } else { - anyhow::bail!("Expected `transaction` in `UpdateOneof::Transaction` update"); - } - } - UpdateOneof::Slot(slot) => { - if slot.status == CommitmentLevel::Confirmed as i32 - || slot.status == CommitmentLevel::Finalized as i32 - { - let mut latest_slots = ctx.latest_slots_with_commitment.lock().await; - let slot_inserted = latest_slots.insert(slot.slot); - if slot_inserted && latest_slots.len() > ctx.config.slots_buffer_size as usize { - let oldest_slot = *latest_slots.first().unwrap(); - latest_slots.remove(&oldest_slot); - } - } - } - UpdateOneof::BlockMeta(block_meta_update) => { - if let Some(block_time) = block_meta_update.block_time { - ctx.timestamp.store(block_time.timestamp, Ordering::Relaxed); - } - } - UpdateOneof::Ping(_) => { - debug!("ping"); - } - _ => { - warn!("unknown update"); - } - } - - Ok(()) -} - -pub async fn update_account_map(ctx: Arc) { - loop { - let mut confirmed_account_updates: Vec = vec![]; - { - let mut account_updates_per_slot = ctx.account_updates_queue.lock().await; - let latest_slots_with_commitment = ctx.latest_slots_with_commitment.lock().await; - - // Remove all transactions received in a slot that has not been confirmed in allotted time - if let Some(oldest_slot_with_commitment) = latest_slots_with_commitment.first() { - account_updates_per_slot.retain(|slot, account_updates| { - if slot < oldest_slot_with_commitment { - debug!( - "throwing away txs {:?} from slot {}", - account_updates - .iter() - .map(|(address, _)| address.to_string()) - .collect_vec(), - slot - ); - } - - slot >= oldest_slot_with_commitment - }); - } - - // Add transactions from confirmed slots to the queue of transactions to be indexed - for (slot, slot_account_updates) in account_updates_per_slot.clone().iter() { - if let Some(latest_slot_with_commitment) = latest_slots_with_commitment.last() { - if slot > latest_slot_with_commitment { - break; // Ok because transactions_per_slot is sorted (BtreeMap) - } - } - - if latest_slots_with_commitment.contains(slot) { - confirmed_account_updates.extend(slot_account_updates.values().cloned()); - account_updates_per_slot.remove(slot); - } - } - } - - if confirmed_account_updates.is_empty() { - tokio::time::sleep(Duration::from_millis(10)).await; - continue; - } - - let mut accounts_snapshot = ctx.account_snapshot.lock().await; - for account_update in confirmed_account_updates { - if accounts_snapshot - .routing_lookup - .contains_key(&account_update.address) - { - accounts_snapshot - .udpate_entry(&account_update.address, &account_update.account_data); - } else { - accounts_snapshot - .create_entry(&account_update.address, &account_update.account_data) - .await; - - let non_program_accounts = accounts_snapshot - .routing_lookup - .iter() - .filter(|(_, routing_type)| match routing_type { - AccountRoutingType::MarginfiGroup => false, - AccountRoutingType::MarginfiAccount => false, - AccountRoutingType::Bank(_, bank_update_routing_type) => { - !matches!(bank_update_routing_type, BankUpdateRoutingType::State) - } - _ => true, - }) - .map(|(pubkey, _)| *pubkey) - .unique() - .collect_vec(); - let updated_geyser_config = - compute_geyser_config(&ctx.config, &non_program_accounts).await; - debug!("updating geyser sub"); - *ctx.geyser_subscription_config.lock().await = (true, updated_geyser_config); - } - } - } -} - -pub async fn push_transactions_to_bigquery(ctx: Arc) { - let bq_client = if let Some(gcp_sa_key) = ctx.config.gcp_sa_key.clone() { - let sa_key = parse_service_account_key(&gcp_sa_key).unwrap(); - gcp_bigquery_client::Client::from_service_account_key(sa_key, false) - .await - .unwrap() - } else { - gcp_bigquery_client::Client::from_application_default_credentials() - .await - .unwrap() - }; - - tokio::time::sleep(Duration::from_secs(5)).await; - while ctx.timestamp.load(Ordering::Relaxed) == 0 { - tokio::time::sleep(Duration::from_millis(100)).await; - } - - info!("Starting to generate snapshots"); - loop { - let start = Instant::now(); - let snapshot = ctx.account_snapshot.lock().await.clone(); - let timestamp = ctx.timestamp.load(Ordering::Relaxed); - - let all_group_metrics = snapshot - .marginfi_groups - .par_iter() - .map(|(marginfi_group_pk, marginfi_group)| { - ( - marginfi_group_pk, - MarginfiGroupMetrics::new( - timestamp, - marginfi_group_pk, - marginfi_group, - &snapshot, - ), - ) - }) - .collect::>(); - let all_bank_metrics = snapshot - .banks - .par_iter() - .map(|(bank_pk, bank_accounts)| { - ( - bank_pk, - LendingPoolBankMetrics::new(timestamp, bank_pk, bank_accounts, &snapshot), - ) - }) - .collect::>(); - let all_marginfi_account_metrics = snapshot - .marginfi_accounts - .par_iter() - .map(|(marginfi_account_pk, marginfi_account)| { - ( - marginfi_account_pk, - MarginfiAccountMetrics::new( - timestamp, - marginfi_account_pk, - marginfi_account, - &snapshot, - ), - ) - }) - .collect::>(); - - let elapsed = Instant::now() - start; - debug!("Time to create metrics: {:?}", elapsed); - - let start = Instant::now(); - - let mut insert_request = TableDataInsertAllRequest::new(); - all_group_metrics - .iter() - .for_each(|(id, metrics_result)| match metrics_result { - Ok(metrics) => insert_request.add_row(None, metrics.to_row()).unwrap(), - Err(err) => warn!("Failed to create metrics for marginfi group {id}: {err}"), - }); - let result = write_to_bq( - &bq_client, - &ctx.config.project_id, - &ctx.config.dataset_id, - &ctx.config.table_group, - timestamp, - insert_request, - ) - .await; - if let Err(error) = result { - warn!( - "Failed to write marginfi group metrics to bigquery: {}", - error - ); - } - - let elapsed = Instant::now() - start; - debug!("Time to upload group metrics: {:?}", elapsed); - - let start = Instant::now(); - - let mut insert_request = TableDataInsertAllRequest::new(); - all_bank_metrics - .iter() - .for_each(|(id, metrics_result)| match metrics_result { - Ok(metrics) => insert_request.add_row(None, metrics.to_row()).unwrap(), - Err(err) => warn!("Failed to create metrics for bank {id}: {err}"), - }); - let result = write_to_bq( - &bq_client, - &ctx.config.project_id, - &ctx.config.dataset_id, - &ctx.config.table_bank, - timestamp, - insert_request, - ) - .await; - if let Err(error) = result { - warn!( - "Failed to write lending pool bank metrics to bigquery: {}", - error - ); - } - - let elapsed = Instant::now() - start; - debug!("Time to uplaod bank metrics: {:?}", elapsed); - - let start = Instant::now(); - - let insert_requests: Vec = all_marginfi_account_metrics - .chunks(7000) - .map(|metrics_results_chunk| { - let mut insert_request: TableDataInsertAllRequest = - TableDataInsertAllRequest::new(); - - metrics_results_chunk.iter().for_each( - |(id, metrics_result)| match metrics_result { - Ok(metrics) => insert_request.add_row(None, metrics.to_row()).unwrap(), - Err(err) => { - warn!("Failed to create metrics for marginfi account {id}: {err}") - } - }, - ); - - insert_request - }) - .collect::>(); - let write_futures = insert_requests.into_iter().map(|insert_request| { - write_to_bq( - &bq_client, - &ctx.config.project_id, - &ctx.config.dataset_id, - &ctx.config.table_account, - timestamp, - insert_request, - ) - }); - let results = futures::future::join_all(write_futures).await; - for result in results { - if let Err(error) = result { - warn!( - "Failed to write marginfi account metrics to bigquery: {}", - error - ); - } - } - - let elapsed = Instant::now() - start; - debug!("Time to uplaod user account metrics: {:?}", elapsed); - - tokio::time::sleep(Duration::from_secs(ctx.config.snap_interval)).await; - } -} - -pub async fn write_to_bq( - bq_client: &gcp_bigquery_client::Client, - project_id: &str, - dataset_id: &str, - table_id: &str, - timestamp: i64, - insert_request: TableDataInsertAllRequest, -) -> Result<()> { - let result = bq_client - .tabledata() - .insert_all(project_id, dataset_id, table_id, insert_request) - .await; - - let result = match result { - Ok(result) => result, - Err(err) => { - error!("Errors inserting for timestamp {}", timestamp); - error!("details: {:?}", err); - return Ok(()); - } - }; - - if let Some(errors) = result.insert_errors { - error!("Errors inserting for timestamp {}", timestamp); - error!("details:"); - errors.iter().for_each(|error| error!("-{:?}", error)); - } - - Ok(()) -} - -async fn monitor(ctx: Arc) { - let mut main_timing = Measure::start("main"); - - loop { - tokio::time::sleep(Duration::from_secs(ctx.config.monitor_interval)).await; - main_timing.stop(); - let latest_slots = ctx.latest_slots_with_commitment.lock().await.clone(); - let account_updates_queue = ctx.account_updates_queue.lock().await.clone(); - let earliest_block_with_commitment = latest_slots.first().unwrap_or(&0); - let latest_block_with_commitment = latest_slots.last().unwrap_or(&u64::MAX); - let earliest_pending_slot = account_updates_queue - .first_key_value() - .map(|(slot, _)| slot) - .unwrap_or(&0); - let latest_pending_slot = account_updates_queue - .first_key_value() - .map(|(slot, _)| slot) - .unwrap_or(&u64::MAX); - let stream_disconnection_count = ctx.stream_disconnection_count.load(Ordering::Relaxed); - let update_processing_error_count = - ctx.update_processing_error_count.load(Ordering::Relaxed); - let current_fetch_time = main_timing.as_s(); - - let account_updates_queue_size = ctx.account_updates_queue.lock().await.len(); - - info!( - "Time: {:.1}s | Tx Q size: {} | Stream disconnections: {} | Processing errors: {} | Earliest confirmed slot: {} | Latest confirmed slot: {} | Earliest pending slot: {} | Latest pending slot: {}", - current_fetch_time, - account_updates_queue_size, - stream_disconnection_count, - update_processing_error_count, - earliest_block_with_commitment, - latest_block_with_commitment, - earliest_pending_slot, - latest_pending_slot, - ); - } -} diff --git a/observability/indexer/src/common.rs b/observability/indexer/src/common.rs deleted file mode 100644 index 04701795e..000000000 --- a/observability/indexer/src/common.rs +++ /dev/null @@ -1,174 +0,0 @@ -use backoff::{future::retry, ExponentialBackoffBuilder}; -use fixed::types::I80F48; -use fixed_macro::types::I80F48; -use futures::future::try_join_all; -use marginfi::state::{marginfi_account::MarginfiAccount, marginfi_group::Bank}; -use pyth_sdk_solana::PriceFeed; -use serde::{Deserialize, Serialize}; -use solana_client::{client_error::ClientError, nonblocking::rpc_client::RpcClient}; -use solana_sdk::{ - account::Account, instruction::AccountMeta, pubkey::Pubkey, signature::Signature, -}; -use std::{collections::HashMap, iter::zip, str::FromStr, time::Duration}; - -#[derive(Serialize, Deserialize, Debug, Clone)] -pub struct Target { - pub address: Pubkey, - pub before: Option, - pub until: Option, -} - -// Allows to parse a JSON target with base58-encoded addresses/sigs (serde expects byte arrays) -impl FromStr for Target { - type Err = anyhow::Error; - - fn from_str(s: &str) -> Result { - let targets_raw = json::parse(s).unwrap(); - - Ok(Self { - address: Pubkey::from_str(targets_raw["address"].as_str().unwrap()).unwrap(), - before: targets_raw["before"] - .as_str() - .map(|sig_str| Signature::from_str(sig_str).unwrap()), - until: targets_raw["until"] - .as_str() - .map(|sig_str| Signature::from_str(sig_str).unwrap()), - }) - } -} - -pub const DEFAULT_RPC_ENDPOINT: &str = "https://api.mainnet-beta.solana.com"; -pub const DEFAULT_SIGNATURE_FETCH_LIMIT: usize = 1_000; -pub const DEFAULT_MAX_PENDING_SIGNATURES: usize = 10_000; -pub const DEFAULT_MONITOR_INTERVAL: u64 = 5; - -pub const EXP_10_I80F48: [I80F48; 15] = [ - I80F48!(1), - I80F48!(10), - I80F48!(100), - I80F48!(1_000), - I80F48!(10_000), - I80F48!(100_000), - I80F48!(1_000_000), - I80F48!(10_000_000), - I80F48!(100_000_000), - I80F48!(1_000_000_000), - I80F48!(10_000_000_000), - I80F48!(100_000_000_000), - I80F48!(1_000_000_000_000), - I80F48!(10_000_000_000_000), - I80F48!(100_000_000_000_000), -]; - -#[inline(always)] -pub fn pyth_price_to_fixed(price_feed: &PriceFeed) -> anyhow::Result { - let price = I80F48::from_num(price_feed.get_ema_price_unchecked().price); - let exponent = price_feed.get_ema_price_unchecked().expo; - let scaling_factor = EXP_10_I80F48[exponent.unsigned_abs() as usize]; - - let price = if exponent == 0 { - price - } else if exponent < 0 { - price.checked_div(scaling_factor).unwrap() - } else { - price.checked_mul(scaling_factor).unwrap() - }; - - Ok(price) -} - -pub async fn get_multiple_accounts_chunked( - rpc_client: &RpcClient, - keys: &[Pubkey], -) -> Result>, ClientError> { - let zips: Result, ClientError> = - try_join_all(keys.chunks(100).map(|pubkey_chunk| async move { - Ok(zip( - pubkey_chunk, - retry( - ExponentialBackoffBuilder::new() - .with_max_interval(Duration::from_secs(5)) - .build(), - || async { Ok(rpc_client.get_multiple_accounts(pubkey_chunk).await?) }, - ) - .await?, - )) - })) - .await; - - Ok(HashMap::from_iter(zips?.into_iter().flatten().filter_map( - |(key, account)| account.map(|account| (*key, account.data)), - ))) -} - -pub async fn get_multiple_accounts_chunked2( - rpc_client: &RpcClient, - keys: &[Pubkey], -) -> Result, ClientError> { - let zips: Result, ClientError> = - try_join_all(keys.chunks(100).map(|pubkey_chunk| async move { - Ok(zip( - pubkey_chunk, - retry( - ExponentialBackoffBuilder::new() - .with_max_interval(Duration::from_secs(5)) - .build(), - || async { Ok(rpc_client.get_multiple_accounts(pubkey_chunk).await?) }, - ) - .await?, - )) - })) - .await; - - Ok(HashMap::from_iter(zips?.into_iter().flatten().filter_map( - |(key, account)| account.map(|account| (*key, account)), - ))) -} - -pub fn load_observation_account_metas( - marginfi_account: &MarginfiAccount, - banks_map: &HashMap, - include_banks: Vec, - exclude_banks: Vec, -) -> Vec { - let mut bank_pks = marginfi_account - .lending_account - .balances - .iter() - .filter_map(|balance| balance.active.then_some(balance.bank_pk)) - .collect::>(); - - for bank_pk in include_banks { - if !bank_pks.contains(&bank_pk) { - bank_pks.push(bank_pk); - } - } - - bank_pks.retain(|bank_pk| !exclude_banks.contains(bank_pk)); - - let mut banks = vec![]; - for bank_pk in bank_pks.clone() { - let bank = banks_map.get(&bank_pk).unwrap(); - banks.push(bank); - } - - let account_metas = banks - .iter() - .zip(bank_pks.iter()) - .flat_map(|(bank, bank_pk)| { - vec![ - AccountMeta { - pubkey: *bank_pk, - is_signer: false, - is_writable: false, - }, - AccountMeta { - pubkey: bank.config.oracle_keys[0], - is_signer: false, - is_writable: false, - }, - ] - }) - .collect::>(); - account_metas -} diff --git a/observability/indexer/src/entrypoint.rs b/observability/indexer/src/entrypoint.rs deleted file mode 100644 index 3881b679d..000000000 --- a/observability/indexer/src/entrypoint.rs +++ /dev/null @@ -1,122 +0,0 @@ -use crate::commands::create_table::TableType; -use crate::commands::index_accounts::{index_accounts, IndexAccountsConfig}; -use crate::commands::snapshot_accounts::{snapshot_accounts, SnapshotAccountsConfig}; -use crate::commands::{ - backfill::{backfill, BackfillConfig}, - create_table::create_table, - index_transactions::{index_transactions, IndexTransactionsConfig}, -}; -use anyhow::Result; -use clap::Parser; -use dotenv::dotenv; -use envconfig::Envconfig; -use std::{panic, process}; -use tracing::debug; -use tracing_subscriber::layer::SubscriberExt; -use tracing_subscriber::EnvFilter; - -pub const VERSION: &str = env!("CARGO_PKG_VERSION"); - -#[derive(Debug, Parser)] -pub struct GlobalOptions { - #[clap(long)] - pub pretty_log: bool, -} - -#[derive(Debug, Parser)] -#[clap(version = VERSION)] -pub struct Opts { - #[clap(flatten)] - pub global_config: GlobalOptions, - #[clap(subcommand)] - pub command: Command, -} - -#[derive(Debug, Parser)] -pub enum Command { - CreateTable { - #[clap(long)] - table_type: TableType, - #[clap(long)] - project_id: String, - #[clap(long)] - dataset_id: String, - #[clap(long)] - table_id: String, - #[clap(long)] - table_friendly_name: Option, - #[clap(long)] - table_description: Option, - }, - Backfill, - IndexTransactions, - IndexAccounts, - SnapshotAccounts, -} - -#[tokio::main] -pub async fn entry(opts: Opts) -> Result<()> { - let orig_hook = panic::take_hook(); - panic::set_hook(Box::new(move |panic_info| { - orig_hook(panic_info); - process::exit(1); - })); - - dotenv().ok(); - - let filter = EnvFilter::from_default_env(); - let stackdriver = tracing_stackdriver::layer(); // writes to std::io::Stdout - let subscriber = tracing_subscriber::registry().with(filter); - if opts.global_config.pretty_log { - let subscriber = subscriber.with(tracing_subscriber::fmt::layer().compact()); - tracing::subscriber::set_global_default(subscriber).unwrap(); - } else { - let subscriber = subscriber.with(stackdriver); - tracing::subscriber::set_global_default(subscriber).unwrap(); - }; - - match opts.command { - Command::CreateTable { - project_id, - dataset_id, - table_type, - table_id, - table_friendly_name, - table_description, - } => { - create_table( - project_id, - dataset_id, - table_id, - table_type, - table_friendly_name, - table_description, - ) - .await - } - Command::Backfill => { - let config = BackfillConfig::init_from_env().unwrap(); - debug!("Config -> {:#?}", &config.clone()); - - backfill(config).await - } - Command::IndexTransactions => { - let config = IndexTransactionsConfig::init_from_env().unwrap(); - debug!("Config -> {:#?}", &config.clone()); - - index_transactions(config).await - } - Command::IndexAccounts => { - let config = IndexAccountsConfig::init_from_env().unwrap(); - debug!("Config -> {:#?}", &config.clone()); - - index_accounts(config).await - } - Command::SnapshotAccounts => { - let config = SnapshotAccountsConfig::init_from_env().unwrap(); - debug!("Config -> {:#?}", &config.clone()); - - snapshot_accounts(config).await - } - } -} diff --git a/observability/indexer/src/lib.rs b/observability/indexer/src/lib.rs deleted file mode 100644 index b7f9e7286..000000000 --- a/observability/indexer/src/lib.rs +++ /dev/null @@ -1,4 +0,0 @@ -pub mod commands; -pub mod common; -pub mod entrypoint; -pub mod utils; diff --git a/observability/indexer/src/utils/big_query.rs b/observability/indexer/src/utils/big_query.rs deleted file mode 100644 index 1c116b2f8..000000000 --- a/observability/indexer/src/utils/big_query.rs +++ /dev/null @@ -1,96 +0,0 @@ -use gcp_bigquery_client::model::{table_field_schema::TableFieldSchema, table_schema::TableSchema}; -use lazy_static::lazy_static; - -pub const NOT_FOUND_CODE: i64 = 404; -pub const DATE_FORMAT_STR: &str = "%Y-%m-%d %H:%M:%S"; - -lazy_static! { - pub static ref TRANSACTION_SCHEMA: TableSchema = TableSchema::new(vec![ - TableFieldSchema::string("id"), - TableFieldSchema::timestamp("created_at"), - TableFieldSchema::timestamp("timestamp"), - TableFieldSchema::string("signature"), - TableFieldSchema::string("indexing_address"), - TableFieldSchema::big_numeric("slot"), - TableFieldSchema::string("signer"), - TableFieldSchema::bool("success"), - TableFieldSchema::string("version"), - TableFieldSchema::big_numeric("fee"), - TableFieldSchema::string("meta"), - TableFieldSchema::string("message"), - ]); - pub static ref ACCOUNT_SCHEMA: TableSchema = TableSchema::new(vec![ - TableFieldSchema::string("id"), - TableFieldSchema::timestamp("created_at"), - TableFieldSchema::timestamp("timestamp"), - TableFieldSchema::string("owner"), - TableFieldSchema::big_numeric("slot"), - TableFieldSchema::string("pubkey"), - TableFieldSchema::string("txn_signature"), - TableFieldSchema::big_numeric("write_version"), - TableFieldSchema::big_numeric("lamports"), - TableFieldSchema::bool("executable"), - TableFieldSchema::big_numeric("rent_epoch"), - TableFieldSchema::string("data"), - ]); -} - -lazy_static! { - pub static ref METRIC_MARGINFI_GROUP_SCHEMA: TableSchema = TableSchema::new(vec![ - TableFieldSchema::string("id"), - TableFieldSchema::timestamp("created_at"), - TableFieldSchema::timestamp("timestamp"), - TableFieldSchema::string("pubkey"), - TableFieldSchema::integer("marginfi_accounts_count"), - TableFieldSchema::integer("banks_count"), - TableFieldSchema::integer("mints_count"), - TableFieldSchema::float("total_assets_in_usd"), - TableFieldSchema::float("total_liabilities_in_usd"), - ]); - pub static ref METRIC_LENDING_POOL_BANK_SCHEMA: TableSchema = TableSchema::new(vec![ - TableFieldSchema::string("id"), - TableFieldSchema::timestamp("created_at"), - TableFieldSchema::timestamp("timestamp"), - TableFieldSchema::string("pubkey"), - TableFieldSchema::string("marginfi_group"), - TableFieldSchema::string("mint"), - TableFieldSchema::float("usd_price"), - TableFieldSchema::string("operational_state"), - TableFieldSchema::float("asset_weight_maintenance"), - TableFieldSchema::float("liability_weight_maintenance"), - TableFieldSchema::float("asset_weight_initial"), - TableFieldSchema::float("liability_weight_initial"), - TableFieldSchema::float("deposit_limit_in_tokens"), - TableFieldSchema::float("borrow_limit_in_tokens"), - TableFieldSchema::float("deposit_limit_in_usd"), - TableFieldSchema::float("borrow_limit_in_usd"), - TableFieldSchema::integer("lenders_count"), - TableFieldSchema::integer("borrowers_count"), - TableFieldSchema::float("deposit_rate"), - TableFieldSchema::float("borrow_rate"), - TableFieldSchema::float("group_fee"), - TableFieldSchema::float("insurance_fee"), - TableFieldSchema::float("total_assets_in_tokens"), - TableFieldSchema::float("total_liabilities_in_tokens"), - TableFieldSchema::float("total_assets_in_usd"), - TableFieldSchema::float("total_liabilities_in_usd"), - TableFieldSchema::float("liquidity_vault_balance"), - TableFieldSchema::float("insurance_vault_balance"), - TableFieldSchema::float("fee_vault_balance"), - ]); - pub static ref METRIC_MARGINFI_ACCOUNT_SCHEMA: TableSchema = TableSchema::new(vec![ - TableFieldSchema::string("id"), - TableFieldSchema::timestamp("created_at"), - TableFieldSchema::timestamp("timestamp"), - TableFieldSchema::string("pubkey"), - TableFieldSchema::string("marginfi_group"), - TableFieldSchema::string("owner"), - TableFieldSchema::float("total_assets_in_usd"), - TableFieldSchema::float("total_liabilities_in_usd"), - TableFieldSchema::float("total_assets_in_usd_maintenance"), - TableFieldSchema::float("total_liabilities_in_usd_maintenance"), - TableFieldSchema::float("total_assets_in_usd_initial"), - TableFieldSchema::float("total_liabilities_in_usd_initial"), - TableFieldSchema::string("positions"), - ]); -} diff --git a/observability/indexer/src/utils/crossbar.rs b/observability/indexer/src/utils/crossbar.rs deleted file mode 100644 index b11e03b23..000000000 --- a/observability/indexer/src/utils/crossbar.rs +++ /dev/null @@ -1,165 +0,0 @@ -use anyhow::Result; -use solana_sdk::pubkey::Pubkey; -use std::{collections::HashMap, sync::Mutex}; -use switchboard_on_demand_client::CrossbarClient; - -pub struct SwbPullFeedMeta { - pub feed_address: Pubkey, - pub feed_hash: String, -} - -pub struct SwbPullFeedInfo { - pub feed_meta: SwbPullFeedMeta, - pub simulated_price: SimulatedPrice, -} - -#[derive(Clone, Debug)] -pub struct SimulatedPrice { - pub value: f64, - pub std_dev: f64, - pub timestamp: i64, -} - -pub struct CrossbarCache { - crossbar_client: CrossbarClient, - pub feeds: Mutex>, -} - -impl CrossbarCache { - /// Creates a new CrossbarCache empty instance - pub fn new() -> Self { - let crossbar_client = CrossbarClient::default(); - Self { - crossbar_client, - feeds: Mutex::new(HashMap::new()), - } - } - - pub fn track_feeds(&self, feeds: Vec) { - for feed in feeds.into_iter() { - self.feeds.lock().unwrap().insert( - feed.feed_hash.clone(), - SwbPullFeedInfo { - feed_meta: feed, - simulated_price: SimulatedPrice { - value: 0.0, - std_dev: 0.0, - timestamp: 0, - }, - }, - ); - } - } - - pub async fn refresh_prices(&self) -> Result<()> { - if self.feeds.lock().unwrap().is_empty() { - return Ok(()); - } - - let feed_hashes: Vec = self - .feeds - .lock() - .unwrap() - .values() - .map(|feed| feed.feed_meta.feed_hash.clone()) - .collect(); - - const CHUNK_SIZE: usize = 20; - - let chunk_futures: Vec<_> = feed_hashes - .chunks(CHUNK_SIZE) - .map(|chunk| { - let client = self.crossbar_client.clone(); - let chunk_vec: Vec = chunk.to_vec(); - tokio::spawn(async move { - client - .simulate_feeds( - &chunk_vec.iter().map(|x| x.as_str()).collect::>(), - ) - .await - }) - }) - .collect(); - - let chunk_results = futures::future::try_join_all(chunk_futures).await?; - let mut simulated_prices = Vec::new(); - for result in chunk_results { - if let Ok(chunk_result) = result { - simulated_prices.extend(chunk_result); - } - } - - let timestamp = chrono::Utc::now().timestamp(); - - let mut feeds = self.feeds.lock().unwrap(); - for simulated_response in simulated_prices { - if let Some(price) = calculate_price(simulated_response.results) { - if let Some(feed) = feeds.get_mut(&simulated_response.feedHash) { - feed.simulated_price = SimulatedPrice { - value: price, - std_dev: 0.0, - timestamp, - }; - } - } - } - - Ok(()) - } - - pub fn get_prices_per_address(&self) -> HashMap { - let mut feeds_per_address = HashMap::new(); - let feeds = self.feeds.lock().unwrap(); - for feed in feeds.values() { - feeds_per_address.insert(feed.feed_meta.feed_address, feed.simulated_price.clone()); - } - feeds_per_address - } -} - -/// Calculate the median of a list of numbers -fn calculate_price(mut numbers: Vec) -> Option { - if numbers.is_empty() { - return None; - } - - numbers.sort_by(|a, b| a.partial_cmp(b).unwrap()); - let mid = numbers.len() / 2; - - if numbers.len() % 2 == 0 { - Some((numbers[mid - 1] + numbers[mid]) / 2.0) - } else { - Some(numbers[mid]) - } -} - -#[cfg(test)] -mod tests { - use super::*; - use std::sync::Arc; - use std::sync::Mutex; - - #[tokio::test] - async fn test_crossbar_maintainer_new() { - let price = Arc::new(Mutex::new(0.0)); - let feed_hash = - "0x4c935636f2523f6aeeb6dc7b7dab0e86a13ff2c794f7895fc78851d69fdb593b".to_string(); - let price2 = Arc::new(Mutex::new(0.0)); - let feed_hash2 = - "0x5686ebe26b52d5c67dc10b63240c6d937af75d86bfcacf46865cd5da62f760e9".to_string(); - let crossbar_maintainer = CrossbarCache::new(); - crossbar_maintainer.track_feeds(vec![ - SwbPullFeedMeta { - feed_address: Pubkey::new_unique(), - feed_hash: feed_hash.clone(), - }, - SwbPullFeedMeta { - feed_address: Pubkey::new_unique(), - feed_hash: feed_hash2.clone(), - }, - ]); - crossbar_maintainer.refresh_prices().await.unwrap(); - println!("Price: {:?}", price.lock().unwrap()); - println!("Price2: {:?}", price2.lock().unwrap()); - } -} diff --git a/observability/indexer/src/utils/errors.rs b/observability/indexer/src/utils/errors.rs deleted file mode 100644 index a9f0013fd..000000000 --- a/observability/indexer/src/utils/errors.rs +++ /dev/null @@ -1,7 +0,0 @@ -use thiserror::Error; - -#[derive(Error, Debug)] -pub enum GeyserServiceError { - #[error("parsing error in conversion from proto message")] - ProtoMessageConversionFailed, -} diff --git a/observability/indexer/src/utils/marginfi_account_dup.rs b/observability/indexer/src/utils/marginfi_account_dup.rs deleted file mode 100644 index d29554acd..000000000 --- a/observability/indexer/src/utils/marginfi_account_dup.rs +++ /dev/null @@ -1,203 +0,0 @@ -use fixed::types::I80F48; -use marginfi::state::{ - marginfi_account::{ - calc_value, Balance, BalanceSide, MarginfiAccount, RequirementType, RiskRequirementType, - }, - marginfi_group::{Bank, RiskTier}, - price::{OraclePriceFeedAdapter, PriceAdapter, PriceBias}, -}; -use solana_sdk::pubkey::Pubkey; - -pub struct BankAccountWithPriceFeed2 { - bank: Bank, - price_feed: OraclePriceFeedAdapter, - balance: Balance, -} - -impl BankAccountWithPriceFeed2 { - pub fn load( - marginfi_account: &MarginfiAccount, - banks: &std::collections::HashMap, - price_feeds: &std::collections::HashMap, - ) -> anyhow::Result> { - marginfi_account - .lending_account - .balances - .into_iter() - .filter(|balance| balance.active) - .map(|balance| { - let bank = banks.get(&balance.bank_pk).cloned().unwrap(); - let price_feed = price_feeds - .get(&bank.config.oracle_keys[0]) - .cloned() - .unwrap(); - Ok(BankAccountWithPriceFeed2 { - bank, - price_feed, - balance, - }) - }) - .collect::>>() - } - - #[inline(always)] - pub fn calc_weighted_assets_and_liabilities_values( - &self, - requirement_type: RequirementType, - ) -> anyhow::Result<(I80F48, I80F48)> { - match self.balance.get_side() { - Some(side) => { - let bank = &self.bank; - match side { - BalanceSide::Assets => Ok(( - self.calc_weighted_assets(requirement_type, bank)?, - I80F48::ZERO, - )), - BalanceSide::Liabilities => Ok(( - I80F48::ZERO, - self.calc_weighted_liabs(requirement_type, bank)?, - )), - } - } - None => Ok((I80F48::ZERO, I80F48::ZERO)), - } - } - - #[inline(always)] - fn calc_weighted_assets( - &self, - requirement_type: RequirementType, - bank: &Bank, - ) -> anyhow::Result { - match bank.config.risk_tier { - RiskTier::Collateral => { - let price_feed = &self.price_feed; - let mut asset_weight = bank - .config - .get_weight(requirement_type, BalanceSide::Assets); - - let lower_price = price_feed.get_price_of_type( - requirement_type.get_oracle_price_type(), - Some(PriceBias::Low), - )?; - - if matches!(requirement_type, RequirementType::Initial) { - if let Some(discount) = - bank.maybe_get_asset_weight_init_discount(lower_price)? - { - asset_weight = asset_weight - .checked_mul(discount) - .ok_or_else(|| anyhow::anyhow!("Math error"))?; - } - } - - Ok(calc_value( - bank.get_asset_amount(self.balance.asset_shares.into())?, - lower_price, - bank.mint_decimals, - Some(asset_weight), - ) - .unwrap()) - } - RiskTier::Isolated => Ok(I80F48::ZERO), - } - } - - #[inline(always)] - fn calc_weighted_liabs( - &self, - requirement_type: RequirementType, - bank: &Bank, - ) -> anyhow::Result { - let price_feed = &self.price_feed; - let liability_weight = bank - .config - .get_weight(requirement_type, BalanceSide::Liabilities); - - let higher_price = price_feed.get_price_of_type( - requirement_type.get_oracle_price_type(), - Some(PriceBias::High), - )?; - - Ok(calc_value( - bank.get_liability_amount(self.balance.liability_shares.into())?, - higher_price, - bank.mint_decimals, - Some(liability_weight), - )?) - } - - #[inline] - pub fn is_empty(&self, side: BalanceSide) -> bool { - self.balance.is_empty(side) - } -} - -pub struct RiskEngine2 { - bank_accounts_with_price: Vec, -} - -impl RiskEngine2 { - pub fn load( - marginfi_account: &MarginfiAccount, - banks: &std::collections::HashMap, - price_feeds: &std::collections::HashMap, - ) -> anyhow::Result { - Ok(Self { - bank_accounts_with_price: BankAccountWithPriceFeed2::load( - marginfi_account, - banks, - price_feeds, - )?, - }) - } - - /// Returns the total assets and liabilities of the account in the form of (assets, liabilities) - pub fn get_account_health_components( - &self, - requirement_type: RiskRequirementType, - ) -> anyhow::Result<(I80F48, I80F48)> { - let mut total_assets = I80F48::ZERO; - let mut total_liabilities = I80F48::ZERO; - - for a in &self.bank_accounts_with_price { - let (assets, liabilities) = - a.calc_weighted_assets_and_liabilities_values(requirement_type.to_weight_type())?; - - total_assets = total_assets.checked_add(assets).unwrap(); - total_liabilities = total_liabilities.checked_add(liabilities).unwrap(); - } - - Ok((total_assets, total_liabilities)) - } - - pub fn get_equity_components(&self) -> anyhow::Result<(I80F48, I80F48)> { - self.bank_accounts_with_price - .iter() - .map(|a: &BankAccountWithPriceFeed2| { - a.calc_weighted_assets_and_liabilities_values(RequirementType::Equity) - }) - .try_fold( - (I80F48::ZERO, I80F48::ZERO), - |(total_assets, total_liabilities), res| { - let (assets, liabilities) = res?; - let total_assets_sum = total_assets.checked_add(assets).unwrap(); - let total_liabilities_sum = total_liabilities.checked_add(liabilities).unwrap(); - - Ok::<_, anyhow::Error>((total_assets_sum, total_liabilities_sum)) - }, - ) - } - - pub fn get_account_health( - &self, - requirement_type: RiskRequirementType, - ) -> anyhow::Result { - let (total_weighted_assets, total_weighted_liabilities) = - self.get_account_health_components(requirement_type)?; - - Ok(total_weighted_assets - .checked_sub(total_weighted_liabilities) - .unwrap()) - } -} diff --git a/observability/indexer/src/utils/metrics.rs b/observability/indexer/src/utils/metrics.rs deleted file mode 100644 index 6de8dff48..000000000 --- a/observability/indexer/src/utils/metrics.rs +++ /dev/null @@ -1,648 +0,0 @@ -use super::marginfi_account_dup::RiskEngine2; -use crate::utils::big_query::DATE_FORMAT_STR; -use crate::utils::snapshot::{BankAccounts, OracleData, Snapshot}; -use anyhow::anyhow; -use chrono::{NaiveDateTime, Utc}; -use fixed::types::I80F48; -use fixed_macro::types::I80F48; -use itertools::Itertools; -use marginfi::prelude::MarginfiGroup; -use marginfi::state::marginfi_account::{ - calc_value, MarginfiAccount, RequirementType, RiskRequirementType, -}; -use marginfi::state::marginfi_group::BankOperationalState; -use marginfi::state::price::{OraclePriceFeedAdapter, OraclePriceType, PriceBias}; -use marginfi::{constants::ZERO_AMOUNT_THRESHOLD, state::marginfi_group::ComputedInterestRates}; -use serde::Serialize; -use solana_sdk::pubkey::Pubkey; -use std::collections::HashMap; -use uuid::Uuid; - -#[derive(Debug, Serialize)] -pub struct MarginfiGroupMetricsRow { - pub id: String, - pub created_at: String, - pub timestamp: String, - pub pubkey: String, - pub marginfi_accounts_count: u32, - pub banks_count: u32, - pub mints_count: u32, - pub total_assets_in_usd: f64, - pub total_liabilities_in_usd: f64, -} - -#[derive(Debug)] -pub struct MarginfiGroupMetrics { - pub timestamp: i64, - pub pubkey: Pubkey, - pub marginfi_accounts_count: u32, - pub banks_count: u32, - pub mints_count: u32, - pub total_assets_in_usd: f64, - pub total_liabilities_in_usd: f64, -} - -impl MarginfiGroupMetrics { - pub fn new( - timestamp: i64, - marginfi_group_pk: &Pubkey, - _marginfi_group: &MarginfiGroup, - snapshot: &Snapshot, - ) -> anyhow::Result { - let group_banks_iter = snapshot - .banks - .iter() - .filter(|(_, bank_accounts)| bank_accounts.bank.group.eq(marginfi_group_pk)); - let group_marginfi_accounts_iter = snapshot - .marginfi_accounts - .iter() - .filter(|(_, marginfi_account)| marginfi_account.group.eq(marginfi_group_pk)); - - let ( - total_assets_usd, - total_liabilities_usd, - _total_assets_usd_maint, - _total_liabilities_usd_maint, - ) = group_banks_iter.clone().try_fold( - (0.0, 0.0, 0.0, 0.0), - |mut sums, (bank_pk, bank_accounts)| -> anyhow::Result<(f64, f64, f64, f64)> { - let total_asset_share = bank_accounts.bank.total_asset_shares; - let total_liability_share = bank_accounts.bank.total_liability_shares; - let price_feed_pk = bank_accounts.bank.config.oracle_keys[0]; - let (asset_weight, liability_weight) = bank_accounts - .bank - .config - .get_weights(RequirementType::Maintenance); - let oralce = snapshot.price_feeds.get(&price_feed_pk).ok_or_else(|| { - anyhow!( - "Price feed {} not found for bank {}", - price_feed_pk, - bank_pk - ) - })?; - - let (real_price, maint_asset_price, maint_liab_price) = ( - oralce.get_price_of_type(OraclePriceType::RealTime, None), - oralce.get_price_of_type(OraclePriceType::RealTime, Some(PriceBias::Low)), - oralce.get_price_of_type(OraclePriceType::RealTime, Some(PriceBias::High)), - ); - - let asset_value_usd = calc_value( - bank_accounts - .bank - .get_asset_amount(total_asset_share.into())?, - real_price, - bank_accounts.bank.mint_decimals, - None, - )? - .to_num::(); - let asset_value_usd_maint = calc_value( - bank_accounts - .bank - .get_asset_amount(total_asset_share.into())?, - maint_asset_price, - bank_accounts.bank.mint_decimals, - Some(asset_weight), - )? - .to_num::(); - let liability_value_usd = calc_value( - bank_accounts - .bank - .get_liability_amount(total_liability_share.into())?, - real_price, - bank_accounts.bank.mint_decimals, - None, - )? - .to_num::(); - let liability_value_usd_maint = calc_value( - bank_accounts - .bank - .get_liability_amount(total_liability_share.into())?, - maint_liab_price, - bank_accounts.bank.mint_decimals, - Some(liability_weight), - )? - .to_num::(); - - sums.0 += asset_value_usd; - sums.1 += liability_value_usd; - sums.2 += asset_value_usd_maint; - sums.3 += liability_value_usd_maint; - - Ok(sums) - }, - )?; - - Ok(Self { - timestamp, - pubkey: *marginfi_group_pk, - marginfi_accounts_count: group_marginfi_accounts_iter.count() as u32, - banks_count: group_banks_iter.clone().count() as u32, - mints_count: group_banks_iter - .unique_by(|(_, bank_accounts)| bank_accounts.bank.mint) - .collect_vec() - .len() as u32, - total_assets_in_usd: total_assets_usd, - total_liabilities_in_usd: total_liabilities_usd, - }) - } - - pub fn to_row(&self) -> MarginfiGroupMetricsRow { - MarginfiGroupMetricsRow { - id: Uuid::new_v4().to_string(), - created_at: Utc::now().format(DATE_FORMAT_STR).to_string(), - timestamp: NaiveDateTime::from_timestamp_opt(self.timestamp, 0) - .unwrap() - .format(DATE_FORMAT_STR) - .to_string(), - pubkey: self.pubkey.to_string(), - marginfi_accounts_count: self.marginfi_accounts_count, - banks_count: self.banks_count, - mints_count: self.mints_count, - total_assets_in_usd: self.total_assets_in_usd, - total_liabilities_in_usd: self.total_liabilities_in_usd, - } - } -} - -#[derive(Debug, Serialize)] -pub struct LendingPoolBankMetricsRow { - pub id: String, - pub created_at: String, - pub timestamp: String, - pub pubkey: String, - pub marginfi_group: String, - pub mint: String, - pub usd_price: f64, - pub operational_state: String, - pub asset_weight_maintenance: f64, - pub liability_weight_maintenance: f64, - pub asset_weight_initial: f64, - pub liability_weight_initial: f64, - pub deposit_limit_in_tokens: f64, - pub borrow_limit_in_tokens: f64, - pub deposit_limit_in_usd: f64, - pub borrow_limit_in_usd: f64, - pub lenders_count: u32, - pub borrowers_count: u32, - pub deposit_rate: f64, - pub borrow_rate: f64, - pub group_fee: f64, - pub insurance_fee: f64, - pub total_assets_in_tokens: f64, - pub total_liabilities_in_tokens: f64, - pub total_assets_in_usd: f64, - pub total_liabilities_in_usd: f64, - pub liquidity_vault_balance: f64, - pub insurance_vault_balance: f64, - pub fee_vault_balance: f64, -} - -#[derive(Debug)] -pub struct LendingPoolBankMetrics { - pub timestamp: i64, - pub pubkey: Pubkey, - pub marginfi_group: Pubkey, - pub mint: Pubkey, - pub usd_price: f64, - pub operational_state: BankOperationalState, - pub asset_weight_maintenance: f64, - pub liability_weight_maintenance: f64, - pub asset_weight_initial: f64, - pub liability_weight_initial: f64, - pub deposit_limit_in_tokens: f64, - pub borrow_limit_in_tokens: f64, - pub deposit_limit_in_usd: f64, - pub borrow_limit_in_usd: f64, - pub lenders_count: u32, - pub borrowers_count: u32, - pub deposit_rate: f64, - pub borrow_rate: f64, - pub group_fee: f64, - pub insurance_fee: f64, - pub total_assets_in_tokens: f64, - pub total_liabilities_in_tokens: f64, - pub total_assets_in_usd: f64, - pub total_liabilities_in_usd: f64, - pub liquidity_vault_balance: f64, - pub insurance_vault_balance: f64, - pub fee_vault_balance: f64, -} - -impl LendingPoolBankMetrics { - pub fn new( - timestamp: i64, - bank_pk: &Pubkey, - bank_accounts: &BankAccounts, - snapshot: &Snapshot, - ) -> anyhow::Result { - let total_asset_share = bank_accounts.bank.total_asset_shares; - let total_liability_share = bank_accounts.bank.total_liability_shares; - let (asset_weight_maintenance, liability_weight_maintenance) = bank_accounts - .bank - .config - .get_weights(RequirementType::Maintenance); - let (asset_weight_initial, liability_weight_initial) = bank_accounts - .bank - .config - .get_weights(RequirementType::Initial); - let price_feed_pk = bank_accounts.bank.config.oracle_keys[0]; - let oracle = snapshot.price_feeds.get(&price_feed_pk).ok_or_else(|| { - anyhow!( - "Price feed {} not found for bank {}", - price_feed_pk, - bank_pk - ) - })?; - - let price = oracle.get_price_of_type(OraclePriceType::RealTime, None); - - let deposit_limit_usd = calc_value( - bank_accounts.bank.config.deposit_limit.into(), - price, - bank_accounts.bank.mint_decimals, - None, - )? - .to_num::(); - let borrow_limit_usd = calc_value( - bank_accounts.bank.config.borrow_limit.into(), - price, - bank_accounts.bank.mint_decimals, - None, - )? - .to_num::(); - - let asset_amount = bank_accounts - .bank - .get_asset_amount(total_asset_share.into())?; - let asset_value_usd = - calc_value(asset_amount, price, bank_accounts.bank.mint_decimals, None)? - .to_num::(); - let liability_amount = bank_accounts - .bank - .get_liability_amount(total_liability_share.into())?; - let liability_value_usd = calc_value( - liability_amount, - price, - bank_accounts.bank.mint_decimals, - None, - )? - .to_num::(); - - let lenders_count = snapshot - .marginfi_accounts - .iter() - .filter(|(_, account)| { - account.lending_account.balances.iter().any(|a| { - a.active - && I80F48::from(a.asset_shares).gt(&ZERO_AMOUNT_THRESHOLD) - && a.bank_pk.eq(bank_pk) - }) - }) - .count() as u32; - let borrowers_count = snapshot - .marginfi_accounts - .iter() - .filter(|(_, account)| { - account.lending_account.balances.iter().any(|a| { - a.active - && I80F48::from(a.liability_shares).gt(&ZERO_AMOUNT_THRESHOLD) - && a.bank_pk.eq(bank_pk) - }) - }) - .count() as u32; - - let utilization_rate = if asset_amount.is_positive() { - liability_amount - .checked_div(asset_amount) - .ok_or_else(|| anyhow!("Bad math during UR calc"))? - } else { - I80F48::ZERO - }; - let group = snapshot - .marginfi_groups - .get(&bank_accounts.bank.group) - .ok_or_else(|| { - anyhow!( - "Group {} not found for bank {}", - bank_accounts.bank.group, - bank_pk - ) - })?; - let ir_calc = bank_accounts - .bank - .config - .interest_rate_config - .create_interest_rate_calculator(&group.get_group_bank_config()); - - let ComputedInterestRates { - lending_rate_apr, - borrowing_rate_apr, - group_fee_apr, - insurance_fee_apr, - protocol_fee_apr: _, - }: marginfi::state::marginfi_group::ComputedInterestRates = ir_calc - .calc_interest_rate(utilization_rate) - .ok_or_else(|| anyhow!("Bad math during IR calcs"))?; - - Ok(Self { - timestamp, - pubkey: *bank_pk, - marginfi_group: bank_accounts.bank.group, - mint: bank_accounts.bank.mint, - usd_price: price.to_num::(), - operational_state: bank_accounts.bank.config.operational_state, - asset_weight_maintenance: asset_weight_maintenance.to_num::(), - liability_weight_maintenance: liability_weight_maintenance.to_num::(), - asset_weight_initial: asset_weight_initial.to_num::(), - liability_weight_initial: liability_weight_initial.to_num::(), - deposit_limit_in_tokens: bank_accounts.bank.config.deposit_limit as f64 - / (10i64.pow(bank_accounts.bank.mint_decimals as u32) as f64), - borrow_limit_in_tokens: bank_accounts.bank.config.borrow_limit as f64 - / (10i64.pow(bank_accounts.bank.mint_decimals as u32) as f64), - deposit_limit_in_usd: deposit_limit_usd, - borrow_limit_in_usd: borrow_limit_usd, - lenders_count, - borrowers_count, - deposit_rate: lending_rate_apr.to_num::(), - borrow_rate: borrowing_rate_apr.to_num::(), - group_fee: group_fee_apr.to_num::(), - insurance_fee: insurance_fee_apr.to_num::(), - total_assets_in_tokens: asset_amount.to_num::() - / (10i64.pow(bank_accounts.bank.mint_decimals as u32) as f64), - total_liabilities_in_tokens: liability_amount.to_num::() - / (10i64.pow(bank_accounts.bank.mint_decimals as u32) as f64), - total_assets_in_usd: asset_value_usd, - total_liabilities_in_usd: liability_value_usd, - liquidity_vault_balance: (bank_accounts.liquidity_vault_token_account.amount as f64) - / (10i64.pow(bank_accounts.bank.mint_decimals as u32) as f64), - insurance_vault_balance: (bank_accounts.insurance_vault_token_account.amount as f64) - / (10i64.pow(bank_accounts.bank.mint_decimals as u32) as f64), - fee_vault_balance: (bank_accounts.fee_vault_token_account.amount as f64) - / (10i64.pow(bank_accounts.bank.mint_decimals as u32) as f64), - }) - } - - pub fn to_row(&self) -> LendingPoolBankMetricsRow { - LendingPoolBankMetricsRow { - id: Uuid::new_v4().to_string(), - created_at: Utc::now().format(DATE_FORMAT_STR).to_string(), - timestamp: NaiveDateTime::from_timestamp_opt(self.timestamp, 0) - .unwrap() - .format(DATE_FORMAT_STR) - .to_string(), - pubkey: self.pubkey.to_string(), - marginfi_group: self.marginfi_group.to_string(), - mint: self.mint.to_string(), - usd_price: self.usd_price, - operational_state: self.operational_state.to_string(), - asset_weight_maintenance: self.asset_weight_maintenance, - liability_weight_maintenance: self.liability_weight_maintenance, - asset_weight_initial: self.asset_weight_initial, - liability_weight_initial: self.liability_weight_initial, - deposit_limit_in_tokens: self.deposit_limit_in_tokens, - borrow_limit_in_tokens: self.borrow_limit_in_tokens, - deposit_limit_in_usd: self.deposit_limit_in_usd, - borrow_limit_in_usd: self.borrow_limit_in_usd, - lenders_count: self.lenders_count, - borrowers_count: self.borrowers_count, - deposit_rate: self.deposit_rate, - borrow_rate: self.borrow_rate, - group_fee: self.group_fee, - insurance_fee: self.insurance_fee, - total_assets_in_tokens: self.total_assets_in_tokens, - total_liabilities_in_tokens: self.total_liabilities_in_tokens, - total_assets_in_usd: self.total_assets_in_usd, - total_liabilities_in_usd: self.total_liabilities_in_usd, - liquidity_vault_balance: self.liquidity_vault_balance, - insurance_vault_balance: self.insurance_vault_balance, - fee_vault_balance: self.fee_vault_balance, - } - } -} - -#[derive(Debug, Serialize)] -pub struct MarginfiAccountMetricsRow { - pub id: String, - pub created_at: String, - pub timestamp: String, - pub pubkey: String, - pub marginfi_group: String, - pub owner: String, - pub total_assets_in_usd: f64, - pub total_liabilities_in_usd: f64, - pub total_assets_in_usd_maintenance: f64, - pub total_liabilities_in_usd_maintenance: f64, - pub total_assets_in_usd_initial: f64, - pub total_liabilities_in_usd_initial: f64, - pub positions: String, -} - -#[derive(Debug, Serialize)] -pub struct PositionsSummary { - pub bank: String, - pub mint: String, - pub is_asset: bool, - pub amount: f64, - pub usd_value: f64, - pub usd_value_maintenance: f64, - pub usd_value_initial: f64, - pub price: f64, -} - -#[derive(Debug)] -pub struct MarginfiAccountMetrics { - pub timestamp: i64, - pub pubkey: Pubkey, - pub marginfi_group: Pubkey, - pub owner: Pubkey, - pub total_assets_in_usd: f64, - pub total_liabilities_in_usd: f64, - pub total_assets_in_usd_maintenance: f64, - pub total_liabilities_in_usd_maintenance: f64, - pub total_assets_in_usd_initial: f64, - pub total_liabilities_in_usd_initial: f64, - pub positions: Vec, -} - -impl MarginfiAccountMetrics { - pub fn new( - timestamp: i64, - marginfi_account_pk: &Pubkey, - marginfi_account: &MarginfiAccount, - snapshot: &Snapshot, - ) -> anyhow::Result { - let banks = HashMap::from_iter( - snapshot - .banks - .iter() - .map(|(bank_pk, bank_accounts)| (*bank_pk, bank_accounts.clone().bank)), - ); - let price_feeds = - HashMap::from_iter(snapshot.price_feeds.iter().map(|(oracle_pk, oracle_data)| { - match oracle_data { - OracleData::Pyth(price_feed) => ( - *oracle_pk, - OraclePriceFeedAdapter::PythLegacy(price_feed.clone()), - ), - OracleData::Switchboard(pf) => ( - *oracle_pk, - OraclePriceFeedAdapter::SwitchboardV2(pf.clone()), - ), - OracleData::PythPush(pf) => ( - *oracle_pk, - OraclePriceFeedAdapter::PythPushOracle(pf.clone()), - ), - OracleData::SwitchboardPull(pf) => ( - *oracle_pk, - OraclePriceFeedAdapter::SwitchboardPull(pf.clone()), - ), - } - })); - - let risk_engine = RiskEngine2::load(marginfi_account, &banks, &price_feeds)?; - - let (total_assets_usd, total_liabilities_usd) = risk_engine.get_equity_components()?; - let (total_assets_usd, total_liabilities_usd) = ( - total_assets_usd.to_num::(), - total_liabilities_usd.to_num::(), - ); - let (total_assets_usd_maintenance, total_liabilities_usd_maintenance) = - risk_engine.get_account_health_components(RiskRequirementType::Maintenance)?; - let (total_assets_usd_maintenance, total_liabilities_usd_maintenance) = ( - total_assets_usd_maintenance.to_num::(), - total_liabilities_usd_maintenance.to_num::(), - ); - let (total_assets_usd_initial, total_liabilities_usd_initial) = - risk_engine.get_account_health_components(RiskRequirementType::Initial)?; - let (total_assets_usd_initial, total_liabilities_usd_initial) = ( - total_assets_usd_initial.to_num::(), - total_liabilities_usd_initial.to_num::(), - ); - - let positions = marginfi_account - .lending_account - .balances - .iter() - .filter(|balance| balance.active) - .map(|balance| { - let bank = banks.get(&balance.bank_pk).unwrap(); - let mint = bank.mint; - let (asset_shares, liability_shares): (I80F48, I80F48) = - (balance.asset_shares.into(), balance.liability_shares.into()); - let (asset_weight_maintenance, liability_weight_maintenance) = - bank.config.get_weights(RequirementType::Maintenance); - let (asset_weight_initial, liability_weight_initial) = - bank.config.get_weights(RequirementType::Initial); - let is_asset = asset_shares.gt(&I80F48!(0.0001)); - - let price_feed_pk = bank.config.oracle_keys[0]; - - let oracle_data = snapshot - .price_feeds - .get(&price_feed_pk) - .ok_or_else(|| { - anyhow!( - "Price feed {} not found for bank {}", - &price_feed_pk, - &balance.bank_pk - ) - }) - .unwrap(); - - let price_bias = if is_asset { - Some(PriceBias::Low) - } else { - Some(PriceBias::High) - }; - - let (maint_price, init_price, real_price) = ( - oracle_data.get_price_of_type(OraclePriceType::RealTime, price_bias), - oracle_data.get_price_of_type(OraclePriceType::TimeWeighted, price_bias), - oracle_data.get_price_of_type(OraclePriceType::RealTime, None), - ); - - let (amount, weight_maintenance, weight_initial) = if is_asset { - ( - bank.get_asset_amount(asset_shares) - .map_err(|_| anyhow!("Bad math during positions summarizing")) - .unwrap(), - asset_weight_maintenance, - asset_weight_initial, - ) - } else { - ( - bank.get_asset_amount(liability_shares) - .map_err(|_| anyhow!("Bad math during positions summarizing")) - .unwrap(), - liability_weight_maintenance, - liability_weight_initial, - ) - }; - - let usd_value = calc_value(amount, real_price, bank.mint_decimals, None) - .unwrap() - .to_num::(); - - let usd_value_maintenance = calc_value( - amount, - maint_price, - bank.mint_decimals, - Some(weight_maintenance), - ) - .unwrap() - .to_num::(); - let usd_value_initial = - calc_value(amount, init_price, bank.mint_decimals, Some(weight_initial)) - .unwrap() - .to_num::(); - - PositionsSummary { - bank: balance.bank_pk.to_string(), - mint: mint.to_string(), - is_asset, - amount: amount.to_num::() / (10i64.pow(bank.mint_decimals as u32) as f64), - usd_value, - usd_value_maintenance, - usd_value_initial, - price: real_price.to_num::(), - } - }) - .collect_vec(); - - Ok(Self { - timestamp, - pubkey: *marginfi_account_pk, - marginfi_group: marginfi_account.group, - owner: marginfi_account.authority, - total_assets_in_usd: total_assets_usd, - total_liabilities_in_usd: total_liabilities_usd, - total_assets_in_usd_maintenance: total_assets_usd_maintenance, - total_liabilities_in_usd_maintenance: total_liabilities_usd_maintenance, - total_assets_in_usd_initial: total_assets_usd_initial, - total_liabilities_in_usd_initial: total_liabilities_usd_initial, - positions, - }) - } - - pub fn to_row(&self) -> MarginfiAccountMetricsRow { - MarginfiAccountMetricsRow { - id: Uuid::new_v4().to_string(), - created_at: Utc::now().format(DATE_FORMAT_STR).to_string(), - timestamp: NaiveDateTime::from_timestamp_opt(self.timestamp, 0) - .unwrap() - .format(DATE_FORMAT_STR) - .to_string(), - pubkey: self.pubkey.to_string(), - marginfi_group: self.marginfi_group.to_string(), - owner: self.owner.to_string(), - total_assets_in_usd: self.total_assets_in_usd, - total_liabilities_in_usd: self.total_liabilities_in_usd, - total_assets_in_usd_maintenance: self.total_assets_in_usd_maintenance, - total_liabilities_in_usd_maintenance: self.total_liabilities_in_usd_maintenance, - total_assets_in_usd_initial: self.total_assets_in_usd_initial, - total_liabilities_in_usd_initial: self.total_liabilities_in_usd_initial, - positions: serde_json::to_string(&self.positions).unwrap(), - } - } -} diff --git a/observability/indexer/src/utils/mod.rs b/observability/indexer/src/utils/mod.rs deleted file mode 100644 index a85e1377b..000000000 --- a/observability/indexer/src/utils/mod.rs +++ /dev/null @@ -1,23 +0,0 @@ -use solana_sdk::{account::Account, pubkey::Pubkey}; - -pub mod big_query; -pub mod crossbar; -pub mod errors; -pub mod marginfi_account_dup; -pub mod metrics; -pub mod protos; -pub mod snapshot; -pub mod swb_pull; -pub mod transactions_crawler; - -pub fn convert_account( - account_update: yellowstone_grpc_proto::geyser::SubscribeUpdateAccountInfo, -) -> Result { - Ok(Account { - lamports: account_update.lamports, - data: account_update.data, - owner: Pubkey::try_from(account_update.owner).unwrap(), - executable: account_update.executable, - rent_epoch: account_update.rent_epoch, - }) -} diff --git a/observability/indexer/src/utils/protos.rs b/observability/indexer/src/utils/protos.rs deleted file mode 100644 index ad48e4c90..000000000 --- a/observability/indexer/src/utils/protos.rs +++ /dev/null @@ -1,3 +0,0 @@ -pub mod gcp_pubsub { - tonic::include_proto!("gcp_pubsub"); -} diff --git a/observability/indexer/src/utils/snapshot.rs b/observability/indexer/src/utils/snapshot.rs deleted file mode 100644 index cd9ba2ccb..000000000 --- a/observability/indexer/src/utils/snapshot.rs +++ /dev/null @@ -1,393 +0,0 @@ -use crate::common::get_multiple_accounts_chunked2; -use anchor_client::anchor_lang::AccountDeserialize; -use anchor_client::anchor_lang::Discriminator; -use fixed::types::I80F48; -use itertools::Itertools; -use marginfi::constants::PYTH_PUSH_MARGINFI_SPONSORED_SHARD_ID; -use marginfi::constants::PYTH_PUSH_PYTH_SPONSORED_SHARD_ID; -use marginfi::{ - prelude::MarginfiGroup, - state::{marginfi_account::MarginfiAccount, marginfi_group::Bank, price::*}, -}; -use solana_account_decoder::UiAccountEncoding; -use solana_account_decoder::UiDataSliceConfig; -use solana_client::{ - nonblocking::rpc_client::RpcClient, - rpc_config::{RpcAccountInfoConfig, RpcProgramAccountsConfig}, -}; -use solana_sdk::account_info::IntoAccountInfo; -use solana_sdk::{account::Account, program_pack::Pack, pubkey::Pubkey}; -use spl_token::state::Account as SplAccount; -use std::{ - collections::HashMap, - fmt::{Debug, Display}, - sync::Arc, -}; -use tracing::info; - -use super::swb_pull::load_swb_pull_account; - -#[derive(Clone, Debug)] -pub struct BankAccounts { - pub bank: Bank, - pub liquidity_vault_token_account: SplAccount, - pub insurance_vault_token_account: SplAccount, - pub fee_vault_token_account: SplAccount, -} - -#[derive(Clone, Debug, PartialEq)] -pub enum AccountRoutingType { - MarginfiGroup, - MarginfiAccount, - Bank(Pubkey, BankUpdateRoutingType), - PriceFeedPyth, - PriceFeedSwitchboard, - PriceFeedSwitchboardPull, - PriceFeedPythPushOracle, -} - -#[derive(Clone, Debug, PartialEq)] -pub enum BankUpdateRoutingType { - State, - LiquidityTokenAccount, - InsuranceTokenAccount, - FeeTokenAccount, -} - -#[derive(Clone, Debug)] -pub enum OracleData { - Pyth(PythLegacyPriceFeed), - Switchboard(SwitchboardV2PriceFeed), - PythPush(PythPushOraclePriceFeed), - SwitchboardPull(SwitchboardPullPriceFeed), -} - -impl OracleData { - pub fn get_price_of_type( - &self, - oracle_price_type: OraclePriceType, - bias: Option, - ) -> I80F48 { - match self { - OracleData::Pyth(price_feed) => price_feed - .get_price_of_type(oracle_price_type, bias) - .unwrap(), - OracleData::Switchboard(price_feed) => price_feed - .get_price_of_type(oracle_price_type, bias) - .unwrap(), - OracleData::PythPush(price_feed) => price_feed - .get_price_of_type(oracle_price_type, bias) - .unwrap(), - OracleData::SwitchboardPull(price_feed) => price_feed - .get_price_of_type(oracle_price_type, bias) - .unwrap(), - } - } -} - -#[derive(Clone)] -pub struct Snapshot { - program_id: Pubkey, - rpc_client: Arc, - pub routing_lookup: HashMap, - - pub marginfi_groups: HashMap, - pub banks: HashMap, - pub marginfi_accounts: HashMap, - pub price_feeds: HashMap, -} - -impl Display for Snapshot { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!( - f, - "Snapshot:\nMarginfi groups: {}\nBanks: {}\nMarginfi accounts: {}\nPriceFeeds: {}\nRouting lookup: {}", - self.marginfi_groups.len(), - self.banks.len(), - self.marginfi_accounts.len(), - self.price_feeds.len(), - self.routing_lookup.len() - ) - } -} - -impl Debug for Snapshot { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!( - f, - "Snapshot:\nBanks: {:?}\nMarginfi accounts: {:?}\nPriceFeeds: {:?}\nRouting lookup: {:?}", - self.banks, self.marginfi_accounts, self.price_feeds, self.routing_lookup - ) - } -} - -impl Snapshot { - pub fn new(program_id: Pubkey, rpc_client: Arc) -> Self { - Self { - program_id, - rpc_client, - routing_lookup: HashMap::new(), - marginfi_groups: HashMap::new(), - banks: HashMap::new(), - marginfi_accounts: HashMap::new(), - price_feeds: HashMap::new(), - } - } - - pub async fn init(&mut self) -> anyhow::Result<()> { - let config = RpcProgramAccountsConfig { - account_config: RpcAccountInfoConfig { - encoding: Some(UiAccountEncoding::Base64), - data_slice: Some(UiDataSliceConfig { - offset: 0, - length: 0, - }), - ..RpcAccountInfoConfig::default() - }, - ..RpcProgramAccountsConfig::default() - }; - - let start_time = std::time::Instant::now(); - - let all_program_account_keys = self - .rpc_client - .get_program_accounts_with_config(&self.program_id, config) - .await?; - - let elapsed = start_time.elapsed(); - info!( - "Time taken to get {:?} addresses: {:?}", - all_program_account_keys.len(), - elapsed - ); - - let start_time = std::time::Instant::now(); - let all_program_accounts = get_multiple_accounts_chunked2( - &self.rpc_client, - &all_program_account_keys - .into_iter() - .map(|(pubkey, _)| pubkey) - .collect::>(), - ) - .await?; - - let elapsed = start_time.elapsed(); - info!( - "Time taken to get {:?} accounts: {:?}", - all_program_accounts.len(), - elapsed - ); - - for (pubkey, account) in all_program_accounts { - self.create_entry(&pubkey, &account).await; - } - - Ok(()) - } - - // This method assumes that all accounts of interest not owned by the marginfi program are - // inserted in the routing lookup table when a program account is created / received for the - // first time. This is why this only processes program accounts. - pub async fn create_entry(&mut self, account_pubkey: &Pubkey, account: &Account) { - if account.owner == self.program_id { - let discriminator = &account.data[..8]; - if discriminator == Bank::discriminator() { - let bank = Bank::try_deserialize(&mut (&account.data as &[u8])).unwrap(); - self.routing_lookup.insert( - *account_pubkey, - AccountRoutingType::Bank(*account_pubkey, BankUpdateRoutingType::State), - ); - - self.routing_lookup.insert( - bank.liquidity_vault, - AccountRoutingType::Bank( - *account_pubkey, - BankUpdateRoutingType::LiquidityTokenAccount, - ), - ); - self.routing_lookup.insert( - bank.insurance_vault, - AccountRoutingType::Bank( - *account_pubkey, - BankUpdateRoutingType::InsuranceTokenAccount, - ), - ); - self.routing_lookup.insert( - bank.fee_vault, - AccountRoutingType::Bank( - *account_pubkey, - BankUpdateRoutingType::FeeTokenAccount, - ), - ); - - let mut accounts_to_fetch = - vec![bank.liquidity_vault, bank.insurance_vault, bank.fee_vault]; - - match bank.config.oracle_setup { - OracleSetup::None => (), - OracleSetup::PythLegacy => { - let oracle_address = bank.config.oracle_keys[0]; - self.routing_lookup - .insert(oracle_address, AccountRoutingType::PriceFeedPyth); - accounts_to_fetch.push(oracle_address); - } - OracleSetup::SwitchboardV2 => { - let oracle_address = bank.config.oracle_keys[0]; - self.routing_lookup - .insert(oracle_address, AccountRoutingType::PriceFeedSwitchboard); - accounts_to_fetch.push(oracle_address); - } - OracleSetup::PythPushOracle => { - let feed_id = bank.config.oracle_keys[0].to_bytes(); - let (pyth_sponsored_oracle_address, _) = - PythPushOraclePriceFeed::find_oracle_address( - PYTH_PUSH_PYTH_SPONSORED_SHARD_ID, - &feed_id, - ); - let (mfi_sponsored_oracle_address, _) = - PythPushOraclePriceFeed::find_oracle_address( - PYTH_PUSH_MARGINFI_SPONSORED_SHARD_ID, - &feed_id, - ); - - self.routing_lookup.insert( - pyth_sponsored_oracle_address, - AccountRoutingType::PriceFeedPythPushOracle, - ); - self.routing_lookup.insert( - mfi_sponsored_oracle_address, - AccountRoutingType::PriceFeedPythPushOracle, - ); - - accounts_to_fetch.push(pyth_sponsored_oracle_address); - accounts_to_fetch.push(mfi_sponsored_oracle_address); - } - OracleSetup::SwitchboardPull => { - let oracle_address = bank.config.oracle_keys[0]; - self.routing_lookup - .insert(oracle_address, AccountRoutingType::PriceFeedSwitchboardPull); - accounts_to_fetch.push(oracle_address); - } - } - - self.banks.insert( - *account_pubkey, - BankAccounts { - bank, - liquidity_vault_token_account: SplAccount::default(), - insurance_vault_token_account: SplAccount::default(), - fee_vault_token_account: SplAccount::default(), - }, - ); - - // Fetch all ban-specific accounts + store in current snapshot - let accounts = self - .rpc_client - .get_multiple_accounts(&accounts_to_fetch) - .await - .unwrap() - .into_iter() - .zip(accounts_to_fetch) - .filter_map(|(maybe_account, pubkey)| { - maybe_account.map(|account| (pubkey, account)) - }) - .collect_vec(); - - for (account_pubkey, account) in accounts { - self.udpate_entry(&account_pubkey, &account) - } - } else if discriminator == MarginfiAccount::discriminator() { - let marginfi_account = - MarginfiAccount::try_deserialize(&mut (&account.data as &[u8])).unwrap(); - self.routing_lookup - .insert(*account_pubkey, AccountRoutingType::MarginfiAccount); - self.marginfi_accounts - .insert(*account_pubkey, marginfi_account); - } else if discriminator == MarginfiGroup::discriminator() { - let marginfi_group = - MarginfiGroup::try_deserialize(&mut (&account.data as &[u8])).unwrap(); - self.routing_lookup - .insert(*account_pubkey, AccountRoutingType::MarginfiGroup); - self.marginfi_groups.insert(*account_pubkey, marginfi_group); - } - } - } - - pub fn udpate_entry(&mut self, account_pubkey: &Pubkey, account: &Account) { - let routing_info = self - .routing_lookup - .get(account_pubkey) - .expect("Account not found in routing lookup"); - match routing_info { - AccountRoutingType::PriceFeedPyth => { - let mut account = account.clone(); - let ai = (account_pubkey, &mut account).into_account_info(); - let pf = PythLegacyPriceFeed::load_checked(&ai, 0, u64::MAX).unwrap(); - self.price_feeds - .insert(*account_pubkey, OracleData::Pyth(pf)); - } - AccountRoutingType::Bank(bank_pk, BankUpdateRoutingType::LiquidityTokenAccount) => { - self.banks - .get_mut(bank_pk) - .unwrap() - .liquidity_vault_token_account = - SplAccount::unpack_from_slice(&account.data as &[u8]).unwrap(); - } - AccountRoutingType::Bank(bank_pk, BankUpdateRoutingType::InsuranceTokenAccount) => { - self.banks - .get_mut(bank_pk) - .unwrap() - .insurance_vault_token_account = - SplAccount::unpack_from_slice(&account.data as &[u8]).unwrap(); - } - AccountRoutingType::Bank(bank_pk, BankUpdateRoutingType::FeeTokenAccount) => { - self.banks.get_mut(bank_pk).unwrap().fee_vault_token_account = - SplAccount::unpack_from_slice(&account.data as &[u8]).unwrap(); - } - AccountRoutingType::Bank(bank_pk, BankUpdateRoutingType::State) => { - self.banks.get_mut(bank_pk).unwrap().bank = - Bank::try_deserialize(&mut (&account.data as &[u8])).unwrap(); - } - AccountRoutingType::MarginfiAccount => { - self.marginfi_accounts.insert( - *account_pubkey, - MarginfiAccount::try_deserialize(&mut (&account.data as &[u8])).unwrap(), - ); - } - AccountRoutingType::MarginfiGroup => { - self.marginfi_groups.insert( - *account_pubkey, - MarginfiGroup::try_deserialize(&mut (&account.data as &[u8])).unwrap(), - ); - } - AccountRoutingType::PriceFeedSwitchboard => { - let mut account = account.clone(); - let ai = (account_pubkey, &mut account).into_account_info(); - let pf = SwitchboardV2PriceFeed::load_checked(&ai, 0, u64::MAX).unwrap(); - self.price_feeds - .insert(*account_pubkey, OracleData::Switchboard(pf)); - } - AccountRoutingType::PriceFeedPythPushOracle => { - let mut account = account.clone(); - let ai = (account_pubkey, &mut account).into_account_info(); - let pf = PythPushOraclePriceFeed::load_unchecked(&ai).unwrap(); - let feed_id = PythPushOraclePriceFeed::peek_feed_id(&ai).unwrap(); - let feed_id_pk = Pubkey::new_from_array(feed_id); - - self.price_feeds - .insert(feed_id_pk, OracleData::PythPush(pf)); - } - AccountRoutingType::PriceFeedSwitchboardPull => { - let mut account = account.clone(); - let ai = (account_pubkey, &mut account).into_account_info(); - let pf = load_swb_pull_account(&ai).unwrap(); - self.price_feeds.insert( - *account_pubkey, - OracleData::SwitchboardPull(SwitchboardPullPriceFeed { - feed: Box::new((&pf).into()), - }), - ); - } - } - } -} diff --git a/observability/indexer/src/utils/swb_pull.rs b/observability/indexer/src/utils/swb_pull.rs deleted file mode 100644 index 4dd7733f1..000000000 --- a/observability/indexer/src/utils/swb_pull.rs +++ /dev/null @@ -1,51 +0,0 @@ -use fixed::types::I80F48; -use marginfi::constants::EXP_10_I80F48; -use marginfi::state::price::SwitchboardPullPriceFeed; -use solana_sdk::account_info::AccountInfo; -use switchboard_on_demand::PullFeedAccountData; - -use super::crossbar::SimulatedPrice; - -pub fn overwrite_price_from_sim( - current_data: &mut SwitchboardPullPriceFeed, - simulated_price: &SimulatedPrice, -) { - let value: i128 = I80F48::from_num(simulated_price.value) - .checked_mul(EXP_10_I80F48[switchboard_on_demand::PRECISION as usize]) - .unwrap() - .to_num(); - let std_dev: i128 = I80F48::from_num(simulated_price.std_dev) - .checked_mul(EXP_10_I80F48[switchboard_on_demand::PRECISION as usize]) - .unwrap() - .to_num(); - - current_data.feed.result.value = value; - current_data.feed.result.std_dev = std_dev; - // other fields are ignored because not used by the indexer -} - -pub fn load_swb_pull_account(account_info: &AccountInfo) -> anyhow::Result { - let bytes = &account_info.data.borrow().to_vec(); - - if bytes - .as_ptr() - .align_offset(std::mem::align_of::()) - != 0 - { - return Err(anyhow::anyhow!("Invalid alignment")); - } - - let num = bytes.len() / std::mem::size_of::(); - let mut vec: Vec = Vec::with_capacity(num); - - unsafe { - vec.set_len(num); - std::ptr::copy_nonoverlapping( - bytes[8..std::mem::size_of::() + 8].as_ptr(), - vec.as_mut_ptr() as *mut u8, - bytes.len(), - ); - } - - Ok(vec[0]) -} diff --git a/observability/indexer/src/utils/transactions_crawler.rs b/observability/indexer/src/utils/transactions_crawler.rs deleted file mode 100644 index 95a7b1c15..000000000 --- a/observability/indexer/src/utils/transactions_crawler.rs +++ /dev/null @@ -1,442 +0,0 @@ -use anyhow::Result; -use chrono::{Local, TimeZone}; -use concurrent_queue::ConcurrentQueue; -use futures::{future::join_all, stream, Future, StreamExt}; -use solana_client::{ - nonblocking::rpc_client::RpcClient, rpc_client::GetConfirmedSignaturesForAddress2Config, - rpc_config::RpcTransactionConfig, -}; -use solana_measure::measure::Measure; -use solana_sdk::{ - commitment_config::{CommitmentConfig, CommitmentLevel}, - pubkey::Pubkey, - signature::Signature, -}; -use solana_transaction_status::{EncodedConfirmedTransactionWithStatusMeta, UiTransactionEncoding}; -use std::{ - collections::HashMap, - sync::{ - atomic::{AtomicU64, Ordering}, - Arc, Mutex, - }, -}; -use std::{str::FromStr, time::Duration}; -use tokio::{join, runtime::Builder}; -use tracing::{error, info, warn}; - -use crate::common::{ - Target, DEFAULT_MAX_PENDING_SIGNATURES, DEFAULT_MONITOR_INTERVAL, DEFAULT_RPC_ENDPOINT, - DEFAULT_SIGNATURE_FETCH_LIMIT, -}; - -pub const DEFAULT_MAX_CONCURRENT_REQUESTS: usize = 10; - -#[derive(Debug, Clone)] -pub struct TransactionsCrawlerConfig { - pub rpc_endpoint: String, - pub signature_fetch_limit: usize, - pub max_concurrent_requests: usize, - pub max_pending_signatures: usize, - pub monitor_interval: u64, - pub targets: Vec, -} - -impl TransactionsCrawlerConfig { - pub fn new(targets: Vec) -> Self { - Self { - rpc_endpoint: DEFAULT_RPC_ENDPOINT.to_string(), - signature_fetch_limit: DEFAULT_SIGNATURE_FETCH_LIMIT, - max_concurrent_requests: DEFAULT_MAX_CONCURRENT_REQUESTS, - max_pending_signatures: DEFAULT_MAX_PENDING_SIGNATURES, - monitor_interval: DEFAULT_MONITOR_INTERVAL, - targets, - } - } -} - -#[derive(Default, Clone)] -pub struct SlotMeta { - slot: u64, - timestamp: u64, -} - -#[derive(Debug)] -pub struct TransactionData { - pub indexing_address: Pubkey, - pub transaction: EncodedConfirmedTransactionWithStatusMeta, -} - -#[derive(Debug, Clone)] -pub struct SignatureData { - pub indexing_address: Pubkey, - pub signature: Signature, -} - -#[derive(Clone)] -pub struct TransactionsCrawlerContext { - pub config: Arc, - rpc_client: Arc, - signature_queue: Arc>>, - pub transaction_queue: Arc>>, - minimum_slot_available: Arc>, - oldest_slot_fetched: Arc>, - transaction_counter: Arc, -} - -impl TransactionsCrawlerContext { - pub fn new(config: &TransactionsCrawlerConfig) -> Self { - Self { - config: Arc::new(config.clone()), - rpc_client: Arc::new(RpcClient::new_with_commitment( - config.rpc_endpoint.clone(), - CommitmentConfig { - commitment: CommitmentLevel::Finalized, - }, - )), - signature_queue: Arc::new(Mutex::new(ConcurrentQueue::unbounded())), - transaction_queue: Arc::new(Mutex::new(ConcurrentQueue::bounded(1_000))), // consumption should not let this queue grow unbounded - minimum_slot_available: Arc::new(Mutex::new(0)), - oldest_slot_fetched: Arc::new(Mutex::new(SlotMeta::default())), - transaction_counter: Arc::new(AtomicU64::new(0)), - } - } -} - -pub struct TransactionsCrawler { - context: TransactionsCrawlerContext, -} - -impl TransactionsCrawler { - pub fn new(targets: Vec) -> Self { - let config = TransactionsCrawlerConfig::new(targets); - let context = TransactionsCrawlerContext::new(&config); - Self { context } - } - - pub fn new_with_config(config: TransactionsCrawlerConfig) -> Self { - let context = TransactionsCrawlerContext::new(&config); - Self { context } - } - - pub fn run(&self, transaction_processor: &F) -> Result<()> - where - F: (FnOnce(Arc) -> Fut) + Clone + Send + Sync + 'static, - Fut: Future + Send, - { - let runtime = Builder::new_multi_thread().enable_all().build().unwrap(); - - runtime.block_on(self.run_async(transaction_processor)) - } - - pub async fn run_async<'a, F, Fut>(&self, transaction_processor: &F) -> Result<()> - where - F: (FnOnce(Arc) -> Fut) + Clone + Send + Sync + 'static, - Fut: Future + Send, - { - let context = Arc::new(self.context.clone()); - - let fetch_signatures_handle = tokio::spawn({ - let context = context.clone(); - async move { Self::crawl_signatures_for_address(context).await } - }); - let fetch_transactions_handle = tokio::spawn({ - let context = context.clone(); - async move { Self::fetch_transactions(context).await } - }); - let process_transactions_handle = tokio::spawn({ - let context = context.clone(); - let transaction_processor = transaction_processor.clone(); - async move { transaction_processor(context).await } - }); - let monitor_handle = tokio::spawn({ - let context = context.clone(); - async move { Self::monitor(context).await } - }); - - join_all([ - fetch_signatures_handle, - fetch_transactions_handle, - process_transactions_handle, - monitor_handle, - ]) - .await; - - Ok(()) - } - - async fn crawl_signatures_for_address(ctx: Arc) { - let mut last_fetched_signature_per_address = ctx - .config - .targets - .iter() - .map(|target| (target.address, target.before)) - .collect::>>(); - - loop { - // Concurrent data fetching from RPC - let signatures_futures = ctx - .config - .targets - .iter() - .map(|target| { - ctx.rpc_client.get_signatures_for_address_with_config( - &target.address, - GetConfirmedSignaturesForAddress2Config { - before: *last_fetched_signature_per_address - .get(&target.address) - .unwrap(), - until: target.until, - limit: Some(ctx.config.signature_fetch_limit), - ..Default::default() - }, - ) - }) - .collect::>(); - let signatures_futures = join_all(signatures_futures); - - let minimum_available_slot_future = ctx.rpc_client.minimum_ledger_slot(); - - let (signatures_result, minimum_available_slot_result) = - join!(signatures_futures, minimum_available_slot_future); - - // Discard failed requests (will naturally be re-fetched from same sig next iteration for dropped addresses) - let new_signatures_per_address = signatures_result - .iter() - .zip(ctx.config.targets.clone()) - .filter_map(|(sig_result, target)| match sig_result { - Ok(signatures) => Some((target.address, signatures)), - Err(_) => None, - }) - .collect::>(); - - *ctx.minimum_slot_available.lock().unwrap() = minimum_available_slot_result.unwrap(); - - // Flatten and sort signatures (relative ordering of same-block signatures cross-addresses is not guaranteed) - let mut signatures_to_push = new_signatures_per_address - .iter() - .flat_map(|(indexing_address, sig_data_list)| { - (*sig_data_list) - .clone() - .iter() - .map(|sig_data| (*indexing_address, sig_data.clone())) - .collect::>() - }) - .collect::>(); - signatures_to_push.sort_by(|s1, s2| s2.1.slot.cmp(&s1.1.slot)); - - // Discard failed txs - let signatures_to_push = signatures_to_push - .into_iter() - .filter_map(|(indexing_address, sig_data)| match sig_data.err { - Some(_) => None, - None => Some(SignatureData { - indexing_address, - signature: Signature::from_str(&sig_data.signature).unwrap(), - }), - }) - .collect::>(); - - // Early return if no successful tx in batch - if signatures_to_push.is_empty() { - // Update last fetched signature per address - new_signatures_per_address - .iter() - .for_each(|(address, signatures)| { - let last_sig_for_address = - last_fetched_signature_per_address.get_mut(address).unwrap(); - if let Some(last_sig) = signatures.last() { - *last_sig_for_address = - Some(Signature::from_str(&last_sig.signature).unwrap()); - } - }); - continue; - } - - let mut timing = Measure::start("Q_push_lock_wait"); - let signature_queue = ctx.signature_queue.lock().unwrap(); - timing.stop(); - if timing.as_ms() > 0 { - warn!("{}", timing); - } - - // Bail if not enough room for additional signatures (simpler than having to re-fetch from last fitting sig...) - let current_pending_amount = signature_queue.len(); - if (current_pending_amount + signatures_to_push.len()) - > ctx.config.max_pending_signatures - { - // Last fetched signature per address not updated so as to resume from same point next iteration - std::thread::sleep(Duration::from_millis(100)); - continue; - } - - // Push sigs to queue - signatures_to_push.into_iter().for_each(|sig| { - signature_queue.push(sig).unwrap(); - }); - - // Update last fetched signature per address - new_signatures_per_address - .iter() - .for_each(|(address, signatures)| { - let last_sig_for_address = - last_fetched_signature_per_address.get_mut(address).unwrap(); - if let Some(last_sig) = signatures.last() { - *last_sig_for_address = - Some(Signature::from_str(&last_sig.signature).unwrap()); - } - }); - } - } - - async fn fetch_transactions(ctx: Arc) { - loop { - let mut signatures = vec![]; - { - let mut timing = Measure::start("sig_Q_pop_lock_wait"); - let signatures_queue = ctx.signature_queue.lock().unwrap(); - timing.stop(); - if timing.as_ms() > 0 { - warn!("{}", timing); - } - while !signatures_queue.is_empty() { - signatures.push(signatures_queue.pop().unwrap()); - } - } - if signatures.is_empty() { - tokio::time::sleep(Duration::from_millis(10)).await; - continue; - } - - let responses = stream::iter(signatures) - .map(|signature_data| { - let rpc_client = &ctx.rpc_client; - let ctx_clone = ctx.clone(); - let signature = signature_data.signature; - - async move { - ( - signature_data, - ctx_clone, - rpc_client - .get_transaction_with_config( - &signature, - RpcTransactionConfig { - max_supported_transaction_version: Some(0), - encoding: Some(UiTransactionEncoding::Base64), - ..Default::default() - }, - ) - .await, - ) - } - }) - .buffered(ctx.config.max_concurrent_requests); // Higher ingest if unordered, but no way to order txs in same slot a posteriori in that case - - let signatures_to_retry = responses - .filter_map({ - |(signature_data, ctx, result)| async move { - match result { - Ok(transaction) => { - *ctx.oldest_slot_fetched.lock().unwrap() = SlotMeta { - slot: transaction.slot, // Only true because request buffer above is ordered - timestamp: transaction.block_time.unwrap_or_default() as u64, - }; - - ctx.transaction_queue - .lock() - .unwrap() - .push(TransactionData { - indexing_address: signature_data.indexing_address, - transaction, - }) - .unwrap(); - - ctx.transaction_counter.fetch_add(1, Ordering::Relaxed); - None - } - Err(e) => { - error!("Error fetching tx {}: {}", signature_data.signature, e); - Some(signature_data) - } - } - } - }) - .collect::>() - .await; - - if !signatures_to_retry.is_empty() { - // This can go over the soft limit on the sig queue. Not an issue unless most fetch calls fail which would point to bigger issues - warn!( - "Pushing {} signatures back on the queue after failure", - signatures_to_retry.len() - ); - for sig_data in signatures_to_retry.iter() { - warn!("- {}", sig_data.signature); - } - let mut timing = Measure::start("sig_Q_push_retries_lock_wait"); - let signature_queue = ctx.signature_queue.lock().unwrap(); - timing.stop(); - if timing.as_ms() > 0 { - warn!("{}", timing); - } - - signatures_to_retry.into_iter().for_each(|sig_data| { - signature_queue.push(sig_data).unwrap(); - }) - } - } - } - - async fn monitor(ctx: Arc) { - let mut main_timing = Measure::start("main"); - let mut last_fetch_count = 0u64; - let mut last_fetch_time = 0f32; - - loop { - tokio::time::sleep(Duration::from_secs(ctx.config.monitor_interval)).await; - main_timing.stop(); - let current_fetch_count = ctx.transaction_counter.load(Ordering::Relaxed); - let current_fetch_time = main_timing.as_s(); - - let fetch_average_ms = if (current_fetch_count - last_fetch_count) > 0 { - (current_fetch_time - last_fetch_time) - / (current_fetch_count - last_fetch_count) as f32 - * 1000.0 - * ctx.config.max_concurrent_requests as f32 - } else { - f32::INFINITY - }; - let ingest_rate = if (current_fetch_time - last_fetch_time) > 0.0 { - (current_fetch_count - last_fetch_count) as f32 - / (current_fetch_time - last_fetch_time) - } else { - f32::INFINITY - }; - let minimum_slot_available = *ctx.minimum_slot_available.lock().unwrap(); - let oldest_slot_fetched = (*ctx.oldest_slot_fetched.lock().unwrap()).clone(); - let sig_queue_size = ctx.signature_queue.lock().unwrap().len(); - let tx_queue_size = ctx.transaction_queue.lock().unwrap().len(); - - info!( - "Time: {:.1}s | Total txs: {} | {:.1}s count: {} | {:.1}s rate: {:.1} tx/s | {:.1}s avg fetch: {:.1}ms | min avail slot: {} | oldest fetched slot: {} / {:?} | from BT: {} | sig Q size: {} | tx Q size: {}", - current_fetch_time, - current_fetch_count, - current_fetch_time - last_fetch_time, - current_fetch_count - last_fetch_count, - current_fetch_time - last_fetch_time, - ingest_rate, - current_fetch_time - last_fetch_time, - fetch_average_ms, - minimum_slot_available, - oldest_slot_fetched.slot, - Local.timestamp_opt(oldest_slot_fetched.timestamp.try_into().unwrap(), 0).unwrap(), - oldest_slot_fetched.slot < minimum_slot_available, - sig_queue_size, - tx_queue_size - ); - - last_fetch_count = current_fetch_count; - last_fetch_time = current_fetch_time; - } - } -} diff --git a/observability/indexer/upload_image b/observability/indexer/upload_image deleted file mode 100755 index 35a480884..000000000 --- a/observability/indexer/upload_image +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env bash -set -e - -image_tag=$1 - -[ -z "$image_tag" ] && echo "Missing image_tag argument" && exit 1 - -local_image_name="marginfi-v2-indexer" -gcp_image_name="us-east1-docker.pkg.dev/marginfi-dev/main/$local_image_name" - -docker push "$gcp_image_name:$image_tag" diff --git a/programs/liquidity-incentive-program/Cargo.toml b/programs/liquidity-incentive-program/Cargo.toml deleted file mode 100644 index a4eec9871..000000000 --- a/programs/liquidity-incentive-program/Cargo.toml +++ /dev/null @@ -1,47 +0,0 @@ -[package] -name = "liquidity-incentive-program" -version = "0.1.0" -description = "Created with Anchor" -edition = "2021" - -[lib] -crate-type = ["cdylib", "lib"] -name = "liquidity_incentive_program" - -[features] -no-entrypoint = [] -no-idl = [] -no-log-ix-name = [] -cpi = ["no-entrypoint"] -default = [] -idl-build = ["anchor-lang/idl-build", "anchor-spl/idl-build"] -devnet = ["marginfi/devnet"] -mainnet-beta = ["marginfi/mainnet-beta"] -test = [] -test-bpf = [] - -[dependencies] -anchor-lang = { workspace = true } -anchor-spl = { workspace = true } - -cfg-if = "1.0.0" -fixed = "1.12.0" - -[dependencies.marginfi] -path = "../marginfi" -features = ["cpi"] - -[dev-dependencies] -solana-logger = { workspace = true } -solana-program = { workspace = true } -solana-program-test = { workspace = true } -solana-sdk = { workspace = true } - -anyhow = "1.0.66" -assert_matches = "1.5.0" -bincode = "1.3.3" -futures = "0.3.25" -pretty_assertions = "1.2.1" -fixtures = { path = "../../test-utils", package = "test-utilities", features = [ - "lip", -] } diff --git a/programs/liquidity-incentive-program/README.md b/programs/liquidity-incentive-program/README.md deleted file mode 100644 index 6ebc5869d..000000000 --- a/programs/liquidity-incentive-program/README.md +++ /dev/null @@ -1,57 +0,0 @@ -

- -A Solana smart contract that allows anyone to incentivize asset deposits into marginfi-v2, the decentralized borrow/lend protocol on Solana. - -## About - - -`liquidity-incentive-program` is a proxy contract for `marginfi-v2` that allows users to create `campaign`s that incentivize other users to lock up deposits into `marginfi-v2` for guaranteed yields. - -## Features - -- Permissionless campaign creation -- Arbitrary asset support -- Configurable lock-up periods - -## How it works - -`liquidity-incentive-program` primarily works off of the `Campaign` concept. - -Think of a `Campaign` as a marketing campaign: - -1. Each campaign has a creator, who becomes the `admin` of that campaign. -2. The creator selects: - * the type of asset to incentivize deposits for (e.g. $SOL) - * the lockup period that depositors' funds will be locked up for - * the maximum amount of user deposits allowed - * The maximum rewards to be paid out to users (together with the maximum amount of deposits allowed, this calculates the guaranteed fixed yield). - -> NOTE: LIP works off of the concept of a _minimum_ guaranteed yield, but depositors may earn higher yield if marginfi's native lender yield for the related asset exceeds the yield guaranteed by the `Campaign`. This is a win-win for depositors. - -3. As a proof of reward reserves, campaign creators **lock up maximum rewards to be paid out upon campaign creation**, making it easy for campaign depositors to know the source of yield. - -4. In product UIs, each `Campaign` typically highlights a fixed `APY`, but there is no compounding involved in the guaranteed yield. Since `APY` accounts for compounding effects even if there are none, measuring yield in `APY` gives depositors the correct impression that they should expect the yield they see. In the smart contract, yield is specified via the `max_rewards` parameter of each `Campaign`. - -5. When users deposit funds into an LIP `Campaign`, funds are stored directly in `marginfi`. Funds earn `marginfi` lender yield. When lockups expire, depositors are paid `max(guarenteed yield, earned lender yield)` for the assets they deposited. As earned lender yield grows above `0%`, it subsidizes the expense that campaign creators pay out of the rewards they've escrowed. **This is a win-win for campaign creators**. - -## License - -`marginfi-v2` and the `liquidity-incentive-program` are open source software licensed under the Apache 2.0 license. diff --git a/programs/liquidity-incentive-program/Xargo.toml b/programs/liquidity-incentive-program/Xargo.toml deleted file mode 100644 index 475fb71ed..000000000 --- a/programs/liquidity-incentive-program/Xargo.toml +++ /dev/null @@ -1,2 +0,0 @@ -[target.bpfel-unknown-unknown.dependencies.std] -features = [] diff --git a/programs/liquidity-incentive-program/images/logo.png b/programs/liquidity-incentive-program/images/logo.png deleted file mode 100644 index 71f9224fab9a2dd8db75bb94306a53210647c3a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4967 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 B9@hW> diff --git a/programs/liquidity-incentive-program/src/constants.rs b/programs/liquidity-incentive-program/src/constants.rs deleted file mode 100644 index 36d50b3d0..000000000 --- a/programs/liquidity-incentive-program/src/constants.rs +++ /dev/null @@ -1,12 +0,0 @@ -use anchor_lang::prelude::*; - -#[constant] -pub const CAMPAIGN_SEED: &str = "campaign"; -#[constant] -pub const CAMPAIGN_AUTH_SEED: &str = "campaign_auth"; -#[constant] -pub const DEPOSIT_MFI_AUTH_SIGNER_SEED: &str = "deposit_mfi_auth"; -#[constant] -pub const TEMP_TOKEN_ACCOUNT_AUTH_SEED: &str = "ephemeral_token_account_auth"; -#[constant] -pub const MARGINFI_ACCOUNT_SEED: &str = "marginfi_account"; diff --git a/programs/liquidity-incentive-program/src/errors.rs b/programs/liquidity-incentive-program/src/errors.rs deleted file mode 100644 index 081b79788..000000000 --- a/programs/liquidity-incentive-program/src/errors.rs +++ /dev/null @@ -1,11 +0,0 @@ -use anchor_lang::prelude::*; - -#[error_code] -pub enum LIPError { - #[msg("Campaign is not active")] - CampaignNotActive, - #[msg("Deposit amount is to large")] - DepositAmountTooLarge, - #[msg("Deposit hasn't matured yet")] - DepositNotMature, -} diff --git a/programs/liquidity-incentive-program/src/instructions/create_campaign.rs b/programs/liquidity-incentive-program/src/instructions/create_campaign.rs deleted file mode 100644 index e08ffb7f7..000000000 --- a/programs/liquidity-incentive-program/src/instructions/create_campaign.rs +++ /dev/null @@ -1,91 +0,0 @@ -use crate::{ - constants::{CAMPAIGN_AUTH_SEED, CAMPAIGN_SEED}, - state::Campaign, -}; -use anchor_lang::prelude::*; -use anchor_spl::token_interface::{Mint, TokenAccount, TokenInterface}; -use marginfi::state::marginfi_group::Bank; -use std::mem::size_of; - -pub fn process<'info>( - ctx: Context<'_, '_, '_, 'info, CreateCampaign<'info>>, - lockup_period: u64, - max_deposits: u64, - max_rewards: u64, -) -> Result<()> { - require_gt!(max_deposits, 0); - - anchor_spl::token_2022::spl_token_2022::onchain::invoke_transfer_checked( - ctx.accounts.token_program.key, - ctx.accounts.funding_account.to_account_info(), - ctx.accounts.asset_mint.to_account_info(), - ctx.accounts.campaign_reward_vault.to_account_info(), - ctx.accounts.admin.to_account_info(), - ctx.remaining_accounts, - max_rewards, - ctx.accounts.asset_mint.decimals, - &[], // seeds - )?; - - // Get new balance. This will account for any fees - ctx.accounts.campaign_reward_vault.reload()?; - - ctx.accounts.campaign.set_inner(Campaign { - admin: ctx.accounts.admin.key(), - lockup_period, - active: true, - max_deposits, - remaining_capacity: max_deposits, - max_rewards: ctx.accounts.campaign_reward_vault.amount, - marginfi_bank_pk: ctx.accounts.marginfi_bank.key(), - _padding: [0; 16], - }); - - Ok(()) -} - -#[derive(Accounts)] -pub struct CreateCampaign<'info> { - #[account( - init, - payer = admin, - space = size_of::() + 8, - )] - pub campaign: Box>, - #[account( - init, - payer = admin, - token::mint = asset_mint, - token::authority = campaign_reward_vault_authority, - seeds = [ - CAMPAIGN_SEED.as_bytes(), - campaign.key().as_ref(), - ], - bump, - )] - pub campaign_reward_vault: Box>, - #[account( - seeds = [ - CAMPAIGN_AUTH_SEED.as_bytes(), - campaign.key().as_ref(), - ], - bump, - )] - /// CHECK: Asserted by PDA derivation - pub campaign_reward_vault_authority: AccountInfo<'info>, - #[account( - address = marginfi_bank.load()?.mint, - )] - /// CHECK: Must match the mint of the marginfi bank, - /// asserted by comparing the mint of the marginfi bank - pub asset_mint: InterfaceAccount<'info, Mint>, - pub marginfi_bank: AccountLoader<'info, Bank>, - #[account(mut)] - pub admin: Signer<'info>, - /// CHECK: Asserted by token check - #[account(mut)] - pub funding_account: AccountInfo<'info>, - pub rent: Sysvar<'info, Rent>, - pub token_program: Interface<'info, TokenInterface>, - pub system_program: Program<'info, System>, -} diff --git a/programs/liquidity-incentive-program/src/instructions/create_deposit.rs b/programs/liquidity-incentive-program/src/instructions/create_deposit.rs deleted file mode 100644 index 4e2c726ff..000000000 --- a/programs/liquidity-incentive-program/src/instructions/create_deposit.rs +++ /dev/null @@ -1,206 +0,0 @@ -use crate::{ - constants::{DEPOSIT_MFI_AUTH_SIGNER_SEED, MARGINFI_ACCOUNT_SEED}, - errors::LIPError, - state::{Campaign, Deposit}, -}; -use anchor_lang::prelude::*; -use anchor_spl::{ - token_2022::{close_account, CloseAccount}, - token_interface::{Mint, TokenAccount, TokenInterface}, -}; -use marginfi::{program::Marginfi, state::marginfi_group::Bank}; -use std::mem::size_of; - -/// Creates a new deposit in an active liquidity incentive campaign (LIP). -/// -/// # Arguments -/// * `ctx`: Context struct containing the relevant accounts for the new deposit -/// * `amount`: The amount of tokens to be deposited. -/// -/// # Returns -/// * `Ok(())` if the deposit was successfully made, or an error otherwise. -/// -/// # Errors -/// * `LIPError::CampaignNotActive` if the relevant campaign is not active. -/// * `LIPError::DepositAmountTooLarge` is the deposit amount exceeds the amount of remaining deposits that can be made into the campaign. -pub fn process<'info>( - ctx: Context<'_, '_, '_, 'info, CreateDeposit<'info>>, - amount: u64, -) -> Result<()> { - require!(ctx.accounts.campaign.active, LIPError::CampaignNotActive); - - require_gte!( - ctx.accounts.campaign.remaining_capacity, - amount, - LIPError::DepositAmountTooLarge - ); - - require_gt!(amount, 0); - - msg!("User depositing {} tokens", amount); - - anchor_spl::token_2022::spl_token_2022::onchain::invoke_transfer_checked( - ctx.accounts.token_program.key, - ctx.accounts.funding_account.to_account_info(), - ctx.accounts.asset_mint.to_account_info(), - ctx.accounts.temp_token_account.to_account_info(), - ctx.accounts.signer.to_account_info(), - ctx.remaining_accounts, - amount, - ctx.accounts.asset_mint.decimals, - &[], // seeds - )?; - - let mfi_signer_seeds: &[&[u8]] = &[ - DEPOSIT_MFI_AUTH_SIGNER_SEED.as_bytes(), - &ctx.accounts.deposit.key().to_bytes(), - &[ctx.bumps.mfi_pda_signer], - ]; - - marginfi::cpi::marginfi_account_initialize(CpiContext::new_with_signer( - ctx.accounts.marginfi_program.to_account_info(), - marginfi::cpi::accounts::MarginfiAccountInitialize { - marginfi_group: ctx.accounts.marginfi_group.to_account_info(), - authority: ctx.accounts.mfi_pda_signer.to_account_info(), - marginfi_account: ctx.accounts.marginfi_account.to_account_info(), - system_program: ctx.accounts.system_program.to_account_info(), - fee_payer: ctx.accounts.signer.to_account_info(), - }, - &[ - mfi_signer_seeds, - &[ - MARGINFI_ACCOUNT_SEED.as_bytes(), - &ctx.accounts.deposit.key().to_bytes(), - &[ctx.bumps.marginfi_account], - ], - ], - ))?; - - let signer_seeds = &[mfi_signer_seeds]; - let mut cpi_ctx = CpiContext::new_with_signer( - ctx.accounts.marginfi_program.to_account_info(), - marginfi::cpi::accounts::LendingAccountDeposit { - group: ctx.accounts.marginfi_group.to_account_info(), - marginfi_account: ctx.accounts.marginfi_account.to_account_info(), - authority: ctx.accounts.mfi_pda_signer.to_account_info(), - bank: ctx.accounts.marginfi_bank.to_account_info(), - signer_token_account: ctx.accounts.temp_token_account.to_account_info(), - liquidity_vault: ctx.accounts.marginfi_bank_vault.to_account_info(), - token_program: ctx.accounts.token_program.to_account_info(), - }, - signer_seeds, - ); - cpi_ctx.remaining_accounts = ctx.remaining_accounts.to_vec(); - - if marginfi::utils::nonzero_fee( - ctx.accounts.asset_mint.to_account_info(), - Clock::get()?.epoch, - )? { - msg!("nonzero transfer fee not supported"); - return Err(ProgramError::InvalidAccountData.into()); - } - - marginfi::cpi::lending_account_deposit(cpi_ctx, amount, None)?; - - close_account(CpiContext::new_with_signer( - ctx.accounts.token_program.to_account_info(), - CloseAccount { - account: ctx.accounts.temp_token_account.to_account_info(), - destination: ctx.accounts.signer.to_account_info(), - authority: ctx.accounts.mfi_pda_signer.to_account_info(), - }, - &[mfi_signer_seeds], - ))?; - - ctx.accounts.deposit.set_inner(Deposit { - owner: ctx.accounts.signer.key(), - campaign: ctx.accounts.campaign.key(), - amount, - start_time: Clock::get()?.unix_timestamp, - _padding: [0; 16], - }); - - ctx.accounts.campaign.remaining_capacity = ctx - .accounts - .campaign - .remaining_capacity - .checked_sub(amount) - .unwrap(); - - Ok(()) -} - -#[derive(Accounts)] -pub struct CreateDeposit<'info> { - #[account(mut)] - pub campaign: Box>, - - #[account(mut)] - pub signer: Signer<'info>, - - #[account( - init, - payer = signer, - space = size_of::() + 8, - )] - pub deposit: Box>, - - #[account( - seeds = [ - DEPOSIT_MFI_AUTH_SIGNER_SEED.as_bytes(), - deposit.key().as_ref(), - ], - bump, - )] - /// CHECK: Asserted by PDA derivation - pub mfi_pda_signer: AccountInfo<'info>, - - #[account(mut)] - /// CHECK: Asserted by token transfer - pub funding_account: AccountInfo<'info>, - - #[account( - init, - payer = signer, - token::mint = asset_mint, - token::authority = mfi_pda_signer, - )] - pub temp_token_account: Box>, - - #[account(address = marginfi_bank.load()?.mint)] - pub asset_mint: Box>, - - /// CHECK: Asserted by mfi cpi call - /// marginfi_bank is tied to a specific marginfi_group - pub marginfi_group: AccountInfo<'info>, - - #[account( - mut, - address = campaign.marginfi_bank_pk, - )] - /// CHECK: Asserted by stored address - pub marginfi_bank: AccountLoader<'info, Bank>, - - /// CHECK: Asserted by CPI call - #[account( - mut, - seeds = [ - MARGINFI_ACCOUNT_SEED.as_bytes(), - deposit.key().as_ref(), - ], - bump, - )] - pub marginfi_account: AccountInfo<'info>, - - #[account(mut)] - /// CHECK: Asserted by CPI call, - /// marginfi_bank_vault is tied to a specific marginfi_bank, - /// passing in an incorrect vault will fail the CPI call - pub marginfi_bank_vault: AccountInfo<'info>, - - /// CHECK: Asserted by CPI call - pub marginfi_program: Program<'info, Marginfi>, - pub token_program: Interface<'info, TokenInterface>, - pub rent: Sysvar<'info, Rent>, - pub system_program: Program<'info, System>, -} diff --git a/programs/liquidity-incentive-program/src/instructions/end_deposit.rs b/programs/liquidity-incentive-program/src/instructions/end_deposit.rs deleted file mode 100644 index 99c84d686..000000000 --- a/programs/liquidity-incentive-program/src/instructions/end_deposit.rs +++ /dev/null @@ -1,276 +0,0 @@ -use anchor_lang::prelude::*; -use anchor_spl::{ - token_2022::{close_account, CloseAccount}, - token_interface::{Mint, TokenAccount, TokenInterface}, -}; -use fixed::types::I80F48; -use marginfi::{program::Marginfi, state::marginfi_group::Bank}; - -use crate::{ - constants::{ - CAMPAIGN_AUTH_SEED, CAMPAIGN_SEED, DEPOSIT_MFI_AUTH_SIGNER_SEED, MARGINFI_ACCOUNT_SEED, - TEMP_TOKEN_ACCOUNT_AUTH_SEED, - }, - errors::LIPError, - state::{Campaign, Deposit}, -}; - -/// After a lockup period has ended, closes a deposit and returns the initial deposit + earned rewards from a liquidity incentive campaign back to the liquidity depositor. -/// -/// # Arguments -/// * ctx: Context of the deposit to be closed -/// -/// # Returns -/// * A Result object which is Ok(()) if the deposit is closed and tokens are transferred successfully. -/// -/// # Errors -/// Returns an error if: -/// -/// * Solana clock timestamp is less than the deposit start time plus the lockup period (i.e. the lockup has not been reached) -/// * Bank redeem shares operation fails -/// * Reloading ephemeral token account fails -/// * Transferring additional reward to ephemeral token account fails -/// * Reloading ephemeral token account after transfer fails -pub fn process<'info>(ctx: Context<'_, '_, '_, 'info, EndDeposit<'info>>) -> Result<()> { - // Solana clock isn't the most precise, but an offset of a few hours on a half year lockup is fine - // - // Check if the lockup period has passed - require_gte!( - Clock::get()?.unix_timestamp, - // Skipping checked math here as numbers should be small enough to not overflow - ctx.accounts.deposit.start_time + ctx.accounts.campaign.lockup_period as i64, - LIPError::DepositNotMature - ); - - let deposit_key = ctx.accounts.deposit.key().to_bytes(); - let signer_seeds: &[&[&[u8]]] = &[&[ - DEPOSIT_MFI_AUTH_SIGNER_SEED.as_bytes(), - deposit_key.as_ref(), - &[ctx.bumps.mfi_pda_signer], - ]]; - let mut cpi_ctx = CpiContext::new_with_signer( - ctx.accounts.marginfi_program.to_account_info(), - marginfi::cpi::accounts::LendingAccountWithdraw { - group: ctx.accounts.marginfi_group.to_account_info(), - marginfi_account: ctx.accounts.marginfi_account.to_account_info(), - authority: ctx.accounts.mfi_pda_signer.to_account_info(), - bank: ctx.accounts.marginfi_bank.to_account_info(), - destination_token_account: ctx.accounts.temp_token_account.to_account_info(), - liquidity_vault: ctx.accounts.marginfi_bank_vault.to_account_info(), - bank_liquidity_vault_authority: ctx - .accounts - .marginfi_bank_vault_authority - .to_account_info(), - token_program: ctx.accounts.token_program.to_account_info(), - }, - signer_seeds, - ); - cpi_ctx.remaining_accounts = ctx.remaining_accounts.to_vec(); - marginfi::cpi::lending_account_withdraw(cpi_ctx, 0, Some(true))?; - - // Redeem the shares with marginfi - ctx.accounts.temp_token_account.reload()?; - - // Calulate additional rewards that need to be payed out, based on guaranteed yield. - // This is done by calculating the difference between guaranteed yield and actual yield. - let additional_reward_amount = { - let initial_deposit = ctx.accounts.deposit.amount; - let end_deposit = ctx.accounts.temp_token_account.amount; - - let base_yield = end_deposit.saturating_sub(initial_deposit); - - let max_rewards_pre_campaign = I80F48::from_num(ctx.accounts.campaign.max_rewards); - let max_deposits_pre_campaign = I80F48::from_num(ctx.accounts.campaign.max_deposits); - let deposit_amount = I80F48::from_num(ctx.accounts.deposit.amount); - - let max_reward_for_deposit = deposit_amount - .checked_div(max_deposits_pre_campaign) - .unwrap() - .checked_mul(max_rewards_pre_campaign) - .unwrap() - .checked_to_num::() - .unwrap(); - - msg!( - "Base yield: {}, max reward for deposit: {}", - base_yield, - max_reward_for_deposit - ); - - max_reward_for_deposit.saturating_sub(base_yield) - }; - - msg!("Additional reward amount: {}", additional_reward_amount); - - // Transfer any additional rewards to the ephemeral token account - if additional_reward_amount > 0 { - let campaign_key = ctx.accounts.campaign.key(); - let campaign_auth_seeds: &[&[&[u8]]] = &[&[ - CAMPAIGN_AUTH_SEED.as_bytes(), - campaign_key.as_ref(), - &[ctx.bumps.campaign_reward_vault_authority], - ]]; - anchor_spl::token_2022::spl_token_2022::onchain::invoke_transfer_checked( - ctx.accounts.token_program.key, - ctx.accounts.campaign_reward_vault.to_account_info(), - ctx.accounts.asset_mint.to_account_info(), - ctx.accounts.temp_token_account.to_account_info(), - ctx.accounts - .campaign_reward_vault_authority - .to_account_info(), - ctx.remaining_accounts, - additional_reward_amount, - ctx.accounts.asset_mint.decimals, - campaign_auth_seeds, - )?; - - ctx.accounts.temp_token_account.reload()?; - } - - msg!( - "Transferring {} tokens to user", - ctx.accounts.temp_token_account.amount - ); - - // Transfer the total:: amount to the user - let temp_token_seeds: &[&[&[u8]]] = &[&[ - TEMP_TOKEN_ACCOUNT_AUTH_SEED.as_bytes(), - deposit_key.as_ref(), - &[ctx.bumps.temp_token_account_authority], - ]]; - anchor_spl::token_2022::spl_token_2022::onchain::invoke_transfer_checked( - ctx.accounts.token_program.key, - ctx.accounts.temp_token_account.to_account_info(), - ctx.accounts.asset_mint.to_account_info(), - ctx.accounts.destination_account.to_account_info(), - ctx.accounts.temp_token_account_authority.to_account_info(), - ctx.remaining_accounts, - ctx.accounts.temp_token_account.amount, - ctx.accounts.asset_mint.decimals, - temp_token_seeds, - )?; - - // Close the temp token account - close_account(CpiContext::new_with_signer( - ctx.accounts.token_program.to_account_info(), - CloseAccount { - account: ctx.accounts.temp_token_account.to_account_info(), - destination: ctx.accounts.signer.to_account_info(), - authority: ctx.accounts.temp_token_account_authority.to_account_info(), - }, - &[&[ - TEMP_TOKEN_ACCOUNT_AUTH_SEED.as_bytes(), - ctx.accounts.deposit.key().as_ref(), - &[ctx.bumps.temp_token_account_authority], - ]], - ))?; - - Ok(()) -} - -#[derive(Accounts)] -pub struct EndDeposit<'info> { - #[account(address = deposit.campaign)] - pub campaign: Box>, - - #[account( - mut, - seeds = [ - CAMPAIGN_SEED.as_bytes(), - campaign.key().as_ref(), - ], - bump, - )] - pub campaign_reward_vault: Box>, - - #[account( - seeds = [ - CAMPAIGN_AUTH_SEED.as_bytes(), - campaign.key().as_ref(), - ], - bump, - )] - /// CHECK: Asserted by PDA derivation - pub campaign_reward_vault_authority: AccountInfo<'info>, - - #[account(mut, address = deposit.owner)] - pub signer: Signer<'info>, - - #[account( - mut, - close = signer, - )] - pub deposit: Box>, - - #[account( - seeds = [ - DEPOSIT_MFI_AUTH_SIGNER_SEED.as_bytes(), - deposit.key().as_ref(), - ], - bump, - )] - /// CHECK: Asserted by PDA derivation - pub mfi_pda_signer: AccountInfo<'info>, - - #[account( - init, - payer = signer, - token::mint = asset_mint, - token::authority = temp_token_account_authority, - )] - pub temp_token_account: Box>, - - #[account( - seeds = [ - TEMP_TOKEN_ACCOUNT_AUTH_SEED.as_bytes(), - deposit.key().as_ref(), - ], - bump, - )] - /// CHECK: Asserted by PDA derivation - pub temp_token_account_authority: AccountInfo<'info>, - - #[account(mut)] - /// CHECK: Asserted by token transfer - pub destination_account: AccountInfo<'info>, - - #[account(address = marginfi_bank.load()?.mint)] - /// CHECK: Asserted by constraint - pub asset_mint: InterfaceAccount<'info, Mint>, - - #[account( - mut, - seeds = [ - MARGINFI_ACCOUNT_SEED.as_bytes(), - deposit.key().as_ref(), - ], - bump, - )] - /// CHECK: Asserted by PDA derivation - pub marginfi_account: AccountInfo<'info>, - - /// CHECK: Asserted by CPI call - pub marginfi_group: AccountInfo<'info>, - - #[account( - mut, - address = campaign.marginfi_bank_pk, - )] - pub marginfi_bank: AccountLoader<'info, Bank>, - - /// CHECK: Asserted by CPI call - #[account(mut)] - pub marginfi_bank_vault: AccountInfo<'info>, - - // /// CHECK: Asserted by CPI call - // #[account()] - // pub bank_mint: InterfaceAccount<'info, Mint>, - /// CHECK: Asserted by CPI call - #[account(mut)] - pub marginfi_bank_vault_authority: AccountInfo<'info>, - - /// CHECK: Asserted by CPI call - pub marginfi_program: Program<'info, Marginfi>, - pub token_program: Interface<'info, TokenInterface>, - pub system_program: Program<'info, System>, -} diff --git a/programs/liquidity-incentive-program/src/instructions/mod.rs b/programs/liquidity-incentive-program/src/instructions/mod.rs deleted file mode 100644 index 3d0de2cde..000000000 --- a/programs/liquidity-incentive-program/src/instructions/mod.rs +++ /dev/null @@ -1,7 +0,0 @@ -pub mod create_campaign; -pub mod create_deposit; -pub mod end_deposit; - -pub use create_campaign::*; -pub use create_deposit::*; -pub use end_deposit::*; diff --git a/programs/liquidity-incentive-program/src/lib.rs b/programs/liquidity-incentive-program/src/lib.rs deleted file mode 100644 index d47a96b46..000000000 --- a/programs/liquidity-incentive-program/src/lib.rs +++ /dev/null @@ -1,80 +0,0 @@ -use anchor_lang::prelude::*; -use instructions::*; - -cfg_if::cfg_if! { - if #[cfg(feature = "mainnet-beta")] { - declare_id!("LipsxuAkFkwa4RKNzn51wAsW7Dedzt1RNHMkTkDEZUW"); - } else if #[cfg(feature = "devnet")] { - declare_id!("sexyDKo4Khm38YdJeiRdNNd5aMQqNtfDkxv7MnYNFeU"); - } else { - declare_id!("Lip1111111111111111111111111111111111111111"); - } -} - -pub mod constants; -pub mod errors; -mod instructions; -pub mod state; - -#[program] -pub mod liquidity_incentive_program { - use super::*; - - /// Creates a new liquidity incentive campaign (LIP). - /// - /// # Arguments - /// * `ctx`: Context struct containing the relevant accounts for the campaign. - /// * `lockup_period`: The length of time (in seconds) that a deposit must be locked up for in order to earn the full reward. - /// * `max_deposits`: The maximum number of tokens that can be deposited into the campaign by liquidity providers. - /// * `max_rewards`: The maximum amount of rewards that will be distributed to depositors, and also the amount of token rewards transferred into the vault by the campaign creator. - /// - /// # Returns - /// * `Ok(())` if the campaign was successfully created, or an error otherwise. - pub fn create_campaign<'info>( - ctx: Context<'_, '_, '_, 'info, CreateCampaign<'info>>, - lockup_period: u64, - max_deposits: u64, - max_rewards: u64, - ) -> Result<()> { - create_campaign::process(ctx, lockup_period, max_deposits, max_rewards) - } - - /// Creates a new deposit in an active liquidity incentive campaign (LIP). - /// - /// # Arguments - /// * `ctx`: Context struct containing the relevant accounts for the new deposit - /// * `amount`: The amount of tokens to be deposited. - /// - /// # Returns - /// * `Ok(())` if the deposit was successfully made, or an error otherwise. - /// - /// # Errors - /// * `LIPError::CampaignNotActive` if the relevant campaign is not active. - /// * `LIPError::DepositAmountTooLarge` is the deposit amount exceeds the amount of remaining deposits that can be made into the campaign. - pub fn create_deposit<'info>( - ctx: Context<'_, '_, '_, 'info, CreateDeposit<'info>>, - amount: u64, - ) -> Result<()> { - instructions::create_deposit::process(ctx, amount) - } - - /// After a lockup period has ended, closes a deposit and returns the initial deposit + earned rewards from a liquidity incentive campaign back to the liquidity depositor. - /// - /// # Arguments - /// * ctx: Context of the deposit to be closed - /// - /// # Returns - /// * A Result object which is Ok(()) if the deposit is closed and tokens are transferred successfully. - /// - /// # Errors - /// Returns an error if: - /// - /// * Solana clock timestamp is less than the deposit start time plus the lockup period (i.e. the lockup has not been reached) - /// * Bank redeem shares operation fails - /// * Reloading ephemeral token account fails - /// * Transferring additional reward to ephemeral token account fails - /// * Reloading ephemeral token account after transfer fails - pub fn end_deposit<'info>(ctx: Context<'_, '_, '_, 'info, EndDeposit<'info>>) -> Result<()> { - instructions::end_deposit::process(ctx) - } -} diff --git a/programs/liquidity-incentive-program/src/state.rs b/programs/liquidity-incentive-program/src/state.rs deleted file mode 100644 index aa51647ad..000000000 --- a/programs/liquidity-incentive-program/src/state.rs +++ /dev/null @@ -1,23 +0,0 @@ -use anchor_lang::prelude::*; - -#[account] -#[derive(Debug)] -pub struct Campaign { - pub admin: Pubkey, - pub lockup_period: u64, - pub active: bool, - pub max_deposits: u64, - pub remaining_capacity: u64, - pub max_rewards: u64, - pub marginfi_bank_pk: Pubkey, - pub _padding: [u64; 16], -} - -#[account] -pub struct Deposit { - pub owner: Pubkey, - pub amount: u64, - pub start_time: i64, - pub campaign: Pubkey, - pub _padding: [u64; 16], -} diff --git a/programs/liquidity-incentive-program/tests/lip.rs b/programs/liquidity-incentive-program/tests/lip.rs deleted file mode 100644 index 05422bc16..000000000 --- a/programs/liquidity-incentive-program/tests/lip.rs +++ /dev/null @@ -1,345 +0,0 @@ -use anyhow::Result; -use fixed::types::I80F48; -use fixtures::{ - assert_custom_error, native, - spl::{balance_of, TokenAccountFixture}, - test::{TestFixture, DEFAULT_SOL_TEST_BANK_CONFIG, DEFAULT_USDC_TEST_BANK_CONFIG}, - time, - utils::lip::get_reward_vault_address, -}; -use liquidity_incentive_program::errors::LIPError; -use marginfi::assert_eq_with_tolerance; -use solana_program_test::tokio; - -#[tokio::test] -async fn campaign_no_yield() -> Result<()> { - // Setup test executor with non-admin payer - let test_f = TestFixture::new(None).await; - - // Setup sample bank - let usdc_bank = test_f - .marginfi_group - .try_lending_pool_add_bank(&test_f.usdc_mint, *DEFAULT_USDC_TEST_BANK_CONFIG) - .await?; - - let campaign_reward_funding_account = test_f - .usdc_mint - .create_token_account_and_mint_to(1000) - .await; - - let campaign_res = usdc_bank - .try_create_campaign( - time!(1, "s"), - native!(1000, "USDC"), - native!(1000, "USDC"), - campaign_reward_funding_account.key, - ) - .await; - - assert!(campaign_res.is_ok()); - - let campaign_f = campaign_res.unwrap(); - - let deposit_funding_account = test_f - .usdc_mint - .create_token_account_and_mint_to(1001) - .await; - - let res = campaign_f - .try_create_deposit(deposit_funding_account.key, native!(1001, "USDC")) - .await; - - assert!(res.is_err()); - assert_custom_error!(res.unwrap_err(), LIPError::DepositAmountTooLarge); - - let res = campaign_f - .try_create_deposit(deposit_funding_account.key, native!(1000, "USDC")) - .await; - - assert!(res.is_ok()); - - let deposit_key = res.unwrap(); - - let campaign = campaign_f.load().await; - let deposit = campaign_f.load_deposit(deposit_key).await; - - assert_eq!(deposit.amount, native!(1000, "USDC")); - assert_eq!(campaign.max_deposits, native!(1000, "USDC")); - assert_eq!(campaign.remaining_capacity, 0); - - let destination_account = test_f.usdc_mint.create_empty_token_account().await; - let res = campaign_f - .try_end_deposit(deposit_key, destination_account.key) - .await; - - assert!(res.is_err()); - - test_f.advance_time(time!(1, "s")).await; - - let destination_account = test_f.usdc_mint.create_empty_token_account().await; - let res = campaign_f - .try_end_deposit(deposit_key, destination_account.key) - .await; - - assert!(res.is_ok()); - - let deposit = test_f - .context - .borrow_mut() - .banks_client - .get_account(deposit_key) - .await?; - - assert!(deposit.is_none()); - - assert_eq!( - balance_of(test_f.context.clone(), destination_account.key).await, - native!(2000, "USDC") - ); - - Ok(()) -} - -#[tokio::test] -async fn campaign_mixed_yield() -> Result<()> { - // Setup test executor with non-admin payer - let test_f = TestFixture::new(None).await; - - test_f.set_time(0); - - // Setup sample bank - let usdc_bank = test_f - .marginfi_group - .try_lending_pool_add_bank(&test_f.usdc_mint, *DEFAULT_USDC_TEST_BANK_CONFIG) - .await?; - - let sol_bank = test_f - .marginfi_group - .try_lending_pool_add_bank(&test_f.sol_mint, *DEFAULT_SOL_TEST_BANK_CONFIG) - .await?; - - let campaign_reward_funding_account = test_f - .usdc_mint - .create_token_account_and_mint_to(1000) - .await; - - let campaign_res = usdc_bank - .try_create_campaign( - time!(1, "s"), - native!(1000, "USDC"), - native!(1000, "USDC"), - campaign_reward_funding_account.key, - ) - .await; - - assert!(campaign_res.is_ok()); - - let campaign_f = campaign_res.unwrap(); - - let deposit_funding_account = test_f - .usdc_mint - .create_token_account_and_mint_to(1001) - .await; - - let deposit_key = campaign_f - .try_create_deposit(deposit_funding_account.key, native!(1000, "USDC")) - .await?; - - let borrower = test_f.create_marginfi_account().await; - - let sol_funding_account = test_f.sol_mint.create_token_account_and_mint_to(1000).await; - - borrower - .try_bank_deposit(sol_funding_account.key, &sol_bank, 1000, None) - .await?; - - let usdc_borrowing_account = test_f - .usdc_mint - .create_token_account_and_mint_to(10000) - .await; - - borrower - .try_bank_borrow(usdc_borrowing_account.key, &usdc_bank, 500) - .await?; - - test_f.advance_time(time!(1, "y")).await; - - borrower - .try_bank_repay(usdc_borrowing_account.key, &usdc_bank, 500, Some(true)) - .await?; - - let destination_account = test_f.usdc_mint.create_empty_token_account().await; - campaign_f - .try_end_deposit(deposit_key, destination_account.key) - .await?; - - assert_eq!( - balance_of(test_f.context.clone(), destination_account.key).await, - native!(2000, "USDC") - ); - - let reward_vault = TokenAccountFixture::fetch( - test_f.context.clone(), - get_reward_vault_address(campaign_f.key).0, - ) - .await; - - assert_eq_with_tolerance!( - reward_vault.balance().await as i64, - native!(300, "USDC") as i64, - native!(1, "USDC") as i64 - ); - - Ok(()) -} - -#[tokio::test] -async fn campaign_max_yield() -> Result<()> { - // Setup test executor with non-admin payer - let test_f = TestFixture::new(None).await; - - test_f.set_time(0); - - // Setup sample bank - let usdc_bank = test_f - .marginfi_group - .try_lending_pool_add_bank(&test_f.usdc_mint, *DEFAULT_USDC_TEST_BANK_CONFIG) - .await?; - - let sol_bank = test_f - .marginfi_group - .try_lending_pool_add_bank(&test_f.sol_mint, *DEFAULT_SOL_TEST_BANK_CONFIG) - .await?; - - let campaign_reward_funding_account = test_f - .usdc_mint - .create_token_account_and_mint_to(1000) - .await; - - let campaign_res = usdc_bank - .try_create_campaign( - time!(1, "s"), - native!(1000, "USDC"), - native!(1000, "USDC"), - campaign_reward_funding_account.key, - ) - .await; - - assert!(campaign_res.is_ok()); - - let campaign_f = campaign_res.unwrap(); - - let deposit_funding_account = test_f - .usdc_mint - .create_token_account_and_mint_to(1001) - .await; - - let deposit_key = campaign_f - .try_create_deposit(deposit_funding_account.key, native!(1000, "USDC")) - .await?; - - let borrower = test_f.create_marginfi_account().await; - - let sol_funding_account = test_f.sol_mint.create_token_account_and_mint_to(1000).await; - - borrower - .try_bank_deposit(sol_funding_account.key, &sol_bank, 1000, None) - .await?; - - let usdc_borrowing_account = test_f - .usdc_mint - .create_token_account_and_mint_to(10000) - .await; - - borrower - .try_bank_borrow(usdc_borrowing_account.key, &usdc_bank, 500) - .await?; - - test_f.advance_time(time!(10, "y")).await; - - borrower - .try_bank_repay(usdc_borrowing_account.key, &usdc_bank, 500, Some(true)) - .await?; - - let destination_account = test_f.usdc_mint.create_empty_token_account().await; - campaign_f - .try_end_deposit(deposit_key, destination_account.key) - .await?; - - assert_eq_with_tolerance!( - balance_of(test_f.context.clone(), destination_account.key).await as i64, - native!(4000, "USDC") as i64, - native!(1, "USDC") as i64 - ); - - let reward_vault = TokenAccountFixture::fetch( - test_f.context.clone(), - get_reward_vault_address(campaign_f.key).0, - ) - .await; - - assert_eq!(reward_vault.balance().await, native!(1000, "USDC")); - - Ok(()) -} - -#[tokio::test] -async fn campaign_neg_yield() -> Result<()> { - // Setup test executor with non-admin payer - let test_f = TestFixture::new(None).await; - - // Setup sample bank - let usdc_bank = test_f - .marginfi_group - .try_lending_pool_add_bank(&test_f.usdc_mint, *DEFAULT_USDC_TEST_BANK_CONFIG) - .await?; - - let campaign_reward_funding_account = test_f - .usdc_mint - .create_token_account_and_mint_to(1000) - .await; - - let campaign_f = usdc_bank - .try_create_campaign( - time!(1, "y"), - native!(1000, "USDC"), - native!(1000, "USDC"), - campaign_reward_funding_account.key, - ) - .await?; - - let deposit_funding_account = test_f - .usdc_mint - .create_token_account_and_mint_to(1001) - .await; - - let deposit_key = campaign_f - .try_create_deposit(deposit_funding_account.key, native!(1000, "USDC")) - .await?; - - test_f.advance_time(time!(1, "y")).await; - - usdc_bank - .set_asset_share_value(I80F48::from(usdc_bank.load().await.asset_share_value) / 2) - .await; - - let destination_account = test_f.usdc_mint.create_empty_token_account().await; - campaign_f - .try_end_deposit(deposit_key, destination_account.key) - .await?; - - assert_eq!( - balance_of(test_f.context.clone(), destination_account.key).await, - native!(1500, "USDC") - ); - - let reward_vault = TokenAccountFixture::fetch( - test_f.context.clone(), - get_reward_vault_address(campaign_f.key).0, - ) - .await; - - assert_eq!(reward_vault.balance().await, 0); - - Ok(()) -} diff --git a/programs/marginfi/Cargo.toml b/programs/marginfi/Cargo.toml index cf7b99ac6..b87c0e3d0 100644 --- a/programs/marginfi/Cargo.toml +++ b/programs/marginfi/Cargo.toml @@ -29,10 +29,10 @@ spl-transfer-hook-interface = { workspace = true } spl-tlv-account-resolution = { workspace = true } anchor-lang = { workspace = true } -anchor-lang-29 = { workspace = true } anchor-spl = { workspace = true } pyth-sdk-solana = { workspace = true } +anchor-lang-29 = { workspace = true } pyth-solana-receiver-sdk = { workspace = true } switchboard-solana = { workspace = true } switchboard-on-demand = { workspace = true } @@ -59,7 +59,6 @@ anyhow = "1.0.66" assert_matches = "1.5.0" base64 = "0.21.0" bincode = "1.3.3" -fixtures = { path = "../../test-utils", package = "test-utilities" } futures = "0.3.25" pretty_assertions = "1.2.1" rust_decimal = "*" diff --git a/programs/marginfi/src/state/marginfi_account.rs b/programs/marginfi/src/state/marginfi_account.rs index 3ef0ed96d..4cd1f0faf 100644 --- a/programs/marginfi/src/state/marginfi_account.rs +++ b/programs/marginfi/src/state/marginfi_account.rs @@ -833,7 +833,16 @@ assert_struct_size!(Balance, 104); assert_struct_align!(Balance, 8); #[repr(C)] #[derive( - AnchorDeserialize, AnchorSerialize, Copy, Clone, Zeroable, Pod, PartialEq, Eq, TypeLayout, + AnchorDeserialize, + AnchorSerialize, + Copy, + Clone, + Zeroable, + Pod, + PartialEq, + Eq, + TypeLayout, + Default, )] pub struct Balance { pub active: u8, diff --git a/programs/marginfi/src/state/price.rs b/programs/marginfi/src/state/price.rs index 99d3450a1..ee009660a 100644 --- a/programs/marginfi/src/state/price.rs +++ b/programs/marginfi/src/state/price.rs @@ -826,10 +826,21 @@ pub fn load_price_update_v2_checked(ai: &AccountInfo) -> MarginfiResult::DISCRIMINATOR, MarginfiError::PythPushInvalidAccount ); - - Ok(PriceUpdateV2::deserialize( - &mut &price_feed_data.as_ref()[8..], - )?) + Ok(PriceUpdateV2 { + write_authority: Pubkey::default(), + price_message: pyth_solana_receiver_sdk::price_update::PriceFeedMessage { + feed_id: [0; 32], + price: 0, + conf: 0, + exponent: 0, + publish_time: 0, + prev_publish_time: 0, + ema_price: 0, + ema_conf: 0, + }, + verification_level: pyth_solana_receiver_sdk::price_update::VerificationLevel::Full, + posted_slot: 0, + }) } #[cfg_attr(feature = "client", derive(Clone, Debug))] diff --git a/programs/marginfi/tests/admin_actions/account_transfer.rs b/programs/marginfi/tests/admin_actions/account_transfer.rs deleted file mode 100644 index c802298df..000000000 --- a/programs/marginfi/tests/admin_actions/account_transfer.rs +++ /dev/null @@ -1,81 +0,0 @@ -use fixtures::{assert_custom_error, test::TestFixture}; -use marginfi::{ - errors::MarginfiError, state::marginfi_account::ACCOUNT_TRANSFER_AUTHORITY_ALLOWED, -}; -use solana_program_test::tokio; -use solana_sdk::{signature::Keypair, signer::Signer}; - -// Test transfer account authority. -// No transfer flag set -- tx should fail. -// Set the flag and try again -- tx should succeed. -// RUST_BACKTRACE=1 cargo test-bpf marginfi_account_authority_transfer_no_flag_set -- --exact -#[tokio::test] -async fn marginfi_account_authority_transfer_no_flag_set() -> anyhow::Result<()> { - let test_f = TestFixture::new(None).await; - // Default account with no flags set - let marginfi_account = test_f.create_marginfi_account().await; - let new_authority = Keypair::new().pubkey(); - - let res = marginfi_account - .try_transfer_account_authority(new_authority, None) - .await; - - // Check transfer authority is unchanged - let account = marginfi_account.load().await; - assert_eq!(account.authority, test_f.payer()); - - // Assert the response is an error due to the lack of the correct flag - assert!(res.is_err()); - assert_custom_error!( - res.unwrap_err(), - MarginfiError::IllegalAccountAuthorityTransfer - ); - - // set the flag on the account - marginfi_account - .try_set_flag(ACCOUNT_TRANSFER_AUTHORITY_ALLOWED) - .await - .unwrap(); - - // Check transfer authority flag - let account = marginfi_account.load().await; - assert!(account.get_flag(ACCOUNT_TRANSFER_AUTHORITY_ALLOWED)); - - let new_authority_2 = Keypair::new().pubkey(); - let res = marginfi_account - .try_transfer_account_authority(new_authority_2, None) - .await; - - assert!(res.is_ok()); - - // Check transfer authority - let account = marginfi_account.load().await; - assert_eq!(account.authority, new_authority_2); - - Ok(()) -} - -#[tokio::test] -async fn marginfi_account_authority_transfer_not_account_owner() -> anyhow::Result<()> { - let test_f = TestFixture::new(None).await; - let marginfi_account = test_f.create_marginfi_account().await; - let new_authority = Keypair::new().pubkey(); - let signer = Keypair::new(); - - let tx = marginfi_account - .get_tx_transfer_account_authority(new_authority, Some(signer)) - .await; - - // Note: Sending this tx takes a very long time (longer than all the other tests combined) - // because for some reason it takes longer for a signature verification fail to return than it - // does for other errors. We simulate instead here for testing SPEEEEEED - let mut ctx = test_f.context.borrow_mut(); - let res = ctx.banks_client.simulate_transaction(tx).await; - let is_err = res.unwrap().result.unwrap().is_err(); - - // Assert the response is an error due to fact that a non-owner of the - // acount attempted to initialize this account transfer - assert!(is_err); - - Ok(()) -} diff --git a/programs/marginfi/tests/admin_actions/bankruptcy.rs b/programs/marginfi/tests/admin_actions/bankruptcy.rs deleted file mode 100644 index 4a8cc91b2..000000000 --- a/programs/marginfi/tests/admin_actions/bankruptcy.rs +++ /dev/null @@ -1,967 +0,0 @@ -use anchor_spl::token_2022::spl_token_2022::extension::{ - transfer_fee::TransferFeeConfig, BaseStateWithExtensions, -}; -use fixed::types::I80F48; -use fixed_macro::types::I80F48; -use fixtures::{assert_custom_error, assert_eq_noise, native, prelude::*}; -use marginfi::{ - prelude::MarginfiError, - state::marginfi_group::{BankConfig, BankVaultType}, -}; -use pretty_assertions::assert_eq; -use solana_program_test::*; -use test_case::test_case; - -#[test_case(BankMint::Usdc, BankMint::Sol)] -#[test_case(BankMint::UsdcSwb, BankMint::Sol)] -#[test_case(BankMint::Sol, BankMint::Usdc)] -#[test_case(BankMint::PyUSD, BankMint::SolSwb)] -#[test_case(BankMint::PyUSD, BankMint::T22WithFee)] -#[test_case(BankMint::T22WithFee, BankMint::Sol)] -#[tokio::test] -async fn marginfi_group_handle_bankruptcy_failure_not_bankrupt( - collateral_mint: BankMint, - debt_mint: BankMint, -) -> anyhow::Result<()> { - // ------------------------------------------------------------------------- - // Setup - // ------------------------------------------------------------------------- - - let mut test_f = TestFixture::new(Some(TestSettings::all_banks_payer_not_admin())).await; - let borrow_amount = 10_000.; - - // LP - - let lp_deposit_amount = 2. * borrow_amount; - let lp_wallet_balance = get_max_deposit_amount_pre_fee(lp_deposit_amount); - let lp_mfi_account_f = test_f.create_marginfi_account().await; - let lp_token_account_f_sol = test_f - .get_bank(&debt_mint) - .mint - .create_token_account_and_mint_to(lp_wallet_balance) - .await; - lp_mfi_account_f - .try_bank_deposit( - lp_token_account_f_sol.key, - test_f.get_bank(&debt_mint), - lp_deposit_amount, - None, - ) - .await?; - - // User - - let user_mfi_account_f = test_f.create_marginfi_account().await; - let sufficient_collateral_amount = test_f - .get_sufficient_collateral_for_outflow(borrow_amount, &collateral_mint, &debt_mint) - .await; - let user_wallet_balance = get_max_deposit_amount_pre_fee(sufficient_collateral_amount); - let user_collateral_token_account_f = test_f - .get_bank_mut(&collateral_mint) - .mint - .create_token_account_and_mint_to(user_wallet_balance) - .await; - let user_debt_token_account_f = test_f - .get_bank_mut(&debt_mint) - .mint - .create_empty_token_account() - .await; - user_mfi_account_f - .try_bank_deposit( - user_collateral_token_account_f.key, - test_f.get_bank(&collateral_mint), - sufficient_collateral_amount, - None, - ) - .await?; - user_mfi_account_f - .try_bank_borrow( - user_debt_token_account_f.key, - test_f.get_bank(&debt_mint), - borrow_amount, - ) - .await?; - - // ------------------------------------------------------------------------- - // Test - // ------------------------------------------------------------------------- - - let debt_bank_f = test_f.get_bank(&debt_mint); - - let res = test_f - .marginfi_group - .try_handle_bankruptcy(debt_bank_f, &user_mfi_account_f) - .await; - - assert!(res.is_err()); - assert_custom_error!(res.unwrap_err(), MarginfiError::AccountNotBankrupt); - - Ok(()) -} - -#[test_case(BankMint::Usdc, BankMint::Sol)] -#[test_case(BankMint::UsdcSwb, BankMint::Sol)] -#[test_case(BankMint::Sol, BankMint::Usdc)] -#[test_case(BankMint::PyUSD, BankMint::SolSwb)] -#[test_case(BankMint::PyUSD, BankMint::T22WithFee)] -#[test_case(BankMint::T22WithFee, BankMint::Sol)] -#[tokio::test] -async fn marginfi_group_handle_bankruptcy_failure_no_debt( - collateral_mint: BankMint, - debt_mint: BankMint, -) -> anyhow::Result<()> { - // ------------------------------------------------------------------------- - // Setup - // ------------------------------------------------------------------------- - - let mut test_f = TestFixture::new(Some(TestSettings::all_banks_payer_not_admin())).await; - let borrow_amount = 10_000.; - - // LP - - let lp_deposit_amount = 2. * borrow_amount; - let lp_wallet_balance = get_max_deposit_amount_pre_fee(lp_deposit_amount); - let lp_mfi_account_f = test_f.create_marginfi_account().await; - let lp_token_account_f_sol = test_f - .get_bank(&debt_mint) - .mint - .create_token_account_and_mint_to(lp_wallet_balance) - .await; - lp_mfi_account_f - .try_bank_deposit( - lp_token_account_f_sol.key, - test_f.get_bank(&debt_mint), - lp_deposit_amount, - None, - ) - .await?; - - // User - - let user_mfi_account_f = test_f.create_marginfi_account().await; - let sufficient_collateral_amount = test_f - .get_sufficient_collateral_for_outflow(borrow_amount, &collateral_mint, &debt_mint) - .await; - let user_wallet_balance = get_max_deposit_amount_pre_fee(sufficient_collateral_amount); - let user_collateral_token_account_f = test_f - .get_bank_mut(&collateral_mint) - .mint - .create_token_account_and_mint_to(user_wallet_balance) - .await; - let user_debt_token_account_f = test_f - .get_bank_mut(&debt_mint) - .mint - .create_empty_token_account() - .await; - user_mfi_account_f - .try_bank_deposit( - user_collateral_token_account_f.key, - test_f.get_bank(&collateral_mint), - sufficient_collateral_amount, - None, - ) - .await?; - user_mfi_account_f - .try_bank_borrow( - user_debt_token_account_f.key, - test_f.get_bank(&debt_mint), - borrow_amount, - ) - .await?; - - // ------------------------------------------------------------------------- - // Test - // ------------------------------------------------------------------------- - - let collateral_bank_f = test_f.get_bank(&collateral_mint); - - // Artificially nullify the collateral to place the account in a bankrupt state - let mut user_mfi_account = user_mfi_account_f.load().await; - user_mfi_account.lending_account.balances[0] - .asset_shares - .value = 0_i128.to_le_bytes(); - user_mfi_account_f.set_account(&user_mfi_account).await?; - - let res = test_f - .marginfi_group - .try_handle_bankruptcy(collateral_bank_f, &user_mfi_account_f) - .await; - - assert!(res.is_err()); - assert_custom_error!(res.unwrap_err(), MarginfiError::BalanceNotBadDebt); - - Ok(()) -} - -#[test_case(BankMint::Usdc, BankMint::Sol)] -#[test_case(BankMint::UsdcSwb, BankMint::Sol)] -#[test_case(BankMint::Sol, BankMint::Usdc)] -#[test_case(BankMint::PyUSD, BankMint::SolSwb)] -#[test_case(BankMint::PyUSD, BankMint::T22WithFee)] -#[test_case(BankMint::T22WithFee, BankMint::Sol)] -#[tokio::test] -async fn marginfi_group_handle_bankruptcy_success( - collateral_mint: BankMint, - debt_mint: BankMint, -) -> anyhow::Result<()> { - // ------------------------------------------------------------------------- - // Setup - // ------------------------------------------------------------------------- - - let mut test_f = TestFixture::new(Some(TestSettings::all_banks_payer_not_admin())).await; - let borrow_amount = 10_000.; - - // LP - - let lp_deposit_amount = 2. * borrow_amount; - let lp_wallet_balance = get_max_deposit_amount_pre_fee(lp_deposit_amount); - let lp_mfi_account_f = test_f.create_marginfi_account().await; - let lp_token_account_f_sol = test_f - .get_bank(&debt_mint) - .mint - .create_token_account_and_mint_to(lp_wallet_balance) - .await; - lp_mfi_account_f - .try_bank_deposit( - lp_token_account_f_sol.key, - test_f.get_bank(&debt_mint), - lp_deposit_amount, - None, - ) - .await?; - - // User - - let user_mfi_account_f = test_f.create_marginfi_account().await; - let sufficient_collateral_amount = test_f - .get_sufficient_collateral_for_outflow(borrow_amount, &collateral_mint, &debt_mint) - .await; - let user_wallet_balance = get_max_deposit_amount_pre_fee(sufficient_collateral_amount); - let user_collateral_token_account_f = test_f - .get_bank_mut(&collateral_mint) - .mint - .create_token_account_and_mint_to(user_wallet_balance) - .await; - let user_debt_token_account_f = test_f - .get_bank_mut(&debt_mint) - .mint - .create_empty_token_account() - .await; - user_mfi_account_f - .try_bank_deposit( - user_collateral_token_account_f.key, - test_f.get_bank(&collateral_mint), - sufficient_collateral_amount, - None, - ) - .await?; - user_mfi_account_f - .try_bank_borrow( - user_debt_token_account_f.key, - test_f.get_bank(&debt_mint), - borrow_amount, - ) - .await?; - - // ------------------------------------------------------------------------- - // Test - // ------------------------------------------------------------------------- - - // Artificially nullify the collateral to place the account in a bankrupt state - let mut user_mfi_account = user_mfi_account_f.load().await; - user_mfi_account.lending_account.balances[0] - .asset_shares - .value = 0_i128.to_le_bytes(); - user_mfi_account_f.set_account(&user_mfi_account).await?; - - let debt_bank_f = test_f.get_bank(&debt_mint); - - let res = test_f - .marginfi_group - .try_handle_bankruptcy(debt_bank_f, &user_mfi_account_f) - .await; - assert!(res.is_ok()); - - Ok(()) -} - -#[test_case(10_000., BankMint::Usdc, BankMint::Sol)] -#[test_case(10_000., BankMint::UsdcSwb, BankMint::Sol)] -#[test_case(10_000., BankMint::Sol, BankMint::Usdc)] -#[test_case(10_000., BankMint::PyUSD, BankMint::SolSwb)] -#[test_case(10_000., BankMint::PyUSD, BankMint::T22WithFee)] -#[test_case(10_000., BankMint::T22WithFee, BankMint::Sol)] -#[test_case(10_000., BankMint::Usdc, BankMint::SolSwbOrigFee)] // Sol @ ~ $153 -#[tokio::test] -async fn marginfi_group_handle_bankruptcy_success_fully_insured( - borrow_amount: f64, - collateral_mint: BankMint, - debt_mint: BankMint, -) -> anyhow::Result<()> { - // ------------------------------------------------------------------------- - // Setup - // ------------------------------------------------------------------------- - - let mut test_f = TestFixture::new(Some(TestSettings::all_banks_payer_not_admin())).await; - - // LP - - let lp_deposit_amount = 2. * borrow_amount; - let lp_wallet_balance = get_max_deposit_amount_pre_fee(lp_deposit_amount); - let lp_mfi_account_f = test_f.create_marginfi_account().await; - let lp_token_account_f_sol = test_f - .get_bank(&debt_mint) - .mint - .create_token_account_and_mint_to(lp_wallet_balance) - .await; - lp_mfi_account_f - .try_bank_deposit( - lp_token_account_f_sol.key, - test_f.get_bank(&debt_mint), - lp_deposit_amount, - None, - ) - .await?; - - // User - - let user_mfi_account_f = test_f.create_marginfi_account().await; - let sufficient_collateral_amount = test_f - .get_sufficient_collateral_for_outflow(borrow_amount, &collateral_mint, &debt_mint) - .await; - let user_wallet_balance = get_max_deposit_amount_pre_fee(sufficient_collateral_amount); - let user_collateral_token_account_f = test_f - .get_bank_mut(&collateral_mint) - .mint - .create_token_account_and_mint_to(user_wallet_balance) - .await; - let user_debt_token_account_f = test_f - .get_bank_mut(&debt_mint) - .mint - .create_empty_token_account() - .await; - user_mfi_account_f - .try_bank_deposit( - user_collateral_token_account_f.key, - test_f.get_bank(&collateral_mint), - sufficient_collateral_amount, - None, - ) - .await?; - user_mfi_account_f - .try_bank_borrow( - user_debt_token_account_f.key, - test_f.get_bank(&debt_mint), - borrow_amount, - ) - .await?; - - // ------------------------------------------------------------------------- - // Test - // ------------------------------------------------------------------------- - - assert_eq!( - user_debt_token_account_f.balance().await, - native!( - borrow_amount, - test_f.get_bank(&debt_mint).mint.mint.decimals, - f64 - ) - ); - - // Artificially nullify the collateral to place the account in a bankrupt state - let mut user_mfi_account = user_mfi_account_f.load().await; - user_mfi_account.lending_account.balances[0].asset_shares = I80F48::ZERO.into(); - user_mfi_account_f.set_account(&user_mfi_account).await?; - - { - let (insurance_vault, _) = test_f - .get_bank(&debt_mint) - .get_vault(BankVaultType::Insurance); - let max_amount_to_cover_bad_debt = get_max_deposit_amount_pre_fee(borrow_amount); - - test_f - .get_bank_mut(&debt_mint) - .mint - .mint_to(&insurance_vault, max_amount_to_cover_bad_debt) - .await; - } - - let debt_bank = test_f.get_bank(&debt_mint); - - let (pre_liquidity_vault_balance, pre_insurance_vault_balance) = ( - debt_bank - .get_vault_token_account(BankVaultType::Liquidity) - .await - .balance() - .await, - debt_bank - .get_vault_token_account(BankVaultType::Insurance) - .await - .balance() - .await, - ); - - test_f - .marginfi_group - .try_handle_bankruptcy(test_f.get_bank(&debt_mint), &user_mfi_account_f) - .await?; - - let (post_liquidity_vault_balance, post_insurance_vault_balance) = ( - debt_bank - .get_vault_token_account(BankVaultType::Liquidity) - .await - .balance() - .await, - debt_bank - .get_vault_token_account(BankVaultType::Insurance) - .await - .balance() - .await, - ); - - let user_mfi_account = user_mfi_account_f.load().await; - let user_collateral_balance = user_mfi_account.lending_account.balances[1]; - - // Check that all user debt has been covered - assert_eq!( - I80F48::from(user_collateral_balance.liability_shares), - I80F48::ZERO - ); - - let lp_mfi_account = lp_mfi_account_f.load().await; - let debt_bank = test_f.get_bank(&debt_mint).load().await; - - let lp_collateral_value = debt_bank.get_asset_amount( - lp_mfi_account.lending_account.balances[0] - .asset_shares - .into(), - )?; - - // Check that no loss was socialized - assert_eq_noise!( - lp_collateral_value, - I80F48::from(native!( - lp_deposit_amount, - test_f.get_bank(&debt_mint).mint.mint.decimals, - f64 - )), - I80F48::ONE - ); - - let debt_bank_mint_state = test_f.get_bank(&debt_mint).mint.load_state().await; - - let borrow_amount_native = native!( - borrow_amount, - test_f.get_bank(&debt_mint).mint.mint.decimals, - f64 - ); - let origination_fee_rate: I80F48 = debt_bank - .config - .interest_rate_config - .protocol_origination_fee - .into(); - let origination_fee: I80F48 = I80F48::from_num(borrow_amount_native) - .checked_mul(origination_fee_rate) - .unwrap() - .ceil(); // Round up when repaying - let origination_fee_u64: u64 = origination_fee.checked_to_num().expect("out of bounds"); - let actual_borrow_position = borrow_amount_native - + origination_fee_u64 - + debt_bank_mint_state - .get_extension::() - .map(|tf| { - tf.calculate_inverse_epoch_fee(0, borrow_amount_native) - .unwrap_or(0) - }) - .unwrap_or(0); - - let expected_insurance_vault_delta = I80F48::from( - actual_borrow_position - + debt_bank_mint_state - .get_extension::() - .map(|tf| { - tf.calculate_inverse_epoch_fee(0, actual_borrow_position) - .unwrap_or(0) - }) - .unwrap_or(0), - ); - - let expected_liquidity_vault_delta = I80F48::from(actual_borrow_position); - - let actual_liquidity_vault_delta = post_liquidity_vault_balance - pre_liquidity_vault_balance; - let actual_insurance_vault_delta = pre_insurance_vault_balance - post_insurance_vault_balance; - - assert_eq!(expected_insurance_vault_delta, actual_insurance_vault_delta); - assert_eq!(expected_liquidity_vault_delta, actual_liquidity_vault_delta); - - // Test account is disabled - - // Deposit 1 SOL - let res = user_mfi_account_f - .try_bank_deposit( - user_collateral_token_account_f.key, - test_f.get_bank(&collateral_mint), - 1, - None, - ) - .await; - - assert!(res.is_err()); - assert_custom_error!(res.unwrap_err(), MarginfiError::AccountDisabled); - - // Withdraw 1 SOL - let res = user_mfi_account_f - .try_bank_withdraw( - user_collateral_token_account_f.key, - test_f.get_bank(&collateral_mint), - 1, - None, - ) - .await; - - assert!(res.is_err()); - assert_custom_error!(res.unwrap_err(), MarginfiError::AccountDisabled); - - // Borrow 1 USDC - let res = user_mfi_account_f - .try_bank_borrow( - user_debt_token_account_f.key, - test_f.get_bank(&debt_mint), - 1, - ) - .await; - - assert!(res.is_err()); - assert_custom_error!(res.unwrap_err(), MarginfiError::AccountDisabled); - - // Repay 1 USDC - let res = user_mfi_account_f - .try_bank_repay( - user_debt_token_account_f.key, - test_f.get_bank(&debt_mint), - 1, - None, - ) - .await; - - assert!(res.is_err()); - assert_custom_error!(res.unwrap_err(), MarginfiError::AccountDisabled); - - Ok(()) -} - -#[test_case(10_000., 5000., BankMint::Usdc, BankMint::Sol)] -#[test_case(10_000., 5000., BankMint::UsdcSwb, BankMint::Sol)] -#[test_case(10_000., 5000., BankMint::Sol, BankMint::Usdc)] -#[test_case(10_000., 5000., BankMint::PyUSD, BankMint::SolSwb)] -#[test_case(10_000., 5000., BankMint::PyUSD, BankMint::T22WithFee)] -#[test_case(10_000., 5000., BankMint::T22WithFee, BankMint::Sol)] -#[tokio::test] -async fn marginfi_group_handle_bankruptcy_success_partially_insured( - borrow_amount: f64, - initial_insurance_vault_balance: f64, - collateral_mint: BankMint, - debt_mint: BankMint, -) -> anyhow::Result<()> { - // ------------------------------------------------------------------------- - // Setup - // ------------------------------------------------------------------------- - - let mut test_f = TestFixture::new(Some(TestSettings::all_banks_payer_not_admin())).await; - - // LP - - let lp_deposit_amount = 2. * borrow_amount; - let lp_wallet_balance = get_max_deposit_amount_pre_fee(lp_deposit_amount); - let lp_mfi_account_f = test_f.create_marginfi_account().await; - let lp_token_account_f_sol = test_f - .get_bank(&debt_mint) - .mint - .create_token_account_and_mint_to(lp_wallet_balance) - .await; - lp_mfi_account_f - .try_bank_deposit( - lp_token_account_f_sol.key, - test_f.get_bank(&debt_mint), - lp_deposit_amount, - None, - ) - .await?; - - // User - - let user_mfi_account_f = test_f.create_marginfi_account().await; - let sufficient_collateral_amount = test_f - .get_sufficient_collateral_for_outflow(borrow_amount, &collateral_mint, &debt_mint) - .await; - let user_wallet_balance = get_max_deposit_amount_pre_fee(sufficient_collateral_amount); - let user_collateral_token_account_f = test_f - .get_bank_mut(&collateral_mint) - .mint - .create_token_account_and_mint_to(user_wallet_balance) - .await; - let user_debt_token_account_f = test_f - .get_bank_mut(&debt_mint) - .mint - .create_empty_token_account() - .await; - user_mfi_account_f - .try_bank_deposit( - user_collateral_token_account_f.key, - test_f.get_bank(&collateral_mint), - sufficient_collateral_amount, - None, - ) - .await?; - user_mfi_account_f - .try_bank_borrow( - user_debt_token_account_f.key, - test_f.get_bank(&debt_mint), - borrow_amount, - ) - .await?; - - // ------------------------------------------------------------------------- - // Test - // ------------------------------------------------------------------------- - - // Artificially nullify the collateral to place the account in a bankrupt state - let mut user_mfi_account = user_mfi_account_f.load().await; - user_mfi_account.lending_account.balances[0].asset_shares = I80F48::ZERO.into(); - user_mfi_account_f.set_account(&user_mfi_account).await?; - - // Load up the insurance vault with the requested balance - let insurance_vault = test_f.get_bank(&debt_mint).load().await.insurance_vault; - test_f - .get_bank_mut(&debt_mint) - .mint - .mint_to(&insurance_vault, initial_insurance_vault_balance) - .await; - - let debt_bank_f = test_f.get_bank(&debt_mint); - let debt_bank = test_f.get_bank(&debt_mint).load().await; - let collateral_bank = test_f.get_bank(&collateral_mint).load().await; - - let (pre_lp_collateral_amount, pre_user_debt_amount, pre_liquidity_vault_balance) = ( - collateral_bank.get_liability_amount( - lp_mfi_account_f.load().await.lending_account.balances[0] - .asset_shares - .into(), - )?, - debt_bank.get_liability_amount( - user_mfi_account_f.load().await.lending_account.balances[1] - .liability_shares - .into(), - )?, - debt_bank_f - .get_vault_token_account(BankVaultType::Liquidity) - .await - .balance() - .await, - ); - - test_f - .marginfi_group - .try_handle_bankruptcy(test_f.get_bank(&debt_mint), &user_mfi_account_f) - .await?; - - let borrower_mfi_account = user_mfi_account_f.load().await; - let (post_user_debt_balance, post_liquidity_vault_balance) = ( - borrower_mfi_account.lending_account.balances[1], - debt_bank_f - .get_vault_token_account(BankVaultType::Liquidity) - .await - .balance() - .await, - ); - - assert_eq!( - I80F48::from(post_user_debt_balance.liability_shares), - I80F48::ZERO - ); - - let lp_mfi_account = lp_mfi_account_f.load().await; - let debt_bank = test_f.get_bank(&debt_mint).load().await; - - let actual_post_lender_collateral_amount = debt_bank.get_asset_amount( - lp_mfi_account.lending_account.balances[0] - .asset_shares - .into(), - )?; - - let debt_bank_mint_state = test_f.get_bank(&debt_mint).mint.load_state().await; - - let initial_insurance_vault_balance_native = native!( - initial_insurance_vault_balance, - test_f.get_bank(&debt_mint).mint.mint.decimals, - f64 - ); - let insurance_fund_fee = debt_bank_mint_state - .get_extension::() - .map(|tf| { - tf.calculate_epoch_fee(0, initial_insurance_vault_balance_native) - .unwrap_or(0) - }) - .unwrap_or(0); - - let available_insurance_amount = initial_insurance_vault_balance_native - insurance_fund_fee; - - let amount_not_covered = pre_user_debt_amount - I80F48::from(available_insurance_amount); - - let expected_post_lender_collateral_amount = pre_lp_collateral_amount - amount_not_covered; - assert_eq_noise!( - expected_post_lender_collateral_amount, - actual_post_lender_collateral_amount, - I80F48::ONE - ); - - let insurance_amount = test_f - .get_bank(&debt_mint) - .get_vault_token_account(BankVaultType::Insurance) - .await; - - assert_eq!(insurance_amount.balance().await, 0); - - let actual_liquidity_vault_delta = post_liquidity_vault_balance - pre_liquidity_vault_balance; - assert_eq!(available_insurance_amount, actual_liquidity_vault_delta); - - Ok(()) -} - -#[test_case(10_000., BankMint::Usdc, BankMint::Sol)] -#[test_case(10_000., BankMint::UsdcSwb, BankMint::Sol)] -#[test_case(10_000., BankMint::Sol, BankMint::Usdc)] -#[test_case(10_000., BankMint::PyUSD, BankMint::SolSwb)] -#[test_case(10_000., BankMint::PyUSD, BankMint::T22WithFee)] -#[test_case(10_000., BankMint::T22WithFee, BankMint::Sol)] -#[tokio::test] -async fn marginfi_group_handle_bankruptcy_success_not_insured( - borrow_amount: f64, - collateral_mint: BankMint, - debt_mint: BankMint, -) -> anyhow::Result<()> { - // ------------------------------------------------------------------------- - // Setup - // ------------------------------------------------------------------------- - - let mut test_f = TestFixture::new(Some(TestSettings::all_banks_payer_not_admin())).await; - - // LP - - let lp_deposit_amount = 2. * borrow_amount; - let lp_wallet_balance = get_max_deposit_amount_pre_fee(lp_deposit_amount); - let lp_mfi_account_f = test_f.create_marginfi_account().await; - let lp_token_account_f_sol = test_f - .get_bank(&debt_mint) - .mint - .create_token_account_and_mint_to(lp_wallet_balance) - .await; - lp_mfi_account_f - .try_bank_deposit( - lp_token_account_f_sol.key, - test_f.get_bank(&debt_mint), - lp_deposit_amount, - None, - ) - .await?; - - // User - - let user_mfi_account_f = test_f.create_marginfi_account().await; - let sufficient_collateral_amount = test_f - .get_sufficient_collateral_for_outflow(borrow_amount, &collateral_mint, &debt_mint) - .await; - let user_wallet_balance = get_max_deposit_amount_pre_fee(sufficient_collateral_amount); - let user_collateral_token_account_f = test_f - .get_bank_mut(&collateral_mint) - .mint - .create_token_account_and_mint_to(user_wallet_balance) - .await; - let user_debt_token_account_f = test_f - .get_bank_mut(&debt_mint) - .mint - .create_empty_token_account() - .await; - user_mfi_account_f - .try_bank_deposit( - user_collateral_token_account_f.key, - test_f.get_bank(&collateral_mint), - sufficient_collateral_amount, - None, - ) - .await?; - user_mfi_account_f - .try_bank_borrow( - user_debt_token_account_f.key, - test_f.get_bank(&debt_mint), - borrow_amount, - ) - .await?; - - // ------------------------------------------------------------------------- - // Test - // ------------------------------------------------------------------------- - - // Artificially nullify the collateral to place the account in a bankrupt state - let mut user_mfi_account = user_mfi_account_f.load().await; - user_mfi_account.lending_account.balances[0].asset_shares = I80F48::ZERO.into(); - user_mfi_account_f.set_account(&user_mfi_account).await?; - - test_f - .marginfi_group - .try_handle_bankruptcy(test_f.get_bank(&debt_mint), &user_mfi_account_f) - .await?; - - let user_mfi_account = user_mfi_account_f.load().await; - let user_collateral_balance = user_mfi_account.lending_account.balances[1]; - - assert_eq!( - I80F48::from(user_collateral_balance.liability_shares), - I80F48::ZERO - ); - - let lp_mfi_account = lp_mfi_account_f.load().await; - let debt_bank_f = test_f.get_bank(&debt_mint); - let debt_bank = debt_bank_f.load().await; - - let actual_lender_collateral_amount = debt_bank.get_asset_amount( - lp_mfi_account.lending_account.balances[0] - .asset_shares - .into(), - )?; - let borrow_amount_native = native!( - borrow_amount, - test_f.get_bank(&debt_mint).mint.mint.decimals, - f64 - ); - let borrow_amount_with_fee = borrow_amount_native - + debt_bank_f - .mint - .load_state() - .await - .get_extension::() - .map(|tf| { - tf.calculate_inverse_epoch_fee(0, borrow_amount_native) - .unwrap_or(0) - }) - .unwrap_or(0); - let expected_lender_collateral_amount = I80F48::from( - native!( - lp_deposit_amount, - test_f.get_bank(&debt_mint).mint.mint.decimals, - f64 - ) - borrow_amount_with_fee, - ); - - assert_eq_noise!( - actual_lender_collateral_amount, - expected_lender_collateral_amount, - I80F48::ONE - ); - - Ok(()) -} - -#[tokio::test] -async fn marginfi_group_handle_bankruptcy_success_not_insured_3_depositors() -> anyhow::Result<()> { - let test_f = TestFixture::new(Some(TestSettings { - banks: vec![ - TestBankSetting { - mint: BankMint::Usdc, - config: None, - }, - TestBankSetting { - mint: BankMint::Sol, - config: Some(BankConfig { - asset_weight_init: I80F48!(1).into(), - ..*DEFAULT_SOL_TEST_BANK_CONFIG - }), - }, - ], - protocol_fees: false, - })) - .await; - - let usdc_bank_f = test_f.get_bank(&BankMint::Usdc); - let sol_bank_f = test_f.get_bank(&BankMint::Sol); - - let lender_1_mfi_account_f = test_f.create_marginfi_account().await; - let lender_1_token_account = test_f - .usdc_mint - .create_token_account_and_mint_to(100_000) - .await; - lender_1_mfi_account_f - .try_bank_deposit(lender_1_token_account.key, usdc_bank_f, 100_000, None) - .await?; - - let lender_2_mfi_account_f = test_f.create_marginfi_account().await; - let lender_2_token_account = test_f - .usdc_mint - .create_token_account_and_mint_to(100_000) - .await; - lender_2_mfi_account_f - .try_bank_deposit(lender_2_token_account.key, usdc_bank_f, 100_000, None) - .await?; - - let lender_3_mfi_account_f = test_f.create_marginfi_account().await; - let lender_3_token_account = test_f - .usdc_mint - .create_token_account_and_mint_to(100_000) - .await; - lender_3_mfi_account_f - .try_bank_deposit(lender_3_token_account.key, usdc_bank_f, 100_000, None) - .await?; - - let borrower_mfi_account_f = test_f.create_marginfi_account().await; - let borrower_token_account_sol = test_f - .sol_mint - .create_token_account_and_mint_to(1_001) - .await; - borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_sol.key, sol_bank_f, 1_001, None) - .await?; - let borrower_token_account_usdc = test_f.usdc_mint.create_empty_token_account().await; - borrower_mfi_account_f - .try_bank_borrow(borrower_token_account_usdc.key, usdc_bank_f, 10_000) - .await?; - - let mut borrower_mfi_account = borrower_mfi_account_f.load().await; - borrower_mfi_account.lending_account.balances[0] - .asset_shares - .value = 0_i128.to_le_bytes(); - - borrower_mfi_account_f - .set_account(&borrower_mfi_account) - .await?; - - test_f - .marginfi_group - .try_handle_bankruptcy(usdc_bank_f, &borrower_mfi_account_f) - .await?; - - let borrower_mfi_account = borrower_mfi_account_f.load().await; - let borrower_usdc_balance = borrower_mfi_account.lending_account.balances[1]; - - assert_eq!( - I80F48::from(borrower_usdc_balance.liability_shares), - I80F48::ZERO - ); - - let lender_1_mfi_account = lender_1_mfi_account_f.load().await; - let usdc_bank = usdc_bank_f.load().await; - - let lender_usdc_value = usdc_bank.get_asset_amount( - lender_1_mfi_account.lending_account.balances[0] - .asset_shares - .into(), - )?; - - assert_eq_noise!( - lender_usdc_value, - I80F48::from(native!(96_666, "USDC")), - I80F48::from(native!(1, "USDC")) - ); - - Ok(()) -} diff --git a/programs/marginfi/tests/admin_actions/bankruptcy_auth.rs b/programs/marginfi/tests/admin_actions/bankruptcy_auth.rs deleted file mode 100644 index 24d3da9e1..000000000 --- a/programs/marginfi/tests/admin_actions/bankruptcy_auth.rs +++ /dev/null @@ -1,218 +0,0 @@ -use fixed_macro::types::I80F48; -use fixtures::{ - assert_custom_error, - test::{BankMint, TestBankSetting, TestFixture, TestSettings, DEFAULT_SOL_TEST_BANK_CONFIG}, -}; -use marginfi::{ - errors::MarginfiError, - state::{ - marginfi_account::ACCOUNT_DISABLED, - marginfi_group::{BankConfig, BankConfigOpt, BankVaultType}, - }, -}; -use solana_program_test::tokio; -use solana_sdk::pubkey::Pubkey; - -#[tokio::test] -async fn marginfi_group_handle_bankruptcy_unauthorized() -> anyhow::Result<()> { - let mut test_f = TestFixture::new(Some(TestSettings { - banks: vec![ - TestBankSetting { - mint: BankMint::Usdc, - config: None, - }, - TestBankSetting { - mint: BankMint::Sol, - config: Some(BankConfig { - asset_weight_init: I80F48!(1).into(), - ..*DEFAULT_SOL_TEST_BANK_CONFIG - }), - }, - ], - ..Default::default() - })) - .await; - - let lender_mfi_account_f = test_f.create_marginfi_account().await; - let lender_token_account_usdc = test_f - .usdc_mint - .create_token_account_and_mint_to(100_000) - .await; - lender_mfi_account_f - .try_bank_deposit( - lender_token_account_usdc.key, - test_f.get_bank(&BankMint::Usdc), - 100_000, - None, - ) - .await?; - - let borrower_account = test_f.create_marginfi_account().await; - let borrower_deposit_account = test_f - .sol_mint - .create_token_account_and_mint_to(1_001) - .await; - - borrower_account - .try_bank_deposit( - borrower_deposit_account.key, - test_f.get_bank(&BankMint::Sol), - 1_001, - None, - ) - .await?; - - let borrower_borrow_account = test_f.usdc_mint.create_empty_token_account().await; - - borrower_account - .try_bank_borrow( - borrower_borrow_account.key, - test_f.get_bank(&BankMint::Usdc), - 10_000, - ) - .await?; - - let mut borrower_mfi_account = borrower_account.load().await; - borrower_mfi_account.lending_account.balances[0] - .asset_shares - .value = 0_i128.to_le_bytes(); - borrower_account.set_account(&borrower_mfi_account).await?; - - { - let (insurance_vault, _) = test_f - .get_bank(&BankMint::Usdc) - .get_vault(BankVaultType::Insurance); - test_f - .get_bank_mut(&BankMint::Usdc) - .mint - .mint_to(&insurance_vault, 10_000) - .await; - } - - test_f - .marginfi_group - .try_update(Pubkey::new_unique(), false) - .await?; - - let bank = test_f.get_bank(&BankMint::Usdc); - - let res = test_f - .marginfi_group - .try_handle_bankruptcy(bank, &borrower_account) - .await; - - assert!(res.is_err()); - assert_custom_error!(res.unwrap_err(), MarginfiError::Unauthorized); - - Ok(()) -} - -#[tokio::test] -async fn marginfi_group_handle_bankruptcy_perimssionless() -> anyhow::Result<()> { - let mut test_f = TestFixture::new(Some(TestSettings { - banks: vec![ - TestBankSetting { - mint: BankMint::Usdc, - config: None, - }, - TestBankSetting { - mint: BankMint::Sol, - config: Some(BankConfig { - asset_weight_init: I80F48!(1).into(), - ..*DEFAULT_SOL_TEST_BANK_CONFIG - }), - }, - ], - ..Default::default() - })) - .await; - - let lender_mfi_account_f = test_f.create_marginfi_account().await; - let lender_token_account_usdc = test_f - .usdc_mint - .create_token_account_and_mint_to(100_000) - .await; - lender_mfi_account_f - .try_bank_deposit( - lender_token_account_usdc.key, - test_f.get_bank(&BankMint::Usdc), - 100_000, - None, - ) - .await?; - - let borrower_account = test_f.create_marginfi_account().await; - let borrower_deposit_account = test_f - .sol_mint - .create_token_account_and_mint_to(1_001) - .await; - - borrower_account - .try_bank_deposit( - borrower_deposit_account.key, - test_f.get_bank(&BankMint::Sol), - 1_001, - None, - ) - .await?; - - let borrower_borrow_account = test_f.usdc_mint.create_empty_token_account().await; - - borrower_account - .try_bank_borrow( - borrower_borrow_account.key, - test_f.get_bank(&BankMint::Usdc), - 10_000, - ) - .await?; - - let mut borrower_mfi_account = borrower_account.load().await; - borrower_mfi_account.lending_account.balances[0] - .asset_shares - .value = 0_i128.to_le_bytes(); - borrower_account.set_account(&borrower_mfi_account).await?; - - { - let (insurance_vault, _) = test_f - .get_bank(&BankMint::Usdc) - .get_vault(BankVaultType::Insurance); - test_f - .get_bank_mut(&BankMint::Usdc) - .mint - .mint_to(&insurance_vault, 10_000) - .await; - } - - let bank = test_f.get_bank(&BankMint::Usdc); - - bank.update_config( - BankConfigOpt { - permissionless_bad_debt_settlement: Some(true), - ..Default::default() - }, - None, - ) - .await?; - - test_f - .marginfi_group - .try_update(Pubkey::new_unique(), false) - .await?; - - let res = test_f - .marginfi_group - .try_handle_bankruptcy(bank, &borrower_account) - .await; - - assert!(res.is_ok()); - - // Check borrower account is disabled and shares are - let borrower_marginfi_account = borrower_account.load().await; - assert!(borrower_marginfi_account.get_flag(ACCOUNT_DISABLED)); - assert_eq!( - borrower_marginfi_account.lending_account.balances[1].liability_shares, - I80F48!(0.0).into() - ); - - Ok(()) -} diff --git a/programs/marginfi/tests/admin_actions/create_marginfi_group.rs b/programs/marginfi/tests/admin_actions/create_marginfi_group.rs deleted file mode 100644 index 13db1b55b..000000000 --- a/programs/marginfi/tests/admin_actions/create_marginfi_group.rs +++ /dev/null @@ -1,61 +0,0 @@ -use anchor_lang::{InstructionData, ToAccountMetas}; -use fixtures::prelude::*; -use marginfi::{constants::FEE_STATE_SEED, prelude::MarginfiGroup}; -use pretty_assertions::assert_eq; -use solana_program::{instruction::Instruction, system_program}; -use solana_program_test::*; -use solana_sdk::{pubkey::Pubkey, signature::Keypair, signer::Signer, transaction::Transaction}; - -#[tokio::test] -async fn marginfi_group_create_success() -> anyhow::Result<()> { - let test_f = TestFixture::new(None).await; - - // Create & initialize marginfi group - let marginfi_group_key = Keypair::new(); - - let (fee_state_key, _bump) = - Pubkey::find_program_address(&[FEE_STATE_SEED.as_bytes()], &marginfi::id()); - - let accounts = marginfi::accounts::MarginfiGroupInitialize { - marginfi_group: marginfi_group_key.pubkey(), - admin: test_f.payer(), - fee_state: fee_state_key, - system_program: system_program::id(), - }; - let init_marginfi_group_ix = Instruction { - program_id: marginfi::id(), - accounts: accounts.to_account_metas(Some(true)), - data: marginfi::instruction::MarginfiGroupInitialize { - is_arena_group: false, - } - .data(), - }; - let tx = Transaction::new_signed_with_payer( - &[init_marginfi_group_ix], - Some(&test_f.payer().clone()), - &[&test_f.payer_keypair(), &marginfi_group_key], - test_f.get_latest_blockhash().await, - ); - let res = test_f - .context - .borrow_mut() - .banks_client - .process_transaction(tx) - .await; - - assert!(res.is_ok()); - - // Fetch & deserialize marginfi group account - let marginfi_group: MarginfiGroup = test_f - .load_and_deserialize(&marginfi_group_key.pubkey()) - .await; - - // Check basic properties - assert_eq!(marginfi_group.admin, test_f.payer()); - // Program fees are always enabled by default (Note that mostly elsewhere in the test fixture, - // we send a config to disable them, to simplify testing) - assert_eq!(marginfi_group.program_fees_enabled(), true); - assert_eq!(marginfi_group.is_arena_group(), false); - - Ok(()) -} diff --git a/programs/marginfi/tests/admin_actions/interest_accrual.rs b/programs/marginfi/tests/admin_actions/interest_accrual.rs deleted file mode 100644 index 2892d0d18..000000000 --- a/programs/marginfi/tests/admin_actions/interest_accrual.rs +++ /dev/null @@ -1,210 +0,0 @@ -use anchor_lang::prelude::Clock; -use anchor_spl::associated_token::get_associated_token_address_with_program_id; -use fixed::types::I80F48; -use fixed_macro::types::I80F48; -use fixtures::{assert_eq_noise, native, prelude::*}; -use marginfi::state::marginfi_group::{Bank, BankConfig, BankVaultType, InterestRateConfig}; -use pretty_assertions::assert_eq; -use solana_program_test::*; - -#[tokio::test] -async fn marginfi_group_accrue_interest_rates_success_1() -> anyhow::Result<()> { - let test_f = TestFixture::new(Some(TestSettings { - banks: vec![ - TestBankSetting { - mint: BankMint::Usdc, - config: Some(BankConfig { - interest_rate_config: InterestRateConfig { - optimal_utilization_rate: I80F48!(0.9).into(), - plateau_interest_rate: I80F48!(1).into(), - ..*DEFAULT_TEST_BANK_INTEREST_RATE_CONFIG - }, - ..*DEFAULT_USDC_TEST_BANK_CONFIG - }), - }, - TestBankSetting { - mint: BankMint::Sol, - config: Some(BankConfig { - asset_weight_init: I80F48!(1).into(), - ..*DEFAULT_SOL_TEST_BANK_CONFIG - }), - }, - ], - protocol_fees: false, - })) - .await; - - let usdc_bank_f = test_f.get_bank(&BankMint::Usdc); - let sol_bank_f = test_f.get_bank(&BankMint::Sol); - - let lender_mfi_account_f = test_f.create_marginfi_account().await; - let lender_token_account_usdc = test_f.usdc_mint.create_token_account_and_mint_to(100).await; - lender_mfi_account_f - .try_bank_deposit(lender_token_account_usdc.key, usdc_bank_f, 100, None) - .await?; - - let borrower_mfi_account_f = test_f.create_marginfi_account().await; - let borrower_token_account_sol = test_f - .sol_mint - .create_token_account_and_mint_to(1_000) - .await; - borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_sol.key, sol_bank_f, 999, None) - .await?; - let borrower_token_account_usdc = test_f.usdc_mint.create_empty_token_account().await; - borrower_mfi_account_f - .try_bank_borrow(borrower_token_account_usdc.key, usdc_bank_f, 90) - .await?; - - { - let mut ctx = test_f.context.borrow_mut(); - let mut clock: Clock = ctx.banks_client.get_sysvar().await?; - // Advance clock by 1 year - clock.unix_timestamp += 365 * 24 * 60 * 60; - ctx.set_sysvar(&clock); - } - - test_f - .marginfi_group - .try_accrue_interest(usdc_bank_f) - .await?; - - let borrower_mfi_account = borrower_mfi_account_f.load().await; - let borrower_bank_account = borrower_mfi_account.lending_account.balances[1]; - let usdc_bank: Bank = usdc_bank_f.load().await; - let liabilities = - usdc_bank.get_liability_amount(borrower_bank_account.liability_shares.into())?; - - let lender_mfi_account = lender_mfi_account_f.load().await; - let lender_bank_account = lender_mfi_account.lending_account.balances[0]; - let assets = usdc_bank.get_asset_amount(lender_bank_account.asset_shares.into())?; - - assert_eq_noise!( - liabilities, - I80F48::from(native!(180, "USDC")), - I80F48!(100) - ); - assert_eq_noise!(assets, I80F48::from(native!(190, "USDC")), I80F48!(100)); - - Ok(()) -} - -#[tokio::test] -async fn marginfi_group_accrue_interest_rates_success_2() -> anyhow::Result<()> { - let test_f = TestFixture::new(Some(TestSettings { - banks: vec![ - TestBankSetting { - mint: BankMint::Usdc, - config: Some(BankConfig { - deposit_limit: native!(1_000_000_000, "USDC"), - interest_rate_config: InterestRateConfig { - optimal_utilization_rate: I80F48!(0.9).into(), - plateau_interest_rate: I80F48!(1).into(), - protocol_fixed_fee_apr: I80F48!(0.01).into(), - insurance_fee_fixed_apr: I80F48!(0.01).into(), - ..*DEFAULT_TEST_BANK_INTEREST_RATE_CONFIG - }, - ..*DEFAULT_USDC_TEST_BANK_CONFIG - }), - }, - TestBankSetting { - mint: BankMint::Sol, - config: Some(BankConfig { - asset_weight_init: I80F48!(1).into(), - deposit_limit: native!(200_000_000, "SOL"), - ..*DEFAULT_SOL_TEST_BANK_CONFIG - }), - }, - ], - protocol_fees: false, - })) - .await; - - let usdc_bank_f = test_f.get_bank(&BankMint::Usdc); - let sol_bank_f = test_f.get_bank(&BankMint::Sol); - - let lender_mfi_account_f = test_f.create_marginfi_account().await; - let lender_token_account_usdc = test_f - .usdc_mint - .create_token_account_and_mint_to(100_000_000) - .await; - lender_mfi_account_f - .try_bank_deposit( - lender_token_account_usdc.key, - usdc_bank_f, - 100_000_000, - None, - ) - .await?; - - let borrower_mfi_account_f = test_f.create_marginfi_account().await; - let borrower_token_account_sol = test_f - .sol_mint - .create_token_account_and_mint_to(10_000_000) - .await; - borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_sol.key, sol_bank_f, 10_000_000, None) - .await?; - let borrower_token_account_usdc = test_f.usdc_mint.create_empty_token_account().await; - borrower_mfi_account_f - .try_bank_borrow(borrower_token_account_usdc.key, usdc_bank_f, 90_000_000) - .await?; - - // Advance clock by 1 minute - { - let mut ctx = test_f.context.borrow_mut(); - let mut clock: Clock = ctx.banks_client.get_sysvar().await?; - clock.unix_timestamp += 60; - ctx.set_sysvar(&clock); - } - - test_f - .marginfi_group - .try_accrue_interest(usdc_bank_f) - .await?; - - // The program fee ata needs to exist, but doesn't need any assets. - { - let ctx = test_f.context.clone(); - let ata = TokenAccountFixture::new_from_ata( - ctx, - &test_f.usdc_mint.key, - &test_f.marginfi_group.fee_wallet, - &test_f.usdc_mint.token_program, - ) - .await; - let ata_expected = get_associated_token_address_with_program_id( - &test_f.marginfi_group.fee_wallet, - &test_f.usdc_mint.key, - &test_f.usdc_mint.token_program, - ); - assert_eq!(ata.key, ata_expected); - } - - test_f.marginfi_group.try_collect_fees(usdc_bank_f).await?; - - let borrower_mfi_account = borrower_mfi_account_f.load().await; - let borrower_bank_account = borrower_mfi_account.lending_account.balances[1]; - let usdc_bank = usdc_bank_f.load().await; - let liabilities = - usdc_bank.get_liability_amount(borrower_bank_account.liability_shares.into())?; - - let lender_mfi_account = lender_mfi_account_f.load().await; - let lender_bank_account = lender_mfi_account.lending_account.balances[0]; - let assets = usdc_bank.get_asset_amount(lender_bank_account.asset_shares.into())?; - - assert_eq_noise!(liabilities, I80F48!(90000174657530), I80F48!(10)); - assert_eq_noise!(assets, I80F48!(100000171232876), I80F48!(10)); - - let protocol_fees = usdc_bank_f - .get_vault_token_account(BankVaultType::Fee) - .await; - let insurance_fees = usdc_bank_f - .get_vault_token_account(BankVaultType::Insurance) - .await; - - assert_eq!(protocol_fees.balance().await, 1712328); - assert_eq!(insurance_fees.balance().await, 1712328); - - Ok(()) -} diff --git a/programs/marginfi/tests/admin_actions/mod.rs b/programs/marginfi/tests/admin_actions/mod.rs deleted file mode 100644 index d2fd32cf1..000000000 --- a/programs/marginfi/tests/admin_actions/mod.rs +++ /dev/null @@ -1,7 +0,0 @@ -mod account_transfer; -mod bankruptcy; -mod bankruptcy_auth; -mod create_marginfi_group; -mod interest_accrual; -mod setup_bank; -mod withdraw_fees; diff --git a/programs/marginfi/tests/admin_actions/setup_bank.rs b/programs/marginfi/tests/admin_actions/setup_bank.rs deleted file mode 100644 index b985519f3..000000000 --- a/programs/marginfi/tests/admin_actions/setup_bank.rs +++ /dev/null @@ -1,534 +0,0 @@ -use fixed::types::I80F48; -use fixed_macro::types::I80F48; -use fixtures::{assert_custom_error, prelude::*}; -use marginfi::{ - constants::{ - FREEZE_SETTINGS, INIT_BANK_ORIGINATION_FEE_DEFAULT, PERMISSIONLESS_BAD_DEBT_SETTLEMENT_FLAG, - }, - prelude::MarginfiError, - state::marginfi_group::{Bank, BankConfig, BankConfigOpt, BankVaultType}, -}; -use pretty_assertions::assert_eq; -use solana_program_test::*; -use solana_sdk::pubkey::Pubkey; -use test_case::test_case; - -#[tokio::test] -async fn add_bank_success() -> anyhow::Result<()> { - // Setup test executor with non-admin payer - let test_f = TestFixture::new(None).await; - - let fee_wallet = test_f.marginfi_group.fee_wallet; - - let mints = vec![ - ( - MintFixture::new(test_f.context.clone(), None, None).await, - *DEFAULT_USDC_TEST_BANK_CONFIG, - ), - ( - MintFixture::new_token_22( - test_f.context.clone(), - None, - None, - &[SupportedExtension::TransferFee], - ) - .await, - *DEFAULT_T22_WITH_FEE_TEST_BANK_CONFIG, - ), - ( - MintFixture::new_from_file(&test_f.context.clone(), "src/fixtures/pyUSD.json"), - *DEFAULT_PYUSD_TEST_BANK_CONFIG, - ), - ]; - - for (mint_f, bank_config) in mints { - // Load the fee state before the start of the test - let fee_balance_before: u64; - { - let mut ctx = test_f.context.borrow_mut(); - fee_balance_before = ctx - .banks_client - .get_account(fee_wallet) - .await - .unwrap() - .unwrap() - .lamports; - } - - let res = test_f - .marginfi_group - .try_lending_pool_add_bank(&mint_f, bank_config) - .await; - - // Check bank - let bank_f = res.unwrap(); - let Bank { - mint, - mint_decimals, - group, - asset_share_value, - liability_share_value, - liquidity_vault, - liquidity_vault_bump, - liquidity_vault_authority_bump, - insurance_vault, - insurance_vault_bump, - insurance_vault_authority_bump, - collected_insurance_fees_outstanding, - fee_vault, - fee_vault_bump, - fee_vault_authority_bump, - collected_group_fees_outstanding, - total_liability_shares, - total_asset_shares, - last_update, - config, - flags, - emissions_rate, - emissions_remaining, - emissions_mint, - collected_program_fees_outstanding, - _padding_0, - _padding_1, - .. // ignore internal padding - } = bank_f.load().await; - #[rustfmt::skip] - let _ = { - assert_eq!(mint, bank_f.mint.key); - assert_eq!(mint_decimals, bank_f.mint.load_state().await.base.decimals); - assert_eq!(group, test_f.marginfi_group.key); - assert_eq!(asset_share_value, I80F48!(1.0).into()); - assert_eq!(liability_share_value, I80F48!(1.0).into()); - assert_eq!(liquidity_vault, bank_f.get_vault(BankVaultType::Liquidity).0); - assert_eq!(liquidity_vault_bump, bank_f.get_vault(BankVaultType::Liquidity).1); - assert_eq!(liquidity_vault_authority_bump, bank_f.get_vault_authority(BankVaultType::Liquidity).1); - assert_eq!(insurance_vault, bank_f.get_vault(BankVaultType::Insurance).0); - assert_eq!(insurance_vault_bump, bank_f.get_vault(BankVaultType::Insurance).1); - assert_eq!(insurance_vault_authority_bump, bank_f.get_vault_authority(BankVaultType::Insurance).1); - assert_eq!(fee_vault, bank_f.get_vault(BankVaultType::Fee).0); - assert_eq!(fee_vault_bump, bank_f.get_vault(BankVaultType::Fee).1); - assert_eq!(fee_vault_authority_bump, bank_f.get_vault_authority(BankVaultType::Fee).1); - assert_eq!(collected_insurance_fees_outstanding, I80F48!(0.0).into()); - assert_eq!(collected_group_fees_outstanding, I80F48!(0.0).into()); - assert_eq!(total_liability_shares, I80F48!(0.0).into()); - assert_eq!(total_asset_shares, I80F48!(0.0).into()); - assert_eq!(config, bank_config); - assert_eq!(flags, 0); - assert_eq!(emissions_rate, 0); - assert_eq!(emissions_mint, Pubkey::new_from_array([0; 32])); - assert_eq!(emissions_remaining, I80F48!(0.0).into()); - assert_eq!(collected_program_fees_outstanding, I80F48!(0.0).into()); - - assert_eq!(_padding_0, <[[u64; 2]; 27] as Default>::default()); - assert_eq!(_padding_1, <[[u64; 2]; 32] as Default>::default()); - - // this is the only loosely checked field - assert!(last_update >= 0 && last_update <= 5); - }; - - // Load the fee state after the test - let fee_balance_after: u64; - { - let mut ctx = test_f.context.borrow_mut(); - fee_balance_after = ctx - .banks_client - .get_account(fee_wallet) - .await - .unwrap() - .unwrap() - .lamports; - } - let expected_fee_delta = INIT_BANK_ORIGINATION_FEE_DEFAULT as u64; - let actual_fee_delta = fee_balance_after - fee_balance_before; - assert_eq!(expected_fee_delta, actual_fee_delta); - } - - Ok(()) -} - -#[tokio::test] -async fn add_bank_with_seed_success() -> anyhow::Result<()> { - // Setup test executor with non-admin payer - let test_f = TestFixture::new(None).await; - - let fee_wallet = test_f.marginfi_group.fee_wallet; - - let mints = vec![ - ( - MintFixture::new(test_f.context.clone(), None, None).await, - *DEFAULT_USDC_TEST_BANK_CONFIG, - ), - ( - MintFixture::new_token_22( - test_f.context.clone(), - None, - None, - &[SupportedExtension::TransferFee], - ) - .await, - *DEFAULT_T22_WITH_FEE_TEST_BANK_CONFIG, - ), - ( - MintFixture::new_from_file(&test_f.context.clone(), "src/fixtures/pyUSD.json"), - *DEFAULT_PYUSD_TEST_BANK_CONFIG, - ), - ]; - - for (mint_f, bank_config) in mints { - let fee_balance_before: u64; - { - let mut ctx = test_f.context.borrow_mut(); - fee_balance_before = ctx - .banks_client - .get_account(fee_wallet) - .await - .unwrap() - .unwrap() - .lamports; - } - - let bank_seed = 1200_u64; - - let res = test_f - .marginfi_group - .try_lending_pool_add_bank_with_seed(&mint_f, bank_config, bank_seed) - .await; - assert!(res.is_ok()); - - // Check bank - let bank_f = res.unwrap(); - let Bank { - mint, - mint_decimals, - group, - asset_share_value, - liability_share_value, - liquidity_vault, - liquidity_vault_bump, - liquidity_vault_authority_bump, - insurance_vault, - insurance_vault_bump, - insurance_vault_authority_bump, - collected_insurance_fees_outstanding, - fee_vault, - fee_vault_bump, - fee_vault_authority_bump, - collected_group_fees_outstanding, - total_liability_shares, - total_asset_shares, - last_update, - config, - flags, - emissions_rate, - emissions_remaining, - emissions_mint, - collected_program_fees_outstanding, - _padding_0, - _padding_1, - .. // ignore internal padding - } = bank_f.load().await; - #[rustfmt::skip] - let _ = { - assert_eq!(mint, bank_f.mint.key); - assert_eq!(mint_decimals, bank_f.mint.load_state().await.base.decimals); - assert_eq!(group, test_f.marginfi_group.key); - assert_eq!(asset_share_value, I80F48!(1.0).into()); - assert_eq!(liability_share_value, I80F48!(1.0).into()); - assert_eq!(liquidity_vault, bank_f.get_vault(BankVaultType::Liquidity).0); - assert_eq!(liquidity_vault_bump, bank_f.get_vault(BankVaultType::Liquidity).1); - assert_eq!(liquidity_vault_authority_bump, bank_f.get_vault_authority(BankVaultType::Liquidity).1); - assert_eq!(insurance_vault, bank_f.get_vault(BankVaultType::Insurance).0); - assert_eq!(insurance_vault_bump, bank_f.get_vault(BankVaultType::Insurance).1); - assert_eq!(insurance_vault_authority_bump, bank_f.get_vault_authority(BankVaultType::Insurance).1); - assert_eq!(fee_vault, bank_f.get_vault(BankVaultType::Fee).0); - assert_eq!(fee_vault_bump, bank_f.get_vault(BankVaultType::Fee).1); - assert_eq!(fee_vault_authority_bump, bank_f.get_vault_authority(BankVaultType::Fee).1); - assert_eq!(collected_insurance_fees_outstanding, I80F48!(0.0).into()); - assert_eq!(collected_group_fees_outstanding, I80F48!(0.0).into()); - assert_eq!(total_liability_shares, I80F48!(0.0).into()); - assert_eq!(total_asset_shares, I80F48!(0.0).into()); - assert_eq!(config, bank_config); - assert_eq!(flags, 0); - assert_eq!(emissions_rate, 0); - assert_eq!(emissions_mint, Pubkey::new_from_array([0; 32])); - assert_eq!(emissions_remaining, I80F48!(0.0).into()); - assert_eq!(collected_program_fees_outstanding, I80F48!(0.0).into()); - - assert_eq!(_padding_0, <[[u64; 2]; 27] as Default>::default()); - assert_eq!(_padding_1, <[[u64; 2]; 32] as Default>::default()); - - // this is the only loosely checked field - assert!(last_update >= 0 && last_update <= 5); - }; - - let fee_balance_after: u64; - { - let mut ctx = test_f.context.borrow_mut(); - fee_balance_after = ctx - .banks_client - .get_account(fee_wallet) - .await - .unwrap() - .unwrap() - .lamports; - } - let expected_fee_delta = INIT_BANK_ORIGINATION_FEE_DEFAULT as u64; - let actual_fee_delta = fee_balance_after - fee_balance_before; - assert_eq!(expected_fee_delta, actual_fee_delta); - } - - Ok(()) -} - -#[tokio::test] -async fn marginfi_group_add_bank_failure_inexistent_pyth_feed() -> anyhow::Result<()> { - // Setup test executor with non-admin payer - let test_f = TestFixture::new(None).await; - - let bank_asset_mint_fixture = MintFixture::new(test_f.context.clone(), None, None).await; - - let res = test_f - .marginfi_group - .try_lending_pool_add_bank( - &bank_asset_mint_fixture, - BankConfig { - oracle_setup: marginfi::state::price::OracleSetup::PythLegacy, - oracle_keys: create_oracle_key_array(INEXISTENT_PYTH_USDC_FEED), - ..*DEFAULT_USDC_TEST_BANK_CONFIG - }, - ) - .await; - - assert!(res.is_err()); - assert_custom_error!(res.unwrap_err(), MarginfiError::InternalLogicError); - - Ok(()) -} - -#[test_case(BankMint::Usdc)] -#[test_case(BankMint::PyUSD)] -#[test_case(BankMint::T22WithFee)] -#[test_case(BankMint::SolSwbPull)] -#[tokio::test] -async fn configure_bank_success(bank_mint: BankMint) -> anyhow::Result<()> { - let test_f = TestFixture::new(Some(TestSettings::all_banks_payer_not_admin())).await; - - let bank = test_f.get_bank(&bank_mint); - let old_bank = bank.load().await; - - let config_bank_opt = BankConfigOpt { - interest_rate_config: Some(marginfi::state::marginfi_group::InterestRateConfigOpt { - optimal_utilization_rate: Some(I80F48::from_num(0.91).into()), - plateau_interest_rate: Some(I80F48::from_num(0.44).into()), - max_interest_rate: Some(I80F48::from_num(1.44).into()), - insurance_fee_fixed_apr: Some(I80F48::from_num(0.13).into()), - insurance_ir_fee: Some(I80F48::from_num(0.11).into()), - protocol_fixed_fee_apr: Some(I80F48::from_num(0.51).into()), - protocol_ir_fee: Some(I80F48::from_num(0.011).into()), - protocol_origination_fee: Some(I80F48::ZERO.into()), - }), - ..BankConfigOpt::default() - }; - let res = bank.update_config(config_bank_opt.clone(), None).await; - assert!(res.is_ok()); - - // Load bank and check each property in config matches - // Ensure bank didn't change any other fields. Only need to check the opt fields - - let bank: Bank = test_f.load_and_deserialize(&bank.key).await; - let BankConfigOpt { - interest_rate_config, - asset_weight_init, - asset_weight_maint, - liability_weight_init, - liability_weight_maint, - deposit_limit, - borrow_limit, - operational_state, - risk_tier, - asset_tag, - total_asset_value_init_limit, - oracle_max_age, - permissionless_bad_debt_settlement, - freeze_settings, - } = &config_bank_opt; - // Compare bank field to opt field if Some, otherwise compare to old bank field - macro_rules! check_bank_field { - ($field:tt, $subfield:tt) => { - assert_eq!( - bank.config.$field.$subfield, - $field - .as_ref() - .map(|opt| opt - .$subfield - .clone() - .unwrap_or(old_bank.config.$field.$subfield)) - .unwrap() - ); - }; - - ($field:tt) => { - assert_eq!(bank.config.$field, $field.unwrap_or(old_bank.config.$field)); - }; - } - - let _ = { - check_bank_field!(interest_rate_config, optimal_utilization_rate); - check_bank_field!(interest_rate_config, plateau_interest_rate); - check_bank_field!(interest_rate_config, max_interest_rate); - check_bank_field!(interest_rate_config, insurance_fee_fixed_apr); - check_bank_field!(interest_rate_config, insurance_ir_fee); - check_bank_field!(interest_rate_config, protocol_fixed_fee_apr); - check_bank_field!(interest_rate_config, protocol_ir_fee); - check_bank_field!(interest_rate_config, protocol_origination_fee); - - check_bank_field!(asset_weight_init); - check_bank_field!(asset_weight_maint); - check_bank_field!(liability_weight_init); - check_bank_field!(liability_weight_maint); - check_bank_field!(deposit_limit); - check_bank_field!(borrow_limit); - check_bank_field!(operational_state); - check_bank_field!(risk_tier); - check_bank_field!(asset_tag); - check_bank_field!(total_asset_value_init_limit); - check_bank_field!(oracle_max_age); - - assert!(permissionless_bad_debt_settlement - // If Some(...) check flag set properly - .map(|set| set == bank.get_flag(PERMISSIONLESS_BAD_DEBT_SETTLEMENT_FLAG)) - // If None check flag is unchanged - .unwrap_or( - bank.get_flag(PERMISSIONLESS_BAD_DEBT_SETTLEMENT_FLAG) - == old_bank.get_flag(PERMISSIONLESS_BAD_DEBT_SETTLEMENT_FLAG) - )); - - assert!(freeze_settings - // If Some(...) check flag set properly - .map(|set| set == bank.get_flag(FREEZE_SETTINGS)) - // If None check flag is unchanged - .unwrap_or(bank.get_flag(FREEZE_SETTINGS) == old_bank.get_flag(FREEZE_SETTINGS))); - - // Oracles no longer update in the standard config instruction - assert_eq!( - bank.config.oracle_keys, old_bank.config.oracle_keys, - "The config does not update oracles, try config_oracle" - ); - assert_eq!( - bank.config.oracle_setup, old_bank.config.oracle_setup, - "The config does not update oracles, try config_oracle" - ); - }; - - Ok(()) -} - -#[tokio::test] -async fn add_too_many_arena_banks() -> anyhow::Result<()> { - let test_f = TestFixture::new(None).await; - let group_before = test_f.marginfi_group.load().await; - - let res = test_f - .marginfi_group - .try_update(group_before.admin, true) - .await; - assert!(res.is_ok()); - let group_after = test_f.marginfi_group.load().await; - assert_eq!(group_after.is_arena_group(), true); - - // The first two banks/mints, which will succeed - let mints = vec![ - ( - MintFixture::new(test_f.context.clone(), None, None).await, - *DEFAULT_USDC_TEST_BANK_CONFIG, - ), - ( - MintFixture::new_token_22( - test_f.context.clone(), - None, - None, - &[SupportedExtension::TransferFee], - ) - .await, - *DEFAULT_T22_WITH_FEE_TEST_BANK_CONFIG, - ), - ]; - - for (mint_f, bank_config) in mints { - let res = test_f - .marginfi_group - .try_lending_pool_add_bank(&mint_f, bank_config) - .await; - assert!(res.is_ok()); - } - - // Adding a third bank fails - let another_mint = - MintFixture::new_from_file(&test_f.context.clone(), "src/fixtures/pyUSD.json"); - let another_config = *DEFAULT_PYUSD_TEST_BANK_CONFIG; - - let res = test_f - .marginfi_group - .try_lending_pool_add_bank(&another_mint, another_config) - .await; - - assert!(res.is_err()); - assert_custom_error!(res.unwrap_err(), MarginfiError::ArenaBankLimit); - - // Arena banks cannot be restored to non-arena - - let res = test_f - .marginfi_group - .try_update(group_before.admin, false) - .await; - assert!(res.is_err()); - assert_custom_error!(res.unwrap_err(), MarginfiError::ArenaSettingCannotChange); - - Ok(()) -} - -#[tokio::test] -async fn config_group_as_arena_too_many_banks() -> anyhow::Result<()> { - let test_f = TestFixture::new(None).await; - - // Add three banks - let mints = vec![ - ( - MintFixture::new(test_f.context.clone(), None, None).await, - *DEFAULT_USDC_TEST_BANK_CONFIG, - ), - ( - MintFixture::new_token_22( - test_f.context.clone(), - None, - None, - &[SupportedExtension::TransferFee], - ) - .await, - *DEFAULT_T22_WITH_FEE_TEST_BANK_CONFIG, - ), - ( - MintFixture::new_from_file(&test_f.context.clone(), "src/fixtures/pyUSD.json"), - *DEFAULT_PYUSD_TEST_BANK_CONFIG, - ), - ]; - - for (mint_f, bank_config) in mints { - let res = test_f - .marginfi_group - .try_lending_pool_add_bank(&mint_f, bank_config) - .await; - assert!(res.is_ok()); - } - - let group_before = test_f.marginfi_group.load().await; - let res = test_f - .marginfi_group - .try_update(group_before.admin, true) - .await; - - assert!(res.is_err()); - assert_custom_error!(res.unwrap_err(), MarginfiError::ArenaBankLimit); - - Ok(()) -} diff --git a/programs/marginfi/tests/admin_actions/withdraw_fees.rs b/programs/marginfi/tests/admin_actions/withdraw_fees.rs deleted file mode 100644 index 1caf3531b..000000000 --- a/programs/marginfi/tests/admin_actions/withdraw_fees.rs +++ /dev/null @@ -1,136 +0,0 @@ -use anchor_lang::error::ErrorCode; -use anchor_spl::token_2022::spl_token_2022::extension::{ - transfer_fee::TransferFeeConfig, BaseStateWithExtensions, -}; -use fixtures::{ - assert_anchor_error, - test::{BankMint, TestFixture, TestSettings}, -}; -use solana_program_test::tokio; -use solana_sdk::pubkey::Pubkey; -use test_case::test_case; - -#[test_case(BankMint::Usdc)] -#[test_case(BankMint::Sol)] -#[test_case(BankMint::PyUSD)] -#[test_case(BankMint::T22WithFee)] -#[tokio::test] -async fn marginfi_group_withdraw_fees_and_insurance_fund_as_admin_success( - bank_mint: BankMint, -) -> anyhow::Result<()> { - // Setup test executor with non-admin payer - let mut test_f = TestFixture::new(Some(TestSettings::all_banks_payer_not_admin())).await; - - let bank_f = test_f.banks.get_mut(&bank_mint).unwrap(); - - let insurance_vault_balance = 1_000; - let fee_vault_balance = 750; - - // Mint `insurance_vault_balance` USDC to the insurance vault - let bank = bank_f.load().await; - bank_f - .mint - .mint_to(&bank.insurance_vault, insurance_vault_balance as f64) - .await; - - // Create a receiving account and try to withdraw `insurance_vault_balance` USDC from the insurance vault - let receiving_account = bank_f.mint.create_empty_token_account().await; - bank_f - .try_withdraw_insurance(&receiving_account, insurance_vault_balance) - .await?; - - let transfer_fee = bank_f - .mint - .load_state() - .await - .get_extension::() - .map(|tf| { - tf.calculate_epoch_fee(0, insurance_vault_balance) - .unwrap_or(0) - }) - .unwrap_or(0); - - let expected_received_balance = insurance_vault_balance - transfer_fee; - assert_eq!(receiving_account.balance().await, expected_received_balance); // Verifies that the receiving account balance is 1000 USDC - - // Mint `fee_vault_balance` USDC to the fee vault - bank_f - .mint - .mint_to(&bank.fee_vault, fee_vault_balance as f64) - .await; - - // Create a receiving account and try to withdraw `fee_vault_balance` USDC from the fee vault - let receiving_account = bank_f.mint.create_empty_token_account().await; - bank_f - .try_withdraw_fees(&receiving_account, fee_vault_balance) - .await?; - - let transfer_fee = bank_f - .mint - .load_state() - .await - .get_extension::() - .map(|tf| tf.calculate_epoch_fee(0, fee_vault_balance).unwrap_or(0)) - .unwrap_or(0); - - let expected_received_balance = fee_vault_balance - transfer_fee; - assert_eq!(receiving_account.balance().await, expected_received_balance); // Verifies that the receiving account balance is 750 USDC - - Ok(()) -} - -#[test_case(BankMint::Usdc)] -#[test_case(BankMint::Sol)] -#[test_case(BankMint::PyUSD)] -#[test_case(BankMint::T22WithFee)] -#[tokio::test] -async fn marginfi_group_withdraw_fees_and_insurance_fund_as_non_admin_failure( - bank_mint: BankMint, -) -> anyhow::Result<()> { - // Setup test executor with non-admin payer - let mut test_f = TestFixture::new(Some(TestSettings::all_banks_payer_not_admin())).await; - - let bank_f = test_f.banks.get_mut(&bank_mint).unwrap(); - let bank = bank_f.load().await; - - let insurance_vault_balance = 1_000; - let fee_vault_balance = 750; - - // Update the admin of the marginfi group - test_f - .marginfi_group - .try_update(Pubkey::new_unique(), false) - .await?; - - // Mint `insurance_vault_balance` USDC to the insurance vault - bank_f - .mint - .mint_to(&bank.insurance_vault, insurance_vault_balance as f64) - .await; - - // Create a receiving account and try to withdraw `insurance_vault_balance` USDC from the insurance vault - let receiving_account = bank_f.mint.create_empty_token_account().await; - let res = bank_f - .try_withdraw_insurance(&receiving_account, insurance_vault_balance) - .await; - - // Unable to withdraw 1000 USDC from the insurance vault, because the signer is not the admin - assert_anchor_error!(res.unwrap_err(), ErrorCode::ConstraintHasOne); - - // Mint `fee_vault_balance` USDC to the fee vault - bank_f - .mint - .mint_to(&bank.fee_vault, fee_vault_balance as f64) - .await; - - // Create a receiving account and try to withdraw `fee_vault_balance` USDC from the fee vault - let receiving_account = bank_f.mint.create_empty_token_account().await; - let res = bank_f - .try_withdraw_fees(&receiving_account, fee_vault_balance) - .await; - - // Unable to withdraw `fee_vault_balance` USDC from the fee vault, because the signer is not the admin - assert_anchor_error!(res.unwrap_err(), ErrorCode::ConstraintHasOne); - - Ok(()) -} diff --git a/programs/marginfi/tests/fixtures/bank/bank_pyusd_230822.json b/programs/marginfi/tests/fixtures/bank/bank_pyusd_230822.json deleted file mode 100644 index 3ab9e482d..000000000 --- a/programs/marginfi/tests/fixtures/bank/bank_pyusd_230822.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "pubkey": "8UEiPmgZHXXEDrqLS3oiTxQxTbeYTtPbeMBxAd2XGbpu", - "account": { - "lamports": 13864320, - "data": [ - "jjGm8jJCYbwXkkg7bIoqh7dHHYFPlZH5OVyECpzj2fTVun06S4p0ngY5FC9oL9g4hJbsvVEG8Vx5TCR3Qzgo+mZC2+v3IANKYQAAAAAAAACibHm/BQABAAAAAAAAAAAAWLyUcWcAAQAAAAAAAAAAAPTXvfK6z6svhbXWDfTOr3olZx7OmKfKqIafQ/kPPiJu+f83ZEO178ClXtlqcK24JUSCeqEA6uSI3AL1GNNmaP34ff/+AAAAAIOly76Ug4MNAAAAAAAAAACUc8uy2ZCNgFnDRd1BWM/oqjuaLwvhpWZmB5eoAZsWmf/9AAAAAAAAVy1QjSqN+k6KPAAAAAAAAKrxZSvYs7NKmgbRAQAAAAAQ+cJH1DbWP7NoYCQAAAAAsMPGZgAAAAAAAABmZuYAAAAAAAAAAAAAAAAAMzPzAAAAAAAAAAAAAAAAAAAAQAEAAAAAAAAAAACamZmZmRkBAAAAAAAAAAAAAIDKOWEkAADNzMzMzMwAAAAAAAAAAAAAmpmZmZkZAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMP1KFyPAgAAAAAAAAAAAADNzMzMzAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABA8HaG3PX8B593VSzdmz3/NZEOVrRT3CqcG7FOExZ52aSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIEqp0QEAAAAAAAAAAAAAAAAAAAAAAAAsAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAQmAIAAAAAAAA7mF+QrK2Sg2ceAAAAAAAXkkg7bIoqh7dHHYFPlZH5OVyECpzj2fTVun06S4p0ngAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", - "base64" - ], - "owner": "MFv2hWf31Z9kbCa1snEPYctwafyhdvnV7FZnsebVacA", - "executable": false, - "rentEpoch": 18446744073709551615, - "space": 1864 - } -} \ No newline at end of file diff --git a/programs/marginfi/tests/fixtures/bank/bank_sample_1.json b/programs/marginfi/tests/fixtures/bank/bank_sample_1.json deleted file mode 100644 index f46604262..000000000 --- a/programs/marginfi/tests/fixtures/bank/bank_sample_1.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "pubkey": "Bohoc1ikHLD7xKJuzTyiTyCwzaL5N7ggJQu75A8mKYM8", - "account": { - "lamports": 13864320, - "data": [ - "jjGm8jJCYbz80UHpgyyvEK2RdJXKDycbWyk81HAn6nNwB+1A6zmgvQk5FC9oL9g4hJbsvVEG8Vx5TCR3Qzgo+mZC2+v3IANKYQAAAAAAAAAbBHbIJAABAAAAAAAAAAAAaENIceMBAQAAAAAAAAAAAB+iaLGansj+HjycPRUarYm0OCneWoI8/g/hrkaIiEaM//0mWL6AcssKMDlxAysMsEftXeh4456WZtud2WzjVjfyYv7/AAAAAMuqkOyPlPbuAAAAAAAAAAAmopPLsVGgIS9sZav/y8zbErP6Yi329U+OsJ1apDs2nP//AAAAAAAAhTuG9spaV4WBTQgAAAAAALLGK2jU2yJ7q2KLSAAAAADlfiuK/XLXBNVGAowDAAAAP28GZgAAAAAAAABmZqYAAAAAAAAAAAAAAAAAzczMAAAAAAAAAAAAAM3MzMzMTAEAAAAAAAAAAAAzMzMzMzMBAAAAAAAAAAAAAACNSf0aBwDNzMzMzMwAAAAAAAAAAAAAmpmZmZkZAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMP1KFyPAgAAAAAAAAAAAADNzMzMzAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAWe+n1Gblc8kM4gBBR+agI7/CleMyziNtzt/b+HeAZ/7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQGNSv8YBAAAAAAAAAAAAwBWyDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", - "base64" - ], - "owner": "MFv2hWf31Z9kbCa1snEPYctwafyhdvnV7FZnsebVacA", - "executable": false, - "rentEpoch": 18446744073709551615, - "space": 1864 - } -} \ No newline at end of file diff --git a/programs/marginfi/tests/fixtures/bank/bank_sample_2.json b/programs/marginfi/tests/fixtures/bank/bank_sample_2.json deleted file mode 100644 index 658d91242..000000000 --- a/programs/marginfi/tests/fixtures/bank/bank_sample_2.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "pubkey": "H6bfRmfZPoxDDs8eoVBgouTPowwyv7opfBbHd5KUmuUz", - "account": { - "lamports": 13864320, - "data": [ - "jjGm8jJCYbwFLtNGSuj8F9lNlV7oZwOtxpKUIt+cNZUB9tW33elSpQk5FC9oL9g4hJbsvVEG8Vx5TCR3Qzgo+mZC2+v3IANKYQAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAPWdN7VIW2b3xT0MhPeQWY7mllhY4u4cBLeccNT4Um1D/f/ArZTIB9gNL7z0AmtchREMxOScVcVxmrIWWveLKt90lP//AAAAAAAAAAAAAAAAAAAAAAAAAABXwK29gVaRDqpTnPMFqJWBKXvrWd2SUipOUWjv4FJCu/75AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABfGBOiogAAAAAAmTcGZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAIAAAAAAAAAAAAAAAAAAIABAAAAAAAAAAAAAACKXXhFYwHNzMzMzMwAAAAAAAAAAAAAmpmZmZkZAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMP1KFyPAgAAAAAAAAAAAADNzMzMzAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAliN8uY4+rpauX+BCUqi07hb7f0PmPlgeTZoMs8gBgD2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAtherDgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", - "base64" - ], - "owner": "MFv2hWf31Z9kbCa1snEPYctwafyhdvnV7FZnsebVacA", - "executable": false, - "rentEpoch": 18446744073709551615, - "space": 1864 - } -} \ No newline at end of file diff --git a/programs/marginfi/tests/fixtures/bank/bank_sample_3.json b/programs/marginfi/tests/fixtures/bank/bank_sample_3.json deleted file mode 100644 index 38e32e1d5..000000000 --- a/programs/marginfi/tests/fixtures/bank/bank_sample_3.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "pubkey": "HmpMfL8942u22htC4EMiWgLX931g3sacXFR6KjuLgKLV", - "account": { - "lamports": 13864320, - "data": [ - "jjGm8jJCYbzOAQ5gr+2yJxe9YxkvVBRaP5ZaM7uC0scCnrLOHiCCZAY5FC9oL9g4hJbsvVEG8Vx5TCR3Qzgo+mZC2+v3IANKYQAAAAAAAAA/AscDIRABAAAAAAAAAAAA/EZGDPMeAQAAAAAAAAAAAFrpX+1SiUt4dTCMtyzzEl9GcL8WKzXNxFqGbbawUMtc///cSnvk0tANkq2tTZgRccGINZC2DNKPKbUSf4fsEPnq+f7/AAAAAHlOZ2Icvw+zAAAAAAAAAAAPlQkiCEinqeIRKPN6VsMuJnsPe7Vlpei7Y1eafiBMTP//AAAAAAAAHIjR5DQ4Q6m9qgYAAAAAAPewoi5hNIZsVR40HQAAAAB22riW3FYgZx2XUScAAAAAFHAGZgAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAEAAAAAAAAAAACamZmZmRkBAAAAAAAAAAAAAEB6EPNaAADNzMzMzMwAAAAAAAAAAAAAMzMzMzMzAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMP1KFyPAgAAAAAAAAAAAADNzMzMzAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABASuJudyP3580cJpbEGtHLw85u2ypzgSw/X8ulxaI4uU7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAID2IeS0AAAAAAAAAAAAAQCMFBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", - "base64" - ], - "owner": "MFv2hWf31Z9kbCa1snEPYctwafyhdvnV7FZnsebVacA", - "executable": false, - "rentEpoch": 18446744073709551615, - "space": 1864 - } -} \ No newline at end of file diff --git a/programs/marginfi/tests/fixtures/marginfi_account/marginfi_account_sample_1.json b/programs/marginfi/tests/fixtures/marginfi_account/marginfi_account_sample_1.json deleted file mode 100644 index 767b63b55..000000000 --- a/programs/marginfi/tests/fixtures/marginfi_account/marginfi_account_sample_1.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "pubkey": "EN1WSBJmZR1NVdYvPbpwzPnRk7JhbNncS1kNEXqvK7ND", - "account": { - "lamports": 16982400, - "data": [ - "Q7KCbX5yHCo5FC9oL9g4hJbsvVEG8Vx5TCR3Qzgo+mZC2+v3IANKYb6f+l3x/PXw8gh4pV8QO0uiHdQEeP+aMBHjfg7/IACmARutHfo8svhd1/amZ6lITmgWx8d36TSdUzxzSdzfb9+KAAAAAAAAANfNTTOFdx1NXGIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO41/mUAAAAAAAAAAAAAAAABpldNJeSN/DAArxmslFPRyehGgi8ZaTF8JnXXT2LvpvIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFA7Bqu/lgOj4OIAAAAAAAAAAAAAAAAAAAAAAAAAAAAACTb+ZQAAAAAAAAAAAAAAAAG3oNJhLYxRnZa+5Ur+S58ysC/3Qy8dmGAhVmvMSMqYigAAAAAAAACKUBkebGRpu7U+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABlMPVlAAAAAAAAAAAAAAAAAaCLuSDpDCSwgzIFy0wgc46EcxWEznFcOWg9/ec4oi0bAAAAAAAAAL/H1+Ti6B3x+isAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwX32UAAAAAAAAAAAAAAAABwicK8mAA4yGnODBsQIhlGdVFIxYs/fnDjo3cRpm9j/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5xMuODJ8ba6gsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqC3fZQAAAAAAAAAAAAAAAAH5NhefGsLrpgg5n1yXjAaoWjXNnbeVrb/hsVPeRiKaOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqm1aqA1KiLQeJAAAAAAAAAAAAAAAAAAAAAAAAAAAAADOQv5lAAAAAAAAAAAAAAAAAQ8riGFi78lMhKdiDpBciUj69VjwPX0HsG0TUDCEjyI/AAAAAAAAANj0T8tZJzLxhTsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOVB/mUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=", - "base64" - ], - "owner": "MFv2hWf31Z9kbCa1snEPYctwafyhdvnV7FZnsebVacA", - "executable": false, - "rentEpoch": 18446744073709551615, - "space": 2312 - } -} \ No newline at end of file diff --git a/programs/marginfi/tests/fixtures/marginfi_account/marginfi_account_sample_2.json b/programs/marginfi/tests/fixtures/marginfi_account/marginfi_account_sample_2.json deleted file mode 100644 index c6a098fcf..000000000 --- a/programs/marginfi/tests/fixtures/marginfi_account/marginfi_account_sample_2.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "pubkey": "3RwzdzPRD9VHceHLqCd7ZQLp3Qh28bhTJCq8Z8dCVGcf", - "account": { - "lamports": 16982400, - "data": [ - "Q7KCbX5yHCo5FC9oL9g4hJbsvVEG8Vx5TCR3Qzgo+mZC2+v3IANKYSRhUXykLSXvkxGO72R5c77JrLFOU3JG3CpWbpa360GiAVSmGrY1z4EuqsXlRNjXsmyb2EHWHExarkPONHajKUGiAAAAAAAAAIQJpRHZ89YBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACIiZPmljlVSaAQAAAAAAAHTXq2UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=", - "base64" - ], - "owner": "MFv2hWf31Z9kbCa1snEPYctwafyhdvnV7FZnsebVacA", - "executable": false, - "rentEpoch": 18446744073709551615, - "space": 2312 - } -} \ No newline at end of file diff --git a/programs/marginfi/tests/fixtures/marginfi_account/marginfi_account_sample_3.json b/programs/marginfi/tests/fixtures/marginfi_account/marginfi_account_sample_3.json deleted file mode 100644 index 94daec59a..000000000 --- a/programs/marginfi/tests/fixtures/marginfi_account/marginfi_account_sample_3.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "pubkey": "9y1NYvZeNGjR7uDBfbYMkawmyHBhNMkPbNN1MdDcz48o", - "account": { - "lamports": 16982400, - "data": [ - "Q7KCbX5yHCo5FC9oL9g4hJbsvVEG8Vx5TCR3Qzgo+mZC2+v3IANKYWOX2vHYrJCnxMaD+wo4kuig5SyV5s+58kKhw3WQtM28AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=", - "base64" - ], - "owner": "MFv2hWf31Z9kbCa1snEPYctwafyhdvnV7FZnsebVacA", - "executable": false, - "rentEpoch": 18446744073709551615, - "space": 2312 - } -} \ No newline at end of file diff --git a/programs/marginfi/tests/misc/bank_ignore_stale_isolated_banks.rs b/programs/marginfi/tests/misc/bank_ignore_stale_isolated_banks.rs deleted file mode 100644 index 5a6c74323..000000000 --- a/programs/marginfi/tests/misc/bank_ignore_stale_isolated_banks.rs +++ /dev/null @@ -1,187 +0,0 @@ -use fixtures::{ - assert_custom_error, - test::{ - BankMint, TestFixture, TestSettings, PYTH_SOL_EQUIVALENT_FEED, PYTH_SOL_FEED, - PYTH_USDC_FEED, - }, -}; -use marginfi::prelude::MarginfiError; -use solana_program_test::tokio; - -#[tokio::test] -/// Borrowing with deposits in two banks (1 stale, 1 non-stale) should error with bad health -/// Account has enough total collateral to borrow, but one bank is stale and the non-stale collateral left -/// is not sufficient, so the borrow fails with bad health -async fn stale_bank_should_error() -> anyhow::Result<()> { - let test_f = TestFixture::new(Some(TestSettings::all_banks_payer_not_admin())).await; - - let usdc_bank = test_f.get_bank(&BankMint::Usdc); - let sol_bank = test_f.get_bank(&BankMint::Sol); - let sol_eq_bank = test_f.get_bank(&BankMint::SolEquivalent); - - // Make SOLE feed stale - test_f.set_time(0); - test_f.set_pyth_oracle_timestamp(PYTH_USDC_FEED, 120).await; - test_f - .set_pyth_oracle_timestamp(PYTH_SOL_EQUIVALENT_FEED, 0) - .await; - test_f.set_pyth_oracle_timestamp(PYTH_SOL_FEED, 120).await; - test_f.advance_time(120).await; - - // Fund SOL lender - let lender_mfi_account_f = test_f.create_marginfi_account().await; - let lender_token_account_sol = test_f - .sol_mint - .create_token_account_and_mint_to(1_000) - .await; - lender_mfi_account_f - .try_bank_deposit(lender_token_account_sol.key, sol_bank, 1_000, None) - .await?; - - // Fund SOL borrower - let borrower_mfi_account_f = test_f.create_marginfi_account().await; - let borrower_token_account_f_usdc = test_f - .usdc_mint - .create_token_account_and_mint_to(1_000) - .await; - let borrower_token_account_f_sol_eq = test_f - .sol_equivalent_mint - .create_token_account_and_mint_to(1_000) - .await; - let borrower_token_account_f_sol = test_f.sol_mint.create_empty_token_account().await; - - borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_f_usdc.key, usdc_bank, 500, None) - .await?; - - borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_f_sol_eq.key, sol_eq_bank, 100, None) - .await?; - - // Borrow SOL - let res = borrower_mfi_account_f - .try_bank_borrow(borrower_token_account_f_sol.key, sol_bank, 99) - .await; - - assert!(res.is_err()); - assert_custom_error!(res.unwrap_err(), MarginfiError::RiskEngineInitRejected); - - Ok(()) -} - -#[tokio::test] -/// Borrowing with deposits in two banks (1 stale) should not error if the non-stale collateral is sufficient -async fn non_stale_bank_should_error() -> anyhow::Result<()> { - let test_f = TestFixture::new(Some(TestSettings::all_banks_payer_not_admin())).await; - - let usdc_bank = test_f.get_bank(&BankMint::Usdc); - let sol_eq_bank = test_f.get_bank(&BankMint::SolEquivalent); - let sol_bank = test_f.get_bank(&BankMint::Sol); - - // Make USDC feed stale - test_f.set_time(0); - test_f.set_pyth_oracle_timestamp(PYTH_USDC_FEED, 0).await; - test_f.set_pyth_oracle_timestamp(PYTH_SOL_FEED, 120).await; - test_f - .set_pyth_oracle_timestamp(PYTH_SOL_EQUIVALENT_FEED, 120) - .await; - test_f.advance_time(120).await; - - // Fund SOL lender - let lender_mfi_account_f = test_f.create_marginfi_account().await; - let lender_token_account_sol = test_f - .sol_mint - .create_token_account_and_mint_to(1_000) - .await; - lender_mfi_account_f - .try_bank_deposit(lender_token_account_sol.key, sol_bank, 1_000, None) - .await?; - - // Fund SOL borrower - let borrower_mfi_account_f = test_f.create_marginfi_account().await; - let borrower_token_account_f_usdc = test_f - .usdc_mint - .create_token_account_and_mint_to(1_000) - .await; - let borrower_token_account_f_sol_eq = test_f - .sol_equivalent_mint - .create_token_account_and_mint_to(1_000) - .await; - let borrower_token_account_f_sol = test_f.sol_mint.create_empty_token_account().await; - - borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_f_usdc.key, usdc_bank, 15, None) - .await?; - - borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_f_sol_eq.key, sol_eq_bank, 100, None) - .await?; - - // Borrow SOL - let res = borrower_mfi_account_f - .try_bank_borrow(borrower_token_account_f_sol.key, sol_bank, 99) - .await; - - assert!(res.is_ok()); - - Ok(()) -} - -#[tokio::test] -/// Borrowing with deposits to a non isolated stale bank should error -async fn isolated_stale_should_not_error() -> anyhow::Result<()> { - let test_f = TestFixture::new(Some(TestSettings::all_banks_payer_not_admin())).await; - - let usdc_bank = test_f.get_bank(&BankMint::Usdc); - let sol_bank = test_f.get_bank(&BankMint::Sol); - let sol_eq_iso_bank = test_f.get_bank(&BankMint::SolEqIsolated); - - test_f.set_time(0); - test_f.set_pyth_oracle_timestamp(PYTH_SOL_FEED, 120).await; - test_f.set_pyth_oracle_timestamp(PYTH_USDC_FEED, 120).await; - test_f.advance_time(120).await; - - // Fund SOL lender - let lender_mfi_account_f = test_f.create_marginfi_account().await; - let lender_token_account_sol = test_f - .sol_mint - .create_token_account_and_mint_to(1_000) - .await; - lender_mfi_account_f - .try_bank_deposit(lender_token_account_sol.key, sol_bank, 1_000, None) - .await?; - - // Fund SOL borrower - let borrower_mfi_account_f = test_f.create_marginfi_account().await; - let borrower_token_account_f_usdc = test_f - .usdc_mint - .create_token_account_and_mint_to(1_000) - .await; - let borrower_token_account_f_sol_eq = test_f - .sol_equivalent_mint - .create_token_account_and_mint_to(1_000) - .await; - let borrower_token_account_f_sol = test_f.sol_mint.create_empty_token_account().await; - - borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_f_usdc.key, usdc_bank, 1_000, None) - .await?; - - borrower_mfi_account_f - .try_bank_deposit( - borrower_token_account_f_sol_eq.key, - sol_eq_iso_bank, - 1_000, - None, - ) - .await?; - - // Borrow SOL - let res = borrower_mfi_account_f - .try_bank_borrow(borrower_token_account_f_sol.key, sol_bank, 99) - .await; - - assert!(res.is_ok()); - - Ok(()) -} diff --git a/programs/marginfi/tests/misc/bank_variable_oracle_staleness.rs b/programs/marginfi/tests/misc/bank_variable_oracle_staleness.rs deleted file mode 100644 index 10d66c105..000000000 --- a/programs/marginfi/tests/misc/bank_variable_oracle_staleness.rs +++ /dev/null @@ -1,106 +0,0 @@ -use fixtures::{ - assert_custom_error, - test::{ - BankMint, TestFixture, TestSettings, PYTH_SOL_EQUIVALENT_FEED, PYTH_SOL_FEED, - PYTH_USDC_FEED, - }, -}; -use marginfi::{prelude::MarginfiError, state::marginfi_group::BankConfigOpt}; -use solana_program_test::tokio; - -#[tokio::test] -/// Borrowing should fail if the total (non-isolated), non-stale collateral value is insufficient -async fn bank_oracle_staleness_test() -> anyhow::Result<()> { - let test_f = TestFixture::new(Some(TestSettings::all_banks_payer_not_admin())).await; - - let usdc_bank = test_f.get_bank(&BankMint::Usdc); - let sol_bank = test_f.get_bank(&BankMint::Sol); - let sol_eq_bank = test_f.get_bank(&BankMint::SolEquivalent); - - // Make SOLE feed stale - test_f.set_time(0); - test_f.set_pyth_oracle_timestamp(PYTH_USDC_FEED, 120).await; - test_f - .set_pyth_oracle_timestamp(PYTH_SOL_EQUIVALENT_FEED, 0) - .await; - test_f.set_pyth_oracle_timestamp(PYTH_SOL_FEED, 120).await; - test_f.advance_time(120).await; - - // Fund SOL lender - let lender_mfi_account_f = test_f.create_marginfi_account().await; - let lender_token_account_sol = test_f - .sol_mint - .create_token_account_and_mint_to(1_000) - .await; - lender_mfi_account_f - .try_bank_deposit(lender_token_account_sol.key, sol_bank, 1_000, None) - .await?; - - // Fund SOL borrower - let borrower_mfi_account_f = test_f.create_marginfi_account().await; - let borrower_token_account_f_usdc = test_f - .usdc_mint - .create_token_account_and_mint_to(1_000) - .await; - let borrower_token_account_f_sol_eq = test_f - .sol_equivalent_mint - .create_token_account_and_mint_to(1_000) - .await; - let borrower_token_account_f_sol = test_f.sol_mint.create_empty_token_account().await; - - borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_f_usdc.key, usdc_bank, 500, None) - .await?; - - borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_f_sol_eq.key, sol_eq_bank, 50, None) - .await?; - - // Borrow SOL - let res = borrower_mfi_account_f - .try_bank_borrow_with_nonce(borrower_token_account_f_sol.key, sol_bank, 99, 1) - .await; - - assert!(res.is_err()); - assert_custom_error!(res.unwrap_err(), MarginfiError::RiskEngineInitRejected); - - println!("Borrowing failed as expected"); - - // Make SOL feed non-stale - usdc_bank - .update_config( - BankConfigOpt { - oracle_max_age: Some(200), - ..Default::default() - }, - None, - ) - .await?; - sol_bank - .update_config( - BankConfigOpt { - oracle_max_age: Some(200), - ..Default::default() - }, - None, - ) - .await?; - sol_eq_bank - .update_config( - BankConfigOpt { - oracle_max_age: Some(200), - ..Default::default() - }, - None, - ) - .await?; - - // Borrow SOL - let res = borrower_mfi_account_f - .try_bank_borrow_with_nonce(borrower_token_account_f_sol.key, sol_bank, 99, 2) - .await; - - assert!(res.is_ok()); - - Ok(()) -} diff --git a/programs/marginfi/tests/misc/collateral_value_cap.rs b/programs/marginfi/tests/misc/collateral_value_cap.rs deleted file mode 100644 index 3305792f2..000000000 --- a/programs/marginfi/tests/misc/collateral_value_cap.rs +++ /dev/null @@ -1,94 +0,0 @@ -use fixtures::{assert_custom_error, prelude::*}; -use marginfi::{ - constants::TOTAL_ASSET_VALUE_INIT_LIMIT_INACTIVE, prelude::MarginfiError, - state::marginfi_group::BankConfigOpt, -}; -use pretty_assertions::assert_eq; -use solana_program_test::*; - -#[tokio::test] -async fn marginfi_group_init_limit_0() -> anyhow::Result<()> { - let test_f = TestFixture::new(Some(TestSettings::all_banks_payer_not_admin())).await; - - let usdc_bank = test_f.get_bank(&BankMint::Usdc); - let sol_bank = test_f.get_bank(&BankMint::Sol); - - usdc_bank - .update_config( - BankConfigOpt { - total_asset_value_init_limit: Some(101), - ..BankConfigOpt::default() - }, - None, - ) - .await?; - - let sol_depositor = test_f.create_marginfi_account().await; - let usdc_depositor = test_f.create_marginfi_account().await; - - let sol_token_account = test_f.sol_mint.create_token_account_and_mint_to(100).await; - - sol_depositor - .try_bank_deposit(sol_token_account.key, sol_bank, 100, None) - .await?; - - let usdc_token_account = test_f - .usdc_mint - .create_token_account_and_mint_to(100_000) - .await; - - sol_depositor - .try_bank_deposit(usdc_token_account.key, usdc_bank, 1900, None) - .await?; - - usdc_depositor - .try_bank_deposit(usdc_token_account.key, usdc_bank, 100, None) - .await?; - - // Borrowing 10 SOL should fail bc of init limit - let depositor_sol_account = sol_bank.mint.create_empty_token_account().await; - let res = usdc_depositor - .try_bank_borrow(depositor_sol_account.key, sol_bank, 9.9) - .await; - - assert!(res.is_err()); - assert_custom_error!(res.unwrap_err(), MarginfiError::RiskEngineInitRejected); - - sol_depositor - .try_bank_withdraw(usdc_token_account.key, usdc_bank, 1900, Some(true)) - .await?; - - // Borrowing 10 SOL should succeed now - let res = usdc_depositor - .try_bank_borrow(depositor_sol_account.key, sol_bank, 10) - .await; - - usdc_bank - .update_config( - BankConfigOpt { - total_asset_value_init_limit: Some(TOTAL_ASSET_VALUE_INIT_LIMIT_INACTIVE), - ..BankConfigOpt::default() - }, - None, - ) - .await?; - - assert!(res.is_ok()); - - sol_depositor - .try_bank_deposit(usdc_token_account.key, usdc_bank, 1901, None) - .await?; - - usdc_depositor - .try_bank_deposit(usdc_token_account.key, usdc_bank, 100, None) - .await?; - - // Borrowing 10 SOL should succeed now - let res = usdc_depositor - .try_bank_borrow(depositor_sol_account.key, sol_bank, 10) - .await; - - assert!(res.is_ok()); - - Ok(()) -} diff --git a/programs/marginfi/tests/misc/mod.rs b/programs/marginfi/tests/misc/mod.rs deleted file mode 100644 index 252269a9f..000000000 --- a/programs/marginfi/tests/misc/mod.rs +++ /dev/null @@ -1,9 +0,0 @@ -mod bank_ignore_stale_isolated_banks; -mod bank_variable_oracle_staleness; -mod collateral_value_cap; -mod operational_state; -mod pyth_push; -mod real_oracle_data; -mod regression; -mod risk_engine_flexible_oracle_checks; -mod token_extensions; diff --git a/programs/marginfi/tests/misc/operational_state.rs b/programs/marginfi/tests/misc/operational_state.rs deleted file mode 100644 index adf458815..000000000 --- a/programs/marginfi/tests/misc/operational_state.rs +++ /dev/null @@ -1,248 +0,0 @@ -use fixed_macro::types::I80F48; -use fixtures::{assert_custom_error, prelude::*}; -use marginfi::{ - prelude::MarginfiError, - state::marginfi_group::{BankConfig, BankConfigOpt, BankOperationalState}, -}; -use pretty_assertions::assert_eq; -use solana_program_test::*; - -#[tokio::test] -async fn marginfi_group_bank_paused_should_error() -> anyhow::Result<()> { - let test_f = TestFixture::new(Some(TestSettings { - banks: vec![TestBankSetting { - mint: BankMint::Usdc, - config: None, - }], - protocol_fees: false, - })) - .await; - - let usdc_bank_f = test_f.get_bank(&BankMint::Usdc); - - test_f - .marginfi_group - .try_lending_pool_configure_bank( - usdc_bank_f, - BankConfigOpt { - operational_state: Some(BankOperationalState::Paused), - ..BankConfigOpt::default() - }, - ) - .await?; - - let lender_mfi_account_f = test_f.create_marginfi_account().await; - let lender_token_account_usdc = test_f - .usdc_mint - .create_token_account_and_mint_to(100_000) - .await; - let res = lender_mfi_account_f - .try_bank_deposit(lender_token_account_usdc.key, usdc_bank_f, 100_000, None) - .await; - - assert!(res.is_err()); - assert_custom_error!(res.unwrap_err(), MarginfiError::BankPaused); - - Ok(()) -} - -#[tokio::test] -async fn marginfi_group_bank_reduce_only_withdraw_success() -> anyhow::Result<()> { - let test_f = TestFixture::new(Some(TestSettings { - banks: vec![TestBankSetting { - mint: BankMint::Usdc, - config: None, - }], - protocol_fees: false, - })) - .await; - - let usdc_bank_f = test_f.get_bank(&BankMint::Usdc); - - let lender_mfi_account_f = test_f.create_marginfi_account().await; - let lender_token_account_usdc = test_f - .usdc_mint - .create_token_account_and_mint_to(100_000) - .await; - lender_mfi_account_f - .try_bank_deposit(lender_token_account_usdc.key, usdc_bank_f, 100_000, None) - .await?; - - usdc_bank_f - .update_config( - BankConfigOpt { - operational_state: Some(BankOperationalState::ReduceOnly), - ..Default::default() - }, - None, - ) - .await?; - - let res = lender_mfi_account_f - .try_bank_withdraw(lender_token_account_usdc.key, usdc_bank_f, 0, Some(true)) - .await; - - assert!(res.is_ok()); - - Ok(()) -} - -#[tokio::test] -async fn marginfi_group_bank_reduce_only_deposit_success() -> anyhow::Result<()> { - let test_f = TestFixture::new(Some(TestSettings { - banks: vec![ - TestBankSetting { - mint: BankMint::Usdc, - config: None, - }, - TestBankSetting { - mint: BankMint::Sol, - config: Some(BankConfig { - asset_weight_init: I80F48!(1).into(), - ..*DEFAULT_SOL_TEST_BANK_CONFIG - }), - }, - ], - protocol_fees: false, - })) - .await; - - let usdc_bank_f = test_f.get_bank(&BankMint::Usdc); - let sol_bank_f = test_f.get_bank(&BankMint::Sol); - - let lender_1_mfi_account = test_f.create_marginfi_account().await; - let lender_1_token_account_sol = test_f.sol_mint.create_token_account_and_mint_to(100).await; - lender_1_mfi_account - .try_bank_deposit(lender_1_token_account_sol.key, sol_bank_f, 100, None) - .await?; - - let lender_2_mfi_account = test_f.create_marginfi_account().await; - let lender_2_token_account_usdc = test_f - .usdc_mint - .create_token_account_and_mint_to(100_000) - .await; - lender_2_mfi_account - .try_bank_deposit(lender_2_token_account_usdc.key, usdc_bank_f, 100_000, None) - .await?; - - let lender_2_token_account_sol = test_f.sol_mint.create_empty_token_account().await; - lender_2_mfi_account - .try_bank_borrow(lender_2_token_account_sol.key, sol_bank_f, 1) - .await?; - - usdc_bank_f - .update_config( - BankConfigOpt { - operational_state: Some(BankOperationalState::ReduceOnly), - ..Default::default() - }, - None, - ) - .await?; - - let res = lender_2_mfi_account - .try_bank_repay(lender_2_token_account_sol.key, sol_bank_f, 1, None) - .await; - - assert!(res.is_ok()); - - Ok(()) -} - -#[tokio::test] -async fn marginfi_group_bank_reduce_only_borrow_failure() -> anyhow::Result<()> { - let test_f = TestFixture::new(Some(TestSettings { - banks: vec![ - TestBankSetting { - mint: BankMint::Usdc, - config: None, - }, - TestBankSetting { - mint: BankMint::Sol, - config: Some(BankConfig { - asset_weight_init: I80F48!(1).into(), - ..*DEFAULT_SOL_TEST_BANK_CONFIG - }), - }, - ], - protocol_fees: false, - })) - .await; - - let usdc_bank_f = test_f.get_bank(&BankMint::Usdc); - let sol_bank_f = test_f.get_bank(&BankMint::Sol); - - let lender_mfi_account = test_f.create_marginfi_account().await; - let lender_token_account_sol = test_f.sol_mint.create_token_account_and_mint_to(100).await; - lender_mfi_account - .try_bank_deposit(lender_token_account_sol.key, sol_bank_f, 100, None) - .await?; - - let borrower_mfi_account = test_f.create_marginfi_account().await; - let borrower_token_account_usdc = test_f - .usdc_mint - .create_token_account_and_mint_to(100_000) - .await; - borrower_mfi_account - .try_bank_deposit(borrower_token_account_usdc.key, usdc_bank_f, 100_000, None) - .await?; - - sol_bank_f - .update_config( - BankConfigOpt { - operational_state: Some(BankOperationalState::ReduceOnly), - ..Default::default() - }, - None, - ) - .await?; - - let borrower_token_account_sol = test_f.sol_mint.create_empty_token_account().await; - let res = borrower_mfi_account - .try_bank_borrow(borrower_token_account_sol.key, sol_bank_f, 1) - .await; - - assert!(res.is_err()); - assert_custom_error!(res.unwrap_err(), MarginfiError::BankReduceOnly); - - Ok(()) -} - -#[tokio::test] -async fn marginfi_group_bank_reduce_only_deposit_failure() -> anyhow::Result<()> { - let test_f = TestFixture::new(Some(TestSettings { - banks: vec![TestBankSetting { - mint: BankMint::Usdc, - config: None, - }], - protocol_fees: false, - })) - .await; - - let usdc_bank_f = test_f.get_bank(&BankMint::Usdc); - - usdc_bank_f - .update_config( - BankConfigOpt { - operational_state: Some(BankOperationalState::ReduceOnly), - ..Default::default() - }, - None, - ) - .await?; - - let lender_mfi_account_f = test_f.create_marginfi_account().await; - let lender_token_account_usdc = test_f - .usdc_mint - .create_token_account_and_mint_to(100_000) - .await; - - let res = lender_mfi_account_f - .try_bank_deposit(lender_token_account_usdc.key, usdc_bank_f, 100_000, None) - .await; - - assert!(res.is_err()); - assert_custom_error!(res.unwrap_err(), MarginfiError::BankReduceOnly); - - Ok(()) -} diff --git a/programs/marginfi/tests/misc/pyth_push.rs b/programs/marginfi/tests/misc/pyth_push.rs deleted file mode 100644 index 3e7172944..000000000 --- a/programs/marginfi/tests/misc/pyth_push.rs +++ /dev/null @@ -1,268 +0,0 @@ -use fixed::types::I80F48; -use fixed_macro::types::I80F48; -use fixtures::{ - assert_custom_error, assert_eq_noise, native, - test::{ - BankMint, TestBankSetting, TestFixture, TestSettings, - DEFAULT_SOL_TEST_PYTH_PUSH_FULLV_BANK_CONFIG, DEFAULT_SOL_TEST_PYTH_PUSH_PARTV_BANK_CONFIG, - DEFAULT_USDC_TEST_BANK_CONFIG, - }, -}; -use marginfi::{ - errors::MarginfiError, - state::marginfi_group::{Bank, BankConfig, BankConfigOpt, BankVaultType}, -}; -use solana_program_test::tokio; - -#[tokio::test] -async fn pyth_push_fullv_borrow() -> anyhow::Result<()> { - let test_f = TestFixture::new(Some(TestSettings { - banks: vec![ - TestBankSetting { - mint: BankMint::Usdc, - config: Some(*DEFAULT_USDC_TEST_BANK_CONFIG), - }, - TestBankSetting { - mint: BankMint::Sol, - config: Some(*DEFAULT_SOL_TEST_PYTH_PUSH_FULLV_BANK_CONFIG), - }, - ], - protocol_fees: false, - })) - .await; - - let usdc_bank = test_f.get_bank(&BankMint::Usdc); - let sol_bank = test_f.get_bank(&BankMint::Sol); - - // Fund SOL lender - let lender_mfi_account_f = test_f.create_marginfi_account().await; - let lender_token_account_sol = test_f - .sol_mint - .create_token_account_and_mint_to(1_000) - .await; - lender_mfi_account_f - .try_bank_deposit(lender_token_account_sol.key, sol_bank, 1_000, None) - .await?; - - // Fund SOL borrower - let borrower_mfi_account_f = test_f.create_marginfi_account().await; - let borrower_token_account_f_usdc = test_f - .usdc_mint - .create_token_account_and_mint_to(1_000) - .await; - let borrower_token_account_f_sol = test_f.sol_mint.create_token_account_and_mint_to(0).await; - borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_f_usdc.key, usdc_bank, 1_000, None) - .await?; - - let res = borrower_mfi_account_f - .try_bank_borrow(borrower_token_account_f_sol.key, sol_bank, 101) - .await; - - assert_custom_error!(res.unwrap_err(), MarginfiError::RiskEngineInitRejected); - - // Borrow SOL - let res = borrower_mfi_account_f - .try_bank_borrow(borrower_token_account_f_sol.key, sol_bank, 100) - .await; - - assert!(res.is_ok()); - - // Check token balances are correct - assert_eq!( - borrower_token_account_f_usdc.balance().await, - native!(0, "USDC") - ); - - assert_eq!( - borrower_token_account_f_sol.balance().await, - native!(100, "SOL") - ); - - Ok(()) -} - -#[tokio::test] -async fn pyth_push_partv_borrow() -> anyhow::Result<()> { - let test_f = TestFixture::new(Some(TestSettings { - banks: vec![ - TestBankSetting { - mint: BankMint::Usdc, - config: Some(*DEFAULT_USDC_TEST_BANK_CONFIG), - }, - TestBankSetting { - mint: BankMint::Sol, - config: Some(*DEFAULT_SOL_TEST_PYTH_PUSH_PARTV_BANK_CONFIG), - }, - ], - protocol_fees: false, - })) - .await; - - let usdc_bank = test_f.get_bank(&BankMint::Usdc); - let sol_bank = test_f.get_bank(&BankMint::Sol); - - // Fund SOL lender - let lender_mfi_account_f = test_f.create_marginfi_account().await; - let lender_token_account_sol = test_f - .sol_mint - .create_token_account_and_mint_to(1_000) - .await; - lender_mfi_account_f - .try_bank_deposit(lender_token_account_sol.key, sol_bank, 1_000, None) - .await?; - - // Fund SOL borrower - let borrower_mfi_account_f = test_f.create_marginfi_account().await; - let borrower_token_account_f_usdc = test_f - .usdc_mint - .create_token_account_and_mint_to(1_000) - .await; - let borrower_token_account_f_sol = test_f.sol_mint.create_token_account_and_mint_to(0).await; - borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_f_usdc.key, usdc_bank, 1_000, None) - .await?; - - let res = borrower_mfi_account_f - .try_bank_borrow(borrower_token_account_f_sol.key, sol_bank, 101) - .await; - - assert_custom_error!( - res.unwrap_err(), - MarginfiError::PythPushInsufficientVerificationLevel - ); - - // Borrow SOL - let res = borrower_mfi_account_f - .try_bank_borrow(borrower_token_account_f_sol.key, sol_bank, 100) - .await; - - assert_custom_error!( - res.unwrap_err(), - MarginfiError::PythPushInsufficientVerificationLevel - ); - - Ok(()) -} - -#[tokio::test] -async fn pyth_push_fullv_liquidate() -> anyhow::Result<()> { - let test_f = TestFixture::new(Some(TestSettings { - banks: vec![ - TestBankSetting { - mint: BankMint::Usdc, - ..TestBankSetting::default() - }, - TestBankSetting { - mint: BankMint::Sol, - config: Some(BankConfig { - asset_weight_init: I80F48!(1).into(), - asset_weight_maint: I80F48!(1).into(), - ..*DEFAULT_SOL_TEST_PYTH_PUSH_FULLV_BANK_CONFIG - }), - }, - ], - protocol_fees: false, - })) - .await; - - let usdc_bank_f = test_f.get_bank(&BankMint::Usdc); - let sol_bank_f = test_f.get_bank(&BankMint::Sol); - - let lender_mfi_account_f = test_f.create_marginfi_account().await; - let lender_token_account_usdc = test_f - .usdc_mint - .create_token_account_and_mint_to(2_000) - .await; - lender_mfi_account_f - .try_bank_deposit(lender_token_account_usdc.key, usdc_bank_f, 2_000, None) - .await?; - - let borrower_mfi_account_f = test_f.create_marginfi_account().await; - let borrower_token_account_sol = test_f.sol_mint.create_token_account_and_mint_to(100).await; - let borrower_token_account_usdc = test_f.usdc_mint.create_token_account_and_mint_to(0).await; - - // Borrower deposits 100 SOL worth of $1000 - borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_sol.key, sol_bank_f, 100, None) - .await?; - - // Borrower borrows $999 - borrower_mfi_account_f - .try_bank_borrow(borrower_token_account_usdc.key, usdc_bank_f, 999) - .await?; - - // Synthetically bring down the borrower account health by reducing the asset weights of the SOL bank - sol_bank_f - .update_config( - BankConfigOpt { - asset_weight_init: Some(I80F48!(0.25).into()), - asset_weight_maint: Some(I80F48!(0.5).into()), - ..Default::default() - }, - None, - ) - .await?; - - lender_mfi_account_f - .try_liquidate(&borrower_mfi_account_f, sol_bank_f, 1, usdc_bank_f) - .await?; - - // Checks - let sol_bank: Bank = sol_bank_f.load().await; - let usdc_bank: Bank = usdc_bank_f.load().await; - - let depositor_ma = lender_mfi_account_f.load().await; - let borrower_ma = borrower_mfi_account_f.load().await; - - // Depositors should have 1 SOL - assert_eq!( - sol_bank - .get_asset_amount(depositor_ma.lending_account.balances[1].asset_shares.into()) - .unwrap(), - I80F48::from(native!(1, "SOL")) - ); - - // Depositors should have 1990.25 USDC - assert_eq_noise!( - usdc_bank - .get_asset_amount(depositor_ma.lending_account.balances[0].asset_shares.into()) - .unwrap(), - I80F48::from(native!(1990.25, "USDC", f64)), - native!(0.00001, "USDC", f64) - ); - - // Borrower should have 99 SOL - assert_eq!( - sol_bank - .get_asset_amount(borrower_ma.lending_account.balances[0].asset_shares.into()) - .unwrap(), - I80F48::from(native!(99, "SOL")) - ); - - // Borrower should have 989.50 USDC - assert_eq_noise!( - usdc_bank - .get_liability_amount( - borrower_ma.lending_account.balances[1] - .liability_shares - .into() - ) - .unwrap(), - I80F48::from(native!(989.50, "USDC", f64)), - native!(0.00001, "USDC", f64) - ); - - // Check insurance fund fee - let insurance_fund_usdc = usdc_bank_f - .get_vault_token_account(BankVaultType::Insurance) - .await; - - assert_eq_noise!( - insurance_fund_usdc.balance().await as i64, - native!(0.25, "USDC", f64) as i64, - 1 - ); - - Ok(()) -} diff --git a/programs/marginfi/tests/misc/real_oracle_data.rs b/programs/marginfi/tests/misc/real_oracle_data.rs deleted file mode 100644 index 0c50b870b..000000000 --- a/programs/marginfi/tests/misc/real_oracle_data.rs +++ /dev/null @@ -1,156 +0,0 @@ -use fixtures::{ - assert_custom_error, native, - test::{ - BankMint, TestBankSetting, TestFixture, TestSettings, - DEFAULT_PYTH_PUSH_SOL_TEST_REAL_BANK_CONFIG, DEFAULT_SOL_TEST_REAL_BANK_CONFIG, - DEFAULT_USDC_TEST_REAL_BANK_CONFIG, - }, -}; -use marginfi::errors::MarginfiError; -use solana_program_test::tokio; - -#[tokio::test] -async fn real_oracle_marginfi_account_borrow_success() -> anyhow::Result<()> { - let test_f = TestFixture::new(Some(TestSettings { - banks: vec![ - TestBankSetting { - mint: BankMint::Usdc, - config: Some(*DEFAULT_USDC_TEST_REAL_BANK_CONFIG), - }, - TestBankSetting { - mint: BankMint::Sol, - config: Some(*DEFAULT_SOL_TEST_REAL_BANK_CONFIG), - }, - ], - protocol_fees: false, - })) - .await; - - let usdc_bank = test_f.get_bank(&BankMint::Usdc); - let sol_bank = test_f.get_bank(&BankMint::Sol); - - test_f.set_time(1720094628); - - // Fund SOL lender - let lender_mfi_account_f = test_f.create_marginfi_account().await; - let lender_token_account_sol = test_f - .sol_mint - .create_token_account_and_mint_to(1_000) - .await; - lender_mfi_account_f - .try_bank_deposit(lender_token_account_sol.key, sol_bank, 1_000, None) - .await?; - - // Fund SOL borrower - let borrower_mfi_account_f = test_f.create_marginfi_account().await; - let borrower_token_account_f_usdc = test_f - .usdc_mint - .create_token_account_and_mint_to(1_000) - .await; - let borrower_token_account_f_sol = test_f.sol_mint.create_token_account_and_mint_to(0).await; - borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_f_usdc.key, usdc_bank, 1_000, None) - .await?; - - // Borrow SOL - let res = borrower_mfi_account_f - .try_bank_borrow(borrower_token_account_f_sol.key, sol_bank, 9) - .await; - - assert!(res.is_err()); - assert_custom_error!(res.unwrap_err(), MarginfiError::RiskEngineInitRejected); - - // Borrow SOL - let res = borrower_mfi_account_f - .try_bank_borrow(borrower_token_account_f_sol.key, sol_bank, 7) - .await; - - assert!(res.is_ok()); - - // Check token balances are correct - assert_eq!( - borrower_token_account_f_usdc.balance().await, - native!(0, "USDC") - ); - - assert_eq!( - borrower_token_account_f_sol.balance().await, - native!(7, "SOL") - ); - - // TODO: check health is sane - - Ok(()) -} - -#[tokio::test] -async fn real_oracle_pyth_push_marginfi_account_borrow_success() -> anyhow::Result<()> { - let test_f = TestFixture::new(Some(TestSettings { - banks: vec![ - TestBankSetting { - mint: BankMint::Usdc, - config: Some(*DEFAULT_USDC_TEST_REAL_BANK_CONFIG), - }, - TestBankSetting { - mint: BankMint::Sol, - config: Some(*DEFAULT_PYTH_PUSH_SOL_TEST_REAL_BANK_CONFIG), - }, - ], - protocol_fees: false, - })) - .await; - - let usdc_bank = test_f.get_bank(&BankMint::Usdc); - let sol_bank = test_f.get_bank(&BankMint::Sol); - - test_f.set_time(1720094628); - - // Fund SOL lender - let lender_mfi_account_f = test_f.create_marginfi_account().await; - let lender_token_account_sol = test_f - .sol_mint - .create_token_account_and_mint_to(1_000) - .await; - lender_mfi_account_f - .try_bank_deposit(lender_token_account_sol.key, sol_bank, 1_000, None) - .await?; - - // Fund SOL borrower - let borrower_mfi_account_f = test_f.create_marginfi_account().await; - let borrower_token_account_f_usdc = test_f - .usdc_mint - .create_token_account_and_mint_to(1_000) - .await; - let borrower_token_account_f_sol = test_f.sol_mint.create_token_account_and_mint_to(0).await; - borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_f_usdc.key, usdc_bank, 1_000, None) - .await?; - - // Borrow SOL - let res = borrower_mfi_account_f - .try_bank_borrow(borrower_token_account_f_sol.key, sol_bank, 7) - .await; - - assert!(res.is_err()); - assert_custom_error!(res.unwrap_err(), MarginfiError::RiskEngineInitRejected); - - // Borrow SOL - let res = borrower_mfi_account_f - .try_bank_borrow(borrower_token_account_f_sol.key, sol_bank, 6) - .await; - - assert!(res.is_ok()); - - // Check token balances are correct - assert_eq!( - borrower_token_account_f_usdc.balance().await, - native!(0, "USDC") - ); - - assert_eq!( - borrower_token_account_f_sol.balance().await, - native!(6, "SOL") - ); - - Ok(()) -} diff --git a/programs/marginfi/tests/misc/regression.rs b/programs/marginfi/tests/misc/regression.rs deleted file mode 100644 index 430260f34..000000000 --- a/programs/marginfi/tests/misc/regression.rs +++ /dev/null @@ -1,681 +0,0 @@ -use std::{fs::File, io::Read, path::PathBuf, str::FromStr}; - -use anchor_lang::AccountDeserialize; -use anyhow::bail; -use base64::{prelude::BASE64_STANDARD, Engine}; -use bytemuck::Zeroable; -use fixed::types::I80F48; -use marginfi::{ - constants::ASSET_TAG_DEFAULT, - state::{ - health_cache::HealthCache, - marginfi_account::MarginfiAccount, - marginfi_group::{Bank, BankOperationalState, RiskTier}, - price::OracleSetup, - }, -}; -use solana_account_decoder::UiAccountData; -use solana_cli_output::CliAccount; -use solana_program::pubkey; -use solana_program_test::tokio; -use switchboard_solana::Pubkey; - -#[tokio::test] -async fn account_field_values_reg() -> anyhow::Result<()> { - let account_fixtures_path = "tests/fixtures/marginfi_account"; - - // Sample 1 - - let mut path = PathBuf::from_str(account_fixtures_path).unwrap(); - path.push("marginfi_account_sample_1.json"); - let mut file = File::open(&path).unwrap(); - let mut account_info_raw = String::new(); - file.read_to_string(&mut account_info_raw).unwrap(); - - let account: CliAccount = serde_json::from_str(&account_info_raw).unwrap(); - let UiAccountData::Binary(data, _) = account.keyed_account.account.data else { - bail!("Expecting Binary format for fixtures") - }; - let account = MarginfiAccount::try_deserialize(&mut BASE64_STANDARD.decode(data)?.as_slice())?; - - assert_eq!( - account.group, - pubkey!("4qp6Fx6tnZkY5Wropq9wUYgtFxXKwE6viZxFHg3rdAG8") - ); - assert_eq!( - account.authority, - pubkey!("Dq7wypbedtaqQK9QqEFvfrxc4ppfRGXCeTVd7ee7n2jw") - ); - assert_eq!(account.account_flags, 0); - // health cache doesn't exist on these old accounts, but it also doesn't matter since it's read-only - assert_eq!(account.health_cache, HealthCache::zeroed()); - assert_eq!(account._padding0, [0; 21]); - - let balance_1 = account.lending_account.balances[0]; - assert!(balance_1.is_active()); - assert_eq!( - balance_1.bank_pk, - pubkey!("2s37akK2eyBbp8DZgCm7RtsaEz8eJP3Nxd4urLHQv7yB") - ); - assert_eq!(balance_1.bank_asset_tag, ASSET_TAG_DEFAULT); - assert_eq!(balance_1._pad0, [0; 6]); - assert_eq!( - I80F48::from(balance_1.asset_shares), - I80F48::from_str("1650216221.466876226897366").unwrap() - ); - assert_eq!( - I80F48::from(balance_1.liability_shares), - I80F48::from_str("0").unwrap() - ); - assert_eq!( - I80F48::from(balance_1.emissions_outstanding), - I80F48::from_str("0").unwrap() - ); - assert_eq!( - I80F48::from(balance_1.last_update), - I80F48::from_str("1711158766").unwrap() - ); - assert_eq!(balance_1._padding, [0; 1]); - - let balance_2 = account.lending_account.balances[1]; - assert!(balance_2.is_active()); - assert_eq!( - balance_2.bank_pk, - pubkey!("CCKtUs6Cgwo4aaQUmBPmyoApH2gUDErxNZCAntD6LYGh") - ); - assert_eq!(balance_2.bank_asset_tag, ASSET_TAG_DEFAULT); - assert_eq!(balance_2._pad0, [0; 6]); - assert_eq!( - I80F48::from(balance_2.asset_shares), - I80F48::from_str("0").unwrap() - ); - assert_eq!( - I80F48::from(balance_2.liability_shares), - I80F48::from_str("3806372611.588862122556122").unwrap() - ); - assert_eq!( - I80F48::from(balance_2.emissions_outstanding), - I80F48::from_str("0").unwrap() - ); - assert_eq!( - I80F48::from(balance_2.last_update), - I80F48::from_str("1711158793").unwrap() - ); - assert_eq!(balance_2._padding, [0; 1]); - - // Sample 2 - - let mut path = PathBuf::from_str(account_fixtures_path).unwrap(); - path.push("marginfi_account_sample_2.json"); - let mut file = File::open(&path).unwrap(); - let mut account_info_raw = String::new(); - file.read_to_string(&mut account_info_raw).unwrap(); - - let account: CliAccount = serde_json::from_str(&account_info_raw).unwrap(); - let UiAccountData::Binary(data, _) = account.keyed_account.account.data else { - bail!("Expecting Binary format for fixtures") - }; - let account = MarginfiAccount::try_deserialize(&mut BASE64_STANDARD.decode(data)?.as_slice())?; - - assert_eq!( - account.group, - pubkey!("4qp6Fx6tnZkY5Wropq9wUYgtFxXKwE6viZxFHg3rdAG8") - ); - assert_eq!( - account.authority, - pubkey!("3T1kGHp7CrdeW9Qj1t8NMc2Ks233RyvzVhoaUPWoBEFK") - ); - assert_eq!(account.account_flags, 0); - assert_eq!(account._padding0, [0; 21]); - - let balance_1 = account.lending_account.balances[0]; - assert!(balance_1.is_active()); - assert_eq!( - balance_1.bank_pk, - pubkey!("6hS9i46WyTq1KXcoa2Chas2Txh9TJAVr6n1t3tnrE23K") - ); - assert_eq!(balance_1.bank_asset_tag, ASSET_TAG_DEFAULT); - assert_eq!(balance_1._pad0, [0; 6]); - assert_eq!( - I80F48::from(balance_1.asset_shares), - I80F48::from_str("470.952530958931234").unwrap() - ); - assert_eq!( - I80F48::from(balance_1.liability_shares), - I80F48::from_str("0").unwrap() - ); - assert_eq!( - I80F48::from(balance_1.emissions_outstanding), - I80F48::from_str("26891413.388324654086347").unwrap() - ); - assert_eq!( - I80F48::from(balance_1.last_update), - I80F48::from_str("1705760628").unwrap() - ); - assert_eq!(balance_1._padding, [0; 1]); - - let balance_2 = account.lending_account.balances[1]; - assert!(!balance_2.is_active()); - assert_eq!( - balance_2.bank_pk, - pubkey!("11111111111111111111111111111111") - ); - assert_eq!(balance_2.bank_asset_tag, ASSET_TAG_DEFAULT); - assert_eq!(balance_2._pad0, [0; 6]); - assert_eq!( - I80F48::from(balance_2.asset_shares), - I80F48::from_str("0").unwrap() - ); - assert_eq!( - I80F48::from(balance_2.liability_shares), - I80F48::from_str("0").unwrap() - ); - assert_eq!( - I80F48::from(balance_2.emissions_outstanding), - I80F48::from_str("0").unwrap() - ); - assert_eq!( - I80F48::from(balance_2.last_update), - I80F48::from_str("0").unwrap() - ); - assert_eq!(balance_2._padding, [0; 1]); - - // Sample 3 - - let mut path = PathBuf::from_str(account_fixtures_path).unwrap(); - path.push("marginfi_account_sample_3.json"); - let mut file = File::open(&path).unwrap(); - let mut account_info_raw = String::new(); - file.read_to_string(&mut account_info_raw).unwrap(); - - let account: CliAccount = serde_json::from_str(&account_info_raw).unwrap(); - let UiAccountData::Binary(data, _) = account.keyed_account.account.data else { - bail!("Expecting Binary format for fixtures") - }; - let account = MarginfiAccount::try_deserialize(&mut BASE64_STANDARD.decode(data)?.as_slice())?; - - assert_eq!( - account.group, - pubkey!("4qp6Fx6tnZkY5Wropq9wUYgtFxXKwE6viZxFHg3rdAG8") - ); - assert_eq!( - account.authority, - pubkey!("7hmfVTuXc7HeX3YQjpiCXGVQuTeXonzjp795jorZukVR") - ); - assert_eq!(account.account_flags, 0); - assert_eq!(account._padding0, [0; 21]); - - let balance_1 = account.lending_account.balances[0]; - assert!(!balance_1.is_active()); - assert_eq!( - balance_1.bank_pk, - pubkey!("11111111111111111111111111111111") - ); - assert_eq!(balance_1.bank_asset_tag, ASSET_TAG_DEFAULT); - assert_eq!(balance_1._pad0, [0; 6]); - assert_eq!( - I80F48::from(balance_1.asset_shares), - I80F48::from_str("0").unwrap() - ); - assert_eq!( - I80F48::from(balance_1.liability_shares), - I80F48::from_str("0").unwrap() - ); - assert_eq!( - I80F48::from(balance_1.emissions_outstanding), - I80F48::from_str("0").unwrap() - ); - assert_eq!( - I80F48::from(balance_1.last_update), - I80F48::from_str("0").unwrap() - ); - assert_eq!(balance_1._padding, [0; 1]); - - Ok(()) -} - -#[tokio::test] -async fn bank_field_values_reg() -> anyhow::Result<()> { - let bank_fixtures_path = "tests/fixtures/bank"; - - // Sample 1 (Jito) - - let mut path = PathBuf::from_str(bank_fixtures_path).unwrap(); - path.push("bank_sample_1.json"); - let mut file = File::open(&path).unwrap(); - let mut account_info_raw = String::new(); - file.read_to_string(&mut account_info_raw).unwrap(); - - let account: CliAccount = serde_json::from_str(&account_info_raw).unwrap(); - let UiAccountData::Binary(data, _) = account.keyed_account.account.data else { - bail!("Expecting Binary format for fixtures") - }; - let bank = Bank::try_deserialize(&mut BASE64_STANDARD.decode(data)?.as_slice())?; - - assert_eq!( - bank.mint, - pubkey!("J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn") - ); - assert_eq!(bank.mint_decimals, 9); - assert_eq!( - bank.group, - pubkey!("4qp6Fx6tnZkY5Wropq9wUYgtFxXKwE6viZxFHg3rdAG8") - ); - assert_eq!( - I80F48::from(bank.asset_share_value), - I80F48::from_str("1.000561264812955").unwrap() - ); - assert_eq!( - I80F48::from(bank.liability_share_value), - I80F48::from_str("1.00737674726716").unwrap() - ); - assert_eq!( - I80F48::from(bank.collected_insurance_fees_outstanding), - I80F48::from_str("61174.580321107215052").unwrap() - ); - assert_eq!( - I80F48::from(bank.collected_group_fees_outstanding), - I80F48::from_str("35660072279.35465946938668").unwrap() - ); - assert_eq!( - I80F48::from(bank.total_liability_shares), - I80F48::from_str("79763493059362.858709822356737").unwrap() - ); - assert_eq!( - I80F48::from(bank.total_asset_shares), - I80F48::from_str("998366336320727.44918120920092").unwrap() - ); - assert_eq!( - I80F48::from(bank.config.asset_weight_init), - I80F48::from_str("0.649999976158142").unwrap() - ); - assert_eq!( - I80F48::from(bank.config.asset_weight_maint), - I80F48::from_str("0.80000001192093").unwrap() - ); - assert_eq!( - I80F48::from(bank.config.liability_weight_init), - I80F48::from_str("1.3").unwrap() - ); - assert_eq!( - I80F48::from(bank.config.liability_weight_maint), - I80F48::from_str("1.2").unwrap() - ); - assert_eq!( - I80F48::from(bank.config.interest_rate_config.optimal_utilization_rate), - I80F48::from_str("0.8").unwrap() - ); - assert_eq!( - I80F48::from(bank.config.interest_rate_config.plateau_interest_rate), - I80F48::from_str("0.1").unwrap() - ); - assert_eq!( - I80F48::from(bank.config.interest_rate_config.max_interest_rate), - I80F48::from_str("3").unwrap() - ); - assert_eq!( - I80F48::from(bank.config.interest_rate_config.insurance_fee_fixed_apr), - I80F48::from_str("0").unwrap() - ); - assert_eq!( - I80F48::from(bank.config.interest_rate_config.insurance_ir_fee), - I80F48::from_str("0").unwrap() - ); - assert_eq!( - I80F48::from(bank.config.interest_rate_config.protocol_fixed_fee_apr), - I80F48::from_str("0.01").unwrap() - ); - assert_eq!( - I80F48::from(bank.config.interest_rate_config.protocol_ir_fee), - I80F48::from_str("0.05").unwrap() - ); - - // Sample 2 (META) - - let mut path = PathBuf::from_str(bank_fixtures_path).unwrap(); - path.push("bank_sample_2.json"); - let mut file = File::open(&path).unwrap(); - let mut account_info_raw = String::new(); - file.read_to_string(&mut account_info_raw).unwrap(); - - let account: CliAccount = serde_json::from_str(&account_info_raw).unwrap(); - let UiAccountData::Binary(data, _) = account.keyed_account.account.data else { - bail!("Expecting Binary format for fixtures") - }; - let bank = Bank::try_deserialize(&mut BASE64_STANDARD.decode(data)?.as_slice())?; - - assert_eq!( - bank.mint, - pubkey!("METADDFL6wWMWEoKTFJwcThTbUmtarRJZjRpzUvkxhr") - ); - assert_eq!(bank.mint_decimals, 9); - assert_eq!( - bank.group, - pubkey!("4qp6Fx6tnZkY5Wropq9wUYgtFxXKwE6viZxFHg3rdAG8") - ); - assert_eq!( - I80F48::from(bank.asset_share_value), - I80F48::from_str("1").unwrap() - ); - assert_eq!( - I80F48::from(bank.liability_share_value), - I80F48::from_str("1").unwrap() - ); - assert_eq!( - I80F48::from(bank.collected_insurance_fees_outstanding), - I80F48::from_str("0").unwrap() - ); - assert_eq!( - I80F48::from(bank.collected_group_fees_outstanding), - I80F48::from_str("0").unwrap() - ); - assert_eq!( - I80F48::from(bank.total_liability_shares), - I80F48::from_str("0").unwrap() - ); - assert_eq!( - I80F48::from(bank.total_asset_shares), - I80F48::from_str("698503862367").unwrap() - ); - assert_eq!( - I80F48::from(bank.config.asset_weight_init), - I80F48::from_str("0").unwrap() - ); - assert_eq!( - I80F48::from(bank.config.asset_weight_maint), - I80F48::from_str("0").unwrap() - ); - assert_eq!( - I80F48::from(bank.config.liability_weight_init), - I80F48::from_str("2.5").unwrap() - ); - assert_eq!( - I80F48::from(bank.config.liability_weight_maint), - I80F48::from_str("1.5").unwrap() - ); - assert_eq!( - I80F48::from(bank.config.interest_rate_config.optimal_utilization_rate), - I80F48::from_str("0.8").unwrap() - ); - assert_eq!( - I80F48::from(bank.config.interest_rate_config.plateau_interest_rate), - I80F48::from_str("0.1").unwrap() - ); - assert_eq!( - I80F48::from(bank.config.interest_rate_config.max_interest_rate), - I80F48::from_str("3").unwrap() - ); - assert_eq!( - I80F48::from(bank.config.interest_rate_config.insurance_fee_fixed_apr), - I80F48::from_str("0").unwrap() - ); - assert_eq!( - I80F48::from(bank.config.interest_rate_config.insurance_ir_fee), - I80F48::from_str("0").unwrap() - ); - assert_eq!( - I80F48::from(bank.config.interest_rate_config.protocol_fixed_fee_apr), - I80F48::from_str("0.01").unwrap() - ); - assert_eq!( - I80F48::from(bank.config.interest_rate_config.protocol_ir_fee), - I80F48::from_str("0.05").unwrap() - ); - - // Sample 3 (USDT) - - let mut path = PathBuf::from_str(bank_fixtures_path).unwrap(); - path.push("bank_sample_3.json"); - let mut file = File::open(&path).unwrap(); - let mut account_info_raw = String::new(); - file.read_to_string(&mut account_info_raw).unwrap(); - - let account: CliAccount = serde_json::from_str(&account_info_raw).unwrap(); - let UiAccountData::Binary(data, _) = account.keyed_account.account.data else { - bail!("Expecting Binary format for fixtures") - }; - let bank = Bank::try_deserialize(&mut BASE64_STANDARD.decode(data)?.as_slice())?; - - assert_eq!( - bank.mint, - pubkey!("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB") - ); - assert_eq!(bank.mint_decimals, 6); - assert_eq!( - bank.group, - pubkey!("4qp6Fx6tnZkY5Wropq9wUYgtFxXKwE6viZxFHg3rdAG8") - ); - assert_eq!( - I80F48::from(bank.asset_share_value), - I80F48::from_str("1.063003765188338").unwrap() - ); - assert_eq!( - I80F48::from(bank.liability_share_value), - I80F48::from_str("1.12089611736063").unwrap() - ); - assert_eq!( - I80F48::from(bank.collected_insurance_fees_outstanding), - I80F48::from_str("45839.746526861401865").unwrap() - ); - assert_eq!( - I80F48::from(bank.collected_group_fees_outstanding), - I80F48::from_str("28634360131.219557095675654").unwrap() - ); - assert_eq!( - I80F48::from(bank.total_liability_shares), - I80F48::from_str("32109684419718.204607882232235").unwrap() - ); - assert_eq!( - I80F48::from(bank.total_asset_shares), - I80F48::from_str("43231381120800.339303417329994").unwrap() - ); - assert_eq!( - I80F48::from(bank.config.asset_weight_init), - I80F48::from_str("1").unwrap() - ); - assert_eq!( - I80F48::from(bank.config.asset_weight_maint), - I80F48::from_str("1").unwrap() - ); - assert_eq!( - I80F48::from(bank.config.liability_weight_init), - I80F48::from_str("1.25").unwrap() - ); - assert_eq!( - I80F48::from(bank.config.liability_weight_maint), - I80F48::from_str("1.1").unwrap() - ); - assert_eq!( - I80F48::from(bank.config.interest_rate_config.optimal_utilization_rate), - I80F48::from_str("0.8").unwrap() - ); - assert_eq!( - I80F48::from(bank.config.interest_rate_config.plateau_interest_rate), - I80F48::from_str("0.2").unwrap() - ); - assert_eq!( - I80F48::from(bank.config.interest_rate_config.max_interest_rate), - I80F48::from_str("4").unwrap() - ); - assert_eq!( - I80F48::from(bank.config.interest_rate_config.insurance_fee_fixed_apr), - I80F48::from_str("0").unwrap() - ); - assert_eq!( - I80F48::from(bank.config.interest_rate_config.insurance_ir_fee), - I80F48::from_str("0").unwrap() - ); - assert_eq!( - I80F48::from(bank.config.interest_rate_config.protocol_fixed_fee_apr), - I80F48::from_str("0.01").unwrap() - ); - assert_eq!( - I80F48::from(bank.config.interest_rate_config.protocol_ir_fee), - I80F48::from_str("0.05").unwrap() - ); - - // Sample 4 (PyUSD) - - let mut path = PathBuf::from_str(bank_fixtures_path).unwrap(); - path.push("bank_pyusd_230822.json"); - let mut file = File::open(&path).unwrap(); - let mut account_info_raw = String::new(); - file.read_to_string(&mut account_info_raw).unwrap(); - - let account: CliAccount = serde_json::from_str(&account_info_raw).unwrap(); - let UiAccountData::Binary(data, _) = account.keyed_account.account.data else { - bail!("Expecting Binary format for fixtures") - }; - let bank = Bank::try_deserialize(&mut BASE64_STANDARD.decode(data)?.as_slice())?; - - assert_eq!( - bank.mint, - pubkey!("2b1kV6DkPAnxd5ixfnxCpjxmKwqjjaYmCZfHsFu24GXo") - ); - assert_eq!(bank.mint_decimals, 6); - assert_eq!( - bank.group, - pubkey!("4qp6Fx6tnZkY5Wropq9wUYgtFxXKwE6viZxFHg3rdAG8") - ); - assert_eq!(bank._pad0, [0; 7]); - assert_eq!( - I80F48::from(bank.asset_share_value), - I80F48::from_str("1.000087706703773").unwrap() - ); - assert_eq!( - I80F48::from(bank.liability_share_value), - I80F48::from_str("1.00157842522853").unwrap() - ); - assert_eq!( - bank.liquidity_vault, - pubkey!("HUmHLAXvcoUgWAtanAnCPNssBnAUzEfSRsb4MZYw7R73") - ); - assert_eq!(bank.liquidity_vault_bump, 249); - assert_eq!(bank.liquidity_vault_authority_bump, 255); - assert_eq!( - bank.insurance_vault, - pubkey!("4jE6g1pLG5NmW19z9DgzjCwYEDy3jYSqix1Lv5BN4yEc") - ); - assert_eq!(bank.insurance_vault_bump, 255); - assert_eq!(bank.insurance_vault_authority_bump, 254); - assert_eq!(bank._pad1, [0; 4]); - assert_eq!( - I80F48::from(bank.collected_insurance_fees_outstanding), - I80F48::from_str("3459.51398842307891").unwrap() - ); - assert_eq!( - bank.fee_vault, - pubkey!("AzVkUZFuvGwy3pD6U2eAJJNhHYMnzkzBFjjhn8CSVFRa") - ); - assert_eq!(bank.fee_vault_bump, 255); - assert_eq!(bank.fee_vault_authority_bump, 253); - assert_eq!(bank._pad2, [0; 6]); - assert_eq!( - I80F48::from(bank.collected_group_fees_outstanding), - I80F48::from_str("1015697146.551430542063226").unwrap() - ); - assert_eq!( - I80F48::from(bank.total_liability_shares), - I80F48::from_str("1997270567603.702517235172913").unwrap() - ); - assert_eq!( - I80F48::from(bank.total_asset_shares), - I80F48::from_str("39996492038102.214176640606695").unwrap() - ); - assert_eq!(bank.last_update, 1724302256); - - assert_eq!( - I80F48::from(bank.config.asset_weight_init), - I80F48::from_str("0.899999976158142").unwrap() - ); - assert_eq!( - I80F48::from(bank.config.asset_weight_maint), - I80F48::from_str("0.94999998807907").unwrap() - ); - assert_eq!( - I80F48::from(bank.config.liability_weight_init), - I80F48::from_str("1.25").unwrap() - ); - assert_eq!( - I80F48::from(bank.config.liability_weight_maint), - I80F48::from_str("1.1").unwrap() - ); - assert_eq!(bank.config.deposit_limit, 40000000000000); - assert_eq!( - I80F48::from(bank.config.interest_rate_config.optimal_utilization_rate), - I80F48::from_str("0.8").unwrap() - ); - assert_eq!( - I80F48::from(bank.config.interest_rate_config.plateau_interest_rate), - I80F48::from_str("0.1").unwrap() - ); - assert_eq!( - I80F48::from(bank.config.interest_rate_config.max_interest_rate), - I80F48::from_str("3").unwrap() - ); - assert_eq!( - I80F48::from(bank.config.interest_rate_config.insurance_fee_fixed_apr), - I80F48::from_str("0").unwrap() - ); - assert_eq!( - I80F48::from(bank.config.interest_rate_config.insurance_ir_fee), - I80F48::from_str("0").unwrap() - ); - assert_eq!( - I80F48::from(bank.config.interest_rate_config.protocol_fixed_fee_apr), - I80F48::from_str("0.01").unwrap() - ); - assert_eq!( - I80F48::from(bank.config.interest_rate_config.protocol_ir_fee), - I80F48::from_str("0.05").unwrap() - ); - assert_eq!( - bank.config.operational_state, - BankOperationalState::Operational - ); - assert_eq!(bank.config.oracle_setup, OracleSetup::PythPushOracle); - assert_eq!( - bank.config.oracle_keys, - [ - pubkey!("E3iagrg2kXyNJ9Ad2R2pNUsRmXutyQScu3m1FcQmBsAH"), - Pubkey::default(), - Pubkey::default(), - Pubkey::default(), - Pubkey::default() - ] - ); - assert_eq!(bank.config._pad0, [0; 6]); - assert_eq!(bank.config.borrow_limit, 2000000000000); - assert_eq!(bank.config.risk_tier, RiskTier::Collateral); - assert_eq!(bank.config.asset_tag, ASSET_TAG_DEFAULT); - assert_eq!(bank.config._pad1, [0; 6]); - assert_eq!(bank.config.total_asset_value_init_limit, 0); - assert_eq!(bank.config.oracle_max_age, 300); - assert_eq!(bank.config._padding0, [0; 6]); - assert_eq!(bank.config._padding1, [0; 32]); - - assert_eq!(bank.flags, 2); - - assert_eq!( - I80F48::from(bank.emissions_rate), - I80F48::from_str("170000").unwrap() - ); - assert_eq!( - I80F48::from(bank.emissions_remaining), - I80F48::from_str("130585694893.67407796351017").unwrap() - ); - assert_eq!( - bank.emissions_mint, - pubkey!("2b1kV6DkPAnxd5ixfnxCpjxmKwqjjaYmCZfHsFu24GXo") - ); - // Legacy banks have no program fees - assert_eq!( - I80F48::from(bank.collected_program_fees_outstanding), - I80F48::from_str("0").unwrap() - ); - - assert_eq!(bank._padding_0, [[0, 0]; 27]); - assert_eq!(bank._padding_1, [[0, 0]; 32]); - - Ok(()) -} diff --git a/programs/marginfi/tests/misc/risk_engine_flexible_oracle_checks.rs b/programs/marginfi/tests/misc/risk_engine_flexible_oracle_checks.rs deleted file mode 100644 index 21066ed3b..000000000 --- a/programs/marginfi/tests/misc/risk_engine_flexible_oracle_checks.rs +++ /dev/null @@ -1,435 +0,0 @@ -use fixed_macro::types::I80F48; -use fixtures::{ - assert_custom_error, - test::{ - BankMint, TestBankSetting, TestFixture, TestSettings, DEFAULT_SOL_TEST_BANK_CONFIG, - PYTH_SOL_EQUIVALENT_FEED, PYTH_SOL_FEED, PYTH_USDC_FEED, - }, -}; -use marginfi::{ - prelude::MarginfiError, - state::marginfi_group::{BankConfig, BankConfigOpt, BankVaultType}, -}; -use solana_program_test::tokio; - -#[tokio::test] -/// User deposits $5000 SOLE and $500 USDC, borrowing $990 SOL should fail due to stale oracle -async fn re_one_oracle_stale_failure() -> anyhow::Result<()> { - let test_f = TestFixture::new(Some(TestSettings::all_banks_payer_not_admin())).await; - - let usdc_bank = test_f.get_bank(&BankMint::Usdc); - let sol_bank = test_f.get_bank(&BankMint::Sol); - let sol_eq_bank = test_f.get_bank(&BankMint::SolEquivalent); - - // Make SOLE feed stale - test_f.set_time(0); - test_f.set_pyth_oracle_timestamp(PYTH_SOL_FEED, 120).await; - test_f.set_pyth_oracle_timestamp(PYTH_USDC_FEED, 120).await; - test_f.advance_time(120).await; - - // Fund SOL lender - let lender_mfi_account_f = test_f.create_marginfi_account().await; - let lender_token_account_sol = test_f - .sol_mint - .create_token_account_and_mint_to(1_000) - .await; - lender_mfi_account_f - .try_bank_deposit(lender_token_account_sol.key, sol_bank, 1_000, None) - .await?; - - // Fund SOL borrower - let borrower_mfi_account_f = test_f.create_marginfi_account().await; - let borrower_token_account_f_usdc = test_f - .usdc_mint - .create_token_account_and_mint_to(1_000) - .await; - let borrower_token_account_f_sol_eq = test_f - .sol_equivalent_mint - .create_token_account_and_mint_to(1_000) - .await; - let borrower_token_account_f_sol = test_f.sol_mint.create_empty_token_account().await; - - borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_f_usdc.key, usdc_bank, 500, None) - .await?; - - borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_f_sol_eq.key, sol_eq_bank, 500, None) - .await?; - - // Borrow SOL - let res = borrower_mfi_account_f - .try_bank_borrow_with_nonce(borrower_token_account_f_sol.key, sol_bank, 99, 1) - .await; - - assert!(res.is_err()); - assert_custom_error!(res.unwrap_err(), MarginfiError::RiskEngineInitRejected); - - // Make SOL feed not stale - usdc_bank - .update_config( - BankConfigOpt { - oracle_max_age: Some(200), - ..Default::default() - }, - None, - ) - .await?; - sol_bank - .update_config( - BankConfigOpt { - oracle_max_age: Some(200), - ..Default::default() - }, - None, - ) - .await?; - sol_eq_bank - .update_config( - BankConfigOpt { - oracle_max_age: Some(200), - ..Default::default() - }, - None, - ) - .await?; - - // Borrow SOL - let res = borrower_mfi_account_f - .try_bank_borrow_with_nonce(borrower_token_account_f_sol.key, sol_bank, 99, 2) - .await; - - assert!(res.is_ok()); - - Ok(()) -} - -#[tokio::test] -/// User deposits $500 of SOLE and $500 of USDC, but SOLE oracle is stale -/// -> borrowing 51 SOL should not succeed ($500 USDC collateral < $510 SOL borrow), but borrowing 40 SOL should go through despite the stale SOLE oracle ($500 USDC collateral > $400 SOL borrow) -async fn re_one_oracle_stale_success() -> anyhow::Result<()> { - let test_f = TestFixture::new(Some(TestSettings::all_banks_payer_not_admin())).await; - - let usdc_bank = test_f.get_bank(&BankMint::Usdc); - let sol_bank = test_f.get_bank(&BankMint::Sol); - let sol_eq_bank = test_f.get_bank(&BankMint::SolEquivalent); - - test_f.set_time(0); - test_f.set_pyth_oracle_timestamp(PYTH_SOL_FEED, 120).await; - test_f.set_pyth_oracle_timestamp(PYTH_USDC_FEED, 120).await; - test_f.advance_time(120).await; - - // Fund SOL lender - let lender_mfi_account_f = test_f.create_marginfi_account().await; - let lender_token_account_sol = test_f - .sol_mint - .create_token_account_and_mint_to(1_000) - .await; - lender_mfi_account_f - .try_bank_deposit(lender_token_account_sol.key, sol_bank, 1_000, None) - .await?; - - // Fund SOL borrower - let borrower_mfi_account_f = test_f.create_marginfi_account().await; - let borrower_token_account_f_usdc = test_f - .usdc_mint - .create_token_account_and_mint_to(1_000) - .await; - let borrower_token_account_f_sol_eq = test_f - .sol_equivalent_mint - .create_token_account_and_mint_to(1_000) - .await; - let borrower_token_account_f_sol = test_f.sol_mint.create_empty_token_account().await; - - borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_f_usdc.key, usdc_bank, 500, None) - .await?; - - borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_f_sol_eq.key, sol_eq_bank, 500, None) - .await?; - - // Borrow SOL - let res = borrower_mfi_account_f - .try_bank_borrow(borrower_token_account_f_sol.key, sol_bank, 51) - .await; - - assert!(res.is_err()); - assert_custom_error!(res.unwrap_err(), MarginfiError::RiskEngineInitRejected); - - // Borrow SOL - let res = borrower_mfi_account_f - .try_bank_borrow(borrower_token_account_f_sol.key, sol_bank, 40) - .await; - - assert!(res.is_ok()); - - Ok(()) -} - -#[tokio::test] -/// Borrowing from a bank with a stale oracle should fail -async fn re_one_oracle_stale_failure_2() -> anyhow::Result<()> { - let test_f = TestFixture::new(Some(TestSettings::all_banks_payer_not_admin())).await; - - let usdc_bank = test_f.get_bank(&BankMint::Usdc); - let sol_bank = test_f.get_bank(&BankMint::Sol); - - test_f.set_time(0); - - // Fund SOL lender - let lender_mfi_account_f = test_f.create_marginfi_account().await; - let lender_token_account_sol = test_f - .sol_mint - .create_token_account_and_mint_to(1_000) - .await; - lender_mfi_account_f - .try_bank_deposit(lender_token_account_sol.key, sol_bank, 1_000, None) - .await?; - - // Fund SOL borrower - let borrower_mfi_account_f = test_f.create_marginfi_account().await; - let borrower_token_account_f_usdc = - test_f.usdc_mint.create_token_account_and_mint_to(500).await; - let borrower_token_account_f_sol = test_f.sol_mint.create_empty_token_account().await; - - borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_f_usdc.key, usdc_bank, 500, None) - .await?; - - // Make SOL oracle stale - test_f.set_time(0); - test_f.set_pyth_oracle_timestamp(PYTH_USDC_FEED, 120).await; - test_f.set_pyth_oracle_timestamp(PYTH_SOL_FEED, 0).await; - test_f.advance_time(120).await; - - // Attempt to borrow SOL with stale oracle - let res = borrower_mfi_account_f - .try_bank_borrow_with_nonce(borrower_token_account_f_sol.key, sol_bank, 40, 1) - .await; - - assert!(res.is_err()); - assert_custom_error!(res.unwrap_err(), MarginfiError::InternalLogicError); - - // Make SOL oracle not stale - test_f.set_pyth_oracle_timestamp(PYTH_SOL_FEED, 120).await; - - // Borrow SOL - let res = borrower_mfi_account_f - .try_bank_borrow_with_nonce(borrower_token_account_f_sol.key, sol_bank, 40, 2) - .await; - assert!(res.is_ok()); - - Ok(()) -} - -#[tokio::test] -/// Borrower borrows USDC against SOL, if SOL oracle is stale, the liquidation should fail. -/// -/// Liquidator is using SOLE and USDC as collateral, if SOLE oracle is stale and USDC is live, -/// liquidation should succeed as the liquidator has enough USDC collateral. -async fn re_liquidaiton_fail() -> anyhow::Result<()> { - let test_f = TestFixture::new(Some(TestSettings { - banks: vec![ - TestBankSetting { - mint: BankMint::Usdc, - ..Default::default() - }, - TestBankSetting { - mint: BankMint::SolEquivalent, - ..Default::default() - }, - TestBankSetting { - mint: BankMint::Sol, - config: Some(BankConfig { - asset_weight_init: I80F48!(1).into(), - asset_weight_maint: I80F48!(1).into(), - ..*DEFAULT_SOL_TEST_BANK_CONFIG - }), - }, - ], - protocol_fees: false, - })) - .await; - - test_f.set_time(0); - - let usdc_bank_f = test_f.get_bank(&BankMint::Usdc); - let sol_bank_f = test_f.get_bank(&BankMint::Sol); - let sole_bank_f = test_f.get_bank(&BankMint::SolEquivalent); - - let lender_mfi_account_f = test_f.create_marginfi_account().await; - let lender_token_account_usdc = test_f - .usdc_mint - .create_token_account_and_mint_to(2_000) - .await; - lender_mfi_account_f - .try_bank_deposit(lender_token_account_usdc.key, usdc_bank_f, 2_000, None) - .await?; - let lender_token_account_sole = test_f - .sol_equivalent_mint - .create_token_account_and_mint_to(100) - .await; - lender_mfi_account_f - .try_bank_deposit(lender_token_account_sole.key, sole_bank_f, 100, None) - .await?; - - let borrower_mfi_account_f = test_f.create_marginfi_account().await; - let borrower_token_account_sol = test_f.sol_mint.create_token_account_and_mint_to(100).await; - let borrower_token_account_usdc = test_f.usdc_mint.create_empty_token_account().await; - - // Borrower deposits 100 SOL worth $1000 - borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_sol.key, sol_bank_f, 100, None) - .await?; - - // Borrower borrows $999 - borrower_mfi_account_f - .try_bank_borrow(borrower_token_account_usdc.key, usdc_bank_f, 999) - .await?; - - // Synthetically bring down the borrower account health by reducing the asset weights of the SOL bank - sol_bank_f - .update_config( - BankConfigOpt { - asset_weight_init: Some(I80F48!(0.25).into()), - asset_weight_maint: Some(I80F48!(0.5).into()), - ..Default::default() - }, - None, - ) - .await?; - - // Make borrower asset bank stale - test_f.set_pyth_oracle_timestamp(PYTH_SOL_FEED, 0).await; - test_f.set_pyth_oracle_timestamp(PYTH_USDC_FEED, 120).await; - test_f - .set_pyth_oracle_timestamp(PYTH_SOL_EQUIVALENT_FEED, 120) - .await; - - test_f.advance_time(120).await; - - let res = lender_mfi_account_f - .try_liquidate(&borrower_mfi_account_f, sol_bank_f, 1, usdc_bank_f) - .await; - - assert!(res.is_err()); - assert_custom_error!(res.unwrap_err(), MarginfiError::InternalLogicError); - - // Make borrower asset bank not stale - test_f.set_pyth_oracle_timestamp(PYTH_SOL_FEED, 120).await; - // Make part of liquidator deposts stale - test_f - .set_pyth_oracle_timestamp(PYTH_SOL_EQUIVALENT_FEED, 0) - .await; - - let res = lender_mfi_account_f - .try_liquidate(&borrower_mfi_account_f, sol_bank_f, 2, usdc_bank_f) - .await; - - assert!(res.is_ok()); - - Ok(()) -} - -#[tokio::test] -async fn re_bankruptcy_fail() -> anyhow::Result<()> { - let mut test_f = TestFixture::new(Some(TestSettings { - banks: vec![ - TestBankSetting { - mint: BankMint::Usdc, - config: None, - }, - TestBankSetting { - mint: BankMint::Sol, - config: Some(BankConfig { - asset_weight_init: I80F48!(1).into(), - ..*DEFAULT_SOL_TEST_BANK_CONFIG - }), - }, - ], - protocol_fees: false, - })) - .await; - - test_f.set_time(0); - - let lender_mfi_account_f = test_f.create_marginfi_account().await; - let lender_token_account_usdc = test_f - .usdc_mint - .create_token_account_and_mint_to(100_000) - .await; - lender_mfi_account_f - .try_bank_deposit( - lender_token_account_usdc.key, - test_f.get_bank(&BankMint::Usdc), - 100_000, - None, - ) - .await?; - - let borrower_account = test_f.create_marginfi_account().await; - let borrower_deposit_account = test_f - .sol_mint - .create_token_account_and_mint_to(1_001) - .await; - - borrower_account - .try_bank_deposit( - borrower_deposit_account.key, - test_f.get_bank(&BankMint::Sol), - 1_001, - None, - ) - .await?; - - let borrower_borrow_account = test_f.usdc_mint.create_empty_token_account().await; - - borrower_account - .try_bank_borrow( - borrower_borrow_account.key, - test_f.get_bank(&BankMint::Usdc), - 10_000, - ) - .await?; - - let mut borrower_mfi_account = borrower_account.load().await; - borrower_mfi_account.lending_account.balances[0] - .asset_shares - .value = 0_i128.to_le_bytes(); - borrower_account.set_account(&borrower_mfi_account).await?; - - { - let (insurance_vault, _) = test_f - .get_bank(&BankMint::Usdc) - .get_vault(BankVaultType::Insurance); - test_f - .get_bank_mut(&BankMint::Usdc) - .mint - .mint_to(&insurance_vault, 10_000) - .await; - } - - test_f.set_pyth_oracle_timestamp(PYTH_USDC_FEED, 0).await; - test_f.advance_time(120).await; - - let res = test_f - .marginfi_group - .try_handle_bankruptcy_with_nonce(test_f.get_bank(&BankMint::Usdc), &borrower_account, 1) - .await; - - assert!(res.is_err()); - assert_custom_error!(res.unwrap_err(), MarginfiError::InternalLogicError); - - // Make borrower liablity bank not stale - test_f.set_pyth_oracle_timestamp(PYTH_USDC_FEED, 120).await; - - let res = test_f - .marginfi_group - .try_handle_bankruptcy_with_nonce(test_f.get_bank(&BankMint::Usdc), &borrower_account, 2) - .await; - - assert!(res.is_ok()); - - Ok(()) -} diff --git a/programs/marginfi/tests/misc/token_extensions.rs b/programs/marginfi/tests/misc/token_extensions.rs deleted file mode 100644 index 33487f339..000000000 --- a/programs/marginfi/tests/misc/token_extensions.rs +++ /dev/null @@ -1,195 +0,0 @@ -use anchor_spl::token_2022::spl_token_2022::extension::{ - transfer_fee::TransferFeeConfig, BaseStateWithExtensions, -}; -use fixed::types::I80F48; -use fixed_macro::types::I80F48; -use fixtures::{ - assert_eq_noise, native, - spl::SupportedExtension, - test::{BankMint, TestBankSetting, TestFixture, TestSettings, DEFAULT_SOL_TEST_BANK_CONFIG}, - ui_to_native, -}; -use marginfi::state::marginfi_group::{Bank, BankConfig, BankConfigOpt, BankVaultType}; -use solana_program_test::tokio; -use test_case::test_case; - -#[test_case(vec![])] -#[test_case(vec![SupportedExtension::TransferFee])] -#[test_case(vec![SupportedExtension::TransferHook])] -#[test_case(vec![SupportedExtension::PermanentDelegate])] -#[test_case(vec![SupportedExtension::InterestBearing])] -#[test_case(vec![SupportedExtension::MintCloseAuthority])] -#[test_case(vec![SupportedExtension::PermanentDelegate, SupportedExtension::InterestBearing])] -#[test_case(vec![SupportedExtension::MintCloseAuthority, SupportedExtension::InterestBearing])] -#[test_case(vec![SupportedExtension::PermanentDelegate,SupportedExtension::MintCloseAuthority])] -#[test_case(vec![SupportedExtension::InterestBearing, SupportedExtension::MintCloseAuthority])] -#[test_case(vec![SupportedExtension::PermanentDelegate, SupportedExtension::InterestBearing, SupportedExtension::MintCloseAuthority])] -#[tokio::test] -async fn marginfi_account_liquidation_success_with_extension( - extensions: Vec, -) -> anyhow::Result<()> { - let test_f = TestFixture::new_with_t22_extension( - Some(TestSettings { - banks: vec![ - TestBankSetting { - mint: BankMint::Usdc, - ..TestBankSetting::default() - }, - TestBankSetting { - mint: BankMint::UsdcT22, - ..TestBankSetting::default() - }, - TestBankSetting { - mint: BankMint::PyUSD, - ..TestBankSetting::default() - }, - TestBankSetting { - mint: BankMint::Sol, - config: Some(BankConfig { - asset_weight_init: I80F48!(1).into(), - asset_weight_maint: I80F48!(1).into(), - ..*DEFAULT_SOL_TEST_BANK_CONFIG - }), - }, - ], - protocol_fees: false, - }), - &extensions, - ) - .await; - - let usdc_t22_bank_f = test_f.get_bank(&BankMint::UsdcT22); - let sol_bank_f = test_f.get_bank(&BankMint::Sol); - - let lender_mfi_account_f = test_f.create_marginfi_account().await; - let lender_token_account_usdc_t22 = test_f - .usdc_t22_mint - .create_token_account_and_mint_to(2_500) - .await; - lender_mfi_account_f - .try_bank_deposit( - lender_token_account_usdc_t22.key, - usdc_t22_bank_f, - 2_000, - None, - ) - .await - .unwrap(); - - let borrower_mfi_account_f = test_f.create_marginfi_account().await; - let borrower_token_account_sol = test_f.sol_mint.create_token_account_and_mint_to(100).await; - let borrower_token_account_usdc_t22 = test_f.usdc_t22_mint.create_empty_token_account().await; - - // Borrower deposits 100 SOL worth of $1000 - borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_sol.key, sol_bank_f, 100, None) - .await?; - - // Borrower borrows $999 - // u32 is fine for this test.. not in production. Needed for Into - let usdc_t22_mint_state = usdc_t22_bank_f.mint.load_state().await; - let transfer_fee_offset: u32 = usdc_t22_mint_state - .get_extension::() - .map(|config| { - config - .calculate_inverse_epoch_fee(0, native!(900, "USDC")) - .unwrap_or(0) as u32 - }) - .unwrap_or(0); - - borrower_mfi_account_f - .try_bank_borrow(borrower_token_account_usdc_t22.key, usdc_t22_bank_f, 900) - .await - .unwrap(); - assert_eq!( - borrower_token_account_usdc_t22.balance().await, - native!(900, "USDC") - ); - - // Synthetically bring down the borrower account health by reducing the asset weights of the SOL bank - sol_bank_f - .update_config( - BankConfigOpt { - asset_weight_init: Some(I80F48!(0.25).into()), - asset_weight_maint: Some(I80F48!(0.5).into()), - ..Default::default() - }, - None, - ) - .await?; - - lender_mfi_account_f - .try_liquidate(&borrower_mfi_account_f, sol_bank_f, 1, usdc_t22_bank_f) - .await - .unwrap(); - - // Checks - let sol_bank: Bank = sol_bank_f.load().await; - let usdc_t22_bank: Bank = usdc_t22_bank_f.load().await; - - let depositor_ma = lender_mfi_account_f.load().await; - let borrower_ma = borrower_mfi_account_f.load().await; - - // Depositors should have 1 SOL - assert_eq!( - sol_bank - .get_asset_amount(depositor_ma.lending_account.balances[1].asset_shares.into()) - .unwrap(), - I80F48::from(native!(1, "SOL")) - ); - - // Depositors should have 1990.25 USDC - assert_eq_noise!( - usdc_t22_bank - .get_asset_amount(depositor_ma.lending_account.balances[0].asset_shares.into()) - .unwrap(), - I80F48::from(native!(1990.25, "USDC", f64)), - native!(0.00001, "USDC", f64) - ); - - // Borrower should have 99 SOL - assert_eq!( - sol_bank - .get_asset_amount(borrower_ma.lending_account.balances[0].asset_shares.into()) - .unwrap(), - I80F48::from(native!(99, "SOL")) - ); - - // Borrower should have 890.50 USDC - assert_eq_noise!( - usdc_t22_bank - .get_liability_amount( - borrower_ma.lending_account.balances[1] - .liability_shares - .into() - ) - .unwrap(), - I80F48::from(native!( - 890.50 + transfer_fee_offset as f64 / 1e6, - "USDC", - f64 - )), - native!(0.00001, "USDC", f64) - ); - - // Check insurance fund fee - let insurance_fund_usdc = usdc_t22_bank_f - .get_vault_token_account(BankVaultType::Insurance) - .await; - - let fee = usdc_t22_mint_state - .get_extension::() - .map(|config| { - config - .calculate_epoch_fee(0, ui_to_native!(0.25, 6)) - .unwrap_or(0) as u32 - }) - .unwrap_or(0); - assert_eq_noise!( - insurance_fund_usdc.balance().await as i64, - native!(0.25 - fee as f64 / 1e6, "USDC", f64) as i64, - 1 - ); - - Ok(()) -} diff --git a/programs/marginfi/tests/tests.rs b/programs/marginfi/tests/tests.rs deleted file mode 100644 index 3f13d8b0e..000000000 --- a/programs/marginfi/tests/tests.rs +++ /dev/null @@ -1,3 +0,0 @@ -mod admin_actions; -mod misc; -mod user_actions; diff --git a/programs/marginfi/tests/user_actions/borrow.rs b/programs/marginfi/tests/user_actions/borrow.rs deleted file mode 100644 index f8f4b8715..000000000 --- a/programs/marginfi/tests/user_actions/borrow.rs +++ /dev/null @@ -1,488 +0,0 @@ -use anchor_spl::token_2022::spl_token_2022::extension::{ - transfer_fee::TransferFeeConfig, BaseStateWithExtensions, -}; -use fixed::types::I80F48; -use fixtures::{assert_custom_error, native, prelude::*, ui_to_native}; -use marginfi::{ - assert_eq_with_tolerance, - prelude::*, - state::marginfi_group::{BankConfigOpt, BankVaultType}, -}; -use pretty_assertions::assert_eq; -use solana_program_test::*; -use test_case::test_case; - -#[test_case(100., 9., BankMint::Usdc, BankMint::Sol)] -#[test_case(123456.0, 12345.599999999, BankMint::Usdc, BankMint::Sol)] -#[test_case(123456.0, 10000., BankMint::UsdcSwb, BankMint::Sol)] -#[test_case(1.0, 5.0, BankMint::Sol, BankMint::Usdc)] -#[test_case(128932.0, 9834.0, BankMint::PyUSD, BankMint::SolSwb)] -#[test_case(240., 0.092, BankMint::PyUSD, BankMint::T22WithFee)] -#[test_case(36., 1.7, BankMint::T22WithFee, BankMint::Sol)] -#[test_case(200., 1.1, BankMint::Usdc, BankMint::SolSwbOrigFee)] // Sol @ ~ $153 -#[tokio::test] -async fn marginfi_account_borrow_success( - deposit_amount: f64, - borrow_amount: f64, - collateral_mint: BankMint, - debt_mint: BankMint, -) -> anyhow::Result<()> { - // ------------------------------------------------------------------------- - // Setup - // ------------------------------------------------------------------------- - - let mut test_f = TestFixture::new(Some(TestSettings::all_banks_payer_not_admin())).await; - - // LP - - let lp_deposit_amount = 2. * borrow_amount; - let lp_wallet_balance = get_max_deposit_amount_pre_fee(lp_deposit_amount); - let lp_mfi_account_f = test_f.create_marginfi_account().await; - let lp_collateral_token_account = test_f - .get_bank(&debt_mint) - .mint - .create_token_account_and_mint_to(lp_wallet_balance) - .await; - lp_mfi_account_f - .try_bank_deposit( - lp_collateral_token_account.key, - test_f.get_bank(&debt_mint), - lp_deposit_amount, - None, - ) - .await?; - - // User - - let user_mfi_account_f = test_f.create_marginfi_account().await; - let user_wallet_balance = get_max_deposit_amount_pre_fee(deposit_amount); - let user_collateral_token_account_f = test_f - .get_bank_mut(&collateral_mint) - .mint - .create_token_account_and_mint_to(user_wallet_balance) - .await; - let user_debt_token_account_f = test_f - .get_bank(&debt_mint) - .mint - .create_empty_token_account() - .await; - let collateral_bank = test_f.get_bank(&collateral_mint); - user_mfi_account_f - .try_bank_deposit( - user_collateral_token_account_f.key, - collateral_bank, - deposit_amount, - None, - ) - .await?; - - // ------------------------------------------------------------------------- - // Test - // ------------------------------------------------------------------------- - - let debt_bank_f = test_f.get_bank(&debt_mint); - let bank_before = debt_bank_f.load().await; - - let pre_vault_balance = debt_bank_f - .get_vault_token_account(BankVaultType::Liquidity) - .await - .balance() - .await; - let pre_user_debt_accounted = I80F48::ZERO; - let pre_fee_group_fees: I80F48 = bank_before.collected_group_fees_outstanding.into(); - let pre_fee_program_fees: I80F48 = bank_before.collected_program_fees_outstanding.into(); - - let res = user_mfi_account_f - .try_bank_borrow(user_debt_token_account_f.key, debt_bank_f, borrow_amount) - .await; - assert!(res.is_ok()); - - let post_vault_balance = debt_bank_f - .get_vault_token_account(BankVaultType::Liquidity) - .await - .balance() - .await; - let marginfi_account = user_mfi_account_f.load().await; - let balance = marginfi_account - .lending_account - .get_balance(&debt_bank_f.key) - .unwrap(); - let post_user_debt_accounted = bank_before - .get_asset_amount(balance.liability_shares.into()) - .unwrap(); - - let borrow_amount_native = ui_to_native!(borrow_amount, debt_bank_f.mint.mint.decimals); - let borrow_fee = debt_bank_f - .mint - .load_state() - .await - .get_extension::() - .map(|tf| { - tf.calculate_inverse_epoch_fee(0, borrow_amount_native) - .unwrap_or(0) - }) - .unwrap_or(0); - let borrow_amount_pre_fee = borrow_amount_native + borrow_fee; - let origination_fee_rate: I80F48 = bank_before - .config - .interest_rate_config - .protocol_origination_fee - .into(); - let program_fee_rate: I80F48 = test_f - .marginfi_group - .load() - .await - .fee_state_cache - .program_fee_rate - .into(); - let origination_fee: I80F48 = I80F48::from_num(borrow_amount_native) - .checked_mul(origination_fee_rate) - .unwrap(); - let program_origination_fee: I80F48 = origination_fee.checked_mul(program_fee_rate).unwrap(); - let group_origination_fee: I80F48 = origination_fee.saturating_sub(program_origination_fee); - - let active_balance_count = marginfi_account - .lending_account - .get_active_balances_iter() - .count(); - assert_eq!(2, active_balance_count); - - let expected_liquidity_vault_delta = -(borrow_amount_pre_fee as i64); - let actual_liquidity_vault_delta = post_vault_balance as i64 - pre_vault_balance as i64; - let accounted_user_balance_delta = post_user_debt_accounted - pre_user_debt_accounted; - - // The liquidity vault paid out just the pre-origination fee amount (e.g. what the user borrowed - // before accounting for the fee) - assert_eq!(expected_liquidity_vault_delta, actual_liquidity_vault_delta); - assert_eq_with_tolerance!( - // Note: the user still gains debt which includes the origination fee - I80F48::from(expected_liquidity_vault_delta) - origination_fee, - -accounted_user_balance_delta, - 1 - ); - - // The outstanding origination fee is recorded - let bank_after = debt_bank_f.load().await; - let post_fee_program_fees: I80F48 = bank_after.collected_program_fees_outstanding.into(); - assert_eq!( - pre_fee_program_fees + program_origination_fee, - post_fee_program_fees - ); - - let post_fee_group_fees: I80F48 = bank_after.collected_group_fees_outstanding.into(); - assert_eq!( - pre_fee_group_fees + group_origination_fee, - post_fee_group_fees - ); - - let health_cache = marginfi_account.health_cache; - assert!(health_cache.is_engine_ok()); - assert!(health_cache.is_healthy()); - - let asset_value: I80F48 = health_cache.asset_value.into(); - let asset_value: f64 = asset_value.to_num(); - let liab_value: I80F48 = health_cache.liability_value.into(); - let liab_value: f64 = liab_value.to_num(); - let collateral_price_roughly = get_mint_price(collateral_mint); - let liablility_price_roughly: f64 = get_mint_price(debt_mint); - // Apply a small discount to account for conf discounts, etc. - let disc: f64 = 0.95; - assert!(asset_value > deposit_amount * collateral_price_roughly * disc); - assert!(liab_value > borrow_amount * liablility_price_roughly * disc); - - for (i, bal) in marginfi_account.lending_account.balances.iter().enumerate() { - let shares: I80F48 = bal.asset_shares.into(); - if bal.is_active() { - let price: I80F48 = health_cache.prices[i].into(); - let price: f64 = price.to_num(); - if shares != I80F48::ZERO { - assert!(price >= (collateral_price_roughly * disc)); - } else { - assert!(price >= (liablility_price_roughly * disc)); - } - } - } - - Ok(()) -} - -#[test_case(100., 9., 10.000000001, BankMint::Usdc, BankMint::Sol)] -#[test_case(123_456., 12_345.6, 12_345.9, BankMint::Usdc, BankMint::Sol)] -#[test_case(123_456., 10_000., 15_000., BankMint::UsdcSwb, BankMint::Sol)] -#[test_case(1., 5., 11.98224, BankMint::Sol, BankMint::Usdc)] -#[test_case(128_932., 10_000., 15_000.0, BankMint::PyUSD, BankMint::SolSwb)] -#[test_case(240., 0.092, 500., BankMint::PyUSD, BankMint::T22WithFee)] -#[test_case(36., 1.7, 1.9, BankMint::T22WithFee, BankMint::Sol)] -#[test_case(1., 100., 155.1, BankMint::SolSwbPull, BankMint::Usdc)] // Sol @ ~ $153 -#[tokio::test] -async fn marginfi_account_borrow_failure_not_enough_collateral( - deposit_amount: f64, - borrow_amount_ok: f64, - borrow_amount_failed: f64, - collateral_mint: BankMint, - debt_mint: BankMint, -) -> anyhow::Result<()> { - // ------------------------------------------------------------------------- - // Setup - // ------------------------------------------------------------------------- - - let mut test_f = TestFixture::new(Some(TestSettings::all_banks_payer_not_admin())).await; - - // LP - - let lp_deposit_amount = 2. * borrow_amount_failed; - let lp_wallet_balance = get_max_deposit_amount_pre_fee(lp_deposit_amount); - let lp_mfi_account_f = test_f.create_marginfi_account().await; - let lp_token_account_f_sol = test_f - .get_bank(&debt_mint) - .mint - .create_token_account_and_mint_to(lp_wallet_balance) - .await; - lp_mfi_account_f - .try_bank_deposit( - lp_token_account_f_sol.key, - test_f.get_bank(&debt_mint), - lp_deposit_amount, - None, - ) - .await?; - - // User - - let borrower_mfi_account_f = test_f.create_marginfi_account().await; - let user_wallet_balance = get_max_deposit_amount_pre_fee(deposit_amount); - let borrower_debt_token_account_f = test_f - .get_bank_mut(&debt_mint) - .mint - .create_empty_token_account() - .await; - let borrower_collateral_token_account_f = test_f - .get_bank_mut(&collateral_mint) - .mint - .create_token_account_and_mint_to(user_wallet_balance) - .await; - let collateral_bank = test_f.get_bank(&collateral_mint); - borrower_mfi_account_f - .try_bank_deposit( - borrower_collateral_token_account_f.key, - collateral_bank, - deposit_amount, - None, - ) - .await?; - - // ------------------------------------------------------------------------- - // Test - // ------------------------------------------------------------------------- - - let debt_bank_f = test_f.get_bank(&debt_mint); - - let res = borrower_mfi_account_f - .try_bank_borrow( - borrower_debt_token_account_f.key, - debt_bank_f, - borrow_amount_failed, - ) - .await; - assert_custom_error!(res.unwrap_err(), MarginfiError::RiskEngineInitRejected); - - let res = borrower_mfi_account_f - .try_bank_borrow( - borrower_debt_token_account_f.key, - debt_bank_f, - borrow_amount_ok, - ) - .await; - assert!(res.is_ok()); - - Ok(()) -} - -#[test_case(505., 500., 505.0000000001, BankMint::Usdc, BankMint::Sol)] -#[test_case(12_345.6, 12_345.5, 12_345.9, BankMint::Usdc, BankMint::Sol)] -#[test_case(11_000., 10_000., 15_000., BankMint::UsdcSwb, BankMint::Sol)] -#[test_case(0.91, 0.1, 0.98, BankMint::Sol, BankMint::Usdc)] -#[test_case(11_000., 10_000., 15_000., BankMint::PyUSD, BankMint::SolSwb)] -#[test_case(505., 0.092, 500., BankMint::PyUSD, BankMint::T22WithFee)] -#[test_case(1.8, 1.7, 1.9, BankMint::T22WithFee, BankMint::Sol)] -#[test_case(1.5, 1.4, 1.6, BankMint::SolSwbPull, BankMint::Usdc)] -#[tokio::test] -async fn marginfi_account_borrow_failure_borrow_limit( - borrow_cap: f64, - borrow_amount_ok: f64, - borrow_amount_failed: f64, - collateral_mint: BankMint, - debt_mint: BankMint, -) -> anyhow::Result<()> { - // ------------------------------------------------------------------------- - // Setup - // ------------------------------------------------------------------------- - - let mut test_f = TestFixture::new(Some(TestSettings::all_banks_payer_not_admin())).await; - - // LP - - let lp_deposit_amount = 2. * borrow_amount_failed; - let lp_wallet_balance = get_max_deposit_amount_pre_fee(lp_deposit_amount); - let lp_mfi_account_f = test_f.create_marginfi_account().await; - let lp_collateral_token_account = test_f - .get_bank_mut(&debt_mint) - .mint - .create_token_account_and_mint_to(lp_wallet_balance) - .await; - lp_mfi_account_f - .try_bank_deposit( - lp_collateral_token_account.key, - test_f.get_bank(&debt_mint), - lp_deposit_amount, - None, - ) - .await - .unwrap(); - - // User - - let user_mfi_account_f = test_f.create_marginfi_account().await; - let sufficient_collateral_amount = test_f - .get_sufficient_collateral_for_outflow(borrow_amount_failed, &collateral_mint, &debt_mint) - .await; - let user_wallet_balance = get_max_deposit_amount_pre_fee(sufficient_collateral_amount); - let user_collateral_token_account_f = test_f - .get_bank_mut(&collateral_mint) - .mint - .create_token_account_and_mint_to(user_wallet_balance) - .await; - let user_debt_token_account_f = test_f - .get_bank_mut(&debt_mint) - .mint - .create_empty_token_account() - .await; - user_mfi_account_f - .try_bank_deposit( - user_collateral_token_account_f.key, - test_f.get_bank(&collateral_mint), - sufficient_collateral_amount, - None, - ) - .await?; - - // ------------------------------------------------------------------------- - // Test - // ------------------------------------------------------------------------- - - let debt_mint_decimals = test_f.get_bank(&debt_mint).mint.mint.decimals; - test_f - .get_bank_mut(&debt_mint) - .update_config( - BankConfigOpt { - borrow_limit: Some(native!(borrow_cap, debt_mint_decimals, f64)), - ..Default::default() - }, - None, - ) - .await?; - - let debt_bank_f = test_f.get_bank(&debt_mint); - - let res = user_mfi_account_f - .try_bank_borrow( - user_debt_token_account_f.key, - debt_bank_f, - borrow_amount_failed, - ) - .await; - assert!(res.is_err()); - assert_custom_error!( - res.unwrap_err(), - MarginfiError::BankLiabilityCapacityExceeded - ); - - let res = user_mfi_account_f - .try_bank_borrow(user_debt_token_account_f.key, debt_bank_f, borrow_amount_ok) - .await; - assert!(res.is_ok()); - - Ok(()) -} - -#[tokio::test] -async fn isolated_borrows() -> anyhow::Result<()> { - let test_f = TestFixture::new(Some(TestSettings::all_banks_payer_not_admin())).await; - - let usdc_bank = test_f.get_bank(&BankMint::Usdc); - let sol_eq_iso_bank = test_f.get_bank(&BankMint::SolEqIsolated); - let sol_bank = test_f.get_bank(&BankMint::Sol); - - // Fund SOL lender - let lender_mfi_account_f = test_f.create_marginfi_account().await; - let lender_token_account_sol = test_f - .sol_equivalent_mint - .create_token_account_and_mint_to(1_000) - .await; - lender_mfi_account_f - .try_bank_deposit(lender_token_account_sol.key, sol_eq_iso_bank, 1_000, None) - .await?; - - let lender_token_account_sol = test_f - .sol_mint - .create_token_account_and_mint_to(1_000) - .await; - lender_mfi_account_f - .try_bank_deposit(lender_token_account_sol.key, sol_bank, 1_000, None) - .await?; - - // Fund SOL borrower - let borrower_mfi_account_f = test_f.create_marginfi_account().await; - let borrower_token_account_f_usdc = test_f - .usdc_mint - .create_token_account_and_mint_to(1_000) - .await; - let borrower_token_account_f_sol = test_f - .sol_equivalent_mint - .create_empty_token_account() - .await; - borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_f_usdc.key, usdc_bank, 1_000, None) - .await?; - - // Borrow SOL EQ - let res = borrower_mfi_account_f - .try_bank_borrow(borrower_token_account_f_sol.key, sol_eq_iso_bank, 10) - .await; - - assert!(res.is_ok()); - - // Repay isolated SOL EQ borrow and borrow SOL successfully, - let borrower_sol_account = test_f.sol_mint.create_empty_token_account().await; - let res = borrower_mfi_account_f - .try_bank_borrow(borrower_sol_account.key, sol_bank, 10) - .await; - - assert!(res.is_err()); - assert_custom_error!(res.unwrap_err(), MarginfiError::IsolatedAccountIllegalState); - - borrower_mfi_account_f - .try_bank_repay( - borrower_token_account_f_sol.key, - sol_eq_iso_bank, - 0, - Some(true), - ) - .await?; - - let res = borrower_mfi_account_f - .try_bank_borrow(borrower_sol_account.key, sol_bank, 10) - .await; - - assert!(res.is_ok()); - - // Borrowing SOL EQ again fails - let res = borrower_mfi_account_f - .try_bank_borrow(borrower_token_account_f_sol.key, sol_eq_iso_bank, 10) - .await; - - assert!(res.is_err()); - assert_custom_error!(res.unwrap_err(), MarginfiError::IsolatedAccountIllegalState); - - Ok(()) -} diff --git a/programs/marginfi/tests/user_actions/close_account.rs b/programs/marginfi/tests/user_actions/close_account.rs deleted file mode 100644 index 9810fb816..000000000 --- a/programs/marginfi/tests/user_actions/close_account.rs +++ /dev/null @@ -1,64 +0,0 @@ -use fixtures::{ - assert_custom_error, - spl::TokenAccountFixture, - test::{BankMint, TestFixture, TestSettings}, -}; -use marginfi::errors::MarginfiError; -use solana_program_test::tokio; - -#[tokio::test] -async fn close_marginfi_account() -> anyhow::Result<()> { - let mut test_f: TestFixture = - TestFixture::new(Some(TestSettings::all_banks_payer_not_admin())).await; - - let marginfi_account_f = test_f.create_marginfi_account().await; - - let owner = test_f.payer(); - let token_account_f = - TokenAccountFixture::new(test_f.context.clone(), &test_f.usdc_mint, &owner).await; - test_f.usdc_mint.mint_to(&token_account_f.key, 1_000).await; - - let usdc_bank_f = test_f.get_bank(&BankMint::Usdc); - - marginfi_account_f - .try_bank_deposit(token_account_f.key, usdc_bank_f, 1_000, None) - .await?; - - let res = marginfi_account_f.try_close_account(0).await; - - assert!(res.is_err()); - assert_custom_error!(res.unwrap_err(), MarginfiError::IllegalAction); - - let sol_bank_f = test_f.get_bank(&BankMint::Sol); - let sol_account = test_f.sol_mint.create_token_account_and_mint_to(100).await; - let depositor = test_f.create_marginfi_account().await; - depositor - .try_bank_deposit(sol_account.key, sol_bank_f, 100, None) - .await?; - - let sol_account_2 = test_f.sol_mint.create_token_account_and_mint_to(0).await; - - marginfi_account_f - .try_bank_borrow(sol_account_2.key, sol_bank_f, 10) - .await?; - - let res = marginfi_account_f.try_close_account(0).await; - - assert!(res.is_err()); - assert_custom_error!(res.unwrap_err(), MarginfiError::IllegalAction); - - // Repay the loan - marginfi_account_f - .try_bank_repay(sol_account_2.key, sol_bank_f, 10, Some(true)) - .await?; - - marginfi_account_f - .try_bank_withdraw(token_account_f.key, usdc_bank_f, 1_000, Some(true)) - .await?; - - let res = marginfi_account_f.try_close_account(1).await; - - assert!(res.is_ok()); - - Ok(()) -} diff --git a/programs/marginfi/tests/user_actions/close_balance.rs b/programs/marginfi/tests/user_actions/close_balance.rs deleted file mode 100644 index 9415d0d1c..000000000 --- a/programs/marginfi/tests/user_actions/close_balance.rs +++ /dev/null @@ -1,113 +0,0 @@ -use fixtures::{ - assert_custom_error, - test::{BankMint, TestFixture, TestSettings}, -}; -use marginfi::errors::MarginfiError; -use solana_program_test::tokio; -use switchboard_solana::Clock; - -#[tokio::test] -async fn lending_account_close_balance() -> anyhow::Result<()> { - let test_f = TestFixture::new(Some(TestSettings::all_banks_payer_not_admin())).await; - - let usdc_bank = test_f.get_bank(&BankMint::Usdc); - let sol_eq_bank = test_f.get_bank(&BankMint::SolEquivalent); - let sol_bank = test_f.get_bank(&BankMint::Sol); - - // Fund SOL lender - let lender_mfi_account_f = test_f.create_marginfi_account().await; - let lender_token_account_sol = test_f - .sol_equivalent_mint - .create_token_account_and_mint_to(1_000) - .await; - lender_mfi_account_f - .try_bank_deposit(lender_token_account_sol.key, sol_eq_bank, 1_000, None) - .await?; - - let lender_token_account_sol = test_f - .sol_mint - .create_token_account_and_mint_to(1_000) - .await; - lender_mfi_account_f - .try_bank_deposit(lender_token_account_sol.key, sol_bank, 1_000, None) - .await?; - - let res = lender_mfi_account_f.try_balance_close(sol_bank).await; - - assert!(res.is_err()); - assert_custom_error!(res.unwrap_err(), MarginfiError::IllegalBalanceState); - - // Fund SOL borrower - let borrower_mfi_account_f = test_f.create_marginfi_account().await; - let borrower_token_account_f_usdc = test_f - .usdc_mint - .create_token_account_and_mint_to(1_000) - .await; - let borrower_token_account_f_sol = test_f - .sol_mint - .create_token_account_and_mint_to(1_000) - .await; - let borrower_token_account_f_sol_eq = test_f - .sol_equivalent_mint - .create_token_account_and_mint_to(1_000) - .await; - borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_f_usdc.key, usdc_bank, 1_000, None) - .await?; - - // Borrow SOL EQ - let res = borrower_mfi_account_f - .try_bank_borrow(borrower_token_account_f_sol_eq.key, sol_eq_bank, 0.01) - .await; - - assert!(res.is_ok()); - - // Borrow SOL - let res = borrower_mfi_account_f - .try_bank_borrow(borrower_token_account_f_sol.key, sol_bank, 0.01) - .await; - - assert!(res.is_ok()); - - // This issue is not that bad, because the user can still borrow other assets (isolated liab < empty threshold) - let res = borrower_mfi_account_f.try_balance_close(sol_bank).await; - assert!(res.is_err()); - assert_custom_error!(res.unwrap_err(), MarginfiError::IllegalBalanceState); - - // Let a second go b - { - let mut ctx = test_f.context.borrow_mut(); - let mut clock: Clock = ctx.banks_client.get_sysvar().await?; - // Advance clock by 1 second - clock.unix_timestamp += 1; - ctx.set_sysvar(&clock); - } - - // Repay isolated SOL EQ borrow successfully - borrower_mfi_account_f - .try_bank_repay( - borrower_token_account_f_sol_eq.key, - sol_eq_bank, - 0.01, - Some(false), - ) - .await?; - - // Liability share in balance is smaller than 0.0001, so repay all should fail - let res = borrower_mfi_account_f - .try_bank_repay( - borrower_token_account_f_sol_eq.key, - sol_eq_bank, - 1, - Some(true), - ) - .await; - assert!(res.is_err()); - assert_custom_error!(res.unwrap_err(), MarginfiError::NoLiabilityFound); - - // This issue is not that bad, because the user can still borrow other assets (isolated liab < empty threshold) - let res = borrower_mfi_account_f.try_balance_close(sol_eq_bank).await; - assert!(res.is_ok()); - - Ok(()) -} diff --git a/programs/marginfi/tests/user_actions/create_account.rs b/programs/marginfi/tests/user_actions/create_account.rs deleted file mode 100644 index b4d89523c..000000000 --- a/programs/marginfi/tests/user_actions/create_account.rs +++ /dev/null @@ -1,57 +0,0 @@ -use anchor_lang::{InstructionData, ToAccountMetas}; -use fixtures::test::TestFixture; -use marginfi::state::marginfi_account::MarginfiAccount; -use solana_program_test::tokio; -use solana_sdk::{ - instruction::Instruction, signature::Keypair, signer::Signer, system_program, - transaction::Transaction, -}; - -#[tokio::test] -async fn marginfi_account_create_success() -> anyhow::Result<()> { - let test_f = TestFixture::new(None).await; - - let marginfi_account_key = Keypair::new(); - let accounts = marginfi::accounts::MarginfiAccountInitialize { - marginfi_group: test_f.marginfi_group.key, - marginfi_account: marginfi_account_key.pubkey(), - authority: test_f.payer(), - fee_payer: test_f.payer(), - system_program: system_program::id(), - }; - let init_marginfi_account_ix = Instruction { - program_id: marginfi::id(), - accounts: accounts.to_account_metas(Some(true)), - data: marginfi::instruction::MarginfiAccountInitialize {}.data(), - }; - - let tx = Transaction::new_signed_with_payer( - &[init_marginfi_account_ix], - Some(&test_f.payer()), - &[&test_f.payer_keypair(), &marginfi_account_key], - test_f.get_latest_blockhash().await, - ); - - let res = test_f - .context - .borrow_mut() - .banks_client - .process_transaction(tx) - .await; - - assert!(res.is_ok()); - - let marginfi_account: MarginfiAccount = test_f - .load_and_deserialize(&marginfi_account_key.pubkey()) - .await; - - assert_eq!(marginfi_account.group, test_f.marginfi_group.key); - assert_eq!(marginfi_account.authority, test_f.payer()); - assert!(marginfi_account - .lending_account - .balances - .iter() - .all(|bank| !bank.is_active())); - - Ok(()) -} diff --git a/programs/marginfi/tests/user_actions/deposit.rs b/programs/marginfi/tests/user_actions/deposit.rs deleted file mode 100644 index c754004eb..000000000 --- a/programs/marginfi/tests/user_actions/deposit.rs +++ /dev/null @@ -1,324 +0,0 @@ -use anchor_lang::{InstructionData, ToAccountMetas}; -use anchor_spl::token::spl_token; -use fixed::types::I80F48; -use fixtures::prelude::*; -use fixtures::{assert_custom_error, native}; -use marginfi::state::marginfi_group::{BankConfigOpt, BankVaultType}; -use marginfi::{assert_eq_with_tolerance, prelude::*}; -use pretty_assertions::assert_eq; -use solana_program_test::*; -use solana_sdk::transaction::Transaction; -use solana_sdk::{instruction::Instruction, signer::Signer}; -use test_case::test_case; - -#[test_case(0.0, BankMint::Usdc)] -#[test_case(0.05, BankMint::UsdcSwb)] -#[test_case(1_000.0, BankMint::Usdc)] -#[test_case(0.05, BankMint::Sol)] -#[test_case(15_002.0, BankMint::SolSwb)] -#[test_case(0.05, BankMint::PyUSD)] -#[test_case(15_002.0, BankMint::PyUSD)] -#[test_case(0.0, BankMint::T22WithFee)] -#[test_case(0.05, BankMint::T22WithFee)] -#[test_case(15_002.0, BankMint::T22WithFee)] -#[tokio::test] -async fn marginfi_account_deposit_success( - deposit_amount: f64, - bank_mint: BankMint, -) -> anyhow::Result<()> { - // ------------------------------------------------------------------------- - // Setup - // ------------------------------------------------------------------------- - - let mut test_f = TestFixture::new(Some(TestSettings::all_banks_payer_not_admin())).await; - - // User - - let user_mfi_account_f = test_f.create_marginfi_account().await; - let user_wallet_balance = get_max_deposit_amount_pre_fee(deposit_amount); - let token_account_f = TokenAccountFixture::new( - test_f.context.clone(), - &test_f.get_bank(&bank_mint).mint, - &test_f.payer(), - ) - .await; - let bank_f = test_f.get_bank_mut(&bank_mint); - bank_f - .mint - .mint_to(&token_account_f.key, user_wallet_balance) - .await; - - // ------------------------------------------------------------------------- - // Test - // ------------------------------------------------------------------------- - - let pre_vault_balance = bank_f - .get_vault_token_account(BankVaultType::Liquidity) - .await - .balance() - .await; - - let res = user_mfi_account_f - .try_bank_deposit(token_account_f.key, &bank_f, deposit_amount, None) - .await; - assert!(res.is_ok()); - - let post_vault_balance = bank_f - .get_vault_token_account(BankVaultType::Liquidity) - .await - .balance() - .await; - - let expected_liquidity_vault_delta = - I80F48::from(native!(deposit_amount, bank_f.mint.mint.decimals, f64)); - let actual_liquidity_vault_delta = I80F48::from(post_vault_balance - pre_vault_balance); - assert_eq!(expected_liquidity_vault_delta, actual_liquidity_vault_delta); - - // If deposit_amount == 0, bank account doesn't get created -- no need to check balances - if deposit_amount > 0. { - let marginfi_account = user_mfi_account_f.load().await; - let active_balance_count = marginfi_account - .lending_account - .get_active_balances_iter() - .count(); - assert_eq!(1, active_balance_count); - let maybe_balance = marginfi_account.lending_account.get_balance(&bank_f.key); - assert!(maybe_balance.is_some()); - - let balance = maybe_balance.unwrap(); - let accounted_user_balance_delta = bank_f - .load() - .await - .get_asset_amount(balance.asset_shares.into()) - .unwrap(); - assert_eq_with_tolerance!( - expected_liquidity_vault_delta, - accounted_user_balance_delta, - 1 - ); - } - - Ok(()) -} - -#[test_case(1_000., 456., 2345., BankMint::Usdc)] -#[test_case(1_000., 456., 2345., BankMint::UsdcSwb)] -#[test_case(1_000., 456., 2345., BankMint::Sol)] -#[test_case(1_000., 456., 2345., BankMint::SolSwb)] -#[test_case(1_000., 456., 2345., BankMint::PyUSD)] -#[test_case(1_000., 456., 2345., BankMint::T22WithFee)] -#[test_case(1_000., 999.999999, 1000., BankMint::T22WithFee)] -#[tokio::test] -async fn marginfi_account_deposit_failure_capacity_exceeded( - deposit_cap: f64, - deposit_amount_ok: f64, - deposit_amount_failed: f64, - bank_mint: BankMint, -) -> anyhow::Result<()> { - // ------------------------------------------------------------------------- - // Setup - // ------------------------------------------------------------------------- - - let test_f = TestFixture::new(Some(TestSettings::all_banks_payer_not_admin())).await; - - // User - - let user_mfi_account_f = test_f.create_marginfi_account().await; - let user_wallet_balance = get_max_deposit_amount_pre_fee(deposit_amount_failed); - let bank_f = test_f.get_bank(&bank_mint); - let user_token_account = bank_f - .mint - .create_token_account_and_mint_to(user_wallet_balance) - .await; - - // ------------------------------------------------------------------------- - // Test - // ------------------------------------------------------------------------- - - bank_f - .update_config( - BankConfigOpt { - deposit_limit: Some(native!(deposit_cap, bank_f.mint.mint.decimals, f64)), - ..Default::default() - }, - None, - ) - .await?; - - let res = user_mfi_account_f - .try_bank_deposit(user_token_account.key, bank_f, deposit_amount_failed, None) - .await; - assert_custom_error!(res.unwrap_err(), MarginfiError::BankAssetCapacityExceeded); - - let res = user_mfi_account_f - .try_bank_deposit(user_token_account.key, bank_f, deposit_amount_ok, None) - .await; - assert!(res.is_ok()); - - Ok(()) -} - -#[tokio::test] -async fn marginfi_account_deposit_failure_wrong_token_program() -> anyhow::Result<()> { - // ------------------------------------------------------------------------- - // Setup - // ------------------------------------------------------------------------- - - let test_f = TestFixture::new(Some(TestSettings::all_banks_payer_not_admin())).await; - - // User - - let deposit_amount = 1_000.; - let bank_mint = BankMint::T22WithFee; - - let user_mfi_account_f = test_f.create_marginfi_account().await; - let user_wallet_balance = get_max_deposit_amount_pre_fee(deposit_amount); - let bank_f = test_f.get_bank(&bank_mint); - let user_token_account = bank_f - .mint - .create_token_account_and_mint_to(user_wallet_balance) - .await; - - // ------------------------------------------------------------------------- - // Test - // ------------------------------------------------------------------------- - - let marginfi_account = user_mfi_account_f.load().await; - - let accounts = marginfi::accounts::LendingAccountDeposit { - group: marginfi_account.group, - marginfi_account: user_mfi_account_f.key, - authority: test_f.context.borrow().payer.pubkey(), - bank: bank_f.key, - signer_token_account: user_token_account.key, - liquidity_vault: bank_f.get_vault(BankVaultType::Liquidity).0, - token_program: spl_token::ID, - } - .to_account_metas(Some(true)); - - let deposit_ix = Instruction { - program_id: marginfi::id(), - accounts, - data: marginfi::instruction::LendingAccountDeposit { - amount: native!(deposit_amount, bank_f.mint.mint.decimals, f64), - deposit_up_to_limit: None, - } - .data(), - }; - - let tx = { - let ctx = test_f.context.borrow(); - Transaction::new_signed_with_payer( - &[deposit_ix], - Some(&ctx.payer.pubkey().clone()), - &[&ctx.payer], - ctx.last_blockhash, - ) - }; - - let mut ctx = test_f.context.borrow_mut(); - let res = ctx.banks_client.process_transaction(tx).await; - assert!(res.is_err()); - - Ok(()) -} - -#[test_case(1_000., 500., 800., 500., BankMint::Usdc)] -#[test_case(1_000., 500., 800., 500., BankMint::Sol)] -#[test_case(1_000., 500., 800., 500., BankMint::PyUSD)] -#[test_case(1_000., 500., 800., 500., BankMint::T22WithFee)] -#[tokio::test] -async fn marginfi_account_deposit_up_to_limit_success( - deposit_cap: f64, - first_deposit: f64, - second_deposit: f64, - third_deposit: f64, - bank_mint: BankMint, -) -> anyhow::Result<()> { - // ------------------------------------------------------------------------- - // Setup - // ------------------------------------------------------------------------- - - let test_f = TestFixture::new(Some(TestSettings::all_banks_payer_not_admin())).await; - - // User - let user_mfi_account_f = test_f.create_marginfi_account().await; - let user_wallet_balance = - get_max_deposit_amount_pre_fee(first_deposit + second_deposit + third_deposit); - let bank_f = test_f.get_bank(&bank_mint); - let user_token_account = bank_f - .mint - .create_token_account_and_mint_to(user_wallet_balance) - .await; - - // ------------------------------------------------------------------------- - // Test - // ------------------------------------------------------------------------- - - bank_f - .update_config( - BankConfigOpt { - deposit_limit: Some(native!(deposit_cap, bank_f.mint.mint.decimals, f64)), - ..Default::default() - }, - None, - ) - .await?; - - // First deposit stays under limit - let res = user_mfi_account_f - .try_bank_deposit(user_token_account.key, bank_f, first_deposit, None) - .await; - assert!(res.is_ok()); - - // Second deposit goes over limit -- with deposit_up_to_limit set - let pre_vault_balance = bank_f - .get_vault_token_account(BankVaultType::Liquidity) - .await - .balance() - .await; - - let res = user_mfi_account_f - .try_bank_deposit(user_token_account.key, bank_f, second_deposit, Some(true)) - .await; - assert!(res.is_ok()); - - let post_vault_balance = bank_f - .get_vault_token_account(BankVaultType::Liquidity) - .await - .balance() - .await; - - let expected_remaining_capacity = deposit_cap - first_deposit; - let expected_second_deposit = I80F48::from(native!( - expected_remaining_capacity.min(second_deposit), - bank_f.mint.mint.decimals, - f64 - )); - let actual_deposit = I80F48::from(post_vault_balance - pre_vault_balance); - - assert_eq_with_tolerance!(expected_second_deposit, actual_deposit, 1); - - // Third deposit goes over limit -- with deposit_up_to_limit set -- when already at capacity - // Should succeed with no balance changes - let pre_vault_balance = bank_f - .get_vault_token_account(BankVaultType::Liquidity) - .await - .balance() - .await; - - let res = user_mfi_account_f - .try_bank_deposit(user_token_account.key, bank_f, third_deposit, Some(true)) - .await; - assert!(res.is_ok()); - - let post_vault_balance = bank_f - .get_vault_token_account(BankVaultType::Liquidity) - .await - .balance() - .await; - - assert_eq!(pre_vault_balance, post_vault_balance); - - Ok(()) -} diff --git a/programs/marginfi/tests/user_actions/flash_loan.rs b/programs/marginfi/tests/user_actions/flash_loan.rs deleted file mode 100644 index 6d9f49b46..000000000 --- a/programs/marginfi/tests/user_actions/flash_loan.rs +++ /dev/null @@ -1,505 +0,0 @@ -use anchor_lang::{InstructionData, ToAccountMetas}; -use fixtures::{assert_custom_error, prelude::*}; -use marginfi::prelude::*; -use pretty_assertions::assert_eq; -use solana_program::{instruction::Instruction, pubkey::Pubkey}; -use solana_program_test::*; -use solana_sdk::{ - compute_budget::ComputeBudgetInstruction, signer::Signer, transaction::Transaction, -}; - -// Flashloan tests -// 1. Flashloan success (1 action) -// 2. Flashloan success (3 actions) -// 3. Flashloan fails because of bad account health -// 4. Flashloan fails because of non whitelisted account -// 5. Flashloan fails because of missing `end_flashloan` ix -// 6. Flashloan fails because of invalid instructions sysvar -// 7. Flashloan fails because of invalid `end_flashloan` ix order -// 8. Flashloan fails because `end_flashloan` ix is for another account -// 9. Flashloan fails because account is already in a flashloan - -#[tokio::test] -async fn flashloan_success_1op() -> anyhow::Result<()> { - // Setup test executor with non-admin payer - let test_f = TestFixture::new(Some(TestSettings::all_banks_payer_not_admin())).await; - - let sol_bank = test_f.get_bank(&BankMint::Sol); - - // Fund SOL lender - let lender_mfi_account_f = test_f.create_marginfi_account().await; - let lender_token_account_f_sol = test_f - .sol_mint - .create_token_account_and_mint_to(1_000) - .await; - lender_mfi_account_f - .try_bank_deposit(lender_token_account_f_sol.key, sol_bank, 1_000, None) - .await?; - - // Fund SOL borrower - let borrower_mfi_account_f = test_f.create_marginfi_account().await; - - let borrower_token_account_f_sol = test_f.sol_mint.create_empty_token_account().await; - // Borrow SOL - - let borrow_ix = borrower_mfi_account_f - .make_bank_borrow_ix(borrower_token_account_f_sol.key, sol_bank, 1_000) - .await; - - let repay_ix = borrower_mfi_account_f - .make_bank_repay_ix( - borrower_token_account_f_sol.key, - sol_bank, - 1_000, - Some(true), - ) - .await; - - let flash_loan_result = borrower_mfi_account_f - .try_flashloan(vec![borrow_ix, repay_ix], vec![], vec![]) - .await; - - assert!(flash_loan_result.is_ok()); - - Ok(()) -} - -#[tokio::test] -async fn flashloan_success_3op() -> anyhow::Result<()> { - // Setup test executor with non-admin payer - let test_f = TestFixture::new(Some(TestSettings::all_banks_payer_not_admin())).await; - - let sol_bank = test_f.get_bank(&BankMint::Sol); - - // Fund SOL lender - let lender_mfi_account_f = test_f.create_marginfi_account().await; - let lender_token_account_f_sol = test_f - .sol_mint - .create_token_account_and_mint_to(1_000) - .await; - lender_mfi_account_f - .try_bank_deposit(lender_token_account_f_sol.key, sol_bank, 1_000, None) - .await?; - - // Fund SOL borrower - let borrower_mfi_account_f = test_f.create_marginfi_account().await; - - let borrower_token_account_f_sol = test_f.sol_mint.create_empty_token_account().await; - - // Create borrow and repay instructions - let mut ixs = Vec::new(); - for _ in 0..3 { - let borrow_ix = borrower_mfi_account_f - .make_bank_borrow_ix(borrower_token_account_f_sol.key, sol_bank, 1_000) - .await; - ixs.push(borrow_ix); - - let repay_ix = borrower_mfi_account_f - .make_bank_repay_ix( - borrower_token_account_f_sol.key, - sol_bank, - 1_000, - Some(true), - ) - .await; - ixs.push(repay_ix); - } - - ixs.push(ComputeBudgetInstruction::set_compute_unit_limit(1_400_000)); - - let flash_loan_result = borrower_mfi_account_f - .try_flashloan(ixs, vec![], vec![]) - .await; - - assert!(flash_loan_result.is_ok()); - - Ok(()) -} - -#[tokio::test] -async fn flashloan_fail_account_health() -> anyhow::Result<()> { - let test_f = TestFixture::new(Some(TestSettings::all_banks_payer_not_admin())).await; - - let sol_bank = test_f.get_bank(&BankMint::Sol); - - // Fund SOL lender - let lender_mfi_account_f = test_f.create_marginfi_account().await; - let lender_token_account_f_sol = test_f - .sol_mint - .create_token_account_and_mint_to(1_000) - .await; - lender_mfi_account_f - .try_bank_deposit(lender_token_account_f_sol.key, sol_bank, 1_000, None) - .await?; - - // Fund SOL borrower - let borrower_mfi_account_f = test_f.create_marginfi_account().await; - - let borrower_token_account_f_sol = test_f.sol_mint.create_empty_token_account().await; - // Borrow SOL - - let borrow_ix = borrower_mfi_account_f - .make_bank_borrow_ix(borrower_token_account_f_sol.key, sol_bank, 1_000) - .await; - - let flash_loan_result = borrower_mfi_account_f - .try_flashloan(vec![borrow_ix], vec![], vec![sol_bank.key]) - .await; - - assert_custom_error!( - flash_loan_result.unwrap_err(), - MarginfiError::RiskEngineInitRejected - ); - - Ok(()) -} - -#[tokio::test] -// Note: The flashloan flag is now deprecated -async fn flashloan_ok_missing_flag() -> anyhow::Result<()> { - // Setup test executor with non-admin payer - let test_f = TestFixture::new(Some(TestSettings::all_banks_payer_not_admin())).await; - - let sol_bank = test_f.get_bank(&BankMint::Sol); - - // Fund SOL lender - let lender_mfi_account_f = test_f.create_marginfi_account().await; - let lender_token_account_f_sol = test_f - .sol_mint - .create_token_account_and_mint_to(1_000) - .await; - lender_mfi_account_f - .try_bank_deposit(lender_token_account_f_sol.key, sol_bank, 1_000, None) - .await?; - - // Fund SOL borrower - let borrower_mfi_account_f = test_f.create_marginfi_account().await; - - let borrower_token_account_f_sol = test_f.sol_mint.create_empty_token_account().await; - // Borrow SOL - - let borrow_ix = borrower_mfi_account_f - .make_bank_borrow_ix(borrower_token_account_f_sol.key, sol_bank, 1_000) - .await; - - let repay_ix = borrower_mfi_account_f - .make_bank_repay_ix( - borrower_token_account_f_sol.key, - sol_bank, - 1_000, - Some(true), - ) - .await; - - let flash_loan_result = borrower_mfi_account_f - .try_flashloan(vec![borrow_ix, repay_ix], vec![], vec![]) - .await; - - assert!(flash_loan_result.is_ok()); - - Ok(()) -} - -#[tokio::test] -async fn flashloan_fail_missing_fe_ix() -> anyhow::Result<()> { - // Setup test executor with non-admin payer - let test_f = TestFixture::new(Some(TestSettings::all_banks_payer_not_admin())).await; - - let sol_bank = test_f.get_bank(&BankMint::Sol); - - // Fund SOL lender - let lender_mfi_account_f = test_f.create_marginfi_account().await; - let lender_token_account_f_sol = test_f - .sol_mint - .create_token_account_and_mint_to(1_000) - .await; - lender_mfi_account_f - .try_bank_deposit(lender_token_account_f_sol.key, sol_bank, 1_000, None) - .await?; - - // Fund SOL borrower - let borrower_mfi_account_f = test_f.create_marginfi_account().await; - - let borrower_token_account_f_sol = test_f.sol_mint.create_empty_token_account().await; - // Borrow SOL - - let borrow_ix = borrower_mfi_account_f - .make_bank_borrow_ix(borrower_token_account_f_sol.key, sol_bank, 1_000) - .await; - - let repay_ix = borrower_mfi_account_f - .make_bank_repay_ix( - borrower_token_account_f_sol.key, - sol_bank, - 1_000, - Some(true), - ) - .await; - - let mut ixs = vec![borrow_ix, repay_ix]; - - let start_ix = borrower_mfi_account_f - .make_lending_account_start_flashloan_ix(ixs.len() as u64) - .await; - - ixs.insert(0, start_ix); - - let mut ctx = test_f.context.borrow_mut(); - - let tx = Transaction::new_signed_with_payer( - &ixs, - Some(&ctx.payer.pubkey().clone()), - &[&ctx.payer], - ctx.last_blockhash, - ); - - let res = ctx.banks_client.process_transaction(tx).await; - - assert_custom_error!(res.unwrap_err(), MarginfiError::IllegalFlashloan); - - Ok(()) -} - -#[tokio::test] -async fn flashloan_fail_missing_invalid_sysvar_ixs() -> anyhow::Result<()> { - // Setup test executor with non-admin payer - let test_f = TestFixture::new(Some(TestSettings::all_banks_payer_not_admin())).await; - - let sol_bank = test_f.get_bank(&BankMint::Sol); - - // Fund SOL lender - let lender_mfi_account_f = test_f.create_marginfi_account().await; - let lender_token_account_f_sol = test_f - .sol_mint - .create_token_account_and_mint_to(1_000) - .await; - lender_mfi_account_f - .try_bank_deposit(lender_token_account_f_sol.key, sol_bank, 1_000, None) - .await?; - - // Fund SOL borrower - let borrower_mfi_account_f = test_f.create_marginfi_account().await; - - let borrower_token_account_f_sol = test_f.sol_mint.create_empty_token_account().await; - // Borrow SOL - - let borrow_ix = borrower_mfi_account_f - .make_bank_borrow_ix(borrower_token_account_f_sol.key, sol_bank, 1_000) - .await; - - let repay_ix = borrower_mfi_account_f - .make_bank_repay_ix( - borrower_token_account_f_sol.key, - sol_bank, - 1_000, - Some(true), - ) - .await; - - let mut ixs = vec![borrow_ix, repay_ix]; - - let start_ix = Instruction { - program_id: marginfi::id(), - accounts: marginfi::accounts::LendingAccountStartFlashloan { - marginfi_account: borrower_mfi_account_f.key, - authority: test_f.context.borrow().payer.pubkey(), - ixs_sysvar: Pubkey::default(), - } - .to_account_metas(Some(true)), - data: marginfi::instruction::LendingAccountStartFlashloan { - end_index: ixs.len() as u64 + 1, - } - .data(), - }; - - let end_ix = borrower_mfi_account_f - .make_lending_account_end_flashloan_ix(vec![], vec![]) - .await; - - ixs.insert(0, start_ix); - ixs.push(end_ix); - - let mut ctx = test_f.context.borrow_mut(); - - let tx = Transaction::new_signed_with_payer( - &ixs, - Some(&ctx.payer.pubkey().clone()), - &[&ctx.payer], - ctx.last_blockhash, - ); - - let res = ctx.banks_client.process_transaction(tx).await; - - assert!(res.is_err()); - - Ok(()) -} - -#[tokio::test] -async fn flashloan_fail_invalid_end_fl_order() -> anyhow::Result<()> { - // Setup test executor with non-admin payer - let test_f = TestFixture::new(Some(TestSettings::all_banks_payer_not_admin())).await; - - let sol_bank = test_f.get_bank(&BankMint::Sol); - - // Fund SOL lender - let lender_mfi_account_f = test_f.create_marginfi_account().await; - let lender_token_account_f_sol = test_f - .sol_mint - .create_token_account_and_mint_to(1_000) - .await; - lender_mfi_account_f - .try_bank_deposit(lender_token_account_f_sol.key, sol_bank, 1_000, None) - .await?; - - // Fund SOL borrower - let borrower_mfi_account_f = test_f.create_marginfi_account().await; - - let borrower_token_account_f_sol = test_f.sol_mint.create_empty_token_account().await; - // Borrow SOL - - let borrow_ix = borrower_mfi_account_f - .make_bank_borrow_ix(borrower_token_account_f_sol.key, sol_bank, 1_000) - .await; - - let mut ixs = vec![borrow_ix]; - - let start_ix = borrower_mfi_account_f - .make_lending_account_start_flashloan_ix(0) - .await; - - let end_ix = borrower_mfi_account_f - .make_lending_account_end_flashloan_ix(vec![], vec![]) - .await; - - ixs.insert(0, start_ix); - ixs.insert(0, end_ix); - - let mut ctx = test_f.context.borrow_mut(); - - let tx = Transaction::new_signed_with_payer( - &ixs, - Some(&ctx.payer.pubkey().clone()), - &[&ctx.payer], - ctx.last_blockhash, - ); - - let res = ctx.banks_client.process_transaction(tx).await; - - assert_custom_error!(res.unwrap_err(), MarginfiError::IllegalFlashloan); - - Ok(()) -} - -#[tokio::test] -async fn flashloan_fail_invalid_end_fl_different_m_account() -> anyhow::Result<()> { - // Setup test executor with non-admin payer - let test_f = TestFixture::new(Some(TestSettings::all_banks_payer_not_admin())).await; - - let sol_bank = test_f.get_bank(&BankMint::Sol); - - // Fund SOL lender - let lender_mfi_account_f = test_f.create_marginfi_account().await; - let lender_token_account_f_sol = test_f - .sol_mint - .create_token_account_and_mint_to(1_000) - .await; - lender_mfi_account_f - .try_bank_deposit(lender_token_account_f_sol.key, sol_bank, 1_000, None) - .await?; - - // Fund SOL borrower - let borrower_mfi_account_f = test_f.create_marginfi_account().await; - - let borrower_token_account_f_sol = test_f.sol_mint.create_empty_token_account().await; - // Borrow SOL - - let borrow_ix = borrower_mfi_account_f - .make_bank_borrow_ix(borrower_token_account_f_sol.key, sol_bank, 1_000) - .await; - - let mut ixs = vec![borrow_ix]; - - let start_ix = borrower_mfi_account_f - .make_lending_account_start_flashloan_ix(ixs.len() as u64 + 1) - .await; - - let end_ix = lender_mfi_account_f - .make_lending_account_end_flashloan_ix(vec![], vec![]) - .await; - - ixs.insert(0, start_ix); - ixs.push(end_ix); - - let mut ctx = test_f.context.borrow_mut(); - - let tx = Transaction::new_signed_with_payer( - &ixs, - Some(&ctx.payer.pubkey().clone()), - &[&ctx.payer], - ctx.last_blockhash, - ); - - let res = ctx.banks_client.process_transaction(tx).await; - - assert_custom_error!(res.unwrap_err(), MarginfiError::IllegalFlashloan); - - Ok(()) -} - -#[tokio::test] -async fn flashloan_fail_already_in_flashloan() -> anyhow::Result<()> { - // Setup test executor with non-admin payer - let test_f = TestFixture::new(Some(TestSettings::all_banks_payer_not_admin())).await; - - let sol_bank = test_f.get_bank(&BankMint::Sol); - - // Fund SOL lender - let lender_mfi_account_f = test_f.create_marginfi_account().await; - let lender_token_account_f_sol = test_f - .sol_mint - .create_token_account_and_mint_to(1_000) - .await; - lender_mfi_account_f - .try_bank_deposit(lender_token_account_f_sol.key, sol_bank, 1_000, None) - .await?; - - // Fund SOL borrower - let borrower_mfi_account_f = test_f.create_marginfi_account().await; - - let borrower_token_account_f_sol = test_f.sol_mint.create_empty_token_account().await; - // Borrow SOL - - let borrow_ix = borrower_mfi_account_f - .make_bank_borrow_ix(borrower_token_account_f_sol.key, sol_bank, 1_000) - .await; - - let mut ixs = vec![borrow_ix]; - - let start_ix = borrower_mfi_account_f - .make_lending_account_start_flashloan_ix(ixs.len() as u64 + 2) - .await; - - let end_ix = borrower_mfi_account_f - .make_lending_account_end_flashloan_ix(vec![], vec![]) - .await; - - ixs.insert(0, start_ix.clone()); - ixs.insert(0, start_ix.clone()); - ixs.push(end_ix); - - let mut ctx = test_f.context.borrow_mut(); - - let tx = Transaction::new_signed_with_payer( - &ixs, - Some(&ctx.payer.pubkey().clone()), - &[&ctx.payer], - ctx.last_blockhash, - ); - - let res = ctx.banks_client.process_transaction(tx).await; - - assert_custom_error!(res.unwrap_err(), MarginfiError::IllegalFlashloan); - - Ok(()) -} diff --git a/programs/marginfi/tests/user_actions/liquidate.rs b/programs/marginfi/tests/user_actions/liquidate.rs deleted file mode 100644 index 31dad5cf5..000000000 --- a/programs/marginfi/tests/user_actions/liquidate.rs +++ /dev/null @@ -1,759 +0,0 @@ -use anchor_spl::token_2022::spl_token_2022::extension::{ - transfer_fee::TransferFeeConfig, BaseStateWithExtensions, -}; -use fixed::types::I80F48; -use fixed_macro::types::I80F48; -use fixtures::{assert_custom_error, assert_eq_noise, native, prelude::*}; -use marginfi::{ - prelude::*, - state::marginfi_group::{Bank, BankConfig, BankConfigOpt, BankVaultType}, -}; -use pretty_assertions::assert_eq; -use solana_program_test::*; -use test_case::test_case; - -#[test_case(100., 9.9, 1., BankMint::Usdc, BankMint::Sol)] -#[test_case(123., 122., 10., BankMint::SolEquivalent, BankMint::SolEqIsolated)] -#[test_case(1_000., 999., 10., BankMint::Usdc, BankMint::T22WithFee)] -#[test_case(2_000., 99., 1_000., BankMint::T22WithFee, BankMint::SolEquivalent)] -#[test_case(2_000., 1_999., 2_000., BankMint::Usdc, BankMint::PyUSD)] -#[tokio::test] -async fn marginfi_account_liquidation_success( - deposit_amount: f64, - borrow_amount: f64, - liquidate_amount: f64, - collateral_mint: BankMint, - debt_mint: BankMint, -) -> anyhow::Result<()> { - // ------------------------------------------------------------------------- - // Setup - // ------------------------------------------------------------------------- - - let mut test_f = TestFixture::new(Some(TestSettings::all_banks_payer_not_admin())).await; - - // LP - - { - let lp_deposit_amount = 2. * borrow_amount; - let lp_wallet_balance = get_max_deposit_amount_pre_fee(lp_deposit_amount); - let lp_mfi_account_f = test_f.create_marginfi_account().await; - let lp_collateral_token_account = test_f - .get_bank(&debt_mint) - .mint - .create_token_account_and_mint_to(lp_wallet_balance) - .await; - lp_mfi_account_f - .try_bank_deposit( - lp_collateral_token_account.key, - test_f.get_bank(&debt_mint), - lp_deposit_amount, - None, - ) - .await?; - } - - // Liquidatee - - let (liquidatee_mfi_account_f, borrow_amount_actual) = { - let liquidatee_mfi_account_f = test_f.create_marginfi_account().await; - let liquidatee_wallet_balance = get_max_deposit_amount_pre_fee(deposit_amount); - let liquidatee_collateral_token_account_f = test_f - .get_bank_mut(&collateral_mint) - .mint - .create_token_account_and_mint_to(liquidatee_wallet_balance) - .await; - let liquidatee_debt_token_account_f = test_f - .get_bank_mut(&debt_mint) - .mint - .create_empty_token_account() - .await; - liquidatee_mfi_account_f - .try_bank_deposit( - liquidatee_collateral_token_account_f.key, - test_f.get_bank(&collateral_mint), - deposit_amount, - None, - ) - .await?; - liquidatee_mfi_account_f - .try_bank_borrow( - liquidatee_debt_token_account_f.key, - test_f.get_bank(&debt_mint), - borrow_amount, - ) - .await?; - - let liquidatee_mfi_ma = liquidatee_mfi_account_f.load().await; - let debt_bank = test_f.get_bank(&debt_mint).load().await; - let borrow_amount_actual_native = debt_bank.get_liability_amount( - liquidatee_mfi_ma.lending_account.balances[1] - .liability_shares - .into(), - )?; - let borrow_amount_actual = borrow_amount_actual_native.to_num::() - / 10_f64.powf(debt_bank.mint_decimals as f64); - - (liquidatee_mfi_account_f, borrow_amount_actual) - }; - - // Liquidator - - let liquidator_mfi_account_f = { - let liquidator_mfi_account_f = test_f.create_marginfi_account().await; - let liquidator_wallet_balance = get_max_deposit_amount_pre_fee(borrow_amount_actual); - let liquidator_collateral_token_account_f = test_f - .get_bank_mut(&debt_mint) - .mint - .create_token_account_and_mint_to(liquidator_wallet_balance) - .await; - liquidator_mfi_account_f - .try_bank_deposit( - liquidator_collateral_token_account_f.key, - test_f.get_bank(&debt_mint), - borrow_amount_actual, - None, - ) - .await?; - - liquidator_mfi_account_f - }; - - // ------------------------------------------------------------------------- - // Test - // ------------------------------------------------------------------------- - - // Synthetically bring down the borrower account health by reducing the asset weights of the collateral bank - test_f - .get_bank_mut(&collateral_mint) - .update_config( - BankConfigOpt { - asset_weight_init: Some(I80F48!(0.25).into()), - asset_weight_maint: Some(I80F48!(0.5).into()), - ..Default::default() - }, - None, - ) - .await?; - - let collateral_bank_f = test_f.get_bank(&collateral_mint); - let debt_bank_f = test_f.get_bank(&debt_mint); - - liquidator_mfi_account_f - .try_liquidate( - &liquidatee_mfi_account_f, - collateral_bank_f, - liquidate_amount, - debt_bank_f, - ) - .await?; - - let collateral_bank = collateral_bank_f.load().await; - let debt_bank = debt_bank_f.load().await; - - let liquidator_mfi_ma = liquidator_mfi_account_f.load().await; - let liquidatee_mfi_ma = liquidatee_mfi_account_f.load().await; - - // Check liquidator collateral balances - - let collateral_mint_liquidator_balance = collateral_bank.get_asset_amount( - liquidator_mfi_ma.lending_account.balances[1] - .asset_shares - .into(), - )?; - let expected_collateral_mint_liquidator_balance = - native!(liquidate_amount, collateral_bank_f.mint.mint.decimals, f64); - assert_eq!( - expected_collateral_mint_liquidator_balance, - collateral_mint_liquidator_balance - ); - - let debt_paid_out = liquidate_amount * 0.975 * collateral_bank_f.get_price().await - / debt_bank_f.get_price().await; - - let expected_debt_mint_liquidator_balance = I80F48::from(native!( - borrow_amount_actual - debt_paid_out, - debt_bank_f.mint.mint.decimals, - f64 - )); - let debt_mint_liquidator_balance = debt_bank.get_asset_amount( - liquidator_mfi_ma.lending_account.balances[0] - .asset_shares - .into(), - )?; - assert_eq_noise!( - expected_debt_mint_liquidator_balance, - debt_mint_liquidator_balance, - 1. - ); - - // Check liquidatee collateral and debt balances - - let debt_covered = liquidate_amount * 0.95 * collateral_bank_f.get_price().await - / debt_bank_f.get_price().await; - let expected_debt_mint_liquidatee_balance = I80F48::from(native!( - borrow_amount_actual - debt_covered, - debt_bank_f.mint.mint.decimals, - f64 - )); - let debt_mint_liquidatee_balance = debt_bank.get_liability_amount( - liquidatee_mfi_ma.lending_account.balances[1] - .liability_shares - .into(), - )?; - assert_eq_noise!( - expected_debt_mint_liquidatee_balance, - debt_mint_liquidatee_balance, - 1. - ); - - let expected_collateral_mint_liquidatee_balance = I80F48::from(native!( - deposit_amount - liquidate_amount, - collateral_bank_f.mint.mint.decimals, - f64 - )); - let collateral_mint_liquidatee_balance = collateral_bank - .get_liability_amount( - liquidatee_mfi_ma.lending_account.balances[0] - .asset_shares - .into(), - ) - .unwrap(); - assert_eq_noise!( - collateral_mint_liquidatee_balance, - expected_collateral_mint_liquidatee_balance, - 1. - ); - - let insurance_fund_fee = liquidate_amount * 0.025 * collateral_bank_f.get_price().await - / debt_bank_f.get_price().await; - let expected_insurance_fund_usdc_pre_fee = - native!(insurance_fund_fee, debt_bank_f.mint.mint.decimals, f64); - let if_transfer_fee = debt_bank_f - .mint - .load_state() - .await - .get_extension::() - .map(|tf| { - tf.calculate_epoch_fee(0, expected_insurance_fund_usdc_pre_fee) - .unwrap_or(0) - }) - .unwrap_or(0); - let expected_insurance_fund_usdc = - (expected_insurance_fund_usdc_pre_fee - if_transfer_fee) as i64; - - let insurance_fund_usdc = debt_bank_f - .get_vault_token_account(BankVaultType::Insurance) - .await - .balance() - .await as i64; - assert_eq_noise!(expected_insurance_fund_usdc, insurance_fund_usdc, 1); - - Ok(()) -} - -#[tokio::test] -async fn marginfi_account_liquidation_success_many_balances() -> anyhow::Result<()> { - let test_f = TestFixture::new(Some(TestSettings::many_banks_10())).await; - - let usdc_bank_f = test_f.get_bank(&BankMint::Usdc); - let sol_bank_f = test_f.get_bank(&BankMint::Sol); - let sol_eq_bank_f = test_f.get_bank(&BankMint::SolEquivalent); - let sol_eq1_bank_f = test_f.get_bank(&BankMint::SolEquivalent1); - let sol_eq2_bank_f = test_f.get_bank(&BankMint::SolEquivalent2); - let sol_eq3_bank_f = test_f.get_bank(&BankMint::SolEquivalent3); - let sol_eq4_bank_f = test_f.get_bank(&BankMint::SolEquivalent4); - let sol_eq5_bank_f = test_f.get_bank(&BankMint::SolEquivalent5); - let sol_eq6_bank_f = test_f.get_bank(&BankMint::SolEquivalent6); - let sol_eq7_bank_f = test_f.get_bank(&BankMint::SolEquivalent7); - - let lender_mfi_account_f = test_f.create_marginfi_account().await; - let lender_token_account_usdc = test_f - .usdc_mint - .create_token_account_and_mint_to(2_000) - .await; - lender_mfi_account_f - .try_bank_deposit(lender_token_account_usdc.key, usdc_bank_f, 2_000, None) - .await?; - - let borrower_mfi_account_f = test_f.create_marginfi_account().await; - let borrower_token_account_sol = test_f.sol_mint.create_token_account_and_mint_to(100).await; - let borrower_token_account_usdc = test_f.usdc_mint.create_empty_token_account().await; - let borrower_token_account_sol_eq = test_f - .sol_equivalent_mint - .create_token_account_and_mint_to(5000) - .await; - - // Borrower deposits 100 SOL worth of $1000 - borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_sol.key, sol_bank_f, 100, None) - .await?; - - // Borrower borrows $999 - borrower_mfi_account_f - .try_bank_borrow(borrower_token_account_usdc.key, usdc_bank_f, 999) - .await?; - - borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_sol_eq.key, sol_eq_bank_f, 0, None) - .await?; - borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_sol_eq.key, sol_eq1_bank_f, 0, None) - .await?; - borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_sol_eq.key, sol_eq2_bank_f, 0, None) - .await?; - borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_sol_eq.key, sol_eq3_bank_f, 0, None) - .await?; - borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_sol_eq.key, sol_eq4_bank_f, 0, None) - .await?; - borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_sol_eq.key, sol_eq5_bank_f, 0, None) - .await?; - borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_sol_eq.key, sol_eq6_bank_f, 0, None) - .await?; - borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_sol_eq.key, sol_eq7_bank_f, 0, None) - .await?; - - // Synthetically bring down the borrower account health by reducing the asset weights of the SOL bank - sol_bank_f - .update_config( - BankConfigOpt { - asset_weight_init: Some(I80F48!(0.25).into()), - asset_weight_maint: Some(I80F48!(0.5).into()), - ..Default::default() - }, - None, - ) - .await?; - - lender_mfi_account_f - .try_liquidate(&borrower_mfi_account_f, sol_bank_f, 1, usdc_bank_f) - .await?; - - // Checks - let sol_bank: Bank = sol_bank_f.load().await; - let usdc_bank: Bank = usdc_bank_f.load().await; - - let depositor_ma = lender_mfi_account_f.load().await; - let borrower_ma = borrower_mfi_account_f.load().await; - - // Depositors should have 1 SOL - assert_eq!( - sol_bank - .get_asset_amount(depositor_ma.lending_account.balances[1].asset_shares.into()) - .unwrap(), - I80F48::from(native!(1, "SOL")) - ); - - // Depositors should have 1990.25 USDC - assert_eq_noise!( - usdc_bank - .get_asset_amount(depositor_ma.lending_account.balances[0].asset_shares.into()) - .unwrap(), - I80F48::from(native!(1990.25, "USDC", f64)), - native!(0.00001, "USDC", f64) - ); - - // Borrower should have 99 SOL - assert_eq!( - sol_bank - .get_asset_amount(borrower_ma.lending_account.balances[0].asset_shares.into()) - .unwrap(), - I80F48::from(native!(99, "SOL")) - ); - - // Borrower should have 989.50 USDC - assert_eq_noise!( - usdc_bank - .get_liability_amount( - borrower_ma.lending_account.balances[1] - .liability_shares - .into() - ) - .unwrap(), - I80F48::from(native!(989.50, "USDC", f64)), - native!(0.00001, "USDC", f64) - ); - - // Check insurance fund fee - let insurance_fund_usdc = usdc_bank_f - .get_vault_token_account(BankVaultType::Insurance) - .await; - - assert_eq_noise!( - insurance_fund_usdc.balance().await as i64, - native!(0.25, "USDC", f64) as i64, - 1 - ); - - Ok(()) -} - -#[tokio::test] -async fn marginfi_account_liquidation_success_swb() -> anyhow::Result<()> { - let test_f = TestFixture::new(Some(TestSettings { - banks: vec![ - TestBankSetting { - mint: BankMint::Usdc, - ..TestBankSetting::default() - }, - TestBankSetting { - mint: BankMint::Sol, - config: Some(BankConfig { - asset_weight_init: I80F48!(1).into(), - asset_weight_maint: I80F48!(1).into(), - ..*DEFAULT_SOL_TEST_SW_BANK_CONFIG - }), - }, - ], - protocol_fees: false, - })) - .await; - - let usdc_bank_f = test_f.get_bank(&BankMint::Usdc); - let sol_bank_f = test_f.get_bank(&BankMint::Sol); - - let lender_mfi_account_f = test_f.create_marginfi_account().await; - let lender_token_account_usdc = test_f - .usdc_mint - .create_token_account_and_mint_to(2_000) - .await; - lender_mfi_account_f - .try_bank_deposit(lender_token_account_usdc.key, usdc_bank_f, 2_000, None) - .await?; - - let borrower_mfi_account_f = test_f.create_marginfi_account().await; - let borrower_token_account_sol = test_f.sol_mint.create_token_account_and_mint_to(100).await; - let borrower_token_account_usdc = test_f.usdc_mint.create_empty_token_account().await; - - // Borrower deposits 100 SOL worth of $1000 - borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_sol.key, sol_bank_f, 100, None) - .await?; - - // Borrower borrows $999 - borrower_mfi_account_f - .try_bank_borrow(borrower_token_account_usdc.key, usdc_bank_f, 999) - .await?; - - // Synthetically bring down the borrower account health by reducing the asset weights of the SOL bank - sol_bank_f - .update_config( - BankConfigOpt { - asset_weight_init: Some(I80F48!(0.25).into()), - asset_weight_maint: Some(I80F48!(0.5).into()), - ..Default::default() - }, - None, - ) - .await?; - - lender_mfi_account_f - .try_liquidate(&borrower_mfi_account_f, sol_bank_f, 1, usdc_bank_f) - .await?; - - // Checks - let sol_bank: Bank = sol_bank_f.load().await; - let usdc_bank: Bank = usdc_bank_f.load().await; - - let depositor_ma = lender_mfi_account_f.load().await; - let borrower_ma = borrower_mfi_account_f.load().await; - - // Depositors should have 1 SOL - assert_eq!( - sol_bank - .get_asset_amount(depositor_ma.lending_account.balances[1].asset_shares.into()) - .unwrap(), - I80F48::from(native!(1, "SOL")) - ); - - // Depositors should have 1990.25 USDC - assert_eq_noise!( - usdc_bank - .get_asset_amount(depositor_ma.lending_account.balances[0].asset_shares.into()) - .unwrap(), - I80F48::from(native!(1990.25, "USDC", f64)), - native!(0.01, "USDC", f64) - ); - - // Borrower should have 99 SOL - assert_eq!( - sol_bank - .get_asset_amount(borrower_ma.lending_account.balances[0].asset_shares.into()) - .unwrap(), - I80F48::from(native!(99, "SOL")) - ); - - // Borrower should have 989.50 USDC - assert_eq_noise!( - usdc_bank - .get_liability_amount( - borrower_ma.lending_account.balances[1] - .liability_shares - .into() - ) - .unwrap(), - I80F48::from(native!(989.50, "USDC", f64)), - native!(0.01, "USDC", f64) - ); - - // Check insurance fund fee - let insurance_fund_usdc = usdc_bank_f - .get_vault_token_account(BankVaultType::Insurance) - .await; - - assert_eq_noise!( - insurance_fund_usdc.balance().await as i64, - native!(0.25, "USDC", f64) as i64, - native!(0.001, "USDC", f64) as i64 - ); - - Ok(()) -} - -#[tokio::test] -async fn marginfi_account_liquidation_failure_liquidatee_not_unhealthy() -> anyhow::Result<()> { - let test_f = TestFixture::new(Some(TestSettings { - banks: vec![ - TestBankSetting { - mint: BankMint::Usdc, - config: Some(BankConfig { - asset_weight_maint: I80F48!(1).into(), - ..*DEFAULT_USDC_TEST_BANK_CONFIG - }), - }, - TestBankSetting { - mint: BankMint::Sol, - config: Some(BankConfig { - asset_weight_init: I80F48!(1).into(), - asset_weight_maint: I80F48!(1).into(), - ..*DEFAULT_SOL_TEST_BANK_CONFIG - }), - }, - ], - protocol_fees: false, - })) - .await; - - let usdc_bank_f = test_f.get_bank(&BankMint::Usdc); - let sol_bank_f = test_f.get_bank(&BankMint::Sol); - - let lender_mfi_account_f = test_f.create_marginfi_account().await; - let lender_token_account_usdc = test_f.usdc_mint.create_token_account_and_mint_to(200).await; - lender_mfi_account_f - .try_bank_deposit(lender_token_account_usdc.key, usdc_bank_f, 200, None) - .await?; - - let borrower_mfi_account_f = test_f.create_marginfi_account().await; - let borrower_token_account_sol = test_f.sol_mint.create_token_account_and_mint_to(100).await; - let borrower_token_account_usdc = test_f.usdc_mint.create_empty_token_account().await; - - borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_sol.key, sol_bank_f, 100, None) - .await?; - - borrower_mfi_account_f - .try_bank_borrow(borrower_token_account_usdc.key, usdc_bank_f, 100) - .await?; - - let res = lender_mfi_account_f - .try_liquidate(&borrower_mfi_account_f, sol_bank_f, 1, usdc_bank_f) - .await; - - assert!(res.is_err()); - - assert_custom_error!(res.unwrap_err(), MarginfiError::HealthyAccount); - - Ok(()) -} - -#[tokio::test] -async fn marginfi_account_liquidation_failure_liquidation_too_severe() -> anyhow::Result<()> { - let test_f = TestFixture::new(Some(TestSettings::all_banks_payer_not_admin())).await; - - let usdc_bank_f = test_f.get_bank(&BankMint::Usdc); - let sol_bank_f = test_f.get_bank(&BankMint::Sol); - - let lender_mfi_account_f = test_f.create_marginfi_account().await; - let lender_token_account_usdc = test_f.usdc_mint.create_token_account_and_mint_to(200).await; - lender_mfi_account_f - .try_bank_deposit(lender_token_account_usdc.key, usdc_bank_f, 200, None) - .await?; - - let borrower_mfi_account_f = test_f.create_marginfi_account().await; - let borrower_token_account_sol = test_f.sol_mint.create_token_account_and_mint_to(10).await; - let borrower_token_account_usdc = test_f.usdc_mint.create_empty_token_account().await; - borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_sol.key, sol_bank_f, 10, None) - .await?; - borrower_mfi_account_f - .try_bank_borrow(borrower_token_account_usdc.key, usdc_bank_f, 61) - .await?; - - sol_bank_f - .update_config( - BankConfigOpt { - asset_weight_init: Some(I80F48!(0.25).into()), - asset_weight_maint: Some(I80F48!(0.5).into()), - ..Default::default() - }, - None, - ) - .await?; - - let res = lender_mfi_account_f - .try_liquidate(&borrower_mfi_account_f, sol_bank_f, 10, usdc_bank_f) - .await; - - assert_custom_error!(res.unwrap_err(), MarginfiError::ExhaustedLiability); - - let res = lender_mfi_account_f - .try_liquidate(&borrower_mfi_account_f, sol_bank_f, 1, usdc_bank_f) - .await; - - assert!(res.is_ok()); - - Ok(()) -} - -#[tokio::test] -async fn marginfi_account_liquidation_failure_liquidator_no_collateral() -> anyhow::Result<()> { - let test_f = TestFixture::new(Some(TestSettings { - banks: vec![ - TestBankSetting { - mint: BankMint::Usdc, - config: Some(BankConfig { - liability_weight_init: I80F48!(1.2).into(), - liability_weight_maint: I80F48!(1.1).into(), - ..*DEFAULT_USDC_TEST_BANK_CONFIG - }), - }, - TestBankSetting { - mint: BankMint::Sol, - config: None, - }, - TestBankSetting { - mint: BankMint::SolEquivalent, - config: None, - }, - ], - protocol_fees: false, - })) - .await; - - let usdc_bank_f = test_f.get_bank(&BankMint::Usdc); - let sol_bank_f = test_f.get_bank(&BankMint::Sol); - let sol_eq_bank_f = test_f.get_bank(&BankMint::SolEquivalent); - - let lender_mfi_account_f = test_f.create_marginfi_account().await; - let lender_token_account_usdc = test_f.usdc_mint.create_token_account_and_mint_to(200).await; - lender_mfi_account_f - .try_bank_deposit(lender_token_account_usdc.key, usdc_bank_f, 200, None) - .await?; - - let borrower_mfi_account_f = test_f.create_marginfi_account().await; - let borrower_token_account_sol = test_f.sol_mint.create_token_account_and_mint_to(100).await; - let borrower_token_account_sol_eq = test_f - .sol_equivalent_mint - .create_token_account_and_mint_to(100) - .await; - let borrower_token_account_usdc = test_f.usdc_mint.create_empty_token_account().await; - borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_sol.key, sol_bank_f, 10, None) - .await?; - borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_sol_eq.key, sol_eq_bank_f, 1, None) - .await?; - borrower_mfi_account_f - .try_bank_borrow(borrower_token_account_usdc.key, usdc_bank_f, 60) - .await?; - - sol_bank_f - .update_config( - BankConfigOpt { - asset_weight_init: Some(I80F48!(0.25).into()), - asset_weight_maint: Some(I80F48!(0.3).into()), - ..Default::default() - }, - None, - ) - .await?; - - let res = lender_mfi_account_f - .try_liquidate(&borrower_mfi_account_f, sol_eq_bank_f, 2, usdc_bank_f) - .await; - - assert_custom_error!(res.unwrap_err(), MarginfiError::OverliquidationAttempt); - - let res = lender_mfi_account_f - .try_liquidate(&borrower_mfi_account_f, sol_eq_bank_f, 1, usdc_bank_f) - .await; - - assert!(res.is_ok()); - - Ok(()) -} - -#[tokio::test] -async fn marginfi_account_liquidation_failure_bank_not_liquidatable() -> anyhow::Result<()> { - let test_f = TestFixture::new(Some(TestSettings::all_banks_payer_not_admin())).await; - - let usdc_bank_f = test_f.get_bank(&BankMint::Usdc); - let sol_bank_f = test_f.get_bank(&BankMint::Sol); - let sol_eq_bank_f = test_f.get_bank(&BankMint::SolEquivalent); - - let lender_mfi_account_f = test_f.create_marginfi_account().await; - let lender_token_account_usdc = test_f.usdc_mint.create_token_account_and_mint_to(200).await; - lender_mfi_account_f - .try_bank_deposit(lender_token_account_usdc.key, usdc_bank_f, 200, None) - .await?; - - let borrower_mfi_account_f = test_f.create_marginfi_account().await; - let borrower_token_account_sol = test_f.sol_mint.create_token_account_and_mint_to(100).await; - let borrower_token_account_sol_eq = test_f - .sol_equivalent_mint - .create_token_account_and_mint_to(100) - .await; - let borrower_token_account_usdc = test_f.usdc_mint.create_empty_token_account().await; - borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_sol.key, sol_bank_f, 10, None) - .await?; - borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_sol_eq.key, sol_eq_bank_f, 1, None) - .await?; - borrower_mfi_account_f - .try_bank_borrow(borrower_token_account_usdc.key, usdc_bank_f, 60) - .await?; - - sol_bank_f - .update_config( - BankConfigOpt { - asset_weight_init: Some(I80F48!(0.25).into()), - asset_weight_maint: Some(I80F48!(0.4).into()), - ..Default::default() - }, - None, - ) - .await?; - - let res = lender_mfi_account_f - .try_liquidate(&borrower_mfi_account_f, sol_eq_bank_f, 1, sol_bank_f) - .await; - - assert_custom_error!( - res.unwrap_err(), - MarginfiError::NoLiabilitiesInLiabilityBank - ); - - let res = lender_mfi_account_f - .try_liquidate(&borrower_mfi_account_f, sol_bank_f, 1, usdc_bank_f) - .await; - - assert!(res.is_ok()); - - Ok(()) -} diff --git a/programs/marginfi/tests/user_actions/mod.rs b/programs/marginfi/tests/user_actions/mod.rs deleted file mode 100644 index df996f0ea..000000000 --- a/programs/marginfi/tests/user_actions/mod.rs +++ /dev/null @@ -1,505 +0,0 @@ -mod borrow; -mod close_account; -mod close_balance; -mod create_account; -mod deposit; -mod flash_loan; -mod liquidate; -mod repay; -mod withdraw; - -use anchor_lang::prelude::Clock; -use fixed::types::I80F48; -use fixtures::{assert_custom_error, assert_eq_noise, native, prelude::*}; -use marginfi::{ - assert_eq_with_tolerance, - constants::{ - EMISSIONS_FLAG_BORROW_ACTIVE, EMISSIONS_FLAG_LENDING_ACTIVE, MIN_EMISSIONS_START_TIME, - }, - prelude::*, - state::marginfi_account::{ - BankAccountWrapper, ACCOUNT_DISABLED, ACCOUNT_FLAG_DEPRECATED, ACCOUNT_IN_FLASHLOAN, - ACCOUNT_TRANSFER_AUTHORITY_ALLOWED, - }, -}; -use pretty_assertions::assert_eq; -use solana_program_test::*; -use solana_sdk::timing::SECONDS_PER_YEAR; - -#[tokio::test] -async fn automatic_interest_payments() -> anyhow::Result<()> { - // Setup test executor with non-admin payer - let test_f = TestFixture::new(Some(TestSettings::all_banks_payer_not_admin())).await; - - let usdc_bank_f = test_f.get_bank(&BankMint::Usdc); - let sol_bank_f = test_f.get_bank(&BankMint::Sol); - - // Create lender user accounts and deposit SOL asset - let lender_mfi_account_f = test_f.create_marginfi_account().await; - let lender_token_account_sol = test_f - .sol_mint - .create_token_account_and_mint_to(1_000) - .await; - lender_mfi_account_f - .try_bank_deposit(lender_token_account_sol.key, sol_bank_f, 1_000, None) - .await?; - - // Create borrower user accounts and deposit USDC asset - let borrower_mfi_account_f = test_f.create_marginfi_account().await; - let borrower_token_account_usdc = test_f - .usdc_mint - .create_token_account_and_mint_to(1_000) - .await; - borrower_mfi_account_f - .try_bank_deposit(borrower_token_account_usdc.key, usdc_bank_f, 1_000, None) - .await?; - - // Borrow SOL from borrower mfi account - borrower_mfi_account_f - .try_bank_borrow(lender_token_account_sol.key, sol_bank_f, 99) - .await?; - - // Let a year go by - { - let mut ctx = test_f.context.borrow_mut(); - let mut clock: Clock = ctx.banks_client.get_sysvar().await?; - // Advance clock by 1 year - clock.unix_timestamp += 365 * 24 * 60 * 60; - ctx.set_sysvar(&clock); - } - - // Repay principal, leaving only the accrued interest - borrower_mfi_account_f - .try_bank_repay(lender_token_account_sol.key, sol_bank_f, 99, None) - .await?; - - let sol_bank = sol_bank_f.load().await; - let borrower_mfi_account = borrower_mfi_account_f.load().await; - let lender_mfi_account = lender_mfi_account_f.load().await; - - // Verify that interest accrued matches on both sides - assert_eq_noise!( - sol_bank - .get_liability_amount( - borrower_mfi_account.lending_account.balances[1] - .liability_shares - .into() - ) - .unwrap(), - I80F48::from(native!(11.761, "SOL", f64)), - native!(0.0002, "SOL", f64) - ); - - assert_eq_noise!( - sol_bank - .get_asset_amount( - lender_mfi_account.lending_account.balances[0] - .asset_shares - .into() - ) - .unwrap(), - I80F48::from(native!(1011.761, "SOL", f64)), - native!(0.0002, "SOL", f64) - ); - // TODO: check health is sane - - Ok(()) -} - -// Regression - -#[tokio::test] -async fn marginfi_account_correct_balance_selection_after_closing_position() -> anyhow::Result<()> { - let test_f = TestFixture::new(Some(TestSettings::all_banks_payer_not_admin())).await; - - let usdc_bank_f = test_f.get_bank(&BankMint::Usdc); - let sol_bank_f = test_f.get_bank(&BankMint::Sol); - - let lender_mfi_account_f = test_f.create_marginfi_account().await; - let lender_token_account_sol = test_f - .sol_mint - .create_token_account_and_mint_to(1_000) - .await; - lender_mfi_account_f - .try_bank_deposit(lender_token_account_sol.key, sol_bank_f, 1_000, None) - .await?; - let lender_token_account_usdc = test_f - .usdc_mint - .create_token_account_and_mint_to(2_000) - .await; - lender_mfi_account_f - .try_bank_deposit(lender_token_account_usdc.key, usdc_bank_f, 2_000, None) - .await?; - - lender_mfi_account_f - .try_bank_withdraw(lender_token_account_sol.key, sol_bank_f, 0, Some(true)) - .await - .unwrap(); - - let mut marginfi_account = lender_mfi_account_f.load().await; - let mut usdc_bank = usdc_bank_f.load().await; - - let bank_account = BankAccountWrapper::find( - &usdc_bank_f.key, - &mut usdc_bank, - &mut marginfi_account.lending_account, - ); - - assert!(bank_account.is_ok()); - - let bank_account = bank_account.unwrap(); - - assert_eq!( - bank_account - .bank - .get_asset_amount(bank_account.balance.asset_shares.into()) - .unwrap() - .to_num::(), - native!(2_000, "USDC") - ); - - Ok(()) -} - -#[tokio::test] -async fn emissions_test() -> anyhow::Result<()> { - let test_f = TestFixture::new(Some(TestSettings::all_banks_payer_not_admin())).await; - - let usdc_bank = test_f.get_bank(&BankMint::Usdc); - let sol_bank = test_f.get_bank(&BankMint::Sol); - - // Setup emissions (Deposit for USDC, Borrow for SOL) - - let funding_account = test_f.usdc_mint.create_token_account_and_mint_to(100).await; - - usdc_bank - .try_setup_emissions( - EMISSIONS_FLAG_LENDING_ACTIVE, - 1_000_000, - native!(50, "USDC"), - usdc_bank.mint.key, - funding_account.key, - usdc_bank.get_token_program(), - ) - .await?; - - // SOL Emissions are not in SOL Bank mint - let sol_emissions_mint = - MintFixture::new_token_22(test_f.context.clone(), None, Some(6), &[]).await; - - let funding_account = sol_emissions_mint - .create_token_account_and_mint_to(200) - .await; - - sol_bank - .try_setup_emissions( - EMISSIONS_FLAG_BORROW_ACTIVE, - 1_000_000, - native!(100, 6), - sol_emissions_mint.key, - funding_account.key, - sol_emissions_mint.token_program, - ) - .await?; - - let sol_emissions_mint_2 = - MintFixture::new_token_22(test_f.context.clone(), None, Some(6), &[]).await; - - let funding_account = sol_emissions_mint_2 - .create_token_account_and_mint_to(200) - .await; - - let res = sol_bank - .try_setup_emissions( - EMISSIONS_FLAG_BORROW_ACTIVE, - 1_000_000, - native!(50, 6), - sol_emissions_mint_2.key, - funding_account.key, - sol_emissions_mint_2.token_program, - ) - .await; - - assert_custom_error!(res.unwrap_err(), MarginfiError::EmissionsAlreadySetup); - - // Fund SOL bank - let sol_lender_account = test_f.create_marginfi_account().await; - let sol_lender_token_account = test_f.sol_mint.create_token_account_and_mint_to(100).await; - - sol_lender_account - .try_bank_deposit(sol_lender_token_account.key, sol_bank, 100, None) - .await?; - - // Create account and setup positions - test_f.set_time(MIN_EMISSIONS_START_TIME as i64); - test_f - .set_pyth_oracle_timestamp(PYTH_USDC_FEED, MIN_EMISSIONS_START_TIME as i64) - .await; - test_f - .set_pyth_oracle_timestamp(PYTH_SOL_FEED, MIN_EMISSIONS_START_TIME as i64) - .await; - - let mfi_account_f = test_f.create_marginfi_account().await; - let lender_token_account_usdc = test_f.usdc_mint.create_token_account_and_mint_to(50).await; - - mfi_account_f - .try_bank_deposit(lender_token_account_usdc.key, usdc_bank, 50, None) - .await?; - - let sol_account = test_f.sol_mint.create_empty_token_account().await; - - mfi_account_f - .try_bank_borrow(sol_account.key, sol_bank, 2) - .await?; - - // Advance for half a year and claim half emissions - test_f.advance_time((SECONDS_PER_YEAR / 2.0) as i64).await; - - let lender_token_account_usdc = test_f.usdc_mint.create_empty_token_account().await; - - mfi_account_f - .try_withdraw_emissions(usdc_bank, &lender_token_account_usdc) - .await?; - - let sol_emissions_ta = sol_emissions_mint.create_empty_token_account().await; - - mfi_account_f - .try_withdraw_emissions(sol_bank, &sol_emissions_ta) - .await?; - - assert_eq_with_tolerance!( - lender_token_account_usdc.balance().await as i64, - native!(25, "USDC") as i64, - native!(1, "USDC") as i64 - ); - - assert_eq_with_tolerance!( - sol_emissions_ta.balance().await as i64, - native!(1, 6) as i64, - native!(0.1, 6, f64) as i64 - ); - - // Advance for another half a year and claim the rest - test_f.advance_time((SECONDS_PER_YEAR / 2.0) as i64).await; - - mfi_account_f - .try_withdraw_emissions(usdc_bank, &lender_token_account_usdc) - .await?; - - assert_eq_with_tolerance!( - lender_token_account_usdc.balance().await as i64, - native!(50, "USDC") as i64, - native!(1, "USDC") as i64 - ); - - mfi_account_f - .try_withdraw_emissions(sol_bank, &sol_emissions_ta) - .await?; - - assert_eq_with_tolerance!( - sol_emissions_ta.balance().await as i64, - native!(2, 6) as i64, - native!(0.1, 6, f64) as i64 - ); - - // Advance a year, and no more USDC emissions can be claimed (drained), SOL emissions can be claimed - - test_f.advance_time((SECONDS_PER_YEAR / 2.0) as i64).await; - - mfi_account_f - .try_withdraw_emissions(usdc_bank, &lender_token_account_usdc) - .await?; - - mfi_account_f - .try_withdraw_emissions(sol_bank, &sol_emissions_ta) - .await?; - - assert_eq_with_tolerance!( - lender_token_account_usdc.balance().await as i64, - native!(50, "USDC") as i64, - native!(1, "USDC") as i64 - ); - - assert_eq_with_tolerance!( - sol_emissions_ta.balance().await as i64, - native!(3, 6) as i64, - native!(0.1, 6, f64) as i64 - ); - - // SOL lendeing account can't claim emissions, bc SOL is borrow only emissions - let sol_lender_emissions = sol_emissions_mint.create_empty_token_account().await; - - sol_lender_account - .try_withdraw_emissions(sol_bank, &sol_lender_emissions) - .await?; - - assert_eq!(sol_lender_emissions.balance().await as i64, 0); - - Ok(()) -} - -#[tokio::test] -async fn emissions_test_2() -> anyhow::Result<()> { - let test_f = TestFixture::new(Some(TestSettings::all_banks_payer_not_admin())).await; - - let usdc_bank = test_f.get_bank(&BankMint::Usdc); - - let funding_account = test_f.usdc_mint.create_token_account_and_mint_to(100).await; - - usdc_bank - .try_setup_emissions( - EMISSIONS_FLAG_LENDING_ACTIVE, - 1_000_000, - native!(50, "USDC"), - usdc_bank.mint.key, - funding_account.key, - usdc_bank.get_token_program(), - ) - .await?; - - let usdc_bank_data = usdc_bank.load().await; - - assert_eq!(usdc_bank_data.flags, EMISSIONS_FLAG_LENDING_ACTIVE); - - assert_eq!(usdc_bank_data.emissions_rate, 1_000_000); - - assert_eq!( - I80F48::from(usdc_bank_data.emissions_remaining), - I80F48::from_num(native!(50, "USDC")) - ); - - usdc_bank - .try_update_emissions( - Some(EMISSIONS_FLAG_BORROW_ACTIVE), - Some(500_000), - Some((native!(25, "USDC"), funding_account.key)), - usdc_bank.get_token_program(), - ) - .await?; - - let usdc_bank_data = usdc_bank.load().await; - - assert_eq!(usdc_bank_data.flags, EMISSIONS_FLAG_BORROW_ACTIVE); - - assert_eq!(usdc_bank_data.emissions_rate, 500_000); - - assert_eq!( - I80F48::from(usdc_bank_data.emissions_remaining), - I80F48::from_num(native!(75, "USDC")) - ); - - Ok(()) -} - -#[tokio::test] -async fn emissions_setup_t22_with_fee() -> anyhow::Result<()> { - let test_f = TestFixture::new(Some(TestSettings::all_banks_payer_not_admin())).await; - - let collateral_mint = BankMint::T22WithFee; - let bank_f = test_f.get_bank(&collateral_mint); - - let funding_account = bank_f.mint.create_token_account_and_mint_to(100).await; - - let emissions_vault = get_emissions_token_account_address(bank_f.key, bank_f.mint.key).0; - - let pre_vault_balance = 0; - - bank_f - .try_setup_emissions( - EMISSIONS_FLAG_LENDING_ACTIVE, - 1_000_000, - native!(50, bank_f.mint.mint.decimals), - bank_f.mint.key, - funding_account.key, - bank_f.get_token_program(), - ) - .await?; - - let post_vault_balance = TokenAccountFixture::fetch(test_f.context.clone(), emissions_vault) - .await - .balance() - .await; - - let bank = bank_f.load().await; - - assert_eq!(bank.flags, EMISSIONS_FLAG_LENDING_ACTIVE); - - assert_eq!(bank.emissions_rate, 1_000_000); - - assert_eq!( - I80F48::from(bank.emissions_remaining), - I80F48::from_num(native!(50, bank_f.mint.mint.decimals)) - ); - - let expected_vault_balance_delta = native!(50, bank_f.mint.mint.decimals) as u64; - let actual_vault_balance_delta = post_vault_balance - pre_vault_balance; - assert_eq!(expected_vault_balance_delta, actual_vault_balance_delta); - - let pre_vault_balance = TokenAccountFixture::fetch(test_f.context.clone(), emissions_vault) - .await - .balance() - .await; - - bank_f - .try_update_emissions( - Some(EMISSIONS_FLAG_BORROW_ACTIVE), - Some(500_000), - Some((native!(25, bank_f.mint.mint.decimals), funding_account.key)), - bank_f.get_token_program(), - ) - .await?; - - let post_vault_balance = TokenAccountFixture::fetch(test_f.context.clone(), emissions_vault) - .await - .balance() - .await; - - let bank_data = bank_f.load().await; - - assert_eq!(bank_data.flags, EMISSIONS_FLAG_BORROW_ACTIVE); - - assert_eq!(bank_data.emissions_rate, 500_000); - - assert_eq!( - I80F48::from(bank_data.emissions_remaining), - I80F48::from_num(native!(75, bank_f.mint.mint.decimals)) - ); - - let expected_vault_balance_delta = native!(25, bank_f.mint.mint.decimals) as u64; - let actual_vault_balance_delta = post_vault_balance - pre_vault_balance; - assert_eq!(expected_vault_balance_delta, actual_vault_balance_delta); - - Ok(()) -} - -#[tokio::test] -async fn account_flags() -> anyhow::Result<()> { - let test_f = TestFixture::new(Some(TestSettings::all_banks_payer_not_admin())).await; - - let mfi_account_f = test_f.create_marginfi_account().await; - - let res = mfi_account_f.try_set_flag(ACCOUNT_FLAG_DEPRECATED).await; - - assert!(res.is_err()); - assert_custom_error!(res.unwrap_err(), MarginfiError::IllegalFlag); - - let res = mfi_account_f.try_set_flag(ACCOUNT_DISABLED).await; - - assert!(res.is_err()); - assert_custom_error!(res.unwrap_err(), MarginfiError::IllegalFlag); - - let res = mfi_account_f.try_unset_flag(ACCOUNT_IN_FLASHLOAN).await; - - assert!(res.is_err()); - assert_custom_error!(res.unwrap_err(), MarginfiError::IllegalFlag); - - let res = mfi_account_f - .try_set_flag(ACCOUNT_TRANSFER_AUTHORITY_ALLOWED) - .await; - - assert!(res.is_ok()); - let acc = mfi_account_f.load().await; - assert_eq!(acc.account_flags, ACCOUNT_TRANSFER_AUTHORITY_ALLOWED); - - Ok(()) -} diff --git a/programs/marginfi/tests/user_actions/repay.rs b/programs/marginfi/tests/user_actions/repay.rs deleted file mode 100644 index b7bad9b89..000000000 --- a/programs/marginfi/tests/user_actions/repay.rs +++ /dev/null @@ -1,380 +0,0 @@ -use anchor_spl::token_2022::spl_token_2022::extension::{ - transfer_fee::TransferFeeConfig, BaseStateWithExtensions, -}; -use fixed::types::I80F48; -use fixed_macro::types::I80F48; -use fixtures::{assert_custom_error, native, prelude::*}; -use marginfi::{assert_eq_with_tolerance, prelude::*, state::marginfi_group::BankVaultType}; -use pretty_assertions::assert_eq; -use solana_program_test::*; -use test_case::test_case; - -#[test_case(100., 9., BankMint::Usdc, BankMint::Sol)] -#[test_case(123456., 12345.599999999, BankMint::Usdc, BankMint::Sol)] -#[test_case(123456., 10000., BankMint::UsdcSwb, BankMint::Sol)] -#[test_case(1., 1., BankMint::Sol, BankMint::Usdc)] -#[test_case(128932., 9834., BankMint::PyUSD, BankMint::SolSwb)] -#[test_case(240., 0.092, BankMint::PyUSD, BankMint::T22WithFee)] -#[test_case(36., 20., BankMint::T22WithFee, BankMint::Sol)] -#[test_case(200., 1.1, BankMint::Usdc, BankMint::SolSwbOrigFee)] // Sol @ ~ $153 -#[tokio::test] -async fn marginfi_account_repay_success( - borrow_amount: f64, - repay_amount: f64, - collateral_mint: BankMint, - debt_mint: BankMint, -) -> anyhow::Result<()> { - // ------------------------------------------------------------------------- - // Setup - // ------------------------------------------------------------------------- - - let mut test_f = TestFixture::new(Some(TestSettings::all_banks_payer_not_admin())).await; - - // LP - - let lp_deposit_amount = 2. * borrow_amount; - let lp_wallet_balance = get_max_deposit_amount_pre_fee(lp_deposit_amount); - let lp_mfi_account_f = test_f.create_marginfi_account().await; - let lp_collateral_token_account = test_f - .get_bank(&debt_mint) - .mint - .create_token_account_and_mint_to(lp_wallet_balance) - .await; - lp_mfi_account_f - .try_bank_deposit( - lp_collateral_token_account.key, - test_f.get_bank(&debt_mint), - lp_deposit_amount, - None, - ) - .await?; - - // User - - let user_mfi_account_f = test_f.create_marginfi_account().await; - let sufficient_collateral_amount = test_f - .get_sufficient_collateral_for_outflow(borrow_amount, &collateral_mint, &debt_mint) - .await; - let user_wallet_balance = get_max_deposit_amount_pre_fee(sufficient_collateral_amount); - let user_collateral_token_account_f = test_f - .get_bank_mut(&collateral_mint) - .mint - .create_token_account_and_mint_to(user_wallet_balance) - .await; - let user_debt_token_account_f = test_f - .get_bank_mut(&debt_mint) - .mint - .create_empty_token_account() - .await; - user_mfi_account_f - .try_bank_deposit( - user_collateral_token_account_f.key, - test_f.get_bank(&collateral_mint), - sufficient_collateral_amount, - None, - ) - .await?; - - // ------------------------------------------------------------------------- - // Test - // ------------------------------------------------------------------------- - - let debt_bank = test_f.get_bank(&debt_mint); - - user_mfi_account_f - .try_bank_borrow(user_debt_token_account_f.key, debt_bank, borrow_amount) - .await?; - - let pre_vault_balance = debt_bank - .get_vault_token_account(BankVaultType::Liquidity) - .await - .balance() - .await; - let marginfi_account = user_mfi_account_f.load().await; - let balance = marginfi_account - .lending_account - .get_balance(&debt_bank.key) - .unwrap(); - let pre_accounted = debt_bank - .load() - .await - .get_asset_amount(balance.liability_shares.into()) - .unwrap(); - - let res = user_mfi_account_f - .try_bank_repay(user_debt_token_account_f.key, debt_bank, repay_amount, None) - .await; - assert!(res.is_ok()); - - let post_vault_balance = debt_bank - .get_vault_token_account(BankVaultType::Liquidity) - .await - .balance() - .await; - - let marginfi_account = user_mfi_account_f.load().await; - let balance = marginfi_account - .lending_account - .get_balance(&debt_bank.key) - .unwrap(); - let post_accounted = debt_bank - .load() - .await - .get_asset_amount(balance.liability_shares.into()) - .unwrap(); - - let expected_liquidity_vault_delta = - I80F48::from(native!(repay_amount, debt_bank.mint.mint.decimals, f64)); - let actual_liquidity_vault_delta = I80F48::from(post_vault_balance - pre_vault_balance); - let accounted_user_balance_delta = post_accounted - pre_accounted; - - assert_eq!(expected_liquidity_vault_delta, actual_liquidity_vault_delta); - assert_eq_with_tolerance!( - expected_liquidity_vault_delta, - -accounted_user_balance_delta, - 1 - ); - - Ok(()) -} - -#[test_case(100., BankMint::Usdc, BankMint::Sol)] -#[test_case(123456., BankMint::Usdc, BankMint::Sol)] -#[test_case(123456., BankMint::UsdcSwb, BankMint::Sol)] -#[test_case(1., BankMint::Sol, BankMint::Usdc)] -#[test_case(128932., BankMint::PyUSD, BankMint::SolSwb)] -#[test_case(240., BankMint::PyUSD, BankMint::T22WithFee)] -#[test_case(36., BankMint::T22WithFee, BankMint::Sol)] -#[test_case(200., BankMint::Usdc, BankMint::SolSwbOrigFee)] // Sol @ ~ $153 -#[tokio::test] -async fn marginfi_account_repay_all_success( - borrow_amount: f64, - collateral_mint: BankMint, - debt_mint: BankMint, -) -> anyhow::Result<()> { - // ------------------------------------------------------------------------- - // Setup - // ------------------------------------------------------------------------- - - let mut test_f = TestFixture::new(Some(TestSettings::all_banks_payer_not_admin())).await; - - // LP - - let lp_deposit_amount = 2. * borrow_amount; - let lp_wallet_balance = get_max_deposit_amount_pre_fee(lp_deposit_amount); - let lp_mfi_account_f = test_f.create_marginfi_account().await; - let lp_collateral_token_account = test_f - .get_bank(&debt_mint) - .mint - .create_token_account_and_mint_to(lp_wallet_balance) - .await; - lp_mfi_account_f - .try_bank_deposit( - lp_collateral_token_account.key, - test_f.get_bank(&debt_mint), - lp_deposit_amount, - None, - ) - .await?; - - // User - - let user_mfi_account_f = test_f.create_marginfi_account().await; - let sufficient_collateral_amount = test_f - .get_sufficient_collateral_for_outflow(borrow_amount, &collateral_mint, &debt_mint) - .await; - let user_wallet_balance = get_max_deposit_amount_pre_fee(sufficient_collateral_amount); - let user_collateral_token_account_f = test_f - .get_bank_mut(&collateral_mint) - .mint - .create_token_account_and_mint_to(user_wallet_balance) - .await; - let user_debt_token_account_f = test_f - .get_bank_mut(&debt_mint) - .mint - .create_token_account_and_mint_to(2. * borrow_amount + 1.) // to ensure user has enough to repay given interest and fees taken during borrow and repay - .await; - user_mfi_account_f - .try_bank_deposit( - user_collateral_token_account_f.key, - test_f.get_bank(&collateral_mint), - sufficient_collateral_amount, - None, - ) - .await?; - - // ------------------------------------------------------------------------- - // Test - // ------------------------------------------------------------------------- - - let debt_bank = test_f.get_bank(&debt_mint); - - user_mfi_account_f - .try_bank_borrow(user_debt_token_account_f.key, debt_bank, borrow_amount) - .await - .unwrap(); - - let (pre_vault_balance, pre_accounted_vault_balance) = { - let pre_vault_balance = debt_bank - .get_vault_token_account(BankVaultType::Liquidity) - .await - .balance() - .await; - let marginfi_account = user_mfi_account_f.load().await; - let balance = marginfi_account - .lending_account - .get_balance(&debt_bank.key) - .unwrap(); - let pre_accounted_vault_balance = debt_bank - .load() - .await - .get_asset_amount(balance.liability_shares.into()) - .unwrap(); - - (pre_vault_balance, pre_accounted_vault_balance) - }; - - let res = user_mfi_account_f - .try_bank_repay(user_debt_token_account_f.key, debt_bank, 0, Some(true)) - .await; - assert!(res.is_ok()); - - let (post_vault_balance, post_accounted_vault_balance) = { - let post_vault_balance = debt_bank - .get_vault_token_account(BankVaultType::Liquidity) - .await - .balance() - .await; - let marginfi_account = user_mfi_account_f.load().await; - let balance = marginfi_account.lending_account.get_balance(&debt_bank.key); - assert!(balance.is_none()); - let post_accounted_vault_balance = I80F48!(0); - - (post_vault_balance, post_accounted_vault_balance) - }; - - let borrow_fee = debt_bank - .mint - .load_state() - .await - .get_extension::() - .map(|tf| { - tf.calculate_inverse_epoch_fee( - 0, - native!(borrow_amount, debt_bank.mint.mint.decimals, f64), - ) - .unwrap_or(0) - }) - .unwrap_or(0); - - let origination_fee_rate: I80F48 = debt_bank - .load() - .await - .config - .interest_rate_config - .protocol_origination_fee - .into(); - let origination_fee: I80F48 = - I80F48::from_num(native!(borrow_amount, debt_bank.mint.mint.decimals, f64)) - .checked_mul(origination_fee_rate) - .unwrap() - .ceil(); // Round up when repaying - let origination_fee_u64: u64 = origination_fee.checked_to_num().expect("out of bounds"); - - let expected_liquidity_delta = I80F48::from( - native!(borrow_amount, debt_bank.mint.mint.decimals, f64) - + borrow_fee - + origination_fee_u64, - ); - let actual_liquidity_delta = I80F48::from(post_vault_balance) - I80F48::from(pre_vault_balance); - let accounted_liquidity_delta = post_accounted_vault_balance - pre_accounted_vault_balance; - - assert_eq!(expected_liquidity_delta, actual_liquidity_delta); - assert_eq_with_tolerance!(expected_liquidity_delta, -accounted_liquidity_delta, 1); - - Ok(()) -} - -#[test_case(100., 110., BankMint::Usdc, BankMint::Sol)] -#[test_case(123456., 123457., BankMint::Usdc, BankMint::Sol)] -#[test_case(3000., 10000., BankMint::UsdcSwb, BankMint::Sol)] -#[test_case(1., 1.000002, BankMint::Sol, BankMint::Usdc)] -#[test_case(9834., 234749., BankMint::PyUSD, BankMint::SolSwb)] -#[test_case(0.092, 240., BankMint::PyUSD, BankMint::T22WithFee)] -#[test_case(1.7, 36., BankMint::T22WithFee, BankMint::Sol)] -#[tokio::test] -async fn marginfi_account_repay_failure_repaying_too_much( - borrow_amount: f64, - repay_amount: f64, - collateral_mint: BankMint, - debt_mint: BankMint, -) -> anyhow::Result<()> { - // ------------------------------------------------------------------------- - // Setup - // ------------------------------------------------------------------------- - - let mut test_f = TestFixture::new(Some(TestSettings::all_banks_payer_not_admin())).await; - - // LP - - let lp_deposit_amount = 2. * borrow_amount; - let lp_wallet_balance = get_max_deposit_amount_pre_fee(lp_deposit_amount); - let lp_mfi_account_f = test_f.create_marginfi_account().await; - let lp_collateral_token_account = test_f - .get_bank(&debt_mint) - .mint - .create_token_account_and_mint_to(lp_wallet_balance) - .await; - lp_mfi_account_f - .try_bank_deposit( - lp_collateral_token_account.key, - test_f.get_bank(&debt_mint), - lp_deposit_amount, - None, - ) - .await?; - - // User - - let user_mfi_account_f = test_f.create_marginfi_account().await; - let sufficient_collateral_amount = test_f - .get_sufficient_collateral_for_outflow(borrow_amount, &collateral_mint, &debt_mint) - .await; - let user_wallet_balance = get_max_deposit_amount_pre_fee(sufficient_collateral_amount); - let user_collateral_token_account_f = test_f - .get_bank_mut(&collateral_mint) - .mint - .create_token_account_and_mint_to(user_wallet_balance) - .await; - let user_debt_token_account_f = test_f - .get_bank_mut(&debt_mint) - .mint - .create_token_account_and_mint_to(2. * borrow_amount + 1.) // to ensure user has enough to repay given interest and fees taken during borrow and repay - .await; - user_mfi_account_f - .try_bank_deposit( - user_collateral_token_account_f.key, - test_f.get_bank(&collateral_mint), - sufficient_collateral_amount, - None, - ) - .await?; - - // ------------------------------------------------------------------------- - // Test - // ------------------------------------------------------------------------- - - let debt_bank = test_f.get_bank(&debt_mint); - - user_mfi_account_f - .try_bank_borrow(user_debt_token_account_f.key, debt_bank, borrow_amount) - .await?; - - let res = user_mfi_account_f - .try_bank_repay(user_debt_token_account_f.key, debt_bank, repay_amount, None) - .await; - assert!(res.is_err()); - assert_custom_error!(res.unwrap_err(), MarginfiError::OperationRepayOnly); - - Ok(()) -} diff --git a/programs/marginfi/tests/user_actions/withdraw.rs b/programs/marginfi/tests/user_actions/withdraw.rs deleted file mode 100644 index d181dbce4..000000000 --- a/programs/marginfi/tests/user_actions/withdraw.rs +++ /dev/null @@ -1,328 +0,0 @@ -use anchor_spl::token_2022::spl_token_2022::extension::{ - transfer_fee::TransferFeeConfig, BaseStateWithExtensions, -}; -use fixed::types::I80F48; -use fixtures::{assert_custom_error, prelude::*, ui_to_native}; -use marginfi::{assert_eq_with_tolerance, prelude::*, state::marginfi_group::BankVaultType}; -use pretty_assertions::assert_eq; -use solana_program_test::*; -use test_case::test_case; - -#[test_case(0.03, 0.012, BankMint::Usdc)] -#[test_case(100.0, 100.0, BankMint::UsdcSwb)] -#[test_case(100.0, 100.0, BankMint::SolSwb)] -#[test_case(128932.0, 9834.0, BankMint::PyUSD)] -#[test_case(0.1, 0.092, BankMint::T22WithFee)] -#[test_case(100.0, 92.0, BankMint::T22WithFee)] -#[tokio::test] -async fn marginfi_account_withdraw_success( - deposit_amount: f64, - withdraw_amount: f64, - bank_mint: BankMint, -) -> anyhow::Result<()> { - // ------------------------------------------------------------------------- - // Setup - // ------------------------------------------------------------------------- - - let mut test_f = TestFixture::new(Some(TestSettings::all_banks_payer_not_admin())).await; - - // User - - let marginfi_account_f = test_f.create_marginfi_account().await; - let user_wallet_balance = get_max_deposit_amount_pre_fee(deposit_amount); - let token_account_f = TokenAccountFixture::new( - test_f.context.clone(), - &test_f.get_bank(&bank_mint).mint, - &test_f.payer(), - ) - .await; - test_f - .get_bank_mut(&bank_mint) - .mint - .mint_to(&token_account_f.key, user_wallet_balance) - .await; - let bank_f = test_f.get_bank(&bank_mint); - marginfi_account_f - .try_bank_deposit(token_account_f.key, bank_f, deposit_amount, None) - .await - .unwrap(); - - // ------------------------------------------------------------------------- - // Test - // ------------------------------------------------------------------------- - - let marginfi_account = marginfi_account_f.load().await; - let pre_vault_balance = bank_f - .get_vault_token_account(BankVaultType::Liquidity) - .await - .balance() - .await; - let balance = marginfi_account - .lending_account - .get_balance(&bank_f.key) - .unwrap(); - let pre_accounted = bank_f - .load() - .await - .get_asset_amount(balance.asset_shares.into()) - .unwrap(); - - let deposit_amount_native = ui_to_native!(deposit_amount, bank_f.mint.mint.decimals); - let withdraw_amount_native = ui_to_native!(withdraw_amount, bank_f.mint.mint.decimals); - let withdraw_fee_to_use; - let (withdraw_fee, withdraw_fee_if_excessive) = bank_f - .mint - .load_state() - .await - .get_extension::() - .map(|tf| { - ( - // withdraw <= available case - tf.calculate_inverse_epoch_fee(0, withdraw_amount_native) - .unwrap_or(0), - // withdraw all case, if withdraw > available - tf.calculate_epoch_fee(0, deposit_amount_native) - .unwrap_or(0), - ) - }) - .unwrap_or((0, 0)); - - // If exceeds available, clamp to available. - // If it does not, use specified withdraw amount - let adjusted_withdraw_amount = if withdraw_amount_native + withdraw_fee > deposit_amount_native - { - // Clamp to deposit amount minus fee if excessive - withdraw_fee_to_use = withdraw_fee_if_excessive; - deposit_amount - - withdraw_fee_if_excessive as f64 / 10_f64.powi(bank_f.mint.mint.decimals as i32) - } else { - // Use specified withdraw amount - withdraw_fee_to_use = withdraw_fee; - withdraw_amount - }; - - let res = marginfi_account_f - .try_bank_withdraw(token_account_f.key, bank_f, adjusted_withdraw_amount, None) - .await; - assert!(res.is_ok()); - - let post_vault_balance = bank_f - .get_vault_token_account(BankVaultType::Liquidity) - .await - .balance() - .await; - let marginfi_account = marginfi_account_f.load().await; - let balance = marginfi_account - .lending_account - .get_balance(&bank_f.key) - .unwrap(); - let post_accounted = bank_f - .load() - .await - .get_asset_amount(balance.asset_shares.into()) - .unwrap(); - let post: I80F48 = post_accounted.into(); - let post: f64 = post.to_num(); - println!("post bal: {:?}", post); - - let active_balance_count = marginfi_account - .lending_account - .get_active_balances_iter() - .count(); - assert_eq!(1, active_balance_count); - - let expected_liquidity_vault_delta = -I80F48::from( - ui_to_native!(adjusted_withdraw_amount, bank_f.mint.mint.decimals) + withdraw_fee_to_use, - ); - let actual_liquidity_vault_delta = - I80F48::from(post_vault_balance) - I80F48::from(pre_vault_balance); - - let accounted_user_balance_delta = post_accounted - pre_accounted; - - assert_eq!(expected_liquidity_vault_delta, actual_liquidity_vault_delta); - assert_eq_with_tolerance!( - expected_liquidity_vault_delta, - accounted_user_balance_delta, - 1 - ); - - let health_cache = marginfi_account.health_cache; - let collateral_price_roughly = get_mint_price(bank_mint); - // Apply a small discount to account for conf discounts, etc. - let disc: f64 = 0.95; - assert!(health_cache.is_engine_ok()); - assert!(health_cache.is_healthy()); - - let asset_value: I80F48 = health_cache.asset_value.into(); - let asset_value: f64 = asset_value.to_num(); - let diff = deposit_amount - adjusted_withdraw_amount - withdraw_fee as f64; - assert!(asset_value >= (diff) * collateral_price_roughly * disc); - - for (i, bal) in marginfi_account.lending_account.balances.iter().enumerate() { - let shares: I80F48 = bal.asset_shares.into(); - if bal.is_active() { - let price: I80F48 = health_cache.prices[i].into(); - let price: f64 = price.to_num(); - if shares != I80F48::ZERO { - assert!(price >= (collateral_price_roughly * disc)); - } - } - } - - Ok(()) -} - -#[test_case(0.03, BankMint::Usdc)] -#[test_case(100.0, BankMint::Usdc)] -#[test_case(100.0, BankMint::Sol)] -#[test_case(128932.0, BankMint::PyUSD)] -#[test_case(0.1, BankMint::T22WithFee)] -#[test_case(100.0, BankMint::T22WithFee)] -#[tokio::test] -async fn marginfi_account_withdraw_all_success( - deposit_amount: f64, - bank_mint: BankMint, -) -> anyhow::Result<()> { - // ------------------------------------------------------------------------- - // Setup - // ------------------------------------------------------------------------- - - let mut test_f = TestFixture::new(Some(TestSettings::all_banks_payer_not_admin())).await; - - // User - - let marginfi_account_f = test_f.create_marginfi_account().await; - let user_wallet_balance = get_max_deposit_amount_pre_fee(deposit_amount); - let token_account_f = TokenAccountFixture::new( - test_f.context.clone(), - &test_f.get_bank(&bank_mint).mint, - &test_f.payer(), - ) - .await; - test_f - .get_bank_mut(&bank_mint) - .mint - .mint_to(&token_account_f.key, user_wallet_balance) - .await; - - // ------------------------------------------------------------------------- - // Test - // ------------------------------------------------------------------------- - - let bank_f = test_f.get_bank(&bank_mint); - - marginfi_account_f - .try_bank_deposit(token_account_f.key, bank_f, deposit_amount, None) - .await - .unwrap(); - - let marginfi_account = marginfi_account_f.load().await; - let pre_vault_balance = bank_f - .get_vault_token_account(BankVaultType::Liquidity) - .await - .balance() - .await; - let balance = marginfi_account - .lending_account - .get_balance(&bank_f.key) - .unwrap(); - let pre_accounted = bank_f - .load() - .await - .get_asset_amount(balance.asset_shares.into()) - .unwrap(); - - let res = marginfi_account_f - .try_bank_withdraw(token_account_f.key, bank_f, 0, Some(true)) - .await; - assert!(res.is_ok()); - - let marginfi_account = marginfi_account_f.load().await; - - let active_balance_count = marginfi_account - .lending_account - .get_active_balances_iter() - .count(); - assert_eq!(0, active_balance_count); - - let post_vault_balance = bank_f - .get_vault_token_account(BankVaultType::Liquidity) - .await - .balance() - .await; - assert!(marginfi_account - .lending_account - .get_balance(&bank_f.key) - .is_none()); - let post_accounted = I80F48::ZERO; - - let deposit_amount_native = ui_to_native!(deposit_amount, bank_f.mint.mint.decimals); - - let expected_liquidity_vault_delta = -I80F48::from(deposit_amount_native); - let actual_liquidity_vault_delta = - I80F48::from(post_vault_balance) - I80F48::from(pre_vault_balance); - let accounted_user_balance_delta = post_accounted - pre_accounted; - - assert_eq!(expected_liquidity_vault_delta, actual_liquidity_vault_delta); - assert_eq_with_tolerance!( - expected_liquidity_vault_delta, - accounted_user_balance_delta, - 1 - ); - - Ok(()) -} - -#[test_case(0.03, 0.030001, BankMint::Usdc)] -#[test_case(100., 101., BankMint::UsdcSwb)] -#[test_case(100., 102., BankMint::Sol)] -#[test_case(100., 102., BankMint::SolSwb)] -#[test_case(109247394., 109247394.000001, BankMint::PyUSD)] -#[test_case(16., 16., BankMint::T22WithFee)] -#[test_case(100., 98., BankMint::T22WithFee)] -#[tokio::test] -async fn marginfi_account_withdraw_failure_withdrawing_too_much( - deposit_amount: f64, - withdraw_amount: f64, - bank_mint: BankMint, -) -> anyhow::Result<()> { - // ------------------------------------------------------------------------- - // Setup - // ------------------------------------------------------------------------- - - let mut test_f = TestFixture::new(Some(TestSettings::all_banks_payer_not_admin())).await; - - // User - - let marginfi_account_f = test_f.create_marginfi_account().await; - let user_wallet_balance = get_max_deposit_amount_pre_fee(deposit_amount); - let token_account_f = TokenAccountFixture::new( - test_f.context.clone(), - &test_f.get_bank(&bank_mint).mint, - &test_f.payer(), - ) - .await; - test_f - .get_bank_mut(&bank_mint) - .mint - .mint_to(&token_account_f.key, user_wallet_balance) - .await; - - // ------------------------------------------------------------------------- - // Test - // ------------------------------------------------------------------------- - - let bank_f = test_f.get_bank(&bank_mint); - - marginfi_account_f - .try_bank_deposit(token_account_f.key, bank_f, deposit_amount, None) - .await?; - - let res = marginfi_account_f - .try_bank_withdraw(token_account_f.key, bank_f, withdraw_amount, None) - .await; - assert!(res.is_err()); - assert_custom_error!(res.unwrap_err(), MarginfiError::OperationWithdrawOnly); - - Ok(()) -} diff --git a/programs/mocks/Cargo.toml b/programs/mocks/Cargo.toml deleted file mode 100644 index e1a5ff097..000000000 --- a/programs/mocks/Cargo.toml +++ /dev/null @@ -1,31 +0,0 @@ -[package] -name = "mocks" -version = "0.1.0" -description = "External program mocks" -edition = "2021" - -[lib] -crate-type = ["cdylib", "lib"] -name = "mocks" - -[features] -no-entrypoint = [] -no-idl = [] -no-log-ix-name = [] -cpi = ["no-entrypoint"] -default = ["mainnet-beta"] -idl-build = ["anchor-lang/idl-build", "anchor-spl/idl-build"] -test-bpf = ["test", "debug"] -test = [] -client = [] -devnet = [] -mainnet-beta = [] -debug = [] -staging = [] - -[dependencies] -anchor-lang = { workspace = true } -anchor-spl = { workspace = true } - -bytemuck = { version = "1.9.1", features = ["derive"] } -static_assertions = "1.1.0" \ No newline at end of file diff --git a/programs/mocks/src/errors.rs b/programs/mocks/src/errors.rs deleted file mode 100644 index 5f5b7b38c..000000000 --- a/programs/mocks/src/errors.rs +++ /dev/null @@ -1,7 +0,0 @@ -use anchor_lang::error_code; - -#[error_code] -pub enum ErrorCode { - #[msg("This is an error.")] - SomeError, // 6000 -} diff --git a/programs/mocks/src/instructions/do_nothing.rs b/programs/mocks/src/instructions/do_nothing.rs deleted file mode 100644 index 76a6d2b46..000000000 --- a/programs/mocks/src/instructions/do_nothing.rs +++ /dev/null @@ -1,14 +0,0 @@ -use anchor_lang::prelude::*; - -#[derive(Accounts)] -pub struct DoNothing<'info> { - pub payer: Signer<'info>, -} - -pub fn do_nothing(ctx: Context) -> Result<()> { - msg!( - "Nothing was done. Signed by: {:?}", - ctx.accounts.payer.key() - ); - Ok(()) -} diff --git a/programs/mocks/src/instructions/init_pool_auth.rs b/programs/mocks/src/instructions/init_pool_auth.rs deleted file mode 100644 index 11cdf96cf..000000000 --- a/programs/mocks/src/instructions/init_pool_auth.rs +++ /dev/null @@ -1,71 +0,0 @@ -use anchor_lang::prelude::*; -use anchor_spl::token::{Mint, Token, TokenAccount}; - -use crate::state::PoolAuth; - -#[derive(Accounts)] -#[instruction( - nonce: u16, -)] -pub struct InitPoolAuth<'info> { - /// Pays the init fee - #[account(mut)] - pub payer: Signer<'info>, - - #[account( - init, - seeds = [ - &nonce.to_le_bytes(), - b"pool_auth".as_ref(), - ], - bump, - payer = payer, - space = 8 + PoolAuth::LEN, - )] - pub pool_auth: Account<'info, PoolAuth>, - - pub mint_a: Account<'info, Mint>, - pub mint_b: Account<'info, Mint>, - - #[account( - init, - seeds = [ - mint_a.key().as_ref(), - pool_auth.key().as_ref(), - b"pools", - ], - bump, - token::mint = mint_a, - token::authority = pool_auth, - payer = payer - )] - pub pool_a: Account<'info, TokenAccount>, - - #[account( - init, - seeds = [ - mint_b.key().as_ref(), - pool_auth.key().as_ref(), - b"pools", - ], - bump, - token::mint = mint_b, - token::authority = pool_auth, - payer = payer - )] - pub pool_b: Account<'info, TokenAccount>, - - pub token_program: Program<'info, Token>, - pub rent: Sysvar<'info, Rent>, - pub system_program: Program<'info, System>, -} - -pub fn init_pool_auth(ctx: Context, nonce: u16) -> Result<()> { - let pool_auth = &mut ctx.accounts.pool_auth; - pool_auth.nonce = nonce; - pool_auth.pool_a = ctx.accounts.pool_a.key(); - pool_auth.pool_b = ctx.accounts.pool_b.key(); - pool_auth.bump_seed = ctx.bumps.pool_auth; - - Ok(()) -} diff --git a/programs/mocks/src/instructions/mod.rs b/programs/mocks/src/instructions/mod.rs deleted file mode 100644 index e98adaaf6..000000000 --- a/programs/mocks/src/instructions/mod.rs +++ /dev/null @@ -1,7 +0,0 @@ -pub mod do_nothing; -pub mod init_pool_auth; -pub mod swap_like_jupiter; - -pub use do_nothing::*; -pub use init_pool_auth::*; -pub use swap_like_jupiter::*; diff --git a/programs/mocks/src/instructions/swap_like_jupiter.rs b/programs/mocks/src/instructions/swap_like_jupiter.rs deleted file mode 100644 index 0c5b17818..000000000 --- a/programs/mocks/src/instructions/swap_like_jupiter.rs +++ /dev/null @@ -1,75 +0,0 @@ -use anchor_lang::prelude::*; -use anchor_spl::token::{self, Token, TokenAccount, Transfer}; - -use crate::{pool_auth_signer_seeds, state::PoolAuth}; - -#[derive(Accounts)] -pub struct SwapLikeJupiter<'info> { - pub user_authority: Signer<'info>, - - /// PDA authority of the pools - /// CHECK: this is a mock program, security doesn't matter - pub pool_auth: Account<'info, PoolAuth>, - - #[account(mut)] - pub pool_a: Account<'info, TokenAccount>, - - #[account(mut)] - pub pool_b: Account<'info, TokenAccount>, - - #[account(mut)] - pub source_a: Account<'info, TokenAccount>, - - #[account(mut)] - pub destination_b: Account<'info, TokenAccount>, - - pub token_program: Program<'info, Token>, -} - -impl<'info> SwapLikeJupiter<'info> { - pub fn swap_like_jup( - ctx: Context<'_, '_, '_, 'info, SwapLikeJupiter<'info>>, - amt_a: u64, - amt_b: u64, - ) -> Result<()> { - let pool_auth = &ctx.accounts.pool_auth; - - let a_before = ctx.accounts.source_a.amount; - msg!("User a before: {:?} transfer {:?}", a_before, amt_a); - token::transfer(ctx.accounts.transfer_a_to_pool(), amt_a)?; - - let b_before = ctx.accounts.pool_b.amount; - msg!("Pool b before: {:?} transfer {:?}", b_before, amt_b); - token::transfer( - ctx.accounts - .transfer_b_to_user() - .with_signer(&[pool_auth_signer_seeds!(pool_auth)]), - amt_b, - )?; - - Ok(()) - } -} - -impl<'info> SwapLikeJupiter<'info> { - fn transfer_a_to_pool(&self) -> CpiContext<'_, '_, '_, 'info, Transfer<'info>> { - CpiContext::new( - self.token_program.to_account_info(), - Transfer { - from: self.source_a.to_account_info(), - to: self.pool_a.to_account_info(), - authority: self.user_authority.to_account_info(), - }, - ) - } - fn transfer_b_to_user(&self) -> CpiContext<'_, '_, '_, 'info, Transfer<'info>> { - CpiContext::new( - self.token_program.to_account_info(), - Transfer { - from: self.pool_b.to_account_info(), - to: self.destination_b.to_account_info(), - authority: self.pool_auth.to_account_info(), - }, - ) - } -} diff --git a/programs/mocks/src/lib.rs b/programs/mocks/src/lib.rs deleted file mode 100644 index 026cf9f23..000000000 --- a/programs/mocks/src/lib.rs +++ /dev/null @@ -1,53 +0,0 @@ -use anchor_lang::prelude::*; - -pub mod errors; -pub mod instructions; -pub mod macros; -pub mod state; -// pub mod utils; - -use crate::instructions::*; -// use crate::state::*; -// use errors::*; - -declare_id!("5XaaR94jBubdbrRrNW7DtRvZeWvLhSHkEGU3jHTEXV3C"); - -#[program] -pub mod mocks { - use super::*; - use std::io::Write as IoWrite; - - /// Do nothing - pub fn do_nothing(ctx: Context) -> Result<()> { - instructions::do_nothing::do_nothing(ctx) - } - - /// Init authority for fake jupiter-like swap pools - pub fn init_pool_auth(ctx: Context, nonce: u16) -> Result<()> { - instructions::init_pool_auth::init_pool_auth(ctx, nonce) - } - - /// Execute an exchange of a:b like-jupiter. You set the amount a sent and b received. - pub fn swap_like_jupiter<'info>( - ctx: Context<'_, '_, '_, 'info, SwapLikeJupiter<'info>>, - amt_a: u64, - amt_b: u64, - ) -> Result<()> { - instructions::swap_like_jupiter::SwapLikeJupiter::swap_like_jup(ctx, amt_a, amt_b) - } - - #[derive(Accounts)] - pub struct Write<'info> { - #[account(mut)] - target: Signer<'info>, - } - - /// Write arbitrary bytes to an arbitrary account. YOLO. - pub fn write(ctx: Context, offset: u64, data: Vec) -> Result<()> { - let account_data = ctx.accounts.target.to_account_info().data; - let borrow_data = &mut *account_data.borrow_mut(); - let offset = offset as usize; - - Ok((&mut borrow_data[offset..]).write_all(&data[..])?) - } -} diff --git a/programs/mocks/src/macros.rs b/programs/mocks/src/macros.rs deleted file mode 100644 index c9db378d1..000000000 --- a/programs/mocks/src/macros.rs +++ /dev/null @@ -1,10 +0,0 @@ -#[macro_export] -macro_rules! pool_auth_signer_seeds { - ($pool_auth:expr) => { - &[ - &$pool_auth.nonce.to_le_bytes(), - b"pool_auth".as_ref(), - &[$pool_auth.bump_seed], - ] - }; -} diff --git a/programs/mocks/src/state/mod.rs b/programs/mocks/src/state/mod.rs deleted file mode 100644 index e3077eccc..000000000 --- a/programs/mocks/src/state/mod.rs +++ /dev/null @@ -1,3 +0,0 @@ -pub mod pool_auth; - -pub use pool_auth::*; diff --git a/programs/mocks/src/state/pool_auth.rs b/programs/mocks/src/state/pool_auth.rs deleted file mode 100644 index 634abcaf7..000000000 --- a/programs/mocks/src/state/pool_auth.rs +++ /dev/null @@ -1,15 +0,0 @@ -use anchor_lang::prelude::*; - -#[account()] -pub struct PoolAuth { - /// The account's own key - pub key: Pubkey, - pub pool_a: Pubkey, - pub pool_b: Pubkey, - pub bump_seed: u8, - pub nonce: u16, -} - -impl PoolAuth { - pub const LEN: usize = std::mem::size_of::(); -} diff --git a/programs/test_transfer_hook/Cargo.toml b/programs/test_transfer_hook/Cargo.toml deleted file mode 100644 index b23f23a7d..000000000 --- a/programs/test_transfer_hook/Cargo.toml +++ /dev/null @@ -1,17 +0,0 @@ -[package] -name = "test_transfer_hook" -version = "0.1.0" -edition = "2021" - -[features] -idl-build = [] -no-entrypoint = [] - -[lib] -crate-type = ["cdylib", "lib"] - -[dependencies] -solana-program = { workspace = true } -spl-token-2022 = { workspace = true, features = ["no-entrypoint"] } -spl-transfer-hook-interface = { workspace = true } -spl-tlv-account-resolution = { workspace = true } diff --git a/programs/test_transfer_hook/src/lib.rs b/programs/test_transfer_hook/src/lib.rs deleted file mode 100644 index ddda3069f..000000000 --- a/programs/test_transfer_hook/src/lib.rs +++ /dev/null @@ -1,260 +0,0 @@ -//! Program state processor -use { - solana_program::{ - account_info::{next_account_info, AccountInfo}, - entrypoint::ProgramResult, - msg, - program::invoke_signed, - program_error::ProgramError, - pubkey, - pubkey::Pubkey, - system_instruction, - }, - spl_tlv_account_resolution::{account::ExtraAccountMeta, state::ExtraAccountMetaList}, - spl_token_2022::{ - extension::{ - transfer_hook::TransferHookAccount, BaseStateWithExtensions, StateWithExtensions, - }, - state::{Account, Mint}, - }, - spl_transfer_hook_interface::{ - collect_extra_account_metas_signer_seeds, - error::TransferHookError, - get_extra_account_metas_address, get_extra_account_metas_address_and_bump_seed, - instruction::{ExecuteInstruction, TransferHookInstruction}, - }, -}; - -pub static TEST_HOOK_ID: Pubkey = pubkey!("TRANSFERHKTRANSFERHKTRANSFERHKTRANSFERHKTRA"); - -#[cfg(not(feature = "no-entrypoint"))] -solana_program::entrypoint!(process); - -#[allow(unused)] -fn check_token_account_is_transferring(account_info: &AccountInfo) -> Result<(), ProgramError> { - let account_data = account_info.try_borrow_data()?; - let token_account = StateWithExtensions::::unpack(&account_data)?; - let extension = token_account.get_extension::()?; - if bool::from(extension.transferring) { - Ok(()) - } else { - Err(TransferHookError::ProgramCalledOutsideOfTransfer.into()) - } -} - -/// Processes an [Execute](enum.TransferHookInstruction.html) instruction. -pub fn process_execute( - _program_id: &Pubkey, - accounts: &[AccountInfo], - _amount: u64, -) -> ProgramResult { - let account_info_iter = &mut accounts.iter(); - - let _source_account_info = next_account_info(account_info_iter)?; - let _mint_info = next_account_info(account_info_iter)?; - let _destination_account_info = next_account_info(account_info_iter)?; - let _authority_info = next_account_info(account_info_iter)?; - let _extra_account_metas_info = next_account_info(account_info_iter)?; - - Ok(()) -} - -/// Processes a -/// [InitializeExtraAccountMetaList](enum.TransferHookInstruction.html) -/// instruction. -pub fn process_initialize_extra_account_meta_list( - program_id: &Pubkey, - accounts: &[AccountInfo], - extra_account_metas: &[ExtraAccountMeta], -) -> ProgramResult { - let account_info_iter = &mut accounts.iter(); - - let extra_account_metas_info = next_account_info(account_info_iter)?; - let mint_info = next_account_info(account_info_iter)?; - let authority_info = next_account_info(account_info_iter)?; - let _system_program_info = next_account_info(account_info_iter)?; - - // check that the one mint we want to target is trying to create extra - // account metas - #[cfg(feature = "forbid-additional-mints")] - if *mint_info.key != crate::mint::id() { - return Err(ProgramError::InvalidArgument); - } - - // check that the mint authority is valid without fully deserializing - let mint_data = mint_info.try_borrow_data()?; - let mint = StateWithExtensions::::unpack(&mint_data)?; - let mint_authority = mint - .base - .mint_authority - .ok_or(TransferHookError::MintHasNoMintAuthority)?; - - // Check signers - if !authority_info.is_signer { - return Err(ProgramError::MissingRequiredSignature); - } - if *authority_info.key != mint_authority { - return Err(TransferHookError::IncorrectMintAuthority.into()); - } - - // Check validation account - let (expected_validation_address, bump_seed) = - get_extra_account_metas_address_and_bump_seed(mint_info.key, program_id); - if expected_validation_address != *extra_account_metas_info.key { - return Err(ProgramError::InvalidSeeds); - } - - // Create the account - let bump_seed = [bump_seed]; - let signer_seeds = collect_extra_account_metas_signer_seeds(mint_info.key, &bump_seed); - let length = extra_account_metas.len(); - let account_size = ExtraAccountMetaList::size_of(length)?; - invoke_signed( - &system_instruction::allocate(extra_account_metas_info.key, account_size as u64), - &[extra_account_metas_info.clone()], - &[&signer_seeds], - )?; - invoke_signed( - &system_instruction::assign(extra_account_metas_info.key, program_id), - &[extra_account_metas_info.clone()], - &[&signer_seeds], - )?; - - // Write the data - let mut data = extra_account_metas_info.try_borrow_mut_data()?; - ExtraAccountMetaList::init::(&mut data, extra_account_metas)?; - - Ok(()) -} - -/// Processes a -/// [UpdateExtraAccountMetaList](enum.TransferHookInstruction.html) -/// instruction. -pub fn process_update_extra_account_meta_list( - program_id: &Pubkey, - accounts: &[AccountInfo], - extra_account_metas: &[ExtraAccountMeta], -) -> ProgramResult { - let account_info_iter = &mut accounts.iter(); - - let extra_account_metas_info = next_account_info(account_info_iter)?; - let mint_info = next_account_info(account_info_iter)?; - let authority_info = next_account_info(account_info_iter)?; - - // check that the mint authority is valid without fully deserializing - let mint_data = mint_info.try_borrow_data()?; - let mint = StateWithExtensions::::unpack(&mint_data)?; - let mint_authority = mint - .base - .mint_authority - .ok_or(TransferHookError::MintHasNoMintAuthority)?; - - // Check signers - if !authority_info.is_signer { - return Err(ProgramError::MissingRequiredSignature); - } - if *authority_info.key != mint_authority { - return Err(TransferHookError::IncorrectMintAuthority.into()); - } - - // Check validation account - let expected_validation_address = get_extra_account_metas_address(mint_info.key, program_id); - if expected_validation_address != *extra_account_metas_info.key { - return Err(ProgramError::InvalidSeeds); - } - - // Check if the extra metas have been initialized - let min_account_size = ExtraAccountMetaList::size_of(0)?; - let original_account_size = extra_account_metas_info.data_len(); - if program_id != extra_account_metas_info.owner || original_account_size < min_account_size { - return Err(ProgramError::UninitializedAccount); - } - - // If the new extra_account_metas length is different, resize the account and - // update - let length = extra_account_metas.len(); - let account_size = ExtraAccountMetaList::size_of(length)?; - if account_size >= original_account_size { - extra_account_metas_info.realloc(account_size, false)?; - let mut data = extra_account_metas_info.try_borrow_mut_data()?; - ExtraAccountMetaList::update::(&mut data, extra_account_metas)?; - } else { - { - let mut data = extra_account_metas_info.try_borrow_mut_data()?; - ExtraAccountMetaList::update::(&mut data, extra_account_metas)?; - } - extra_account_metas_info.realloc(account_size, false)?; - } - - Ok(()) -} - -/// Processes an [Instruction](enum.Instruction.html). -pub fn process(program_id: &Pubkey, accounts: &[AccountInfo], input: &[u8]) -> ProgramResult { - let instruction = TransferHookInstruction::unpack(input)?; - - match instruction { - TransferHookInstruction::Execute { amount } => { - msg!("Instruction: Execute"); - process_execute(program_id, accounts, amount) - } - TransferHookInstruction::InitializeExtraAccountMetaList { - extra_account_metas, - } => { - msg!("Instruction: InitializeExtraAccountMetaList"); - process_initialize_extra_account_meta_list(program_id, accounts, &extra_account_metas) - } - TransferHookInstruction::UpdateExtraAccountMetaList { - extra_account_metas, - } => { - msg!("Instruction: UpdateExtraAccountMetaList"); - process_update_extra_account_meta_list(program_id, accounts, &extra_account_metas) - } - } -} - -// #[cfg(test)] -// mod tests { -// use super::*; -// use solana_program_test::{processor, tokio, ProgramTest}; -// use solana_sdk::{ -// instruction::{AccountMeta, Instruction}, -// signer::Signer, -// transaction::Transaction, -// }; -// use spl_discriminator::SplDiscriminate; -// use spl_transfer_hook_interface::instruction::ExecuteInstruction; - -// #[tokio::test] -// async fn invoke_hook() { -// let mut ctx = ProgramTest::new("transfer_hook", TEST_HOOK_ID, processor!(super::process)) -// .start_with_context() -// .await; - -// let mut data = ExecuteInstruction::SPL_DISCRIMINATOR_SLICE.to_vec(); -// data.extend_from_slice(&0_u64.to_le_bytes()); - -// let ix = Instruction { -// program_id: TEST_HOOK_ID, -// accounts: vec![ -// AccountMeta::new_readonly(Pubkey::new_unique(), false), -// AccountMeta::new_readonly(Pubkey::new_unique(), false), -// AccountMeta::new_readonly(Pubkey::new_unique(), false), -// AccountMeta::new_readonly(Pubkey::new_unique(), false), -// AccountMeta::new_readonly(Pubkey::new_unique(), false), -// ], -// data, -// }; -// let transaction = Transaction::new_signed_with_payer( -// &[ix], -// Some(&ctx.payer.pubkey()), -// &[&ctx.payer], -// ctx.last_blockhash, -// ); - -// ctx.banks_client -// .process_transaction(transaction) -// .await -// .unwrap(); -// } -// } diff --git a/scripts/build-program-verifiable.sh b/scripts/build-program-verifiable.sh deleted file mode 100755 index 25d86c12d..000000000 --- a/scripts/build-program-verifiable.sh +++ /dev/null @@ -1,32 +0,0 @@ -#!/usr/bin/env sh -ROOT=$(git rev-parse --show-toplevel) -cd $ROOT - -verify_bin=$(which solana-verify) -if [ "$?" != "0" ]; then - echo "solana-verify not found. Please run: cargo install solana-verify." - exit 1 -fi - -program_lib_name=$1 -deployment=$2 - -if [ -z "$program_lib_name" ] || [ -z "$deployment" ]; then - echo "Usage: $0 " - exit 1 -fi - -if [ "$deployment" = "mainnet" ]; then - features="--features mainnet-beta" -elif [ "$deployment" = "devnet" ]; then - features="--features devnet --no-default-features" -elif [ "$deployment" = "staging" ]; then - features="--features staging --no-default-features" -else - echo "Error: Unknown deployment: $deployment" - exit 1 -fi - -cmd="sudo $verify_bin build --library-name $program_lib_name -- $features" -echo "Running: $cmd" -eval "$cmd" diff --git a/scripts/build-program.sh b/scripts/build-program.sh deleted file mode 100755 index 1ca3556f1..000000000 --- a/scripts/build-program.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/env sh -ROOT=$(git rev-parse --show-toplevel) -cd $ROOT - -program_lib_name=$1 -cluster=$2 - -if [ -z "$program_lib_name" ] || [ -z "$cluster" ]; then - echo "Usage: $0 " - exit 1 -fi - -if [ "$cluster" = "mainnet" ]; then - features="--features mainnet-beta" -elif [ "$cluster" = "devnet" ]; then - features="--features devnet --no-default-features" -elif [ "$cluster" = "staging" ]; then - features="--features staging --no-default-features" -else - echo "Error: Unknown cluster: $cluster" - exit 1 -fi - -cmd="anchor build -p $program_lib_name -- $features" -echo "Running: $cmd" -eval "$cmd" diff --git a/scripts/build-workspace.sh b/scripts/build-workspace.sh deleted file mode 100755 index 77055eada..000000000 --- a/scripts/build-workspace.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env sh -ROOT=$(git rev-parse --show-toplevel) -cd $ROOT - -cmd="anchor build --no-idl" -echo "Running: $cmd" -eval "$cmd" diff --git a/scripts/deploy-buffer.sh b/scripts/deploy-buffer.sh deleted file mode 100755 index 4a7557574..000000000 --- a/scripts/deploy-buffer.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env sh -ROOT=$(git rev-parse --show-toplevel) -cd $ROOT - -program_lib_name=$1 -rpc_url=$2 -keypair=$3 - -if [ -z "$program_lib_name" ] || [ -z "$rpc_url" ] || [ -z "$keypair" ]; then - echo "Usage: $0 " - exit 1 -fi - -cmd="solana --url $rpc_url program write-buffer --use-rpc "$ROOT/target/deploy/$program_lib_name.so" -k $keypair" -echo "Running: $cmd" -eval "$cmd" diff --git a/scripts/deploy-staging-program.sh b/scripts/deploy-staging-program.sh deleted file mode 100644 index 581f5c67b..000000000 --- a/scripts/deploy-staging-program.sh +++ /dev/null @@ -1,79 +0,0 @@ -#!/usr/bin/env sh - -ROOT=$(git rev-parse --show-toplevel) -cd $ROOT - -set -e - -ask_confirmation() { - while true; do - read -p "Are you sure you want to proceed? (y/n): " yn - case $yn in - [Yy]* ) return 0;; - [Nn]* ) return 1;; - * ) echo "Please answer yes (y) or no (n).";; - esac - done -} - -deployer_key_path=$1 -[ -z "$deployer_key_path" ] && echo "Missing deployer_key_path argument" && exit 1 -[ ! -f "$deployer_key_path" ] && echo "$deployer_key_path is not a file" && exit 1 - -program_address_or_keypair=$2 -[ -z "$program_address_or_keypair" ] && echo "Missing program_address_or_keypair argument" && exit 1 - -rpc_url=$3 -[ -z "$rpc_url" ] && echo "Missing rpc_url argument" && exit 1 - -deployer_pk=$(solana-keygen pubkey $deployer_key_path) -deployer_balance=$(solana balance $deployer_key_path) -set +e -exist_result=$(solana account $program_address_or_keypair 2>&1) -set -e - -if [ "$exist_result" = *"Error: AccountNotFound:"* ]; then - is_upgrade=0 -else - is_upgrade=1 -fi - -if [ -f "$program_address_or_keypair" ]; then - program_id=$(solana-keygen pubkey $program_address_or_keypair) -else - if [ "$is_upgrade" = "0" ]; then - echo "You need to provide a private key path for a first deploy." - exit 1 - else - program_id=$program_address_or_keypair - fi -fi - -echo "=========================================================================================" -echo "Deployer: $deployer_pk" -echo "Balance: $deployer_balance" -printf "Deploying to: $program_id" -if [ "$is_upgrade" = "0" ]; then - echo " (first deployment)" -else - echo " (already deployed)" -fi - -if ! ask_confirmation; then - echo "Cancelled." - exit 0 -fi - -if [ "$is_upgrade" = "0" ]; then - echo "Deploying..." -else - echo "Upgrading..." -fi - -solana program deploy \ - --use-rpc \ - --url $rpc_url \ - --fee-payer $deployer_key_path \ - --keypair $deployer_key_path \ - --program-id $program_address_or_keypair \ - "$ROOT/target/deploy/marginfi.so" diff --git a/scripts/fuzz-program.sh b/scripts/fuzz-program.sh deleted file mode 100755 index 9b4b2f45b..000000000 --- a/scripts/fuzz-program.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env bash -set -e - -ROOT=$(git rev-parse --show-toplevel) -cd $ROOT - -cd $ROOT/programs/marginfi/fuzz -cmd="cargo +nightly fuzz run lend -Zbuild-std --strip-dead-code --no-cfg-fuzzing -- -max_total_time=300 -verbosity=0" -echo "Running: $cmd" -eval "$cmd" diff --git a/scripts/lint.sh b/scripts/lint.sh deleted file mode 100755 index cf5c83b4d..000000000 --- a/scripts/lint.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env sh - -cargo clippy --features=test,test-bpf -- -D warnings -A clippy::await_holding_refcell_ref -A clippy::comparison_chain -A clippy::too_many_arguments diff --git a/scripts/setup-devnet.sh b/scripts/setup-devnet.sh deleted file mode 100755 index 6390ff089..000000000 --- a/scripts/setup-devnet.sh +++ /dev/null @@ -1,57 +0,0 @@ -#!/usr/bin/env bash -RPC_ENDPOINT=https://devnet.genesysgo.net/ -KEYPAIR_PATH=~/.config/solana/id.json - -[ -z "$PROGRAM_ID" ] && echo "PROGRAM_ID must be specified. Exiting." && exit 1 -[ -z "$NEW_PROFILE_NAME" ] && echo "NEW_PROFILE_NAME must be specified. Exiting." && exit 1 - -mfi profile create \ - --cluster devnet \ - --name "$NEW_PROFILE_NAME" \ - --keypair-path "$KEYPAIR_PATH" \ - --rpc-url "$RPC_ENDPOINT" \ - --program-id "$PROGRAM_ID" - -mfi profile set "$NEW_PROFILE_NAME" - -mfi group create "$@" -y - -# Add USDC bank -mfi group add-bank \ - --mint F9jRT1xL7PCRepBuey5cQG5vWHFSbnvdWxJWKqtzMDsd \ - --asset-weight-init 0.85 \ - --asset-weight-maint 0.9 \ - --liability-weight-maint 1.1 \ - --liability-weight-init 1.15 \ - --deposit-limit 1000000000000000\ - --borrow-limit 1000000000000000\ - --pyth-oracle 5SSkXsEKQepHHAewytPVwdej4epN1nxgLVM84L4KXgy7 \ - --optimal-utilization-rate 0.9 \ - --plateau-interest-rate 1 \ - --max-interest-rate 10 \ - --insurance-fee-fixed-apr 0.01 \ - --insurance-ir-fee 0.1 \ - --protocol-fixed-fee-apr 0.01 \ - --protocol-ir-fee 0.1 \ - -y \ - "$@" - -# Add SOL bank -mfi group add-bank \ - --mint 4Bn9Wn1sgaD5KfMRZjxwKFcrUy6NKdyqLPtzddazYc4x \ - --asset-weight-init 0.75 \ - --asset-weight-maint 0.8 \ - --liability-weight-maint 1.2 \ - --liability-weight-init 1.25 \ - --deposit-limit 1000000000000000\ - --borrow-limit 1000000000000000\ - --pyth-oracle J83w4HKfqxwcq3BEMMkPFSppX3gqekLyLJBexebFVkix \ - --optimal-utilization-rate 0.8 \ - --plateau-interest-rate 1 \ - --max-interest-rate 20 \ - --insurance-fee-fixed-apr 0.01 \ - --insurance-ir-fee 0.1 \ - --protocol-fixed-fee-apr 0.01 \ - --protocol-ir-fee 0.1 \ - -y \ - "$@" diff --git a/scripts/single-test.sh b/scripts/single-test.sh deleted file mode 100755 index 926a0e555..000000000 --- a/scripts/single-test.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env bash - -set -e - -if [ "$#" -lt 2 ]; then - echo "Usage: $0 [--verbose]" - exit 1 -fi - -program_name=$1 -test_name=$2 -verbose=false - -if [ "$#" -eq 3 ] && [ "$3" == "--verbose" ]; then - verbose=true -fi - -ROOT=$(git rev-parse --show-toplevel) -cd $ROOT - -SBF_OUT_DIR="$ROOT/target/deploy" -RUST_LOG="solana_runtime::message_processor::stable_log=debug" -CARGO_CMD="SBF_OUT_DIR=$SBF_OUT_DIR RUST_LOG=$RUST_LOG cargo nextest run --package $program_name --features=test,test-bpf --nocapture -- $test_name" - -echo "Running: $CARGO_CMD" - -if [ "$verbose" == true ]; then - eval $CARGO_CMD -else - eval $CARGO_CMD 2>&1 | awk '/PASS/ {print "\033[32m" $0 "\033[39m"} /FAIL/ {print "\033[31m" $0 "\033[39m"}' -fi diff --git a/scripts/test-program-remix.sh b/scripts/test-program-remix.sh deleted file mode 100755 index 01a6cc122..000000000 --- a/scripts/test-program-remix.sh +++ /dev/null @@ -1,100 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -# Fancy pants help screen -usage() { - cat < [-f ] [-l ] [-c ] [-- ] - -Options: - -p, --program Cargo package name to test (required) - -f, --features Comma-separated feature flags to pass to nextest (default: "test,test-bpf") - -l, --loglevel Log level for stable_log (e.g. "warn", default: "debug") - -c, --chain Chain to test against (e.g., mainnet-beta). This sets the TEST_CHAIN env variable. - -- Anything after this is passed as extra test flags (such as filters or test harness flags). -EOF - exit 1 -} - -# Default values. -features="test,test-bpf" -loglevel="debug" -program="" -chain="" -extra_args=() - -# Parse command-line arguments. -while [[ "$#" -gt 0 ]]; do - case "$1" in - -p|--program) - if [[ -z "${2-}" ]]; then - echo "Error: --program requires a value." - usage - fi - program="$2" - shift 2 - ;; - -f|--features) - if [[ -z "${2-}" ]]; then - echo "Error: --features requires a value." - usage - fi - features="$2" - shift 2 - ;; - -l|--loglevel) - if [[ -z "${2-}" ]]; then - echo "Error: --loglevel requires a value." - usage - fi - loglevel="$2" - shift 2 - ;; - -c|--chain) - if [[ -z "${2-}" ]]; then - echo "Error: --chain requires a value." - usage - fi - chain="$2" - shift 2 - ;; - --) - shift - extra_args=("$@") - break - ;; - *) - echo "Unknown parameter: $1" - usage - ;; - esac -done - -if [[ -z "$program" ]]; then - echo "Error: A program (cargo package) must be specified." - usage -fi - -# Determine the repository root. -ROOT=$(git rev-parse --show-toplevel 2>/dev/null || echo ".") -cd "$ROOT" - -# Set environment variables for the tests. -export SBF_OUT_DIR="$ROOT/target/deploy" -export RUST_LOG="solana_runtime::message_processor::stable_log=${loglevel}" - -# Set the chain environment variable if provided. -if [[ -n "$chain" ]]; then - export TEST_CHAIN="$chain" -fi - -# Build the cargo nextest command. -cmd=(cargo nextest run --no-fail-fast --package "$program" --features "$features") - -# Append any extra arguments (these are passed after '--') -if [ "${#extra_args[@]}" -gt 0 ]; then - cmd+=(-- "${extra_args[@]}") -fi - -echo "Running: ${cmd[*]}" -exec "${cmd[@]}" diff --git a/scripts/test-program.sh b/scripts/test-program.sh deleted file mode 100755 index 6595e253a..000000000 --- a/scripts/test-program.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env bash -set -e - -ROOT=$(git rev-parse --show-toplevel) -cd $ROOT - -program_lib_name=$1 -loglevel=$2 - -if [ -z "$program_lib_name" ]; then - echo "Usage: $0 " - exit 1 -fi - -if [ "$loglevel" == "--sane" ]; then - loglevel=warn - nocapture="--test-threads=1" -else - loglevel=debug - nocapture="--nocapture" -fi - -if [ "$program_lib_name" == "all" ]; then - package_filter="" -else - package_filter="--package $program_lib_name" -fi - -extra_params="${@:3}" - -cmd="SBF_OUT_DIR=$ROOT/target/deploy RUST_LOG=solana_runtime::message_processor::stable_log=$loglevel cargo nextest run --no-fail-fast $package_filter --features=test,test-bpf $nocapture -- $extra_params" -echo "Running: $cmd" -eval "$cmd" diff --git a/scripts/verify.sh b/scripts/verify.sh deleted file mode 100755 index 4d190fd9e..000000000 --- a/scripts/verify.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env sh -ROOT=$(git rev-parse --show-toplevel) -cd $ROOT - -VERIFY_BIN=$(which solana-verify) -if [ "$?" != "0" ]; then - echo "solana-verify not found. Please run: cargo install solana-verify." - exit 1 -fi - -program_lib_name=$1 -cluster=$2 - -if [ -z "$program_lib_name" ] || [ -z "$cluster" ]; then - echo "Usage: $0 " - exit 1 -fi - -if [ "$cluster" = "mainnet" ]; then - cluster_feature="mainnet-beta" - program_id="MFv2hWf31Z9kbCa1snEPYctwafyhdvnV7FZnsebVacA" - rpc_moniker="main" -elif [ "$cluster" = "devnet" ]; then - cluster_feature=" devnet" - program_id="LipsxuAkFkwa4RKNzn51wAsW7Dedzt1RNHMkTkDEZUW" - rpc_moniker="dev" -else - echo "Error: Unknown cluster: $cluster" - exit 1 -fi - -cmd="sudo $VERIFY_BIN verify-from-repo --url $rpc_moniker --program-id $program_id https://github.com/mrgnlabs/marginfi-v2 --library-name $program_lib_name -- --features $cluster_feature" -echo "Running: $cmd" -eval "$cmd" diff --git a/test-utils/Cargo.toml b/test-utils/Cargo.toml deleted file mode 100644 index d0486a3c1..000000000 --- a/test-utils/Cargo.toml +++ /dev/null @@ -1,55 +0,0 @@ -[package] -name = "test-utilities" -version = "0.1.0" -publish = false -edition = "2021" - -[features] -lip = ["liquidity-incentive-program"] - -[dependencies] -solana-cli-output = { workspace = true } -solana-program = { workspace = true } -solana-logger = { workspace = true } -solana-program-test = { workspace = true } -solana-sdk = { workspace = true } -spl-token-2022 = { workspace = true } -spl-transfer-hook-interface = { workspace = true } -spl-tlv-account-resolution = { workspace = true } -spl-discriminator = { workspace = true } - -anchor-lang = { workspace = true } -anchor-lang-29 = { workspace = true } -anchor-spl = { workspace = true } - -pyth-sdk-solana = { workspace = true } -pyth-solana-receiver-sdk = { workspace = true } -switchboard-solana = { workspace = true } -switchboard-on-demand = { workspace = true } - -bytemuck = "1.9.1" -fixed = "1.12.0" -fixed-macro = "1.2.0" -lazy_static = "1.4.0" -static_assertions = "1.1.0" -type-layout = "0.2.0" -anyhow = "1.0.66" -assert_matches = "1.5.0" -bincode = "1.3.3" -futures = "0.3.25" -pretty_assertions = "1.2.1" -serde = { version = "1.0.197", features = ["derive"] } -serde_json = "1.0.115" - -[dependencies.marginfi] -path = "../programs/marginfi" -features = ["test-bpf"] - -[dependencies.transfer_hook] -path = "../programs/test_transfer_hook" -package = "test_transfer_hook" -features = ["no-entrypoint"] - -[dependencies.liquidity-incentive-program] -path = "../programs/liquidity-incentive-program" -optional = true diff --git a/test-utils/data/DeyH7QxWvnbbaVB4zFrf4hoq7Q8z1ZT14co42BGwGtfM.bin b/test-utils/data/DeyH7QxWvnbbaVB4zFrf4hoq7Q8z1ZT14co42BGwGtfM.bin deleted file mode 100644 index f3994731cabbc290af92d0029e95147013af10b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1864 zcmeA(T=vPxDRIvp_M>?TYi;eti<@2@3+dk_e_7}6gi}nLpPygY`uAM%3|31K{S5sZ z7A@1>>g_UrEo%wCBM5WxPn#DbH75z1p=2)H!MOPCqKk9nGt ze?ucTsh#Js-_&~^I=@A_zD@T{{hV8K(qgt)$@V{gnF<#b+g&u**En|Ob^m{kmu0a! zjb+u{UaN!N>fSay!1w<@$nb9-@8g;t$ZcST+LYdMt!iQT3~7@^_IH1;@K0EoCjRjA z(yg<5mWgY$ahIB!WbDCzomY(k~vw^hUEpXZW#JN;g^rFu+kXe7KI@oW! zd@9(t-)*4@(An~Dj-)}YU|?u~vp|frv}Gv#GiQ7d{shXH7#kz=yJ9O`lNryR0Re{DEdMG8b)7RIFM2FJqFH>&UEg+8F0 diff --git a/test-utils/data/pyth_legacy_sol_price.bin b/test-utils/data/pyth_legacy_sol_price.bin deleted file mode 100644 index e1ce71ecff72abbc31a36fa82c1e4d8079175161..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3312 zcmeH}`#V&59LFb@hLPmfOf<#N<9>!eWw36d4ISF(vop zo=X?0o{elQR_+_Qq$0_bmRaZ98Bg=W?)e9Hp6AT>Ip=l0ukUBx=X1`Pu16KQ0w@$p zaAliaheEAc89#HmT>Q$2S=k&K0yeA+C=xs>5Ct|v=dxU=hS2fsiG%sjoSx)mXcrY8 z8EOrUyyMj==Y64lL6jaepc2Z7T%1*L#^L83e!2<|4zV5^X#{CYbq`Y9+BCHTM8HY^ z@x`lym4U@Vb)48T2F|_%ucLT<6FC0TsvR7MYJ)z!-+`WMHCifH8z9r|RcEl5@fi>E zvl%Ci<-MFLEe=?ghVJIzWFfC)Y`73Kk2l|-{#y=6oVELASeIx$szp4t%thL~IfAGY zF5PmSIq0j-C`Eu&M|l$`v=vYvSC5I(#;6+84) zqfAQIn;SMUsKeY%AD9I7-;mOUbgT78!Sy3?T+AKifWE_MtZ9>BHx-4Jjn&-xVv;!_ zh6(6=E$5Iic2^AKtJ+NAt6v}P4_vXy9jEHUN3>^1;G>Bz~^Bx->M)D;86wUc=J!!qBFUD33;b>b>iylxTjb{MbSk z8~9uLF7V|e2m6tDWYhr_f3^8ZIrR8GSC`DSnMyMSu>&fkt@^c;{YgJ=4O#rwm%&+A z`SQ_){YYHsEP>(MSa3S7UavRG>5-C1Tac^Q@A;9qUoy={85I?FX>y?c(Y$Z>6E7bV z*pI|5cVwCP#~mX2a8Qzj21f6~2hSw~aIR+z zNc`L>IpZ2)Wx>MREqjkE%`un7H6Hl-xbHlPmax(LO-ZTWLe&QHlhn%i@|kX-06!AH zLVAL$`ea_*<2PpU=-Oyzjz(H^o>=>R4Qu~#1sbj5>^)~0$j_Jp!)pH#fS3NM`Qal>y7Ne%2pG$CHzKDPUpPzSqk+^W@S_l2j z+`(t}n2Wodln0N_SDv3_uxDYBcu@l)sq;xP4dsO$Nun^+n?1nt~JhGL6;R z%+eyvd(zUIhdJ(3b)1C91CLLUogXX98##me_0!Km%dGnM!1*KbZf}?VtG(T^Yg{Cv z!u(05SdaBn8KUFjAsz!#5|^eEBNgX2LSlVeD@ecU-vIlO_@st_E=G+cMW%NKj)=|Q zHZ*3!G#N=q?TqLWg8X6cRr&ntb!ZS660fT0pYoJ_YAinT=9w90KP%SV zm^rU9 zDz#b`91;fgt2D9soDIZ z;HWO}&o(o}zpvjL&L4@t{?KDBobEgQce-P0c!}HCfujzLDV2=)5WVmeTJ~Vw?WB5; zPp@q=`g{KpTt5;QtFE5z4J`Ir??@S8B+HPp- z`SPJQb3uP1@eZ=qH3KQPo{kDxf7KoZ=@g6Mw6xN9iNguvifJ|IA?qtTILN=4c}t^CUSEU5n3W7mYg_Y>HCARi=N zYEP(@Zhm#o^H46+#8_*_)%+qp_Jj^oO0N!Wq+b~}=&LHgDD)291@ABlrW K|9|~!0{;L5#Q@m= diff --git a/test-utils/data/pyth_legacy_usdc_price.bin b/test-utils/data/pyth_legacy_usdc_price.bin deleted file mode 100644 index 020f0a7b9dab188c2de489bb798c8460e1a3f053..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3312 zcmca|c+)~A1_lOZApXF^z`zKkfBgUdUj#_A0deN;Tmc}(kOZY`9KW%G`18M>^90fI z-lxFyd_Is)28QZP^Zy_gO#EPfTN+55nZXD|F=YR`yjttp+sH_%sPZ$j#q|4>`a0i- ziAt+H3{hLO+t&lE2oC{she<8O9f1N6d-p-@Iidp*za70WJeyVv4s zIs?0Ci;nz-7t@||bLC!oD&;?&;UUEQQgDbv!W-mWRcQDUlK(pQ?)x)h*}9!e7N7b2 z@5pZN84Clq95DZ%7`MB^>9K9;ilY$ocW^@j5$6ABsQHBCSt^xU)Ap<=Yu{ybqapOL zGRK+xsHF4D>LnUyIzDdQwCTkYi1|lyQO$RTnomf+wphw)o6Y7G-`>c1`Y->-bl6}jt9^!r$O;q=9_!SK{pOF0KIU64Jr$0{?{}a%s!|;Au?1~K* zvm5eW>^WxAQvdR&^Bp!w`df*XeuAOlLr8vQ_43R4%L=zV;M19|=)$=nd!_%g#B5#7 z7@kfI*UG8PW|txE_dAU0e$O3{^hrowVB6^!A(yXw#Qb^*4zLBV^ce*;pOF03GsQb(c@OU4_=*e;0l=E5@R*(i+acWYjuHf7OWY2@;^b` zzX>gTqM_vjA^C&(?iD@jC!PMJ`$kE%nNwTvmxN1q;u~M%&v#b6TG24>f!= zcChnyQ$-`E?qRnNKR*A;p$D}JvUW0im%FI!=1E-h%5mRc zR*3nZxLH8P!p(mR4Ie`C7Xx)?nF~c45$1bA-A72?xv76~;@o9>)?Moqzb9LBZj$)DKfkL#&2C9C zB>ikaOFt>l{7XnaL{hf7Ec%1TFX^TmjCoeCrT6oceXlkZj(Q)uxa9l4?4{BW^Zn7n z$7InhaDWq%U+b&1UHH(WeesbCr&(L+zK?S3m2D~1pC)9qgWb}2b3tT1BzTGxY)oYua8Q=4E=ikzK zy+n3lti#lcw=A`I_4_UyJHChC=hult4O?@$y{0W=W?*2LuJ#>BGBEu3|Nnnf=Cm{r aI}%Et*j%<0q^AGHCy+41ea;C2UiopXfi`fZK;xYD#W3|vzUo@UE#nc7;eF1c>iyR}%Gp7q6L#K`Tkz9q^EnTRosL%)%)B1(DWbhj4)%E4A=ks zJ(J(^upj&0=&f>4b||=InjW&^-KI5J;)iv`55Jt>dk5YAJ?)lTVilud_CJ0q%*k~4 z<)KRPis_jj*RkFcJs;o}v2XpmOGjs{^xV9CKf3>G-iY-~xt0#oukff~yR*A(`}@y| zX?AMW3r{W#{61~Y`$qR~sxKF z7cS(xr=lUvH{*A02)g|&jthB~EXsiCM~>Q2_Gk!pSzjVcq~^m$D+9J#izJp;b91^`N~{jO zXXIuN@|hfF_9@6d>)p0H)wQen+7{Y>IzHulXZ-Pwz-#kwM_S)GyEzRdG@o#XFaZS^ zfjHRTM?W;!1w|T-!#Ho=Hn9Fbi!Y+KL(mk$xoGt(L(U}C2bQ7CaQTAE$KKrio(-@6 qZm4)4C|<<|mq)K3(aZz69Ry(YI;?($@qa<2N6FC;7!3g;LI40|fBks? diff --git a/test-utils/src/bank.rs b/test-utils/src/bank.rs deleted file mode 100644 index 2960317f1..000000000 --- a/test-utils/src/bank.rs +++ /dev/null @@ -1,440 +0,0 @@ -use super::utils::load_and_deserialize; -use crate::prelude::{ - get_emissions_authority_address, get_emissions_token_account_address, MintFixture, - TokenAccountFixture, -}; -use anchor_lang::{ - prelude::{AccountMeta, Pubkey}, - InstructionData, ToAccountMetas, -}; - -use fixed::types::I80F48; -use marginfi::{ - bank_authority_seed, - state::{ - marginfi_group::{Bank, BankConfigOpt, BankVaultType}, - price::{OraclePriceFeedAdapter, OraclePriceType, PriceAdapter}, - }, - utils::{find_bank_vault_authority_pda, find_bank_vault_pda}, -}; -use solana_program::account_info::IntoAccountInfo; -use solana_program::instruction::Instruction; -use solana_program::sysvar::clock::Clock; -use solana_program_test::BanksClientError; -use solana_program_test::ProgramTestContext; -#[cfg(feature = "lip")] -use solana_sdk::signature::Keypair; -use solana_sdk::{signer::Signer, transaction::Transaction}; -use std::{cell::RefCell, fmt::Debug, rc::Rc}; - -#[derive(Clone)] -pub struct BankFixture { - ctx: Rc>, - pub key: Pubkey, - pub mint: MintFixture, -} - -impl BankFixture { - pub fn new( - ctx: Rc>, - key: Pubkey, - mint_fixture: &MintFixture, - ) -> Self { - Self { - ctx, - key, - mint: mint_fixture.clone(), - } - } - - pub fn get_token_program(&self) -> Pubkey { - self.mint.token_program - } - - pub fn get_vault(&self, vault_type: BankVaultType) -> (Pubkey, u8) { - find_bank_vault_pda(&self.key, vault_type) - } - - pub fn get_vault_authority(&self, vault_type: BankVaultType) -> (Pubkey, u8) { - find_bank_vault_authority_pda(&self.key, vault_type) - } - - pub async fn get_price(&self) -> f64 { - let bank = self.load().await; - let oracle_key = bank.config.oracle_keys[0]; - let mut oracle_account = self - .ctx - .borrow_mut() - .banks_client - .get_account(oracle_key) - .await - .unwrap() - .unwrap(); - let ai = (&oracle_key, &mut oracle_account).into_account_info(); - let oracle_adapter = - OraclePriceFeedAdapter::try_from_bank_config(&bank.config, &[ai], &Clock::default()) - .unwrap(); - - oracle_adapter - .get_price_of_type(OraclePriceType::RealTime, None) - .unwrap() - .to_num() - } - - pub async fn load(&self) -> Bank { - load_and_deserialize::(self.ctx.clone(), &self.key).await - } - - pub async fn update_config( - &self, - config: BankConfigOpt, - oracle_update: Option<(u8, Pubkey)>, - ) -> anyhow::Result<()> { - let mut instructions = Vec::new(); - - let accounts = marginfi::accounts::LendingPoolConfigureBank { - group: self.load().await.group, - admin: self.ctx.borrow().payer.pubkey(), - bank: self.key, - } - .to_account_metas(Some(true)); - - let config_ix = Instruction { - program_id: marginfi::id(), - accounts, - data: marginfi::instruction::LendingPoolConfigureBank { - bank_config_opt: config, - } - .data(), - }; - - instructions.push(config_ix); - - if let Some((setup, oracle)) = oracle_update { - let mut oracle_accounts = marginfi::accounts::LendingPoolConfigureBank { - group: self.load().await.group, - admin: self.ctx.borrow().payer.pubkey(), - bank: self.key, - } - .to_account_metas(Some(true)); - - oracle_accounts.push(AccountMeta::new_readonly(oracle, false)); - - let oracle_ix = Instruction { - program_id: marginfi::id(), - accounts: oracle_accounts, - data: marginfi::instruction::LendingPoolConfigureBankOracle { setup, oracle } - .data(), - }; - - instructions.push(oracle_ix); - } - - let tx = Transaction::new_signed_with_payer( - &instructions, - Some(&self.ctx.borrow().payer.pubkey()), - &[&self.ctx.borrow().payer], - self.ctx.borrow().last_blockhash, - ); - - self.ctx - .borrow_mut() - .banks_client - .process_transaction(tx) - .await?; - - Ok(()) - } - - #[cfg(feature = "lip")] - pub async fn try_create_campaign( - &self, - lockup_period: u64, - max_deposits: u64, - max_rewards: u64, - reward_funding_account: Pubkey, - ) -> Result { - use crate::prelude::lip::*; - - let campaign_key = Keypair::new(); - - let bank = self.load().await; - - let ix = Instruction { - program_id: liquidity_incentive_program::id(), - accounts: liquidity_incentive_program::accounts::CreateCampaign { - campaign: campaign_key.pubkey(), - campaign_reward_vault: get_reward_vault_address(campaign_key.pubkey()).0, - campaign_reward_vault_authority: get_reward_vault_authority(campaign_key.pubkey()) - .0, - asset_mint: bank.mint, - marginfi_bank: self.key, - admin: self.ctx.borrow().payer.pubkey(), - funding_account: reward_funding_account, - rent: solana_program::sysvar::rent::id(), - token_program: self.get_token_program(), - system_program: solana_program::system_program::id(), - } - .to_account_metas(Some(true)), - data: liquidity_incentive_program::instruction::CreateCampaign { - lockup_period, - max_deposits, - max_rewards, - } - .data(), - }; - - let tx = { - let ctx = self.ctx.borrow_mut(); - - Transaction::new_signed_with_payer( - &[ix], - Some(&ctx.payer.pubkey()), - &[&ctx.payer, &campaign_key], - ctx.last_blockhash, - ) - }; - - self.ctx - .borrow_mut() - .banks_client - .process_transaction(tx) - .await?; - - Ok(crate::lip::LipCampaignFixture::new( - self.ctx.clone(), - self.clone(), - campaign_key.pubkey(), - )) - } - - pub async fn try_setup_emissions( - &self, - flags: u64, - rate: u64, - total_emissions: u64, - emissions_mint: Pubkey, - funding_account: Pubkey, - token_program: Pubkey, - ) -> Result<(), BanksClientError> { - let ix = Instruction { - program_id: marginfi::id(), - accounts: marginfi::accounts::LendingPoolSetupEmissions { - group: self.load().await.group, - admin: self.ctx.borrow().payer.pubkey(), - bank: self.key, - emissions_mint, - emissions_funding_account: funding_account, - emissions_auth: get_emissions_authority_address(self.key, emissions_mint).0, - emissions_token_account: get_emissions_token_account_address( - self.key, - emissions_mint, - ) - .0, - token_program, - system_program: solana_program::system_program::id(), - } - .to_account_metas(Some(true)), - data: marginfi::instruction::LendingPoolSetupEmissions { - rate, - flags, - total_emissions, - } - .data(), - }; - - let tx = { - let ctx = self.ctx.borrow_mut(); - - Transaction::new_signed_with_payer( - &[ix], - Some(&ctx.payer.pubkey()), - &[&ctx.payer], - ctx.last_blockhash, - ) - }; - - self.ctx - .borrow_mut() - .banks_client - .process_transaction(tx) - .await?; - - Ok(()) - } - - pub async fn try_update_emissions( - &self, - emissions_flags: Option, - emissions_rate: Option, - additional_emissions: Option<(u64, Pubkey)>, - token_program: Pubkey, - ) -> Result<(), BanksClientError> { - let bank = self.load().await; - - let ix = Instruction { - program_id: marginfi::id(), - accounts: marginfi::accounts::LendingPoolUpdateEmissionsParameters { - group: self.load().await.group, - admin: self.ctx.borrow().payer.pubkey(), - bank: self.key, - emissions_mint: bank.emissions_mint, - emissions_funding_account: additional_emissions.map(|(_, f)| f).unwrap_or_default(), - emissions_token_account: get_emissions_token_account_address( - self.key, - bank.emissions_mint, - ) - .0, - token_program, - } - .to_account_metas(Some(true)), - data: marginfi::instruction::LendingPoolUpdateEmissionsParameters { - emissions_flags, - emissions_rate, - additional_emissions: additional_emissions.map(|(a, _)| a), - } - .data(), - }; - - let tx = { - let ctx = self.ctx.borrow_mut(); - - Transaction::new_signed_with_payer( - &[ix], - Some(&ctx.payer.pubkey()), - &[&ctx.payer], - ctx.last_blockhash, - ) - }; - - self.ctx - .borrow_mut() - .banks_client - .process_transaction(tx) - .await?; - - Ok(()) - } - - pub async fn try_withdraw_fees( - &self, - receiving_account: &TokenAccountFixture, - amount: u64, - ) -> Result<(), BanksClientError> { - let bank = self.load().await; - let mut ctx = self.ctx.borrow_mut(); - let signer_pk = ctx.payer.pubkey(); - let (fee_vault_authority, _) = Pubkey::find_program_address( - bank_authority_seed!(BankVaultType::Fee, self.key), - &marginfi::id(), - ); - - let mut accounts = marginfi::accounts::LendingPoolWithdrawFees { - group: bank.group, - token_program: receiving_account.token_program, - bank: self.key, - admin: signer_pk, - fee_vault: bank.fee_vault, - fee_vault_authority, - dst_token_account: receiving_account.key, - } - .to_account_metas(Some(true)); - if self.mint.token_program == spl_token_2022::ID { - accounts.push(AccountMeta::new_readonly(self.mint.key, false)); - } - - let ix = Instruction { - program_id: marginfi::id(), - accounts, - data: marginfi::instruction::LendingPoolWithdrawFees { amount }.data(), - }; - - let tx = Transaction::new_signed_with_payer( - &[ix], - Some(&ctx.payer.pubkey().clone()), - &[&ctx.payer], - ctx.last_blockhash, - ); - - ctx.banks_client.process_transaction(tx).await?; - - Ok(()) - } - - pub async fn try_withdraw_insurance( - &self, - receiving_account: &TokenAccountFixture, - amount: u64, - ) -> Result<(), BanksClientError> { - let bank = self.load().await; - let mut ctx = self.ctx.borrow_mut(); - let signer_pk = ctx.payer.pubkey(); - let (insurance_vault_authority, _) = Pubkey::find_program_address( - bank_authority_seed!(BankVaultType::Insurance, self.key), - &marginfi::id(), - ); - - let mut accounts = marginfi::accounts::LendingPoolWithdrawInsurance { - group: bank.group, - token_program: receiving_account.token_program, - bank: self.key, - admin: signer_pk, - insurance_vault: bank.insurance_vault, - insurance_vault_authority, - dst_token_account: receiving_account.key, - } - .to_account_metas(Some(true)); - if self.mint.token_program == spl_token_2022::ID { - accounts.push(AccountMeta::new_readonly(self.mint.key, false)); - } - - let ix = Instruction { - program_id: marginfi::id(), - accounts, - data: marginfi::instruction::LendingPoolWithdrawInsurance { amount }.data(), - }; - - let tx = Transaction::new_signed_with_payer( - &[ix], - Some(&ctx.payer.pubkey().clone()), - &[&ctx.payer], - ctx.last_blockhash, - ); - - ctx.banks_client.process_transaction(tx).await?; - - Ok(()) - } - - pub async fn get_vault_token_account(&self, vault_type: BankVaultType) -> TokenAccountFixture { - let (vault, _) = self.get_vault(vault_type); - - TokenAccountFixture::fetch(self.ctx.clone(), vault).await - } - - pub async fn set_asset_share_value(&self, value: I80F48) { - let mut bank_ai = self - .ctx - .borrow_mut() - .banks_client - .get_account(self.key) - .await - .unwrap() - .unwrap(); - let bank = bytemuck::from_bytes_mut::(&mut bank_ai.data.as_mut_slice()[8..]); - - bank.asset_share_value = value.into(); - - self.ctx - .borrow_mut() - .set_account(&self.key, &bank_ai.into()); - } -} - -impl Debug for BankFixture { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - f.debug_struct("BankFixture") - .field("key", &self.key) - .finish() - } -} diff --git a/test-utils/src/fixtures/pyUSD.json b/test-utils/src/fixtures/pyUSD.json deleted file mode 100644 index 2a67fc921..000000000 --- a/test-utils/src/fixtures/pyUSD.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "pubkey": "2b1kV6DkPAnxd5ixfnxCpjxmKwqjjaYmCZfHsFu24GXo", - "account": { - "lamports": 8903240, - "data": [ - "AQAAAEWL8jQUbMmHNpVOADdvZA1z7a1jyDebZa3bW4Jv0uMVjawAc+0oAAAGAQEAAAAXhTJh72q4Uypn8FOGWq0xKT/PB88SCrW5oVcGVI3AKwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQMAIAAXhTJh72q4Uypn8FOGWq0xKT/PB88SCrW5oVcGVI3AKwwAIAAXhTJh72q4Uypn8FOGWq0xKT/PB88SCrW5oVcGVI3AKwEAbAAXhTJh72q4Uypn8FOGWq0xKT/PB88SCrW5oVcGVI3AKxeFMmHvarhTKmfwU4ZarTEpP88HzxIKtbmhVwZUjcArAAAAAAAAAABdAgAAAAAAAAAAAAAAAAAAAABdAgAAAAAAAAAAAAAAAAAAAAAEAEEAF4UyYe9quFMqZ/BThlqtMSk/zwfPEgq1uaFXBlSNwCsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAIEAF4UyYe9quFMqZ/BThlqtMSk/zwfPEgq1uaFXBlSNwCscN+ZDO3ME3YJzeuQNm4vzxJ9bDmxJqNUzKLPlBpAcVwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgBAABeFMmHvarhTKmfwU4ZarTEpP88HzxIKtbmhVwZUjcArAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAEAAgnQVMyO1m+9u94xUbiBsQYh7lCdtZO+gj0jz14I76NgXkkg7bIoqh7dHHYFPlZH5OVyECpzj2fTVun06S4p0nhMArgCCdBUzI7Wb7273jFRuIGxBiHuUJ21k76CPSPPXgjvo2BeSSDtsiiqHt0cdgU+Vkfk5XIQKnOPZ9NW6fTpLinSeCgAAAFBheVBhbCBVU0QFAAAAUFlVU0RPAAAAaHR0cHM6Ly90b2tlbi1tZXRhZGF0YS5wYXhvcy5jb20vcHl1c2RfbWV0YWRhdGEvcHJvZC9zb2xhbmEvcHl1c2RfbWV0YWRhdGEuanNvbgAAAAA=", - "base64" - ], - "owner": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb", - "executable": false, - "rentEpoch": 18446744073709551615, - "space": 866 - } -} \ No newline at end of file diff --git a/test-utils/src/lib.rs b/test-utils/src/lib.rs deleted file mode 100644 index 6bca22317..000000000 --- a/test-utils/src/lib.rs +++ /dev/null @@ -1,11 +0,0 @@ -pub mod bank; -#[cfg(feature = "lip")] -pub mod lip; -pub mod marginfi_account; -pub mod marginfi_group; -pub mod prelude; -pub mod spl; -pub mod test; -// pub mod transfer_hook; -pub mod utils; -pub use transfer_hook; diff --git a/test-utils/src/lip.rs b/test-utils/src/lip.rs deleted file mode 100644 index c2e22b1e7..000000000 --- a/test-utils/src/lip.rs +++ /dev/null @@ -1,159 +0,0 @@ -#![cfg(feature = "lip")] - -use crate::utils::lip::*; -use anchor_lang::AnchorDeserialize; -use anchor_lang::{ - prelude::{Pubkey, ToAccountMetas}, - InstructionData, -}; -use anyhow::Result; -use liquidity_incentive_program as lip; -use solana_program::instruction::Instruction; -use solana_program_test::{BanksClientError, ProgramTestContext}; -use solana_sdk::{signature::Keypair, signer::Signer, transaction::Transaction}; -use std::{cell::RefCell, rc::Rc}; - -use crate::bank::BankFixture; - -pub struct LipCampaignFixture { - pub key: Pubkey, - bank_f: BankFixture, - ctx: Rc>, -} - -impl LipCampaignFixture { - pub fn new(ctx: Rc>, bank_f: BankFixture, key: Pubkey) -> Self { - Self { key, bank_f, ctx } - } - - pub async fn try_create_deposit( - &self, - funding_account: Pubkey, - amount: u64, - ) -> Result { - let bank = self.bank_f.load().await; - let deposit_key = Keypair::new(); - let temp_token_account_key = Keypair::new(); - - let ix = Instruction { - program_id: lip::id(), - accounts: lip::accounts::CreateDeposit { - campaign: self.key, - signer: self.ctx.borrow().payer.pubkey(), - deposit: deposit_key.pubkey(), - mfi_pda_signer: get_deposit_mfi_authority(deposit_key.pubkey()).0, - funding_account, - temp_token_account: temp_token_account_key.pubkey(), - asset_mint: bank.mint, - marginfi_group: bank.group, - marginfi_bank: self.bank_f.key, - marginfi_account: get_marginfi_account_address(deposit_key.pubkey()).0, - marginfi_bank_vault: bank.liquidity_vault, - marginfi_program: marginfi::id(), - token_program: self.bank_f.get_token_program(), - rent: anchor_lang::solana_program::sysvar::rent::id(), - system_program: solana_program::system_program::id(), - } - .to_account_metas(Some(true)), - data: lip::instruction::CreateDeposit { amount }.data(), - }; - - let tx = Transaction::new_signed_with_payer( - &[ix], - Some(&self.ctx.borrow().payer.pubkey()), - &[ - &self.ctx.borrow().payer, - &deposit_key, - &temp_token_account_key, - ], - self.ctx.borrow().last_blockhash, - ); - - self.ctx - .borrow_mut() - .banks_client - .process_transaction(tx) - .await?; - - Ok(deposit_key.pubkey()) - } - - pub async fn try_end_deposit( - &self, - deposit_pk: Pubkey, - destination_account_address: Pubkey, - ) -> Result<()> { - let bank = self.bank_f.load().await; - let temp_token_account_key = Keypair::new(); - - let ix = Instruction { - program_id: lip::id(), - accounts: lip::accounts::EndDeposit { - campaign: self.key, - campaign_reward_vault: get_reward_vault_address(self.key).0, - campaign_reward_vault_authority: get_reward_vault_authority(self.key).0, - signer: self.ctx.borrow().payer.pubkey(), - deposit: deposit_pk, - mfi_pda_signer: get_deposit_mfi_authority(deposit_pk).0, - temp_token_account: temp_token_account_key.pubkey(), - temp_token_account_authority: get_temp_token_account_authority(deposit_pk).0, - destination_account: destination_account_address, - asset_mint: bank.mint, - marginfi_account: get_marginfi_account_address(deposit_pk).0, - marginfi_group: bank.group, - marginfi_bank: self.bank_f.key, - marginfi_bank_vault: bank.liquidity_vault, - marginfi_bank_vault_authority: self - .bank_f - .get_vault_authority(marginfi::state::marginfi_group::BankVaultType::Liquidity) - .0, - marginfi_program: marginfi::id(), - token_program: self.bank_f.get_token_program(), - system_program: solana_program::system_program::id(), - } - .to_account_metas(Some(true)), - data: lip::instruction::EndDeposit {}.data(), - }; - - let tx = Transaction::new_signed_with_payer( - &[ix], - Some(&self.ctx.borrow().payer.pubkey()), - &[&self.ctx.borrow().payer, &temp_token_account_key], - self.ctx.borrow().last_blockhash, - ); - - self.ctx - .borrow_mut() - .banks_client - .process_transaction(tx) - .await?; - - Ok(()) - } - - pub async fn load(&self) -> lip::state::Campaign { - let account = self - .ctx - .borrow_mut() - .banks_client - .get_account(self.key) - .await - .unwrap() - .unwrap(); - - lip::state::Campaign::deserialize(&mut &account.data[8..]).unwrap() - } - - pub async fn load_deposit(&self, deposit_key: Pubkey) -> lip::state::Deposit { - let account = self - .ctx - .borrow_mut() - .banks_client - .get_account(deposit_key) - .await - .unwrap() - .unwrap(); - - lip::state::Deposit::deserialize(&mut &account.data[8..]).unwrap() - } -} diff --git a/test-utils/src/marginfi_account.rs b/test-utils/src/marginfi_account.rs deleted file mode 100644 index 66d48b2bc..000000000 --- a/test-utils/src/marginfi_account.rs +++ /dev/null @@ -1,857 +0,0 @@ -use super::{bank::BankFixture, prelude::*}; -use crate::ui_to_native; -use anchor_lang::{prelude::*, system_program, InstructionData, ToAccountMetas}; -use marginfi::state::{ - marginfi_account::MarginfiAccount, - marginfi_group::{Bank, BankVaultType}, - price::OracleSetup, -}; -use solana_program::{instruction::Instruction, sysvar}; -use solana_program_test::{BanksClientError, ProgramTestContext}; -use solana_sdk::{ - compute_budget::ComputeBudgetInstruction, signature::Keypair, signer::Signer, - transaction::Transaction, -}; -use std::{cell::RefCell, mem, rc::Rc}; - -#[derive(Default, Clone)] -pub struct MarginfiAccountConfig {} - -pub struct MarginfiAccountFixture { - ctx: Rc>, - pub key: Pubkey, -} - -impl MarginfiAccountFixture { - pub async fn new( - ctx: Rc>, - marginfi_group: &Pubkey, - ) -> MarginfiAccountFixture { - let ctx_ref = ctx.clone(); - let account_key = Keypair::new(); - - { - let mut ctx = ctx.borrow_mut(); - - let accounts = marginfi::accounts::MarginfiAccountInitialize { - marginfi_account: account_key.pubkey(), - marginfi_group: *marginfi_group, - authority: ctx.payer.pubkey(), - fee_payer: ctx.payer.pubkey(), - system_program: system_program::ID, - }; - let init_marginfi_account_ix = Instruction { - program_id: marginfi::id(), - accounts: accounts.to_account_metas(Some(true)), - data: marginfi::instruction::MarginfiAccountInitialize {}.data(), - }; - - let tx = Transaction::new_signed_with_payer( - &[init_marginfi_account_ix], - Some(&ctx.payer.pubkey()), - &[&ctx.payer, &account_key], - ctx.last_blockhash, - ); - ctx.banks_client.process_transaction(tx).await.unwrap(); - } - - MarginfiAccountFixture { - ctx: ctx_ref, - key: account_key.pubkey(), - } - } - - pub async fn make_bank_deposit_ix>( - &self, - funding_account: Pubkey, - bank: &BankFixture, - ui_amount: T, - deposit_up_to_limit: Option, - ) -> Instruction { - let marginfi_account = self.load().await; - let ctx = self.ctx.borrow_mut(); - - let mut accounts = marginfi::accounts::LendingAccountDeposit { - group: marginfi_account.group, - marginfi_account: self.key, - authority: ctx.payer.pubkey(), - bank: bank.key, - signer_token_account: funding_account, - liquidity_vault: bank.get_vault(BankVaultType::Liquidity).0, - token_program: bank.get_token_program(), - } - .to_account_metas(Some(true)); - if bank.mint.token_program == spl_token_2022::ID { - accounts.push(AccountMeta::new_readonly(bank.mint.key, false)); - } - - Instruction { - program_id: marginfi::id(), - accounts, - data: marginfi::instruction::LendingAccountDeposit { - amount: ui_to_native!(ui_amount.into(), bank.mint.mint.decimals), - deposit_up_to_limit, - } - .data(), - } - } - - pub async fn try_bank_deposit + Copy>( - &self, - funding_account: Pubkey, - bank: &BankFixture, - ui_amount: T, - deposit_up_to_limit: Option, - ) -> anyhow::Result<(), BanksClientError> { - let mut ix = self - .make_bank_deposit_ix(funding_account, bank, ui_amount, deposit_up_to_limit) - .await; - - // If t22 with transfer hook, add remaining accounts - let fetch_account_data_fn = |key| async move { - Ok(self - .ctx - .borrow_mut() - .banks_client - .get_account(key) - .await - .map(|acc| acc.map(|a| a.data))?) - }; - let payer = self.ctx.borrow_mut().payer.pubkey(); - if bank.mint.token_program == spl_token_2022::ID { - // TODO: do that only if hook exists - println!( - "[TODO] Adding extra account metas for execute for mint {:?}", - bank.mint.key - ); - let _ = spl_transfer_hook_interface::offchain::add_extra_account_metas_for_execute( - &mut ix, - &super::transfer_hook::TEST_HOOK_ID, - &funding_account, - &bank.mint.key, - &bank.get_vault(BankVaultType::Liquidity).0, - &payer, - ui_to_native!(ui_amount.into(), bank.mint.mint.decimals), - fetch_account_data_fn, - ) - .await; - } - - let mut ctx = self.ctx.borrow_mut(); - let tx = Transaction::new_signed_with_payer( - &[ix], - Some(&ctx.payer.pubkey().clone()), - &[&ctx.payer], - ctx.last_blockhash, - ); - - ctx.banks_client.process_transaction(tx).await?; - - Ok(()) - } - - pub async fn make_bank_withdraw_ix>( - &self, - destination_account: Pubkey, - bank: &BankFixture, - ui_amount: T, - withdraw_all: Option, - ) -> Instruction { - let marginfi_account = self.load().await; - - let mut accounts = marginfi::accounts::LendingAccountWithdraw { - group: marginfi_account.group, - marginfi_account: self.key, - authority: self.ctx.borrow().payer.pubkey(), - bank: bank.key, - destination_token_account: destination_account, - liquidity_vault: bank.get_vault(BankVaultType::Liquidity).0, - bank_liquidity_vault_authority: bank.get_vault_authority(BankVaultType::Liquidity).0, - token_program: bank.get_token_program(), - } - .to_account_metas(Some(true)); - if bank.mint.token_program == spl_token_2022::ID { - accounts.push(AccountMeta::new_readonly(bank.mint.key, false)); - } - - let mut ix = Instruction { - program_id: marginfi::id(), - accounts, - data: marginfi::instruction::LendingAccountWithdraw { - amount: ui_to_native!(ui_amount.into(), bank.mint.mint.decimals), - withdraw_all, - } - .data(), - }; - - let exclude_vec = match withdraw_all.unwrap_or(false) { - true => vec![bank.key], - false => vec![], - }; - ix.accounts.extend_from_slice( - &self - .load_observation_account_metas(vec![], exclude_vec) - .await, - ); - - ix - } - - pub async fn try_bank_withdraw>( - &self, - destination_account: Pubkey, - bank: &BankFixture, - ui_amount: T, - withdraw_all: Option, - ) -> anyhow::Result<(), BanksClientError> { - let ix = self - .make_bank_withdraw_ix(destination_account, bank, ui_amount, withdraw_all) - .await; - - let mut ctx = self.ctx.borrow_mut(); - let tx = Transaction::new_signed_with_payer( - &[ix], - Some(&ctx.payer.pubkey().clone()), - &[&ctx.payer], - ctx.last_blockhash, - ); - - ctx.banks_client.process_transaction(tx).await?; - - Ok(()) - } - - pub async fn make_bank_borrow_ix>( - &self, - destination_account: Pubkey, - bank: &BankFixture, - ui_amount: T, - ) -> Instruction { - let marginfi_account = self.load().await; - - let mut accounts = marginfi::accounts::LendingAccountBorrow { - group: marginfi_account.group, - marginfi_account: self.key, - authority: self.ctx.borrow().payer.pubkey(), - bank: bank.key, - destination_token_account: destination_account, - liquidity_vault: bank.get_vault(BankVaultType::Liquidity).0, - bank_liquidity_vault_authority: bank.get_vault_authority(BankVaultType::Liquidity).0, - token_program: bank.get_token_program(), - } - .to_account_metas(Some(true)); - if bank.mint.token_program == spl_token_2022::ID { - accounts.push(AccountMeta::new_readonly(bank.mint.key, false)); - } - - let mut ix = Instruction { - program_id: marginfi::id(), - accounts, - data: marginfi::instruction::LendingAccountBorrow { - amount: ui_to_native!(ui_amount.into(), bank.mint.mint.decimals), - } - .data(), - }; - - ix.accounts.extend_from_slice( - &self - .load_observation_account_metas(vec![bank.key], vec![]) - .await, - ); - - ix - } - - pub async fn try_bank_borrow + Copy>( - &self, - destination_account: Pubkey, - bank: &BankFixture, - ui_amount: T, - ) -> anyhow::Result<(), BanksClientError> { - self.try_bank_borrow_with_nonce(destination_account, bank, ui_amount, 100) - .await - } - - pub async fn try_bank_borrow_with_nonce + Copy>( - &self, - destination_account: Pubkey, - bank: &BankFixture, - ui_amount: T, - nonce: u64, - ) -> anyhow::Result<(), BanksClientError> { - let mut ix = self - .make_bank_borrow_ix(destination_account, bank, ui_amount) - .await; - - if bank.mint.token_program == spl_token_2022::ID { - let fetch_account_data_fn = |key| async move { - Ok(self - .ctx - .borrow_mut() - .banks_client - .get_account(key) - .await - .map(|acc| acc.map(|a| a.data))?) - }; - - let payer = self.ctx.borrow().payer.pubkey(); - let _ = spl_transfer_hook_interface::offchain::add_extra_account_metas_for_execute( - &mut ix, - &super::transfer_hook::TEST_HOOK_ID, - &bank.get_vault(BankVaultType::Liquidity).0, - &bank.mint.key, - &destination_account, - &payer, - ui_to_native!(ui_amount.into(), bank.mint.mint.decimals), - fetch_account_data_fn, - ) - .await; - } - - let compute_budget_ix = ComputeBudgetInstruction::set_compute_unit_limit(1_400_000); - let nonce_ix = ComputeBudgetInstruction::set_compute_unit_price(nonce); - - let mut ctx = self.ctx.borrow_mut(); - let tx = Transaction::new_signed_with_payer( - &[compute_budget_ix, nonce_ix, ix], - Some(&ctx.payer.pubkey().clone()), - &[&ctx.payer], - ctx.last_blockhash, - ); - - ctx.banks_client.process_transaction(tx).await?; - - Ok(()) - } - - pub async fn make_bank_repay_ix>( - &self, - funding_account: Pubkey, - bank: &BankFixture, - ui_amount: T, - repay_all: Option, - ) -> Instruction { - let marginfi_account = self.load().await; - let ctx = self.ctx.borrow_mut(); - - let mut accounts = marginfi::accounts::LendingAccountRepay { - group: marginfi_account.group, - marginfi_account: self.key, - authority: ctx.payer.pubkey(), - bank: bank.key, - signer_token_account: funding_account, - liquidity_vault: bank.get_vault(BankVaultType::Liquidity).0, - token_program: bank.get_token_program(), - } - .to_account_metas(Some(true)); - if bank.mint.token_program == spl_token_2022::ID { - accounts.push(AccountMeta::new_readonly(bank.mint.key, false)); - } - - Instruction { - program_id: marginfi::id(), - accounts, - data: marginfi::instruction::LendingAccountRepay { - amount: ui_to_native!(ui_amount.into(), bank.mint.mint.decimals), - repay_all, - } - .data(), - } - } - - pub async fn try_bank_repay>( - &self, - funding_account: Pubkey, - bank: &BankFixture, - ui_amount: T, - repay_all: Option, - ) -> anyhow::Result<(), BanksClientError> { - let ix = self - .make_bank_repay_ix(funding_account, bank, ui_amount, repay_all) - .await; - let mut ctx = self.ctx.borrow_mut(); - let tx = Transaction::new_signed_with_payer( - &[ix], - Some(&ctx.payer.pubkey().clone()), - &[&ctx.payer], - ctx.last_blockhash, - ); - - ctx.banks_client.process_transaction(tx).await?; - - Ok(()) - } - - pub async fn try_balance_close( - &self, - bank: &BankFixture, - ) -> anyhow::Result<(), BanksClientError> { - let marginfi_account = self.load().await; - let mut ctx = self.ctx.borrow_mut(); - - let ix = Instruction { - program_id: marginfi::id(), - accounts: marginfi::accounts::LendingAccountCloseBalance { - group: marginfi_account.group, - marginfi_account: self.key, - authority: ctx.payer.pubkey(), - bank: bank.key, - } - .to_account_metas(Some(true)), - data: marginfi::instruction::LendingAccountCloseBalance.data(), - }; - - let tx = Transaction::new_signed_with_payer( - &[ix], - Some(&ctx.payer.pubkey().clone()), - &[&ctx.payer], - ctx.last_blockhash, - ); - - ctx.banks_client.process_transaction(tx).await?; - - Ok(()) - } - - pub async fn try_liquidate + Copy>( - &self, - liquidatee: &MarginfiAccountFixture, - asset_bank_fixture: &BankFixture, - asset_ui_amount: T, - liab_bank_fixture: &BankFixture, - ) -> std::result::Result<(), BanksClientError> { - let marginfi_account = self.load().await; - - let asset_bank = asset_bank_fixture.load().await; - let liab_bank = liab_bank_fixture.load().await; - - let mut accounts = marginfi::accounts::LendingAccountLiquidate { - group: marginfi_account.group, - asset_bank: asset_bank_fixture.key, - liab_bank: liab_bank_fixture.key, - liquidator_marginfi_account: self.key, - authority: self.ctx.borrow().payer.pubkey(), - liquidatee_marginfi_account: liquidatee.key, - bank_liquidity_vault_authority: liab_bank_fixture - .get_vault_authority(BankVaultType::Liquidity) - .0, - bank_liquidity_vault: liab_bank_fixture.get_vault(BankVaultType::Liquidity).0, - bank_insurance_vault: liab_bank_fixture.get_vault(BankVaultType::Insurance).0, - token_program: liab_bank_fixture.get_token_program(), - } - .to_account_metas(Some(true)); - - if liab_bank_fixture.mint.token_program == spl_token_2022::ID { - accounts.push(AccountMeta::new_readonly(liab_bank_fixture.mint.key, false)); - } - - let oracle_accounts = vec![asset_bank.config, liab_bank.config] - .iter() - .map(|config| { - AccountMeta::new_readonly( - { - match config.oracle_setup { - OracleSetup::PythPushOracle => { - get_oracle_id_from_feed_id(config.oracle_keys[0]).unwrap() - } - _ => config.oracle_keys[0], - } - }, - false, - ) - }) - .collect::>(); - - accounts.extend(oracle_accounts); - - let mut ix = Instruction { - program_id: marginfi::id(), - accounts, - data: marginfi::instruction::LendingAccountLiquidate { - asset_amount: ui_to_native!( - asset_ui_amount.into(), - asset_bank_fixture.mint.mint.decimals - ), - } - .data(), - }; - - if liab_bank_fixture.mint.token_program == spl_token_2022::ID { - let payer = self.ctx.borrow().payer.pubkey(); - let fetch_account_data_fn = |key| async move { - Ok(self - .ctx - .borrow_mut() - .banks_client - .get_account(key) - .await - .map(|acc| acc.map(|a| a.data))?) - }; - - let _ = spl_transfer_hook_interface::offchain::add_extra_account_metas_for_execute( - &mut ix, - &super::transfer_hook::TEST_HOOK_ID, - &liab_bank_fixture.mint.key, - &liab_bank_fixture.mint.key, - &liab_bank_fixture.mint.key, - &payer, - 0, - fetch_account_data_fn, - ) - .await; - } - - ix.accounts.extend_from_slice( - &self - .load_observation_account_metas( - vec![asset_bank_fixture.key, liab_bank_fixture.key], - vec![], - ) - .await, - ); - - ix.accounts.extend_from_slice( - &liquidatee - .load_observation_account_metas(vec![], vec![]) - .await, - ); - - let compute_budget_ix = ComputeBudgetInstruction::set_compute_unit_limit(1_400_000); - - let mut ctx = self.ctx.borrow_mut(); - let tx = Transaction::new_signed_with_payer( - &[compute_budget_ix, ix], - Some(&ctx.payer.pubkey().clone()), - &[&ctx.payer], - ctx.last_blockhash, - ); - - ctx.banks_client.process_transaction(tx).await - } - - pub async fn try_withdraw_emissions( - &self, - bank: &BankFixture, - recv_account: &TokenAccountFixture, - ) -> std::result::Result<(), BanksClientError> { - let emissions_mint = bank.load().await.emissions_mint; - let ix = Instruction { - program_id: marginfi::id(), - accounts: marginfi::accounts::LendingAccountWithdrawEmissions { - group: self.load().await.group, - marginfi_account: self.key, - authority: self.ctx.borrow().payer.pubkey(), - emissions_mint, - emissions_auth: get_emissions_authority_address(bank.key, emissions_mint).0, - emissions_vault: get_emissions_token_account_address(bank.key, emissions_mint).0, - destination_account: recv_account.key, - bank: bank.key, - token_program: recv_account.token_program, - } - .to_account_metas(Some(true)), - data: marginfi::instruction::LendingAccountWithdrawEmissions {}.data(), - }; - - let mut ctx = self.ctx.borrow_mut(); - let tx = Transaction::new_signed_with_payer( - &[ix], - Some(&ctx.payer.pubkey().clone()), - &[&ctx.payer], - ctx.last_blockhash, - ); - - ctx.banks_client.process_transaction(tx).await - } - - /// Set a flag on the account - /// - /// Function assumes signer is group admin - pub async fn try_set_flag(&self, flag: u64) -> std::result::Result<(), BanksClientError> { - let ix = Instruction { - program_id: marginfi::id(), - accounts: marginfi::accounts::SetAccountFlag { - group: self.load().await.group, - marginfi_account: self.key, - admin: self.ctx.borrow().payer.pubkey(), - } - .to_account_metas(Some(true)), - data: marginfi::instruction::SetAccountFlag { flag }.data(), - }; - - let mut ctx = self.ctx.borrow_mut(); - let tx = Transaction::new_signed_with_payer( - &[ix], - Some(&ctx.payer.pubkey().clone()), - &[&ctx.payer], - ctx.last_blockhash, - ); - - ctx.banks_client.process_transaction(tx).await - } - - /// Unset a flag on the account - /// - /// Function assumes signer is group admin - pub async fn try_unset_flag(&self, flag: u64) -> std::result::Result<(), BanksClientError> { - let ix = Instruction { - program_id: marginfi::id(), - accounts: marginfi::accounts::UnsetAccountFlag { - group: self.load().await.group, - marginfi_account: self.key, - admin: self.ctx.borrow().payer.pubkey(), - } - .to_account_metas(Some(true)), - data: marginfi::instruction::UnsetAccountFlag { flag }.data(), - }; - - let mut ctx = self.ctx.borrow_mut(); - let tx = Transaction::new_signed_with_payer( - &[ix], - Some(&ctx.payer.pubkey().clone()), - &[&ctx.payer], - ctx.last_blockhash, - ); - - ctx.banks_client.process_transaction(tx).await - } - - pub async fn make_lending_account_start_flashloan_ix(&self, end_index: u64) -> Instruction { - Instruction { - program_id: marginfi::id(), - accounts: marginfi::accounts::LendingAccountStartFlashloan { - marginfi_account: self.key, - authority: self.ctx.borrow().payer.pubkey(), - ixs_sysvar: sysvar::instructions::id(), - } - .to_account_metas(Some(true)), - data: marginfi::instruction::LendingAccountStartFlashloan { end_index }.data(), - } - } - - pub async fn make_lending_account_end_flashloan_ix( - &self, - include_banks: Vec, - exclude_banks: Vec, - ) -> Instruction { - let mut account_metas = marginfi::accounts::LendingAccountEndFlashloan { - marginfi_account: self.key, - authority: self.ctx.borrow().payer.pubkey(), - } - .to_account_metas(Some(true)); - - account_metas.extend( - self.load_observation_account_metas(include_banks, exclude_banks) - .await, - ); - - Instruction { - program_id: marginfi::id(), - accounts: account_metas, - data: marginfi::instruction::LendingAccountEndFlashloan {}.data(), - } - } - - /// Wrap `ixs` between a start and end flashloan instruction, - /// automatically sets the end index and send the transaction - pub async fn try_flashloan( - &self, - ixs: Vec, - exclude_banks: Vec, - include_banks: Vec, - ) -> std::result::Result<(), BanksClientError> { - let mut ixs = ixs; - let start_ix = self - .make_lending_account_start_flashloan_ix(ixs.len() as u64 + 1) - .await; - let end_ix = self - .make_lending_account_end_flashloan_ix(include_banks, exclude_banks) - .await; - - ixs.insert(0, start_ix); - ixs.push(end_ix); - - let mut ctx = self.ctx.borrow_mut(); - - let tx = Transaction::new_signed_with_payer( - &ixs, - Some(&ctx.payer.pubkey().clone()), - &[&ctx.payer], - ctx.last_blockhash, - ); - - ctx.banks_client.process_transaction(tx).await - } - - pub async fn load_observation_account_metas( - &self, - include_banks: Vec, - exclude_banks: Vec, - ) -> Vec { - let marginfi_account = self.load().await; - // Check all active banks in marginfi account balances - let mut bank_pks = marginfi_account - .lending_account - .balances - .iter() - .filter_map(|balance| { - if balance.is_active() { - Some(balance.bank_pk) - } else { - None - } - }) - .collect::>(); - - // Add bank pks in include_banks if they are not already in bank_pks - // (and exclude the ones contained in exclude_banks) - for bank_pk in include_banks { - if !bank_pks.contains(&bank_pk) { - bank_pks.push(bank_pk); - } - } - bank_pks.retain(|bank_pk| !exclude_banks.contains(bank_pk)); - - // Load all banks - let mut banks = vec![]; - for bank_pk in bank_pks.clone() { - let bank = load_and_deserialize::(self.ctx.clone(), &bank_pk).await; - banks.push(bank); - } - - // Bank -> AccountMetas - let account_metas = banks - .iter() - .zip(bank_pks.iter()) - .flat_map(|(bank, bank_pk)| { - let oracle_key = { - let oracle_key = bank.config.oracle_keys[0]; - match bank.config.oracle_setup { - OracleSetup::PythPushOracle => { - get_oracle_id_from_feed_id(oracle_key).unwrap() - } - _ => oracle_key, - } - }; - - vec![ - AccountMeta { - pubkey: *bank_pk, - is_signer: false, - is_writable: false, - }, - AccountMeta { - pubkey: oracle_key, - is_signer: false, - is_writable: false, - }, - ] - }) - .collect::>(); - account_metas - } - - pub async fn set_account(&self, mfi_account: &MarginfiAccount) -> anyhow::Result<()> { - let mut ctx = self.ctx.borrow_mut(); - let mut account = ctx.banks_client.get_account(self.key).await?.unwrap(); - let mut discriminator = account.data[..8].to_vec(); - let mut new_data = vec![]; - new_data.append(&mut discriminator); - new_data.append(&mut bytemuck::bytes_of(mfi_account).to_vec()); - account.data = new_data; - ctx.set_account(&self.key, &account.into()); - - Ok(()) - } - - pub async fn load(&self) -> MarginfiAccount { - load_and_deserialize::(self.ctx.clone(), &self.key).await - } - - pub fn get_size() -> usize { - mem::size_of::() + 8 - } - - async fn build_transfer_authority_tx( - &self, - new_authority: Pubkey, - signer_keypair: Option, - ) -> Transaction { - // Load account details - let marginfi_account = self.load().await; - let ctx = self.ctx.borrow(); - let signer = signer_keypair.unwrap_or_else(|| ctx.payer.insecure_clone()); - - // Create the transfer authority instruction - let transfer_account_authority_ix = Instruction { - program_id: marginfi::id(), - accounts: marginfi::accounts::MarginfiAccountSetAccountAuthority { - marginfi_account: self.key, - authority: signer.pubkey(), - new_authority, - fee_payer: signer.pubkey(), - group: marginfi_account.group, - } - .to_account_metas(None), - data: marginfi::instruction::SetNewAccountAuthority {}.data(), - }; - - // Build and sign the transaction - Transaction::new_signed_with_payer( - &[transfer_account_authority_ix], - Some(&signer.pubkey()), - &[&signer], - ctx.last_blockhash, - ) - } - - /// Use the client to send the transfer ix authority transaction - /// Pass the new authority as an argument - /// Optional: use a different signer (for negative test case) - pub async fn try_transfer_account_authority( - &self, - new_authority: Pubkey, - signer_keypair: Option, - ) -> std::result::Result<(), BanksClientError> { - let tx = self - .build_transfer_authority_tx(new_authority, signer_keypair) - .await; - let mut ctx = self.ctx.borrow_mut(); - ctx.banks_client.process_transaction(tx).await - } - - /// Use the client to get the transfer ix authority transaction - /// Pass the new authority as an argument - /// Optional: use a different signer (for negative test case) - pub async fn get_tx_transfer_account_authority( - &self, - new_authority: Pubkey, - signer_keypair: Option, - ) -> Transaction { - self.build_transfer_authority_tx(new_authority, signer_keypair) - .await - } - - pub async fn try_close_account(&self, nonce: u64) -> std::result::Result<(), BanksClientError> { - let mut ctx: std::cell::RefMut = self.ctx.borrow_mut(); - - let ix = Instruction { - program_id: marginfi::id(), - accounts: marginfi::accounts::MarginfiAccountClose { - marginfi_account: self.key, - authority: ctx.payer.pubkey(), - fee_payer: ctx.payer.pubkey(), - } - .to_account_metas(Some(true)), - data: marginfi::instruction::MarginfiAccountClose {}.data(), - }; - - let tx = Transaction::new_signed_with_payer( - &[ComputeBudgetInstruction::set_compute_unit_price(nonce), ix], - Some(&ctx.payer.pubkey().clone()), - &[&ctx.payer], - ctx.last_blockhash, - ); - - ctx.banks_client.process_transaction(tx).await - } -} diff --git a/test-utils/src/marginfi_group.rs b/test-utils/src/marginfi_group.rs deleted file mode 100644 index f2f9865c1..000000000 --- a/test-utils/src/marginfi_group.rs +++ /dev/null @@ -1,580 +0,0 @@ -use super::{bank::BankFixture, marginfi_account::MarginfiAccountFixture}; -use crate::prelude::{get_oracle_id_from_feed_id, MintFixture}; -use crate::utils::*; -use anchor_lang::{prelude::*, solana_program::system_program, InstructionData}; - -use anchor_spl::associated_token::get_associated_token_address_with_program_id; -use anyhow::Result; -use bytemuck::bytes_of; -use marginfi::constants::{ - FEE_STATE_SEED, INIT_BANK_ORIGINATION_FEE_DEFAULT, PROTOCOL_FEE_FIXED_DEFAULT, - PROTOCOL_FEE_RATE_DEFAULT, -}; -use marginfi::state::fee_state::FeeState; -use marginfi::state::marginfi_group::BankConfigCompact; -use marginfi::state::price::OracleSetup; -use marginfi::{ - prelude::MarginfiGroup, - state::marginfi_group::{BankConfig, BankConfigOpt, BankVaultType}, -}; -use solana_program::sysvar; -use solana_program_test::*; -use solana_sdk::system_transaction; -use solana_sdk::{ - compute_budget::ComputeBudgetInstruction, instruction::Instruction, signature::Keypair, - signer::Signer, transaction::Transaction, -}; -use std::{cell::RefCell, mem, rc::Rc}; - -async fn airdrop_sol(context: &mut ProgramTestContext, key: &Pubkey, amount: u64) { - let recent_blockhash = context.banks_client.get_latest_blockhash().await.unwrap(); - let tx = system_transaction::transfer(&context.payer, key, amount, recent_blockhash); - context.banks_client.process_transaction(tx).await.unwrap(); -} - -pub struct MarginfiGroupFixture { - ctx: Rc>, - pub key: Pubkey, - pub fee_state: Pubkey, - pub fee_wallet: Pubkey, -} - -impl MarginfiGroupFixture { - pub async fn new(ctx: Rc>) -> MarginfiGroupFixture { - let ctx_ref = ctx.clone(); - - let group_key = Keypair::new(); - let fee_wallet_key: Pubkey; - let (fee_state_key, _bump) = - Pubkey::find_program_address(&[FEE_STATE_SEED.as_bytes()], &marginfi::id()); - - { - let mut ctx = ctx.borrow_mut(); - let admin = ctx.payer.pubkey(); - - let initialize_marginfi_group_ix = Instruction { - program_id: marginfi::id(), - accounts: marginfi::accounts::MarginfiGroupInitialize { - marginfi_group: group_key.pubkey(), - admin, - fee_state: fee_state_key, - system_program: system_program::id(), - } - .to_account_metas(Some(true)), - data: marginfi::instruction::MarginfiGroupInitialize { - is_arena_group: false, - } - .data(), - }; - - let configure_marginfi_group_ix = Instruction { - program_id: marginfi::id(), - accounts: marginfi::accounts::MarginfiGroupConfigure { - marginfi_group: group_key.pubkey(), - admin, - } - .to_account_metas(Some(true)), - data: marginfi::instruction::MarginfiGroupConfigure { - new_admin: admin, - is_arena_group: false, - } - .data(), - }; - - // Check if the fee state account already exists - let fee_state_account = ctx.banks_client.get_account(fee_state_key).await.unwrap(); - - // Account exists, read it and proceed with group initialization - if let Some(account) = fee_state_account { - if !account.data.is_empty() { - // Deserialize the account data to extract the fee_wallet public key - let fee_state_data: FeeState = - FeeState::try_deserialize(&mut &account.data[..]).unwrap(); - fee_wallet_key = fee_state_data.global_fee_wallet; - - let tx = Transaction::new_signed_with_payer( - &[initialize_marginfi_group_ix, configure_marginfi_group_ix], - Some(&ctx.payer.pubkey().clone()), - &[&ctx.payer, &group_key], - ctx.last_blockhash, - ); - ctx.banks_client.process_transaction(tx).await.unwrap(); - } else { - panic!("Fee state exists but is empty") - } - } else { - // Account does not exist, proceed with group and fee state initialization - let fee_wallet = Keypair::new(); - // The wallet needs some sol to be rent exempt - airdrop_sol(&mut ctx, &fee_wallet.pubkey(), 1_000_000).await; - fee_wallet_key = fee_wallet.pubkey(); - - let init_fee_state_ix = Instruction { - program_id: marginfi::id(), - accounts: marginfi::accounts::InitFeeState { - payer: ctx.payer.pubkey(), - fee_state: fee_state_key, - rent: sysvar::rent::id(), - system_program: system_program::id(), - } - .to_account_metas(Some(true)), - data: marginfi::instruction::InitGlobalFeeState { - admin: ctx.payer.pubkey(), - fee_wallet: fee_wallet.pubkey(), - bank_init_flat_sol_fee: INIT_BANK_ORIGINATION_FEE_DEFAULT, - program_fee_fixed: PROTOCOL_FEE_FIXED_DEFAULT.into(), - program_fee_rate: PROTOCOL_FEE_RATE_DEFAULT.into(), - } - .data(), - }; - - let tx = Transaction::new_signed_with_payer( - &[ - init_fee_state_ix, - initialize_marginfi_group_ix, - configure_marginfi_group_ix, - ], - Some(&ctx.payer.pubkey().clone()), - &[&ctx.payer, &group_key], - ctx.last_blockhash, - ); - ctx.banks_client.process_transaction(tx).await.unwrap(); - } - } - - MarginfiGroupFixture { - ctx: ctx_ref.clone(), - key: group_key.pubkey(), - fee_state: fee_state_key, - fee_wallet: fee_wallet_key, - } - } - - /// Adds bank and configures the oracle. - /// - /// Note: AddBank and LendingPoolConfigureBankOracle were seperated to handle a tx size issue in - /// squads. This test fixture packs both ixes into one tx as is typical outside of squads. - pub async fn try_lending_pool_add_bank( - &self, - bank_asset_mint_fixture: &MintFixture, - bank_config: BankConfig, - ) -> Result { - let bank_key = Keypair::new(); - let bank_mint = bank_asset_mint_fixture.key; - let bank_fixture = - BankFixture::new(self.ctx.clone(), bank_key.pubkey(), bank_asset_mint_fixture); - let config_compact: BankConfigCompact = bank_config.into(); - - let accounts = marginfi::accounts::LendingPoolAddBank { - marginfi_group: self.key, - admin: self.ctx.borrow().payer.pubkey(), - fee_payer: self.ctx.borrow().payer.pubkey(), - fee_state: self.fee_state, - global_fee_wallet: self.fee_wallet, - bank_mint, - bank: bank_key.pubkey(), - liquidity_vault_authority: bank_fixture.get_vault_authority(BankVaultType::Liquidity).0, - liquidity_vault: bank_fixture.get_vault(BankVaultType::Liquidity).0, - insurance_vault_authority: bank_fixture.get_vault_authority(BankVaultType::Insurance).0, - insurance_vault: bank_fixture.get_vault(BankVaultType::Insurance).0, - fee_vault_authority: bank_fixture.get_vault_authority(BankVaultType::Fee).0, - fee_vault: bank_fixture.get_vault(BankVaultType::Fee).0, - rent: sysvar::rent::id(), - token_program: bank_asset_mint_fixture.token_program, - system_program: system_program::id(), - } - .to_account_metas(Some(true)); - - let init_ix = Instruction { - program_id: marginfi::id(), - accounts, - data: marginfi::instruction::LendingPoolAddBank { - bank_config: config_compact, - } - .data(), - }; - - let feed_oracle = { - if bank_config.oracle_setup == OracleSetup::PythPushOracle - || bank_config.oracle_setup == OracleSetup::StakedWithPythPush - { - Some(get_oracle_id_from_feed_id(bank_config.oracle_keys[0]).unwrap()) - } else { - None - } - }; - - let config_oracle_ix = self.make_lending_pool_configure_bank_oracle_ix( - &bank_fixture, - bank_config.oracle_setup as u8, - bank_config.oracle_keys[0], - feed_oracle, - ); - - let tx = Transaction::new_signed_with_payer( - &[init_ix, config_oracle_ix], - Some(&self.ctx.borrow().payer.pubkey().clone()), - &[&self.ctx.borrow().payer, &bank_key], - self.ctx.borrow().last_blockhash, - ); - - self.ctx - .borrow_mut() - .banks_client - .process_transaction(tx) - .await?; - - Ok(bank_fixture) - } - - /// Adds bank and configures the oracle. - /// - /// Note: AddBank and LendingPoolConfigureBankOracle were seperated to handle a tx size issue in - /// squads. This test fixture packs both ixes into one tx as is typical outside of squads. - pub async fn try_lending_pool_add_bank_with_seed( - &self, - bank_asset_mint_fixture: &MintFixture, - bank_config: BankConfig, - bank_seed: u64, - ) -> Result { - let bank_mint = bank_asset_mint_fixture.key; - - // Create PDA account from seeds - let (pda, _bump) = Pubkey::find_program_address( - [ - self.key.as_ref(), - bank_mint.as_ref(), - &bank_seed.to_le_bytes(), - ] - .as_slice(), - &marginfi::id(), - ); - - let bank_mint = bank_asset_mint_fixture.key; - let bank_fixture = BankFixture::new(self.ctx.clone(), pda, bank_asset_mint_fixture); - let config_compact: BankConfigCompact = bank_config.into(); - - let accounts = marginfi::accounts::LendingPoolAddBankWithSeed { - marginfi_group: self.key, - admin: self.ctx.borrow().payer.pubkey(), - fee_payer: self.ctx.borrow().payer.pubkey(), - fee_state: self.fee_state, - global_fee_wallet: self.fee_wallet, - bank_mint, - bank: pda, - liquidity_vault_authority: bank_fixture.get_vault_authority(BankVaultType::Liquidity).0, - liquidity_vault: bank_fixture.get_vault(BankVaultType::Liquidity).0, - insurance_vault_authority: bank_fixture.get_vault_authority(BankVaultType::Insurance).0, - insurance_vault: bank_fixture.get_vault(BankVaultType::Insurance).0, - fee_vault_authority: bank_fixture.get_vault_authority(BankVaultType::Fee).0, - fee_vault: bank_fixture.get_vault(BankVaultType::Fee).0, - rent: sysvar::rent::id(), - token_program: bank_fixture.get_token_program(), - system_program: system_program::id(), - } - .to_account_metas(Some(true)); - - let init_ix = Instruction { - program_id: marginfi::id(), - accounts, - data: marginfi::instruction::LendingPoolAddBankWithSeed { - bank_config: config_compact, - bank_seed, - } - .data(), - }; - - let feed_oracle = { - if bank_config.oracle_setup == OracleSetup::PythPushOracle - || bank_config.oracle_setup == OracleSetup::StakedWithPythPush - { - let id = get_oracle_id_from_feed_id(bank_config.oracle_keys[0]); - if id.is_none() { - panic!("Unsupported Pyth feed ID, this should never happen"); - } - id - } else { - None - } - }; - - let config_oracle_ix = self.make_lending_pool_configure_bank_oracle_ix( - &bank_fixture, - bank_config.oracle_setup as u8, - bank_config.oracle_keys[0], - feed_oracle, - ); - - let tx = Transaction::new_signed_with_payer( - &[init_ix, config_oracle_ix], - Some(&self.ctx.borrow().payer.pubkey().clone()), - &[&self.ctx.borrow().payer], - self.ctx.borrow().last_blockhash, - ); - - self.ctx - .borrow_mut() - .banks_client - .process_transaction(tx) - .await?; - - Ok(bank_fixture) - } - - pub fn make_lending_pool_configure_bank_ix( - &self, - bank: &BankFixture, - bank_config_opt: BankConfigOpt, - ) -> Instruction { - let accounts = marginfi::accounts::LendingPoolConfigureBank { - bank: bank.key, - group: self.key, - admin: self.ctx.borrow().payer.pubkey(), - } - .to_account_metas(Some(true)); - - Instruction { - program_id: marginfi::id(), - accounts, - data: marginfi::instruction::LendingPoolConfigureBank { bank_config_opt }.data(), - } - } - - pub fn make_lending_pool_configure_bank_oracle_ix( - &self, - bank: &BankFixture, - setup: u8, - oracle: Pubkey, - feed_oracle: Option, - ) -> Instruction { - let mut accounts = marginfi::accounts::LendingPoolConfigureBankOracle { - bank: bank.key, - group: self.key, - admin: self.ctx.borrow().payer.pubkey(), - } - .to_account_metas(Some(true)); - - accounts.push(AccountMeta::new_readonly( - feed_oracle.unwrap_or(oracle), - false, - )); - - Instruction { - program_id: marginfi::id(), - accounts, - data: marginfi::instruction::LendingPoolConfigureBankOracle { setup, oracle }.data(), - } - } - - pub async fn try_lending_pool_configure_bank( - &self, - bank: &BankFixture, - bank_config_opt: BankConfigOpt, - ) -> Result<(), BanksClientError> { - let ix = self.make_lending_pool_configure_bank_ix(bank, bank_config_opt); - let tx = Transaction::new_signed_with_payer( - &[ix], - Some(&self.ctx.borrow().payer.pubkey().clone()), - &[&self.ctx.borrow().payer], - self.ctx.borrow().last_blockhash, - ); - - self.ctx - .borrow_mut() - .banks_client - .process_transaction(tx) - .await?; - - Ok(()) - } - - pub async fn try_accrue_interest(&self, bank: &BankFixture) -> Result<()> { - let mut ctx = self.ctx.borrow_mut(); - - let ix = Instruction { - program_id: marginfi::id(), - accounts: marginfi::accounts::LendingPoolAccrueBankInterest { - group: self.key, - bank: bank.key, - } - .to_account_metas(Some(true)), - data: marginfi::instruction::LendingPoolAccrueBankInterest {}.data(), - }; - - let tx = Transaction::new_signed_with_payer( - &[ix], - Some(&ctx.payer.pubkey().clone()), - &[&ctx.payer], - ctx.last_blockhash, - ); - - ctx.banks_client.process_transaction(tx).await?; - - Ok(()) - } - - pub async fn try_update( - &self, - new_admin: Pubkey, - is_arena_group: bool, - ) -> Result<(), BanksClientError> { - let ix = Instruction { - program_id: marginfi::id(), - accounts: marginfi::accounts::MarginfiGroupConfigure { - marginfi_group: self.key, - admin: self.ctx.borrow().payer.pubkey(), - } - .to_account_metas(Some(true)), - data: marginfi::instruction::MarginfiGroupConfigure { - new_admin, - is_arena_group, - } - .data(), - }; - - let tx = Transaction::new_signed_with_payer( - &[ix], - Some(&self.ctx.borrow().payer.pubkey().clone()), - &[&self.ctx.borrow().payer], - self.ctx.borrow().last_blockhash, - ); - - self.ctx - .borrow_mut() - .banks_client - .process_transaction(tx) - .await?; - - Ok(()) - } - - pub async fn try_collect_fees(&self, bank: &BankFixture) -> Result<()> { - let mut ctx = self.ctx.borrow_mut(); - - let fee_ata = get_associated_token_address_with_program_id( - &self.fee_wallet, - &bank.mint.key, - &bank.get_token_program(), - ); - - let mut accounts = marginfi::accounts::LendingPoolCollectBankFees { - group: self.key, - bank: bank.key, - liquidity_vault_authority: bank.get_vault_authority(BankVaultType::Liquidity).0, - liquidity_vault: bank.get_vault(BankVaultType::Liquidity).0, - insurance_vault: bank.get_vault(BankVaultType::Insurance).0, - fee_vault: bank.get_vault(BankVaultType::Fee).0, - token_program: bank.get_token_program(), - fee_state: self.fee_state, - fee_ata, - } - .to_account_metas(Some(true)); - if bank.mint.token_program == spl_token_2022::ID { - accounts.push(AccountMeta::new_readonly(bank.mint.key, false)); - } - - let ix = Instruction { - program_id: marginfi::id(), - accounts, - data: marginfi::instruction::LendingPoolCollectBankFees {}.data(), - }; - - let tx = Transaction::new_signed_with_payer( - &[ix], - Some(&ctx.payer.pubkey().clone()), - &[&ctx.payer], - ctx.last_blockhash, - ); - - ctx.banks_client.process_transaction(tx).await?; - - Ok(()) - } - - pub async fn try_handle_bankruptcy( - &self, - bank: &BankFixture, - marginfi_account: &MarginfiAccountFixture, - ) -> Result<(), BanksClientError> { - self.try_handle_bankruptcy_with_nonce(bank, marginfi_account, 100) - .await - } - - pub async fn try_handle_bankruptcy_with_nonce( - &self, - bank: &BankFixture, - marginfi_account: &MarginfiAccountFixture, - nonce: u64, - ) -> Result<(), BanksClientError> { - let mut accounts = marginfi::accounts::LendingPoolHandleBankruptcy { - group: self.key, - signer: self.ctx.borrow().payer.pubkey(), - bank: bank.key, - marginfi_account: marginfi_account.key, - liquidity_vault: bank.get_vault(BankVaultType::Liquidity).0, - insurance_vault: bank.get_vault(BankVaultType::Insurance).0, - insurance_vault_authority: bank.get_vault_authority(BankVaultType::Insurance).0, - token_program: bank.get_token_program(), - } - .to_account_metas(Some(true)); - if bank.mint.token_program == spl_token_2022::ID { - accounts.push(AccountMeta::new_readonly(bank.mint.key, false)); - } - - accounts.append( - &mut marginfi_account - .load_observation_account_metas(vec![], vec![]) - .await, - ); - - let mut ctx = self.ctx.borrow_mut(); - - let ix = Instruction { - program_id: marginfi::id(), - accounts, - data: marginfi::instruction::LendingPoolHandleBankruptcy {}.data(), - }; - - let nonce_ix = ComputeBudgetInstruction::set_compute_unit_price(nonce); - - let tx = Transaction::new_signed_with_payer( - &[ix, nonce_ix], - Some(&ctx.payer.pubkey()), - &[&ctx.payer], - ctx.last_blockhash, - ); - - ctx.banks_client.process_transaction(tx).await - } - - pub fn get_size() -> usize { - 8 + mem::size_of::() - } - - pub async fn load(&self) -> marginfi::state::marginfi_group::MarginfiGroup { - load_and_deserialize::( - self.ctx.clone(), - &self.key, - ) - .await - } - - pub async fn set_protocol_fees_flag(&self, enabled: bool) { - let mut group = self.load().await; - let mut ctx = self.ctx.borrow_mut(); - let mut account = ctx - .banks_client - .get_account(self.key) - .await - .unwrap() - .unwrap(); - - group.group_flags = if enabled { 1 } else { 0 }; - - let data = bytes_of(&group); - - account.data[8..].copy_from_slice(data); - - ctx.set_account(&self.key, &account.into()) - } -} diff --git a/test-utils/src/prelude.rs b/test-utils/src/prelude.rs deleted file mode 100644 index 775808382..000000000 --- a/test-utils/src/prelude.rs +++ /dev/null @@ -1 +0,0 @@ -pub use crate::{marginfi_group::*, spl::*, test::*, utils::*}; diff --git a/test-utils/src/spl.rs b/test-utils/src/spl.rs deleted file mode 100644 index 01346e0a0..000000000 --- a/test-utils/src/spl.rs +++ /dev/null @@ -1,722 +0,0 @@ -use crate::{transfer_hook::TEST_HOOK_ID, ui_to_native}; -use anchor_lang::prelude::*; -use anchor_spl::{ - associated_token::{ - get_associated_token_address_with_program_id, - spl_associated_token_account::instruction::create_associated_token_account, - }, - token::{spl_token, Mint, TokenAccount}, - token_2022::{ - self, - spl_token_2022::{ - self, - extension::{ - interest_bearing_mint::InterestBearingConfig, - mint_close_authority::MintCloseAuthority, permanent_delegate::PermanentDelegate, - transfer_fee::TransferFee, transfer_hook::TransferHook, BaseState, - BaseStateWithExtensions, ExtensionType, StateWithExtensionsOwned, - }, - }, - }, - token_interface::spl_pod::bytemuck::pod_get_packed_len, -}; -use solana_cli_output::CliAccount; -use solana_program_test::ProgramTestContext; -use solana_sdk::{ - account::{AccountSharedData, ReadableAccount, WritableAccount}, - instruction::Instruction, - native_token::LAMPORTS_PER_SOL, - program_pack::{Pack, Sealed}, - signature::Keypair, - signer::Signer, - system_instruction::{self, create_account}, - transaction::Transaction, -}; -use spl_transfer_hook_interface::{ - get_extra_account_metas_address, instruction::initialize_extra_account_meta_list, -}; -use std::{cell::RefCell, fs::File, io::Read, path::PathBuf, rc::Rc, str::FromStr}; - -#[derive(Clone)] -pub struct MintFixture { - pub ctx: Rc>, - pub key: Pubkey, - pub mint: spl_token_2022::state::Mint, - pub token_program: Pubkey, -} - -impl MintFixture { - pub async fn new( - ctx: Rc>, - mint_keypair: Option, - mint_decimals: Option, - ) -> MintFixture { - let ctx_ref = Rc::clone(&ctx); - let keypair = mint_keypair.unwrap_or_else(Keypair::new); - let mint = { - let mut ctx = ctx.borrow_mut(); - - let rent = ctx.banks_client.get_rent().await.unwrap(); - - let init_account_ix = create_account( - &ctx.payer.pubkey(), - &keypair.pubkey(), - rent.minimum_balance(Mint::LEN), - Mint::LEN as u64, - &spl_token::id(), - ); - let init_mint_ix = spl_token::instruction::initialize_mint( - &spl_token::id(), - &keypair.pubkey(), - &ctx.payer.pubkey(), - None, - mint_decimals.unwrap_or(6), - ) - .unwrap(); - - let tx = Transaction::new_signed_with_payer( - &[init_account_ix, init_mint_ix], - Some(&ctx.payer.pubkey()), - &[&ctx.payer, &keypair], - ctx.last_blockhash, - ); - - ctx.banks_client.process_transaction(tx).await.unwrap(); - - let mint_account = ctx - .banks_client - .get_account(keypair.pubkey()) - .await - .unwrap() - .unwrap(); - - spl_token_2022::state::Mint::unpack(mint_account.data.as_slice()).unwrap() - }; - - MintFixture { - ctx: ctx_ref, - key: keypair.pubkey(), - mint, - token_program: spl_token::id(), - } - } - - pub async fn new_token_22( - ctx: Rc>, - mint_keypair: Option, - mint_decimals: Option, - extensions: &[SupportedExtension], - ) -> MintFixture { - let ctx_ref = Rc::clone(&ctx); - let keypair = mint_keypair.unwrap_or_else(Keypair::new); - let program = token_2022::ID; - let mint = { - let mut ctx = ctx.borrow_mut(); - - let rent = ctx.banks_client.get_rent().await.unwrap(); - - let extension_types = SupportedExtension::types(extensions.iter()); - let len = ExtensionType::try_calculate_account_len::( - &extension_types, - ) - .unwrap(); - let init_account_ix = create_account( - &ctx.payer.pubkey(), - &keypair.pubkey(), - rent.minimum_balance(len), - len as u64, - &program, - ); - let init_mint_ix = spl_token_2022::instruction::initialize_mint( - &program, - &keypair.pubkey(), - &ctx.payer.pubkey(), - None, - mint_decimals.unwrap_or(6), - ) - .unwrap(); - - let mut ixs = vec![init_account_ix]; - ixs.extend( - extensions - .iter() - .map(|e| e.instruction(&keypair.pubkey(), &ctx.payer.pubkey())), - ); - ixs.push(init_mint_ix); - let extra_metas_address = get_extra_account_metas_address( - &keypair.pubkey(), - &super::transfer_hook::TEST_HOOK_ID, - ); - if extensions.contains(&SupportedExtension::TransferHook) { - ixs.push(system_instruction::transfer( - &ctx.payer.pubkey(), - &extra_metas_address, - 10 * LAMPORTS_PER_SOL, - )); - ixs.push(initialize_extra_account_meta_list( - &super::transfer_hook::TEST_HOOK_ID, - &extra_metas_address, - &keypair.pubkey(), - &ctx.payer.pubkey(), - &[], - )) - } - - let tx = Transaction::new_signed_with_payer( - &ixs, - Some(&ctx.payer.pubkey()), - &[&ctx.payer, &keypair], - ctx.last_blockhash, - ); - - ctx.banks_client.process_transaction(tx).await.unwrap(); - - if extensions.contains(&SupportedExtension::TransferHook) { - ctx.banks_client - .get_account(extra_metas_address) - .await - .unwrap() - .unwrap(); - } - - let mint_account = ctx - .banks_client - .get_account(keypair.pubkey()) - .await - .unwrap() - .unwrap(); - - StateWithExtensionsOwned::::unpack(mint_account.data) - .unwrap() - .base - }; - - MintFixture { - ctx: ctx_ref, - key: keypair.pubkey(), - mint, - token_program: token_2022::ID, - } - } - - pub fn new_from_file( - ctx: &Rc>, - relative_path: &str, - ) -> MintFixture { - let ctx_ref = Rc::clone(ctx); - - let (address, account_info) = { - let mut ctx = ctx.borrow_mut(); - - // load cargo workspace path from env - let mut path = PathBuf::from_str(env!("CARGO_MANIFEST_DIR")).unwrap(); - path.push(relative_path); - let mut file = File::open(&path).unwrap(); - let mut account_info_raw = String::new(); - file.read_to_string(&mut account_info_raw).unwrap(); - - let account: CliAccount = serde_json::from_str(&account_info_raw).unwrap(); - let address = Pubkey::from_str(&account.keyed_account.pubkey).unwrap(); - let mut account_info: AccountSharedData = - account.keyed_account.account.decode().unwrap(); - - let mut mint = - spl_token::state::Mint::unpack(&account_info.data()[..Mint::LEN]).unwrap(); - let payer = ctx.payer.pubkey(); - mint.mint_authority.replace(payer); - - let mint_bytes = &mut [0; Mint::LEN]; - spl_token::state::Mint::pack(mint, mint_bytes).unwrap(); - - account_info.data_as_mut_slice()[..Mint::LEN].copy_from_slice(mint_bytes); - - ctx.set_account(&address, &account_info); - - (address, account_info) - }; - - let mint = spl_token_2022::state::Mint::unpack(&account_info.data()[..Mint::LEN]).unwrap(); - - MintFixture { - ctx: ctx_ref, - key: address, - mint, - token_program: account_info.owner().to_owned(), - } - } - - #[allow(unused)] - pub async fn reload(&mut self) { - let mint_account = self - .ctx - .borrow_mut() - .banks_client - .get_account(self.key) - .await - .unwrap() - .unwrap(); - self.mint = - StateWithExtensionsOwned::::unpack(mint_account.data) - .unwrap() - .base; - } - - pub async fn mint_to>(&mut self, dest: &Pubkey, ui_amount: T) { - let tx = { - let ctx = self.ctx.borrow(); - let mint_to_ix = - self.make_mint_to_ix(dest, ui_to_native!(ui_amount.into(), self.mint.decimals)); - Transaction::new_signed_with_payer( - &[mint_to_ix], - Some(&ctx.payer.pubkey()), - &[&ctx.payer], - ctx.last_blockhash, - ) - }; - - self.ctx - .borrow_mut() - .banks_client - .process_transaction(tx) - .await - .unwrap(); - - self.reload().await - } - - pub fn make_mint_to_ix(&self, dest: &Pubkey, amount: u64) -> Instruction { - let ctx = self.ctx.borrow(); - spl_token_2022::instruction::mint_to( - &self.token_program, - &self.key, - dest, - &ctx.payer.pubkey(), - &[&ctx.payer.pubkey()], - amount, - ) - .unwrap() - } - - pub async fn create_empty_token_account(&self) -> TokenAccountFixture { - self.create_token_account_and_mint_to(0.0).await - } - - pub async fn create_token_account_and_mint_to<'a, T: Into>( - &self, - ui_amount: T, - ) -> TokenAccountFixture { - let payer = self.ctx.borrow().payer.pubkey(); - let token_account_f = TokenAccountFixture::new_with_token_program( - self.ctx.clone(), - &self.key, - &payer, - &self.token_program, - ) - .await; - - let mint_to_ix = self.make_mint_to_ix( - &token_account_f.key, - ui_to_native!(ui_amount.into(), self.mint.decimals), - ); - - let mut ctx = self.ctx.borrow_mut(); - - let tx = Transaction::new_signed_with_payer( - &[mint_to_ix], - Some(&ctx.payer.pubkey()), - &[&ctx.payer], - ctx.last_blockhash, - ); - - ctx.banks_client.process_transaction(tx).await.unwrap(); - - token_account_f - } - - pub async fn load_state(&self) -> StateWithExtensionsOwned { - let mint_account = self - .ctx - .borrow_mut() - .banks_client - .get_account(self.key) - .await - .unwrap() - .unwrap(); - - StateWithExtensionsOwned::unpack(mint_account.data).unwrap() - } -} - -pub struct TokenAccountFixture { - ctx: Rc>, - pub key: Pubkey, - pub token: spl_token_2022::state::Account, - pub token_program: Pubkey, -} - -impl TokenAccountFixture { - pub async fn create_ixs( - ctx: &Rc>, - rent: Rent, - mint_pk: &Pubkey, - payer_pk: &Pubkey, - owner_pk: &Pubkey, - keypair: &Keypair, - token_program: &Pubkey, - ) -> Vec { - let mut ixs = vec![]; - - // Get extensions if t22 (should return no exts if spl_token) - // 1) Fetch mint - let mint_account = ctx - .borrow_mut() - .banks_client - .get_account(*mint_pk) - .await - .unwrap() - .unwrap(); - let mint_exts = - spl_token_2022::extension::StateWithExtensions::::unpack( - &mint_account.data, - ) - .unwrap(); - - let mint_extensions = mint_exts.get_extension_types().unwrap(); - let required_extensions = - ExtensionType::get_required_init_account_extensions(&mint_extensions); - - let space = ExtensionType::try_calculate_account_len::( - &required_extensions, - ) - .unwrap(); - - // Init account - ixs.push(create_account( - payer_pk, - &keypair.pubkey(), - rent.minimum_balance(space), - space as u64, - token_program, - )); - - // 2) Add instructions - if required_extensions.contains(&ExtensionType::ImmutableOwner) { - ixs.push( - spl_token_2022::instruction::initialize_immutable_owner( - token_program, - &keypair.pubkey(), - ) - .unwrap(), - ) - } - - // Token Account init - ixs.push( - spl_token_2022::instruction::initialize_account( - token_program, - &keypair.pubkey(), - mint_pk, - owner_pk, - ) - .unwrap(), - ); - - ixs - } - - pub async fn new_account(&self) -> Pubkey { - let keypair = Keypair::new(); - let mut ctx = self.ctx.borrow_mut(); - - let ixs = Self::create_ixs( - &self.ctx, - ctx.banks_client.get_rent().await.unwrap(), - &self.token.mint, - &ctx.payer.pubkey(), - &ctx.payer.pubkey(), - &keypair, - &self.token_program, - ) - .await; - - let tx = Transaction::new_signed_with_payer( - &ixs, - Some(&ctx.payer.pubkey()), - &[&ctx.payer, &keypair], - ctx.last_blockhash, - ); - - ctx.banks_client.process_transaction(tx).await.unwrap(); - - keypair.pubkey() - } - - #[allow(unused)] - pub async fn new_with_keypair( - ctx: Rc>, - mint_pk: &Pubkey, - owner_pk: &Pubkey, - keypair: &Keypair, - token_program: &Pubkey, - ) -> Self { - let ctx_ref = ctx.clone(); - - { - let payer = ctx.borrow().payer.pubkey(); - let rent = ctx.borrow_mut().banks_client.get_rent().await.unwrap(); - let instructions = Self::create_ixs( - &ctx, - rent, - mint_pk, - &payer, - owner_pk, - keypair, - token_program, - ) - .await; - - // Token extensions - - let tx = Transaction::new_signed_with_payer( - &instructions, - Some(&ctx.borrow().payer.pubkey()), - &[&ctx.borrow().payer, keypair], - ctx.borrow().last_blockhash, - ); - - ctx.borrow_mut() - .banks_client - .process_transaction(tx) - .await - .unwrap(); - } - - let mut ctx = ctx.borrow_mut(); - let account = ctx - .banks_client - .get_account(keypair.pubkey()) - .await - .unwrap() - .unwrap(); - - Self { - ctx: ctx_ref.clone(), - key: keypair.pubkey(), - token: StateWithExtensionsOwned::::unpack(account.data) - .unwrap() - .base, - token_program: *token_program, - } - } - - pub async fn new_from_ata( - ctx: Rc>, - mint_pk: &Pubkey, - owner_pk: &Pubkey, - token_program: &Pubkey, - ) -> Self { - let ctx_ref = ctx.clone(); - let ata_address = - get_associated_token_address_with_program_id(owner_pk, mint_pk, token_program); - - { - let create_ata_ix = create_associated_token_account( - &ctx.borrow().payer.pubkey(), - owner_pk, - mint_pk, - token_program, - ); - - let tx = Transaction::new_signed_with_payer( - &[create_ata_ix], - Some(&ctx.borrow().payer.pubkey()), - &[&ctx.borrow().payer], - ctx.borrow().last_blockhash, - ); - - ctx.borrow_mut() - .banks_client - .process_transaction(tx) - .await - .unwrap(); - } - - // Now retrieve the account info for the newly created ATA - let mut ctx = ctx.borrow_mut(); - let account = ctx - .banks_client - .get_account(ata_address) - .await - .unwrap() - .unwrap(); - - Self { - ctx: ctx_ref.clone(), - key: ata_address, // Use the ATA address as the key - token: StateWithExtensionsOwned::::unpack(account.data) - .unwrap() - .base, - token_program: *token_program, - } - } - - pub async fn new( - ctx: Rc>, - mint_fixture: &MintFixture, - owner_pk: &Pubkey, - ) -> TokenAccountFixture { - let keypair = Keypair::new(); - let mint_pk = mint_fixture.key; - TokenAccountFixture::new_with_keypair( - ctx, - &mint_pk, - owner_pk, - &keypair, - &mint_fixture.token_program, - ) - .await - } - - pub async fn new_with_token_program( - ctx: Rc>, - mint_pk: &Pubkey, - owner_pk: &Pubkey, - token_program: &Pubkey, - ) -> TokenAccountFixture { - let keypair = Keypair::new(); - TokenAccountFixture::new_with_keypair(ctx, mint_pk, owner_pk, &keypair, token_program).await - } - - pub async fn fetch( - ctx: Rc>, - address: Pubkey, - ) -> TokenAccountFixture { - let token: spl_token_2022::state::Account = - get_and_deserialize_t22(ctx.clone(), address).await; - let token_program = token.owner; - - Self { - ctx: ctx.clone(), - key: address, - token, - token_program, - } - } - - pub async fn balance(&self) -> u64 { - let token_account: spl_token_2022::state::Account = - get_and_deserialize_t22(self.ctx.clone(), self.key).await; - - token_account.amount - } -} - -pub async fn get_and_deserialize( - ctx: Rc>, - pubkey: Pubkey, -) -> T { - let mut ctx = ctx.borrow_mut(); - let account = ctx.banks_client.get_account(pubkey).await.unwrap().unwrap(); - - T::try_deserialize(&mut account.data.as_slice()).unwrap() -} -pub async fn get_and_deserialize_t22( - ctx: Rc>, - pubkey: Pubkey, -) -> T { - let mut ctx = ctx.borrow_mut(); - let account = ctx.banks_client.get_account(pubkey).await.unwrap().unwrap(); - - StateWithExtensionsOwned::::unpack(account.data) - .unwrap() - .base -} - -pub async fn balance_of(ctx: Rc>, pubkey: Pubkey) -> u64 { - let token_account: TokenAccount = get_and_deserialize(ctx, pubkey).await; - - token_account.amount -} - -#[derive(Debug, Clone, PartialEq)] -pub enum SupportedExtension { - MintCloseAuthority, - InterestBearing, - PermanentDelegate, - TransferHook, - TransferFee, -} - -impl SupportedExtension { - pub fn instruction(&self, mint: &Pubkey, key: &Pubkey) -> Instruction { - match self { - SupportedExtension::MintCloseAuthority => { - spl_token_2022::instruction::initialize_mint_close_authority( - &token_2022::ID, - mint, - Some(key), - ) - .unwrap() - } - SupportedExtension::InterestBearing => { - spl_token_2022::extension::interest_bearing_mint::instruction::initialize( - &token_2022::ID, - mint, - Some(*key), - 1, - ) - .unwrap() - } - SupportedExtension::PermanentDelegate => { - spl_token_2022::instruction::initialize_permanent_delegate( - &token_2022::ID, - mint, - key, - ) - .unwrap() - } - Self::TransferHook => { - spl_token_2022::extension::transfer_hook::instruction::initialize( - &token_2022::ID, - mint, - Some(*key), - Some(TEST_HOOK_ID), - ) - .unwrap() - } - Self::TransferFee => { - spl_token_2022::extension::transfer_fee::instruction::initialize_transfer_fee_config( - &token_2022::ID, - mint, - None, - None, - 500, - u64::MAX, - ) - .unwrap() - } - } - } - - pub fn space<'a>(exts: impl Iterator) -> usize { - exts.map(|e| match e { - SupportedExtension::MintCloseAuthority => pod_get_packed_len::(), - SupportedExtension::InterestBearing => pod_get_packed_len::(), - SupportedExtension::PermanentDelegate => pod_get_packed_len::(), - SupportedExtension::TransferHook => pod_get_packed_len::(), - SupportedExtension::TransferFee => pod_get_packed_len::(), - }) - .sum() - } - - fn types<'a>(exts: impl Iterator) -> Vec { - exts.map(|e| match e { - SupportedExtension::MintCloseAuthority => ExtensionType::MintCloseAuthority, - SupportedExtension::InterestBearing => ExtensionType::InterestBearingConfig, - SupportedExtension::PermanentDelegate => ExtensionType::PermanentDelegate, - SupportedExtension::TransferHook => ExtensionType::TransferHook, - SupportedExtension::TransferFee => ExtensionType::TransferFeeConfig, - }) - .collect() - } -} diff --git a/test-utils/src/test.rs b/test-utils/src/test.rs deleted file mode 100644 index ce4b1f79b..000000000 --- a/test-utils/src/test.rs +++ /dev/null @@ -1,918 +0,0 @@ -use super::marginfi_account::MarginfiAccountFixture; -use crate::{ - bank::BankFixture, marginfi_group::*, native, spl::*, transfer_hook::TEST_HOOK_ID, utils::*, -}; - -use anchor_lang::prelude::*; -use bincode::deserialize; -use pyth_sdk_solana::state::SolanaPriceAccount; -use pyth_solana_receiver_sdk::price_update::VerificationLevel; -use solana_sdk::{account::AccountSharedData, entrypoint::ProgramResult}; - -use fixed_macro::types::I80F48; -use lazy_static::lazy_static; -use marginfi::{ - constants::MAX_ORACLE_KEYS, - state::{ - marginfi_group::{BankConfig, BankOperationalState, InterestRateConfig, RiskTier}, - price::OracleSetup, - }, -}; -use solana_program::{hash::Hash, sysvar}; -use solana_program_test::*; -use solana_sdk::{account::Account, pubkey, signature::Keypair, signer::Signer}; - -use std::{cell::RefCell, collections::HashMap, rc::Rc}; - -#[derive(Default, Debug, Clone)] -pub struct TestSettings { - pub banks: Vec, - pub protocol_fees: bool, -} - -impl TestSettings { - pub fn all_banks_payer_not_admin() -> Self { - let banks = vec![ - TestBankSetting { - mint: BankMint::Usdc, - ..TestBankSetting::default() - }, - TestBankSetting { - mint: BankMint::UsdcSwb, - ..TestBankSetting::default() - }, - TestBankSetting { - mint: BankMint::Sol, - ..TestBankSetting::default() - }, - TestBankSetting { - mint: BankMint::SolSwb, - ..TestBankSetting::default() - }, - TestBankSetting { - mint: BankMint::SolSwbPull, - ..TestBankSetting::default() - }, - TestBankSetting { - mint: BankMint::SolSwbOrigFee, - ..TestBankSetting::default() - }, - TestBankSetting { - mint: BankMint::SolEquivalent, - ..TestBankSetting::default() - }, - TestBankSetting { - mint: BankMint::PyUSD, - ..TestBankSetting::default() - }, - TestBankSetting { - mint: BankMint::T22WithFee, - ..TestBankSetting::default() - }, - TestBankSetting { - mint: BankMint::SolEqIsolated, - ..TestBankSetting::default() - }, - ]; - - Self { - banks, - protocol_fees: false, - } - } - - /// All banks with the same config, but USDC and SOL are using switchboard price oracls - pub fn all_banks_swb_payer_not_admin() -> Self { - Self { - banks: vec![ - TestBankSetting { - mint: BankMint::Usdc, - config: Some(*DEFAULT_USDC_TEST_SW_BANK_CONFIG), - }, - TestBankSetting { - mint: BankMint::Sol, - config: Some(*DEFAULT_SOL_TEST_SW_BANK_CONFIG), - }, - ], - protocol_fees: false, - } - } - - pub fn all_banks_one_isolated() -> Self { - Self { - banks: vec![ - TestBankSetting { - mint: BankMint::Usdc, - ..TestBankSetting::default() - }, - TestBankSetting { - mint: BankMint::Sol, - ..TestBankSetting::default() - }, - TestBankSetting { - mint: BankMint::SolEquivalent, - config: Some(BankConfig { - risk_tier: RiskTier::Isolated, - asset_weight_maint: I80F48!(0).into(), - asset_weight_init: I80F48!(0).into(), - ..*DEFAULT_SOL_EQUIVALENT_TEST_BANK_CONFIG - }), - }, - ], - protocol_fees: false, - } - } - - pub fn many_banks_10() -> Self { - Self { - banks: vec![ - TestBankSetting { - mint: BankMint::Usdc, - ..TestBankSetting::default() - }, - TestBankSetting { - mint: BankMint::Sol, - ..TestBankSetting::default() - }, - TestBankSetting { - mint: BankMint::SolEquivalent, - ..TestBankSetting::default() - }, - TestBankSetting { - mint: BankMint::SolEquivalent1, - ..TestBankSetting::default() - }, - TestBankSetting { - mint: BankMint::SolEquivalent2, - ..TestBankSetting::default() - }, - TestBankSetting { - mint: BankMint::SolEquivalent3, - ..TestBankSetting::default() - }, - TestBankSetting { - mint: BankMint::SolEquivalent4, - ..TestBankSetting::default() - }, - TestBankSetting { - mint: BankMint::SolEquivalent5, - ..TestBankSetting::default() - }, - TestBankSetting { - mint: BankMint::SolEquivalent6, - ..TestBankSetting::default() - }, - TestBankSetting { - mint: BankMint::SolEquivalent7, - ..TestBankSetting::default() - }, - ], - protocol_fees: false, - } - } -} - -#[derive(Default, Debug, Clone)] -pub struct TestBankSetting { - pub mint: BankMint, - pub config: Option, -} - -#[derive(Debug, Clone, Ord, PartialOrd, Eq, PartialEq, Hash)] -pub enum BankMint { - Usdc, - UsdcSwb, - Sol, - SolSwb, - SolSwbPull, - SolSwbOrigFee, - SolEquivalent, - SolEquivalent1, - SolEquivalent2, - SolEquivalent3, - SolEquivalent4, - SolEquivalent5, - SolEquivalent6, - SolEquivalent7, - SolEquivalent8, - SolEquivalent9, - UsdcT22, - T22WithFee, - PyUSD, - SolEqIsolated, -} - -impl Default for BankMint { - fn default() -> Self { - Self::Usdc - } -} - -pub struct TestFixture { - pub context: Rc>, - pub marginfi_group: MarginfiGroupFixture, - pub banks: HashMap, - pub usdc_mint: MintFixture, - pub sol_mint: MintFixture, - pub sol_equivalent_mint: MintFixture, - pub mnde_mint: MintFixture, - pub usdc_t22_mint: MintFixture, - pub pyusd_mint: MintFixture, -} - -pub const PYTH_USDC_FEED: Pubkey = pubkey!("PythUsdcPrice111111111111111111111111111111"); -pub const SWITCHBOARD_USDC_FEED: Pubkey = pubkey!("SwchUsdcPrice111111111111111111111111111111"); -pub const PYTH_SOL_FEED: Pubkey = pubkey!("PythSo1Price1111111111111111111111111111111"); -pub const SWITCHBOARD_SOL_FEED: Pubkey = pubkey!("SwchSo1Price1111111111111111111111111111111"); -pub const PYTH_SOL_EQUIVALENT_FEED: Pubkey = pubkey!("PythSo1Equiva1entPrice111111111111111111111"); -pub const PYTH_MNDE_FEED: Pubkey = pubkey!("PythMndePrice111111111111111111111111111111"); -pub const FAKE_PYTH_USDC_FEED: Pubkey = pubkey!("FakePythUsdcPrice11111111111111111111111111"); -pub const PYTH_PUSH_SOL_FULLV_FEED: Pubkey = pubkey!("PythPushFu11So1Price11111111111111111111111"); -pub const PYTH_PUSH_SOL_PARTV_FEED: Pubkey = pubkey!("PythPushHa1fSo1Price11111111111111111111111"); -pub const PYTH_PUSH_FULLV_FEED_ID: [u8; 32] = [17; 32]; -pub const PYTH_PUSH_PARTV_FEED_ID: [u8; 32] = [18; 32]; -pub const PYTH_PUSH_REAL_SOL_FEED_ID: [u8; 32] = [ - 239, 13, 139, 111, 218, 44, 235, 164, 29, 161, 93, 64, 149, 209, 218, 57, 42, 13, 47, 142, 208, - 198, 199, 188, 15, 76, 250, 200, 194, 128, 181, 109, -]; -pub const INEXISTENT_PYTH_USDC_FEED: Pubkey = - pubkey!("FakePythUsdcPrice11111111111111111111111111"); -pub const PYTH_T22_WITH_FEE_FEED: Pubkey = pubkey!("PythT22WithFeePrice111111111111111111111111"); -pub const PYTH_PYUSD_FEED: Pubkey = pubkey!("PythPyusdPrice11111111111111111111111111111"); -pub const PYTH_SOL_REAL_FEED: Pubkey = pubkey!("PythSo1Rea1Price111111111111111111111111111"); -pub const PYTH_USDC_REAL_FEED: Pubkey = pubkey!("PythUsdcRea1Price11111111111111111111111111"); -pub const PYTH_PUSH_SOL_REAL_FEED: Pubkey = pubkey!("PythPushSo1Rea1Price11111111111111111111111"); - -pub const SWITCH_PULL_SOL_REAL_FEED: Pubkey = - pubkey!("BSzfJs4d1tAkSDqkepnfzEVcx2WtDVnwwXa2giy9PLeP"); - -pub fn get_oracle_id_from_feed_id(feed_id: Pubkey) -> Option { - match feed_id.to_bytes() { - PYTH_PUSH_FULLV_FEED_ID => Some(PYTH_PUSH_SOL_FULLV_FEED), - PYTH_PUSH_PARTV_FEED_ID => Some(PYTH_PUSH_SOL_PARTV_FEED), - PYTH_PUSH_REAL_SOL_FEED_ID => Some(PYTH_PUSH_SOL_REAL_FEED), - _ => None, - } -} - -pub fn create_oracle_key_array(pyth_oracle: Pubkey) -> [Pubkey; MAX_ORACLE_KEYS] { - let mut keys = [Pubkey::default(); MAX_ORACLE_KEYS]; - keys[0] = pyth_oracle; - - keys -} - -lazy_static! { - pub static ref DEFAULT_TEST_BANK_INTEREST_RATE_CONFIG: InterestRateConfig = - InterestRateConfig { - insurance_fee_fixed_apr: I80F48!(0).into(), - insurance_ir_fee: I80F48!(0).into(), - protocol_ir_fee: I80F48!(0).into(), - protocol_fixed_fee_apr: I80F48!(0).into(), - - optimal_utilization_rate: I80F48!(0.5).into(), - plateau_interest_rate: I80F48!(0.6).into(), - max_interest_rate: I80F48!(3).into(), - protocol_origination_fee: I80F48!(0).into(), - ..Default::default() - }; - pub static ref DEFAULT_TEST_BANK_CONFIG: BankConfig = BankConfig { - oracle_setup: OracleSetup::PythLegacy, - asset_weight_maint: I80F48!(1).into(), - asset_weight_init: I80F48!(1).into(), - liability_weight_init: I80F48!(1).into(), - liability_weight_maint: I80F48!(1).into(), - - operational_state: BankOperationalState::Operational, - risk_tier: RiskTier::Collateral, - - interest_rate_config: InterestRateConfig { - insurance_fee_fixed_apr: I80F48!(0).into(), - insurance_ir_fee: I80F48!(0).into(), - protocol_ir_fee: I80F48!(0).into(), - protocol_fixed_fee_apr: I80F48!(0).into(), - - optimal_utilization_rate: I80F48!(0.5).into(), - plateau_interest_rate: I80F48!(0.6).into(), - max_interest_rate: I80F48!(3).into(), - protocol_origination_fee: I80F48!(0).into(), - ..Default::default() - }, - oracle_max_age: 100, - ..Default::default() - }; - pub static ref DEFAULT_USDC_TEST_BANK_CONFIG: BankConfig = BankConfig { - deposit_limit: native!(1_000_000_000, "USDC"), - borrow_limit: native!(1_000_000_000, "USDC"), - oracle_keys: create_oracle_key_array(PYTH_USDC_FEED), - ..*DEFAULT_TEST_BANK_CONFIG - }; - pub static ref DEFAULT_PYUSD_TEST_BANK_CONFIG: BankConfig = BankConfig { - deposit_limit: native!(1_000_000_000, "PYUSD"), - borrow_limit: native!(1_000_000_000, "PYUSD"), - oracle_keys: create_oracle_key_array(PYTH_PYUSD_FEED), - ..*DEFAULT_TEST_BANK_CONFIG - }; - pub static ref DEFAULT_SOL_EQ_ISO_TEST_BANK_CONFIG: BankConfig = BankConfig { - deposit_limit: native!(1_000_000, "SOL_EQ_ISO"), - borrow_limit: native!(1_000_000, "SOL_EQ_ISO"), - oracle_keys: create_oracle_key_array(PYTH_SOL_EQUIVALENT_FEED), - risk_tier: RiskTier::Isolated, - asset_weight_maint: I80F48!(0).into(), - asset_weight_init: I80F48!(0).into(), - ..*DEFAULT_TEST_BANK_CONFIG - }; - pub static ref DEFAULT_T22_WITH_FEE_TEST_BANK_CONFIG: BankConfig = BankConfig { - deposit_limit: native!(1_000_000_000, "T22_WITH_FEE"), - borrow_limit: native!(1_000_000_000, "T22_WITH_FEE"), - oracle_keys: create_oracle_key_array(PYTH_T22_WITH_FEE_FEED), - ..*DEFAULT_TEST_BANK_CONFIG - }; - pub static ref DEFAULT_SOL_TEST_BANK_CONFIG: BankConfig = BankConfig { - deposit_limit: native!(1_000_000, "SOL"), - borrow_limit: native!(1_000_000, "SOL"), - oracle_keys: create_oracle_key_array(PYTH_SOL_FEED), - ..*DEFAULT_TEST_BANK_CONFIG - }; - pub static ref DEFAULT_SOL_EQUIVALENT_TEST_BANK_CONFIG: BankConfig = BankConfig { - deposit_limit: native!(1_000_000, "SOL_EQ"), - borrow_limit: native!(1_000_000, "SOL_EQ"), - oracle_keys: create_oracle_key_array(PYTH_SOL_EQUIVALENT_FEED), - ..*DEFAULT_TEST_BANK_CONFIG - }; - pub static ref DEFAULT_MNDE_TEST_BANK_CONFIG: BankConfig = BankConfig { - deposit_limit: native!(1_000_000, "MNDE"), - borrow_limit: native!(1_000_000, "MNDE"), - oracle_keys: create_oracle_key_array(PYTH_MNDE_FEED), - ..*DEFAULT_TEST_BANK_CONFIG - }; - pub static ref DEFAULT_USDC_TEST_SW_BANK_CONFIG: BankConfig = BankConfig { - oracle_setup: OracleSetup::SwitchboardV2, - deposit_limit: native!(1_000_000_000, "USDC"), - borrow_limit: native!(1_000_000_000, "USDC"), - oracle_keys: create_oracle_key_array(SWITCHBOARD_USDC_FEED), - ..*DEFAULT_TEST_BANK_CONFIG - }; - pub static ref DEFAULT_SOL_TEST_SW_BANK_CONFIG: BankConfig = BankConfig { - oracle_setup: OracleSetup::SwitchboardV2, - deposit_limit: native!(1_000_000, "SOL"), - borrow_limit: native!(1_000_000, "SOL"), - oracle_keys: create_oracle_key_array(SWITCHBOARD_SOL_FEED), - ..*DEFAULT_TEST_BANK_CONFIG - }; - pub static ref DEFAULT_SOL_TEST_PYTH_PUSH_FULLV_BANK_CONFIG: BankConfig = BankConfig { - oracle_setup: OracleSetup::PythPushOracle, - deposit_limit: native!(1_000_000, "SOL"), - borrow_limit: native!(1_000_000, "SOL"), - oracle_keys: create_oracle_key_array(PYTH_PUSH_FULLV_FEED_ID.into()), - ..*DEFAULT_TEST_BANK_CONFIG - }; - /// This banks orale always has an insufficient verification level. - pub static ref DEFAULT_SOL_TEST_PYTH_PUSH_PARTV_BANK_CONFIG: BankConfig = BankConfig { - oracle_setup: OracleSetup::PythPushOracle, - deposit_limit: native!(1_000_000, "SOL"), - borrow_limit: native!(1_000_000, "SOL"), - oracle_keys: create_oracle_key_array(PYTH_PUSH_PARTV_FEED_ID.into()), - ..*DEFAULT_TEST_BANK_CONFIG - }; - pub static ref DEFAULT_SOL_TEST_REAL_BANK_CONFIG: BankConfig = BankConfig { - oracle_setup: OracleSetup::PythLegacy, - deposit_limit: native!(1_000_000, "SOL"), - borrow_limit: native!(1_000_000, "SOL"), - oracle_keys: create_oracle_key_array(PYTH_SOL_REAL_FEED), - oracle_max_age: 100, - ..*DEFAULT_TEST_BANK_CONFIG - }; - pub static ref DEFAULT_USDC_TEST_REAL_BANK_CONFIG: BankConfig = BankConfig { - oracle_setup: OracleSetup::PythLegacy, - deposit_limit: native!(1_000_000_000, "USDC"), - borrow_limit: native!(1_000_000_000, "USDC"), - oracle_keys: create_oracle_key_array(PYTH_USDC_REAL_FEED), - ..*DEFAULT_TEST_BANK_CONFIG - }; - pub static ref DEFAULT_PYTH_PUSH_SOL_TEST_REAL_BANK_CONFIG: BankConfig = BankConfig { - oracle_setup: OracleSetup::PythPushOracle, - deposit_limit: native!(1_000_000, "SOL"), - borrow_limit: native!(1_000_000, "SOL"), - oracle_keys: create_oracle_key_array(PYTH_PUSH_REAL_SOL_FEED_ID.into()), - oracle_max_age: 100, - ..*DEFAULT_TEST_BANK_CONFIG - }; - pub static ref DEFAULT_SB_PULL_SOL_TEST_REAL_BANK_CONFIG: BankConfig = BankConfig { - oracle_setup: OracleSetup::SwitchboardPull, - deposit_limit: native!(1_000_000, "SOL"), - borrow_limit: native!(1_000_000, "SOL"), - oracle_keys: create_oracle_key_array(SWITCH_PULL_SOL_REAL_FEED), - ..*DEFAULT_TEST_BANK_CONFIG - }; - pub static ref DEFAULT_SB_PULL_WITH_ORIGINATION_FEE_BANK_CONFIG: BankConfig = BankConfig { - oracle_setup: OracleSetup::SwitchboardPull, - deposit_limit: native!(1_000_000, "SOL"), - borrow_limit: native!(1_000_000, "SOL"), - oracle_keys: create_oracle_key_array(SWITCH_PULL_SOL_REAL_FEED), - interest_rate_config: InterestRateConfig { - protocol_origination_fee: I80F48!(0.018).into(), - ..*DEFAULT_TEST_BANK_INTEREST_RATE_CONFIG - }, - ..*DEFAULT_TEST_BANK_CONFIG - }; -} - -pub const USDC_MINT_DECIMALS: u8 = 6; -pub const PYUSD_MINT_DECIMALS: u8 = 6; -pub const T22_WITH_FEE_MINT_DECIMALS: u8 = 6; -pub const SOL_MINT_DECIMALS: u8 = 9; -pub const MNDE_MINT_DECIMALS: u8 = 9; - -pub fn marginfi_entry(program_id: &Pubkey, accounts: &[AccountInfo], data: &[u8]) -> ProgramResult { - marginfi::entry(program_id, unsafe { core::mem::transmute(accounts) }, data) -} - -#[cfg(feature = "lip")] -pub fn lip_entry<'a, 'b, 'c, 'info>( - program_id: &'a Pubkey, - accounts: &'b [AccountInfo<'info>], - data: &'c [u8], -) -> ProgramResult { - liquidity_incentive_program::entry(program_id, unsafe { core::mem::transmute(accounts) }, data) -} - -impl TestFixture { - pub async fn new(test_settings: Option) -> TestFixture { - TestFixture::new_with_t22_extension(test_settings, &[]).await - } - pub async fn new_with_t22_extension( - test_settings: Option, - extensions: &[SupportedExtension], - ) -> TestFixture { - let mut program = ProgramTest::default(); - - let mem_map_not_copy_feature_gate = pubkey!("EenyoWx9UMXYKpR8mW5Jmfmy2fRjzUtM7NduYMY8bx33"); - program.deactivate_feature(mem_map_not_copy_feature_gate); - - program.prefer_bpf(true); - program.add_program("marginfi", marginfi::ID, None); - program.add_program("test_transfer_hook", TEST_HOOK_ID, None); - #[cfg(feature = "lip")] - program.add_program( - "liquidity_incentive_program", - liquidity_incentive_program::ID, - None, - ); - - let usdc_keypair = Keypair::new(); - let pyusd_keypair = Keypair::new(); - let sol_keypair = Keypair::new(); - let sol_equivalent_keypair = Keypair::new(); - let mnde_keypair = Keypair::new(); - let usdc_t22_keypair = Keypair::new(); - let t22_with_fee_keypair = Keypair::new(); - - program.add_account( - PYTH_USDC_FEED, - create_pyth_legacy_oracle_account( - usdc_keypair.pubkey(), - 1.0, - USDC_MINT_DECIMALS.into(), - None, - ), // create_pyth_price_account(usdc_keypair.pubkey(), 1.0, USDC_MINT_DECIMALS.into(), None), - ); - program.add_account( - PYTH_PYUSD_FEED, - create_pyth_legacy_oracle_account( - pyusd_keypair.pubkey(), - 1.0, - PYUSD_MINT_DECIMALS.into(), - None, - ), - ); - program.add_account( - PYTH_T22_WITH_FEE_FEED, - create_pyth_legacy_oracle_account( - t22_with_fee_keypair.pubkey(), - 0.5, - T22_WITH_FEE_MINT_DECIMALS.into(), - None, - ), - ); - program.add_account( - PYTH_SOL_FEED, - create_pyth_legacy_oracle_account( - sol_keypair.pubkey(), - 10.0, - SOL_MINT_DECIMALS.into(), - None, - ), - // create_pyth_price_account(sol_keypair.pubkey(), 10.0, SOL_MINT_DECIMALS.into(), None), - ); - program.add_account( - PYTH_SOL_EQUIVALENT_FEED, - create_pyth_legacy_oracle_account( - sol_equivalent_keypair.pubkey(), - 10.0, - SOL_MINT_DECIMALS.into(), - None, - ), - ); - program.add_account( - PYTH_MNDE_FEED, - create_pyth_legacy_oracle_account( - mnde_keypair.pubkey(), - 10.0, - MNDE_MINT_DECIMALS.into(), - None, - ), - // create_pyth_price_account(mnde_keypair.pubkey(), 10.0, MNDE_MINT_DECIMALS.into(), None), - ); - program.add_account( - SWITCHBOARD_USDC_FEED, - create_switchboard_price_feed(1, USDC_MINT_DECIMALS.into()), - ); - program.add_account( - SWITCHBOARD_SOL_FEED, - create_switchboard_price_feed(10, SOL_MINT_DECIMALS.into()), - ); - program.add_account( - PYTH_PUSH_SOL_FULLV_FEED, - create_pyth_push_oracle_account( - PYTH_PUSH_FULLV_FEED_ID, - 10.0, - SOL_MINT_DECIMALS.into(), - None, - VerificationLevel::Full, - ), - ); - program.add_account( - PYTH_PUSH_SOL_PARTV_FEED, - create_pyth_push_oracle_account( - PYTH_PUSH_PARTV_FEED_ID, - 10.0, - SOL_MINT_DECIMALS.into(), - None, - VerificationLevel::Partial { num_signatures: 5 }, - ), - ); - program.add_account( - PYTH_SOL_REAL_FEED, - create_pyth_legacy_price_account_from_bytes( - include_bytes!("../data/pyth_legacy_sol_price.bin").to_vec(), - ), - ); - program.add_account( - PYTH_USDC_REAL_FEED, - create_pyth_legacy_price_account_from_bytes( - include_bytes!("../data/pyth_legacy_usdc_price.bin").to_vec(), - ), - ); - program.add_account( - PYTH_PUSH_SOL_REAL_FEED, - create_pyth_push_oracle_account_from_bytes( - include_bytes!("../data/pyth_push_sol_price.bin").to_vec(), - ), - ); - - // From mainnet: https://solana.fm/address/BSzfJs4d1tAkSDqkepnfzEVcx2WtDVnwwXa2giy9PLeP - // Sol @ ~ $153 - program.add_account( - SWITCH_PULL_SOL_REAL_FEED, - create_switch_pull_oracle_account_from_bytes( - include_bytes!("../data/swb_pull_sol_price.bin").to_vec(), - ), - ); - - let context = Rc::new(RefCell::new(program.start_with_context().await)); - - { - let mut ctx = context.borrow_mut(); - let mut clock: Clock = ctx.banks_client.get_sysvar().await.unwrap(); - clock.unix_timestamp = 0; - ctx.set_sysvar(&clock); - } - - solana_logger::setup_with_default(RUST_LOG_DEFAULT); - - let usdc_mint_f = MintFixture::new( - Rc::clone(&context), - Some(usdc_keypair), - Some(USDC_MINT_DECIMALS), - ) - .await; - - let sol_mint_f = MintFixture::new( - Rc::clone(&context), - Some(sol_keypair), - Some(SOL_MINT_DECIMALS), - ) - .await; - let sol_equivalent_mint_f = MintFixture::new( - Rc::clone(&context), - Some(sol_equivalent_keypair), - Some(SOL_MINT_DECIMALS), - ) - .await; - let mnde_mint_f = MintFixture::new( - Rc::clone(&context), - Some(mnde_keypair), - Some(MNDE_MINT_DECIMALS), - ) - .await; - let usdc_t22_mint_f = MintFixture::new_token_22( - Rc::clone(&context), - Some(usdc_t22_keypair), - Some(USDC_MINT_DECIMALS), - extensions, - ) - .await; - let pyusd_mint_f = MintFixture::new_from_file(&context, "src/fixtures/pyUSD.json"); - let t22_with_fee_mint_f = MintFixture::new_token_22( - Rc::clone(&context), - Some(t22_with_fee_keypair), - Some(T22_WITH_FEE_MINT_DECIMALS), - &[SupportedExtension::TransferFee], - ) - .await; - - let tester_group = MarginfiGroupFixture::new(Rc::clone(&context)).await; - - tester_group - .set_protocol_fees_flag(test_settings.clone().unwrap_or_default().protocol_fees) - .await; - - let mut banks = HashMap::new(); - if let Some(test_settings) = test_settings.clone() { - for bank in test_settings.banks.iter() { - let (bank_mint, default_config) = match bank.mint { - BankMint::Usdc => (&usdc_mint_f, *DEFAULT_USDC_TEST_BANK_CONFIG), - BankMint::UsdcSwb => (&usdc_mint_f, *DEFAULT_USDC_TEST_SW_BANK_CONFIG), - BankMint::Sol => (&sol_mint_f, *DEFAULT_SOL_TEST_BANK_CONFIG), - BankMint::SolSwb => (&sol_mint_f, *DEFAULT_SOL_TEST_SW_BANK_CONFIG), - BankMint::SolSwbPull => { - (&sol_mint_f, *DEFAULT_SB_PULL_SOL_TEST_REAL_BANK_CONFIG) - } - BankMint::SolSwbOrigFee => ( - &sol_mint_f, - *DEFAULT_SB_PULL_WITH_ORIGINATION_FEE_BANK_CONFIG, - ), - BankMint::SolEquivalent => ( - &sol_equivalent_mint_f, - *DEFAULT_SOL_EQUIVALENT_TEST_BANK_CONFIG, - ), - BankMint::SolEquivalent1 => ( - &sol_equivalent_mint_f, - *DEFAULT_SOL_EQUIVALENT_TEST_BANK_CONFIG, - ), - BankMint::SolEquivalent2 => ( - &sol_equivalent_mint_f, - *DEFAULT_SOL_EQUIVALENT_TEST_BANK_CONFIG, - ), - BankMint::SolEquivalent3 => ( - &sol_equivalent_mint_f, - *DEFAULT_SOL_EQUIVALENT_TEST_BANK_CONFIG, - ), - BankMint::SolEquivalent4 => ( - &sol_equivalent_mint_f, - *DEFAULT_SOL_EQUIVALENT_TEST_BANK_CONFIG, - ), - BankMint::SolEquivalent5 => ( - &sol_equivalent_mint_f, - *DEFAULT_SOL_EQUIVALENT_TEST_BANK_CONFIG, - ), - BankMint::SolEquivalent6 => ( - &sol_equivalent_mint_f, - *DEFAULT_SOL_EQUIVALENT_TEST_BANK_CONFIG, - ), - BankMint::SolEquivalent7 => ( - &sol_equivalent_mint_f, - *DEFAULT_SOL_EQUIVALENT_TEST_BANK_CONFIG, - ), - BankMint::SolEquivalent8 => ( - &sol_equivalent_mint_f, - *DEFAULT_SOL_EQUIVALENT_TEST_BANK_CONFIG, - ), - BankMint::SolEquivalent9 => ( - &sol_equivalent_mint_f, - *DEFAULT_SOL_EQUIVALENT_TEST_BANK_CONFIG, - ), - BankMint::T22WithFee => { - (&t22_with_fee_mint_f, *DEFAULT_T22_WITH_FEE_TEST_BANK_CONFIG) - } - BankMint::UsdcT22 => (&usdc_t22_mint_f, *DEFAULT_USDC_TEST_BANK_CONFIG), - BankMint::PyUSD => (&pyusd_mint_f, *DEFAULT_PYUSD_TEST_BANK_CONFIG), - BankMint::SolEqIsolated => { - (&sol_equivalent_mint_f, *DEFAULT_SOL_EQ_ISO_TEST_BANK_CONFIG) - } - }; - - banks.insert( - bank.mint.clone(), - tester_group - .try_lending_pool_add_bank(bank_mint, bank.config.unwrap_or(default_config)) - .await - .unwrap(), - ); - } - }; - - TestFixture { - context: Rc::clone(&context), - marginfi_group: tester_group, - banks, - usdc_mint: usdc_mint_f, - sol_mint: sol_mint_f, - sol_equivalent_mint: sol_equivalent_mint_f, - mnde_mint: mnde_mint_f, - usdc_t22_mint: usdc_t22_mint_f, - pyusd_mint: pyusd_mint_f, - } - } - - pub async fn create_marginfi_account(&self) -> MarginfiAccountFixture { - MarginfiAccountFixture::new(Rc::clone(&self.context), &self.marginfi_group.key).await - } - - pub async fn try_load( - &self, - address: &Pubkey, - ) -> anyhow::Result, BanksClientError> { - self.context - .borrow_mut() - .banks_client - .get_account(*address) - .await - } - - pub async fn load_and_deserialize( - &self, - address: &Pubkey, - ) -> T { - let ai = self - .context - .borrow_mut() - .banks_client - .get_account(*address) - .await - .unwrap() - .unwrap(); - - T::try_deserialize(&mut ai.data.as_slice()).unwrap() - } - - pub fn payer(&self) -> Pubkey { - self.context.borrow().payer.pubkey() - } - - pub fn payer_keypair(&self) -> Keypair { - clone_keypair(&self.context.borrow().payer) - } - - pub fn get_bank(&self, bank_mint: &BankMint) -> &BankFixture { - self.banks.get(bank_mint).unwrap() - } - - pub fn get_bank_mut(&mut self, bank_mint: &BankMint) -> &mut BankFixture { - self.banks.get_mut(bank_mint).unwrap() - } - - pub fn set_time(&self, timestamp: i64) { - let clock = Clock { - unix_timestamp: timestamp, - ..Default::default() - }; - self.context.borrow_mut().set_sysvar(&clock); - } - - pub async fn set_pyth_oracle_timestamp(&self, address: Pubkey, timestamp: i64) { - let mut ctx = self.context.borrow_mut(); - - let mut account = ctx - .banks_client - .get_account(address) - .await - .unwrap() - .unwrap(); - - let data = account.data.as_mut_slice(); - let mut data: SolanaPriceAccount = - *pyth_sdk_solana::state::load_price_account(data).unwrap(); - - data.timestamp = timestamp; - data.prev_timestamp = timestamp; - - let bytes = bytemuck::bytes_of(&data); - - let mut aso = AccountSharedData::from(account); - - aso.set_data_from_slice(bytes); - - ctx.set_account(&address, &aso); - } - - pub async fn advance_time(&self, seconds: i64) { - let mut clock: Clock = self - .context - .borrow_mut() - .banks_client - .get_sysvar() - .await - .unwrap(); - clock.unix_timestamp += seconds; - self.context.borrow_mut().set_sysvar(&clock); - self.context - .borrow_mut() - .warp_forward_force_reward_interval_end() - .unwrap(); - } - - pub async fn get_minimum_rent_for_size(&self, size: usize) -> u64 { - self.context - .borrow_mut() - .banks_client - .get_rent() - .await - .unwrap() - .minimum_balance(size) - } - - pub async fn get_latest_blockhash(&self) -> Hash { - self.context - .borrow_mut() - .banks_client - .get_latest_blockhash() - .await - .unwrap() - } - - pub async fn get_slot(&self) -> u64 { - self.context - .borrow_mut() - .banks_client - .get_root_slot() - .await - .unwrap() - } - - pub async fn get_clock(&self) -> Clock { - deserialize::( - &self - .context - .borrow_mut() - .banks_client - .get_account(sysvar::clock::ID) - .await - .unwrap() - .unwrap() - .data, - ) - .unwrap() - } - - pub async fn get_sufficient_collateral_for_outflow( - &self, - outflow_amount: f64, - outflow_mint: &BankMint, - collateral_mint: &BankMint, - ) -> f64 { - let outflow_bank = self.get_bank(outflow_mint); - let collateral_bank = self.get_bank(collateral_mint); - - let outflow_mint_price = outflow_bank.get_price().await; - let collateral_mint_price = collateral_bank.get_price().await; - - let collateral_amount = get_sufficient_collateral_for_outflow( - outflow_amount, - outflow_mint_price, - collateral_mint_price, - ); - - let decimal_scaling = 10.0_f64.powi(collateral_bank.mint.mint.decimals as i32); - let collateral_amount = - ((collateral_amount * decimal_scaling).round() + 1.) / decimal_scaling; - - get_max_deposit_amount_pre_fee(collateral_amount) - } -} - -pub fn get_mint_price(mint: BankMint) -> f64 { - match mint { - // For the T22 with fee variant, it's 50 cents - BankMint::T22WithFee => 0.5, - // For USDC-based and PYUSD mints, the price is roughly 1.0. - BankMint::Usdc | BankMint::UsdcSwb | BankMint::UsdcT22 | BankMint::PyUSD => 1.0, - // For SOL and its equivalents, use the SOL price (here, roughly 10.0). - BankMint::Sol - | BankMint::SolSwb - | BankMint::SolSwbPull - | BankMint::SolSwbOrigFee - | BankMint::SolEquivalent - | BankMint::SolEquivalent1 - | BankMint::SolEquivalent2 - | BankMint::SolEquivalent3 - | BankMint::SolEquivalent4 - | BankMint::SolEquivalent5 - | BankMint::SolEquivalent6 - | BankMint::SolEquivalent7 - | BankMint::SolEquivalent8 - | BankMint::SolEquivalent9 - | BankMint::SolEqIsolated => 10.0, - } -} diff --git a/test-utils/src/utils.rs b/test-utils/src/utils.rs deleted file mode 100644 index 55fe248ff..000000000 --- a/test-utils/src/utils.rs +++ /dev/null @@ -1,713 +0,0 @@ -use anchor_lang::prelude::*; -use anchor_lang_29::Discriminator; -use anchor_spl::token_2022::spl_token_2022::extension::transfer_fee::MAX_FEE_BASIS_POINTS; -use marginfi::constants::PYTH_ID; -use marginfi::constants::SWITCHBOARD_PULL_ID; -use pyth_sdk_solana::state::{ - AccountType, PriceInfo, PriceStatus, Rational, SolanaPriceAccount, MAGIC, VERSION_2, -}; -use pyth_solana_receiver_sdk::price_update::FeedId; -use pyth_solana_receiver_sdk::price_update::PriceUpdateV2; -use pyth_solana_receiver_sdk::price_update::VerificationLevel; -use solana_program::{instruction::Instruction, pubkey}; -use solana_program_test::*; -use solana_sdk::{account::Account, signature::Keypair}; -use std::mem::size_of; -use std::{cell::RefCell, rc::Rc}; -use switchboard_solana::{ - AggregatorAccountData, AggregatorResolutionMode, AggregatorRound, SwitchboardDecimal, - SWITCHBOARD_PROGRAM_ID, -}; - -pub const MS_PER_SLOT: u64 = 400; -pub const RUST_LOG_DEFAULT: &str = "solana_rbpf::vm=info,\ - solana_program_runtime::stable_log=debug,\ - solana_runtime::message_processor=debug,\ - solana_runtime::system_instruction_processor=info,\ - solana_program_test=info,\ - solana_bpf_loader_program=debug"; - -pub async fn load_and_deserialize( - ctx: Rc>, - address: &Pubkey, -) -> T { - let ai = ctx - .borrow_mut() - .banks_client - .get_account(*address) - .await - .unwrap() - .unwrap(); - - T::try_deserialize(&mut ai.data.as_slice()).unwrap() -} - -pub fn make_ix(accounts: T, ix_data: Vec) -> Instruction -where - T: ToAccountMetas, -{ - Instruction { - program_id: marginfi::id(), - accounts: accounts.to_account_metas(Some(true)), - data: ix_data, - } -} - -pub fn create_pyth_legacy_price_account_from_bytes(data: Vec) -> Account { - Account { - lamports: 1_000_000, - data, - owner: PYTH_ID, - executable: false, - rent_epoch: 361, - } -} - -pub fn create_pyth_legacy_oracle_account( - mint: Pubkey, - ui_price: f64, - mint_decimals: i32, - timestamp: Option, -) -> Account { - let native_price = (ui_price * 10_f64.powf(mint_decimals as f64)) as i64; - let data = bytemuck::bytes_of(&SolanaPriceAccount { - prod: mint, - agg: PriceInfo { - conf: 0, - price: native_price, - status: PriceStatus::Trading, - ..Default::default() - }, - expo: -mint_decimals, - prev_price: native_price, - magic: MAGIC, - ver: VERSION_2, - atype: AccountType::Price as u32, - timestamp: 0, - ema_price: Rational { - val: native_price, - numer: native_price, - denom: 1, - }, - prev_timestamp: timestamp.unwrap_or(0), - ema_conf: Rational { - val: 0, - numer: 0, - denom: 1, - }, - ..Default::default() - }) - .to_vec(); - - create_pyth_legacy_price_account_from_bytes(data) -} - -pub fn create_pyth_push_oracle_account_from_bytes(data: Vec) -> Account { - Account { - lamports: 1_000_000, - data, - owner: pyth_solana_receiver_sdk::ID, - executable: false, - rent_epoch: 361, - } -} - -pub fn create_pyth_push_oracle_account( - feed_id: FeedId, - ui_price: f64, - mint_decimals: i32, - timestamp: Option, - verification_level: VerificationLevel, -) -> Account { - let native_price = (ui_price * 10_f64.powf(mint_decimals as f64)) as i64; - - let price_update = PriceUpdateV2 { - write_authority: Pubkey::default(), - verification_level, - price_message: pyth_solana_receiver_sdk::price_update::PriceFeedMessage { - feed_id, - price: native_price, - conf: 0, - exponent: -mint_decimals, - publish_time: timestamp.unwrap_or_default(), - prev_publish_time: timestamp.unwrap_or_default(), - ema_price: native_price, - ema_conf: 0, - }, - posted_slot: 1, - }; - - let mut data = vec![]; - let mut account_data = vec![]; - - data.extend_from_slice(&PriceUpdateV2::DISCRIMINATOR); - - price_update.serialize(&mut account_data).unwrap(); - - data.extend_from_slice(&account_data); - - create_pyth_push_oracle_account_from_bytes(data) -} - -pub fn create_switch_pull_oracle_account_from_bytes(data: Vec) -> Account { - Account { - lamports: 1_000_000, - data, - owner: SWITCHBOARD_PULL_ID, - executable: false, - rent_epoch: 361, - } -} - -pub fn create_switchboard_price_feed(ui_price: i64, mint_decimals: i32) -> Account { - let native_price = ui_price * 10_i64.pow(mint_decimals as u32); - let aggregator_account = switchboard_solana::AggregatorAccountData { - name: [0; 32], - metadata: [0; 128], - _reserved1: [0; 32], - queue_pubkey: Pubkey::default(), - oracle_request_batch_size: 4, - min_oracle_results: 2, - min_job_results: 1, - min_update_delay_seconds: 6, - start_after: 0, - variance_threshold: SwitchboardDecimal { - mantissa: 0, - scale: 0, - }, - force_report_period: 0, - expiration: 0, - consecutive_failure_count: 0, - next_allowed_update_time: 1682220588, - is_locked: false, - crank_pubkey: Pubkey::default(), - latest_confirmed_round: AggregatorRound { - num_success: 4, - num_error: 0, - is_closed: true, - round_open_slot: 189963416, - round_open_timestamp: 1682220573, - result: SwitchboardDecimal { - mantissa: native_price as i128, - scale: mint_decimals as u32, - }, - std_deviation: SwitchboardDecimal { - mantissa: 13942937500000000000000000, - scale: 28, - }, - min_response: SwitchboardDecimal { - mantissa: 2175243675, - scale: 8, - }, - max_response: SwitchboardDecimal { - mantissa: 21763, - scale: 3, - }, - oracle_pubkeys_data: [Pubkey::default(); 16], - medians_data: [ - SwitchboardDecimal { - mantissa: 21757, - scale: 3, - }, - SwitchboardDecimal { - mantissa: 21757, - scale: 3, - }, - SwitchboardDecimal { - mantissa: 21757, - scale: 3, - }, - SwitchboardDecimal { - mantissa: 217597885875, - scale: 10, - }, - SwitchboardDecimal { - mantissa: 0, - scale: 0, - }, - SwitchboardDecimal { - mantissa: 0, - scale: 0, - }, - SwitchboardDecimal { - mantissa: 0, - scale: 0, - }, - SwitchboardDecimal { - mantissa: 0, - scale: 0, - }, - SwitchboardDecimal { - mantissa: 0, - scale: 0, - }, - SwitchboardDecimal { - mantissa: 0, - scale: 0, - }, - SwitchboardDecimal { - mantissa: 0, - scale: 0, - }, - SwitchboardDecimal { - mantissa: 0, - scale: 0, - }, - SwitchboardDecimal { - mantissa: 0, - scale: 0, - }, - SwitchboardDecimal { - mantissa: 0, - scale: 0, - }, - SwitchboardDecimal { - mantissa: 0, - scale: 0, - }, - SwitchboardDecimal { - mantissa: 0, - scale: 0, - }, - ], - current_payout: [12500, 12500, 0, 12500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], - medians_fulfilled: [ - true, true, true, true, false, false, false, false, false, false, false, false, - false, false, false, false, - ], - errors_fulfilled: [ - false, false, false, false, false, false, false, false, false, false, false, false, - false, false, false, false, - ], - }, - current_round: AggregatorRound { - num_success: 0, - num_error: 0, - is_closed: false, - round_open_slot: 189963432, - round_open_timestamp: 1682220581, - result: SwitchboardDecimal { - mantissa: 0, - scale: 0, - }, - std_deviation: SwitchboardDecimal { - mantissa: 0, - scale: 0, - }, - min_response: SwitchboardDecimal { - mantissa: 0, - scale: 0, - }, - max_response: SwitchboardDecimal { - mantissa: 0, - scale: 0, - }, - oracle_pubkeys_data: [Pubkey::default(); 16], - medians_data: [ - SwitchboardDecimal { - mantissa: 0, - scale: 0, - }, - SwitchboardDecimal { - mantissa: 0, - scale: 0, - }, - SwitchboardDecimal { - mantissa: 0, - scale: 0, - }, - SwitchboardDecimal { - mantissa: 0, - scale: 0, - }, - SwitchboardDecimal { - mantissa: 0, - scale: 0, - }, - SwitchboardDecimal { - mantissa: 0, - scale: 0, - }, - SwitchboardDecimal { - mantissa: 0, - scale: 0, - }, - SwitchboardDecimal { - mantissa: 0, - scale: 0, - }, - SwitchboardDecimal { - mantissa: 0, - scale: 0, - }, - SwitchboardDecimal { - mantissa: 0, - scale: 0, - }, - SwitchboardDecimal { - mantissa: 0, - scale: 0, - }, - SwitchboardDecimal { - mantissa: 0, - scale: 0, - }, - SwitchboardDecimal { - mantissa: 0, - scale: 0, - }, - SwitchboardDecimal { - mantissa: 0, - scale: 0, - }, - SwitchboardDecimal { - mantissa: 0, - scale: 0, - }, - SwitchboardDecimal { - mantissa: 0, - scale: 0, - }, - ], - current_payout: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], - medians_fulfilled: [ - false, false, false, false, false, false, false, false, false, false, false, false, - false, false, false, false, - ], - errors_fulfilled: [ - false, false, false, false, false, false, false, false, false, false, false, false, - false, false, false, false, - ], - }, - job_pubkeys_data: [Pubkey::default(); 16], - job_hashes: [switchboard_solana::Hash::default(); 16], - job_pubkeys_size: 5, - jobs_checksum: [ - 119, 207, 222, 177, 160, 127, 254, 198, 132, 153, 111, 54, 202, 89, 87, 81, 75, 152, - 67, 132, 249, 111, 216, 90, 132, 22, 198, 45, 67, 233, 50, 225, - ], - authority: pubkey!("GvDMxPzN1sCj7L26YDK2HnMRXEQmQ2aemov8YBtPS7vR"), - history_buffer: pubkey!("E3cqnoFvTeKKNsGmC8YitpMjo2E39hwfoyt2Aiem7dCb"), - previous_confirmed_round_result: SwitchboardDecimal { - mantissa: 21757, - scale: 3, - }, - previous_confirmed_round_slot: 189963416, - disable_crank: false, - job_weights: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], - creation_timestamp: 0, - resolution_mode: AggregatorResolutionMode::ModeRoundResolution, - _ebuf: [ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, - 0, - //0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - // 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - ], - ..Default::default() // base_priority_fee: todo!(), - // priority_fee_bump: todo!(), - // priority_fee_bump_period: todo!(), - // max_priority_fee_multiplier: todo!(), - // parent_function: todo!(), - }; - - let desc_bytes = - ::DISCRIMINATOR; - let mut data = vec![0u8; 8 + size_of::()]; - data[..8].copy_from_slice(&desc_bytes); - data[8..].copy_from_slice(bytemuck::bytes_of(&aggregator_account)); - - Account { - lamports: 10000, - data, - owner: SWITCHBOARD_PROGRAM_ID, - executable: false, - rent_epoch: 0, - } -} - -#[macro_export] -macro_rules! assert_custom_error { - ($error:expr, $matcher:expr) => { - match $error { - solana_program_test::BanksClientError::TransactionError( - solana_sdk::transaction::TransactionError::InstructionError( - _, - solana_program::instruction::InstructionError::Custom(n), - ), - ) => { - assert_eq!(n, anchor_lang::error::ERROR_CODE_OFFSET + $matcher as u32) - } - _ => assert!(false), - } - }; -} - -#[macro_export] -macro_rules! assert_anchor_error { - ($error:expr, $matcher:expr) => { - match $error { - solana_program_test::BanksClientError::TransactionError( - solana_sdk::transaction::TransactionError::InstructionError( - _, - solana_program::instruction::InstructionError::Custom(n), - ), - ) => { - assert_eq!(n, $matcher as u32) - } - _ => assert!(false), - } - }; -} - -#[macro_export] -macro_rules! assert_program_error { - ($error:expr, $matcher:expr) => { - match $error { - solana_sdk::transport::TransportError::TransactionError( - solana_sdk::transaction::InstructionError(_, x), - ) => { - assert_eq!(x, $matcher) - } - _ => assert!(false), - }; - }; -} - -#[macro_export] -macro_rules! assert_eq_noise { - ($a:expr, $b:expr, $tolerance:expr) => { - let diff = ($a - $b).abs(); - assert!( - diff <= $tolerance, - "Difference between {} and {} larger than {} tolerated", - $a, - $b, - $tolerance - ) - }; - - ($a:expr, $b:expr) => { - let tolerance = fixed_macro::types::I80F48!(0.00001); - let diff = ($a - $b).abs(); - assert!( - diff < tolerance, - "Difference between {} and {} larger than {} tolerated", - $a, - $b, - tolerance - ) - }; -} - -#[macro_export] -macro_rules! ui_to_native { - ($val: expr, $mint_decimals: expr) => { - ($val * 10_u64.pow($mint_decimals as u32) as f64) as u64 - }; -} - -#[macro_export] -macro_rules! native { - ($val: expr, "USDC") => { - $val * 10_u64.pow(6) - }; - - ($val: expr, "USDC", f64) => { - (($val) * 10_u64.pow(6) as f64) as u64 - }; - - ($val: expr, "PYUSD") => { - $val * 10_u64.pow(6) - }; - - ($val: expr, "PYUSD", f64) => { - (($val) * 10_u64.pow(6) as f64) as u64 - }; - ($val: expr, "T22_WITH_FEE") => { - $val * 10_u64.pow(6) - }; - - ($val: expr, "T22_WITH_FEE", f64) => { - (($val) * 10_u64.pow(6) as f64) as u64 - }; - - ($val: expr, "SOL") => { - $val * 10_u64.pow(9) - }; - - ($val: expr, "SOL", f64) => { - (($val) * 10_u64.pow(9) as f64) as u64 - }; - - ($val: expr, "SOL_EQ") => { - $val * 10_u64.pow(9) - }; - - ($val: expr, "SOL_EQ", f64) => { - (($val) * 10_u64.pow(9) as f64) as u64 - }; - - ($val: expr, "MNDE") => { - $val * 10_u64.pow(9) - }; - - ($val: expr, "MNDE", f64) => { - (($val) * 10_u64.pow(9) as f64) as u64 - }; - - ($val: expr, "SOL_EQ_ISO") => { - $val * 10_u64.pow(9) - }; - - ($val: expr, "SOL_EQ_ISO", f64) => { - (($val) * 10_u64.pow(9) as f64) as u64 - }; - - ($val: expr, $decimals: expr) => { - $val * 10_u64.pow($decimals as u32) - }; - - ($val: expr, $decimals: expr, f64) => { - (($val) * 10_u64.pow($decimals as u32) as f64) as u64 - }; -} - -#[macro_export] -macro_rules! time { - ($val: expr) => { - $val - }; - - ($val: expr, "s") => { - $val - }; - - ($val: expr, "m") => { - $val * 60 - }; - - ($val: expr, "h") => { - $val * 60 * 60 - }; - - ($val: expr, "d") => { - $val * 60 * 60 * 24 - }; - - ($val: expr, "w") => { - $val * 60 * 60 * 24 * 7 - }; - - ($val: expr, "y") => { - $val * 60 * 60 * 24 * 365 - }; - - ($val: expr, "M") => { - $val * 60 * 60 * 24 * 30 - }; -} - -#[macro_export] -macro_rules! f_native { - ($val: expr) => { - I80F48::from_num($val * 10_u64.pow(6)) - }; -} - -pub fn clone_keypair(keypair: &Keypair) -> Keypair { - Keypair::from_bytes(&keypair.to_bytes()).unwrap() -} - -pub fn get_emissions_authority_address(bank_pk: Pubkey, emissions_mint: Pubkey) -> (Pubkey, u8) { - Pubkey::find_program_address( - &[ - marginfi::constants::EMISSIONS_AUTH_SEED.as_bytes(), - bank_pk.as_ref(), - emissions_mint.as_ref(), - ], - &marginfi::id(), - ) -} - -pub fn get_emissions_token_account_address( - bank_pk: Pubkey, - emissions_mint: Pubkey, -) -> (Pubkey, u8) { - Pubkey::find_program_address( - &[ - marginfi::constants::EMISSIONS_TOKEN_ACCOUNT_SEED.as_bytes(), - bank_pk.as_ref(), - emissions_mint.as_ref(), - ], - &marginfi::id(), - ) -} - -pub fn get_max_deposit_amount_pre_fee(amount: f64) -> f64 { - amount * (1f64 + MAX_FEE_BASIS_POINTS as f64 / 10_000f64) -} - -pub fn get_sufficient_collateral_for_outflow( - target_outflow: f64, - collateral_mint_price: f64, - outflow_mint_price: f64, -) -> f64 { - target_outflow * outflow_mint_price / collateral_mint_price -} - -#[cfg(feature = "lip")] -pub mod lip { - use super::*; - pub fn get_reward_vault_address(campaign_key: Pubkey) -> (Pubkey, u8) { - Pubkey::find_program_address( - &[ - liquidity_incentive_program::constants::CAMPAIGN_SEED.as_bytes(), - campaign_key.as_ref(), - ], - &liquidity_incentive_program::id(), - ) - } - - pub fn get_reward_vault_authority(campaign_key: Pubkey) -> (Pubkey, u8) { - Pubkey::find_program_address( - &[ - liquidity_incentive_program::constants::CAMPAIGN_AUTH_SEED.as_bytes(), - campaign_key.as_ref(), - ], - &liquidity_incentive_program::id(), - ) - } - - pub fn get_temp_token_account_authority(deposit_key: Pubkey) -> (Pubkey, u8) { - Pubkey::find_program_address( - &[ - liquidity_incentive_program::constants::TEMP_TOKEN_ACCOUNT_AUTH_SEED.as_bytes(), - deposit_key.as_ref(), - ], - &liquidity_incentive_program::id(), - ) - } - - pub fn get_deposit_mfi_authority(deposit_key: Pubkey) -> (Pubkey, u8) { - Pubkey::find_program_address( - &[ - liquidity_incentive_program::constants::DEPOSIT_MFI_AUTH_SIGNER_SEED.as_bytes(), - deposit_key.as_ref(), - ], - &liquidity_incentive_program::id(), - ) - } - - pub fn get_marginfi_account_address(deposit_key: Pubkey) -> (Pubkey, u8) { - Pubkey::find_program_address( - &[ - liquidity_incentive_program::constants::MARGINFI_ACCOUNT_SEED.as_bytes(), - deposit_key.as_ref(), - ], - &liquidity_incentive_program::id(), - ) - } -} diff --git a/tests/01_initGroup.spec.ts b/tests/01_initGroup.spec.ts deleted file mode 100644 index 717ffdc7f..000000000 --- a/tests/01_initGroup.spec.ts +++ /dev/null @@ -1,275 +0,0 @@ -import { BN, Program, workspace } from "@coral-xyz/anchor"; -import { PublicKey, Transaction } from "@solana/web3.js"; -import { - editStakedSettings, - groupInitialize, - initStakedSettings, -} from "./utils/group-instructions"; -import { Marginfi } from "../target/types/marginfi"; -import { - globalFeeWallet, - groupAdmin, - marginfiGroup, - oracles, - PROGRAM_FEE_FIXED, - PROGRAM_FEE_RATE, - users, - verbose, -} from "./rootHooks"; -import { - assertBNEqual, - assertI80F48Approx, - assertKeysEqual, -} from "./utils/genericTests"; -import { assert } from "chai"; -import { bigNumberToWrappedI80F48 } from "@mrgnlabs/mrgn-common"; -import { deriveStakedSettings } from "./utils/pdas"; -import { - defaultStakedInterestSettings, - StakedSettingsEdit, -} from "./utils/types"; - -describe("Init group", () => { - const program = workspace.Marginfi as Program; - - it("(admin) Init group - happy path", async () => { - let tx = new Transaction(); - - tx.add( - await groupInitialize(program, { - marginfiGroup: marginfiGroup.publicKey, - admin: groupAdmin.wallet.publicKey, - }) - ); - - await groupAdmin.mrgnProgram.provider.sendAndConfirm(tx, [ - marginfiGroup, - ]); - - let group = await program.account.marginfiGroup.fetch( - marginfiGroup.publicKey - ); - assertKeysEqual(group.admin, groupAdmin.wallet.publicKey); - if (verbose) { - console.log("*init group: " + marginfiGroup.publicKey); - console.log(" group admin: " + group.admin); - } - - const feeCache = group.feeStateCache; - const tolerance = 0.00001; - assertI80F48Approx(feeCache.programFeeFixed, PROGRAM_FEE_FIXED, tolerance); - assertI80F48Approx(feeCache.programFeeRate, PROGRAM_FEE_RATE, tolerance); - assertKeysEqual(feeCache.globalFeeWallet, globalFeeWallet); - }); - - it("(attacker) Tries to init staked settings - should fail", async () => { - const settings = defaultStakedInterestSettings( - oracles.wsolOracle.publicKey - ); - let failed = false; - try { - await users[0].mrgnProgram.provider.sendAndConfirm( - new Transaction().add( - await initStakedSettings(users[0].mrgnProgram, { - group: marginfiGroup.publicKey, - feePayer: groupAdmin.wallet.publicKey, - settings: settings, - }) - ) - ); - } catch (err) { - // generic signature error - failed = true; - } - - assert.ok(failed, "Transaction succeeded when it should have failed"); - }); - - it("(admin) Init staked settings for group - opts in to use staked collateral", async () => { - const settings = defaultStakedInterestSettings( - oracles.wsolOracle.publicKey - ); - await groupAdmin.mrgnProgram.provider.sendAndConfirm( - new Transaction().add( - await initStakedSettings(groupAdmin.mrgnProgram, { - group: marginfiGroup.publicKey, - feePayer: groupAdmin.wallet.publicKey, - settings: settings, - }) - ) - ); - - const [settingsKey] = deriveStakedSettings( - program.programId, - marginfiGroup.publicKey - ); - if (verbose) { - console.log("*init staked settings: " + settingsKey); - } - - let settingsAcc = await program.account.stakedSettings.fetch(settingsKey); - assertKeysEqual(settingsAcc.key, settingsKey); - assertKeysEqual(settingsAcc.oracle, oracles.wsolOracle.publicKey); - assertI80F48Approx(settingsAcc.assetWeightInit, 0.8); - assertI80F48Approx(settingsAcc.assetWeightMaint, 0.9); - assertBNEqual(settingsAcc.depositLimit, 1_000_000_000_000); - assertBNEqual(settingsAcc.totalAssetValueInitLimit, 150_000_000); - assert.equal(settingsAcc.oracleMaxAge, 60); - assert.deepEqual(settingsAcc.riskTier, { collateral: {} }); - }); - - it("(attacker) Tries to edit staked settings - should fail", async () => { - const settings: StakedSettingsEdit = { - oracle: PublicKey.default, - assetWeightInit: bigNumberToWrappedI80F48(0.2), - assetWeightMaint: bigNumberToWrappedI80F48(0.3), - depositLimit: new BN(42), - totalAssetValueInitLimit: new BN(43), - oracleMaxAge: 44, - riskTier: { - isolated: undefined, - }, - }; - let failed = false; - try { - const [settingsKey] = deriveStakedSettings( - program.programId, - marginfiGroup.publicKey - ); - - await users[0].mrgnProgram.provider.sendAndConfirm( - new Transaction().add( - await editStakedSettings(users[0].mrgnProgram, { - settingsKey: settingsKey, - settings: settings, - }) - ) - ); - } catch (err) { - // generic signature error - failed = true; - } - assert.ok(failed, "Transaction succeeded when it should have failed"); - }); - - // Note: there are no Staked Collateral positions in the end to end test suite (those are in the - // BankRun suite e.g. s01) so these settings do nothing. - - it("(admin) Edit staked settings for group", async () => { - const settings: StakedSettingsEdit = { - oracle: PublicKey.default, - assetWeightInit: bigNumberToWrappedI80F48(0.2), - assetWeightMaint: bigNumberToWrappedI80F48(0.3), - depositLimit: new BN(42), - totalAssetValueInitLimit: new BN(43), - oracleMaxAge: 44, - riskTier: { - collateral: undefined, - }, - }; - const [settingsKey] = deriveStakedSettings( - program.programId, - marginfiGroup.publicKey - ); - - await groupAdmin.mrgnProgram.provider.sendAndConfirm( - new Transaction().add( - await editStakedSettings(groupAdmin.mrgnProgram, { - settingsKey: settingsKey, - settings: settings, - }) - ) - ); - - if (verbose) { - console.log("*edit staked settings: " + settingsKey); - } - - let settingsAcc = await program.account.stakedSettings.fetch(settingsKey); - assertKeysEqual(settingsAcc.key, settingsKey); - assertKeysEqual(settingsAcc.oracle, PublicKey.default); - assertI80F48Approx(settingsAcc.assetWeightInit, 0.2); - assertI80F48Approx(settingsAcc.assetWeightMaint, 0.3); - assertBNEqual(settingsAcc.depositLimit, 42); - assertBNEqual(settingsAcc.totalAssetValueInitLimit, 43); - assert.equal(settingsAcc.oracleMaxAge, 44); - assert.deepEqual(settingsAcc.riskTier, { collateral: {} }); // no change - }); - - it("(admin) Partial settings update", async () => { - const settings: StakedSettingsEdit = { - oracle: null, - assetWeightInit: null, - assetWeightMaint: null, - depositLimit: null, - totalAssetValueInitLimit: null, - oracleMaxAge: 60, - riskTier: null, - }; - const [settingsKey] = deriveStakedSettings( - program.programId, - marginfiGroup.publicKey - ); - - await groupAdmin.mrgnProgram.provider.sendAndConfirm( - new Transaction().add( - await editStakedSettings(groupAdmin.mrgnProgram, { - settingsKey: settingsKey, - settings: settings, - }) - ) - ); - - let settingsAcc = await program.account.stakedSettings.fetch(settingsKey); - // No change - assertKeysEqual(settingsAcc.key, settingsKey); - assertKeysEqual(settingsAcc.oracle, PublicKey.default); - assertI80F48Approx(settingsAcc.assetWeightInit, 0.2); - assertI80F48Approx(settingsAcc.assetWeightMaint, 0.3); - assertBNEqual(settingsAcc.depositLimit, 42); - assertBNEqual(settingsAcc.totalAssetValueInitLimit, 43); - assert.deepEqual(settingsAcc.riskTier, { collateral: {} }); - - assert.equal(settingsAcc.oracleMaxAge, 60); - }); - - // Note: Isolated riskTier requires the weights to be zero, so this is invalid... - it("(admin) Bad settings update - should fail", async () => { - const settings: StakedSettingsEdit = { - oracle: null, - assetWeightInit: null, - assetWeightMaint: null, - depositLimit: null, - totalAssetValueInitLimit: null, - oracleMaxAge: 60, - riskTier: { - isolated: undefined, - }, - }; - const [settingsKey] = deriveStakedSettings( - program.programId, - marginfiGroup.publicKey - ); - - let failed = false; - try { - await groupAdmin.mrgnProgram.provider.sendAndConfirm( - new Transaction().add( - await editStakedSettings(groupAdmin.mrgnProgram, { - settingsKey: settingsKey, - settings: settings, - }) - ) - ); - } catch (err) { - // TODO create a util for this that fails with more detail - assert.ok( - err.logs.some((log: string) => - log.includes("Error Code: InvalidConfig") - ) - ); - failed = true; - } - assert.ok(failed, "Transaction succeeded when it should have failed"); - }); -}); diff --git a/tests/02_configGroup.spec.ts b/tests/02_configGroup.spec.ts deleted file mode 100644 index 91ae1c7a4..000000000 --- a/tests/02_configGroup.spec.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { Program, workspace } from "@coral-xyz/anchor"; -import { Keypair, Transaction } from "@solana/web3.js"; -import { groupConfigure } from "./utils/group-instructions"; -import { Marginfi } from "../target/types/marginfi"; -import { groupAdmin, marginfiGroup } from "./rootHooks"; -import { assertKeysEqual } from "./utils/genericTests"; - -describe("Config group", () => { - const program = workspace.Marginfi as Program; - - it("(admin) Config group - no change", async () => { - await groupAdmin.mrgnProgram.provider.sendAndConfirm!( - new Transaction().add( - await groupConfigure(groupAdmin.mrgnProgram, { - newAdmin: null, - marginfiGroup: marginfiGroup.publicKey, - }) - ) - ); - - let group = await program.account.marginfiGroup.fetch( - marginfiGroup.publicKey - ); - assertKeysEqual(group.admin, groupAdmin.wallet.publicKey); - }); - - it("(admin) Config group - set new admin", async () => { - let newAdmin = Keypair.generate(); - await groupAdmin.mrgnProgram.provider.sendAndConfirm!( - new Transaction().add( - await groupConfigure(groupAdmin.mrgnProgram, { - newAdmin: newAdmin.publicKey, - marginfiGroup: marginfiGroup.publicKey, - }) - ) - ); - - let group = await program.account.marginfiGroup.fetch( - marginfiGroup.publicKey - ); - assertKeysEqual(group.admin, newAdmin.publicKey); - - // Restore original - await groupAdmin.mrgnProgram.provider.sendAndConfirm!( - new Transaction().add( - await groupAdmin.mrgnProgram.methods - .marginfiGroupConfigure(groupAdmin.wallet.publicKey, false) - .accountsPartial({ - marginfiGroup: marginfiGroup.publicKey, - admin: newAdmin.publicKey, - }) - .instruction() - - // Note: Fails because admin is incorrectly implied, TODO figure out why... - // await groupConfigure(groupAdmin.mrgnProgram, { - // newAdmin: groupAdmin.wallet.publicKey, - // marginfiGroup: marginfiGroup.publicKey, - // }) - ), - [newAdmin] - ); - - group = await program.account.marginfiGroup.fetch(marginfiGroup.publicKey); - assertKeysEqual(group.admin, groupAdmin.wallet.publicKey); - }); -}); diff --git a/tests/03_addBank.spec.ts b/tests/03_addBank.spec.ts deleted file mode 100644 index 85e314b8b..000000000 --- a/tests/03_addBank.spec.ts +++ /dev/null @@ -1,383 +0,0 @@ -import { BN, Program, workspace } from "@coral-xyz/anchor"; -import { AccountMeta, PublicKey, Transaction } from "@solana/web3.js"; -import { addBank, configureBankOracle } from "./utils/group-instructions"; -import { Marginfi } from "../target/types/marginfi"; -import { - bankKeypairA, - bankKeypairUsdc, - ecosystem, - globalFeeWallet, - groupAdmin, - INIT_POOL_ORIGINATION_FEE, - marginfiGroup, - oracles, - printBuffers, - verbose, -} from "./rootHooks"; -import { - assertBNEqual, - assertI80F48Approx, - assertI80F48Equal, - assertKeyDefault, - assertKeysEqual, -} from "./utils/genericTests"; -import { - ASSET_TAG_DEFAULT, - defaultBankConfig, - ORACLE_SETUP_PYTH_LEGACY, -} from "./utils/types"; -import { - deriveLiquidityVaultAuthority, - deriveLiquidityVault, - deriveInsuranceVaultAuthority, - deriveInsuranceVault, - deriveFeeVaultAuthority, - deriveFeeVault, -} from "./utils/pdas"; -import { assert } from "chai"; -import { printBufferGroups } from "./utils/tools"; - -describe("Lending pool add bank (add bank to group)", () => { - const program = workspace.Marginfi as Program; - - it("(admin) Add bank (USDC) - happy path", async () => { - let setConfig = defaultBankConfig(); - let bankKey = bankKeypairUsdc.publicKey; - const now = Date.now() / 1000; - - const feeAccSolBefore = await program.provider.connection.getBalance( - globalFeeWallet - ); - - await groupAdmin.mrgnProgram.provider.sendAndConfirm( - new Transaction().add( - await addBank(groupAdmin.mrgnProgram, { - marginfiGroup: marginfiGroup.publicKey, - feePayer: groupAdmin.wallet.publicKey, - bankMint: ecosystem.usdcMint.publicKey, - bank: bankKey, - // globalFeeWallet: globalFeeWallet, - config: setConfig, - }) - ), - [bankKeypairUsdc] - ); - - // Note: you can pack this in the same tx if you use partial accounts. See test below for an - // example. Anchor account inference won't work if the bank doesn't exist yet. - await groupAdmin.mrgnProgram.provider.sendAndConfirm( - new Transaction().add( - await configureBankOracle(groupAdmin.mrgnProgram, { - bank: bankKey, - type: ORACLE_SETUP_PYTH_LEGACY, - oracle: oracles.usdcOracle.publicKey, - }) - ) - ); - - const feeAccSolAfter = await program.provider.connection.getBalance( - globalFeeWallet - ); - - if (verbose) { - console.log("*init USDC bank " + bankKey); - console.log( - " Origination fee collected: " + (feeAccSolAfter - feeAccSolBefore) - ); - } - - assert.equal(feeAccSolAfter - feeAccSolBefore, INIT_POOL_ORIGINATION_FEE); - - let bankData = ( - await program.provider.connection.getAccountInfo(bankKey) - ).data.subarray(8); - if (printBuffers) { - printBufferGroups(bankData, 16, 896); - } - - const bank = await program.account.bank.fetch(bankKey); - const config = bank.config; - const interest = config.interestRateConfig; - const id = program.programId; - - assertKeysEqual(bank.mint, ecosystem.usdcMint.publicKey); - assert.equal(bank.mintDecimals, ecosystem.usdcDecimals); - assertKeysEqual(bank.group, marginfiGroup.publicKey); - - // Keys and bumps... - assertKeysEqual(config.oracleKeys[0], oracles.usdcOracle.publicKey); - - const [_liqAuth, liqAuthBump] = deriveLiquidityVaultAuthority(id, bankKey); - const [liquidityVault, liqVaultBump] = deriveLiquidityVault(id, bankKey); - assertKeysEqual(bank.liquidityVault, liquidityVault); - assert.equal(bank.liquidityVaultBump, liqVaultBump); - assert.equal(bank.liquidityVaultAuthorityBump, liqAuthBump); - - const [_insAuth, insAuthBump] = deriveInsuranceVaultAuthority(id, bankKey); - const [insuranceVault, insurVaultBump] = deriveInsuranceVault(id, bankKey); - assertKeysEqual(bank.insuranceVault, insuranceVault); - assert.equal(bank.insuranceVaultBump, insurVaultBump); - assert.equal(bank.insuranceVaultAuthorityBump, insAuthBump); - - const [_feeVaultAuth, feeAuthBump] = deriveFeeVaultAuthority(id, bankKey); - const [feeVault, feeVaultBump] = deriveFeeVault(id, bankKey); - assertKeysEqual(bank.feeVault, feeVault); - assert.equal(bank.feeVaultBump, feeVaultBump); - assert.equal(bank.feeVaultAuthorityBump, feeAuthBump); - - assertKeyDefault(bank.emissionsMint); - - // Constants/Defaults... - assertI80F48Equal(bank.assetShareValue, 1); - assertI80F48Equal(bank.liabilityShareValue, 1); - assertI80F48Equal(bank.collectedInsuranceFeesOutstanding, 0); - assertI80F48Equal(bank.collectedGroupFeesOutstanding, 0); - assertI80F48Equal(bank.totalLiabilityShares, 0); - assertI80F48Equal(bank.totalAssetShares, 0); - assertBNEqual(bank.flags, 0); - assertBNEqual(bank.emissionsRate, 0); - assertI80F48Equal(bank.emissionsRemaining, 0); - - // Settings and non-default values... - let lastUpdate = bank.lastUpdate.toNumber(); - assert.approximately(now, lastUpdate, 2); - assertI80F48Equal(config.assetWeightInit, 1); - assertI80F48Equal(config.assetWeightMaint, 1); - assertI80F48Equal(config.liabilityWeightInit, 1); - assertI80F48Equal(config.liabilityWeightMaint, 1); - assertBNEqual(config.depositLimit, 100_000_000_000); - - const tolerance = 0.000001; - assertI80F48Approx(interest.optimalUtilizationRate, 0.5, tolerance); - assertI80F48Approx(interest.plateauInterestRate, 0.6, tolerance); - assertI80F48Approx(interest.maxInterestRate, 3, tolerance); - - assertI80F48Approx(interest.insuranceFeeFixedApr, 0.01, tolerance); - assertI80F48Approx(interest.insuranceIrFee, 0.02, tolerance); - assertI80F48Approx(interest.protocolFixedFeeApr, 0.03, tolerance); - assertI80F48Approx(interest.protocolIrFee, 0.04, tolerance); - assertI80F48Approx(interest.protocolOriginationFee, 0.01, tolerance); - - assertI80F48Approx(interest.protocolOriginationFee, 0.01, tolerance); - - assert.deepEqual(config.operationalState, { operational: {} }); - assert.deepEqual(config.oracleSetup, { pythLegacy: {} }); - assertBNEqual(config.borrowLimit, 100_000_000_000); - assert.deepEqual(config.riskTier, { collateral: {} }); - assert.equal(config.assetTag, ASSET_TAG_DEFAULT); - assertBNEqual(config.totalAssetValueInitLimit, 1_000_000_000_000); - assert.equal(config.oracleMaxAge, 240); - - assertI80F48Equal(bank.collectedProgramFeesOutstanding, 0); - }); - - it("(admin) Add bank (token A) - happy path", async () => { - let config = defaultBankConfig(); - let bankKey = bankKeypairA.publicKey; - - // Example: packing the oracle config in the same tx as the bank init - const oracleMeta: AccountMeta = { - pubkey: oracles.tokenAOracle.publicKey, - isSigner: false, - isWritable: false, - }; - const config_ix = await program.methods - .lendingPoolConfigureBankOracle( - ORACLE_SETUP_PYTH_LEGACY, - oracles.tokenAOracle.publicKey - ) - .accountsPartial({ - group: marginfiGroup.publicKey, - bank: bankKey, - admin: groupAdmin.wallet.publicKey, - }) - .remainingAccounts([oracleMeta]) - .instruction(); - - await groupAdmin.mrgnProgram.provider.sendAndConfirm!( - new Transaction().add( - await addBank(groupAdmin.mrgnProgram, { - marginfiGroup: marginfiGroup.publicKey, - feePayer: groupAdmin.wallet.publicKey, - bankMint: ecosystem.tokenAMint.publicKey, - bank: bankKey, - // globalFeeWallet: globalFeeWallet, - config: config, - }), - config_ix - ), - [bankKeypairA] - ); - - if (verbose) { - console.log("*init token A bank " + bankKey); - } - }); - - it("Decodes a mainnet bank configured before manual padding", async () => { - // mainnet program ID - const id = new PublicKey("MFv2hWf31Z9kbCa1snEPYctwafyhdvnV7FZnsebVacA"); - const group = new PublicKey("4qp6Fx6tnZkY5Wropq9wUYgtFxXKwE6viZxFHg3rdAG8"); - - let bonkBankKey = new PublicKey( - "DeyH7QxWvnbbaVB4zFrf4hoq7Q8z1ZT14co42BGwGtfM" - ); - let bonkBankData = ( - await program.provider.connection.getAccountInfo(bonkBankKey) - ).data.subarray(8); - if (printBuffers) { - printBufferGroups(bonkBankData, 16, 896); - } - - let cloudBankKey = new PublicKey( - "4kNXetv8hSv9PzvzPZzEs1CTH6ARRRi2b8h6jk1ad1nP" - ); - let cloudBankData = ( - await program.provider.connection.getAccountInfo(cloudBankKey) - ).data.subarray(8); - if (printBuffers) { - printBufferGroups(cloudBankData, 16, 896); - } - - const bbk = bonkBankKey; - const bb = await program.account.bank.fetch(bonkBankKey); - const bonkConfig = bb.config; - const bonkInterest = bonkConfig.interestRateConfig; - - assertKeysEqual( - bb.mint, - new PublicKey("DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263") - ); - assert.equal(bb.mintDecimals, 5); - assertKeysEqual(bb.group, group); - - const [_liqAu_bb, liqAuBmp_bb] = deriveLiquidityVaultAuthority(id, bbk); - const [liquidityVault_bb, liqVaultBump_bb] = deriveLiquidityVault(id, bbk); - assertKeysEqual(bb.liquidityVault, liquidityVault_bb); - assert.equal(bb.liquidityVaultBump, liqVaultBump_bb); - assert.equal(bb.liquidityVaultAuthorityBump, liqAuBmp_bb); - - const [_insAu_bb, insAuBmp_bb] = deriveInsuranceVaultAuthority(id, bbk); - const [insVault_bb, insVaultBump_bb] = deriveInsuranceVault(id, bbk); - assertKeysEqual(bb.insuranceVault, insVault_bb); - assert.equal(bb.insuranceVaultBump, insVaultBump_bb); - assert.equal(bb.insuranceVaultAuthorityBump, insAuBmp_bb); - - const [_feeVaultAuth_bb, feeAuthBump_bb] = deriveFeeVaultAuthority(id, bbk); - const [feeVault_bb, feeVaultBump_bb] = deriveFeeVault(id, bbk); - assertKeysEqual(bb.feeVault, feeVault_bb); - assert.equal(bb.feeVaultBump, feeVaultBump_bb); - assert.equal(bb.feeVaultAuthorityBump, feeAuthBump_bb); - - assertKeyDefault(bb.emissionsMint); - - // Constants/Defaults... - // assertI80F48Equal(bank.assetShareValue, 1); - // assertI80F48Equal(bank.liabilityShareValue, 1); - // assertI80F48Equal(bank.collectedInsuranceFeesOutstanding, 0); - // assertI80F48Equal(bank.collectedGroupFeesOutstanding, 0); - // assertI80F48Equal(bank.totalLiabilityShares, 0); - // assertI80F48Equal(bank.totalAssetShares, 0); - assertBNEqual(bb.flags, 0); - assertBNEqual(bb.emissionsRate, 0); - assertI80F48Equal(bb.emissionsRemaining, 0); - - // Settings and non-default values... - // let lastUpdate = bank.lastUpdate.toNumber(); - // assert.approximately(now, lastUpdate, 2); - // assertI80F48Equal(config.assetWeightInit, 1); - // assertI80F48Equal(config.assetWeightMaint, 1); - // assertI80F48Equal(config.liabilityWeightInit, 1); - - // 1 trillion BONK with 5 decimals (100_000_000_000_000_000) - assertBNEqual(bonkConfig.depositLimit, new BN("100000000000000000")); - - // assertI80F48Approx(interest.optimalUtilizationRate, 0.5, tolerance); - // assertI80F48Approx(interest.plateauInterestRate, 0.6, tolerance); - // assertI80F48Approx(interest.maxInterestRate, 3, tolerance); - // assertI80F48Equal(interest.insuranceFeeFixedApr, 0); - // assertI80F48Equal(interest.insuranceIrFee, 0); - // assertI80F48Equal(interest.protocolFixedFeeApr, 0); - // assertI80F48Equal(interest.protocolIrFee, 0); - - // Bank added before this feature existed, should be zero - assertI80F48Equal(bonkInterest.protocolOriginationFee, 0); - - assert.deepEqual(bonkConfig.operationalState, { operational: {} }); - assert.deepEqual(bonkConfig.oracleSetup, { pythPushOracle: {} }); - // roughly 26.41 billion BONK with 5 decimals. - assertBNEqual(bonkConfig.borrowLimit, 2_640_570_785_700_000); - assert.deepEqual(bonkConfig.riskTier, { collateral: {} }); - assertBNEqual(bonkConfig.totalAssetValueInitLimit, 38_866_899); - assert.equal(bonkConfig.oracleMaxAge, 120); - - const cbk = cloudBankKey; - const cb = await program.account.bank.fetch(cloudBankKey); - const cloudConfig = cb.config; - const cloudInterest = cloudConfig.interestRateConfig; - - assertKeysEqual( - cb.mint, - new PublicKey("CLoUDKc4Ane7HeQcPpE3YHnznRxhMimJ4MyaUqyHFzAu") - ); - assert.equal(cb.mintDecimals, 9); - assertKeysEqual(cb.group, group); - - const [_liqAu_cb, liqAuBmp_cb] = deriveLiquidityVaultAuthority(id, cbk); - const [liquidityVault_cb, liqVaultBump_cb] = deriveLiquidityVault(id, cbk); - assertKeysEqual(cb.liquidityVault, liquidityVault_cb); - assert.equal(cb.liquidityVaultBump, liqVaultBump_cb); - assert.equal(cb.liquidityVaultAuthorityBump, liqAuBmp_cb); - - const [_insAu_cb, insAuBmp_cb] = deriveInsuranceVaultAuthority(id, cbk); - const [insVault_cb, insVaultBump_cb] = deriveInsuranceVault(id, cbk); - assertKeysEqual(cb.insuranceVault, insVault_cb); - assert.equal(cb.insuranceVaultBump, insVaultBump_cb); - assert.equal(cb.insuranceVaultAuthorityBump, insAuBmp_cb); - - const [_feeVaultAuth_cb, feeAuthBump_cb] = deriveFeeVaultAuthority(id, cbk); - const [feeVault_cb, feeVaultBump_cb] = deriveFeeVault(id, cbk); - assertKeysEqual(cb.feeVault, feeVault_cb); - assert.equal(cb.feeVaultBump, feeVaultBump_cb); - assert.equal(cb.feeVaultAuthorityBump, feeAuthBump_cb); - - assertKeyDefault(cb.emissionsMint); - - assertBNEqual(cb.flags, 0); - assertBNEqual(cb.emissionsRate, 0); - assertI80F48Equal(cb.emissionsRemaining, 0); - - // 1 million CLOUD with 9 decimals (1_000_000_000_000_000) - assertBNEqual(cloudConfig.depositLimit, 1_000_000_000_000_000); - - // Bank added before this feature existed, should be zero - assertI80F48Equal(cloudInterest.protocolOriginationFee, 0); - - assert.deepEqual(cloudConfig.operationalState, { operational: {} }); - assert.deepEqual(cloudConfig.oracleSetup, { switchboardV2: {} }); - // 50,000 CLOUD with 9 decimals (50_000_000_000_000) - assertBNEqual(cloudConfig.borrowLimit, 50_000_000_000_000); - assert.deepEqual(cloudConfig.riskTier, { isolated: {} }); - assertBNEqual(cloudConfig.totalAssetValueInitLimit, 0); - assert.equal(cloudConfig.oracleMaxAge, 60); - - // Assert emissions mint (one of the last fields) is also aligned correctly. - let pyUsdcBankKey = new PublicKey( - "Fe5QkKPVAh629UPP5aJ8sDZu8HTfe6M26jDQkKyXVhoA" - ); - let pyUsdcBankData = ( - await program.provider.connection.getAccountInfo(pyUsdcBankKey) - ).data.subarray(8); - if (printBuffers) { - printBufferGroups(pyUsdcBankData, 16, 896); - } - - const pb = await program.account.bank.fetch(pyUsdcBankKey); - assertKeysEqual( - pb.emissionsMint, - new PublicKey("2b1kV6DkPAnxd5ixfnxCpjxmKwqjjaYmCZfHsFu24GXo") - ); - }); -}); - -// TODO add bank with seed diff --git a/tests/04_configureBank.spec.ts b/tests/04_configureBank.spec.ts deleted file mode 100644 index a9673d9cb..000000000 --- a/tests/04_configureBank.spec.ts +++ /dev/null @@ -1,260 +0,0 @@ -import { BN, Program, workspace } from "@coral-xyz/anchor"; -import { configureBank, configureBankOracle } from "./utils/group-instructions"; -import { PublicKey, Transaction } from "@solana/web3.js"; -import { Marginfi } from "../target/types/marginfi"; -import { - bankKeypairUsdc, - groupAdmin, - marginfiGroup, - oracles, - users, -} from "./rootHooks"; -import { - assertBNEqual, - assertI80F48Approx, - assertKeysEqual, - expectFailedTxWithError, - expectFailedTxWithMessage, -} from "./utils/genericTests"; -import { assert } from "chai"; -import { bigNumberToWrappedI80F48 } from "@mrgnlabs/mrgn-common"; -import { - ASSET_TAG_SOL, - BankConfigOptWithAssetTag, - defaultBankConfigOptRaw, - FREEZE_SETTINGS, - InterestRateConfigRawWithOrigination, -} from "./utils/types"; - -describe("Lending pool configure bank", () => { - const program = workspace.Marginfi as Program; - - it("(admin) Configure bank (USDC) - happy path", async () => { - const bankKey = bankKeypairUsdc.publicKey; - let interestRateConfig: InterestRateConfigRawWithOrigination = { - optimalUtilizationRate: bigNumberToWrappedI80F48(0.1), - plateauInterestRate: bigNumberToWrappedI80F48(0.2), - maxInterestRate: bigNumberToWrappedI80F48(4), - insuranceFeeFixedApr: bigNumberToWrappedI80F48(0.3), - insuranceIrFee: bigNumberToWrappedI80F48(0.4), - protocolFixedFeeApr: bigNumberToWrappedI80F48(0.5), - protocolIrFee: bigNumberToWrappedI80F48(0.6), - protocolOriginationFee: bigNumberToWrappedI80F48(0.7), - }; - - let bankConfigOpt: BankConfigOptWithAssetTag = { - assetWeightInit: bigNumberToWrappedI80F48(0.6), - assetWeightMaint: bigNumberToWrappedI80F48(0.7), - liabilityWeightInit: bigNumberToWrappedI80F48(1.9), - liabilityWeightMaint: bigNumberToWrappedI80F48(1.8), - depositLimit: new BN(5000), - borrowLimit: new BN(10000), - riskTier: null, - assetTag: ASSET_TAG_SOL, - totalAssetValueInitLimit: new BN(15000), - interestRateConfig: interestRateConfig, - operationalState: { - paused: undefined, - }, - oracleMaxAge: 150, - permissionlessBadDebtSettlement: null, - freezeSettings: null, - }; - - await groupAdmin.mrgnProgram.provider.sendAndConfirm!( - new Transaction().add( - await configureBank(groupAdmin.mrgnProgram, { - bank: bankKey, - bankConfigOpt: bankConfigOpt, - }) - ) - ); - - const bank = await program.account.bank.fetch(bankKey); - const config = bank.config; - const interest = config.interestRateConfig; - - assertI80F48Approx(config.assetWeightInit, 0.6); - assertI80F48Approx(config.assetWeightMaint, 0.7); - assertI80F48Approx(config.liabilityWeightInit, 1.9); - assertI80F48Approx(config.liabilityWeightMaint, 1.8); - assertBNEqual(config.depositLimit, 5000); - - assertI80F48Approx(interest.optimalUtilizationRate, 0.1); - assertI80F48Approx(interest.plateauInterestRate, 0.2); - assertI80F48Approx(interest.maxInterestRate, 4); - assertI80F48Approx(interest.insuranceFeeFixedApr, 0.3); - assertI80F48Approx(interest.insuranceIrFee, 0.4); - assertI80F48Approx(interest.protocolFixedFeeApr, 0.5); - assertI80F48Approx(interest.protocolIrFee, 0.6); - assertI80F48Approx(interest.protocolOriginationFee, 0.7); - - assert.deepEqual(config.operationalState, { paused: {} }); - assert.deepEqual(config.oracleSetup, { pythLegacy: {} }); // no change - assertBNEqual(config.borrowLimit, 10000); - assert.deepEqual(config.riskTier, { collateral: {} }); // no change - assert.equal(config.assetTag, ASSET_TAG_SOL); - assertBNEqual(config.totalAssetValueInitLimit, 15000); - assert.equal(config.oracleMaxAge, 150); - }); - - it("(admin) Restore default settings to bank (USDC)", async () => { - await groupAdmin.mrgnProgram.provider.sendAndConfirm!( - new Transaction().add( - await configureBank(groupAdmin.mrgnProgram, { - bank: bankKeypairUsdc.publicKey, - bankConfigOpt: defaultBankConfigOptRaw(), - }) - ) - ); - }); - - it("(admin) update oracle (USDC)", async () => { - const bankKey = bankKeypairUsdc.publicKey; - await groupAdmin.mrgnProgram!.provider.sendAndConfirm!( - new Transaction().add( - await configureBankOracle(groupAdmin.mrgnProgram, { - bank: bankKey, - type: 1, // pyth legacy - oracle: oracles.tokenAOracle.publicKey, - }) - ) - ); - const bank = await program.account.bank.fetch(bankKey); - const config = bank.config; - assert.deepEqual(config.oracleSetup, { pythLegacy: {} }); // no change - assertKeysEqual(config.oracleKeys[0], oracles.tokenAOracle.publicKey); - }); - - it("(admin) restore to valid oracle (USDC)", async () => { - const bankKey = bankKeypairUsdc.publicKey; - await groupAdmin.mrgnProgram.provider.sendAndConfirm!( - new Transaction().add( - await configureBankOracle(groupAdmin.mrgnProgram, { - bank: bankKey, - type: 1, - oracle: oracles.usdcOracle.publicKey, - }) - ) - ); - const bank = await program.account.bank.fetch(bankKey); - const config = bank.config; - assert.deepEqual(config.oracleSetup, { pythLegacy: {} }); // no change - assertKeysEqual(config.oracleKeys[0], oracles.usdcOracle.publicKey); - }); - - it("(admin) update oracle to invalid state - should fail", async () => { - const bankKey = bankKeypairUsdc.publicKey; - await expectFailedTxWithError(async () => { - await groupAdmin.mrgnProgram.provider.sendAndConfirm!( - new Transaction().add( - await configureBankOracle(groupAdmin.mrgnProgram, { - bank: bankKey, - type: 2, - oracle: oracles.tokenAOracle.publicKey, - }) - ) - ); - }, "InternalLogicError"); - - await expectFailedTxWithMessage(async () => { - await groupAdmin.mrgnProgram.provider.sendAndConfirm!( - new Transaction().add( - await configureBankOracle(groupAdmin.mrgnProgram, { - bank: bankKey, - type: 42, - oracle: oracles.tokenAOracle.publicKey, - }) - ) - ); - }, "unsupported oracle type"); - }); - - it("(attacker) tries to change oracle - should fail with generic signature failure", async () => { - const bankKey = bankKeypairUsdc.publicKey; - - await expectFailedTxWithError(async () => { - await users[0].mrgnProgram.provider.sendAndConfirm!( - new Transaction().add( - await configureBankOracle(users[0].mrgnProgram, { - bank: bankKey, - type: 1, - oracle: oracles.wsolOracle.publicKey, - }) - ) - ); - }, "ConstraintHasOne"); - - await expectFailedTxWithMessage(async () => { - await users[0].mrgnProgram!.provider.sendAndConfirm!( - new Transaction().add( - await configureBankOracle(groupAdmin.mrgnProgram, { - bank: bankKey, - type: 1, - oracle: oracles.wsolOracle.publicKey, - }) - ) - ); - }, "Missing signature for"); - }); - - it("(admin) Freeze USDC settings so they cannot be changed again (USDC)", async () => { - let config = defaultBankConfigOptRaw(); - config.freezeSettings = true; - await groupAdmin.mrgnProgram.provider.sendAndConfirm!( - new Transaction().add( - await configureBank(groupAdmin.mrgnProgram, { - bank: bankKeypairUsdc.publicKey, - bankConfigOpt: config, - }) - ) - ); - const bank = await program.account.bank.fetch(bankKeypairUsdc.publicKey); - assertBNEqual(bank.flags, FREEZE_SETTINGS); - }); - - it("(admin) attempt to update oracle after freeze - fails with generic panic", async () => { - const bankKey = bankKeypairUsdc.publicKey; - - await expectFailedTxWithMessage(async () => { - await groupAdmin.mrgnProgram.provider.sendAndConfirm!( - new Transaction().add( - await configureBankOracle(groupAdmin.mrgnProgram, { - bank: bankKey, - type: 1, - oracle: oracles.wsolOracle.publicKey, - }) - ) - ); - }, "change oracle settings on frozen banks"); - }); - - it("(admin) Update settings after a freeze - only deposit/borrow caps update", async () => { - let configNew = defaultBankConfigOptRaw(); - const newDepositLimit = new BN(2_000_000_000); - const newBorrowLimit = new BN(3_000_000_000); - configNew.depositLimit = newDepositLimit; - configNew.borrowLimit = newBorrowLimit; - - // These will be ignored... - configNew.oracleMaxAge = 42; - configNew.freezeSettings = false; - - await groupAdmin.mrgnProgram.provider.sendAndConfirm!( - new Transaction().add( - await configureBank(groupAdmin.mrgnProgram, { - bank: bankKeypairUsdc.publicKey, - bankConfigOpt: configNew, - }) - ) - ); - const bank = await program.account.bank.fetch(bankKeypairUsdc.publicKey); - const config = bank.config; - assertBNEqual(config.depositLimit, newDepositLimit); - assertBNEqual(config.borrowLimit, newBorrowLimit); - - // Ignored fields didn't change.. - assert.equal(config.oracleMaxAge, 240); - assertBNEqual(bank.flags, FREEZE_SETTINGS); // still frozen - }); -}); diff --git a/tests/05_setupEmissions.spec.ts b/tests/05_setupEmissions.spec.ts deleted file mode 100644 index ebdd1671b..000000000 --- a/tests/05_setupEmissions.spec.ts +++ /dev/null @@ -1,150 +0,0 @@ -import { - AnchorProvider, - BN, - getProvider, - Program, - Wallet, - workspace, -} from "@coral-xyz/anchor"; -import { Transaction } from "@solana/web3.js"; -import { setupEmissions, updateEmissions } from "./utils/group-instructions"; -import { Marginfi } from "../target/types/marginfi"; -import { - bankKeypairUsdc, - ecosystem, - groupAdmin, - marginfiGroup, - verbose, -} from "./rootHooks"; -import { - assertBNEqual, - assertI80F48Approx, - assertKeysEqual, - getTokenBalance, -} from "./utils/genericTests"; -import { assert } from "chai"; -import { - EMISSIONS_FLAG_BORROW_ACTIVE, - EMISSIONS_FLAG_LENDING_ACTIVE, -} from "./utils/types"; -import { createMintToInstruction } from "@solana/spl-token"; -import { deriveEmissionsAuth, deriveEmissionsTokenAccount } from "./utils/pdas"; - -describe("Lending pool set up emissions", () => { - const program = workspace.Marginfi as Program; - const provider = getProvider() as AnchorProvider; - const wallet = provider.wallet as Wallet; - - const emissionRate = new BN(500_000 * 10 ** ecosystem.tokenBDecimals); - const totalEmissions = new BN(1_000_000 * 10 ** ecosystem.tokenBDecimals); - - it("Mint token B to the group admin for funding emissions", async () => { - let tx: Transaction = new Transaction(); - tx.add( - createMintToInstruction( - ecosystem.tokenBMint.publicKey, - groupAdmin.tokenBAccount, - wallet.publicKey, - BigInt(100_000_000) * BigInt(10 ** ecosystem.tokenBDecimals) - ) - ); - await program.provider.sendAndConfirm(tx); - }); - - it("(admin) Set up to token B emissions on (USDC) bank - happy path", async () => { - const adminBBefore = await getTokenBalance( - provider, - groupAdmin.tokenBAccount - ); - const [emissionsAccKey] = deriveEmissionsTokenAccount( - program.programId, - bankKeypairUsdc.publicKey, - ecosystem.tokenBMint.publicKey - ); - // Note: an uninitialized account that does nothing... - const [emissionsAuthKey] = deriveEmissionsAuth( - program.programId, - bankKeypairUsdc.publicKey, - ecosystem.tokenBMint.publicKey - ); - - await groupAdmin.mrgnProgram.provider.sendAndConfirm!( - new Transaction().add( - await setupEmissions(groupAdmin.mrgnProgram, { - bank: bankKeypairUsdc.publicKey, - emissionsMint: ecosystem.tokenBMint.publicKey, - fundingAccount: groupAdmin.tokenBAccount, - emissionsFlags: new BN( - EMISSIONS_FLAG_BORROW_ACTIVE + EMISSIONS_FLAG_LENDING_ACTIVE - ), - emissionsRate: emissionRate, - totalEmissions: totalEmissions, - }) - ) - ); - - if (verbose) { - console.log("Started token B borrow/lending emissions on USDC bank"); - } - - const [bank, adminBAfter, emissionsAccAfter] = await Promise.all([ - program.account.bank.fetch(bankKeypairUsdc.publicKey), - getTokenBalance(provider, groupAdmin.tokenBAccount), - getTokenBalance(provider, emissionsAccKey), - ]); - - assertKeysEqual(bank.emissionsMint, ecosystem.tokenBMint.publicKey); - assertBNEqual(bank.emissionsRate, emissionRate); - assertI80F48Approx(bank.emissionsRemaining, totalEmissions); - assertBNEqual( - bank.flags, - new BN(EMISSIONS_FLAG_BORROW_ACTIVE + EMISSIONS_FLAG_LENDING_ACTIVE) - ); - assert.equal(adminBBefore - adminBAfter, totalEmissions.toNumber()); - assert.equal(emissionsAccAfter, totalEmissions.toNumber()); - }); - - it("(admin) Add more token B emissions on (USDC) bank - happy path", async () => { - const [emissionsAccKey] = deriveEmissionsTokenAccount( - program.programId, - bankKeypairUsdc.publicKey, - ecosystem.tokenBMint.publicKey - ); - const [adminBBefore, emissionsAccBefore] = await Promise.all([ - getTokenBalance(provider, groupAdmin.tokenBAccount), - getTokenBalance(provider, emissionsAccKey), - ]); - - await groupAdmin.mrgnProgram!.provider.sendAndConfirm!( - new Transaction().add( - await updateEmissions(groupAdmin.mrgnProgram, { - bank: bankKeypairUsdc.publicKey, - emissionsMint: ecosystem.tokenBMint.publicKey, - fundingAccount: groupAdmin.tokenBAccount, - emissionsFlags: null, - emissionsRate: null, - additionalEmissions: totalEmissions, - }) - ) - ); - - const [bank, adminBAfter, emissionsAccAfter] = await Promise.all([ - program.account.bank.fetch(bankKeypairUsdc.publicKey), - getTokenBalance(provider, groupAdmin.tokenBAccount), - getTokenBalance(provider, emissionsAccKey), - ]); - - assertKeysEqual(bank.emissionsMint, ecosystem.tokenBMint.publicKey); - assertBNEqual(bank.emissionsRate, emissionRate); - assertI80F48Approx(bank.emissionsRemaining, totalEmissions.muln(2)); - assertBNEqual( - bank.flags, - new BN(EMISSIONS_FLAG_BORROW_ACTIVE + EMISSIONS_FLAG_LENDING_ACTIVE) - ); - assert.equal(adminBBefore - adminBAfter, totalEmissions.toNumber()); - assert.equal( - emissionsAccAfter, - emissionsAccBefore + totalEmissions.toNumber() - ); - }); -}); diff --git a/tests/06_initUser.spec.ts b/tests/06_initUser.spec.ts deleted file mode 100644 index 6fbb90b44..000000000 --- a/tests/06_initUser.spec.ts +++ /dev/null @@ -1,69 +0,0 @@ -import { Program, workspace } from "@coral-xyz/anchor"; -import { Keypair, Transaction } from "@solana/web3.js"; -import { Marginfi } from "../target/types/marginfi"; -import { marginfiGroup, users } from "./rootHooks"; -import { - assertBNEqual, - assertI80F48Equal, - assertKeyDefault, - assertKeysEqual, -} from "./utils/genericTests"; -import { assert } from "chai"; -import { accountInit } from "./utils/user-instructions"; -import { USER_ACCOUNT } from "./utils/mocks"; - -describe("Initialize user account", () => { - const program = workspace.Marginfi as Program; - - it("(user 0) Initialize user account - happy path", async () => { - const accountKeypair = Keypair.generate(); - const accountKey = accountKeypair.publicKey; - users[0].accounts.set(USER_ACCOUNT, accountKey); - - let tx: Transaction = new Transaction(); - tx.add( - await accountInit(program, { - marginfiGroup: marginfiGroup.publicKey, - marginfiAccount: accountKey, - authority: users[0].wallet.publicKey, - feePayer: users[0].wallet.publicKey, - }) - ); - await users[0].mrgnProgram.provider.sendAndConfirm(tx, [ - accountKeypair, - ]); - - const userAcc = await program.account.marginfiAccount.fetch(accountKey); - assertKeysEqual(userAcc.group, marginfiGroup.publicKey); - assertKeysEqual(userAcc.authority, users[0].wallet.publicKey); - const balances = userAcc.lendingAccount.balances; - for (let i = 0; i < balances.length; i++) { - assert.equal(balances[i].active, false); - assertKeyDefault(balances[i].bankPk); - assertI80F48Equal(balances[i].assetShares, 0); - assertI80F48Equal(balances[i].liabilityShares, 0); - assertI80F48Equal(balances[i].emissionsOutstanding, 0); - assertBNEqual(balances[i].lastUpdate, 0); - } - assertBNEqual(userAcc.accountFlags, 0); - }); - - it("(user 1) Initialize user account - happy path", async () => { - const accountKeypair = Keypair.generate(); - const accountKey = accountKeypair.publicKey; - users[1].accounts.set(USER_ACCOUNT, accountKey); - - let tx: Transaction = new Transaction(); - tx.add( - await accountInit(program, { - marginfiGroup: marginfiGroup.publicKey, - marginfiAccount: accountKey, - authority: users[1].wallet.publicKey, - feePayer: users[1].wallet.publicKey, - }) - ); - await users[1].mrgnProgram.provider.sendAndConfirm(tx, [ - accountKeypair, - ]); - }); -}); diff --git a/tests/07_deposit.spec.ts b/tests/07_deposit.spec.ts deleted file mode 100644 index eb256629f..000000000 --- a/tests/07_deposit.spec.ts +++ /dev/null @@ -1,313 +0,0 @@ -import { - AnchorProvider, - BN, - getProvider, - Program, - Wallet, - workspace, -} from "@coral-xyz/anchor"; -import { AccountMeta, Transaction } from "@solana/web3.js"; -import { Marginfi } from "../target/types/marginfi"; -import { - bankKeypairA, - bankKeypairUsdc, - ecosystem, - groupAdmin, - marginfiGroup, - oracles, - users, - verbose, -} from "./rootHooks"; -import { - assertBNApproximately, - assertI80F48Approx, - assertI80F48Equal, - getTokenBalance, -} from "./utils/genericTests"; -import { assert } from "chai"; -import { depositIx, withdrawIx } from "./utils/user-instructions"; -import { USER_ACCOUNT } from "./utils/mocks"; -import { createMintToInstruction } from "@solana/spl-token"; -import { deriveBankWithSeed, deriveLiquidityVault } from "./utils/pdas"; -import { addBank, addBankWithSeed } from "./utils/group-instructions"; -import { - defaultBankConfig, - ORACLE_SETUP_PYTH_LEGACY, - u64MAX_BN, -} from "./utils/types"; - -describe("Deposit funds", () => { - const program = workspace.Marginfi as Program; - const provider = getProvider() as AnchorProvider; - const wallet = provider.wallet as Wallet; - const depositAmountA = 2; - const depositAmountA_native = new BN( - depositAmountA * 10 ** ecosystem.tokenADecimals - ); - - const depositAmountUsdc = 100; - const depositAmountUsdc_native = new BN( - depositAmountUsdc * 10 ** ecosystem.usdcDecimals - ); - - it("(Fund user 0 and user 1 USDC/Token A token accounts", async () => { - let tx = new Transaction(); - for (let i = 0; i < users.length; i++) { - tx.add( - createMintToInstruction( - ecosystem.tokenAMint.publicKey, - users[i].tokenAAccount, - wallet.publicKey, - 100 * 10 ** ecosystem.tokenADecimals - ) - ); - tx.add( - createMintToInstruction( - ecosystem.usdcMint.publicKey, - users[i].usdcAccount, - wallet.publicKey, - 10000 * 10 ** ecosystem.usdcDecimals - ) - ); - } - await program.provider.sendAndConfirm(tx); - }); - - it("(user 0) deposit token A to bank - happy path", async () => { - const user = users[0]; - const [bankLiquidityVault] = deriveLiquidityVault( - program.programId, - bankKeypairA.publicKey - ); - const [userABefore, vaultABefore] = await Promise.all([ - getTokenBalance(provider, user.tokenAAccount), - getTokenBalance(provider, bankLiquidityVault), - ]); - if (verbose) { - console.log("user 0 A before: " + userABefore.toLocaleString()); - console.log("vault A before: " + vaultABefore.toLocaleString()); - } - - const user0Account = user.accounts.get(USER_ACCOUNT); - - await user.mrgnProgram.provider.sendAndConfirm( - new Transaction().add( - await depositIx(user.mrgnProgram, { - marginfiAccount: user0Account, - bank: bankKeypairA.publicKey, - tokenAccount: user.tokenAAccount, - amount: depositAmountA_native, - depositUpToLimit: false, - }) - ) - ); - - const userAcc = await program.account.marginfiAccount.fetch(user0Account); - const balances = userAcc.lendingAccount.balances; - assert.equal(balances[0].active, 1); - // Note: The first deposit issues shares 1:1 and the shares use the same decimals - assertI80F48Approx(balances[0].assetShares, depositAmountA_native); - assertI80F48Equal(balances[0].liabilityShares, 0); - assertI80F48Equal(balances[0].emissionsOutstanding, 0); - - let now = Math.floor(Date.now() / 1000); - assertBNApproximately(balances[0].lastUpdate, now, 2); - - const [userAAfter, vaultAAfter] = await Promise.all([ - getTokenBalance(provider, user.tokenAAccount), - getTokenBalance(provider, bankLiquidityVault), - ]); - if (verbose) { - console.log("user 0 A after: " + userAAfter.toLocaleString()); - console.log("vault A after: " + vaultAAfter.toLocaleString()); - } - assert.equal(userABefore - depositAmountA_native.toNumber(), userAAfter); - assert.equal(vaultABefore + depositAmountA_native.toNumber(), vaultAAfter); - }); - - it("(user 1) deposit USDC to bank - happy path", async () => { - const user = users[1]; - const userUsdcBefore = await getTokenBalance(provider, user.usdcAccount); - if (verbose) { - console.log("user 1 USDC before: " + userUsdcBefore.toLocaleString()); - } - - const user1Account = user.accounts.get(USER_ACCOUNT); - - await user.mrgnProgram.provider.sendAndConfirm( - new Transaction().add( - await depositIx(user.mrgnProgram, { - marginfiAccount: user1Account, - bank: bankKeypairUsdc.publicKey, - tokenAccount: user.usdcAccount, - amount: depositAmountUsdc_native, - depositUpToLimit: false, - }) - ) - ); - - const userAcc = await program.account.marginfiAccount.fetch(user1Account); - const balances = userAcc.lendingAccount.balances; - assert.equal(balances[0].active, 1); - // Note: The first deposit issues shares 1:1 and the shares use the same decimals - assertI80F48Approx(balances[0].assetShares, depositAmountUsdc_native); - assertI80F48Equal(balances[0].liabilityShares, 0); - assertI80F48Equal(balances[0].emissionsOutstanding, 0); - - let now = Math.floor(Date.now() / 1000); - assertBNApproximately(balances[0].lastUpdate, now, 2); - - const userUsdcAfter = await getTokenBalance(provider, user.usdcAccount); - if (verbose) { - console.log("user 1 USDC after: " + userUsdcAfter.toLocaleString()); - } - assert.equal( - userUsdcBefore - depositAmountUsdc_native.toNumber(), - userUsdcAfter - ); - }); - - it("(user 1) deposit up to limit - happy path", async () => { - const depositAmount0 = 500; - const depositLimit = 10000; - - // Init a dummy bank for this test... - let config = defaultBankConfig(); - config.depositLimit = new BN(10_000); - const seed = new BN(0); - const [bankKey] = deriveBankWithSeed( - program.programId, - marginfiGroup.publicKey, - ecosystem.tokenAMint.publicKey, - seed - ); - await groupAdmin.mrgnProgram.provider.sendAndConfirm!( - new Transaction().add( - await addBankWithSeed(groupAdmin.mrgnProgram, { - marginfiGroup: marginfiGroup.publicKey, - feePayer: groupAdmin.wallet.publicKey, - bankMint: ecosystem.tokenAMint.publicKey, - bank: bankKey, - // globalFeeWallet: globalFeeWallet, - config: config, - seed: seed, - }), - await program.methods - .lendingPoolConfigureBankOracle( - ORACLE_SETUP_PYTH_LEGACY, - oracles.tokenAOracle.publicKey - ) - .accountsPartial({ - group: marginfiGroup.publicKey, - bank: bankKey, - admin: groupAdmin.wallet.publicKey, - }) - .remainingAccounts([ - { - pubkey: oracles.tokenAOracle.publicKey, - isSigner: false, - isWritable: false, - } as AccountMeta, - ]) - .instruction() - ) - ); - - // User 0 deposits a small amount of funds... - const user0Account = users[0].accounts.get(USER_ACCOUNT); - await users[0].mrgnProgram.provider.sendAndConfirm( - new Transaction().add( - await depositIx(users[0].mrgnProgram, { - marginfiAccount: user0Account, - bank: bankKey, - tokenAccount: users[0].tokenAAccount, - amount: new BN(depositAmount0), - depositUpToLimit: false, - }) - ) - ); - - // And now user user 1 attempts to deposit up to the deposit cap - const user = users[1]; - const userTokenABefore = await getTokenBalance( - provider, - user.tokenAAccount - ); - if (verbose) { - console.log( - "user 1 Token A before: " + userTokenABefore.toLocaleString() - ); - } - - const user1Account = user.accounts.get(USER_ACCOUNT); - await user.mrgnProgram.provider.sendAndConfirm( - new Transaction().add( - await depositIx(user.mrgnProgram, { - marginfiAccount: user1Account, - bank: bankKey, - tokenAccount: user.tokenAAccount, - // NOTE: Pass u64::MAX to go up to the deposit limit regardless of amount, or pass some - // smaller amount to clamp to that amount (the actual amount deposited is always - // min(amount, deposit_amt_up_to_cap)) - amount: u64MAX_BN, - depositUpToLimit: true, - }) - ) - ); - - const userTokenAAfter = await getTokenBalance(provider, user.tokenAAccount); - if (verbose) { - console.log("user 1 Token A after: " + userTokenAAfter.toLocaleString()); - } - // Note: We are always 1 token short of the deposit limit, because an internal check performs a - // < instead of a <= when validating the deposit limit - const expected = depositLimit - depositAmount0 - 1; - assert.equal( - userTokenABefore - userTokenAAfter, - depositLimit - depositAmount0 - 1 - ); - const userAcc = await program.account.marginfiAccount.fetch(user1Account); - assertI80F48Approx( - userAcc.lendingAccount.balances[1].assetShares, - expected - ); - - // withdraw amounts to restore to previous state... - - await user.mrgnProgram.provider.sendAndConfirm( - new Transaction().add( - await withdrawIx(user.mrgnProgram, { - marginfiAccount: user1Account, - bank: bankKey, - tokenAccount: user.tokenAAccount, - remaining: [ - bankKeypairUsdc.publicKey, - oracles.usdcOracle.publicKey, - bankKey, - oracles.tokenAOracle.publicKey, - ], - amount: new BN(1), // doesn't matter when withdrawing all... - withdrawAll: true, - }) - ) - ); - - await users[0].mrgnProgram.provider.sendAndConfirm( - new Transaction().add( - await withdrawIx(users[0].mrgnProgram, { - marginfiAccount: user0Account, - bank: bankKey, - tokenAccount: users[0].tokenAAccount, - remaining: [ - bankKeypairA.publicKey, - oracles.tokenAOracle.publicKey, - bankKey, - oracles.tokenAOracle.publicKey, - ], - amount: new BN(1), // doesn't matter when withdrawing all... - withdrawAll: true, - }) - ) - ); - }); -}); diff --git a/tests/08_borrow.spec.ts b/tests/08_borrow.spec.ts deleted file mode 100644 index 8f69747d0..000000000 --- a/tests/08_borrow.spec.ts +++ /dev/null @@ -1,200 +0,0 @@ -import { - AnchorProvider, - BN, - getProvider, - Program, - Wallet, - workspace, -} from "@coral-xyz/anchor"; -import { Transaction } from "@solana/web3.js"; -import { Marginfi } from "../target/types/marginfi"; -import { - bankKeypairA, - bankKeypairUsdc, - ecosystem, - marginfiGroup, - oracles, - users, - verbose, -} from "./rootHooks"; -import { - assertBNApproximately, - assertI80F48Approx, - assertI80F48Equal, - expectFailedTxWithError, - getTokenBalance, -} from "./utils/genericTests"; -import { assert } from "chai"; -import { borrowIx } from "./utils/user-instructions"; -import { USER_ACCOUNT } from "./utils/mocks"; -import { updatePriceAccount } from "./utils/pyth_mocks"; -import { wrappedI80F48toBigNumber } from "@mrgnlabs/mrgn-common"; - -describe("Borrow funds", () => { - const program = workspace.Marginfi as Program; - const provider = getProvider() as AnchorProvider; - const wallet = provider.wallet as Wallet; - - // Bank has 100 USDC available to borrow - // User has 2 Token A (worth $20) deposited - const borrowAmountUsdc = 5; - const borrowAmountUsdc_native = new BN( - borrowAmountUsdc * 10 ** ecosystem.usdcDecimals - ); - - it("Oracle data refreshes", async () => { - const usdcPrice = BigInt(oracles.usdcPrice * 10 ** oracles.usdcDecimals); - await updatePriceAccount( - oracles.usdcOracle, - { - exponent: -oracles.usdcDecimals, - aggregatePriceInfo: { - price: usdcPrice, - conf: usdcPrice / BigInt(100), // 1% of the price - }, - twap: { - // aka ema - valueComponent: usdcPrice, - }, - }, - wallet - ); - - const tokenAPrice = BigInt( - oracles.tokenAPrice * 10 ** oracles.tokenADecimals - ); - await updatePriceAccount( - oracles.tokenAOracle, - { - exponent: -oracles.tokenADecimals, - aggregatePriceInfo: { - price: tokenAPrice, - conf: tokenAPrice / BigInt(100), // 1% of the price - }, - twap: { - // aka ema - valueComponent: tokenAPrice, - }, - }, - wallet - ); - }); - - it("(user 0) tries to borrow usdc with a bad oracle - should fail", async () => { - const user = users[0]; - const user0Account = user.accounts.get(USER_ACCOUNT); - const bank = bankKeypairUsdc.publicKey; - await expectFailedTxWithError(async () => { - await user.mrgnProgram.provider.sendAndConfirm( - new Transaction().add( - await borrowIx(user.mrgnProgram, { - marginfiAccount: user0Account, - bank: bank, - tokenAccount: user.usdcAccount, - remaining: [ - bankKeypairA.publicKey, - oracles.tokenAOracle.publicKey, - bank, - oracles.fakeUsdc, // sneaky sneaky... - ], - amount: borrowAmountUsdc_native, - }) - ) - ); - // Note: you can now see expected vs actual keys in the msg! logs just before this error. - }, "WrongOracleAccountKeys"); - }); - - it("(user 0) borrows USDC against their token A position - happy path", async () => { - const user = users[0]; - const bank = bankKeypairUsdc.publicKey; - const userUsdcBefore = await getTokenBalance(provider, user.usdcAccount); - const bankBefore = await program.account.bank.fetch(bank); - if (verbose) { - console.log("user 0 USDC before: " + userUsdcBefore.toLocaleString()); - console.log( - "usdc fees owed to bank: " + - wrappedI80F48toBigNumber( - bankBefore.collectedGroupFeesOutstanding - ).toString() - ); - console.log( - "usdc fees owed to program: " + - wrappedI80F48toBigNumber( - bankBefore.collectedProgramFeesOutstanding - ).toString() - ); - } - - const user0Account = user.accounts.get(USER_ACCOUNT); - - await user.mrgnProgram.provider.sendAndConfirm( - new Transaction().add( - await borrowIx(user.mrgnProgram, { - marginfiAccount: user0Account, - bank: bank, - tokenAccount: user.usdcAccount, - remaining: [ - bankKeypairA.publicKey, - oracles.tokenAOracle.publicKey, - bank, - oracles.usdcOracle.publicKey, - ], - amount: borrowAmountUsdc_native, - }) - ) - ); - - const userAcc = await program.account.marginfiAccount.fetch(user0Account); - const bankAfter = await program.account.bank.fetch(bank); - const balances = userAcc.lendingAccount.balances; - const userUsdcAfter = await getTokenBalance(provider, user.usdcAccount); - if (verbose) { - console.log("user 0 USDC after: " + userUsdcAfter.toLocaleString()); - console.log( - "usdc fees owed to bank: " + - wrappedI80F48toBigNumber( - bankAfter.collectedGroupFeesOutstanding - ).toString() - ); - console.log( - "usdc fees owed to program: " + - wrappedI80F48toBigNumber( - bankAfter.collectedProgramFeesOutstanding - ).toString() - ); - } - - assert.equal(balances[1].active, 1); - assertI80F48Equal(balances[1].assetShares, 0); - // Note: The first borrow issues shares 1:1 and the shares use the same decimals - // Note: An origination fee of 0.01 is also incurred here (configured during addBank) - const originationFee_native = borrowAmountUsdc_native.toNumber() * 0.01; - const amtUsdcWithFee_native = new BN( - borrowAmountUsdc_native.toNumber() + originationFee_native - ); - assertI80F48Approx(balances[1].liabilityShares, amtUsdcWithFee_native); - assertI80F48Equal(balances[1].emissionsOutstanding, 0); - - let now = Math.floor(Date.now() / 1000); - assertBNApproximately(balances[1].lastUpdate, now, 2); - - assert.equal( - userUsdcAfter - borrowAmountUsdc_native.toNumber(), - userUsdcBefore - ); - - // The origination fee is recorded on the bank. The group gets 98%, the program gets the - // remaining 2% (see PROGRAM_FEE_RATE) - const origination_fee_group = originationFee_native * 0.98; - const origination_fee_program = originationFee_native * 0.02; - assertI80F48Approx( - bankAfter.collectedGroupFeesOutstanding, - origination_fee_group - ); - assertI80F48Approx( - bankAfter.collectedProgramFeesOutstanding, - origination_fee_program - ); - }); -}); diff --git a/tests/09_withdraw_repay.spec.ts b/tests/09_withdraw_repay.spec.ts deleted file mode 100644 index 7519e9e36..000000000 --- a/tests/09_withdraw_repay.spec.ts +++ /dev/null @@ -1,529 +0,0 @@ -import { - AnchorProvider, - BN, - getProvider, - Program, - Wallet, - workspace, -} from "@coral-xyz/anchor"; -import { Transaction } from "@solana/web3.js"; -import { Marginfi } from "../target/types/marginfi"; -import { - bankKeypairA, - bankKeypairUsdc, - ecosystem, - oracles, - users, - verbose, -} from "./rootHooks"; -import { - assertKeysEqual, - expectFailedTxWithError, - getTokenBalance, -} from "./utils/genericTests"; -import { assert } from "chai"; -import { - borrowIx, - depositIx, - repayIx, - withdrawEmissionsIx, - withdrawIx, -} from "./utils/user-instructions"; -import { USER_ACCOUNT } from "./utils/mocks"; -import { updatePriceAccount } from "./utils/pyth_mocks"; -import { wrappedI80F48toBigNumber } from "@mrgnlabs/mrgn-common"; -import { u64MAX_BN } from "./utils/types"; - -describe("Withdraw funds", () => { - const program = workspace.Marginfi as Program; - const provider = getProvider() as AnchorProvider; - const wallet = provider.wallet as Wallet; - - const withdrawAmountTokenA = 0.1; - const withdrawAmountTokenA_native = new BN( - withdrawAmountTokenA * 10 ** ecosystem.tokenADecimals - ); - - const repayAmountUsdc = 0.1; - const repayAmountUsdc_native = new BN( - repayAmountUsdc * 10 ** ecosystem.usdcDecimals - ); - - it("Oracle data refreshes", async () => { - const usdcPrice = BigInt(oracles.usdcPrice * 10 ** oracles.usdcDecimals); - await updatePriceAccount( - oracles.usdcOracle, - { - exponent: -oracles.usdcDecimals, - aggregatePriceInfo: { - price: usdcPrice, - conf: usdcPrice / BigInt(100), // 1% of the price - }, - twap: { - // aka ema - valueComponent: usdcPrice, - }, - }, - wallet - ); - - const tokenAPrice = BigInt( - oracles.tokenAPrice * 10 ** oracles.tokenADecimals - ); - await updatePriceAccount( - oracles.tokenAOracle, - { - exponent: -oracles.tokenADecimals, - aggregatePriceInfo: { - price: tokenAPrice, - conf: tokenAPrice / BigInt(100), // 1% of the price - }, - twap: { - // aka ema - valueComponent: tokenAPrice, - }, - }, - wallet - ); - }); - - it("(user 0) withdraws with bad oracle - should fail", async () => { - const user = users[0]; - const userAccKey = user.accounts.get(USER_ACCOUNT); - const bank = bankKeypairA.publicKey; - - await expectFailedTxWithError(async () => { - await user.mrgnProgram.provider.sendAndConfirm( - new Transaction().add( - await withdrawIx(user.mrgnProgram, { - marginfiAccount: userAccKey, - bank: bank, - tokenAccount: user.tokenAAccount, - remaining: [ - bankKeypairA.publicKey, - oracles.tokenAOracle.publicKey, - bankKeypairUsdc.publicKey, - oracles.fakeUsdc, - ], - amount: withdrawAmountTokenA_native, - }) - ) - ); - // Note: you can now see expected vs actual keys in the msg! logs just before this error. - }, "WrongOracleAccountKeys"); - }); - - it("(user 0) withdraws some token A - happy path", async () => { - const user = users[0]; - const userAccKey = user.accounts.get(USER_ACCOUNT); - - const bank = bankKeypairA.publicKey; - const bankBefore = await program.account.bank.fetch(bank); - const [userAccBefore, userTokenABefore, vaultTokenABefore] = - await Promise.all([ - program.account.marginfiAccount.fetch(userAccKey), - getTokenBalance(provider, user.tokenAAccount), - getTokenBalance(provider, bankBefore.liquidityVault), - ]); - const balancesBefore = userAccBefore.lendingAccount.balances; - - await user.mrgnProgram.provider.sendAndConfirm( - new Transaction().add( - await withdrawIx(user.mrgnProgram, { - marginfiAccount: userAccKey, - bank: bank, - tokenAccount: user.tokenAAccount, - remaining: [ - bankKeypairA.publicKey, - oracles.tokenAOracle.publicKey, - bankKeypairUsdc.publicKey, - oracles.usdcOracle.publicKey, - ], - amount: withdrawAmountTokenA_native, - }) - ) - ); - - const bankAfter = await program.account.bank.fetch(bank); - const [userAccAfter, userTokenAAfter, vaultTokenAAfter] = await Promise.all( - [ - program.account.marginfiAccount.fetch(userAccKey), - getTokenBalance(provider, user.tokenAAccount), - getTokenBalance(provider, bankAfter.liquidityVault), - ] - ); - const balancesAfter = userAccAfter.lendingAccount.balances; - - const withdrawExpected = withdrawAmountTokenA_native.toNumber(); - if (verbose) { - console.log( - "User 0 withdrew " + - withdrawAmountTokenA + - " token A (" + - withdrawExpected.toString() + - ") native" - ); - } - - // user gains the token A, the liquidity vault loses it.... - assert.equal(userTokenAAfter, userTokenABefore + withdrawExpected); - assert.equal(vaultTokenAAfter, vaultTokenABefore - withdrawExpected); - - // User loses the shares of Token A... - // Since there hasn't been any interest (no Token A borrowed), shares and Token A are 1:1 - const sharesBefore = wrappedI80F48toBigNumber( - balancesBefore[0].assetShares - ).toNumber(); - const sharesAfter = wrappedI80F48toBigNumber( - balancesAfter[0].assetShares - ).toNumber(); - assert.equal(sharesAfter, sharesBefore - withdrawExpected); - - // The bank has also lost the same amount of shares... - const bankSharesBefore = wrappedI80F48toBigNumber( - bankBefore.totalAssetShares - ).toNumber(); - const bankSharesAfter = wrappedI80F48toBigNumber( - bankAfter.totalAssetShares - ).toNumber(); - assert.equal(bankSharesAfter, bankSharesBefore - withdrawExpected); - }); - - it("(user 0) repays some USDC debt - happy path", async () => { - const user = users[0]; - const userAccKey = user.accounts.get(USER_ACCOUNT); - - const bank = bankKeypairUsdc.publicKey; - const bankBefore = await program.account.bank.fetch(bank); - const [userAccBefore, userUsdcBefore, vaultUsdcBefore] = await Promise.all([ - program.account.marginfiAccount.fetch(userAccKey), - getTokenBalance(provider, user.usdcAccount), - getTokenBalance(provider, bankBefore.liquidityVault), - ]); - const balancesBefore = userAccBefore.lendingAccount.balances; - - await user.mrgnProgram.provider.sendAndConfirm( - new Transaction().add( - await repayIx(user.mrgnProgram, { - marginfiAccount: userAccKey, - bank: bank, - tokenAccount: user.usdcAccount, - remaining: [ - bankKeypairA.publicKey, - oracles.tokenAOracle.publicKey, - bankKeypairUsdc.publicKey, - oracles.usdcOracle.publicKey, - ], - amount: repayAmountUsdc_native, - }) - ) - ); - - const bankAfter = await program.account.bank.fetch(bank); - const [userAccAfter, userUsdcAfter, vaultUsdcAfter] = await Promise.all([ - program.account.marginfiAccount.fetch(userAccKey), - getTokenBalance(provider, user.usdcAccount), - getTokenBalance(provider, bankAfter.liquidityVault), - ]); - const balancesAfter = userAccAfter.lendingAccount.balances; - - const repayExpected = repayAmountUsdc_native.toNumber(); - if (verbose) { - console.log( - "User 0 repaid " + - repayAmountUsdc + - " usdc (" + - repayExpected.toString() + - ") native" - ); - } - - // user loses the USDC, the liquidity vault gains it.... - assert.equal(userUsdcAfter, userUsdcBefore - repayExpected); - assert.equal(vaultUsdcAfter, vaultUsdcBefore + repayExpected); - - // User loses the liability shares of USDC... - // USDC has some borrows, so there is trivial interest here that affects accounting - const sharesBefore = wrappedI80F48toBigNumber( - balancesBefore[1].liabilityShares - ).toNumber(); - const sharesAfter = wrappedI80F48toBigNumber( - balancesAfter[1].liabilityShares - ).toNumber(); - assert.approximately(sharesAfter, sharesBefore - repayExpected, 1); - - // The bank has also lost the same amount of shares... - const bankSharesBefore = wrappedI80F48toBigNumber( - bankBefore.totalLiabilityShares - ).toNumber(); - const bankSharesAfter = wrappedI80F48toBigNumber( - bankAfter.totalLiabilityShares - ).toNumber(); - assert.approximately(bankSharesAfter, bankSharesBefore - repayExpected, 1); - }); - - it("(user 0) tries to repay all without claiming emissions - should fail", async () => { - const user = users[0]; - const userAccKey = user.accounts.get(USER_ACCOUNT); - const bank = bankKeypairUsdc.publicKey; - await expectFailedTxWithError(async () => { - await user.mrgnProgram.provider.sendAndConfirm( - new Transaction().add( - await repayIx(user.mrgnProgram, { - marginfiAccount: userAccKey, - bank: bank, - tokenAccount: user.usdcAccount, - remaining: [ - bankKeypairA.publicKey, - oracles.tokenAOracle.publicKey, - bankKeypairUsdc.publicKey, - oracles.usdcOracle.publicKey, - ], - amount: u64MAX_BN, - repayAll: true, - }) - ) - ); - }, "CannotCloseOutstandingEmissions"); - }); - - it("(user 0) claims emissions (in token B) before repaying their balance - happy path", async () => { - const user = users[0]; - const userAccKey = user.accounts.get(USER_ACCOUNT); - const bank = bankKeypairUsdc.publicKey; - - const userBBefore = await getTokenBalance(provider, user.tokenBAccount); - - await user.mrgnProgram.provider.sendAndConfirm( - new Transaction().add( - await withdrawEmissionsIx(user.mrgnProgram, { - marginfiAccount: userAccKey, - bank: bank, - tokenAccount: user.tokenBAccount, - }) - ) - ); - - const userBAfter = await getTokenBalance(provider, user.tokenBAccount); - const diff = userBAfter - userBBefore; - if (verbose) { - console.log("Claimed Token B emissions: " + diff); - } - - // TODO we can probably assert a more specific balance here with some maths... - assert.ok(diff > 0); - - // TODO assert changes to the emissions accounts... - }); - - it("(user 0) repays all of their USDC debt - happy path", async () => { - const user = users[0]; - const userAccKey = user.accounts.get(USER_ACCOUNT); - - const bank = bankKeypairUsdc.publicKey; - const bankBefore = await program.account.bank.fetch(bank); - const [userAccBefore, userUsdcBefore, vaultUsdcBefore] = await Promise.all([ - program.account.marginfiAccount.fetch(userAccKey), - getTokenBalance(provider, user.usdcAccount), - getTokenBalance(provider, bankBefore.liquidityVault), - ]); - const balancesBefore = userAccBefore.lendingAccount.balances; - - const actualOwed = - wrappedI80F48toBigNumber(balancesBefore[1].liabilityShares).toNumber() * - wrappedI80F48toBigNumber(bankBefore.liabilityShareValue).toNumber(); - - await user.mrgnProgram.provider.sendAndConfirm( - new Transaction().add( - // Needs to occur within the same tx bundle even though we just collected it (a trivial - // amount can build up even in a single slot, and we don't want this to mess up accounting) - await withdrawEmissionsIx(user.mrgnProgram, { - marginfiAccount: userAccKey, - bank: bank, - tokenAccount: user.tokenBAccount, - }), - await repayIx(user.mrgnProgram, { - marginfiAccount: userAccKey, - bank: bank, - tokenAccount: user.usdcAccount, - remaining: [ - bankKeypairA.publicKey, - oracles.tokenAOracle.publicKey, - bankKeypairUsdc.publicKey, - oracles.usdcOracle.publicKey, - ], - amount: u64MAX_BN, - repayAll: true, - }) - ) - ); - - const bankAfter = await program.account.bank.fetch(bank); - const [userAccAfter, userUsdcAfter, vaultUsdcAfter] = await Promise.all([ - program.account.marginfiAccount.fetch(userAccKey), - getTokenBalance(provider, user.usdcAccount), - getTokenBalance(provider, bankAfter.liquidityVault), - ]); - const balancesAfter = userAccAfter.lendingAccount.balances; - - if (verbose) { - console.log( - "User 0 repaid entire USDC balance: ~" + actualOwed.toLocaleString() - ); - } - - // USDC has some borrows, so there is trivial interest here that affects accounting - - // user loses the USDC, the liquidity vault gains it.... - assert.approximately(userUsdcAfter, userUsdcBefore - actualOwed, 2); - assert.approximately(vaultUsdcAfter, vaultUsdcBefore + actualOwed, 2); - - // User loses the liability shares of USDC... - const sharesBefore = wrappedI80F48toBigNumber( - balancesBefore[1].liabilityShares - ).toNumber(); - const sharesAfter = wrappedI80F48toBigNumber( - balancesAfter[1].liabilityShares - ).toNumber(); - assert.approximately(sharesAfter, sharesBefore - actualOwed, 2); - // This balance is now inactive - assert.equal(balancesAfter[1].active, 0); - - // The bank has also lost the same amount of shares... - const bankSharesBefore = wrappedI80F48toBigNumber( - bankBefore.totalLiabilityShares - ).toNumber(); - const bankSharesAfter = wrappedI80F48toBigNumber( - bankAfter.totalLiabilityShares - ).toNumber(); - assert.approximately(bankSharesAfter, bankSharesBefore - actualOwed, 2); - }); - - it("(user 0) withdraws all token A balance - happy path", async () => { - const user = users[0]; - const userAccKey = user.accounts.get(USER_ACCOUNT); - - const bank = bankKeypairA.publicKey; - const bankBefore = await program.account.bank.fetch(bank); - const [userAccBefore, userTokenABefore, vaultUsdcBefore] = - await Promise.all([ - program.account.marginfiAccount.fetch(userAccKey), - getTokenBalance(provider, user.tokenAAccount), - getTokenBalance(provider, bankBefore.liquidityVault), - ]); - const balancesBefore = userAccBefore.lendingAccount.balances; - - const actualDeposited = - wrappedI80F48toBigNumber(balancesBefore[0].assetShares).toNumber() * - wrappedI80F48toBigNumber(bankBefore.liabilityShareValue).toNumber(); - - await user.mrgnProgram.provider.sendAndConfirm( - new Transaction().add( - await withdrawIx(user.mrgnProgram, { - marginfiAccount: userAccKey, - bank: bank, - tokenAccount: user.tokenAAccount, - remaining: [ - bankKeypairA.publicKey, - oracles.tokenAOracle.publicKey, - bankKeypairUsdc.publicKey, - oracles.usdcOracle.publicKey, - ], - amount: withdrawAmountTokenA_native, - withdrawAll: true, - }) - ) - ); - - const bankAfter = await program.account.bank.fetch(bank); - - const [userAccAfter, vaultUsdcAfter, userTokenAAfter] = await Promise.all([ - program.account.marginfiAccount.fetch(userAccKey), - getTokenBalance(provider, bankAfter.liquidityVault), - getTokenBalance(provider, user.tokenAAccount), - ]); - const balancesAfter = userAccAfter.lendingAccount.balances; - - const withdrawExpected = actualDeposited; - if (verbose) { - console.log( - "User 0 withdrew all Token A: " + actualDeposited.toLocaleString() - ); - } - - // user gains the token A, the liquidity vault loses it.... - assert.equal(userTokenAAfter, userTokenABefore + withdrawExpected); - assert.equal(vaultUsdcAfter, vaultUsdcBefore - withdrawExpected); - - // User loses the shares of Token A... - // Since there hasn't been any interest (no Token A borrowed), shares and Token A are 1:1 - const sharesBefore = wrappedI80F48toBigNumber( - balancesBefore[0].assetShares - ).toNumber(); - const sharesAfter = wrappedI80F48toBigNumber( - balancesAfter[0].assetShares - ).toNumber(); - assert.equal(sharesAfter, sharesBefore - withdrawExpected); - // This balance is now inactive - assert.equal(balancesAfter[0].active, 0); - - // The bank has also lost the same amount of shares... - const bankSharesBefore = wrappedI80F48toBigNumber( - bankBefore.totalAssetShares - ).toNumber(); - const bankSharesAfter = wrappedI80F48toBigNumber( - bankAfter.totalAssetShares - ).toNumber(); - assert.equal(bankSharesAfter, bankSharesBefore - withdrawExpected); - }); - - it("(user 0) restores previous Token A deposits and USDC borrows", async () => { - const user = users[0]; - const userAcc = user.accounts.get(USER_ACCOUNT); - - const depositAmountA = 2; - const depositAmountA_native = new BN( - depositAmountA * 10 ** ecosystem.tokenADecimals - ); - - await user.mrgnProgram.provider.sendAndConfirm( - new Transaction().add( - await depositIx(user.mrgnProgram, { - marginfiAccount: userAcc, - bank: bankKeypairA.publicKey, - tokenAccount: user.tokenAAccount, - amount: depositAmountA_native, - }) - ) - ); - - const borrowAmountUsdc = 5; - const borrowAmountUsdc_native = new BN( - borrowAmountUsdc * 10 ** ecosystem.usdcDecimals - ); - - await user.mrgnProgram.provider.sendAndConfirm( - new Transaction().add( - await borrowIx(user.mrgnProgram, { - marginfiAccount: userAcc, - bank: bankKeypairUsdc.publicKey, - tokenAccount: user.usdcAccount, - remaining: [ - bankKeypairA.publicKey, - oracles.tokenAOracle.publicKey, - bankKeypairUsdc.publicKey, - oracles.usdcOracle.publicKey, - ], - amount: borrowAmountUsdc_native, - }) - ) - ); - - const userAccAfter = await program.account.marginfiAccount.fetch(userAcc); - let balances = userAccAfter.lendingAccount.balances; - assert.equal(balances[0].active, 1); - assertKeysEqual(balances[0].bankPk, bankKeypairA.publicKey); - assert.equal(balances[1].active, 1); - assertKeysEqual(balances[1].bankPk, bankKeypairUsdc.publicKey); - }); -}); diff --git a/tests/10_liquidate.spec.ts b/tests/10_liquidate.spec.ts deleted file mode 100644 index f498e3e7b..000000000 --- a/tests/10_liquidate.spec.ts +++ /dev/null @@ -1,442 +0,0 @@ -import { - AnchorProvider, - BN, - getProvider, - Program, - Wallet, - workspace, -} from "@coral-xyz/anchor"; -import { Transaction } from "@solana/web3.js"; -import { Marginfi } from "../target/types/marginfi"; -import { - bankKeypairA, - bankKeypairUsdc, - ecosystem, - groupAdmin, - marginfiGroup, - oracles, - users, - verbose, -} from "./rootHooks"; -import { - assertBNApproximately, - assertI80F48Approx, - assertI80F48Equal, - assertKeysEqual, - expectFailedTxWithError, - getTokenBalance, -} from "./utils/genericTests"; -import { assert } from "chai"; -import { liquidateIx } from "./utils/user-instructions"; -import { USER_ACCOUNT } from "./utils/mocks"; -import { updatePriceAccount } from "./utils/pyth_mocks"; -import { - bigNumberToWrappedI80F48, - wrappedI80F48toBigNumber, -} from "@mrgnlabs/mrgn-common"; -import { defaultBankConfigOptRaw } from "./utils/types"; -import { configureBank } from "./utils/group-instructions"; - -describe("Liquidate user", () => { - const program = workspace.Marginfi as Program; - const provider = getProvider() as AnchorProvider; - const wallet = provider.wallet as Wallet; - - const confidenceInterval = 0.0212; // 1% confidence * CONF_INTERVAL_MULTIPLE - const liquidateAmountA = 0.2; - const liquidateAmountA_native = new BN( - liquidateAmountA * 10 ** ecosystem.tokenADecimals - ); - - it("oracle data refreshes", async () => { - const usdcPrice = BigInt(oracles.usdcPrice * 10 ** oracles.usdcDecimals); - await updatePriceAccount( - oracles.usdcOracle, - { - exponent: -oracles.usdcDecimals, - aggregatePriceInfo: { - price: usdcPrice, - conf: usdcPrice / BigInt(100), // 1% of the price - }, - twap: { - // aka ema - valueComponent: usdcPrice, - }, - }, - wallet - ); - - const tokenAPrice = BigInt( - oracles.tokenAPrice * 10 ** oracles.tokenADecimals - ); - await updatePriceAccount( - oracles.tokenAOracle, - { - exponent: -oracles.tokenADecimals, - aggregatePriceInfo: { - price: tokenAPrice, - conf: tokenAPrice / BigInt(100), // 1% of the price - }, - twap: { - // aka ema - valueComponent: tokenAPrice, - }, - }, - wallet - ); - }); - - it("(user 1) tries to sneak in a bad oracle for itself - should fail", async () => { - const liquidatee = users[0]; - const liquidator = users[1]; - - const assetBankKey = bankKeypairA.publicKey; - const liabilityBankKey = bankKeypairUsdc.publicKey; - const liquidateeAccount = liquidatee.accounts.get(USER_ACCOUNT); - const liquidatorAccount = liquidator.accounts.get(USER_ACCOUNT); - - await expectFailedTxWithError(async () => { - await liquidator.mrgnProgram.provider.sendAndConfirm( - new Transaction().add( - await liquidateIx(liquidator.mrgnProgram, { - assetBankKey, - liabilityBankKey, - liquidatorMarginfiAccount: liquidatorAccount, - liquidateeMarginfiAccount: liquidateeAccount, - remaining: [ - oracles.tokenAOracle.publicKey, - oracles.usdcOracle.publicKey, - liabilityBankKey, - oracles.fakeUsdc, // sneaky sneaky - assetBankKey, - oracles.tokenAOracle.publicKey, - assetBankKey, - oracles.tokenAOracle.publicKey, - liabilityBankKey, - oracles.usdcOracle.publicKey, - ], - amount: liquidateAmountA_native, - }) - ) - ); - // TODO this should throw a more oracle-specific error further upstream, this is kinda dumb. - }, "HealthyAccount"); - }); - - it("(user 1) tries to sneak in a bad oracle for the liquidatee - should fail", async () => { - const liquidatee = users[0]; - const liquidator = users[1]; - - const assetBankKey = bankKeypairA.publicKey; - const liabilityBankKey = bankKeypairUsdc.publicKey; - const liquidateeAccount = liquidatee.accounts.get(USER_ACCOUNT); - const liquidatorAccount = liquidator.accounts.get(USER_ACCOUNT); - - await expectFailedTxWithError(async () => { - await liquidator.mrgnProgram.provider.sendAndConfirm( - new Transaction().add( - await liquidateIx(liquidator.mrgnProgram, { - assetBankKey, - liabilityBankKey, - liquidatorMarginfiAccount: liquidatorAccount, - liquidateeMarginfiAccount: liquidateeAccount, - remaining: [ - oracles.tokenAOracle.publicKey, - oracles.usdcOracle.publicKey, - liabilityBankKey, - oracles.usdcOracle.publicKey, - assetBankKey, - oracles.tokenAOracle.publicKey, - assetBankKey, - oracles.tokenAOracle.publicKey, - liabilityBankKey, - oracles.fakeUsdc, // sneaky sneaky - ], - amount: liquidateAmountA_native, - }) - ) - ); - }, "WrongOracleAccountKeys"); - }); - - it("(admin) vastly reduce Token A bank collateral ratio to induce liquidation", async () => { - let config = defaultBankConfigOptRaw(); - config.assetWeightInit = bigNumberToWrappedI80F48(0.05); - config.assetWeightMaint = bigNumberToWrappedI80F48(0.1); - await groupAdmin.mrgnProgram.provider.sendAndConfirm!( - new Transaction().add( - await configureBank(groupAdmin.mrgnProgram, { - bank: bankKeypairA.publicKey, - bankConfigOpt: config, - }) - ) - ); - }); - - /** - * Maintenance ratio allowed = 10% - * Liquidator fee = 2.5% - * Insurance fee = 2.5% - * Confidence interval = 2.12% (1% confidence * 2.12 = 2.12%) - * - * Token A is worth $10 with conf $0.212 (worth $9.788 low, $10.212 high) - * USDC is worth $1 with conf $0.0212 (worth $0.9788 low, $1.0212 high) - * - * User has: - * ASSETS - * [index 0] 200,000,000 (2) Token A (worth $20) - * DEBTS - * [index 1] 5,050,000 (5.05) USDC (worth $5.05) - * Note: $5.05 is 25.25% of $20, which is more than 10%, so liquidation is allowed - * - * Liquidator tries to repay .2 token A (worth $2) of liquidatee's debt, so liquidator's assets - * increase by this value, while liquidatee's assets decrease by this value. Which also means that: - * - * Liquidator must pay - * value of A minus liquidator fee (low bias within the confidence interval): .2 * (1 - 0.025) * 9.788 = $1.90866 - * USDC equivalent (high bias): 1.90866 / 1.0212 = $1.869036 (1,869,036 native) - * - * Liquidatee receives - * value of A minus (liquidator fee + insurance) (low bias): .2 * (1 - 0.025 - 0.025) * 9.788 = $1.8608 - * USDC equivalent (high bias): 1.8608 / 1.0212 = $1.822457 (1,822,457 native) - * - * Insurance fund collects the difference - * USDC diff 1,869,036 - 1,822,457 = 46,579 - */ - - it("(user 1) liquidate user 0 who borrowed USDC against their token A position - happy path", async () => { - const liquidatee = users[0]; - const liquidator = users[1]; - - const assetBankKey = bankKeypairA.publicKey; - const assetBankBefore = await program.account.bank.fetch(assetBankKey); - const liabilityBankKey = bankKeypairUsdc.publicKey; - const liabilityBankBefore = await program.account.bank.fetch( - liabilityBankKey - ); - - const liquidateeAccount = liquidatee.accounts.get(USER_ACCOUNT); - const liquidateeMarginfiAccount = - await program.account.marginfiAccount.fetch(liquidateeAccount); - - const liquidatorAccount = liquidator.accounts.get(USER_ACCOUNT); - const liquidatorMarginfiAccount = - await program.account.marginfiAccount.fetch(liquidatorAccount); - - const liquidateeBalances = - liquidateeMarginfiAccount.lendingAccount.balances; - const liquidatorBalances = - liquidatorMarginfiAccount.lendingAccount.balances; - const liabilitySharesBefore = liquidateeBalances[1].liabilityShares; - assertI80F48Equal(liquidatorBalances[1].assetShares, 0); - - const insuranceVaultBalance = await getTokenBalance( - provider, - liabilityBankBefore.insuranceVault - ); - assert.equal(insuranceVaultBalance, 0); - - const sharesA = wrappedI80F48toBigNumber( - liquidateeBalances[0].assetShares - ).toNumber(); - const shareValueA = wrappedI80F48toBigNumber( - assetBankBefore.assetShareValue - ).toNumber(); - const sharesUsdc = wrappedI80F48toBigNumber( - liabilitySharesBefore - ).toNumber(); - const shareValueUsdc = wrappedI80F48toBigNumber( - liabilityBankBefore.liabilityShareValue - ).toNumber(); - if (verbose) { - console.log("BEFORE"); - console.log( - "liability bank insurance vault before: " + - insuranceVaultBalance.toLocaleString() - ); - console.log( - "user 0 (liquidatee) Token A asset shares: " + sharesA.toString() - ); - console.log( - " value (in Token A native): " + - (sharesA * shareValueA).toLocaleString() - ); - console.log( - " value (in dollars): $" + - ( - (sharesA * shareValueA * oracles.tokenAPrice) / - 10 ** oracles.tokenADecimals - ).toLocaleString() - ); - console.log( - "user 0 (liquidatee) USDC liability shares: " + sharesUsdc.toString() - ); - console.log( - " debt (in USDC native): " + - (sharesUsdc * shareValueUsdc).toLocaleString() - ); - console.log( - " debt (in dollars): $" + - ( - (sharesUsdc * shareValueUsdc * oracles.usdcPrice) / - 10 ** oracles.usdcDecimals - ).toLocaleString() - ); - console.log( - "user 1 (liquidator) USDC asset shares: " + - wrappedI80F48toBigNumber(liquidatorBalances[0].assetShares).toString() - ); - console.log( - "user 1 (liquidator) USDC liability shares: " + - wrappedI80F48toBigNumber( - liquidatorBalances[0].liabilityShares - ).toString() - ); - } - - const tokenALowPrice = oracles.tokenAPrice * (1 - confidenceInterval); // see top of test - const usdcHighPrice = oracles.usdcPrice * (1 + confidenceInterval); // see top of test - const insuranceToBeCollected = - ((liquidateAmountA * 0.025 * shareValueA * tokenALowPrice) / - (shareValueUsdc * usdcHighPrice)) * - 10 ** oracles.usdcDecimals; - - await liquidator.mrgnProgram.provider.sendAndConfirm( - new Transaction().add( - await liquidateIx(liquidator.mrgnProgram, { - assetBankKey, - liabilityBankKey, - liquidatorMarginfiAccount: liquidatorAccount, - liquidateeMarginfiAccount: liquidateeAccount, - remaining: [ - oracles.tokenAOracle.publicKey, - oracles.usdcOracle.publicKey, - liabilityBankKey, - oracles.usdcOracle.publicKey, - assetBankKey, - oracles.tokenAOracle.publicKey, - assetBankKey, - oracles.tokenAOracle.publicKey, - liabilityBankKey, - oracles.usdcOracle.publicKey, - ], - amount: liquidateAmountA_native, - }) - ) - ); - - const liquidateeMarginfiAccountAfter = - await program.account.marginfiAccount.fetch(liquidateeAccount); - const liquidatorMarginfiAccountAfter = - await program.account.marginfiAccount.fetch(liquidatorAccount); - - const liquidateeBalancesAfter = - liquidateeMarginfiAccountAfter.lendingAccount.balances; - const liquidatorBalancesAfter = - liquidatorMarginfiAccountAfter.lendingAccount.balances; - - const sharesAAfter = wrappedI80F48toBigNumber( - liquidateeBalancesAfter[0].assetShares - ).toNumber(); - const sharesUsdcAfter = wrappedI80F48toBigNumber( - liquidateeBalancesAfter[1].liabilityShares - ).toNumber(); - - assertI80F48Equal( - liquidateeBalancesAfter[0].assetShares, - wrappedI80F48toBigNumber(liquidateeBalances[0].assetShares).toNumber() - - liquidateAmountA_native.toNumber() - ); - assertI80F48Equal(liquidateeBalancesAfter[0].liabilityShares, 0); - assertI80F48Equal(liquidateeBalancesAfter[1].assetShares, 0); - - assertI80F48Equal(liquidatorBalancesAfter[0].liabilityShares, 0); - assertI80F48Equal( - liquidatorBalancesAfter[1].assetShares, - liquidateAmountA_native - ); - assertI80F48Equal(liquidatorBalancesAfter[1].liabilityShares, 0); - - const insuranceVaultBalanceAfter = await getTokenBalance( - provider, - liabilityBankBefore.insuranceVault - ); - - assert.approximately( - insuranceVaultBalanceAfter, - insuranceToBeCollected, - insuranceToBeCollected * 0.1 - ); // see top of test - - if (verbose) { - console.log("AFTER"); - console.log( - "liability bank insurance vault after (usdc): " + - insuranceVaultBalanceAfter.toLocaleString() - ); - console.log( - "user 0 (liquidatee) Token A asset shares after: " + - sharesAAfter.toString() - ); - console.log( - " value (in Token A native): " + - (sharesAAfter * shareValueA).toLocaleString() - ); - console.log( - " value (in dollars): $" + - ( - (sharesAAfter * shareValueA * oracles.tokenAPrice) / - 10 ** oracles.tokenADecimals - ).toLocaleString() - ); - console.log( - "user 0 (liquidatee) USDC liability shares after: " + - sharesUsdcAfter.toString() - ); - console.log( - " debt (in USDC native): " + - (sharesUsdcAfter * shareValueUsdc).toLocaleString() - ); - console.log( - " debt (in dollars): $" + - ( - (sharesUsdcAfter * shareValueUsdc * oracles.usdcPrice) / - 10 ** oracles.usdcDecimals - ).toLocaleString() - ); - console.log( - "user 1 (liquidator) USDC asset shares after: " + - wrappedI80F48toBigNumber( - liquidatorBalancesAfter[0].assetShares - ).toString() - ); - console.log( - "user 1 (liquidator) USDC liability shares after: " + - wrappedI80F48toBigNumber( - liquidatorBalancesAfter[0].liabilityShares - ).toString() - ); - console.log( - "user 1 (liquidator) Token A asset shares after: " + - wrappedI80F48toBigNumber( - liquidatorBalancesAfter[1].assetShares - ).toString() - ); - console.log( - "user 1 (liquidator) Token A liability shares after: " + - wrappedI80F48toBigNumber( - liquidatorBalancesAfter[1].liabilityShares - ).toString() - ); - } - - assert.equal(liquidatorBalancesAfter[1].active, 1); - assertKeysEqual(liquidatorBalancesAfter[1].bankPk, assetBankKey); - - let now = Math.floor(Date.now() / 1000); - assertBNApproximately(liquidatorBalancesAfter[0].lastUpdate, now, 2); - assertBNApproximately(liquidatorBalancesAfter[1].lastUpdate, now, 2); - assertBNApproximately(liquidateeBalancesAfter[0].lastUpdate, now, 2); - assertBNApproximately(liquidateeBalancesAfter[1].lastUpdate, now, 2); - }); -}); diff --git a/tests/11_health_pulse.spec.ts b/tests/11_health_pulse.spec.ts deleted file mode 100644 index 08d1f4f15..000000000 --- a/tests/11_health_pulse.spec.ts +++ /dev/null @@ -1,348 +0,0 @@ -import { - AnchorProvider, - BN, - getProvider, - Program, - Wallet, - workspace, -} from "@coral-xyz/anchor"; -import { Transaction } from "@solana/web3.js"; -import { Marginfi } from "../target/types/marginfi"; -import { - bankKeypairA, - bankKeypairSol, - bankKeypairUsdc, - ecosystem, - groupAdmin, - marginfiGroup, - oracles, - users, - verbose, -} from "./rootHooks"; -import { - assertBNApproximately, - assertBNEqual, - assertI80F48Approx, - assertI80F48Equal, - assertKeysEqual, - getTokenBalance, -} from "./utils/genericTests"; -import { assert } from "chai"; -import { healthPulse, liquidateIx } from "./utils/user-instructions"; -import { USER_ACCOUNT } from "./utils/mocks"; -import { updatePriceAccount } from "./utils/pyth_mocks"; -import { - bigNumberToWrappedI80F48, - wrappedI80F48toBigNumber, -} from "@mrgnlabs/mrgn-common"; -import { - defaultBankConfigOptRaw, - HEALTH_CACHE_ENGINE_OK, - HEALTH_CACHE_HEALTHY, - HEALTH_CACHE_NONE, -} from "./utils/types"; -import { configureBank } from "./utils/group-instructions"; - -describe("Health pulse", () => { - const program = workspace.Marginfi as Program; - const provider = getProvider() as AnchorProvider; - const wallet = provider.wallet as Wallet; - - it("(user 1) health pulse with bad oracle - cache notes the missing price", async () => { - const user = users[1]; - const acc = user.accounts.get(USER_ACCOUNT); - await user.mrgnProgram.provider.sendAndConfirm!( - new Transaction().add( - await healthPulse(user.mrgnProgram, { - marginfiAccount: acc, - remaining: [ - bankKeypairUsdc.publicKey, - oracles.fakeUsdc, // sneaky sneaky - bankKeypairA.publicKey, - oracles.tokenAOracle.publicKey, - ], - }) - ) - ); - - const accAfter = await program.account.marginfiAccount.fetch(acc); - const cacheAfter = accAfter.healthCache; - const now = Date.now() / 1000; - const assetValue = wrappedI80F48toBigNumber(cacheAfter.assetValue); - const liabValue = wrappedI80F48toBigNumber(cacheAfter.liabilityValue); - - if (verbose) { - console.log("---user health state---"); - console.log("asset value: " + assetValue.toString()); - console.log("liab value: " + liabValue.toString()); - console.log("prices: "); - for (let i = 0; i < cacheAfter.prices.length; i++) { - const price = wrappedI80F48toBigNumber(cacheAfter.prices[i]).toNumber(); - if (price != 0) { - console.log(" [" + i + "] " + price); - } - } - } - - assert.approximately(cacheAfter.timestamp.toNumber(), now, 3); - // Note: still healthy, and the engine has technically resolved! - assertBNEqual( - cacheAfter.flags, - HEALTH_CACHE_HEALTHY + HEALTH_CACHE_ENGINE_OK - ); - // The fake usdc price is set to zero due to the bad oracle - assertI80F48Equal(cacheAfter.prices[0], 0); - // User 1 has a trivial amount of token A as well, but we note here it is almost worth zero. - assert.isAtMost(assetValue.toNumber(), 1); - }); - - it("(user 1) health pulse - happy path", async () => { - const user = users[1]; - const acc = user.accounts.get(USER_ACCOUNT); - await user.mrgnProgram.provider.sendAndConfirm!( - new Transaction().add( - await healthPulse(user.mrgnProgram, { - marginfiAccount: acc, - remaining: [ - bankKeypairUsdc.publicKey, - oracles.usdcOracle.publicKey, - bankKeypairA.publicKey, - oracles.tokenAOracle.publicKey, - ], - }) - ) - ); - - const accAfter = await program.account.marginfiAccount.fetch(acc); - const cacheAfter = accAfter.healthCache; - const now = Date.now() / 1000; - - const assetValue = wrappedI80F48toBigNumber(cacheAfter.assetValue); - const liabValue = wrappedI80F48toBigNumber(cacheAfter.liabilityValue); - if (verbose) { - console.log("---user health state---"); - console.log("asset value: " + assetValue.toString()); - console.log("liab value: " + liabValue.toString()); - console.log("prices: "); - for (let i = 0; i < cacheAfter.prices.length; i++) { - const price = wrappedI80F48toBigNumber(cacheAfter.prices[i]).toNumber(); - if (price != 0) { - console.log(" [" + i + "] " + price); - } - } - } - - assert.approximately(cacheAfter.timestamp.toNumber(), now, 3); - assertBNEqual( - cacheAfter.flags, - HEALTH_CACHE_HEALTHY + HEALTH_CACHE_ENGINE_OK - ); - assertI80F48Approx(cacheAfter.prices[0], oracles.usdcPrice); - assertI80F48Approx(cacheAfter.prices[1], oracles.tokenAPrice); - }); - - it("(user 0) health pulse in unhealthy state - happy path", async () => { - const user = users[0]; - const acc = user.accounts.get(USER_ACCOUNT); - await user.mrgnProgram.provider.sendAndConfirm!( - new Transaction().add( - await healthPulse(user.mrgnProgram, { - marginfiAccount: acc, - remaining: [ - bankKeypairA.publicKey, - oracles.tokenAOracle.publicKey, - bankKeypairUsdc.publicKey, - oracles.usdcOracle.publicKey, - ], - }) - ) - ); - - const accAfter = await program.account.marginfiAccount.fetch(acc); - const cacheAfter = accAfter.healthCache; - const now = Date.now() / 1000; - - const assetValue = wrappedI80F48toBigNumber(cacheAfter.assetValue); - const liabValue = wrappedI80F48toBigNumber(cacheAfter.liabilityValue); - let expectedValue: number; - let expectedDebt: number; - if (verbose) { - console.log("---user balances state---"); - const bals = accAfter.lendingAccount.balances; - for (let i = 0; i < bals.length; i++) { - const b = bals[i]; - const bankKey = b.bankPk; - const shares = wrappedI80F48toBigNumber(b.assetShares).toNumber(); - const debt = wrappedI80F48toBigNumber(b.liabilityShares).toNumber(); - if (shares != 0) { - const bankAcc = await program.account.bank.fetch(bankKey); - const config = bankAcc.config; - expectedValue = - shares * - wrappedI80F48toBigNumber(bankAcc.assetShareValue).toNumber() * - wrappedI80F48toBigNumber(config.assetWeightInit).toNumber(); - console.log( - " [" + i + "] (asset): " + shares + " of " + bankKey.toString() - ); - // Note: Multiply this by the asset price, e.g. for Token A this is $10 - console.log(" exp value/price: " + expectedValue); - } - if (debt != 0) { - const bankAcc = await program.account.bank.fetch(bankKey); - const config = bankAcc.config; - expectedDebt = - debt * - wrappedI80F48toBigNumber(bankAcc.liabilityShareValue).toNumber() * - wrappedI80F48toBigNumber(config.liabilityWeightInit).toNumber(); - console.log( - " [" + i + "] (debt): " + debt + " in " + bankKey.toString() - ); - // Note: Multiply this by the asset price, e.g. for Token A this is $1 - console.log(" exp value/price: " + expectedDebt); - } - } - - console.log("---user health state---"); - const flags = cacheAfter.flags.toNumber(); - const isHealthy = (flags & HEALTH_CACHE_HEALTHY) !== 0; - const engineOk = (flags & HEALTH_CACHE_ENGINE_OK) !== 0; - console.log("healthy: " + isHealthy); - console.log("engine ok: " + engineOk); - console.log("asset value: " + assetValue.toString()); - console.log("liab value: " + liabValue.toString()); - console.log("prices: "); - for (let i = 0; i < cacheAfter.prices.length; i++) { - const price = wrappedI80F48toBigNumber(cacheAfter.prices[i]).toNumber(); - if (price != 0) { - console.log(" [" + i + "] " + price); - } - } - } - - assert.approximately(cacheAfter.timestamp.toNumber(), now, 3); - // Note: cache is unhealthy (no HEALTH_CACHE_HEALTHY flag set) but price info is still populated. - assertBNEqual(cacheAfter.flags, 0); - assertI80F48Approx(cacheAfter.prices[0], oracles.tokenAPrice); - assertI80F48Approx(cacheAfter.prices[1], oracles.usdcPrice); - assert.approximately( - (expectedValue * oracles.tokenAPrice) / 10 ** oracles.tokenADecimals, - assetValue.toNumber(), - 0.01 - ); - assert.approximately( - (expectedDebt * oracles.usdcPrice) / 10 ** oracles.usdcDecimals, - liabValue.toNumber(), - 0.01 - ); - }); - - it("(admin) restore the default config to Token A bank", async () => { - let config = defaultBankConfigOptRaw(); - await groupAdmin.mrgnProgram.provider.sendAndConfirm!( - new Transaction().add( - await configureBank(groupAdmin.mrgnProgram, { - bank: bankKeypairA.publicKey, - bankConfigOpt: config, - }) - ) - ); - }); - - it("(user 0) health pulse in now-healthy state - happy path", async () => { - const user = users[0]; - const acc = user.accounts.get(USER_ACCOUNT); - await user.mrgnProgram.provider.sendAndConfirm!( - new Transaction().add( - await healthPulse(user.mrgnProgram, { - marginfiAccount: acc, - remaining: [ - bankKeypairA.publicKey, - oracles.tokenAOracle.publicKey, - bankKeypairUsdc.publicKey, - oracles.usdcOracle.publicKey, - ], - }) - ) - ); - - const accAfter = await program.account.marginfiAccount.fetch(acc); - const cacheAfter = accAfter.healthCache; - const now = Date.now() / 1000; - - const assetValue = wrappedI80F48toBigNumber(cacheAfter.assetValue); - const liabValue = wrappedI80F48toBigNumber(cacheAfter.liabilityValue); - let expectedValue: number; - let expectedDebt: number; - if (verbose) { - console.log("---user balances state---"); - const bals = accAfter.lendingAccount.balances; - for (let i = 0; i < bals.length; i++) { - const b = bals[i]; - const bankKey = b.bankPk; - const shares = wrappedI80F48toBigNumber(b.assetShares).toNumber(); - const debt = wrappedI80F48toBigNumber(b.liabilityShares).toNumber(); - if (shares != 0) { - const bankAcc = await program.account.bank.fetch(bankKey); - const config = bankAcc.config; - expectedValue = - shares * - wrappedI80F48toBigNumber(bankAcc.assetShareValue).toNumber() * - wrappedI80F48toBigNumber(config.assetWeightInit).toNumber(); - console.log( - " [" + i + "] (asset): " + shares + " of " + bankKey.toString() - ); - // Note: Multiply this by the asset price, e.g. for Token A this is $10 - console.log(" exp value/price: " + expectedValue); - } - if (debt != 0) { - const bankAcc = await program.account.bank.fetch(bankKey); - const config = bankAcc.config; - expectedDebt = - debt * - wrappedI80F48toBigNumber(bankAcc.liabilityShareValue).toNumber() * - wrappedI80F48toBigNumber(config.liabilityWeightInit).toNumber(); - console.log( - " [" + i + "] (debt): " + debt + " in " + bankKey.toString() - ); - // Note: Multiply this by the asset price, e.g. for Token A this is $1 - console.log(" exp value/price: " + expectedDebt); - } - } - - console.log("---user health state---"); - const flags = cacheAfter.flags.toNumber(); - const isHealthy = (flags & HEALTH_CACHE_HEALTHY) !== 0; - const engineOk = (flags & HEALTH_CACHE_ENGINE_OK) !== 0; - console.log("healthy: " + isHealthy); - console.log("engine ok: " + engineOk); - console.log("asset value: " + assetValue.toString()); - console.log("liab value: " + liabValue.toString()); - console.log("prices: "); - for (let i = 0; i < cacheAfter.prices.length; i++) { - const price = wrappedI80F48toBigNumber(cacheAfter.prices[i]).toNumber(); - if (price != 0) { - console.log(" [" + i + "] " + price); - } - } - } - - assert.approximately(cacheAfter.timestamp.toNumber(), now, 3); - // Note: cache is unhealthy (no HEALTH_CACHE_HEALTHY flag set) but price info is still populated. - assertBNEqual( - cacheAfter.flags, - HEALTH_CACHE_HEALTHY + HEALTH_CACHE_ENGINE_OK - ); - assertI80F48Approx(cacheAfter.prices[0], oracles.tokenAPrice); - assertI80F48Approx(cacheAfter.prices[1], oracles.usdcPrice); - assert.approximately( - (expectedValue * oracles.tokenAPrice) / 10 ** oracles.tokenADecimals, - assetValue.toNumber(), - 0.01 - ); - assert.approximately( - (expectedDebt * oracles.usdcPrice) / 10 ** oracles.usdcDecimals, - liabValue.toNumber(), - 0.01 - ); - }); -}); diff --git a/tests/fixtures/bonk_bank.json b/tests/fixtures/bonk_bank.json deleted file mode 100644 index 547360f40..000000000 --- a/tests/fixtures/bonk_bank.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "pubkey": "DeyH7QxWvnbbaVB4zFrf4hoq7Q8z1ZT14co42BGwGtfM", - "account": { - "lamports": 13864320, - "data": [ - "jjGm8jJCYby8B8VuYK09PxdzgurGVI+6H9Ms/ZDKArPnz6GF/c5zmAU5FC9oL9g4hJbsvVEG8Vx5TCR3Qzgo+mZC2+v3IANKYQAAAAAAAAAH7XQ4CQABAAAAAAAAAAAAUNKaShMDAQAAAAAAAAAAAFzlbG/YKG1ihwzjTpXeSCz7FIr2l01l8218yTibFnS3/P0CcaJzPtE3LyjGzOuP/wjpdl0sgXZ7i0qrUu0t2zHADv//AAAAAPZI716C4B6wAwAAAAAAAABnhNZ6oVeYGzSiP937qE9gqWYX4fOltZuMphcq7Z7Fuv7/AAAAAAAAZxEIzik2jTlJ79MGAAAAAN1wRLvkQ3UtFdFMlgMAAAD8eogH20TycL6/RqE0AQAAH+zEZgAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAZmamAAAAAAAAAAAAAAAAAMzMTAEAAAAAAAAAAAAAAAA0MzMBAAAAAAAAAAAAAACKXXhFYwHNzMzMzMwAAAAAAAAAAAAAzczMzMxMAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMP1KFyPAgAAAAAAAAAAAADD9ShcjyIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABA3KwISF8o/5okioZqvmQEJy52E6a0AS00gJa1vUpMUQZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgmK/LlWEJAAAAAAAAAAAA0w9RAgAAAAB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", - "base64" - ], - "owner": "MFv2hWf31Z9kbCa1snEPYctwafyhdvnV7FZnsebVacA", - "executable": false, - "rentEpoch": 18446744073709551615, - "space": 1864 - } -} \ No newline at end of file diff --git a/tests/fixtures/cloud_bank.json b/tests/fixtures/cloud_bank.json deleted file mode 100644 index f9829ef3e..000000000 --- a/tests/fixtures/cloud_bank.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "pubkey": "4kNXetv8hSv9PzvzPZzEs1CTH6ARRRi2b8h6jk1ad1nP", - "account": { - "lamports": 13864320, - "data": [ - "jjGm8jJCYbyogyJqGFxrMisI4fefQo4wDT4zW6GgTHhlNJGaBvfZ8gk5FC9oL9g4hJbsvVEG8Vx5TCR3Qzgo+mZC2+v3IANKYQAAAAAAAAAs3CCdPQABAAAAAAAAAAAA/tkGsN0AAQAAAAAAAAAAAFqTdNGj30RAPJUB2FxDdTaiQK81nAtNoC036eETPCSh//p7JBMzI1J2TnJXaz6SDMKe3DxZ7QTNyT0VRLNMhmF6XP7/AAAAAAsOCie/5VEAAAAAAAAAAABPATDgNn7MBOPOgG0ZBuCJYeC7tAxd7ySm24iypihR6f77AAAAAAAAxF9HPV+oYT5JYgoAAAAAACc+mwXs5Y0c3EtSLQAAAAClWKbWb3E0+LsL8mgCAAAAEN3EZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAIAAAAAAAAAAAAAAAAAAIABAAAAAAAAAAAAAIDGpH6NAwDNzMzMzMwAAAAAAAAAAAAAmpmZmZkZAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMP1KFyPAgAAAAAAAAAAAADNzMzMzAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAncWuZMDstDPvGDjb7auLA4prc6DC5CLlvLSNUQf0XjqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAID2IeS0AAAEAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", - "base64" - ], - "owner": "MFv2hWf31Z9kbCa1snEPYctwafyhdvnV7FZnsebVacA", - "executable": false, - "rentEpoch": 18446744073709551615, - "space": 1864 - } -} \ No newline at end of file diff --git a/tests/fixtures/localnet_usdc.json b/tests/fixtures/localnet_usdc.json deleted file mode 100644 index 440d29c44..000000000 --- a/tests/fixtures/localnet_usdc.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "pubkey": "8FRFC6MoGGkMFQwngccyu69VnYbzykGeez7ignHVAFSN", - "account": { - "lamports": 1461600, - "data": [ - "AQAAACwCfr1xSaGmm3P/yY0wzvYAEoTvIw1NB3zNVAhGYjV9ACBKqdEBAAAGAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", - "base64" - ], - "owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA", - "executable": false, - "rentEpoch": 371 - } -} diff --git a/tests/fixtures/pyusd_bank.json b/tests/fixtures/pyusd_bank.json deleted file mode 100644 index e59459d4d..000000000 --- a/tests/fixtures/pyusd_bank.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "pubkey": "Fe5QkKPVAh629UPP5aJ8sDZu8HTfe6M26jDQkKyXVhoA", - "account": { - "lamports": 13864320, - "data": [ - "jjGm8jJCYbwXkkg7bIoqh7dHHYFPlZH5OVyECpzj2fTVun06S4p0ngbS7qNW7Dx5ehg9nAnFDP63jomJRxUTYMZvKp+sEMXJ9AAAAAAAAABqo0cIVQABAAAAAAAAAAAAerjNbJYAAQAAAAAAAAAAAD+qZNIhko6I815Qcr1imt+4Mav6RP0FS+3wO1rdzHb2//9rJOLCuVHJSdCU2JfYrAEawvoNUZ3rL2c5ocvqnISYjvz/AAAAAJVXzdUKawYAAAAAAAAAAAA78ZdGK1AwaMp/IAX8Hd174GpPOkna9ir36HsJ3+vLJf7+AAAAAAAAiYrUtxDQkwAAAAAAAAAAAKHCFhvpYRpXBQAAAAAAAADyQbEwcR8DqSUAAAAAAAAAujPXZgAAAAAAAIBmZmYAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAQAEAAAAAAAAAAACamZmZmRkBAAAAAAAAAAAAAID0IOa1AACamZmZmdkAAAAAAAAAAAAAmpmZmZkZAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMP1KFyPAgAAAAAAAAAAAADNzMzMzAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABA8HaG3PX8B593VSzdmz3/NZEOVrRT3CqcG7FOExZ52aSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgPQg5rUAAAAAAAAAAAAAAAAAAAAAAAAsAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAADoAwAAAAAAALimWlHsykcAAAAAAAAAAAAXkkg7bIoqh7dHHYFPlZH5OVyECpzj2fTVun06S4p0ngAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==", - "base64" - ], - "owner": "stag8sTKds2h4KzjUw3zKTsxbqvT4XKHdaR9X9E6Rct", - "executable": false, - "rentEpoch": 18446744073709551615, - "space": 1864 - } -} \ No newline at end of file diff --git a/tests/fixtures/sol_pyth_oracle.json b/tests/fixtures/sol_pyth_oracle.json deleted file mode 100644 index 217e1150c..000000000 --- a/tests/fixtures/sol_pyth_oracle.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "pubkey": "H6ARHf6YXhGYeQfUzQNGk6rDNnLBQKrenN712K4AQJEG", - "account": { - "lamports": 23942400, - "data": [ - "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", - "base64" - ], - "owner": "FsJ3A3u2vn5cTVofAjvy6y5kwABJAqYWpe4975bi2epH", - "executable": false, - "rentEpoch": 18446744073709551615, - "space": 3312 - } -} \ No newline at end of file diff --git a/tests/fixtures/sol_pyth_price_feed.json b/tests/fixtures/sol_pyth_price_feed.json deleted file mode 100644 index 517086016..000000000 --- a/tests/fixtures/sol_pyth_price_feed.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "pubkey": "7UVimffxr9ow1uXYxsr4LHAcV58mLzhmwaeKvJ1pjLiE", - "account": { - "lamports": 1825020, - "data": [ - "IvEjY51+9M1gMUcENA3t3zcf1CRyFI8kjp0abRpesqw6zYt/1dayQwHvDYtv2izrpB2hXUCV0do5Kg0vjtDGx7wPTPrIwoC1bW2njwUFAAAARTozAQAAAAD4////1wN5ZwAAAADXA3lnAAAAAIRKaggFAAAAk1kTAQAAAAA8qpUSAAAAAAA=", - "base64" - ], - "owner": "rec5EKMGg6MxZYaMdyBfgwp4d5rB9T1VQH5pJv5LtFJ", - "executable": false, - "rentEpoch": 18446744073709551615, - "space": 134 - } -} \ No newline at end of file diff --git a/tests/fixtures/spl_single_pool.so b/tests/fixtures/spl_single_pool.so deleted file mode 100755 index 79c650a190c442a92d87313d65e0901154569482..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 390632 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 e`22}s+-*V)*LBcezLNhxdH%onAM4c5^Z#%1 { - it("(admin) Init group - happy path", async () => { - let tx = new Transaction(); - - tx.add( - await groupInitialize(groupAdmin.mrgnBankrunProgram, { - marginfiGroup: throwawayGroup.publicKey, - admin: groupAdmin.wallet.publicKey, - }) - ); - tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); - tx.sign(groupAdmin.wallet, throwawayGroup); - await banksClient.processTransaction(tx); - - let group = await bankrunProgram.account.marginfiGroup.fetch( - throwawayGroup.publicKey - ); - assertKeysEqual(group.admin, groupAdmin.wallet.publicKey); - if (verbose) { - console.log("*init group: " + throwawayGroup.publicKey); - console.log(" group admin: " + group.admin); - } - }); - - it("(admin) Add 'LST' bank with mainnet pyth pull oracles (Jup's Sol oracle)", async () => { - let setConfig = defaultBankConfig(); - const seed = new BN(42); - const [bankKey] = deriveBankWithSeed( - bankrunProgram.programId, - throwawayGroup.publicKey, - ecosystem.lstAlphaMint.publicKey, - seed - ); - const oracleMeta: AccountMeta = { - pubkey: PYTH_ORACLE_FEED_SAMPLE, // NOTE: This is the FEED (price V2) - isSigner: false, - isWritable: false, - }; - - let tx = new Transaction(); - tx.add( - await addBankWithSeed(groupAdmin.mrgnBankrunProgram, { - marginfiGroup: throwawayGroup.publicKey, - feePayer: groupAdmin.wallet.publicKey, - bankMint: ecosystem.lstAlphaMint.publicKey, - bank: bankKey, - config: setConfig, - seed, - }), - await groupAdmin.mrgnProgram.methods - // Note: This is the ORACLE (feed id) - .lendingPoolConfigureBankOracle( - ORACLE_SETUP_PYTH_PUSH, - PYTH_ORACLE_SAMPLE - ) - .accountsPartial({ - group: throwawayGroup.publicKey, - bank: bankKey, - admin: groupAdmin.wallet.publicKey, - }) - .remainingAccounts([oracleMeta]) - .instruction() - ); - tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); - tx.sign(groupAdmin.wallet); - await banksClient.tryProcessTransaction(tx); - - if (verbose) { - console.log("*init LST bank " + bankKey); - } - - const bank = await bankrunProgram.account.bank.fetch(bankKey); - assert.equal(bank.config.assetTag, ASSET_TAG_DEFAULT); - }); - - it("(admin) Add 'LST' bank with mock pyth pull oracles", async () => { - let setConfig = defaultBankConfig(); - const seed = new BN(43); - const [bankKey] = deriveBankWithSeed( - bankrunProgram.programId, - throwawayGroup.publicKey, - ecosystem.lstAlphaMint.publicKey, - seed - ); - const oracleMeta: AccountMeta = { - pubkey: oracles.pythPullLst.publicKey, // NOTE: This is the Price V2 update - isSigner: false, - isWritable: false, - }; - - let tx = new Transaction(); - tx.add( - await addBankWithSeed(groupAdmin.mrgnBankrunProgram, { - marginfiGroup: throwawayGroup.publicKey, - feePayer: groupAdmin.wallet.publicKey, - bankMint: ecosystem.lstAlphaMint.publicKey, - bank: bankKey, - config: setConfig, - seed: seed, - }), - await groupAdmin.mrgnProgram.methods - // Note: This is the feed id - .lendingPoolConfigureBankOracle( - ORACLE_SETUP_PYTH_PUSH, - oracles.pythPullLstOracleFeed.publicKey - ) - .accountsPartial({ - group: throwawayGroup.publicKey, - bank: bankKey, - admin: groupAdmin.wallet.publicKey, - }) - .remainingAccounts([oracleMeta]) - .instruction() - ); - tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); - tx.sign(groupAdmin.wallet); - await banksClient.processTransaction(tx); - - if (verbose) { - console.log("*init WSOL bank " + bankKey); - } - - const bank = await bankrunProgram.account.bank.fetch(bankKey); - assert.equal(bank.config.assetTag, ASSET_TAG_DEFAULT); - }); - - it("(user 3) optional account setup", async () => { - const user = users[3]; - - // Init mrgn account if needed. - if (!user.accounts.has(USER_ACCOUNT)) { - const userAccKeypair = Keypair.generate(); - const userAccount = userAccKeypair.publicKey; - user.accounts.set(USER_ACCOUNT, userAccount); - - let accountInitTx: Transaction = new Transaction(); - accountInitTx.add( - await accountInit(user.mrgnBankrunProgram, { - marginfiGroup: throwawayGroup.publicKey, - marginfiAccount: userAccount, - authority: user.wallet.publicKey, - feePayer: user.wallet.publicKey, - }) - ); - accountInitTx.recentBlockhash = await getBankrunBlockhash(bankrunContext); - accountInitTx.sign(user.wallet, userAccKeypair); - await banksClient.processTransaction(accountInitTx); - } - // Fund the user - const provider = getProvider() as AnchorProvider; - const wallet = provider.wallet as Wallet; - let fundUserTx = new Transaction(); - fundUserTx.add( - createMintToInstruction( - ecosystem.lstAlphaMint.publicKey, - user.lstAlphaAccount, - wallet.publicKey, - 10 * 10 ** ecosystem.lstAlphaDecimals - ) - ); - fundUserTx.recentBlockhash = await getBankrunBlockhash(bankrunContext); - fundUserTx.sign(wallet.payer); - await banksClient.processTransaction(fundUserTx); - }); - - it("(user 3) deposit into Pyth pull bank", async () => { - const user = users[3]; - const depositAmount = 2; - const userAcc = user.accounts.get(USER_ACCOUNT); - - const seed = new BN(43); - const [bankKey] = deriveBankWithSeed( - bankrunProgram.programId, - throwawayGroup.publicKey, - ecosystem.lstAlphaMint.publicKey, - seed - ); - - let depositTx = new Transaction().add( - await depositIx(user.mrgnBankrunProgram, { - marginfiAccount: userAcc, - bank: bankKey, - tokenAccount: user.lstAlphaAccount, - amount: new BN(depositAmount * 10 ** ecosystem.lstAlphaDecimals), - depositUpToLimit: false, - }), - // Pulse to view cache state and read prices - await healthPulse(user.mrgnBankrunProgram, { - marginfiAccount: userAcc, - remaining: [bankKey, oracles.pythPullLst.publicKey], - }) - ); - - depositTx.recentBlockhash = await getBankrunBlockhash(bankrunContext); - depositTx.sign(user.wallet); - await banksClient.processTransaction(depositTx); - - const acc = await bankrunProgram.account.marginfiAccount.fetch(userAcc); - const cache = acc.healthCache; - if (verbose) { - console.log( - "Shares: " + - wrappedI80F48toBigNumber( - acc.lendingAccount.balances[0].assetShares - ).toNumber() - ); - console.log( - "price actual: " + wrappedI80F48toBigNumber(cache.prices[0]).toNumber() - ); - console.log( - "assets actual: " + - wrappedI80F48toBigNumber(cache.assetValue).toNumber() - ); - } - - assertI80F48Approx( - acc.lendingAccount.balances[0].assetShares, - depositAmount * 10 ** ecosystem.lstAlphaDecimals - ); - assertBNEqual(cache.flags, HEALTH_CACHE_HEALTHY + HEALTH_CACHE_ENGINE_OK); - const priceExpected = - oracles.lstAlphaPrice - oracles.lstAlphaPrice * oracles.confidenceValue; - assertI80F48Approx(cache.prices[0], priceExpected); - assertI80F48Approx(cache.assetValue, priceExpected * depositAmount); - }); -}); diff --git a/tests/rootHooks.ts b/tests/rootHooks.ts deleted file mode 100644 index 4309aa584..000000000 --- a/tests/rootHooks.ts +++ /dev/null @@ -1,469 +0,0 @@ -import { workspace, Program, AnchorProvider, Wallet } from "@coral-xyz/anchor"; -import { - createSimpleMint, - echoEcosystemInfo, - Ecosystem, - getGenericEcosystem, - MockUser as MockUser, - Oracles, - setupTestUser, - SetupTestUserOptions, - Validator, -} from "./utils/mocks"; -import { Marginfi } from "../target/types/marginfi"; -import { - Keypair, - LAMPORTS_PER_SOL, - PublicKey, - SystemProgram, - SYSVAR_STAKE_HISTORY_PUBKEY, - Transaction, - VoteInit, - VoteProgram, -} from "@solana/web3.js"; -import { setupPythOracles } from "./utils/pyth_mocks"; -import { BankrunProvider } from "anchor-bankrun"; -import { BanksClient, ProgramTestContext, startAnchor } from "solana-bankrun"; -import path from "path"; -import { - findPoolAddress, - findPoolMintAddress, - findPoolStakeAddress, - findPoolStakeAuthorityAddress, - SinglePoolProgram, -} from "@solana/spl-single-pool-classic"; -import { SINGLE_POOL_PROGRAM_ID } from "./utils/types"; -import { assertKeysEqual } from "./utils/genericTests"; -import { assert } from "chai"; -import { decodeSinglePool } from "./utils/spl-staking-utils"; -import { bigNumberToWrappedI80F48 } from "@mrgnlabs/mrgn-common"; -import { initGlobalFeeState } from "./utils/group-instructions"; -import { deriveGlobalFeeState } from "./utils/pdas"; - -export const ecosystem: Ecosystem = getGenericEcosystem(); -export let oracles: Oracles = undefined; -/** Show various information about accounts and tests */ -export const verbose = true; -/** Show the raw buffer printout of various structs */ -export const printBuffers = false; -/** The program owner is also the provider wallet */ -export let globalProgramAdmin: MockUser = undefined; -/** Administers the mrgnlend group and/or stake holder accounts */ -export let groupAdmin: MockUser = undefined; -/** Administers valiator votes and withdraws */ -export let validatorAdmin: MockUser = undefined; -export const users: MockUser[] = []; -export const numUsers = 4; - -export const validators: Validator[] = []; -export const numValidators = 2; -export let globalFeeWallet: PublicKey = undefined; - -/** Lamports charged when creating any pool */ -export const INIT_POOL_ORIGINATION_FEE = 1000; - -export const PROGRAM_FEE_FIXED = 0.01; -export const PROGRAM_FEE_RATE = 0.02; - -/** Group used for all happy-path tests */ -export const marginfiGroup = Keypair.generate(); -/** Bank for USDC */ -export const bankKeypairUsdc = Keypair.generate(); -/** Bank for token A */ -export const bankKeypairA = Keypair.generate(); -/** Bank for "WSOL", which is treated the same as SOL */ -export const bankKeypairSol = Keypair.generate(); - -export let bankrunContext: ProgramTestContext; -export let bankRunProvider: BankrunProvider; -export let bankrunProgram: Program; -export let banksClient: BanksClient; -/** A mainnet Pyth pull feed (Jup's Sol feed) */ -export const PYTH_ORACLE_FEED_SAMPLE = new PublicKey( - "7UVimffxr9ow1uXYxsr4LHAcV58mLzhmwaeKvJ1pjLiE" -); -/** A mainnet Pyth pull oracle (Jup's Sol feed) */ -export const PYTH_ORACLE_SAMPLE = new PublicKey( - "H6ARHf6YXhGYeQfUzQNGk6rDNnLBQKrenN712K4AQJEG" -); - -/** keys copied into the bankrun instance */ -let copyKeys: PublicKey[] = [PYTH_ORACLE_FEED_SAMPLE, PYTH_ORACLE_SAMPLE]; - -export const mochaHooks = { - beforeAll: async () => { - // If false, you are in the wrong environment to run this, update Node or try polyfill - console.log("Environment supports crypto: ", !!global.crypto?.subtle); - - const mrgnProgram = workspace.Marginfi as Program; - const provider = AnchorProvider.local(); - const wallet = provider.wallet as Wallet; - - copyKeys.push(wallet.publicKey); - - if (verbose) { - console.log("Global Ecosystem Information "); - echoEcosystemInfo(ecosystem, { - skipA: false, - skipB: false, - skipUsdc: false, - skipWsol: false, - }); - console.log(""); - } - - const { ixes: wsolIxes, mint: wsolMint } = await createSimpleMint( - provider.publicKey, - provider.connection, - ecosystem.wsolDecimals, - ecosystem.wsolMint - ); - const { ixes: usdcIxes, mint: usdcMint } = await createSimpleMint( - provider.publicKey, - provider.connection, - ecosystem.usdcDecimals, - ecosystem.usdcMint - ); - const { ixes: aIxes, mint: aMint } = await createSimpleMint( - provider.publicKey, - provider.connection, - ecosystem.tokenADecimals, - ecosystem.tokenAMint - ); - const { ixes: bIxes, mint: bMint } = await createSimpleMint( - provider.publicKey, - provider.connection, - ecosystem.tokenBDecimals, - ecosystem.tokenBMint - ); - const { ixes: alphaIXes, mint: alphaMint } = await createSimpleMint( - provider.publicKey, - provider.connection, - ecosystem.lstAlphaDecimals, - ecosystem.lstAlphaMint - ); - const initMintsTx1 = new Transaction(); - initMintsTx1.add(...wsolIxes); - initMintsTx1.add(...usdcIxes); - initMintsTx1.add(...aIxes); - initMintsTx1.add(...bIxes); - // Note: too large for one tx. - const initMintsTx2 = new Transaction(); - initMintsTx2.add(...alphaIXes); - await provider.sendAndConfirm(initMintsTx1, [ - wsolMint, - usdcMint, - aMint, - bMint, - ]); - await provider.sendAndConfirm(initMintsTx2, [alphaMint]); - - copyKeys.push( - wsolMint.publicKey, - usdcMint.publicKey, - aMint.publicKey, - bMint.publicKey, - alphaMint.publicKey - ); - - let miscSetupTx = new Transaction(); - - let globalFeeKeypair = Keypair.generate(); - globalFeeWallet = globalFeeKeypair.publicKey; - // Send some sol to the global fee wallet for rent - miscSetupTx.add( - SystemProgram.transfer({ - fromPubkey: wallet.publicKey, - toPubkey: globalFeeWallet, - lamports: 10 * LAMPORTS_PER_SOL, - }) - ); - - // Init the global fee state - miscSetupTx.add( - await initGlobalFeeState(mrgnProgram, { - payer: provider.publicKey, - admin: wallet.payer.publicKey, - wallet: globalFeeWallet, - bankInitFlatSolFee: INIT_POOL_ORIGINATION_FEE, - programFeeFixed: bigNumberToWrappedI80F48(PROGRAM_FEE_FIXED), - programFeeRate: bigNumberToWrappedI80F48(PROGRAM_FEE_RATE), - }) - ); - - await provider.sendAndConfirm(miscSetupTx); - copyKeys.push( - globalFeeWallet, - deriveGlobalFeeState(mrgnProgram.programId)[0] - ); - - const setupUserOptions: SetupTestUserOptions = { - marginProgram: mrgnProgram, - forceWallet: undefined, - // If mints are created, typically create the ATA too, otherwise pass undefined... - wsolMint: ecosystem.wsolMint.publicKey, - tokenAMint: ecosystem.tokenAMint.publicKey, - tokenBMint: ecosystem.tokenBMint.publicKey, - usdcMint: ecosystem.usdcMint.publicKey, - lstAlphaMint: ecosystem.lstAlphaMint.publicKey, - }; - - groupAdmin = await setupTestUser(provider, wallet.payer, setupUserOptions); - validatorAdmin = await setupTestUser( - provider, - wallet.payer, - setupUserOptions - ); - copyKeys.push( - groupAdmin.usdcAccount, - groupAdmin.tokenBAccount, - groupAdmin.wallet.publicKey - ); - - for (let i = 0; i < numUsers; i++) { - const user = await setupTestUser( - provider, - wallet.payer, - setupUserOptions - ); - addUser(user); - } - - // Global admin uses the payer wallet... - setupUserOptions.forceWallet = wallet.payer; - globalProgramAdmin = await setupTestUser( - provider, - wallet.payer, - setupUserOptions - ); - - oracles = await setupPythOracles( - wallet, - 150, - ecosystem.wsolDecimals, - 1, - ecosystem.usdcDecimals, - 10, - ecosystem.tokenADecimals, - 20, - ecosystem.tokenBDecimals, - 175, - ecosystem.lstAlphaDecimals, - 0.02, // confidnece interval - verbose - ); - copyKeys.push( - oracles.wsolOracle.publicKey, - oracles.usdcOracle.publicKey, - oracles.tokenAOracle.publicKey, - oracles.pythPullLst.publicKey, - oracles.pythPullLstOracleFeed.publicKey - ); - - for (let i = 0; i < numValidators; i++) { - const validator = await createValidator( - provider, - validatorAdmin.wallet, - validatorAdmin.wallet.publicKey - ); - if (verbose) { - console.log("Validator vote acc [" + i + "]: " + validator.voteAccount); - } - addValidator(validator); - - let { poolKey, poolMintKey, poolAuthority, poolStake } = - await createSplStakePool(provider, validator); - if (verbose) { - console.log(" pool..... " + poolKey); - console.log(" mint..... " + poolMintKey); - console.log(" auth..... " + poolAuthority); - console.log(" stake.... " + poolStake); - } - } - - // copyKeys.push(StakeProgram.programId); - copyKeys.push(SYSVAR_STAKE_HISTORY_PUBKEY); - - const accountKeys = copyKeys; - - const accounts = await provider.connection.getMultipleAccountsInfo( - accountKeys - ); - const addedAccounts = accountKeys.map((address, index) => ({ - address, - info: accounts[index], - })); - - bankrunContext = await startAnchor(path.resolve(), [], addedAccounts); - bankRunProvider = new BankrunProvider(bankrunContext); - bankrunProgram = new Program(mrgnProgram.idl, bankRunProvider); - for (let i = 0; i < numUsers; i++) { - const wal = new Wallet(users[i].wallet); - const prov = new AnchorProvider(bankRunProvider.connection, wal, {}); - users[i].mrgnBankrunProgram = new Program(mrgnProgram.idl, prov); - } - banksClient = bankrunContext.banksClient; - - groupAdmin.mrgnBankrunProgram = new Program( - mrgnProgram.idl, - new AnchorProvider( - bankRunProvider.connection, - new Wallet(groupAdmin.wallet), - {} - ) - ); - - validatorAdmin.mrgnBankrunProgram = new Program( - mrgnProgram.idl, - new AnchorProvider( - bankRunProvider.connection, - new Wallet(validatorAdmin.wallet), - {} - ) - ); - - banksClient = bankrunContext.banksClient; - - if (verbose) { - console.log("---End ecosystem setup---"); - console.log(""); - } - }, -}; - -const addValidator = (validator: Validator) => { - validators.push(validator); - // copyKeys.push(validator.authorizedVoter); - // copyKeys.push(validator.authorizedWithdrawer); - // copyKeys.push(validator.node); - copyKeys.push(validator.voteAccount); -}; - -const addUser = (user: MockUser) => { - users.push(user); - copyKeys.push( - user.tokenAAccount, - user.tokenBAccount, - user.usdcAccount, - user.wallet.publicKey, - user.wsolAccount, - user.lstAlphaAccount - ); -}; - -/** - * Create a mock validator with given vote/withdraw authority - * * Note: Spl Pool fields (splPool, mint, authority, stake) are initialized to pubkey default. - * @param provider - * @param authorizedVoter - also pays init fees - * @param authorizedWithdrawer - also pays init fees - * @param comission - defaults to 0 - */ -export const createValidator = async ( - provider: AnchorProvider, - authorizedVoter: Keypair, - authorizedWithdrawer: PublicKey, - commission: number = 0 // Commission rate from 0 to 100 -) => { - const voteAccount = Keypair.generate(); - const node = Keypair.generate(); - - const tx = new Transaction().add( - // Create the vote account - SystemProgram.createAccount({ - fromPubkey: authorizedVoter.publicKey, - newAccountPubkey: voteAccount.publicKey, - lamports: await provider.connection.getMinimumBalanceForRentExemption( - VoteProgram.space - ), - space: VoteProgram.space, - programId: VoteProgram.programId, - }), - // Initialize the vote account - VoteProgram.initializeAccount({ - votePubkey: voteAccount.publicKey, - nodePubkey: node.publicKey, - voteInit: new VoteInit( - node.publicKey, - authorizedVoter.publicKey, - authorizedWithdrawer, - commission - ), - }) - ); - - await provider.sendAndConfirm(tx, [voteAccount, authorizedVoter, node]); - - const validator: Validator = { - node: node.publicKey, - authorizedVoter: authorizedVoter.publicKey, - authorizedWithdrawer: authorizedWithdrawer, - voteAccount: voteAccount.publicKey, - splPool: PublicKey.default, - splMint: PublicKey.default, - splAuthority: PublicKey.default, - splSolPool: PublicKey.default, - bank: PublicKey.default, - }; - - return validator; -}; - -/** - * Create a single-validator spl stake pool. Copys the pool, mint, authority, and stake accounts to - * the copyKeys slice to be deployed to bankrun - * @param provider - * @param validator - mutated, adds the spl keys (pool, mint, authority, stake) - */ -export const createSplStakePool = async ( - provider: AnchorProvider, - validator: Validator -) => { - let tx = await SinglePoolProgram.initialize( - // @ts-ignore // Doesn't matter - provider.connection, - validator.voteAccount, - users[0].wallet.publicKey, - true - ); - - // @ts-ignore // Doesn't matter - await provider.sendAndConfirm(tx, [users[0].wallet]); - - // Note: import the id from @solana/spl-single-pool (the classic version doesn't have it) - const poolKey = await findPoolAddress( - SINGLE_POOL_PROGRAM_ID, - validator.voteAccount - ); - validator.splPool = poolKey; - copyKeys.push(poolKey); - - const poolAcc = await provider.connection.getAccountInfo(poolKey); - // Rudimentary validation that this account now exists and is owned by the single pool program - assertKeysEqual(poolAcc.owner, SINGLE_POOL_PROGRAM_ID); - assert.equal(poolAcc.executable, false); - - const pool = decodeSinglePool(poolAcc.data); - assertKeysEqual(pool.voteAccountAddress, validator.voteAccount); - - const poolMintKey = await findPoolMintAddress( - SINGLE_POOL_PROGRAM_ID, - poolKey - ); - validator.splMint = poolMintKey; - copyKeys.push(poolMintKey); - - const poolStake = await findPoolStakeAddress(SINGLE_POOL_PROGRAM_ID, poolKey); - validator.splSolPool = poolStake; - copyKeys.push(poolStake); - - const poolAuthority = await findPoolStakeAuthorityAddress( - SINGLE_POOL_PROGRAM_ID, - poolKey - ); - validator.splAuthority = poolAuthority; - // Note: accounts that do not exist (blank PDAs) cannot be pushed to bankrun - // copyKeys.push(poolAuthority); - - return { poolKey, poolMintKey, poolAuthority, poolStake }; -}; diff --git a/tests/s01_usersStake.spec.ts b/tests/s01_usersStake.spec.ts deleted file mode 100644 index 3008781f4..000000000 --- a/tests/s01_usersStake.spec.ts +++ /dev/null @@ -1,321 +0,0 @@ -import { BN } from "@coral-xyz/anchor"; -import { - LAMPORTS_PER_SOL, - PublicKey, - SystemProgram, - Transaction, -} from "@solana/web3.js"; -import { - bankrunContext, - bankRunProvider, - users, - validators, - verbose, - banksClient, - bankrunProgram, -} from "./rootHooks"; -import { - createStakeAccount, - delegateStake, - getEpochAndSlot, - getStakeAccount, - getStakeActivation, -} from "./utils/stake-utils"; -import { - assertBNEqual, - assertKeysEqual, - getTokenBalance, -} from "./utils/genericTests"; -import { u64MAX_BN } from "./utils/types"; -import { getAssociatedTokenAddressSync } from "@mrgnlabs/mrgn-common"; -import { - depositToSinglePoolIxes, - getBankrunBlockhash, -} from "./utils/spl-staking-utils"; -import { assert } from "chai"; -import { LST_ATA, STAKE_ACC } from "./utils/mocks"; - -describe("User stakes some native and creates an account", () => { - /** Users's validator 0 stake account */ - let user0StakeAccount: PublicKey; - const stake = 10; - - it("(user 0) Create user stake account and stake to validator", async () => { - let { createTx, stakeAccountKeypair } = createStakeAccount( - users[0], - stake * LAMPORTS_PER_SOL - ); - // Note: bankrunContext.lastBlockhash only works if non-bankrun tests didn't run previously - createTx.recentBlockhash = await getBankrunBlockhash(bankrunContext); - createTx.sign(users[0].wallet, stakeAccountKeypair); - await banksClient.processTransaction(createTx); - user0StakeAccount = stakeAccountKeypair.publicKey; - - if (verbose) { - console.log("Create stake account: " + user0StakeAccount); - console.log( - " Stake: " + - stake + - " SOL (" + - (stake * LAMPORTS_PER_SOL).toLocaleString() + - " in native)" - ); - } - users[0].accounts.set("v0_stakeAcc", user0StakeAccount); - - let delegateTx = delegateStake( - users[0], - user0StakeAccount, - validators[0].voteAccount - ); - delegateTx.recentBlockhash = await getBankrunBlockhash(bankrunContext); - delegateTx.sign(users[0].wallet); - await banksClient.processTransaction(delegateTx); - - if (verbose) { - console.log("user 0 delegated to " + validators[0].voteAccount); - } - - let { epoch, slot } = await getEpochAndSlot(banksClient); - const stakeAccountInfo = await bankRunProvider.connection.getAccountInfo( - user0StakeAccount - ); - const stakeAccBefore = getStakeAccount(stakeAccountInfo.data); - const meta = stakeAccBefore.meta; - const delegation = stakeAccBefore.stake.delegation; - const rent = new BN(meta.rentExemptReserve.toString()); - - assertKeysEqual(delegation.voterPubkey, validators[0].voteAccount); - assertBNEqual( - new BN(delegation.stake.toString()), - new BN(10 * LAMPORTS_PER_SOL).sub(rent) - ); - assertBNEqual(new BN(delegation.activationEpoch.toString()), epoch); - assertBNEqual(new BN(delegation.deactivationEpoch.toString()), u64MAX_BN); - - const stakeStatusBefore = await getStakeActivation( - bankRunProvider.connection, - user0StakeAccount, - epoch - ); - if (verbose) { - console.log("It is now epoch: " + epoch + " slot " + slot); - console.log( - "Stake active: " + - stakeStatusBefore.active.toLocaleString() + - " inactive " + - stakeStatusBefore.inactive.toLocaleString() + - " status: " + - stakeStatusBefore.status - ); - } - }); - - it("(user 1/2/3) Stakes and delegates too", async () => { - await stakeAndDelegateForUser(1, stake); - await stakeAndDelegateForUser(2, stake); - await stakeAndDelegateForUser(3, stake); - }); - - const stakeAndDelegateForUser = async ( - userIndex: number, - stakeAmount: number - ) => { - const user = users[userIndex]; - let { createTx, stakeAccountKeypair } = createStakeAccount( - user, - stakeAmount * LAMPORTS_PER_SOL - ); - - createTx.recentBlockhash = await getBankrunBlockhash(bankrunContext); - createTx.sign(user.wallet, stakeAccountKeypair); - await banksClient.processTransaction(createTx); - user.accounts.set(STAKE_ACC, stakeAccountKeypair.publicKey); - - let delegateTx = delegateStake( - user, - stakeAccountKeypair.publicKey, - validators[0].voteAccount - ); - delegateTx.recentBlockhash = await getBankrunBlockhash(bankrunContext); - delegateTx.sign(user.wallet); - await banksClient.processTransaction(delegateTx); - }; - - it("Advance the epoch", async () => { - bankrunContext.warpToEpoch(1n); - - let { epoch: epochAfterWarp, slot: slotAfterWarp } = await getEpochAndSlot( - banksClient - ); - if (verbose) { - console.log( - "Warped to epoch: " + epochAfterWarp + " slot " + slotAfterWarp - ); - } - - const stakeStatusAfter = await getStakeActivation( - bankRunProvider.connection, - user0StakeAccount, - epochAfterWarp - ); - if (verbose) { - console.log( - "Stake active: " + - stakeStatusAfter.active.toLocaleString() + - " inactive " + - stakeStatusAfter.inactive.toLocaleString() + - " status: " + - stakeStatusAfter.status - ); - console.log(""); - } - - // Advance a few slots and send some dummy txes to end the rewards period - - // NOTE: ALL STAKE PROGRAM IXES ARE DISABLED DURING THE REWARDS PERIOD. THIS MUST OCCUR OR THE - // STAKE PROGRAM CANNOT RUN - - if (verbose) { - console.log("Now stalling for a few slots to end the rewards period..."); - } - for (let i = 0; i < 3; i++) { - bankrunContext.warpToSlot(BigInt(i + slotAfterWarp + 1)); - const dummyTx = new Transaction(); - dummyTx.add( - SystemProgram.transfer({ - fromPubkey: users[0].wallet.publicKey, - toPubkey: bankrunProgram.provider.publicKey, - lamports: i, - }) - ); - dummyTx.recentBlockhash = await getBankrunBlockhash(bankrunContext); - dummyTx.sign(users[0].wallet); - await banksClient.processTransaction(dummyTx); - } - - let { epoch, slot } = await getEpochAndSlot(banksClient); - if (verbose) { - console.log("It is now epoch: " + epoch + " slot " + slot); - } - }); - - it("(user 0) Deposits " + stake + "stake to the v0 LST pool", async () => { - const userStakeAccount = users[0].accounts.get(STAKE_ACC); - // Note: use `findPoolMintAddress(SINGLE_POOL_PROGRAM_ID, splPool);` if mint is not known. - const lstAta = getAssociatedTokenAddressSync( - validators[0].splMint, - users[0].wallet.publicKey - ); - users[0].accounts.set(LST_ATA, lstAta); - - // Note: user stake account exists before, but is closed after - // Here we note the balance of the stake account prior - const stakeAccountInfo = await bankRunProvider.connection.getAccountInfo( - userStakeAccount - ); - const stakeAccBefore = getStakeAccount(stakeAccountInfo.data); - const rent = new BN(stakeAccBefore.meta.rentExemptReserve.toString()); - const delegationBefore = Number( - stakeAccBefore.stake.delegation.stake.toString() - ); - assertBNEqual( - new BN(delegationBefore), - new BN(10 * LAMPORTS_PER_SOL).sub(rent) - ); - - // The spl stake pool account is already infused with 1 SOL at init - const splStakeInfoBefore = await bankRunProvider.connection.getAccountInfo( - validators[0].splSolPool - ); - const splStakePoolBefore = getStakeAccount(splStakeInfoBefore.data); - const delegationSplPoolBefore = new BN( - splStakePoolBefore.stake.delegation.stake.toString() - ); - if (verbose) { - console.log("pool stake before: " + delegationSplPoolBefore.toString()); - } - - // Create lst ata, transfer authority, execute the deposit - let tx = new Transaction(); - const ixes = await depositToSinglePoolIxes( - bankRunProvider.connection, - users[0].wallet.publicKey, - validators[0].splPool, - userStakeAccount, - verbose - ); - tx.add(...ixes); - tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); - tx.sign(users[0].wallet); - await banksClient.processTransaction(tx); - - // The stake account no longer exists - try { - const accountInfo = await bankRunProvider.connection.getAccountInfo( - userStakeAccount - ); - assert.ok( - accountInfo === null, - "The account should not exist, but it does." - ); - } catch (err) { - assert.ok(true, "The account does not exist."); - } - - const [lstAfter, splStakePoolInfo] = await Promise.all([ - getTokenBalance(bankRunProvider, lstAta), - bankRunProvider.connection.getAccountInfo(validators[0].splSolPool), - ]); - if (verbose) { - console.log("lst after: " + lstAfter.toLocaleString()); - } - // LST tokens are issued 1:1 with stake because there has been zero appreciation - // Also note that LST tokens use the same decimals. - assert.equal(lstAfter, delegationBefore); - - const splStakePool = getStakeAccount(splStakePoolInfo.data); - const delegationSplPoolAfter = new BN( - splStakePool.stake.delegation.stake.toString() - ); - if (verbose) { - console.log("pool stake after: " + delegationSplPoolAfter.toString()); - } - // The stake pool gained all of the stake that was held in the user stake acc - assertBNEqual( - delegationSplPoolAfter.sub(delegationSplPoolBefore), - delegationBefore - ); - }); - - it( - "(user 1/2/3) deposits " + stake + " to the v0 stake pool too", - async () => { - await depositForUser(1); - await depositForUser(2); - await depositForUser(3); - } - ); - - const depositForUser = async (userIndex: number) => { - const user = users[userIndex]; - let tx = new Transaction(); - const ixes = await depositToSinglePoolIxes( - bankRunProvider.connection, - user.wallet.publicKey, - validators[0].splPool, - user.accounts.get(STAKE_ACC), - verbose - ); - tx.add(...ixes); - tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); - tx.sign(user.wallet); - await banksClient.processTransaction(tx); - - const lstAta = getAssociatedTokenAddressSync( - validators[0].splMint, - user.wallet.publicKey - ); - user.accounts.set(LST_ATA, lstAta); - }; -}); diff --git a/tests/s02_addBank.spec.ts b/tests/s02_addBank.spec.ts deleted file mode 100644 index 5a53da165..000000000 --- a/tests/s02_addBank.spec.ts +++ /dev/null @@ -1,534 +0,0 @@ -import { BN, Program, workspace } from "@coral-xyz/anchor"; -import { AccountMeta, Keypair, Transaction } from "@solana/web3.js"; -import { - addBank, - addBankPermissionless, - groupInitialize, - initStakedSettings, -} from "./utils/group-instructions"; -import { Marginfi } from "../target/types/marginfi"; -import { - bankKeypairSol, - bankKeypairUsdc, - bankrunContext, - bankrunProgram, - banksClient, - ecosystem, - groupAdmin, - marginfiGroup, - oracles, - users, - validators, - verbose, -} from "./rootHooks"; -import { - assertBankrunTxFailed, - assertBNEqual, - assertI80F48Approx, - assertI80F48Equal, - assertKeyDefault, - assertKeysEqual, -} from "./utils/genericTests"; -import { - ASSET_TAG_DEFAULT, - ASSET_TAG_SOL, - ASSET_TAG_STAKED, - defaultBankConfig, - defaultStakedInterestSettings, - I80F48_ONE, - ORACLE_SETUP_PYTH_LEGACY, - SINGLE_POOL_PROGRAM_ID, -} from "./utils/types"; -import { assert } from "chai"; -import { getBankrunBlockhash } from "./utils/spl-staking-utils"; -import { - deriveBankWithSeed, - deriveFeeVault, - deriveFeeVaultAuthority, - deriveInsuranceVault, - deriveInsuranceVaultAuthority, - deriveLiquidityVault, - deriveLiquidityVaultAuthority, - deriveStakedSettings, -} from "./utils/pdas"; -import { TOKEN_PROGRAM_ID } from "@solana/spl-token"; - -describe("Init group and add banks with asset category flags", () => { - const program = workspace.Marginfi as Program; - - it("(admin) Init group - happy path", async () => { - let tx = new Transaction(); - - tx.add( - await groupInitialize(groupAdmin.mrgnBankrunProgram, { - marginfiGroup: marginfiGroup.publicKey, - admin: groupAdmin.wallet.publicKey, - }) - ); - tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); - tx.sign(groupAdmin.wallet, marginfiGroup); - await banksClient.processTransaction(tx); - - let group = await bankrunProgram.account.marginfiGroup.fetch( - marginfiGroup.publicKey - ); - assertKeysEqual(group.admin, groupAdmin.wallet.publicKey); - if (verbose) { - console.log("*init group: " + marginfiGroup.publicKey); - console.log(" group admin: " + group.admin); - } - }); - - // TODO add bank permissionless fails prior to opting in - - it("(admin) Init staked settings for group - opts in to use staked collateral", async () => { - const settings = defaultStakedInterestSettings( - oracles.wsolOracle.publicKey - ); - let tx = new Transaction(); - - tx.add( - await initStakedSettings(groupAdmin.mrgnProgram, { - group: marginfiGroup.publicKey, - feePayer: groupAdmin.wallet.publicKey, - settings: settings, - }) - ); - tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); - tx.sign(groupAdmin.wallet); - await banksClient.processTransaction(tx); - - const [settingsKey] = deriveStakedSettings( - program.programId, - marginfiGroup.publicKey - ); - if (verbose) { - console.log("*init staked settings: " + settingsKey); - } - - let settingsAcc = await bankrunProgram.account.stakedSettings.fetch( - settingsKey - ); - assertKeysEqual(settingsAcc.key, settingsKey); - assertKeysEqual(settingsAcc.oracle, oracles.wsolOracle.publicKey); - assertI80F48Approx(settingsAcc.assetWeightInit, 0.8); - assertI80F48Approx(settingsAcc.assetWeightMaint, 0.9); - assertBNEqual(settingsAcc.depositLimit, 1_000_000_000_000); - assertBNEqual(settingsAcc.totalAssetValueInitLimit, 150_000_000); - assert.equal(settingsAcc.oracleMaxAge, 60); - assert.deepEqual(settingsAcc.riskTier, { collateral: {} }); - }); - - it("(admin) Add bank (USDC) - is neither SOL nor staked LST", async () => { - let setConfig = defaultBankConfig(); - const bankKey = bankKeypairUsdc.publicKey; - const oracle = oracles.usdcOracle.publicKey; - const oracleMeta: AccountMeta = { - pubkey: oracle, - isSigner: false, - isWritable: false, - }; - const config_ix = await groupAdmin.mrgnProgram.methods - .lendingPoolConfigureBankOracle(ORACLE_SETUP_PYTH_LEGACY, oracle) - .accountsPartial({ - group: marginfiGroup.publicKey, - bank: bankKey, - admin: groupAdmin.wallet.publicKey, - }) - .remainingAccounts([oracleMeta]) - .instruction(); - - let tx = new Transaction(); - tx.add( - await addBank(groupAdmin.mrgnBankrunProgram, { - marginfiGroup: marginfiGroup.publicKey, - feePayer: groupAdmin.wallet.publicKey, - bankMint: ecosystem.usdcMint.publicKey, - bank: bankKey, - config: setConfig, - }), - config_ix - ); - tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); - tx.sign(groupAdmin.wallet, bankKeypairUsdc); - await banksClient.processTransaction(tx); - - if (verbose) { - console.log("*init USDC bank " + bankKey); - } - - const bank = await bankrunProgram.account.bank.fetch(bankKey); - assert.equal(bank.config.assetTag, ASSET_TAG_DEFAULT); - }); - - it("(admin) Add bank (SOL) - is tagged as SOL", async () => { - let setConfig = defaultBankConfig(); - setConfig.assetTag = ASSET_TAG_SOL; - let bankKey = bankKeypairSol.publicKey; - const oracle = oracles.wsolOracle.publicKey; - const oracleMeta: AccountMeta = { - pubkey: oracle, - isSigner: false, - isWritable: false, - }; - const config_ix = await groupAdmin.mrgnProgram.methods - .lendingPoolConfigureBankOracle(ORACLE_SETUP_PYTH_LEGACY, oracle) - .accountsPartial({ - group: marginfiGroup.publicKey, - bank: bankKey, - admin: groupAdmin.wallet.publicKey, - }) - .remainingAccounts([oracleMeta]) - .instruction(); - - let tx = new Transaction(); - tx.add( - await addBank(groupAdmin.mrgnBankrunProgram, { - marginfiGroup: marginfiGroup.publicKey, - feePayer: groupAdmin.wallet.publicKey, - bankMint: ecosystem.wsolMint.publicKey, - bank: bankKey, - config: setConfig, - }), - config_ix - ); - tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); - tx.sign(groupAdmin.wallet, bankKeypairSol); - await banksClient.processTransaction(tx); - - if (verbose) { - console.log("*init SOL bank " + bankKey); - } - - const bank = await bankrunProgram.account.bank.fetch(bankKey); - assert.equal(bank.config.assetTag, ASSET_TAG_SOL); - }); - - it("(admin) Tries to add staked bank WITH permission - should fail", async () => { - let setConfig = defaultBankConfig(); - setConfig.assetTag = ASSET_TAG_STAKED; - setConfig.borrowLimit = new BN(0); - let bankKeypair = Keypair.generate(); - - let tx = new Transaction(); - tx.add( - await addBank(groupAdmin.mrgnProgram, { - marginfiGroup: marginfiGroup.publicKey, - feePayer: groupAdmin.wallet.publicKey, - bankMint: validators[0].splMint, - bank: bankKeypair.publicKey, - config: setConfig, - }) - ); - tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); - tx.sign(groupAdmin.wallet, bankKeypair); - let result = await banksClient.tryProcessTransaction(tx); - // AddedStakedPoolManually - assertBankrunTxFailed(result, "0x179e"); - }); - - it("(attacker) Add bank (validator 0) with bad accounts + bad metadata - should fail", async () => { - const [settingsKey] = deriveStakedSettings( - program.programId, - marginfiGroup.publicKey - ); - const goodStakePool = validators[0].splPool; - const goodLstMint = validators[0].splMint; - const goodSolPool = validators[0].splSolPool; - - // Attacker tries to sneak in the wrong validator's information - const badStakePool = validators[1].splPool; - const badLstMint = validators[1].splMint; - const badSolPool = validators[1].splSolPool; - - const stakePools = [goodStakePool, badStakePool]; - const lstMints = [goodLstMint, badLstMint]; - const solPools = [goodSolPool, badSolPool]; - - for (const stakePool of stakePools) { - for (const lstMint of lstMints) { - for (const solPool of solPools) { - // Skip the "all good" combination - if ( - stakePool.equals(goodStakePool) && - lstMint.equals(goodLstMint) && - solPool.equals(goodSolPool) - ) { - continue; - } - - // Skip the "all bad" combination (equivalent to a valid init of validator 1) - if ( - stakePool.equals(badStakePool) && - lstMint.equals(badLstMint) && - solPool.equals(badSolPool) - ) { - continue; - } - - const oracleMeta: AccountMeta = { - pubkey: oracles.wsolOracle.publicKey, - isSigner: false, - isWritable: false, - }; - const lstMeta: AccountMeta = { - pubkey: lstMint, - isSigner: false, - isWritable: false, - }; - const solPoolMeta: AccountMeta = { - pubkey: solPool, - isSigner: false, - isWritable: false, - }; - - const ix = await bankrunProgram.methods - .lendingPoolAddBankPermissionless(new BN(0)) - .accounts({ - stakedSettings: settingsKey, - feePayer: users[0].wallet.publicKey, - bankMint: lstMint, - solPool: solPool, - stakePool: stakePool, - tokenProgram: TOKEN_PROGRAM_ID, - }) - .remainingAccounts([oracleMeta, lstMeta, solPoolMeta]) - .instruction(); - - let tx = new Transaction(); - tx.add(ix); - tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); - tx.sign(users[0].wallet); - - let result = await banksClient.tryProcessTransaction(tx); - // StakePoolValidationFailed - assertBankrunTxFailed(result, "0x17a0"); - } - } - } - }); - - it("(attacker) Add bank (validator 0) with good accounts but bad metadata - should fail", async () => { - const [settingsKey] = deriveStakedSettings( - program.programId, - marginfiGroup.publicKey - ); - - const goodStakePool = validators[0].splPool; - const goodLstMint = validators[0].splMint; - const goodSolPool = validators[0].splSolPool; - - // Note: StakePool is N/A because we do not pass StakePool in meta. - // const badStakePool = validators[1].splPool; - const badLstMint = validators[1].splMint; - const badSolPool = validators[1].splSolPool; - - const lstMints = [goodLstMint, badLstMint]; - const solPools = [goodSolPool, badSolPool]; - - for (const lstMint of lstMints) { - for (const solPool of solPools) { - // Skip the all-good metadata case - if (lstMint.equals(goodLstMint) && solPool.equals(goodSolPool)) { - continue; - } - - const oracleMeta: AccountMeta = { - pubkey: oracles.wsolOracle.publicKey, - isSigner: false, - isWritable: false, - }; - const lstMeta: AccountMeta = { - pubkey: lstMint, - isSigner: false, - isWritable: false, - }; - const solPoolMeta: AccountMeta = { - pubkey: solPool, - isSigner: false, - isWritable: false, - }; - - const ix = await bankrunProgram.methods - .lendingPoolAddBankPermissionless(new BN(0)) - .accounts({ - stakedSettings: settingsKey, - feePayer: users[0].wallet.publicKey, - bankMint: goodLstMint, // Good key - solPool: goodSolPool, // Good key - stakePool: goodStakePool, // Good key - tokenProgram: TOKEN_PROGRAM_ID, - }) - .remainingAccounts([oracleMeta, lstMeta, solPoolMeta]) // Bad metadata keys - .instruction(); - - let tx = new Transaction(); - tx.add(ix); - tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); - tx.sign(users[0].wallet); - - let result = await banksClient.tryProcessTransaction(tx); - // StakePoolValidationFailed - assertBankrunTxFailed(result, "0x17a0"); - } - } - - // Bad oracle meta - const oracleMeta: AccountMeta = { - pubkey: oracles.usdcOracle.publicKey, // Bad meta - isSigner: false, - isWritable: false, - }; - const lstMeta: AccountMeta = { - pubkey: goodLstMint, - isSigner: false, - isWritable: false, - }; - const solPoolMeta: AccountMeta = { - pubkey: goodSolPool, - isSigner: false, - isWritable: false, - }; - - const ix = await bankrunProgram.methods - .lendingPoolAddBankPermissionless(new BN(0)) - .accounts({ - stakedSettings: settingsKey, - feePayer: users[0].wallet.publicKey, - bankMint: goodLstMint, // Good key - solPool: goodSolPool, // Good key - stakePool: goodStakePool, // Good key - tokenProgram: TOKEN_PROGRAM_ID, - }) - .remainingAccounts([oracleMeta, lstMeta, solPoolMeta]) // Bad oracle meta - .instruction(); - - let tx = new Transaction(); - tx.add(ix); - tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); - tx.sign(users[0].wallet); - - let result = await banksClient.tryProcessTransaction(tx); - // Note: WrongOracleAccountKeys - assertBankrunTxFailed(result, "0x17a4"); - }); - - it("(permissionless) Add staked collateral bank (validator 0) - happy path", async () => { - const [bankKey] = deriveBankWithSeed( - program.programId, - marginfiGroup.publicKey, - validators[0].splMint, - new BN(0) - ); - validators[0].bank = bankKey; - - let tx = new Transaction(); - tx.add( - await addBankPermissionless(groupAdmin.mrgnBankrunProgram, { - marginfiGroup: marginfiGroup.publicKey, - feePayer: groupAdmin.wallet.publicKey, - pythOracle: oracles.wsolOracle.publicKey, - stakePool: validators[0].splPool, - seed: new BN(0), - }) - ); - tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); - tx.sign(groupAdmin.wallet); - await banksClient.processTransaction(tx); - - if (verbose) { - console.log("*init LST bank " + validators[0].bank + " (validator 0)"); - } - const bank = await bankrunProgram.account.bank.fetch(validators[0].bank); - const [settingsKey] = deriveStakedSettings( - program.programId, - marginfiGroup.publicKey - ); - const settingsAcc = await bankrunProgram.account.stakedSettings.fetch( - settingsKey - ); - // Noteworthy fields - assert.equal(bank.config.assetTag, ASSET_TAG_STAKED); - - // Standard fields - const config = bank.config; - const interest = config.interestRateConfig; - const id = program.programId; - - assertKeysEqual(bank.mint, validators[0].splMint); - // Note: stake accounts use SOL decimals - assert.equal(bank.mintDecimals, ecosystem.wsolDecimals); - assertKeysEqual(bank.group, marginfiGroup.publicKey); - - // Keys and bumps... - const [_liqAuth, liqAuthBump] = deriveLiquidityVaultAuthority(id, bankKey); - const [liquidityVault, liqVaultBump] = deriveLiquidityVault(id, bankKey); - assertKeysEqual(bank.liquidityVault, liquidityVault); - assert.equal(bank.liquidityVaultBump, liqVaultBump); - assert.equal(bank.liquidityVaultAuthorityBump, liqAuthBump); - - const [_insAuth, insAuthBump] = deriveInsuranceVaultAuthority(id, bankKey); - const [insuranceVault, insurVaultBump] = deriveInsuranceVault(id, bankKey); - assertKeysEqual(bank.insuranceVault, insuranceVault); - assert.equal(bank.insuranceVaultBump, insurVaultBump); - assert.equal(bank.insuranceVaultAuthorityBump, insAuthBump); - - const [_feeVaultAuth, feeAuthBump] = deriveFeeVaultAuthority(id, bankKey); - const [feeVault, feeVaultBump] = deriveFeeVault(id, bankKey); - assertKeysEqual(bank.feeVault, feeVault); - assert.equal(bank.feeVaultBump, feeVaultBump); - assert.equal(bank.feeVaultAuthorityBump, feeAuthBump); - - assertKeyDefault(bank.emissionsMint); - - // Constants/Defaults... - assertI80F48Equal(bank.assetShareValue, 1); - assertI80F48Equal(bank.liabilityShareValue, 1); - assertI80F48Equal(bank.collectedInsuranceFeesOutstanding, 0); - assertI80F48Equal(bank.collectedGroupFeesOutstanding, 0); - assertI80F48Equal(bank.totalLiabilityShares, 0); - assertI80F48Equal(bank.totalAssetShares, 0); - assertBNEqual(bank.flags, 0); - assertBNEqual(bank.emissionsRate, 0); - assertI80F48Equal(bank.emissionsRemaining, 0); - - // Settings and non-default values... - assertI80F48Approx(config.assetWeightInit, settingsAcc.assetWeightInit); - assertI80F48Approx(config.assetWeightMaint, settingsAcc.assetWeightMaint); - assertI80F48Approx(config.liabilityWeightInit, 1.5); - assertI80F48Approx(config.liabilityWeightMaint, 1.25); - assertBNEqual(config.depositLimit, settingsAcc.depositLimit); - - assertI80F48Approx(interest.optimalUtilizationRate, 0.4); - assertI80F48Approx(interest.plateauInterestRate, 0.4); - assertI80F48Approx(interest.maxInterestRate, 3); - - assertI80F48Equal(interest.insuranceFeeFixedApr, 0); - assertI80F48Approx(interest.insuranceIrFee, 0.1); - assertI80F48Approx(interest.protocolFixedFeeApr, 0.01); - assertI80F48Equal(interest.protocolIrFee, 0); - - assertI80F48Equal(interest.protocolOriginationFee, 0); - - assert.deepEqual(config.operationalState, { operational: {} }); - assert.deepEqual(config.oracleSetup, { stakedWithPythPush: {} }); - assertBNEqual(config.borrowLimit, 0); - assert.deepEqual(config.riskTier, settingsAcc.riskTier); - assert.equal(config.assetTag, ASSET_TAG_STAKED); - assertBNEqual( - config.totalAssetValueInitLimit, - settingsAcc.totalAssetValueInitLimit - ); - - // Oracle information.... - assert.equal(config.oracleMaxAge, settingsAcc.oracleMaxAge); - assertKeysEqual(config.oracleKeys[0], settingsAcc.oracle); - assertKeysEqual(config.oracleKeys[1], validators[0].splMint); - assertKeysEqual(config.oracleKeys[2], validators[0].splSolPool); - - assertI80F48Equal(bank.collectedProgramFeesOutstanding, 0); - - // Timing is annoying to test in bankrun context due to clock warping - // assert.approximately(now, bank.lastUpdate.toNumber(), 2); - }); -}); diff --git a/tests/s03_deposit.spec.ts b/tests/s03_deposit.spec.ts deleted file mode 100644 index 97b337626..000000000 --- a/tests/s03_deposit.spec.ts +++ /dev/null @@ -1,248 +0,0 @@ -import { - AnchorProvider, - BN, - getProvider, - Program, - Wallet, - workspace, -} from "@coral-xyz/anchor"; -import { Keypair, Transaction } from "@solana/web3.js"; -import { Marginfi } from "../target/types/marginfi"; -import { - bankKeypairSol, - bankKeypairUsdc, - bankrunContext, - bankrunProgram, - banksClient, - ecosystem, - marginfiGroup, - users, - validators, -} from "./rootHooks"; -import { assertBankrunTxFailed, assertKeysEqual } from "./utils/genericTests"; -import { assert } from "chai"; -import { accountInit, depositIx } from "./utils/user-instructions"; -import { LST_ATA, USER_ACCOUNT } from "./utils/mocks"; -import { createMintToInstruction } from "@solana/spl-token"; -import { getBankrunBlockhash } from "./utils/spl-staking-utils"; - -describe("Deposit funds (included staked assets)", () => { - const program = workspace.Marginfi as Program; - const provider = getProvider() as AnchorProvider; - const wallet = provider.wallet as Wallet; - - it("(Fund user 0 and user 1 USDC/WSOL token accounts", async () => { - let tx = new Transaction(); - for (let i = 0; i < users.length; i++) { - // Note: WSOL is really just an spl token in this implementation, we don't simulate the - // exchange of SOL for WSOL, but that doesn't really matter. - tx.add( - createMintToInstruction( - ecosystem.wsolMint.publicKey, - users[i].wsolAccount, - wallet.publicKey, - 100 * 10 ** ecosystem.wsolDecimals - ) - ); - tx.add( - createMintToInstruction( - ecosystem.usdcMint.publicKey, - users[i].usdcAccount, - wallet.publicKey, - 10000 * 10 ** ecosystem.usdcDecimals - ) - ); - } - tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); - tx.sign(wallet.payer); - await banksClient.processTransaction(tx); - }); - - it("Initialize user accounts", async () => { - for (let i = 0; i < users.length; i++) { - const userAccKeypair = Keypair.generate(); - const userAccount = userAccKeypair.publicKey; - users[i].accounts.set(USER_ACCOUNT, userAccount); - - let user1Tx: Transaction = new Transaction(); - user1Tx.add( - await accountInit(program, { - marginfiGroup: marginfiGroup.publicKey, - marginfiAccount: userAccount, - authority: users[i].wallet.publicKey, - feePayer: users[i].wallet.publicKey, - }) - ); - user1Tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); - user1Tx.sign(users[i].wallet, userAccKeypair); - await banksClient.processTransaction(user1Tx); - } - }); - - it("(user 0) deposit USDC to bank - happy path", async () => { - const user = users[0]; - const userAccount = user.accounts.get(USER_ACCOUNT); - - let tx = new Transaction().add( - await depositIx(user.mrgnBankrunProgram, { - marginfiAccount: userAccount, - bank: bankKeypairUsdc.publicKey, - tokenAccount: user.usdcAccount, - amount: new BN(10 * 10 ** ecosystem.usdcDecimals), - depositUpToLimit: false, - }) - ); - - tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); - tx.sign(user.wallet); - await banksClient.tryProcessTransaction(tx); - - // Verify the deposit worked and the account exists - const userAcc = await bankrunProgram.account.marginfiAccount.fetch( - userAccount - ); - const balances = userAcc.lendingAccount.balances; - assert.equal(balances[0].active, 1); - assertKeysEqual(balances[0].bankPk, bankKeypairUsdc.publicKey); - }); - - it("(user 0) cannot deposit to staked bank if regular deposits exists - should fail", async () => { - const user = users[0]; - const userAccount = user.accounts.get(USER_ACCOUNT); - const userLstAta = user.accounts.get(LST_ATA); - - let tx = new Transaction().add( - await depositIx(user.mrgnBankrunProgram, { - marginfiAccount: userAccount, - bank: validators[0].bank, - tokenAccount: userLstAta, - amount: new BN(1 * 10 ** ecosystem.wsolDecimals), - depositUpToLimit: false, - }) - ); - - tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); - tx.sign(user.wallet); - let result = await banksClient.tryProcessTransaction(tx); - // AssetTagMismatch - assertBankrunTxFailed(result, "0x179f"); - - // Verify the deposit failed and the entry does not exist - const userAcc = await bankrunProgram.account.marginfiAccount.fetch( - userAccount - ); - const balances = userAcc.lendingAccount.balances; - assert.equal(balances[1].active, 0); - }); - - it("(user 1) deposits SOL to SOL bank - happy path", async () => { - const user = users[1]; - const userAccount = user.accounts.get(USER_ACCOUNT); - - let tx = new Transaction().add( - await depositIx(user.mrgnBankrunProgram, { - marginfiAccount: userAccount, - bank: bankKeypairSol.publicKey, - tokenAccount: user.wsolAccount, - amount: new BN(2 * 10 ** ecosystem.wsolDecimals), - depositUpToLimit: false, - }) - ); - - tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); - tx.sign(user.wallet); - await banksClient.tryProcessTransaction(tx); - - // Verify the deposit worked and the account exists - const userAcc = await bankrunProgram.account.marginfiAccount.fetch( - userAccount - ); - const balances = userAcc.lendingAccount.balances; - assert.equal(balances[0].active, 1); - assertKeysEqual(balances[0].bankPk, bankKeypairSol.publicKey); - }); - - it("(user 1) deposits to staked bank - should succeed (SOL co-mingle is allowed)", async () => { - const user = users[1]; - const userAccount = user.accounts.get(USER_ACCOUNT); - const userLstAta = user.accounts.get(LST_ATA); - - let tx = new Transaction().add( - await depositIx(user.mrgnBankrunProgram, { - marginfiAccount: userAccount, - bank: validators[0].bank, - tokenAccount: userLstAta, - amount: new BN(1 * 10 ** ecosystem.wsolDecimals), - depositUpToLimit: false, - }) - ); - - tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); - tx.sign(user.wallet); - await banksClient.tryProcessTransaction(tx); - - // Verify the deposit worked and the entry exists - const userAcc = await bankrunProgram.account.marginfiAccount.fetch( - userAccount - ); - const balances = userAcc.lendingAccount.balances; - assert.equal(balances[1].active, 1); - assertKeysEqual(balances[1].bankPk, validators[0].bank); - }); - - it("(user 1) cannot deposit to regular banks (USDC) with staked assets - should fail", async () => { - const user = users[1]; - const userAccount = user.accounts.get(USER_ACCOUNT); - - let tx = new Transaction().add( - await depositIx(user.mrgnBankrunProgram, { - marginfiAccount: userAccount, - bank: bankKeypairUsdc.publicKey, - tokenAccount: user.usdcAccount, - amount: new BN(1 * 10 ** ecosystem.usdcDecimals), - depositUpToLimit: false, - }) - ); - - tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); - tx.sign(user.wallet); - let result = await banksClient.tryProcessTransaction(tx); - // AssetTagMismatch - assertBankrunTxFailed(result, "0x179f"); - - // Verify the deposit failed and the entry does not exist - const userAcc = await bankrunProgram.account.marginfiAccount.fetch( - userAccount - ); - const balances = userAcc.lendingAccount.balances; - assert.equal(balances[2].active, 0); - }); - - it("(user 2) deposits to staked bank - should succeed", async () => { - const user = users[2]; - const userAccount = user.accounts.get(USER_ACCOUNT); - const userLstAta = user.accounts.get(LST_ATA); - - let tx = new Transaction().add( - await depositIx(user.mrgnBankrunProgram, { - marginfiAccount: userAccount, - bank: validators[0].bank, - tokenAccount: userLstAta, - amount: new BN(1 * 10 ** ecosystem.wsolDecimals), - depositUpToLimit: false, - }) - ); - - tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); - tx.sign(user.wallet); - await banksClient.processTransaction(tx); - - // Verify the deposit worked and the entry exists - const userAcc = await bankrunProgram.account.marginfiAccount.fetch( - userAccount - ); - const balances = userAcc.lendingAccount.balances; - assert.equal(balances[0].active, 1); - assertKeysEqual(balances[0].bankPk, validators[0].bank); - }); -}); diff --git a/tests/s04_borrow.spec.ts b/tests/s04_borrow.spec.ts deleted file mode 100644 index 7f791ddcb..000000000 --- a/tests/s04_borrow.spec.ts +++ /dev/null @@ -1,105 +0,0 @@ -import { - BN, - Program, - workspace, -} from "@coral-xyz/anchor"; -import { Transaction } from "@solana/web3.js"; -import { Marginfi } from "../target/types/marginfi"; -import { - bankKeypairSol, - bankKeypairUsdc, - bankrunContext, - bankrunProgram, - banksClient, - ecosystem, - marginfiGroup, - oracles, - users, - validators, -} from "./rootHooks"; -import { - assertBankrunTxFailed, - assertKeysEqual, -} from "./utils/genericTests"; -import { assert } from "chai"; -import { borrowIx } from "./utils/user-instructions"; -import { USER_ACCOUNT } from "./utils/mocks"; -import { getBankrunBlockhash } from "./utils/spl-staking-utils"; - -describe("Deposit funds (included staked assets)", () => { - const program = workspace.Marginfi as Program; - - // User 0 has a USDC deposit position - // User 1 has a SOL [0] and validator 0 Staked [1] deposit position - - it("(user 0) borrows SOL against their USDC position - succeeds (SOL/regular comingle is allowed)", async () => { - const user = users[0]; - const userAccount = user.accounts.get(USER_ACCOUNT); - - let tx = new Transaction().add( - await borrowIx(user.mrgnBankrunProgram, { - marginfiAccount: userAccount, - bank: bankKeypairSol.publicKey, - tokenAccount: user.wsolAccount, - remaining: [ - bankKeypairUsdc.publicKey, - oracles.usdcOracle.publicKey, - bankKeypairSol.publicKey, - oracles.wsolOracle.publicKey, - ], - amount: new BN(0.01 * 10 ** ecosystem.wsolDecimals), - }) - ); - tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); - tx.sign(user.wallet); - await banksClient.processTransaction(tx); - - const userAcc = await bankrunProgram.account.marginfiAccount.fetch( - userAccount - ); - const balances = userAcc.lendingAccount.balances; - assert.equal(balances[1].active, 1); - assertKeysEqual(balances[1].bankPk, bankKeypairSol.publicKey); - }); - - // Note: Borrowing STAKED assets is generally forbidden (their borrow cap is set to 0) - // If we ever change this, add a test here to validate user 0 cannot borrow staked assets - - it("(user 1) tries to borrow USDC - should fail (Regular assets cannot comingle with Staked)", async () => { - const user = users[1]; - const userAccount = user.accounts.get(USER_ACCOUNT); - - let tx = new Transaction().add( - await borrowIx(user.mrgnBankrunProgram, { - marginfiAccount: userAccount, - bank: bankKeypairUsdc.publicKey, - tokenAccount: user.usdcAccount, - remaining: [ - bankKeypairSol.publicKey, - oracles.wsolOracle.publicKey, - validators[0].bank, - oracles.wsolOracle.publicKey, // Note the Staked bank uses wsol oracle too - validators[0].splMint, - validators[0].splSolPool, - bankKeypairUsdc.publicKey, - oracles.usdcOracle.publicKey, - ], - amount: new BN(0.1 * 10 ** ecosystem.usdcDecimals), - }) - ); - tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); - tx.sign(user.wallet); - let result = await banksClient.tryProcessTransaction(tx); - // AssetTagMismatch - assertBankrunTxFailed(result, "0x179f"); - - // Verify the deposit worked and the entry does not exist - const userAcc = await bankrunProgram.account.marginfiAccount.fetch( - userAccount - ); - const balances = userAcc.lendingAccount.balances; - assert.equal(balances[2].active, 0); - }); - - // TODO withdraw user 1's SOL collateral and verify they can borrow SOL -}); diff --git a/tests/s05_solAppreciates.spec.ts b/tests/s05_solAppreciates.spec.ts deleted file mode 100644 index d077c2fb8..000000000 --- a/tests/s05_solAppreciates.spec.ts +++ /dev/null @@ -1,223 +0,0 @@ -import { - AnchorProvider, - BN, - getProvider, - Program, - Wallet, - workspace, -} from "@coral-xyz/anchor"; -import { LAMPORTS_PER_SOL, SystemProgram, Transaction } from "@solana/web3.js"; -import { Marginfi } from "../target/types/marginfi"; -import { - bankKeypairSol, - bankrunContext, - bankrunProgram, - bankRunProvider, - banksClient, - ecosystem, - marginfiGroup, - oracles, - users, - validators, - verbose, -} from "./rootHooks"; -import { assertBankrunTxFailed, assertKeysEqual } from "./utils/genericTests"; -import { assert } from "chai"; -import { borrowIx, depositIx } from "./utils/user-instructions"; -import { LST_ATA, USER_ACCOUNT } from "./utils/mocks"; -import { getBankrunBlockhash } from "./utils/spl-staking-utils"; -import { getEpochAndSlot, getStakeActivation } from "./utils/stake-utils"; - -describe("Borrow power grows as v0 Staked SOL gains value from appreciation", () => { - const program = workspace.Marginfi as Program; - const provider = getProvider() as AnchorProvider; - const wallet = provider.wallet as Wallet; - - // User 2 has a validator 0 staked depost [0] position - net value = 1 LST token Users 0/1/2 - // deposited 10 SOL each, so a total of 30 is staked with validator 0 (minus the 1 SOL staked to - // start the pool, which is non-refundable and doesn't function as collateral) - /** SOL to add to the validator as pretend-earned epoch rewards */ - const appreciation = 30; - - it("(user 2) tries to borrow 1.1 SOL against 1 v0 STAKED - fails, not enough funds", async () => { - const user = users[2]; - const userAccount = user.accounts.get(USER_ACCOUNT); - - let tx = new Transaction().add( - await borrowIx(user.mrgnBankrunProgram, { - marginfiAccount: userAccount, - bank: bankKeypairSol.publicKey, - tokenAccount: user.wsolAccount, - remaining: [ - validators[0].bank, - oracles.wsolOracle.publicKey, - validators[0].splMint, - validators[0].splSolPool, - bankKeypairSol.publicKey, - oracles.wsolOracle.publicKey, - ], - amount: new BN(1.1 * 10 ** ecosystem.wsolDecimals), - }) - ); - tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); - tx.sign(user.wallet); - let result = await banksClient.tryProcessTransaction(tx); - - // 6009 (Generic risk engine rejection) - assertBankrunTxFailed(result, "0x1779"); - - const userAcc = await bankrunProgram.account.marginfiAccount.fetch( - userAccount - ); - const balances = userAcc.lendingAccount.balances; - assert.equal(balances[1].active, 0); - }); - - // Note: there is also some natural appreciation here because a few epochs have elapsed... - - // Here we try to a troll exploit by sending SOL directly to the stake pool's sol balance. - it("v0 stake sol pool grows by " + appreciation + " SOL", async () => { - let tx = new Transaction(); - tx.add( - SystemProgram.transfer({ - fromPubkey: wallet.publicKey, - toPubkey: validators[0].splSolPool, - lamports: appreciation * LAMPORTS_PER_SOL, - }) - ); - tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); - tx.sign(wallet.payer); - await banksClient.processTransaction(tx); - }); - - it("(user 2 - attacker) ties to sneak in bad lst mint - should fail", async () => { - const user = users[2]; - const userAccount = user.accounts.get(USER_ACCOUNT); - let tx = new Transaction().add( - await borrowIx(user.mrgnBankrunProgram, { - marginfiAccount: userAccount, - bank: bankKeypairSol.publicKey, - tokenAccount: user.wsolAccount, - remaining: [ - validators[0].bank, - oracles.wsolOracle.publicKey, - validators[1].splMint, // Bad mint - validators[0].splSolPool, - bankKeypairSol.publicKey, - oracles.wsolOracle.publicKey, - ], - amount: new BN(0.1 * 10 ** ecosystem.wsolDecimals), - }) - ); - tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); - tx.sign(user.wallet); - let result = await banksClient.tryProcessTransaction(tx); - - // 6009 (Generic risk engine rejection) - assertBankrunTxFailed(result, "0x1779"); - }); - - it("(user 2 - attacker) ties to sneak in bad sol pool - should fail", async () => { - const user = users[2]; - const userAccount = user.accounts.get(USER_ACCOUNT); - let tx = new Transaction().add( - await borrowIx(user.mrgnBankrunProgram, { - marginfiAccount: userAccount, - bank: bankKeypairSol.publicKey, - tokenAccount: user.wsolAccount, - remaining: [ - validators[0].bank, - oracles.wsolOracle.publicKey, - validators[0].splMint, - validators[1].splSolPool, // Bad pool - bankKeypairSol.publicKey, - oracles.wsolOracle.publicKey, - ], - amount: new BN(0.2 * 10 ** ecosystem.wsolDecimals), - }) - ); - tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); - tx.sign(user.wallet); - let result = await banksClient.tryProcessTransaction(tx); - - // 6009 (Generic risk engine rejection) - assertBankrunTxFailed(result, "0x1779"); - }); - - // The stake hasn't changed (even though the SOL balance did) so this should still fail - it("(user 2) borrows 1.1 SOL against their STAKED position - fails", async () => { - const user = users[2]; - const userAccount = user.accounts.get(USER_ACCOUNT); - let tx = new Transaction().add( - await borrowIx(user.mrgnBankrunProgram, { - marginfiAccount: userAccount, - bank: bankKeypairSol.publicKey, - tokenAccount: user.wsolAccount, - remaining: [ - validators[0].bank, - oracles.wsolOracle.publicKey, - validators[0].splMint, - validators[0].splSolPool, - bankKeypairSol.publicKey, - oracles.wsolOracle.publicKey, - ], - // Note: We use a different (slightly higher) amount, so Bankrun treats this as a different - // tx. Using the exact same values as above can cause the test to fail on faster machines - // because the same tx was already sent for this blockhash (i.e. "this transaction has - // already been processed") - amount: new BN(1.112 * 10 ** ecosystem.wsolDecimals), - }) - ); - tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); - tx.sign(user.wallet); - let result = await banksClient.tryProcessTransaction(tx); - - // 6009 (Generic risk engine rejection) - assertBankrunTxFailed(result, "0x1779"); - }); - - it("Generate stake income....", async () => { - // TODO how? - // - }); - - // Now the stake is worth enough and the user can borrow - it("(user 2) borrows 1.1 SOL against their STAKED position - succeeds", async () => { - const user = users[2]; - const userAccount = user.accounts.get(USER_ACCOUNT); - const userLstAta = user.accounts.get(LST_ATA); - let tx = new Transaction().add( - // TODO if we find a way to make stake appreciate on localnet, remove... - await depositIx(user.mrgnBankrunProgram, { - marginfiAccount: userAccount, - bank: validators[0].bank, - tokenAccount: userLstAta, - amount: new BN(1 * 10 ** ecosystem.wsolDecimals), - }), - await borrowIx(user.mrgnBankrunProgram, { - marginfiAccount: userAccount, - bank: bankKeypairSol.publicKey, - tokenAccount: user.wsolAccount, - remaining: [ - validators[0].bank, - oracles.wsolOracle.publicKey, - validators[0].splMint, - validators[0].splSolPool, - bankKeypairSol.publicKey, - oracles.wsolOracle.publicKey, - ], - amount: new BN(1.113 * 10 ** ecosystem.wsolDecimals), - }) - ); - tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); - tx.sign(user.wallet); - await banksClient.processTransaction(tx); - - const userAcc = await bankrunProgram.account.marginfiAccount.fetch( - userAccount - ); - const balances = userAcc.lendingAccount.balances; - assert.equal(balances[1].active, 1); - assertKeysEqual(balances[1].bankPk, bankKeypairSol.publicKey); - }); -}); diff --git a/tests/s06_propagateSets.spec.ts b/tests/s06_propagateSets.spec.ts deleted file mode 100644 index e30ce0d3d..000000000 --- a/tests/s06_propagateSets.spec.ts +++ /dev/null @@ -1,194 +0,0 @@ -import { workspace, Program } from "@coral-xyz/anchor"; -import { PublicKey, Transaction } from "@solana/web3.js"; -import BN from "bn.js"; -import { Marginfi } from "../target/types/marginfi"; -import { - marginfiGroup, - validators, - groupAdmin, - oracles, - bankrunContext, - banksClient, - bankrunProgram, -} from "./rootHooks"; -import { - editStakedSettings, - propagateStakedSettings, -} from "./utils/group-instructions"; -import { deriveBankWithSeed, deriveStakedSettings } from "./utils/pdas"; -import { getBankrunBlockhash } from "./utils/spl-staking-utils"; -import { bigNumberToWrappedI80F48 } from "@mrgnlabs/mrgn-common"; -import { assert } from "chai"; -import { - assertKeysEqual, - assertI80F48Approx, - assertBNEqual, - assertBankrunTxFailed, -} from "./utils/genericTests"; -import { - defaultStakedInterestSettings, - StakedSettingsEdit, -} from "./utils/types"; - -describe("Edit and propagate staked settings", () => { - const program = workspace.Marginfi as Program; - - let settingsKey: PublicKey; - let bankKey: PublicKey; - - before(async () => { - [settingsKey] = deriveStakedSettings( - program.programId, - marginfiGroup.publicKey - ); - [bankKey] = deriveBankWithSeed( - program.programId, - marginfiGroup.publicKey, - validators[0].splMint, - new BN(0) - ); - }); - - it("(admin) edits some settings - happy path", async () => { - const settings: StakedSettingsEdit = { - oracle: oracles.usdcOracle.publicKey, - assetWeightInit: bigNumberToWrappedI80F48(0.2), - assetWeightMaint: bigNumberToWrappedI80F48(0.3), - depositLimit: new BN(42), - totalAssetValueInitLimit: new BN(43), - oracleMaxAge: 44, - riskTier: { - collateral: undefined, - }, - }; - let tx = new Transaction().add( - await bankrunProgram.methods - .editStakedSettings(settings) - .accountsPartial({ - marginfiGroup: marginfiGroup.publicKey, - admin: groupAdmin.wallet.publicKey, - stakedSettings: settingsKey, - }) - .instruction() - ); - tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); - tx.sign(groupAdmin.wallet); - await banksClient.processTransaction(tx); - - let settingsAcc = await bankrunProgram.account.stakedSettings.fetch( - settingsKey - ); - assertKeysEqual(settingsAcc.key, settingsKey); - assertKeysEqual(settingsAcc.oracle, oracles.usdcOracle.publicKey); - assertI80F48Approx(settingsAcc.assetWeightInit, 0.2); - assertI80F48Approx(settingsAcc.assetWeightMaint, 0.3); - assertBNEqual(settingsAcc.depositLimit, 42); - assertBNEqual(settingsAcc.totalAssetValueInitLimit, 43); - assert.equal(settingsAcc.oracleMaxAge, 44); - assert.deepEqual(settingsAcc.riskTier, { collateral: {} }); - }); - - it("(permissionless) Propagate staked settings to a bank - happy path", async () => { - let tx = new Transaction(); - tx.add( - await propagateStakedSettings(bankrunProgram, { - settings: settingsKey, - bank: bankKey, - oracle: oracles.usdcOracle.publicKey, - }) - ); - tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); - tx.sign(groupAdmin.wallet); // just to the pay the fee - let result = await banksClient.tryProcessTransaction(tx); - - const bank = await bankrunProgram.account.bank.fetch(bankKey); - const config = bank.config; - assertKeysEqual(config.oracleKeys[0], oracles.usdcOracle.publicKey); - assertI80F48Approx(config.assetWeightInit, 0.2); - assertI80F48Approx(config.assetWeightMaint, 0.3); - assertBNEqual(config.depositLimit, 42); - assertBNEqual(config.totalAssetValueInitLimit, 43); - assert.equal(config.oracleMaxAge, 44); - assert.deepEqual(config.riskTier, { collateral: {} }); - }); - - it("(admin) sets a bad oracle - fails at propagation", async () => { - const settings: StakedSettingsEdit = { - oracle: PublicKey.default, - assetWeightInit: null, - assetWeightMaint: null, - depositLimit: null, - totalAssetValueInitLimit: null, - oracleMaxAge: null, - riskTier: null, - }; - let tx = new Transaction().add( - await bankrunProgram.methods - .editStakedSettings(settings) - .accountsPartial({ - marginfiGroup: marginfiGroup.publicKey, - admin: groupAdmin.wallet.publicKey, - stakedSettings: settingsKey, - }) - .instruction() - ); - tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); - tx.sign(groupAdmin.wallet); - await banksClient.processTransaction(tx); - - let settingsAcc = await bankrunProgram.account.stakedSettings.fetch( - settingsKey - ); - assertKeysEqual(settingsAcc.oracle, PublicKey.default); - - tx = new Transaction(); - tx.add( - await propagateStakedSettings(bankrunProgram, { - settings: settingsKey, - bank: bankKey, - oracle: PublicKey.default, - }) - ); - tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); - tx.sign(groupAdmin.wallet); // just to the pay the fee - let result = await banksClient.tryProcessTransaction(tx); - - // 6000 (InternalLogicError) - assertBankrunTxFailed(result, "0x1770"); - }); - - it("(admin) restores default settings - happy path", async () => { - const defaultSettings = defaultStakedInterestSettings( - oracles.wsolOracle.publicKey - ); - const settings: StakedSettingsEdit = { - oracle: defaultSettings.oracle, - assetWeightInit: defaultSettings.assetWeightInit, - assetWeightMaint: defaultSettings.assetWeightMaint, - depositLimit: defaultSettings.depositLimit, - totalAssetValueInitLimit: defaultSettings.totalAssetValueInitLimit, - oracleMaxAge: defaultSettings.oracleMaxAge, - riskTier: defaultSettings.riskTier, - }; - // Note you can pack propagates into the edit tx, so with a LUT you can easily propagate - // hundreds of banks in the same ts as edit - let tx = new Transaction().add( - await bankrunProgram.methods - .editStakedSettings(settings) - .accountsPartial({ - marginfiGroup: marginfiGroup.publicKey, - admin: groupAdmin.wallet.publicKey, - stakedSettings: settingsKey, - }) - .instruction(), - await propagateStakedSettings(bankrunProgram, { - settings: settingsKey, - bank: bankKey, - oracle: defaultSettings.oracle, - }) - ); - tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); - tx.sign(groupAdmin.wallet); - await banksClient.processTransaction(tx); - }); -}); diff --git a/tests/s07_withdraw_repay.spec.ts b/tests/s07_withdraw_repay.spec.ts deleted file mode 100644 index 296e69caa..000000000 --- a/tests/s07_withdraw_repay.spec.ts +++ /dev/null @@ -1,291 +0,0 @@ -import { workspace, Program } from "@coral-xyz/anchor"; -import { PublicKey, Transaction } from "@solana/web3.js"; -import BN from "bn.js"; -import { Marginfi } from "../target/types/marginfi"; -import { - marginfiGroup, - validators, - groupAdmin, - oracles, - bankrunContext, - banksClient, - bankrunProgram, - users, - ecosystem, - bankKeypairSol, - bankRunProvider, - verbose, -} from "./rootHooks"; -import { - editStakedSettings, - propagateStakedSettings, -} from "./utils/group-instructions"; -import { deriveBankWithSeed, deriveStakedSettings } from "./utils/pdas"; -import { getBankrunBlockhash } from "./utils/spl-staking-utils"; -import { - bigNumberToWrappedI80F48, - wrappedI80F48toBigNumber, -} from "@mrgnlabs/mrgn-common"; -import { assert } from "chai"; -import { - assertKeysEqual, - assertI80F48Approx, - assertBNEqual, - assertBankrunTxFailed, - getTokenBalance, - assertI80F48Equal, -} from "./utils/genericTests"; -import { - defaultStakedInterestSettings, - StakedSettingsEdit, -} from "./utils/types"; -import { LST_ATA, USER_ACCOUNT } from "./utils/mocks"; -import { - borrowIx, - depositIx, - repayIx, - withdrawIx, -} from "./utils/user-instructions"; - -describe("Withdraw staked asset", () => { - let settingsKey: PublicKey; - let bankKey: PublicKey; - - before(async () => { - [settingsKey] = deriveStakedSettings( - bankrunProgram.programId, - marginfiGroup.publicKey - ); - [bankKey] = deriveBankWithSeed( - bankrunProgram.programId, - marginfiGroup.publicKey, - validators[0].splMint, - new BN(0) - ); - }); - - it("(user 3) deposits some native staked and borrows SOL against it - happy path", async () => { - const user = users[3]; - const userAccount = user.accounts.get(USER_ACCOUNT); - const userLstAta = user.accounts.get(LST_ATA); - - let depositTx = new Transaction().add( - await depositIx(user.mrgnBankrunProgram, { - marginfiAccount: userAccount, - bank: validators[0].bank, - tokenAccount: userLstAta, - amount: new BN(1 * 10 ** ecosystem.wsolDecimals), - }) - ); - - depositTx.recentBlockhash = await getBankrunBlockhash(bankrunContext); - depositTx.sign(user.wallet); - await banksClient.tryProcessTransaction(depositTx); - - let borrowTx = new Transaction().add( - await borrowIx(user.mrgnBankrunProgram, { - marginfiAccount: userAccount, - bank: bankKeypairSol.publicKey, - tokenAccount: user.wsolAccount, - remaining: [ - validators[0].bank, - oracles.wsolOracle.publicKey, - validators[0].splMint, - validators[0].splSolPool, - bankKeypairSol.publicKey, - oracles.wsolOracle.publicKey, - ], - amount: new BN(0.5 * 10 ** ecosystem.wsolDecimals), - }) - ); - borrowTx.recentBlockhash = await getBankrunBlockhash(bankrunContext); - borrowTx.sign(user.wallet); - await banksClient.processTransaction(borrowTx); - }); - - it("(user 3) withdraws a small amount of native staked position - happy path", async () => { - const amtNative = 0.1 * 10 ** ecosystem.wsolDecimals; - const user = users[3]; - const userAccount = user.accounts.get(USER_ACCOUNT); - const userLstAta = user.accounts.get(LST_ATA); - - const lstBefore = await getTokenBalance(bankRunProvider, userLstAta); - - let tx = new Transaction().add( - await withdrawIx(user.mrgnBankrunProgram, { - marginfiAccount: userAccount, - bank: validators[0].bank, - tokenAccount: userLstAta, - amount: new BN(amtNative), - remaining: [ - validators[0].bank, - oracles.wsolOracle.publicKey, - validators[0].splMint, - validators[0].splSolPool, - bankKeypairSol.publicKey, - oracles.wsolOracle.publicKey, - ], - }) - ); - - tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); - tx.sign(user.wallet); - await banksClient.processTransaction(tx); - - const lstAfter = await getTokenBalance(bankRunProvider, userLstAta); - assert.equal(lstAfter, lstBefore + amtNative); - - const userAcc = await user.mrgnBankrunProgram.account.marginfiAccount.fetch( - userAccount - ); - const balances = userAcc.lendingAccount.balances; - assert.equal(balances[0].active, 1); - - // TODO assert other balances changes as expected... - }); - - it("(user 3) repays a small amount of SOL borrowed against stake - happy path", async () => { - const amtNative = 0.1 * 10 ** ecosystem.wsolDecimals; - const user = users[3]; - const userAccount = user.accounts.get(USER_ACCOUNT); - - const solBefore = await getTokenBalance(bankRunProvider, user.wsolAccount); - - let tx = new Transaction().add( - await repayIx(user.mrgnBankrunProgram, { - marginfiAccount: userAccount, - bank: bankKeypairSol.publicKey, - tokenAccount: user.wsolAccount, - amount: new BN(amtNative), - remaining: [ - validators[0].bank, - oracles.wsolOracle.publicKey, - validators[0].splMint, - validators[0].splSolPool, - bankKeypairSol.publicKey, - oracles.wsolOracle.publicKey, - ], - }) - ); - - tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); - tx.sign(user.wallet); - await banksClient.processTransaction(tx); - - const solAfter = await getTokenBalance(bankRunProvider, user.wsolAccount); - assert.equal(solAfter, solBefore - amtNative); - - const userAcc = await user.mrgnBankrunProgram.account.marginfiAccount.fetch( - userAccount - ); - const balances = userAcc.lendingAccount.balances; - assert.equal(balances[1].active, 1); - - // TODO assert other balances changes as expected... - }); - - it("(user 3) repays the entire borrowed SOL balance - happy path", async () => { - const amtNative = 0.1 * 10 ** ecosystem.wsolDecimals; - const user = users[3]; - const userAccount = user.accounts.get(USER_ACCOUNT); - - const solBefore = await getTokenBalance(bankRunProvider, user.wsolAccount); - const userAccBefore = - await user.mrgnBankrunProgram.account.marginfiAccount.fetch(userAccount); - const bankBefore = await user.mrgnBankrunProgram.account.bank.fetch( - bankKeypairSol.publicKey - ); - const amtExpected = - wrappedI80F48toBigNumber( - userAccBefore.lendingAccount.balances[1].liabilityShares - ).toNumber() * - wrappedI80F48toBigNumber(bankBefore.liabilityShareValue).toNumber(); - - let tx = new Transaction().add( - await repayIx(user.mrgnBankrunProgram, { - marginfiAccount: userAccount, - bank: bankKeypairSol.publicKey, - tokenAccount: user.wsolAccount, - amount: new BN(amtNative), - remaining: [ - validators[0].bank, - oracles.wsolOracle.publicKey, - validators[0].splMint, - validators[0].splSolPool, - bankKeypairSol.publicKey, - oracles.wsolOracle.publicKey, - ], - repayAll: true, - }) - ); - - tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); - tx.sign(user.wallet); - await banksClient.processTransaction(tx); - - const solAfter = await getTokenBalance(bankRunProvider, user.wsolAccount); - assert.approximately(solAfter, solBefore - amtExpected, 2); - - const userAcc = await user.mrgnBankrunProgram.account.marginfiAccount.fetch( - userAccount - ); - const balances = userAcc.lendingAccount.balances; - assertI80F48Equal(balances[1].liabilityShares, 0); - assert.equal(balances[1].active, 0); - - // TODO assert other balances changes as expected... - }); - - it("(user 3) withdraws the entire native staked position - happy path", async () => { - const amtNative = 0.1 * 10 ** ecosystem.wsolDecimals; - const user = users[3]; - const userAccount = user.accounts.get(USER_ACCOUNT); - const userLstAta = user.accounts.get(LST_ATA); - - const lstBefore = await getTokenBalance(bankRunProvider, userLstAta); - const userAccBefore = - await user.mrgnBankrunProgram.account.marginfiAccount.fetch(userAccount); - const bankBefore = await user.mrgnBankrunProgram.account.bank.fetch( - bankKeypairSol.publicKey - ); - const amtExpected = - wrappedI80F48toBigNumber( - userAccBefore.lendingAccount.balances[0].assetShares - ).toNumber() * - wrappedI80F48toBigNumber(bankBefore.assetShareValue).toNumber(); - - let tx = new Transaction().add( - await withdrawIx(user.mrgnBankrunProgram, { - marginfiAccount: userAccount, - bank: validators[0].bank, - tokenAccount: userLstAta, - amount: new BN(amtNative), - remaining: [ - validators[0].bank, - oracles.wsolOracle.publicKey, - validators[0].splMint, - validators[0].splSolPool, - bankKeypairSol.publicKey, - oracles.wsolOracle.publicKey, - ], - withdrawAll: true, - }) - ); - - tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); - tx.sign(user.wallet); - await banksClient.processTransaction(tx); - - const lstAfter = await getTokenBalance(bankRunProvider, userLstAta); - assert.equal(lstAfter, lstBefore + amtExpected); - - const userAcc = await user.mrgnBankrunProgram.account.marginfiAccount.fetch( - userAccount - ); - const balances = userAcc.lendingAccount.balances; - assertI80F48Equal(balances[0].assetShares, 0); - assert.equal(balances[0].active, 0); - - // TODO assert other balances changes as expected... - }); -}); diff --git a/tests/s08_liquidate.spec.ts b/tests/s08_liquidate.spec.ts deleted file mode 100644 index 0d959c23e..000000000 --- a/tests/s08_liquidate.spec.ts +++ /dev/null @@ -1,387 +0,0 @@ -import { - AnchorProvider, - BN, - getProvider, - Program, - workspace, -} from "@coral-xyz/anchor"; -import { LAMPORTS_PER_SOL, PublicKey, Transaction } from "@solana/web3.js"; -import { Marginfi } from "../target/types/marginfi"; -import { - bankKeypairA, - bankKeypairSol, - bankKeypairUsdc, - bankrunContext, - bankrunProgram, - bankRunProvider, - banksClient, - ecosystem, - groupAdmin, - marginfiGroup, - oracles, - users, - validators, - verbose, -} from "./rootHooks"; -import { - assertBNApproximately, - assertI80F48Equal, - getTokenBalance, -} from "./utils/genericTests"; -import { assert } from "chai"; -import { liquidateIx } from "./utils/user-instructions"; -import { USER_ACCOUNT } from "./utils/mocks"; -import { getBankrunBlockhash } from "./utils/spl-staking-utils"; -import { - bigNumberToWrappedI80F48, - getMint, - wrappedI80F48toBigNumber, -} from "@mrgnlabs/mrgn-common"; -import { - defaultStakedInterestSettings, - StakedSettingsEdit, -} from "./utils/types"; -import { - editStakedSettings, - propagateStakedSettings, -} from "./utils/group-instructions"; -import { deriveStakedSettings } from "./utils/pdas"; -import { getStakeAccount } from "./utils/stake-utils"; - -describe("Liquidate user (including staked assets)", () => { - const program = workspace.Marginfi as Program; - let settingsKey: PublicKey; - before(async () => { - [settingsKey] = deriveStakedSettings( - program.programId, - marginfiGroup.publicKey - ); - }); - - const confidenceInterval = 0.0212; // 1% confidence * CONF_INTERVAL_MULTIPLE - const liquidateAmountSol = 0.1; - const liquidateAmountSol_native = new BN( - liquidateAmountSol * 10 ** ecosystem.wsolDecimals - ); - - /** - * Maintenance ratio allowed = 10% - * Liquidator fee = 2.5% - * Insurance fee = 2.5% - * Confidence interval = 2.12% (1% confidence * 2.12 = 2.12%) - * - * - * Staked SOL (hereinafter Staked) is worth $305.04680972609873 with conf ~$6.46 (worth $298.573 low, $311.506 high) - * SOL is worth $150 with conf ~$3.18 (worth $146.82 low, $153.18 high) - * - * User 2 has a validator 0 Staked [0] deposit position and a SOL [1] debt position: - * ASSETS - * [index 0] 1,000,000,000 (1) Staked (worth $305.047) - * DEBTS - * [index 1] 1,122,110,000.0000017 (1.12211) SOL (worth $168.317) - * Note: $168.317 is ~55% of $305.047, which is more than 10%, so liquidation is allowed - * - * Liquidator tries to repay 0.1 Staked (worth $30.5047) of liquidatee's debt, so liquidator's assets - * increase by this value, while liquidatee's assets decrease by this value. Which also means that: - * - * Liquidator must pay - * value of Staked minus liquidator fee (low bias within the confidence interval): .1 * (1 - 0.025) * 298.573 = $29.133 - * SOL equivalent (high bias): 29.133 / 153.18 ~= 0.1902 (190,188,014 native) - * - * Liquidatee receives - * value of Staked minus (liquidator fee + insurance) (low bias): .1 * (1 - 0.025 - 0.025) * 298.573 = $27.659 - * SOL equivalent (high bias): 27.659 / 153.18 ~= 0.1806 (180,565,347 native) - * - * Insurance fund collects the difference - * SOL diff 190,188,014 - 180,565,347 = 9,622,667 (the actual number in the test can be different, since the Staked price is approximated) - */ - - it("(user 1) liquidates user 2 with staked SOL against their SOL position - succeeds", async () => { - const liquidatee = users[2]; - const liquidator = users[1]; - - const assetBankKey = validators[0].bank; - const assetBankBefore = await bankrunProgram.account.bank.fetch( - assetBankKey - ); - const liabilityBankKey = bankKeypairSol.publicKey; - const liabilityBankBefore = await bankrunProgram.account.bank.fetch( - liabilityBankKey - ); - - const liquidateeAccount = liquidatee.accounts.get(USER_ACCOUNT); - const liquidateeMarginfiAccount = - await bankrunProgram.account.marginfiAccount.fetch(liquidateeAccount); - - const liquidatorAccount = liquidator.accounts.get(USER_ACCOUNT); - const liquidatorMarginfiAccount = - await bankrunProgram.account.marginfiAccount.fetch(liquidatorAccount); - - const liquidateeBalances = - liquidateeMarginfiAccount.lendingAccount.balances; - const liquidatorBalances = - liquidatorMarginfiAccount.lendingAccount.balances; - - const insuranceVaultBalance = await getTokenBalance( - bankRunProvider, - liabilityBankBefore.insuranceVault - ); - assert.equal(insuranceVaultBalance, 0); - - const sharesStaked = wrappedI80F48toBigNumber( - liquidateeBalances[0].assetShares - ).toNumber(); - const shareValueStaked = wrappedI80F48toBigNumber( - assetBankBefore.assetShareValue - ).toNumber(); - const sharesSol = wrappedI80F48toBigNumber( - liquidateeBalances[1].liabilityShares - ).toNumber(); - const shareValueSol = wrappedI80F48toBigNumber( - liabilityBankBefore.liabilityShareValue - ).toNumber(); - - const solPool = await bankRunProvider.connection.getAccountInfo( - validators[0].splSolPool - ); - - // This is close enough in most cases, but in edge cases someone can send sol here as a troll.. - // const solPoolLamports = solPool.lamports; - - // What you really want to do is... - const splStakePoolBefore = getStakeAccount(solPool.data); - const stakeActual = Number(splStakePoolBefore.stake.delegation.stake); - const mintData = await getMint( - bankRunProvider.connection, - validators[0].splMint - ); - // there is 1 SOL used to init the pool that is non-refundable and doesn't count as stake - const stakedPrice = - (oracles.wsolPrice * (stakeActual - LAMPORTS_PER_SOL)) / - Number(mintData.supply); - - if (verbose) { - console.log("BEFORE"); - console.log( - "liability bank insurance vault before: " + - insuranceVaultBalance.toLocaleString() - ); - console.log( - "user 0 (liquidatee) Staked asset shares: " + sharesStaked.toString() - ); - console.log( - " value (in Staked native): " + - (sharesStaked * shareValueStaked).toLocaleString() - ); - console.log( - " value (in dollars): $" + - ( - (sharesStaked * shareValueStaked * stakedPrice) / - 10 ** oracles.wsolDecimals - ).toLocaleString() - ); - console.log( - "user 0 (liquidatee) SOL liability shares: " + sharesSol.toString() - ); - console.log( - " debt (in SOL native): " + - (sharesSol * shareValueSol).toLocaleString() - ); - console.log( - " debt (in dollars): $" + - ( - (sharesSol * shareValueSol * oracles.wsolPrice) / - 10 ** oracles.wsolDecimals - ).toLocaleString() - ); - console.log( - "user 1 (liquidator) staked asset shares: " + - wrappedI80F48toBigNumber(liquidatorBalances[0].assetShares).toString() - ); - console.log( - "user 1 (liquidator) USDC liability shares: " + - wrappedI80F48toBigNumber( - liquidatorBalances[0].liabilityShares - ).toString() - ); - } - - const defaultSettings = defaultStakedInterestSettings( - oracles.wsolOracle.publicKey - ); - const settings: StakedSettingsEdit = { - oracle: defaultSettings.oracle, - assetWeightInit: bigNumberToWrappedI80F48(0.05), - assetWeightMaint: bigNumberToWrappedI80F48(0.1), - depositLimit: defaultSettings.depositLimit, - totalAssetValueInitLimit: defaultSettings.totalAssetValueInitLimit, - oracleMaxAge: defaultSettings.oracleMaxAge, - riskTier: defaultSettings.riskTier, - }; - let editTx = new Transaction().add( - await editStakedSettings(groupAdmin.mrgnBankrunProgram, { - settingsKey: settingsKey, - settings: settings, - }), - await propagateStakedSettings(bankrunProgram, { - settings: settingsKey, - bank: assetBankKey, - oracle: defaultSettings.oracle, - }) - ); - editTx.recentBlockhash = await getBankrunBlockhash(bankrunContext); - editTx.sign(groupAdmin.wallet); - await banksClient.processTransaction(editTx); - - const stakedLowPrice = stakedPrice * (1 - confidenceInterval); // see top of test - const wsolHighPrice = oracles.wsolPrice * (1 + confidenceInterval); // see top of test - const insuranceToBeCollected = - ((liquidateAmountSol * 0.025 * shareValueStaked * stakedLowPrice) / - (shareValueSol * wsolHighPrice)) * - 10 ** oracles.wsolDecimals; - - let tx = new Transaction().add( - await liquidateIx(liquidator.mrgnBankrunProgram, { - assetBankKey, - liabilityBankKey, - liquidatorMarginfiAccount: liquidatorAccount, - liquidateeMarginfiAccount: liquidateeAccount, - remaining: [ - oracles.wsolOracle.publicKey, - validators[0].splMint, - validators[0].splSolPool, - oracles.wsolOracle.publicKey, - liabilityBankKey, - oracles.wsolOracle.publicKey, - assetBankKey, - oracles.wsolOracle.publicKey, - validators[0].splMint, - validators[0].splSolPool, - assetBankKey, - oracles.wsolOracle.publicKey, - validators[0].splMint, - validators[0].splSolPool, - liabilityBankKey, - oracles.wsolOracle.publicKey, - ], - amount: liquidateAmountSol_native, - }) - ); - tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); - tx.sign(liquidator.wallet); - await banksClient.processTransaction(tx); - - const liquidateeMarginfiAccountAfter = - await bankrunProgram.account.marginfiAccount.fetch(liquidateeAccount); - const liquidatorMarginfiAccountAfter = - await bankrunProgram.account.marginfiAccount.fetch(liquidatorAccount); - - const liquidateeBalancesAfter = - liquidateeMarginfiAccountAfter.lendingAccount.balances; - const liquidatorBalancesAfter = - liquidatorMarginfiAccountAfter.lendingAccount.balances; - - const sharesStakedAfter = wrappedI80F48toBigNumber( - liquidateeBalancesAfter[0].assetShares - ).toNumber(); - const sharesSolAfter = wrappedI80F48toBigNumber( - liquidateeBalancesAfter[1].liabilityShares - ).toNumber(); - - assertI80F48Equal( - liquidateeBalancesAfter[0].assetShares, - wrappedI80F48toBigNumber(liquidateeBalances[0].assetShares).toNumber() - - liquidateAmountSol_native.toNumber() - ); - assertI80F48Equal(liquidateeBalancesAfter[0].liabilityShares, 0); - assertI80F48Equal(liquidateeBalancesAfter[1].assetShares, 0); - - assertI80F48Equal(liquidatorBalancesAfter[0].liabilityShares, 0); - assertI80F48Equal( - liquidatorBalancesAfter[1].assetShares, - wrappedI80F48toBigNumber(liquidatorBalances[1].assetShares).toNumber() + - liquidateAmountSol_native.toNumber() - ); - assertI80F48Equal(liquidatorBalancesAfter[1].liabilityShares, 0); - - const insuranceVaultBalanceAfter = await getTokenBalance( - bankRunProvider, - liabilityBankBefore.insuranceVault - ); - assert.approximately( - insuranceVaultBalanceAfter, - insuranceToBeCollected, - insuranceToBeCollected * 0.1 - ); // see top of test - - if (verbose) { - console.log("AFTER"); - console.log( - "liability bank insurance vault after (SOL): " + - insuranceVaultBalanceAfter.toLocaleString() - ); - console.log( - "user 0 (liquidatee) Staked asset shares after: " + - sharesStakedAfter.toString() - ); - console.log( - " value (in Staked native): " + - (sharesStakedAfter * shareValueStaked).toLocaleString() - ); - console.log( - " value (in dollars): $" + - ( - (sharesStakedAfter * shareValueStaked * stakedPrice) / - 10 ** oracles.wsolDecimals - ).toLocaleString() - ); - console.log( - "user 0 (liquidatee) SOL liability shares after: " + - sharesSolAfter.toString() - ); - console.log( - " debt (in SOL native): " + - (sharesSolAfter * shareValueSol).toLocaleString() - ); - console.log( - " debt (in dollars): $" + - ( - (sharesSolAfter * shareValueSol * oracles.wsolPrice) / - 10 ** oracles.wsolDecimals - ).toLocaleString() - ); - console.log( - "user 1 (liquidator) SOL asset shares after: " + - wrappedI80F48toBigNumber( - liquidatorBalancesAfter[0].assetShares - ).toString() - ); - console.log( - "user 1 (liquidator) SOL liability shares after: " + - wrappedI80F48toBigNumber( - liquidatorBalancesAfter[0].liabilityShares - ).toString() - ); - console.log( - "user 1 (liquidator) Staked asset shares after: " + - wrappedI80F48toBigNumber( - liquidatorBalancesAfter[1].assetShares - ).toString() - ); - console.log( - "user 1 (liquidator) Staked liability shares after: " + - wrappedI80F48toBigNumber( - liquidatorBalancesAfter[1].liabilityShares - ).toString() - ); - } - - let now = Math.floor(Date.now() / 1000); - assertBNApproximately(liquidatorBalancesAfter[0].lastUpdate, now, 30); - assertBNApproximately(liquidatorBalancesAfter[1].lastUpdate, now, 30); - assertBNApproximately(liquidateeBalancesAfter[0].lastUpdate, now, 30); - assertBNApproximately(liquidateeBalancesAfter[1].lastUpdate, now, 30); - }); -}); - -// TODO: 0,1 - should fail diff --git a/tests/s09_emissions.spec.ts b/tests/s09_emissions.spec.ts deleted file mode 100644 index f072a388f..000000000 --- a/tests/s09_emissions.spec.ts +++ /dev/null @@ -1,518 +0,0 @@ -/** - * The "point" of this test is to additional test emissions with Bankrun time warps, but it also - * serves a secondary purpose of validating that emissions works with eccentric bank setups like - * staked collateral. - */ - -import { - AnchorProvider, - BN, - getProvider, - Program, - Wallet, - workspace, -} from "@coral-xyz/anchor"; -import { - Keypair, - LAMPORTS_PER_SOL, - PublicKey, - SystemProgram, - Transaction, -} from "@solana/web3.js"; -import { Marginfi } from "../target/types/marginfi"; -import { - bankKeypairA, - bankKeypairSol, - bankKeypairUsdc, - bankrunContext, - bankrunProgram, - bankRunProvider, - banksClient, - ecosystem, - groupAdmin, - marginfiGroup, - numUsers, - oracles, - users, - validators, - verbose, -} from "./rootHooks"; -import { - assertBankrunTxFailed, - assertBNApproximately, - assertI80F48Equal, - assertKeyDefault, - assertKeysEqual, - getTokenBalance, -} from "./utils/genericTests"; -import { assert } from "chai"; -import { - liquidateIx, - settleEmissionsIx, - updateEmissionsDestination, - withdrawEmissionsIx, - withdrawEmissionsPermissionlessIx, -} from "./utils/user-instructions"; -import { USER_ACCOUNT } from "./utils/mocks"; -import { getBankrunBlockhash } from "./utils/spl-staking-utils"; -import { - bigNumberToWrappedI80F48, - createAssociatedTokenAccountInstruction, - getAssociatedTokenAddressSync, - getMint, - wrappedI80F48toBigNumber, -} from "@mrgnlabs/mrgn-common"; -import { - defaultStakedInterestSettings, - EMISSIONS_FLAG_BORROW_ACTIVE, - EMISSIONS_FLAG_LENDING_ACTIVE, - StakedSettingsEdit, -} from "./utils/types"; -import { - editStakedSettings, - propagateStakedSettings, - setupEmissions, -} from "./utils/group-instructions"; -import { deriveStakedSettings } from "./utils/pdas"; -import { getEpochAndSlot, getStakeAccount } from "./utils/stake-utils"; -import { createMintToInstruction } from "@solana/spl-token"; -import { dumpBankrunLogs } from "./utils/tools"; - -describe("Set up emissions on staked collateral assets", () => { - const provider = getProvider() as AnchorProvider; - const wallet = provider.wallet as Wallet; - - const emissionRate = new BN(500_000 * 10 ** ecosystem.tokenBDecimals); - const totalEmissions = new BN(1_000_000 * 10 ** ecosystem.tokenBDecimals); - - // NOTE: these change slightly due to interest, but not enough to really matter for test purposes - let userDeposits: number[] = []; - let netDeposits: number; - - /// Some wallet the user wants to use for emissions. This could also be their own wallet, user can - /// pick arbitrarily. - const externalWallet: Keypair = Keypair.generate(); - const bAta = getAssociatedTokenAddressSync( - ecosystem.tokenBMint.publicKey, - externalWallet.publicKey - ); - - before(async () => { - // Fund the group admin with a bunch of Token B for emissions - let fundTx: Transaction = new Transaction().add( - createMintToInstruction( - ecosystem.tokenBMint.publicKey, - groupAdmin.tokenBAccount, - wallet.publicKey, - BigInt(100_000_000) * BigInt(10 ** ecosystem.tokenBDecimals) - ) - ); - fundTx.recentBlockhash = await getBankrunBlockhash(bankrunContext); - fundTx.sign(wallet.payer); - await banksClient.processTransaction(fundTx); - - let setupTx = new Transaction().add( - await setupEmissions(groupAdmin.mrgnBankrunProgram, { - bank: validators[0].bank, - emissionsMint: ecosystem.tokenBMint.publicKey, - fundingAccount: groupAdmin.tokenBAccount, - // Note: borrow emissions do nothing for staked collateral - emissionsFlags: new BN( - EMISSIONS_FLAG_BORROW_ACTIVE + EMISSIONS_FLAG_LENDING_ACTIVE - ), - emissionsRate: emissionRate, - totalEmissions: totalEmissions, - }) - ); - setupTx.recentBlockhash = await getBankrunBlockhash(bankrunContext); - setupTx.sign(groupAdmin.wallet); - await banksClient.processTransaction(setupTx); - - // Find all the validator 0 positions so we know how much each user is owed... - for (let i = 0; i < numUsers; i++) { - const userAccount = users[i].accounts.get(USER_ACCOUNT); - - const acc = await bankrunProgram.account.marginfiAccount.fetch( - userAccount - ); - const balances = acc.lendingAccount.balances; - let foundBalance = false; - for (let i = 0; i < balances.length; i++) { - if (balances[i].bankPk.equals(validators[0].bank)) { - const shares = wrappedI80F48toBigNumber( - balances[i].assetShares - ).toNumber(); - if (verbose) { - console.log("user [" + i + "] shares: " + shares); - } - userDeposits.push(shares); - foundBalance = true; - } - } - - // If the search loop above fails, then that user doesn't have any val 0 balance - if (!foundBalance) { - userDeposits.push(0); - if (verbose) { - console.log("user [" + i + "] has no validator 0 bank position"); - } - } - } - - const bankAcc = await bankrunProgram.account.bank.fetch(validators[0].bank); - netDeposits = wrappedI80F48toBigNumber(bankAcc.totalAssetShares).toNumber(); - if (verbose) { - console.log("net shares oustanding: " + netDeposits); - console.log(""); - } - }); - - it("(user 2) claims emissions when no time elapsed - nothing happens", async () => { - const user = users[2]; - const userAccount = user.accounts.get(USER_ACCOUNT); - - const tokenBefore = await getTokenBalance( - bankRunProvider, - users[2].tokenBAccount - ); - - let tx = new Transaction().add( - await settleEmissionsIx(user.mrgnBankrunProgram, { - marginfiAccount: userAccount, - bank: validators[0].bank, - }), - await withdrawEmissionsIx(user.mrgnBankrunProgram, { - marginfiAccount: userAccount, - bank: validators[0].bank, - tokenAccount: users[2].tokenBAccount, - }) - ); - - tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); - tx.sign(user.wallet); - await banksClient.processTransaction(tx); - - const tokenAfter = await getTokenBalance( - bankRunProvider, - users[2].tokenBAccount - ); - const diff = tokenAfter - tokenBefore; - assert.equal(diff, 0); - - if (verbose) { - console.log("User 2 claimed token B emissions"); - console.log( - "before: " + tokenBefore + " after: " + tokenAfter + " diff " + diff - ); - } - }); - - it("time elapses", async () => { - let { epoch } = await getEpochAndSlot(banksClient); - const warpTo = BigInt(epoch + 5); - bankrunContext.warpToEpoch(warpTo); - if (verbose) { - console.log("Warped to epoch: " + warpTo); - } - }); - - let user2Claim: number; - it("(user 2) claims again after some time - happy path", async () => { - const user = users[2]; - const userAccount = user.accounts.get(USER_ACCOUNT); - - const tokenBefore = await getTokenBalance( - bankRunProvider, - user.tokenBAccount - ); - - let tx = new Transaction().add( - await settleEmissionsIx(user.mrgnBankrunProgram, { - marginfiAccount: userAccount, - bank: validators[0].bank, - }), - await withdrawEmissionsIx(user.mrgnBankrunProgram, { - marginfiAccount: userAccount, - bank: validators[0].bank, - tokenAccount: user.tokenBAccount, - }) - ); - - tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); - tx.sign(user.wallet); - await banksClient.processTransaction(tx); - - const tokenAfter = await getTokenBalance( - bankRunProvider, - user.tokenBAccount - ); - const diff = tokenAfter - tokenBefore; - user2Claim = diff; - assert.isAtLeast(diff, 100); // assures the gain is non-zero - - const expectedShare = (userDeposits[2] / netDeposits) * 100; - - if (verbose) { - console.log("User 2 claimed token B emissions"); - console.log( - "User expected share of emissions: " + expectedShare.toFixed(2) + "%" - ); - console.log( - "before: " + tokenBefore + " after: " + tokenAfter + " diff " + diff - ); - } - }); - - it("(user 1) claims at the same time - gets proportional fair share", async () => { - const user = users[1]; - const userAccount = user.accounts.get(USER_ACCOUNT); - - const tokenBefore = await getTokenBalance( - bankRunProvider, - user.tokenBAccount - ); - - let tx = new Transaction().add( - await settleEmissionsIx(user.mrgnBankrunProgram, { - marginfiAccount: userAccount, - bank: validators[0].bank, - }), - await withdrawEmissionsIx(user.mrgnBankrunProgram, { - marginfiAccount: userAccount, - bank: validators[0].bank, - tokenAccount: user.tokenBAccount, - }) - ); - - tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); - tx.sign(user.wallet); - await banksClient.processTransaction(tx); - - const tokenAfter = await getTokenBalance( - bankRunProvider, - user.tokenBAccount - ); - const diff = tokenAfter - tokenBefore; - const netClaimed = user2Claim + diff; - const claimedShareActual = (diff / netClaimed) * 100; - assert.isAtLeast(diff, 100); - - // This is true with 2 users.... - const expectedUser1Claim = user2Claim * (userDeposits[1] / userDeposits[2]); - // User 1 gets ~ - assert.approximately( - diff, - expectedUser1Claim, - expectedUser1Claim * 0.01, - "User 1's claim is not the expected proportion of user 2's claim" - ); - - const expectedShare = (userDeposits[1] / netDeposits) * 100; - - if (verbose) { - console.log("User 1 claimed token B emissions"); - console.log( - "User expected share of emissions: " + expectedShare.toFixed(2) + "%" - ); - console.log( - "before: " + tokenBefore + " after: " + tokenAfter + " diff " + diff - ); - console.log("actual claim share: " + claimedShareActual.toFixed(2) + "%"); - } - }); - - it("(user 2) settle is always permissionless (does nothing here, no time elapsed)", async () => { - const user = users[2]; - const userAccount = user.accounts.get(USER_ACCOUNT); - let tx = new Transaction().add( - await settleEmissionsIx(user.mrgnBankrunProgram, { - marginfiAccount: userAccount, - bank: validators[0].bank, - }) - ); - tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); - tx.sign(wallet.payer); // Provider wallet has to sign to pay tx fees - await banksClient.processTransaction(tx); - }); - - // TODO explain why this happens in more detail: - - // Note: You may assume the claim amount should be the same the second time around, since the same - // number of epochs have elapsed, but that's not typically the case (timing issues, interest - // growth, etc) - it("time elapses", async () => { - let { epoch } = await getEpochAndSlot(banksClient); - const warpTo = BigInt(epoch + 5); - bankrunContext.warpToEpoch(warpTo); - if (verbose) { - console.log("Warped to epoch: " + warpTo); - } - }); - - it("(user 2) sets up a wallet to accept permissionless emission claims", async () => { - // Note that the payer wallet pays here, just to get some SOL into this wallet for rent since - // this is what most users would do - let tx = new Transaction().add( - SystemProgram.transfer({ - fromPubkey: wallet.publicKey, - toPubkey: externalWallet.publicKey, - lamports: 0.1 * LAMPORTS_PER_SOL, - }), - createAssociatedTokenAccountInstruction( - wallet.publicKey, - bAta, - externalWallet.publicKey, - ecosystem.tokenBMint.publicKey - ) - ); - - tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); - tx.sign(wallet.payer); - await banksClient.processTransaction(tx); - }); - - it("(user 2) permissionless withdraw before opt-in - fails", async () => { - const user = users[2]; - const userAccount = user.accounts.get(USER_ACCOUNT); - - let tx = new Transaction().add( - await settleEmissionsIx(user.mrgnBankrunProgram, { - marginfiAccount: userAccount, - bank: validators[0].bank, - }), - await withdrawEmissionsPermissionlessIx(user.mrgnBankrunProgram, { - marginfiAccount: userAccount, - bank: validators[0].bank, - tokenAccount: bAta, - }) - ); - - tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); - tx.sign(user.wallet); - let result = await banksClient.tryProcessTransaction(tx); - - // InvalidEmissionsDestinationAccount 6063 - assertBankrunTxFailed(result, "0x17af"); - }); - - it("(user 2) registers permissionless settle to some wallet - (happy path)", async () => { - const user = users[2]; - const userAccount = user.accounts.get(USER_ACCOUNT); - const accBefore = await bankrunProgram.account.marginfiAccount.fetch( - userAccount - ); - assertKeyDefault(accBefore.emissionsDestinationAccount); - - let tx = new Transaction().add( - await updateEmissionsDestination(user.mrgnBankrunProgram, { - marginfiAccount: userAccount, - destinationAccount: externalWallet.publicKey, - }) - ); - tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); - tx.sign(user.wallet); - await banksClient.processTransaction(tx); - - const accAfter = await bankrunProgram.account.marginfiAccount.fetch( - userAccount - ); - assertKeysEqual( - accAfter.emissionsDestinationAccount, - externalWallet.publicKey - ); - }); - - let user2PermissionlessClaim: number; - it("(user 2) permissionless withdraw after opt-in - happy path", async () => { - const user = users[2]; - const userAccount = user.accounts.get(USER_ACCOUNT); - - // Note: tokens are now going to the B ATA of the external wallet they picked - const tokenBefore = await getTokenBalance(bankRunProvider, bAta); - - let tx = new Transaction().add( - await settleEmissionsIx(user.mrgnBankrunProgram, { - marginfiAccount: userAccount, - bank: validators[0].bank, - }), - await withdrawEmissionsPermissionlessIx(user.mrgnBankrunProgram, { - marginfiAccount: userAccount, - bank: validators[0].bank, - tokenAccount: bAta, - }) - ); - - tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); - tx.sign(wallet.payer); // Note: not the user! - await banksClient.processTransaction(tx); - - const tokenAfter = await getTokenBalance(bankRunProvider, bAta); - const diff = tokenAfter - tokenBefore; - user2PermissionlessClaim = diff; - - if (verbose) { - console.log("User 2 claimed token B emissions permissionlessly"); - console.log( - "before: " + tokenBefore + " after: " + tokenAfter + " diff " + diff - ); - } - }); - - it("(user 1) can still claim with permission - still gets proportional fair share", async () => { - const user = users[1]; - const userAccount = user.accounts.get(USER_ACCOUNT); - - const tokenBefore = await getTokenBalance( - bankRunProvider, - user.tokenBAccount - ); - - let tx = new Transaction().add( - await settleEmissionsIx(user.mrgnBankrunProgram, { - marginfiAccount: userAccount, - bank: validators[0].bank, - }), - await withdrawEmissionsIx(user.mrgnBankrunProgram, { - marginfiAccount: userAccount, - bank: validators[0].bank, - tokenAccount: user.tokenBAccount, - }) - ); - - tx.recentBlockhash = await getBankrunBlockhash(bankrunContext); - tx.sign(user.wallet); - await banksClient.processTransaction(tx); - - const tokenAfter = await getTokenBalance( - bankRunProvider, - user.tokenBAccount - ); - const diff = tokenAfter - tokenBefore; - const netClaimed = user2PermissionlessClaim + diff; - const claimedShareActual = (diff / netClaimed) * 100; - assert.isAtLeast(diff, 100); - - const expectedShare = (userDeposits[1] / netDeposits) * 100; - - if (verbose) { - console.log("User 1 claimed token B emissions"); - console.log( - "User expected share of emissions: " + expectedShare.toFixed(2) + "%" - ); - console.log( - "before: " + tokenBefore + " after: " + tokenAfter + " diff " + diff - ); - console.log("actual claim share: " + claimedShareActual.toFixed(2) + "%"); - } - - const expectedUser1Claim = - user2PermissionlessClaim * (userDeposits[1] / userDeposits[2]); - // User 1 gets ~ - assert.approximately( - diff, - expectedUser1Claim, - expectedUser1Claim * 0.01, - "User 1's claim is not the expected proportion of user 2's claim" - ); - }); -}); diff --git a/tests/utils/genericTests.ts b/tests/utils/genericTests.ts deleted file mode 100644 index 64b1b9c6b..000000000 --- a/tests/utils/genericTests.ts +++ /dev/null @@ -1,275 +0,0 @@ -import type { AnchorProvider } from "@coral-xyz/anchor"; -import { WrappedI80F48, wrappedI80F48toBigNumber } from "@mrgnlabs/mrgn-common"; -import type { RawAccount } from "@solana/spl-token"; -import { AccountLayout } from "@solana/spl-token"; -import { PublicKey } from "@solana/web3.js"; -import { BankrunProvider } from "anchor-bankrun"; -import BigNumber from "bignumber.js"; -import BN from "bn.js"; -import { assert } from "chai"; -import { BanksTransactionResultWithMeta } from "solana-bankrun"; - -/** - * Shorthand for `assert.equal(a.toString(), b.toString())` - * @param a - * @param b - */ -export const assertKeysEqual = (a: PublicKey, b: PublicKey) => { - assert.equal(a.toString(), b.toString()); -}; - -/** - * Shorthand for `assert.equal(a.toString(), PublicKey.default.toString())` - * @param a - */ -export const assertKeyDefault = (a: PublicKey) => { - assert.equal(a.toString(), PublicKey.default.toString()); -}; - -/** - * Shorthand for `assert.equal(a.toString(), b.toString())` - * @param a - a BN - * @param b - a BN or number - */ -export const assertBNEqual = (a: BN, b: BN | number) => { - if (typeof b === "number") { - b = new BN(b); - } - assert.equal(a.toString(), b.toString()); -}; - -/** - * Shorthand to convert I80F48 to a string and compare against a BN, number, or other WrappedI80F48 - * - * Generally, use `assertI80F48Approx` instead if the expected value is not a whole number or zero. - * @param a - * @param b - */ -export const assertI80F48Equal = ( - a: WrappedI80F48, - b: WrappedI80F48 | BN | number -) => { - const bigA = wrappedI80F48toBigNumber(a); - let bigB: BigNumber; - - if (typeof b === "number") { - bigB = new BigNumber(b); - } else if (b instanceof BN) { - bigB = new BigNumber(b.toString()); - } else if (isWrappedI80F48(b)) { - bigB = wrappedI80F48toBigNumber(b); - } else { - throw new Error("Unsupported type for comparison"); - } - - assert.equal(bigA.toString(), bigB.toString()); -}; - -/** - * Shorthand to convert I80F48 to a BigNumber and compare against a BN, number, or other WrappedI80F48 within a given tolerance - * @param a - * @param b - * @param tolerance - the allowed difference between the two values (default .000001) - */ -export const assertI80F48Approx = ( - a: WrappedI80F48, - b: WrappedI80F48 | BN | number, - tolerance: number = 0.000001 -) => { - const bigA = wrappedI80F48toBigNumber(a); - let bigB: BigNumber; - - if (typeof b === "number") { - bigB = new BigNumber(b); - } else if (b instanceof BN) { - bigB = new BigNumber(b.toString()); - } else if (isWrappedI80F48(b)) { - bigB = wrappedI80F48toBigNumber(b); - } else { - throw new Error("Unsupported type for comparison"); - } - - const diff = bigA.minus(bigB).abs(); - const allowedDifference = new BigNumber(tolerance); - - if (diff.isGreaterThan(allowedDifference)) { - throw new Error( - `Values are not approximately equal. A: ${bigA.toString()} B: ${bigB.toString()} - Difference: ${diff.toString()}, Allowed Tolerance: ${tolerance}` - ); - } -}; - -/** - * Type guard to check if a value is WrappedI80F48 - * @param value - * @returns - */ -function isWrappedI80F48(value: any): value is WrappedI80F48 { - return value && typeof value === "object" && Array.isArray(value.value); -} - -/** - * Shorthand for `assert.approximately(a, b, tolerance)` for two BNs. Safe from Integer overflow - * @param a - * @param b - * @param tolerance - */ -export const assertBNApproximately = ( - a: BN, - b: BN | number, - tolerance: BN | number -) => { - const aB = BigInt(a.toString()); - const bB = BigInt(b.toString()); - const toleranceB = BigInt(tolerance.toString()); - const diff = aB >= bB ? aB - bB : bB - aB; - - if (diff > toleranceB) { - throw new Error( - `Values are not approximately equal. A: ${aB.toString()}, B: ${bB.toString()}, ` + - `Difference: ${diff.toString()}, Allowed Tolerance: ${toleranceB.toString()}` - ); - } -}; - -/** - * Returns the balance of a token account, in whatever currency the account is in. - * @param provider - * @param account - * @returns - */ -export const getTokenBalance = async ( - provider: AnchorProvider | BankrunProvider, - account: PublicKey -) => { - const accountInfo = await provider.connection.getAccountInfo(account); - if (!accountInfo) { - console.error("Tried to balance of acc that doesn't exist"); - return 0; - } - const data: RawAccount = AccountLayout.decode(accountInfo.data); - if (data === undefined || data.amount === undefined) { - return 0; - } - const amount: BigInt = data.amount; - return Number(amount); -}; - -/** - * Waits until the given time - * @param time - in seconds (e.g. Date.now()/1000) - * @param silenceWarning - (optional) set to true to silence the warning if the time is in the past - */ -export const waitUntil = async ( - time: number, - silenceWarning: boolean = false -) => { - const now = Date.now() / 1000; - if (time > now + 500) { - console.error("Tried to wait a very long time, aborted"); - return; - } - if (now > time) { - if (!silenceWarning) { - console.error( - "Tried to wait for a time that's in the past. You probably need to adjust test timings." - ); - console.error("now: " + now + " and tried waiting until: " + time); - } - return new Promise((r) => setTimeout(r, 1)); //waits 1 ms - } - const toWait = Math.ceil(time - now) * 1000; - await new Promise((r) => setTimeout(r, toWait)); -}; - -/** - * Assert a bankrun Tx executed with `tryProcessTransaction` failed with the expected error code. - * Throws an error if the tx succeeded or a different error was found. - * @param result - * @param expectedErrorCode - In hex, as you see in Anchor logs, e.g. for error 6047 pass `0x179f` - */ -export const assertBankrunTxFailed = ( - result: BanksTransactionResultWithMeta, - expectedErrorCode: string -) => { - expectedErrorCode = expectedErrorCode.toLocaleLowerCase(); - assert(result.meta.logMessages.length > 0); - assert(result.result, "TX succeeded when it should have failed"); - const lastLog = result.meta.logMessages.pop(); - assert( - lastLog.includes(expectedErrorCode), - "\nExpected code " + expectedErrorCode + " but got: " + lastLog - ); -}; - -/** - * Typically used when catching the result of a tx sendAndConfirm. Asserts that the logs contain the - * given error code. - * @param logs - * @param errorCode - * @returns - */ -export function logContainsError(logs: string[], errorCode: string): boolean { - if (!logs || !Array.isArray(logs)) { - throw new Error("Invalid logs provided for verification."); - } - - return logs.some((log) => log.includes(`Error Code: ${errorCode}`)); -} - -/** - * Asserts that the contained transaction failed with the given error code. Fails if the tx did not - * fail or fails with the wrong error code. - * - * Invalid if not awaited. MAKE SURE TO CALL WITH AWAIT. - * @param transactionFn - * @param errorCode - */ -export async function expectFailedTxWithError( - transactionFn: () => Promise, - errorCode: string -): Promise { - let failed = false; - try { - await transactionFn(); - } catch (err) { - assert.ok( - logContainsError(err.logs, errorCode), - `Expected error code '${errorCode}' was not found in logs. Log dump: ${err.logs}` - ); - failed = true; - } - assert.ok(failed, "Transaction succeeded when it should have failed"); -} - -/** - * Asserts that the contained transaction failed with the given error code. Fails if the tx did not - * fail or fails without containing the given string - * - * Invalid if not awaited. MAKE SURE TO CALL WITH AWAIT. - * - * Generally, use `expectFailedTxWithError` unless catching a generic error like a panic or - * signature violations. - * @param transactionFn - * @param expectedString - */ -export async function expectFailedTxWithMessage( - transactionFn: () => Promise, - expectedString: string -): Promise { - let failed = false; - try { - await transactionFn(); - console.log("tx exec"); - } catch (err) { - let errString = err.toString(); - assert.ok( - errString.includes(expectedString), - `Expected error code '${expectedString}' was not found in logs. Log dump: ${err} or ${err.logs}` - ); - - failed = true; - } - assert.ok(failed, "Transaction succeeded when it should have failed"); -} diff --git a/tests/utils/group-instructions.ts b/tests/utils/group-instructions.ts deleted file mode 100644 index 8aad81891..000000000 --- a/tests/utils/group-instructions.ts +++ /dev/null @@ -1,524 +0,0 @@ -import { BN, Program } from "@coral-xyz/anchor"; -import { AccountMeta, PublicKey, SYSVAR_RENT_PUBKEY } from "@solana/web3.js"; -import { Marginfi } from "../../target/types/marginfi"; -import { - deriveBankWithSeed, - deriveFeeVault, - deriveFeeVaultAuthority, - deriveInsuranceVault, - deriveInsuranceVaultAuthority, - deriveLiquidityVault, - deriveLiquidityVaultAuthority, - deriveStakedSettings, -} from "./pdas"; -import { - BankConfig, - BankConfigOptWithAssetTag, - SINGLE_POOL_PROGRAM_ID, - StakedSettingsConfig, - StakedSettingsEdit, -} from "./types"; -import { TOKEN_PROGRAM_ID } from "@solana/spl-token"; -import { BankConfigOptRaw } from "@mrgnlabs/marginfi-client-v2"; -import { WrappedI80F48 } from "@mrgnlabs/mrgn-common"; - -export const MAX_ORACLE_KEYS = 5; - -/** - * * admin/feePayer - must sign - * * bank - use a fresh keypair, must sign - */ -export type AddBankArgs = { - marginfiGroup: PublicKey; - feePayer: PublicKey; - bankMint: PublicKey; - bank: PublicKey; - config: BankConfig; -}; - -export const addBank = (program: Program, args: AddBankArgs) => { - const ix = program.methods - .lendingPoolAddBank({ - assetWeightInit: args.config.assetWeightInit, - assetWeightMaint: args.config.assetWeightMaint, - liabilityWeightInit: args.config.liabilityWeightInit, - liabilityWeightMaint: args.config.liabilityWeightMain, - depositLimit: args.config.depositLimit, - interestRateConfig: args.config.interestRateConfig, - operationalState: args.config.operationalState, - borrowLimit: args.config.borrowLimit, - riskTier: args.config.riskTier, - assetTag: args.config.assetTag, - pad0: [0, 0, 0, 0, 0, 0], - totalAssetValueInitLimit: args.config.totalAssetValueInitLimit, - oracleMaxAge: args.config.oracleMaxAge, - }) - .accounts({ - marginfiGroup: args.marginfiGroup, - // admin: args.admin, // implied from group - feePayer: args.feePayer, - bankMint: args.bankMint, - bank: args.bank, - // globalFeeState: deriveGlobalFeeState(id), - // globalFeeWallet: args.globalFeeWallet, - // liquidityVaultAuthority = deriveLiquidityVaultAuthority(id, bank); - // liquidityVault = deriveLiquidityVault(id, bank); - // insuranceVaultAuthority = deriveInsuranceVaultAuthority(id, bank); - // insuranceVault = deriveInsuranceVault(id, bank); - // feeVaultAuthority = deriveFeeVaultAuthority(id, bank); - // feeVault = deriveFeeVault(id, bank); - // rent = SYSVAR_RENT_PUBKEY - tokenProgram: TOKEN_PROGRAM_ID, - // systemProgram: SystemProgram.programId, - }) - .instruction(); - - return ix; -}; - -/** - * * admin/feePayer - must sign - * * bank - use a fresh keypair, must sign - */ -export type AddBankWithSeedArgs = { - marginfiGroup: PublicKey; - feePayer: PublicKey; - bankMint: PublicKey; - bank: PublicKey; - config: BankConfig; - seed?: BN; -}; - -export const addBankWithSeed = ( - program: Program, - args: AddBankWithSeedArgs -) => { - const ix = program.methods - .lendingPoolAddBankWithSeed( - { - assetWeightInit: args.config.assetWeightInit, - assetWeightMaint: args.config.assetWeightMaint, - liabilityWeightInit: args.config.liabilityWeightInit, - liabilityWeightMaint: args.config.liabilityWeightMain, - depositLimit: args.config.depositLimit, - interestRateConfig: args.config.interestRateConfig, - operationalState: args.config.operationalState, - borrowLimit: args.config.borrowLimit, - riskTier: args.config.riskTier, - assetTag: args.config.assetTag, - pad0: [0, 0, 0, 0, 0, 0], - totalAssetValueInitLimit: args.config.totalAssetValueInitLimit, - oracleMaxAge: args.config.oracleMaxAge, - }, - args.seed ?? new BN(0) - ) - .accounts({ - marginfiGroup: args.marginfiGroup, - // admin: args.admin, // implied from group - feePayer: args.feePayer, - bankMint: args.bankMint, - // bank: args.bank, // derived from seed - // globalFeeState: deriveGlobalFeeState(id), - // globalFeeWallet: args.globalFeeWallet, - // liquidityVaultAuthority = deriveLiquidityVaultAuthority(id, bank); - // liquidityVault = deriveLiquidityVault(id, bank); - // insuranceVaultAuthority = deriveInsuranceVaultAuthority(id, bank); - // insuranceVault = deriveInsuranceVault(id, bank); - // feeVaultAuthority = deriveFeeVaultAuthority(id, bank); - // feeVault = deriveFeeVault(id, bank); - // rent = SYSVAR_RENT_PUBKEY - tokenProgram: TOKEN_PROGRAM_ID, - // systemProgram: SystemProgram.programId, - }) - .instruction(); - - return ix; -}; - -/** - * newAdmin - (Optional) pass null to keep current admin - * marginfiGroup's admin - must sign - * isArena - default false - */ -export type GroupConfigureArgs = { - newAdmin?: PublicKey | null; // optional; pass null or leave undefined to keep current admin - marginfiGroup: PublicKey; - isArena?: boolean; // optional; defaults to false if not provided -}; - -export const groupConfigure = async ( - program: Program, - args: GroupConfigureArgs -) => { - const isArena = args.isArena ?? false; - let newAdmin = args.newAdmin; - if (newAdmin == null) { - const group = await program.account.marginfiGroup.fetch(args.marginfiGroup); - newAdmin = group.admin; - } - const ix = program.methods - .marginfiGroupConfigure(newAdmin, isArena) - .accounts({ - marginfiGroup: args.marginfiGroup, - // admin: // implied from group - }) - .instruction(); - - return ix; -}; - -export type GroupInitializeArgs = { - marginfiGroup: PublicKey; - admin: PublicKey; - isArena?: boolean; // optional; defaults to false if not provided -}; - -export const groupInitialize = ( - program: Program, - args: GroupInitializeArgs -) => { - const isArena = args.isArena ?? false; - const ix = program.methods - .marginfiGroupInitialize(isArena) - .accounts({ - marginfiGroup: args.marginfiGroup, - // feeState: deriveGlobalFeeState(id), - admin: args.admin, - // systemProgram: SystemProgram.programId, - }) - .instruction(); - - return ix; -}; - -export type ConfigureBankArgs = { - bank: PublicKey; - bankConfigOpt: BankConfigOptWithAssetTag; // BankConfigOptRaw + assetTag -}; - -export const configureBank = ( - program: Program, - args: ConfigureBankArgs -) => { - const ix = program.methods - .lendingPoolConfigureBank(args.bankConfigOpt) - .accounts({ - bank: args.bank, - }) - .instruction(); - return ix; -}; - -export type ConfigureBankOracleArgs = { - bank: PublicKey; - type: number; - oracle: PublicKey; - /** For Pyth Pull, pass the feed. For all others, ignore */ - feed?: PublicKey; -}; - -export const configureBankOracle = ( - program: Program, - args: ConfigureBankOracleArgs -) => { - const metaKey = args.feed ?? args.oracle; - const oracleMeta: AccountMeta = { - pubkey: metaKey, - isSigner: false, - isWritable: false, - }; - - const ix = program.methods - .lendingPoolConfigureBankOracle(args.type, args.oracle) - .accounts({ - bank: args.bank, - }) - .remainingAccounts([oracleMeta]) - .instruction(); - return ix; -}; - -export type SetupEmissionsArgs = { - bank: PublicKey; - emissionsMint: PublicKey; - fundingAccount: PublicKey; - emissionsFlags: BN; - emissionsRate: BN; - totalEmissions: BN; -}; - -export const setupEmissions = ( - program: Program, - args: SetupEmissionsArgs -) => { - const ix = program.methods - .lendingPoolSetupEmissions( - args.emissionsFlags, - args.emissionsRate, - args.totalEmissions - ) - .accounts({ - bank: args.bank, - emissionsMint: args.emissionsMint, - // emissionsAuth: deriveEmissionsAuth() - // emissionsTokenAccount: deriveEmissionsTokenAccount() - emissionsFundingAccount: args.fundingAccount, - tokenProgram: TOKEN_PROGRAM_ID, - // systemProgram: SystemProgram.programId, - }) - .instruction(); - return ix; -}; - -export type UpdateEmissionsArgs = { - bank: PublicKey; - emissionsMint: PublicKey; - fundingAccount: PublicKey; - emissionsFlags: BN | null; - emissionsRate: BN | null; - additionalEmissions: BN | null; -}; - -export const updateEmissions = ( - program: Program, - args: UpdateEmissionsArgs -) => { - const ix = program.methods - .lendingPoolUpdateEmissionsParameters( - args.emissionsFlags, - args.emissionsRate, - args.additionalEmissions - ) - .accounts({ - bank: args.bank, - emissionsMint: args.emissionsMint, - // emissionsAuth: deriveEmissionsAuth() - // emissionsTokenAccount: deriveEmissionsTokenAccount() - emissionsFundingAccount: args.fundingAccount, - tokenProgram: TOKEN_PROGRAM_ID, - // systemProgram: SystemProgram.programId, - }) - .instruction(); - return ix; -}; - -// ************* Below this line, not yet included in package **************** - -export type InitGlobalFeeStateArgs = { - payer: PublicKey; - admin: PublicKey; - wallet: PublicKey; - bankInitFlatSolFee: number; - programFeeFixed: WrappedI80F48; - programFeeRate: WrappedI80F48; -}; - -export const initGlobalFeeState = ( - program: Program, - args: InitGlobalFeeStateArgs -) => { - const ix = program.methods - .initGlobalFeeState( - args.admin, - args.wallet, - args.bankInitFlatSolFee, - args.programFeeFixed, - args.programFeeRate - ) - .accounts({ - payer: args.payer, - // feeState = deriveGlobalFeeState(id), - // rent = SYSVAR_RENT_PUBKEY, - // systemProgram: SystemProgram.programId, - }) - .instruction(); - - return ix; -}; - -export type EditGlobalFeeStateArgs = { - admin: PublicKey; - wallet: PublicKey; - bankInitFlatSolFee: number; - programFeeFixed: WrappedI80F48; - programFeeRate: WrappedI80F48; - newAdmin?: PublicKey; -}; - -// TODO add test for this -export const editGlobalFeeState = ( - program: Program, - args: EditGlobalFeeStateArgs -) => { - const ix = program.methods - .editGlobalFeeState( - args.newAdmin ? args.newAdmin : args.admin, - args.wallet, - args.bankInitFlatSolFee, - args.programFeeFixed, - args.programFeeRate - ) - .accounts({ - globalFeeAdmin: args.admin, - // feeState = deriveGlobalFeeState(id), - }) - .instruction(); - - return ix; -}; - -// TODO propagate fee state and test - -export type InitStakedSettingsArgs = { - group: PublicKey; - feePayer: PublicKey; - settings: StakedSettingsConfig; -}; - -export const initStakedSettings = ( - program: Program, - args: InitStakedSettingsArgs -) => { - const ix = program.methods - .initStakedSettings(args.settings) - .accounts({ - marginfiGroup: args.group, - // admin: args.admin, // implied from group - feePayer: args.feePayer, - // staked_settings: deriveStakedSettings() - // rent = SYSVAR_RENT_PUBKEY, - // systemProgram: SystemProgram.programId, - }) - .instruction(); - - return ix; -}; - -export type EditStakedSettingsArgs = { - settingsKey: PublicKey; - settings: StakedSettingsEdit; -}; - -export const editStakedSettings = ( - program: Program, - args: EditStakedSettingsArgs -) => { - const ix = program.methods - .editStakedSettings(args.settings) - .accounts({ - // marginfiGroup: args.group, // implied from stakedSettings - // admin: args.admin, // implied from group - stakedSettings: args.settingsKey, - // rent = SYSVAR_RENT_PUBKEY, - // systemProgram: SystemProgram.programId, - }) - .instruction(); - - return ix; -}; - -/** - * oracle - required only if settings updates the oracle key - */ -export type PropagateStakedSettingsArgs = { - settings: PublicKey; - bank: PublicKey; - oracle?: PublicKey; -}; - -export const propagateStakedSettings = ( - program: Program, - args: PropagateStakedSettingsArgs -) => { - const remainingAccounts = args.oracle - ? [ - { - pubkey: args.oracle, - isSigner: false, - isWritable: false, - } as AccountMeta, - ] - : []; - - const ix = program.methods - .propagateStakedSettings() - .accounts({ - // marginfiGroup: args.group, // implied from stakedSettings - stakedSettings: args.settings, - bank: args.bank, - }) - .remainingAccounts(remainingAccounts) - .instruction(); - - return ix; -}; - -export type AddBankPermissionlessArgs = { - marginfiGroup: PublicKey; - feePayer: PublicKey; - pythOracle: PublicKey; - stakePool: PublicKey; - seed: BN; -}; - -export const addBankPermissionless = ( - program: Program, - args: AddBankPermissionlessArgs -) => { - const [settingsKey] = deriveStakedSettings( - program.programId, - args.marginfiGroup - ); - const [lstMint] = PublicKey.findProgramAddressSync( - [Buffer.from("mint"), args.stakePool.toBuffer()], - SINGLE_POOL_PROGRAM_ID - ); - const [solPool] = PublicKey.findProgramAddressSync( - [Buffer.from("stake"), args.stakePool.toBuffer()], - SINGLE_POOL_PROGRAM_ID - ); - - // Note: oracle and lst mint/pool are also passed in meta for validation - const oracleMeta: AccountMeta = { - pubkey: args.pythOracle, - isSigner: false, - isWritable: false, - }; - const lstMeta: AccountMeta = { - pubkey: lstMint, - isSigner: false, - isWritable: false, - }; - const solPoolMeta: AccountMeta = { - pubkey: solPool, - isSigner: false, - isWritable: false, - }; - - const ix = program.methods - .lendingPoolAddBankPermissionless(args.seed) - .accounts({ - // marginfiGroup: args.marginfiGroup, // implied from stakedSettings - stakedSettings: settingsKey, - feePayer: args.feePayer, - bankMint: lstMint, - solPool: solPool, - stakePool: args.stakePool, - // bank: bankKey, // deriveBankWithSeed - // globalFeeState: deriveGlobalFeeState(id), - // globalFeeWallet: // implied from globalFeeState, - // liquidityVaultAuthority = deriveLiquidityVaultAuthority(id, bank); - // liquidityVault = deriveLiquidityVault(id, bank); - // insuranceVaultAuthority = deriveInsuranceVaultAuthority(id, bank); - // insuranceVault = deriveInsuranceVault(id, bank); - // feeVaultAuthority = deriveFeeVaultAuthority(id, bank); - // feeVault = deriveFeeVault(id, bank); - // rent = SYSVAR_RENT_PUBKEY - tokenProgram: TOKEN_PROGRAM_ID, - // systemProgram: SystemProgram.programId, - }) - .remainingAccounts([oracleMeta, lstMeta, solPoolMeta]) - .instruction(); - - return ix; -}; diff --git a/tests/utils/mocks.ts b/tests/utils/mocks.ts deleted file mode 100644 index 3b61c0f34..000000000 --- a/tests/utils/mocks.ts +++ /dev/null @@ -1,423 +0,0 @@ -import { AnchorProvider, BN, Program, Wallet } from "@coral-xyz/anchor"; -import { - createAssociatedTokenAccountInstruction, - createInitializeMintInstruction, - getAssociatedTokenAddressSync, - MintLayout, - TOKEN_PROGRAM_ID, -} from "@solana/spl-token"; -import type { Connection, TransactionInstruction } from "@solana/web3.js"; -import { - Keypair, - LAMPORTS_PER_SOL, - PublicKey, - SystemProgram, - Transaction, -} from "@solana/web3.js"; -import { Marginfi } from "../../target/types/marginfi"; -import { Mocks } from "../../target/types/mocks"; - -export type Ecosystem = { - /** A generic wsol mint with 9 decimals (same as native) */ - wsolMint: Keypair; - /** A generic spl token mint */ - tokenAMint: Keypair; - /** A generic spl token mint */ - tokenBMint: Keypair; - /** A generic spl token mint like USDC (6 decimals) */ - usdcMint: Keypair; - /** A generic LST-like mint (like wsol, 9 decimals) */ - lstAlphaMint: Keypair; - /** 9 */ - wsolDecimals: number; - /** Decimals for token A (default 8) */ - tokenADecimals: number; - /** Decimals for token B (default 6)*/ - tokenBDecimals: number; - /** 6 */ - usdcDecimals: number; - /** Decimals for lst alpha (default 9)*/ - lstAlphaDecimals: number; -}; - -/** - * Random keypairs for all mints. - * - * 6 Decimals for usdc. 9 decimals for sol. 8 decimals to token A, 6 for token B - * @returns - */ -export const getGenericEcosystem = () => { - const ecosystem: Ecosystem = { - wsolMint: Keypair.generate(), - tokenAMint: Keypair.generate(), - tokenBMint: Keypair.generate(), - usdcMint: Keypair.generate(), - lstAlphaMint: Keypair.generate(), - wsolDecimals: 9, - tokenADecimals: 8, - tokenBDecimals: 6, - usdcDecimals: 6, - lstAlphaDecimals: 9, - }; - return ecosystem; -}; - -/** - * Print ecosystem info to console - * @param ecosystem - */ -export const echoEcosystemInfo = ( - ecosystem: Ecosystem, - { - skipWsol = false, - skipUsdc = false, - skipA = false, - skipB = false, - skipAlpha = false, - } -) => { - if (!skipWsol) { - console.log("wsol mint:........... " + ecosystem.wsolMint.publicKey); - console.log(" wsol decimals...... " + ecosystem.wsolDecimals); - } - if (!skipUsdc) { - console.log("usdc mint:........... " + ecosystem.usdcMint.publicKey); - console.log(" usdc decimals:..... " + ecosystem.usdcDecimals); - } - if (!skipA) { - console.log("token a mint:........ " + ecosystem.tokenAMint.publicKey); - console.log(" token a decimals:.. " + ecosystem.tokenADecimals); - } - if (!skipB) { - console.log("token b mint:........ " + ecosystem.tokenBMint.publicKey); - console.log(" token b decimals:.. " + ecosystem.tokenBDecimals); - } - if (!skipAlpha) { - console.log("lst alpha mint:...... " + ecosystem.lstAlphaMint.publicKey); - console.log(" lst alpha decimals: " + ecosystem.lstAlphaDecimals); - } -}; - -/** - * A typical user, with a wallet, ATAs for mock tokens, and a program to sign/send txes with. - */ -export type MockUser = { - wallet: Keypair; - /** Users's ATA for wsol*/ - wsolAccount: PublicKey; - /** Users's ATA for token A */ - tokenAAccount: PublicKey; - /** Users's ATA for token B */ - tokenBAccount: PublicKey; - /** Users's ATA for USDC */ - usdcAccount: PublicKey; - /** Users's ATA for LST Alpha */ - lstAlphaAccount: PublicKey; - /** A program that uses the user's wallet */ - mrgnProgram: Program | undefined; - /** A bankrun program that uses the user's wallet */ - mrgnBankrunProgram: Program | undefined; - /** A map to store arbitrary accounts related to the user using a string key */ - accounts: Map; -}; - -/** in mockUser.accounts, key used to get/set the users's account for group 0 */ -export const USER_ACCOUNT: string = "g0_acc"; -/** in mockUser.accounts, key used to get/set the users's LST ATA for validator 0 */ -export const LST_ATA = "v0_lstAta"; -/** in mockUser.accounts, key used to get/set the users's LST stake account for validator 0 */ -export const STAKE_ACC = "v0_stakeAcc"; - -/** - * Options to skip various parts of mock user setup - */ -export interface SetupTestUserOptions { - marginProgram: Program; - /** Force the mock user to use this keypair */ - forceWallet: Keypair; - wsolMint: PublicKey; - tokenAMint: PublicKey; - tokenBMint: PublicKey; - usdcMint: PublicKey; - lstAlphaMint: PublicKey; -} - -/** - * Creates and funds a user by transfering some SOL from a given wallet. - * - * Opens ATA for the user on all ecosystem mints - * - * Initializes a mock program to sign transactions as the user - * @param provider - * @param wallet - provider wallet, pays init and tx fees - * @param options - skip parts of setup or force a keypair as the wallet - * @returns - */ -export const setupTestUser = async ( - provider: AnchorProvider, - wallet: Keypair, - options?: SetupTestUserOptions -) => { - // Creates a user wallet with some SOL in it to pay tx fees - const userWalletKeypair = options.forceWallet || Keypair.generate(); - const userWallet = userWalletKeypair.publicKey; - const tx: Transaction = new Transaction(); - tx.add( - SystemProgram.transfer({ - fromPubkey: wallet.publicKey, - toPubkey: userWallet, - lamports: 1000 * LAMPORTS_PER_SOL, - }) - ); - - let wsolAccount: PublicKey = PublicKey.default; - if (options.wsolMint) { - wsolAccount = getAssociatedTokenAddressSync(options.wsolMint, userWallet); - tx.add( - createAssociatedTokenAccountInstruction( - wallet.publicKey, - wsolAccount, - userWallet, - options.wsolMint - ) - ); - } - - let usdcAccount: PublicKey = PublicKey.default; - if (options.usdcMint) { - usdcAccount = getAssociatedTokenAddressSync(options.usdcMint, userWallet); - tx.add( - createAssociatedTokenAccountInstruction( - wallet.publicKey, - usdcAccount, - userWallet, - options.usdcMint - ) - ); - } - - let tokenAAccount: PublicKey = PublicKey.default; - if (options.tokenAMint) { - tokenAAccount = getAssociatedTokenAddressSync( - options.tokenAMint, - userWallet - ); - tx.add( - createAssociatedTokenAccountInstruction( - wallet.publicKey, - tokenAAccount, - userWallet, - options.tokenAMint - ) - ); - } - - let tokenBAccount: PublicKey = PublicKey.default; - if (options.tokenBMint) { - tokenBAccount = getAssociatedTokenAddressSync( - options.tokenBMint, - userWallet - ); - tx.add( - createAssociatedTokenAccountInstruction( - wallet.publicKey, - tokenBAccount, - userWallet, - options.tokenBMint - ) - ); - } - - let alphaAccount: PublicKey = PublicKey.default; - if (options.lstAlphaMint) { - alphaAccount = getAssociatedTokenAddressSync( - options.lstAlphaMint, - userWallet - ); - tx.add( - createAssociatedTokenAccountInstruction( - wallet.publicKey, - alphaAccount, - userWallet, - options.lstAlphaMint - ) - ); - } - - await provider.sendAndConfirm(tx, [wallet]); - - const user: MockUser = { - wallet: userWalletKeypair, - wsolAccount: wsolAccount, - tokenAAccount: tokenAAccount, - tokenBAccount: tokenBAccount, - usdcAccount: usdcAccount, - lstAlphaAccount: alphaAccount, - - mrgnProgram: options.marginProgram - ? getUserMarginfiProgram(options.marginProgram, userWalletKeypair) - : undefined, - mrgnBankrunProgram: undefined, - accounts: new Map(), - }; - return user; -}; - -/** - * Generates a mock program that can sign transactions as the user's wallet - * @param program - * @param userWallet - * @returns - */ -export const getUserMarginfiProgram = ( - program: Program, - userWallet: Keypair | Wallet -) => { - const wallet = - userWallet instanceof Keypair ? new Wallet(userWallet) : userWallet; - const provider = new AnchorProvider(program.provider.connection, wallet, {}); - const userProgram = new Program(program.idl, provider); - return userProgram; -}; - -/** - * Ixes to create a mint, the payer gains the Mint Tokens/Freeze authority - * @param payer - pays account init fees, must sign, gains mint/freeze authority - * @param provider - * @param decimals - * @param mintKeypair - (optional) generates random keypair if not provided, must sign - * @param lamps - (optional) lamports to pay for created acc, fetches minimum for Mint exemption if - * not provided - * @returns ixes, and keypair of new mint - */ -export const createSimpleMint = async ( - payer: PublicKey, - connection: Connection, - decimals: number, - mintKeypair?: Keypair, - lamps?: number -) => { - const mint = mintKeypair ? mintKeypair : Keypair.generate(); - const ixes: TransactionInstruction[] = []; - const lamports = lamps - ? lamps - : await connection.getMinimumBalanceForRentExemption(MintLayout.span); - ixes.push( - SystemProgram.createAccount({ - fromPubkey: payer, - newAccountPubkey: mint.publicKey, - space: MintLayout.span, - lamports: lamports, - programId: TOKEN_PROGRAM_ID, - }) - ); - ixes.push( - createInitializeMintInstruction( - mint.publicKey, - decimals, - payer, - payer, - TOKEN_PROGRAM_ID - ) - ); - - return { ixes, mint }; -}; - -export type Oracles = { - wsolOracle: Keypair; - wsolPrice: number; - wsolDecimals: number; - usdcOracle: Keypair; - usdcPrice: number; - usdcDecimals: number; - tokenAOracle: Keypair; - tokenAPrice: number; - tokenADecimals: number; - tokenBOracle: Keypair; - tokenBPrice: number; - tokenBDecimals: number; - lstAlphaPrice: number; - lstAlphaDecimals: number; - /** By default, oracle conf is this times price */ - confidenceValue: number; - /** Same initial price/decimals as USDC, but different key. */ - fakeUsdc: PublicKey; - /** Pyth pull oracle price feed that uses a SOL-like price and SOL decimals */ - pythPullLst: Keypair; - /** the feed ID that pythPullLst oracle uses. */ - pythPullLstOracleFeed: Keypair; -}; - -/** - * Creates an account to store data arbitrary data. - * @param program - the mock program - * @param space - for account space and rent exemption - * @param wallet - pays tx fee - * @returns address of the newly created account - */ -export const createMockAccount = async ( - program: Program, - space: number, - wallet: Wallet -) => { - const newAccount = Keypair.generate(); - const createTx = new Transaction().add( - SystemProgram.createAccount({ - fromPubkey: wallet.publicKey, - newAccountPubkey: newAccount.publicKey, - programId: program.programId, - lamports: - await program.provider.connection.getMinimumBalanceForRentExemption( - space - ), - space, - }) - ); - - await program.provider.sendAndConfirm(createTx, [wallet.payer, newAccount]); - return newAccount; -}; - -/** - * Writes arbitrary bytes to a mock account - * @param program - the Mock program - * @param wallet - pays tx fee - * @param account - account to write into (create with `createMockAccount` first) - * @param offset - byte to start writing - * @param input - bytes to write - */ -export const storeMockAccount = async ( - program: Program, - wallet: Wallet, - account: Keypair, - offset: number, - input: Buffer -) => { - const tx = new Transaction().add( - await program.methods - .write(new BN(offset), input) - .accounts({ - target: account.publicKey, - }) - .instruction() - ); - await program.provider.sendAndConfirm(tx, [wallet.payer, account]); -}; - -export type Validator = { - node: PublicKey; - authorizedVoter: PublicKey; - authorizedWithdrawer: PublicKey; - voteAccount: PublicKey; - /** The spl stake pool itself, all PDAs derive from this key */ - splPool: PublicKey; - /** spl pool's mint for the LST (a PDA automatically created on init) */ - splMint: PublicKey; - /** spl pool's authority for LST management, a PDA with no data/lamports */ - splAuthority: PublicKey; - /** spl pool's stake account (a PDA automatically created on init, contains the SOL held by the pool) */ - splSolPool: PublicKey; - /** bank created for this validator's LST on the "main" group */ - bank: PublicKey; -}; diff --git a/tests/utils/pdas.ts b/tests/utils/pdas.ts deleted file mode 100644 index 3780dd11c..000000000 --- a/tests/utils/pdas.ts +++ /dev/null @@ -1,114 +0,0 @@ -import { BN } from "@coral-xyz/anchor"; -import { PublicKey } from "@solana/web3.js"; - -export const deriveLiquidityVaultAuthority = ( - programId: PublicKey, - bank: PublicKey -) => { - return PublicKey.findProgramAddressSync( - [Buffer.from("liquidity_vault_auth", "utf-8"), bank.toBuffer()], - programId - ); -}; - -export const deriveLiquidityVault = (programId: PublicKey, bank: PublicKey) => { - return PublicKey.findProgramAddressSync( - [Buffer.from("liquidity_vault", "utf-8"), bank.toBuffer()], - programId - ); -}; - -export const deriveInsuranceVaultAuthority = ( - programId: PublicKey, - bank: PublicKey -) => { - return PublicKey.findProgramAddressSync( - [Buffer.from("insurance_vault_auth", "utf-8"), bank.toBuffer()], - programId - ); -}; - -export const deriveInsuranceVault = (programId: PublicKey, bank: PublicKey) => { - return PublicKey.findProgramAddressSync( - [Buffer.from("insurance_vault", "utf-8"), bank.toBuffer()], - programId - ); -}; - -export const deriveFeeVaultAuthority = ( - programId: PublicKey, - bank: PublicKey -) => { - return PublicKey.findProgramAddressSync( - [Buffer.from("fee_vault_auth", "utf-8"), bank.toBuffer()], - programId - ); -}; - -export const deriveFeeVault = (programId: PublicKey, bank: PublicKey) => { - return PublicKey.findProgramAddressSync( - [Buffer.from("fee_vault", "utf-8"), bank.toBuffer()], - programId - ); -}; - -export const deriveEmissionsAuth = ( - programId: PublicKey, - bank: PublicKey, - mint: PublicKey -) => { - return PublicKey.findProgramAddressSync( - [ - Buffer.from("emissions_auth_seed", "utf-8"), - bank.toBuffer(), - mint.toBuffer(), - ], - programId - ); -}; - -export const deriveEmissionsTokenAccount = ( - programId: PublicKey, - bank: PublicKey, - mint: PublicKey -) => { - return PublicKey.findProgramAddressSync( - [ - Buffer.from("emissions_token_account_seed", "utf-8"), - bank.toBuffer(), - mint.toBuffer(), - ], - programId - ); -}; - -export const deriveBankWithSeed = ( - programId: PublicKey, - group: PublicKey, - bankMint: PublicKey, - seed: BN -) => { - return PublicKey.findProgramAddressSync( - [group.toBuffer(), bankMint.toBuffer(), seed.toArrayLike(Buffer, "le", 8)], - programId - ); -}; - -// ************* Below this line, not yet included in package **************** - -export const deriveGlobalFeeState = (programId: PublicKey) => { - return PublicKey.findProgramAddressSync( - [Buffer.from("feestate", "utf-8")], - programId - ); -}; - -export const deriveStakedSettings = ( - programId: PublicKey, - group: PublicKey -) => { - return PublicKey.findProgramAddressSync( - [Buffer.from("staked_settings", "utf-8"), group.toBuffer()], - programId - ); -}; diff --git a/tests/utils/pyth-pull-mocks.ts b/tests/utils/pyth-pull-mocks.ts deleted file mode 100644 index a31dff84c..000000000 --- a/tests/utils/pyth-pull-mocks.ts +++ /dev/null @@ -1,253 +0,0 @@ -import { Keypair, PublicKey } from "@solana/web3.js"; -import BN from "bn.js"; -import { createMockAccount, storeMockAccount } from "./mocks"; -import { Mocks } from "../../target/types/mocks"; -import { Program, Wallet, workspace } from "@coral-xyz/anchor"; -import { printBuffers } from "../rootHooks"; - -type VerificationLevel = - | { kind: "Partial"; num_signatures: number } - | { kind: "Full" }; - -interface PriceFeedMessage { - feed_id: PublicKey; // 32 bytes - price: BN; // i64 - conf: BN; // u64 - exponent: number; // i32 - publish_time: BN; // i64 (timestamp in seconds) - prev_publish_time: BN; // i64 - ema_price: BN; // i64 - ema_conf: BN; // u64 -} - -interface PriceUpdateV2 { - write_authority: PublicKey; // 32 bytes - verification_level: VerificationLevel; // 2 bytes (1 byte tag + 1 byte value/padding) - price_message: PriceFeedMessage; // 84 bytes - posted_slot: BN; // u64 (8 bytes) -} - -/** - * Decodes a base64 string (Borsh-serialized PriceUpdateV2) into the PriceUpdateV2 structure. - * - * Note: The first 8 bytes are assumed to be the Anchor account discriminator. - */ -function decodePriceUpdateV2(base64Data: string): PriceUpdateV2 { - const buffer = Buffer.from(base64Data, "base64"); - let offset = 0; - - // Skip the 8-byte discriminator. (34 241 35 99 157 126 244 205) - - // const discrim = buffer.subarray(offset, offset + 8); - // for (let i = 0; i < discrim.length; i++) { - // console.log(i + " " + discrim[i]); - // } - offset += 8; - - // 1. write_authority (32 bytes) - const write_authority = new PublicKey(buffer.subarray(offset, offset + 32)); - offset += 32; - - // 2. verification_level (2 bytes) - const verTag = buffer.readUInt8(offset); - offset += 1; - let verification_level: VerificationLevel; - if (verTag === 0) { - // "Partial" variant: the next byte is the num_signatures. - const num_signatures = buffer.readUInt8(offset); - offset += 1; - verification_level = { kind: "Partial", num_signatures }; - } else if (verTag === 1) { - // "Full" variant: the next byte is NOT SKIPPED, it is just one byte shorter! - // offset += 1; - verification_level = { kind: "Full" }; - } else { - throw new Error(`Unknown verification level tag: ${verTag}`); - } - - // 3. PriceFeedMessage - // - feed_id: 32 bytes - const feed_id = new PublicKey(buffer.subarray(offset, offset + 32)); - offset += 32; - // - price: i64 (8 bytes, little-endian) - const priceBN = new BN(buffer.subarray(offset, offset + 8), "le"); - offset += 8; - // - conf: u64 (8 bytes) - const conf = new BN(buffer.subarray(offset, offset + 8), "le"); - offset += 8; - // - exponent: i32 (4 bytes) - const exponent = buffer.readInt32LE(offset); - offset += 4; - // - publish_time: i64 (8 bytes) - const publishTimeBN = new BN(buffer.subarray(offset, offset + 8), "le"); - offset += 8; - // - prev_publish_time: i64 (8 bytes) - const prevPublishTimeBN = new BN(buffer.subarray(offset, offset + 8), "le"); - offset += 8; - // - ema_price: i64 (8 bytes) - const emaPriceBN = new BN(buffer.subarray(offset, offset + 8), "le"); - offset += 8; - // - ema_conf: u64 (8 bytes) - const ema_conf = new BN(buffer.subarray(offset, offset + 8), "le"); - offset += 8; - - const price_message: PriceFeedMessage = { - feed_id, - price: priceBN, - conf, - exponent, - publish_time: publishTimeBN, - prev_publish_time: prevPublishTimeBN, - ema_price: emaPriceBN, - ema_conf, - }; - - // 4. posted_slot: u64 (8 bytes) - const posted_slot = new BN(buffer.subarray(offset, offset + 8), "le"); - offset += 8; - - return { - write_authority, - verification_level, - price_message, - posted_slot, - }; -} - -/** - * Constructs a PriceUpdateV2 buffer (with discriminator) and writes it to the mock account. Pass `existingAccount` to update an existing feed. - * - * Layout: - * - 8 bytes: Discriminator (34, 241, 35, 99, 157, 126, 244, 205) - * - 32 bytes: write_authority (PublicKey) - * - 2 bytes: verification_level (Full => [1, 0]) - * - 32 bytes: feed_id (PublicKey) - * - 8 bytes: price (i64) - * - 8 bytes: conf (u64) - * - 4 bytes: exponent (i32) - * - 8 bytes: publish_time (i64) - * - 8 bytes: prev_publish_time (i64) - * - 8 bytes: ema_price (i64) - * - 8 bytes: ema_conf (u64) - * - 8 bytes: posted_slot (u64) - * - * Total: 134 bytes. - */ -export async function initOrUpdatePriceUpdateV2( - wallet: Wallet, - feed_id: PublicKey, - price: BN, - conf: BN, - ema_price: BN, - ema_conf: BN, - slot: BN, - exponent: number, - existingAccount?: Keypair -) { - const space = 134; - // Compute publish times. - const now = Math.floor(Date.now() / 1000); - const publish_time = new BN(now); - const prev_publish_time = new BN(now - 1); - // Allocate a 134-byte buffer. - const buf = Buffer.alloc(space); - let offset = 0; - // Write the 8-byte discriminator. - const discriminator = Buffer.from([34, 241, 35, 99, 157, 126, 244, 205]); - discriminator.copy(buf, offset); - offset += 8; - // Write the write_authority (32 bytes). - // Don't care about this key, use any value. - const writeAuthority = PublicKey.unique().toBuffer(); - writeAuthority.copy(buf, offset); - offset += 32; - // Write verification_level (2 bytes) - "Full": tag 1 and dummy 0. - buf.writeUInt8(1, offset); // tag for Full - offset += 1; - - // PriceFeedMessage: - // feed_id (32 bytes) - feed_id.toBuffer().copy(buf, offset); - offset += 32; - // price (i64, 8 bytes) - price.toArrayLike(Buffer, "le", 8).copy(buf, offset); - offset += 8; - // conf (u64, 8 bytes) - conf.toArrayLike(Buffer, "le", 8).copy(buf, offset); - offset += 8; - // exponent (i32, 4 bytes) - buf.writeInt32LE(exponent, offset); - offset += 4; - // publish_time (i64, 8 bytes) - publish_time.toArrayLike(Buffer, "le", 8).copy(buf, offset); - offset += 8; - // prev_publish_time (i64, 8 bytes) - prev_publish_time.toArrayLike(Buffer, "le", 8).copy(buf, offset); - offset += 8; - // ema_price (i64, 8 bytes) - ema_price.toArrayLike(Buffer, "le", 8).copy(buf, offset); - offset += 8; - // ema_conf (u64, 8 bytes) - ema_conf.toArrayLike(Buffer, "le", 8).copy(buf, offset); - offset += 8; - // posted_slot (u64, 8 bytes) - slot.toArrayLike(Buffer, "le", 8).copy(buf, offset); - offset += 8; - - if (printBuffers) { - console.log("PriceUpdateV2 Buffer (base64):", buf.toString("base64")); - } - - // Write the buffer to the mock account - const mockProgram: Program = workspace.Mocks; - if (existingAccount) { - await storeMockAccount(mockProgram, wallet, existingAccount, 0, buf); - return existingAccount; - } else { - let account = await createMockAccount(mockProgram, space, wallet); - await storeMockAccount(mockProgram, wallet, account, 0, buf); - return account; - } -} - -/** - * Price updates expect a `valid` feed, but don't actually read anything from it. If suffices to - * create an account of the correct size with "PYTH" as the owner. Pass this key as the `feed_id` to - * create price updates for an asset. This size of this account also doesn't matter, nor does the - * discrminator, etc. It can literally be any account owned by PYTH. - * @param wallet - * @returns - */ -export async function initBlankOracleFeed(wallet: Wallet) { - const space = 300; - const buf = Buffer.alloc(space); - - // Write the buffer to the mock account - const mockProgram: Program = workspace.Mocks; - let account = await createMockAccount(mockProgram, space, wallet); - await storeMockAccount(mockProgram, wallet, account, 0, buf); - - return account; -} - -// Sample usage (run with `ts-node pyth-pull-mocks.ts`) - -// const base64Data = "IvEjY51+9M0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQETiBzPres/ehv0qThWXLPfQ9hD11F3I/i9W1bPF+o7/QAW0L4oAAAAAMOd0AAAAAD3////vBLSZwAAAAC7EtJnAAAAAAAW0L4oAAAAAMOd0AAAAAAAAAAAAAAAAAA="; -// //const base64Data = -// // "IvEjY51+9M1gMUcENA3t3zcf1CRyFI8kjp0abRpesqw6zYt/1dayQwHvDYtv2izrpB2hXUCV0do5Kg0vjtDGx7wPTPrIwoC1bW2njwUFAAAARTozAQAAAAD4////1wN5ZwAAAADXA3lnAAAAAIRKaggFAAAAk1kTAQAAAAA8qpUSAAAAAAA="; -// const priceUpdate = decodePriceUpdateV2(base64Data); - -// // For debugging, output fields in a readable format. -// console.log("Write Authority (hex):", priceUpdate.write_authority.toString()); -// console.log("Verification Level:", priceUpdate.verification_level); -// console.log("Price Feed Message:", { -// feed_id: priceUpdate.price_message.feed_id.toString(), -// price: priceUpdate.price_message.price.toString(), -// conf: priceUpdate.price_message.conf.toString(), -// exponent: priceUpdate.price_message.exponent, -// publish_time: priceUpdate.price_message.publish_time.toString(), -// prev_publish_time: priceUpdate.price_message.prev_publish_time.toString(), -// ema_price: priceUpdate.price_message.ema_price.toString(), -// ema_conf: priceUpdate.price_message.ema_conf.toString(), -// }); -// console.log("Posted Slot:", priceUpdate.posted_slot.toString()); diff --git a/tests/utils/pyth_mocks.ts b/tests/utils/pyth_mocks.ts deleted file mode 100644 index 10e865a87..000000000 --- a/tests/utils/pyth_mocks.ts +++ /dev/null @@ -1,516 +0,0 @@ -// TODO the Price struct has changed a bit since this copy-pasta was generated some time ago, -// however price and ema price/expo/conf are in the same spot, so if those are all you need, there's -// no need to update (all modern changes are backwards compatible, new versions of Pyth on-chain -// will still deserialize the price data) - -// Adapated from PsyLend, Jet labs, etc -import { BN, Program, Wallet, workspace } from "@coral-xyz/anchor"; -import { Keypair, PublicKey } from "@solana/web3.js"; -import { Oracles, createMockAccount, storeMockAccount } from "./mocks"; -import { Mocks } from "../../target/types/mocks"; -import { - initBlankOracleFeed, - initOrUpdatePriceUpdateV2, -} from "./pyth-pull-mocks"; -/** Copied from `@pythnetwork/client": "^2.19.0"`, used as a discriminator */ -const Magic = 2712847316; - -/** - * As long as it's large enough, any size is fine. - */ -const PYTH_ACCOUNT_SIZE = 3312; - -const mockProgram: Program = workspace.Mocks; - -export interface Price { - version?: number; - type?: number; - size?: number; - priceType?: string; - exponent?: number; - currentSlot?: bigint; - validSlot?: bigint; - twap?: Ema; - productAccountKey?: PublicKey; - nextPriceAccountKey?: PublicKey; - aggregatePriceUpdaterAccountKey?: PublicKey; - aggregatePriceInfo?: PriceInfo; - priceComponents?: PriceComponent[]; -} - -export interface PriceInfo { - price?: bigint; - conf?: bigint; - status?: number; - corpAct?: number; - pubSlot?: bigint; -} - -export interface PriceComponent { - publisher?: PublicKey; - agg?: PriceInfo; - latest?: PriceInfo; -} - -export interface Product { - version?: number; - atype?: number; - size?: number; - priceAccount?: PublicKey; - attributes?: Record; -} - -export interface Ema { - valueComponent?: bigint; - numerator?: bigint; - denominator?: bigint; -} - -/** - * Creates a Pyth price account - * @param wallet - pays the TX fee - * @returns - */ -export const createPriceAccount = async (wallet: Wallet) => { - return createMockAccount(mockProgram, PYTH_ACCOUNT_SIZE, wallet); -}; - -/** - * Creates a Pyth product account - * @param wallet - pays the TX fee - * @returns - */ -export const createProductAccount = async (wallet: Wallet) => { - return createMockAccount(mockProgram, PYTH_ACCOUNT_SIZE, wallet); -}; - -/** - * Update a Pyth price account with new data - * @param account The account to update - * @param data The new data to place in the account - * @param wallet - pays tx fee - */ -export const updatePriceAccount = async ( - account: Keypair, - data: Price, - wallet: Wallet -) => { - const buf = Buffer.alloc(512); - const d = getPythPriceDataWithDefaults(data); - d.aggregatePriceInfo = getPythPriceInfoWithDefaults(d.aggregatePriceInfo); - d.twap = getPythEmaWithDefaults(d.twap); - - writePriceBuffer(buf, 0, d); - await storeMockAccount(mockProgram, wallet, account, 0, buf); -}; - -/** - * Update a Pyth product account with new data - * @param account The account to update - * @param data The new data to place in the account - * @param wallet - pays tx fee - */ -export const updateProductAccount = async ( - account: Keypair, - data: Product, - wallet: Wallet -) => { - const buf = Buffer.alloc(512); - const d = getProductWithDefaults(data); - - writeProductBuffer(buf, 0, d); - await storeMockAccount(mockProgram, wallet, account, 0, buf); -}; - -export const getPythPriceDataWithDefaults = ({ - version = 2, - type = 3, // AccountType::Price - size = PYTH_ACCOUNT_SIZE, - priceType = "price", - exponent = 0, - currentSlot = BigInt(0), - validSlot = BigInt(0), - twap = {}, - productAccountKey = PublicKey.default, - nextPriceAccountKey = PublicKey.default, - aggregatePriceUpdaterAccountKey = PublicKey.default, - aggregatePriceInfo = {}, - priceComponents = [], -}: Price) => { - return { - version, - type, - size, - priceType, - exponent, - currentSlot, - validSlot, - twap, - productAccountKey, - nextPriceAccountKey, - aggregatePriceUpdaterAccountKey, - aggregatePriceInfo, - priceComponents, - }; -}; - -export const getPythPriceInfoWithDefaults = ({ - price = BigInt(0), - conf = BigInt(0), - status = 1, // PriceStatus::Trading - corpAct = 0, // CorpAction::NoCorpAct - pubSlot = BigInt(Number.MAX_SAFE_INTEGER), // Pubslot has to be newer than current slot. -}: PriceInfo) => { - return { - price, - conf, - status, - corpAct, - pubSlot, - }; -}; - -export const getPythEmaWithDefaults = ({ - valueComponent = BigInt(0), - denominator = BigInt(0), - numerator = BigInt(0), -}: Ema) => { - return { - valueComponent, - denominator, - numerator, - }; -}; - -export const writePublicKeyBuffer = ( - buf: Buffer, - offset: number, - key: PublicKey -) => { - buf.write(key.toBuffer().toString("binary"), offset, "binary"); -}; - -export const writePriceInfoBuffer = ( - buf: Buffer, - offset: number, - info: PriceInfo -) => { - buf.writeBigInt64LE(info.price, offset + 0); - buf.writeBigUInt64LE(info.conf, offset + 8); - buf.writeUInt32LE(info.status, offset + 16); - buf.writeUInt32LE(info.corpAct, offset + 20); - buf.writeBigUInt64LE(info.pubSlot, offset + 24); -}; - -export const writePriceComponentBuffer = ( - buf: Buffer, - offset: number, - component: PriceComponent -) => { - component.publisher.toBuffer().copy(buf, offset); - writePriceInfoBuffer(buf, offset + 32, component.agg); - writePriceInfoBuffer(buf, offset + 64, component.latest); -}; - -export const writePriceBuffer = (buf: Buffer, offset: number, data: Price) => { - buf.writeUInt32LE(Magic, offset + 0); //magic - buf.writeUInt32LE(data.version, offset + 4); //ver - buf.writeUInt32LE(data.type, offset + 8); //type - buf.writeUInt32LE(data.size, offset + 12); //size - buf.writeUInt32LE(1, offset + 16); //price type - buf.writeInt32LE(data.exponent, offset + 20); //exp - buf.writeUInt32LE(data.priceComponents.length, offset + 24); //price comps - buf.writeBigUInt64LE(data.currentSlot, offset + 32); //curr slot - buf.writeBigUInt64LE(data.validSlot, offset + 40); //valid slot - buf.writeBigInt64LE(data.twap.valueComponent, offset + 48); //ema - buf.writeBigInt64LE(data.twap.numerator, offset + 56); //ema - buf.writeBigInt64LE(data.twap.denominator, offset + 64); //ema - writePublicKeyBuffer(buf, offset + 112, data.productAccountKey); - writePublicKeyBuffer(buf, offset + 144, data.nextPriceAccountKey); - writePublicKeyBuffer(buf, offset + 176, data.aggregatePriceUpdaterAccountKey); - - writePriceInfoBuffer(buf, 208, data.aggregatePriceInfo); - - let pos = offset + 240; - for (const component of data.priceComponents) { - writePriceComponentBuffer(buf, pos, component); - pos += 96; - } -}; - -export const getProductWithDefaults = ({ - version = 2, - atype = 2, - size = 0, - priceAccount = PublicKey.default, - attributes = {}, -}: Product) => { - return { - version, - atype, - size, - priceAccount, - attributes, - }; -}; - -export const writeProductBuffer = ( - buf: Buffer, - offset: number, - product: Product -) => { - let accountSize = product.size; - - if (!accountSize) { - accountSize = 48; - - for (const key in product.attributes) { - accountSize += 1 + key.length; - accountSize += 1 + product.attributes[key].length; - } - } - - buf.writeUInt32LE(Magic, offset + 0); - buf.writeUInt32LE(product.version, offset + 4); - buf.writeUInt32LE(product.atype, offset + 8); - buf.writeUInt32LE(accountSize, offset + 12); - - writePublicKeyBuffer(buf, offset + 16, product.priceAccount); - - let pos = offset + 48; - - for (const key in product.attributes) { - buf.writeUInt8(key.length, pos); - buf.write(key, pos + 1); - - pos += 1 + key.length; - - const value = product.attributes[key]; - buf.writeUInt8(value.length, pos); - buf.write(value, pos + 1); - } -}; - -/** - * Set up mock usdc and wsol oracles - * @param wallet - * @param wsolPrice - * @param wsolDecimals - * @param usdcPrice - * @param usdcDecimals - * @param tokenAPrice: - * @param tokenADecimals: - * @param tokenBPrice: - * @param tokenBDecimals: - * @param verbose - * @param skips - set to true to skip sending txes, which makes tests run faster if you don't need - * those oracles. - * @returns Price oracles for all currencies - */ -export const setupPythOracles = async ( - wallet: Wallet, - wsolPrice: number, - wsolDecimals: number, - usdcPrice: number, - usdcDecimals: number, - tokenAPrice: number, - tokenADecimals: number, - tokenBPrice: number, - tokenBDecimals: number, - lstAlphaPrice: number, - lstAlphaDecimals: number, - oracleConfDefault: number, - verbose: boolean, - skips?: { - wsol: boolean; - usdc: boolean; - a: boolean; - b: boolean; - wsolPyth: boolean; - } -) => { - let wsolPythOracle = await createPriceAccount(wallet); - let price = BigInt(wsolPrice * 10 ** wsolDecimals); - if (skips && skips.wsol) { - // do nothing - } else { - await updatePriceAccount( - wsolPythOracle, - { - exponent: -wsolDecimals, - aggregatePriceInfo: { - price: price, - conf: price / BigInt(100), // 1% of the price - }, - twap: { - valueComponent: price, - }, - }, - wallet - ); - } - - let usdcPythOracle = await createPriceAccount(wallet); - price = BigInt(usdcPrice * 10 ** usdcDecimals); - if (skips && skips.usdc) { - // do nothing - } else { - await updatePriceAccount( - usdcPythOracle, - { - exponent: -usdcDecimals, - aggregatePriceInfo: { - price: price, - conf: price / BigInt(100), // 1% of the price - }, - twap: { - valueComponent: price, - }, - }, - wallet - ); - } - - let fakeUsdcPythOracle = await createPriceAccount(wallet); - price = BigInt(usdcPrice * 10 ** usdcDecimals); - if (skips && skips.usdc) { - // do nothing - } else { - await updatePriceAccount( - fakeUsdcPythOracle, - { - exponent: -usdcDecimals, - aggregatePriceInfo: { - price: price, - conf: price / BigInt(100), // 1% of the price - }, - twap: { - valueComponent: price, - }, - }, - wallet - ); - } - - let tokenAPythOracle = await createPriceAccount(wallet); - price = BigInt(tokenAPrice * 10 ** tokenADecimals); - if (skips && skips.a) { - // do nothing - } else { - await updatePriceAccount( - tokenAPythOracle, - { - exponent: -tokenADecimals, - aggregatePriceInfo: { - price: price, - conf: price / BigInt(100), // 1% of the price - }, - twap: { - valueComponent: price, - }, - }, - wallet - ); - } - - let tokenBPythOracle = await createPriceAccount(wallet); - price = BigInt(tokenBPrice * 10 ** tokenBDecimals); - if (skips && skips.b) { - // do nothing - } else { - await updatePriceAccount( - tokenBPythOracle, - { - exponent: -tokenBDecimals, - aggregatePriceInfo: { - price: price, - conf: price / BigInt(100), // 1% of the price - }, - twap: { - valueComponent: price, - }, - }, - wallet - ); - } - - let lstPythPullOracle = Keypair.generate(); - let lstPythPullOracleFeed = Keypair.generate(); - let priceAlpha = lstAlphaPrice * 10 ** lstAlphaDecimals; - let confAlpha = lstAlphaPrice * oracleConfDefault * 10 ** lstAlphaDecimals; - if (skips && skips.wsolPyth) { - // do nothing - } else { - lstPythPullOracleFeed = await initBlankOracleFeed(wallet); - lstPythPullOracle = await initOrUpdatePriceUpdateV2( - wallet, - lstPythPullOracleFeed.publicKey, - new BN(priceAlpha), - new BN(confAlpha), - new BN(priceAlpha), - new BN(confAlpha), - new BN(0), - -lstAlphaDecimals - ); - } - - if (verbose) { - console.log("Mock Pyth price oracles:"); - console.log("wsol price: \t" + wsolPythOracle.publicKey); - console.log("usdc price: \t" + usdcPythOracle.publicKey); - console.log("token a price: \t" + tokenAPythOracle.publicKey); - console.log("token b price: \t" + tokenBPythOracle.publicKey); - console.log("lst pyth pull \t" + lstPythPullOracle.publicKey); - console.log( - "Price of 1 wsol.......$" + - wsolPrice + - "\t one token in native decimals: " + - (1 * 10 ** wsolDecimals).toLocaleString() - ); - console.log( - "Price of 1 usdc.......$" + - usdcPrice + - "\t one token in native decimals: " + - (1 * 10 ** usdcDecimals).toLocaleString() - ); - console.log( - "Price of 1 token A....$" + - tokenAPrice + - "\t one token in native decimals: " + - (1 * 10 ** tokenADecimals).toLocaleString() - ); - console.log( - "Price of 1 token B....$" + - tokenBPrice + - "\t one token in native decimals: " + - (1 * 10 ** tokenBDecimals).toLocaleString() - ); - console.log( - "Price of 1 LST alpha..$" + - lstAlphaPrice + - "\t one token in native decimals: " + - (1 * 10 ** lstAlphaDecimals).toLocaleString() - ); - console.log(""); - } - let oracles: Oracles = { - wsolOracle: wsolPythOracle, - wsolDecimals: wsolDecimals, - usdcOracle: usdcPythOracle, - usdcDecimals: usdcDecimals, - tokenAOracle: tokenAPythOracle, - tokenADecimals: tokenADecimals, - tokenBOracle: tokenBPythOracle, - tokenBDecimals: tokenBDecimals, - wsolPrice: wsolPrice, - usdcPrice: usdcPrice, - tokenAPrice: tokenAPrice, - tokenBPrice: tokenBPrice, - lstAlphaPrice: lstAlphaPrice, - lstAlphaDecimals: lstAlphaDecimals, - fakeUsdc: fakeUsdcPythOracle.publicKey, - pythPullLst: lstPythPullOracle, - pythPullLstOracleFeed: lstPythPullOracleFeed, - }; - return oracles; -}; diff --git a/tests/utils/spl-staking-utils.ts b/tests/utils/spl-staking-utils.ts deleted file mode 100644 index 3893af339..000000000 --- a/tests/utils/spl-staking-utils.ts +++ /dev/null @@ -1,151 +0,0 @@ -import { - findPoolMintAddress, - findPoolStakeAuthorityAddress, - SinglePoolInstruction, -} from "@solana/spl-single-pool-classic"; -import { - createAssociatedTokenAccountInstruction, - getAssociatedTokenAddressSync, -} from "@solana/spl-token"; -import { - Connection, - PublicKey, - StakeAuthorizationLayout, - StakeProgram, - TransactionInstruction, -} from "@solana/web3.js"; -import { SINGLE_POOL_PROGRAM_ID } from "./types"; -import { ProgramTestContext } from "solana-bankrun"; - -export enum SinglePoolAccountType { - Uninitialized = 0, - Pool = 1, -} - -export type SinglePool = { - accountType: SinglePoolAccountType; - voteAccountAddress: PublicKey; -}; - -const decodeSinglePoolAccountType = (buffer: Buffer, offset: number) => { - const accountType = buffer.readUInt8(offset); - if (accountType === 0) { - return SinglePoolAccountType.Uninitialized; - } else if (accountType === 1) { - return SinglePoolAccountType.Pool; - } else { - throw new Error("Unknown SinglePoolAccountType"); - } -}; - -/** - * Decode an spl single pool from buffer. - * - * Get the data buffer with `const data = (await provider.connection.getAccountInfo(poolKey)).data;` - * and note that there is no discriminator (i.e. pass data directly without additional slicing) - */ -export const decodeSinglePool = (buffer: Buffer) => { - let offset = 0; - - const accountType = decodeSinglePoolAccountType(buffer, offset); - offset += 1; - - const voteAccountAddress = new PublicKey( - buffer.subarray(offset, offset + 32) - ); - offset += 32; - - return { - accountType, - voteAccountAddress, - }; -}; - -// See `https://www.npmjs.com/package/@solana/spl-single-pool` transactions.ts for the original - -/** - * Builds ixes to create the LST ata as-needed, pass stake authority to the spl pool, and deposit to - * the stake pool - * @param connection - * @param userWallet - * @param splPool - * @param userStakeAccount - * @param verbose - * @returns - */ -export const depositToSinglePoolIxes = async ( - connection: Connection, - userWallet: PublicKey, - splPool: PublicKey, - userStakeAccount: PublicKey, - verbose: boolean = false -) => { - const splMint = await findPoolMintAddress(SINGLE_POOL_PROGRAM_ID, splPool); - - const splAuthority = await findPoolStakeAuthorityAddress( - SINGLE_POOL_PROGRAM_ID, - splPool - ); - - const ixes: TransactionInstruction[] = []; - const lstAta = getAssociatedTokenAddressSync(splMint, userWallet); - try { - await connection.getAccountInfo(lstAta); - if (verbose) { - console.log("Existing LST ata at: " + lstAta); - } - } catch (err) { - if (verbose) { - console.log("Failed to find ata, creating: " + lstAta); - } - ixes.push( - createAssociatedTokenAccountInstruction( - userWallet, - lstAta, - userWallet, - splMint - ) - ); - } - - const authorizeStakerIxes = StakeProgram.authorize({ - stakePubkey: userStakeAccount, - authorizedPubkey: userWallet, - newAuthorizedPubkey: splAuthority, - stakeAuthorizationType: StakeAuthorizationLayout.Staker, - }).instructions; - - ixes.push(...authorizeStakerIxes); - - const authorizeWithdrawIxes = StakeProgram.authorize({ - stakePubkey: userStakeAccount, - authorizedPubkey: userWallet, - newAuthorizedPubkey: splAuthority, - stakeAuthorizationType: StakeAuthorizationLayout.Withdrawer, - }).instructions; - - ixes.push(...authorizeWithdrawIxes); - - const depositIx = await SinglePoolInstruction.depositStake( - splPool, - userStakeAccount, - lstAta, - userWallet - ); - - ixes.push(depositIx); - - return ixes; -}; - -/** - * Generally, use this instead of `bankrunContext.lastBlockhash` (which does not work if the test - * has already run for some time and the blockhash has advanced) - * @param bankrunContext - * @returns - */ -export const getBankrunBlockhash = async ( - bankrunContext: ProgramTestContext -) => { - return (await bankrunContext.banksClient.getLatestBlockhash())[0]; -}; diff --git a/tests/utils/stake-utils.ts b/tests/utils/stake-utils.ts deleted file mode 100644 index a970c46ac..000000000 --- a/tests/utils/stake-utils.ts +++ /dev/null @@ -1,517 +0,0 @@ -import { - Keypair, - Transaction, - SystemProgram, - StakeProgram, - PublicKey, - Connection, - SYSVAR_CLOCK_PUBKEY, -} from "@solana/web3.js"; -import { MockUser } from "./mocks"; -import { BanksClient } from "solana-bankrun"; -import { BN } from "@coral-xyz/anchor"; - -/** - * Create a stake account for some user - * @param user - * @param amount - in SOL (lamports), in native decimals - * @returns - */ -export const createStakeAccount = (user: MockUser, amount: number) => { - const stakeAccount = Keypair.generate(); - const userPublicKey = user.wallet.publicKey; - - // Create a stake account and fund it with the specified amount of SOL - const tx = new Transaction().add( - SystemProgram.createAccount({ - fromPubkey: userPublicKey, - newAccountPubkey: stakeAccount.publicKey, - lamports: amount, - space: StakeProgram.space, // Space required for a stake account - programId: StakeProgram.programId, - }), - StakeProgram.initialize({ - stakePubkey: stakeAccount.publicKey, - authorized: { - staker: userPublicKey, - withdrawer: userPublicKey, - }, - }) - ); - - return { createTx: tx, stakeAccountKeypair: stakeAccount }; -}; - -/** - * Delegate a stake account to a validator. - * @param user - wallet signs - * @param stakeAccount - * @param validatorVoteAccount - */ -export const delegateStake = ( - user: MockUser, - stakeAccount: PublicKey, - validatorVoteAccount: PublicKey -) => { - return StakeProgram.delegate({ - stakePubkey: stakeAccount, - authorizedPubkey: user.wallet.publicKey, - votePubkey: validatorVoteAccount, - }); -}; - -/** - * Delegation information for a StakeAccount - * - * Copied from https://github.com/solana-developers/solana-rpc-get-stake-activation/blob/main/web3js-1.0/src/stake.ts - * */ -export type Delegation = { - voterPubkey: PublicKey; - stake: bigint; - activationEpoch: bigint; - deactivationEpoch: bigint; -}; - -/** - * Parsed content of an on-chain StakeAccount - * - * Copied from https://github.com/solana-developers/solana-rpc-get-stake-activation/blob/main/web3js-1.0/src/stake.ts - * */ -export type StakeAccount = { - discriminant: bigint; - meta: { - rentExemptReserve: bigint; - authorized: { - staker: PublicKey; - withdrawer: PublicKey; - }; - lockup: { - unixTimestamp: bigint; - epoch: bigint; - custodian: PublicKey; - }; - }; - stake: { - delegation: { - voterPubkey: PublicKey; - stake: bigint; - activationEpoch: bigint; - deactivationEpoch: bigint; - }; - creditsObserved: bigint; - }; -}; - -/** - * Decode a StakeAccount from parsed account data. - * - * Copied from https://github.com/solana-developers/solana-rpc-get-stake-activation/blob/main/web3js-1.0/src/stake.ts - * */ -export const getStakeAccount = function (data: Buffer): StakeAccount { - let offset = 0; - - // Discriminant (4 bytes) - const discriminant = data.readBigUInt64LE(offset); - offset += 4; - - // Meta - const rentExemptReserve = data.readBigUInt64LE(offset); - offset += 8; - - // Authorized staker and withdrawer (2 public keys) - const staker = new PublicKey(data.subarray(offset, offset + 32)); - offset += 32; - const withdrawer = new PublicKey(data.subarray(offset, offset + 32)); - offset += 32; - - // Lockup: unixTimestamp, epoch, custodian - const unixTimestamp = data.readBigUInt64LE(offset); - offset += 8; - const epoch = data.readBigUInt64LE(offset); - offset += 8; - const custodian = new PublicKey(data.subarray(offset, offset + 32)); - offset += 32; - - // Stake: Delegation - const voterPubkey = new PublicKey(data.subarray(offset, offset + 32)); - offset += 32; - const stake = data.readBigUInt64LE(offset); - offset += 8; - const activationEpoch = data.readBigUInt64LE(offset); - offset += 8; - const deactivationEpoch = data.readBigUInt64LE(offset); - offset += 8; - - // Credits observed - const creditsObserved = data.readBigUInt64LE(offset); - - // Return the parsed StakeAccount object - return { - discriminant, - meta: { - rentExemptReserve, - authorized: { - staker, - withdrawer, - }, - lockup: { - unixTimestamp, - epoch, - custodian, - }, - }, - stake: { - delegation: { - voterPubkey, - stake, - activationEpoch, - deactivationEpoch, - }, - creditsObserved, - }, - }; -}; - -/** - * Parsed content of an on-chain Stake History Entry - * - * Copied from https://github.com/solana-developers/solana-rpc-get-stake-activation/blob/main/web3js-1.0/src/stake.ts - * */ -export type StakeHistoryEntry = { - epoch: bigint; - effective: bigint; - activating: bigint; - deactivating: bigint; -}; - -/** - * Decode a StakeHistoryEntry from parsed account data. - * - * Copied from https://github.com/solana-developers/solana-rpc-get-stake-activation/blob/main/web3js-1.0/src/stake.ts - * and modified to directly read from buffer - * */ -export const getStakeHistory = function (data: Buffer): StakeHistoryEntry[] { - // Note: Is just `Vec<(Epoch, StakeHistoryEntry)>` internally - const stakeHistory: StakeHistoryEntry[] = []; - const entrySize = 32; // Each entry is 32 bytes (4 x 8-byte u64 fields) - - for ( - // skip the first 8 bytes for the Vec overhead - let offset = 8; - offset + entrySize < data.length; - offset += entrySize - ) { - const epoch = data.readBigUInt64LE(offset); // Note `epoch` is just a u64 renamed - const effective = data.readBigUInt64LE(offset + 8); // u64 effective - const activating = data.readBigUInt64LE(offset + 16); // u64 activating - const deactivating = data.readBigUInt64LE(offset + 24); // u64 deactivating - - // if (epoch < 10 && offset < 300) { - // console.log("epoch " + epoch); - // console.log("e " + effective); - // console.log("a " + activating); - // console.log("d " + deactivating); - // } - - stakeHistory.push({ - epoch, - effective, - activating, - deactivating, - }); - } - - return stakeHistory; -}; - -/** - * Representation of on-chain stake - * - * Copied from https://github.com/solana-developers/solana-rpc-get-stake-activation/blob/main/web3js-1.0/src/delegation.ts - */ -export interface StakeActivatingAndDeactivating { - effective: bigint; - activating: bigint; - deactivating: bigint; -} - -/** - * Representation of on-chain stake excluding deactivating stake - * - * Copied from https://github.com/solana-developers/solana-rpc-get-stake-activation/blob/main/web3js-1.0/src/delegation.ts - */ -export interface EffectiveAndActivating { - effective: bigint; - activating: bigint; -} - -/** - * Get stake histories for a given epoch - * - * Copied from https://github.com/solana-developers/solana-rpc-get-stake-activation/blob/main/web3js-1.0/src/delegation.ts - */ -function getStakeHistoryEntry( - epoch: bigint, - stakeHistory: StakeHistoryEntry[] -): StakeHistoryEntry | null { - for (const entry of stakeHistory) { - if (entry.epoch === epoch) { - return entry; - } - } - return null; -} - -const WARMUP_COOLDOWN_RATE = 0.09; - -/** - * Get on-chain status of activating stake - * - * Copied from https://github.com/solana-developers/solana-rpc-get-stake-activation/blob/main/web3js-1.0/src/delegation.ts - */ -export function getStakeAndActivating( - delegation: Delegation, - targetEpoch: bigint, - stakeHistory: StakeHistoryEntry[] -): EffectiveAndActivating { - if (delegation.activationEpoch === delegation.deactivationEpoch) { - // activated but instantly deactivated; no stake at all regardless of target_epoch - return { - effective: BigInt(0), - activating: BigInt(0), - }; - } else if (targetEpoch === delegation.activationEpoch) { - // all is activating - return { - effective: BigInt(0), - activating: delegation.stake, - }; - } else if (targetEpoch < delegation.activationEpoch) { - // not yet enabled - return { - effective: BigInt(0), - activating: BigInt(0), - }; - } - - let currentEpoch = delegation.activationEpoch; - let entry = getStakeHistoryEntry(currentEpoch, stakeHistory); - if (entry !== null) { - // target_epoch > self.activation_epoch - - // loop from my activation epoch until the target epoch summing up my entitlement - // current effective stake is updated using its previous epoch's cluster stake - let currentEffectiveStake = BigInt(0); - while (entry !== null) { - currentEpoch++; - const remaining = delegation.stake - currentEffectiveStake; - const weight = Number(remaining) / Number(entry.activating); - const newlyEffectiveClusterStake = - Number(entry.effective) * WARMUP_COOLDOWN_RATE; - const newlyEffectiveStake = BigInt( - Math.max(1, Math.round(weight * newlyEffectiveClusterStake)) - ); - - currentEffectiveStake += newlyEffectiveStake; - if (currentEffectiveStake >= delegation.stake) { - currentEffectiveStake = delegation.stake; - break; - } - - if ( - currentEpoch >= targetEpoch || - currentEpoch >= delegation.deactivationEpoch - ) { - break; - } - entry = getStakeHistoryEntry(currentEpoch, stakeHistory); - } - return { - effective: currentEffectiveStake, - activating: delegation.stake - currentEffectiveStake, - }; - } else { - // no history or I've dropped out of history, so assume fully effective - return { - effective: delegation.stake, - activating: BigInt(0), - }; - } -} - -/** - * Get on-chain status of activating and deactivating stake - * - * Copied from https://github.com/solana-developers/solana-rpc-get-stake-activation/blob/main/web3js-1.0/src/delegation.ts - */ -export function getStakeActivatingAndDeactivating( - delegation: Delegation, - targetEpoch: bigint, - stakeHistory: StakeHistoryEntry[] -): StakeActivatingAndDeactivating { - const { effective, activating } = getStakeAndActivating( - delegation, - targetEpoch, - stakeHistory - ); - - // then de-activate some portion if necessary - if (targetEpoch < delegation.deactivationEpoch) { - return { - effective, - activating, - deactivating: BigInt(0), - }; - } else if (targetEpoch == delegation.deactivationEpoch) { - // can only deactivate what's activated - return { - effective, - activating: BigInt(0), - deactivating: effective, - }; - } - let currentEpoch = delegation.deactivationEpoch; - let entry = getStakeHistoryEntry(currentEpoch, stakeHistory); - if (entry !== null) { - // target_epoch > self.activation_epoch - // loop from my deactivation epoch until the target epoch - // current effective stake is updated using its previous epoch's cluster stake - let currentEffectiveStake = effective; - while (entry !== null) { - currentEpoch++; - // if there is no deactivating stake at prev epoch, we should have been - // fully undelegated at this moment - if (entry.deactivating === BigInt(0)) { - break; - } - - // I'm trying to get to zero, how much of the deactivation in stake - // this account is entitled to take - const weight = Number(currentEffectiveStake) / Number(entry.deactivating); - - // portion of newly not-effective cluster stake I'm entitled to at current epoch - const newlyNotEffectiveClusterStake = - Number(entry.effective) * WARMUP_COOLDOWN_RATE; - const newlyNotEffectiveStake = BigInt( - Math.max(1, Math.round(weight * newlyNotEffectiveClusterStake)) - ); - - currentEffectiveStake -= newlyNotEffectiveStake; - if (currentEffectiveStake <= 0) { - currentEffectiveStake = BigInt(0); - break; - } - - if (currentEpoch >= targetEpoch) { - break; - } - entry = getStakeHistoryEntry(currentEpoch, stakeHistory); - } - - // deactivating stake should equal to all of currently remaining effective stake - return { - effective: currentEffectiveStake, - deactivating: currentEffectiveStake, - activating: BigInt(0), - }; - } else { - return { - effective: BigInt(0), - activating: BigInt(0), - deactivating: BigInt(0), - }; - } -} - -/** - * Representation of on-chain stake - * - * Copied from https://github.com/solana-developers/solana-rpc-get-stake-activation/blob/main/web3js-1.0/src/rpc.ts - */ -export interface StakeActivation { - status: string; - active: bigint; - inactive: bigint; -} - -/** - * Get on-chain stake status of a stake account (activating, inactive, etc) - * - * Copied from https://github.com/solana-developers/solana-rpc-get-stake-activation/blob/main/web3js-1.0/src/rpc.ts - */ -export async function getStakeActivation( - connection: Connection, - stakeAddress: PublicKey, - epoch: number | undefined = undefined // Added to bypass connection.getEpochInfo() when using a bankrun provider. -): Promise { - const SYSVAR_STAKE_HISTORY_ADDRESS = new PublicKey( - "SysvarStakeHistory1111111111111111111111111" - ); - const epochInfoPromise = - epoch !== undefined - ? Promise.resolve({ epoch }) - : connection.getEpochInfo(); - const [epochInfo, { stakeAccount, stakeAccountLamports }, stakeHistory] = - await Promise.all([ - epochInfoPromise, - (async () => { - const stakeAccountInfo = await connection.getAccountInfo(stakeAddress); - if (stakeAccountInfo === null) { - throw new Error("Account not found"); - } - const stakeAccount = getStakeAccount(stakeAccountInfo.data); - const stakeAccountLamports = stakeAccountInfo.lamports; - return { stakeAccount, stakeAccountLamports }; - })(), - (async () => { - const stakeHistoryInfo = await connection.getAccountInfo( - SYSVAR_STAKE_HISTORY_ADDRESS - ); - if (stakeHistoryInfo === null) { - throw new Error("StakeHistory not found"); - } - return getStakeHistory(stakeHistoryInfo.data); - })(), - ]); - - const targetEpoch = epoch ? epoch : epochInfo.epoch; - const { effective, activating, deactivating } = - getStakeActivatingAndDeactivating( - stakeAccount.stake.delegation, - BigInt(targetEpoch), - stakeHistory - ); - - let status; - if (deactivating > 0) { - status = "deactivating"; - } else if (activating > 0) { - status = "activating"; - } else if (effective > 0) { - status = "active"; - } else { - status = "inactive"; - } - const inactive = - BigInt(stakeAccountLamports) - - effective - - stakeAccount.meta.rentExemptReserve; - - return { - status, - active: effective, - inactive, - }; -} - -export const getEpochAndSlot = async (banksClient: BanksClient) => { - let clock = await banksClient.getAccount(SYSVAR_CLOCK_PUBKEY); - - // Slot is bytes 0-8 - let slot = new BN(clock.data.slice(0, 8), 10, "le").toNumber(); - - // Epoch is bytes 16-24 - let epoch = new BN(clock.data.slice(16, 24), 10, "le").toNumber(); - - return { epoch, slot }; -}; diff --git a/tests/utils/stakeCollatizer/pdas.ts b/tests/utils/stakeCollatizer/pdas.ts deleted file mode 100644 index dd9fa3019..000000000 --- a/tests/utils/stakeCollatizer/pdas.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { PublicKey } from "@solana/web3.js"; - -export const deriveStakeHolder = ( - programId: PublicKey, - voteAccount: PublicKey, - admin: PublicKey -) => { - return PublicKey.findProgramAddressSync( - [ - Buffer.from("stakeholder", "utf-8"), - voteAccount.toBuffer(), - admin.toBuffer(), - ], - programId - ); -}; - -export const deriveStakeHolderStakeAccount = ( - programId: PublicKey, - stakeholder: PublicKey -) => { - return PublicKey.findProgramAddressSync( - [Buffer.from("stakeacc", "utf-8"), stakeholder.toBuffer()], - programId - ); -}; - -export const deriveStakeUser = (programId: PublicKey, payer: PublicKey) => { - return PublicKey.findProgramAddressSync( - [Buffer.from("stakeuser", "utf-8"), payer.toBuffer()], - programId - ); -}; diff --git a/tests/utils/tools.ts b/tests/utils/tools.ts deleted file mode 100644 index c73355f64..000000000 --- a/tests/utils/tools.ts +++ /dev/null @@ -1,86 +0,0 @@ -import { BanksTransactionResultWithMeta } from "solana-bankrun"; - -/** - * Function to print bytes from a Buffer in groups with column labels and color highlighting for non-zero values - * @param buffer - The Buffer to process - * @param groupLength - The number of bytes in each group, usually 8 or 16 - * @param totalLength - The total number of bytes to process - * @param skipEmptyRows - If a row is all-zero, it will not print - */ -export const printBufferGroups = ( - buffer: Buffer, - groupLength: number, - totalLength: number, - skipEmptyRows: boolean = true -) => { - // Print the column headers - let columnHeader = " |"; - for (let col = 0; col < groupLength; col++) { - if (col < groupLength - 1) { - columnHeader += col.toString().padStart(3, " ").padEnd(6, " "); - } else { - // No end padding for the last column - columnHeader += col.toString().padStart(3, " "); - } - } - console.log(columnHeader); - - // Function to calculate RGB color based on row index - const calculateGradientColor = (startIndex) => { - const maxIndex = 255 * 3; - const normalizedIndex = startIndex % maxIndex; - - let r = 0, - g = 0, - b = 0; - - if (normalizedIndex < 255) { - b = 255; - g = normalizedIndex; - } else if (normalizedIndex < 510) { - g = 255; - b = 510 - normalizedIndex; - } else { - g = 765 - normalizedIndex; - r = normalizedIndex - 510; - } - - return `\x1b[38;2;${r};${g};${b}m`; - }; - - // Print the buffer content - for (let i = 0; i < totalLength; i += groupLength) { - let group = []; - let allZero = true; - - for (let j = 0; j < groupLength; j++) { - let value = buffer[i + j]; - let valueStr = - value !== undefined ? value.toString().padStart(3, " ") : " "; - if (value !== 0) { - allZero = false; - } - if (value !== 0 && value !== undefined) { - // Apply red color to non-zero values - group.push(`\x1b[31m${valueStr}\x1b[0m`); - } else { - group.push(valueStr); - } - } - - // Skip printing if the entire group is zero - if (!allZero || !skipEmptyRows) { - const color = calculateGradientColor(i); - const label = `${i.toString().padStart(3, " ")}-${(i + groupLength - 1) - .toString() - .padStart(3, " ")}`; - console.log(`${color}${label}\x1b[0m | ${group.join(" | ")}`); - } - } -}; - -export const dumpBankrunLogs = (result: BanksTransactionResultWithMeta) => { - for (let i = 0; i < result.meta.logMessages.length; i++) { - console.log(i + " " + result.meta.logMessages[i]); - } -}; diff --git a/tests/utils/types.ts b/tests/utils/types.ts deleted file mode 100644 index e1d75b460..000000000 --- a/tests/utils/types.ts +++ /dev/null @@ -1,285 +0,0 @@ -import { - BankConfigOpt, - InterestRateConfig, - InterestRateConfigRaw, - OperationalState, - OracleSetupRaw, - RiskTier, - RiskTierRaw, -} from "@mrgnlabs/marginfi-client-v2"; -import { bigNumberToWrappedI80F48, WrappedI80F48 } from "@mrgnlabs/mrgn-common"; -import { PublicKey } from "@solana/web3.js"; -import BigNumber from "bignumber.js"; - -import BN from "bn.js"; - -export const I80F48_ZERO = bigNumberToWrappedI80F48(0); -export const I80F48_ONE = bigNumberToWrappedI80F48(1); -/** Equivalent in value to u64::MAX in Rust */ -export const u64MAX_BN = new BN("18446744073709551615"); -export const SINGLE_POOL_PROGRAM_ID = new PublicKey( - "SVSPxpvHdN29nkVg9rPapPNDddN5DipNLRUFhyjFThE" -); - -export const EMISSIONS_FLAG_NONE = 0; -export const EMISSIONS_FLAG_BORROW_ACTIVE = 1; -export const EMISSIONS_FLAG_LENDING_ACTIVE = 2; -export const PERMISSIONLESS_BAD_DEBT_SETTLEMENT_FLAG = 4; -export const FREEZE_SETTINGS = 8; - -export const ASSET_TAG_DEFAULT = 0; -export const ASSET_TAG_SOL = 1; -export const ASSET_TAG_STAKED = 2; - -export const ORACLE_SETUP_NONE = 0; -export const ORACLE_SETUP_PYTH_LEGACY = 1; -export const ORACLE_SETUP_SWITCHBOARD_v2 = 2; -export const ORACLE_SETUP_PYTH_PUSH = 3; -export const ORACLE_SETUP_SWITCHBOARD_PULL = 4; -export const ORACLE_SETUP_STAKED_WITH_PYTH_PUSH = 5; - -export const HEALTH_CACHE_NONE = 0; -export const HEALTH_CACHE_HEALTHY = 1; -export const HEALTH_CACHE_ENGINE_OK = 2; - - -/** - * The default bank config has - * * all weights are 1 - * * state = operational, risk tier = collateral - * * 100_000_000_000 deposit/borrow limit - * * 1_000_000_000_000 total asset value limit - * * asset tag default (`ASSET_TAG_DEFAULT`) - * @returns - */ -export const defaultBankConfig = () => { - let config: BankConfig = { - assetWeightInit: I80F48_ONE, - assetWeightMaint: I80F48_ONE, - liabilityWeightInit: I80F48_ONE, - liabilityWeightMain: I80F48_ONE, - depositLimit: new BN(100_000_000_000), - interestRateConfig: defaultInterestRateConfigRaw(), - operationalState: { - operational: undefined, - }, - borrowLimit: new BN(100_000_000_000), - riskTier: { - collateral: undefined, - }, - assetTag: ASSET_TAG_DEFAULT, - totalAssetValueInitLimit: new BN(1_000_000_000_000), - oracleMaxAge: 240, - }; - return config; -}; - -/** - * The same parameters as `defaultBankConfig`, and no change to oracle - * @returns - */ -export const defaultBankConfigOpt = () => { - let bankConfigOpt: BankConfigOpt = { - assetWeightInit: new BigNumber(1), - assetWeightMaint: new BigNumber(1), - liabilityWeightInit: new BigNumber(1), - liabilityWeightMaint: new BigNumber(1), - depositLimit: new BigNumber(1_000_000_000), - borrowLimit: new BigNumber(1_000_000_000), - riskTier: RiskTier.Collateral, - totalAssetValueInitLimit: new BigNumber(100_000_000_000), - interestRateConfig: defaultInterestRateConfig(), - operationalState: OperationalState.Operational, - oracle: null, - oracleMaxAge: 240, - permissionlessBadDebtSettlement: null, - }; - - return bankConfigOpt; -}; - -/** - * The same parameters as `defaultBankConfig` - * @returns - */ -export const defaultBankConfigOptRaw = () => { - let bankConfigOpt: BankConfigOptRaw = { - assetWeightInit: I80F48_ONE, - assetWeightMaint: I80F48_ONE, - liabilityWeightInit: I80F48_ONE, - liabilityWeightMaint: I80F48_ONE, - depositLimit: new BN(1_000_000_000), - borrowLimit: new BN(1_000_000_000), - riskTier: { - collateral: undefined, - }, - assetTag: ASSET_TAG_DEFAULT, - totalAssetValueInitLimit: new BN(100_000_000_000), - interestRateConfig: defaultInterestRateConfigRaw(), - operationalState: { - operational: undefined, - }, - oracleMaxAge: 240, - permissionlessBadDebtSettlement: null, - freezeSettings: null, - }; - - return bankConfigOpt; -}; - -/** - * The default interest config has - * * optimalUtilizationRate = .5 - * * plateauInterestRate = .6 - * * maxInterestRate = 3 - * * insuranceFeeFixedApr = .01 - * * insuranceIrFee = .02 - * * protocolFixedFeeApr = .03 - * * protocolIrFee = .04 - * * originationFee = .01 - * @returns - */ -export const defaultInterestRateConfigRaw = () => { - let config: InterestRateConfigRawWithOrigination = { - optimalUtilizationRate: bigNumberToWrappedI80F48(0.5), - plateauInterestRate: bigNumberToWrappedI80F48(0.6), - maxInterestRate: bigNumberToWrappedI80F48(3), - insuranceFeeFixedApr: bigNumberToWrappedI80F48(0.01), - insuranceIrFee: bigNumberToWrappedI80F48(0.02), - protocolFixedFeeApr: bigNumberToWrappedI80F48(0.03), - protocolIrFee: bigNumberToWrappedI80F48(0.04), - protocolOriginationFee: bigNumberToWrappedI80F48(0.01), - }; - return config; -}; - -/** - * The same parameters as `defaultInterestRateConfigRaw` - * @returns - */ -export const defaultInterestRateConfig = () => { - let config: InterestRateConfigWithOrigination = { - optimalUtilizationRate: new BigNumber(0.5), - plateauInterestRate: new BigNumber(0.6), - maxInterestRate: new BigNumber(3), - insuranceFeeFixedApr: new BigNumber(0), - insuranceIrFee: new BigNumber(0), - protocolFixedFeeApr: new BigNumber(0), - protocolIrFee: new BigNumber(0), - protocolOriginationFee: new BigNumber(0.1), - }; - return config; -}; - -export const defaultStakedInterestSettings = (oracle: PublicKey) => { - let settings: StakedSettingsConfig = { - oracle: oracle, - assetWeightInit: bigNumberToWrappedI80F48(0.8), - assetWeightMaint: bigNumberToWrappedI80F48(0.9), - depositLimit: new BN(1_000_000_000_000), // 1000 SOL - totalAssetValueInitLimit: new BN(150_000_000), - oracleMaxAge: 60, - riskTier: { - collateral: undefined, - }, - }; - return settings; -}; - -// TODO remove when package updates -export type BankConfigOptWithAssetTag = BankConfigOptRaw & { - assetTag: number | null; -}; - -// TODO remove when package updates -export type InterestRateConfigRawWithOrigination = InterestRateConfigRaw & { - protocolOriginationFee: WrappedI80F48; -}; - -// TODO remove when package updates -export type InterestRateConfigWithOrigination = InterestRateConfig & { - protocolOriginationFee: BigNumber; -}; - -// TODO remove when package updates -type OperationalStateRaw = - | { paused: {} } - | { operational: {} } - | { reduceOnly: {} }; - -// TODO remove when package updates -export type BankConfig = { - assetWeightInit: WrappedI80F48; - assetWeightMaint: WrappedI80F48; - - liabilityWeightInit: WrappedI80F48; - liabilityWeightMain: WrappedI80F48; - - depositLimit: BN; - interestRateConfig: InterestRateConfigRawWithOrigination; - - /** Paused = 0, Operational = 1, ReduceOnly = 2 */ - operationalState: OperationalStateRaw; - - borrowLimit: BN; - /** Collateral = 0, Isolated = 1 */ - riskTier: RiskTierRaw; - assetTag: number; - totalAssetValueInitLimit: BN; - oracleMaxAge: number; -}; - -// TODO remove when package updates -/** Adds origination fee to interestRateConfig and freezeSettings */ -export type BankConfigOptRaw = { - assetWeightInit: WrappedI80F48 | null; - assetWeightMaint: WrappedI80F48 | null; - - liabilityWeightInit: WrappedI80F48 | null; - liabilityWeightMaint: WrappedI80F48 | null; - - depositLimit: BN | null; - borrowLimit: BN | null; - riskTier: { collateral: {} } | { isolated: {} } | null; - assetTag: number; - totalAssetValueInitLimit: BN | null; - - interestRateConfig: InterestRateConfigRawWithOrigination | null; - operationalState: - | { paused: {} } - | { operational: {} } - | { reduceOnly: {} } - | null; - - oracleMaxAge: number | null; - permissionlessBadDebtSettlement: boolean | null; - freezeSettings: boolean | null; -}; - -// TODO remove when package updates -export type StakedSettingsConfig = { - oracle: PublicKey; - - assetWeightInit: WrappedI80F48; - assetWeightMaint: WrappedI80F48; - - depositLimit: BN; - totalAssetValueInitLimit: BN; - - oracleMaxAge: number; - /** Collateral = 0, Isolated = 1 */ - riskTier: RiskTierRaw; -}; - -export interface StakedSettingsEdit { - oracle: PublicKey | null; - - assetWeightInit: WrappedI80F48 | null; - assetWeightMaint: WrappedI80F48 | null; - - depositLimit: BN | null; - totalAssetValueInitLimit: BN | null; - - oracleMaxAge: number | null; - riskTier: { collateral: {} } | { isolated: {} } | null; -} diff --git a/tests/utils/user-instructions.ts b/tests/utils/user-instructions.ts deleted file mode 100644 index 7e19cd9eb..000000000 --- a/tests/utils/user-instructions.ts +++ /dev/null @@ -1,420 +0,0 @@ -import { BN, Program } from "@coral-xyz/anchor"; -import { AccountMeta, PublicKey } from "@solana/web3.js"; -import { Marginfi } from "../../target/types/marginfi"; -import { TOKEN_PROGRAM_ID } from "@solana/spl-token"; -import { deriveLiquidityVault } from "./pdas"; - -export type AccountInitArgs = { - marginfiGroup: PublicKey; - marginfiAccount: PublicKey; - authority: PublicKey; - feePayer: PublicKey; -}; - -/** - * Init a user account for some group. - * * fee payer and authority must both sign. - * * account must be a fresh keypair and must also sign - * @param program - * @param args - * @returns - */ -export const accountInit = ( - program: Program, - args: AccountInitArgs -) => { - const ix = program.methods - .marginfiAccountInitialize() - .accounts({ - marginfiGroup: args.marginfiGroup, - marginfiAccount: args.marginfiAccount, - authority: args.authority, - feePayer: args.feePayer, - }) - .instruction(); - - return ix; -}; - -export type DepositArgs = { - marginfiAccount: PublicKey; - bank: PublicKey; - tokenAccount: PublicKey; - amount: BN; - depositUpToLimit?: boolean; -}; - -/** - * Deposit to a bank - * * `authority`- MarginfiAccount's authority must sign and own the `tokenAccount` - * @param program - * @param args - * @returns - */ -export const depositIx = (program: Program, args: DepositArgs) => { - const ix = program.methods - .lendingAccountDeposit(args.amount, args.depositUpToLimit ?? false) - .accounts({ - // marginfiGroup: args.marginfiGroup, // implied from bank - marginfiAccount: args.marginfiAccount, - // authority: args.authority, // implied from marginfiAccount - bank: args.bank, - signerTokenAccount: args.tokenAccount, - // bankLiquidityVault: deriveLiquidityVault(id, bank) - tokenProgram: TOKEN_PROGRAM_ID, - }) - .instruction(); - - return ix; -}; - -export type SettleEmissionsArgs = { - marginfiAccount: PublicKey; - bank: PublicKey; -}; - -/** - * (Permissionless) Settle emissions for a mrgnfi bank that is emitting some rewards. Generally runs - * for all users before rates are updated, otherwise past emissions are retroactively credited at - * the new rate as well. See `withdrawEmissionsIx` to actually claim the emissions to a wallet. - * * `authority`- MarginfiAccount's authority must sign and own the `tokenAccount` - * @param program - * @param args - * @returns - */ -export const settleEmissionsIx = ( - program: Program, - args: SettleEmissionsArgs -) => { - const ix = program.methods - .lendingAccountSettleEmissions() - .accounts({ - marginfiAccount: args.marginfiAccount, - bank: args.bank, - }) - .instruction(); - - return ix; -}; - -export type WithdrawEmissionsArgs = { - marginfiAccount: PublicKey; - bank: PublicKey; - tokenAccount: PublicKey; -}; - -/** - * Settles AND withdraws emissions to the user's given token account. Also see `settleEmissionsIx`, which settles but does not withdraw. - * * `authority`- MarginfiAccount's authority must sign but does not have to own the `tokenAccount` - * @param program - * @param args - * @returns - */ -export const withdrawEmissionsIx = ( - program: Program, - args: WithdrawEmissionsArgs -) => { - const ix = program.methods - .lendingAccountWithdrawEmissions() - .accounts({ - // group: args.marginfiGroup, // implied from bank - marginfiAccount: args.marginfiAccount, - // authority: args.authority, // implied from marginfiAccount - bank: args.bank, - // emissions_mint // implied from bank - // emissions_auth // pda derived from bank - // emissions_vault // pda derived from bank - destinationAccount: args.tokenAccount, - tokenProgram: TOKEN_PROGRAM_ID, - }) - .instruction(); - - return ix; -}; - -export type WithdrawEmissionsPermissionlessArgs = { - marginfiAccount: PublicKey; - bank: PublicKey; - /** Cannonical ATA of `emissions_destination_account` registered on `marginfiAccount` */ - tokenAccount: PublicKey; -}; - -/** - * (Permissionless) Settles AND withdraws emissions to the user's given token account. The user must - * have opted in to this feature by designating a wallet to receive claims with - * `marginfi_account_update_emissions_destination_account` - * * `tokenAccount`- must be cannonical ATA of `emissions_destination_account` - * @param program - * @param args - * @returns - */ -export const withdrawEmissionsPermissionlessIx = ( - program: Program, - args: WithdrawEmissionsPermissionlessArgs -) => { - const ix = program.methods - .lendingAccountWithdrawEmissionsPermissionless() - .accounts({ - // group: args.marginfiGroup, // implied from bank - marginfiAccount: args.marginfiAccount, - // authority: args.authority, // implied from marginfiAccount - bank: args.bank, - // emissions_mint // implied from bank - // emissions_auth // pda derived from bank - // emissions_vault // pda derived from bank - destinationAccount: args.tokenAccount, - tokenProgram: TOKEN_PROGRAM_ID, - }) - .instruction(); - - return ix; -}; - -export type UpdateEmissionsDestinationArgs = { - marginfiAccount: PublicKey; - destinationAccount: PublicKey; -}; - -/** - * (Permissionless) Opt in to claim permissionless emissions. The designated account/wallet will - * receive all the funds. Emissions go to the cannonical ATA of that account, and if the ATA doesn't - * exist, they may still not get distributed. We (mrgn) might pay to open SOME atas, or we might - * open some common ones when you opt in, or we might let the user pay and just let the tx fail it - * it doesn't exist. - * @param program - * @param args - * @returns - */ -export const updateEmissionsDestination = ( - program: Program, - args: UpdateEmissionsDestinationArgs -) => { - const ix = program.methods - .marginfiAccountUpdateEmissionsDestinationAccount() - .accounts({ - marginfiAccount: args.marginfiAccount, - // authority: //implied from marginfiAccount - destinationAccount: args.destinationAccount, - }) - .instruction(); - - return ix; -}; - -export type BorrowIxArgs = { - marginfiAccount: PublicKey; - bank: PublicKey; - tokenAccount: PublicKey; - remaining: PublicKey[]; - amount: BN; -}; - -/** - * Borrow from a bank - * * `authority` - marginfiAccount's authority must sign, but does not have to own the `tokenAccount` - * * `remaining` - pass bank/oracles for each bank the user is involved with, in the SAME ORDER they - * appear in userAcc.balances (e.g. `[bank0, oracle0, bank1, oracle1]`). For Token22 assets, pass - * the mint first, then the oracles/banks as described earlier. - * @param program - * @param args - * @returns - */ -export const borrowIx = (program: Program, args: BorrowIxArgs) => { - const oracleMeta: AccountMeta[] = args.remaining.map((pubkey) => ({ - pubkey, - isSigner: false, - isWritable: false, - })); - const ix = program.methods - .lendingAccountBorrow(args.amount) - .accounts({ - // marginfiGroup: args.marginfiGroup, // implied from bank - marginfiAccount: args.marginfiAccount, - // authority: args.authority, // implied from account - bank: args.bank, - destinationTokenAccount: args.tokenAccount, - tokenProgram: TOKEN_PROGRAM_ID, - }) - .remainingAccounts(oracleMeta) - .instruction(); - - return ix; -}; - -export type WithdrawIxArgs = { - marginfiAccount: PublicKey; - bank: PublicKey; - tokenAccount: PublicKey; - remaining: PublicKey[]; - amount: BN; - withdrawAll?: boolean; -}; - -/** - * Withdraw from a bank - * * `authority` - marginfiAccount's authority must sign, but does not have to own the `tokenAccount` - * * `remaining` - pass bank/oracles for each bank the user is involved with, in the SAME ORDER they - * appear in userAcc.balances (e.g. `[bank0, oracle0, bank1, oracle1]`). For Token22 assets, pass - * the mint first, then the oracles/banks as described earlier. - * @param program - * @param args - * @returns - */ -export const withdrawIx = ( - program: Program, - args: WithdrawIxArgs -) => { - const oracleMeta: AccountMeta[] = args.remaining.map((pubkey) => ({ - pubkey, - isSigner: false, - isWritable: false, - })); - // False is the same as null, so if false we'll just pass null - const all = args.withdrawAll === true ? true : null; - const ix = program.methods - .lendingAccountWithdraw(args.amount, all) - .accounts({ - // marginfiGroup: args.marginfiGroup, // implied from bank - marginfiAccount: args.marginfiAccount, - // authority: args.authority, // implied from account - bank: args.bank, - destinationTokenAccount: args.tokenAccount, - // bankLiquidityVaultAuthority = deriveLiquidityVaultAuthority(id, bank); - // bankLiquidityVault = deriveLiquidityVault(id, bank) - tokenProgram: TOKEN_PROGRAM_ID, - }) - .remainingAccounts(oracleMeta) - .instruction(); - - return ix; -}; - -export type RepayIxArgs = { - marginfiAccount: PublicKey; - bank: PublicKey; - tokenAccount: PublicKey; - remaining: PublicKey[]; - amount: BN; - repayAll?: boolean; -}; - -/** - * Repay debt to a bank - * * `authority` - MarginfiAccount's authority must sign and own the `tokenAccount` - * * `remaining` - pass bank/oracles for each bank the user is involved with, in the SAME ORDER they - * appear in userAcc.balances (e.g. `[bank0, oracle0, bank1, oracle1]`). For Token22 assets, pass - * the mint first, then the oracles/banks as described earlier. - * @param program - * @param args - * @returns - */ -export const repayIx = (program: Program, args: RepayIxArgs) => { - const oracleMeta: AccountMeta[] = args.remaining.map((pubkey) => ({ - pubkey, - isSigner: false, - isWritable: false, - })); - // False is the same as null, so if false we'll just pass null - const all = args.repayAll === true ? true : null; - const ix = program.methods - .lendingAccountRepay(args.amount, all) - .accounts({ - // marginfiGroup: args.marginfiGroup, // implied from bank - marginfiAccount: args.marginfiAccount, - // authority: args.authority, // implied from account - bank: args.bank, - signerTokenAccount: args.tokenAccount, - // bankLiquidityVaultAuthority = deriveLiquidityVaultAuthority(id, bank); - // bankLiquidityVault = deriveLiquidityVault(id, bank) - tokenProgram: TOKEN_PROGRAM_ID, - }) - .remainingAccounts(oracleMeta) - .instruction(); - return ix; -}; - -export type LiquidateIxArgs = { - assetBankKey: PublicKey; - liabilityBankKey: PublicKey; - liquidatorMarginfiAccount: PublicKey; - liquidateeMarginfiAccount: PublicKey; - remaining: PublicKey[]; - amount: BN; -}; - -/** - * Creates a Liquidate instruction. - * * `remaining`: - * * liab_mint_ai (if token2022 mint), - * * asset_oracle_ai, - * * liab_oracle_ai, - * * liquidator_observation_ais..., - * * liquidatee_observation_ais..., - * - * @param program - The marginfi program instance. - * @param args - The arguments required to create the instruction. - * @returns The TransactionInstruction object. - */ -export const liquidateIx = ( - program: Program, - args: LiquidateIxArgs -) => { - const oracleMeta: AccountMeta[] = args.remaining.map((pubkey) => { - if (!(pubkey instanceof PublicKey)) { - console.error("Invalid remaining key:", pubkey); - throw new Error("remaining contains invalid keys"); - } - - return { pubkey, isSigner: false, isWritable: false }; - }); - - return program.methods - .lendingAccountLiquidate(args.amount) - .accounts({ - assetBank: args.assetBankKey, - liabBank: args.liabilityBankKey, - liquidatorMarginfiAccount: args.liquidatorMarginfiAccount, - liquidateeMarginfiAccount: args.liquidateeMarginfiAccount, - tokenProgram: TOKEN_PROGRAM_ID, - }) - .remainingAccounts(oracleMeta) - .instruction(); -}; - -export type HealthPulseArgs = { - marginfiAccount: PublicKey; - remaining: PublicKey[]; -}; - -/** - * Creates a Health pulse instruction. This tx sets the user's risk engine health cache, a read-only - * way to access the on-chain risk engine's current state, typically for debugging purposes. - * * `remaining` - pass bank/oracles for each bank the user is involved with, in the SAME ORDER they - * appear in userAcc.balances (e.g. `[bank0, oracle0, bank1, oracle1]`). For staked collateral - * positions, pass the stake account and lst mint for the single pool as well: [bank0, oracle0, - * stakeAcc0, lstmint0] - * @param program - * @param args - * @returns - */ -export const healthPulse = ( - program: Program, - args: HealthPulseArgs -) => { - const oracleMeta: AccountMeta[] = args.remaining.map((pubkey) => { - if (!(pubkey instanceof PublicKey)) { - console.error("Invalid remaining key:", pubkey); - throw new Error("remaining contains invalid keys"); - } - - return { pubkey, isSigner: false, isWritable: false }; - }); - - return program.methods - .lendingAccountPulseHealth() - .accounts({ - marginfiAccount: args.marginfiAccount, - }) - .remainingAccounts(oracleMeta) - .instruction(); -}; diff --git a/tools/alerting/Cargo.toml b/tools/alerting/Cargo.toml deleted file mode 100644 index 447949035..000000000 --- a/tools/alerting/Cargo.toml +++ /dev/null @@ -1,30 +0,0 @@ -[package] -name = "alerting" -version = "0.1.0" -edition = "2021" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -anyhow = "1.0.89" -bytemuck = "1.19.0" -chrono = "0.4.38" -env_logger = "0.11.5" -log = "0.4.22" -marginfi = { path = "../../programs/marginfi", version = "0.1.0", features = [ - "mainnet-beta", - "client", - "no-entrypoint", -] } -pagerduty-rs = { version = "*", features = ["sync"] } -pyth-sdk-solana = { workspace = true } -pyth-solana-receiver-sdk = "0.3.1" -serde = "1.0.210" -solana-account-decoder = { workspace = true } -solana-client.workspace = true -solana-sdk.workspace = true -structopt = "0.3.26" -switchboard-on-demand ={ workspace = true } -switchboard-solana ={ workspace = true } -time = "0.3.36" -toml = "0.8.19" diff --git a/tools/alerting/src/main.rs b/tools/alerting/src/main.rs deleted file mode 100644 index 4c2f130d5..000000000 --- a/tools/alerting/src/main.rs +++ /dev/null @@ -1,514 +0,0 @@ -use std::{ - collections::HashMap, - mem::size_of, - str::FromStr, - time::{SystemTime, UNIX_EPOCH}, -}; - -use log::{error, info, warn}; -use marginfi::{ - constants::{PYTH_PUSH_MARGINFI_SPONSORED_SHARD_ID, PYTH_PUSH_PYTH_SPONSORED_SHARD_ID}, - state::{marginfi_group::Bank, price::OracleSetup}, -}; -use pagerduty_rs::{ - eventsv2sync::EventsV2, - types::{AlertResolve, AlertTrigger, AlertTriggerPayload, Event}, -}; -use pyth_solana_receiver_sdk::price_update::PriceUpdateV2; -use serde::Deserialize; -use solana_account_decoder::UiAccountEncoding; -use solana_client::{ - rpc_client::RpcClient, - rpc_config::{RpcAccountInfoConfig, RpcProgramAccountsConfig}, - rpc_filter::{Memcmp, RpcFilterType}, -}; -use solana_sdk::pubkey::Pubkey; -use structopt::StructOpt; -use switchboard_on_demand::PullFeedAccountData; -use switchboard_solana::{AggregatorAccountData, AnchorDeserialize}; -use time::OffsetDateTime; - -#[derive(Clone, Debug, Deserialize)] -pub struct MarginfiAlerterConfig { - rpc_url: String, - pd_integration_key: String, - marginfi_program_id: String, - marginfi_groups: Vec, - balance_alert: Vec, -} - -impl MarginfiAlerterConfig { - pub fn load_from_file(path: &str) -> Result> { - let file = std::fs::File::open(path)?; - let reader = std::io::BufReader::new(file); - let config_str = std::io::read_to_string(reader)?; - let config = toml::from_str(&config_str)?; - Ok(config) - } -} - -#[derive(Clone, Debug, Deserialize)] -struct MarginfiGroupAlertingConfig { - address: String, - max_age_secs: i64, -} - -#[derive(Clone, Debug, Deserialize)] -struct BalanceAlertingConfig { - address: String, - min_balance: f64, - label: Option, -} - -#[derive(Clone, Debug, StructOpt)] -pub struct MarginfiAlerter { - config_path: String, -} - -struct AlertingContext { - rpc_client: RpcClient, - config: MarginfiAlerterConfig, - group_config_map: HashMap, - pd: EventsV2, -} - -fn main() { - env_logger::init(); - let args = MarginfiAlerter::from_args(); - let config = MarginfiAlerterConfig::load_from_file(&args.config_path).unwrap(); - let rpc_client = RpcClient::new(config.rpc_url.clone()); - - println!( - "Starting marginfi alerter, evaluating {} groups and {} balance alerts", - config.marginfi_groups.len(), - config.balance_alert.len() - ); - - let group_config_map = config - .marginfi_groups - .iter() - .map(|group| (Pubkey::from_str(&group.address).unwrap(), group.clone())) - .collect(); - - let context = AlertingContext { - rpc_client, - config: config.clone(), - group_config_map, - pd: EventsV2::new(config.pd_integration_key.clone(), None).unwrap(), - }; - - match check_all(&context) { - Ok(_) => { - clear_error_alert(&context).unwrap(); - } - Err(e) => { - error!("Error running marginfi alerter: {:?}", e); - send_error_alert(&context, &format!("Error running marginfi alerter: {}", e)).unwrap(); - eprintln!("{:#?}", e); - std::process::exit(1); - } - } -} - -fn check_all(context: &AlertingContext) -> anyhow::Result<()> { - check_marginfi_groups(context)?; - check_balance_alert(context)?; - Ok(()) -} - -fn send_error_alert(context: &AlertingContext, message: &str) -> anyhow::Result<()> { - let event = Event::AlertTrigger::(AlertTrigger { - payload: AlertTriggerPayload { - summary: message.to_string(), - source: "marginfi-alerter".to_string(), - severity: pagerduty_rs::types::Severity::Critical, - custom_details: None, - component: None, - group: None, - class: None, - timestamp: None, - }, - dedup_key: Some("marginfi-alerter-error".to_string()), - images: None, - links: None, - client: None, - client_url: None, - }); - - context.pd.event(event).map_err(|e| anyhow::anyhow!(e))?; - - Ok(()) -} - -fn clear_error_alert(context: &AlertingContext) -> anyhow::Result<()> { - let event = Event::AlertResolve::(AlertResolve { - dedup_key: "marginfi-alerter-error".to_string(), - }); - - context.pd.event(event).map_err(|e| anyhow::anyhow!(e))?; - - Ok(()) -} - -fn check_marginfi_groups(context: &AlertingContext) -> anyhow::Result<()> { - for group in context.config.marginfi_groups.iter() { - check_marginfi_group(context, group)?; - } - - Ok(()) -} - -fn check_balance_alert(context: &AlertingContext) -> anyhow::Result<()> { - for balance in context.config.balance_alert.iter() { - check_balance(context, balance)?; - } - - Ok(()) -} - -fn check_balance( - context: &AlertingContext, - balance_config: &BalanceAlertingConfig, -) -> anyhow::Result<()> { - let address = Pubkey::from_str(&balance_config.address)?; - let balance = context.rpc_client.get_balance(&address)?; - - let min_balance_lamports = (balance_config.min_balance * 10u64.pow(9) as f64).floor() as u64; - - info!( - "Balance for account {} is {}, min balance is {}", - address, - balance as f64 / 10u64.pow(9) as f64, - balance_config.min_balance - ); - - if balance < min_balance_lamports { - send_balance_alert(context, balance_config, balance)?; - } else { - clear_balance_alert(context, &address)?; - } - - Ok(()) -} - -fn check_marginfi_group( - context: &AlertingContext, - group: &MarginfiGroupAlertingConfig, -) -> anyhow::Result<()> { - let marginfi_program_id = Pubkey::from_str(&context.config.marginfi_program_id)?; - let group_address = Pubkey::from_str(&group.address)?; - let bank_accounts = context.rpc_client.get_program_accounts_with_config( - &marginfi_program_id, - RpcProgramAccountsConfig { - filters: Some(vec![RpcFilterType::Memcmp(Memcmp::new_raw_bytes( - 8 + size_of::() + size_of::(), - group_address.to_bytes().to_vec(), - ))]), - account_config: RpcAccountInfoConfig { - encoding: Some(UiAccountEncoding::Base64), - ..Default::default() - }, - with_context: None, - }, - )?; - - let banks = bank_accounts - .into_iter() - .map(|(address, account)| { - let data = account.data.as_slice(); - bytemuck::try_from_bytes::(&data[8..]) - .cloned() - .map(|b| (address, b)) - }) - .collect::, _>>() - .map_err(|e| anyhow::anyhow!(e))?; - - info!("Found {} banks in group", banks.len()); - - let switchboard_v2_oracles = banks - .iter() - .filter(|(_, bank)| bank.config.oracle_setup == OracleSetup::SwitchboardV2) - .collect::>(); - // Pyth legacy is deprecated - let _pyth_oracles = banks - .iter() - .filter(|(_, bank)| bank.config.oracle_setup == OracleSetup::PythLegacy) - .collect::>(); - let pyth_push_oracles = banks - .iter() - .filter(|(_, bank)| bank.config.oracle_setup == OracleSetup::PythPushOracle) - .collect::>(); - let switchboard_pull_oracles = banks - .iter() - .filter(|(_, bank)| bank.config.oracle_setup == OracleSetup::SwitchboardPull) - .collect::>(); - - check_switchboard_v2_oracles(context, &switchboard_v2_oracles)?; - check_pyth_push_oracles(context, &pyth_push_oracles)?; - check_switchboard_pull_oracles(context, &switchboard_pull_oracles)?; - - Ok(()) -} - -fn check_switchboard_v2_oracles( - context: &AlertingContext, - banks: &[&(Pubkey, Bank)], -) -> anyhow::Result<()> { - info!("Checking {} switchboard v2 oracles", banks.len()); - for (address, bank) in banks { - check_switchboard_v2_oracle(context, address, bank)?; - } - - Ok(()) -} - -fn check_switchboard_v2_oracle( - context: &AlertingContext, - address: &Pubkey, - bank: &Bank, -) -> anyhow::Result<()> { - let oracle_address = bank.config.oracle_keys.first().unwrap(); - let oracle_account = context.rpc_client.get_account(oracle_address)?; - let oracle = bytemuck::try_from_bytes::(&oracle_account.data[8..]) - .map_err(|e| anyhow::anyhow!(e))?; - let group_config = context.group_config_map.get(&bank.group).unwrap(); - let max_age = group_config.max_age_secs; - let last_update = oracle.latest_confirmed_round.round_open_timestamp; - let current_time = get_current_unix_timestamp_secs(); - let oracle_age = current_time - last_update; - - info!( - "Switchboard V2 oracle for bank {} is {} seconds old", - address, oracle_age - ); - - if oracle_age > max_age { - send_stale_oracle_alert(context, address, oracle_age)?; - } else { - clear_stale_oracle_alert(context, address)?; - } - - Ok(()) -} - -fn check_pyth_push_oracles( - context: &AlertingContext, - banks: &[&(Pubkey, Bank)], -) -> anyhow::Result<()> { - for (address, bank) in banks { - check_pyth_push_oracle(context, address, bank)?; - } - - Ok(()) -} - -fn check_pyth_push_oracle( - context: &AlertingContext, - address: &Pubkey, - bank: &Bank, -) -> anyhow::Result<()> { - let oracle_address = bank.config.oracle_keys.first().unwrap(); - let oracle_account = { - let (marginfi_sponsored_oracle_address, _) = - marginfi::state::price::PythPushOraclePriceFeed::find_oracle_address( - PYTH_PUSH_MARGINFI_SPONSORED_SHARD_ID, - oracle_address.as_ref().try_into().unwrap(), - ); - let (pyth_sponsered_oracle_address, _) = - marginfi::state::price::PythPushOraclePriceFeed::find_oracle_address( - PYTH_PUSH_PYTH_SPONSORED_SHARD_ID, - oracle_address.as_ref().try_into().unwrap(), - ); - - let accounts = context.rpc_client.get_multiple_accounts(&[ - marginfi_sponsored_oracle_address, - pyth_sponsered_oracle_address, - ])?; - - match (accounts.first().cloned(), accounts.get(1).cloned()) { - (Some(Some(account)), _) => account, - (_, Some(Some(account))) => account, - _ => anyhow::bail!("Oracle account for bank {} not found", address), - } - }; - - let price_update = PriceUpdateV2::deserialize(&mut &oracle_account.data[8..])?; - let group_config = context.group_config_map.get(&bank.group).unwrap(); - let publish_time = price_update.price_message.publish_time; - let current_time = get_current_unix_timestamp_secs(); - let max_age = group_config.max_age_secs; - let oracle_age = current_time - publish_time; - - info!( - "Pyth push oracle for bank {} is {} seconds old", - address, oracle_age - ); - - if oracle_age > max_age { - send_stale_oracle_alert(context, address, oracle_age)?; - } else { - clear_stale_oracle_alert(context, address)?; - } - - Ok(()) -} - -fn check_switchboard_pull_oracles( - context: &AlertingContext, - banks: &[&(Pubkey, Bank)], -) -> anyhow::Result<()> { - for (address, bank) in banks { - check_switchboard_pull_oracle(context, address, bank)?; - } - - Ok(()) -} - -fn check_switchboard_pull_oracle( - context: &AlertingContext, - address: &Pubkey, - bank: &Bank, -) -> anyhow::Result<()> { - let oracle_address = bank.config.oracle_keys.first().unwrap(); - let oracle_account = context.rpc_client.get_account(oracle_address)?; - let pull_feed = bytemuck::try_from_bytes::(&oracle_account.data[8..]) - .map_err(|e| anyhow::anyhow!(e))?; - let group_config = context.group_config_map.get(&bank.group).unwrap(); - let max_age = group_config.max_age_secs; - let current_time = get_current_unix_timestamp_secs(); - let last_update = pull_feed.last_update_timestamp; - let oracle_age = current_time - last_update; - - info!( - "Switchboard pull oracle for bank {} is {} seconds old", - address, oracle_age - ); - - if oracle_age > max_age { - send_stale_oracle_alert(context, address, oracle_age)?; - } else { - clear_stale_oracle_alert(context, address)?; - } - - Ok(()) -} - -fn send_balance_alert( - context: &AlertingContext, - balance_config: &BalanceAlertingConfig, - balance: u64, -) -> anyhow::Result<()> { - let balance_ui = balance as f64 / 10u64.pow(9) as f64; - warn!( - "Account {} ({}) has balance of {} below minimum {}", - balance_config.address, - balance_config - .label - .clone() - .unwrap_or(balance_config.address.to_string()), - balance_ui, - balance_config.min_balance - ); - - context - .pd - .event(pagerduty_rs::types::Event::AlertTrigger::( - AlertTrigger { - payload: AlertTriggerPayload { - severity: pagerduty_rs::types::Severity::Critical, - summary: format!( - "Account {} ({}) has balance of {} below minimum {}", - balance_config.address, - balance_config - .label - .clone() - .unwrap_or(balance_config.address.to_string()), - balance_ui, - balance_config.min_balance - ), - source: "marginfi-alerter".to_string(), - timestamp: Some(OffsetDateTime::now_utc()), - component: None, - group: None, - class: None, - custom_details: None, - }, - dedup_key: Some(format!("balance-{}", balance_config.address)), - images: None, - links: None, - client: None, - client_url: None, - }, - ))?; - - Ok(()) -} - -fn clear_balance_alert(context: &AlertingContext, address: &Pubkey) -> anyhow::Result<()> { - context - .pd - .event(Event::AlertResolve::(AlertResolve { - dedup_key: format!("balance-{}", address), - }))?; - - Ok(()) -} - -fn send_stale_oracle_alert( - context: &AlertingContext, - address: &Pubkey, - oralce_age_secs: i64, -) -> anyhow::Result<()> { - warn!( - "Oracle for bank {} is stale by {} seconds, sending alert", - address, oralce_age_secs - ); - - context - .pd - .event(pagerduty_rs::types::Event::AlertTrigger::( - AlertTrigger { - payload: AlertTriggerPayload { - severity: pagerduty_rs::types::Severity::Critical, - summary: format!( - "Oracle for bank {} is stale by {} seconds", - address, oralce_age_secs - ), - source: "marginfi-alerter".to_string(), - timestamp: Some(OffsetDateTime::now_utc()), - component: None, - group: None, - class: None, - custom_details: None, - }, - dedup_key: Some(get_oracle_dedup_key(address)), - images: None, - links: None, - client: None, - client_url: None, - }, - ))?; - - Ok(()) -} - -fn clear_stale_oracle_alert(context: &AlertingContext, address: &Pubkey) -> anyhow::Result<()> { - context - .pd - .event(Event::AlertResolve::(AlertResolve { - dedup_key: get_oracle_dedup_key(address), - }))?; - - Ok(()) -} - -fn get_oracle_dedup_key(address: &Pubkey) -> String { - format!("stale-oracle-{}", address) -} - -fn get_current_unix_timestamp_secs() -> i64 { - SystemTime::now() - .duration_since(UNIX_EPOCH) - .expect("Time went backwards") - .as_secs() as i64 -} diff --git a/tools/llama-snapshot-tool/Cargo.toml b/tools/llama-snapshot-tool/Cargo.toml deleted file mode 100644 index ffd339153..000000000 --- a/tools/llama-snapshot-tool/Cargo.toml +++ /dev/null @@ -1,41 +0,0 @@ -[package] -name = "llama-snapshot-tool" -version = "0.1.0" -edition = "2021" - -[[bin]] -name = "llama-snapshot" -path = "src/bin/main.rs" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -solana-sdk = { workspace = true } -solana-client = { workspace = true } -solana-account-decoder = { workspace = true } - -anchor-client = { workspace = true } -anchor-spl = { workspace = true } - -marginfi = { path = "../../programs/marginfi", version = "0.1.0", features = [ - "mainnet-beta", - "client", - "no-entrypoint", -] } - -clap = { version = "3.2.6", features = ["derive"] } -log = "0.4.17" -env_logger = "0.9.0" -serde = { version = "1.0", features = ["derive"] } -serde_json = "1.0.81" -fixed = "1.12.0" -fixed-macro = "1.2.0" -bytemuck = "1.12.3" -reqwest = { version = "0.11", features = [ - "json", -] } # reqwest with JSON parsing support -futures = "0.3" # for our async / await blocks -tokio = { version = "1.12.0", features = ["full"] } # for our async runtime -anyhow = "1.0" -lazy_static = "1.4" -rust-s3 = "0.33.0" diff --git a/tools/llama-snapshot-tool/solana.tokenlist.json b/tools/llama-snapshot-tool/solana.tokenlist.json deleted file mode 100644 index e53f428d1..000000000 --- a/tools/llama-snapshot-tool/solana.tokenlist.json +++ /dev/null @@ -1,155892 +0,0 @@ -{ - "name": "Solana Token List", - "logoURI": "https://cdn.jsdelivr.net/gh/trustwallet/assets@master/blockchains/solana/info/logo.png", - "keywords": ["solana", "spl"], - "tags": { - "stablecoin": { - "name": "stablecoin", - "description": "Tokens that are fixed to an external asset, e.g. the US dollar" - }, - "ethereum": { - "name": "ethereum", - "description": "Asset bridged from ethereum" - }, - "lp-token": { - "name": "lp-token", - "description": "Asset representing liquidity provider token" - }, - "wrapped-sollet": { - "name": "wrapped-sollet", - "description": "Asset wrapped using sollet bridge" - }, - "wrapped": { - "name": "wrapped", - "description": "Asset wrapped using wormhole bridge" - }, - "leveraged": { - "name": "leveraged", - "description": "Leveraged asset" - }, - "bull": { - "name": "bull", - "description": "Leveraged Bull asset" - }, - "bear": { - "name": "bear", - "description": "Leveraged Bear asset" - }, - "nft": { - "name": "nft", - "description": "Non-fungible token" - }, - "security-token": { - "name": "security-token", - "description": "Tokens that are used to gain access to an electronically restricted resource" - }, - "utility-token": { - "name": "utility-token", - "description": "Tokens that are designed to be spent within a certain blockchain ecosystem e.g. most of the SPL-Tokens" - }, - "tokenized-stock": { - "name": "tokenized-stock", - "description": "Tokenized stocks are tokenized derivatives that represent traditional securities, particularly shares in publicly firms traded on regulated exchanges" - } - }, - "timestamp": "2021-03-03T19:57:21+0000", - "tokens": [ - { - "chainId": 101, - "address": "3SghkPdBSrpF9bzdAy5LwR4nGgFbqNcC6ZSq8vtZdj91", - "symbol": "EV1", - "name": "EveryOne Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3SghkPdBSrpF9bzdAy5LwR4nGgFbqNcC6ZSq8vtZdj91/logo.png", - "tags": ["currency"], - "extensions": { - "facebook": "https://facebook.com/everyonecoin", - "twitter": "https://twitter.com/everyonecoin", - "website": "https://everyonecoin.com/" - } - }, - { - "chainId": 101, - "address": "J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn", - "symbol": "JitoSOL", - "name": "Jito SOL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EK58dp4mxsKwwuySWQW826i3fwcvUK69jPph22VUcd2H/logo.png", - "tags": [] - }, - { - "chainId": 101, - "address": "DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263", - "symbol": "BONK", - "name": "Bonk", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EK58dp4mxsKwwuySWQW826i3fwcvUK69jPph22VUcd2H/logo.png", - "tags": [] - }, - { - "chainId": 101, - "address": "NGK3iHqqQkyRZUj4uhJDQqEyKKcZ7mdawWpqwMffM3s", - "symbol": "YAKU", - "name": "Yaku", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EK58dp4mxsKwwuySWQW826i3fwcvUK69jPph22VUcd2H/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "CbNYA9n3927uXUukee2Hf4tm3xxkffJPPZvGazc2EAH1", - "symbol": "agEUR", - "name": "agEUR (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CbNYA9n3927uXUukee2Hf4tm3xxkffJPPZvGazc2EAH1/logo.png", - "tags": ["ethereum", "wrapped", "wormhole"], - "extensions": { - "address": "0x1a7e4e63778B4f12a199C062f3eFdD288afCBce8", - "assetContract": "https://etherscan.io/address/0x1a7e4e63778B4f12a199C062f3eFdD288afCBce8", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "ageur", - "description": "Angle is the first decentralized, capital efficient and over-collateralized stablecoin protocol", - "discord": "https://discord.gg/z3kCpTaKMh", - "twitter": "https://twitter.com/AngleProtocol", - "website": "https://www.angle.money" - } - }, - { - "chainId": 101, - "address": "31GpPxe1SW8pn7GXimM73paD8PZyCsmVSGTLkwUAJvZ8", - "symbol": "ANGLE", - "name": "ANGLE (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/31GpPxe1SW8pn7GXimM73paD8PZyCsmVSGTLkwUAJvZ8/logo.svg", - "tags": ["ethereum", "wrapped", "wormhole"], - "extensions": { - "address": "0x31429d1856ad1377a8a0079410b297e1a9e214c2", - "assetContract": "https://etherscan.io/address/0x31429d1856ad1377a8a0079410b297e1a9e214c2", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "angle-protocol", - "description": "Angle is the first decentralized, capital efficient and over-collateralized stablecoin protocol", - "discord": "https://discord.gg/z3kCpTaKMh", - "twitter": "https://twitter.com/AngleProtocol", - "website": "https://www.angle.money" - } - }, - { - "chainId": 101, - "address": "G6nZYEvhwFxxnp1KZr1v9igXtipuB5zL6oDGNMRZqF3q", - "symbol": "BAD", - "name": "EA Bad", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/G6nZYEvhwFxxnp1KZr1v9igXtipuB5zL6oDGNMRZqF3q/EABadlogo.PNG", - "tags": ["utility-token", "community-token", "meme-token"], - "extensions": { - "twitter": "https://twitter.com/EABadtoken" - } - }, - { - "chainId": 101, - "address": "Fm9rHUTF5v3hwMLbStjZXqNBBoZyGriQaFM6sTFz3K8A", - "symbol": "MBS", - "name": "MonkeyBucks", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Fm9rHUTF5v3hwMLbStjZXqNBBoZyGriQaFM6sTFz3K8A/logo.png", - "tags": [ - "utility-token", - "game-token", - "game-currency", - "GameFi", - "Gaming" - ], - "extensions": { - "coingeckoId": "monkeyball", - "description": "MonkeyLeague is the next-gen esports metaverse empowering players to create, play, compete, and earn.", - "discord": "https://discord.gg/monkeyleague", - "facebook": "https://www.facebook.com/TheMonkeyLeague", - "instagram": "https://www.instagram.com/themonkeyleague/", - "medium": "https://medium.com/@MonkeyLeague", - "reddit": "https://www.reddit.com/r/MonkeyBallGame", - "telegram": "https://t.me/MonkeyLeague_Official", - "twitter": "https://twitter.com/TheMonkeyLeague", - "website": "https://www.monkeyleague.io/" - } - }, - { - "chainId": 101, - "address": "FCuoMii64H5Ee4eVWBjP18WTFS8iLUJmGi16Qti1xFQ2", - "symbol": "EDB", - "name": "Emerald Block", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SBPToken/token-list/main/assets/mainnet/FCuoMii64H5Ee4eVWBjP18WTFS8iLUJmGi16Qti1xFQ2/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/kzPBdWtbrK", - "instagram": "https://instagram.com/solblockpunks", - "twitter": "https://twitter.com/solblockpunks", - "website": "https://solblockpunks.com" - } - }, - { - "chainId": 101, - "address": "HfYFjMKNZygfMC8LsQ8LtpPsPxEJoXJx4M6tqi75Hajo", - "symbol": "CWAR", - "name": "Cryowar Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HfYFjMKNZygfMC8LsQ8LtpPsPxEJoXJx4M6tqi75Hajo/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.com/invite/cryowar", - "telegram": "https://t.me/cryowar", - "twitter": "https://twitter.com/CryowarDevs", - "website": "https://cryowar.com" - } - }, - { - "chainId": 101, - "address": "BqRtfrNpvRAW3KW319hvhPoTu76wKU2LTdXJyG9CyDze", - "symbol": "ECHO", - "name": "EchoDao", - "decimals": 9, - "logoURI": "https://i.imgur.com/HnnxQND.png", - "tags": ["utility-token", "DAO-fork"], - "extensions": { - "discord": "https://discord.com/invite/NtvVPs4WnY", - "serumV3Usdc": "8bjQ8XvzrDxKxHhTccpLkqGLbBrCAAPuv6KHrgN95nDW", - "twitter": "https://twitter.com/echodao_sol", - "website": "https://echodao.xyz" - } - }, - { - "chainId": 101, - "address": "HCXXtXPasqcF4BVsrPQPfHMQPUofoCbDbjsTUANFSHDR", - "symbol": "MONKE", - "name": "MONKE TOKEN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HCXXtXPasqcF4BVsrPQPfHMQPUofoCbDbjsTUANFSHDR/logo.png", - "tags": ["community-token", "meme-token"], - "extensions": { - "website": "https://monketoken.xyz/" - } - }, - { - "chainId": 101, - "address": "7gfwZiMD3B6hJWxejr4E3PdsfyVndfuGuk97LfDhJNNh", - "symbol": "DIBU", - "name": "DickButt", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/xRoBBeRT/DickButtLogo/DickButt.png", - "tags": ["community-token", "meme-token"], - "extensions": { - "discord": "https://discord.com/invite/solanadickbutt", - "twitter": "https://twitter.com/SolanaDickButt", - "website": "https://solanadickbutt.com" - } - }, - { - "chainId": 101, - "address": "6JdcMdhqgCtcP4U9tieRqmKLhPLxRMLC67QfmdXAJBvZ", - "symbol": "KITTY", - "name": "KITTY SOLANA", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6JdcMdhqgCtcP4U9tieRqmKLhPLxRMLC67QfmdXAJBvZ/logo.png", - "tags": ["meme-token"], - "extensions": { - "coingeckoId": "kitty-solana", - "coinmarketcap": "https://coinmarketcap.com/currencies/kitty-solana/", - "discord": "https://discord.gg/XaRfbtsscz", - "serumV3Usdc": "8bjQ8XvzrDxKxHhTccpLkqGLbBrCAAPuv6KHrgN95nDW", - "twitter": "https://twitter.com/kitty_solana", - "website": "https://kittysolana.com/" - } - }, - { - "chainId": 101, - "address": "HDiA4quoMibAGeJQzvxajp3Z9cvnkNng99oVrnuNj6px", - "symbol": "KSAMO", - "name": "KING SAMO", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HDiA4quoMibAGeJQzvxajp3Z9cvnkNng99oVrnuNj6px/logo.png", - "tags": ["meme-token"], - "extensions": { - "discord": "https://discord.com/invite/R8QhkNHn", - "telegram": "https://t.me/TokenKingSamo", - "twitter": "https://twitter.com/kingsamocoin", - "website": "https://kingsamo.com" - } - }, - { - "chainId": 101, - "address": "73YQDsoPB3t5n5GqX53tKrwJK1n6HCZ935MEbo2gEYU5", - "symbol": "KAJAME", - "name": "Kajame", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/73YQDsoPB3t5n5GqX53tKrwJK1n6HCZ935MEbo2gEYU5/logo.png", - "tags": ["meme-token", "social-token", "community-token"], - "extensions": { - "blog": "https://blog.me-idea.in.th", - "website": "https://kajame.xyz" - } - }, - { - "chainId": 101, - "address": "DJKX1cX2SPPaTdYBeuriUeQUUEpi2UGBGGPQthNMrgaa", - "symbol": "MONKE", - "name": "MONKE TOKEN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DJKX1cX2SPPaTdYBeuriUeQUUEpi2UGBGGPQthNMrgaa/logo.png", - "tags": ["community-token", "meme-token"], - "extensions": { - "website": "https://monketoken.xyz/" - } - }, - { - "chainId": 101, - "address": "6TgvYd7eApfcZ7K5Mur7MaUQ2xT7THB4cLHWuMkQdU5Z", - "symbol": "OTR", - "name": "Otter Finance", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6TgvYd7eApfcZ7K5Mur7MaUQ2xT7THB4cLHWuMkQdU5Z.png", - "tags": ["meme-token"], - "extensions": { - "discord": "https://discord.gg/chfgc9wxnw", - "serumV3Usdc": "4k4WXdmrWjCG71E4pxMs6SQRRB5cypGNYatKb2iMnqN4", - "twitter": "https://twitter.com/otter_finance", - "website": "http://www.otterfinance.site" - } - }, - { - "chainId": 101, - "address": "382HfaEjcUNhwoGbYmL58DVX8GUvjrXiTPchCWKjchWA", - "symbol": "SPLN", - "name": "SHEEPLANA", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/382HfaEjcUNhwoGbYmL58DVX8GUvjrXiTPchCWKjchWA.png", - "tags": ["meme-token"], - "extensions": { - "discord": "https://discord.gg/zV9dyHfxGb", - "twitter": "https://twitter.com/sheeplana_coin", - "website": "https://www.sheeplana.online/" - } - }, - { - "chainId": 101, - "address": "EH49ziLeKhJtzUzdys5238pSKpvrgJvmi3EStrZ9QaY7", - "symbol": "RAC", - "name": "Rainc", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EH49ziLeKhJtzUzdys5238pSKpvrgJvmi3EStrZ9QaY7/logo.png", - "tags": ["meme-token"], - "extensions": { - "discord": "https://discord.io/rainc", - "serumV3Usdc": "21eq7jsx59jPFo2gt4npreKu1voURzcjyPniBdgupuQC", - "twitter": "https://twitter.com/raincproject", - "website": "https://www.raincsol.com/" - } - }, - { - "chainId": 101, - "address": "2mDJPcvv7vigZo9ZPxhHLpKQSixCkbohVY35eX6NkN6m", - "symbol": "TBK", - "name": "TokenBook", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2mDJPcvv7vigZo9ZPxhHLpKQSixCkbohVY35eX6NkN6m/logo.png", - "tags": ["meme-token"], - "extensions": { - "serumV3Usdc": "DoL5SXaax9LwQM9JfqFBymiUfSxH9A9cwPugPuHvNTDM", - "twitter": "https://twitter.com/TokenBook_tbk" - } - }, - { - "chainId": 101, - "address": "DcvJP16Cw5oqTbtHmpJ4JGXaqBvV5m6eMZj5rGsFLpwU", - "symbol": "BOOGI", - "name": "BABY OOGI", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DcvJP16Cw5oqTbtHmpJ4JGXaqBvV5m6eMZj5rGsFLpwU/logo.png", - "tags": ["community-token", "meme-token"], - "extensions": { - "twitter": "https://twitter.com/babyoogi_", - "website": "https://babyoogi.xyz/" - } - }, - { - "chainId": 101, - "address": "48iGP5MUTZ8DCfDvZ9dpgKySP2iekQ3zPKZM8AhDjEmw", - "symbol": "VIRAL", - "name": "Viraverse", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/48iGP5MUTZ8DCfDvZ9dpgKySP2iekQ3zPKZM8AhDjEmw/logo.png", - "tags": [ - "stake-pool-token", - "utility-token", - "security-token", - "community-token", - "viraverse" - ], - "extensions": { - "discord": "https://discord.gg/EwVdMYvEgV", - "telegram": "https://t.me/viraverseio", - "twitter": "https://twitter.com/viraverseio", - "website": "https://viraverse.io" - } - }, - { - "chainId": 101, - "address": "2WnVfjtW9QttRwqxn3RPnHBFHMR3cyA5Ca3zug41Q9Xb", - "symbol": "HNI", - "name": "Golden Techie Hannibal Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2WnVfjtW9QttRwqxn3RPnHBFHMR3cyA5Ca3zug41Q9Xb/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://crpanadasoft.com" - } - }, - { - "chainId": 101, - "address": "CgbJxXyaHeU8VsquBpySuFXA94b6LWXxioZ28wRr8fs9", - "symbol": "VINU", - "name": "Viral Inu", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CgbJxXyaHeU8VsquBpySuFXA94b6LWXxioZ28wRr8fs9/logo.png", - "tags": [ - "stake-pool-token", - "utility-token", - "meme-token", - "community-token" - ], - "extensions": { - "discord": "https://discord.gg/zpJ7zADRZ5", - "telegram": "https://t.me/viralinu", - "twitter": "https://twitter.com/ViralInu", - "website": "https://viralinu.com" - } - }, - { - "chainId": 101, - "address": "6bLp99VoqKU1C3Qp6VTNvSoCoc78jMGxPkGSSopq8wHB", - "symbol": "Paws", - "name": "Solana Paws", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6bLp99VoqKU1C3Qp6VTNvSoCoc78jMGxPkGSSopq8wHB/logo.png", - "tags": ["meme-token", "community", "doge", "Paws"], - "extensions": { - "discord": "https://discord.gg/sVP35wfPhX", - "twitter": "https://twitter.com/Sol_Paws", - "website": "https://www.solanapaws.com" - } - }, - { - "chainId": 101, - "address": "GGupQCMnyEmHKcqFu72qCTm6yEYpVyhouY9dSAMEXLsC", - "symbol": "DOGEC", - "name": "Dogecoin Cash", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GGupQCMnyEmHKcqFu72qCTm6yEYpVyhouY9dSAMEXLsC/logo.png", - "tags": ["community-token", "meme-token", "doge", "dogecoin"], - "extensions": { - "twitter": "https://twitter.com/dogec_cash", - "website": "https://www.dogecoincash.info" - } - }, - { - "chainId": 101, - "address": "2d9LcdAQCnxPHSca6frjQzYKapNzB7caSuLKpeWBctvT", - "symbol": "Taboo", - "name": "TABOO TOKEN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2d9LcdAQCnxPHSca6frjQzYKapNzB7caSuLKpeWBctvT/logo.png", - "tags": ["community-token", "Taboo-token", "Taboo", "Videos"] - }, - { - "chainId": 101, - "address": "CrhUSH7FDwB37BYvPsVnVbsGVeE81biBzfkD4A4fyJMv", - "symbol": "Vikings", - "name": "Viking Legend", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CrhUSH7FDwB37BYvPsVnVbsGVeE81biBzfkD4A4fyJMv/logo.png", - "tags": ["community-token", "viking-token", "floki", "nfts"] - }, - { - "chainId": 101, - "address": "3BYQt5MtdUSDkGwPa7F5pxFNx6csyUK2zAqNgoAsQ96h", - "symbol": "VIKINGxFLOKI", - "name": "VIKINGxFLOKI", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3BYQt5MtdUSDkGwPa7F5pxFNx6csyUK2zAqNgoAsQ96h/logo.png", - "tags": ["community-token", "viking-token", "viking-floki", "nfts"] - }, - { - "chainId": 101, - "address": "zWxLppNEHinqYbQffzp2T5yNXUzyQUsHZ39nxjTqk6F", - "symbol": "METAS", - "name": "Meta Syndrome", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/zWxLppNEHinqYbQffzp2T5yNXUzyQUsHZ39nxjTqk6F/logo.png", - "tags": ["community-token", "meta-token", "meta-mark", "nfts"] - }, - { - "chainId": 101, - "address": "8sMa1Jfcpt2eSkKDtcd6rurX27gqxkrEvXn5jHt3suGB", - "symbol": "DGMOON", - "name": "DogeMoonxSOL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8sMa1Jfcpt2eSkKDtcd6rurX27gqxkrEvXn5jHt3suGB/logo.png", - "tags": ["community-token", "doge-token", "doge", "nfts"] - }, - { - "chainId": 101, - "address": "8g9kLFgtHF4kMVjGbpnPNUU8QbxMHpLZTKhAJyvwr9on", - "symbol": "MCAT", - "name": "Meta Cat", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8g9kLFgtHF4kMVjGbpnPNUU8QbxMHpLZTKhAJyvwr9on/logo.png", - "tags": [ - "community-token", - "cat-token", - "cat", - "nfts", - "meta", - "Facebook" - ] - }, - { - "chainId": 101, - "address": "H5TA9LexsmmvLM49zdEkbaPCcHJed8TTFtRqny81tEaK", - "symbol": "xVideos", - "name": "xVideo Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/H5TA9LexsmmvLM49zdEkbaPCcHJed8TTFtRqny81tEaK/logo.png", - "tags": ["community-token", "platform", "videos", "payment"] - }, - { - "chainId": 101, - "address": "roCKojKezC7HhPxph5qb4UBasvmZJWgegCF57PvaV2f", - "symbol": "ROCK", - "name": "RockDeFi", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/roCKojKezC7HhPxph5qb4UBasvmZJWgegCF57PvaV2f/logo.png", - "tags": ["stablecoin", "asset"], - "extensions": { - "website": "https://rockdefi.app/" - } - }, - { - "chainId": 101, - "address": "FeGm2DB4EWHm2LS8ABnRatzARDRYFyUPkLsSJkJwBuSu", - "symbol": "FKM", - "name": "FLOKIMUSK (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FeGm2DB4EWHm2LS8ABnRatzARDRYFyUPkLsSJkJwBuSu/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xc999f49bb48179d5df09402a4a7a4034bc039f81", - "assetContract": "https://bscscan.com/address/0xc999f49bb48179d5df09402a4a7a4034bc039f81", - "bridgeContract": "https://bscscan.com/address/0xB6F6D86a8f9879A9c87f643768d9efc38c1Da6E7", - "twitter": "https://twitter.com/flokimuskmeme", - "website": "https://flokimuskweb.com" - } - }, - { - "chainId": 101, - "address": "usdrQqxAGgWsBRzzcckAi9ZAzHp19rFCNn87p4Q8Eir", - "symbol": "USDR", - "name": "RockDeFi Stablecoin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/usdrQqxAGgWsBRzzcckAi9ZAzHp19rFCNn87p4Q8Eir/logo.png", - "tags": ["stablecoin", "asset"], - "extensions": { - "website": "https://rockdefi.app/" - } - }, - { - "chainId": 101, - "address": "9cU8yLEAidMNVGEq6QHPe2ktN7SV2qqvLABth8YiSwYx", - "symbol": "PARM", - "name": "Parm Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9cU8yLEAidMNVGEq6QHPe2ktN7SV2qqvLABth8YiSwYx/logo.png", - "tags": ["community-token", "meme-token"], - "extensions": { - "twitter": "https://twitter.com/theeggplantNFT", - "website": "https://www.eggplantparty.com" - } - }, - { - "chainId": 101, - "address": "A9Nc6Yo9YGKsaeAb2nsQFSQpLcdotGqjEJmEQFzZeeqX", - "symbol": "GM", - "name": "Good Morning Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/A9Nc6Yo9YGKsaeAb2nsQFSQpLcdotGqjEJmEQFzZeeqX/logo.png", - "tags": ["meme-token", "community-token"], - "extensions": { - "website": "https://goodmorning.money" - } - }, - { - "chainId": 101, - "address": "AMp8Jo18ZjK2tuQGfjKAkkWnVP4NWX5sav4NJH6pXF2D", - "symbol": "ASTRA", - "name": "AstraPad", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AMp8Jo18ZjK2tuQGfjKAkkWnVP4NWX5sav4NJH6pXF2D/logo.png", - "tags": ["Launchpad", "NFT"], - "extensions": { - "coingeckoId": "astrapad", - "telegram": "https://t.me/AstraPadANN", - "twitter": "https://twitter.com/astrapadio", - "website": "https://astrapad.io/" - } - }, - { - "chainId": 101, - "address": "45u9AsJtN2KkYpH6GCXtwuoDF7HwgMjTQ84xfH6SJYQy", - "symbol": "PUT", - "name": "Pedals Up Token", - "decimals": 10, - "logoURI": "https://cdn.jsdelivr.net/gh/devdutt6/PedalsUpToken/Pedals/pedals.png", - "tags": ["personal", "development"], - "extensions": { - "website": "https://pedalsup.com/" - } - }, - { - "chainId": 101, - "address": "2kzNeq9Yc6rghrgSfat3cvBkmK9JiePaLv7B4r1YKGDX", - "symbol": "FUTT", - "name": "Futtbucks", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2kzNeq9Yc6rghrgSfat3cvBkmK9JiePaLv7B4r1YKGDX/logo.png", - "tags": ["community-token", "currency"], - "extensions": { - "instagram": "https://www.instagram.com/futt.bucks/", - "website": "https://futtbucks.com/" - } - }, - { - "chainId": 101, - "address": "DE3Tv7eWpXGanVQC9RW1P9RG6AHWtC8VgYS9hRRVcF93", - "symbol": "FUTT", - "name": "Futtbucks", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2kzNeq9Yc6rghrgSfat3cvBkmK9JiePaLv7B4r1YKGDX/logo.png", - "tags": ["community-token", "currency"], - "extensions": { - "instagram": "https://www.instagram.com/futt.bucks/", - "website": "https://futtbucks.com/" - } - }, - { - "chainId": 101, - "address": "6SKogZxCWY9jKsKPMT3ChJUhQxAEeB6NjVidXQK6TEdW", - "symbol": "GDoge", - "name": "Golden Doge Solana", - "decimals": 1, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6SKogZxCWY9jKsKPMT3ChJUhQxAEeB6NjVidXQK6TEdW/Logo.png", - "tags": ["community-token", "meme-token", "doge", "dogecoin"], - "extensions": { - "twitter": "https://twitter.com/GoldSolDoge", - "website": "https://http://www.goldsoldoge.com/" - } - }, - { - "chainId": 101, - "address": "FaiPGacTM7YBmacumbg4ZnDx7sKtGcG3LkcVoqfddEA7", - "symbol": "BULL", - "name": "theBULL Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FaiPGacTM7YBmacumbg4ZnDx7sKtGcG3LkcVoqfddEA7/logo.png", - "tags": ["community-token", "meme-token", "NFT"], - "extensions": { - "discord": "https://discord.com/invite/B6sd88UVmD", - "twitter": "https://twitter.com/theBULL_NFT" - } - }, - { - "chainId": 101, - "address": "2XSuy8RSESbtYRBbVHxGWuoikn3B6iXKVKzN4i3owTCf", - "symbol": "BSAMO", - "name": "BUFF SAMO", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2XSuy8RSESbtYRBbVHxGWuoikn3B6iXKVKzN4i3owTCf/logo.png", - "tags": ["community-token"], - "extensions": { - "coingeckoId": "buff-samo", - "coinmarketcap": "https://coinmarketcap.com/currencies/buff-samo/", - "discord": "https://discord.link/BuffSamo", - "twitter": "https://twitter.com/buffsamo", - "website": "http://buffsamo.tech/" - } - }, - { - "chainId": 101, - "address": "DNmxHPgeVLSofyAriirHybKoNx1baM2ufiHKs1W7YyPc", - "symbol": "RPN", - "name": "RoyalPangolins", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DNmxHPgeVLSofyAriirHybKoNx1baM2ufiHKs1W7YyPc/logo.png", - "extensions": { - "discord": "https://discord.gg/XvjxsRzK", - "twitter": "https://twitter.com/RoyalPangolins", - "website": "https://royalpangolins.io/" - } - }, - { - "chainId": 101, - "address": "FdnEZ71hjabwo6Eo6XHGyK4QrE1tVQtBoTGMmgWYAuDn", - "symbol": "GDoge", - "name": "Gold Doge Solana", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FdnEZ71hjabwo6Eo6XHGyK4QrE1tVQtBoTGMmgWYAuDn/logo.png", - "tags": ["community-token", "meme-token", "doge", "dogecoin"], - "extensions": { - "twitter": "https://twitter.com/GoldSolDoge", - "website": "https://http://www.goldsoldoge.com/" - } - }, - { - "chainId": 101, - "address": "4eG64sB6SpvXve4WoRAN956UFKoETLP4JDyMU51TMdep", - "symbol": "WZWT", - "name": "WIZ WIT Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4eG64sB6SpvXve4WoRAN956UFKoETLP4JDyMU51TMdep/logo.png", - "tags": ["meme-token"], - "extensions": { - "description": "The world's 1st cheesesteak-based currency, brought to you by the City of Brotherly Love (Philly!!!).", - "discord": "https://discord.gg/ptYZPtxZf4", - "twitter": "https://twitter.com/phillytoken", - "website": "https://phillytoken.com" - } - }, - { - "chainId": 101, - "address": "Bjgh4YsLdicr8WArz9ftdSmpWNcQjsZ9KV3w9fkjiLG", - "symbol": "SOLRC", - "name": "SolRaca", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/Solraca/token-list/main/assets/mainnet/Bjgh4YsLdicr8WArz9ftdSmpWNcQjsZ9KV3w9fkjiLG/solraca.png", - "tags": ["meme-token"], - "extensions": { - "telegram": "https://t.me/solracaofficial" - } - }, - { - "chainId": 101, - "address": "45HfvXJHY9msY2i4EmUpume1mSMLUvdaWsJRbctAobQM", - "symbol": "INU", - "name": "Monster Inu", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/45HfvXJHY9msY2i4EmUpume1mSMLUvdaWsJRbctAobQM/logo.png", - "tags": ["meme-token", "metaverse"], - "extensions": { - "twitter": "https://twitter.com/inumonster", - "website": "https://inu.monster" - } - }, - { - "chainId": 101, - "address": "FEYFyLCFLcBNfSuaf2eXNvyY5Jpii7zg9X48Br5vyenG", - "symbol": "SUSDT", - "name": "Stether", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FEYFyLCFLcBNfSuaf2eXNvyY5Jpii7zg9X48Br5vyenG/logo.png", - "tags": ["stablecoin"], - "extensions": { - "website": "https://stether.io/" - } - }, - { - "chainId": 102, - "address": "8ZY7EkwN7LxifYvvrQDbpjqxkrjHUFMwWgq8fupNNvub", - "symbol": "BIAD", - "name": "daib test token", - "decimals": 6, - "logoURI": "https://s3.us-west-2.amazonaws.com/secure.notion-static.com/02242929-14bc-4204-ac71-56d855a07078/512_daia.png?X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Credential=AKIAT73L2G45O3KS52Y5%2F20211104%2Fus-west-2%2Fs3%2Faws4_request\u0026X-Amz-Date=20211104T051518Z\u0026X-Amz-Expires=86400\u0026X-Amz-Signature=df1424dcb1be408faa45ef6af1f7769edf977da365822e00c34a2150167bfe58\u0026X-Amz-SignedHeaders=host\u0026response-content-disposition=filename%20%3D%22512_daia.png%22", - "extensions": { - "website": "https://daios.io/" - } - }, - { - "chainId": 101, - "address": "4JEaBv49a4KdSrMduKZS3PcBCcPmPEmaY3uP7kXv6cj6", - "symbol": "$ASS", - "name": "Ass Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/daddydonke/gem-farm-ui/main/public/images/icon.png", - "tags": ["MEMES-TOKEN", "NFTS", "DEX"], - "extensions": { - "twitter": "https://twitter.com/solanadonkeBs", - "website": "https://solanadonkey.business" - } - }, - { - "chainId": 101, - "address": "X71v8NH6dbLwPsn4TR1Tx38K4uWgGZ78mC599XSPJox", - "symbol": "SNS", - "name": "NSPACE Supporter", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/X71v8NH6dbLwPsn4TR1Tx38K4uWgGZ78mC599XSPJox/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/NJjqzzXNKb", - "twitter": "https://twitter.com/mynftspace_art", - "website": "http://mynftspace.art/" - } - }, - { - "chainId": 101, - "address": "NpgsBSfavf5hmUeGQAbMz5pHDtXhn9ZFNRQypTr8Tfv", - "symbol": "NSPACE", - "name": "My NFT Space", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/NpgsBSfavf5hmUeGQAbMz5pHDtXhn9ZFNRQypTr8Tfv/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/NJjqzzXNKb", - "twitter": "https://twitter.com/mynftspace_art", - "website": "http://mynftspace.art/" - } - }, - { - "chainId": 101, - "address": "67Z7Pr4pX5iMczBox2bCgeU7Dy6SJRm2kZaMJoptstse", - "symbol": "KOMO", - "name": "Komondor", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/67Z7Pr4pX5iMczBox2bCgeU7Dy6SJRm2kZaMJoptstse/logo.svg", - "tags": ["community-token"], - "extensions": { - "description": "KOMO is a community token, Dex, and Dapps on Solana.", - "discord": "https://discord.gg/yMVPDuZKeq", - "facebook": "https://web.facebook.com/komondor.so", - "github": "https://github.com/komondorok", - "instagram": "https://instagram.com/komondor.so", - "medium": "https://komondorok.medium.com/", - "telegram": "https://t.me/komondor_ann", - "twitter": "https://twitter.com/komondor_so", - "website": "https://komondor.so/" - } - }, - { - "chainId": 101, - "address": "p31qJ7LDLNRC57rU5GsXxFGBsnXheFXSsEn3avPoKDc", - "symbol": "ART", - "name": "Artchive-Coin", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/p31qJ7LDLNRC57rU5GsXxFGBsnXheFXSsEn3avPoKDc/logo.png", - "tags": ["utility-token", "community-token", "governance-token"], - "extensions": { - "instagram": "https://www.instagram.com/artchive.nft/", - "website": "https://artchivecoins.com/" - } - }, - { - "chainId": 101, - "address": "BiDB55p4G3n1fGhwKFpxsokBMqgctL4qnZpDH1bVQxMD", - "symbol": "DIO", - "name": "Decimated", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BiDB55p4G3n1fGhwKFpxsokBMqgctL4qnZpDH1bVQxMD/logo.png", - "tags": [ - "decimated", - "DIO", - "videogame", - "utility-token", - "virtual-currency" - ], - "extensions": { - "twitter": "https://twitter.com/decimated_game", - "website": "https://www.decimated.net" - } - }, - { - "chainId": 101, - "address": "7QTcx3LuVfPSZxVzFJcTmbpQCL35jkfoNSzx4qouX495", - "symbol": "AKELA", - "name": "AKELA", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7QTcx3LuVfPSZxVzFJcTmbpQCL35jkfoNSzx4qouX495/logo.svg", - "tags": ["Akela", "Meme"], - "extensions": { - "discord": "https://discord.gg/vBHgckmR", - "medium": "https://medium.com/@akelasolana", - "twitter": "https://twitter.com/AkelaTOKEN", - "website": "https://akelatoken.com" - } - }, - { - "chainId": 101, - "address": "3EkHyexJLGCvSxzn5umbtd9N69GoT4p5pfdLTFqCNP9Y", - "symbol": "HIPPO", - "name": "Hippo Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3EkHyexJLGCvSxzn5umbtd9N69GoT4p5pfdLTFqCNP9Y/logo.png", - "tags": ["meme-token", "community-token"], - "extensions": { - "coingeckoId": "hippo-coin", - "discord": "https://discord.gg/sk3xN3sA8D", - "serumV3Usdc": "HnLKrfMN64ccSbYCj4DxjgPYveSkFujYrnMr4cvPfL8", - "twitter": "https://twitter.com/HipposCoin", - "website": "https://hippofamilynft.com/" - } - }, - { - "chainId": 101, - "address": "BLT1noyNr3GttckEVrtcfC6oyK6yV1DpPgSyXbncMwef", - "symbol": "BLT", - "name": "Blocto Token", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BLT1noyNr3GttckEVrtcfC6oyK6yV1DpPgSyXbncMwef/logo.png", - "tags": ["utility-token"], - "extensions": { - "telegram": "https://t.me/blocto", - "twitter": "https://twitter.com/BloctoApp", - "website": "https://blocto.portto.com/" - } - }, - { - "chainId": 101, - "address": "FoqP7aTaibT5npFKYKQQdyonL99vkW8YALNPwWepdvf5", - "symbol": "BIP", - "name": "BIP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FoqP7aTaibT5npFKYKQQdyonL99vkW8YALNPwWepdvf5/logo.png", - "tags": ["NFT", "utility-token"], - "extensions": { - "discord": "https://discord.gg/solanadbs", - "serumV3Usdc": "9tr5uMYHgtJ5yG4SeqHA6kJUdzXrK6QCNGYgewQevuuS", - "twitter": "https://twitter.com/solanadbs", - "website": "https://www.thestarship.finance/" - } - }, - { - "chainId": 101, - "address": "2R78szN1fZeQvSmeiUPe7Db7BFTPee5EVE2FduQx8Wtw", - "symbol": "USDMD", - "name": "MONDOCOIN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2R78szN1fZeQvSmeiUPe7Db7BFTPee5EVE2FduQx8Wtw/logo.png", - "extensions": { - "twitter": "https://twitter.com/mondocoin_usdmd", - "website": "https://mondocoin.org/" - } - }, - { - "chainId": 101, - "address": "BYLotMdQmq579hhP9xDcuCJky9kmMrbp77eoktmm7a5Y", - "symbol": "CKG", - "name": "CryptoKnight's Gold", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BYLotMdQmq579hhP9xDcuCJky9kmMrbp77eoktmm7a5Y/logo.png", - "tags": ["NFT", "utility-token"], - "extensions": { - "discord": "https://discord.gg/SYpnu7pTPS", - "twitter": "https://twitter.com/CryptoKnightSOL", - "website": "https://www.cryptoknights.me/" - } - }, - { - "chainId": 101, - "address": "F9tytWqLUAPXQTy6dejGtSgvJQZWYC71naD5bCi6caGX", - "symbol": "INUGAMI", - "name": "INUGAMI Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/INVESTOR888/content/main/F9tytWqLUAPXQTy6dejGtSgvJQZWYC71naD5bCi6caGX.png", - "tags": ["meme-token"], - "extensions": { - "twitter": "https://twitter.com/inugamicoin", - "website": "https://inugamicoin.com" - } - }, - { - "chainId": 101, - "address": "B7RDhZ2iqE4FEwK5nfcZ9r2xhVL6rQJCo1dcjDXnF688", - "symbol": "LAT", - "name": "Latte", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/B7RDhZ2iqE4FEwK5nfcZ9r2xhVL6rQJCo1dcjDXnF688/logo.png", - "extensions": { - "twitter": "https://twitter.com/lattenft", - "website": "https://www.lattetoken.com" - } - }, - { - "chainId": 101, - "address": "7Q2afV64in6N6SeZsAAB81TJzwDoD6zpqmHkzi9Dcavn", - "symbol": "JSOL", - "name": "JPOOL Solana Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7Q2afV64in6N6SeZsAAB81TJzwDoD6zpqmHkzi9Dcavn/logo.svg", - "tags": ["stake-pool-token", "utility-token"], - "extensions": { - "discord": "https://discord.gg/qR4BA9QXVR", - "telegram": "https://t.me/jpoolsolana", - "twitter": "https://twitter.com/JPoolSolana", - "website": "https://jpool.one/" - } - }, - { - "chainId": 101, - "address": "7JYZmXjHenJxgLUtBxgYsFfoABmWQFA1fW3tHQKUBThV", - "symbol": "WEED", - "name": "Solana Weed", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7JYZmXjHenJxgLUtBxgYsFfoABmWQFA1fW3tHQKUBThV/logo.png", - "tags": ["social-token", "utility-token"], - "extensions": { - "discord": "https://discord.gg/3cshJ2gVz6", - "telegram": "https://t.me/Solanaweed", - "twitter": "https://twitter.com/SolanaWeed", - "website": "https://solanaweed.com/" - } - }, - { - "chainId": 101, - "address": "GaAzf7jwEKTouDXJExH9TKfvX3Ae7fLaGwNuEajq7KsE", - "symbol": "BARK", - "name": "Bark o Finance", - "decimals": 1, - "logoURI": "https://i.imgur.com/X90vi6d.png", - "tags": ["meme-token", "utility-token"], - "extensions": { - "twitter": "https://twitter.com/Bark_Solana" - } - }, - { - "chainId": 101, - "address": "5jFnsfx36DyGk8uVGrbXnVUMTsBkPXGpx6e69BiGFzko", - "symbol": "INU", - "name": "Solana INU", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5jFnsfx36DyGk8uVGrbXnVUMTsBkPXGpx6e69BiGFzko/logo.png", - "tags": ["Meme-token"], - "extensions": { - "coingeckoId": "solana-inu", - "discord": "https://discord.gg/solanainu", - "serumV3Usdc": "G3Bss3a2tif6eHNzWCh14g5k2H4rwBAmE42tbckUWG5T", - "twitter": "https://twitter.com/solanainu", - "website": "http://solanainu.org" - } - }, - { - "chainId": 101, - "address": "GJsBLZPMConURkFkewZskmJLFjnYVSENZtHjqV7GnohC", - "symbol": "EMON", - "name": "DORAEMON TOKEN FANS", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GJsBLZPMConURkFkewZskmJLFjnYVSENZtHjqV7GnohC/logo.png", - "tags": ["MEMES-TOKEN", "NFTs", "DEX"], - "extensions": { - "telegram": "https://t.me/emontoken", - "twitter": "https://twitter.com/emontoken", - "website": "https://doraemon.org" - } - }, - { - "chainId": 101, - "address": "7mNihWEjzWv9yCZc8capE4mS8v5Xvp5YH2yQhtZrQV5B", - "symbol": "SBreakpoint", - "name": "Solana Breakpoint", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/tribeland/token-list/main/assets/mainnet/7mNihWEjzWv9yCZc8capE4mS8v5Xvp5YH2yQhtZrQV5B/logo.png", - "tags": ["meme-token"], - "extensions": { - "discord": "https://discord.gg/8jSUfzjjDG" - } - }, - { - "chainId": 101, - "address": "6Km8PRUQxPmNX6EhmAuu3sFEnCP6uT2Yt42zPFR6VNnD", - "symbol": "RUG", - "name": "RugCoin", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6Km8PRUQxPmNX6EhmAuu3sFEnCP6uT2Yt42zPFR6VNnD/logo.png", - "tags": ["community-token", "meme-token", "rug"], - "extensions": { - "website": "https://rugcoin.rip" - } - }, - { - "chainId": 101, - "address": "JTTez7NDqtU4ZqZJmLLXt6K9f75izfTApQqmvMCn4jU", - "symbol": "JTT", - "name": "Japan Travel Token", - "decimals": 0, - "logoURI": "http://www.japantravel.me/jtticon.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://www.japantravel.me" - } - }, - { - "chainId": 101, - "address": "7K1ad6gYMDbRssecDkGdGpaRueSezZpgD28uYsyaEA8f", - "symbol": "SLNACK", - "name": "SolNack", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7K1ad6gYMDbRssecDkGdGpaRueSezZpgD28uYsyaEA8f/logo.png", - "tags": ["social-token", "utility-token"], - "extensions": { - "twitter": "https://twitter.com/Solnack_NFT", - "website": "https://www.solnack.io/" - } - }, - { - "chainId": 101, - "address": "8hK6Vq53gwwYmvM2HuEeycGFn6ZDfynccHSuNJhWrTyd", - "symbol": "1Coin", - "name": "1Coin", - "decimals": 10, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8hK6Vq53gwwYmvM2HuEeycGFn6ZDfynccHSuNJhWrTyd/logo.png", - "tags": ["social-token", "utility-token", "social-token"], - "extensions": { - "github": "https://github.com/1coin1", - "twitter": "https://twitter.com/1coincx", - "website": "https://1coin.cx" - } - }, - { - "chainId": 101, - "address": "3SaUThdYFoUX2FYUi9ZPf2TKTu3UYKhNHhXb2Y6najRg", - "symbol": "HIT", - "name": "Hello Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3SaUThdYFoUX2FYUi9ZPf2TKTu3UYKhNHhXb2Y6najRg/logo.png", - "tags": ["utility-token"], - "extensions": { - "facebook": "https://www.facebook.com/Hello-Entertainment-103715111864185", - "website": "https://app.gethello.net" - } - }, - { - "chainId": 101, - "address": "9ae76zqD3cgzR9gvf5Thc2NN3ACF7rqqnrLqxNzgcre6", - "symbol": "WIPE", - "name": "WipeMyAss", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/rxrxrxrx/WipeMyAss/wipemyass.jpg", - "tags": [ - "community-token", - "meme-token", - "doge", - "dogecoin", - "solcum", - "monkey", - "woof", - "soldoge", - "samo", - "smb" - ], - "extensions": { - "coingeckoId": "wipemyass", - "serumV3Usdc": "3kuUc5eTZyi7qajuFfDMMUUkqreEkUKtxQbVCjdriKVz", - "twitter": "https://twitter.com/WipeMyAssNFT", - "website": "https://wipemyass.io/" - } - }, - { - "chainId": 101, - "address": "FTkj421DxbS1wajE74J34BJ5a1o9ccA97PkK6mYq9hNQ", - "symbol": "MINECRAFT", - "name": "Synex Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FTkj421DxbS1wajE74J34BJ5a1o9ccA97PkK6mYq9hNQ/logo.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "discord": "https://discord.gg/N3BE44234A", - "telegram": "https://t.me/synexcoin", - "website": "https://synexcoin.dev" - } - }, - { - "chainId": 101, - "address": "EkDf4Nt89x4Usnxkj4sGHX7sWxkmmpiBzA4qdDkgEN6b", - "symbol": "SOB", - "name": "SolaLambo", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EkDf4Nt89x4Usnxkj4sGHX7sWxkmmpiBzA4qdDkgEN6b/logo.png", - "tags": ["community-token"], - "extensions": { - "discord": "https://discord.gg/sy2xymyc7J", - "twitter": "https://twitter.com/SolaLambo", - "website": "https://sob.finance/" - } - }, - { - "chainId": 101, - "address": "Hj4sTP4L4rvR9WBR6KyK99sxPptBQQczNWe4y15mxhRD", - "symbol": "SNJ", - "name": "Sola Ninja", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SolaToken/token-list/ninja/assets/mainnet/Hj4sTP4L4rvR9WBR6KyK99sxPptBQQczNWe4y15mxhRD/logo.png", - "tags": ["community-token"], - "extensions": { - "serumV3Usdc": "FyVdsZs15c38b6vBjiYYfq9fPrcrZJjvMgjHtEB2T9Sa", - "telegram": "https://t.me/solatokennet", - "twitter": "https://twitter.com/EcoSolana", - "website": "https://solatoken.net/" - } - }, - { - "chainId": 101, - "address": "9YdABeMBMjh5Pu8yPkJ9GETGWUT8KUK3B2RYBpjKNPsU", - "symbol": "GTA", - "name": "GTA LIVE", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9YdABeMBMjh5Pu8yPkJ9GETGWUT8KUK3B2RYBpjKNPsU/logo.svg", - "tags": ["game-fi", "utility-token", "meta-verse"], - "extensions": { - "discord": "https://discord.gta.live", - "medium": "https://gtanft.medium.com/", - "reddit": "https://reddit.com/user/gtanft", - "telegram": "https://t.me/gtanft", - "twitter": "https://twitter.com/gtanft", - "website": "https://gta.live" - } - }, - { - "chainId": 101, - "address": "GqWbZDQaeJsiscgtGpDrJsNCxxeuHqJCGKs4oWBY1aYQ", - "symbol": "GTA", - "name": "GTA LIVE", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GqWbZDQaeJsiscgtGpDrJsNCxxeuHqJCGKs4oWBY1aYQ/logo.png", - "tags": ["GameFi", "DeFi", "MetaVerse", "stablecoin"], - "extensions": { - "discord": "https://discord.gta.live", - "telegram": "https://t.me/gta_fiverp", - "website": "https://gta.live" - } - }, - { - "chainId": 101, - "address": "6H87YFkp5LHyN3KzDXa5r3QYce7WTcwYJi9SqwH3TXkQ", - "symbol": "AINU", - "name": "Akamaru Inu", - "decimals": 1, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6H87YFkp5LHyN3KzDXa5r3QYce7WTcwYJi9SqwH3TXkQ/logo.png", - "tags": ["meme-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/akamaruinusol", - "website": "https://akamaruinusol.com/" - } - }, - { - "chainId": 101, - "address": "BZopZtZHqUY7ApiYTLjztQSgBoAsqQsJU3kFqHW27qEK", - "symbol": "NICK", - "name": "Nick Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BZopZtZHqUY7ApiYTLjztQSgBoAsqQsJU3kFqHW27qEK/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/nickchua5" - } - }, - { - "chainId": 101, - "address": "6Vg88xUHUPU9MfddHpu2cgx6CdodReiU8eGLPJgyhyVZ", - "symbol": "WLB", - "name": "WHALEBE", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6Vg88xUHUPU9MfddHpu2cgx6CdodReiU8eGLPJgyhyVZ/logo.png", - "tags": ["token-games", "nft-token"], - "extensions": { - "twitter": "https://twitter.com/Whalebe_", - "website": "https://whalebe.art/" - } - }, - { - "chainId": 101, - "address": "9SLCSSkEYL9YbKtAvw39xNzMEV4a7oLisGXhSJt73UCu", - "symbol": "KEVIN", - "name": "Kevin Token", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9SLCSSkEYL9YbKtAvw39xNzMEV4a7oLisGXhSJt73UCu/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/kevarifin" - } - }, - { - "chainId": 101, - "address": "AeTzmX6QcL6tWKMRTKVW9ee8fPmCieKzgfmiU7ZaY4gu", - "symbol": "SHIHT", - "name": "Shih Tzu", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AeTzmX6QcL6tWKMRTKVW9ee8fPmCieKzgfmiU7ZaY4gu/logo.png", - "tags": ["meme-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/ShihTzuSolana", - "website": "https://shihtcoin.io" - } - }, - { - "chainId": 101, - "address": "AATiVPgFBTJejUJrmkwnwH8UTr69CtfodGVCwMvrCa2U", - "symbol": "SOLM", - "name": "Solmanians", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AATiVPgFBTJejUJrmkwnwH8UTr69CtfodGVCwMvrCa2U/logo.png", - "tags": ["meme-token", "nft-token", "game-token"], - "extensions": { - "twitter": "https://twitter.com/solmanians", - "website": "https://solmanians.com" - } - }, - { - "chainId": 101, - "address": "ALMmmmbt5KNrPPUBFE4dAKUKSPWTop5s3kUGCdF69gmw", - "symbol": "ALM", - "name": "Almond", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ALMmmmbt5KNrPPUBFE4dAKUKSPWTop5s3kUGCdF69gmw/logo.png", - "extensions": { - "coingeckoId": "almond", - "coinmarketcap": "https://coinmarketcap.com/currencies/almond/", - "discord": "https://discord.gg/MBWsChEdFw", - "serumV3Usdc": "DNxn3qM61GZddidjrzc95398SCWhm5BUyt8Y8SdKYr8W", - "twitter": "https://twitter.com/almond_so", - "website": "https://almond.so/" - } - }, - { - "chainId": 101, - "address": "BSA5MfNRWc1CTJE1FD5ZErkNNLLWf9pqDyS3rCEYV1Re", - "symbol": "UWT", - "name": "Solana Underworld Token", - "decimals": 0, - "logoURI": "https://solsnatchers.com/images/head2.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/SolSnatchersNFT", - "website": "https://solsnatchers.com/" - } - }, - { - "chainId": 101, - "address": "DGeHh4eoxGau3iH7PfdTJdRhZu4FWNgDFF1Czd3tNemT", - "symbol": "UMURPHY", - "name": "Uncle Murphy Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DGeHh4eoxGau3iH7PfdTJdRhZu4FWNgDFF1Czd3tNemT/logo.png", - "tags": ["meme-token"], - "extensions": { - "telegram": "https://t.me/joinchat/1x2i0txLEOY2Yjgy", - "twitter": "https://twitter.com/Driver29973042", - "website": "https://unclemurphycoin.org/" - } - }, - { - "chainId": 101, - "address": "ALKiRVrfLgzeAV2mCT7cJHKg3ZoPvsCRSV7VCRWnE8zQ", - "symbol": "NEKI", - "name": "Maneki-neko", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ALKiRVrfLgzeAV2mCT7cJHKg3ZoPvsCRSV7VCRWnE8zQ/logo.png", - "tags": ["utility-token", "meme-token", "neki"], - "extensions": { - "coingeckoId": "maneki-neko", - "twitter": "https://twitter.com/ManekiNekoLabs" - } - }, - { - "chainId": 101, - "address": "D6yPmaM6SueQN4mteEQMiVFMbk6BSAShJAhuqyzVJ3fq", - "symbol": "YARN", - "name": "Yarn Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/D6yPmaM6SueQN4mteEQMiVFMbk6BSAShJAhuqyzVJ3fq/logo.png", - "tags": ["utility-token", "payment-token"], - "extensions": { - "twitter": "https://twitter.com/yarncoin", - "website": "https://yarncoin.io" - } - }, - { - "chainId": 101, - "address": "4BzxVoBQzwKoqm1dQc78r42Yby3EzAeZmMiYFdCjeu5Z", - "symbol": "SWOLE", - "name": "Swole Doge", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4BzxVoBQzwKoqm1dQc78r42Yby3EzAeZmMiYFdCjeu5Z/logo.png", - "extensions": { - "coingeckoId": "swole-doge", - "discord": "https://discord.gg/HfdHnhQkpB", - "serumV3Usdc": "3SGeuz8EXsyFo4HHWXQsoo8r4r5RdZkt7TuuTZiVbKc8", - "twitter": "https://twitter.com/swoledoge", - "website": "https://swoledogecoin.org" - } - }, - { - "chainId": 101, - "address": "C3Rjiq8o2yiRWsmdSUSN276u5ah3UTqyWbZudLMG41pt", - "symbol": "PITXX", - "name": "Pi Token v2", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/C3Rjiq8o2yiRWsmdSUSN276u5ah3UTqyWbZudLMG41pt/logo.png", - "extensions": { - "website": "https://tokeninfo.yolasite.com/" - } - }, - { - "chainId": 101, - "address": "CC1gRBjsu8c7sf79wVd2Ub46X1UntPd81T7tmw7sTVYp", - "symbol": "BNN", - "name": "Banana", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/tradeape/First_token_image/bnn.png" - }, - { - "chainId": 101, - "address": "6oaVWSKRi4Pm1qVLf3fQFWFWygFhgswAL7Z466WE3cE8", - "symbol": "IMUA", - "name": "IMUA", - "decimals": 9, - "logoURI": "https://github.com/riversnout/imua/blob/main/rh.png", - "extensions": { - "website": "https://remnanthighway.org" - } - }, - { - "chainId": 101, - "address": "9Sbzj4DnRW8qFnfvJWwXxQMRkWKAwHLs9NgDuBFjkVgW", - "symbol": "PITDT", - "name": "Picasso Token Div Test", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9Sbzj4DnRW8qFnfvJWwXxQMRkWKAwHLs9NgDuBFjkVgW/logo.png" - }, - { - "chainId": 101, - "address": "CN7qFa5iYkHz99PTctvT4xXUHnxwjQ5MHxCuTJtPN5uS", - "symbol": "BOKU", - "name": "Boryoku Dragonz", - "decimals": 9, - "logoURI": "https://boryoku-dragonz-public.s3.us-east-2.amazonaws.com/BokuBrew.png", - "extensions": { - "coingeckoId": "boryoku-dragonz", - "coinmarketcap": "https://coinmarketcap.com/currencies/boku/", - "serumV3Usdc": "Dvm8jjdAy8uyXn9WXjS2p1mcPeFTuYS6yW2eUL9SJE8p", - "twitter": "https://twitter.com/BoryokuDragonz", - "website": "https://boryokudragonz.io" - } - }, - { - "chainId": 101, - "address": "H7Qc9APCWWGDVxGD5fJHmLTmdEgT9GFatAKFNg6sHh8A", - "symbol": "OOGI", - "name": "OOGI", - "decimals": 9, - "logoURI": "https://oogi.com/icon.png", - "extensions": { - "coingeckoId": "oogi", - "discord": "https://discord.gg/oogi", - "serumV3Usdc": "ANUCohkG9gamUn6ofZEbnzGkjtyMexDhnjCwbLDmQ8Ub", - "telegram": "https://t.me/oogicoin", - "twitter": "https://twitter.com/oogicoin", - "website": "https://oogi.com/" - } - }, - { - "chainId": 101, - "address": "GCxgQbbvJc4UyqGCsUAUa38npzZX27EMxZwckLuWeEkt", - "symbol": "NUTS", - "name": "NUTS", - "decimals": 9, - "logoURI": "https://user-images.githubusercontent.com/93886730/140664862-6dd80bff-be30-4c68-a978-fcb205011d61.png", - "extensions": { - "discord": "https://discord.gg/SSANFT", - "twitter": "https://twitter.com/SSA_NFT", - "website": "https://ssa.gg" - } - }, - { - "chainId": 101, - "address": "EFYKDdppK1FjixaxExpVhoTd8gtAmncbhQYruzWyG6Cx", - "symbol": "SPKL", - "name": "Spookeletons Token", - "decimals": 9, - "logoURI": "https://www.spookeletons.com/assets/spookeletons_token.png", - "extensions": { - "serumV3Usdc": "8nTQLcukiGQEQ1zguvmtLx95VJmZm5WxRsdBneaTGVmN", - "website": "https://www.spookeletons.com" - } - }, - { - "chainId": 101, - "address": "31tCNEE6LiL9yW4Bu153Dq4vi2GuorXxCA9pW9aA6ecU", - "symbol": "SPKL", - "name": "Spookeletons Token", - "decimals": 9, - "logoURI": "https://www.spookeletons.com/assets/spookeletons_tokenv2.png", - "extensions": { - "serumV3Usdc": "6b51zj1C78Tn7R3nd9j4GvyShbMNxxufbU3mqPmbDRcz", - "website": "https://www.spookeletons.com" - } - }, - { - "chainId": 101, - "address": "q4bpaRKw3fJB1AJBeeBaKv3TjYzWsmntLgnSB275YUb", - "symbol": "TRTLS", - "name": "Turtles Token", - "decimals": 9, - "logoURI": "https://www.turtles.com/turtles.png", - "extensions": { - "coingeckoId": "turtles-token", - "serumV3Usdc": "2dKHkfJGKNxmtwdLcsqXFGcb8Xppw5RP6YVWEWjSfAHm", - "website": "https://www.turtles.com/" - } - }, - { - "chainId": 101, - "address": "FRtCrYT6oHEM7tdcfJJkDRMhqRWb9EjnobJSA2T95Put", - "symbol": "MMaps", - "name": "Map Metrics", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FRtCrYT6oHEM7tdcfJJkDRMhqRWb9EjnobJSA2T95Put/logo.png", - "tags": ["utility-token", "Community", "NFT"], - "extensions": { - "website": "https://mapmetrics.org/" - } - }, - { - "chainId": 101, - "address": "EFqYVEitSUpUTj2d9LSqun4eZ4BzouFuTPqQzU4hNtsS", - "symbol": "MMaps", - "name": "MapMetrics", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EFqYVEitSUpUTj2d9LSqun4eZ4BzouFuTPqQzU4hNtsS/logo.png", - "tags": ["utility-token", "Community", "NFT"], - "extensions": { - "website": "https://mapmetrics.org/" - } - }, - { - "chainId": 101, - "address": "3CaBxqxWsP5oqS84Pkja4wLxyZYsHzMivQbnfwFJQeL1", - "symbol": "SOLFI", - "name": "SOLFI", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3CaBxqxWsP5oqS84Pkja4wLxyZYsHzMivQbnfwFJQeL1/logo.png", - "extensions": { - "twitter": "https://twitter.com/solfina_io", - "website": "https://solfina.io/" - } - }, - { - "chainId": 101, - "address": "DdUm3gHS5nnB3XKnxEufnazb5ERa9vHjK6S3DgZi7QR5", - "symbol": "BTSL", - "name": "Bitsol Finance", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DdUm3gHS5nnB3XKnxEufnazb5ERa9vHjK6S3DgZi7QR5/logo.png", - "tags": ["DEX"], - "extensions": { - "telegram": "https://t.me/bitsolfinance", - "twitter": "https://twitter.com/bitsol_finance", - "website": "https://bitsol.finance" - } - }, - { - "chainId": 101, - "address": "8f9s1sUmzUbVZMoMh6bufMueYH1u4BJSM57RCEvuVmFp", - "symbol": "TRUE", - "name": "TrueSight", - "decimals": 9, - "logoURI": "https://i.ibb.co/pKTWrwP/true.jpg", - "tags": ["utility-token", "capital-token"] - }, - { - "chainId": 101, - "address": "2Dzzc14S1D7cEFGJyMZMACuoQRHVUYFhVE74C5o8Fwau", - "symbol": "BAB", - "name": "Banana Bucks", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Dzzc14S1D7cEFGJyMZMACuoQRHVUYFhVE74C5o8Fwau/logo.svg", - "tags": ["utility-token"], - "extensions": { - "website": "http://bananabucks.io/" - } - }, - { - "chainId": 101, - "address": "GdRNeX9mbzCt4AnfiUFLbYZmxRuW7pGHfjbbAM59ZybR", - "symbol": "SLFT", - "name": "SOLife", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GdRNeX9mbzCt4AnfiUFLbYZmxRuW7pGHfjbbAM59ZybR/logo.png", - "tags": ["utility-token", "social-token"], - "extensions": { - "twitter": "https://twitter.com/SOLifeNFT", - "website": "https://solife.town" - } - }, - { - "chainId": 101, - "address": "AASdD9rAefJ4PP7iM89MYUsQEyCQwvBofhceZUGDh5HZ", - "symbol": "SLX", - "name": "Solex Finance", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solexfin/token-list/main/assets/mainnet/AASdD9rAefJ4PP7iM89MYUsQEyCQwvBofhceZUGDh5HZ/logo.png", - "tags": ["Exchange", "DApp"], - "extensions": { - "coingeckoId": "solex-finance", - "serumV3Usdc": "7xy4r55rLu2QYeSGwTGDCBKEYERDX98f6kQLn9Zre6S3", - "twitter": "https://twitter.com/SolexFinance", - "website": "https://solex.finance/" - } - }, - { - "chainId": 101, - "address": "HppJbUYU4a9i3dXo1x1SS5ieaKEz4cAPWMg4eNQzabzg", - "symbol": "BLOCKING", - "name": "Blocking", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HppJbUYU4a9i3dXo1x1SS5ieaKEz4cAPWMg4eNQzabzg/logo.png", - "tags": ["NFT", "Blocking"], - "extensions": { - "website": "http://blocking.adchunha.com/" - } - }, - { - "chainId": 101, - "address": "4HjScxnKaowf2SJzEKUCaHLJUe4qUBX15jCop6FQ4Ht1", - "symbol": "Z", - "name": "Zeus", - "decimals": 5, - "logoURI": "https://www.pnglib.com/wp-content/uploads/2021/02/letter-z_60235255a2bf7.png", - "tags": ["Exchange", "DApp"] - }, - { - "chainId": 101, - "address": "Aojru8bfwZK6sgrx6exNazxASFZUjPpRY59byMrs6izt", - "symbol": "OINK", - "name": "OINK", - "decimals": 10, - "logoURI": "https://raw.githubusercontent.com/dungnc/luckypigsNFT/main/SYMBOL.jpeg", - "tags": ["meme", "social-token", "oink"], - "extensions": { - "twitter": "https://twitter.com/GiftedLabs", - "website": "http://luckypignfts.com" - } - }, - { - "chainId": 101, - "address": "5sM9xxcBTM9rWza6nEgq2cShA87JjTBx1Cu82LjgmaEg", - "symbol": "BMBO", - "name": "Bamboo", - "decimals": 7, - "logoURI": "https://raw.githubusercontent.com/rishkumaria/bamboo/main/bamboo.png", - "extensions": { - "coingeckoId": "bamboo-coin" - } - }, - { - "chainId": 101, - "address": "5F3beSzHFv1m3T2Sqp7dNQPYrZeetLZ8JYe6QPW6cqKA", - "symbol": "ZEUS", - "name": "ZEUS", - "decimals": 8, - "logoURI": "https://previews.123rf.com/images/arbuzu/arbuzu1501/arbuzu150100014/35131140-letter-z-logo-icon-design-template-elements.jpg", - "tags": ["NFT", "ZEUS"], - "extensions": { - "website": "http://test.com/" - } - }, - { - "chainId": 101, - "address": "C8QMoDwQADoW4MVkDZx7HgnebeugnNXWztrqpcCT2mFj", - "symbol": "SHARK", - "name": "Rogue Shark 129", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/L0px1n/token-list/main/assets/mainnet/shark.jpeg", - "tags": ["NFT", "stablecoin"] - }, - { - "chainId": 101, - "address": "4oyPeSSUwfxExjBU76fTfAFHHrZ3HVwCHWqAUdpeFg6h", - "symbol": "SHARK", - "name": "Rogue Shark 129", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/L0px1n/token-list/main/assets/mainnet/shark.jpeg" - }, - { - "chainId": 101, - "address": "9CuowWiTMFBeC5ntjdAeMv3W72vzwveCC9ATTjnjXjNx", - "symbol": "KRCH", - "name": "KrechetovNFT", - "decimals": 0, - "logoURI": "https://upload.wikimedia.org/wikipedia/commons/thumb/b/b2/Toyota_GT86_%E2%80%93_Frontansicht%2C_17._September_2012%2C_D%C3%BCsseldorf.jpg/1200px-Toyota_GT86_%E2%80%93_Frontansicht%2C_17._September_2012%2C_D%C3%BCsseldorf.jpg", - "tags": ["NFT", "stablecoin"] - }, - { - "chainId": 101, - "address": "EZF2sPJRe26e8iyXaCrmEefrGVBkqqNGv9UPGG9EnTQz", - "symbol": "FUM", - "name": "FUMoney", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FUMoney801/token-list/main/assets/mainnet/EZF2sPJRe26e8iyXaCrmEefrGVBkqqNGv9UPGG9EnTQz/logo.png", - "tags": ["social-token", "utility-token"], - "extensions": { - "twitter": "https://twitter.com/FUMindset", - "website": "https://FUMoney.io/" - } - }, - { - "chainId": 101, - "address": "9XtRZwKzDXEJ61A7qCqbPz8jXMYHGT3LwxqrEzB6fqxv", - "symbol": "SOLUM", - "name": "Solum", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9XtRZwKzDXEJ61A7qCqbPz8jXMYHGT3LwxqrEzB6fqxv/logo.png", - "extensions": { - "coingeckoId": "solum", - "telegram": "https://t.me/solumfinance", - "twitter": "https://twitter.com/solumDefi", - "website": "https://solum.finance/" - } - }, - { - "chainId": 101, - "address": "31HcuZjFHCV8VcydRjXz9NFnte4RVRRuR5n9rECfy79W", - "symbol": "BOOZ", - "name": "boozcoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/jatoshi/token-list/main/BoozCoin%20Logo%202021-07-21.png", - "extensions": { - "telegram": "https://t.me/boozcoin", - "twitter": "https://twitter.com/boozcoin", - "website": "https://boozcoin.com/" - } - }, - { - "chainId": 101, - "address": "7Y2FprWHsBYCFkTpWiQ123BMPgWWquraaZHy6oFofcvs", - "symbol": "JDBEAR", - "name": "JareBear", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/dyor-market/token-list/main/assets/mainnet/7Y2FprWHsBYCFkTpWiQ123BMPgWWquraaZHy6oFofcvs/logo.png", - "tags": ["leveraged", "bear", "nft"], - "extensions": { - "website": "https://stacc.art/" - } - }, - { - "chainId": 101, - "address": "D3gRmoveMFa8e3ziw5XCwCByHKiSk76T4fi62GXNYXHi", - "symbol": "JDBULL", - "name": "JareBool", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/dyor-market/token-list/main/assets/mainnet/D3gRmoveMFa8e3ziw5XCwCByHKiSk76T4fi62GXNYXHi/logo.png", - "tags": ["leveraged", "bull", "nft"], - "extensions": { - "website": "https://stacc.art/" - } - }, - { - "chainId": 101, - "address": "8z55xQupEQcjAQTJy3BwZJX24pmtCJDo8MEe9Ub7a3Yv", - "symbol": "SHAK", - "name": "Shakudo", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/dyor-market/token-list/main/assets/mainnet/8z55xQupEQcjAQTJy3BwZJX24pmtCJDo8MEe9Ub7a3Yv/logo.svg", - "extensions": { - "website": "https://shakudo.io/" - } - }, - { - "chainId": 101, - "address": "7ypyxaQoHcJwoo9wXsc3tqL6PN4UQuEoyyfg5xjDX1Dj", - "symbol": "MMY", - "name": "Mummy", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/dyor-market/token-list/main/assets/mainnet/7ypyxaQoHcJwoo9wXsc3tqL6PN4UQuEoyyfg5xjDX1Dj/logo.png", - "extensions": { - "website": "https://mummy.io/" - } - }, - { - "chainId": 101, - "address": "HavbxBPK1uY9kMNqKPkWDEQXWw6FYERrLxeMtWiXnwko", - "symbol": "SXP", - "name": "Stacc eXPerience Points", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/dyor-market/token-list/main/assets/mainnet/HavbxBPK1uY9kMNqKPkWDEQXWw6FYERrLxeMtWiXnwko/logo.svg", - "extensions": { - "discord": "https://discord.gg/WUTFtgDhXd", - "twitter": "https://twitter.com/STACCart", - "website": "https://stacc.art/" - } - }, - { - "chainId": 101, - "address": "2A5esErqMaJXhrs1i6CtjbVxTbgsY9JbDedVsuVMQ6aY", - "symbol": "SJP", - "name": "Stacc Job Points", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/dyor-market/token-list/main/assets/mainnet/2A5esErqMaJXhrs1i6CtjbVxTbgsY9JbDedVsuVMQ6aY/logo.svg", - "extensions": { - "discord": "https://discord.gg/WUTFtgDhXd", - "twitter": "https://twitter.com/STACCart", - "website": "https://stacc.art/" - } - }, - { - "chainId": 101, - "address": "84vmWvKxebcnZL5JPnqkzPFVBaL4y5uGCRRJW2a9P4SL", - "symbol": "cvs", - "name": "coinvs", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/CoinVs/brand-assets/master/logo/logo.png", - "tags": [ - "coinversus", - "cvs", - "entertainment", - "gaming", - "NFT", - "utility-token" - ], - "extensions": { - "discord": "https://discord.gg/F84VmCtByV", - "facebook": "https://www.facebook.com/coinversusofficial", - "github": "https://github.com/CoinVs", - "instagram": "https://www.instagram.com/coinversus/", - "reddit": "https://www.reddit.com/r/coinversus/", - "telegram": "https://t.me/coinvs", - "twitter": "https://twitter.com/CoinVersus", - "website": "https://coinversus.com/" - } - }, - { - "chainId": 101, - "address": "9KYMTqKY7f2cJKW2wYfNRpLb9zbB1tTyEbaTuzy4Gwwc", - "symbol": "SGP", - "name": "Stacc Gold Points", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/dyor-market/token-list/main/assets/mainnet/9KYMTqKY7f2cJKW2wYfNRpLb9zbB1tTyEbaTuzy4Gwwc/logo.svg", - "extensions": { - "discord": "https://discord.gg/WUTFtgDhXd", - "twitter": "https://twitter.com/STACCart", - "website": "https://stacc.art/" - } - }, - { - "chainId": 101, - "address": "2uRFEWRBQLEKpLmF8mohFZGDcFQmrkQEEZmHQvMUBvY7", - "symbol": "SLB", - "name": "Solberg", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2uRFEWRBQLEKpLmF8mohFZGDcFQmrkQEEZmHQvMUBvY7/logo.svg", - "extensions": { - "coingeckoId": "solberg", - "discord": "https://discord.gg/2w7J25Xgce", - "instagram": "https://www.instagram.com/solbergtoken/", - "serumV3Usdc": "4MUhHF5K9simSLXuaUKMaU8nMHSCRPzPMe7UtJRXi4HZ", - "serumV3Usdt": "46jD4hpmvUAbhKaoAjdzFkY82VW1j9SMTEYFGcTor8Ww", - "telegram": "https://t.me/solbergofficial", - "twitter": "https://twitter.com/SolbergToken", - "website": "https://www.solbergtoken.com/" - } - }, - { - "chainId": 101, - "address": "HDLRMKW1FDz2q5Zg778CZx26UgrtnqpUDkNNJHhmVUFr", - "symbol": "MILLI", - "name": "MILLIONSY", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/millionsy/token-list/main/assets/mainnet/HDLRMKW1FDz2q5Zg778CZx26UgrtnqpUDkNNJHhmVUFr/logo.png", - "extensions": { - "telegram": "https://t.me/MILLIONSYofficialchat", - "twitter": "https://twitter.com/MILLIONSYio", - "website": "https://www.millionsy.io/" - } - }, - { - "chainId": 101, - "address": "7ic3cSqD6iiwsqxDyBbcs2qYfMcKY2HndLDrjhMKZ4cQ", - "symbol": "$SOLY", - "name": "Solana Yield", - "decimals": 8, - "logoURI": "https://github.com/saimaliabrish/Solana-yield-logo/blob/main/IMG_20210923_195019_436.png", - "extensions": { - "twitter": "https://twitter.com/AbrishSaim" - } - }, - { - "chainId": 101, - "address": "Dw3E5NJGyAZ5QmeB165cGf2gfc9ktyFu55wMyh3MaJov", - "symbol": "TKC", - "name": "Tugscom Coin", - "decimals": 9, - "logoURI": "https://tugscom.mn/tkc.png", - "tags": ["TKC", "Tugscom"], - "extensions": { - "website": "https://tugscom.mn/" - } - }, - { - "chainId": 101, - "address": "99pifp4v4qQNk3irTHpmAEEzgKfs3ahLE7iFKEqfyxPj", - "symbol": "ZI", - "name": "ZI (The Z Institute Token)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/99pifp4v4qQNk3irTHpmAEEzgKfs3ahLE7iFKEqfyxPj/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/the_z_institute", - "website": "https://zinstitute.net/" - } - }, - { - "chainId": 101, - "address": "FYfQ9uaRaYvRiaEGUmct45F9WKam3BYXArTrotnTNFXF", - "symbol": "SOLA", - "name": "Sola Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FYfQ9uaRaYvRiaEGUmct45F9WKam3BYXArTrotnTNFXF/logo.png", - "tags": ["community-token"], - "extensions": { - "coingeckoId": "sola-token", - "serumV3Usdc": "4RZ27tjRnSwrtRqsJxDEgsERnDKFs7yx6Ra3HsJvkboy", - "telegram": "https://t.me/solatokennet", - "twitter": "https://twitter.com/EcoSolana", - "website": "https://solatoken.net/" - } - }, - { - "chainId": 101, - "address": "So11111111111111111111111111111111111111112", - "symbol": "SOL", - "name": "Wrapped SOL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/So11111111111111111111111111111111111111112/logo.png", - "extensions": { - "coingeckoId": "solana", - "serumV3Usdc": "9wFFyRfZBsuAha4YcuxcXLKwMxJR43S7fPfQLusDBzvT", - "serumV3Usdt": "HWHvQhFmJB3NUcu1aihKmrKegfVxBEHzwVX6yZCKEsi1", - "website": "https://solana.com/" - } - }, - { - "chainId": 101, - "address": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", - "symbol": "USDC", - "name": "USD Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v/logo.png", - "tags": ["stablecoin"], - "extensions": { - "coingeckoId": "usd-coin", - "serumV3Usdt": "77quYg4MGneUdjgXCunt9GgM1usmrxKY31twEy3WHwcS", - "website": "https://www.centre.io/" - } - }, - { - "chainId": 101, - "address": "SrZXMTPhY8TEJMXQEhHKbFdVY2oNSGR5YqMMGK6Zm7L", - "symbol": "BDNT", - "name": "Battle Drone Native Token", - "decimals": 9, - "logoURI": "https://battledronesnft.com/BDNT.png", - "tags": ["utility-token", "BDNT"], - "extensions": { - "discord": "https://discord.gg/jRz63Dsa3p", - "twitter": "https://twitter.com/BattleDronesNFT", - "website": "https://battledronesnft.com/" - } - }, - { - "chainId": 101, - "address": "2inRoG4DuMRRzZxAt913CCdNZCu2eGsDD9kZTrsj2DAZ", - "symbol": "TSLA", - "name": "Tesla Inc", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2inRoG4DuMRRzZxAt913CCdNZCu2eGsDD9kZTrsj2DAZ/logo.svg", - "tags": ["tokenized-stock"], - "extensions": { - "website": "https://www.digitalassets.ag/UnderlyingDetails?TSLA" - } - }, - { - "chainId": 101, - "address": "8bpRdBGPt354VfABL5xugP3pmYZ2tQjzRcqjg2kmwfbF", - "symbol": "AAPL", - "name": "Apple Inc", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8bpRdBGPt354VfABL5xugP3pmYZ2tQjzRcqjg2kmwfbF/logo.svg", - "tags": ["tokenized-stock"], - "extensions": { - "website": "https://www.digitalassets.ag/UnderlyingDetails?AAPL" - } - }, - { - "chainId": 103, - "address": "DGGETjRbXeNyq2bpA7FLmWwqjFLtS8p5aYjzUwtAHtZd", - "symbol": "Aiko", - "name": "Aiko", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7YBn43cTvko7mfZ9YV1iyAUfHNuMp6aAy4rX7wehXcbU/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.com/invite/Y72V9wn3Yw", - "medium": "https://aikonft.medium.com/", - "reddit": "https://www.reddit.com/r/AikoNFT/", - "twitter": "https://twitter.com/aikonft", - "website": "https://aiko.io/" - } - }, - { - "chainId": 101, - "address": "7J2cEFFhMCsdUBWssnYfUG5z6zYJYCUaTNPTxH3k9aVY", - "symbol": "AIKO", - "name": "Aiko", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7J2cEFFhMCsdUBWssnYfUG5z6zYJYCUaTNPTxH3k9aVY/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.com/invite/Y72V9wn3Yw", - "reddit": "https://www.reddit.com/r/AikoNFT/", - "twitter": "https://twitter.com/aikonft", - "website": "https://aiko.io/" - } - }, - { - "chainId": 101, - "address": "3vhcrQfEn8ashuBfE82F3MtEDFcBCEFfFw1ZgM3xj1s8", - "symbol": "MSFT", - "name": "Microsoft Corporation", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3vhcrQfEn8ashuBfE82F3MtEDFcBCEFfFw1ZgM3xj1s8/logo.svg", - "tags": ["tokenized-stock"], - "extensions": { - "website": "https://www.digitalassets.ag/UnderlyingDetails?MSFT" - } - }, - { - "chainId": 101, - "address": "HNXTQPd5FkGX7USMufrxkvUQkTGmNFxVYCnAhuR941mm", - "symbol": "DOWIT", - "name": "DOWIT", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HNXTQPd5FkGX7USMufrxkvUQkTGmNFxVYCnAhuR941mm/logo.png", - "extensions": { - "website": "https://dowit-coin.com" - } - }, - { - "chainId": 101, - "address": "4R8DBzZEzjBQzPJe4qqaxXM97am7unGM1ZYfviS6oSFe", - "symbol": "ANU", - "name": "ANUBEAST", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/ANUBEAST/ANUBEAST/master/assets/logo.png", - "tags": ["stake"], - "extensions": { - "website": "https://github.com/ANUBEAST" - } - }, - { - "chainId": 101, - "address": "ASwYCbLedk85mRdPnkzrUXbbYbwe26m71af9rzrhC2Qz", - "symbol": "MSTR", - "name": "MicroStrategy Incorporated", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ASwYCbLedk85mRdPnkzrUXbbYbwe26m71af9rzrhC2Qz/logo.svg", - "tags": ["tokenized-stock"], - "extensions": { - "website": "https://www.digitalassets.ag/UnderlyingDetails?MSTR" - } - }, - { - "chainId": 101, - "address": "J25jdsEgTnAwB4nVq3dEQhwekbXCnVTGzFpVMPScXRgK", - "symbol": "COIN", - "name": "Coinbase Global Inc", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/J25jdsEgTnAwB4nVq3dEQhwekbXCnVTGzFpVMPScXRgK/logo.svg", - "tags": ["tokenized-stock"], - "extensions": { - "website": "https://www.digitalassets.ag/UnderlyingDetails?COIN" - } - }, - { - "chainId": 101, - "address": "G2Cg4XoXdEJT5sfrSy9N6YCC3uuVV3AoTQSvMeSqT8ZV", - "symbol": "ABC", - "name": "AmerisourceBergen Corp", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/G2Cg4XoXdEJT5sfrSy9N6YCC3uuVV3AoTQSvMeSqT8ZV/logo.svg", - "tags": ["tokenized-stock"], - "extensions": { - "website": "https://www.digitalassets.ag/UnderlyingDetails?ABC" - } - }, - { - "chainId": 101, - "address": "FqqVanFZosh4M4zqxzWUmEnky6nVANjghiSLaGqUAYGi", - "symbol": "ABNB", - "name": "Airbnb", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FqqVanFZosh4M4zqxzWUmEnky6nVANjghiSLaGqUAYGi/logo.svg", - "tags": ["tokenized-stock"], - "extensions": { - "website": "https://www.digitalassets.ag/UnderlyingDetails?ABNB" - } - }, - { - "chainId": 101, - "address": "FgcUo7Ymua8r5xxsn9puizkLGN5w4i3nnBmasXvkcWfJ", - "symbol": "ACB", - "name": "Aurora Cannabis Inc", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FgcUo7Ymua8r5xxsn9puizkLGN5w4i3nnBmasXvkcWfJ/logo.svg", - "tags": ["tokenized-stock"], - "extensions": { - "website": "https://www.digitalassets.ag/UnderlyingDetails?ACB" - } - }, - { - "chainId": 101, - "address": "FenmUGWjsW5AohtHRbgLoPUZyWSK36Cd5a31XJWjnRur", - "symbol": "AMC", - "name": "AMC Entertainment Holdings", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FenmUGWjsW5AohtHRbgLoPUZyWSK36Cd5a31XJWjnRur/logo.svg", - "tags": ["tokenized-stock"], - "extensions": { - "website": "https://www.digitalassets.ag/UnderlyingDetails?AMC" - } - }, - { - "chainId": 101, - "address": "7grgNP3tAJh7DRELmotHzC5Efth4e4SoBvgmFYTX9jPB", - "symbol": "AMD", - "name": "Advanced Micro Devices", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7grgNP3tAJh7DRELmotHzC5Efth4e4SoBvgmFYTX9jPB/logo.svg", - "tags": ["tokenized-stock"], - "extensions": { - "website": "https://www.digitalassets.ag/UnderlyingDetails?AMD" - } - }, - { - "chainId": 101, - "address": "3bjpzTTK49eP8m1bYxw6HYAFGtzyWjvEyGYcFS4gbRAx", - "symbol": "AMZN", - "name": "Amazon", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3bjpzTTK49eP8m1bYxw6HYAFGtzyWjvEyGYcFS4gbRAx/logo.svg", - "tags": ["tokenized-stock"], - "extensions": { - "website": "https://www.digitalassets.ag/UnderlyingDetails?AMZN" - } - }, - { - "chainId": 101, - "address": "4cr7NH1BD2PMV38JQp58UaHUxzqhxeSiF7b6q1GCS7Ae", - "symbol": "APHA", - "name": "Aphria Inc", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4cr7NH1BD2PMV38JQp58UaHUxzqhxeSiF7b6q1GCS7Ae/logo.svg", - "tags": ["tokenized-stock"], - "extensions": { - "website": "https://www.digitalassets.ag/UnderlyingDetails?APHA" - } - }, - { - "chainId": 101, - "address": "GPoBx2hycDs3t4Q8DeBme9RHb9nQpzH3a36iUoojHe16", - "symbol": "ARKK", - "name": "ARK Innovation ETF", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GPoBx2hycDs3t4Q8DeBme9RHb9nQpzH3a36iUoojHe16/logo.png", - "tags": ["tokenized-stock"], - "extensions": { - "website": "https://www.digitalassets.ag/UnderlyingDetails?ARKK" - } - }, - { - "chainId": 101, - "address": "GgDDCnzZGQRUDy8jWqSqDDcPwAVg2YsKZfLPaTYBWdWt", - "symbol": "BABA", - "name": "Alibaba", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GgDDCnzZGQRUDy8jWqSqDDcPwAVg2YsKZfLPaTYBWdWt/logo.svg", - "tags": ["tokenized-stock"], - "extensions": { - "website": "https://www.digitalassets.ag/UnderlyingDetails?BABA" - } - }, - { - "chainId": 101, - "address": "6jSgnmu8yg7kaZRWp5MtQqNrWTUDk7KWXhZhJPmsQ65y", - "symbol": "BB", - "name": "BlackBerry", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6jSgnmu8yg7kaZRWp5MtQqNrWTUDk7KWXhZhJPmsQ65y/logo.svg", - "tags": ["tokenized-stock"], - "extensions": { - "website": "https://www.digitalassets.ag/UnderlyingDetails?BB" - } - }, - { - "chainId": 101, - "address": "5HHv6HAyBtaihyHEapCJvjE6iRbGLRmm3F5EZjz6EzHV", - "symbol": "wID_v1", - "name": "Everest ID (Wormhole v1)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5HHv6HAyBtaihyHEapCJvjE6iRbGLRmm3F5EZjz6EzHV/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xEBd9D99A3982d547C5Bb4DB7E3b1F9F14b67Eb83", - "assetContract": "https://etherscan.io/address/0xEBd9D99A3982d547C5Bb4DB7E3b1F9F14b67Eb83", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "everid", - "twitter": "https://twitter.com/EverestDotOrg", - "website": "https://everest.org" - } - }, - { - "chainId": 101, - "address": "9Vovr1bqDbMQ8DyaizdC7n1YVvSia8r3PQ1RcPFqpQAs", - "symbol": "BILI", - "name": "Bilibili Inc", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9Vovr1bqDbMQ8DyaizdC7n1YVvSia8r3PQ1RcPFqpQAs/logo.svg", - "tags": ["tokenized-stock"], - "extensions": { - "website": "https://www.digitalassets.ag/UnderlyingDetails?BILI" - } - }, - { - "chainId": 101, - "address": "j35qY1SbQ3k7b2WAR5cNETDKzDESxGnYbArsLNRUzg2", - "symbol": "BITW", - "name": "Bitwise 10 Crypto Index Fund", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/j35qY1SbQ3k7b2WAR5cNETDKzDESxGnYbArsLNRUzg2/logo.png", - "tags": ["tokenized-stock"], - "extensions": { - "website": "https://www.digitalassets.ag/UnderlyingDetails?BITW" - } - }, - { - "chainId": 101, - "address": "AykRYHVEERRoKGzfg2AMTqEFGmCGk9LNnGv2k5FgjKVB", - "symbol": "BNTX", - "name": "BioNTech", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AykRYHVEERRoKGzfg2AMTqEFGmCGk9LNnGv2k5FgjKVB/logo.png", - "tags": ["tokenized-stock"], - "extensions": { - "website": "https://www.digitalassets.ag/UnderlyingDetails?BNTX" - } - }, - { - "chainId": 101, - "address": "Dj76V3vdFGGE8444NWFACR5qmtJrrSop5RCBAGbC88nr", - "symbol": "BRKA", - "name": "Berkshire Hathaway Inc", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Dj76V3vdFGGE8444NWFACR5qmtJrrSop5RCBAGbC88nr/logo.png", - "tags": ["tokenized-stock"], - "extensions": { - "website": "https://www.digitalassets.ag/UnderlyingDetails?BRKA" - } - }, - { - "chainId": 101, - "address": "8TUg3Kpa4pNfaMvgyFdvwyiPBSnyTx7kK5EDfb42N6VK", - "symbol": "BYND", - "name": "Beyond Meat Inc", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8TUg3Kpa4pNfaMvgyFdvwyiPBSnyTx7kK5EDfb42N6VK/logo.svg", - "tags": ["tokenized-stock"], - "extensions": { - "website": "https://www.digitalassets.ag/UnderlyingDetails?BYND" - } - }, - { - "chainId": 101, - "address": "8FyEsMuDWAMMusMqVEstt2sDkMvcUKsTy1gF6oMfWZcG", - "symbol": "CGC", - "name": "Canopy Growth Corp", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8FyEsMuDWAMMusMqVEstt2sDkMvcUKsTy1gF6oMfWZcG/logo.svg", - "tags": ["tokenized-stock"], - "extensions": { - "website": "https://www.digitalassets.ag/UnderlyingDetails?CGC" - } - }, - { - "chainId": 101, - "address": "DUFVbhWf7FsUo3ouMnFbDjv4YYaRE1Sz9jvAmDsNTt1m", - "symbol": "CRON", - "name": "Chronos Group Inc", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DUFVbhWf7FsUo3ouMnFbDjv4YYaRE1Sz9jvAmDsNTt1m/logo.svg", - "tags": ["tokenized-stock"], - "extensions": { - "website": "https://www.digitalassets.ag/UnderlyingDetails?CRON" - } - }, - { - "chainId": 101, - "address": "J9GVpBChXZ8EK7JuPsLSDV17BF9KLJweBQet3L6ZWvTC", - "symbol": "EEM", - "name": "iShares MSCI Emerging Markets ETF", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/J9GVpBChXZ8EK7JuPsLSDV17BF9KLJweBQet3L6ZWvTC/logo.svg", - "tags": ["tokenized-stock"], - "extensions": { - "website": "https://www.digitalassets.ag/UnderlyingDetails?EEM" - } - }, - { - "chainId": 101, - "address": "6Xj2NzAW437UUomaxFiVyJQPGvvup6YLeXFQpp4kqNaD", - "symbol": "EFA", - "name": "iShares MSCI EAFE ETF", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6Xj2NzAW437UUomaxFiVyJQPGvvup6YLeXFQpp4kqNaD/logo.svg", - "tags": ["tokenized-stock"], - "extensions": { - "website": "https://www.digitalassets.ag/UnderlyingDetails?EFA" - } - }, - { - "chainId": 101, - "address": "5YMFoVuoQzdivpm6W97UGKkHxq6aEhipuNkA8imPDoa1", - "symbol": "ETHE", - "name": "Grayscale Ethereum Trust", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5YMFoVuoQzdivpm6W97UGKkHxq6aEhipuNkA8imPDoa1/logo.png", - "tags": ["tokenized-stock"], - "extensions": { - "website": "https://www.digitalassets.ag/UnderlyingDetails?ETHE" - } - }, - { - "chainId": 101, - "address": "C9vMZBz1UCmYSCmMcZFw6N9AsYhXDAWnuhxd8ygCA1Ah", - "symbol": "EWA", - "name": "iShares MSCI Australia ETF", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/C9vMZBz1UCmYSCmMcZFw6N9AsYhXDAWnuhxd8ygCA1Ah/logo.svg", - "tags": ["tokenized-stock"], - "extensions": { - "website": "https://www.digitalassets.ag/UnderlyingDetails?EWA" - } - }, - { - "chainId": 101, - "address": "AcXn3WXPARC7r5JwrkPHSUmBGWyWx1vRydNHXXvgc8V6", - "symbol": "EWJ", - "name": "iShares MSCI Japan ETF", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AcXn3WXPARC7r5JwrkPHSUmBGWyWx1vRydNHXXvgc8V6/logo.svg", - "tags": ["tokenized-stock"], - "extensions": { - "website": "https://www.digitalassets.ag/UnderlyingDetails?EWJ" - } - }, - { - "chainId": 101, - "address": "8ihxfcxBZ7dZyfnpXJiGrgEZfrKWbZUk6LjfosLrQfR", - "symbol": "EWY", - "name": "iShares MSCI South Korea ETF", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8ihxfcxBZ7dZyfnpXJiGrgEZfrKWbZUk6LjfosLrQfR/logo.svg", - "tags": ["tokenized-stock"], - "extensions": { - "website": "https://www.digitalassets.ag/UnderlyingDetails?EWY" - } - }, - { - "chainId": 101, - "address": "N5ykto2MU7CNcLX7sgWFe3M2Vpy7wq8gDt2sVNDe6aH", - "symbol": "EWZ", - "name": "iShares MSCI Brazil ETF", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/N5ykto2MU7CNcLX7sgWFe3M2Vpy7wq8gDt2sVNDe6aH/logo.svg", - "tags": ["tokenized-stock"], - "extensions": { - "website": "https://www.digitalassets.ag/UnderlyingDetails?EWZ" - } - }, - { - "chainId": 101, - "address": "3K9pfJzKiAm9upcyDWk5NBVdjxVtqXN8sVfQ4aR6qwb2", - "symbol": "FB", - "name": "Facebook", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3K9pfJzKiAm9upcyDWk5NBVdjxVtqXN8sVfQ4aR6qwb2/logo.svg", - "tags": ["tokenized-stock"], - "extensions": { - "website": "https://www.digitalassets.ag/UnderlyingDetails?FB" - } - }, - { - "chainId": 101, - "address": "Ege7FzfrrBSusVQrRUuTiFVCSc8u2R9fRWh4qLjdNYfz", - "symbol": "FXI", - "name": "iShares China Large-Cap ETF", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Ege7FzfrrBSusVQrRUuTiFVCSc8u2R9fRWh4qLjdNYfz/logo.svg", - "tags": ["tokenized-stock"], - "extensions": { - "website": "https://www.digitalassets.ag/UnderlyingDetails?FXI" - } - }, - { - "chainId": 101, - "address": "FiV4TtDtnjaf8m8vw2a7uc9hRoFvvu9Ft7GzxiMujn3t", - "symbol": "GBTC", - "name": "Grayscale Bitcoin Trust", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FiV4TtDtnjaf8m8vw2a7uc9hRoFvvu9Ft7GzxiMujn3t/logo.png", - "tags": ["tokenized-stock"], - "extensions": { - "website": "https://www.digitalassets.ag/UnderlyingDetails?GBTC" - } - }, - { - "chainId": 101, - "address": "7FYk6a91TiFWigBvCf8KbuEMyyfpqET5QHFkRtiD2XxF", - "symbol": "GDX", - "name": "VanEck Vectors Gold Miners Etf", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7FYk6a91TiFWigBvCf8KbuEMyyfpqET5QHFkRtiD2XxF/logo.svg", - "tags": ["tokenized-stock"], - "extensions": { - "website": "https://www.digitalassets.ag/UnderlyingDetails?GDX" - } - }, - { - "chainId": 101, - "address": "EGhhk4sHgY1SBYsgkfgyGNhAKBXqn6QyKNx7W13evx9D", - "symbol": "GDXJ", - "name": "VanEck Vectors Junior Gold Miners Etf", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EGhhk4sHgY1SBYsgkfgyGNhAKBXqn6QyKNx7W13evx9D/logo.svg", - "tags": ["tokenized-stock"], - "extensions": { - "website": "https://www.digitalassets.ag/UnderlyingDetails?GDXJ" - } - }, - { - "chainId": 101, - "address": "9HyU5EEyPvkxeuekNUwsHzmMCJoiw8FZBGWaNih2oux1", - "symbol": "GLD", - "name": "SPDR Gold Shares", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9HyU5EEyPvkxeuekNUwsHzmMCJoiw8FZBGWaNih2oux1/logo.png", - "tags": ["tokenized-stock"], - "extensions": { - "website": "https://www.digitalassets.ag/UnderlyingDetails?GLD" - } - }, - { - "chainId": 101, - "address": "EYLa7susWhzqDNKYe7qLhFHb3Y9kdNwThc6QSnc4TLWN", - "symbol": "GLXY", - "name": "Galaxy Digital Holdings", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EYLa7susWhzqDNKYe7qLhFHb3Y9kdNwThc6QSnc4TLWN/logo.png", - "tags": ["tokenized-stock"], - "extensions": { - "website": "https://www.digitalassets.ag/UnderlyingDetails?GLXY" - } - }, - { - "chainId": 101, - "address": "Ac2wmyujRxiGtb5msS7fKzGycaCF7K8NbVs5ortE6MFo", - "symbol": "GME", - "name": "GameStop", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Ac2wmyujRxiGtb5msS7fKzGycaCF7K8NbVs5ortE6MFo/logo.svg", - "tags": ["tokenized-stock"], - "extensions": { - "website": "https://www.digitalassets.ag/UnderlyingDetails?GME" - } - }, - { - "chainId": 101, - "address": "7uzWUPC6XsWkgFAuDjpZgPVH9p3WqeKTvTJqLM1RXX6w", - "symbol": "GOOGL", - "name": "Google", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7uzWUPC6XsWkgFAuDjpZgPVH9p3WqeKTvTJqLM1RXX6w/logo.svg", - "tags": ["tokenized-stock"], - "extensions": { - "website": "https://www.digitalassets.ag/UnderlyingDetails?GOOGL" - } - }, - { - "chainId": 101, - "address": "XJUMvw7KRLoLCYVD727jV9fjNUSDVcZaQUK6XpY6kGm", - "symbol": "IF", - "name": "Impossible Finance", - "decimals": 9, - "logoURI": "https://gateway.pinata.cloud/ipfs/QmcfMbNuvDV6ho3fueNPFTtgSruaUBmSdqP5D5ZduipN6S/logo.png", - "tags": ["ethereum"], - "extensions": { - "coingeckoId": "impossible-finance", - "website": "https://impossible.finance" - } - }, - { - "chainId": 101, - "address": "CnLLrX9A8RhKpq8Z3CKko7sQMqN2AXj8AfFyxxoBBEFf", - "symbol": "CH", - "name": "COIN HUNTER", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CnLLrX9A8RhKpq8Z3CKko7sQMqN2AXj8AfFyxxoBBEFf/logo.png", - "extensions": { - "website": "https://bit.ly/Coin-Hunter" - } - }, - { - "chainId": 101, - "address": "CB3obConLVWpo8RtTANzBSURmJnAVgy5xznvQfWXDfpR", - "symbol": "PURITY", - "name": "PURITY", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CB3obConLVWpo8RtTANzBSURmJnAVgy5xznvQfWXDfpR/logo.png", - "extensions": { - "website": "https://github.com/teampurity" - } - }, - { - "chainId": 101, - "address": "GkDg1ZfoFkroLAwLqtJNXhxCDg8gmKxHAGxSUZagYFfE", - "symbol": "SOL100", - "name": "SOL100", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GkDg1ZfoFkroLAwLqtJNXhxCDg8gmKxHAGxSUZagYFfE/logo.png", - "extensions": { - "website": "https://github.com/teampurity" - } - }, - { - "chainId": 101, - "address": "5E2742iZRZgZF94bfz39NgV9wjppe24YrQJVu6niLPMA", - "symbol": "GPA", - "name": "GALAXY PANDA", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5E2742iZRZgZF94bfz39NgV9wjppe24YrQJVu6niLPMA/logo.png", - "extensions": { - "website": "http://galaxypanda.space" - } - }, - { - "chainId": 101, - "address": "4oyFkXQhvvDFa8cvShR4zwhYJ1RfhRzQjVAx1wemmjs6", - "symbol": "GRU", - "name": "GURU", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4oyFkXQhvvDFa8cvShR4zwhYJ1RfhRzQjVAx1wemmjs6/logo.png", - "extensions": { - "website": "https://solanaguru.web.app" - } - }, - { - "chainId": 101, - "address": "8MpuLZGs52qdj4aGkgxrjjBbDQQd2dsKtbRpCpMb4g8o", - "symbol": "TST", - "name": "CHTST", - "decimals": 9, - "logoURI": "" - }, - { - "chainId": 101, - "address": "4796pBun8ihiecy4unZuLWoSVRmK8sf7yQMbwkkvZDH3", - "symbol": "BLOK", - "name": "BLOCITIES", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4796pBun8ihiecy4unZuLWoSVRmK8sf7yQMbwkkvZDH3/logo.png", - "extensions": { - "website": "https://blocities.finance" - } - }, - { - "chainId": 101, - "address": "C4kmKzQ8o6NAP8pToERJF6C7V4PjCVE3o2oSrp24f5GP", - "symbol": "CERCr", - "name": "Elemento6", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/C4kmKzQ8o6NAP8pToERJF6C7V4PjCVE3o2oSrp24f5GP/logo.png", - "extensions": { - "website": "https://respectfuldevelopmentpanama.com" - } - }, - { - "chainId": 101, - "address": "6CuCUCYovcLxwaKuxWm8uTquVKGWaAydcFEU3NrtvxGZ", - "symbol": "INTC", - "name": "Intel Corp", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6CuCUCYovcLxwaKuxWm8uTquVKGWaAydcFEU3NrtvxGZ/logo.svg", - "tags": ["tokenized-stock"], - "extensions": { - "website": "https://www.digitalassets.ag/UnderlyingDetails?INTC" - } - }, - { - "chainId": 101, - "address": "iVNcrNE9BRZBC9Aqf753iZiZfbszeAVUoikgT9yvr2a", - "symbol": "IVN", - "name": "Investin Protocol", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/iVNcrNE9BRZBC9Aqf753iZiZfbszeAVUoikgT9yvr2a/logo.png", - "tags": ["defi", "fund-management"], - "extensions": { - "coingeckoId": "investin", - "discord": "https://discord.com/invite/Yf54h9B", - "medium": "https://medium.com/investin-pro", - "serumV3Usdc": "AdmfUBJ64BTsjaZdtu1iQHAtxJ4Ge7Zw5bNMsrLGdZu7", - "telegram": "https://t.me/Investin_pro1", - "twitter": "https://twitter.com/Investin_pro", - "website": "https://www.investin.pro/" - } - }, - { - "chainId": 101, - "address": "BTk1SU7EM3sv7u8iaeUjJahm5oeXhEFeC3GJ3KqjTkGL", - "symbol": "RDP", - "name": "Road Protocol", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BTk1SU7EM3sv7u8iaeUjJahm5oeXhEFeC3GJ3KqjTkGL/logo.svg", - "extensions": { - "telegram": "https://t.me/roadprotocol", - "twitter": "https://twitter.com/roadprotocol", - "website": "https://roadprotocol.com" - } - }, - { - "chainId": 101, - "address": "7kWEmnn8sCDnB3gDyeNss8Jo8tgj7i3yHyKrYjbXV6Jd", - "symbol": "WENA", - "name": "WENATURE", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7kWEmnn8sCDnB3gDyeNss8Jo8tgj7i3yHyKrYjbXV6Jd/logo.png", - "extensions": { - "twitter": "https://twitter.com/wenacurrency", - "website": "https://wena.finance" - } - }, - { - "chainId": 101, - "address": "6H26K637YNAjZycRosvBR3ENKFGMsbr4xmoV7ca83GWf", - "symbol": "JUST", - "name": "Just Group PLC", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6H26K637YNAjZycRosvBR3ENKFGMsbr4xmoV7ca83GWf/logo.png", - "tags": ["tokenized-stock"], - "extensions": { - "website": "https://www.digitalassets.ag/UnderlyingDetails?JUST" - } - }, - { - "chainId": 101, - "address": "FFRtWiE8FT7HMf673r9cmpabHVQfa2QEf4rSRwNo4JM3", - "symbol": "MRNA", - "name": "Moderna", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FFRtWiE8FT7HMf673r9cmpabHVQfa2QEf4rSRwNo4JM3/logo.svg", - "tags": ["tokenized-stock"], - "extensions": { - "website": "https://www.digitalassets.ag/UnderlyingDetails?MRNA" - } - }, - { - "chainId": 101, - "address": "Hfbh3GU8AdYCw4stirFy2RPGtwQbbzToG2DgFozAymUb", - "symbol": "NFLX", - "name": "Netflix", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Hfbh3GU8AdYCw4stirFy2RPGtwQbbzToG2DgFozAymUb/logo.svg", - "tags": ["tokenized-stock"], - "extensions": { - "website": "https://www.digitalassets.ag/UnderlyingDetails?NFLX" - } - }, - { - "chainId": 101, - "address": "56Zwe8Crm4pXvmByCxmGDjYrLPxkenTrckdRM7WG3zQv", - "symbol": "NIO", - "name": "Nio", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/56Zwe8Crm4pXvmByCxmGDjYrLPxkenTrckdRM7WG3zQv/logo.svg", - "tags": ["tokenized-stock"], - "extensions": { - "website": "https://www.digitalassets.ag/UnderlyingDetails?NIO" - } - }, - { - "chainId": 101, - "address": "HP9WMRDV3KdUfJ7CNn5Wf8JzLczwxdnQYTHDAa9yCSnq", - "symbol": "NOK", - "name": "Nokia", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HP9WMRDV3KdUfJ7CNn5Wf8JzLczwxdnQYTHDAa9yCSnq/logo.svg", - "tags": ["tokenized-stock"], - "extensions": { - "website": "https://www.digitalassets.ag/UnderlyingDetails?NOK" - } - }, - { - "chainId": 101, - "address": "GpM58T33eTrGEdHmeFnSVksJjJT6JVdTvim59ipTgTNh", - "symbol": "NVDA", - "name": "NVIDIA", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GpM58T33eTrGEdHmeFnSVksJjJT6JVdTvim59ipTgTNh/logo.svg", - "tags": ["tokenized-stock"], - "extensions": { - "website": "https://www.digitalassets.ag/UnderlyingDetails?NVDA" - } - }, - { - "chainId": 101, - "address": "CRCop5kHBDLTYJyG7z3u6yiVQi4FQHbyHdtb18Qh2Ta9", - "symbol": "PENN", - "name": "Penn National Gaming", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CRCop5kHBDLTYJyG7z3u6yiVQi4FQHbyHdtb18Qh2Ta9/logo.svg", - "tags": ["tokenized-stock"], - "extensions": { - "website": "https://www.digitalassets.ag/UnderlyingDetails?PENN" - } - }, - { - "chainId": 101, - "address": "97v2oXMQ2MMAkgUnoQk3rNhrZCRThorYhvz1poAe9stk", - "symbol": "PFE", - "name": "Pfizer", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/97v2oXMQ2MMAkgUnoQk3rNhrZCRThorYhvz1poAe9stk/logo.svg", - "tags": ["tokenized-stock"], - "extensions": { - "website": "https://www.digitalassets.ag/UnderlyingDetails?PFE" - } - }, - { - "chainId": 101, - "address": "AwutBmwmhehaMh18CxqFPPN311uCB1M2awp68A2bG41v", - "symbol": "PYPL", - "name": "PayPal", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AwutBmwmhehaMh18CxqFPPN311uCB1M2awp68A2bG41v/logo.svg", - "tags": ["tokenized-stock"], - "extensions": { - "website": "https://www.digitalassets.ag/UnderlyingDetails?PYPL" - } - }, - { - "chainId": 101, - "address": "8Sa7BjogSJnkHyhtRTKNDDTDtASnWMcAsD4ySVNSFu27", - "symbol": "SLV", - "name": "iShares Silver Trust", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8Sa7BjogSJnkHyhtRTKNDDTDtASnWMcAsD4ySVNSFu27/logo.svg", - "tags": ["tokenized-stock"], - "extensions": { - "website": "https://www.digitalassets.ag/UnderlyingDetails?SLV" - } - }, - { - "chainId": 101, - "address": "CS4tNS523VCLiTsGnYEAd6GqfrZNLtA14C98DC6gE47g", - "symbol": "SPY", - "name": "SPDR S\u0026P 500 ETF", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CS4tNS523VCLiTsGnYEAd6GqfrZNLtA14C98DC6gE47g/logo.svg", - "tags": ["tokenized-stock"], - "extensions": { - "website": "https://www.digitalassets.ag/UnderlyingDetails?SPY" - } - }, - { - "chainId": 101, - "address": "BLyrWJuDyYnDaUMxqBMqkDYAeajnyode1ARh7TxtakEh", - "symbol": "SQ", - "name": "Square", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BLyrWJuDyYnDaUMxqBMqkDYAeajnyode1ARh7TxtakEh/logo.svg", - "tags": ["tokenized-stock"], - "extensions": { - "website": "https://www.digitalassets.ag/UnderlyingDetails?SQ" - } - }, - { - "chainId": 101, - "address": "HSDepE3xvbyRDx4M11LX7Hf9qgHSopfTXxAoeatCcwWF", - "symbol": "SUN", - "name": "Sunoco LP", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HSDepE3xvbyRDx4M11LX7Hf9qgHSopfTXxAoeatCcwWF/logo.svg", - "tags": ["tokenized-stock"], - "extensions": { - "website": "https://www.digitalassets.ag/UnderlyingDetails?SUN" - } - }, - { - "chainId": 101, - "address": "LZufgu7ekMcWBUypPMBYia2ipnFzpxpZgRBFLhYswgR", - "symbol": "TLRY", - "name": "Tilray Inc", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/LZufgu7ekMcWBUypPMBYia2ipnFzpxpZgRBFLhYswgR/logo.svg", - "tags": ["tokenized-stock"], - "extensions": { - "website": "https://www.digitalassets.ag/UnderlyingDetails?TLRY" - } - }, - { - "chainId": 101, - "address": "2iCUKaCQpGvnaBimLprKWT8bNGF92e6LxWq4gjsteWfx", - "symbol": "TSM", - "name": "Taiwan Semiconductor Mfg", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2iCUKaCQpGvnaBimLprKWT8bNGF92e6LxWq4gjsteWfx/logo.svg", - "tags": ["tokenized-stock"], - "extensions": { - "website": "https://www.digitalassets.ag/UnderlyingDetails?TSM" - } - }, - { - "chainId": 101, - "address": "H8Z1JgxqUpyHrerDVbXQ2HdjKuSTAWEZSeLTo4smWdF2", - "symbol": "CPT", - "name": "CryptoPotes Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/H8Z1JgxqUpyHrerDVbXQ2HdjKuSTAWEZSeLTo4smWdF2/logo.svg", - "tags": ["social-token", "community-token"], - "extensions": { - "telegram": "https://t.me/+EWjQtq9l3GBjYzc0" - } - }, - { - "chainId": 101, - "address": "BZMg4HyyHVUJkwh2yuv6duu4iQUaXRxT6sK1dT7FcaZf", - "symbol": "TUR", - "name": "iShares MSCI Turkey ETF", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BZMg4HyyHVUJkwh2yuv6duu4iQUaXRxT6sK1dT7FcaZf/logo.svg", - "tags": ["tokenized-stock"], - "extensions": { - "website": "https://www.digitalassets.ag/UnderlyingDetails?TUR" - } - }, - { - "chainId": 101, - "address": "C2tNm8bMU5tz6KdXjHY5zewsN1Wv1TEbxK9XGTCgUZMJ", - "symbol": "TWTR", - "name": "Twitter", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/C2tNm8bMU5tz6KdXjHY5zewsN1Wv1TEbxK9XGTCgUZMJ/logo.svg", - "tags": ["tokenized-stock"], - "extensions": { - "website": "https://www.digitalassets.ag/UnderlyingDetails?TWTR" - } - }, - { - "chainId": 101, - "address": "4kmVbBDCzYam3S4e9XqKQkLCEz16gu3dTTo65KbhShuv", - "symbol": "UBER", - "name": "Uber", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4kmVbBDCzYam3S4e9XqKQkLCEz16gu3dTTo65KbhShuv/logo.svg", - "tags": ["tokenized-stock"], - "extensions": { - "website": "https://www.digitalassets.ag/UnderlyingDetails?UBER" - } - }, - { - "chainId": 101, - "address": "J645gMdx9zSMM2VySLBrtv6Zv1HyEjPqQXVGRAPYqzvK", - "symbol": "USO", - "name": "United States Oil Fund", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/J645gMdx9zSMM2VySLBrtv6Zv1HyEjPqQXVGRAPYqzvK/logo.svg", - "tags": ["tokenized-stock"], - "extensions": { - "website": "https://www.digitalassets.ag/UnderlyingDetails?USO" - } - }, - { - "chainId": 101, - "address": "3LjkoC9FYEqRKNpy7xz3nxfnGVAt1SNS98rYwF2adQWB", - "symbol": "VXX", - "name": "iPath B S\u0026P 500 VIX S/T Futs ETN", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3LjkoC9FYEqRKNpy7xz3nxfnGVAt1SNS98rYwF2adQWB/logo.png", - "tags": ["tokenized-stock"], - "extensions": { - "website": "https://www.digitalassets.ag/UnderlyingDetails?VXX" - } - }, - { - "chainId": 101, - "address": "BcALTCjD4HJJxBDUXi3nHUgqsJmXAQdBbQrcmtLtqZaf", - "symbol": "ZM", - "name": "Zoom", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BcALTCjD4HJJxBDUXi3nHUgqsJmXAQdBbQrcmtLtqZaf/logo.svg", - "tags": ["tokenized-stock"], - "extensions": { - "website": "https://www.digitalassets.ag/UnderlyingDetails?ZM" - } - }, - { - "chainId": 101, - "address": "9n4nbM75f5Ui33ZbPYXn59EwSgE8CGsHtAeTH5YFeJ9E", - "symbol": "BTC", - "name": "Wrapped Bitcoin (Sollet)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9n4nbM75f5Ui33ZbPYXn59EwSgE8CGsHtAeTH5YFeJ9E/logo.png", - "tags": ["wrapped-sollet", "ethereum"], - "extensions": { - "bridgeContract": "https://etherscan.io/address/0xeae57ce9cc1984f202e15e038b964bb8bdf7229a", - "coingeckoId": "bitcoin", - "serumV3Usdc": "A8YFbxQYFVqKZaoYJLLUVcQiWP7G2MeEgW5wsAQgMvFw", - "serumV3Usdt": "C1EuT9VokAKLiW7i2ASnZUvxDoKuKkCpDDeNxAptuNe4" - } - }, - { - "chainId": 101, - "address": "2FPyTwcZLUg1MDrwsyoP4D6s1tM7hAkHYRjkNb5w6Pxk", - "symbol": "soETH", - "name": "Wrapped Ethereum (Sollet)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2FPyTwcZLUg1MDrwsyoP4D6s1tM7hAkHYRjkNb5w6Pxk/logo.png", - "tags": ["wrapped-sollet", "ethereum"], - "extensions": { - "bridgeContract": "https://etherscan.io/address/0xeae57ce9cc1984f202e15e038b964bb8bdf7229a", - "coingeckoId": "ethereum", - "serumV3Usdc": "4tSvZvnbyzHXLMTiFonMyxZoHmFqau1XArcRCVHLZ5gX", - "serumV3Usdt": "7dLVkUfBVfCGkFhSXDCq1ukM9usathSgS716t643iFGF" - } - }, - { - "chainId": 101, - "address": "3JSf5tPeuscJGtaCp5giEiDhv51gQ4v3zWg8DGgyLfAB", - "symbol": "soYFI", - "name": "Wrapped YFI (Sollet)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3JSf5tPeuscJGtaCp5giEiDhv51gQ4v3zWg8DGgyLfAB/logo.png", - "tags": ["wrapped-sollet", "ethereum"], - "extensions": { - "bridgeContract": "https://etherscan.io/address/0xeae57ce9cc1984f202e15e038b964bb8bdf7229a", - "coingeckoId": "yearn-finance", - "serumV3Usdc": "7qcCo8jqepnjjvB5swP4Afsr3keVBs6gNpBTNubd1Kr2", - "serumV3Usdt": "3Xg9Q4VtZhD4bVYJbTfgGWFV5zjE3U7ztSHa938zizte" - } - }, - { - "chainId": 101, - "address": "CWE8jPTUYhdCTZYWPTe1o5DFqfdjzWKc9WKz6rSjQUdG", - "symbol": "soLINK", - "name": "Wrapped Chainlink (Sollet)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CWE8jPTUYhdCTZYWPTe1o5DFqfdjzWKc9WKz6rSjQUdG/logo.png", - "tags": ["wrapped-sollet", "ethereum"], - "extensions": { - "bridgeContract": "https://etherscan.io/address/0xeae57ce9cc1984f202e15e038b964bb8bdf7229a", - "coingeckoId": "chainlink", - "serumV3Usdc": "3hwH1txjJVS8qv588tWrjHfRxdqNjBykM1kMcit484up", - "serumV3Usdt": "3yEZ9ZpXSQapmKjLAGKZEzUNA1rcupJtsDp5mPBWmGZR" - } - }, - { - "chainId": 101, - "address": "Ga2AXHpfAF6mv2ekZwcsJFqu7wB4NV331qNH7fW9Nst8", - "symbol": "XRP", - "name": "Wrapped XRP (Sollet)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Ga2AXHpfAF6mv2ekZwcsJFqu7wB4NV331qNH7fW9Nst8/logo.png", - "tags": ["wrapped-sollet", "ethereum"], - "extensions": { - "bridgeContract": "https://etherscan.io/address/0xeae57ce9cc1984f202e15e038b964bb8bdf7229a", - "coingeckoId": "ripple" - } - }, - { - "chainId": 101, - "address": "BQcdHdAQW1hczDbBi9hiegXAR7A98Q9jx3X3iBBBDiq4", - "symbol": "soUSDT", - "name": "Wrapped USDT (Sollet)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BQcdHdAQW1hczDbBi9hiegXAR7A98Q9jx3X3iBBBDiq4/logo.png", - "tags": ["stablecoin", "wrapped-sollet", "ethereum"], - "extensions": { - "bridgeContract": "https://etherscan.io/address/0xeae57ce9cc1984f202e15e038b964bb8bdf7229a", - "coingeckoId": "tether" - } - }, - { - "chainId": 101, - "address": "AR1Mtgh7zAtxuxGd2XPovXPVjcSdY3i4rQYisNadjfKy", - "symbol": "soSUSHI", - "name": "Wrapped SUSHI (Sollet)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AR1Mtgh7zAtxuxGd2XPovXPVjcSdY3i4rQYisNadjfKy/logo.png", - "tags": ["wrapped-sollet", "ethereum"], - "extensions": { - "bridgeContract": "https://etherscan.io/address/0xeae57ce9cc1984f202e15e038b964bb8bdf7229a", - "coingeckoId": "sushi", - "serumV3Usdc": "A1Q9iJDVVS8Wsswr9ajeZugmj64bQVCYLZQLra2TMBMo", - "serumV3Usdt": "6DgQRTpJTnAYBSShngAVZZDq7j9ogRN1GfSQ3cq9tubW", - "waterfallbot": "https://bit.ly/SUSHIwaterfall", - "website": "https://www.sushi.com" - } - }, - { - "chainId": 101, - "address": "CsZ5LZkDS7h9TDKjrbL7VAwQZ9nsRu8vJLhRYfmGaN8K", - "symbol": "soALEPH", - "name": "Wrapped ALEPH (Sollet)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CsZ5LZkDS7h9TDKjrbL7VAwQZ9nsRu8vJLhRYfmGaN8K/logo.png", - "tags": ["wrapped-sollet", "ethereum"], - "extensions": { - "bridgeContract": "https://etherscan.io/address/0xeae57ce9cc1984f202e15e038b964bb8bdf7229a", - "coingeckoId": "aleph", - "serumV3Usdc": "GcoKtAmTy5QyuijXSmJKBtFdt99e6Buza18Js7j9AJ6e", - "serumV3Usdt": "Gyp1UGRgbrb6z8t7fpssxEKQgEmcJ4pVnWW3ds2p6ZPY" - } - }, - { - "chainId": 101, - "address": "SF3oTvfWzEP3DTwGSvUXRrGTvr75pdZNnBLAH9bzMuX", - "symbol": "soSXP", - "name": "Wrapped SXP (Sollet)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SF3oTvfWzEP3DTwGSvUXRrGTvr75pdZNnBLAH9bzMuX/logo.png", - "tags": ["wrapped-sollet", "ethereum"], - "extensions": { - "bridgeContract": "https://etherscan.io/address/0xeae57ce9cc1984f202e15e038b964bb8bdf7229a", - "coingeckoId": "swipe", - "serumV3Usdc": "4LUro5jaPaTurXK737QAxgJywdhABnFAMQkXX4ZyqqaZ", - "serumV3Usdt": "8afKwzHR3wJE7W7Y5hvQkngXh6iTepSZuutRMMy96MjR" - } - }, - { - "chainId": 101, - "address": "BtZQfWqDGbk9Wf2rXEiWyQBdBY1etnUUn6zEphvVS7yN", - "symbol": "soHGET", - "name": "Wrapped Hedget (Sollet)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BtZQfWqDGbk9Wf2rXEiWyQBdBY1etnUUn6zEphvVS7yN/logo.svg", - "tags": ["wrapped-sollet", "ethereum"], - "extensions": { - "bridgeContract": "https://etherscan.io/address/0xeae57ce9cc1984f202e15e038b964bb8bdf7229a", - "coingeckoId": "hedget", - "serumV3Usdc": "88vztw7RTN6yJQchVvxrs6oXUDryvpv9iJaFa1EEmg87", - "serumV3Usdt": "ErQXxiNfJgd4fqQ58PuEw5xY35TZG84tHT6FXf5s4UxY", - "website": "https://www.hedget.com/" - } - }, - { - "chainId": 101, - "address": "5Fu5UUgbjpUvdBveb3a1JTNirL8rXtiYeSMWvKjtUNQv", - "symbol": "soCREAM", - "name": "Wrapped Cream Finance (Sollet)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5Fu5UUgbjpUvdBveb3a1JTNirL8rXtiYeSMWvKjtUNQv/logo.png", - "tags": ["wrapped-sollet", "ethereum"], - "extensions": { - "bridgeContract": "https://etherscan.io/address/0xeae57ce9cc1984f202e15e038b964bb8bdf7229a", - "coingeckoId": "cream-2", - "serumV3Usdc": "7nZP6feE94eAz9jmfakNJWPwEKaeezuKKC5D1vrnqyo2", - "serumV3Usdt": "4ztJEvQyryoYagj2uieep3dyPwG2pyEwb2dKXTwmXe82" - } - }, - { - "chainId": 101, - "address": "873KLxCbz7s9Kc4ZzgYRtNmhfkQrhfyWGZJBmyCbC3ei", - "symbol": "soUBXT", - "name": "Wrapped Upbots (Sollet)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/873KLxCbz7s9Kc4ZzgYRtNmhfkQrhfyWGZJBmyCbC3ei/logo.png", - "tags": ["wrapped-sollet", "ethereum"], - "extensions": { - "coingeckoId": "upbots", - "serumV3Usdc": "2wr3Ab29KNwGhtzr5HaPCyfU1qGJzTUAN4amCLZWaD1H", - "serumV3Usdt": "F1T7b6pnR8Pge3qmfNUfW6ZipRDiGpMww6TKTrRU4NiL", - "website": "https://upbots.com/" - } - }, - { - "chainId": 101, - "address": "HqB7uswoVg4suaQiDP3wjxob1G5WdZ144zhdStwMCq7e", - "symbol": "soHNT", - "name": "Wrapped Helium (Sollet)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HqB7uswoVg4suaQiDP3wjxob1G5WdZ144zhdStwMCq7e/logo.png", - "tags": ["wrapped-sollet", "ethereum"], - "extensions": { - "bridgeContract": "https://etherscan.io/address/0xeae57ce9cc1984f202e15e038b964bb8bdf7229a", - "coingeckoId": "helium", - "serumV3Usdc": "CnUV42ZykoKUnMDdyefv5kP6nDSJf7jFd7WXAecC6LYr", - "serumV3Usdt": "8FpuMGLtMZ7Wt9ZvyTGuTVwTwwzLYfS5NZWcHxbP1Wuh" - } - }, - { - "chainId": 101, - "address": "9S4t2NEAiJVMvPdRYKVrfJpBafPBLtvbvyS3DecojQHw", - "symbol": "soFRONT", - "name": "Wrapped FRONT (Sollet)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9S4t2NEAiJVMvPdRYKVrfJpBafPBLtvbvyS3DecojQHw/logo.png", - "tags": ["wrapped-sollet", "ethereum"], - "extensions": { - "bridgeContract": "https://etherscan.io/address/0xeae57ce9cc1984f202e15e038b964bb8bdf7229a", - "coingeckoId": "frontier-token", - "serumV3Usdc": "9Zx1CvxSVdroKMMWf2z8RwrnrLiQZ9VkQ7Ex3syQqdSH", - "serumV3Usdt": "CGC4UgWwqA9PET6Tfx6o6dLv94EK2coVkPtxgNHuBtxj" - } - }, - { - "chainId": 101, - "address": "6WNVCuxCGJzNjmMZoKyhZJwvJ5tYpsLyAtagzYASqBoF", - "symbol": "soAKRO", - "name": "Wrapped AKRO (Sollet)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6WNVCuxCGJzNjmMZoKyhZJwvJ5tYpsLyAtagzYASqBoF/logo.png", - "tags": ["wrapped-sollet", "ethereum"], - "extensions": { - "bridgeContract": "https://etherscan.io/address/0xeae57ce9cc1984f202e15e038b964bb8bdf7229a", - "coingeckoId": "akropolis", - "serumV3Usdc": "5CZXTTgVZKSzgSA3AFMN5a2f3hmwmmJ6hU8BHTEJ3PX8", - "serumV3Usdt": "HLvRdctRB48F9yLnu9E24LUTRt89D48Z35yi1HcxayDf" - } - }, - { - "chainId": 101, - "address": "DJafV9qemGp7mLMEn5wrfqaFwxsbLgUsGVS16zKRk9kc", - "symbol": "soHXRO", - "name": "Wrapped HXRO (Sollet)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DJafV9qemGp7mLMEn5wrfqaFwxsbLgUsGVS16zKRk9kc/logo.png", - "tags": ["wrapped-sollet", "ethereum"], - "extensions": { - "bridgeContract": "https://etherscan.io/address/0xeae57ce9cc1984f202e15e038b964bb8bdf7229a", - "coingeckoId": "hxro", - "serumV3Usdc": "6Pn1cSiRos3qhBf54uBP9ZQg8x3JTardm1dL3n4p29tA", - "serumV3Usdt": "4absuMsgemvdjfkgdLQq1zKEjw3dHBoCWkzKoctndyqd" - } - }, - { - "chainId": 101, - "address": "DEhAasscXF4kEGxFgJ3bq4PpVGp5wyUxMRvn6TzGVHaw", - "symbol": "soUNI", - "name": "Wrapped UNI (Sollet)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DEhAasscXF4kEGxFgJ3bq4PpVGp5wyUxMRvn6TzGVHaw/logo.png", - "tags": ["wrapped-sollet", "ethereum"], - "extensions": { - "bridgeContract": "https://etherscan.io/address/0xeae57ce9cc1984f202e15e038b964bb8bdf7229a", - "coingeckoId": "uniswap", - "serumV3Usdc": "6JYHjaQBx6AtKSSsizDMwozAEDEZ5KBsSUzH7kRjGJon", - "serumV3Usdt": "2SSnWNrc83otLpfRo792P6P3PESZpdr8cu2r8zCE6bMD" - } - }, - { - "chainId": 101, - "address": "SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt", - "symbol": "SRM", - "name": "Serum", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt/logo.png", - "extensions": { - "coingeckoId": "serum", - "serumV3Usdc": "ByRys5tuUWDgL73G8JBAEfkdFf8JWBzPBDHsBVQ5vbQA", - "serumV3Usdt": "AtNnsY1AyRERWJ8xCskfz38YdvruWVJQUVXgScC1iPb", - "waterfallbot": "https://bit.ly/SRMwaterfall", - "website": "https://projectserum.com/" - } - }, - { - "chainId": 101, - "address": "AGFEad2et2ZJif9jaGpdMixQqvW5i81aBdvKe7PHNfz3", - "symbol": "soFTT", - "name": "Wrapped FTT (Sollet)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AGFEad2et2ZJif9jaGpdMixQqvW5i81aBdvKe7PHNfz3/logo.png", - "tags": ["wrapped-sollet", "ethereum"], - "extensions": { - "assetContract": "https://etherscan.io/address/0x50d1c9771902476076ecfc8b2a83ad6b9355a4c9", - "bridgeContract": "https://etherscan.io/address/0xeae57ce9cc1984f202e15e038b964bb8bdf7229a", - "coingeckoId": "ftx-token", - "serumV3Usdc": "2Pbh1CvRVku1TgewMfycemghf6sU9EyuFDcNXqvRmSxc", - "serumV3Usdt": "Hr3wzG8mZXNHV7TuL6YqtgfVUesCqMxGYCEyP3otywZE", - "waterfallbot": "https://bit.ly/FTTwaterfall" - } - }, - { - "chainId": 101, - "address": "MSRMcoVyrFxnSgo5uXwone5SKcGhT1KEJMFEkMEWf9L", - "symbol": "MSRM", - "name": "MegaSerum", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/MSRMcoVyrFxnSgo5uXwone5SKcGhT1KEJMFEkMEWf9L/logo.png", - "extensions": { - "coingeckoId": "megaserum", - "serumV3Usdc": "4VKLSYdvrQ5ngQrt1d2VS8o4ewvb2MMUZLiejbnGPV33", - "serumV3Usdt": "5nLJ22h1DUfeCfwbFxPYK8zbfbri7nA9bXoDcR8AcJjs", - "website": "https://projectserum.com/" - } - }, - { - "chainId": 101, - "address": "BXXkv6z8ykpG1yuvUDPgh732wzVHB69RnB9YgSYh3itW", - "symbol": "soUSDC", - "name": "Wrapped USDC (Sollet)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BXXkv6z8ykpG1yuvUDPgh732wzVHB69RnB9YgSYh3itW/logo.png", - "tags": ["stablecoin", "wrapped-sollet", "ethereum"], - "extensions": { - "coingeckoId": "usd-coin" - } - }, - { - "chainId": 101, - "address": "GXMvfY2jpQctDqZ9RoU3oWPhufKiCcFEfchvYumtX7jd", - "symbol": "soTOMO", - "name": "Wrapped TOMO (Sollet)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GXMvfY2jpQctDqZ9RoU3oWPhufKiCcFEfchvYumtX7jd/logo.png", - "tags": ["wrapped-sollet", "ethereum"], - "extensions": { - "bridgeContract": "https://etherscan.io/address/0xeae57ce9cc1984f202e15e038b964bb8bdf7229a", - "coingeckoId": "tomochain", - "serumV3Usdc": "8BdpjpSD5n3nk8DQLqPUyTZvVqFu6kcff5bzUX5dqDpy", - "serumV3Usdt": "GnKPri4thaGipzTbp8hhSGSrHgG4F8MFiZVrbRn16iG2", - "waterfallbot": "https://t.me/TOMOwaterfall" - } - }, - { - "chainId": 101, - "address": "EcqExpGNFBve2i1cMJUTR4bPXj4ZoqmDD2rTkeCcaTFX", - "symbol": "soKARMA", - "name": "Wrapped KARMA (Sollet)", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EcqExpGNFBve2i1cMJUTR4bPXj4ZoqmDD2rTkeCcaTFX/logo.png", - "tags": ["wrapped-sollet", "ethereum"], - "extensions": { - "bridgeContract": "https://etherscan.io/address/0xeae57ce9cc1984f202e15e038b964bb8bdf7229a", - "coingeckoId": "karma-dao" - } - }, - { - "chainId": 101, - "address": "EqWCKXfs3x47uVosDpTRgFniThL9Y8iCztJaapxbEaVX", - "symbol": "soLUA", - "name": "Wrapped LUA (Sollet)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EqWCKXfs3x47uVosDpTRgFniThL9Y8iCztJaapxbEaVX/logo.png", - "tags": ["wrapped-sollet", "ethereum"], - "extensions": { - "bridgeContract": "https://etherscan.io/address/0xeae57ce9cc1984f202e15e038b964bb8bdf7229a", - "coingeckoId": "lua-token", - "serumV3Usdc": "4xyWjQ74Eifq17vbue5Ut9xfFNfuVB116tZLEpiZuAn8", - "serumV3Usdt": "35tV8UsHH8FnSAi3YFRrgCu4K9tb883wKnAXpnihot5r", - "waterfallbot": "https://t.me/LUAwaterfall" - } - }, - { - "chainId": 101, - "address": "GeDS162t9yGJuLEHPWXXGrb1zwkzinCgRwnT8vHYjKza", - "symbol": "soMATH", - "name": "Wrapped MATH (Sollet)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GeDS162t9yGJuLEHPWXXGrb1zwkzinCgRwnT8vHYjKza/logo.png", - "tags": ["wrapped-sollet", "ethereum"], - "extensions": { - "bridgeContract": "https://etherscan.io/address/0xeae57ce9cc1984f202e15e038b964bb8bdf7229a", - "coingeckoId": "math", - "serumV3Usdc": "J7cPYBrXVy8Qeki2crZkZavcojf2sMRyQU7nx438Mf8t", - "serumV3Usdt": "2WghiBkDL2yRhHdvm8CpprrkmfguuQGJTCDfPSudKBAZ" - } - }, - { - "chainId": 101, - "address": "GUohe4DJUA5FKPWo3joiPgsB7yzer7LpDmt1Vhzy3Zht", - "symbol": "soKEEP", - "name": "Wrapped KEEP (Sollet)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GUohe4DJUA5FKPWo3joiPgsB7yzer7LpDmt1Vhzy3Zht/logo.png", - "tags": ["wrapped-sollet", "ethereum"], - "extensions": { - "bridgeContract": "https://etherscan.io/address/0xeae57ce9cc1984f202e15e038b964bb8bdf7229a", - "coingeckoId": "keep-network", - "serumV3Usdc": "3rgacody9SvM88QR83GHaNdEEx4Fe2V2ed5GJp2oeKDr", - "serumV3Usdt": "HEGnaVL5i48ubPBqWAhodnZo8VsSLzEM3Gfc451DnFj9" - } - }, - { - "chainId": 101, - "address": "9F9fNTT6qwjsu4X4yWYKZpsbw5qT7o6yR2i57JF2jagy", - "symbol": "soSWAG", - "name": "Wrapped SWAG (Sollet)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9F9fNTT6qwjsu4X4yWYKZpsbw5qT7o6yR2i57JF2jagy/logo.png", - "tags": ["wrapped-sollet", "ethereum"], - "extensions": { - "bridgeContract": "https://etherscan.io/address/0xeae57ce9cc1984f202e15e038b964bb8bdf7229a", - "coingeckoId": "swag-finance", - "serumV3Usdt": "J2XSt77XWim5HwtUM8RUwQvmRXNZsbMKpp5GTKpHafvf" - } - }, - { - "chainId": 101, - "address": "DgHK9mfhMtUwwv54GChRrU54T2Em5cuszq2uMuen1ZVE", - "symbol": "soCEL", - "name": "Wrapped Celsius (Sollet)", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DgHK9mfhMtUwwv54GChRrU54T2Em5cuszq2uMuen1ZVE/logo.png", - "tags": ["wrapped-sollet", "ethereum"], - "extensions": { - "bridgeContract": "https://etherscan.io/address/0xeae57ce9cc1984f202e15e038b964bb8bdf7229a", - "coingeckoId": "celsius-degree-token", - "serumV3Usdt": "cgani53cMZgYfRMgSrNekJTMaLmccRfspsfTbXWRg7u" - } - }, - { - "chainId": 101, - "address": "7ncCLJpP3MNww17LW8bRvx8odQQnubNtfNZBL5BgAEHW", - "symbol": "soRSR", - "name": "Wrapped Reserve Rights (Sollet)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7ncCLJpP3MNww17LW8bRvx8odQQnubNtfNZBL5BgAEHW/logo.png", - "tags": ["wrapped-sollet", "ethereum"], - "extensions": { - "bridgeContract": "https://etherscan.io/address/0xeae57ce9cc1984f202e15e038b964bb8bdf7229a", - "coingeckoId": "reserve-rights-token", - "serumV3Usdt": "FcPet5fz9NLdbXwVM6kw2WTHzRAD7mT78UjwTpawd7hJ" - } - }, - { - "chainId": 101, - "address": "ChvvzHyRqCHnLVwMNz8amvQwgVLD8AELV7RgcFAxEhAf", - "symbol": "DRIFT", - "name": "DriftCoin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ChvvzHyRqCHnLVwMNz8amvQwgVLD8AELV7RgcFAxEhAf/logo.png", - "tags": ["social-token", "utility-token"], - "extensions": { - "discord": "https://discord.gg/stKm5E9SuF", - "telegram": "https://t.me/driftcoinorg", - "twitter": "https://twitter.com/driftcoinorg", - "website": "https://driftcoin.org" - } - }, - { - "chainId": 101, - "address": "GPF8ZZP6y1BkGAPLvmQCzkvVHvMUBko5e1pZzh8DD87Y", - "symbol": "BECH", - "name": "PrimeBech", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GPF8ZZP6y1BkGAPLvmQCzkvVHvMUBko5e1pZzh8DD87Y/logo.png", - "tags": ["community-token"], - "extensions": { - "twitter": "https://twitter.com/doesitxz", - "website": "https://www.primebech.app" - } - }, - { - "chainId": 101, - "address": "3yN3xNcXxbhkZYC6MXak1f7Ff29BZdGyc4GUQ1jbyt27", - "symbol": "FRO", - "name": "Fro", - "decimals": 9, - "logoURI": "https://www.frolicx0.de/public/assets/pngs/logo.png", - "extensions": { - "website": "https://www.frolic.live/" - } - }, - { - "chainId": 101, - "address": "5wihEYGca7X4gSe97C5mVcqNsfxBzhdTwpv72HKs25US", - "symbol": "so1INCH", - "name": "Wrapped 1INCH (Sollet)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5wihEYGca7X4gSe97C5mVcqNsfxBzhdTwpv72HKs25US/logo.png", - "tags": ["wrapped-sollet", "ethereum"], - "extensions": { - "bridgeContract": "https://etherscan.io/address/0xeae57ce9cc1984f202e15e038b964bb8bdf7229a", - "coingeckoId": "1inch" - } - }, - { - "chainId": 101, - "address": "38i2NQxjp5rt5B3KogqrxmBxgrAwaB3W1f1GmiKqh9MS", - "symbol": "soGRT", - "name": "Wrapped GRT (Sollet)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/38i2NQxjp5rt5B3KogqrxmBxgrAwaB3W1f1GmiKqh9MS/logo.png", - "tags": ["wrapped-sollet", "ethereum"], - "extensions": { - "bridgeContract": "https://etherscan.io/address/0xeae57ce9cc1984f202e15e038b964bb8bdf7229a", - "coingeckoId": "the-graph" - } - }, - { - "chainId": 101, - "address": "Avz2fmevhhu87WYtWQCFj9UjKRjF9Z9QWwN2ih9yF95G", - "symbol": "soCOMP", - "name": "Wrapped Compound (Sollet)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Avz2fmevhhu87WYtWQCFj9UjKRjF9Z9QWwN2ih9yF95G/logo.png", - "tags": ["wrapped-sollet", "ethereum"], - "extensions": { - "bridgeContract": "https://etherscan.io/address/0xeae57ce9cc1984f202e15e038b964bb8bdf7229a", - "coingeckoId": "compound-coin" - } - }, - { - "chainId": 101, - "address": "9wRD14AhdZ3qV8et3eBQVsrb3UoBZDUbJGyFckpTg8sj", - "symbol": "soPAXG", - "name": "Wrapped Paxos Gold (Sollet)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9wRD14AhdZ3qV8et3eBQVsrb3UoBZDUbJGyFckpTg8sj/logo.png", - "tags": ["wrapped-sollet", "ethereum"], - "extensions": { - "bridgeContract": "https://etherscan.io/address/0xeae57ce9cc1984f202e15e038b964bb8bdf7229a", - "coingeckoId": "pax-gold" - } - }, - { - "chainId": 101, - "address": "AByXcTZwJHMtrKrvVsh9eFNB1pJaLDjCUR2ayvxBAAM2", - "symbol": "soSTRONG", - "name": "Wrapped Strong (Sollet)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AByXcTZwJHMtrKrvVsh9eFNB1pJaLDjCUR2ayvxBAAM2/logo.png", - "tags": ["wrapped-sollet", "ethereum"], - "extensions": { - "bridgeContract": "https://etherscan.io/address/0xeae57ce9cc1984f202e15e038b964bb8bdf7229a", - "coingeckoId": "strong" - } - }, - { - "chainId": 101, - "address": "EchesyfXePKdLtoiZSL8pBe8Myagyy8ZRqsACNCFGnvp", - "symbol": "FIDA", - "name": "Bonfida", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EchesyfXePKdLtoiZSL8pBe8Myagyy8ZRqsACNCFGnvp/logo.svg", - "extensions": { - "coingeckoId": "bonfida", - "serumV3Usdc": "E14BKBhDWD4EuTkWj1ooZezesGxMW8LPCps4W5PuzZJo", - "serumV3Usdt": "EbV7pPpEvheLizuYX3gUCvWM8iySbSRAhu2mQ5Vz2Mxf", - "waterfallbot": "https://bit.ly/FIDAwaterfall", - "website": "https://bonfida.com/" - } - }, - { - "chainId": 101, - "address": "kinXdEcpDQeHPEuQnqmUgtYykqKGVFq6CeVX5iAHJq6", - "symbol": "KIN", - "name": "KIN", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/kinXdEcpDQeHPEuQnqmUgtYykqKGVFq6CeVX5iAHJq6/logo.png", - "extensions": { - "coingeckoId": "kin", - "serumV3Usdc": "Bn6NPyr6UzrFAwC4WmvPvDr2Vm8XSUnFykM2aQroedgn", - "serumV3Usdt": "4nCFQr8sahhhL4XJ7kngGFBmpkmyf3xLzemuMhn6mWTm", - "waterfallbot": "https://bit.ly/KINwaterfall" - } - }, - { - "chainId": 101, - "address": "MAPS41MDahZ9QdKXhVa4dWB9RuyfV4XqhyAZ8XcYepb", - "symbol": "MAPS", - "name": "MAPS", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/MAPS41MDahZ9QdKXhVa4dWB9RuyfV4XqhyAZ8XcYepb/logo.svg", - "extensions": { - "coingeckoId": "maps", - "serumV3Usdc": "3A8XQRWXC7BjLpgLDDBhQJLT5yPCzS16cGYRKHkKxvYo", - "serumV3Usdt": "7cknqHAuGpfVXPtFoJpFvUjJ8wkmyEfbFusmwMfNy3FE", - "website": "https://maps.me/" - } - }, - { - "chainId": 101, - "address": "z3dn17yLaGMKffVogeFHQ9zWVcXgqgf3PQnDsNs2g6M", - "symbol": "OXY", - "name": "Oxygen Protocol", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/z3dn17yLaGMKffVogeFHQ9zWVcXgqgf3PQnDsNs2g6M/logo.svg", - "extensions": { - "coingeckoId": "oxygen", - "serumV3Usdc": "GZ3WBFsqntmERPwumFEYgrX2B7J7G11MzNZAy7Hje27X", - "serumV3Usdt": "GKLev6UHeX1KSDCyo2bzyG6wqhByEzDBkmYTxEdmYJgB", - "waterfallbot": "https://bit.ly/OXYwaterfall", - "website": "https://www.oxygen.org/" - } - }, - { - "chainId": 101, - "address": "FtgGSFADXBtroxq8VCausXRr2of47QBf5AS1NtZCu4GD", - "symbol": "BRZ", - "name": "BRZ", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FtgGSFADXBtroxq8VCausXRr2of47QBf5AS1NtZCu4GD/logo.png", - "extensions": { - "coingeckoId": "brz", - "website": "https://brztoken.io/" - } - }, - { - "chainId": 101, - "address": "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB", - "symbol": "USDT", - "name": "USDT", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB/logo.svg", - "tags": ["stablecoin"], - "extensions": { - "coingeckoId": "tether", - "serumV3Usdc": "77quYg4MGneUdjgXCunt9GgM1usmrxKY31twEy3WHwcS", - "website": "https://tether.to/" - } - }, - { - "chainId": 101, - "address": "2oDxYGgTBmST4rc3yn1YtcSEck7ReDZ8wHWLqZAuNWXH", - "symbol": "wxMARK_v1", - "name": "Standard (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2oDxYGgTBmST4rc3yn1YtcSEck7ReDZ8wHWLqZAuNWXH/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x36b679bd64ed73dbfd88909cdcb892cb66bd4cbb", - "assetContract": "https://etherscan.io/address/0x36b679bd64ed73dbfd88909cdcb892cb66bd4cbb", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "xmark", - "website": "https://benchmarkprotocol.finance/" - } - }, - { - "chainId": 101, - "address": "4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R", - "symbol": "RAY", - "name": "Raydium", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R/logo.png", - "extensions": { - "coingeckoId": "raydium", - "serumV3Usdc": "2xiv8A5xrJ7RnGdxXB42uFEkYHJjszEhaJyKKt4WaLep", - "serumV3Usdt": "teE55QrL4a4QSfydR9dnHF97jgCfptpuigbb53Lo95g", - "waterfallbot": "https://bit.ly/RAYwaterfall", - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "CzPDyvotTcxNqtPne32yUiEVQ6jk42HZi1Y3hUu7qf7f", - "symbol": "RAY-WUSDT", - "name": "Raydium Legacy LP Token V2 (RAY-WUSDT)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CzPDyvotTcxNqtPne32yUiEVQ6jk42HZi1Y3hUu7qf7f/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "134Cct3CSdRCbYgq5SkwmHgfwjJ7EM5cG9PzqffWqECx", - "symbol": "RAY-SOL", - "name": "Raydium Legacy LP Token V2 (RAY-SOL)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/134Cct3CSdRCbYgq5SkwmHgfwjJ7EM5cG9PzqffWqECx/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "EVDmwajM5U73PD34bYPugwiA4Eqqbrej4mLXXv15Z5qR", - "symbol": "LINK-WUSDT", - "name": "Raydium Legacy LP Token V2 (LINK-WUSDT)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EVDmwajM5U73PD34bYPugwiA4Eqqbrej4mLXXv15Z5qR/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "KY4XvwHy7JPzbWYAbk23jQvEb4qWJ8aCqYWREmk1Q7K", - "symbol": "ETH-WUSDT", - "name": "Raydium Legacy LP Token V2 (ETH-WUSDT)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/KY4XvwHy7JPzbWYAbk23jQvEb4qWJ8aCqYWREmk1Q7K/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "FgmBnsF5Qrnv8X9bomQfEtQTQjNNiBCWRKGpzPnE5BDg", - "symbol": "RAY-USDC", - "name": "Raydium Legacy LP Token V2 (RAY-USDC)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FgmBnsF5Qrnv8X9bomQfEtQTQjNNiBCWRKGpzPnE5BDg/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "5QXBMXuCL7zfAk39jEVVEvcrz1AvBGgT9wAhLLHLyyUJ", - "symbol": "RAY-SRM", - "name": "Raydium Legacy LP Token V2 (RAY-SRM)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5QXBMXuCL7zfAk39jEVVEvcrz1AvBGgT9wAhLLHLyyUJ/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "FdhKXYjCou2jQfgKWcNY7jb8F2DPLU1teTTTRfLBD2v1", - "symbol": "RAY-WUSDT", - "name": "Raydium Legacy LP Token V3 (RAY-WUSDT)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FdhKXYjCou2jQfgKWcNY7jb8F2DPLU1teTTTRfLBD2v1/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "BZFGfXMrjG2sS7QT2eiCDEevPFnkYYF7kzJpWfYxPbcx", - "symbol": "RAY-USDC", - "name": "Raydium Legacy LP Token V3 (RAY-USDC)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BZFGfXMrjG2sS7QT2eiCDEevPFnkYYF7kzJpWfYxPbcx/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "DSX5E21RE9FB9hM8Nh8xcXQfPK6SzRaJiywemHBSsfup", - "symbol": "RAY-SRM", - "name": "Raydium Legacy LP Token V3 (RAY-SRM)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DSX5E21RE9FB9hM8Nh8xcXQfPK6SzRaJiywemHBSsfup/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "F5PPQHGcznZ2FxD9JaxJMXaf7XkaFFJ6zzTBcW8osQjw", - "symbol": "RAY-SOL", - "name": "Raydium Legacy LP Token V3 (RAY-SOL)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/F5PPQHGcznZ2FxD9JaxJMXaf7XkaFFJ6zzTBcW8osQjw/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "8Q6MKy5Yxb9vG1mWzppMtMb2nrhNuCRNUkJTeiE3fuwD", - "symbol": "RAY-ETH", - "name": "Raydium Legacy LP Token V3 (RAY-ETH)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8Q6MKy5Yxb9vG1mWzppMtMb2nrhNuCRNUkJTeiE3fuwD/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "DsBuznXRTmzvEdb36Dx3aVLVo1XmH7r1PRZUFugLPTFv", - "symbol": "FIDA-RAY", - "name": "Raydium LP Token V4 (FIDA-RAY)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DsBuznXRTmzvEdb36Dx3aVLVo1XmH7r1PRZUFugLPTFv/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "FwaX9W7iThTZH5MFeasxdLpxTVxRcM7ZHieTCnYog8Yb", - "symbol": "OXY-RAY", - "name": "Raydium LP Token V4 (OXY-RAY)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FwaX9W7iThTZH5MFeasxdLpxTVxRcM7ZHieTCnYog8Yb/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "CcKK8srfVdTSsFGV3VLBb2YDbzF4T4NM2C3UEjC39RLP", - "symbol": "MAPS-RAY", - "name": "Raydium LP Token V4 (MAPS-RAY)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CcKK8srfVdTSsFGV3VLBb2YDbzF4T4NM2C3UEjC39RLP/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "CHT8sft3h3gpLYbCcZ9o27mT5s3Z6VifBVbUiDvprHPW", - "symbol": "KIN-RAY", - "name": "Raydium LP Token V4 (KIN-RAY)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CHT8sft3h3gpLYbCcZ9o27mT5s3Z6VifBVbUiDvprHPW/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "C3sT1R3nsw4AVdepvLTLKr5Gvszr7jufyBWUCvy4TUvT", - "symbol": "RAY-USDT", - "name": "Raydium LP Token V4 (RAY-USDT)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/C3sT1R3nsw4AVdepvLTLKr5Gvszr7jufyBWUCvy4TUvT/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "8HoQnePLqPj4M7PUDzfw8e3Ymdwgc7NLGnaTUapubyvu", - "symbol": "SOL-USDC", - "name": "Raydium LP Token V4 (SOL-USDC)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8HoQnePLqPj4M7PUDzfw8e3Ymdwgc7NLGnaTUapubyvu/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "865j7iMmRRycSYUXzJ33ZcvLiX9JHvaLidasCyUyKaRE", - "symbol": "YFI-USDC", - "name": "Raydium LP Token V4 (YFI-USDC)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/865j7iMmRRycSYUXzJ33ZcvLiX9JHvaLidasCyUyKaRE/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "9XnZd82j34KxNLgQfz29jGbYdxsYznTWRpvZE3SRE7JG", - "symbol": "SRM-USDC", - "name": "Raydium LP Token V4 (SRM-USDC)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9XnZd82j34KxNLgQfz29jGbYdxsYznTWRpvZE3SRE7JG/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "75dCoKfUHLUuZ4qEh46ovsxfgWhB4icc3SintzWRedT9", - "symbol": "FTT-USDC", - "name": "Raydium LP Token V4 (FTT-USDC)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/75dCoKfUHLUuZ4qEh46ovsxfgWhB4icc3SintzWRedT9/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "2hMdRdVWZqetQsaHG8kQjdZinEMBz75vsoWTCob1ijXu", - "symbol": "BTC-USDC", - "name": "Raydium LP Token V4 (BTC-USDC)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2hMdRdVWZqetQsaHG8kQjdZinEMBz75vsoWTCob1ijXu/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "2QVjeR9d2PbSf8em8NE8zWd8RYHjFtucDUdDgdbDD2h2", - "symbol": "SUSHI-USDC", - "name": "Raydium LP Token V4 (SUSHI-USDC)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2QVjeR9d2PbSf8em8NE8zWd8RYHjFtucDUdDgdbDD2h2/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "CHyUpQFeW456zcr5XEh4RZiibH8Dzocs6Wbgz9aWpXnQ", - "symbol": "TOMO-USDC", - "name": "Raydium LP Token V4 (TOMO-USDC)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CHyUpQFeW456zcr5XEh4RZiibH8Dzocs6Wbgz9aWpXnQ/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "BqjoYjqKrXtfBKXeaWeAT5sYCy7wsAYf3XjgDWsHSBRs", - "symbol": "LINK-USDC", - "name": "Raydium LP Token V4 (LINK-USDC)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BqjoYjqKrXtfBKXeaWeAT5sYCy7wsAYf3XjgDWsHSBRs/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "13PoKid6cZop4sj2GfoBeujnGfthUbTERdE5tpLCDLEY", - "symbol": "ETH-USDC", - "name": "Raydium LP Token V4 (ETH-USDC)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/13PoKid6cZop4sj2GfoBeujnGfthUbTERdE5tpLCDLEY/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "2Vyyeuyd15Gp8aH6uKE72c4hxc8TVSLibxDP9vzspQWG", - "symbol": "COPE-USDC", - "name": "Raydium LP Token V4 (COPE-USDC)", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Vyyeuyd15Gp8aH6uKE72c4hxc8TVSLibxDP9vzspQWG/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "Epm4KfTj4DMrvqn6Bwg2Tr2N8vhQuNbuK8bESFp4k33K", - "symbol": "SOL-USDT", - "name": "Raydium LP Token V4 (SOL-USDT)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Epm4KfTj4DMrvqn6Bwg2Tr2N8vhQuNbuK8bESFp4k33K/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "FA1i7fej1pAbQbnY8NbyYUsTrWcasTyipKreDgy1Mgku", - "symbol": "YFI-USDT", - "name": "Raydium LP Token V4 (YFI-USDT)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FA1i7fej1pAbQbnY8NbyYUsTrWcasTyipKreDgy1Mgku/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "HYSAu42BFejBS77jZAZdNAWa3iVcbSRJSzp3wtqCbWwv", - "symbol": "SRM-USDT", - "name": "Raydium LP Token V4 (SRM-USDT)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HYSAu42BFejBS77jZAZdNAWa3iVcbSRJSzp3wtqCbWwv/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "2cTCiUnect5Lap2sk19xLby7aajNDYseFhC9Pigou11z", - "symbol": "FTT-USDT", - "name": "Raydium LP Token V4 (FTT-USDT)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2cTCiUnect5Lap2sk19xLby7aajNDYseFhC9Pigou11z/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "DgGuvR9GSHimopo3Gc7gfkbKamLKrdyzWkq5yqA6LqYS", - "symbol": "BTC-USDT", - "name": "Raydium LP Token V4 (BTC-USDT)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DgGuvR9GSHimopo3Gc7gfkbKamLKrdyzWkq5yqA6LqYS/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "Ba26poEYDy6P2o95AJUsewXgZ8DM9BCsmnU9hmC9i4Ki", - "symbol": "SUSHI-USDT", - "name": "Raydium LP Token V4 (SUSHI-USDT)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Ba26poEYDy6P2o95AJUsewXgZ8DM9BCsmnU9hmC9i4Ki/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "D3iGro1vn6PWJXo9QAPj3dfta6dKkHHnmiiym2EfsAmi", - "symbol": "TOMO-USDT", - "name": "Raydium LP Token V4 (TOMO-USDT)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/D3iGro1vn6PWJXo9QAPj3dfta6dKkHHnmiiym2EfsAmi/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "Dr12Sgt9gkY8WU5tRkgZf1TkVWJbvjYuPAhR3aDCwiiX", - "symbol": "LINK-USDT", - "name": "Raydium LP Token V4 (LINK-USDT)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Dr12Sgt9gkY8WU5tRkgZf1TkVWJbvjYuPAhR3aDCwiiX/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "nPrB78ETY8661fUgohpuVusNCZnedYCgghzRJzxWnVb", - "symbol": "ETH-USDT", - "name": "Raydium LP Token V4 (ETH-USDT)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/nPrB78ETY8661fUgohpuVusNCZnedYCgghzRJzxWnVb/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "EGJht91R7dKpCj8wzALkjmNdUUUcQgodqWCYweyKcRcV", - "symbol": "YFI-SRM", - "name": "Raydium LP Token V4 (YFI-SRM)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EGJht91R7dKpCj8wzALkjmNdUUUcQgodqWCYweyKcRcV/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "AsDuPg9MgPtt3jfoyctUCUgsvwqAN6RZPftqoeiPDefM", - "symbol": "FTT-SRM", - "name": "Raydium LP Token V4 (FTT-SRM)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AsDuPg9MgPtt3jfoyctUCUgsvwqAN6RZPftqoeiPDefM/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "AGHQxXb3GSzeiLTcLtXMS2D5GGDZxsB2fZYZxSB5weqB", - "symbol": "BTC-SRM", - "name": "Raydium LP Token V4 (BTC-SRM)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AGHQxXb3GSzeiLTcLtXMS2D5GGDZxsB2fZYZxSB5weqB/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "3HYhUnUdV67j1vn8fu7ExuVGy5dJozHEyWvqEstDbWwE", - "symbol": "SUSHI-SRM", - "name": "Raydium LP Token V4 (SUSHI-SRM)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3HYhUnUdV67j1vn8fu7ExuVGy5dJozHEyWvqEstDbWwE/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "GgH9RnKrQpaMQeqmdbMvs5oo1A24hERQ9wuY2pSkeG7x", - "symbol": "TOMO-SRM", - "name": "Raydium LP Token V4 (TOMO-SRM)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GgH9RnKrQpaMQeqmdbMvs5oo1A24hERQ9wuY2pSkeG7x/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "GXN6yJv12o18skTmJXaeFXZVY1iqR18CHsmCT8VVCmDD", - "symbol": "LINK-SRM", - "name": "Raydium LP Token V4 (LINK-SRM)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GXN6yJv12o18skTmJXaeFXZVY1iqR18CHsmCT8VVCmDD/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "9VoY3VERETuc2FoadMSYYizF26mJinY514ZpEzkHMtwG", - "symbol": "ETH-SRM", - "name": "Raydium LP Token V4 (ETH-SRM)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9VoY3VERETuc2FoadMSYYizF26mJinY514ZpEzkHMtwG/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "AKJHspCwDhABucCxNLXUSfEzb7Ny62RqFtC9uNjJi4fq", - "symbol": "SRM-SOL", - "name": "Raydium LP Token V4 (SRM-SOL)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AKJHspCwDhABucCxNLXUSfEzb7Ny62RqFtC9uNjJi4fq/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "2doeZGLJyACtaG9DCUyqMLtswesfje1hjNA11hMdj6YU", - "symbol": "TULIP-USDC", - "name": "Raydium LP Token V4 (TULIP-USDC)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2doeZGLJyACtaG9DCUyqMLtswesfje1hjNA11hMdj6YU/logo.svg", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "AcstFzGGawvvdVhYV9bftr7fmBHbePUjhv53YK1W3dZo", - "symbol": "LSD", - "name": "LSD", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AcstFzGGawvvdVhYV9bftr7fmBHbePUjhv53YK1W3dZo/logo.svg", - "tags": ["nft"], - "extensions": { - "website": "https://solible.com/" - } - }, - { - "chainId": 101, - "address": "91fSFQsPzMLat9DHwLdQacW3i3EGnWds5tA5mt7yLiT9", - "symbol": "Unlimited Energy", - "name": "Unlimited Energy", - "decimals": 9, - "logoURI": "", - "tags": ["nft"], - "extensions": { - "website": "https://solible.com/" - } - }, - { - "chainId": 101, - "address": "29PEpZeuqWf9tS2gwCjpeXNdXLkaZSMR2s1ibkvGsfnP", - "symbol": "Need for Speed", - "name": "Need for Speed", - "decimals": 9, - "logoURI": "", - "tags": ["nft"], - "extensions": { - "website": "https://solible.com/" - } - }, - { - "chainId": 101, - "address": "HsY8PNar8VExU335ZRYzg89fX7qa4upYu6vPMPFyCDdK", - "symbol": "ADOR OPENS", - "name": "ADOR OPENS", - "decimals": 0, - "logoURI": "", - "tags": ["nft"], - "extensions": { - "website": "https://solible.com/" - } - }, - { - "chainId": 101, - "address": "EDP8TpLJ77M3KiDgFkZW4v4mhmKJHZi9gehYXenfFZuL", - "symbol": "CMS - Rare", - "name": "CMS - Rare", - "decimals": 0, - "logoURI": "", - "tags": ["nft"], - "extensions": { - "website": "https://solible.com/" - } - }, - { - "chainId": 101, - "address": "BrUKFwAABkExb1xzYU4NkRWzjBihVQdZ3PBz4m5S8if3", - "symbol": "Tesla", - "name": "Tesla", - "decimals": 0, - "logoURI": "", - "tags": ["nft"], - "extensions": { - "website": "https://solible.com/" - } - }, - { - "chainId": 101, - "address": "9CmQwpvVXRyixjiE3LrbSyyopPZohNDN1RZiTk8rnXsQ", - "symbol": "DeceFi", - "name": "DeceFi", - "decimals": 0, - "logoURI": "", - "tags": ["nft"], - "extensions": { - "website": "https://solible.com/" - } - }, - { - "chainId": 101, - "address": "F6ST1wWkx2PeH45sKmRxo1boyuzzWCfpnvyKL4BGeLxF", - "symbol": "Power User", - "name": "Power User", - "decimals": 0, - "logoURI": "", - "tags": ["nft"], - "extensions": { - "website": "https://solible.com/" - } - }, - { - "chainId": 101, - "address": "dZytJ7iPDcCu9mKe3srL7bpUeaR3zzkcVqbtqsmxtXZ", - "symbol": "VIP Member", - "name": "VIP Member", - "decimals": 0, - "logoURI": "", - "tags": ["nft"], - "extensions": { - "website": "https://solible.com/" - } - }, - { - "chainId": 101, - "address": "8T4vXgwZUWwsbCDiptHFHjdfexvLG9UP8oy1psJWEQdS", - "symbol": "Uni Christmas", - "name": "Uni Christmas", - "decimals": 0, - "logoURI": "", - "tags": ["nft"], - "extensions": { - "website": "https://solible.com/" - } - }, - { - "chainId": 101, - "address": "EjFGGJSyp9UDS8aqafET5LX49nsG326MeNezYzpiwgpQ", - "symbol": "BNB", - "name": "BNB", - "decimals": 0, - "logoURI": "", - "tags": ["nft"], - "extensions": { - "website": "https://solible.com/" - } - }, - { - "chainId": 101, - "address": "FkmkTr4en8CXkfo9jAwEMov6PVNLpYMzWr3Udqf9so8Z", - "symbol": "Seldom", - "name": "Seldom", - "decimals": 9, - "logoURI": "", - "tags": ["nft"], - "extensions": { - "website": "https://solible.com/" - } - }, - { - "chainId": 101, - "address": "2gn1PJdMAU92SU5inLSp4Xp16ZC5iLF6ScEi7UBvp8ZD", - "symbol": "Satoshi Closeup", - "name": "Satoshi Closeup", - "decimals": 9, - "logoURI": "", - "tags": ["nft"], - "extensions": { - "website": "https://solible.com/" - } - }, - { - "chainId": 101, - "address": "7mhZHtPL4GFkquQR4Y6h34Q8hNkQvGc1FaNtyE43NvUR", - "symbol": "Satoshi GB", - "name": "Satoshi GB", - "decimals": 9, - "logoURI": "", - "tags": ["nft"], - "extensions": { - "website": "https://solible.com/" - } - }, - { - "chainId": 101, - "address": "8RoKfLx5RCscbtVh8kYb81TF7ngFJ38RPomXtUREKsT2", - "symbol": "Satoshi OG", - "name": "Satoshi OG", - "decimals": 9, - "logoURI": "", - "tags": ["nft"], - "extensions": { - "website": "https://solible.com/" - } - }, - { - "chainId": 101, - "address": "9rw5hyDngBQ3yDsCRHqgzGHERpU2zaLh1BXBUjree48J", - "symbol": "Satoshi BTC", - "name": "Satoshi BTC", - "decimals": 9, - "logoURI": "", - "tags": ["nft"], - "extensions": { - "website": "https://solible.com/" - } - }, - { - "chainId": 101, - "address": "AiD7J6D5Hny5DJB1MrYBc2ePQqy2Yh4NoxWwYfR7PzxH", - "symbol": "Satoshi GB", - "name": "Satoshi GB", - "decimals": 9, - "logoURI": "", - "tags": ["nft"], - "extensions": { - "website": "https://solible.com/" - } - }, - { - "chainId": 101, - "address": "4qzEcYvT6TuJME2EMZ5vjaLvQja6R4hKjarA73WQUwt6", - "symbol": "APESZN_HOODIE", - "name": "APESZN_HOODIE", - "decimals": 0, - "logoURI": "", - "tags": ["nft"], - "extensions": { - "website": "https://solible.com/" - } - }, - { - "chainId": 101, - "address": "APhyVWtzjdTVYhyta9ngSiCDk2pLi8eEZKsHGSbsmwv6", - "symbol": "APESZN_TEE_SHIRT", - "name": "APESZN_TEE_SHIRT", - "decimals": 0, - "logoURI": "", - "tags": ["nft"], - "extensions": { - "website": "https://solible.com/" - } - }, - { - "chainId": 101, - "address": "bxiA13fpU1utDmYuUvxvyMT8odew5FEm96MRv7ij3eb", - "symbol": "Satoshi", - "name": "Satoshi", - "decimals": 9, - "logoURI": "", - "tags": ["nft"], - "extensions": { - "website": "https://solible.com/" - } - }, - { - "chainId": 101, - "address": "GoC24kpj6TkvjzspXrjSJC2CVb5zMWhLyRcHJh9yKjRF", - "symbol": "Satoshi Closeup", - "name": "Satoshi Closeup", - "decimals": 9, - "logoURI": "", - "tags": ["nft"], - "extensions": { - "website": "https://solible.com/" - } - }, - { - "chainId": 101, - "address": "oCUduD44ETuZ65bpWdPzPDSnAdreg1sJrugfwyFZVHV", - "symbol": "Satoshi BTC", - "name": "Satoshi BTC", - "decimals": 9, - "logoURI": "", - "tags": ["nft"], - "extensions": { - "website": "https://solible.com/" - } - }, - { - "chainId": 101, - "address": "9Vvre2DxBB9onibwYDHeMsY1cj6BDKtEDccBPWRN215E", - "symbol": "Satoshi Nakamoto", - "name": "Satoshi Nakamoto", - "decimals": 9, - "logoURI": "", - "tags": ["nft"], - "extensions": { - "website": "https://solible.com/" - } - }, - { - "chainId": 101, - "address": "7RpFk44cMTAUt9CcjEMWnZMypE9bYQsjBiSNLn5qBvhP", - "symbol": "Charles Hoskinson", - "name": "Charles Hoskinson", - "decimals": 9, - "logoURI": "", - "tags": ["nft"], - "extensions": { - "website": "https://solible.com/" - } - }, - { - "chainId": 101, - "address": "GyRkPAxpd9XrMHcBF6fYHVRSZQvQBwAGKAGQeBPSKzMq", - "symbol": "SBF", - "name": "SBF", - "decimals": 0, - "logoURI": "", - "tags": ["nft"], - "extensions": { - "website": "https://solible.com/" - } - }, - { - "chainId": 101, - "address": "AgdBQN2Sy2abiZ2KToWeUsQ9PHdCv95wt6kVWRf5zDkx", - "symbol": "Bitcoin Tram", - "name": "Bitcoin Tram", - "decimals": 0, - "logoURI": "", - "tags": ["nft"], - "extensions": { - "website": "https://solible.com/" - } - }, - { - "chainId": 101, - "address": "7TRzvCqXN8KSXggbSyeEG2Z9YBBhEFmbtmv6FLbd4mmd", - "symbol": "SRM tee-shirt", - "name": "SRM tee-shirt", - "decimals": 0, - "logoURI": "", - "tags": ["nft"], - "extensions": { - "website": "https://solible.com/" - } - }, - { - "chainId": 101, - "address": "gksYzxitEf2HyE7Bb81vvHXNH5f3wa43jvXf4TcUZwb", - "symbol": "PERK", - "name": "PERK", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/gksYzxitEf2HyE7Bb81vvHXNH5f3wa43jvXf4TcUZwb/logo.png", - "extensions": { - "twitter": "https://twitter.com/PerkExchange", - "website": "https://perk.exchange/" - } - }, - { - "chainId": 101, - "address": "BDxWSxkMLW1nJ3VggamUKkEKrtCaVqzFxoDApM8HdBks", - "symbol": "BTSG", - "name": "BitSong", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BDxWSxkMLW1nJ3VggamUKkEKrtCaVqzFxoDApM8HdBks/logo.png", - "extensions": { - "coingeckoId": "bitsong", - "website": "https://bitsong.io/" - } - }, - { - "chainId": 101, - "address": "5ddiFxh3J2tcZHfn8uhGRYqu16P3FUvBfh8WoZPUHKW5", - "symbol": "EOSBEAR", - "name": "EOSBEAR", - "decimals": 6, - "logoURI": "", - "tags": ["leveraged", "bear"], - "extensions": { - "coingeckoId": "3x-short-eos-token", - "serumV3Usdc": "2BQrJP599QVKRyHhyJ6oRrTPNUmPBgXxiBo2duvYdacy" - } - }, - { - "chainId": 101, - "address": "qxxF6S62hmZF5bo46mS7C2qbBa87qRossAM78VzsDqi", - "symbol": "EOSBULL", - "name": "EOSBULL", - "decimals": 6, - "logoURI": "", - "tags": ["leveraged", "bull"], - "extensions": { - "coingeckoId": "3x-long-eos-token" - } - }, - { - "chainId": 101, - "address": "2CDLbxeuqkLTLY3em6FFQgfBQV5LRnEsJJgcFCvWKNcS", - "symbol": "BNBBEAR", - "name": "BNBBEAR", - "decimals": 6, - "logoURI": "", - "tags": ["leveraged", "bear"], - "extensions": { - "coingeckoId": "3x-short-bnb-token" - } - }, - { - "chainId": 101, - "address": "AfjHjdLibuXyvmz7PyTSc5KEcGBh43Kcu8Sr2tyDaJyt", - "symbol": "BNBBULL", - "name": "BNBBULL", - "decimals": 6, - "logoURI": "", - "tags": ["leveraged", "bull"], - "extensions": { - "coingeckoId": "3x-long-bnb-token" - } - }, - { - "chainId": 101, - "address": "8kA1WJKoLTxtACNPkvW6UNufsrpxUY57tXZ9KmG9123t", - "symbol": "BSVBULL", - "name": "BSVBULL", - "decimals": 6, - "logoURI": "", - "tags": ["leveraged", "bull"], - "extensions": { - "coingeckoId": "3x-long-bitcoin-sv-token" - } - }, - { - "chainId": 101, - "address": "2FGW8BVMu1EHsz2ZS9rZummDaq6o2DVrZZPw4KaAvDWh", - "symbol": "BSVBEAR", - "name": "BSVBEAR", - "decimals": 6, - "logoURI": "", - "tags": ["leveraged", "bear"], - "extensions": { - "coingeckoId": "3x-short-bitcoin-sv-token" - } - }, - { - "chainId": 101, - "address": "8L9XGTMzcqS9p61zsR35t7qipwAXMYkD6disWoDFZiFT", - "symbol": "LTCBEAR", - "name": "LTCBEAR", - "decimals": 6, - "logoURI": "", - "tags": ["leveraged", "bear"], - "extensions": { - "coingeckoId": "3x-short-litecoin-token" - } - }, - { - "chainId": 101, - "address": "863ZRjf1J8AaVuCqypAdm5ktVyGYDiBTvD1MNHKrwyjp", - "symbol": "LTCBULL", - "name": "LTCBULL", - "decimals": 6, - "logoURI": "", - "tags": ["leveraged", "bull"], - "extensions": { - "coingeckoId": "3x-long-litecoin-token" - } - }, - { - "chainId": 101, - "address": "GkSPaHdY2raetuYzsJYacHtrAtQUfWt64bpd1VzxJgSD", - "symbol": "BULL", - "name": "BULL", - "decimals": 6, - "logoURI": "", - "tags": ["leveraged", "bull"], - "extensions": { - "coingeckoId": "3x-long-bitcoin-token" - } - }, - { - "chainId": 101, - "address": "45vwTZSDFBiqCMRdtK4xiLCHEov8LJRW8GwnofG8HYyH", - "symbol": "BEAR", - "name": "BEAR", - "decimals": 6, - "logoURI": "", - "tags": ["leveraged", "bear"], - "extensions": { - "coingeckoId": "3x-short-bitcoin-token" - } - }, - { - "chainId": 101, - "address": "2VTAVf1YCwamD3ALMdYHRMV5vPUCXdnatJH5f1khbmx6", - "symbol": "BCHBEAR", - "name": "BCHBEAR", - "decimals": 6, - "logoURI": "", - "tags": ["leveraged", "bear"], - "extensions": { - "coingeckoId": "3x-short-bitcoin-cash-token" - } - }, - { - "chainId": 101, - "address": "22xoSp66BDt4x4Q5xqxjaSnirdEyharoBziSFChkLFLy", - "symbol": "BCHBULL", - "name": "BCHBULL", - "decimals": 6, - "logoURI": "", - "tags": ["leveraged", "bull"], - "extensions": { - "coingeckoId": "3x-long-bitcoin-cash-token" - } - }, - { - "chainId": 101, - "address": "CwChm6p9Q3yFrjzVeiLTTbsoJkooscof5SJYZc2CrNqG", - "symbol": "ETHBULL", - "name": "ETHBULL", - "decimals": 6, - "logoURI": "", - "tags": ["leveraged", "bull"], - "extensions": { - "coingeckoId": "3x-long-ethereum-token", - "serumV3Usdt": "FuhKVt5YYCv7vXnADXtb7vqzYn82PJoap86q5wm8LX8Q" - } - }, - { - "chainId": 101, - "address": "Bvv9xLodFrvDFSno9Ud8SEh5zVtBDQQjnBty2SgMcJ2s", - "symbol": "ETHBEAR", - "name": "ETHBEAR", - "decimals": 6, - "logoURI": "", - "tags": ["leveraged", "bear"], - "extensions": { - "coingeckoId": "3x-short-ethereum-token" - } - }, - { - "chainId": 101, - "address": "HRhaNssoyv5tKFRcbPg69ULEbcD8DPv99GdXLcdkgc1A", - "symbol": "ALTBULL", - "name": "ALTBULL", - "decimals": 6, - "logoURI": "", - "tags": ["leveraged", "bull"], - "extensions": { - "coingeckoId": "3x-long-altcoin-index-token" - } - }, - { - "chainId": 101, - "address": "9Mu1KmjBKTUWgpDoeTJ5oD7XFQmEiZxzspEd3TZGkavx", - "symbol": "ALTBEAR", - "name": "ALTBEAR", - "decimals": 6, - "logoURI": "", - "tags": ["leveraged", "bear"], - "extensions": { - "coingeckoId": "3x-short-altcoin-index-token" - } - }, - { - "chainId": 101, - "address": "AYL1adismZ1U9pTuN33ahG4aYc5XTZQL4vKFx9ofsGWD", - "symbol": "BULLSHIT", - "name": "BULLSHIT", - "decimals": 6, - "logoURI": "", - "tags": ["leveraged", "bull"], - "extensions": { - "coingeckoId": "3x-long-shitcoin-index-token" - } - }, - { - "chainId": 101, - "address": "5jqymuoXXVcUuJKrf1MWiHSqHyg2osMaJGVy69NsJWyP", - "symbol": "BEARSHIT", - "name": "BEARSHIT", - "decimals": 6, - "logoURI": "", - "tags": ["leveraged", "bear"], - "extensions": { - "coingeckoId": "3x-short-shitcoin-index-token" - } - }, - { - "chainId": 101, - "address": "EL1aDTnLKjf4SaGpqtxJPyK94imSBr8fWDbcXjXQrsmj", - "symbol": "MIDBULL", - "name": "MIDBULL", - "decimals": 6, - "logoURI": "", - "tags": ["leveraged", "bull"], - "extensions": { - "coingeckoId": "3x-long-midcap-index-token", - "serumV3Usdc": "8BBtLkoaEyavREriwGUudzAcihTH9SJLAPBbgb7QZe9y" - } - }, - { - "chainId": 101, - "address": "2EPvVjHusU3ozoucmdhhnqv3HQtBsQmjTnSa87K91HkC", - "symbol": "MIDBEAR", - "name": "MIDBEAR", - "decimals": 6, - "logoURI": "", - "tags": ["leveraged", "bear"], - "extensions": { - "coingeckoId": "3x-short-midcap-index-token" - } - }, - { - "chainId": 101, - "address": "8TCfJTyeqNBZqyDMY4VwDY7kdCCY7pcbJJ58CnKHkMu2", - "symbol": "LINKBEAR", - "name": "LINKBEAR", - "decimals": 6, - "logoURI": "", - "tags": ["leveraged", "bear"], - "extensions": { - "coingeckoId": "3x-short-chainlink-token" - } - }, - { - "chainId": 101, - "address": "EsUoZMbACNMppdqdmuLCFLet8VXxt2h47N9jHCKwyaPz", - "symbol": "LINKBULL", - "name": "LINKBULL", - "decimals": 6, - "logoURI": "", - "tags": ["leveraged", "bull"], - "extensions": { - "coingeckoId": "3x-long-chainlink-token" - } - }, - { - "chainId": 101, - "address": "262cQHT3soHwzuo2oVSy5kAfHcFZ1Jjn8C1GRLcQNKA3", - "symbol": "XRPBULL", - "name": "XRPBULL", - "decimals": 6, - "logoURI": "", - "tags": ["leveraged", "bull"], - "extensions": { - "coingeckoId": "3x-long-xrp-token" - } - }, - { - "chainId": 101, - "address": "5AX3ZyDN1rpamEzHpLfsJ5t6TyNECKSwPRfnzVHVuRFj", - "symbol": "YUMZ", - "name": "Food tasting Social Token", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/yu-ming-chen/yumzToken/logo.JPG", - "tags": ["social-token", "yumz"] - }, - { - "chainId": 101, - "address": "8sxtSswmQ7Lcd2GjK6am37Z61wJZjA2SzE7Luf7yaKBB", - "symbol": "XRPBEAR", - "name": "XRPBEAR", - "decimals": 6, - "logoURI": "", - "tags": ["leveraged", "bear"], - "extensions": { - "coingeckoId": "3x-short-xrp-token" - } - }, - { - "chainId": 101, - "address": "91z91RukFM16hyEUCXuwMQwp2BW3vanNG5Jh5yj6auiJ", - "symbol": "BVOL", - "name": "BVOL", - "decimals": 6, - "logoURI": "", - "extensions": { - "coingeckoId": "1x-long-btc-implied-volatility-token" - } - }, - { - "chainId": 101, - "address": "5TY71D29Cyuk9UrsSxLXw2quJBpS7xDDFuFu2K9W7Wf9", - "symbol": "IBVOL", - "name": "IBlive", - "decimals": 6, - "logoURI": "", - "extensions": { - "coingeckoId": "1x-short-btc-implied-volatility" - } - }, - { - "chainId": 101, - "address": "dK83wTVypEpa1pqiBbHY3MNuUnT3ADUZM4wk9VZXZEc", - "symbol": "soAAVE", - "name": "Wrapped Aave (Sollet)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/dK83wTVypEpa1pqiBbHY3MNuUnT3ADUZM4wk9VZXZEc/logo.png", - "extensions": { - "coingeckoId": "aave", - "serumV3Usdt": "6bxuB5N3bt3qW8UnPNLgMMzDq5sEH8pFmYJYGgzvE11V" - } - }, - { - "chainId": 101, - "address": "A6aY2ceogBz1VaXBxm1j2eJuNZMRqrWUAnKecrMH85zj", - "symbol": "LQID", - "name": "LQID", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/A6aY2ceogBz1VaXBxm1j2eJuNZMRqrWUAnKecrMH85zj/logo.svg" - }, - { - "chainId": 101, - "address": "7CnFGR9mZWyAtWxPcVuTewpyC3A3MDW4nLsu5NY6PDbd", - "symbol": "SECO", - "name": "SECO", - "decimals": 6, - "logoURI": "", - "extensions": { - "coingeckoId": "serum-ecosystem-token" - } - }, - { - "chainId": 101, - "address": "3GECTP7H4Tww3w8jEPJCJtXUtXxiZty31S9szs84CcwQ", - "symbol": "HOLY", - "name": "HOLY", - "decimals": 6, - "logoURI": "", - "extensions": { - "coingeckoId": "holy-trinity" - } - }, - { - "chainId": 101, - "address": "6ry4WBDvAwAnrYJVv6MCog4J8zx6S3cPgSqnTsDZ73AR", - "symbol": "TRYB", - "name": "TRYB", - "decimals": 6, - "logoURI": "", - "extensions": { - "coingeckoId": "bilira", - "serumV3Usdt": "AADohBGxvf7bvixs2HKC3dG2RuU3xpZDwaTzYFJThM8U" - } - }, - { - "chainId": 101, - "address": "ASboaJPFtJeCS5eG4gL3Lg95xrTz2UZSLE9sdJtY93kE", - "symbol": "DOGEBULL", - "name": "DOGEBULL", - "decimals": 6, - "logoURI": "", - "tags": ["leveraged", "bull"], - "extensions": { - "coingeckoId": "3x-long-dogecoin-token" - } - }, - { - "chainId": 101, - "address": "Gnhy3boBT4MA8TTjGip5ND2uNsceh1Wgeaw1rYJo51ZY", - "symbol": "MAPSPOOL", - "name": "Bonfida Maps Pool", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Gnhy3boBT4MA8TTjGip5ND2uNsceh1Wgeaw1rYJo51ZY/logo.svg", - "extensions": { - "website": "https://bonfida.com/" - } - }, - { - "chainId": 101, - "address": "9iDWyYZ5VHBCxxmWZogoY3Z6FSbKsX4WFe37c728krdT", - "symbol": "OXYPOOL", - "name": "Bonfida Oxy Pool", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9iDWyYZ5VHBCxxmWZogoY3Z6FSbKsX4WFe37c728krdT/logo.svg", - "extensions": { - "website": "https://bonfida.com/" - } - }, - { - "chainId": 101, - "address": "D68NB5JkzvyNCZAvi6EGtEcGvSoRNPanU9heYTAUFFRa", - "symbol": "PERP", - "name": "PERP", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/D68NB5JkzvyNCZAvi6EGtEcGvSoRNPanU9heYTAUFFRa/logo.png", - "extensions": { - "coingeckoId": "perpetual-protocol" - } - }, - { - "chainId": 101, - "address": "4fiysjiegD8yoqHX75YXBvhBzmaUEQhyuAVRX8fGL3F1", - "symbol": "RAYPOOL", - "name": "Bonfida Ray Pool", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/93a1L7xaEV7vZGzNXCcb9ztZedbpKgUiTHYxmFKJwKvc/logo.png", - "extensions": { - "website": "https://bonfida.com/" - } - }, - { - "chainId": 101, - "address": "FeGn77dhg1KXRRFeSwwMiykZnZPw5JXW6naf2aQgZDQf", - "symbol": "wWETH_v1", - "name": "Wrapped Ether (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FeGn77dhg1KXRRFeSwwMiykZnZPw5JXW6naf2aQgZDQf/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", - "assetContract": "https://etherscan.io/address/0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "ethereum" - } - }, - { - "chainId": 101, - "address": "FeLoyXk8ac2AYVmDhAWEKNWWT63Z9TczeidYbpDvxF3T", - "symbol": "wCAPS_v1", - "name": "Wrapped Capsule Coin (Wormhole v1)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FeLoyXk8ac2AYVmDhAWEKNWWT63Z9TczeidYbpDvxF3T/logo.svg", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x03be5c903c727ee2c8c4e9bc0acc860cca4715e2", - "assetContract": "https://etherscan.io/address/0x03be5c903c727ee2c8c4e9bc0acc860cca4715e2", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "coin-capsule", - "website": "https://www.ternoa.com/en" - } - }, - { - "chainId": 101, - "address": "GbBWwtYTMPis4VHb8MrBbdibPhn28TSrLB53KvUmb7Gi", - "symbol": "wFTT_v1", - "name": "FTT (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GbBWwtYTMPis4VHb8MrBbdibPhn28TSrLB53KvUmb7Gi/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x50d1c9771902476076ecfc8b2a83ad6b9355a4c9", - "assetContract": "https://etherscan.io/address/0x50d1c9771902476076ecfc8b2a83ad6b9355a4c9", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "ftx-token" - } - }, - { - "chainId": 101, - "address": "AbLwQCyU9S8ycJgu8wn6woRCHSYJmjMpJFcAHQ6vjq2P", - "symbol": "wTUSD_v1", - "name": "TrueUSD (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AbLwQCyU9S8ycJgu8wn6woRCHSYJmjMpJFcAHQ6vjq2P/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x0000000000085d4780B73119b644AE5ecd22b376", - "assetContract": "https://etherscan.io/address/0x0000000000085d4780B73119b644AE5ecd22b376", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "true-usd" - } - }, - { - "chainId": 101, - "address": "3JfuyCg5891hCX1ZTbvt3pkiaww3XwgyqQH6E9eHtqKD", - "symbol": "wLON_v1", - "name": "Tokenlon (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3JfuyCg5891hCX1ZTbvt3pkiaww3XwgyqQH6E9eHtqKD/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x0000000000095413afC295d19EDeb1Ad7B71c952", - "assetContract": "https://etherscan.io/address/0x0000000000095413afC295d19EDeb1Ad7B71c952", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "tokenlon" - } - }, - { - "chainId": 101, - "address": "6k7mrqiAqEWnABVN8FhfuNUrmrnaMh44nNWydNXctbpV", - "symbol": "wALBT_v1", - "name": "AllianceBlock Token (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6k7mrqiAqEWnABVN8FhfuNUrmrnaMh44nNWydNXctbpV/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x00a8b738E453fFd858a7edf03bcCfe20412f0Eb0", - "assetContract": "https://etherscan.io/address/0x00a8b738E453fFd858a7edf03bcCfe20412f0Eb0", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "allianceblock" - } - }, - { - "chainId": 101, - "address": "4b166BQEQunjg8oNTDcLeWU3nidQnVTL1Vni8ANU7Mvt", - "symbol": "wSKL_v1", - "name": "SKALE (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4b166BQEQunjg8oNTDcLeWU3nidQnVTL1Vni8ANU7Mvt/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x00c83aeCC790e8a4453e5dD3B0B4b3680501a7A7", - "assetContract": "https://etherscan.io/address/0x00c83aeCC790e8a4453e5dD3B0B4b3680501a7A7", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "skale" - } - }, - { - "chainId": 101, - "address": "CcHhpEx9VcWx7UBJC8DJaR5h3wNdexsQtB1nEfekjSHn", - "symbol": "wUFT_v1", - "name": "UniLend Finance Token (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CcHhpEx9VcWx7UBJC8DJaR5h3wNdexsQtB1nEfekjSHn/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x0202Be363B8a4820f3F4DE7FaF5224fF05943AB1", - "assetContract": "https://etherscan.io/address/0x0202Be363B8a4820f3F4DE7FaF5224fF05943AB1", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "unlend-finance" - } - }, - { - "chainId": 101, - "address": "VPjCJkR1uZGT9k9q7PsLArS5sEQtWgij8eZC8tysCy7", - "symbol": "wORN_v1", - "name": "Orion Protocol (Wormhole v1)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/VPjCJkR1uZGT9k9q7PsLArS5sEQtWgij8eZC8tysCy7/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x0258F474786DdFd37ABCE6df6BBb1Dd5dfC4434a", - "assetContract": "https://etherscan.io/address/0x0258F474786DdFd37ABCE6df6BBb1Dd5dfC4434a", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "orion-protocol" - } - }, - { - "chainId": 101, - "address": "CxzHZtzrm6bAz6iFCAGgCYCd3iQb5guUD7oQXKxdgk5c", - "symbol": "wSRK_v1", - "name": "SparkPoint (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CxzHZtzrm6bAz6iFCAGgCYCd3iQb5guUD7oQXKxdgk5c/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x0488401c3F535193Fa8Df029d9fFe615A06E74E6", - "assetContract": "https://etherscan.io/address/0x0488401c3F535193Fa8Df029d9fFe615A06E74E6", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "sparkpoint" - } - }, - { - "chainId": 101, - "address": "FqMZWvmii4NNzhLBKGzkvGj3e3XTxNVDNSKDJnt9fVQV", - "symbol": "wUMA_v1", - "name": "UMA Voting Token v1 (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FqMZWvmii4NNzhLBKGzkvGj3e3XTxNVDNSKDJnt9fVQV/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x04Fa0d235C4abf4BcF4787aF4CF447DE572eF828", - "assetContract": "https://etherscan.io/address/0x04Fa0d235C4abf4BcF4787aF4CF447DE572eF828", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "uma" - } - }, - { - "chainId": 101, - "address": "6GGNzF99kCG1ozQbP7M7EYW9zPbQGPMwTCCi2Dqx3qhU", - "symbol": "wSkey_v1", - "name": "SmartKey (Wormhole v1)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6GGNzF99kCG1ozQbP7M7EYW9zPbQGPMwTCCi2Dqx3qhU/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x06A01a4d579479Dd5D884EBf61A31727A3d8D442", - "assetContract": "https://etherscan.io/address/0x06A01a4d579479Dd5D884EBf61A31727A3d8D442", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "smartkey" - } - }, - { - "chainId": 101, - "address": "Gc9rR2dUHfuYCJ8rU1Ye9fr8JoZZt9ZrfmXitQRLsxRW", - "symbol": "wMIR_v1", - "name": "Wrapped MIR Token (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Gc9rR2dUHfuYCJ8rU1Ye9fr8JoZZt9ZrfmXitQRLsxRW/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x09a3EcAFa817268f77BE1283176B946C4ff2E608", - "assetContract": "https://etherscan.io/address/0x09a3EcAFa817268f77BE1283176B946C4ff2E608", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "mirror-protocol" - } - }, - { - "chainId": 101, - "address": "B8xDqdrHpYLNHQKQ4ARDKurxhkhn2gfZa8WRosCEzXnF", - "symbol": "wGRO_v1", - "name": "Growth (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/B8xDqdrHpYLNHQKQ4ARDKurxhkhn2gfZa8WRosCEzXnF/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x09e64c2B61a5f1690Ee6fbeD9baf5D6990F8dFd0", - "assetContract": "https://etherscan.io/address/0x09e64c2B61a5f1690Ee6fbeD9baf5D6990F8dFd0", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "growth-defi" - } - }, - { - "chainId": 101, - "address": "GE1X8ef7fcsJ93THx4CvV7BQsdEyEAyk61s2L5YfSXiL", - "symbol": "wSTAKE_v1", - "name": "xDai (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GE1X8ef7fcsJ93THx4CvV7BQsdEyEAyk61s2L5YfSXiL/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x0Ae055097C6d159879521C384F1D2123D1f195e6", - "assetContract": "https://etherscan.io/address/0x0Ae055097C6d159879521C384F1D2123D1f195e6", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "xdai-stake" - } - }, - { - "chainId": 101, - "address": "7TK6QeyTsnTT6KsnK2tHHfh62mbjNuFWoyUc8vo3CmmU", - "symbol": "wYFI_v1", - "name": "yearn.finance (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7TK6QeyTsnTT6KsnK2tHHfh62mbjNuFWoyUc8vo3CmmU/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x0bc529c00C6401aEF6D220BE8C6Ea1667F6Ad93e", - "assetContract": "https://etherscan.io/address/0x0bc529c00C6401aEF6D220BE8C6Ea1667F6Ad93e", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "yearn-finance" - } - }, - { - "chainId": 101, - "address": "CTtKth9uW7froBA6xCd2MP7BXjGFESdT1SyxUmbHovSw", - "symbol": "wBAT_v1", - "name": "Basic Attention Token (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CTtKth9uW7froBA6xCd2MP7BXjGFESdT1SyxUmbHovSw/logo.png", - "tags": ["wrapped", "wormhole-v1"], - "extensions": { - "address": "0x0D8775F648430679A709E98d2b0Cb6250d2887EF", - "assetContract": "https://etherscan.io/address/0x0D8775F648430679A709E98d2b0Cb6250d2887EF", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "basic-attention-token" - } - }, - { - "chainId": 101, - "address": "EPeUFDgHRxs9xxEPVaL6kfGQvCon7jmAWKVUHuux1Tpz", - "symbol": "BAT", - "name": "Basic Attention Token (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EPeUFDgHRxs9xxEPVaL6kfGQvCon7jmAWKVUHuux1Tpz/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x0D8775F648430679A709E98d2b0Cb6250d2887EF", - "assetContract": "https://etherscan.io/address/0x0D8775F648430679A709E98d2b0Cb6250d2887EF", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "basic-attention-token" - } - }, - { - "chainId": 101, - "address": "DrL2D4qCRCeNkQz3AJikLjBc3cS6fqqcQ3W7T9vbshCu", - "symbol": "wMANA_v1", - "name": "Decentraland MANA (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DrL2D4qCRCeNkQz3AJikLjBc3cS6fqqcQ3W7T9vbshCu/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x0F5D2fB29fb7d3CFeE444a200298f468908cC942", - "assetContract": "https://etherscan.io/address/0x0F5D2fB29fb7d3CFeE444a200298f468908cC942", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "decentraland" - } - }, - { - "chainId": 101, - "address": "3cJKTW69FQDDCud7AhKHXZg126b3t73a2qVcVBS1BWjL", - "symbol": "wXIO_v1", - "name": "XIO Network (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3cJKTW69FQDDCud7AhKHXZg126b3t73a2qVcVBS1BWjL/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x0f7F961648aE6Db43C75663aC7E5414Eb79b5704", - "assetContract": "https://etherscan.io/address/0x0f7F961648aE6Db43C75663aC7E5414Eb79b5704", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "xio" - } - }, - { - "chainId": 101, - "address": "CQivbzuRQLvZbqefKc5gLzhSzZzAaySAdMmTG7pFn41w", - "symbol": "wLAYER_v1", - "name": "Unilayer (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CQivbzuRQLvZbqefKc5gLzhSzZzAaySAdMmTG7pFn41w/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x0fF6ffcFDa92c53F615a4A75D982f399C989366b", - "assetContract": "https://etherscan.io/address/0x0fF6ffcFDa92c53F615a4A75D982f399C989366b", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "unilayer" - } - }, - { - "chainId": 101, - "address": "8F3kZd9XEpFgNZ4fZnEAC5CJZLewnkNE8QCjdvorGWuW", - "symbol": "w1INCH_v1", - "name": "1INCH Token (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8F3kZd9XEpFgNZ4fZnEAC5CJZLewnkNE8QCjdvorGWuW/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x111111111117dC0aa78b770fA6A738034120C302", - "assetContract": "https://etherscan.io/address/0x111111111117dC0aa78b770fA6A738034120C302", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "1inch" - } - }, - { - "chainId": 101, - "address": "AjkPkq3nsyDe1yKcbyZT7N4aK4Evv9om9tzhQD3wsRC", - "symbol": "1INCH", - "name": "1INCH Token (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AjkPkq3nsyDe1yKcbyZT7N4aK4Evv9om9tzhQD3wsRC/logo.png", - "tags": ["wrapped", "ethereum"], - "extensions": { - "address": "0x111111111117dC0aa78b770fA6A738034120C302", - "assetContract": "https://etherscan.io/address/0x111111111117dC0aa78b770fA6A738034120C302", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "1inch", - "serumV3Usdc": "EQcNRGwogvYJDizG9Ek1qf6syi5UghkYDcUwgmycawYU", - "serumV3Usdt": "B3UpqhaGZc9yXhELknAAXuAoKzCk4QAoqaiVUffgMQBH" - } - }, - { - "chainId": 101, - "address": "H3UMboX4tnjba1Xw1a2VhUtkdgnrbmPvmDm6jaouQDN9", - "symbol": "wARMOR_v1", - "name": "Armor (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/H3UMboX4tnjba1Xw1a2VhUtkdgnrbmPvmDm6jaouQDN9/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x1337DEF16F9B486fAEd0293eb623Dc8395dFE46a", - "assetContract": "https://etherscan.io/address/0x1337DEF16F9B486fAEd0293eb623Dc8395dFE46a", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "armor" - } - }, - { - "chainId": 101, - "address": "Cw26Yz3rAN42mM5WpKriuGvbXnvRYmFA9sbBWH49KyqL", - "symbol": "warNXM_v1", - "name": "Armor NXM (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Cw26Yz3rAN42mM5WpKriuGvbXnvRYmFA9sbBWH49KyqL/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x1337DEF18C680aF1f9f45cBcab6309562975b1dD", - "assetContract": "https://etherscan.io/address/0x1337DEF18C680aF1f9f45cBcab6309562975b1dD", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "armor-nxm" - } - }, - { - "chainId": 101, - "address": "3GVAecXsFP8xLFuAMMpg5NU4g5JK6h2NZWsQJ45wiw6b", - "symbol": "wDPI_v1", - "name": "DefiPulse Index (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3GVAecXsFP8xLFuAMMpg5NU4g5JK6h2NZWsQJ45wiw6b/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x1494CA1F11D487c2bBe4543E90080AeBa4BA3C2b", - "assetContract": "https://etherscan.io/address/0x1494CA1F11D487c2bBe4543E90080AeBa4BA3C2b", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "defipulse-index" - } - }, - { - "chainId": 101, - "address": "AC4BK5yoEKn5hw6WpH3iWu56pEwigQdR48CiiqJ3R1pd", - "symbol": "wDHC_v1", - "name": "DeltaHub Community (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AC4BK5yoEKn5hw6WpH3iWu56pEwigQdR48CiiqJ3R1pd/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x152687Bc4A7FCC89049cF119F9ac3e5aCF2eE7ef", - "assetContract": "https://etherscan.io/address/0x152687Bc4A7FCC89049cF119F9ac3e5aCF2eE7ef", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "deltahub-community" - } - }, - { - "chainId": 101, - "address": "7bXgNP7SEwrqbnfLBPgKDRKSGjVe7cjbuioRP23upF5H", - "symbol": "wKEX_v1", - "name": "KIRA Network (Wormhole v1)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7bXgNP7SEwrqbnfLBPgKDRKSGjVe7cjbuioRP23upF5H/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x16980b3B4a3f9D89E33311B5aa8f80303E5ca4F8", - "assetContract": "https://etherscan.io/address/0x16980b3B4a3f9D89E33311B5aa8f80303E5ca4F8", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "kira-network" - } - }, - { - "chainId": 101, - "address": "5uC8Gj96sK6UG44AYLpbX3DUjKtBUxBrhHcM8JDtyYum", - "symbol": "wEWTB_v1", - "name": "Energy Web Token Bridged (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5uC8Gj96sK6UG44AYLpbX3DUjKtBUxBrhHcM8JDtyYum/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x178c820f862B14f316509ec36b13123DA19A6054", - "assetContract": "https://etherscan.io/address/0x178c820f862B14f316509ec36b13123DA19A6054", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "energy-web-token" - } - }, - { - "chainId": 101, - "address": "EzeRaHuh1Xu1nDUypv1VWXcGsNJ71ncCJ8HeWuyg8atJ", - "symbol": "wCC10_v1", - "name": "Cryptocurrency Top 10 Tokens Index (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EzeRaHuh1Xu1nDUypv1VWXcGsNJ71ncCJ8HeWuyg8atJ/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x17aC188e09A7890a1844E5E65471fE8b0CcFadF3", - "assetContract": "https://etherscan.io/address/0x17aC188e09A7890a1844E5E65471fE8b0CcFadF3", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "cryptocurrency-top-10-tokens-index" - } - }, - { - "chainId": 101, - "address": "9LzCMqDgTKYz9Drzqnpgee3SGa89up3a247ypMj2xrqM", - "symbol": "AUDIO", - "name": "Audius (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9LzCMqDgTKYz9Drzqnpgee3SGa89up3a247ypMj2xrqM/logo.png", - "tags": ["wrapped", "ethereum"], - "extensions": { - "address": "0x18aAA7115705e8be94bfFEBDE57Af9BFc265B998", - "assetContract": "https://etherscan.io/address/0x18aAA7115705e8be94bfFEBDE57Af9BFc265B998", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "audius", - "serumV3Usdc": "FxquLRmVMPXiS84FFSp8q5fbVExhLkX85yiXucyu7xSC" - } - }, - { - "chainId": 101, - "address": "9yPmJNUp1qFV6LafdYdegZ8sCgC4oy6Rgt9WsDJqv3EX", - "symbol": "wREP_v1", - "name": "Reputation (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9yPmJNUp1qFV6LafdYdegZ8sCgC4oy6Rgt9WsDJqv3EX/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x1985365e9f78359a9B6AD760e32412f4a445E862", - "assetContract": "https://etherscan.io/address/0x1985365e9f78359a9B6AD760e32412f4a445E862", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678" - } - }, - { - "chainId": 101, - "address": "CZxP1KtsfvMXZTGKR1fNwNChv8hGAfQrgVoENabN8zKU", - "symbol": "wVSP_v1", - "name": "VesperToken (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CZxP1KtsfvMXZTGKR1fNwNChv8hGAfQrgVoENabN8zKU/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x1b40183EFB4Dd766f11bDa7A7c3AD8982e998421", - "assetContract": "https://etherscan.io/address/0x1b40183EFB4Dd766f11bDa7A7c3AD8982e998421", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "vesper-finance" - } - }, - { - "chainId": 101, - "address": "8cGPyDGT1mgG1iWzNjPmCDKSK9veJhoBAguq7rp7CjTe", - "symbol": "wKP3R_v1", - "name": "Keep3rV1 (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8cGPyDGT1mgG1iWzNjPmCDKSK9veJhoBAguq7rp7CjTe/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x1cEB5cB57C4D4E2b2433641b95Dd330A33185A44", - "assetContract": "https://etherscan.io/address/0x1cEB5cB57C4D4E2b2433641b95Dd330A33185A44", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "keep3rv1" - } - }, - { - "chainId": 101, - "address": "DGghbWvncPL41U8TmUtXcGMgLeQqkaA2yM7UfcabftR8", - "symbol": "wLEAD_v1", - "name": "Lead Token (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DGghbWvncPL41U8TmUtXcGMgLeQqkaA2yM7UfcabftR8/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x1dD80016e3d4ae146Ee2EBB484e8edD92dacC4ce", - "assetContract": "https://etherscan.io/address/0x1dD80016e3d4ae146Ee2EBB484e8edD92dacC4ce", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "lead-token" - } - }, - { - "chainId": 101, - "address": "3MVa4e32PaKmPxYUQ6n8vFkWtCma68Ld7e7fTktWDueQ", - "symbol": "wUNI_v1", - "name": "Uniswap (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3MVa4e32PaKmPxYUQ6n8vFkWtCma68Ld7e7fTktWDueQ/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984", - "assetContract": "https://etherscan.io/address/0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "uniswap" - } - }, - { - "chainId": 101, - "address": "qfnqNqs3nCAHjnyCgLRDbBtq4p2MtHZxw8YjSyYhPoL", - "symbol": "wWBTC_v1", - "name": "Wrapped BTC (Wormhole v1)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/qfnqNqs3nCAHjnyCgLRDbBtq4p2MtHZxw8YjSyYhPoL/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599", - "assetContract": "https://etherscan.io/address/0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "wrapped-bitcoin" - } - }, - { - "chainId": 101, - "address": "8My83RG8Xa1EhXdDKHWq8BWZN1zF3XUrWL3TXCLjVPFh", - "symbol": "wUNN_v1", - "name": "UNION Protocol Governance Token (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8My83RG8Xa1EhXdDKHWq8BWZN1zF3XUrWL3TXCLjVPFh/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x226f7b842E0F0120b7E194D05432b3fd14773a9D", - "assetContract": "https://etherscan.io/address/0x226f7b842E0F0120b7E194D05432b3fd14773a9D", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "union-protocol-governance-token" - } - }, - { - "chainId": 101, - "address": "6jVuhLJ2mzyZ8DyUcrDj8Qr6Q9bqbJnq4fAnMeEduDM9", - "symbol": "wSOCKS_v1", - "name": "Unisocks Edition 0 (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6jVuhLJ2mzyZ8DyUcrDj8Qr6Q9bqbJnq4fAnMeEduDM9/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x23B608675a2B2fB1890d3ABBd85c5775c51691d5", - "assetContract": "https://etherscan.io/address/0x23B608675a2B2fB1890d3ABBd85c5775c51691d5", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "unisocks" - } - }, - { - "chainId": 101, - "address": "Az8PAQ7s6s5ZFgBiKKEizHt3SzDxXKZayDCtRZoC3452", - "symbol": "wDEXT_v1", - "name": "DEXTools (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Az8PAQ7s6s5ZFgBiKKEizHt3SzDxXKZayDCtRZoC3452/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x26CE25148832C04f3d7F26F32478a9fe55197166", - "assetContract": "https://etherscan.io/address/0x26CE25148832C04f3d7F26F32478a9fe55197166", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "idextools" - } - }, - { - "chainId": 101, - "address": "ELSnGFd5XnSdYFFSgYQp7n89FEbDqxN4npuRLW4PPPLv", - "symbol": "wHEX_v1", - "name": "HEX (Wormhole v1)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ELSnGFd5XnSdYFFSgYQp7n89FEbDqxN4npuRLW4PPPLv/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x2b591e99afE9f32eAA6214f7B7629768c40Eeb39", - "assetContract": "https://etherscan.io/address/0x2b591e99afE9f32eAA6214f7B7629768c40Eeb39", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "hex" - } - }, - { - "chainId": 101, - "address": "9iwfHhE7BJKNo4Eb1wX3p4uyJjEN9RoGLt4BvMdzZoiN", - "symbol": "wCREAM_v1", - "name": "Cream (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9iwfHhE7BJKNo4Eb1wX3p4uyJjEN9RoGLt4BvMdzZoiN/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x2ba592F78dB6436527729929AAf6c908497cB200", - "assetContract": "https://etherscan.io/address/0x2ba592F78dB6436527729929AAf6c908497cB200", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "cream-2" - } - }, - { - "chainId": 101, - "address": "6wdcYNvUyHCerSiGbChkvGBF6Qzju1YP5qpXRQ4tqdZ3", - "symbol": "wZEE_v1", - "name": "ZeroSwapToken (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6wdcYNvUyHCerSiGbChkvGBF6Qzju1YP5qpXRQ4tqdZ3/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x2eDf094dB69d6Dcd487f1B3dB9febE2eeC0dd4c5", - "assetContract": "https://etherscan.io/address/0x2eDf094dB69d6Dcd487f1B3dB9febE2eeC0dd4c5", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "zeroswap" - } - }, - { - "chainId": 101, - "address": "E8yz29LYVsmpMvbpqEsNUzTFU3mjNLLu4NmwXBdgBAJm", - "symbol": "ZERO", - "name": "Z-Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/E8yz29LYVsmpMvbpqEsNUzTFU3mjNLLu4NmwXBdgBAJm/logo.png", - "tags": ["ztechhub", "smartshift"], - "extensions": { - "website": "https://www.smartshift.asia" - } - }, - { - "chainId": 101, - "address": "4xh8iC54UgaNpY4h34rxfZBSc9L2fBB8gWcYtDGHjxhN", - "symbol": "wwANATHA_v1", - "name": "Wrapped ANATHA (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4xh8iC54UgaNpY4h34rxfZBSc9L2fBB8gWcYtDGHjxhN/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x3383c5a8969Dc413bfdDc9656Eb80A1408E4bA20", - "assetContract": "https://etherscan.io/address/0x3383c5a8969Dc413bfdDc9656Eb80A1408E4bA20", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "wrapped-anatha" - } - }, - { - "chainId": 101, - "address": "5Jq6S9HYqfG6TUMjjsKpnfis7utUAB69JiEGkkypdmgP", - "symbol": "wRAMP_v1", - "name": "RAMP DEFI (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5Jq6S9HYqfG6TUMjjsKpnfis7utUAB69JiEGkkypdmgP/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x33D0568941C0C64ff7e0FB4fbA0B11BD37deEd9f", - "assetContract": "https://etherscan.io/address/0x33D0568941C0C64ff7e0FB4fbA0B11BD37deEd9f", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "ramp" - } - }, - { - "chainId": 101, - "address": "6uMUH5ztnj6AKYvL71EZgcyyRxjyBC5LVkscA5LrBc3c", - "symbol": "wPRQ_v1", - "name": "Parsiq Token (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6uMUH5ztnj6AKYvL71EZgcyyRxjyBC5LVkscA5LrBc3c/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x362bc847A3a9637d3af6624EeC853618a43ed7D2", - "assetContract": "https://etherscan.io/address/0x362bc847A3a9637d3af6624EeC853618a43ed7D2", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "parsiq" - } - }, - { - "chainId": 101, - "address": "42gecM46tdSiYZN2CK1ek5raCxnzQf1xfhoKAf3F7Y5k", - "symbol": "wSLP_v1", - "name": "Small Love Potion (Wormhole v1)", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/42gecM46tdSiYZN2CK1ek5raCxnzQf1xfhoKAf3F7Y5k/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x37236CD05b34Cc79d3715AF2383E96dd7443dCF1", - "assetContract": "https://etherscan.io/address/0x37236CD05b34Cc79d3715AF2383E96dd7443dCF1", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "smooth-love-potion" - } - }, - { - "chainId": 101, - "address": "F6M9DW1cWw7EtFK9m2ukvT9WEvtEbdZfTzZTtDeBcnAf", - "symbol": "wSAND_v1", - "name": "SAND (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/F6M9DW1cWw7EtFK9m2ukvT9WEvtEbdZfTzZTtDeBcnAf/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x3845badAde8e6dFF049820680d1F14bD3903a5d0", - "assetContract": "https://etherscan.io/address/0x3845badAde8e6dFF049820680d1F14bD3903a5d0", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "the-sandbox" - } - }, - { - "chainId": 101, - "address": "G27M8w6G4hwatMNFi46DPAUR1YkxSmRNFKus7SgYLoDy", - "symbol": "wCVP_v1", - "name": "Concentrated Voting Power (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/G27M8w6G4hwatMNFi46DPAUR1YkxSmRNFKus7SgYLoDy/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x38e4adB44ef08F22F5B5b76A8f0c2d0dCbE7DcA1", - "assetContract": "https://etherscan.io/address/0x38e4adB44ef08F22F5B5b76A8f0c2d0dCbE7DcA1", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "concentrated-voting-power" - } - }, - { - "chainId": 101, - "address": "FjucGZpcdVXaWJH21pbrGQaKNszsGsJqbAXu4sJywKJa", - "symbol": "wREN_v1", - "name": "Republic Token (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FjucGZpcdVXaWJH21pbrGQaKNszsGsJqbAXu4sJywKJa/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x408e41876cCCDC0F92210600ef50372656052a38", - "assetContract": "https://etherscan.io/address/0x408e41876cCCDC0F92210600ef50372656052a38", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "republic-protocol" - } - }, - { - "chainId": 101, - "address": "5kvugu18snfGRu1PykMfRzYfUxJYs3smk1PWQcGo6Z8a", - "symbol": "wXOR_v1", - "name": "Sora (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5kvugu18snfGRu1PykMfRzYfUxJYs3smk1PWQcGo6Z8a/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x40FD72257597aA14C7231A7B1aaa29Fce868F677", - "assetContract": "https://etherscan.io/address/0x40FD72257597aA14C7231A7B1aaa29Fce868F677", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "sora" - } - }, - { - "chainId": 101, - "address": "3EKQDmiXj8yLBFpZca4coxBpP8XJCzmjVgUdVydSmaaT", - "symbol": "wFUN_v1", - "name": "FunFair (Wormhole v1)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3EKQDmiXj8yLBFpZca4coxBpP8XJCzmjVgUdVydSmaaT/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x419D0d8BdD9aF5e606Ae2232ed285Aff190E711b", - "assetContract": "https://etherscan.io/address/0x419D0d8BdD9aF5e606Ae2232ed285Aff190E711b", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "funfair" - } - }, - { - "chainId": 101, - "address": "6J9soByB65WUamsEG8KSPdphBV1oCoGvr5QpaUaY3r19", - "symbol": "wPICKLE_v1", - "name": "PickleToken (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6J9soByB65WUamsEG8KSPdphBV1oCoGvr5QpaUaY3r19/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x429881672B9AE42b8EbA0E26cD9C73711b891Ca5", - "assetContract": "https://etherscan.io/address/0x429881672B9AE42b8EbA0E26cD9C73711b891Ca5", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "pickle-finance" - } - }, - { - "chainId": 101, - "address": "HEsqFznmAERPUmMWHtDWYAZRoFbNHZpuNuFrPio68Zp1", - "symbol": "wPAXG_v1", - "name": "Paxos Gold (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HEsqFznmAERPUmMWHtDWYAZRoFbNHZpuNuFrPio68Zp1/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x45804880De22913dAFE09f4980848ECE6EcbAf78", - "assetContract": "https://etherscan.io/address/0x45804880De22913dAFE09f4980848ECE6EcbAf78", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "pax-gold" - } - }, - { - "chainId": 101, - "address": "BrtLvpVCwVDH5Jpqjtiuhh8wKYA5b3NZCnsSftr61viv", - "symbol": "wQNT_v1", - "name": "Quant (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BrtLvpVCwVDH5Jpqjtiuhh8wKYA5b3NZCnsSftr61viv/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x4a220E6096B25EADb88358cb44068A3248254675", - "assetContract": "https://etherscan.io/address/0x4a220E6096B25EADb88358cb44068A3248254675", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "quant-network" - } - }, - { - "chainId": 101, - "address": "8DRgurhcQPJeCqQEpbeYGUmwAz2tETbyWUYLUU4Q7goM", - "symbol": "wORAI_v1", - "name": "Oraichain Token (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8DRgurhcQPJeCqQEpbeYGUmwAz2tETbyWUYLUU4Q7goM/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x4c11249814f11b9346808179Cf06e71ac328c1b5", - "assetContract": "https://etherscan.io/address/0x4c11249814f11b9346808179Cf06e71ac328c1b5", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "oraichain-token" - } - }, - { - "chainId": 101, - "address": "4e5cqAsZ7wQqwLi7AApS9CgN8Yaho5TvkhvcLaGyiuzL", - "symbol": "wTRU_v1", - "name": "TrustToken (Wormhole v1)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4e5cqAsZ7wQqwLi7AApS9CgN8Yaho5TvkhvcLaGyiuzL/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x4C19596f5aAfF459fA38B0f7eD92F11AE6543784", - "assetContract": "https://etherscan.io/address/0x4C19596f5aAfF459fA38B0f7eD92F11AE6543784", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "truefi" - } - }, - { - "chainId": 101, - "address": "HkhBUKSct2V93Z35apDmXthkRvH4yvMovLyv8s8idDgP", - "symbol": "wMCB_v1", - "name": "MCDEX Token (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HkhBUKSct2V93Z35apDmXthkRvH4yvMovLyv8s8idDgP/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x4e352cF164E64ADCBad318C3a1e222E9EBa4Ce42", - "assetContract": "https://etherscan.io/address/0x4e352cF164E64ADCBad318C3a1e222E9EBa4Ce42", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "mcdex" - } - }, - { - "chainId": 101, - "address": "Eof7wbYsHZKaoyUGwM7Nfkoo6zQW4U7uWXqz2hoQzSkK", - "symbol": "wNU_v1", - "name": "NuCypher (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Eof7wbYsHZKaoyUGwM7Nfkoo6zQW4U7uWXqz2hoQzSkK/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x4fE83213D56308330EC302a8BD641f1d0113A4Cc", - "assetContract": "https://etherscan.io/address/0x4fE83213D56308330EC302a8BD641f1d0113A4Cc", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "nucypher" - } - }, - { - "chainId": 101, - "address": "5CmA1HTVZt5NRtwiUrqWrcnT5JRW5zHe6uQXfP7SDUNz", - "symbol": "wRAZOR_v1", - "name": "RAZOR (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5CmA1HTVZt5NRtwiUrqWrcnT5JRW5zHe6uQXfP7SDUNz/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x50DE6856358Cc35f3A9a57eAAA34BD4cB707d2cd", - "assetContract": "https://etherscan.io/address/0x50DE6856358Cc35f3A9a57eAAA34BD4cB707d2cd", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "razor-network" - } - }, - { - "chainId": 101, - "address": "6msNYXzSVtjinqapq2xcvBb5NRq4YTPAi7wc5Jx8M8TS", - "symbol": "wLINK_v1", - "name": "ChainLink Token (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6msNYXzSVtjinqapq2xcvBb5NRq4YTPAi7wc5Jx8M8TS/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x514910771AF9Ca656af840dff83E8264EcF986CA", - "assetContract": "https://etherscan.io/address/0x514910771AF9Ca656af840dff83E8264EcF986CA", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "chainlink" - } - }, - { - "chainId": 101, - "address": "BX2gcRRS12iqFzKCpvTt4krBBYNymR9JBDZBxzfFLnbF", - "symbol": "weRSDL_v1", - "name": "UnFederalReserveToken (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BX2gcRRS12iqFzKCpvTt4krBBYNymR9JBDZBxzfFLnbF/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x5218E472cFCFE0b64A064F055B43b4cdC9EfD3A6", - "assetContract": "https://etherscan.io/address/0x5218E472cFCFE0b64A064F055B43b4cdC9EfD3A6", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "unfederalreserve" - } - }, - { - "chainId": 101, - "address": "CCGLdsokcybeF8NrCcu1RSQK8isNBjBA58kVEMTHTKjx", - "symbol": "wsUSD_v1", - "name": "Synth sUSD (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CCGLdsokcybeF8NrCcu1RSQK8isNBjBA58kVEMTHTKjx/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x57Ab1ec28D129707052df4dF418D58a2D46d5f51", - "assetContract": "https://etherscan.io/address/0x57Ab1ec28D129707052df4dF418D58a2D46d5f51", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "nusd" - } - }, - { - "chainId": 101, - "address": "FP9ogG7hTdfcTJwn4prF9AVEcfcjLq1GtkqYM4oRn7eY", - "symbol": "wHEGIC_v1", - "name": "Hegic (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FP9ogG7hTdfcTJwn4prF9AVEcfcjLq1GtkqYM4oRn7eY/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x584bC13c7D411c00c01A62e8019472dE68768430", - "assetContract": "https://etherscan.io/address/0x584bC13c7D411c00c01A62e8019472dE68768430", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "hegic" - } - }, - { - "chainId": 101, - "address": "DboP5vvYUVjmKSHKJ1YFHwmv41KtUscnYgzjmPgHwQVn", - "symbol": "wXFI_v1", - "name": "Xfinance (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DboP5vvYUVjmKSHKJ1YFHwmv41KtUscnYgzjmPgHwQVn/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x5BEfBB272290dD5b8521D4a938f6c4757742c430", - "assetContract": "https://etherscan.io/address/0x5BEfBB272290dD5b8521D4a938f6c4757742c430", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "xfinance" - } - }, - { - "chainId": 101, - "address": "6c4U9yxGzVjejSJJXrdX8wtt532Et6MrBUZc2oK5j6w5", - "symbol": "wDEXTF_v1", - "name": "DEXTF Token (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6c4U9yxGzVjejSJJXrdX8wtt532Et6MrBUZc2oK5j6w5/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x5F64Ab1544D28732F0A24F4713c2C8ec0dA089f0", - "assetContract": "https://etherscan.io/address/0x5F64Ab1544D28732F0A24F4713c2C8ec0dA089f0", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "dextf" - } - }, - { - "chainId": 101, - "address": "JuXkRYNw54rujC7SPWcAM4ArLgA5x8nDQbS8xHAr6MA", - "symbol": "wRLC_v1", - "name": "iExec RLC (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/JuXkRYNw54rujC7SPWcAM4ArLgA5x8nDQbS8xHAr6MA/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x607F4C5BB672230e8672085532f7e901544a7375", - "assetContract": "https://etherscan.io/address/0x607F4C5BB672230e8672085532f7e901544a7375", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "iexec-rlc" - } - }, - { - "chainId": 101, - "address": "AqLKDJiGL4wXKPAfzNom3xEdQwgj2LTCE4k34gzvZsE6", - "symbol": "wCFi_v1", - "name": "CyberFi Token (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AqLKDJiGL4wXKPAfzNom3xEdQwgj2LTCE4k34gzvZsE6/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x63b4f3e3fa4e438698CE330e365E831F7cCD1eF4", - "assetContract": "https://etherscan.io/address/0x63b4f3e3fa4e438698CE330e365E831F7cCD1eF4", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "cyberfi" - } - }, - { - "chainId": 101, - "address": "FLrjpCRrd4GffHu8MVYGvuLxYLuBGVaXsnCecw3Effci", - "symbol": "wWISE_v1", - "name": "Wise Token (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FLrjpCRrd4GffHu8MVYGvuLxYLuBGVaXsnCecw3Effci/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x66a0f676479Cee1d7373f3DC2e2952778BfF5bd6", - "assetContract": "https://etherscan.io/address/0x66a0f676479Cee1d7373f3DC2e2952778BfF5bd6", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "wise-token11" - } - }, - { - "chainId": 101, - "address": "GaMPhVyp1xd9xJuPskDEzQzp8mKfEjAmhny8NX7y7YKc", - "symbol": "wGNO_v1", - "name": "Gnosis Token (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GaMPhVyp1xd9xJuPskDEzQzp8mKfEjAmhny8NX7y7YKc/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x6810e776880C02933D47DB1b9fc05908e5386b96", - "assetContract": "https://etherscan.io/address/0x6810e776880C02933D47DB1b9fc05908e5386b96", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "gnosis" - } - }, - { - "chainId": 101, - "address": "CCAQZHBVWKDukT68PZ3LenDs7apibeSYeJ3jHE8NzBC5", - "symbol": "wPOOLZ_v1", - "name": "Poolz Finance (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CCAQZHBVWKDukT68PZ3LenDs7apibeSYeJ3jHE8NzBC5/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x69A95185ee2a045CDC4bCd1b1Df10710395e4e23", - "assetContract": "https://etherscan.io/address/0x69A95185ee2a045CDC4bCd1b1Df10710395e4e23", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "poolz-finance" - } - }, - { - "chainId": 101, - "address": "FYpdBuyAHSbdaAyD1sKkxyLWbAP8uUW9h6uvdhK74ij1", - "symbol": "wDAI_v1", - "name": "Dai Stablecoin (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FYpdBuyAHSbdaAyD1sKkxyLWbAP8uUW9h6uvdhK74ij1/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x6B175474E89094C44Da98b954EedeAC495271d0F", - "assetContract": "https://etherscan.io/address/0x6B175474E89094C44Da98b954EedeAC495271d0F", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "dai" - } - }, - { - "chainId": 101, - "address": "HbMGwfGjGPchtaPwyrtJFy8APZN5w1hi63xnzmj1f23v", - "symbol": "wSUSHI_v1", - "name": "SushiSwap (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HbMGwfGjGPchtaPwyrtJFy8APZN5w1hi63xnzmj1f23v/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x6B3595068778DD592e39A122f4f5a5cF09C90fE2", - "assetContract": "https://etherscan.io/address/0x6B3595068778DD592e39A122f4f5a5cF09C90fE2", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "sushi" - } - }, - { - "chainId": 101, - "address": "6Tmi8TZasqdxWB59uE5Zw9VLKecuCbsLSsPEqoMpmozA", - "symbol": "wFYZ_v1", - "name": "Fyooz (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6Tmi8TZasqdxWB59uE5Zw9VLKecuCbsLSsPEqoMpmozA/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x6BFf2fE249601ed0Db3a87424a2E923118BB0312", - "assetContract": "https://etherscan.io/address/0x6BFf2fE249601ed0Db3a87424a2E923118BB0312", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "fyooz" - } - }, - { - "chainId": 101, - "address": "3sHinPxEPqhEGip2Wy45TFmgAA1Atg2mctMjY5RKJUjk", - "symbol": "wQRX_v1", - "name": "QuiverX (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3sHinPxEPqhEGip2Wy45TFmgAA1Atg2mctMjY5RKJUjk/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x6e0daDE58D2d89eBBe7aFc384e3E4f15b70b14D8", - "assetContract": "https://etherscan.io/address/0x6e0daDE58D2d89eBBe7aFc384e3E4f15b70b14D8", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "quiverx" - } - }, - { - "chainId": 101, - "address": "4ighgEijHcCoLu9AsvwVz2TnGFqAgzQtQMr6ch88Jrfe", - "symbol": "wTRADE_v1", - "name": "UniTrade (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4ighgEijHcCoLu9AsvwVz2TnGFqAgzQtQMr6ch88Jrfe/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x6F87D756DAf0503d08Eb8993686c7Fc01Dc44fB1", - "assetContract": "https://etherscan.io/address/0x6F87D756DAf0503d08Eb8993686c7Fc01Dc44fB1", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "unitrade" - } - }, - { - "chainId": 101, - "address": "FTPnEQ3NfRRZ9tvmpDW6JFrvweBE5sanxnXSpJL1dvbB", - "symbol": "wBIRD_v1", - "name": "Bird.Money (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FTPnEQ3NfRRZ9tvmpDW6JFrvweBE5sanxnXSpJL1dvbB/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x70401dFD142A16dC7031c56E862Fc88Cb9537Ce0", - "assetContract": "https://etherscan.io/address/0x70401dFD142A16dC7031c56E862Fc88Cb9537Ce0", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "bird-money" - } - }, - { - "chainId": 101, - "address": "QVDE6rhcGPSB3ex5T7vWBzvoSRUXULjuSGpVuKwu5XH", - "symbol": "wAXN_v1", - "name": "Axion (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/QVDE6rhcGPSB3ex5T7vWBzvoSRUXULjuSGpVuKwu5XH/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x71F85B2E46976bD21302B64329868fd15eb0D127", - "assetContract": "https://etherscan.io/address/0x71F85B2E46976bD21302B64329868fd15eb0D127", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "axion" - } - }, - { - "chainId": 101, - "address": "J6AbGG62yo9UJ2T9r9GM7pnoRNui5DsZDnPbiNAPqbVd", - "symbol": "wBMI_v1", - "name": "Bridge Mutual (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/J6AbGG62yo9UJ2T9r9GM7pnoRNui5DsZDnPbiNAPqbVd/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x725C263e32c72dDC3A19bEa12C5a0479a81eE688", - "assetContract": "https://etherscan.io/address/0x725C263e32c72dDC3A19bEa12C5a0479a81eE688", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "bridge-mutual" - } - }, - { - "chainId": 101, - "address": "4wvHoaxxZxFeNrMTP8bLVRh1ziSBV7crN665WX4rRMqe", - "symbol": "wDYT_v1", - "name": "DoYourTip (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4wvHoaxxZxFeNrMTP8bLVRh1ziSBV7crN665WX4rRMqe/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x740623d2c797b7D8D1EcB98e9b4Afcf99Ec31E14", - "assetContract": "https://etherscan.io/address/0x740623d2c797b7D8D1EcB98e9b4Afcf99Ec31E14", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "dynamite" - } - }, - { - "chainId": 101, - "address": "Fe5fWjCLDMJoi4sTmfR2VW4BT1LwsbR1n6QAjzJQvhhf", - "symbol": "wBBR_v1", - "name": "BitberryToken (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Fe5fWjCLDMJoi4sTmfR2VW4BT1LwsbR1n6QAjzJQvhhf/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x7671904eed7f10808B664fc30BB8693FD7237abF", - "assetContract": "https://etherscan.io/address/0x7671904eed7f10808B664fc30BB8693FD7237abF", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "bitberry-token" - } - }, - { - "chainId": 101, - "address": "5J9yhFRnQZx3RiqHzfQpAffX5UQz3k8vQCZH2g9Z9sDg", - "symbol": "wWAXE_v1", - "name": "WAX Economic Token (Wormhole v1)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5J9yhFRnQZx3RiqHzfQpAffX5UQz3k8vQCZH2g9Z9sDg/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x7a2Bc711E19ba6aff6cE8246C546E8c4B4944DFD", - "assetContract": "https://etherscan.io/address/0x7a2Bc711E19ba6aff6cE8246C546E8c4B4944DFD", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "waxe" - } - }, - { - "chainId": 101, - "address": "4DHywS5EjUTF5AYisPZiJbWcCV4gfpH98oKxpgyKRnnQ", - "symbol": "wMATIC_v1", - "name": "Matic Token (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4DHywS5EjUTF5AYisPZiJbWcCV4gfpH98oKxpgyKRnnQ/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x7D1AfA7B718fb893dB30A3aBc0Cfc608AaCfeBB0", - "assetContract": "https://etherscan.io/address/0x7D1AfA7B718fb893dB30A3aBc0Cfc608AaCfeBB0", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "matic-network" - } - }, - { - "chainId": 101, - "address": "yPRTUpLDftNej7p6QofNYgRArRXsm6Mvkzohj4bh4WM", - "symbol": "yPRT", - "name": "yPRT (Parrot Yield Token)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/yPRTUpLDftNej7p6QofNYgRArRXsm6Mvkzohj4bh4WM/logo.svg", - "extensions": { - "discord": "https://discord.gg/gopartyparrot", - "medium": "https://gopartyparrot.medium.com/", - "telegram": "https://t.me/gopartyparrot", - "twitter": "https://twitter.com/gopartyparrot", - "website": "https://parrot.fi" - } - }, - { - "chainId": 101, - "address": "Au9E8ygQdTJQZXmNKPdtLEP8rGjC4qsGRhkJgjFNPAr8", - "symbol": "wXRT_v1", - "name": "Robonomics (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Au9E8ygQdTJQZXmNKPdtLEP8rGjC4qsGRhkJgjFNPAr8/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x7dE91B204C1C737bcEe6F000AAA6569Cf7061cb7", - "assetContract": "https://etherscan.io/address/0x7dE91B204C1C737bcEe6F000AAA6569Cf7061cb7", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "robonomics-network" - } - }, - { - "chainId": 101, - "address": "5DQZ14hLDxveMH7NyGmTmUTRGgVAVXADp3cP2UHeH6hM", - "symbol": "wAAVE_v1", - "name": "Aave Token (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5DQZ14hLDxveMH7NyGmTmUTRGgVAVXADp3cP2UHeH6hM/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9", - "assetContract": "https://etherscan.io/address/0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "aave" - } - }, - { - "chainId": 101, - "address": "Arc2ZVKNCdDU4vB8Ubud5QayDtjo2oJF9xVrUPQ6TWxF", - "symbol": "wLEND_v1", - "name": "Lend (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Arc2ZVKNCdDU4vB8Ubud5QayDtjo2oJF9xVrUPQ6TWxF/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x80fB784B7eD66730e8b1DBd9820aFD29931aab03", - "assetContract": "https://etherscan.io/address/0x80fB784B7eD66730e8b1DBd9820aFD29931aab03", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "ethlend" - } - }, - { - "chainId": 101, - "address": "2ctKUDkGBnVykt31AhMPhHvAQWJvoNGbLh7aRidjtAqv", - "symbol": "wPOLS_v1", - "name": "PolkastarterToken (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2ctKUDkGBnVykt31AhMPhHvAQWJvoNGbLh7aRidjtAqv/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x83e6f1E41cdd28eAcEB20Cb649155049Fac3D5Aa", - "assetContract": "https://etherscan.io/address/0x83e6f1E41cdd28eAcEB20Cb649155049Fac3D5Aa", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "polkastarter" - } - }, - { - "chainId": 101, - "address": "8FnkznYpHvKiaBkgatVoCrNiS5y5KW62JqgjnxVhDejC", - "symbol": "wUBT_v1", - "name": "Unibright (Wormhole v1)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8FnkznYpHvKiaBkgatVoCrNiS5y5KW62JqgjnxVhDejC/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x8400D94A5cb0fa0D041a3788e395285d61c9ee5e", - "assetContract": "https://etherscan.io/address/0x8400D94A5cb0fa0D041a3788e395285d61c9ee5e", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "unibright" - } - }, - { - "chainId": 101, - "address": "4LLAYXVmT3U8Sew6k3tk66zk3btT91QRzQzxcNX8XhzV", - "symbol": "wDIA_v1", - "name": "DIA (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4LLAYXVmT3U8Sew6k3tk66zk3btT91QRzQzxcNX8XhzV/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x84cA8bc7997272c7CfB4D0Cd3D55cd942B3c9419", - "assetContract": "https://etherscan.io/address/0x84cA8bc7997272c7CfB4D0Cd3D55cd942B3c9419", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "dia-data" - } - }, - { - "chainId": 101, - "address": "8L8pDf3jutdpdr4m3np68CL9ZroLActrqwxi6s9Ah5xU", - "symbol": "wFRAX_v1", - "name": "Frax (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8L8pDf3jutdpdr4m3np68CL9ZroLActrqwxi6s9Ah5xU/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x853d955aCEf822Db058eb8505911ED77F175b99e", - "assetContract": "https://etherscan.io/address/0x853d955aCEf822Db058eb8505911ED77F175b99e", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "frax" - } - }, - { - "chainId": 101, - "address": "H3oVL2zJpHJaDoRfQmSrftv3fkGzvsiQgugCZmcRBykG", - "symbol": "wKEEP_v1", - "name": "KEEP Token (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/H3oVL2zJpHJaDoRfQmSrftv3fkGzvsiQgugCZmcRBykG/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x85Eee30c52B0b379b046Fb0F85F4f3Dc3009aFEC", - "assetContract": "https://etherscan.io/address/0x85Eee30c52B0b379b046Fb0F85F4f3Dc3009aFEC", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "keep-network" - } - }, - { - "chainId": 101, - "address": "64oqP1dFqqD8NEL4RPCpMyrHmpo31rj3nYxULVXvayfW", - "symbol": "wRSR_v1", - "name": "Reserve Rights (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/64oqP1dFqqD8NEL4RPCpMyrHmpo31rj3nYxULVXvayfW/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x8762db106B2c2A0bccB3A80d1Ed41273552616E8", - "assetContract": "https://etherscan.io/address/0x8762db106B2c2A0bccB3A80d1Ed41273552616E8", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "reserve-rights-token" - } - }, - { - "chainId": 101, - "address": "5fv26ojhPHWNaikXcMf2TBu4JENjLQ2PWgWYeitttVwv", - "symbol": "wPAID_v1", - "name": "PAID Network (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5fv26ojhPHWNaikXcMf2TBu4JENjLQ2PWgWYeitttVwv/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x8c8687fC965593DFb2F0b4EAeFD55E9D8df348df", - "assetContract": "https://etherscan.io/address/0x8c8687fC965593DFb2F0b4EAeFD55E9D8df348df", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "paid-network" - } - }, - { - "chainId": 101, - "address": "ACr98v3kv9qaGnR3p2BfsoSK9Q2ZmP6zUkm3qxv5ZJDd", - "symbol": "wSXP_v1", - "name": "Swipe (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ACr98v3kv9qaGnR3p2BfsoSK9Q2ZmP6zUkm3qxv5ZJDd/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x8CE9137d39326AD0cD6491fb5CC0CbA0e089b6A9", - "assetContract": "https://etherscan.io/address/0x8CE9137d39326AD0cD6491fb5CC0CbA0e089b6A9", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "swipe" - } - }, - { - "chainId": 101, - "address": "7gBuzBcJ7V48m8TiKJ1XWNDUerK2XfAbjxuRiKMb6S8Z", - "symbol": "wREQ_v1", - "name": "Request Token (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7gBuzBcJ7V48m8TiKJ1XWNDUerK2XfAbjxuRiKMb6S8Z/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x8f8221aFbB33998d8584A2B05749bA73c37a938a", - "assetContract": "https://etherscan.io/address/0x8f8221aFbB33998d8584A2B05749bA73c37a938a", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "request-network" - } - }, - { - "chainId": 101, - "address": "CtDjsryLtwZCLj8TeniV7tWHbkaREfjKDWpvyQvsTyek", - "symbol": "wWHALE_v1", - "name": "WHALE (Wormhole v1)", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CtDjsryLtwZCLj8TeniV7tWHbkaREfjKDWpvyQvsTyek/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x9355372396e3F6daF13359B7b607a3374cc638e0", - "assetContract": "https://etherscan.io/address/0x9355372396e3F6daF13359B7b607a3374cc638e0", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "whale" - } - }, - { - "chainId": 101, - "address": "JDUgn6JUSwufqqthRdnZZKWv2vEdYvHxigF5Hk79yxRm", - "symbol": "wPNK_v1", - "name": "Pinakion (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/JDUgn6JUSwufqqthRdnZZKWv2vEdYvHxigF5Hk79yxRm/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x93ED3FBe21207Ec2E8f2d3c3de6e058Cb73Bc04d", - "assetContract": "https://etherscan.io/address/0x93ED3FBe21207Ec2E8f2d3c3de6e058Cb73Bc04d", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "kleros" - } - }, - { - "chainId": 101, - "address": "Gw7M5dqZJ6B6a8dYkDry6z9t9FuUA2xPUokjV2cortoq", - "symbol": "KRW", - "name": "Krown", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Gw7M5dqZJ6B6a8dYkDry6z9t9FuUA2xPUokjV2cortoq/logo.png", - "tags": ["wrapped"], - "extensions": { - "address": "0x1446f3cedf4d86a9399e49f7937766e6de2a3aab", - "assetContract": "https://www.bscscan.com/address/0x1446f3cedf4d86a9399e49f7937766e6de2a3aab", - "bridgeContract": "https://bscscan.com/address/0x0ac4a2f14927c7e038a3962b647dc7527d8a7229", - "coingeckoId": "krown", - "twitter": "https://twitter.com/kingdefi2", - "website": "https://kingdefi.io" - } - }, - { - "chainId": 101, - "address": "p9tNnBf4PDA7WSSFj5EVZddai6WoEiNk5B5FMyeQLtu", - "symbol": "TMI", - "name": "TUMI", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/p9tNnBf4PDA7WSSFj5EVZddai6WoEiNk5B5FMyeQLtu/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x71845240485c5339b3192a820f5fa152c093d93a", - "assetContract": "https://bscscan.com/address/0x71845240485c5339b3192a820f5fa152c093d93a", - "bridgeContract": "https://bscscan.com/address/0xB6F6D86a8f9879A9c87f643768d9efc38c1Da6E7", - "telegram": "https://t.me/cointumi", - "twitter": "https://twitter.com/tumicommunity", - "website": "https://cointumi.com" - } - }, - { - "chainId": 101, - "address": "EJKqF4p7xVhXkcDNCrVQJE4osow76226bc6u3AtsGXaG", - "symbol": "wAPY_v1", - "name": "APY Governance Token (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EJKqF4p7xVhXkcDNCrVQJE4osow76226bc6u3AtsGXaG/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x95a4492F028aa1fd432Ea71146b433E7B4446611", - "assetContract": "https://etherscan.io/address/0x95a4492F028aa1fd432Ea71146b433E7B4446611", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "apy-finance" - } - }, - { - "chainId": 101, - "address": "AF7Dv5Vzi1dT2fLnz4ysiRQ6FxGN1M6mrmHwgNpx7FVH", - "symbol": "wOCEAN_v1", - "name": "Ocean Protocol (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AF7Dv5Vzi1dT2fLnz4ysiRQ6FxGN1M6mrmHwgNpx7FVH/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x967da4048cD07aB37855c090aAF366e4ce1b9F48", - "assetContract": "https://etherscan.io/address/0x967da4048cD07aB37855c090aAF366e4ce1b9F48", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "ocean-protocol" - } - }, - { - "chainId": 101, - "address": "3UeKTABxz9XexDtyKq646rSQvx8GVpKNwfMoKKfxsTsF", - "symbol": "wBBTC_v1", - "name": "Binance Wrapped BTC (Wormhole v1)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3UeKTABxz9XexDtyKq646rSQvx8GVpKNwfMoKKfxsTsF/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x9BE89D2a4cd102D8Fecc6BF9dA793be995C22541", - "assetContract": "https://etherscan.io/address/0x9BE89D2a4cd102D8Fecc6BF9dA793be995C22541", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "binance-wrapped-btc" - } - }, - { - "chainId": 101, - "address": "DsGbyCHbG4vSWBqAprR2eWuUAg8fXAgYkWL9psgvYZn5", - "symbol": "wUNISTAKE_v1", - "name": "Unistake (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DsGbyCHbG4vSWBqAprR2eWuUAg8fXAgYkWL9psgvYZn5/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x9Ed8e7C9604790F7Ec589F99b94361d8AAB64E5E", - "assetContract": "https://etherscan.io/address/0x9Ed8e7C9604790F7Ec589F99b94361d8AAB64E5E", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "unistake" - } - }, - { - "chainId": 101, - "address": "GBvv3jn9u6pZqPd2GVnQ7BKJzLwQnEWe4ci9k359PN9Z", - "symbol": "wMKR_v1", - "name": "MakerDAO (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GBvv3jn9u6pZqPd2GVnQ7BKJzLwQnEWe4ci9k359PN9Z/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x9f8F72aA9304c8B593d555F12eF6589cC3A579A2", - "assetContract": "https://etherscan.io/address/0x9f8F72aA9304c8B593d555F12eF6589cC3A579A2", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "maker" - } - }, - { - "chainId": 101, - "address": "53ETjuzUNHG8c7rZ2hxQLQfN5R6tEYtdYwNQsa68xFUk", - "symbol": "wFARM_v1", - "name": "FARM Reward Token (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/53ETjuzUNHG8c7rZ2hxQLQfN5R6tEYtdYwNQsa68xFUk/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xa0246c9032bC3A600820415aE600c6388619A14D", - "assetContract": "https://etherscan.io/address/0xa0246c9032bC3A600820415aE600c6388619A14D", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "harvest-finance" - } - }, - { - "chainId": 101, - "address": "FVsXUnbhifqJ4LiXQEbpUtXVdB8T5ADLKqSs5t1oc54F", - "symbol": "wUSDC_v1", - "name": "USD Coin (Wormhole v1)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FVsXUnbhifqJ4LiXQEbpUtXVdB8T5ADLKqSs5t1oc54F/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", - "assetContract": "https://etherscan.io/address/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "usd-coin" - } - }, - { - "chainId": 101, - "address": "EjBpnWzWZeW1PKzfCszLdHgENZLZDoTNaEmz8BddpWJx", - "symbol": "wANT_v1", - "name": "Aragon Network Token (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EjBpnWzWZeW1PKzfCszLdHgENZLZDoTNaEmz8BddpWJx/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xa117000000f279D81A1D3cc75430fAA017FA5A2e", - "assetContract": "https://etherscan.io/address/0xa117000000f279D81A1D3cc75430fAA017FA5A2e", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "aragon" - } - }, - { - "chainId": 101, - "address": "Rs4LHZ4WogZCAkCzfsKJib5LLnYL6xcVAfTcLQiSjg2", - "symbol": "wNPXS_v1", - "name": "Pundi X Token (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Rs4LHZ4WogZCAkCzfsKJib5LLnYL6xcVAfTcLQiSjg2/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xA15C7Ebe1f07CaF6bFF097D8a589fb8AC49Ae5B3", - "assetContract": "https://etherscan.io/address/0xA15C7Ebe1f07CaF6bFF097D8a589fb8AC49Ae5B3", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "pundi-x" - } - }, - { - "chainId": 101, - "address": "65ribugkb42AANKYrEeuruhhfXffyE4jY22FUxFbpW7C", - "symbol": "wRFOX_v1", - "name": "RFOX (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/65ribugkb42AANKYrEeuruhhfXffyE4jY22FUxFbpW7C/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xa1d6Df714F91DeBF4e0802A542E13067f31b8262", - "assetContract": "https://etherscan.io/address/0xa1d6Df714F91DeBF4e0802A542E13067f31b8262", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "redfox-labs-2" - } - }, - { - "chainId": 101, - "address": "T2mo6dnFiutu26KMuCMSjCLBB4ofWvQ3qBJGEMc3JSe", - "symbol": "wMTA_v1", - "name": "Meta (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/T2mo6dnFiutu26KMuCMSjCLBB4ofWvQ3qBJGEMc3JSe/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xa3BeD4E1c75D00fa6f4E5E6922DB7261B5E9AcD2", - "assetContract": "https://etherscan.io/address/0xa3BeD4E1c75D00fa6f4E5E6922DB7261B5E9AcD2", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "meta" - } - }, - { - "chainId": 101, - "address": "HC8SaUm9rhvVZE5ZwBWiUhFAnCuG8byd5FxKYdpFm5MR", - "symbol": "wRBC_v1", - "name": "Rubic (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HC8SaUm9rhvVZE5ZwBWiUhFAnCuG8byd5FxKYdpFm5MR/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xA4EED63db85311E22dF4473f87CcfC3DaDCFA3E3", - "assetContract": "https://etherscan.io/address/0xA4EED63db85311E22dF4473f87CcfC3DaDCFA3E3", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "rubic" - } - }, - { - "chainId": 101, - "address": "9DdtKWoK8cBfLSLhHXHFZzzhxp4rdwHbFEAis8n5AsfQ", - "symbol": "wNOIA_v1", - "name": "NOIA Token (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9DdtKWoK8cBfLSLhHXHFZzzhxp4rdwHbFEAis8n5AsfQ/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xa8c8CfB141A3bB59FEA1E2ea6B79b5ECBCD7b6ca", - "assetContract": "https://etherscan.io/address/0xa8c8CfB141A3bB59FEA1E2ea6B79b5ECBCD7b6ca", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "noia-network" - } - }, - { - "chainId": 101, - "address": "DTQStP2z4DRqbNHRxtwThAujr9aPFPsv4y2kkXTVLVvb", - "symbol": "wCEL_v1", - "name": "Celsius (Wormhole v1)", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DTQStP2z4DRqbNHRxtwThAujr9aPFPsv4y2kkXTVLVvb/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xaaAEBE6Fe48E54f431b0C390CfaF0b017d09D42d", - "assetContract": "https://etherscan.io/address/0xaaAEBE6Fe48E54f431b0C390CfaF0b017d09D42d", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "celsius-degree-token" - } - }, - { - "chainId": 101, - "address": "59NPV18vAbTgwC9aeEGikrmX3EbZHMEMkZfvcsHBNFr9", - "symbol": "wCWS_v1", - "name": "Crowns (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/59NPV18vAbTgwC9aeEGikrmX3EbZHMEMkZfvcsHBNFr9/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xaC0104Cca91D167873B8601d2e71EB3D4D8c33e0", - "assetContract": "https://etherscan.io/address/0xaC0104Cca91D167873B8601d2e71EB3D4D8c33e0", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "crowns" - } - }, - { - "chainId": 101, - "address": "4811JP9i35zgAxSFZjGXQwew6xd1qSBE4xdMFik2J14Z", - "symbol": "wROOM_v1", - "name": "OptionRoom Token (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4811JP9i35zgAxSFZjGXQwew6xd1qSBE4xdMFik2J14Z/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xAd4f86a25bbc20FfB751f2FAC312A0B4d8F88c64", - "assetContract": "https://etherscan.io/address/0xAd4f86a25bbc20FfB751f2FAC312A0B4d8F88c64", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "option-room" - } - }, - { - "chainId": 101, - "address": "2VAdvHWMpzMnDYYn64MgqLNpGQ19iCiusCet8JLMtxU5", - "symbol": "wYOP_v1", - "name": "YOP (Wormhole v1)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2VAdvHWMpzMnDYYn64MgqLNpGQ19iCiusCet8JLMtxU5/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xAE1eaAE3F627AAca434127644371b67B18444051", - "assetContract": "https://etherscan.io/address/0xAE1eaAE3F627AAca434127644371b67B18444051", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "yield-optimization-platform" - } - }, - { - "chainId": 101, - "address": "AKiTcEWZarsnUbKkwQVRjJni5eqwiNeBQsJ3nrADacT4", - "symbol": "wLGCY_v1", - "name": "LGCY Network (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AKiTcEWZarsnUbKkwQVRjJni5eqwiNeBQsJ3nrADacT4/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xaE697F994Fc5eBC000F8e22EbFfeE04612f98A0d", - "assetContract": "https://etherscan.io/address/0xaE697F994Fc5eBC000F8e22EbFfeE04612f98A0d", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "lgcy-network" - } - }, - { - "chainId": 101, - "address": "4kPHTMfSD1k3SytAMKEVRWH5ip6WD5U52tC5q6TuXUNU", - "symbol": "wRFuel_v1", - "name": "Rio Fuel Token (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4kPHTMfSD1k3SytAMKEVRWH5ip6WD5U52tC5q6TuXUNU/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xaf9f549774ecEDbD0966C52f250aCc548D3F36E5", - "assetContract": "https://etherscan.io/address/0xaf9f549774ecEDbD0966C52f250aCc548D3F36E5", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "rio-defi" - } - }, - { - "chainId": 101, - "address": "E1w2uKRsVJeDf1Qqbk7DDKEDe7NCYwh8ySgqCaEZ4BTC", - "symbol": "wMAHA_v1", - "name": "MahaDAO (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/E1w2uKRsVJeDf1Qqbk7DDKEDe7NCYwh8ySgqCaEZ4BTC/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xB4d930279552397bbA2ee473229f89Ec245bc365", - "assetContract": "https://etherscan.io/address/0xB4d930279552397bbA2ee473229f89Ec245bc365", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "mahadao" - } - }, - { - "chainId": 101, - "address": "4psmnTirimNyPEPEZtkQkdEPJagTXS3a7wsu1XN9MYK3", - "symbol": "wRPL_v1", - "name": "Rocket Pool (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4psmnTirimNyPEPEZtkQkdEPJagTXS3a7wsu1XN9MYK3/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xB4EFd85c19999D84251304bDA99E90B92300Bd93", - "assetContract": "https://etherscan.io/address/0xB4EFd85c19999D84251304bDA99E90B92300Bd93", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "rocket-pool" - } - }, - { - "chainId": 101, - "address": "FrhQauNRm7ecom9FRprNcyz58agDe5ujAbAtA9NG6jtU", - "symbol": "wNEXO_v1", - "name": "Nexo (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FrhQauNRm7ecom9FRprNcyz58agDe5ujAbAtA9NG6jtU/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xB62132e35a6c13ee1EE0f84dC5d40bad8d815206", - "assetContract": "https://etherscan.io/address/0xB62132e35a6c13ee1EE0f84dC5d40bad8d815206", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "nexo" - } - }, - { - "chainId": 101, - "address": "6G7X1B2f9F7KWcHxS66mn3ax6VPE2UMZud44RX3BzfVo", - "symbol": "BEHZAT", - "name": "Behzat Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6G7X1B2f9F7KWcHxS66mn3ax6VPE2UMZud44RX3BzfVo/logo.png", - "tags": ["Token"], - "extensions": { - "twitter": "https://twitter.com/Tunay32718753" - } - }, - { - "chainId": 101, - "address": "AoU75vwpnWEVvfarxRALjzRc8vS9UdDhRMkwoDimt9ss", - "symbol": "wSFI_v1", - "name": "Spice (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AoU75vwpnWEVvfarxRALjzRc8vS9UdDhRMkwoDimt9ss/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xb753428af26E81097e7fD17f40c88aaA3E04902c", - "assetContract": "https://etherscan.io/address/0xb753428af26E81097e7fD17f40c88aaA3E04902c", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "saffron-finance" - } - }, - { - "chainId": 101, - "address": "CRZuALvCYjPLB65WFLHh9JkmPWK5C81TXpy2aEEaCjr3", - "symbol": "wSTBZ_v1", - "name": "Stabilize Token (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CRZuALvCYjPLB65WFLHh9JkmPWK5C81TXpy2aEEaCjr3/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xB987D48Ed8f2C468D52D6405624EADBa5e76d723", - "assetContract": "https://etherscan.io/address/0xB987D48Ed8f2C468D52D6405624EADBa5e76d723", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "stabilize" - } - }, - { - "chainId": 101, - "address": "HPYXGSdAwyK5GwmuivL8gDdUVRChtgXq6SRat44k4Pat", - "symbol": "wBAL_v1", - "name": "Balancer (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HPYXGSdAwyK5GwmuivL8gDdUVRChtgXq6SRat44k4Pat/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xba100000625a3754423978a60c9317c58a424e3D", - "assetContract": "https://etherscan.io/address/0xba100000625a3754423978a60c9317c58a424e3D", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "balancer" - } - }, - { - "chainId": 101, - "address": "AV7NgJV2BsgEukzUTrcUMz3LD37xLcLtygFig5WJ3kQN", - "symbol": "wBAND_v1", - "name": "BandToken (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AV7NgJV2BsgEukzUTrcUMz3LD37xLcLtygFig5WJ3kQN/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xBA11D00c5f74255f56a5E366F4F77f5A186d7f55", - "assetContract": "https://etherscan.io/address/0xBA11D00c5f74255f56a5E366F4F77f5A186d7f55", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "band-protocol" - } - }, - { - "chainId": 101, - "address": "4obZok5FFUcQXQoV39hhcqk9xSmo4WnP9wnrNCk1g5BC", - "symbol": "wSWFL_v1", - "name": "Swapfolio (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4obZok5FFUcQXQoV39hhcqk9xSmo4WnP9wnrNCk1g5BC/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xBa21Ef4c9f433Ede00badEFcC2754B8E74bd538A", - "assetContract": "https://etherscan.io/address/0xBa21Ef4c9f433Ede00badEFcC2754B8E74bd538A", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "swapfolio" - } - }, - { - "chainId": 101, - "address": "HCP8hGKS6fUGfTA1tQxBKzbXuQk7yktzz71pY8LXVJyR", - "symbol": "wLRC_v1", - "name": "LoopringCoin V2 (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HCP8hGKS6fUGfTA1tQxBKzbXuQk7yktzz71pY8LXVJyR/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xBBbbCA6A901c926F240b89EacB641d8Aec7AEafD", - "assetContract": "https://etherscan.io/address/0xBBbbCA6A901c926F240b89EacB641d8Aec7AEafD", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "loopring" - } - }, - { - "chainId": 101, - "address": "7kpzQByqsfmZSX5Y71YtncBvuhFVFJBLUvJKqqNMfT8P", - "symbol": "TSK", - "name": "TaskDapp", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7kpzQByqsfmZSX5Y71YtncBvuhFVFJBLUvJKqqNMfT8P/logo.svg", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/task_dapp", - "website": "https://taskdapp.io" - } - }, - { - "chainId": 101, - "address": "9sNArcS6veh7DLEo7Y1ZSbBCYtkuPVE6S3HhVrcWR2Zw", - "symbol": "wPERP_v1", - "name": "Perpetual (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9sNArcS6veh7DLEo7Y1ZSbBCYtkuPVE6S3HhVrcWR2Zw/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xbC396689893D065F41bc2C6EcbeE5e0085233447", - "assetContract": "https://etherscan.io/address/0xbC396689893D065F41bc2C6EcbeE5e0085233447", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "perpetual-protocol" - } - }, - { - "chainId": 101, - "address": "3XnhArdJydrpbr9Nbj8wNUaozPL9WAo9YDyNWakhTm9X", - "symbol": "wCOMP_v1", - "name": "Compound (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3XnhArdJydrpbr9Nbj8wNUaozPL9WAo9YDyNWakhTm9X/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xc00e94Cb662C3520282E6f5717214004A7f26888", - "assetContract": "https://etherscan.io/address/0xc00e94Cb662C3520282E6f5717214004A7f26888", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "compound" - } - }, - { - "chainId": 101, - "address": "CPLNm9UMKfiJKiySQathV99yeSgTVjPDZx4ucFrbp2MD", - "symbol": "wSNX_v1", - "name": "Synthetix Network Token (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CPLNm9UMKfiJKiySQathV99yeSgTVjPDZx4ucFrbp2MD/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xC011a73ee8576Fb46F5E1c5751cA3B9Fe0af2a6F", - "assetContract": "https://etherscan.io/address/0xC011a73ee8576Fb46F5E1c5751cA3B9Fe0af2a6F", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "synthetix-network-token" - } - }, - { - "chainId": 101, - "address": "D6eVKSfLdioqo2zG8LbQYFU2gf66FrjKA7afCYNo1GHt", - "symbol": "wDUCK_v1", - "name": "DLP Duck Token (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/D6eVKSfLdioqo2zG8LbQYFU2gf66FrjKA7afCYNo1GHt/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xC0bA369c8Db6eB3924965e5c4FD0b4C1B91e305F", - "assetContract": "https://etherscan.io/address/0xC0bA369c8Db6eB3924965e5c4FD0b4C1B91e305F", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "dlp-duck-token" - } - }, - { - "chainId": 101, - "address": "9PwPi3DAf9Dy4Y6qJmUzF6fX9CjNwScBidsYqJmcApF8", - "symbol": "wCHAIN_v1", - "name": "Chain Games (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9PwPi3DAf9Dy4Y6qJmUzF6fX9CjNwScBidsYqJmcApF8/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xC4C2614E694cF534D407Ee49F8E44D125E4681c4", - "assetContract": "https://etherscan.io/address/0xC4C2614E694cF534D407Ee49F8E44D125E4681c4", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "chain-games" - } - }, - { - "chainId": 101, - "address": "BmxZ1pghpcoyT7aykj7D1o4AxWirTqvD7zD2tNngjirT", - "symbol": "wGRT_v1", - "name": "Graph Token (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BmxZ1pghpcoyT7aykj7D1o4AxWirTqvD7zD2tNngjirT/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xc944E90C64B2c07662A292be6244BDf05Cda44a7", - "assetContract": "https://etherscan.io/address/0xc944E90C64B2c07662A292be6244BDf05Cda44a7", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "the-graph" - } - }, - { - "chainId": 101, - "address": "FMr15arp651N6fR2WEL36pCMBnFecHcN6wDxne2Vf3SK", - "symbol": "wROOT_v1", - "name": "RootKit (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FMr15arp651N6fR2WEL36pCMBnFecHcN6wDxne2Vf3SK/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xCb5f72d37685C3D5aD0bB5F982443BC8FcdF570E", - "assetContract": "https://etherscan.io/address/0xCb5f72d37685C3D5aD0bB5F982443BC8FcdF570E", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "rootkit" - } - }, - { - "chainId": 101, - "address": "E9X7rKAGfSh1gsHC6qh5MVLkDzRcT64KQbjzvHnc5zEq", - "symbol": "wSWAP_v1", - "name": "TrustSwap Token (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/E9X7rKAGfSh1gsHC6qh5MVLkDzRcT64KQbjzvHnc5zEq/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xCC4304A31d09258b0029eA7FE63d032f52e44EFe", - "assetContract": "https://etherscan.io/address/0xCC4304A31d09258b0029eA7FE63d032f52e44EFe", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "trustswap" - } - }, - { - "chainId": 101, - "address": "5NEENV1mNvu7MfNNtKuGSDC8zoNStq1tuLkDXFtv6rZd", - "symbol": "wTVK_v1", - "name": "Terra Virtua Kolect (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5NEENV1mNvu7MfNNtKuGSDC8zoNStq1tuLkDXFtv6rZd/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xd084B83C305daFD76AE3E1b4E1F1fe2eCcCb3988", - "assetContract": "https://etherscan.io/address/0xd084B83C305daFD76AE3E1b4E1F1fe2eCcCb3988", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "terra-virtua-kolect" - } - }, - { - "chainId": 101, - "address": "5ZXLGj7onpitgtREJNYb51DwDPddvqV1YLC8jn2sgz48", - "symbol": "wOMG_v1", - "name": "OMG Network (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5ZXLGj7onpitgtREJNYb51DwDPddvqV1YLC8jn2sgz48/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xd26114cd6EE289AccF82350c8d8487fedB8A0C07", - "assetContract": "https://etherscan.io/address/0xd26114cd6EE289AccF82350c8d8487fedB8A0C07", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "omisego" - } - }, - { - "chainId": 101, - "address": "2Xf2yAXJfg82sWwdLUo2x9mZXy6JCdszdMZkcF1Hf4KV", - "symbol": "wLUNA_v1", - "name": "Wrapped LUNA Token (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Xf2yAXJfg82sWwdLUo2x9mZXy6JCdszdMZkcF1Hf4KV/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xd2877702675e6cEb975b4A1dFf9fb7BAF4C91ea9", - "assetContract": "https://etherscan.io/address/0xd2877702675e6cEb975b4A1dFf9fb7BAF4C91ea9", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "wrapped-terra" - } - }, - { - "chainId": 101, - "address": "5Ro6JxJ4NjSTEppdX2iXUYgWkAEF1dcs9gqMX99E2vkL", - "symbol": "wBONDLY_v1", - "name": "Bondly Token (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5Ro6JxJ4NjSTEppdX2iXUYgWkAEF1dcs9gqMX99E2vkL/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xD2dDa223b2617cB616c1580db421e4cFAe6a8a85", - "assetContract": "https://etherscan.io/address/0xD2dDa223b2617cB616c1580db421e4cFAe6a8a85", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "bondly" - } - }, - { - "chainId": 101, - "address": "5jFzUEqWLnvGvKWb1Pji9nWVYy5vLG2saoXCyVNWEdEi", - "symbol": "wDETS_v1", - "name": "Dextrust (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5jFzUEqWLnvGvKWb1Pji9nWVYy5vLG2saoXCyVNWEdEi/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xd379700999F4805Ce80aa32DB46A94dF64561108", - "assetContract": "https://etherscan.io/address/0xd379700999F4805Ce80aa32DB46A94dF64561108", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "dextrust" - } - }, - { - "chainId": 101, - "address": "BV5tm1uCRWQCQKNgQVFnkseqAjxpmbJkRCXvzFWBdgMp", - "symbol": "wAMPL_v1", - "name": "Ampleforth (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BV5tm1uCRWQCQKNgQVFnkseqAjxpmbJkRCXvzFWBdgMp/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xD46bA6D942050d489DBd938a2C909A5d5039A161", - "assetContract": "https://etherscan.io/address/0xD46bA6D942050d489DBd938a2C909A5d5039A161", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "ampleforth" - } - }, - { - "chainId": 101, - "address": "2PSvGigDY4MVUmv51bBiARBMcHBtXcUBnx5V9BwWbbi2", - "symbol": "wPOLK_v1", - "name": "Polkamarkets (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2PSvGigDY4MVUmv51bBiARBMcHBtXcUBnx5V9BwWbbi2/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xD478161C952357F05f0292B56012Cd8457F1cfbF", - "assetContract": "https://etherscan.io/address/0xD478161C952357F05f0292B56012Cd8457F1cfbF", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "polkamarkets" - } - }, - { - "chainId": 101, - "address": "ApmXkxXCASdxRf3Ln6Ni7oAZ7E6CX1CcJAD8A5qBdhSm", - "symbol": "wCRV_v1", - "name": "Curve DAO Token (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ApmXkxXCASdxRf3Ln6Ni7oAZ7E6CX1CcJAD8A5qBdhSm/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xD533a949740bb3306d119CC777fa900bA034cd52", - "assetContract": "https://etherscan.io/address/0xD533a949740bb3306d119CC777fa900bA034cd52", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "curve-dao-token" - } - }, - { - "chainId": 101, - "address": "DWECGzR56MruYJyo5g5QpoxZbFoydt3oWUkkDsVhxXzs", - "symbol": "wMEME_v1", - "name": "MEME (Wormhole v1)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DWECGzR56MruYJyo5g5QpoxZbFoydt3oWUkkDsVhxXzs/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xD5525D397898e5502075Ea5E830d8914f6F0affe", - "assetContract": "https://etherscan.io/address/0xD5525D397898e5502075Ea5E830d8914f6F0affe", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "degenerator" - } - }, - { - "chainId": 101, - "address": "3Y2wTtM4kCX8uUSLrKJ8wpajCu1C9LaWWAd7b7Nb2BDw", - "symbol": "wEXNT_v1", - "name": "ExNetwork Community Token (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3Y2wTtM4kCX8uUSLrKJ8wpajCu1C9LaWWAd7b7Nb2BDw/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xD6c67B93a7b248dF608a653d82a100556144c5DA", - "assetContract": "https://etherscan.io/address/0xD6c67B93a7b248dF608a653d82a100556144c5DA", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "exnetwork-token" - } - }, - { - "chainId": 101, - "address": "9w97GdWUYYaamGwdKMKZgGzPduZJkiFizq4rz5CPXRv2", - "symbol": "wUSDT_v1", - "name": "Tether USD (Wormhole v1)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9w97GdWUYYaamGwdKMKZgGzPduZJkiFizq4rz5CPXRv2/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xdAC17F958D2ee523a2206206994597C13D831ec7", - "assetContract": "https://etherscan.io/address/0xdAC17F958D2ee523a2206206994597C13D831ec7", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "tether" - } - }, - { - "chainId": 101, - "address": "CqWSJtkMMY16q9QLnQxktM1byzVHGRr8b6LCPuZnEeiL", - "symbol": "wYLD_v1", - "name": "Yield (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CqWSJtkMMY16q9QLnQxktM1byzVHGRr8b6LCPuZnEeiL/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xDcB01cc464238396E213a6fDd933E36796eAfF9f", - "assetContract": "https://etherscan.io/address/0xDcB01cc464238396E213a6fDd933E36796eAfF9f", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "yield" - } - }, - { - "chainId": 101, - "address": "26ZzQVGZruwcZPs2sqb8n9ojKt2cviUjHcMjstFtK6ow", - "symbol": "wKNC_v1", - "name": "Kyber Network Crystal (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/26ZzQVGZruwcZPs2sqb8n9ojKt2cviUjHcMjstFtK6ow/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xdd974D5C2e2928deA5F71b9825b8b646686BD200", - "assetContract": "https://etherscan.io/address/0xdd974D5C2e2928deA5F71b9825b8b646686BD200", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "kyber-network" - } - }, - { - "chainId": 101, - "address": "HHoHTtntq2kiBPENyVM1DTP7pNrkBXX2Jye29PSyz3qf", - "symbol": "wCOTI_v1", - "name": "COTI Token (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HHoHTtntq2kiBPENyVM1DTP7pNrkBXX2Jye29PSyz3qf/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xDDB3422497E61e13543BeA06989C0789117555c5", - "assetContract": "https://etherscan.io/address/0xDDB3422497E61e13543BeA06989C0789117555c5", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "coti" - } - }, - { - "chainId": 101, - "address": "4sEpUsJ6uJZYi6A2da8EGjKPacRSqYJaPJffPnTqoWVv", - "symbol": "wINJ_v1", - "name": "Injective Token (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4sEpUsJ6uJZYi6A2da8EGjKPacRSqYJaPJffPnTqoWVv/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xe28b3B32B6c345A34Ff64674606124Dd5Aceca30", - "assetContract": "https://etherscan.io/address/0xe28b3B32B6c345A34Ff64674606124Dd5Aceca30", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "injective-protocol" - } - }, - { - "chainId": 101, - "address": "G2jrxYSoCSzmohxERa2JzSJMuRM4kiNvRA3DnCv7Lzcz", - "symbol": "wZRX_v1", - "name": "0x Protocol Token (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/G2jrxYSoCSzmohxERa2JzSJMuRM4kiNvRA3DnCv7Lzcz/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xE41d2489571d322189246DaFA5ebDe1F4699F498", - "assetContract": "https://etherscan.io/address/0xE41d2489571d322189246DaFA5ebDe1F4699F498", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "0x" - } - }, - { - "chainId": 101, - "address": "3bkBFHyof411hGBdcsiM1KSDdErw63Xoj3eLB8yNknB4", - "symbol": "wSUPER_v1", - "name": "SuperFarm (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3bkBFHyof411hGBdcsiM1KSDdErw63Xoj3eLB8yNknB4/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xe53EC727dbDEB9E2d5456c3be40cFF031AB40A55", - "assetContract": "https://etherscan.io/address/0xe53EC727dbDEB9E2d5456c3be40cFF031AB40A55", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "superfarm" - } - }, - { - "chainId": 101, - "address": "7kkkoa1MB93ELm3vjvyC8GJ65G7eEgLhfaHU58riJUCx", - "symbol": "waEth_v1", - "name": "aEthereum (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7kkkoa1MB93ELm3vjvyC8GJ65G7eEgLhfaHU58riJUCx/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xE95A203B1a91a908F9B9CE46459d101078c2c3cb", - "assetContract": "https://etherscan.io/address/0xE95A203B1a91a908F9B9CE46459d101078c2c3cb", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "ankreth" - } - }, - { - "chainId": 101, - "address": "EK6iyvvqvQtsWYcySrZVHkXjCLX494r9PhnDWJaX1CPu", - "symbol": "wrenBTC_v1", - "name": "renBTC (Wormhole v1)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EK6iyvvqvQtsWYcySrZVHkXjCLX494r9PhnDWJaX1CPu/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xEB4C2781e4ebA804CE9a9803C67d0893436bB27D", - "assetContract": "https://etherscan.io/address/0xEB4C2781e4ebA804CE9a9803C67d0893436bB27D", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "renbtc" - } - }, - { - "chainId": 101, - "address": "B2m4B527oLo5WFWLgy2MitP66azhEW2puaazUAuvNgqZ", - "symbol": "wDMG_v1", - "name": "DMM: Governance (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/B2m4B527oLo5WFWLgy2MitP66azhEW2puaazUAuvNgqZ/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xEd91879919B71bB6905f23af0A68d231EcF87b14", - "assetContract": "https://etherscan.io/address/0xEd91879919B71bB6905f23af0A68d231EcF87b14", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "dmm-governance" - } - }, - { - "chainId": 101, - "address": "H3iuZNRwaqPsnGUGU5YkDwTU3hQMkzC32hxDko8EtzZw", - "symbol": "wHEZ_v1", - "name": "Hermez Network Token (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/H3iuZNRwaqPsnGUGU5YkDwTU3hQMkzC32hxDko8EtzZw/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xEEF9f339514298C6A857EfCfC1A762aF84438dEE", - "assetContract": "https://etherscan.io/address/0xEEF9f339514298C6A857EfCfC1A762aF84438dEE", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "hermez-network-token" - } - }, - { - "chainId": 101, - "address": "DL7873Hud4eMdGScQFD7vrbC6fzWAMQ2LMuoZSn4zUry", - "symbol": "wRLY_v1", - "name": "Rally (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DL7873Hud4eMdGScQFD7vrbC6fzWAMQ2LMuoZSn4zUry/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xf1f955016EcbCd7321c7266BccFB96c68ea5E49b", - "assetContract": "https://etherscan.io/address/0xf1f955016EcbCd7321c7266BccFB96c68ea5E49b", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "rally-2" - } - }, - { - "chainId": 101, - "address": "HPYP2WUVM8iRDG5XLzTBvcPqVcvY7eWj2Q2fEfwR51zX", - "symbol": "SC", - "name": "Swyft Coin", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/FinancialBlock/SwyftToken/Swyft.png", - "tags": ["utility-token", "meme-token", "social-token"], - "extensions": { - "website": "http://swyftcoin.com" - } - }, - { - "chainId": 101, - "address": "FN3v94TgcDjae6r9TccXdrThZTy7Ya5b1PMFFdCNo9Fr", - "symbol": "FAC", - "name": "Financial Aid Coin", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/FinancialBlock/SwyftToken/FAC.png", - "tags": ["utility-token", "meme-token", "social-token"], - "extensions": { - "website": "http://financialaidcoin.com" - } - }, - { - "chainId": 101, - "address": "8ArKbnnDiq8eRR8hZ1eULMjd2iMAD8AqwyVJRAX7mHQo", - "symbol": "wFCL_v1", - "name": "Fractal Protocol Token (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8ArKbnnDiq8eRR8hZ1eULMjd2iMAD8AqwyVJRAX7mHQo/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xF4d861575ecC9493420A3f5a14F85B13f0b50EB3", - "assetContract": "https://etherscan.io/address/0xF4d861575ecC9493420A3f5a14F85B13f0b50EB3", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "fractal" - } - }, - { - "chainId": 101, - "address": "ZWGxcTgJCNGQqZn6vFdknwj4AFFsYRZ4SDJuhRn3J1T", - "symbol": "wAXS_v1", - "name": "Axie Infinity (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ZWGxcTgJCNGQqZn6vFdknwj4AFFsYRZ4SDJuhRn3J1T/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xF5D669627376EBd411E34b98F19C868c8ABA5ADA", - "assetContract": "https://etherscan.io/address/0xF5D669627376EBd411E34b98F19C868c8ABA5ADA", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "axie-infinity" - } - }, - { - "chainId": 101, - "address": "PEjUEMHFRtfajio8YHKZdUruW1vTzGmz6F7NngjYuou", - "symbol": "wENJ_v1", - "name": "Enjin Coin (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/PEjUEMHFRtfajio8YHKZdUruW1vTzGmz6F7NngjYuou/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xF629cBd94d3791C9250152BD8dfBDF380E2a3B9c", - "assetContract": "https://etherscan.io/address/0xF629cBd94d3791C9250152BD8dfBDF380E2a3B9c", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "enjincoin" - } - }, - { - "chainId": 101, - "address": "2cW5deMKeR97C7csq1aMMWUa5RNWkpQFz8tumxk4ZV8w", - "symbol": "wYLD_v1", - "name": "Yield (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2cW5deMKeR97C7csq1aMMWUa5RNWkpQFz8tumxk4ZV8w/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xF94b5C5651c888d928439aB6514B93944eEE6F48", - "assetContract": "https://etherscan.io/address/0xF94b5C5651c888d928439aB6514B93944eEE6F48", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "yield-app" - } - }, - { - "chainId": 101, - "address": "FR5qPX4gbKHPyKMK7Cey6dHZ7wtqmqRogYPJo6bpd5Uw", - "symbol": "wDDIM_v1", - "name": "DuckDaoDime (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FR5qPX4gbKHPyKMK7Cey6dHZ7wtqmqRogYPJo6bpd5Uw/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xFbEEa1C75E4c4465CB2FCCc9c6d6afe984558E20", - "assetContract": "https://etherscan.io/address/0xFbEEa1C75E4c4465CB2FCCc9c6d6afe984558E20", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "duckdaodime" - } - }, - { - "chainId": 101, - "address": "8HCWFQA2GsA6Nm2L5jidM3mus7NeeQ8wp1ri3XFF9WWH", - "symbol": "wRARI_v1", - "name": "Rarible (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8HCWFQA2GsA6Nm2L5jidM3mus7NeeQ8wp1ri3XFF9WWH/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xFca59Cd816aB1eaD66534D82bc21E7515cE441CF", - "assetContract": "https://etherscan.io/address/0xFca59Cd816aB1eaD66534D82bc21E7515cE441CF", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "rarible" - } - }, - { - "chainId": 101, - "address": "Egrv6hURf5o68xJ1AGYeRv8RNj2nXJVuSoA5wwiSALcN", - "symbol": "wAMP_v1", - "name": "Amp (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Egrv6hURf5o68xJ1AGYeRv8RNj2nXJVuSoA5wwiSALcN/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xfF20817765cB7f73d4bde2e66e067E58D11095C2", - "assetContract": "https://etherscan.io/address/0xfF20817765cB7f73d4bde2e66e067E58D11095C2", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "amp-token" - } - }, - { - "chainId": 101, - "address": "GXMaB6jm5cdoQgb65YpkEu61eDYtod3PuVwYYXdZZJ9r", - "symbol": "wFSW_v1", - "name": "FalconSwap Token (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GXMaB6jm5cdoQgb65YpkEu61eDYtod3PuVwYYXdZZJ9r/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xfffffffFf15AbF397dA76f1dcc1A1604F45126DB", - "assetContract": "https://etherscan.io/address/0xfffffffFf15AbF397dA76f1dcc1A1604F45126DB", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "fsw-token" - } - }, - { - "chainId": 101, - "address": "AJ1W9A9N9dEMdVyoDiam2rV44gnBm2csrPDP7xqcapgX", - "symbol": "wBUSD_v1", - "name": "Binance USD (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AJ1W9A9N9dEMdVyoDiam2rV44gnBm2csrPDP7xqcapgX/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x4Fabb145d64652a948d72533023f6E7A623C7C53", - "assetContract": "https://etherscan.io/address/0x4Fabb145d64652a948d72533023f6E7A623C7C53", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "binance-usd" - } - }, - { - "chainId": 101, - "address": "2VmKuXMwdzouMndWcK7BK2951tBEtYVmGsdU4dXbjyaY", - "symbol": "waDAI_v1", - "name": "Aave Interest bearing DAI (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2VmKuXMwdzouMndWcK7BK2951tBEtYVmGsdU4dXbjyaY/logo.svg", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xfC1E690f61EFd961294b3e1Ce3313fBD8aa4f85d", - "assetContract": "https://etherscan.io/address/0xfC1E690f61EFd961294b3e1Ce3313fBD8aa4f85d", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "aave-dai-v1" - } - }, - { - "chainId": 101, - "address": "AXvWVviBmySSdghmuomYHqYB3AZn7NmAWrHYHKKPJxoL", - "symbol": "waTUSD_v1", - "name": "Aave Interest bearing TUSD (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AXvWVviBmySSdghmuomYHqYB3AZn7NmAWrHYHKKPJxoL/logo.svg", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x4DA9b813057D04BAef4e5800E36083717b4a0341", - "assetContract": "https://etherscan.io/address/0x4DA9b813057D04BAef4e5800E36083717b4a0341", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "aave-tusd-v1" - } - }, - { - "chainId": 101, - "address": "AkaisFPmasQYZUJsZLD9wPEo2KA7aCRqyRawX18ZRzGr", - "symbol": "waUSDC_v1", - "name": "Aave Interest bearing USDC (Wormhole v1)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AkaisFPmasQYZUJsZLD9wPEo2KA7aCRqyRawX18ZRzGr/logo.svg", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x9bA00D6856a4eDF4665BcA2C2309936572473B7E", - "assetContract": "https://etherscan.io/address/0x9bA00D6856a4eDF4665BcA2C2309936572473B7E", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "aave-usdc-v1" - } - }, - { - "chainId": 101, - "address": "FZfQtWMoTQ51Z4jxvHfmFcqj4862u9GzmugBnZUuWqR5", - "symbol": "waUSDT_v1", - "name": "Aave Interest bearing USDT (Wormhole v1)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FZfQtWMoTQ51Z4jxvHfmFcqj4862u9GzmugBnZUuWqR5/logo.svg", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x71fc860F7D3A592A4a98740e39dB31d25db65ae8", - "assetContract": "https://etherscan.io/address/0x71fc860F7D3A592A4a98740e39dB31d25db65ae8", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "aave-usdt-v1" - } - }, - { - "chainId": 101, - "address": "BMrbF8DZ9U5KGdJ4F2MJbH5d6KPi5FQVp7EqmLrhDe1f", - "symbol": "waSUSD_v1", - "name": "Aave Interest bearing SUSD (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BMrbF8DZ9U5KGdJ4F2MJbH5d6KPi5FQVp7EqmLrhDe1f/logo.svg", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x625aE63000f46200499120B906716420bd059240", - "assetContract": "https://etherscan.io/address/0x625aE63000f46200499120B906716420bd059240", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "aave-susd-v1" - } - }, - { - "chainId": 101, - "address": "Fzx4N1xJPDZENAhrAaH79k2izT9CFbfnDEcpcWjiusdY", - "symbol": "waLEND_v1", - "name": "Aave Interest bearing LEND (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Fzx4N1xJPDZENAhrAaH79k2izT9CFbfnDEcpcWjiusdY/logo.svg", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x7D2D3688Df45Ce7C552E19c27e007673da9204B8", - "assetContract": "https://etherscan.io/address/0x7D2D3688Df45Ce7C552E19c27e007673da9204B8", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678" - } - }, - { - "chainId": 101, - "address": "GCdDiVgZnkWCAnGktUsjhoho2CHab9JfrRy3Q5W51zvC", - "symbol": "waBAT_v1", - "name": "Aave Interest bearing BAT (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GCdDiVgZnkWCAnGktUsjhoho2CHab9JfrRy3Q5W51zvC/logo.svg", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xE1BA0FB44CCb0D11b80F92f4f8Ed94CA3fF51D00", - "assetContract": "https://etherscan.io/address/0xE1BA0FB44CCb0D11b80F92f4f8Ed94CA3fF51D00", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "aave-bat-v1" - } - }, - { - "chainId": 101, - "address": "FBrfFh7fb7xKfyBMJA32KufMjEkgSgY4AuzLXFKdJFRj", - "symbol": "waETH_v1", - "name": "Aave Interest bearing ETH (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FBrfFh7fb7xKfyBMJA32KufMjEkgSgY4AuzLXFKdJFRj/logo.svg", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x3a3A65aAb0dd2A17E3F1947bA16138cd37d08c04", - "assetContract": "https://etherscan.io/address/0x3a3A65aAb0dd2A17E3F1947bA16138cd37d08c04", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "aave-eth-v1" - } - }, - { - "chainId": 101, - "address": "Adp88WrQDgExPTu26DdBnbN2ffWMkXLxwqzjTdfRQiJi", - "symbol": "waLINK_v1", - "name": "Aave Interest bearing LINK (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Adp88WrQDgExPTu26DdBnbN2ffWMkXLxwqzjTdfRQiJi/logo.svg", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xA64BD6C70Cb9051F6A9ba1F163Fdc07E0DfB5F84", - "assetContract": "https://etherscan.io/address/0xA64BD6C70Cb9051F6A9ba1F163Fdc07E0DfB5F84", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "aave-link-v1" - } - }, - { - "chainId": 101, - "address": "3p67dqghWn6reQcVCqNBkufrpU1gtA1ZRAYja6GMXySG", - "symbol": "waKNC_v1", - "name": "Aave Interest bearing KNC (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3p67dqghWn6reQcVCqNBkufrpU1gtA1ZRAYja6GMXySG/logo.svg", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x9D91BE44C06d373a8a226E1f3b146956083803eB", - "assetContract": "https://etherscan.io/address/0x9D91BE44C06d373a8a226E1f3b146956083803eB", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "aave-knc-v1" - } - }, - { - "chainId": 101, - "address": "A4qYX1xuewaBL9SeZnwA3We6MhG8TYcTceHAJpk7Etdt", - "symbol": "waREP_v1", - "name": "Aave Interest bearing REP (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/A4qYX1xuewaBL9SeZnwA3We6MhG8TYcTceHAJpk7Etdt/logo.svg", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x71010A9D003445aC60C4e6A7017c1E89A477B438", - "assetContract": "https://etherscan.io/address/0x71010A9D003445aC60C4e6A7017c1E89A477B438", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678" - } - }, - { - "chainId": 101, - "address": "3iTtcKUVa5ouzwNZFc3SasuAKkY2ZuMxLERRcWfxQVN3", - "symbol": "waMKR_v1", - "name": "Aave Interest bearing MKR (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3iTtcKUVa5ouzwNZFc3SasuAKkY2ZuMxLERRcWfxQVN3/logo.svg", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x7deB5e830be29F91E298ba5FF1356BB7f8146998", - "assetContract": "https://etherscan.io/address/0x7deB5e830be29F91E298ba5FF1356BB7f8146998", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "aave-mkr-v1" - } - }, - { - "chainId": 101, - "address": "EMS6TrCU8uBMumZukRSShGS1yzHGqYd3S8hW2sYULX3T", - "symbol": "waMANA_v1", - "name": "Aave Interest bearing MANA (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EMS6TrCU8uBMumZukRSShGS1yzHGqYd3S8hW2sYULX3T/logo.svg", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x6FCE4A401B6B80ACe52baAefE4421Bd188e76F6f", - "assetContract": "https://etherscan.io/address/0x6FCE4A401B6B80ACe52baAefE4421Bd188e76F6f", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "aave-mana-v1" - } - }, - { - "chainId": 101, - "address": "qhqzfH7AjeukUgqyPXncWHFXTBebFNu5QQUrzhJaLB4", - "symbol": "waZRX_v1", - "name": "Aave Interest bearing ZRX (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/qhqzfH7AjeukUgqyPXncWHFXTBebFNu5QQUrzhJaLB4/logo.svg", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x6Fb0855c404E09c47C3fBCA25f08d4E41f9F062f", - "assetContract": "https://etherscan.io/address/0x6Fb0855c404E09c47C3fBCA25f08d4E41f9F062f", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "aave-zrx-v1" - } - }, - { - "chainId": 101, - "address": "FeU2J26AfMqh2mh7Cf4Lw1HRueAvAkZYxGr8njFNMeQ2", - "symbol": "waSNX_v1", - "name": "Aave Interest bearing SNX (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FeU2J26AfMqh2mh7Cf4Lw1HRueAvAkZYxGr8njFNMeQ2/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x328C4c80BC7aCa0834Db37e6600A6c49E12Da4DE", - "assetContract": "https://etherscan.io/address/0x328C4c80BC7aCa0834Db37e6600A6c49E12Da4DE", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "aave-snx-v1" - } - }, - { - "chainId": 101, - "address": "GveRVvWTUH1s26YxyjUnXh1J5mMdu5crC2K2uQy26KXi", - "symbol": "waWBTC_v1", - "name": "Aave Interest bearing WBTC (Wormhole v1)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GveRVvWTUH1s26YxyjUnXh1J5mMdu5crC2K2uQy26KXi/logo.svg", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xFC4B8ED459e00e5400be803A9BB3954234FD50e3", - "assetContract": "https://etherscan.io/address/0xFC4B8ED459e00e5400be803A9BB3954234FD50e3", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "aave-wbtc-v1" - } - }, - { - "chainId": 101, - "address": "F2WgoHLwV4pfxN4WrUs2q6KkmFCsNorGYQ82oaPNUFLP", - "symbol": "waBUSD_v1", - "name": "Aave Interest bearing Binance USD (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/F2WgoHLwV4pfxN4WrUs2q6KkmFCsNorGYQ82oaPNUFLP/logo.svg", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x6Ee0f7BB50a54AB5253dA0667B0Dc2ee526C30a8", - "assetContract": "https://etherscan.io/address/0x6Ee0f7BB50a54AB5253dA0667B0Dc2ee526C30a8", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "aave-busd-v1" - } - }, - { - "chainId": 101, - "address": "3rNUQJgvfZ5eFsZvCkvdYcbd9ZzS6YmtwQsoUTFKmVd4", - "symbol": "waENJ_v1", - "name": "Aave Interest bearing ENJ (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3rNUQJgvfZ5eFsZvCkvdYcbd9ZzS6YmtwQsoUTFKmVd4/logo.svg", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x712DB54daA836B53Ef1EcBb9c6ba3b9Efb073F40", - "assetContract": "https://etherscan.io/address/0x712DB54daA836B53Ef1EcBb9c6ba3b9Efb073F40", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "aave-enj-v1" - } - }, - { - "chainId": 101, - "address": "BHh8nyDwdUG4uyyQYNqGXGLHPyb83R6Y2fqJrNVKtTsT", - "symbol": "waREN_v1", - "name": "Aave Interest bearing REN (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BHh8nyDwdUG4uyyQYNqGXGLHPyb83R6Y2fqJrNVKtTsT/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x69948cC03f478B95283F7dbf1CE764d0fc7EC54C", - "assetContract": "https://etherscan.io/address/0x69948cC03f478B95283F7dbf1CE764d0fc7EC54C", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "aave-ren-v1" - } - }, - { - "chainId": 101, - "address": "EE58FVYG1UoY6Givy3K3GSRde9sHMj6X1BnocHBtd3sz", - "symbol": "waYFI_v1", - "name": "Aave Interest bearing YFI (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EE58FVYG1UoY6Givy3K3GSRde9sHMj6X1BnocHBtd3sz/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x12e51E77DAAA58aA0E9247db7510Ea4B46F9bEAd", - "assetContract": "https://etherscan.io/address/0x12e51E77DAAA58aA0E9247db7510Ea4B46F9bEAd", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "ayfi" - } - }, - { - "chainId": 101, - "address": "8aYsiHR6oVTAcFUzdXDhaPkgRbn4QYRCkdk3ATmAmY4p", - "symbol": "waAAVE_v1", - "name": "Aave Interest bearing Aave Token (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8aYsiHR6oVTAcFUzdXDhaPkgRbn4QYRCkdk3ATmAmY4p/logo.svg", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xba3D9687Cf50fE253cd2e1cFeEdE1d6787344Ed5", - "assetContract": "https://etherscan.io/address/0xba3D9687Cf50fE253cd2e1cFeEdE1d6787344Ed5", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678" - } - }, - { - "chainId": 101, - "address": "8kwCLkWbv4qTJPcbSV65tWdQmjURjBGRSv6VtC1JTiL8", - "symbol": "waUNI_v1", - "name": "Aave Interest bearing Uniswap (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8kwCLkWbv4qTJPcbSV65tWdQmjURjBGRSv6VtC1JTiL8/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xB124541127A0A657f056D9Dd06188c4F1b0e5aab", - "assetContract": "https://etherscan.io/address/0xB124541127A0A657f056D9Dd06188c4F1b0e5aab", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678" - } - }, - { - "chainId": 101, - "address": "9NDu1wdjZ7GiY7foAXhia9h1wQU45oTUzyMZKJ31V7JA", - "symbol": "wstkAAVE_v1", - "name": "Staked Aave (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9NDu1wdjZ7GiY7foAXhia9h1wQU45oTUzyMZKJ31V7JA/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x4da27a545c0c5B758a6BA100e3a049001de870f5", - "assetContract": "https://etherscan.io/address/0x4da27a545c0c5B758a6BA100e3a049001de870f5", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678" - } - }, - { - "chainId": 101, - "address": "GNQ1Goajm3Za8uC1Eptt2yfsrbnkZh2eMJoqxg54sj3o", - "symbol": "wUniDAIETH_v1", - "name": "Uniswap DAI LP (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GNQ1Goajm3Za8uC1Eptt2yfsrbnkZh2eMJoqxg54sj3o/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x2a1530C4C41db0B0b2bB646CB5Eb1A67b7158667", - "assetContract": "https://etherscan.io/address/0x2a1530C4C41db0B0b2bB646CB5Eb1A67b7158667", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678" - } - }, - { - "chainId": 101, - "address": "7NFin546WNvWkhtfftfY77z8C1TrxLbUcKmw5TpHGGtC", - "symbol": "wUniUSDCETH_v1", - "name": "Uniswap USDC LP (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7NFin546WNvWkhtfftfY77z8C1TrxLbUcKmw5TpHGGtC/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x97deC872013f6B5fB443861090ad931542878126", - "assetContract": "https://etherscan.io/address/0x97deC872013f6B5fB443861090ad931542878126", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678" - } - }, - { - "chainId": 101, - "address": "7gersKTtU65ERNBNTZKjYgKf7HypR7PDMprcuhQJChaq", - "symbol": "wUnisETHETH_v1", - "name": "Uniswap sETH LP (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7gersKTtU65ERNBNTZKjYgKf7HypR7PDMprcuhQJChaq/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xe9Cf7887b93150D4F2Da7dFc6D502B216438F244", - "assetContract": "https://etherscan.io/address/0xe9Cf7887b93150D4F2Da7dFc6D502B216438F244", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678" - } - }, - { - "chainId": 101, - "address": "4aqNtSCr77eiEZJ9u9BhPErjEMju6FFdLeBKkE1pdxuK", - "symbol": "wUniLENDETH_v1", - "name": "Uniswap LEND LP (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4aqNtSCr77eiEZJ9u9BhPErjEMju6FFdLeBKkE1pdxuK/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xcaA7e4656f6A2B59f5f99c745F91AB26D1210DCe", - "assetContract": "https://etherscan.io/address/0xcaA7e4656f6A2B59f5f99c745F91AB26D1210DCe", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678" - } - }, - { - "chainId": 101, - "address": "FDdoYCHwFghBSbnN6suvFR3VFw6kAzfhfGpkAQAGPLC3", - "symbol": "wUniMKRETH_v1", - "name": "Uniswap MKR LP (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FDdoYCHwFghBSbnN6suvFR3VFw6kAzfhfGpkAQAGPLC3/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x2C4Bd064b998838076fa341A83d007FC2FA50957", - "assetContract": "https://etherscan.io/address/0x2C4Bd064b998838076fa341A83d007FC2FA50957", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678" - } - }, - { - "chainId": 101, - "address": "FSSTfbb1vh1TRe8Ja64hC65QTc7pPUhwHh5uTAWj5haH", - "symbol": "wUniLINKETH_v1", - "name": "Uniswap LINK LP (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FSSTfbb1vh1TRe8Ja64hC65QTc7pPUhwHh5uTAWj5haH/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xF173214C720f58E03e194085B1DB28B50aCDeeaD", - "assetContract": "https://etherscan.io/address/0xF173214C720f58E03e194085B1DB28B50aCDeeaD", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678" - } - }, - { - "chainId": 101, - "address": "Aci9xBGywrgBxQoFnL6LCoCYuX5k6AqaYhimgSZ1Fhrk", - "symbol": "waUniETH_v1", - "name": "Aave Interest bearing UniETH (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Aci9xBGywrgBxQoFnL6LCoCYuX5k6AqaYhimgSZ1Fhrk/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x6179078872605396Ee62960917128F9477a5DdbB", - "assetContract": "https://etherscan.io/address/0x6179078872605396Ee62960917128F9477a5DdbB", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678" - } - }, - { - "chainId": 101, - "address": "GqHK99sW4ym6zy6Kdoh8f7sb2c3qhtB3WRqeyPbAYfmy", - "symbol": "waUniDAI_v1", - "name": "Aave Interest bearing UniDAI (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GqHK99sW4ym6zy6Kdoh8f7sb2c3qhtB3WRqeyPbAYfmy/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x048930eec73c91B44b0844aEACdEBADC2F2b6efb", - "assetContract": "https://etherscan.io/address/0x048930eec73c91B44b0844aEACdEBADC2F2b6efb", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678" - } - }, - { - "chainId": 101, - "address": "4e4TpGVJMYiz5UBrAXuNmiVJ9yvc7ppJeAn8sXmbnmDi", - "symbol": "waUniUSDC_v1", - "name": "Aave Interest bearing UniUSDC (Wormhole v1)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4e4TpGVJMYiz5UBrAXuNmiVJ9yvc7ppJeAn8sXmbnmDi/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xe02b2Ad63eFF3Ac1D5827cBd7AB9DD3DaC4f4AD0", - "assetContract": "https://etherscan.io/address/0xe02b2Ad63eFF3Ac1D5827cBd7AB9DD3DaC4f4AD0", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678" - } - }, - { - "chainId": 101, - "address": "H36ykN443TZ6pC8oryicCYr5YB1em4fuSyezu5aoskNv", - "symbol": "METARARITY", - "name": "METARARITY", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/H36ykN443TZ6pC8oryicCYr5YB1em4fuSyezu5aoskNv/logo.png", - "extensions": { - "serumV3Usdc": "GL2M3XXPxA3BxpbMTy7j7ajTfRUreJNEvQhUnjU1r9fF", - "twitter": "https://twitter.com/metararity", - "website": "https://metararity.com" - } - }, - { - "chainId": 101, - "address": "49LoAnQQdo9171zfcWRUoQLYSScrxXobbuwt14xjvfVm", - "symbol": "waUniUSDT_v1", - "name": "Aave Interest bearing UniUSDT (Wormhole v1)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/49LoAnQQdo9171zfcWRUoQLYSScrxXobbuwt14xjvfVm/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xb977ee318010A5252774171494a1bCB98E7fab65", - "assetContract": "https://etherscan.io/address/0xb977ee318010A5252774171494a1bCB98E7fab65", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678" - } - }, - { - "chainId": 101, - "address": "CvG3gtKYJtKRzEUgMeb42xnd8HDjESgLtyJqQ2kuLncp", - "symbol": "waUniDAIETH_v1", - "name": "Aave Interest bearing UniDAIETH (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CvG3gtKYJtKRzEUgMeb42xnd8HDjESgLtyJqQ2kuLncp/logo.svg", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xBbBb7F2aC04484F7F04A2C2C16f20479791BbB44", - "assetContract": "https://etherscan.io/address/0xBbBb7F2aC04484F7F04A2C2C16f20479791BbB44", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678" - } - }, - { - "chainId": 101, - "address": "GSv5ECZaMfaceZK4WKKzA4tKVDkqtfBASECcmYFWcy4G", - "symbol": "waUniUSDCETH_v1", - "name": "Aave Interest bearing UniUSDCETH (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GSv5ECZaMfaceZK4WKKzA4tKVDkqtfBASECcmYFWcy4G/logo.svg", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x1D0e53A0e524E3CC92C1f0f33Ae268FfF8D7E7a5", - "assetContract": "https://etherscan.io/address/0x1D0e53A0e524E3CC92C1f0f33Ae268FfF8D7E7a5", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678" - } - }, - { - "chainId": 101, - "address": "7LUdsedi7qpTJGnFpZo6mWqVtKKpccr9XrQGxJ2xUDPT", - "symbol": "waUniSETHETH_v1", - "name": "Aave Interest bearing UniSETHETH (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7LUdsedi7qpTJGnFpZo6mWqVtKKpccr9XrQGxJ2xUDPT/logo.svg", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x84BBcaB430717ff832c3904fa6515f97fc63C76F", - "assetContract": "https://etherscan.io/address/0x84BBcaB430717ff832c3904fa6515f97fc63C76F", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678" - } - }, - { - "chainId": 101, - "address": "Hc1zHQxg1k2JVwvuv3kqbCyZDEJYfDdNftBMab4EMUx9", - "symbol": "waUniLENDETH_v1", - "name": "Aave Interest bearing UniLENDETH (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Hc1zHQxg1k2JVwvuv3kqbCyZDEJYfDdNftBMab4EMUx9/logo.svg", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xc88ebbf7C523f38Ef3eB8A151273C0F0dA421e63", - "assetContract": "https://etherscan.io/address/0xc88ebbf7C523f38Ef3eB8A151273C0F0dA421e63", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678" - } - }, - { - "chainId": 101, - "address": "9PejEmx6NKDHgf6jpgAWwZsibURKifBakjzDQdtCtAXT", - "symbol": "waUniMKRETH_v1", - "name": "Aave Interest bearing UniMKRETH (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9PejEmx6NKDHgf6jpgAWwZsibURKifBakjzDQdtCtAXT/logo.svg", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x8c69f7A4C9B38F1b48005D216c398Efb2F1Ce3e4", - "assetContract": "https://etherscan.io/address/0x8c69f7A4C9B38F1b48005D216c398Efb2F1Ce3e4", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678" - } - }, - { - "chainId": 101, - "address": "KcHygDp4o7ENsHjevYM4T3u6R7KHa5VyvkJ7kpmJcYo", - "symbol": "waUniLINKETH_v1", - "name": "Aave Interest bearing UniLINKETH (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/KcHygDp4o7ENsHjevYM4T3u6R7KHa5VyvkJ7kpmJcYo/logo.svg", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x9548DB8b1cA9b6c757485e7861918b640390169c", - "assetContract": "https://etherscan.io/address/0x9548DB8b1cA9b6c757485e7861918b640390169c", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678" - } - }, - { - "chainId": 101, - "address": "GNPAF84ZEtKYyfuY2fg8tZVwse7LpTSeyYPSyEKFqa2Y", - "symbol": "waUSDT_v1", - "name": "Aave interest bearing USDT (Wormhole v1)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GNPAF84ZEtKYyfuY2fg8tZVwse7LpTSeyYPSyEKFqa2Y/logo.svg", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x3Ed3B47Dd13EC9a98b44e6204A523E766B225811", - "assetContract": "https://etherscan.io/address/0x3Ed3B47Dd13EC9a98b44e6204A523E766B225811", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "aave-usdt" - } - }, - { - "chainId": 101, - "address": "3QTknQ3i27rDKm5hvBaScFLQ34xX9N7J7XfEFwy27qbZ", - "symbol": "waWBTC_v1", - "name": "Aave interest bearing WBTC (Wormhole v1)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3QTknQ3i27rDKm5hvBaScFLQ34xX9N7J7XfEFwy27qbZ/logo.svg", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x9ff58f4fFB29fA2266Ab25e75e2A8b3503311656", - "assetContract": "https://etherscan.io/address/0x9ff58f4fFB29fA2266Ab25e75e2A8b3503311656", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "aave-wbtc" - } - }, - { - "chainId": 101, - "address": "EbpkofeWyiQouGyxQAgXxEyGtjgq13NSucX3CNvucNpb", - "symbol": "waWETH_v1", - "name": "Aave interest bearing WETH (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EbpkofeWyiQouGyxQAgXxEyGtjgq13NSucX3CNvucNpb/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x030bA81f1c18d280636F32af80b9AAd02Cf0854e", - "assetContract": "https://etherscan.io/address/0x030bA81f1c18d280636F32af80b9AAd02Cf0854e", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678" - } - }, - { - "chainId": 101, - "address": "67uaa3Z7SX7GC6dqSTjpJLnySLXZpCAK9MHMi3232Bfb", - "symbol": "waYFI_v1", - "name": "Aave interest bearing YFI (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/67uaa3Z7SX7GC6dqSTjpJLnySLXZpCAK9MHMi3232Bfb/logo.svg", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x5165d24277cD063F5ac44Efd447B27025e888f37", - "assetContract": "https://etherscan.io/address/0x5165d24277cD063F5ac44Efd447B27025e888f37", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678" - } - }, - { - "chainId": 101, - "address": "9xS6et5uvQ64QsmaGMfzfXrwTsfYPjwEWuiPnBGFgfw", - "symbol": "waZRX_v1", - "name": "Aave interest bearing ZRX (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9xS6et5uvQ64QsmaGMfzfXrwTsfYPjwEWuiPnBGFgfw/logo.svg", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xDf7FF54aAcAcbFf42dfe29DD6144A69b629f8C9e", - "assetContract": "https://etherscan.io/address/0xDf7FF54aAcAcbFf42dfe29DD6144A69b629f8C9e", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "aave-zrx" - } - }, - { - "chainId": 101, - "address": "2TZ8s2FwtWqJrWpdFsSf2uM2Fvjw474n6HhTdTEWoLor", - "symbol": "waUNI_v1", - "name": "Aave interest bearing UNI (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2TZ8s2FwtWqJrWpdFsSf2uM2Fvjw474n6HhTdTEWoLor/logo.svg", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xB9D7CB55f463405CDfBe4E90a6D2Df01C2B92BF1", - "assetContract": "https://etherscan.io/address/0xB9D7CB55f463405CDfBe4E90a6D2Df01C2B92BF1", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678" - } - }, - { - "chainId": 101, - "address": "G1o2fHZXyPCeAEcY4o6as7SmVaUu65DRhcq1S4Cfap9T", - "symbol": "waAAVE_v1", - "name": "Aave interest bearing AAVE (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/G1o2fHZXyPCeAEcY4o6as7SmVaUu65DRhcq1S4Cfap9T/logo.svg", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xFFC97d72E13E01096502Cb8Eb52dEe56f74DAD7B", - "assetContract": "https://etherscan.io/address/0xFFC97d72E13E01096502Cb8Eb52dEe56f74DAD7B", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678" - } - }, - { - "chainId": 101, - "address": "8PeWkyvCDHpSgT5oiGFgZQtXSRBij7ZFLJTHAGBntRDH", - "symbol": "waBAT_v1", - "name": "Aave interest bearing BAT (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8PeWkyvCDHpSgT5oiGFgZQtXSRBij7ZFLJTHAGBntRDH/logo.svg", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x05Ec93c0365baAeAbF7AefFb0972ea7ECdD39CF1", - "assetContract": "https://etherscan.io/address/0x05Ec93c0365baAeAbF7AefFb0972ea7ECdD39CF1", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "aave-bat" - } - }, - { - "chainId": 101, - "address": "67opsuaXQ3JRSJ1mmF7aPLSq6JaZcwAmXwcMzUN5PSMv", - "symbol": "waBUSD_v1", - "name": "Aave interest bearing BUSD (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/67opsuaXQ3JRSJ1mmF7aPLSq6JaZcwAmXwcMzUN5PSMv/logo.svg", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xA361718326c15715591c299427c62086F69923D9", - "assetContract": "https://etherscan.io/address/0xA361718326c15715591c299427c62086F69923D9", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "aave-busd" - } - }, - { - "chainId": 101, - "address": "4JrrHRS56i9GZkSmGaCY3ZsxMo3JEqQviU64ki7ZJPak", - "symbol": "waDAI_v1", - "name": "Aave interest bearing DAI (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4JrrHRS56i9GZkSmGaCY3ZsxMo3JEqQviU64ki7ZJPak/logo.svg", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x028171bCA77440897B824Ca71D1c56caC55b68A3", - "assetContract": "https://etherscan.io/address/0x028171bCA77440897B824Ca71D1c56caC55b68A3", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "aave-dai" - } - }, - { - "chainId": 101, - "address": "3LmfKjsSU9hdxfZfcr873DMNR5nnrk8EvdueXg1dTSin", - "symbol": "waENJ_v1", - "name": "Aave interest bearing ENJ (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3LmfKjsSU9hdxfZfcr873DMNR5nnrk8EvdueXg1dTSin/logo.svg", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xaC6Df26a590F08dcC95D5a4705ae8abbc88509Ef", - "assetContract": "https://etherscan.io/address/0xaC6Df26a590F08dcC95D5a4705ae8abbc88509Ef", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "aave-enj" - } - }, - { - "chainId": 101, - "address": "7VD2Gosm34hB7kughTqu1N3sW92hq3XwKLTi1N1tdKrj", - "symbol": "waKNC_v1", - "name": "Aave interest bearing KNC (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7VD2Gosm34hB7kughTqu1N3sW92hq3XwKLTi1N1tdKrj/logo.svg", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x39C6b3e42d6A679d7D776778Fe880BC9487C2EDA", - "assetContract": "https://etherscan.io/address/0x39C6b3e42d6A679d7D776778Fe880BC9487C2EDA", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "aave-knc" - } - }, - { - "chainId": 101, - "address": "4erbVWFvdvS5P8ews7kUjqfpCQbA8vurnWyvRLsnZJgv", - "symbol": "waLINK_v1", - "name": "Aave interest bearing LINK (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4erbVWFvdvS5P8ews7kUjqfpCQbA8vurnWyvRLsnZJgv/logo.svg", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xa06bC25B5805d5F8d82847D191Cb4Af5A3e873E0", - "assetContract": "https://etherscan.io/address/0xa06bC25B5805d5F8d82847D191Cb4Af5A3e873E0", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "aave-link" - } - }, - { - "chainId": 101, - "address": "AXJWqG4SpAEwkMjKYkarKwv6Qfz5rLU3cwt5KtrDAAYe", - "symbol": "waMANA_v1", - "name": "Aave interest bearing MANA (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AXJWqG4SpAEwkMjKYkarKwv6Qfz5rLU3cwt5KtrDAAYe/logo.svg", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xa685a61171bb30d4072B338c80Cb7b2c865c873E", - "assetContract": "https://etherscan.io/address/0xa685a61171bb30d4072B338c80Cb7b2c865c873E", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "aave-mana" - } - }, - { - "chainId": 101, - "address": "4kJmfagJzQFuwto5RX6f1xScWYbEVBzEpdjmiqTCnzjJ", - "symbol": "waMKR_v1", - "name": "Aave interest bearing MKR (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4kJmfagJzQFuwto5RX6f1xScWYbEVBzEpdjmiqTCnzjJ/logo.svg", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xc713e5E149D5D0715DcD1c156a020976e7E56B88", - "assetContract": "https://etherscan.io/address/0xc713e5E149D5D0715DcD1c156a020976e7E56B88", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "aave-mkr" - } - }, - { - "chainId": 101, - "address": "DN8jPo8YZTXhLMyDMKcnwFuKqY8wfn2UrpX8ct4rc8Bc", - "symbol": "waREN_v1", - "name": "Aave interest bearing REN (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DN8jPo8YZTXhLMyDMKcnwFuKqY8wfn2UrpX8ct4rc8Bc/logo.svg", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xCC12AbE4ff81c9378D670De1b57F8e0Dd228D77a", - "assetContract": "https://etherscan.io/address/0xCC12AbE4ff81c9378D670De1b57F8e0Dd228D77a", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "aave-ren" - } - }, - { - "chainId": 101, - "address": "HWbJZXJ7s1D1zi5P7yVgRUmZPXvYSFv6vsYU765Ti422", - "symbol": "waSNX_v1", - "name": "Aave interest bearing SNX (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HWbJZXJ7s1D1zi5P7yVgRUmZPXvYSFv6vsYU765Ti422/logo.svg", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x35f6B052C598d933D69A4EEC4D04c73A191fE6c2", - "assetContract": "https://etherscan.io/address/0x35f6B052C598d933D69A4EEC4D04c73A191fE6c2", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "aave-snx" - } - }, - { - "chainId": 101, - "address": "2LForywWWpHzmR5NjSEyF1kcw9ffyLuJX7V7hne2fHfY", - "symbol": "waSUSD_v1", - "name": "Aave interest bearing SUSD (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2LForywWWpHzmR5NjSEyF1kcw9ffyLuJX7V7hne2fHfY/logo.svg", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x6C5024Cd4F8A59110119C56f8933403A539555EB", - "assetContract": "https://etherscan.io/address/0x6C5024Cd4F8A59110119C56f8933403A539555EB", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "aave-susd" - } - }, - { - "chainId": 101, - "address": "Badj3S29a2u1auxmijwg5vGjhPLb1K6WLPoigtWjKPXp", - "symbol": "waTUSD_v1", - "name": "Aave interest bearing TUSD (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Badj3S29a2u1auxmijwg5vGjhPLb1K6WLPoigtWjKPXp/logo.svg", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x101cc05f4A51C0319f570d5E146a8C625198e636", - "assetContract": "https://etherscan.io/address/0x101cc05f4A51C0319f570d5E146a8C625198e636", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "aave-tusd" - } - }, - { - "chainId": 101, - "address": "BZCPpva12M9SqJgcpf8jtP9Si6rMANFoUR3i7nchha7M", - "symbol": "waUSDC_v1", - "name": "Aave interest bearing USDC (Wormhole v1)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BZCPpva12M9SqJgcpf8jtP9Si6rMANFoUR3i7nchha7M/logo.svg", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xBcca60bB61934080951369a648Fb03DF4F96263C", - "assetContract": "https://etherscan.io/address/0xBcca60bB61934080951369a648Fb03DF4F96263C", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "aave-usdc" - } - }, - { - "chainId": 101, - "address": "D3ajQoyBGJz3JCXCPsxHZJbLQKGt9UgxLavgurieGNcD", - "symbol": "wSDT_v1", - "name": "Stake DAO Token (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/D3ajQoyBGJz3JCXCPsxHZJbLQKGt9UgxLavgurieGNcD/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x73968b9a57c6e53d41345fd57a6e6ae27d6cdb2f", - "assetContract": "https://etherscan.io/address/0x73968b9a57c6e53d41345fd57a6e6ae27d6cdb2f", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "stake-dao" - } - }, - { - "chainId": 101, - "address": "4pk3pf9nJDN1im1kNwWJN1ThjE8pCYCTexXYGyFjqKVf", - "symbol": "oDOP", - "name": "Dominican Pesos", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4pk3pf9nJDN1im1kNwWJN1ThjE8pCYCTexXYGyFjqKVf/logo.png", - "tags": ["stablecoin"], - "extensions": { - "website": "https://Odop.io/" - } - }, - { - "chainId": 101, - "address": "5kjfp2qfRbqCXTQeUYgHNnTLf13eHoKjC5hHynW9DvQE", - "symbol": "AAPE", - "name": "AAPE", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5kjfp2qfRbqCXTQeUYgHNnTLf13eHoKjC5hHynW9DvQE/logo.png", - "extensions": { - "website": "https://aape.io/" - } - }, - { - "chainId": 101, - "address": "5LkvF71ZicV2HhbwYio6XMiFxNv3VUn62eBQ2nppG5D", - "symbol": "CAPF", - "name": "Capital Fusion", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/capitalfusion/token-list/main/assets/mainnet/5LkvF71ZicV2HhbwYio6XMiFxNv3VUn62eBQ2nppG5D/logo.png", - "extensions": { - "website": "https://capitalfusion.io/" - } - }, - { - "chainId": 101, - "address": "3K6rftdAaQYMPunrtNRHgnK2UAtjm2JwyT2oCiTDouYE", - "symbol": "XCOPE", - "name": "XCOPE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3K6rftdAaQYMPunrtNRHgnK2UAtjm2JwyT2oCiTDouYE/logo.png", - "tags": ["trading", "index", "Algos"], - "extensions": { - "coingeckoId": "cope", - "serumV3Usdc": "7MpMwArporUHEGW7quUpkPZp5L5cHPs9eKUfKCdaPHq2", - "website": "https://www.unlimitedcope.com/" - } - }, - { - "chainId": 101, - "address": "8HGyAAB1yoM1ttS7pXjHMa3dukTFGQggnFFH3hJZgzQh", - "symbol": "COPE", - "name": "COPE", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8HGyAAB1yoM1ttS7pXjHMa3dukTFGQggnFFH3hJZgzQh/logo.png", - "tags": ["trading", "index", "Algos"], - "extensions": { - "coingeckoId": "cope", - "serumV3Usdc": "6fc7v3PmjZG9Lk2XTot6BywGyYLkBQuzuFKd4FpCsPxk", - "website": "https://www.unlimitedcope.com/" - } - }, - { - "chainId": 101, - "address": "2prC8tcVsXwVJAinhxd2zeMeWMWaVyzPoQeLKyDZRFKd", - "symbol": "MCAPS", - "name": "Mango Market Caps", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2prC8tcVsXwVJAinhxd2zeMeWMWaVyzPoQeLKyDZRFKd/logo.png", - "tags": ["mango"], - "extensions": { - "coingeckoId": "mango-market-caps", - "website": "https://initialcapoffering.com/" - } - }, - { - "chainId": 101, - "address": "2reKm5Y9rmAWfaw5jraYz1BXwGLHMofGMs3iNoBLt4VC", - "symbol": "DOCE", - "name": "Doce Finance", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2reKm5Y9rmAWfaw5jraYz1BXwGLHMofGMs3iNoBLt4VC/logo.png", - "extensions": { - "website": "https://swap.doce.finance/" - } - }, - { - "chainId": 101, - "address": "E1PvPRPQvZNivZbXRL61AEGr71npZQ5JGxh4aWX7q9QA", - "symbol": "INO", - "name": "NoGoalToken", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/E1PvPRPQvZNivZbXRL61AEGr71npZQ5JGxh4aWX7q9QA/logo.png", - "extensions": { - "discord": "https://discord.gg/mHS3qbBaZk", - "serumV3Usdc": "HyERWE8TEQmDX157oLEpwaTc59ECzmvjUgZhZ2RNtNdn", - "website": "http://token.nogoal.click/" - } - }, - { - "chainId": 101, - "address": "8PMHT4swUMtBzgHnh5U564N5sjPSiUz2cjEQzFnnP1Fo", - "symbol": "ROPE", - "name": "Rope Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8PMHT4swUMtBzgHnh5U564N5sjPSiUz2cjEQzFnnP1Fo/logo.svg", - "extensions": { - "coingeckoId": "rope-token", - "serumV3Usdc": "4Sg1g8U2ZuGnGYxAhc6MmX9MX7yZbrrraPkCQ9MdCPtF", - "waterfallbot": "https://bit.ly/ROPEwaterfall", - "website": "https://ropesolana.com/" - } - }, - { - "chainId": 101, - "address": "2XkWD6spByDUoR3VDEjPXz4kxFV8e1skwaRSBArRLG3a", - "symbol": "DROIDF", - "name": "DROID FINANCE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2XkWD6spByDUoR3VDEjPXz4kxFV8e1skwaRSBArRLG3a/logo.png", - "extensions": { - "website": "https://www.droid.finance/" - } - }, - { - "chainId": 101, - "address": "5dhkWqrq37F92jBmEyhQP1vbMkbVRz59V7288HH2wBC7", - "symbol": "SLOCK", - "name": "SOLLock", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5dhkWqrq37F92jBmEyhQP1vbMkbVRz59V7288HH2wBC7/logo.png", - "tags": ["utility-token"], - "extensions": { - "github": "https://github.com/SOLLock", - "telegram": "https://t.me/SOLLock", - "telegramAnnouncements": "https://t.me/SOLLockAnn", - "twitter": "https://twitter.com/SOLLockOfficial", - "website": "https://sollock.org/" - } - }, - { - "chainId": 101, - "address": "ETAtLmCmsoiEEKfNrHKJ2kYy3MoABhU6NQvpSfij5tDs", - "symbol": "MEDIA", - "name": "Media Network", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ETAtLmCmsoiEEKfNrHKJ2kYy3MoABhU6NQvpSfij5tDs/logo.png", - "tags": ["utility-token"], - "extensions": { - "coingeckoId": "media-network", - "serumV3Usdc": "FfiqqvJcVL7oCCu8WQUMHLUC2dnHQPAPjTdSzsERFWjb", - "waterfallbot": "https://bit.ly/MEDIAwaterfall", - "website": "https://media.network/" - } - }, - { - "chainId": 101, - "address": "StepAscQoEioFxxWGnh2sLBDFp9d8rvKz2Yp39iDpyT", - "symbol": "STEP", - "name": "Step", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/StepAscQoEioFxxWGnh2sLBDFp9d8rvKz2Yp39iDpyT/logo.png", - "tags": ["utility-token"], - "extensions": { - "coingeckoId": "step-finance", - "serumV3Usdc": "97qCB4cAVSTthvJu3eNoEx6AY6DLuRDtCoPm5Tdyg77S", - "twitter": "https://twitter.com/StepFinance_", - "waterfallbot": "https://bit.ly/STEPwaterfall", - "website": "https://step.finance/" - } - }, - { - "chainId": 101, - "address": "xStpgUCss9piqeFUk2iLVcvJEGhAdJxJQuwLkXP555G", - "symbol": "xSTEP", - "name": "Staked Step", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/xStpgUCss9piqeFUk2iLVcvJEGhAdJxJQuwLkXP555G/logo.svg", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/StepFinance_", - "waterfallbot": "https://bit.ly/STEPwaterfall", - "website": "https://step.finance/" - } - }, - { - "chainId": 102, - "address": "So11111111111111111111111111111111111111112", - "symbol": "wSOL", - "name": "Wrapped SOL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/So11111111111111111111111111111111111111112/logo.png", - "extensions": { - "coingeckoId": "solana", - "website": "https://www.solana.com/" - } - }, - { - "chainId": 102, - "address": "CpMah17kQEL2wqyMKt3mZBdTnZbkbfx4nqmQMFDP5vwp", - "symbol": "USDC", - "name": "USD Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CpMah17kQEL2wqyMKt3mZBdTnZbkbfx4nqmQMFDP5vwp/logo.png", - "tags": ["stablecoin"], - "extensions": { - "coingeckoId": "usd-coin", - "website": "https://www.centre.io/" - } - }, - { - "chainId": 101, - "address": "4UuGQgkD3rSeoXatXRWwRfRd21G87d5LiCfkVzNNv1Tt", - "symbol": "XSB", - "name": "Solareum", - "decimals": 9, - "logoURI": "https://solareum.app/icons/XSB-G.png", - "tags": ["community-token"], - "extensions": { - "telegram": "https://t.me/solareum_wallet", - "twitter": "https://twitter.com/solareum_wallet", - "website": "https://solareum.app" - } - }, - { - "chainId": 102, - "address": "Gmk71cM7j2RMorRsQrsyysM4HsByQx5PuDGtDdqGLWCS", - "symbol": "spSOL", - "name": "Stake pool SOL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Gmk71cM7j2RMorRsQrsyysM4HsByQx5PuDGtDdqGLWCS/logo.png", - "tags": ["stake-pool"], - "extensions": { - "website": "https://www.solana.com/" - } - }, - { - "chainId": 102, - "address": "2jQc2jDHVCewoWsQJK7JPLetP7UjqXvaFdno8rtrD8Kg", - "symbol": "sHOG", - "name": "sHOG", - "decimals": 6, - "logoURI": "", - "tags": ["stablecoin"] - }, - { - "chainId": 101, - "address": "7udMmYXh6cuWVY6qQVCd9b429wDVn2J71r5BdxHkQADY", - "symbol": "COBAN", - "name": "COBAN", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7udMmYXh6cuWVY6qQVCd9b429wDVn2J71r5BdxHkQADY/logo.png", - "extensions": { - "website": "https://coban.io" - } - }, - { - "chainId": 102, - "address": "ASpA3U8G2qHnyo6ag1jwtpZNj9E2MymbVDq6twi3ZvRN", - "symbol": "USDT_ILT", - "name": "USDT_ILT_Token_Test", - "decimals": 6, - "logoURI": "", - "tags": ["stablecoin"] - }, - { - "chainId": 103, - "address": "3MoHgE6bJ2Ak1tEvTt5SVgSN2oXiwt6Gk5s6wbBxdmmN", - "symbol": "USDT_ILT", - "name": "USDT_ILT_Token_Test", - "decimals": 6, - "logoURI": "", - "tags": ["stablecoin"] - }, - { - "chainId": 103, - "address": "zbLcPeHWQ7yQXT7fEYHeNBKGM3wdGhNYL9jryVpys5J", - "symbol": "VDC", - "name": "VDC Coin", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/zbLcPeHWQ7yQXT7fEYHeNBKGM3wdGhNYL9jryVpys5J/logo.png", - "tags": ["stablecoin"], - "extensions": { - "website": "https://vdcs.io" - } - }, - { - "chainId": 103, - "address": "5Ct5qBYm2u7qB14iQcmLwnx5nmC6GJGjZee39scBcrSR", - "symbol": "RBN", - "name": "Robin Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5Ct5qBYm2u7qB14iQcmLwnx5nmC6GJGjZee39scBcrSR/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://robin.com" - } - }, - { - "chainId": 103, - "address": "So11111111111111111111111111111111111111112", - "symbol": "SOL", - "name": "Wrapped SOL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/So11111111111111111111111111111111111111112/logo.png", - "extensions": { - "coingeckoId": "solana" - } - }, - { - "chainId": 103, - "address": "7Cab8z1Lz1bTC9bQNeY7VQoZw5a2YbZoxmvFSvPgcTEL", - "symbol": "LGGD", - "name": "LGG Dev Fan Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7Cab8z1Lz1bTC9bQNeY7VQoZw5a2YbZoxmvFSvPgcTEL/logo.png", - "tags": ["LGG"], - "extensions": { - "website": "https://lgg-hacks.art" - } - }, - { - "chainId": 103, - "address": "DEhAasscXF4kEGxFgJ3bq4PpVGp5wyUxMRvn6TzGVHaw", - "symbol": "XYZ", - "name": "XYZ Test", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DEhAasscXF4kEGxFgJ3bq4PpVGp5wyUxMRvn6TzGVHaw/logo.png" - }, - { - "chainId": 103, - "address": "2rg5syU3DSwwWs778FQ6yczDKhS14NM3vP4hqnkJ2jsM", - "symbol": "pSOL", - "name": "SOL stake pool", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2rg5syU3DSwwWs778FQ6yczDKhS14NM3vP4hqnkJ2jsM/logo.png" - }, - { - "chainId": 103, - "address": "SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt", - "symbol": "SRM", - "name": "Serum", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt/logo.png", - "extensions": { - "coingeckoId": "serum", - "website": "https://projectserum.com/" - } - }, - { - "chainId": 103, - "address": "StepAscQoEioFxxWGnh2sLBDFp9d8rvKz2Yp39iDpyT", - "symbol": "STEP", - "name": "Step", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/StepAscQoEioFxxWGnh2sLBDFp9d8rvKz2Yp39iDpyT/logo.png", - "tags": ["utility-token"], - "extensions": { - "coingeckoId": "step-finance", - "twitter": "https://twitter.com/StepFinance_", - "waterfallbot": "https://bit.ly/STEPwaterfall", - "website": "https://step.finance/" - } - }, - { - "chainId": 103, - "address": "xStpgUCss9piqeFUk2iLVcvJEGhAdJxJQuwLkXP555G", - "symbol": "xSTEP", - "name": "Staked Step", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/xStpgUCss9piqeFUk2iLVcvJEGhAdJxJQuwLkXP555G/logo.svg", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/StepFinance_", - "waterfallbot": "https://bit.ly/STEPwaterfall", - "website": "https://step.finance/" - } - }, - { - "chainId": 103, - "address": "7STJWT74tAZzhbNNPRH8WuGDy9GZg27968EwALWuezrH", - "symbol": "wSUSHI_v1", - "name": "SushiSwap (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7STJWT74tAZzhbNNPRH8WuGDy9GZg27968EwALWuezrH/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x6B3595068778DD592e39A122f4f5a5cF09C90fE2", - "assetContract": "https://etherscan.io/address/0x6B3595068778DD592e39A122f4f5a5cF09C90fE2", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "sushi", - "website": "https://sushi.com" - } - }, - { - "chainId": 103, - "address": "3aMbgP7aGsP1sVcFKc6j65zu7UiziP57SMFzf6ptiCSX", - "symbol": "sHOG", - "name": "Devnet StableHog", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3aMbgP7aGsP1sVcFKc6j65zu7UiziP57SMFzf6ptiCSX/logo.png", - "tags": ["stablecoin"] - }, - { - "chainId": 101, - "address": "3cXftQWJJEeoysZrhAEjpfCHe9tSKyhYG63xpbue8m3s", - "symbol": "Kreechures", - "name": "Kreechures", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3cXftQWJJEeoysZrhAEjpfCHe9tSKyhYG63xpbue8m3s/logo.svg", - "tags": ["nft"], - "extensions": { - "website": "https://www.kreechures.com/" - } - }, - { - "chainId": 101, - "address": "4DrV8khCoPS3sWRj6t1bb2DzT9jD4mZp6nc7Jisuuv1b", - "symbol": "SPD", - "name": "Solpad", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4DrV8khCoPS3sWRj6t1bb2DzT9jD4mZp6nc7Jisuuv1b/logo.png", - "extensions": { - "website": "https://www.solpad.io/" - } - }, - { - "chainId": 101, - "address": "7p7AMM6QoA8wPRKeqF87Pt51CRWmWvXPH5TBNMyDWhbH", - "symbol": "Kreechures", - "name": "Kreechures", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7p7AMM6QoA8wPRKeqF87Pt51CRWmWvXPH5TBNMyDWhbH/logo.svg", - "tags": ["nft"], - "extensions": { - "website": "https://www.kreechures.com/" - } - }, - { - "chainId": 101, - "address": "6ybxMQpMgQhtsTLhvHZqk8uqao7kvoexY6e8JmCTqAB1", - "symbol": "QUEST", - "name": "QUEST", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6ybxMQpMgQhtsTLhvHZqk8uqao7kvoexY6e8JmCTqAB1/logo.png", - "tags": ["DeFi", "GameFi", "NFT", "Metaverse"], - "extensions": { - "description": "Questland metaverse token", - "website": "https://questland.io" - } - }, - { - "chainId": 101, - "address": "97qAF7ZKEdPdQaUkhASGA59Jpa2Wi7QqVmnFdEuPqEDc", - "symbol": "DIAMOND", - "name": "LOVE", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/97qAF7ZKEdPdQaUkhASGA59Jpa2Wi7QqVmnFdEuPqEDc/logo.png", - "extensions": { - "telegram": "https://t.me/DiamondLoveX", - "website": "https://diamondlove.io/" - } - }, - { - "chainId": 101, - "address": "xxxxa1sKNGwFtw2kFn8XauW9xq8hBZ5kVtcSesTT9fW", - "symbol": "SLIM", - "name": "Solanium", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/xxxxa1sKNGwFtw2kFn8XauW9xq8hBZ5kVtcSesTT9fW/logo.png", - "extensions": { - "coingeckoId": "solanium", - "telegram": "https://t.me/solanium_io", - "twitter": "https://twitter.com/solanium_io", - "website": "https://www.solanium.io/" - } - }, - { - "chainId": 101, - "address": "8GPUjUHFxfNhaSS8kUkix8txRRXszeUAsHTjUmHuygZT", - "symbol": "NINJA NFT1", - "name": "NINJA NFT1", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/yuzu-ninjaprotocol/ninjaprotocol/main/NINJA%20NFT%201.png", - "extensions": { - "website": "http://ninjaprotocol.io" - } - }, - { - "chainId": 101, - "address": "HcJCPYck2UsTMgiPfjn6CS1wrC5iBXtuqPSjt8Qy8Sou", - "symbol": "GANGS", - "name": "Gangs of Solana", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HcJCPYck2UsTMgiPfjn6CS1wrC5iBXtuqPSjt8Qy8Sou/logo.svg", - "extensions": { - "website": "https://gangsofsolana.com/" - } - }, - { - "chainId": 101, - "address": "2rEiLkpQ3mh4DGxv1zcSdW5r5HK2nehif5sCaF5Ss9E1", - "symbol": "RECO", - "name": "Reboot ECO", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2rEiLkpQ3mh4DGxv1zcSdW5r5HK2nehif5sCaF5Ss9E1/logo.png", - "extensions": { - "website": "https://reboot.eco/" - } - }, - { - "chainId": 101, - "address": "BXhAKUxkGvFbAarA3K1SUYnqXRhEBC1bhUaCaxvzgyJ1", - "symbol": "ISA", - "name": "Interstellar", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BXhAKUxkGvFbAarA3K1SUYnqXRhEBC1bhUaCaxvzgyJ1/logo.png", - "extensions": { - "website": "https://interstellaralliance.gitbook.io/isa/" - } - }, - { - "chainId": 101, - "address": "7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU", - "symbol": "SAMO", - "name": "Samoyed Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU/logo.png", - "extensions": { - "coingeckoId": "samoyedcoin", - "serumV3Usdc": "FR3SPJmgfRSKKQ2ysUZBu7vJLpzTixXnjzb84bY3Diif", - "website": "https://samoyedcoin.com/" - } - }, - { - "chainId": 101, - "address": "Aw8qLRHGhMcKq7rxs5XBNCd9oe3BvoAhpNMVz7AdGmty", - "symbol": "PANDA", - "name": "Panda Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Aw8qLRHGhMcKq7rxs5XBNCd9oe3BvoAhpNMVz7AdGmty/logo.png", - "tags": ["meme-token", "community-token"], - "extensions": { - "coingeckoId": "panda-coin", - "discord": "https://discord.gg/nPSXvdJpvz", - "telegram": "https://t.me/pandacoin_announcements", - "twitter": "https://twitter.com/pandacoin_fi", - "website": "https://pandacrypto.org/" - } - }, - { - "chainId": 101, - "address": "5bJPS9PqzeH8JNzvGqw2nYi5VXyB7Cch6UYeUKkoHQeJ", - "symbol": "CORGI", - "name": "Corgi Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5bJPS9PqzeH8JNzvGqw2nYi5VXyB7Cch6UYeUKkoHQeJ/logo.png", - "tags": ["meme-token", "community-token", "nft"], - "extensions": { - "discord": "https://discord.gg/xAXYmXQGYA", - "website": "https://corgicoin.dev/" - } - }, - { - "chainId": 101, - "address": "61bW17b7WaWgA916RusHpzqTw9gZKf84sWN2efhtCrq", - "symbol": "DODO", - "name": "Dodo Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/61bW17b7WaWgA916RusHpzqTw9gZKf84sWN2efhtCrq/logo.png", - "extensions": { - "discord": "https://discord.gg/wVAxxw3rn4" - } - }, - { - "chainId": 101, - "address": "ByJ8a9NWk6G4Jg4iFyFNdrya1iVcusL1aL9aGXWXeoVG", - "symbol": "POM", - "name": "Pom Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ByJ8a9NWk6G4Jg4iFyFNdrya1iVcusL1aL9aGXWXeoVG/logo.png", - "extensions": { - "twitter": "https://twitter.com/PomToken" - } - }, - { - "chainId": 101, - "address": "ATLASXmbPQxBUYbxPsV97usA3fPQYEqzQBUHgiFCUsXx", - "symbol": "ATLAS", - "name": "Star Atlas", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ATLASXmbPQxBUYbxPsV97usA3fPQYEqzQBUHgiFCUsXx/logo.png", - "tags": ["utility-token"], - "extensions": { - "coingeckoId": "star-atlas", - "description": "Star Atlas Token", - "serumV3Usdc": "Di66GTLsV64JgCCYGVcY21RZ173BHkjJVgPyezNN7P1K", - "waterfallbot": "https://bit.ly/ATLASwaterfall", - "website": "https://staratlas.com" - } - }, - { - "chainId": 101, - "address": "poLisWXnNRwC6oBu1vHiuKQzFjGL4XDSu4g9qjz9qVk", - "symbol": "POLIS", - "name": "Star Atlas DAO", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/poLisWXnNRwC6oBu1vHiuKQzFjGL4XDSu4g9qjz9qVk/logo.png", - "tags": ["utility-token"], - "extensions": { - "coingeckoId": "star-atlas-dao", - "description": "Star Atlas DAO Token", - "serumV3Usdc": "HxFLKUAmAMLz1jtT3hbvCMELwH5H9tpM2QugP8sKyfhW", - "waterfallbot": "https://bit.ly/POLISwaterfall", - "website": "https://staratlas.com" - } - }, - { - "chainId": 101, - "address": "HAWy8kV3bD4gaN6yy6iK2619x2dyzLUBj1PfJiihTisE", - "symbol": "DOI", - "name": "Discovery of Iris", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HAWy8kV3bD4gaN6yy6iK2619x2dyzLUBj1PfJiihTisE/logo.png", - "tags": ["nft"], - "extensions": { - "description": "The rogue planet, Iris, dense with invaluable materials, draws in and collides with seven child planets in a remote region of space, creating what is henceforth referred to as 'The Cataclysm'. When combined, these eight elements create a form of free energy. The collision creates a massively valuable debris field.", - "imageUrl": "https://storage.googleapis.com/nft-assets/ReBirth/poster-1/discovery-of-iris.jpg", - "serumV3Usdc": "AYXTVttPfhYmn3jryX5XbRjwPK2m9445mbN2iLyRD6nq", - "website": "https://www.staratlas.com" - } - }, - { - "chainId": 101, - "address": "ATSPo9f9TJ3Atx8SuoTYdzSMh4ctQBzYzDiNukQDmoF7", - "symbol": "HOSA", - "name": "The Heart of Star Atlas", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ATSPo9f9TJ3Atx8SuoTYdzSMh4ctQBzYzDiNukQDmoF7/logo.png", - "tags": ["nft"], - "extensions": { - "description": "At the core of Star Atlas lies a treasure trove of priceless data. After an unsuspecting deep space explorer discovers 'The Cataclysm', he scans its riches, creating what will once be known as the first intergalactic data block. He sells this invaluable information to all three rival factions, igniting a lethal spark that forever changes the course of history.", - "imageUrl": "https://storage.googleapis.com/nft-assets/ReBirth/poster-2/the-heart-of-star-atlas.jpg", - "serumV3Usdc": "5Erzgrw9pTjNWLeqHp2sChJq7smB7WXRQYw9wvkvA59t", - "website": "https://www.staratlas.com" - } - }, - { - "chainId": 101, - "address": "36s6AFRXzE9KVdUyoJQ5y6mwxXw21LawYqqwNiQUMD8s", - "symbol": "TCW", - "name": "The Convergence War", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/36s6AFRXzE9KVdUyoJQ5y6mwxXw21LawYqqwNiQUMD8s/logo.png", - "tags": ["nft"], - "extensions": { - "description": "All three factions, thinking they were the sole owners of the cataclysmic data drop, converge to settle the area. A devastating war breaks out across the galaxy after their inability to settle the disputed territory.", - "imageUrl": "https://storage.googleapis.com/nft-assets/ReBirth/poster-3/the-convergence-war.jpg", - "serumV3Usdc": "DXPv2ZyMD6Y2mDenqYkAhkvGSjNahkuMkm4zv6DqB7RF", - "website": "https://www.staratlas.com" - } - }, - { - "chainId": 101, - "address": "BgiTVxW9uLuHHoafTd2qjYB5xjCc5Y1EnUuYNfmTwhvp", - "symbol": "LOST", - "name": "Short Story of a Lost Astronaut", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BgiTVxW9uLuHHoafTd2qjYB5xjCc5Y1EnUuYNfmTwhvp/logo.png", - "tags": ["nft"], - "extensions": { - "description": "He thought it would be just another routine exploration mission. Get there, scan, save data blocks and return. But when a surprise radiation storm knocked out his spaceship and swept him up into its high-velocity current, the only thing that saved him from certain doom was his custom ion shield.", - "imageUrl": "https://storage.googleapis.com/nft-assets/ReBirth/poster-4/short-story-of-a-lost-astronaut.jpg", - "serumV3Usdc": "73d9N7BbWVKBG6A2xwwwEHcxzPB26YzbMnRjue3DPzqs", - "website": "https://www.staratlas.com" - } - }, - { - "chainId": 101, - "address": "4G85c5aUsRTrRPqE5VjY7ebD9b2ktTF6NEVGiCddRBDX", - "symbol": "LOVE", - "name": "B ❤ P", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4G85c5aUsRTrRPqE5VjY7ebD9b2ktTF6NEVGiCddRBDX/logo.png", - "tags": ["nft"], - "extensions": { - "description": "Paizul, the charismatic and brilliant leader of the ONI consortium, vividly recalls the first time she saw her one true love. It was a warm summer day, full of raging ionic storms. Lightning was piercing the sky as Bekalu took off his helmet and locked eyes with her. 'What are the chances of nearly colliding with someone flying through these wastelands on a day like this', he smiled with his booming voice. 'Perhaps it's destiny,' she smiled back mysteriously. There was another strike of lightning, but this time the sky remained calm.", - "imageUrl": "https://storage.googleapis.com/nft-assets/ReBirth/poster-5/love-story.jpg", - "serumV3Usdc": "AM9sNDh48N2qhYSgpA58m9dHvrMoQongtyYu2u2XoYTc", - "website": "https://www.staratlas.com" - } - }, - { - "chainId": 101, - "address": "7dr7jVyXf1KUnYq5FTpV2vCZjKRR4MV94jzerb8Fi16Q", - "symbol": "MRDR", - "name": "The Assassination of Paizul", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7dr7jVyXf1KUnYq5FTpV2vCZjKRR4MV94jzerb8Fi16Q/logo.png", - "tags": ["nft"], - "extensions": { - "description": "Suffering one of the cruelest fates in the universe, the Sogmian race of aliens was driven to the brink of extinction. With only 10,000 members left, they put all hope of salvation in the hands of their leader Paizul. After she was assassinated in a gruesome public way, so much fear was struck in the hearts of survivors that they set out to build their 'Last Stand'.", - "imageUrl": "https://storage.googleapis.com/nft-assets/ReBirth/poster-6/assassination-of-paizul.jpg", - "serumV3Usdc": "BJiV2gCLwMvj2c1CbhnMjjy68RjqoMzYT8brDrpVyceA", - "website": "https://www.staratlas.com" - } - }, - { - "chainId": 101, - "address": "G1bE9ge8Yoq43hv7QLcumxTFhHqFMdcL4y2d6ZdzMG4b", - "symbol": "PFP", - "name": "Paizul Funeral Procession", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/G1bE9ge8Yoq43hv7QLcumxTFhHqFMdcL4y2d6ZdzMG4b/logo.png", - "tags": ["nft"], - "extensions": { - "description": "The sound of wailing echoes across the plains. The Sogmian procession solemnly marches in step past their ancestors' gravestones, still haunted by the fate of their leader. The sun begins to set as they bring Paizul's cryopod at the top of the Rock of Light. As a beam of light consumes the pod to upload it to eternal rest with the ancients, Bekalu falls to his knees with a wrathful howl. The crowd is rattled to the core, a foreboding of things to come.", - "imageUrl": "https://storage.googleapis.com/nft-assets/ReBirth/poster-7/paizul-funeral-procession.jpg", - "serumV3Usdc": "7JzaEAuVfjkrZyMwJgZF5aQkiEyVyCaTWA3N1fQK7Y6V", - "website": "https://www.staratlas.com" - } - }, - { - "chainId": 101, - "address": "6bD8mr8DyuVqN5dXd1jnqmCL66b5KUV14jYY1HSmnxTE", - "symbol": "AVE", - "name": "Ahr Visits Earth", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6bD8mr8DyuVqN5dXd1jnqmCL66b5KUV14jYY1HSmnxTE/logo.png", - "tags": ["nft"], - "extensions": { - "description": "Humankind is visited by Ahr, a mysterious being of pure light. But not all is as it seems... For through the power of illusion, we are tricked into forming a space-based religion, plundering the planet and launching ourselves towards the stars, permanently leaving the Earth.", - "imageUrl": "https://storage.googleapis.com/nft-assets/ReBirth/poster-8/ahr-visits-earth.jpg", - "serumV3Usdc": "8yQzsbraXJFoPG5PdX73B8EVYFuPR9aC2axAqWearGKu", - "website": "https://www.staratlas.com" - } - }, - { - "chainId": 101, - "address": "9vi6PTKBFHR2hXgyjoTZx6h7WXNkFAA5dCsZRSi4higK", - "symbol": "ASF", - "name": "Armstrong Forever", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9vi6PTKBFHR2hXgyjoTZx6h7WXNkFAA5dCsZRSi4higK/logo.png", - "tags": ["nft"], - "extensions": { - "description": "When humans were racing to expand into outer space under Ahr's influence, the devastation they inflicted upon the planet was so great that it weakened the Earth's geomagnetic field. The reckless way the planet's orbit was populated by machines and debris led to distortions in the gravity field. All this culminated in a disastrous slingshot effect for the many satellites orbiting the blue dot, altering their trajectories to loosen the direct gravity pull of the planet and scatter into deep space. Some of these satellites contained valuable data that was lost forever. In 2621, the Council of Peace put a bounty on these ancient artifacts to integrate them into Star Atlas, leading to a hunt for them across the galaxy. One of the most sought-after satellites in history records bears the name of Neil Armstrong, the first human to set foot on the Moon. Initially launched into medium Earth orbit as a cornerstone of the global positioning system (GPS), the satellite had untold additional capabilities that made it more and more valuable as it drifted off into the void.", - "imageUrl": "https://storage.googleapis.com/nft-assets/ReBirth/poster-15/armstrong-forever.jpg", - "serumV3Usdc": "8yQzsbraXJFoPG5PdX73B8EVYFuPR9aC2axAqWearGKu", - "website": "https://www.staratlas.com" - } - }, - { - "chainId": 101, - "address": "Hfjgcs9ix17EwgXVVbKjo6NfMm2CXfr34cwty3xWARUm", - "symbol": "TLS", - "name": "The Last Stand", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Hfjgcs9ix17EwgXVVbKjo6NfMm2CXfr34cwty3xWARUm/logo.png", - "tags": ["nft"], - "extensions": { - "serumV3Usdc": "AVHndcEDUjP9Liz5dfcvAPAMffADXG6KMPn8sWB1XhFQ", - "website": "https://www.staratlas.com" - } - }, - { - "chainId": 101, - "address": "8EXX5kG7qWTjgpNSGX7PnB6hJZ8xhXUcCafVJaBEJo32", - "symbol": "SPT", - "name": "The Signing of the Peace Treaty", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8EXX5kG7qWTjgpNSGX7PnB6hJZ8xhXUcCafVJaBEJo32/logo.png", - "tags": ["nft"], - "extensions": { - "serumV3Usdc": "FZ9xhZbkt9bKKVpWmFxRhEJyzgxqU5w5xu3mXcF6Eppe", - "website": "https://www.staratlas.com" - } - }, - { - "chainId": 101, - "address": "62FWgS4XaMJrUrAYw7mHMRye4iY9hqgqnJLBiT8QyPJv", - "symbol": "COFFEE", - "name": "CoffeeMaker", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/cofeeswap/logo/coffeev2.png", - "tags": ["nft", "swap", "nft-marketplace"], - "extensions": { - "website": "https://coffeemaker.finance" - } - }, - { - "chainId": 101, - "address": "CAjoJeGCCRae9oDwHYXzkeUDonp3dZLWV5GKHysLwjnx", - "symbol": "PBA", - "name": "The Peacebringers Archive", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CAjoJeGCCRae9oDwHYXzkeUDonp3dZLWV5GKHysLwjnx/logo.png", - "tags": ["nft"], - "extensions": { - "serumV3Usdc": "4jN1R453Acv9egnr7Dry3x9Xe3jqh1tqz5RokniaeVhy", - "website": "https://www.staratlas.com" - } - }, - { - "chainId": 101, - "address": "FPnwwNiL1tXqd4ZbGjFYsCw5qsQw91VN79SNcU4Bc732", - "symbol": "UWB", - "name": "Ustur Wod.bod", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FPnwwNiL1tXqd4ZbGjFYsCw5qsQw91VN79SNcU4Bc732/logo.png", - "tags": ["nft"], - "extensions": { - "serumV3Usdc": "J99HsFQEWKR3UiFQpKTnF11iaNiR1enf2LxHfgsbVc59", - "website": "https://www.staratlas.com" - } - }, - { - "chainId": 101, - "address": "DB76aiNQeLzHPwvFhzgwfpe6HGHCDTQ6snW6UD7AnHid", - "symbol": "OMPH", - "name": "Om Photoli", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DB76aiNQeLzHPwvFhzgwfpe6HGHCDTQ6snW6UD7AnHid/logo.png", - "tags": ["nft"], - "extensions": { - "serumV3Usdc": "HdvXMScwAQQh9pEvLZjuaaeJcLTmixxYoMFefeqHFn2E", - "website": "https://www.staratlas.com" - } - }, - { - "chainId": 101, - "address": "BrzwWsG845VttbTsacZMLKhyc2jAZU12MaPkTYrJHoqm", - "symbol": "SATM", - "name": "Star Atlas - The Movie", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BrzwWsG845VttbTsacZMLKhyc2jAZU12MaPkTYrJHoqm/logo.png", - "tags": ["nft"], - "extensions": { - "description": "'The first to arrive at the universe's next frontier is the first to knock on the gates of prosperity.' - Ustur Armi.eldr", - "imageUrl": "https://storage.googleapis.com/nft-assets/ReBirth/poster-14/star-at-atlas-movie.jpg", - "serumV3Usdc": "KHw8L2eE6kpp8ziWPghBTtiAVCUvdSKMvGtT1e9AuJd", - "website": "https://www.staratlas.com" - } - }, - { - "chainId": 101, - "address": "8ymi88q5DtmdNTn2sPRNFkvMkszMHuLJ1e3RVdWjPa3s", - "symbol": "SDOGE", - "name": "SolDoge", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8ymi88q5DtmdNTn2sPRNFkvMkszMHuLJ1e3RVdWjPa3s/logo.png", - "extensions": { - "coingeckoId": "soldoge", - "discord": "https://bit.ly/SDOGEDiscord", - "serumV3Usdc": "9aruV2p8cRWxybx6wMsJwPFqeN7eQVPR74RrxdM3DNdu", - "twitter": "https://twitter.com/SolanaDoge", - "website": "https://www.soldoge.io" - } - }, - { - "chainId": 101, - "address": "DQRNdQWz5NzbYgknGsZqSSXbdhQWvXSe8S56mrtNAs1b", - "symbol": "ENTROPPP", - "name": "ENTROPPP (Entropy for security)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DQRNdQWz5NzbYgknGsZqSSXbdhQWvXSe8S56mrtNAs1b/logo.png", - "tags": ["cryptography", "blockchain-security", "randomness-entropy"], - "extensions": { - "website": "https://www.entroppp.com" - } - }, - { - "chainId": 101, - "address": "8RYSc3rrS4X4bvBCtSJnhcpPpMaAJkXnVKZPzANxQHgz", - "symbol": "YARD", - "name": "SolYard Finance", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8RYSc3rrS4X4bvBCtSJnhcpPpMaAJkXnVKZPzANxQHgz/logo.png", - "extensions": { - "website": "https://solyard.finance/" - } - }, - { - "chainId": 101, - "address": "nope9HWCJcXVFkG49CDk7oYFtgGsUzsRvHdcJeL2aCL", - "symbol": "NOPE", - "name": "NOPE FINANCE", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/nope9HWCJcXVFkG49CDk7oYFtgGsUzsRvHdcJeL2aCL/logo.png", - "extensions": { - "website": "https://nopefinance.xyz/" - } - }, - { - "chainId": 101, - "address": "43VWkd99HjqkhFTZbWBpMpRhjG469nWa7x7uEsgSH7We", - "symbol": "STNK", - "name": "Stonks", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/43VWkd99HjqkhFTZbWBpMpRhjG469nWa7x7uEsgSH7We/logo.png", - "extensions": { - "website": "https://stonkscoin.org/" - } - }, - { - "chainId": 101, - "address": "4368jNGeNq7Tt4Vzr98UWxL647PYu969VjzAsWGVaVH2", - "symbol": "MEAL", - "name": "HUNGRY", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4368jNGeNq7Tt4Vzr98UWxL647PYu969VjzAsWGVaVH2/logo.png", - "extensions": { - "website": "https://hungrycoin.io/" - } - }, - { - "chainId": 101, - "address": "8GQsW3f7mdwfjqJon2myADcBsSsRjpXmxHYDG8q1pvV6", - "symbol": "HOLD", - "name": "Holdana", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8GQsW3f7mdwfjqJon2myADcBsSsRjpXmxHYDG8q1pvV6/logo.png", - "extensions": { - "medium": "https://holdanatoken.medium.com/", - "serumV3Usdc": "G2j5zKtfymPcWMq1YRoKrfUWy64SZ6ZxDVscHSyPQqmz", - "twitter": "https://twitter.com/HoldanaOfficial" - } - }, - { - "chainId": 101, - "address": "64SqEfHtu4bZ6jr1mAxaWrLFdMngbKbru9AyaG2Dyk5T", - "symbol": "wen-token", - "name": "wen-token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/64SqEfHtu4bZ6jr1mAxaWrLFdMngbKbru9AyaG2Dyk5T/logo.png", - "tags": ["nft"], - "extensions": { - "website": "https://pythians.pyth.network" - } - }, - { - "chainId": 101, - "address": "9axWWN2FY8njSSQReepkiSE56U2yAvPFGuaXRQNdkZaS", - "symbol": "wen-token-2", - "name": "wen-token-2", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9axWWN2FY8njSSQReepkiSE56U2yAvPFGuaXRQNdkZaS/logo.png", - "tags": ["nft"], - "extensions": { - "website": "https://pythians.pyth.network" - } - }, - { - "chainId": 101, - "address": "4dmKkXNHdgYsXqBHCuMikNQWwVomZURhYvkkX5c4pQ7y", - "symbol": "SNY", - "name": "Synthetify", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4dmKkXNHdgYsXqBHCuMikNQWwVomZURhYvkkX5c4pQ7y/logo.png", - "extensions": { - "coingeckoId": "synthetify-token", - "serumV3Usdc": "DPfj2jYwPaezkCmUNm5SSYfkrkz8WFqwGLcxDDUsN3gA", - "twitter": "https://twitter.com/synthetify", - "website": "https://synthetify.io/" - } - }, - { - "chainId": 101, - "address": "4wTMJsh3q66PmAkmwEW47qVDevMZMVVWU3n1Yhqztwi6", - "symbol": "wARCD_v1", - "name": "Arcade Token (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4wTMJsh3q66PmAkmwEW47qVDevMZMVVWU3n1Yhqztwi6/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xb581E3a7dB80fBAA821AB39342E9Cbfd2ce33c23", - "assetContract": "https://etherscan.io/address/0xb581E3a7dB80fBAA821AB39342E9Cbfd2ce33c23", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "twitter": "https://twitter.com/ArcadeCityHall", - "website": "https://arcade.city" - } - }, - { - "chainId": 101, - "address": "Hjc6Ku7VpMD8TqPUuimDXWvT3RWpnbm1viaUe3dUco3L", - "symbol": "SHLT", - "name": "Sehlat", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Hjc6Ku7VpMD8TqPUuimDXWvT3RWpnbm1viaUe3dUco3L/logo.png", - "tags": ["payment-token", "social-token"], - "extensions": { - "medium": "https://medium.com/@all4free.crypto" - } - }, - { - "chainId": 101, - "address": "Amt5wUJREJQC5pX7Z48YSK812xmu4j3sQVupNhtsEuY8", - "symbol": "FROG", - "name": "FROG", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Amt5wUJREJQC5pX7Z48YSK812xmu4j3sQVupNhtsEuY8/logo.png", - "extensions": { - "serumV3Usdc": "2Si6XDdpv5zcvYna221eZZrsjsp5xeYoz9W1TVdMdbnt", - "website": "https://www.froglana.com/" - } - }, - { - "chainId": 101, - "address": "DEAdry5qhNoSkF3mbFrTa6udGbMwUoLnQhvchCu26Ak1", - "symbol": "JUEL", - "name": "Juel Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DEAdry5qhNoSkF3mbFrTa6udGbMwUoLnQhvchCu26Ak1/logo.png", - "extensions": { - "website": "http://juel.gg" - } - }, - { - "chainId": 101, - "address": "9Y8NT5HT9z2EsmCbYMgKXPRq3h3aa6tycEqfFiXjfZM7", - "symbol": "CRT", - "name": "CARROT", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9Y8NT5HT9z2EsmCbYMgKXPRq3h3aa6tycEqfFiXjfZM7/logo.png", - "extensions": { - "serumV3Usdc": "Aa8mN8bXAobmcuHDpbbZh55SoadUry6WdsYz2886Ymqf", - "website": "https://farmerscarrot.com/" - } - }, - { - "chainId": 101, - "address": "AMdnw9H5DFtQwZowVFr4kUgSXJzLokKSinvgGiUoLSps", - "symbol": "MOLA", - "name": "MOONLANA", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AMdnw9H5DFtQwZowVFr4kUgSXJzLokKSinvgGiUoLSps/logo.png", - "extensions": { - "coingeckoId": "moonlana", - "medium": "https://moonlana.medium.com/", - "twitter": "https://twitter.com/xMoonLana", - "website": "https://moonlana.com/" - } - }, - { - "chainId": 101, - "address": "3x7UeXDF4imKSKnizK9mYyx1M5bTNzpeALfPeB8S6XT9", - "symbol": "SKEM", - "name": "SKEM", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3x7UeXDF4imKSKnizK9mYyx1M5bTNzpeALfPeB8S6XT9/logo.svg", - "extensions": { - "serumV3Usdc": "HkYJ3dX8CLSGyGZzfuqYiuoDjDmrDiu1vZhPtFJZa5Vt", - "website": "https://skem.finance/" - } - }, - { - "chainId": 101, - "address": "GHvFFSZ9BctWsEc5nujR1MTmmJWY7tgQz2AXE6WVFtGN", - "symbol": "SOLAPE", - "name": "SolAPE Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GHvFFSZ9BctWsEc5nujR1MTmmJWY7tgQz2AXE6WVFtGN/logo.png", - "tags": ["utility-token"], - "extensions": { - "coingeckoId": "solape-token", - "serumV3Usdc": "4zffJaPyeXZ2wr4whHgP39QyTfurqZ2BEd4M5W6SEuon", - "twitter": "https://twitter.com/SolApeFinance", - "website": "https://solape.io" - } - }, - { - "chainId": 101, - "address": "92ibHPyfcwQnsscwkutSP7f9yWzz6GaVHu78gyQ37L1i", - "symbol": "FOMO", - "name": "FOMO", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/92ibHPyfcwQnsscwkutSP7f9yWzz6GaVHu78gyQ37L1i/logo.png", - "extensions": { - "twitter": "https://twitter.com/fomokitty", - "website": "https://fomokitty.com" - } - }, - { - "chainId": 101, - "address": "Rs3Mrx9ZSNwsTM3gtJhEbeHQdTfzcvUWHg8T8Ena3pD", - "symbol": "GLUB", - "name": "GLUB Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Rs3Mrx9ZSNwsTM3gtJhEbeHQdTfzcvUWHg8T8Ena3pD/logo.png", - "extensions": { - "twitter": "https://twitter.com/BWhaleClub", - "website": "https://billionairewhaleclub.com" - } - }, - { - "chainId": 101, - "address": "9nEqaUcb16sQ3Tn1psbkWqyhPdLmfHWjKGymREjsAgTE", - "symbol": "WOOF", - "name": "WOOF", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9nEqaUcb16sQ3Tn1psbkWqyhPdLmfHWjKGymREjsAgTE/logo.png", - "tags": ["community-token", "meme-token"], - "extensions": { - "coingeckoId": "woof-token", - "serumV3Usdc": "CwK9brJ43MR4BJz2dwnDM7EXCNyHhGqCJDrAdsEts8n5", - "website": "https://woofsolana.com" - } - }, - { - "chainId": 101, - "address": "MERt85fc5boKw3BW1eYdxonEuJNvXbiMbs6hvheau5K", - "symbol": "MER", - "name": "Mercurial", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/MERt85fc5boKw3BW1eYdxonEuJNvXbiMbs6hvheau5K/logo.png", - "extensions": { - "coingeckoId": "mercurial", - "serumV3Usdc": "G4LcexdCzzJUKZfqyVDQFzpkjhB1JoCNL8Kooxi9nJz5", - "waterfallbot": "https://bit.ly/MERwaterfall", - "website": "https://www.mercurial.finance/" - } - }, - { - "chainId": 101, - "address": "9MhNoxy1PbmEazjPo9kiZPCcG7BiFbhi3bWZXZgacfpp", - "symbol": "ACMN", - "name": "ACUMEN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9MhNoxy1PbmEazjPo9kiZPCcG7BiFbhi3bWZXZgacfpp/logo.png", - "extensions": { - "website": "https://acumen.network/" - } - }, - { - "chainId": 101, - "address": "HRhCiCe8WLC4Jsy43Jkhq3poEWpjgXKD1U26XACReimt", - "symbol": "zSOL", - "name": "zSOL (ACUMEN)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HRhCiCe8WLC4Jsy43Jkhq3poEWpjgXKD1U26XACReimt/logo.png", - "extensions": { - "website": "https://acumen.network/" - } - }, - { - "chainId": 101, - "address": "2LBYxD4Jzipk1bEREW6vQk163cj27mUSxmHzW2ujXFNy", - "symbol": "zUSDC", - "name": "zUSDC (ACUMEN)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2LBYxD4Jzipk1bEREW6vQk163cj27mUSxmHzW2ujXFNy/logo.png", - "extensions": { - "website": "https://acumen.network/" - } - }, - { - "chainId": 101, - "address": "DFTZmEopSWrj6YcsmQAAxypN7cHM3mnruEisJPQFJbs7", - "symbol": "zBTC", - "name": "zBTC (ACUMEN)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DFTZmEopSWrj6YcsmQAAxypN7cHM3mnruEisJPQFJbs7/logo.png", - "extensions": { - "website": "https://acumen.network/" - } - }, - { - "chainId": 101, - "address": "A8pnvbKWmTjjnUMzmY6pDJRHy3QdQNdqJdL1VFYXX4oW", - "symbol": "zETH", - "name": "zETH (ACUMEN)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/A8pnvbKWmTjjnUMzmY6pDJRHy3QdQNdqJdL1VFYXX4oW/logo.png", - "extensions": { - "website": "https://acumen.network/" - } - }, - { - "chainId": 101, - "address": "9hZt5mP139TvzDBZHtruXxAyjYHiovKXfxW6XNYiofae", - "symbol": "zSRM", - "name": "zSRM (ACUMEN)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9hZt5mP139TvzDBZHtruXxAyjYHiovKXfxW6XNYiofae/logo.png", - "extensions": { - "website": "https://acumen.network/" - } - }, - { - "chainId": 101, - "address": "BR31LZKtry5tyjVtZ49PFZoZjtE5SeS4rjVMuL9Xiyer", - "symbol": "zSTEP", - "name": "zSTEP (ACUMEN)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BR31LZKtry5tyjVtZ49PFZoZjtE5SeS4rjVMuL9Xiyer/logo.png", - "extensions": { - "website": "https://acumen.network/" - } - }, - { - "chainId": 101, - "address": "7wZsSyzD4Ba8ZkPhRh62KshQc8TQYiB5KtdNknywE3k4", - "symbol": "zRAY", - "name": "zRAY (ACUMEN)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BR31LZKtry5tyjVtZ49PFZoZjtE5SeS4rjVMuL9Xiyer/logo.png", - "extensions": { - "website": "https://acumen.network/" - } - }, - { - "chainId": 101, - "address": "EfLvzNsqmkoSneiML5t7uHCPEVRaWCpG4N2WsS39nWCU", - "symbol": "MUDLEY", - "name": "MUDLEY", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EfLvzNsqmkoSneiML5t7uHCPEVRaWCpG4N2WsS39nWCU/logo.png", - "extensions": { - "website": "https://www.mudley.io/" - } - }, - { - "chainId": 101, - "address": "GpYMp8eP3HADY8x1jLVfFVBVYqxFNxT5mFhZAZt9Poco", - "symbol": "CAPE", - "name": "Crazy Ape Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GpYMp8eP3HADY8x1jLVfFVBVYqxFNxT5mFhZAZt9Poco/logo.png", - "extensions": { - "website": "https://www.crazyapecoin.com/" - } - }, - { - "chainId": 101, - "address": "7ApYvMWwHJSgWz9BvMuNzqzUAqYbxByjzZu31t8FkYDy", - "symbol": "SFairy", - "name": "Fairy Finance", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/debianos1/logo-token/main/fairyfinane%20.png", - "extensions": { - "twitter": "https://twitter.com/fairy_finance" - } - }, - { - "chainId": 101, - "address": "7Csho7qjseDjgX3hhBxfwP1W3LYARK3QH3PM2x55we14", - "symbol": "LOTTO", - "name": "Lotto", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7Csho7qjseDjgX3hhBxfwP1W3LYARK3QH3PM2x55we14/logo.png", - "extensions": { - "address": "0xb0dfd28d3cf7a5897c694904ace292539242f858", - "assetContract": "https://etherscan.io/address/0xb0dfd28d3cf7a5897c694904ace292539242f858", - "coingeckoId": "lotto", - "serumV3Usdc": "9MZKfgZzPgeidAukYpHtsLYm4eAdJFnR7nhPosWT8jiv", - "telegram": "https://t.me/lottofinance", - "website": "https://lotto.finance" - } - }, - { - "chainId": 101, - "address": "7uv3ZvZcQLd95bUp5WMioxG7tyAZVXFfr8JYkwhMYrnt", - "symbol": "BOLE", - "name": "Bole Token", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7uv3ZvZcQLd95bUp5WMioxG7tyAZVXFfr8JYkwhMYrnt/logo.png", - "extensions": { - "coingeckoId": "bole-token", - "serumV3Usdc": "9yGqsboBtvztDgGbGFEaBBT2G8dUMhxewXDQpy6T3eDm", - "website": "https://tokenbole.com/" - } - }, - { - "chainId": 101, - "address": "7Qbjc2DZ6K2t6NtQhQnJfsi9V2Aa2KSmKyWZZEdfTXsT", - "symbol": "XTAG", - "name": "XTAG", - "decimals": 9, - "logoURI": "https://pbs.twimg.com/profile_images/1422971633048834054/PqdED5l7.png", - "extensions": { - "medium": "https://medium.com/xhashtag", - "twitter": "https://twitter.com/xhashtagio", - "website": "https://www.xhashtag.io/" - } - }, - { - "chainId": 101, - "address": "Bxp46xCB6CLjiqE99QaTcJAaY1hYF1o63DUUrXAS7QFu", - "symbol": "mBRZ", - "name": "SolMiner Bronze", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Bxp46xCB6CLjiqE99QaTcJAaY1hYF1o63DUUrXAS7QFu/logo.png", - "extensions": { - "medium": "https://solminer.medium.com/", - "twitter": "https://twitter.com/SolMinerproject", - "website": "https://solminer.app" - } - }, - { - "chainId": 101, - "address": "GZNrMEdrt6Vg428JzvJYRGGPpVxgjUPsg6WLqKBvmNLw", - "symbol": "mPLAT", - "name": "SolMiner Platinum", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GZNrMEdrt6Vg428JzvJYRGGPpVxgjUPsg6WLqKBvmNLw/logo.png", - "extensions": { - "medium": "https://solminer.medium.com/", - "twitter": "https://twitter.com/SolMinerproject", - "website": "https://solminer.app" - } - }, - { - "chainId": 101, - "address": "Er7a3ugS6kkAqj6sp3UmXEFAFrDdLMRQEkV9QH2fwRYA", - "symbol": "mDIAM", - "name": "SolMiner Diamond", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Er7a3ugS6kkAqj6sp3UmXEFAFrDdLMRQEkV9QH2fwRYA/logo.png", - "extensions": { - "medium": "https://solminer.medium.com/", - "twitter": "https://twitter.com/SolMinerproject", - "website": "https://solminer.app" - } - }, - { - "chainId": 101, - "address": "5JnZ667P3VcjDinkJFysWh2K2KtViy63FZ3oL5YghEhW", - "symbol": "APYS", - "name": "APYSwap", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5JnZ667P3VcjDinkJFysWh2K2KtViy63FZ3oL5YghEhW/logo.png", - "tags": ["wrapped"], - "extensions": { - "coingeckoId": "apyswap", - "website": "https://apyswap.com" - } - }, - { - "chainId": 101, - "address": "ss1gxEUiufJyumsXfGbEwFe6maraPmc53fqbnjbum15", - "symbol": "SS1", - "name": "Naked Shorts", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ss1gxEUiufJyumsXfGbEwFe6maraPmc53fqbnjbum15/logo.png", - "tags": ["nft"], - "extensions": { - "animationUrl": "https://www.arweave.net/KBzRUmQNX6VKDH41N_uOETtJH21YtWXrOz270b8eqyo?ext=glb", - "description": "After a gamma squeeze event he was left covered in theta. Due to the accident he lost his memories but gained the ability to refract light. He joins the tournament hoping to discover more about his past. His only clue is a damaged ID card with the word Malvin inscribed. Special: 'Now You See Me'", - "imageUrl": "https://www.arweave.net/N-RGNyi1o1evhr7jTCXxHQlSndNPdnHWEzUTbTGMCl4", - "twitter": "https://twitter.com/sol__survivor", - "website": "https://www.sol-talk.com/sol-survivor" - } - }, - { - "chainId": 101, - "address": "GfJ3Vq2eSTYf1hJP6kKLE9RT6u7jF9gNszJhZwo5VPZp", - "symbol": "SOLPAD", - "name": "Solpad Finance", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GfJ3Vq2eSTYf1hJP6kKLE9RT6u7jF9gNszJhZwo5VPZp/logo.png", - "tags": ["utility-token"], - "extensions": { - "github": "https://github.com/solpad-finance", - "telegram": "https://t.me/solpadfinance_chat", - "telegramAnnouncements": "https://t.me/solpadfinance", - "twitter": "https://twitter.com/FinanceSolpad", - "website": "https://www.solpad.finance/" - } - }, - { - "chainId": 101, - "address": "A3iozx9T9wgrtybnecQ9rv56y9RF8ThUrwRGWiF7hsmZ", - "symbol": "$SHIVER", - "name": "Shibaverse", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/A3iozx9T9wgrtybnecQ9rv56y9RF8ThUrwRGWiF7hsmZ/logo.png", - "extensions": { - "coingeckoId": "shibaverse-token", - "twitter": "https://twitter.com/theshibaverse", - "website": "https://www.shibaverse.co" - } - }, - { - "chainId": 101, - "address": "FGMTuwmVVz9hUJzA8shYiEnM16wsYDoSmYoy13UZe1kk", - "symbol": "SHIVER", - "name": "Shibaverse", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FGMTuwmVVz9hUJzA8shYiEnM16wsYDoSmYoy13UZe1kk/logo.png", - "extensions": { - "coingeckoId": "shibaverse-token", - "twitter": "https://twitter.com/theshibaverse", - "website": "https://www.shibaverse.co" - } - }, - { - "chainId": 101, - "address": "ERPueLaiBW48uBhqX1CvCYBv2ApHN6ZFuME1MeQGTdAi", - "symbol": "MIT", - "name": "Muskimum Impact Token", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ERPueLaiBW48uBhqX1CvCYBv2ApHN6ZFuME1MeQGTdAi/logo.png", - "tags": ["mit", "musk"], - "extensions": { - "serumV3Usdc": "3mhrhTFrHtxe7uZhvzBhzneR3bD3hDyWcgEkR8EcvNZk", - "twitter": "https://twitter.com/muskimum", - "website": "https://muskimum.win/" - } - }, - { - "chainId": 101, - "address": "BsDrXiQaFd147Fxq1fQYbJQ77P6tmPkRJQJzkKvspDKo", - "symbol": "SOLA", - "name": "SolaPAD Token (deprecated)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BsDrXiQaFd147Fxq1fQYbJQ77P6tmPkRJQJzkKvspDKo/logo.png", - "tags": ["SOLA", "LaunchPAD"], - "extensions": { - "twitter": "https://twitter.com/SolaPAD", - "website": "https://www.solapad.org/" - } - }, - { - "chainId": 101, - "address": "7fCzz6ZDHm4UWC9Se1RPLmiyeuQ6kStxpcAP696EuE1E", - "symbol": "SHBL", - "name": "Shoebill Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7fCzz6ZDHm4UWC9Se1RPLmiyeuQ6kStxpcAP696EuE1E/logo.png", - "extensions": { - "website": "https://shoebillco.in/" - } - }, - { - "chainId": 101, - "address": "GnaFnTihwQFjrLeJNeVdBfEZATMdaUwZZ1RPxLwjbVwb", - "symbol": "SHBL-USDC", - "name": "Raydium Permissionless LP Token (SHBL-USDC)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GnaFnTihwQFjrLeJNeVdBfEZATMdaUwZZ1RPxLwjbVwb/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "Djoz8btdR7p6xWHoVtPYF3zyN9LU5BBfMoDk4HczSDqc", - "symbol": "AUSS", - "name": "Ausshole", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Djoz8btdR7p6xWHoVtPYF3zyN9LU5BBfMoDk4HczSDqc/logo.svg", - "extensions": { - "serumV3Usdc": "bNbYoc2KawipbXj76BiXbUdf2NcGKWkdp4S9uDvWXB1", - "twitter": "https://twitter.com/ausstoken", - "website": "https://auss.finance/" - } - }, - { - "chainId": 101, - "address": "TuLipcqtGVXP9XR62wM8WWCm6a9vhLs7T1uoWBk6FDs", - "symbol": "TULIP", - "name": "Tulip", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/sol-farm/token-logos/main/tulip.png", - "tags": ["tulip", "tulip-protocol", "vaults"], - "extensions": { - "coingeckoId": "solfarm", - "serumV3Usdc": "8GufnKq7YnXKhnB3WNhgy5PzU9uvHbaaRrZWQK6ixPxW", - "twitter": "https://twitter.com/TulipProtocol", - "waterfallbot": "https://bit.ly/TULIPwaterfall", - "website": "https://tulip.garden" - } - }, - { - "chainId": 101, - "address": "5trVBqv1LvHxiSPMsHtEZuf8iN82wbpDcR5Zaw7sWC3s", - "symbol": "soJPYC", - "name": "JPY Coin(Sollet)(Deprecated)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5trVBqv1LvHxiSPMsHtEZuf8iN82wbpDcR5Zaw7sWC3s/logo.png", - "tags": ["stablecoin", "ethereum", "wrapped-sollet"], - "extensions": { - "website": "https://jpyc.jp/" - } - }, - { - "chainId": 101, - "address": "3QuAYThYKFXSmrTcSHsdd7sAxaFBobaCkLy2DBYJLMDs", - "symbol": "TYNA", - "name": "wTYNA", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3QuAYThYKFXSmrTcSHsdd7sAxaFBobaCkLy2DBYJLMDs/logo.png", - "tags": ["ERC20", "ethereum"], - "extensions": { - "address": "0x4ae54790c130B21E8CbaCAB011C6170e079e6eF5", - "assetContract": "https://etherscan.io/address/0x4ae54790c130B21E8CbaCAB011C6170e079e6eF5", - "bridgeContract": "https://etherscan.io/address/0xeae57ce9cc1984f202e15e038b964bb8bdf7229a", - "twitter": "https://twitter.com/btc_AP", - "website": "http://lendingbot.s3-website-us-east-1.amazonaws.com/whitepaper.html" - } - }, - { - "chainId": 101, - "address": "7zsKqN7Fg2s9VsqAq6XBoiShCVohpGshSUvoWBc6jKYh", - "symbol": "soARDX", - "name": "Wrapped ArdCoin (Sollet)", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7zsKqN7Fg2s9VsqAq6XBoiShCVohpGshSUvoWBc6jKYh/logo.png", - "tags": ["wrapped-sollet", "ethereum"], - "extensions": { - "coingeckoId": "ardcoin", - "website": "https://ardcoin.com" - } - }, - { - "chainId": 101, - "address": "7zphtJVjKyECvQkdfxJNPx83MNpPT6ZJyujQL8jyvKcC", - "symbol": "SSHIB", - "name": "SolShib", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7zphtJVjKyECvQkdfxJNPx83MNpPT6ZJyujQL8jyvKcC/logo.png", - "extensions": { - "website": "https://solshib.com/" - } - }, - { - "chainId": 101, - "address": "HoSWnZ6MZzqFruS1uoU69bU7megzHUv6MFPQ5nqC6Pj2", - "symbol": "SGI", - "name": "SolGift", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HoSWnZ6MZzqFruS1uoU69bU7megzHUv6MFPQ5nqC6Pj2/logo.png", - "extensions": { - "website": "https://solshib.com/" - } - }, - { - "chainId": 101, - "address": "GpS9AavHtSUspaBnL1Tu26FWbUAdW8tm3MbacsNvwtGu", - "symbol": "SOLT", - "name": "Soltriever", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GpS9AavHtSUspaBnL1Tu26FWbUAdW8tm3MbacsNvwtGu/logo.png", - "extensions": { - "twitter": "https://twitter.com/_Soltriever", - "website": "http://soltriever.info/" - } - }, - { - "chainId": 101, - "address": "2QK9vxydd7WoDwvVFT5JSU8cwE9xmbJSzeqbRESiPGMG", - "symbol": "KEKW", - "name": "kekwcoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2QK9vxydd7WoDwvVFT5JSU8cwE9xmbJSzeqbRESiPGMG/logo.png", - "extensions": { - "description": "Kekwcoin is a creative community platform for content creators to monetize their artwork and get financial support from investors.", - "discord": "https://discord.gg/kekw", - "medium": "https://kekwcoin.medium.com/", - "serumV3Usdc": "N99ngemA29qSKqdDW7kRiZHS7h2wEFpdgRvgE3N2jy6", - "twitter": "https://twitter.com/kekwcoin", - "website": "https://kekw.io/" - } - }, - { - "chainId": 101, - "address": "qs9Scx8YwNXS6zHYPCnDnyHQcRHg3QwXxpyCXs5tdM8", - "symbol": "POCO", - "name": "POWER COIN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/qs9Scx8YwNXS6zHYPCnDnyHQcRHg3QwXxpyCXs5tdM8/logo.png", - "tags": ["social-token", "poco"] - }, - { - "chainId": 101, - "address": "AndyTyTHiXSHT3DhKSehsg3BEdAWMHbw9xVeeDS3WZYh", - "symbol": "ANDY", - "name": "Andy token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AndyTyTHiXSHT3DhKSehsg3BEdAWMHbw9xVeeDS3WZYh/logo.png" - }, - { - "chainId": 101, - "address": "7CVZWtuaA34gQZazbWwDhK8kFwPUubAiPaPnz6gAFjxF", - "symbol": "DIGI", - "name": "DIGI Token", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7CVZWtuaA34gQZazbWwDhK8kFwPUubAiPaPnz6gAFjxF/logo.png" - }, - { - "chainId": 101, - "address": "VernWPaodzUcAXnZQAcCguQPbWJvUub1zuURzLvF128", - "symbol": "VERNER", - "name": "Verner Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/VernWPaodzUcAXnZQAcCguQPbWJvUub1zuURzLvF128/logo.png" - }, - { - "chainId": 101, - "address": "FxCvbCVAtNUEKSiKoF6xt2pWPfpXuYFWYbuQySaRnV5R", - "symbol": "LOOP", - "name": "LC Andy Social Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FxCvbCVAtNUEKSiKoF6xt2pWPfpXuYFWYbuQySaRnV5R/logo.png", - "tags": ["social-token", "loop"] - }, - { - "chainId": 101, - "address": "4MRVPdN41888CwKSpY37K8HtN2FM9Bc3xTnhf9EDdcou", - "symbol": "MGT", - "name": "Mofogasy Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4MRVPdN41888CwKSpY37K8HtN2FM9Bc3xTnhf9EDdcou/logo.png", - "tags": ["social-token", "MGT"] - }, - { - "chainId": 101, - "address": "6DNkUoMa6vNo3CsxAw5XMJhjmdPbPBENHJ6w35eMXESo", - "symbol": "MEME", - "name": "MemeMarketplace", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6DNkUoMa6vNo3CsxAw5XMJhjmdPbPBENHJ6w35eMXESo/logo.png", - "extensions": { - "discord": "https://discord.gg/mememarketplace", - "twitter": "https://twitter.com/MemeMarketNFT", - "website": "https://www.mememarket.place" - } - }, - { - "chainId": 101, - "address": "pL5mVp1DByEFufunmymuBNFcSsyJftXguDMci7Jg1Du", - "symbol": "MEW", - "name": "MEWSOL", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/YudaAdiPratama/MEWSOL/MEWWALLET2.png", - "tags": ["MEME-Token", "Fun-Token", "MEW"] - }, - { - "chainId": 101, - "address": "3iXydLpqi38CeGDuLFF1WRbPrrkNbUsgVf98cNSg6NaA", - "symbol": "Spro", - "name": "Sproken Token", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/kechricc/Sproken-Token-Logo/SprokenToken.png", - "extensions": { - "website": "https://www.sprokentoken.com/" - } - }, - { - "chainId": 101, - "address": "95GBBtPvFotNSLDuM4DYTukZhxptRbJjW7dMH45WMS2N", - "symbol": "CCAT", - "name": "Cute Baby Cat Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/95GBBtPvFotNSLDuM4DYTukZhxptRbJjW7dMH45WMS2N/logo.png", - "tags": ["community-token"], - "extensions": { - "discord": "https://discord.gg/RhQTNhRk2X", - "twitter": "https://twitter.com/CuteBabyCatCoin" - } - }, - { - "chainId": 101, - "address": "H5gczCNbrtso6BqGKihF97RaWaxpUEZnFuFUKK4YX3s2", - "symbol": "BDE", - "name": "Big Defi Energy", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/bigchickendefi/bigchicken/main/logo.png", - "extensions": { - "twitter": "https://twitter.com/Bigdefi", - "website": "https://bigdefienergy.com" - } - }, - { - "chainId": 101, - "address": "cREsCN7KAyXcBG2xZc8qrfNHMRgC3MhTb4n3jBnNysv", - "symbol": "DWT", - "name": "DARK WEB TOKEN", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/cREsCN7KAyXcBG2xZc8qrfNHMRgC3MhTb4n3jBnNysv/logo.png", - "tags": ["MEME"], - "extensions": { - "serumV3Usdc": "526WW289h5wibg1Q55sK16CGoNip8H5d2AXVbaAGcUMb", - "website": "https://www.darkwebtoken.live" - } - }, - { - "chainId": 101, - "address": "EdGAZ8JyFTFbmVedVTbaAEQRb6bxrvi3AW3kz8gABz2E", - "symbol": "DOGA", - "name": "Dogana", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EdGAZ8JyFTFbmVedVTbaAEQRb6bxrvi3AW3kz8gABz2E/logo.png", - "extensions": { - "serumV3Usdc": "H1Ywt7nSZkLDb2o3vpA5yupnBc9jr1pXtdjMm4Jgk1ay", - "twitter": "https://twitter.com/DoganaOfficial" - } - }, - { - "chainId": 101, - "address": "3FoUAsGDbvTD6YZ4wVKJgTB76onJUKz7GPEBNiR5b8wc", - "symbol": "CHEEMS", - "name": "Cheems", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3FoUAsGDbvTD6YZ4wVKJgTB76onJUKz7GPEBNiR5b8wc/logo.png", - "extensions": { - "coingeckoId": "cheems", - "serumV3Usdc": "5WVBCaUPZF4HP3io9Z56N71cPMJt8qh3c4ZwSjRDeuut", - "twitter": "https://twitter.com/theCheemsToken", - "website": "https://cheems.co/" - } - }, - { - "chainId": 101, - "address": "AWW5UQfMBnPsTaaxCK7cSEmkj1kbX2zUrqvgKXStjBKx", - "symbol": "SBFC", - "name": "SBF Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AWW5UQfMBnPsTaaxCK7cSEmkj1kbX2zUrqvgKXStjBKx/logo.png", - "tags": ["utility-token", "SBF", "sbfcoin", "SBFC"], - "extensions": { - "twitter": "https://twitter.com/sbfcoin", - "website": "https://www.sbfcoin.org/" - } - }, - { - "chainId": 101, - "address": "FRbqQnbuLoMbUG4gtQMeULgCDHyY6YWF9NRUuLa98qmq", - "symbol": "ECOP", - "name": "EcoPoo", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FRbqQnbuLoMbUG4gtQMeULgCDHyY6YWF9NRUuLa98qmq/logo.png", - "tags": ["meme"], - "extensions": { - "twitter": "https://twitter.com/EcoPoo_Official" - } - }, - { - "chainId": 101, - "address": "5p2zjqCd1WJzAVgcEnjhb9zWDU7b9XVhFhx4usiyN7jB", - "symbol": "CATO", - "name": "CATO", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5p2zjqCd1WJzAVgcEnjhb9zWDU7b9XVhFhx4usiyN7jB/logo.png", - "tags": ["Meme-Token"], - "extensions": { - "coingeckoId": "cato", - "serumV3Usdc": "9fe1MWiKqUdwift3dEpxuRHWftG72rysCRHbxDy6i9xB", - "telegram": "https://t.me/SolanaCATO", - "twitter": "https://twitter.com/SolanaCATO", - "website": "https://official.catodex.com" - } - }, - { - "chainId": 101, - "address": "J81fW7aza8wVUG1jjzhExsNMs3MrzwT5WrofgFqMjnSA", - "symbol": "TOM", - "name": "Tombili", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/J81fW7aza8wVUG1jjzhExsNMs3MrzwT5WrofgFqMjnSA/logo.png", - "extensions": { - "twitter": "https://twitter.com/cryptomindex", - "website": "https://cryptomindex.com" - } - }, - { - "chainId": 101, - "address": "GunpHq4fn9gSSyGbPMYXTzs9nBS8RY88CX1so4V8kCiF", - "symbol": "FABLE", - "name": "Fable", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GunpHq4fn9gSSyGbPMYXTzs9nBS8RY88CX1so4V8kCiF/logo.png", - "extensions": { - "twitter": "https://twitter.com/fable_finance", - "website": "https://fable.finance" - } - }, - { - "chainId": 101, - "address": "6L5DzH3p1t1PrCrVkudasuUnWbK7Jq9tYwcwWQiV6yd7", - "symbol": "LZD", - "name": "Lizard", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6L5DzH3p1t1PrCrVkudasuUnWbK7Jq9tYwcwWQiV6yd7/logo.png", - "extensions": { - "twitter": "https://twitter.com/lzd_sol", - "website": "https://www.lzdsol.io" - } - }, - { - "chainId": 101, - "address": "EZqcdU8RLu9EChZgrY2BNVg8eovfdGyTiY2bd69EsPgQ", - "symbol": "FELON", - "name": "FuckElon", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EZqcdU8RLu9EChZgrY2BNVg8eovfdGyTiY2bd69EsPgQ/logo.png", - "extensions": { - "telegram": "https://t.me/joinchat/cgUOCIRSTJ9hZmY1", - "telegramAnnouncements": "https://t.me/fuckelonmusktoday", - "twitter": "https://twitter.com/FuckElonMusk8", - "website": "https://fuckelonmusk.godaddysites.com/" - } - }, - { - "chainId": 101, - "address": "HBHMiauecxer5FCzPeXgE2A8ZCf7fQgxxwo4vfkFtC7s", - "symbol": "SLNDN", - "name": "Solanadon", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HBHMiauecxer5FCzPeXgE2A8ZCf7fQgxxwo4vfkFtC7s/logo.png", - "extensions": { - "telegramAnnouncements": "https://t.me/solanadonann", - "twitter": "https://twitter.com/SolanadonCoin", - "website": "https://solanadon.com/" - } - }, - { - "chainId": 101, - "address": "GReBHpMgCadZRij4B111c94cqU9TktvJ45rWZRQ5b1A5", - "symbol": "PINGU", - "name": "Penguincoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GReBHpMgCadZRij4B111c94cqU9TktvJ45rWZRQ5b1A5/logo.png", - "extensions": { - "twitter": "https://twitter.com/penguincoin1" - } - }, - { - "chainId": 101, - "address": "5WUab7TCvth43Au5vk6wKjchTzWFeyPEUSJE1MPJtTZE", - "symbol": "KEKN1", - "name": "KEKW In Solana Tripping", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5WUab7TCvth43Au5vk6wKjchTzWFeyPEUSJE1MPJtTZE/logo.png", - "tags": ["nft"], - "extensions": { - "twitter": "https://twitter.com/kekwcoin", - "website": "https://www.kekw.io/" - } - }, - { - "chainId": 101, - "address": "9KEe6o1jRTqFDFBo2AezsskcxBNwuq1rVeVat1Td8zbV", - "symbol": "MPAD", - "name": "MercuryPAD Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9KEe6o1jRTqFDFBo2AezsskcxBNwuq1rVeVat1Td8zbV/logo.png", - "tags": ["MPAD", "LaunchPAD"], - "extensions": { - "twitter": "https://twitter.com/MercuryPad", - "website": "https://mercurypad.com/" - } - }, - { - "chainId": 101, - "address": "4KAFf8ZpNCn1SWLZFo5tbeZsKpVemsobbVZdERWxRvd2", - "symbol": "SGT", - "name": "Sangga Token", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4KAFf8ZpNCn1SWLZFo5tbeZsKpVemsobbVZdERWxRvd2/logo.png", - "extensions": { - "website": "https://sanggatalk.io" - } - }, - { - "chainId": 101, - "address": "Ae1aeYK9WrB2kP29jJU4aUUK7Y1vzsGNZFKoe4BG2h6P", - "symbol": "OLDNINJA", - "name": "OLDNINJA", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Ae1aeYK9WrB2kP29jJU4aUUK7Y1vzsGNZFKoe4BG2h6P/logo.png", - "extensions": { - "website": "https://www.ninjaprotocol.io/oldninja/" - } - }, - { - "chainId": 101, - "address": "FgX1WD9WzMU3yLwXaFSarPfkgzjLb2DZCqmkx9ExpuvJ", - "symbol": "NINJA", - "name": "NINJA", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FgX1WD9WzMU3yLwXaFSarPfkgzjLb2DZCqmkx9ExpuvJ/logo.png", - "extensions": { - "coingeckoId": "ninja-protocol", - "serumV3Usdc": "J4oPt5Q3FYxrznkXLkbosAWrJ4rZLqJpGqz7vZUL4eMM", - "website": "https://www.ninjaprotocol.io/" - } - }, - { - "chainId": 101, - "address": "E6UBhrtvP4gYHAEgoBi8kDU6DrPPmQxTAJvASo4ptNev", - "symbol": "SOLDOG", - "name": "SOLDOG", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/E6UBhrtvP4gYHAEgoBi8kDU6DrPPmQxTAJvASo4ptNev/logo.png", - "extensions": { - "twitter": "https://twitter.com/solanadog", - "website": "https://solanadog.io" - } - }, - { - "chainId": 102, - "address": "rz251Qbsa27sL8Y1H7h4qu71j6Q7ukNmskg5ZDhPCg3", - "symbol": "HIRO", - "name": "Hiro LaunchDAO", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/rz251Qbsa27sL8Y1H7h4qu71j6Q7ukNmskg5ZDhPCg3/logo.png", - "extensions": { - "twitter": "https://twitter.com/HiroLaunchdao", - "website": "https://hiro-finance.github.io/" - } - }, - { - "chainId": 101, - "address": "9nusLQeFKiocswDt6NQsiErm1M43H2b8x6v5onhivqKv", - "symbol": "LLAMA", - "name": "SOLLAMA", - "decimals": 1, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9nusLQeFKiocswDt6NQsiErm1M43H2b8x6v5onhivqKv/logo.png", - "extensions": { - "serumV3Usdc": "6KKRzEedDY1dybdrfFzjDzTxCVuxdHgaiQFYUfoupigK", - "twitter": "https://twitter.com/SollamaFinance", - "website": "https://sollama.finance" - } - }, - { - "chainId": 101, - "address": "BLwTnYKqf7u4qjgZrrsKeNs2EzWkMLqVCu6j8iHyrNA3", - "symbol": "BOP", - "name": "Boring Protocol", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/boringprotocol/brand-assets/main/boplogo.png", - "tags": ["security-token", "utility-token"], - "extensions": { - "coingeckoId": "boring-protocol", - "serumV3Usdc": "7MmPwD1K56DthW14P1PnWZ4zPCbPWemGs3YggcT1KzsM", - "twitter": "https://twitter.com/BoringProtocol", - "website": "https://boringprotocol.io" - } - }, - { - "chainId": 101, - "address": "ER8Xa8YxJLC3CFJgdAxJs46Rdhb7B3MjgbPZsVg1aAFV", - "symbol": "MOLAMON", - "name": "MOLAMON", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ER8Xa8YxJLC3CFJgdAxJs46Rdhb7B3MjgbPZsVg1aAFV/logo.png", - "extensions": { - "description": "The first $MOLA NFT on Solana Blockchain.", - "imageUrl": "https://gateway.pinata.cloud/ipfs/QmbdEesuzVUMzqaumrZNaWnwnz4WwDvqDyfrFneVDjqr2e/molamonbg.gif", - "medium": "https://moonlana.medium.com/", - "twitter": "https://twitter.com/xMoonLana", - "website": "https://moonlana.com/" - } - }, - { - "chainId": 101, - "address": "4ezHExHThrwnnoqKcMNbUwcVYXzdkDerHFGfegnTqA2E", - "symbol": "STUD", - "name": "SolanaToolsUtilityDapp", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4ezHExHThrwnnoqKcMNbUwcVYXzdkDerHFGfegnTqA2E/logo.png", - "extensions": { - "website": "https://www.solanatools.io/" - } - }, - { - "chainId": 101, - "address": "AZtNYaEAHDBeK5AvdzquZWjc4y8cj5sKWH1keUJGMuPV", - "symbol": "RESP", - "name": "RESPECT", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AZtNYaEAHDBeK5AvdzquZWjc4y8cj5sKWH1keUJGMuPV/logo.png", - "extensions": { - "website": "https://respect.cash" - } - }, - { - "chainId": 101, - "address": "5j6BmiZTfHssaWPT23EQYQci3w57VTw7QypKArQZbSZ9", - "symbol": "CHAD", - "name": "ChadTrader Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5j6BmiZTfHssaWPT23EQYQci3w57VTw7QypKArQZbSZ9/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/chadtraderio", - "website": "https://chadtrader.io/" - } - }, - { - "chainId": 101, - "address": "GsNzxJfFn6zQdJGeYsupJWzUAm57Ba7335mfhWvFiE9Z", - "symbol": "DXL", - "name": "Dexlab", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/dexlab-project/assets/master/dexlab/dexlab_symbol_logo.svg", - "extensions": { - "coingeckoId": "dexlab", - "serumV3Usdc": "DYfigimKWc5VhavR4moPBibx9sMcWYVSjVdWvPztBPTa", - "twitter": "https://twitter.com/dexlab_official", - "website": "https://www.dexlab.space/" - } - }, - { - "chainId": 101, - "address": "6TCbtxs6eYfMKVF9ppTNvbUemW2YnpFig6z1jSqgM16e", - "symbol": "STRANGE", - "name": "STRANGE", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6TCbtxs6eYfMKVF9ppTNvbUemW2YnpFig6z1jSqgM16e/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://safepluto.tech" - } - }, - { - "chainId": 101, - "address": "BYNHheaKFX2WRGQTpMZNsM6vAyJXvkeMoMcixKfVKxY9", - "symbol": "PLUTES", - "name": "Plutonium", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BYNHheaKFX2WRGQTpMZNsM6vAyJXvkeMoMcixKfVKxY9/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://safepluto.tech" - } - }, - { - "chainId": 101, - "address": "8upjSpvjcdpuzhfR1zriwg5NXkwDruejqNE9WNbPRtyA", - "symbol": "GRAPE", - "name": "Grape", - "decimals": 6, - "logoURI": "https://lh3.googleusercontent.com/y7Wsemw9UVBc9dtjtRfVilnS1cgpDt356PPAjne5NvMXIwWz9_x7WKMPH99teyv8vXDmpZinsJdgiFQ16_OAda1dNcsUxlpw9DyMkUk=s0", - "extensions": { - "coingeckoId": "grape-2", - "website": "https://grapes.network" - } - }, - { - "chainId": 101, - "address": "6qAJ9W5XCb2JyrTRV8bcoXa6HmHNz9YikLMWK71dH1sY", - "symbol": "SOLEM", - "name": "SolemPad", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6qAJ9W5XCb2JyrTRV8bcoXa6HmHNz9YikLMWK71dH1sY/logo.png", - "extensions": { - "telegram": "https://t.me/solempad", - "twitter": "https://twitter.com/solempad", - "website": "https://www.solempad.net/" - } - }, - { - "chainId": 101, - "address": "7xzovRepzLvXbbpVZLYKzEBhCNgStEv1xpDqf1rMFFKX", - "symbol": "KERMIT", - "name": "Kermit", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7xzovRepzLvXbbpVZLYKzEBhCNgStEv1xpDqf1rMFFKX/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/KermitFinance", - "website": "https://www.kermitfinance.com" - } - }, - { - "chainId": 101, - "address": "3VhB8EAL8dZ457SiksLPpMUR1pyACpbNh5rTjQUEVCcH", - "symbol": "TUTL", - "name": "TurtleTraders", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3VhB8EAL8dZ457SiksLPpMUR1pyACpbNh5rTjQUEVCcH/logo.png", - "tags": ["social-token", "Turtles"], - "extensions": { - "twitter": "https://twitter.com/Turtle_Traders" - } - }, - { - "chainId": 101, - "address": "8tbAqS4dFNEeC6YGWpNnusc3JcxoFLMiiLPyHctgGYFe", - "symbol": "PIPANA", - "name": "Pipana", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8tbAqS4dFNEeC6YGWpNnusc3JcxoFLMiiLPyHctgGYFe/logo.png", - "extensions": { - "serumV3Usdc": "EHCty8rwVcE1T8Ccd6Emrd1oB2yNeMXz6kcgmE1Qa6sG", - "twitter": "https://twitter.com/itspipana", - "website": "https://pip.monster" - } - }, - { - "chainId": 101, - "address": "8s9FCz99Wcr3dHpiauFRi6bLXzshXfcGTfgQE7UEopVx", - "symbol": "CKC", - "name": "ChikinCoin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8s9FCz99Wcr3dHpiauFRi6bLXzshXfcGTfgQE7UEopVx/logo.svg", - "extensions": { - "discord": "https://discord.gg/rsQQsAcAn7", - "facebook": "https://www.facebook.com/Chikin-114453524487432", - "github": "https://github.com/ChikinDeveloper", - "instagram": "https://www.instagram.com/chikintuttut", - "telegram": "https://t.me/+BG1HI84WGdwyMmU0", - "tiktok": "https://www.tiktok.com/@chikintuttut", - "twitter": "https://twitter.com/ChikinDev", - "website": "https://chikin.run" - } - }, - { - "chainId": 101, - "address": "ATxXyewb1cXThrQFmwHUy4dtPTErfsuqkg7JcUXgLgqo", - "symbol": "SPW", - "name": "SpiderSwap", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ATxXyewb1cXThrQFmwHUy4dtPTErfsuqkg7JcUXgLgqo/logo.png", - "extensions": { - "twitter": "https://twitter.com/Spider_swap", - "website": "https://www.spiderswap.org" - } - }, - { - "chainId": 101, - "address": "1C2EYVrwmoXAGbiKirFFBeDFDYUBHPhDeg9trhibTND", - "symbol": "NRA", - "name": "NORA", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/1C2EYVrwmoXAGbiKirFFBeDFDYUBHPhDeg9trhibTND/logo.png", - "tags": ["meme-token"], - "extensions": { - "twitter": "https://twitter.com/SolNoraToken" - } - }, - { - "chainId": 101, - "address": "BrwgXmUtNd32dTKdP5teie68EmBnjGq8Wp3MukHehUBY", - "symbol": "GSTONKS", - "name": "Gamestonks", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BrwgXmUtNd32dTKdP5teie68EmBnjGq8Wp3MukHehUBY/logo.png", - "extensions": { - "website": "https://www.game-stonks.com/" - } - }, - { - "chainId": 101, - "address": "HAgX1HSfok8DohiNCS54FnC2UJkDSrRVnT38W3iWFwc8", - "symbol": "MEOW", - "name": "SOL-CATS", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HAgX1HSfok8DohiNCS54FnC2UJkDSrRVnT38W3iWFwc8/logo.png", - "extensions": { - "twitter": "https://twitter.com/solcat777", - "website": "https://www.solcats.xyz" - } - }, - { - "chainId": 101, - "address": "8p758d6ZMkLUYQ949XZa6s1Mo31mhPpLcaaAPUBMeAmx", - "symbol": "BOO", - "name": "Gene Crucean", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8p758d6ZMkLUYQ949XZa6s1Mo31mhPpLcaaAPUBMeAmx/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://www.genecrucean.com/" - } - }, - { - "chainId": 101, - "address": "Gro98oTmXxCVX8HKr3q2tMnP5ztoC77q6KehFDnAB983", - "symbol": "SOLMO", - "name": "SolMoon", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Gro98oTmXxCVX8HKr3q2tMnP5ztoC77q6KehFDnAB983/logo.png", - "extensions": { - "twitter": "https://twitter.com/solmoonfinance", - "website": "https://www.solmoonfinance.com" - } - }, - { - "chainId": 101, - "address": "2wBXHm4oxmed7ZoDkPL4DU8BuRfMYkubVu8T4N38vXdb", - "symbol": "MSC", - "name": "MasterCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2wBXHm4oxmed7ZoDkPL4DU8BuRfMYkubVu8T4N38vXdb/logo.png", - "extensions": { - "discord": "https://t.co/CXZN9Ncd6Q?amp=1", - "medium": "https://medium.com/@mastercoin-eu", - "twitter": "https://twitter.com/MasterCoin_", - "website": "https://mastercoin.site" - } - }, - { - "chainId": 101, - "address": "8b9mQo6ZU2rwZQgSFqGNQvXzrUSHDTRpKSKi9XXdGmqN", - "symbol": "CHANGPENGUIN", - "name": "CHANGPENGUIN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8b9mQo6ZU2rwZQgSFqGNQvXzrUSHDTRpKSKi9XXdGmqN/logo.png", - "extensions": { - "website": "https://artbomb.xyz" - } - }, - { - "chainId": 101, - "address": "3KnVxWhoYdc9UwDr5WMVkZp2LpF7gnojg7We7MUd6ixQ", - "symbol": "WOLFE", - "name": "Wolfecoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3KnVxWhoYdc9UwDr5WMVkZp2LpF7gnojg7We7MUd6ixQ/logo.png", - "extensions": { - "website": "https://www.wolfecoin.online/" - } - }, - { - "chainId": 101, - "address": "BxHJqGtC629c55swCqWXFGA2rRF1igbbTmh22H8ePUWG", - "symbol": "PGNT", - "name": "PigeonSol Token", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BxHJqGtC629c55swCqWXFGA2rRF1igbbTmh22H8ePUWG/logo.png", - "extensions": { - "twitter": "https://twitter.com/PigeonSol", - "website": "https://pigeonsol.xyz" - } - }, - { - "chainId": 101, - "address": "51tMb3zBKDiQhNwGqpgwbavaGH54mk8fXFzxTc1xnasg", - "symbol": "APEX", - "name": "APEX", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/51tMb3zBKDiQhNwGqpgwbavaGH54mk8fXFzxTc1xnasg/logo.png", - "extensions": { - "coingeckoId": "apexit-finance", - "discord": "https://discord.gg/aASQy2dWsN", - "telegram": "https://t.me/apexit_finance", - "twitter": "https://twitter.com/apeXit_finance", - "website": "https://apexit.finance/" - } - }, - { - "chainId": 101, - "address": "4NPzwMK2gfgQ6rTv8x4EE1ZvKW6MYyYTSrAZCx7zxyaX", - "symbol": "KLB", - "name": "Black Label", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4NPzwMK2gfgQ6rTv8x4EE1ZvKW6MYyYTSrAZCx7zxyaX/logo.svg", - "extensions": { - "coingeckoId": "black-label", - "serumV3Usdc": "AVC5hkVjWqRzD9RXXwjcNiVAAR2rUvDGwhqoCd2TQNY8", - "twitter": "https://twitter.com/klbtoken", - "website": "https://klbtoken.com" - } - }, - { - "chainId": 101, - "address": "5v6tZ1SiAi7G8Qg4rBF1ZdAn4cn6aeQtefewMr1NLy61", - "symbol": "SOLD", - "name": "Solanax", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5v6tZ1SiAi7G8Qg4rBF1ZdAn4cn6aeQtefewMr1NLy61/logo.png", - "extensions": { - "telegram": "https://t.me/solanaxcommunity", - "twitter": "https://twitter.com/Solanaxorg", - "website": "https://solanax.org" - } - }, - { - "chainId": 101, - "address": "3RSafdgu7P2smSGHJvSGQ6kZVkcErZXfZTtynJYboyAu", - "symbol": "SINE", - "name": "SINE", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3RSafdgu7P2smSGHJvSGQ6kZVkcErZXfZTtynJYboyAu/logo.svg", - "tags": ["security-token", "utility-token"], - "extensions": { - "twitter": "https://twitter.com/SolAiNetwork", - "website": "https://solainetwork.com/" - } - }, - { - "chainId": 101, - "address": "SioTkQxHyAs98ouRiyi1YDv3gLMSrX3eNBg61GH7NrM", - "symbol": "SIO", - "name": "Simplio", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SioTkQxHyAs98ouRiyi1YDv3gLMSrX3eNBg61GH7NrM/logo.svg", - "extensions": { - "discord": "https://discord.com/invite/aKhjuwZmdP", - "twitter": "https://twitter.com/simplioOfficial", - "website": "https://simplio.io/" - } - }, - { - "chainId": 101, - "address": "5Ne8szYZGGcXByFQA4zNBqJaWNdeTcJYAf2ZDLFfjVdA", - "symbol": "TIGER", - "name": "Tiger Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5Ne8szYZGGcXByFQA4zNBqJaWNdeTcJYAf2ZDLFfjVdA/logo.png", - "tags": ["meme-token", "non-nft", "nft", "community-token"] - }, - { - "chainId": 101, - "address": "orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE", - "symbol": "ORCA", - "name": "Orca", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE/logo.png", - "extensions": { - "coingeckoId": "orca", - "discord": "https://discord.com/invite/nSwGWn5KSG", - "medium": "https://orca-so.medium.com", - "serumV3Usdc": "8N1KkhaCYDpj3awD58d85n973EwkpeYnRp84y1kdZpMX", - "telegram": "https://t.me/orca_so", - "twitter": "https://twitter.com/orca_so", - "website": "https://orca.so" - } - }, - { - "chainId": 101, - "address": "guppyrZyEX9iTPSu92pi8T71Zka7xd6PrsTJrXRW6u1", - "symbol": "GUPPY", - "name": "Orca Guppy Collectible", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/guppyrZyEX9iTPSu92pi8T71Zka7xd6PrsTJrXRW6u1/logo.png", - "tags": ["nft"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://orca.so" - } - }, - { - "chainId": 101, - "address": "whaLeHav12EhGK19u6kKbLRwC9E1EATGnm6MWbBCcUW", - "symbol": "WHALE", - "name": "Orca Whale Collectible", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/whaLeHav12EhGK19u6kKbLRwC9E1EATGnm6MWbBCcUW/logo.png", - "tags": ["nft"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://orca.so" - } - }, - { - "chainId": 101, - "address": "kLwhLkZRt6CadPHRBsgfhRCKXX426WMBnhoGozTduvk", - "symbol": "KILLER-WHALE", - "name": "Orca Killer Whale Collectible", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/kLwhLkZRt6CadPHRBsgfhRCKXX426WMBnhoGozTduvk/logo.png", - "tags": ["nft"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://orca.so" - } - }, - { - "chainId": 101, - "address": "star2pH7rVWscs743JGdCAL8Lc9nyJeqx7YQXkGUnWf", - "symbol": "STARFISH", - "name": "Orca Starfish Collectible", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/star2pH7rVWscs743JGdCAL8Lc9nyJeqx7YQXkGUnWf/logo.png", - "tags": ["nft"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://orca.so" - } - }, - { - "chainId": 101, - "address": "cLownTTaiiQMoyMmFjfmSGowi8HyNhCtTLFcrNKnqX6", - "symbol": "CLOWNFISH", - "name": "Orca Clownfish Collectible", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/cLownTTaiiQMoyMmFjfmSGowi8HyNhCtTLFcrNKnqX6/logo.png", - "tags": ["nft"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://orca.so" - } - }, - { - "chainId": 101, - "address": "porpKs9ZZERXKkg55f1GRXCiXZK89Uz6VKS8Bv9qWqM", - "symbol": "PORPOISE", - "name": "Orca Porpoise Collectible", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/porpKs9ZZERXKkg55f1GRXCiXZK89Uz6VKS8Bv9qWqM/logo.svg", - "tags": ["nft"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://www.orca.so" - } - }, - { - "chainId": 101, - "address": "ha11o7FUziqRqpWLSnHoAnNjpeMYg6S3sSd7hfbqLyk", - "symbol": "HALLOWHALE", - "name": "Orca HALLOWHALE Collectible", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ha11o7FUziqRqpWLSnHoAnNjpeMYg6S3sSd7hfbqLyk/logo.svg", - "tags": ["nft"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://www.orca.so" - } - }, - { - "chainId": 101, - "address": "D9pXQfzq8MnhLGP8eo9BhuEmx2vSCaQg9ivkwNVHeCFc", - "symbol": "LITTLENFTS", - "name": "Jon Little NFTs", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/D9pXQfzq8MnhLGP8eo9BhuEmx2vSCaQg9ivkwNVHeCFc/littlenfts4.png", - "tags": ["nft"], - "extensions": { - "website": "https://jonlittle.myportfolio.com" - } - }, - { - "chainId": 101, - "address": "8kWk6CuCAfaxhWQZvQva6qkB1DkWNHq9LRKKN6n9joUG", - "symbol": "pSOL/USDC", - "name": "Orca Aquafarm Token (pSOL/USDC)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8kWk6CuCAfaxhWQZvQva6qkB1DkWNHq9LRKKN6n9joUG/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://www.orca.so" - } - }, - { - "chainId": 101, - "address": "7YFfqZGTxkj3Zeq3Et23kMznCaEYZ1WBZDt6CVrxwfqd", - "symbol": "SOCN/USDC", - "name": "Orca Aquafarm Token (SOCN/USDC)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7YFfqZGTxkj3Zeq3Et23kMznCaEYZ1WBZDt6CVrxwfqd/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://www.orca.so" - } - }, - { - "chainId": 101, - "address": "CNqmEKGjZUUARVFHcz4w9CvX5pR8Ae2c6imHDNqsbxgj", - "symbol": "SOCN/SOL", - "name": "Orca Aquafarm Token (SOCN/SOL)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CNqmEKGjZUUARVFHcz4w9CvX5pR8Ae2c6imHDNqsbxgj/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://www.orca.so" - } - }, - { - "chainId": 101, - "address": "Cum6sRPGpWYQHZapekDtMhbZ1BQ2QkYv9PAwQjypxMVo", - "symbol": "SBR/USDC", - "name": "Orca Aquafarm Token (SBR/USDC)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Cum6sRPGpWYQHZapekDtMhbZ1BQ2QkYv9PAwQjypxMVo/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://www.orca.so" - } - }, - { - "chainId": 101, - "address": "3RTGL7gPF4V1ns1AeGFApT7cBEGVDfmJ77DqQi9AC6uG", - "symbol": "mSOL/SOL", - "name": "Orca Aquafarm Token (mSOL/SOL)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3RTGL7gPF4V1ns1AeGFApT7cBEGVDfmJ77DqQi9AC6uG/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://www.orca.so" - } - }, - { - "chainId": 101, - "address": "4aEi4A91hRbERJVDYxRWbbSrBrsxoM1Hm33KRoRzWMht", - "symbol": "ORCA/PAI", - "name": "Orca Aquafarm Token (ORCA/PAI)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4aEi4A91hRbERJVDYxRWbbSrBrsxoM1Hm33KRoRzWMht/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://www.orca.so" - } - }, - { - "chainId": 101, - "address": "3Duk5b6fLztPmS4ryV48FM1Q9WXUSMwz9jehAT4UtqpE", - "symbol": "ORCA/mSOL", - "name": "Orca Aquafarm Token (ORCA/mSOL)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3Duk5b6fLztPmS4ryV48FM1Q9WXUSMwz9jehAT4UtqpE/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://www.orca.so" - } - }, - { - "chainId": 101, - "address": "ECFcUGwHHMaZynAQpqRHkYeTBnS5GnPWZywM8aggcs3A", - "symbol": "SOL/USDC", - "name": "Orca LP Token (SOL/USDC)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ECFcUGwHHMaZynAQpqRHkYeTBnS5GnPWZywM8aggcs3A/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://orca.so" - } - }, - { - "chainId": 101, - "address": "3H5XKkE9uVvxsdrFeN4BLLGCmohiQN6aZJVVcJiXQ4WC", - "symbol": "USDC/USDT", - "name": "Orca LP Token (USDC/USDT)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3H5XKkE9uVvxsdrFeN4BLLGCmohiQN6aZJVVcJiXQ4WC/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://orca.so" - } - }, - { - "chainId": 101, - "address": "8qNqTaKKbdZuzQPWWXy5wNVkJh54ex8zvvnEnTFkrKMP", - "symbol": "USDC/USDT-SRM", - "name": "Orca LP Token (USDC/USDT-SRM)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8qNqTaKKbdZuzQPWWXy5wNVkJh54ex8zvvnEnTFkrKMP/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://orca.so" - } - }, - { - "chainId": 101, - "address": "7TYb32qkwYosUQfUspU45cou7Bb3nefJocVMFX2mEGTT", - "symbol": "ETH/USDC", - "name": "Orca LP Token (ETH/USDC)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7TYb32qkwYosUQfUspU45cou7Bb3nefJocVMFX2mEGTT/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://orca.so" - } - }, - { - "chainId": 101, - "address": "METAewgxyPbgwsseH8T16a39CQ5VyVxZi9zXiDPY18m", - "symbol": "META", - "name": "Metaplex", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/METAewgxyPbgwsseH8T16a39CQ5VyVxZi9zXiDPY18m/logo.png", - "extensions": { - "github": "https://github.com/metaplex-foundation/metaplex", - "twitter": "https://twitter.com/metaplex", - "website": "https://metaplex.com" - } - }, - { - "chainId": 101, - "address": "BiJyWQr1Gpke3ouevgGCjtd9sSwSiUxdpnpGvJaoGQNL", - "symbol": "SNG", - "name": "SolNinja-go", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BiJyWQr1Gpke3ouevgGCjtd9sSwSiUxdpnpGvJaoGQNL/logo.png", - "tags": ["utility-token", "social-token"], - "extensions": { - "discord": "https://discord.com/invite/2NsduQUuxt", - "twitter": "https://twitter.com/Solninja_go", - "website": "https://www.solninja-go.art/" - } - }, - { - "chainId": 102, - "address": "METAewgxyPbgwsseH8T16a39CQ5VyVxZi9zXiDPY18m", - "symbol": "META", - "name": "Metaplex", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/METAewgxyPbgwsseH8T16a39CQ5VyVxZi9zXiDPY18m/logo.png", - "extensions": { - "github": "https://github.com/metaplex-foundation/metaplex", - "twitter": "https://twitter.com/metaplex", - "website": "https://metaplex.com" - } - }, - { - "chainId": 103, - "address": "9fvEiugrurd2kzSkqFjhGaUFiZUfP4UWbfprmFEm51M9", - "symbol": "SHILL", - "name": "Shill", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9fvEiugrurd2kzSkqFjhGaUFiZUfP4UWbfprmFEm51M9/logo.png", - "tags": ["SPL-token"] - }, - { - "chainId": 101, - "address": "6cVgJUqo4nmvQpbgrDZwyfd6RwWw5bfnCamS3M9N1fd", - "symbol": "SHILL", - "name": "Project SEED Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6cVgJUqo4nmvQpbgrDZwyfd6RwWw5bfnCamS3M9N1fd/logo.png", - "tags": ["projectseedtoken"], - "extensions": { - "website": "https://projectseed.io" - } - }, - { - "chainId": 101, - "address": "Cgx1ZqFW7Mbg9wduJML1WYQ5XKGqY4Di76gYFj1oCPeJ", - "symbol": "SHILL", - "name": "Project SEED Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Cgx1ZqFW7Mbg9wduJML1WYQ5XKGqY4Di76gYFj1oCPeJ/logo.png", - "tags": ["projectseedtoken"], - "extensions": { - "website": "https://projectseed.io" - } - }, - { - "chainId": 101, - "address": "6b1UGnijVcN6F5fcLnpF6UUkskPonoei4af38ybZrigV", - "symbol": "SHILL", - "name": "Project SEED Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6b1UGnijVcN6F5fcLnpF6UUkskPonoei4af38ybZrigV/logo.png", - "tags": ["projectseedtoken"], - "extensions": { - "website": "https://projectseed.io" - } - }, - { - "chainId": 103, - "address": "G3Cb13RiPcTtdKSfZEyhHCpXkgqyTr9BdVvdUbtERHUR", - "symbol": "SHILL", - "name": "Project SEED Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/G3Cb13RiPcTtdKSfZEyhHCpXkgqyTr9BdVvdUbtERHUR/logo.png", - "tags": ["projectseedtoken"], - "extensions": { - "website": "https://projectseed.io" - } - }, - { - "chainId": 103, - "address": "METAewgxyPbgwsseH8T16a39CQ5VyVxZi9zXiDPY18m", - "symbol": "META", - "name": "Metaplex", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/METAewgxyPbgwsseH8T16a39CQ5VyVxZi9zXiDPY18m/logo.png", - "extensions": { - "github": "https://github.com/metaplex-foundation/metaplex", - "twitter": "https://twitter.com/metaplex", - "website": "https://metaplex.com" - } - }, - { - "chainId": 101, - "address": "EhBAmhkgEsMa8McFB5bpqZaRpZvGBBJ4jN59T5xToPdG", - "symbol": "ETH/USDT-SRM", - "name": "Orca LP Token (ETH/USDT-SRM)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EhBAmhkgEsMa8McFB5bpqZaRpZvGBBJ4jN59T5xToPdG/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://orca.so" - } - }, - { - "chainId": 101, - "address": "8pFwdcuXM7pvHdEGHLZbUR8nNsjj133iUXWG6CgdRHk2", - "symbol": "BTC/ETH", - "name": "Orca LP Token (BTC/ETH)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8pFwdcuXM7pvHdEGHLZbUR8nNsjj133iUXWG6CgdRHk2/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://orca.so" - } - }, - { - "chainId": 101, - "address": "7bb88DAnQY7LSoWEuqezCcbk4vutQbuRqgJMqpX8h6dL", - "symbol": "ETH/SOL", - "name": "Orca LP Token (ETH/SOL)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7bb88DAnQY7LSoWEuqezCcbk4vutQbuRqgJMqpX8h6dL/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://orca.so" - } - }, - { - "chainId": 101, - "address": "GWEmABT4rD3sGhyghv9rKbfdiaFe5uMHeJqr6hhu3XvA", - "symbol": "RAY/SOL", - "name": "Orca LP Token (RAY/SOL)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GWEmABT4rD3sGhyghv9rKbfdiaFe5uMHeJqr6hhu3XvA/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://orca.so" - } - }, - { - "chainId": 101, - "address": "BmZNYGt7aApGTUUxAQUYsW64cMbb6P7uniokCWaptj4D", - "symbol": "SOL/USDT", - "name": "Orca LP Token (SOL/USDT)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BmZNYGt7aApGTUUxAQUYsW64cMbb6P7uniokCWaptj4D/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://orca.so" - } - }, - { - "chainId": 101, - "address": "E4cthfUFaDd4x5t1vbeBNBHm7isqhM8kapthPzPJz1M2", - "symbol": "SOL/USDT-SRM", - "name": "Orca LP Token (SOL/USDT-SRM)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/E4cthfUFaDd4x5t1vbeBNBHm7isqhM8kapthPzPJz1M2/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://orca.so" - } - }, - { - "chainId": 101, - "address": "6ojPekCSQimAjDjaMApLvh3jF6wnZeNEVRVVoGNzEXvV", - "symbol": "SOL/SRM", - "name": "Orca LP Token (SOL/SRM)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6ojPekCSQimAjDjaMApLvh3jF6wnZeNEVRVVoGNzEXvV/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://orca.so" - } - }, - { - "chainId": 101, - "address": "YJRknE9oPhUMtq1VvhjVzG5WnRsjQtLsWg3nbaAwCQ5", - "symbol": "FTT/SOL", - "name": "Orca LP Token (FTT/SOL)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/YJRknE9oPhUMtq1VvhjVzG5WnRsjQtLsWg3nbaAwCQ5/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://orca.so" - } - }, - { - "chainId": 101, - "address": "C9PKvetJPrrPD53PR2aR8NYtVZzucCRkHYzcFXbZXEqu", - "symbol": "KIN/SOL", - "name": "Orca LP Token (KIN/SOL)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/C9PKvetJPrrPD53PR2aR8NYtVZzucCRkHYzcFXbZXEqu/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://orca.so" - } - }, - { - "chainId": 101, - "address": "6SfhBAmuaGf9p3WAxeHJYCWMABnYUMrdzNdK5Stvvj4k", - "symbol": "ROPE/SOL", - "name": "Orca LP Token (ROPE/SOL)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6SfhBAmuaGf9p3WAxeHJYCWMABnYUMrdzNdK5Stvvj4k/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://orca.so" - } - }, - { - "chainId": 101, - "address": "9r1n79TmerAgQJboUT8QvrChX3buZBfuSrBTtYM1cW4h", - "symbol": "SOL/STEP", - "name": "Orca LP Token (SOL/STEP)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9r1n79TmerAgQJboUT8QvrChX3buZBfuSrBTtYM1cW4h/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://orca.so" - } - }, - { - "chainId": 101, - "address": "ELLELFtgvWBgLkdY9EFx4Vb3SLNj4DJEhzZLWy1wCh4Y", - "symbol": "OXY/SOL", - "name": "Orca LP Token (OXY/SOL)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ELLELFtgvWBgLkdY9EFx4Vb3SLNj4DJEhzZLWy1wCh4Y/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://orca.so" - } - }, - { - "chainId": 101, - "address": "BXM9ph4AuhCUzf94HQu5FnfeVThKj5oyrnb1krY1zax5", - "symbol": "MER/SOL", - "name": "Orca LP Token (MER/SOL)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BXM9ph4AuhCUzf94HQu5FnfeVThKj5oyrnb1krY1zax5/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://orca.so" - } - }, - { - "chainId": 101, - "address": "FJ9Q9ojA7vdf5rFbcTc6dd7D3nLpwSxdtFSE8cwfuvqt", - "symbol": "FIDA/SOL", - "name": "Orca LP Token (FIDA/SOL)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FJ9Q9ojA7vdf5rFbcTc6dd7D3nLpwSxdtFSE8cwfuvqt/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://orca.so" - } - }, - { - "chainId": 101, - "address": "EHkfnhKLLTUqo1xMZLxhM9EusEgpN6RXPpZsGpUsewaa", - "symbol": "MAPS/SOL", - "name": "Orca LP Token (MAPS/SOL)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EHkfnhKLLTUqo1xMZLxhM9EusEgpN6RXPpZsGpUsewaa/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://orca.so" - } - }, - { - "chainId": 101, - "address": "9rguDaKqTrVjaDXafq6E7rKGn7NPHomkdb8RKpjKCDm2", - "symbol": "SAMO/SOL", - "name": "Orca LP Token (SAMO/SOL)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9rguDaKqTrVjaDXafq6E7rKGn7NPHomkdb8RKpjKCDm2/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://orca.so" - } - }, - { - "chainId": 101, - "address": "2697FyJ4vD9zwAVPr33fdVPDv54pyZZiBv9S2AoKMyQf", - "symbol": "COPE/SOL", - "name": "Orca LP Token (COPE/SOL)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2697FyJ4vD9zwAVPr33fdVPDv54pyZZiBv9S2AoKMyQf/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://orca.so" - } - }, - { - "chainId": 101, - "address": "57vGdcMZLnbNr4TZ4hgrpGJZGR9vTPhu8L9bNKDrqxKT", - "symbol": "LIQ/USDC", - "name": "Orca Aquafarm Token (LIQ/USDC)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/57vGdcMZLnbNr4TZ4hgrpGJZGR9vTPhu8L9bNKDrqxKT/logo.svg", - "tags": ["lp-token"], - "extensions": { - "website": "https://orca.so" - } - }, - { - "chainId": 101, - "address": "FFdjrSvNALfdgxANNpt3x85WpeVMdQSH5SEP2poM8fcK", - "symbol": "SOL/USDC", - "name": "Orca Aquafarm Token (SOL/USDC)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FFdjrSvNALfdgxANNpt3x85WpeVMdQSH5SEP2poM8fcK/logo.svg", - "tags": ["lp-token"], - "extensions": { - "website": "https://orca.so" - } - }, - { - "chainId": 101, - "address": "71vZ7Jvu8fTyFzpX399dmoSovoz24rVbipLrRn2wBNzW", - "symbol": "SOL/USDT", - "name": "Orca Aquafarm Token (SOL/USDT)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/71vZ7Jvu8fTyFzpX399dmoSovoz24rVbipLrRn2wBNzW/logo.svg", - "tags": ["lp-token"], - "extensions": { - "website": "https://orca.so" - } - }, - { - "chainId": 101, - "address": "CGFTRh4jKLPbS9r4hZtbDfaRuC7qcA8rZpbLnVTzJBer", - "symbol": "ETH/SOL", - "name": "Orca Aquafarm Token (ETH/SOL)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CGFTRh4jKLPbS9r4hZtbDfaRuC7qcA8rZpbLnVTzJBer/logo.svg", - "tags": ["lp-token"], - "extensions": { - "website": "https://orca.so" - } - }, - { - "chainId": 101, - "address": "HDP2AYFmvLz6sWpoSuNS62JjvW4HjMKp7doXucqpWN56", - "symbol": "ETH/USDC", - "name": "Orca Aquafarm Token (ETH/USDC)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HDP2AYFmvLz6sWpoSuNS62JjvW4HjMKp7doXucqpWN56/logo.svg", - "tags": ["lp-token"], - "extensions": { - "website": "https://orca.so" - } - }, - { - "chainId": 101, - "address": "AUkn5f4N4TqPA5BiWirTDHWnG3SePfmeDpDqrFmhSgKb", - "symbol": "RAY/SOL", - "name": "Orca Aquafarm Token (RAY/SOL)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AUkn5f4N4TqPA5BiWirTDHWnG3SePfmeDpDqrFmhSgKb/logo.svg", - "tags": ["lp-token"], - "extensions": { - "website": "https://orca.so" - } - }, - { - "chainId": 101, - "address": "xpPyQwQ1HXHyEpvFGyTQRLY6rmj6jtAdEgLMV5uoz4m", - "symbol": "ROPE/SOL", - "name": "Orca Aquafarm Token (ROPE/SOL)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/xpPyQwQ1HXHyEpvFGyTQRLY6rmj6jtAdEgLMV5uoz4m/logo.svg", - "tags": ["lp-token"], - "extensions": { - "website": "https://orca.so" - } - }, - { - "chainId": 101, - "address": "GwrBA1F8rGummDCDd8NY9Eu1cLNuJqbT8WaGxgWpFwGL", - "symbol": "STEP/SOL", - "name": "Orca Aquafarm Token (STEP/SOL)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GwrBA1F8rGummDCDd8NY9Eu1cLNuJqbT8WaGxgWpFwGL/logo.svg", - "tags": ["lp-token"], - "extensions": { - "website": "https://orca.so" - } - }, - { - "chainId": 101, - "address": "D659zwnbeTgquChbaWC3KDHrkYoqMuz1doGLHTFaqTtD", - "symbol": "SRM/SOL", - "name": "Orca Aquafarm Token (SRM/SOL)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/D659zwnbeTgquChbaWC3KDHrkYoqMuz1doGLHTFaqTtD/logo.svg", - "tags": ["lp-token"], - "extensions": { - "website": "https://orca.so" - } - }, - { - "chainId": 101, - "address": "9r9BcPwCon96P5Y6JSdRAog7Uknz9p9GrnuHm4VzuB9k", - "symbol": "FTT/SOL", - "name": "Orca Aquafarm Token (FTT/SOL)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9r9BcPwCon96P5Y6JSdRAog7Uknz9p9GrnuHm4VzuB9k/logo.svg", - "tags": ["lp-token"], - "extensions": { - "website": "https://orca.so" - } - }, - { - "chainId": 101, - "address": "7CT19h7n2YBKiCFCaxXqMM79jNM4cmUvjXhNMjJNRYa", - "symbol": "COPE/SOL", - "name": "Orca Aquafarm Token (COPE/SOL)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7CT19h7n2YBKiCFCaxXqMM79jNM4cmUvjXhNMjJNRYa/logo.svg", - "tags": ["lp-token"], - "extensions": { - "website": "https://orca.so" - } - }, - { - "chainId": 101, - "address": "G48RkwsNYd3A4rBfuQhCswr9YUE63fFmZGyhgH95dq3S", - "symbol": "OXY/SOL", - "name": "Orca Aquafarm Token (OXY/SOL)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/G48RkwsNYd3A4rBfuQhCswr9YUE63fFmZGyhgH95dq3S/logo.svg", - "tags": ["lp-token"], - "extensions": { - "website": "https://orca.so" - } - }, - { - "chainId": 101, - "address": "GxmjQZvgwNCh3QSRNB8CPED81hzySem62PDDuMp4B379", - "symbol": "BTC/SOL", - "name": "Orca Aquafarm Token (BTC/SOL)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GxmjQZvgwNCh3QSRNB8CPED81hzySem62PDDuMp4B379/logo.svg", - "tags": ["lp-token"], - "extensions": { - "website": "https://orca.so" - } - }, - { - "chainId": 101, - "address": "CrKVRnH6iGbFXxEnXMn3Emwv3Fe7VwxEqpA8zNbwsgkH", - "symbol": "MER/SOL", - "name": "Orca Aquafarm Token (MER/SOL)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CrKVRnH6iGbFXxEnXMn3Emwv3Fe7VwxEqpA8zNbwsgkH/logo.svg", - "tags": ["lp-token"], - "extensions": { - "website": "https://orca.so" - } - }, - { - "chainId": 101, - "address": "4geGcEfgVjzJGZAaT8iTicPm1XLDPjdSpVhtA99sZ7jX", - "symbol": "FIDA/SOL", - "name": "Orca Aquafarm Token (FIDA/SOL)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4geGcEfgVjzJGZAaT8iTicPm1XLDPjdSpVhtA99sZ7jX/logo.svg", - "tags": ["lp-token"], - "extensions": { - "website": "https://orca.so" - } - }, - { - "chainId": 101, - "address": "7Dy84zJNHzEM9335BrtFjCuunt2VgxJ7KBT6PJarxKMq", - "symbol": "MAPS/SOL", - "name": "Orca Aquafarm Token (MAPS/SOL)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7Dy84zJNHzEM9335BrtFjCuunt2VgxJ7KBT6PJarxKMq/logo.svg", - "tags": ["lp-token"], - "extensions": { - "website": "https://orca.so" - } - }, - { - "chainId": 101, - "address": "GjpXgKwn4VW4J2pZdS3dovM58hiXWLJtopTfqG83zY2f", - "symbol": "USDC/USDT[stable]", - "name": "Orca Aquafarm Token (USDC/USDT[stable])", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GjpXgKwn4VW4J2pZdS3dovM58hiXWLJtopTfqG83zY2f/logo.svg", - "tags": ["lp-token"], - "extensions": { - "website": "https://orca.so" - } - }, - { - "chainId": 101, - "address": "B5waaKnsmtqFawPspUwcuy1cRjAC7u2LrHSwxPSxK4sZ", - "symbol": "ORCA/SOL", - "name": "Orca Aquafarm Token (ORCA/SOL)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/B5waaKnsmtqFawPspUwcuy1cRjAC7u2LrHSwxPSxK4sZ/logo.svg", - "tags": ["lp-token"], - "extensions": { - "website": "https://orca.so" - } - }, - { - "chainId": 101, - "address": "Gc7W5U66iuHQcC1cQyeX9hxkPF2QUVJPTf1NWbW8fNrt", - "symbol": "ORCA/USDC", - "name": "Orca Aquafarm Token (ORCA/USDC)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Gc7W5U66iuHQcC1cQyeX9hxkPF2QUVJPTf1NWbW8fNrt/logo.svg", - "tags": ["lp-token"], - "extensions": { - "website": "https://orca.so" - } - }, - { - "chainId": 101, - "address": "7Ho3ht7krdFELBcPAsGXFfQMyG4PUvYSfpz4aNBRP3Ek", - "symbol": "KIN/SOL", - "name": "Orca Aquafarm Token (KIN/SOL)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7Ho3ht7krdFELBcPAsGXFfQMyG4PUvYSfpz4aNBRP3Ek/logo.svg", - "tags": ["lp-token"], - "extensions": { - "website": "https://orca.so" - } - }, - { - "chainId": 101, - "address": "CNf8gZtLahBWxKe3YwsqywLHMTewGqvq6pJ5ecg3cTYU", - "symbol": "SAMO/SOL", - "name": "Orca Aquafarm Token (SAMO/SOL)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CNf8gZtLahBWxKe3YwsqywLHMTewGqvq6pJ5ecg3cTYU/logo.svg", - "tags": ["lp-token"], - "extensions": { - "website": "https://orca.so" - } - }, - { - "chainId": 101, - "address": "6Qw5Gzf1TkM3YRe7Dh6yMVMo2wnJxRiCUBP8abTTn9Yg", - "symbol": "SNY/USDC", - "name": "Orca Aquafarm Token (SNY/USDC)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6Qw5Gzf1TkM3YRe7Dh6yMVMo2wnJxRiCUBP8abTTn9Yg/logo.svg", - "tags": ["lp-token"], - "extensions": { - "website": "https://orca.so" - } - }, - { - "chainId": 101, - "address": "5r3vDsNTGXXb9cGQfqyNuYD2bjhRPymGJBfDmKosR9Ev", - "symbol": "mSOL/USDC", - "name": "Orca Aquafarm Token (mSOL/USDC)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5r3vDsNTGXXb9cGQfqyNuYD2bjhRPymGJBfDmKosR9Ev/logo.svg", - "tags": ["lp-token"], - "extensions": { - "website": "https://orca.so" - } - }, - { - "chainId": 101, - "address": "66xCxkffQZKBZLiHV3PDcfR8ANJTfnDRxPCaBdv4wxB7", - "symbol": "SLRS/USDC", - "name": "Orca Aquafarm Token (SLRS/USDC)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/66xCxkffQZKBZLiHV3PDcfR8ANJTfnDRxPCaBdv4wxB7/logo.svg", - "tags": ["lp-token"], - "extensions": { - "website": "https://orca.so" - } - }, - { - "chainId": 101, - "address": "4CGxvZdwiZgVMLXiTdJHTkJRUTpTSJCtmtCRbSkAxerE", - "symbol": "PORT/USDC", - "name": "Orca Aquafarm Token (PORT/USDC)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4CGxvZdwiZgVMLXiTdJHTkJRUTpTSJCtmtCRbSkAxerE/logo.svg", - "tags": ["lp-token"], - "extensions": { - "website": "https://orca.so" - } - }, - { - "chainId": 101, - "address": "7YyhptkxY81HPzFVfyCzA5UXxWdsNRD41ofLva3TuSpd", - "symbol": "NINJA/SOL", - "name": "Orca Aquafarm Token (NINJA/SOL)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FgX1WD9WzMU3yLwXaFSarPfkgzjLb2DZCqmkx9ExpuvJ/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://orca.so" - } - }, - { - "chainId": 101, - "address": "Db7mPGrZbswvFmJ7MgZsM6CFhnXHMnrUDqr2hrzmi7Re", - "symbol": "NINJA/SOL", - "name": "Orca Double Dip Token (NINJA/SOL)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FgX1WD9WzMU3yLwXaFSarPfkgzjLb2DZCqmkx9ExpuvJ/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://orca.so" - } - }, - { - "chainId": 101, - "address": "HFmY1ggCsCky1zJ1sfdkNR4zb3u5n38YNRdf4vsGu17t", - "symbol": "ATLAS/USDC", - "name": "Orca Aquafarm Token (ATLAS/USDC[aquafarm])", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HFmY1ggCsCky1zJ1sfdkNR4zb3u5n38YNRdf4vsGu17t/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://www.orca.so" - } - }, - { - "chainId": 101, - "address": "63JUKLnCAuNMPSPioEgbjjzp9Qk8qSEEM8eZqEtPqfLU", - "symbol": "POLIS/USDC", - "name": "Orca Aquafarm Token (POLIS/USDC[aquafarm])", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/63JUKLnCAuNMPSPioEgbjjzp9Qk8qSEEM8eZqEtPqfLU/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://www.orca.so" - } - }, - { - "chainId": 101, - "address": "A7vvbqENJj8kED3ABjphe8TvwpasQYtoWGKpjpLArMxa", - "symbol": "BOP/USDC", - "name": "Orca Aquafarm Token (BOP/USDC[aquafarm])", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/A7vvbqENJj8kED3ABjphe8TvwpasQYtoWGKpjpLArMxa/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://www.orca.so" - } - }, - { - "chainId": 101, - "address": "9voVuTq1S9bFZkF2Jo44HoVG63w2xDRT8eBzB23YbQud", - "symbol": "SAMO/USDC", - "name": "Orca Aquafarm Token (SAMO/USDC[aquafarm])", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9voVuTq1S9bFZkF2Jo44HoVG63w2xDRT8eBzB23YbQud/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://www.orca.so" - } - }, - { - "chainId": 101, - "address": "3K7aZhtwWJ2JS6GnbbgeDVnxd1q2hwhqasmgRsAMZ4yC", - "symbol": "SLIM/USDC", - "name": "Orca Aquafarm Token (SLIM/USDC[aquafarm])", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3K7aZhtwWJ2JS6GnbbgeDVnxd1q2hwhqasmgRsAMZ4yC/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://www.orca.so" - } - }, - { - "chainId": 101, - "address": "Bfoi3RNnfdP5VeRGqvTA8MRN9ePGJoZgeKfe8WeBHUxE", - "symbol": "wHAPI/USDC", - "name": "Orca Aquafarm Token (wHAPI/USDC[aquafarm])", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Bfoi3RNnfdP5VeRGqvTA8MRN9ePGJoZgeKfe8WeBHUxE/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://www.orca.so" - } - }, - { - "chainId": 101, - "address": "9SDpBrfqNxjXcCzpKWM6yUKdfky975VJBD6xcu5cKf5s", - "symbol": "COPE/USDC", - "name": "Orca Aquafarm Token (COPE/USDC[aquafarm])", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9SDpBrfqNxjXcCzpKWM6yUKdfky975VJBD6xcu5cKf5s/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://www.orca.so" - } - }, - { - "chainId": 101, - "address": "9HPn1oREyNA7CEK7B1xwmBmVH6qtQaSfLBXc1JyRsdUE", - "symbol": "SUNNY/USDC", - "name": "Orca Aquafarm Token (SUNNY/USDC[aquafarm])", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9HPn1oREyNA7CEK7B1xwmBmVH6qtQaSfLBXc1JyRsdUE/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://www.orca.so" - } - }, - { - "chainId": 101, - "address": "97q89hnoKwqcynvwXcj83YqfqUBuCm4A8f2zHeV6bfZg", - "symbol": "GRAPE/USDC", - "name": "Orca Aquafarm Token (GRAPE/USDC[aquafarm])", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/97q89hnoKwqcynvwXcj83YqfqUBuCm4A8f2zHeV6bfZg/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://www.orca.so" - } - }, - { - "chainId": 101, - "address": "5uR5STASUmoGVHzqMeut98t26TfVkQqWU9f9dsv3NfJ6", - "symbol": "ABR/USDC", - "name": "Orca Aquafarm Token (ABR/USDC[aquafarm])", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5uR5STASUmoGVHzqMeut98t26TfVkQqWU9f9dsv3NfJ6/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://www.orca.so" - } - }, - { - "chainId": 101, - "address": "6PGoaQdL9e463hdaFxHXsuPcjCHRK32CQ9PFKxvM7XY2", - "symbol": "KURO/USDC", - "name": "Orca Aquafarm Token (KURO/USDC[aquafarm])", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6PGoaQdL9e463hdaFxHXsuPcjCHRK32CQ9PFKxvM7XY2/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://www.orca.so" - } - }, - { - "chainId": 101, - "address": "3pMYToENTB7jKrJiUPq19FCZCWE35Ph7bkRRMN6kxDXK", - "symbol": "MEDIA/USDC", - "name": "Orca Aquafarm Token (MEDIA/USDC[aquafarm])", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3pMYToENTB7jKrJiUPq19FCZCWE35Ph7bkRRMN6kxDXK/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://www.orca.so" - } - }, - { - "chainId": 101, - "address": "2KYUwdRbVtaMUgHp1a6NuTomyCb33FxoZ4fkeVdwjaJA", - "symbol": "TULIP/USDC", - "name": "Orca Aquafarm Token (TULIP/USDC[aquafarm])", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2KYUwdRbVtaMUgHp1a6NuTomyCb33FxoZ4fkeVdwjaJA/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://www.orca.so" - } - }, - { - "chainId": 101, - "address": "CxhcLZtbhfkwjAZ956SEkGxkAvMVQH3hfKTjKpgTV9Q5", - "symbol": "MNGO/USDC", - "name": "Orca Aquafarm Token (MNGO/USDC[aquafarm])", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CxhcLZtbhfkwjAZ956SEkGxkAvMVQH3hfKTjKpgTV9Q5/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://www.orca.so" - } - }, - { - "chainId": 101, - "address": "3kT3oYuS1rCfhmqfgy6EKcbZdaJimaVEjoy25QiuEaoj", - "symbol": "stSOL/wstETH", - "name": "Orca Aquafarm Token (stSOL/wstETH[aquafarm])", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3kT3oYuS1rCfhmqfgy6EKcbZdaJimaVEjoy25QiuEaoj/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://www.orca.so" - } - }, - { - "chainId": 101, - "address": "Ds4VGZhZzS2PMFzhzKeC3mwcQjdiCG21R76fTVbsSJyJ", - "symbol": "SYP/USDC", - "name": "Orca Aquafarm Token (SYP/USDC[aquafarm])", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Ds4VGZhZzS2PMFzhzKeC3mwcQjdiCG21R76fTVbsSJyJ/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://www.orca.so" - } - }, - { - "chainId": 101, - "address": "DQsbebdNDy8yQrwLTpieckhzi7Ewx9LoCPVf7G9KvY2U", - "symbol": "stSOL/wLDO", - "name": "Orca Aquafarm Token (stSOL/wLDO[aquafarm])", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DQsbebdNDy8yQrwLTpieckhzi7Ewx9LoCPVf7G9KvY2U/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://www.orca.so" - } - }, - { - "chainId": 101, - "address": "FkHQBBZGh5GS4GcXpcVksKYUUkLTNn6Yk1PCMxucR2AK", - "symbol": "whETH/SOL", - "name": "Orca Aquafarm Token (whETH/SOL[aquafarm])", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FkHQBBZGh5GS4GcXpcVksKYUUkLTNn6Yk1PCMxucR2AK/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://www.orca.so" - } - }, - { - "chainId": 101, - "address": "B11Xp26xU2gzjToJEuGswvr6Jtidfh4GRUyCWzWMNdQZ", - "symbol": "whETH/USDC", - "name": "Orca Aquafarm Token (whETH/USDC[aquafarm])", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/B11Xp26xU2gzjToJEuGswvr6Jtidfh4GRUyCWzWMNdQZ/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://www.orca.so" - } - }, - { - "chainId": 101, - "address": "2wPsMuzhEsC6GhV3qtFpmJF6atEgLGbnmQ8U43Y6fPxZ", - "symbol": "MNDE/mSOL", - "name": "Orca Aquafarm Token (MNDE/mSOL[aquafarm])", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2wPsMuzhEsC6GhV3qtFpmJF6atEgLGbnmQ8U43Y6fPxZ/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://www.orca.so" - } - }, - { - "chainId": 101, - "address": "8Wu5sJpERA1J5iWcT8aMpt9cTAfKDLPbLpGjNsJoPgLc", - "symbol": "WAG/USDC", - "name": "Orca Aquafarm Token (WAG/USDC[aquafarm])", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8Wu5sJpERA1J5iWcT8aMpt9cTAfKDLPbLpGjNsJoPgLc/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://www.orca.so" - } - }, - { - "chainId": 101, - "address": "Afvh7TWfcT1E9eEEWJk17fPjnqk36hreTJJK5g3s4fm8", - "symbol": "mSOL/USDT", - "name": "Orca Aquafarm Token (mSOL/USDT[aquafarm])", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Afvh7TWfcT1E9eEEWJk17fPjnqk36hreTJJK5g3s4fm8/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://www.orca.so" - } - }, - { - "chainId": 101, - "address": "58nifjPjF3CutGz2xMxvAMk7R9YgbVEc8Cstj4rCcs8j", - "symbol": "mSOL/whETH", - "name": "Orca Aquafarm Token (mSOL/whETH[aquafarm])", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/58nifjPjF3CutGz2xMxvAMk7R9YgbVEc8Cstj4rCcs8j/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://www.orca.so" - } - }, - { - "chainId": 101, - "address": "DzpLz78wuwyFsQToin8iDv6YK6aBEymRqQq82swiFh7r", - "symbol": "BTC/mSOL", - "name": "Orca Aquafarm Token (BTC/mSOL[aquafarm])", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DzpLz78wuwyFsQToin8iDv6YK6aBEymRqQq82swiFh7r/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://www.orca.so" - } - }, - { - "chainId": 101, - "address": "5rGtJDiJhD5Mx2fvdEYuLrCiWaMD9z3wpmJSxwGHmo4u", - "symbol": "LIQ/USDC", - "name": "Orca Double Dip Token (LIQ/USDC[aquafarm])", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5rGtJDiJhD5Mx2fvdEYuLrCiWaMD9z3wpmJSxwGHmo4u/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://www.orca.so" - } - }, - { - "chainId": 101, - "address": "Gs1fM7EFS1rXkxhqs4mwu9uvSkupNzZgRbHGxG2NGRh7", - "symbol": "STEP/SOL", - "name": "Orca Double Dip Token (STEP/SOL[aquafarm])", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Gs1fM7EFS1rXkxhqs4mwu9uvSkupNzZgRbHGxG2NGRh7/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://www.orca.so" - } - }, - { - "chainId": 101, - "address": "F3rWkGAtdjWcU1rr16Wq4YPTgFdsyb1oS1xdy5tr9K1r", - "symbol": "SLRS/USDC", - "name": "Orca Double Dip Token (SLRS/USDC[aquafarm])", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/F3rWkGAtdjWcU1rr16Wq4YPTgFdsyb1oS1xdy5tr9K1r/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://www.orca.so" - } - }, - { - "chainId": 101, - "address": "Zm2dmUuuBicmvHxGAnAzaohZR2Y86gXEV2WMfo8AoCa", - "symbol": "PORT/USDC", - "name": "Orca Double Dip Token (PORT/USDC[aquafarm])", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Zm2dmUuuBicmvHxGAnAzaohZR2Y86gXEV2WMfo8AoCa/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://www.orca.so" - } - }, - { - "chainId": 101, - "address": "AtcMEt9caZxpunQV99pxED2rhpQmaDykBreEqBsYU11v", - "symbol": "COPE/USDC", - "name": "Orca Double Dip Token (COPE/USDC[aquafarm])", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AtcMEt9caZxpunQV99pxED2rhpQmaDykBreEqBsYU11v/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://www.orca.so" - } - }, - { - "chainId": 101, - "address": "CjGUbKiH1QmFFjMqhAbJn4DrbjgBWUhQHV4LuzrgpFqi", - "symbol": "BOP/USDC", - "name": "Orca Double Dip Token (BOP/USDC[aquafarm])", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CjGUbKiH1QmFFjMqhAbJn4DrbjgBWUhQHV4LuzrgpFqi/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://www.orca.so" - } - }, - { - "chainId": 101, - "address": "EdfAy8jwnvU1z61UaFUjwoRPFgD3UkkPvnhEBZjzwhv8", - "symbol": "SAMO/USDC", - "name": "Orca Double Dip Token (SAMO/USDC[aquafarm])", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EdfAy8jwnvU1z61UaFUjwoRPFgD3UkkPvnhEBZjzwhv8/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://www.orca.so" - } - }, - { - "chainId": 101, - "address": "41VBoy8SGJzQnWGcxiBL4yM6H68FiPp74aMvsZGNGCbt", - "symbol": "wHAPI/USDC", - "name": "Orca Double Dip Token (wHAPI/USDC[aquafarm])", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/41VBoy8SGJzQnWGcxiBL4yM6H68FiPp74aMvsZGNGCbt/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://www.orca.so" - } - }, - { - "chainId": 101, - "address": "HhDk3ySWkVbMZjgBsFSnLtAeudDCrfZ6DNSRgxh2oRUp", - "symbol": "SLIM/USDC", - "name": "Orca Double Dip Token (SLIM/USDC[aquafarm])", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HhDk3ySWkVbMZjgBsFSnLtAeudDCrfZ6DNSRgxh2oRUp/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://www.orca.so" - } - }, - { - "chainId": 101, - "address": "894ptAFT7d3inPsWTniCGL2NZpJDiXGvFZFfuHXA1w8F", - "symbol": "ATLAS/USDC", - "name": "Orca Double Dip Token (ATLAS/USDC[aquafarm])", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/894ptAFT7d3inPsWTniCGL2NZpJDiXGvFZFfuHXA1w8F/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://www.orca.so" - } - }, - { - "chainId": 101, - "address": "FE1QJzi5RA5aKnTfSV3DAMN3z4uHUzSR5Z4drs9S5vB", - "symbol": "POLIS/USDC", - "name": "Orca Double Dip Token (POLIS/USDC[aquafarm])", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FE1QJzi5RA5aKnTfSV3DAMN3z4uHUzSR5Z4drs9S5vB/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://www.orca.so" - } - }, - { - "chainId": 101, - "address": "7bp7psdaC3DVc86Hmdz5tAMEjgPjmCzgFEVALfqBwMmz", - "symbol": "ABR/USDC", - "name": "Orca Double Dip Token (ABR/USDC[aquafarm])", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7bp7psdaC3DVc86Hmdz5tAMEjgPjmCzgFEVALfqBwMmz/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://www.orca.so" - } - }, - { - "chainId": 101, - "address": "88RCQs9VFvqPjsRe3PKNzBeMtzCS9oS1a1CJuAnGnLZJ", - "symbol": "KURO/USDC", - "name": "Orca Double Dip Token (KURO/USDC[aquafarm])", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/88RCQs9VFvqPjsRe3PKNzBeMtzCS9oS1a1CJuAnGnLZJ/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://www.orca.so" - } - }, - { - "chainId": 101, - "address": "9y3QYM5mcaB8tU7oXRzAQnzHVa75P8riDuPievLp64cY", - "symbol": "mSOL/USDC", - "name": "Orca Double Dip Token (mSOL/USDC[aquafarm])", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9y3QYM5mcaB8tU7oXRzAQnzHVa75P8riDuPievLp64cY/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://www.orca.so" - } - }, - { - "chainId": 101, - "address": "876yhw4J4GHyynNJUtARYEnWGaejhrWC7Hy3DAm1pZxi", - "symbol": "ORCA/mSOL", - "name": "Orca Double Dip Token (ORCA/mSOL[aquafarm])", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/876yhw4J4GHyynNJUtARYEnWGaejhrWC7Hy3DAm1pZxi/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://www.orca.so" - } - }, - { - "chainId": 101, - "address": "576ABEdvLG1iFU3bLC8AMJ3mo5LhfgPPhMtTeVAGG6u7", - "symbol": "mSOL/SOL[stable]", - "name": "Orca Double Dip Token (mSOL/SOL[stable][aquafarm])", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/576ABEdvLG1iFU3bLC8AMJ3mo5LhfgPPhMtTeVAGG6u7/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://www.orca.so" - } - }, - { - "chainId": 101, - "address": "5WXyG6zL1HmESPCSHHKBtqLuRPZCNgd9mTB25op87FkU", - "symbol": "stSOL/wstETH", - "name": "Orca Double Dip Token (stSOL/wstETH[aquafarm])", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5WXyG6zL1HmESPCSHHKBtqLuRPZCNgd9mTB25op87FkU/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://www.orca.so" - } - }, - { - "chainId": 101, - "address": "BpHfwFwJwkZKWY5xVMC3oifMvWRy42R4VE1vPeBzg2G1", - "symbol": "SYP/USDC", - "name": "Orca Double Dip Token (SYP/USDC[aquafarm])", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BpHfwFwJwkZKWY5xVMC3oifMvWRy42R4VE1vPeBzg2G1/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://www.orca.so" - } - }, - { - "chainId": 101, - "address": "2FMpVEhvxiFxhfideFUMNxCoUZK3TfhezzajoHGTQKP2", - "symbol": "MNDE/mSOL", - "name": "Orca Double Dip Token (MNDE/mSOL[aquafarm])", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2FMpVEhvxiFxhfideFUMNxCoUZK3TfhezzajoHGTQKP2/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://www.orca.so" - } - }, - { - "chainId": 101, - "address": "7iKG16aukdXXw43MowbfrGqXhAoYe51iVR9u2Nf2dCEY", - "symbol": "mSOL/USDT", - "name": "Orca Double Dip Token (mSOL/USDT[aquafarm])", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7iKG16aukdXXw43MowbfrGqXhAoYe51iVR9u2Nf2dCEY/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://www.orca.so" - } - }, - { - "chainId": 101, - "address": "3kFeVJUxhQS7PE7vV8pt9bhTCQrUDqeGf6AU4sjkLzVt", - "symbol": "mSOL/whETH", - "name": "Orca Double Dip Token (mSOL/whETH[aquafarm])", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3kFeVJUxhQS7PE7vV8pt9bhTCQrUDqeGf6AU4sjkLzVt/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://www.orca.so" - } - }, - { - "chainId": 101, - "address": "6uA1ADUJbvwYJZpzUn9z9LuyKoRVngBKcQTKdXsSivA8", - "symbol": "BTC/mSOL", - "name": "Orca Double Dip Token (BTC/mSOL[aquafarm])", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6uA1ADUJbvwYJZpzUn9z9LuyKoRVngBKcQTKdXsSivA8/logo.svg", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/orca_so", - "website": "https://www.orca.so" - } - }, - { - "chainId": 101, - "address": "E52bRrLGu1YFHBLNTWhdeGoYKyp1UYCTjB7XPoFgapYS", - "symbol": "SAPN", - "name": "Sapling Network", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/E52bRrLGu1YFHBLNTWhdeGoYKyp1UYCTjB7XPoFgapYS/logo.png", - "tags": ["sapling", "ecofriendly-token"], - "extensions": { - "discord": "https://discord.gg/xvCFjyF5wS", - "github": "https://github.com/SaplingNetwork", - "instagram": "https://instagram.com/saplingnetwork", - "telegram": "https://t.me/saplingnetwork", - "twitter": "https://twitter.com/Sapling_Network", - "website": "http://sapling.network" - } - }, - { - "chainId": 101, - "address": "HEhMLvpSdPviukafKwVN8BnBUTamirptsQ6Wxo5Cyv8s", - "symbol": "FTR", - "name": "Future", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HEhMLvpSdPviukafKwVN8BnBUTamirptsQ6Wxo5Cyv8s/logo.png", - "extensions": { - "twitter": "https://twitter.com/ftr_finance", - "website": "https://future-ftr.io" - } - }, - { - "chainId": 101, - "address": "6oJ8Mp1VnKxN5MvGf9LfpeaRvTv8N1xFbvtdEbLLWUDT", - "symbol": "ESC", - "name": "ESCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6oJ8Mp1VnKxN5MvGf9LfpeaRvTv8N1xFbvtdEbLLWUDT/logo.png", - "extensions": { - "twitter": "https://twitter.com/coin_esc", - "website": "https://escoin.company/" - } - }, - { - "chainId": 101, - "address": "Da1jboBKU3rqXUqPL3L3BxJ8e67ogVgVKcqy4rWsS7LC", - "symbol": "UBE", - "name": "UBE Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Da1jboBKU3rqXUqPL3L3BxJ8e67ogVgVKcqy4rWsS7LC/logo.png", - "extensions": { - "twitter": "https://twitter.com/ube_token", - "website": "https://www.ubetoken.com" - } - }, - { - "chainId": 101, - "address": "CDJWUqTcYTVAKXAVXoQZFes5JUFc7owSeq7eMQcDSbo5", - "symbol": "renBTC", - "name": "renBTC", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CDJWUqTcYTVAKXAVXoQZFes5JUFc7owSeq7eMQcDSbo5/logo.png", - "extensions": { - "coingeckoId": "renbtc", - "serumV3Usdc": "74Ciu5yRzhe8TFTHvQuEVbFZJrbnCMRoohBK33NNiPtv", - "website": "https://renproject.io/" - } - }, - { - "chainId": 101, - "address": "G1a6jxYz3m8DVyMqYnuV7s86wD4fvuXYneWSpLJkmsXj", - "symbol": "renBCH", - "name": "renBCH", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/G1a6jxYz3m8DVyMqYnuV7s86wD4fvuXYneWSpLJkmsXj/logo.png", - "extensions": { - "coingeckoId": "renbch", - "serumV3Usdc": "FS8EtiNZCH72pAK83YxqXaGAgk3KKFYphiTcYA2yRPis", - "website": "https://renproject.io/" - } - }, - { - "chainId": 101, - "address": "FKJvvVJ242tX7zFtzTmzqoA631LqHh4CdgcN8dcfFSju", - "symbol": "renDGB", - "name": "renDGB", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FKJvvVJ242tX7zFtzTmzqoA631LqHh4CdgcN8dcfFSju/logo.png", - "extensions": { - "website": "https://renproject.io/" - } - }, - { - "chainId": 101, - "address": "ArUkYE2XDKzqy77PRRGjo4wREWwqk6RXTfM9NeqzPvjU", - "symbol": "renDOGE", - "name": "renDOGE", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ArUkYE2XDKzqy77PRRGjo4wREWwqk6RXTfM9NeqzPvjU/logo.png", - "extensions": { - "coingeckoId": "rendoge", - "serumV3Usdc": "5FpKCWYXgHWZ9CdDMHjwxAfqxJLdw2PRXuAmtECkzADk", - "website": "https://renproject.io/" - } - }, - { - "chainId": 101, - "address": "8wv2KAykQstNAj2oW6AHANGBiFKVFhvMiyyzzjhkmGvE", - "symbol": "renLUNA", - "name": "renLUNA", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8wv2KAykQstNAj2oW6AHANGBiFKVFhvMiyyzzjhkmGvE/logo.png", - "extensions": { - "serumV3Usdc": "CxDhLbbM9uAA2AXfSPar5qmyfmC69NLj3vgJXYAsSVBT", - "website": "https://renproject.io/" - } - }, - { - "chainId": 101, - "address": "E99CQ2gFMmbiyK2bwiaFNWUUmwz4r8k2CVEFxwuvQ7ue", - "symbol": "renZEC", - "name": "renZEC", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/E99CQ2gFMmbiyK2bwiaFNWUUmwz4r8k2CVEFxwuvQ7ue/logo.png", - "extensions": { - "coingeckoId": "renzec", - "serumV3Usdc": "2ahbUT5UryyRVxPnELtTmDLLneN26UjBQFgfMVvbWDTb", - "website": "https://renproject.io/" - } - }, - { - "chainId": 101, - "address": "GkXP719hnhLtizWHcQyGVYajuJqVsJJ6fyeUob9BPCFC", - "symbol": "KROWZ", - "name": "Mike Krow's Official Best Friend Super Kawaii Kasu Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GkXP719hnhLtizWHcQyGVYajuJqVsJJ6fyeUob9BPCFC/logo.png", - "tags": ["social-token", "krowz"], - "extensions": { - "twitter": "https://twitter.com/space_asylum", - "website": "https://mikekrow.com/" - } - }, - { - "chainId": 101, - "address": "6kwTqmdQkJd8qRr9RjSnUX9XJ24RmJRSrU1rsragP97Y", - "symbol": "SAIL", - "name": "SAIL", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6kwTqmdQkJd8qRr9RjSnUX9XJ24RmJRSrU1rsragP97Y/logo.png", - "tags": ["utility-token"], - "extensions": { - "coingeckoId": "sail", - "serumV3Usdc": "6hwK66FfUdyhncdQVxWFPRqY8y6usEvzekUaqtpKEKLr", - "twitter": "https://twitter.com/SolanaSail", - "website": "https://www.solanasail.com" - } - }, - { - "chainId": 101, - "address": "E5ndSkaB17Dm7CsD22dvcjfrYSDLCxFcMd6z8ddCk5wp", - "symbol": "RIN", - "name": "Aldrin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/E5ndSkaB17Dm7CsD22dvcjfrYSDLCxFcMd6z8ddCk5wp/logo.png", - "extensions": { - "coingeckoId": "aldrin", - "serumV3Usdc": "7gZNLDbWE73ueAoHuAeFoSu7JqmorwCLpNTBXHtYSFTa", - "twitter": "https://twitter.com/Aldrin_Exchange", - "website": "https://rin.aldrin.com/" - } - }, - { - "chainId": 101, - "address": "7LmGzEgnQZTxxeCThgxsv3xe4JQmiy9hxEGBPCF66KgH", - "symbol": "SNEK", - "name": "Snek Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7LmGzEgnQZTxxeCThgxsv3xe4JQmiy9hxEGBPCF66KgH/logo.png", - "extensions": { - "twitter": "https://twitter.com/snekcoin" - } - }, - { - "chainId": 101, - "address": "ss26ybWnrhSYbGBjDT9bEwRiyAVUgiKCbgAfFkksj4R", - "symbol": "SS2", - "name": "POH", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ss26ybWnrhSYbGBjDT9bEwRiyAVUgiKCbgAfFkksj4R/logo.png", - "tags": ["nft"], - "extensions": { - "animationUrl": "https://vww4cphi4lv3ldd4dtidi4njkbilvngmvuaofo3rv2oa3ozepeea.arweave.net/ra3BPOji67WMfBzQNHGpUFC6tMytAOK7ca6cDbskeQg?ext=glb", - "description": "Sensing a disturbance in the timeline, the tournament organizers send Poh back in time to the beginning of the tournament. He is tasked with finding the origin of the disturbance and restoring the original timeline. Special:'Out of Order'", - "imageUrl": "https://www.arweave.net/fDxzEtzfu9IjFDh0ID-rOGaGw__F6-OD2ADoa23sayo?ext=gif", - "twitter": "https://twitter.com/sol__survivor", - "website": "https://www.sol-talk.com/sol-survivor" - } - }, - { - "chainId": 101, - "address": "6dGR9kAt499jzsojDHCvDArKxpTarNbhdSkiS7jeMAib", - "symbol": "AKI", - "name": "AKIHIGE Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6dGR9kAt499jzsojDHCvDArKxpTarNbhdSkiS7jeMAib/logo.png", - "tags": ["aki"] - }, - { - "chainId": 101, - "address": "SCYfrGCw8aDiqdgcpdGjV6jp4UVVQLuphxTDLNWu36f", - "symbol": "SCY", - "name": "Synchrony", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SCYfrGCw8aDiqdgcpdGjV6jp4UVVQLuphxTDLNWu36f/logo.png", - "extensions": { - "serumV3Usdc": "DR8V2wUCSFKCGjML6AZvUB2eYWDPVQ5xju3DeXGgpSaB", - "twitter": "https://twitter.com/SynchronyFi", - "website": "https://synchrony.fi" - } - }, - { - "chainId": 101, - "address": "BKMWPkPS8jXw59ezYwK2ueNTZRF4m8MYHDjh9HwUmkQ7", - "symbol": "SDC", - "name": "SandDollarClassic", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BKMWPkPS8jXw59ezYwK2ueNTZRF4m8MYHDjh9HwUmkQ7/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/SandDollar_BS", - "website": "https://sanddollar.bs" - } - }, - { - "chainId": 101, - "address": "Bx4ykEMurwPQBAFNvthGj73fMBVTvHa8e9cbAyaK4ZSh", - "symbol": "TOX", - "name": "trollbox", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Bx4ykEMurwPQBAFNvthGj73fMBVTvHa8e9cbAyaK4ZSh/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/trollboxio", - "website": "https://trollbox.io" - } - }, - { - "chainId": 101, - "address": "E7WqtfRHcY8YW8z65u9WmD7CfMmvtrm2qPVicSzDxLaT", - "symbol": "PPUG", - "name": "PizzaPugCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/E7WqtfRHcY8YW8z65u9WmD7CfMmvtrm2qPVicSzDxLaT/logo.png", - "extensions": { - "twitter": "https://twitter.com/pizzapugcoin", - "website": "https://www.pizzapugcoin.com" - } - }, - { - "chainId": 101, - "address": "FZgL5motNWEDEa24xgfSdBDfXkB9Ru9KxfEsey9S58bb", - "symbol": "VCC", - "name": "VentureCapital", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FZgL5motNWEDEa24xgfSdBDfXkB9Ru9KxfEsey9S58bb/logo.svg", - "tags": ["liquidator", "IDO", "incubator"], - "extensions": { - "twitter": "https://twitter.com/vcc_finance", - "website": "https://www.vcc.finance/" - } - }, - { - "chainId": 101, - "address": "4TGxgCSJQx2GQk9oHZ8dC5m3JNXTYZHjXumKAW3vLnNx", - "symbol": "OXS", - "name": "Oxbull Sol", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4TGxgCSJQx2GQk9oHZ8dC5m3JNXTYZHjXumKAW3vLnNx/logo.png", - "tags": ["utility-token"], - "extensions": { - "coingeckoId": "oxbull-solana", - "github": "https://github.com/OxBull", - "medium": "https://medium.com/@oxbull", - "telegramAnnouncements": "https://t.me/Oxbull_tech", - "twitter": "https://twitter.com/OxBull5", - "website": "https://www.oxbull.tech" - } - }, - { - "chainId": 101, - "address": "EdAhkbj5nF9sRM7XN7ewuW8C9XEUMs8P7cnoQ57SYE96", - "symbol": "FAB", - "name": "FABRIC", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EdAhkbj5nF9sRM7XN7ewuW8C9XEUMs8P7cnoQ57SYE96/logo.png", - "extensions": { - "coingeckoId": "fabric", - "serumV3Usdc": "Cud48DK2qoxsWNzQeTL5D8sAiHsGwG8Ev1VMNcYLayxt", - "twitter": "https://twitter.com/official_fabric", - "website": "https://fsynth.io/" - } - }, - { - "chainId": 101, - "address": "GEYrotdkRitGUK5UMv3aMttEhVAZLhRJMcG82zKYsaWB", - "symbol": "POTATO", - "name": "POTATO", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GEYrotdkRitGUK5UMv3aMttEhVAZLhRJMcG82zKYsaWB/logo.png", - "extensions": { - "serumV3Usdc": "6dn7tgTHe5rZEAscMWWY3xmPGVEKVkM9s7YRV11z399z", - "website": "https://potatocoinspl.com/" - } - }, - { - "chainId": 101, - "address": "FmJ1fo7wK5FF6rDvQxow5Gj7A2ctLmR5orCKLZ45Q3Cq", - "symbol": "DGEN", - "name": "Degen Banana", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FmJ1fo7wK5FF6rDvQxow5Gj7A2ctLmR5orCKLZ45Q3Cq/logo.png", - "extensions": { - "twitter": "https://twitter.com/degenbanana", - "website": "https://degen.finance/" - } - }, - { - "chainId": 101, - "address": "FciGvHj9FjgSGgCBF1b9HY814FM9D28NijDd5SJrKvPo", - "symbol": "TGT", - "name": "Twirl Governance Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FciGvHj9FjgSGgCBF1b9HY814FM9D28NijDd5SJrKvPo/logo.png", - "extensions": { - "twitter": "https://twitter.com/twirlfinance", - "website": "https://twirlfinance.com/" - } - }, - { - "chainId": 101, - "address": "A9EEvcRcT7Q9XAa6NfqrqJChoc4XGDhd2mtc4xfniQkS", - "symbol": "BILBY", - "name": "Bilby Finance", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/A9EEvcRcT7Q9XAa6NfqrqJChoc4XGDhd2mtc4xfniQkS/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://bilby.finance/" - } - }, - { - "chainId": 101, - "address": "8NGgmXzBzhsXz46pTC3ioSBxeE3w2EXpc741N3EQ8E6r", - "symbol": "JOKE", - "name": "JOKESMEMES", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8NGgmXzBzhsXz46pTC3ioSBxeE3w2EXpc741N3EQ8E6r/logo.png", - "extensions": { - "twitter": "https://twitter.com/Jokesmemes11", - "website": "https://jokesmemes.finance" - } - }, - { - "chainId": 101, - "address": "Fp4gjLpTsPqBN6xDGpDHwtnuEofjyiZKxxZxzvJnjxV6", - "symbol": "NAXAR", - "name": "Naxar", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Fp4gjLpTsPqBN6xDGpDHwtnuEofjyiZKxxZxzvJnjxV6/logo.png", - "extensions": { - "coingeckoId": "naxar", - "instagram": "https://instagram.com/naxar_updates", - "telegram": "https://t.me/naxar_official", - "twitter": "https://twitter.com/_Naxar", - "website": "https://naxar.net" - } - }, - { - "chainId": 101, - "address": "5jqTNKonR9ZZvbmX9JHwcPSEg6deTyNKR7PxQ9ZPdd2w", - "symbol": "JBUS", - "name": "Jebus", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5jqTNKonR9ZZvbmX9JHwcPSEg6deTyNKR7PxQ9ZPdd2w/logo.png", - "extensions": { - "website": "https://jebus.live" - } - }, - { - "chainId": 101, - "address": "29UWGmi1MxJRi3izeritN8VvhZbUiX37KUVnGv46mzev", - "symbol": "KLBx", - "name": "Black Label X", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/29UWGmi1MxJRi3izeritN8VvhZbUiX37KUVnGv46mzev/logo.svg", - "extensions": { - "website": "https://klbtoken.com/x" - } - }, - { - "chainId": 101, - "address": "GACHAfpmbpk4FLfZcGkT2NUmaEqMygssAknhqnn8DVHP", - "symbol": "GACHA", - "name": "Gachapon", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GACHAfpmbpk4FLfZcGkT2NUmaEqMygssAknhqnn8DVHP/logo.png", - "extensions": { - "twitter": "https://twitter.com/GACHAPON7777" - } - }, - { - "chainId": 101, - "address": "9zoqdwEBKWEi9G5Ze8BSkdmppxGgVv1Kw4LuigDiNr9m", - "symbol": "STR", - "name": "Solster", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9zoqdwEBKWEi9G5Ze8BSkdmppxGgVv1Kw4LuigDiNr9m/logo.png", - "extensions": { - "twitter": "https://twitter.com/solster_finance", - "website": "https://solster.finance" - } - }, - { - "chainId": 101, - "address": "A2T2jDe2bxyEHkKtS8AtrTRmJ9VZRwyY8Kr7oQ8xNyfb", - "symbol": "HAMS", - "name": "Space Hamster", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/A2T2jDe2bxyEHkKtS8AtrTRmJ9VZRwyY8Kr7oQ8xNyfb/logo.png", - "extensions": { - "coingeckoId": "space-hamster", - "coinmarketcap": "https://coinmarketcap.com/currencies/space-hamster/", - "dexWebsite": "https://dex-solhamster.space/", - "telegram": "https://t.me/SolHamster", - "twitter": "https://twitter.com/sol_hamster", - "website": "https://www.solhamster.space/" - } - }, - { - "chainId": 101, - "address": "EGN2774kzKyUnJs2Gv5poK6ymiMVkdyCQD2gGnJ84sDk", - "symbol": "NEFT", - "name": "Neftea Labs Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EGN2774kzKyUnJs2Gv5poK6ymiMVkdyCQD2gGnJ84sDk/logo.png", - "tags": ["Neftea", "NFT", "utility-token"], - "extensions": { - "website": "https://www.neftealabs.com/" - } - }, - { - "chainId": 101, - "address": "DK64rmGSZupv1dLYn57e3pUVgs9jL9EKLXDVZZPsMDz8", - "symbol": "ABOMB", - "name": "ArtBomb", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DK64rmGSZupv1dLYn57e3pUVgs9jL9EKLXDVZZPsMDz8/logo.png", - "tags": ["utility-token", "artbomb"], - "extensions": { - "website": "https://artbomb.xyz" - } - }, - { - "chainId": 101, - "address": "AnyCsr1VCBZcwVAxbKPuHhKDP5DQQSnRxGAo4ycgRMi2", - "symbol": "DAL", - "name": "Dalmatiancoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AnyCsr1VCBZcwVAxbKPuHhKDP5DQQSnRxGAo4ycgRMi2/logo.png", - "extensions": { - "twitter": "https://twitter.com/coindalmatian", - "website": "https://dalmatiancoin.org/" - } - }, - { - "chainId": 101, - "address": "HiL1j5VMR9XtRnCA4mxaVoXr6PMHpbh8wUgfPsAP4CNF", - "symbol": "SolNHD", - "name": "SolNHD", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HiL1j5VMR9XtRnCA4mxaVoXr6PMHpbh8wUgfPsAP4CNF/logo.png", - "extensions": { - "twitter": "https://twitter.com/zororoaz01", - "website": "https://www.solnhd.com" - } - }, - { - "chainId": 101, - "address": "qXu8Tj65H5XR8KHuaKKoyLCWj592KbTG3YWJwsuFrPS", - "symbol": "STVA", - "name": "SOLtiva", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/qXu8Tj65H5XR8KHuaKKoyLCWj592KbTG3YWJwsuFrPS/logo.svg", - "extensions": { - "serumV3Usdc": "8srnqriKDYXQNSiNh3F5qhkEt8USwWcJyeR65TxavoAf", - "website": "https://soltiva.co" - } - }, - { - "chainId": 101, - "address": "D3gHoiYT4RY5VSndne1fEnpM3kCNAyBhkp5xjNUqqPj9", - "symbol": "PROEXIS", - "name": "ProExis Prova de Existência Blockchain", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/D3gHoiYT4RY5VSndne1fEnpM3kCNAyBhkp5xjNUqqPj9/logo.png", - "tags": ["utility-token", "proexis"], - "extensions": { - "facebook": "https://facebook.com/provadeexistencia", - "github": "https://github.com/provadeexistencia", - "instagram": "https://instagram.com/provadeexistencia", - "telegram": "https://t.me/provadeexistenciagrupo", - "telegramAnnouncements": "https://t.me/provadeexistencia", - "twitter": "https://twitter.com/provaexistencia", - "website": "https://provadeexistencia.com.br" - } - }, - { - "chainId": 101, - "address": "5DWFxYBxjETuqFX3P2Z1uq8UbcCT1F4sABGiBZMnWKvR", - "symbol": "PLDO", - "name": "PLEIDO", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5DWFxYBxjETuqFX3P2Z1uq8UbcCT1F4sABGiBZMnWKvR/logo.svg", - "tags": ["pleido", "game-coin"], - "extensions": { - "website": "https://pleido.com/" - } - }, - { - "chainId": 101, - "address": "6uB5eEC8SzMbUdsPpe3eiNvHyvxdqUWnDEtpFQxkhNTP", - "symbol": "MOLANIUM", - "name": "MOLANIUM", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6uB5eEC8SzMbUdsPpe3eiNvHyvxdqUWnDEtpFQxkhNTP/logo.png", - "extensions": { - "imageUrl": "https://i.imgur.com/hOMe38E.png", - "medium": "https://moonlana.medium.com/", - "twitter": "https://twitter.com/xMoonLana", - "website": "https://moonlana.com/" - } - }, - { - "chainId": 101, - "address": "5KV2W2XPdSo97wQWcuAVi6G4PaCoieg4Lhhi61PAMaMJ", - "symbol": "GU", - "name": "Kugle GU", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5KV2W2XPdSo97wQWcuAVi6G4PaCoieg4Lhhi61PAMaMJ/logo.png", - "tags": ["utility-token"], - "extensions": { - "coingeckoId": "gu", - "description": "GU token for the Kugle play to earn game.", - "twitter": "https://twitter.com/Kuglesworld", - "website": "https://kugle.org" - } - }, - { - "chainId": 101, - "address": "72fFy4SNGcHoEC1TTFTUkxNHriJqg3hBPsa2jSr2cZgb", - "symbol": "BZX", - "name": "BlizeX", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/72fFy4SNGcHoEC1TTFTUkxNHriJqg3hBPsa2jSr2cZgb/logo.png", - "extensions": { - "twitter": "https://twitter.com/blizex_en", - "website": "https://www.blizex.co" - } - }, - { - "chainId": 101, - "address": "5fEo6ZbvpV6zdyzowtAwgMcWHZe1yJy9NxQM6gC19QW5", - "symbol": "GREEN", - "name": "Green DEX", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5fEo6ZbvpV6zdyzowtAwgMcWHZe1yJy9NxQM6gC19QW5/logo.svg", - "extensions": { - "twitter": "https://twitter.com/GreendexN", - "website": "https://greendex.network/" - } - }, - { - "chainId": 101, - "address": "Bx1fDtvTN6NvE4kjdPHQXtmGSg582bZx9fGy4DQNMmAT", - "symbol": "SOLC", - "name": "Solcubator", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Bx1fDtvTN6NvE4kjdPHQXtmGSg582bZx9fGy4DQNMmAT/logo.png", - "extensions": { - "twitter": "https://twitter.com/Solcubator", - "website": "http://solcubator.io" - } - }, - { - "chainId": 101, - "address": "ABxCiDz4jjKt1t7Syu5Tb37o8Wew9ADpwngZh6kpLbLX", - "symbol": "XSOL", - "name": "XSOL Token", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ABxCiDz4jjKt1t7Syu5Tb37o8Wew9ADpwngZh6kpLbLX/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/0xSol_Network", - "website": "https://0xsol.network" - } - }, - { - "chainId": 101, - "address": "DrcPRJPBiakQcWqon3gZms7sviAqdQS5zS5wvaG5v6wu", - "symbol": "BLD", - "name": "BladesToken", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DrcPRJPBiakQcWqon3gZms7sviAqdQS5zS5wvaG5v6wu/logo.png", - "extensions": { - "twitter": "https://twitter.com/bladesfinance", - "website": "https://blades.finance/" - } - }, - { - "chainId": 101, - "address": "BTyJg5zMbaN2KMfn7LsKhpUsV675aCUSUMrgB1YGxBBP", - "symbol": "GOOSEBERRY", - "name": "Gooseberry", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BTyJg5zMbaN2KMfn7LsKhpUsV675aCUSUMrgB1YGxBBP/logo.png", - "extensions": { - "twitter": "https://twitter.com/gooseberrycoin", - "website": "https://gooseberry.changr.ca" - } - }, - { - "chainId": 101, - "address": "8mgeCL7k2cB2KTN8NhD5biqvcbkfrmBogDpYoHmn5cKQ", - "symbol": "DXB", - "name": "DefiXBet Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5GG1LbgY4EEvPR51YQPNr65QKcZemrHWPooTqC5gRPBA/logo.png", - "extensions": { - "medium": "https://defixbet.medium.com/", - "telegramAnnouncements": "https://t.me/DefiXBet", - "twitter": "https://twitter.com/DefiXBet", - "website": "https://DefiXBet.com/" - } - }, - { - "chainId": 101, - "address": "7a4cXVvVT7kF6hS5q5LDqtzWfHfys4a9PoK6pf87RKwf", - "symbol": "LUNY", - "name": "Luna Yield", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7a4cXVvVT7kF6hS5q5LDqtzWfHfys4a9PoK6pf87RKwf/logo.png", - "extensions": { - "twitter": "https://twitter.com/Luna_Yield", - "website": "https://www.lunayield.com" - } - }, - { - "chainId": 101, - "address": "AP58G14hoy4GGgZS4L8TzZgqXnk3hBvciFKW2Cb1RQ2J", - "symbol": "YARDv1", - "name": "SolYard Finance Beta", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AP58G14hoy4GGgZS4L8TzZgqXnk3hBvciFKW2Cb1RQ2J/logo.png", - "extensions": { - "website": "https://solyard.finance/" - } - }, - { - "chainId": 101, - "address": "6Y7LbYB3tfGBG6CSkyssoxdtHb77AEMTRVXe8JUJRwZ7", - "symbol": "DINO", - "name": "DINO", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6Y7LbYB3tfGBG6CSkyssoxdtHb77AEMTRVXe8JUJRwZ7/logo.png", - "extensions": { - "twitter": "https://twitter.com/solanadino", - "website": "https://www.solanadino.com" - } - }, - { - "chainId": 101, - "address": "4wjPQJ6PrkC4dHhYghwJzGBVP78DkBzA2U3kHoFNBuhj", - "symbol": "LIQ", - "name": "LIQ Protocol", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4wjPQJ6PrkC4dHhYghwJzGBVP78DkBzA2U3kHoFNBuhj/logo.png", - "extensions": { - "coingeckoId": "liq-protocol", - "discord": "https://discord.gg/MkfjambeU7", - "serumV3Usdc": "D7p7PebNjpkH6VNHJhmiDFNmpz9XE7UaTv9RouxJMrwb", - "twitter": "https://twitter.com/liqsolana", - "website": "https://liqsolana.com/" - } - }, - { - "chainId": 101, - "address": "DubwWZNWiNGMMeeQHPnMATNj77YZPZSAz2WVR5WjLJqz", - "symbol": "CRP", - "name": "CropperFinance", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DubwWZNWiNGMMeeQHPnMATNj77YZPZSAz2WVR5WjLJqz/logo.png", - "extensions": { - "coingeckoId": "cropperfinance", - "serumV3Usdc": "93mtNf4qzvytwp5sWrSC7JNUccPAomEE39ztErUq5V3F", - "twitter": "https://twitter.com/cropperfinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "B3Ggjjj3QargPkFTAJiR6BaD8CWKFUaWRXGcDQ1nyeeD", - "symbol": "PARTI", - "name": "PARTI", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/B3Ggjjj3QargPkFTAJiR6BaD8CWKFUaWRXGcDQ1nyeeD/logo.png", - "extensions": { - "medium": "https://particlefinance.medium.com", - "twitter": "https://twitter.com/ParticleFinance", - "website": "https://parti.finance" - } - }, - { - "chainId": 101, - "address": "5igDhdTnXif5E5djBpRt4wUKo5gtf7VicHi8r5ada4Hj", - "symbol": "NIA", - "name": "NIALABS", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5igDhdTnXif5E5djBpRt4wUKo5gtf7VicHi8r5ada4Hj/logo.png", - "extensions": { - "website": "https://www.nialabs.com/" - } - }, - { - "chainId": 101, - "address": "GQnN5M1M6oTjsziAwcRYd1P7pRBBQKURj5QeAjN1npnE", - "symbol": "CORV", - "name": "Project Corvus", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GQnN5M1M6oTjsziAwcRYd1P7pRBBQKURj5QeAjN1npnE/logo.png", - "extensions": { - "website": "https://dixon.company/" - } - }, - { - "chainId": 101, - "address": "3FRQnT5djQMATCg6TNXBhi2bBkbTyGdywsLmLa8BbEKz", - "symbol": "HLTH", - "name": "HLTH", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3FRQnT5djQMATCg6TNXBhi2bBkbTyGdywsLmLa8BbEKz/logo.png", - "extensions": { - "telegram": "https://t.me/HLTHnetwork", - "twitter": "https://twitter.com/hlthnetwork", - "website": "https://hlth.network/" - } - }, - { - "chainId": 101, - "address": "SLRSSpSLUTP7okbCUBYStWCo1vUgyt775faPqz8HUMr", - "symbol": "SLRS", - "name": "Solrise Finance", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SLRSSpSLUTP7okbCUBYStWCo1vUgyt775faPqz8HUMr/logo.png", - "extensions": { - "coingeckoId": "solrise-finance", - "discord": "https://discord.gg/xNbGgMUJfU", - "medium": "https://blog.solrise.finance", - "serumV3Usdc": "2Gx3UfV831BAh8uQv1FKSPKS9yajfeeD8GJ4ZNb2o2YP", - "telegram": "https://t.me/solrisefinance", - "twitter": "https://twitter.com/SolriseFinance", - "website": "https://solrise.finance" - } - }, - { - "chainId": 101, - "address": "Hejznrp39zCfcmq4WpihfAeyhzhqeFtj4PURHFqMaHSS", - "symbol": "SE", - "name": "Snake Eyes", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Hejznrp39zCfcmq4WpihfAeyhzhqeFtj4PURHFqMaHSS/logo.png", - "extensions": { - "discord": "https://discord.gg/g94SubKn" - } - }, - { - "chainId": 101, - "address": "JET6zMJWkCN9tpRT2v2jfAmm5VnQFDpUBCyaKojmGtz", - "symbol": "JET", - "name": "Jet Protocol", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/JET6zMJWkCN9tpRT2v2jfAmm5VnQFDpUBCyaKojmGtz/logo.png", - "extensions": { - "coingeckoId": "jet", - "serumV3Usdc": "6pQMoHDC2o8eeFxyTKtfnsr8d48hKFWsRpLHAqVHH2ZP", - "website": "https://jetprotocol.io/" - } - }, - { - "chainId": 101, - "address": "GWpD3eTfhJB5KDCcnE85dBQrjAk2CsrgDF9b52R9CrjV", - "symbol": "LIQ-USDC", - "name": "Raydium LP Token (LIQ-USDC)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AKJHspCwDhABucCxNLXUSfEzb7Ny62RqFtC9uNjJi4fq/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "D7U3BPHr5JBbFmPTaVNpmEKGBPFdQS3udijyte1QtuLk", - "symbol": "STAR", - "name": "SolStar", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/D7U3BPHr5JBbFmPTaVNpmEKGBPFdQS3udijyte1QtuLk/logo.png", - "tags": ["community", "web3", "utility-token"], - "extensions": { - "discord": "https://discord.gg/j6B3q5Xk5N", - "medium": "https://solstar.medium.com", - "telegram": "https://t.me/SolStarFinance", - "twitter": "https://twitter.com/SolStarFinance", - "website": "https://solstar.finance" - } - }, - { - "chainId": 101, - "address": "GtQ48z7NNjs7sVyp3M7iuiDcTRjeWPd1fkdiWQNy1UR6", - "symbol": "LIQ-SOL", - "name": "Raydium LP Token (LIQ-SOL)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AKJHspCwDhABucCxNLXUSfEzb7Ny62RqFtC9uNjJi4fq/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "DHojuFwy5Pb8HTUhyRGQ285s5KYgk8tGAjAcmjkEAGbY", - "symbol": "RFK", - "name": "Refrak", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DHojuFwy5Pb8HTUhyRGQ285s5KYgk8tGAjAcmjkEAGbY/logo.png", - "extensions": { - "discord": "https://discord.gg/ZAWbnebFVK", - "website": "https://refrak.io/" - } - }, - { - "chainId": 101, - "address": "JAhTGv1g19KzE2n58Jzhxpu5SSNioanAzj3wL7epiNUL", - "symbol": "RFKP", - "name": "Refrak Platinum", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/JAhTGv1g19KzE2n58Jzhxpu5SSNioanAzj3wL7epiNUL/logo.png", - "extensions": { - "discord": "https://discord.gg/ZAWbnebFVK", - "website": "https://refrak.io/" - } - }, - { - "chainId": 101, - "address": "7Jimij6hkEjjgmf3HamW44d2Cf5kj2gHnfCDDPGxWut", - "symbol": "GIG", - "name": "GIGCO", - "decimals": 9, - "logoURI": "https://gigco.com/images/new-gqo-logo.png", - "extensions": { - "twitter": "https://twitter.com/gigcoapp", - "website": "https://gigco.com/?utm_source=tokenlist" - } - }, - { - "chainId": 101, - "address": "E5rk3nmgLUuKUiS94gg4bpWwWwyjCMtddsAXkTFLtHEy", - "symbol": "WOO", - "name": "Wootrade Network", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/E5rk3nmgLUuKUiS94gg4bpWwWwyjCMtddsAXkTFLtHEy/logo.png", - "extensions": { - "twitter": "https://twitter.com/wootraderS", - "website": "https://woo.network" - } - }, - { - "chainId": 101, - "address": "9s6dXtMgV5E6v3rHqBF2LejHcA2GWoZb7xNUkgXgsBqt", - "symbol": "USDC-USDT-PAI", - "name": "Mercurial LP Token (USDC-USDT-PAI)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9s6dXtMgV5E6v3rHqBF2LejHcA2GWoZb7xNUkgXgsBqt/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://www.mercurial.finance/" - } - }, - { - "chainId": 101, - "address": "8kRacWW5qZ34anyH8s9gu2gC4FpXtncqBDPpd2a6DnZE", - "symbol": "MECA", - "name": "Coinmeca", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8kRacWW5qZ34anyH8s9gu2gC4FpXtncqBDPpd2a6DnZE/logo.svg", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/coinmeca", - "medium": "https://coinmeca.medium.com/", - "reddit": "https://reddit.com/r/coinmeca", - "telegram": "https://t.me/coinmeca", - "twitter": "https://twitter.com/coinmeca", - "website": "https://coinmeca.net/" - } - }, - { - "chainId": 101, - "address": "6h6uy8yAfaAb5sPE2bvXQEB93LnUMEdcCRU2kfiErTct", - "symbol": "ZMR", - "name": "ZMIRROR", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6h6uy8yAfaAb5sPE2bvXQEB93LnUMEdcCRU2kfiErTct/logo.JPG" - }, - { - "chainId": 101, - "address": "sodaNXUbtjMvHe9c5Uw7o7VAcVpXPHAvtaRaiPVJQuE", - "symbol": "SODA", - "name": "cheesesoda token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/sodaNXUbtjMvHe9c5Uw7o7VAcVpXPHAvtaRaiPVJQuE/logo.svg", - "extensions": { - "coingeckoId": "cheesesoda-token", - "serumV3Usdc": "6KFs2wUzME8Z3AeWL4HfKkXbtik5zVvebdg5qCxqt4hB", - "twitter": "https://twitter.com/cheesesodadex", - "website": "https://token.cheesesoda.com" - } - }, - { - "chainId": 101, - "address": "sodaoT6Wh1nxHaarw4kDh7AkK4oZnERK1QgDUtHPR3H", - "symbol": "SODAO", - "name": "cheesesodaDAO", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/sodaoT6Wh1nxHaarw4kDh7AkK4oZnERK1QgDUtHPR3H/logo.svg", - "extensions": { - "twitter": "https://twitter.com/cheesesodadex", - "website": "https://dao.cheesesoda.com" - } - }, - { - "chainId": 101, - "address": "49YUsDrThJosHSagCn1F59Uc9NRxbr9thVrZikUnQDXy", - "symbol": "LIQ-RAY", - "name": "Raydium LP Token (LIQ-RAY)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AKJHspCwDhABucCxNLXUSfEzb7Ny62RqFtC9uNjJi4fq/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "FGmeGqUqKzVX2ajkXaFSQxNcBRWnJg1vi5fugRJrDJ3k", - "symbol": "FCS", - "name": "FCS", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FGmeGqUqKzVX2ajkXaFSQxNcBRWnJg1vi5fugRJrDJ3k/logo.png", - "extensions": { - "website": "https://www.fcs.com/" - } - }, - { - "chainId": 101, - "address": "CjpDCj8zLSM37669qng5znYP25JuoDPCvLSLLd7pxAsr", - "symbol": "Nordic Energy Token", - "name": "NET", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CjpDCj8zLSM37669qng5znYP25JuoDPCvLSLLd7pxAsr/logo.png", - "extensions": { - "telegram": "https://t.me/nordicenergy", - "twitter": "https://twitter.com/nordicenergy1", - "website": "https://nordicenergy.io/" - } - }, - { - "chainId": 101, - "address": "9eaAUFp7S38DKXxbjwzEG8oq1H1AipPkUuieUkVJ9krt", - "symbol": "KDC", - "name": "KDC (KURZ Digital Currency)", - "decimals": 2, - "logoURI": "https://kurzdigital.com/images/KDC_logo.png", - "tags": ["stablecoin", "kdc"], - "extensions": { - "website": "https://www.kurzdigital.com" - } - }, - { - "chainId": 101, - "address": "A1C9Shy732BThWvHAN936f33N7Wm1HbFvxb2zDSoBx8F", - "symbol": "PKR2", - "name": "PKR2", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/C-e-r-b-e-r-u-s/token-list/main/assets/mainnet/A1C9Shy732BThWvHAN936f33N7Wm1HbFvxb2zDSoBx8F/pkr2-logo.png", - "extensions": { - "serumV3Usdt": "AUYZV5BbKePrAkMiWCMhc1EbZCPNHDrK7Jf8jYy8noF6", - "twitter": "https://twitter.com/PKR2_Token", - "website": "https://twitter.com/PKR2_Token" - } - }, - { - "chainId": 101, - "address": "35KgRun5UMT2Kjtjw4cNG1tXHcgBxuxji6Yp6ciz7yX7", - "symbol": "VPE", - "name": "VPOWER", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/35KgRun5UMT2Kjtjw4cNG1tXHcgBxuxji6Yp6ciz7yX7/logo.png", - "extensions": { - "telegram": "https://t.me/vpowerswap_channel", - "twitter": "https://twitter.com/vpowerswap", - "website": "https://vpowerswap.com/" - } - }, - { - "chainId": 101, - "address": "GSaiLQxREzaxUcE3v28HxBacoUQPZNtXx1eQsCFsX9Bg", - "symbol": "XgSAIL", - "name": "gSAIL DEPRECATED", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GSaiLQxREzaxUcE3v28HxBacoUQPZNtXx1eQsCFsX9Bg/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/SolanaSail", - "website": "https://www.solanasail.com" - } - }, - { - "chainId": 101, - "address": "ELyNEh5HC33sQLhGiQ5dimmwqiJCiqVJp3eQxpX3pKhQ", - "symbol": "JCS", - "name": "Jogys Crypto School Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ELyNEh5HC33sQLhGiQ5dimmwqiJCiqVJp3eQxpX3pKhQ/logo.png", - "extensions": { - "instagram": "https://instagram.com/jogyscryptoschool?utm_medium=copy_link", - "telegram": "https://t.me/JCS_JogysCryptoSchool", - "website": "https://instagram.com/jogyscryptoschool?utm_medium=copy_link" - } - }, - { - "chainId": 101, - "address": "3bRTivrVsitbmCTGtqwp7hxXPsybkjn4XLNtPsHqa3zR", - "symbol": "LIKE", - "name": "Only1 (LIKE)", - "decimals": 9, - "logoURI": "https://only1.io/like-token.svg", - "tags": ["utility-token"], - "extensions": { - "coingeckoId": "only1", - "discord": "https://discord.gg/SrsKwTFA", - "medium": "https://only1nft.medium.com/", - "telegram": "https://t.me/only1nft", - "twitter": "https://twitter.com/only1nft", - "website": "https://only1.io/" - } - }, - { - "chainId": 101, - "address": "CXLBjMMcwkc17GfJtBos6rQCo1ypeH6eDbB82Kby4MRm", - "symbol": "wUST_v1", - "name": "Wrapped UST (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CXLBjMMcwkc17GfJtBos6rQCo1ypeH6eDbB82Kby4MRm/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xa47c8bf37f92aBed4A126BDA807A7b7498661acD", - "assetContract": "https://etherscan.io/address/0xa47c8bf37f92aBed4A126BDA807A7b7498661acD", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "terrausd", - "website": "https://terra.money" - } - }, - { - "chainId": 101, - "address": "A7SXXA9wveT2quqqzh5m6Zf3ueCb9kBezQdpnYxHwzLt", - "symbol": "ZINTI", - "name": "Zia Inti", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/A7SXXA9wveT2quqqzh5m6Zf3ueCb9kBezQdpnYxHwzLt/logo.png", - "extensions": { - "website": "https://www.ziainti.com/" - } - }, - { - "chainId": 101, - "address": "3Ztt53vwGhQGoEp3n1RjSu4CFnGRfqzwo6L8KN8gmXfd", - "symbol": "METAS", - "name": "METASEER", - "decimals": 9, - "logoURI": "https://metaseer.io/img/home-one/logo256.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/MSEERofficial", - "website": "https://metaseer.io/" - } - }, - { - "chainId": 101, - "address": "GEfZFBNAaTBxVj3T1sNRApSLfyYZYMYhfVZPhx7LFhXg", - "symbol": "METAG", - "name": "METASEER Governance Token", - "decimals": 9, - "logoURI": "https://metaseer.io/img/home-one/metag256.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/MSEERofficial", - "website": "https://metaseer.io/" - } - }, - { - "chainId": 101, - "address": "EssczqGURZtsSuzEoH471KCRNDWfS4aQpEJVXWL3DvdK", - "symbol": "VIVA", - "name": "Viva coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EssczqGURZtsSuzEoH471KCRNDWfS4aQpEJVXWL3DvdK/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/inkresearch", - "website": "https://www.inkresearch.com" - } - }, - { - "chainId": 101, - "address": "7JnHPPJBBKSTJ7iEmsiGSBcPJgbcKw28uCRXtQgimncp", - "symbol": "Orbs", - "name": "Orbs", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7JnHPPJBBKSTJ7iEmsiGSBcPJgbcKw28uCRXtQgimncp/logo.png", - "tags": ["utility-token"], - "extensions": { - "coingeckoId": "orbs", - "twitter": "https://twitter.com/orbs_network", - "website": "https://www.orbs.com" - } - }, - { - "chainId": 101, - "address": "EWS2ATMt5fQk89NWLJYNRmGaNoji8MhFZkUB4DiWCCcz", - "symbol": "SOLBERRY", - "name": "SOLBERRY", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EWS2ATMt5fQk89NWLJYNRmGaNoji8MhFZkUB4DiWCCcz/logo.png", - "extensions": { - "coingeckoId": "solberry", - "serumV3Usdc": "HchZzqewgC4pfsJU9uxFsrP4sLDqLsDntYRzE5RgrBak", - "twitter": "https://twitter.com/berrysol", - "website": "https://www.solberry.tech" - } - }, - { - "chainId": 101, - "address": "FJJT7yUJM9X9SHpkVr4wLgyfJ3vtVLoReUqTsCPWzof2", - "symbol": "KEKW-USDC", - "name": "Raydium LP Token (KEKW-USDC)", - "decimals": 9, - "logoURI": "https://www.kekw.io/images/kekwusdc.png", - "tags": ["lp-token"], - "extensions": { - "discord": "https://discord.gg/kekw", - "medium": "https://kekwcoin.medium.com/", - "twitter": "https://twitter.com/kekwcoin", - "website": "https://kekw.io/" - } - }, - { - "chainId": 101, - "address": "5Z6jnA9fDUDVjQyaTbYWwCTE47wMAuyvAQjg5angY12C", - "symbol": "DNDZ", - "name": "Dinarius Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Boukezzoula/Dinarius/master/dinariuslogo.png", - "tags": ["stablecoin"], - "extensions": { - "website": "http://dinarius.net" - } - }, - { - "chainId": 101, - "address": "EqbY2zaTsJesaVviL5unHKjDsjoQZJhQAQz3iWQxAu1X", - "symbol": "RnV", - "name": "RADONTOKEN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EqbY2zaTsJesaVviL5unHKjDsjoQZJhQAQz3iWQxAu1X/logo.png", - "extensions": { - "website": "https://www.radonvalue.com/" - } - }, - { - "chainId": 101, - "address": "5pXLmRJyfrTDYMCp1xyiqRDcbb7vYjYiMYzhBza2ht62", - "symbol": "CRYN", - "name": "Crayon", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5pXLmRJyfrTDYMCp1xyiqRDcbb7vYjYiMYzhBza2ht62/crayon.png", - "extensions": { - "description": "Crayon is a meme token, Dex, and Dapps on Solana.", - "serumV3Usdc": "CjBssusBjX4b2UBvMZhiZCQshW1afpQPA1Mv29Chn6vj", - "twitter": "https://twitter.com/SolanaCrayon", - "website": "https://solanacrayon.com" - } - }, - { - "chainId": 101, - "address": "6pSK3JkbfFcQvu6TuTsRnG61jKxdbaoRRkp1H6jhxXV3", - "symbol": "CRYPT", - "name": "Cryptor", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6pSK3JkbfFcQvu6TuTsRnG61jKxdbaoRRkp1H6jhxXV3/logo_light.png", - "tags": ["streaming", "earnings"], - "extensions": { - "description": "Cryptor let people invest in crypto throught Twitch.", - "twitch": "https://twitch.tv/bt0r", - "twitter": "https://twitter.com/biiitor" - } - }, - { - "chainId": 101, - "address": "z9WZXekbCtwoxyfAwEJn1euXybvqLzPVv3NDzJzkq7C", - "symbol": "CRC", - "name": "Care Coin Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/z9WZXekbCtwoxyfAwEJn1euXybvqLzPVv3NDzJzkq7C/logo.png", - "extensions": { - "twitter": "https://twitter.com/carecointoken_", - "website": "https://www.carecoin.site" - } - }, - { - "chainId": 101, - "address": "9aPjLUGR9e6w6xU2NEQNtP3jg3mq2mJjSUZoQS4RKz35", - "symbol": "SOUL", - "name": "Soulana", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9aPjLUGR9e6w6xU2NEQNtP3jg3mq2mJjSUZoQS4RKz35/logo.png", - "extensions": { - "twitter": "https://twitter.com/Soulanadefi" - } - }, - { - "chainId": 101, - "address": "5U93vfnWJ4NKDhm7k1X7J6D15nJim2odivn9MmfCWwPU", - "symbol": "CHUM", - "name": "Chum Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5U93vfnWJ4NKDhm7k1X7J6D15nJim2odivn9MmfCWwPU/logo.png", - "tags": ["email-token", "email-coin"], - "extensions": { - "website": "https://chumsmart.com" - } - }, - { - "chainId": 101, - "address": "26W4xxHbWJfrswaMNh14ag2s4PZTQuu2ypHGj6YEVXkT", - "symbol": "DCASH", - "name": "Diabolo Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/26W4xxHbWJfrswaMNh14ag2s4PZTQuu2ypHGj6YEVXkT/dcash-logo.png", - "extensions": { - "website": "https://diabolo.io" - } - }, - { - "chainId": 101, - "address": "2pMNgs7Arn1oQBNSb65Aj55rY2zpWHV9JkuqK6ZoetCj", - "symbol": "KBX", - "name": "KUGLE-BOX", - "decimals": 0, - "logoURI": "https://cdn.jsdelivr.net/gh/Seigneur-Machiavel/kugle.github.io/Tokens/KBX_200.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/Kugle_", - "website": "https://kugle.org" - } - }, - { - "chainId": 101, - "address": "8CWgMvZe7ntNLbky4T3JhSgtCYzeorgRiUY8xfXZztXx", - "symbol": "IOTC", - "name": "IoTcoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8CWgMvZe7ntNLbky4T3JhSgtCYzeorgRiUY8xfXZztXx/logo.jpg", - "extensions": { - "facebook": "https://facebook.com/iotworlds", - "instagram": "https://instagram.com/iotworlds", - "linkedin": "https://www.linkedin.com/company/iotworlds", - "twitter": "https://twitter.com/iotworlds", - "website": "https://www.iotworlds.com" - } - }, - { - "chainId": 101, - "address": "FqJE1neoCJrRwxfC9mRL6FduuZ1gCX2FUbya5hi8EQgA", - "symbol": "VLDC", - "name": "Viloid Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FqJE1neoCJrRwxfC9mRL6FduuZ1gCX2FUbya5hi8EQgA/logo.png", - "tags": ["social-token"], - "extensions": { - "github": "https://github.com/viloidcoin", - "website": "https://viloidcoin.com" - } - }, - { - "chainId": 101, - "address": "C98A4nkJXhpVZNAZdHUA95RpTF3T4whtQubL3YobiUX9", - "symbol": "C98", - "name": "Coin98", - "decimals": 6, - "logoURI": "https://coin98.s3.ap-southeast-1.amazonaws.com/Coin/c98-512.svg", - "tags": ["social-token"], - "extensions": { - "coingeckoId": "coin98", - "github": "https://github.com/coin98", - "telegram": "https://t.me/coin98_finance", - "twitter": "https://twitter.com/coin98_finance", - "waterfallbot": "https://bit.ly/C98waterfall", - "website": "https://coin98.com" - } - }, - { - "chainId": 101, - "address": "Saber2gLauYim4Mvftnrasomsv6NvAuncvMEZwcLpD1", - "symbol": "SBR", - "name": "Saber Protocol Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Saber2gLauYim4Mvftnrasomsv6NvAuncvMEZwcLpD1/logo.svg", - "extensions": { - "coingeckoId": "saber", - "discord": "https://chat.saber.so", - "github": "https://github.com/saber-hq", - "medium": "https://blog.saber.so", - "serumV3Usdc": "HXBi8YBwbh4TXF6PjVw81m8Z3Cc4WBofvauj5SBFdgUs", - "twitter": "https://twitter.com/saber_hq", - "waterfallbot": "https://bit.ly/SBRwaterfall", - "website": "https://saber.so" - } - }, - { - "chainId": 101, - "address": "2juwHtqBUEaV26WM5sVvjFsjvCXfwP3ZPndmr5ywVwgZ", - "symbol": "ADAM", - "name": "adamho", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2juwHtqBUEaV26WM5sVvjFsjvCXfwP3ZPndmr5ywVwgZ/adamho_250x250.jpg", - "tags": ["social-token"], - "extensions": { - "twitter": "https://twitter.com/takwah" - } - }, - { - "chainId": 101, - "address": "FMJotGUW16AzexRD3vXJQ94AL71cwrhtFaCTGtK1QHXm", - "symbol": "LRA", - "name": "Lumos Rewards", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FMJotGUW16AzexRD3vXJQ94AL71cwrhtFaCTGtK1QHXm/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://lumos.exchange" - } - }, - { - "chainId": 101, - "address": "AWTE7toEwKdSRd7zh3q45SjKhmYVFp3zk4quWHsM92bj", - "symbol": "ZAU", - "name": "Zaucoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AWTE7toEwKdSRd7zh3q45SjKhmYVFp3zk4quWHsM92bj/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "ABFPEo4pUy1is4Atf33zZoYpG2nkB66W3fsTwAeCUSkA", - "symbol": "SAM", - "name": "Swiss and Makeup", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ABFPEo4pUy1is4Atf33zZoYpG2nkB66W3fsTwAeCUSkA/logo.png", - "tags": ["fan-token"], - "extensions": { - "instagram": "https://www.instagram.com/swissandmakeup/" - } - }, - { - "chainId": 101, - "address": "5ToouaoWhGCiaicANcewnaNKJssdZTxPATDhqJXARiJG", - "symbol": "NUR", - "name": "Nur Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5ToouaoWhGCiaicANcewnaNKJssdZTxPATDhqJXARiJG/logo.png", - "tags": ["kazakhstan", "qazaqstan", "kz"] - }, - { - "chainId": 101, - "address": "8Jmvq2f2UMKwS16HeLXJu3Gr1BmZhmDmUXXuLRLcCKaj", - "symbol": "MYOPA", - "name": "Myopa", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8Jmvq2f2UMKwS16HeLXJu3Gr1BmZhmDmUXXuLRLcCKaj/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/myopa", - "facebook": "https://www.facebook.com/MyopaNFT/", - "telegram": "https://t.me/myopanft", - "twitter": "https://twitter.com/myopanft", - "website": "https://myopa.io/" - } - }, - { - "chainId": 101, - "address": "9ysRLs872GMvmAjjFZEFccnJBF3tYEVT1x7dFE1WPqTY", - "symbol": "VRNT", - "name": "Variant", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9ysRLs872GMvmAjjFZEFccnJBF3tYEVT1x7dFE1WPqTY/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://www.variantresearch.io" - } - }, - { - "chainId": 101, - "address": "8pBc4v9GAwCBNWPB5XKA93APexMGAS4qMr37vNke9Ref", - "symbol": "wHBTC_v1", - "name": "HBTC (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8pBc4v9GAwCBNWPB5XKA93APexMGAS4qMr37vNke9Ref/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x0316EB71485b0Ab14103307bf65a021042c6d380", - "assetContract": "https://etherscan.io/address/0x0316EB71485b0Ab14103307bf65a021042c6d380", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "huobi-btc" - } - }, - { - "chainId": 101, - "address": "CjEm7iRHr5cwWTjtF7Xk58hnRiH4rz9NXboeeWjueFCc", - "symbol": "DSPWN", - "name": "Despawn", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CjEm7iRHr5cwWTjtF7Xk58hnRiH4rz9NXboeeWjueFCc/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://despawn.io/dspwn" - } - }, - { - "chainId": 101, - "address": "Dg7d2va8PEKhPH1gfDoDUw21eRVbZPGRXrKEVafgEVgw", - "symbol": "PVK", - "name": "PlatinumO2", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Dg7d2va8PEKhPH1gfDoDUw21eRVbZPGRXrKEVafgEVgw/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://plantinumo2.com/" - } - }, - { - "chainId": 101, - "address": "az4Nt1UtDp7Vo8nabW7SokKejpHUAju79JUaYDnXgkF", - "symbol": "PNDR", - "name": "PANDER", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/az4Nt1UtDp7Vo8nabW7SokKejpHUAju79JUaYDnXgkF/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://pander.network" - } - }, - { - "chainId": 101, - "address": "BybpSTBoZHsmKnfxYG47GDhVPKrnEKX31CScShbrzUhX", - "symbol": "wHUSD_v1", - "name": "HUSD Stablecoin (Wormhole v1)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BybpSTBoZHsmKnfxYG47GDhVPKrnEKX31CScShbrzUhX/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xdf574c24545e5ffecb9a659c229253d4111d87e1", - "assetContract": "https://etherscan.io/address/0xdf574c24545e5ffecb9a659c229253d4111d87e1", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "husd", - "website": "https://www.stcoins.com/" - } - }, - { - "chainId": 101, - "address": "6VNKqgz9hk7zRShTFdg5AnkfKwZUcojzwAkzxSH3bnUm", - "symbol": "wHAPI", - "name": "Wrapped HAPI", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6VNKqgz9hk7zRShTFdg5AnkfKwZUcojzwAkzxSH3bnUm/logo.png", - "tags": ["wrapped", "utility-token"], - "extensions": { - "coingeckoId": "hapi", - "github": "https://github.com/HAPIprotocol/HAPI/", - "medium": "https://medium.com/i-am-hapi", - "telegram": "https://t.me/hapiHF", - "twitter": "https://twitter.com/i_am_hapi_one", - "website": "https://hapi.one" - } - }, - { - "chainId": 101, - "address": "Lrxqnh6ZHKbGy3dcrCED43nsoLkM1LTzU2jRfWe8qUC", - "symbol": "LARIX", - "name": "Larix", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Lrxqnh6ZHKbGy3dcrCED43nsoLkM1LTzU2jRfWe8qUC/logo.jpg", - "extensions": { - "coingeckoId": "larix", - "discord": "https://discord.gg/hfnRFV9Ngt", - "github": "https://github.com/ProjectLarix/Larix-Lending-Project-Rep", - "medium": "http://projectlarix.medium.com", - "telegram": "https://t.me/projectlarix", - "twitter": "https://twitter.com/ProjectLarix", - "website": "https://projectlarix.com" - } - }, - { - "chainId": 101, - "address": "BYvGwtPx6Nw4YUVVwqx7qh657EcdxBSfE8JcaPmWWa6E", - "symbol": "TOSTI", - "name": "Tosti Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BYvGwtPx6Nw4YUVVwqx7qh657EcdxBSfE8JcaPmWWa6E/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://tosti.app" - } - }, - { - "chainId": 101, - "address": "EKEjv7VJTsKsfyZMNgPfoKkdk7pYNSgb3tg2h3zUe4PT", - "symbol": "SIMP", - "name": "Simp", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EKEjv7VJTsKsfyZMNgPfoKkdk7pYNSgb3tg2h3zUe4PT/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/5293AzqtHU", - "website": "https://functional-spirit-e72.notion.site/Simp-090cf60910024a228d8b163dcaf23a84" - } - }, - { - "chainId": 101, - "address": "5ZsPxmhdh9jeDMCrWu6LvNvcvNtpbpwhQvrKkeMYZE7R", - "symbol": "BECO", - "name": "Beco Club", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5ZsPxmhdh9jeDMCrWu6LvNvcvNtpbpwhQvrKkeMYZE7R/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://beco.club/" - } - }, - { - "chainId": 101, - "address": "32uwQKZibFm5C9EjY6raGC1ZjAAQQWy1LvJxeriJEzEt", - "symbol": "DGX", - "name": "DGX", - "decimals": 9, - "logoURI": "https://i.ibb.co/YBw0zVc/LOGO-new.png", - "extensions": { - "twitter": "https://twitter.com/dgxsolana", - "website": "https://solanadgx.com/" - } - }, - { - "chainId": 101, - "address": "57h4LEnBooHrKbacYWGCFghmrTzYPVn8PwZkzTzRLvHa", - "symbol": "USDC-USDT-UST", - "name": "Mercurial LP Token (USDC-USDT-UST)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/57h4LEnBooHrKbacYWGCFghmrTzYPVn8PwZkzTzRLvHa/logo.svg", - "tags": ["lp-token"], - "extensions": { - "website": "https://www.mercurial.finance/" - } - }, - { - "chainId": 101, - "address": "9VgfFUFkGGrRePvpKLPkp9DR3crRepf6CJsYU3UmudtY", - "symbol": "WEEB", - "name": "Weeb Finance Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9VgfFUFkGGrRePvpKLPkp9DR3crRepf6CJsYU3UmudtY/logo.png", - "tags": ["utility-token", "anime"], - "extensions": { - "discord": "https://discord.gg/fzZbyXAzaG", - "medium": "https://medium.com/@WeebFinance", - "telegram": "https://t.me/weeb_finance", - "twitter": "https://twitter.com/WeebFinance", - "website": "https://weeb.finance/" - } - }, - { - "chainId": 101, - "address": "AGkFkKgXUEP7ZXazza5a25bSKbz5dDpgafPhqywuQnpf", - "symbol": "SSU", - "name": "SunnySideUp Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AGkFkKgXUEP7ZXazza5a25bSKbz5dDpgafPhqywuQnpf/logo.png", - "extensions": { - "github": "https://github.com/sunnysideup72", - "medium": "https://medium.com/official-sunnysideup", - "twitter": "https://twitter.com/SSU_SunnySideUp", - "website": "https://www.sunnysideup.finance" - } - }, - { - "chainId": 101, - "address": "8EDaoeBqpcVACwvkYXh1vAcU29HiBiNhqoF4pRsuUsZS", - "symbol": "sSOL", - "name": "SunnySideUp staked SOL (sSOL)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8EDaoeBqpcVACwvkYXh1vAcU29HiBiNhqoF4pRsuUsZS/logo.png", - "extensions": { - "github": "https://github.com/sunnysideup72", - "medium": "https://medium.com/official-sunnysideup", - "twitter": "https://twitter.com/SSU_SunnySideUp", - "website": "https://www.sunnysideup.finance" - } - }, - { - "chainId": 101, - "address": "mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So", - "symbol": "mSOL", - "name": "Marinade staked SOL (mSOL)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So/logo.png", - "extensions": { - "coingeckoId": "msol", - "discord": "https://discord.gg/mGqZA5pjRN", - "github": "https://github.com/marinade-finance", - "medium": "https://medium.com/marinade-finance", - "serumV3Usdc": "6oGsL2puUgySccKzn9XA9afqF217LfxP5ocq4B3LWsjy", - "serumV3Usdt": "HxkQdUnrPdHwXP5T9kewEXs3ApgvbufuTfdw9v1nApFd", - "twitter": "https://twitter.com/MarinadeFinance", - "website": "https://marinade.finance" - } - }, - { - "chainId": 101, - "address": "LPmSozJJ8Jh69ut2WP3XmVohTjL4ipR18yiCzxrUmVj", - "symbol": "mSOL-SOL-LP", - "name": "Marinade LP token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/LPmSozJJ8Jh69ut2WP3XmVohTjL4ipR18yiCzxrUmVj/logo.png", - "tags": ["lp-token"], - "extensions": { - "discord": "https://discord.gg/mGqZA5pjRN", - "github": "https://github.com/marinade-finance", - "medium": "https://medium.com/marinade-finance", - "twitter": "https://twitter.com/MarinadeFinance", - "website": "https://marinade.finance" - } - }, - { - "chainId": 101, - "address": "3k8BDobgihmk72jVmXYLE168bxxQUhqqyESW4dQVktqC", - "symbol": "STEP-USDC", - "name": "Raydium LP Token V4 (STEP-USDC)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3k8BDobgihmk72jVmXYLE168bxxQUhqqyESW4dQVktqC/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "3UMYcByZNQVHHyyqVfXMKr8XWP64omYBFVvf7bD6wBiA", - "symbol": "BET", - "name": "SOLBET", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3UMYcByZNQVHHyyqVfXMKr8XWP64omYBFVvf7bD6wBiA/logo.svg", - "tags": ["utility-token"], - "extensions": { - "description": "SOLBET seeks to facilitate P2P speculation and provide trustless on-chain escrow services for speculative ventures utilizing on-chain data, oracle services, and private data node operators to verify outcomes for all parties involved.", - "discord": "https://solbet.org/discord", - "serumV3Usdc": "GsWX1FgWP35jchi5R9uiNys2g6GftruEiHVpPS2b7Vq8", - "telegram": "https://t.me/solbet_official", - "twitter": "https://twitter.com/solbet_official", - "website": "https://solbet.org/" - } - }, - { - "chainId": 101, - "address": "A5zanvgtioZGiJMdEyaKN4XQmJsp1p7uVxaq2696REvQ", - "symbol": "MEDIA-USDC", - "name": "Raydium LP Token V4 (MEDIA-USDC)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/A5zanvgtioZGiJMdEyaKN4XQmJsp1p7uVxaq2696REvQ/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "Cq4HyW5xia37tKejPF2XfZeXQoPYW6KfbPvxvw5eRoUE", - "symbol": "ROPE-USDC", - "name": "Raydium LP Token V4 (ROPE-USDC)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Cq4HyW5xia37tKejPF2XfZeXQoPYW6KfbPvxvw5eRoUE/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "3H9NxvaZoxMZZDZcbBDdWMKbrfNj7PCF5sbRwDr7SdDW", - "symbol": "MER-USDC", - "name": "Raydium LP Token V4 (MER-USDC)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3H9NxvaZoxMZZDZcbBDdWMKbrfNj7PCF5sbRwDr7SdDW/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "Cz1kUvHw98imKkrqqu95GQB9h1frY8RikxPojMwWKGXf", - "symbol": "COPE-USDC", - "name": "Raydium LP Token V4 (COPE-USDC)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Cz1kUvHw98imKkrqqu95GQB9h1frY8RikxPojMwWKGXf/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "iUDasAP2nXm5wvTukAHEKSdSXn8vQkRtaiShs9ceGB7", - "symbol": "ALEPH-USDC", - "name": "Raydium LP Token V4 (ALEPH-USDC)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/iUDasAP2nXm5wvTukAHEKSdSXn8vQkRtaiShs9ceGB7/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "7cu42ao8Jgrd5A3y3bNQsCxq5poyGZNmTydkGfJYQfzh", - "symbol": "WOO-USDC", - "name": "Raydium LP Token V4 (WOO-USDC)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7cu42ao8Jgrd5A3y3bNQsCxq5poyGZNmTydkGfJYQfzh/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "G8qcfeFqxwbCqpxv5LpLWxUCd1PyMB5nWb5e5YyxLMKg", - "symbol": "SNY-USDC", - "name": "Raydium LP Token V4 (SNY-USDC)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/G8qcfeFqxwbCqpxv5LpLWxUCd1PyMB5nWb5e5YyxLMKg/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "9nQPYJvysyfnXhQ6nkK5V7sZG26hmDgusfdNQijRk5LD", - "symbol": "BOP-RAY", - "name": "Raydium LP Token V4 (BOP-RAY)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9nQPYJvysyfnXhQ6nkK5V7sZG26hmDgusfdNQijRk5LD/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "2Xxbm1hdv5wPeen5ponDSMT3VqhGMTQ7mH9stNXm9shU", - "symbol": "SLRS-USDC", - "name": "Raydium LP Token V4 (SLRS-USDC)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Xxbm1hdv5wPeen5ponDSMT3VqhGMTQ7mH9stNXm9shU/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "HwzkXyX8B45LsaHXwY8su92NoRBS5GQC32HzjQRDqPnr", - "symbol": "SAMO-RAY", - "name": "Raydium LP Token V4 (SAMO-RAY)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HwzkXyX8B45LsaHXwY8su92NoRBS5GQC32HzjQRDqPnr/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "CTEpsih91ZLo5gunvryLpJ3pzMjmt5jbS6AnSQrzYw7V", - "symbol": "renBTC-USDC", - "name": "Raydium LP Token V4 (renBTC-USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CTEpsih91ZLo5gunvryLpJ3pzMjmt5jbS6AnSQrzYw7V/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "Hb8KnZNKvRxu7pgMRWJgoMSMcepfvNiBFFDDrdf9o3wA", - "symbol": "renDOGE-USDC", - "name": "Raydium LP Token V4 (renDOGE-USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Hb8KnZNKvRxu7pgMRWJgoMSMcepfvNiBFFDDrdf9o3wA/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "FbC6K13MzHvN42bXrtGaWsvZY9fxrackRSZcBGfjPc7m", - "symbol": "RAY-USDC", - "name": "Raydium LP Token V4 (RAY-USDC)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FbC6K13MzHvN42bXrtGaWsvZY9fxrackRSZcBGfjPc7m/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "7P5Thr9Egi2rvMmEuQkLn8x8e8Qro7u2U7yLD2tU2Hbe", - "symbol": "RAY-SRM", - "name": "Raydium LP Token V4 (RAY-SRM)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7P5Thr9Egi2rvMmEuQkLn8x8e8Qro7u2U7yLD2tU2Hbe/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "mjQH33MqZv5aKAbKHi8dG3g3qXeRQqq1GFcXceZkNSr", - "symbol": "RAY-ETH", - "name": "Raydium LP Token V4 (RAY-ETH)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/mjQH33MqZv5aKAbKHi8dG3g3qXeRQqq1GFcXceZkNSr/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "89ZKE4aoyfLBe2RuV6jM3JGNhaV18Nxh8eNtjRcndBip", - "symbol": "RAY-SOL", - "name": "Raydium LP Token V4 (RAY-SOL)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/89ZKE4aoyfLBe2RuV6jM3JGNhaV18Nxh8eNtjRcndBip/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "Hmatmu1ktLbobSvim94mfpZmjL5iiyoM1zidtXJRAdLZ", - "symbol": "PSOL", - "name": "Parasol", - "decimals": 7, - "logoURI": "https://raw.githubusercontent.com/parasol-finance/white-paper/main/logo.png", - "tags": ["utility-token"], - "extensions": { - "coingeckoId": "parasol-finance", - "discord": "https://discord.gg/WTwm2V45UZ", - "github": "https://github.com/parasol-finance", - "medium": "https://medium.com/@parasol.finance", - "serumV3Usdc": "DukWnNjNS1qQYUNGYj5NJViEfQW793mHwxij3wi9dazM", - "telegram": "https://t.me/parasolfinance", - "twitter": "https://twitter.com/parasol_finance", - "website": "https://parasol.finance" - } - }, - { - "chainId": 101, - "address": "4HFaSvfgskipvrzT1exoVKsUZ174JyExEsA8bDfsAdY5", - "symbol": "DXL-USDC", - "name": "Raydium LP Token V4 (DXL-USDC)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4HFaSvfgskipvrzT1exoVKsUZ174JyExEsA8bDfsAdY5/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "4dydh8EGNEdTz6grqnGBxpduRg55eLnwNZXoNZJetadu", - "symbol": "SWARM", - "name": "MIM", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4dydh8EGNEdTz6grqnGBxpduRg55eLnwNZXoNZJetadu/logo.png", - "extensions": { - "coingeckoId": "mim", - "discord": "https://discord.gg/8mHbKWczpB", - "github": "https://github.com/kyonym/MIM", - "telegram": "https://t.me/mimswarm", - "twitter": "https://twitter.com/mimswarm", - "website": "https://mim-swarm.com" - } - }, - { - "chainId": 101, - "address": "9SC3YkrWSWeroDUQnAuQ8fkziko2N6QydZPfVbDFjK8Z", - "symbol": "PHC", - "name": "Phosphine Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9SC3YkrWSWeroDUQnAuQ8fkziko2N6QydZPfVbDFjK8Z/logo.png", - "tags": ["phosphine"], - "extensions": { - "website": "https://phosphinecoin.org/" - } - }, - { - "chainId": 101, - "address": "cjZmbt8sJgaoyWYUttomAu5LJYU44ZrcKTbzTSEPDVw", - "symbol": "LIKE-USDC", - "name": "Raydium LP Token V4 (LIKE-USDC)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/cjZmbt8sJgaoyWYUttomAu5LJYU44ZrcKTbzTSEPDVw/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "PoRTjZMPXb9T7dyU7tpLEZRQj7e6ssfAE62j2oQuc6y", - "symbol": "PORT", - "name": "Port Finance Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/PoRTjZMPXb9T7dyU7tpLEZRQj7e6ssfAE62j2oQuc6y/PORT.png", - "extensions": { - "coingeckoId": "port-finance", - "discord": "https://discord.gg/nAMXAYhTb2", - "github": "https://github.com/port-finance/", - "medium": "https://medium.com/port-finance", - "serumV3Usdc": "8x8jf7ikJwgP9UthadtiGFgfFuyyyYPHL3obJAuxFWko", - "telegram": "https://t.me/port_finance", - "twitter": "https://twitter.com/port_finance", - "waterfallbot": "https://bit.ly/PORTwaterfall", - "website": "https://port.finance/" - } - }, - { - "chainId": 101, - "address": "C3vBJEuNvrUqJYQ5ki8TSrCndphJQ7wwiXEwvuy1AJkW", - "symbol": "BONGO", - "name": "Bongocoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/assets/mainnet/C3vBJEuNvrUqJYQ5ki8TSrCndphJQ7wwiXEwvuy1AJkW/logo.png", - "extensions": { - "website": "https://www.bongocoin.org" - } - }, - { - "chainId": 101, - "address": "6CssfnBjF4Vo56EithaLHLWDF95fLrt48QHsUfZwNnhv", - "symbol": "JPYC", - "name": "JPY Coin(Portal)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5trVBqv1LvHxiSPMsHtEZuf8iN82wbpDcR5Zaw7sWC3s/logo.png", - "tags": ["stablecoin", "ethereum", "wrapped", "wormhole"], - "extensions": { - "assetContract": "https://etherscan.io/address/0x2370f9d504c7a6e775bf6e14b3f12846b594cd53", - "coingeckoId": "jpyc", - "twitter": "https://twitter.com/jpy_coin", - "website": "https://jpyc.jp/" - } - }, - { - "chainId": 101, - "address": "D1EjNd9c7MgepvQCS31x5TpdXpvtDwDNCLwLGEYg6hYo", - "symbol": "AUTOS", - "name": "Autostorm", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/autostorm-org/img/cb78b86a54f6f4f637e4e6cbe961e002966b4844/avatar.png", - "tags": ["cars", "auto", "marketplace"], - "extensions": { - "discord": "https://discord.gg/yWjkHgnPD3", - "website": "https://www.autostorm.io/" - } - }, - { - "chainId": 101, - "address": "BL6X5awy2TstWE6gJGZMLXwW1Wi3VsdCDWEzzK2cuzrw", - "symbol": "ARIES", - "name": "SOLARIES Financial Token", - "decimals": 9, - "logoURI": "https://github.com/ariesfinancial/Aries-Financial/raw/f2946ff1e295fef66e3cfa5e590daef7bb8559c2/logo-120-120%403x.png", - "extensions": { - "discord": "https://discord.gg/cRFc6kEu", - "github": "https://github.com/ariesfinancial", - "medium": "https://aries-financial.medium.com/", - "telegram": "https://t.me/aries_financial_official", - "twitter": "https://twitter.com/_AriesFinancial", - "website": "https://solaries.network/" - } - }, - { - "chainId": 101, - "address": "GJQpf6Zjvokd3YK5EprXqZUah9jxkn8aG4pTeWL7Gkju", - "symbol": "OKI", - "name": "HDOKI", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GJQpf6Zjvokd3YK5EprXqZUah9jxkn8aG4pTeWL7Gkju/logo.png", - "extensions": { - "website": "https://hdoki.com/" - } - }, - { - "chainId": 101, - "address": "4oCZJ97YH3cnqbdSqi8GZXpaTR9cdmF7idx3dZNNG7n8", - "symbol": "DBYT", - "name": "Debyt", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4oCZJ97YH3cnqbdSqi8GZXpaTR9cdmF7idx3dZNNG7n8/logo.svg", - "extensions": { - "github": "https://github.com/debyt", - "medium": "https://medium.com/@debyt", - "telegram": "https://t.me/debytfinance", - "twitter": "https://twitter.com/debytfinance", - "website": "https://debyt.io/" - } - }, - { - "chainId": 101, - "address": "MangoCzJ36AjZyKwVj3VnYU4GTonjfVEnJmvvWaxLac", - "symbol": "MNGO", - "name": "Mango", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/MangoCzJ36AjZyKwVj3VnYU4GTonjfVEnJmvvWaxLac/token.png", - "extensions": { - "coingeckoId": "mango-markets", - "discord": "https://discord.gg/67jySBhxrg", - "serumV3Usdc": "3d4rzwpy9iGdCZvgxcu7B1YocYffVLsQXPXkBZKt2zLc", - "twitter": "https://twitter.com/mangomarkets", - "website": "https://mango.markets/" - } - }, - { - "chainId": 101, - "address": "9X4EK8E59VAVi6ChnNvvd39m6Yg9RtkBbAPq1mDVJT57", - "symbol": "SLIM-SOL", - "name": "Raydium LP Token V4 (SLIM-SOL)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/xxxxa1sKNGwFtw2kFn8XauW9xq8hBZ5kVtcSesTT9fW/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "8BNNxGUinfDgwXodroVfGQde1RnwsA2DW34gc89YcBH9", - "symbol": "RDZ", - "name": "RADIOZONE26", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/Radiozone26/RDZtoken/RDZlogo.png", - "tags": ["social-token"], - "extensions": { - "facebook": "https://www.facebook.com/Rzone26", - "twitter": "https://twitter.com/radio_zone26", - "website": "https://radiozone26.com/" - } - }, - { - "chainId": 101, - "address": "F34jmbEEAEHCKqCLUXEEKyMWZLTAfFuF6mKQejySSZSN", - "symbol": "MOGO", - "name": "Mogotrovio", - "decimals": 1, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/F34jmbEEAEHCKqCLUXEEKyMWZLTAfFuF6mKQejySSZSN/symbol.png", - "extensions": { - "discord": "https://discord.gg/zwgxUqypy9", - "website": "https://mogotrov.io/" - } - }, - { - "chainId": 101, - "address": "EwJN2GqUGXXzYmoAciwuABtorHczTA5LqbukKXV1viH7", - "symbol": "UPS", - "name": "UPS token (UPFI Network)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EwJN2GqUGXXzYmoAciwuABtorHczTA5LqbukKXV1viH7/logo.png", - "extensions": { - "discord": "https://discord.gg/nHMDdyAggx", - "facebook": "https://www.facebook.com/UPFInetwork", - "medium": "https://upfinetwork.medium.com", - "serumV3Usdc": "DByPstQRx18RU2A8DH6S9mT7bpT6xuLgD2TTFiZJTKZP", - "telegram": "https://t.me/upfinetworkchannel", - "twitter": "https://twitter.com/upfi_network", - "website": "https://upfi.network/" - } - }, - { - "chainId": 101, - "address": "Gsai2KN28MTGcSZ1gKYFswUpFpS7EM9mvdR9c8f6iVXJ", - "symbol": "gSAIL", - "name": "SolanaSail Governance Token V2", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solanasail/token-list/main/assets/mainnet/Gsai2KN28MTGcSZ1gKYFswUpFpS7EM9mvdR9c8f6iVXJ/logo.png", - "tags": ["utility-token"], - "extensions": { - "coingeckoId": "solanasail-governance-token", - "serumV3Usdc": "2zkPyHgQkKG6qJED6MTbjfCfUbZeT9VFwLm1Ld9nKxRp", - "twitter": "https://twitter.com/SolanaSail", - "website": "https://www.solanasail.com" - } - }, - { - "chainId": 101, - "address": "Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS", - "symbol": "PAI", - "name": "PAI (Parrot USD)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS/logo.svg", - "tags": ["utility-token", "stablecoin"], - "extensions": { - "coingeckoId": "parrot-usd", - "discord": "https://discord.gg/gopartyparrot", - "medium": "https://gopartyparrot.medium.com/", - "telegram": "https://t.me/gopartyparrot", - "twitter": "https://twitter.com/gopartyparrot", - "website": "https://parrot.fi" - } - }, - { - "chainId": 101, - "address": "PRT88RkA4Kg5z7pKnezeNH4mafTvtQdfFgpQTGRjz44", - "symbol": "PRT", - "name": "PRT (Parrot Protocol)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/PRT88RkA4Kg5z7pKnezeNH4mafTvtQdfFgpQTGRjz44/logo.svg", - "tags": ["utility-token"], - "extensions": { - "coingeckoId": "parrot-protocol", - "discord": "https://discord.gg/gopartyparrot", - "medium": "https://gopartyparrot.medium.com/", - "telegram": "https://t.me/gopartyparrot", - "twitter": "https://twitter.com/gopartyparrot", - "website": "https://parrot.fi" - } - }, - { - "chainId": 101, - "address": "DYDWu4hE4MN3aH897xQ3sRTs5EAjJDmQsKLNhbpUiKun", - "symbol": "pBTC", - "name": "pBTC (Parrot BTC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DYDWu4hE4MN3aH897xQ3sRTs5EAjJDmQsKLNhbpUiKun/logo.svg", - "tags": ["stablecoin"], - "extensions": { - "discord": "https://discord.gg/gopartyparrot", - "medium": "https://gopartyparrot.medium.com/", - "telegram": "https://t.me/gopartyparrot", - "twitter": "https://twitter.com/gopartyparrot", - "website": "https://parrot.fi" - } - }, - { - "chainId": 101, - "address": "9EaLkQrbjmbbuZG9Wdpo8qfNUEjHATJFSycEmw6f1rGX", - "symbol": "pSOL", - "name": "pSOL (Parrot SOL)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9EaLkQrbjmbbuZG9Wdpo8qfNUEjHATJFSycEmw6f1rGX/logo.svg", - "tags": ["stablecoin"], - "extensions": { - "discord": "https://discord.gg/gopartyparrot", - "medium": "https://gopartyparrot.medium.com/", - "telegram": "https://t.me/gopartyparrot", - "twitter": "https://twitter.com/gopartyparrot", - "website": "https://parrot.fi" - } - }, - { - "chainId": 101, - "address": "AsWigW5KeEKsiDAgdjxpWQEBMFk4BEgmmmHZMYwVfUVN", - "symbol": "ZKL", - "name": "zkrollup cross chain link", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AsWigW5KeEKsiDAgdjxpWQEBMFk4BEgmmmHZMYwVfUVN/logo.png", - "extensions": { - "website": "https://zk.link" - } - }, - { - "chainId": 101, - "address": "EwHqbMUMX33JjWAhxSg9vsX3miWqncsgpnAbqn9nhJwZ", - "symbol": "ULA", - "name": "Solana Mobile App UlaPay Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EwHqbMUMX33JjWAhxSg9vsX3miWqncsgpnAbqn9nhJwZ/logo.png", - "extensions": { - "website": "http://kikenn.com/" - } - }, - { - "chainId": 101, - "address": "SUNNYWgPQmFxe9wTZzNK7iPnJ3vYDrkgnxJRJm1s3ag", - "symbol": "SUNNY", - "name": "Sunny Governance Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SUNNYWgPQmFxe9wTZzNK7iPnJ3vYDrkgnxJRJm1s3ag/logo.svg", - "extensions": { - "coingeckoId": "sunny-aggregator", - "discord": "https://chat.sunny.ag", - "github": "https://github.com/SunnyAggregator", - "medium": "https://medium.com/sunny-aggregator", - "serumV3Usdc": "Aubv1QBFh4bwB2wbP1DaPW21YyQBLfgjg8L4PHTaPzRc", - "twitter": "https://twitter.com/SunnyAggregator", - "waterfallbot": "https://bit.ly/SUNNYwaterfall", - "website": "https://sunny.ag/" - } - }, - { - "chainId": 101, - "address": "BRLsMczKuaR5w9vSubF4j8HwEGGprVAyyVgS4EX7DKEg", - "symbol": "CYS", - "name": "Cykura", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BRLsMczKuaR5w9vSubF4j8HwEGGprVAyyVgS4EX7DKEg/logo.svg", - "tags": ["utility-token"], - "extensions": { - "coingeckoId": "cykura", - "coinmarketcap": "https://coinmarketcap.com/currencies/cyclos/", - "discord": "https://discord.gg/gyaK56UreX", - "github": "https://github.com/cykura", - "medium": "https://cykura.medium.com/", - "serumV3Usdc": "6V6y6QFi17QZC9qNRpVp7SaPiHpCTp2skbRQkUyZZXPW", - "solanium": "https://www.solanium.io/project/cyclos/", - "telegram": "https://t.me/cykuraofficialchat", - "twitter": "https://twitter.com/cykurafi", - "website": "https://cykura.io/" - } - }, - { - "chainId": 101, - "address": "FxjbQMfvQYMtZZK7WGEJwWfsDcdMuuaee8uPxDFFShWh", - "symbol": "UPFI", - "name": "UPFI stablecoin (UPFI Network)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FxjbQMfvQYMtZZK7WGEJwWfsDcdMuuaee8uPxDFFShWh/logo.png", - "tags": ["stablecoin"], - "extensions": { - "discord": "https://discord.gg/nHMDdyAggx", - "facebook": "https://www.facebook.com/UPFInetwork", - "medium": "https://upfinetwork.medium.com", - "serumV3Usdc": "SyQ4KyF5Y1MPPkkf9LGNA6JpkVmis53HrpPvJ1ZUFwK", - "telegram": "https://t.me/upfinetworkchannel", - "twitter": "https://twitter.com/upfi_network", - "website": "https://upfi.network/" - } - }, - { - "chainId": 101, - "address": "7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj", - "symbol": "stSOL", - "name": "Lido Staked SOL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj/logo.png", - "extensions": { - "coingeckoId": "lido-staked-sol", - "coinmarketcap": "https://coinmarketcap.com/currencies/lido-for-solana/", - "discord": "https://discord.gg/w9pXXgQPu8", - "github": "https://github.com/ChorusOne/solido", - "serumV3Usdc": "5F7LGsP1LPtaRV7vVKgxwNYX4Vf22xvuzyXjyar7jJqp", - "twitter": "https://twitter.com/LidoFinance", - "website": "https://solana.lido.fi/" - } - }, - { - "chainId": 101, - "address": "H2mf9QNdU2Niq6QR7367Ua2trBsvscLyX5bz7R3Pw5sE", - "symbol": "stETH", - "name": "Lido Staked ETH", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/H2mf9QNdU2Niq6QR7367Ua2trBsvscLyX5bz7R3Pw5sE/logo.png", - "tags": ["stake", "wrapped"], - "extensions": { - "coingeckoId": "lido-staked-ether", - "discord": "https://discord.gg/WhhnWwsFXz", - "github": "https://github.com/lidofinance", - "telegram": "https://t.me/lidofinance", - "twitter": "https://twitter.com/LidoFinance", - "website": "https://lido.fi/" - } - }, - { - "chainId": 101, - "address": "ZScHuTtqZukUrtZS43teTKGs2VqkKL8k4QCouR2n6Uo", - "symbol": "wstETH", - "name": "Lido Wrapped Staked ETH", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ZScHuTtqZukUrtZS43teTKGs2VqkKL8k4QCouR2n6Uo/logo.png", - "tags": ["stake", "wrapped"], - "extensions": { - "discord": "https://discord.gg/WhhnWwsFXz", - "github": "https://github.com/lidofinance", - "telegram": "https://t.me/lidofinance", - "twitter": "https://twitter.com/LidoFinance", - "website": "https://lido.fi/" - } - }, - { - "chainId": 101, - "address": "3ewm17jCxn8EkEpar45mnY6qk7wc93uPg5D41KMeHZhf", - "symbol": "CSH", - "name": "CSH Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3ewm17jCxn8EkEpar45mnY6qk7wc93uPg5D41KMeHZhf/logo.png", - "tags": ["utility-token", "shchoi"] - }, - { - "chainId": 101, - "address": "2Kc38rfQ49DFaKHQaWbijkE7fcymUMLY5guUiUsDmFfn", - "symbol": "KURO", - "name": "Kurobi", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Kc38rfQ49DFaKHQaWbijkE7fcymUMLY5guUiUsDmFfn/logo.png", - "tags": ["utility-token"], - "extensions": { - "coingeckoId": "kurobi", - "github": "https://github.com/KurobiHq/", - "medium": "https://kurobi.medium.com/", - "telegram": "https://t.me/kurobi_io", - "twitter": "https://twitter.com/kurobi_io", - "website": "https://kurobi.io/" - } - }, - { - "chainId": 101, - "address": "FiCiuX9DetEE89PgRAU1hmoptnem8b1fkpEq8PGYTYkd", - "symbol": "MM", - "name": "Million", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FiCiuX9DetEE89PgRAU1hmoptnem8b1fkpEq8PGYTYkd/logo.svg", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x6b4c7a5e3f0b99fcd83e9c089bddd6c7fce5c611", - "assetContract": "https://etherscan.io/address/0x6b4c7a5e3f0b99fcd83e9c089bddd6c7fce5c611", - "bridgeContract": "https://etherscan.io/address/0xf92cd566ea4864356c5491c177a430c222d7e678", - "coingeckoId": "million", - "discord": "http://app.milliontoken.org/discord", - "facebook": "https://facebook.com/groups/milliontoken", - "instagram": "https://instagram.com/milliontokenofficial", - "reddit": "https://www.reddit.com/r/milliontoken/", - "telegram": "https://t.me/millionjacuzzibar", - "twitter": "https://twitter.com/Million__Token", - "website": "https://www.milliontoken.org/" - } - }, - { - "chainId": 101, - "address": "2PoF4gqWg97yjJk276yUYaGVkkASE7tqAU7H5faEBkeC", - "symbol": "MM", - "name": "Million", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2PoF4gqWg97yjJk276yUYaGVkkASE7tqAU7H5faEBkeC/logo.svg", - "tags": ["wrapped", "wormhole"], - "extensions": { - "coingeckoId": "million", - "discord": "http://app.milliontoken.org/discord", - "reddit": "https://www.reddit.com/r/milliontoken/", - "twitter": "https://twitter.com/Million__Token", - "website": "https://www.milliontoken.org/" - } - }, - { - "chainId": 101, - "address": "Bqd2ujCTEzpKzfjb1FHL7FKrdM6n1rZSnRecJK57EoKz", - "symbol": "HOTTO", - "name": "HottoShotto", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Bqd2ujCTEzpKzfjb1FHL7FKrdM6n1rZSnRecJK57EoKz/logo.png", - "tags": ["utility-token"], - "extensions": { - "serumV3Usdc": "76d1Gv8649Fhn7HtZTxaPCMFA4fYxaQ3jbna7pGMGA6", - "website": "https://hottoshotto.com" - } - }, - { - "chainId": 101, - "address": "FossiLkXJZ1rePN8jWBqHDZZ3F7ET8p1dRGhYKHbQcZR", - "symbol": "Fossil", - "name": "Scallop Fossil Decorations", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FossiLkXJZ1rePN8jWBqHDZZ3F7ET8p1dRGhYKHbQcZR/logo.png", - "tags": ["nft"], - "extensions": { - "discord": "https://discord.gg/Scallop", - "facebook": "https://www.facebook.com/Scallop.io", - "instagram": "https://www.instagram.com/scallop.io", - "medium": "https://scallopio.medium.com/", - "telegram": "https://t.me/scallop_io", - "twitter": "https://twitter.com/Scallop_io", - "website": "https://www.scallop.io/" - } - }, - { - "chainId": 101, - "address": "FM8yfVgaEHrpSzNZeZ1o4v5iLZuT9soNuqaWD72bJyqs", - "symbol": "HOTTO-USDC", - "name": "Raydium LP Token V4 (HOTTO-USDC)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FM8yfVgaEHrpSzNZeZ1o4v5iLZuT9soNuqaWD72bJyqs/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "SeawdHf3NHG6gxCrezQxr5oJAHTLJd6JsQxxd144yaz", - "symbol": "Seagrass", - "name": "Scallop Seagrass Decorations", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SeawdHf3NHG6gxCrezQxr5oJAHTLJd6JsQxxd144yaz/logo.png", - "tags": ["nft"], - "extensions": { - "discord": "https://discord.gg/Scallop", - "facebook": "https://www.facebook.com/Scallop.io", - "instagram": "https://www.instagram.com/scallop.io", - "medium": "https://scallopio.medium.com/", - "telegram": "https://t.me/scallop_io", - "twitter": "https://twitter.com/Scallop_io", - "website": "https://www.scallop.io/" - } - }, - { - "chainId": 101, - "address": "78CeyRBJSu4MFmaDi8Q8QZ3szB6Xwp93sVaMLYSy5SMZ", - "symbol": "HOTTO-SOL", - "name": "Raydium LP Token V4 (HOTTO-SOL)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/78CeyRBJSu4MFmaDi8Q8QZ3szB6Xwp93sVaMLYSy5SMZ/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "ScaLopYHz9eKtDdKs4yLswwq2RSUtNMZVdPynMcYcc9", - "symbol": "SCA", - "name": "Scallop", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ScaLopYHz9eKtDdKs4yLswwq2RSUtNMZVdPynMcYcc9/logo.png", - "extensions": { - "discord": "https://discord.gg/Scallop", - "facebook": "https://www.facebook.com/Scallop.io", - "instagram": "https://www.instagram.com/scallop.io", - "medium": "https://scallopio.medium.com/", - "telegram": "https://t.me/scallop_io", - "twitter": "https://twitter.com/Scallop_io", - "website": "https://www.scallop.io/" - } - }, - { - "chainId": 101, - "address": "FnKE9n6aGjQoNWRBZXy4RW6LZVao7qwBonUbiD7edUmZ", - "symbol": "SYP", - "name": "Sypool", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/b0e47e39f84cffb655f406eb569c57a88b5211cc/assets/mainnet/FnKE9n6aGjQoNWRBZXy4RW6LZVao7qwBonUbiD7edUmZ/logo.png", - "tags": ["platform"], - "extensions": { - "coingeckoId": "sypool", - "website": "https://www.sypool.io/" - } - }, - { - "chainId": 101, - "address": "FGpMT3xLwk67hWsT7Lgp7WjovS3rejx9KBmCG1bBtB9U", - "symbol": "ALTREC", - "name": "ALTREC Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SmonkeyMonkey/token-list/main/assets/mainnet/FGpMT3xLwk67hWsT7Lgp7WjovS3rejx9KBmCG1bBtB9U/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "2YxGppCJJY2KGoAwFdFASE6tnD4cENM7nThwUgdpXwjE", - "symbol": "COD-sc1", - "name": "Sceptre Token v1 (Sceptre-TOKEN)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2YxGppCJJY2KGoAwFdFASE6tnD4cENM7nThwUgdpXwjE/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://kokeshi.finance/" - } - }, - { - "chainId": 101, - "address": "HbrmyoumgcK6sDFBi6EZQDi4i4ZgoN16eRB2JseKc7Hi", - "symbol": "CRY", - "name": "Crystal", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HbrmyoumgcK6sDFBi6EZQDi4i4ZgoN16eRB2JseKc7Hi/logo.png", - "tags": ["crystal-token"], - "extensions": { - "discord": "https://discord.gg/ghnnPvQNgS", - "github": "https://github.com/sol-crystal", - "medium": "https://solcrystal.medium.com/", - "serumV3Usdc": "H3e7YziokpHJfFAMAy2PK6sNph72f38P1ELd5TUQaocv", - "serumV3Usdt": "ESmbZckdRFv1F8aJ9CfcAsQ9JQchCVgXMEd2UimcujHU", - "telegram": "https://t.me/sol_cry", - "twitter": "https://twitter.com/Crystal80955369", - "website": "http://solcry.io/" - } - }, - { - "chainId": 101, - "address": "HRBrRXGCrPro6TtryKQkLXuZqg3LdBMN9ZWx2v66pT4L", - "symbol": "WNAV", - "name": "Wrapped Navcoin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HRBrRXGCrPro6TtryKQkLXuZqg3LdBMN9ZWx2v66pT4L/logo.png", - "tags": ["ethereum"], - "extensions": { - "website": "https://navcoin.org" - } - }, - { - "chainId": 101, - "address": "2TxM6S3ZozrBHZGHEPh9CtM74a9SVXbr7NQ7UxkRvQij", - "symbol": "DINOEGG", - "name": "DINOEGG", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2TxM6S3ZozrBHZGHEPh9CtM74a9SVXbr7NQ7UxkRvQij/logo.png", - "extensions": { - "twitter": "https://twitter.com/solanadino", - "website": "https://www.solanadino.com" - } - }, - { - "chainId": 101, - "address": "Fh4e5vX2euTBzyGK2FXN1P3A4VUoH73oPVuemfRWXK2Y", - "symbol": "wFOX_v1", - "name": "ShapeShift FOX Token (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Fh4e5vX2euTBzyGK2FXN1P3A4VUoH73oPVuemfRWXK2Y/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xc770eefad204b5180df6a14ee197d99d808ee52d", - "assetContract": "https://etherscan.io/address/0xc770eefad204b5180df6a14ee197d99d808ee52d", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "shapeshift-fox-token", - "github": "https://github.com/shapeshift", - "twitter": "https://twitter.com/ShapeShift_io", - "website": "https://shapeshift.com/" - } - }, - { - "chainId": 101, - "address": "FY6XDSCubMhpkU9FAsUjB7jmN8YHYZGezHTWo9RHBSyX", - "symbol": "ASH", - "name": "Ashera", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FY6XDSCubMhpkU9FAsUjB7jmN8YHYZGezHTWo9RHBSyX/logo.png", - "extensions": { - "coingeckoId": "ashera", - "coinmarketcap": "https://coinmarketcap.com/currencies/ashera/", - "discord": "https://discord.gg/b3qYsNyBkz", - "github": "https://github.com/asherasol", - "medium": "https://solashera.medium.com/", - "serumV3Usdc": "56ZFVzqMqtDmyry9bK7vi1szUV2nuQ4kT6CzFAB649wE", - "twitter": "https://twitter.com/SolAshera", - "website": "https://asherasol.com/" - } - }, - { - "chainId": 101, - "address": "333iHoRM2Awhf9uVZtSyTfU8AekdGrgQePZsKMFPgKmS", - "symbol": "ISOLA", - "name": "Intersola", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/333iHoRM2Awhf9uVZtSyTfU8AekdGrgQePZsKMFPgKmS/logo.png", - "tags": ["utility-token"], - "extensions": { - "github": "https://github.com/Intersolaio/", - "medium": "https://intersola.medium.com/", - "serumV3Usdt": "42QVcMqoXmHT94zaBXm9KeU7pqDfBuAPHYN9ADW8weCF", - "telegram": "https://t.me/intersola", - "twitter": "https://twitter.com/intersola_io", - "website": "https://intersola.io/" - } - }, - { - "chainId": 101, - "address": "EYDEQW4xQzLqHcFwHTgGvpdjsa5EFn74KzuqLX5emjD2", - "symbol": "BST", - "name": "Balisari", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EYDEQW4xQzLqHcFwHTgGvpdjsa5EFn74KzuqLX5emjD2/logo.png", - "tags": ["social-token"], - "extensions": { - "coingeckoId": "balisari", - "coinmarketcap": "https://coinmarketcap.com/currencies/balisari/", - "discord": "https://discord.gg/6ndxB4vS56", - "serumV3Usdc": "Hq2tZzrdNrMtDsdXeCf9CrN3aS3geJTEqtLRPyiYRZc", - "telegram": "https://t.me/balisaritrans", - "twitter": "https://twitter.com/balisaritrans", - "website": "https://www.balisaritrans.site/" - } - }, - { - "chainId": 101, - "address": "8FXW4GSS9SNDVP5UhaWNsaZbxvRJXNrwvwvToXRnvuWL", - "symbol": "KNB", - "name": "KNB", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8FXW4GSS9SNDVP5UhaWNsaZbxvRJXNrwvwvToXRnvuWL/logo.png", - "tags": ["knb-token"], - "extensions": { - "website": "https://solatoken.net/" - } - }, - { - "chainId": 101, - "address": "Dypr2gWcVuqt3z6Uh31YD8Wm2V2ZCqWVBYEWhZNF9odk", - "symbol": "SOLJAV", - "name": "SOLJAV", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Dypr2gWcVuqt3z6Uh31YD8Wm2V2ZCqWVBYEWhZNF9odk/logo.png", - "tags": ["social-token"], - "extensions": { - "discord": "https://discord.gg/n3VJpqftRU", - "serumV3Usdc": "9e63hJZ1HUNDeBwmzJy9VsRT4kzqJ92Xk24htAwjTCeQ", - "twitter": "https://twitter.com/soljav1", - "website": "https://www.soljav.xyz/" - } - }, - { - "chainId": 101, - "address": "J3ts1ZEyQeUAbUyYHjZR6sE93YQTrfBzho8UKWnEa1j", - "symbol": "ABION", - "name": "aBion", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/J3ts1ZEyQeUAbUyYHjZR6sE93YQTrfBzho8UKWnEa1j/logo.png", - "extensions": { - "website": "https://www.abion.org/" - } - }, - { - "chainId": 101, - "address": "EN1VhM7BmuqAuUDGDDnzXZdefaFpvNHFCAwjXzp6gRhJ", - "symbol": "BBS", - "name": "BONER", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EN1VhM7BmuqAuUDGDDnzXZdefaFpvNHFCAwjXzp6gRhJ/logo.png", - "tags": ["utility-token", "nft-token"], - "extensions": { - "twitter": "https://twitter.com/BareBonesNFT", - "website": "https://www.barebonesnft.com/" - } - }, - { - "chainId": 101, - "address": "CnGUfvi9FxiRPuaBXpYmaXEwBjj5X6kwNJB2Cba5TiQp", - "symbol": "SOLUP", - "name": "SOLUP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CnGUfvi9FxiRPuaBXpYmaXEwBjj5X6kwNJB2Cba5TiQp/logo.png", - "tags": ["SOLUP-TOKEN", "Sol-UP"], - "extensions": { - "assetContract": "https://solscan.io/token/CnGUfvi9FxiRPuaBXpYmaXEwBjj5X6kwNJB2Cba5TiQp", - "telegram": "https://t.me/solanavietnam", - "website": "https://solup.xyz" - } - }, - { - "chainId": 101, - "address": "95KN8q3qubEVjPf9trgyur2nHx8T5RCmztRbLuQ5E5i", - "symbol": "SMRT", - "name": "Solminter", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/95KN8q3qubEVjPf9trgyur2nHx8T5RCmztRbLuQ5E5i/logo.png", - "tags": ["utility-token"], - "extensions": { - "coingeckoId": "solminter", - "github": "https://github.com/solminter", - "medium": "https://solminter.medium.com", - "twitter": "https://twitter.com/solminter", - "website": "https://solminter.com" - } - }, - { - "chainId": 101, - "address": "2ZrwW5Ng1fbZKghWxnjyfTjYXLdSwJpU5EQrXus4ogsE", - "symbol": "TIX", - "name": "Tix Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2ZrwW5Ng1fbZKghWxnjyfTjYXLdSwJpU5EQrXus4ogsE/logo.png", - "extensions": { - "twitter": "https://twitter.com/TixToken", - "website": "https://tixtoken.io/" - } - }, - { - "chainId": 101, - "address": "3xiDaQKLGrnWEVGpxFT5Y2DCBF1KoKdUnm9DmWdFnk45", - "symbol": "PLGFT", - "name": "Plongeurs de Fontaine Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3xiDaQKLGrnWEVGpxFT5Y2DCBF1KoKdUnm9DmWdFnk45/logo.png", - "tags": ["esport"] - }, - { - "chainId": 101, - "address": "CKtm7ZMYdKmFSCGukzKjhsp4JFTFGk9uEMGF7XYEFKgK", - "symbol": "ALP", - "name": "CoinAlpha", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CKtm7ZMYdKmFSCGukzKjhsp4JFTFGk9uEMGF7XYEFKgK/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://coinalpha.app/" - } - }, - { - "chainId": 101, - "address": "Ce3PSQfkxT5ua4r2JqCoWYrMwKWC5hEzwsrT9Hb7mAz9", - "symbol": "DATE", - "name": "SolDate(DATE) Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Ce3PSQfkxT5ua4r2JqCoWYrMwKWC5hEzwsrT9Hb7mAz9/DATE.svg", - "tags": ["social-token", "dating-token", "metaverse"], - "extensions": { - "discord": "https://discord.gg/soldate", - "medium": "https://soldate.medium.com", - "telegram": "https://t.me/soldate_org", - "twitter": "https://twitter.com/SolDate_org", - "website": "https://soldate.org/" - } - }, - { - "chainId": 101, - "address": "SWANaZUGxF82KyVsbxeeNsMaVECtimze5VyCdywkvkH", - "symbol": "SWAN", - "name": "Swanlana", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SwanLana/logo/main/SWANLANA_PNG.png", - "tags": ["utility-token"], - "extensions": { - "coingeckoId": "swanlana", - "discord": "http://discord.gg/swanlanafinance", - "medium": "https://medium.com/@swanlana23", - "serumV3Usdc": "8zPVSrun5AnePjXWjC4EgMdBaLdHtkSUtYbFNobzQHRN", - "twitter": "https://twitter.com/swan_solana", - "website": "https://www.swanlana.com" - } - }, - { - "chainId": 101, - "address": "G7uYedVqFy97mzjygebnmmaMUVxWHFhNZotY6Zzsprvf", - "symbol": "CSTR", - "name": "CoreStarter", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/CoreStarter/token-logo/main/corestarter_logo.png", - "extensions": { - "github": "https://github.com/CoreStarter/", - "linkedin": "https://www.linkedin.com/company/core-starter", - "medium": "https://corestarter.medium.com", - "telegram": "https://t.me/corestarter_chat", - "twitter": "https://twitter.com/CoreStarter", - "website": "https://corestarter.com/" - } - }, - { - "chainId": 101, - "address": "DNhZkUaxHXYvpxZ7LNnHtss8sQgdAfd1ZYS1fB7LKWUZ", - "symbol": "apUSDT", - "name": "Wrapped USDT (Allbridge from Polygon)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BQcdHdAQW1hczDbBi9hiegXAR7A98Q9jx3X3iBBBDiq4/logo.png", - "tags": ["stablecoin"], - "extensions": { - "coingeckoId": "tether" - } - }, - { - "chainId": 101, - "address": "eqKJTf1Do4MDPyKisMYqVaUFpkEFAs3riGF3ceDH2Ca", - "symbol": "apUSDC", - "name": "Wrapped USDC (Allbridge from Polygon)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BXXkv6z8ykpG1yuvUDPgh732wzVHB69RnB9YgSYh3itW/logo.png", - "tags": ["stablecoin"], - "extensions": { - "coingeckoId": "usd-coin" - } - }, - { - "chainId": 101, - "address": "De2bU64vsXKU9jq4bCjeDxNRGPn8nr3euaTK8jBYmD3J", - "symbol": "renFIL", - "name": "renFIL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/De2bU64vsXKU9jq4bCjeDxNRGPn8nr3euaTK8jBYmD3J/logo.png", - "extensions": { - "coingeckoId": "renfil", - "website": "https://renproject.io/" - } - }, - { - "chainId": 101, - "address": "6STzg1taqgJsFY6Z4xAmQVSErZ6e6EsbsvkQ6YJ3sXmj", - "symbol": "SONC", - "name": "Sonic", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6STzg1taqgJsFY6Z4xAmQVSErZ6e6EsbsvkQ6YJ3sXmj/logo.png", - "extensions": { - "twitter": "https://twitter.com/JaySpark0x", - "website": "https://www.sparkborsa.com/" - } - }, - { - "chainId": 101, - "address": "7j7H7sgsnNDeCngAPjpaCN4aaaru4HS7NAFYSEUyzJ3k", - "symbol": "SOLR", - "name": "SolRazr", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7j7H7sgsnNDeCngAPjpaCN4aaaru4HS7NAFYSEUyzJ3k/SOLR.png", - "extensions": { - "discord": "https://discord.gg/HXa3qAYe", - "github": "https://github.com/solrazr-app/", - "medium": "https://medium.com/@SolRazr_App", - "telegram": "https://t.me/solrazr_app", - "twitter": "https://twitter.com/Solrazr_App", - "website": "https://solrazr.com/" - } - }, - { - "chainId": 101, - "address": "5xgRqfw4DqzjrriXEWduzo8iW8Uj1KzDsPt1pSLVQVJh", - "symbol": "RNFTz", - "name": "RNFTz", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5xgRqfw4DqzjrriXEWduzo8iW8Uj1KzDsPt1pSLVQVJh/logo.png", - "tags": ["nft"], - "extensions": { - "twitter": "https://twitter.com/RnftzS", - "website": "https://rnftz.com" - } - }, - { - "chainId": 101, - "address": "8kFRCmQTKzvtVTVEVizjP8x3WamJpuQdZaPSGeqRJJnW", - "symbol": "SKEM-USDC", - "name": "Raydium LP Token (SKEM-USDC)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8kFRCmQTKzvtVTVEVizjP8x3WamJpuQdZaPSGeqRJJnW/logo.svg", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io" - } - }, - { - "chainId": 101, - "address": "HKLBSZbkfeB8LoaLLrK7CDepPHLWQEoj1jbunT1T2wYg", - "symbol": "SODA-USDC", - "name": "Raydium LP Token (SODA-USDC)", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HKLBSZbkfeB8LoaLLrK7CDepPHLWQEoj1jbunT1T2wYg/logo.svg", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io" - } - }, - { - "chainId": 101, - "address": "BK2YNwsExxnjSUgdAzdvLV2FrthcNGGWTxDBvfBULCjG", - "symbol": "AUSS-USDC", - "name": "Raydium LP Token (AUSS-USDC)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BK2YNwsExxnjSUgdAzdvLV2FrthcNGGWTxDBvfBULCjG/logo.svg", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io" - } - }, - { - "chainId": 101, - "address": "BTszujAA5kJJT7YCWVsAXwk4eJeuycithuTeAksQC1RC", - "symbol": "KLB-USDC", - "name": "Raydium LP Token (KLB-USDC)", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BTszujAA5kJJT7YCWVsAXwk4eJeuycithuTeAksQC1RC/logo.svg", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io" - } - }, - { - "chainId": 101, - "address": "DqRNwrvGUffB1j9tEYHcpw1DLMoc2QfwZ25nkBHkvRmr", - "symbol": "SUPL", - "name": "Suplar", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DqRNwrvGUffB1j9tEYHcpw1DLMoc2QfwZ25nkBHkvRmr/token.png", - "extensions": { - "telegram": "https://t.me/suplar", - "twitter": "https://twitter.com/suplarcom", - "website": "https://suplar.com" - } - }, - { - "chainId": 101, - "address": "4KVuGB1iNhYqR99Hykv1ZLdHvx41zpBqqPFtHucYpQja", - "symbol": "XEN", - "name": "Xenren", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4KVuGB1iNhYqR99Hykv1ZLdHvx41zpBqqPFtHucYpQja/logo.png", - "extensions": { - "website": "https://xenren.co" - } - }, - { - "chainId": 101, - "address": "7b9rgZhiZHieCoPwxWd7ihbjtQ7Ljjy4McxvcA2TTgcK", - "symbol": "PERA", - "name": "Prithera token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7b9rgZhiZHieCoPwxWd7ihbjtQ7Ljjy4McxvcA2TTgcK/logo.png" - }, - { - "chainId": 101, - "address": "8SvvzDMu5jqcBhfdYZM1zDjDG5YGYrsNmGsPzTm4bFYU", - "symbol": "QIA", - "name": "Qia Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8SvvzDMu5jqcBhfdYZM1zDjDG5YGYrsNmGsPzTm4bFYU/logo.png" - }, - { - "chainId": 101, - "address": "3BUWWi7hb5dpnNdvi7s3hpLuDtzqEga6c2UT6c1tqKKP", - "symbol": "COD", - "name": "CODEMY", - "decimals": 9, - "logoURI": "http://codemyedu.com/resources/img/logo.png", - "tags": ["CODEMY", "COD"], - "extensions": { - "website": "http://codemyedu.com" - } - }, - { - "chainId": 101, - "address": "HGy1LwAfsmC61hvAtadW7FaPTzMG8iJQEJBVqJTjgd7u", - "symbol": "NTE", - "name": "Nocte", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HGy1LwAfsmC61hvAtadW7FaPTzMG8iJQEJBVqJTjgd7u/logo.png", - "extensions": { - "website": "https://nocte.app/" - } - }, - { - "chainId": 101, - "address": "H6nF5DxF9ERkNrfs2QgMbDvVAH7YmzHM2Q1ysL7Qpgt", - "symbol": "FE", - "name": "FUTURE ECOSYSTEM", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/h1rdr3v2/logo/main/felogo.jpeg", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "AdARF36hBezSbqn7JAkGJtgGppMYdjtBjjXwRwBEp7JT", - "symbol": "CAEN", - "name": "Camel Aggregate Ecological Network", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solanasail/token-list/main/assets/mainnet/AdARF36hBezSbqn7JAkGJtgGppMYdjtBjjXwRwBEp7JT/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://caen.io" - } - }, - { - "chainId": 101, - "address": "25Vu6457o2gdZRGVVt5K8NbAvaP3esYaQNHbNDitVtw1", - "symbol": "XVC", - "name": "Xverse Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/25Vu6457o2gdZRGVVt5K8NbAvaP3esYaQNHbNDitVtw1/logo.png", - "extensions": { - "website": "https://xverse.ai/" - } - }, - { - "chainId": 101, - "address": "5CZn24oQp8rZgdJvw3Ud8Mi5yTKBccMi1efogxxqBuK8", - "symbol": "CUTIE", - "name": "Cutie Patootie", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5CZn24oQp8rZgdJvw3Ud8Mi5yTKBccMi1efogxxqBuK8/logo.png", - "tags": ["MEME"], - "extensions": { - "discord": "https://discord.gg/2d3FvQUR", - "github": "https://github.com/Cutie-Patootie-Token", - "telegram": "https://t.me/joinchat/XFk1Boii0GxiNDc0", - "twitter": "https://twitter.com/CutiePatotieSLN", - "website": "https://www.cutiepatootie.tech" - } - }, - { - "chainId": 101, - "address": "Hp5CJjw9YxJeo8mAgkyUomzKGPUxEwyo6gGt6hj56aTw", - "symbol": "SDM", - "name": "Seldom", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Hp5CJjw9YxJeo8mAgkyUomzKGPUxEwyo6gGt6hj56aTw/logo.png" - }, - { - "chainId": 101, - "address": "CLLoeCMyKGH9yd6EVBUWFAbAfwq5VBFq4zidxZWKRaho", - "symbol": "AUTM", - "name": "Autumn", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CLLoeCMyKGH9yd6EVBUWFAbAfwq5VBFq4zidxZWKRaho/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GZreQfnp3B1bmBZfxzJgShWbJgt6nyp13iyeHBB6Xh1n", - "symbol": "LETTA", - "name": "Soletta", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj/logo.png" - }, - { - "chainId": 101, - "address": "5U9QqCPhqXAJcEv9uyzFJd5zhN93vuPk1aNNkXnUfPnt", - "symbol": "SPWN", - "name": "Bitspawn Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5U9QqCPhqXAJcEv9uyzFJd5zhN93vuPk1aNNkXnUfPnt/logo.png", - "tags": ["utility-token"], - "extensions": { - "coingeckoId": "bitspawn", - "discord": "https://discord.gg/EAtfCq9", - "medium": "https://bitspawnprotocol.medium.com", - "telegram": "https://t.me/bitspawnprotocol", - "twitter": "https://twitter.com/bitspawngg", - "website": "https://bitspawn.io" - } - }, - { - "chainId": 101, - "address": "SNSNkV9zfG5ZKWQs6x4hxvBRV6s8SqMfSGCtECDvdMd", - "symbol": "SNS", - "name": "SynesisOne", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/Synesis-One/spl-token/main/icon.png", - "tags": ["utility-token"], - "extensions": { - "coingeckoId": "synesis-one", - "twitter": "https://twitter.com/synesis_one", - "website": "https://www.synesis.one/" - } - }, - { - "chainId": 101, - "address": "6Wcs5FH471q1gqJHyRygm7DpNiHP1oYCKHX5zPEBD8ZZ", - "symbol": "MILS", - "name": "MillionSols", - "decimals": 9, - "logoURI": "https://arweave.net/uDmRPKqd7O9rXkv9y6cdc2sdCbVab5cgA62PWQYUYwI", - "extensions": { - "twitter": "https://twitter.com/MillionSols", - "website": "https://millionsols.com" - } - }, - { - "chainId": 101, - "address": "GthwuoDnGTRgnvaZWixuqU5X3Nt18s9AzqNbGPxTonfK", - "symbol": "JMKA", - "name": "Jacob Makarsky Social Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GthwuoDnGTRgnvaZWixuqU5X3Nt18s9AzqNbGPxTonfK/logo.png", - "tags": ["social-token", "jamaka"], - "extensions": { - "website": "https://www.makarsky.dev/" - } - }, - { - "chainId": 101, - "address": "EaD8CViuq8RXPqAhZsxZudTj6fFMy6ktgHD42J34P6PD", - "symbol": "KISM", - "name": "KISAMA", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Kisamacrypto/SPL-Logo/main/kisama-crypto-coin-520x520_edit.png", - "tags": ["social-token", "kisama", "Trading"], - "extensions": { - "discord": "https://discord.gg/6xNDyc9", - "website": "http://kisamacrypto.com" - } - }, - { - "chainId": 101, - "address": "6w5GEARUppTyeQee2grCUYjXi933Yswz5ZjYKt5nicY2", - "symbol": "SOTY", - "name": "Sol Infinity", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/kpvy2002/solinfinity/SOLINFINITY%20LOGO.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/z9st3dHRPf", - "telegram": "https://t.me/Solinfinity_official", - "twitter": "https://twitter.com/Solanainfinity" - } - }, - { - "chainId": 101, - "address": "5y1YcGVPFy8bEiCJi79kegF9igahmvDe5UrqswFvnpMJ", - "symbol": "DSOL", - "name": "DecentSol", - "decimals": 4, - "logoURI": "https://gateway.pinata.cloud/ipfs/QmfV1LNrqefadJQ7PzMvrTnio9GzsFLcbwRXAgVQad3ykt/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/mkH52yU9xQ", - "medium": "https://decentsol.medium.com", - "twitter": "https://twitter.com/decentsol", - "website": "https://home.decentsol/" - } - }, - { - "chainId": 101, - "address": "6foyeENL9GhqZEqPeaRK9YtP8HnFfej1JBwdn5rcsPDi", - "symbol": "iM", - "name": "iMentusCoin", - "decimals": 0, - "logoURI": "https://imentus.com/wp-content/uploads/2020/10/black_imentus_logo.png", - "tags": ["dev-token"], - "extensions": { - "website": "https://www.imentus.com" - } - }, - { - "chainId": 101, - "address": "5oVNBeEEQvYi1cX3ir8Dx5n1P7pdxydbGF2X4TxVusJm", - "symbol": "scnSOL", - "name": "Socean staked SOL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5oVNBeEEQvYi1cX3ir8Dx5n1P7pdxydbGF2X4TxVusJm/logo.png", - "tags": ["stake-pool"], - "extensions": { - "coingeckoId": "socean-staked-sol", - "discord": "https://discord.gg/k8ZcW27bq9", - "medium": "https://medium.com/@soceanfinance", - "serumV3Usdc": "D52sefGCWho2nd5UGxWd7wCftAzeNEMNYZkdEPGEdQTb", - "twitter": "https://twitter.com/soceanfinance", - "website": "https://socean.fi/" - } - }, - { - "chainId": 103, - "address": "FsrinjAhYaBKQieHhaJNGnepMS3RFHZJVjb1i26JhMdp", - "symbol": "sBucks", - "name": "SolBucks", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FxjbQMfvQYMtZZK7WGEJwWfsDcdMuuaee8uPxDFFShWh/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "GHhDU9Y7HM37v6cQyaie1A3aZdfpCDp6ScJ5zZn2c3uk", - "symbol": "SOL-pSOL", - "name": "Mercurial LP Token (SOL-pSOL)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GHhDU9Y7HM37v6cQyaie1A3aZdfpCDp6ScJ5zZn2c3uk/logo.svg", - "tags": ["lp-token"], - "extensions": { - "website": "https://www.mercurial.finance/" - } - }, - { - "chainId": 101, - "address": "C64WgwmfCyuFeV1k8MP1gRMP6NPA1ve7QLivvCrVaJn", - "symbol": "KRI", - "name": "Kauri Token", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/Osawejustice/Kauri-Token/Kauri_logo32x32.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/jeN7dhes9V", - "instagram": "https://www.instagram.com/_museinc/", - "telegram": "https://t.me/kauritoken", - "twitter": "https://twitter.com/_museinc", - "website": "https://www.museinc.studio" - } - }, - { - "chainId": 101, - "address": "H2EJUxt2KSPk7BWGZRfLMqh56wCmWygDJVTvjTJFHeym", - "symbol": "ROLL", - "name": "Let'sroll DAO", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/H2EJUxt2KSPk7BWGZRfLMqh56wCmWygDJVTvjTJFHeym/logo.png", - "extensions": { - "website": "ipfs://letsroll.dao" - } - }, - { - "chainId": 101, - "address": "6SuBPLC3vMTgfET5uoEhNoi5voYeBujVm7LS9kM3KX9s", - "symbol": "FINN", - "name": "FINNGRAM TOKEN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6SuBPLC3vMTgfET5uoEhNoi5voYeBujVm7LS9kM3KX9s/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://www.finngram.com" - } - }, - { - "chainId": 101, - "address": "BZrca9YNDtnshtsiD9GTvbMAXzZrSE6drxqNfxp5mpdc", - "symbol": "KAKI", - "name": "KAKI Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BZrca9YNDtnshtsiD9GTvbMAXzZrSE6drxqNfxp5mpdc/logo.svg", - "tags": ["dev-token"], - "extensions": { - "website": "https://shunkakinoki.com" - } - }, - { - "chainId": 101, - "address": "6PwnEP2o5AnM29GDs2EiwfkQNuMoPiWokrLufSkJcVJR", - "symbol": "Hose", - "name": "Hose Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6PwnEP2o5AnM29GDs2EiwfkQNuMoPiWokrLufSkJcVJR/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "http://hose-coin.com" - } - }, - { - "chainId": 101, - "address": "4QV4wzDdy7S1EV6y2r9DkmaDsHeoKz6HUvFLVtAsu6dV", - "symbol": "AGTE", - "name": "Agronomist coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4QV4wzDdy7S1EV6y2r9DkmaDsHeoKz6HUvFLVtAsu6dV/logo.png", - "tags": ["utility-token"], - "extensions": { - "coingeckoId": "agronomist", - "discord": "https://discord.gg/tR45QftB6K", - "medium": "https://medium.com/@agronomist.tech", - "serumV3Usdc": "Ci3wLTY3X9iuMxDGErSNwfWKcrhwPMugk8yWTGBvEzF", - "twitter": "https://twitter.com/AgronomistTech", - "website": "https://agronomist.tech" - } - }, - { - "chainId": 101, - "address": "5KB7WK1sB7WpoFXAiKoyhWCh44jHfTMtXDuvaSRQ4TR1", - "symbol": "GIG", - "name": "DecentGig Governance Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5KB7WK1sB7WpoFXAiKoyhWCh44jHfTMtXDuvaSRQ4TR1/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/wKZhV5NtGA", - "website": "https://github.com/solauto/decent-gig" - } - }, - { - "chainId": 101, - "address": "CJR5HtmXzpCD8Ro28zyZyLjz1wtrCsu7bEwC4f8ZjRCD", - "symbol": "GEKZ", - "name": "Gekz Arena", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CJR5HtmXzpCD8Ro28zyZyLjz1wtrCsu7bEwC4f8ZjRCD/logo.png", - "extensions": { - "discord": "https://discord.gg/Mh29ZdQCGC", - "twitter": "https://twitter.com/gekzarena", - "website": "https://www.gekzarena.com/" - } - }, - { - "chainId": 101, - "address": "84QX2yE96Qmb984wGUcHLPT54a5bwjqo8zokCWPWez6d", - "symbol": "INNO", - "name": "INNOVATEK", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/assets/mainnet/84QX2yE96Qmb984wGUcHLPT54a5bwjqo8zokCWPWez6d/logo.png", - "extensions": { - "website": "https://www.innovatek.us" - } - }, - { - "chainId": 101, - "address": "9JTriKH36nk7kQvK5V5TiVnuGQTqAJHRkX4kunGvZXfP", - "symbol": "WHISP", - "name": "Whispell", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9JTriKH36nk7kQvK5V5TiVnuGQTqAJHRkX4kunGvZXfP/logo.png", - "extensions": { - "website": "https://www.linkedin.com/in/williamwhispell/" - } - }, - { - "chainId": 101, - "address": "E28mvmaJa9LHLpJWiWsLd4eERL7w9j6uGAUwBWpH5UFd", - "symbol": "SBULL", - "name": "SolBull", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/kasshen/SolBull/SolBull_Logo.png", - "tags": ["meme", "bullish"] - }, - { - "chainId": 101, - "address": "6JxHWpKwZjcnxjE9DZtaCEaoVNgpJzuBmrGQ6hmJ7DuM", - "symbol": "PEPE", - "name": "PEPE Coin", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/matthew-github-123/pepetoken/frog.png", - "extensions": { - "twitter": "https://twitter.com/Pepe_Solana_SPL" - } - }, - { - "chainId": 101, - "address": "72FzkmpjqXQunY1UvrYDYhCj3mtPYExbWq7wFBSuxmHA", - "symbol": "BOIT", - "name": "BOIT Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/72FzkmpjqXQunY1UvrYDYhCj3mtPYExbWq7wFBSuxmHA/logo.png", - "extensions": { - "website": "https://boit.club" - } - }, - { - "chainId": 101, - "address": "4MawquNMLDQsyNmQwdwqa34YtWFiqSezNgFEbUvZgskM", - "symbol": "USBL", - "name": "Balanced Dollar", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4MawquNMLDQsyNmQwdwqa34YtWFiqSezNgFEbUvZgskM/logo.png", - "extensions": { - "website": "https://softbalanced.com" - } - }, - { - "chainId": 101, - "address": "FTD9EisrsMt5TW5wSTMqyXLh2o7xTb6KNuTiXgHhw8Q8", - "symbol": "PLAY", - "name": "POLYPLAY", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/assets/FTD9EisrsMt5TW5wSTMqyXLh2o7xTb6KNuTiXgHhw8Q8/logo.png", - "extensions": { - "coingeckoId": "polyplay", - "discord": "https://discord.gg/TAgndUz2Fc", - "twitter": "https://twitter.com/polyplaycoin", - "website": "https://polyplay.net/" - } - }, - { - "chainId": 101, - "address": "CH74tuRLTYcxG7qNJCsV9rghfLXJCQJbsu7i52a8F1Gn", - "symbol": "SOLX", - "name": "Soldex", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CH74tuRLTYcxG7qNJCsV9rghfLXJCQJbsu7i52a8F1Gn/logo.png", - "extensions": { - "linkedin": "https://www.linkedin.com/company/soldex", - "medium": "https://soldex.medium.com/", - "serumV3Usdc": "97tCGtxWywJXkudCtderXZoQpTWXyWDQoLq13dqexScH", - "twitter": "https://twitter.com/soldexai", - "website": "https://soldex.ai/" - } - }, - { - "chainId": 101, - "address": "J5gLhk6mmQ4PSoir1Ufh8JY2ytEHA93YupzYiTFVCgcL", - "symbol": "FAROUT", - "name": "Far-Out Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/J5gLhk6mmQ4PSoir1Ufh8JY2ytEHA93YupzYiTFVCgcL/logo.png", - "extensions": { - "website": "https://gitlab.com/far-out/far-out-token" - } - }, - { - "chainId": 101, - "address": "Amig8TisuLpzun8XyGfC5HJHHGUQEscjLgoTWsCCKihg", - "symbol": "tuUSDC", - "name": "tuUSDC", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/sol-farm/token-logos/main/tuUSDC.png", - "tags": ["tulip-protocol", "lending", "collateral-tokens"], - "extensions": { - "twitter": "https://twitter.com/TulipProtocol", - "waterfallbot": "https://bit.ly/TULIPwaterfall", - "website": "https://tulip.garden" - } - }, - { - "chainId": 101, - "address": "Am2kxXzFH84biqbswGWq2zieWqsX2ANnFDyiZr9Fh7zc", - "symbol": "tuTULIP", - "name": "tuTULIP", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/sol-farm/token-logos/main/tuTULIP.png", - "tags": ["tulip-protocol", "lending", "collateral-tokens"], - "extensions": { - "twitter": "https://twitter.com/TulipProtocol", - "waterfallbot": "https://bit.ly/TULIPwaterfall", - "website": "https://tulip.garden" - } - }, - { - "chainId": 101, - "address": "H4Q3hDbuMUw8Bu72Ph8oV2xMQ7BFNbekpfQZKS2xF7jW", - "symbol": "tuSOL", - "name": "tuSOL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/sol-farm/token-logos/main/tuSOL.png", - "tags": ["tulip-protocol", "lending", "collateral-tokens"], - "extensions": { - "twitter": "https://twitter.com/TulipProtocol", - "waterfallbot": "https://bit.ly/TULIPwaterfall", - "website": "https://tulip.garden" - } - }, - { - "chainId": 101, - "address": "2yQJdxJy4tGeeXK2u8Lwdy9oY6Ks5shVH9gYtRH9zdDw", - "symbol": "tuSNY", - "name": "tuSNY", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/sol-farm/token-logos/main/tuSNY.png", - "tags": ["tulip-protocol", "lending", "collateral-tokens"], - "extensions": { - "twitter": "https://twitter.com/TulipProtocol", - "waterfallbot": "https://bit.ly/TULIPwaterfall", - "website": "https://tulip.garden" - } - }, - { - "chainId": 101, - "address": "GtFtWCcLYtWQT8NLRwEfUqc9sgVnq4SbuSnMCpwcutNk", - "symbol": "tuSLRS", - "name": "tuSLRS", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/sol-farm/token-logos/main/tuSLRS.png", - "tags": ["tulip-protocol", "lending", "collateral-tokens"], - "extensions": { - "twitter": "https://twitter.com/TulipProtocol", - "waterfallbot": "https://bit.ly/TULIPwaterfall", - "website": "https://tulip.garden" - } - }, - { - "chainId": 101, - "address": "8Lg7TowFuMQoGiTsLE6qV9x3czRgDmVy8f8Vv8KS4uW", - "symbol": "tuRAY", - "name": "tuRAY", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/sol-farm/token-logos/main/tuRAY.png", - "tags": ["tulip-protocol", "lending", "collateral-tokens"], - "extensions": { - "twitter": "https://twitter.com/TulipProtocol", - "waterfallbot": "https://bit.ly/TULIPwaterfall", - "website": "https://tulip.garden" - } - }, - { - "chainId": 101, - "address": "658FZo9B4HgKxsKsM7cUHN7jfNFgC7YftusWWYWc4piD", - "symbol": "tuPOLIS", - "name": "tuPOLIS", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/sol-farm/token-logos/main/tuPOLIS.png", - "tags": ["tulip-protocol", "lending", "collateral-tokens"], - "extensions": { - "twitter": "https://twitter.com/TulipProtocol", - "waterfallbot": "https://bit.ly/TULIPwaterfall", - "website": "https://tulip.garden" - } - }, - { - "chainId": 101, - "address": "6fGTc455JK3bsiSrvyLkEymQasPDXdrw2jJR16UkPnT5", - "symbol": "tuMEDIA", - "name": "tuMEDIA", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/sol-farm/token-logos/main/tuMEDIA.png", - "tags": ["tulip-protocol", "lending", "collateral-tokens"], - "extensions": { - "twitter": "https://twitter.com/TulipProtocol", - "waterfallbot": "https://bit.ly/TULIPwaterfall", - "website": "https://tulip.garden" - } - }, - { - "chainId": 101, - "address": "DRu91PV94sb6kX6HwMGnGM8TuHrjycS4FmJNRWEgyw6n", - "symbol": "tuLIKE", - "name": "tuLIKE", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/sol-farm/token-logos/main/tuLIKE.png", - "tags": ["tulip-protocol", "lending", "collateral-tokens"], - "extensions": { - "twitter": "https://twitter.com/TulipProtocol", - "waterfallbot": "https://bit.ly/TULIPwaterfall", - "website": "https://tulip.garden" - } - }, - { - "chainId": 101, - "address": "C1gwRSpKFu4Vjrg9MhNfRjg65SV4CNLsb3C6d7kWFEyV", - "symbol": "tuETH", - "name": "tuETH", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/sol-farm/token-logos/main/tuETH.png", - "tags": ["tulip-protocol", "lending", "collateral-tokens"], - "extensions": { - "twitter": "https://twitter.com/TulipProtocol", - "waterfallbot": "https://bit.ly/TULIPwaterfall", - "website": "https://tulip.garden" - } - }, - { - "chainId": 101, - "address": "8cm7UrBiDQ4C1ntQSCZfHSWKUizdW31ddTQGNY6Lym3B", - "symbol": "tuCOPE", - "name": "tuCOPE", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/sol-farm/token-logos/main/tuCOPE.png", - "tags": ["tulip-protocol", "lending", "collateral-tokens"], - "extensions": { - "twitter": "https://twitter.com/TulipProtocol", - "waterfallbot": "https://bit.ly/TULIPwaterfall", - "website": "https://tulip.garden" - } - }, - { - "chainId": 101, - "address": "9eGNc4BZCAgpTSEjbu7ACCLjpnZh1WSdts3y4nMik4e7", - "symbol": "tuATLAS", - "name": "tuATLAS", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/sol-farm/token-logos/main/tuATLAS.png", - "tags": ["tulip-protocol", "lending", "collateral-tokens"], - "extensions": { - "twitter": "https://twitter.com/TulipProtocol", - "waterfallbot": "https://bit.ly/TULIPwaterfall", - "website": "https://tulip.garden" - } - }, - { - "chainId": 101, - "address": "FJtaAZd6tXNCFGTq7ifRHt9AWoVdads6gWNc4SXCPw1k", - "symbol": "ALEPH", - "name": "tuALEPH", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/sol-farm/token-logos/main/tuALEPH.png", - "tags": ["tulip-protocol", "lending", "collateral-tokens"], - "extensions": { - "twitter": "https://twitter.com/TulipProtocol", - "waterfallbot": "https://bit.ly/TULIPwaterfall", - "website": "https://tulip.garden" - } - }, - { - "chainId": 101, - "address": "a11bdAAuV8iB2fu7X6AxAvDTo1QZ8FXB3kk5eecdasp", - "symbol": "ABR", - "name": "Allbridge", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/allbridge-io/media/main/token.svg", - "extensions": { - "coingeckoId": "allbridge", - "medium": "https://allbridge.medium.com/", - "telegram": "https://t.me/allbridge_announcements", - "twitter": "https://twitter.com/Allbridge_io", - "website": "https://allbridge.io/" - } - }, - { - "chainId": 101, - "address": "6nuaX3ogrr2CaoAPjtaKHAoBNWok32BMcRozuf32s2QF", - "symbol": "abBUSD", - "name": "Wrapped BUSD (Allbridge from BSC)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AJ1W9A9N9dEMdVyoDiam2rV44gnBm2csrPDP7xqcapgX/logo.png", - "tags": ["stablecoin"], - "extensions": { - "coingeckoId": "binance-usd" - } - }, - { - "chainId": 101, - "address": "AaAEw2VCw1XzgvKB8Rj2DyK2ZVau9fbt2bE8hZFWsMyE", - "symbol": "aeWETH", - "name": "Wrapped ETH (Allbridge from Ethereum)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FeGn77dhg1KXRRFeSwwMiykZnZPw5JXW6naf2aQgZDQf/logo.png", - "tags": ["stablecoin"], - "extensions": { - "coingeckoId": "weth" - } - }, - { - "chainId": 101, - "address": "Bn113WT6rbdgwrm12UJtnmNqGqZjY4it2WoUQuQopFVn", - "symbol": "aeUSDT", - "name": "Wrapped USDT (Allbridge from Ethereum)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB/logo.svg", - "tags": ["stablecoin"], - "extensions": { - "coingeckoId": "tether" - } - }, - { - "chainId": 101, - "address": "DdFPRnccQqLD4zCHrBqdY95D6hvw6PLWp9DEXj1fLCL9", - "symbol": "aeUSDC", - "name": "Wrapped USDC (Allbridge from Ethereum)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v/logo.png", - "tags": ["stablecoin"], - "extensions": { - "coingeckoId": "usd-coin" - } - }, - { - "chainId": 101, - "address": "9w6LpS7RU1DKftiwH3NgShtXbkMM1ke9iNU4g3MBXSUs", - "symbol": "aeDAI", - "name": "Wrapped DAI (Allbridge from Ethereum)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FYpdBuyAHSbdaAyD1sKkxyLWbAP8uUW9h6uvdhK74ij1/logo.png", - "tags": ["stablecoin"], - "extensions": { - "coingeckoId": "multi-collateral-dai" - } - }, - { - "chainId": 101, - "address": "EwxNF8g9UfmsJVcZFTpL9Hx5MCkoQFoJi6XNWzKf1j8e", - "symbol": "acUSD", - "name": "Wrapped CUSD (Allbridge from Celo)", - "decimals": 9, - "logoURI": "https://s2.coinmarketcap.com/static/img/coins/64x64/7236.png", - "tags": ["stablecoin"], - "extensions": { - "coingeckoId": "celo-dollar" - } - }, - { - "chainId": 101, - "address": "5h6ssFpeDeRbzsEHDbTQNH7nVGgsKrZydxdSTnLm6QdV", - "symbol": "cSOL", - "name": "Solend SOL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5h6ssFpeDeRbzsEHDbTQNH7nVGgsKrZydxdSTnLm6QdV/logo.png", - "tags": ["solend", "lending", "collateral-tokens"], - "extensions": { - "website": "https://solend.fi" - } - }, - { - "chainId": 101, - "address": "993dVFL2uXWYeoXuEBFXR4BijeXdTv4s6BzsCjJZuwqk", - "symbol": "cUSDC", - "name": "Solend USDC", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/993dVFL2uXWYeoXuEBFXR4BijeXdTv4s6BzsCjJZuwqk/logo.png", - "tags": ["solend", "lending", "collateral-tokens"], - "extensions": { - "website": "https://solend.fi" - } - }, - { - "chainId": 101, - "address": "CPDiKagfozERtJ33p7HHhEfJERjvfk1VAjMXAFLrvrKP", - "symbol": "cETH", - "name": "Solend ETH", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CPDiKagfozERtJ33p7HHhEfJERjvfk1VAjMXAFLrvrKP/logo.png", - "tags": ["solend", "lending", "collateral-tokens"], - "extensions": { - "website": "https://solend.fi" - } - }, - { - "chainId": 101, - "address": "AppJPZka33cu4DyUenFe9Dc1ZmZ3oQju6mBn9k37bNAa", - "symbol": "csoETH", - "name": "Solend soETH", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AppJPZka33cu4DyUenFe9Dc1ZmZ3oQju6mBn9k37bNAa/logo.png", - "tags": ["solend", "lending", "collateral-tokens"], - "extensions": { - "website": "https://solend.fi" - } - }, - { - "chainId": 101, - "address": "Gqu3TFmJXfnfSX84kqbZ5u9JjSBVoesaHjfTsaPjRSnZ", - "symbol": "cBTC", - "name": "Solend BTC", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Gqu3TFmJXfnfSX84kqbZ5u9JjSBVoesaHjfTsaPjRSnZ/logo.png", - "tags": ["solend", "lending", "collateral-tokens"], - "extensions": { - "website": "https://solend.fi" - } - }, - { - "chainId": 101, - "address": "4CxGuD2NMr6zM8f18gr6kRhgd748pnmkAhkY1YJtkup1", - "symbol": "cSRM", - "name": "Solend SRM", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4CxGuD2NMr6zM8f18gr6kRhgd748pnmkAhkY1YJtkup1/logo.png", - "tags": ["solend", "lending", "collateral-tokens"], - "extensions": { - "website": "https://solend.fi" - } - }, - { - "chainId": 101, - "address": "BTsbZDV7aCMRJ3VNy9ygV4Q2UeEo9GpR8D6VvmMZzNr8", - "symbol": "cUSDT", - "name": "Solend USDT", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BTsbZDV7aCMRJ3VNy9ygV4Q2UeEo9GpR8D6VvmMZzNr8/logo.png", - "tags": ["solend", "lending", "collateral-tokens"], - "extensions": { - "website": "https://solend.fi" - } - }, - { - "chainId": 101, - "address": "A38TjtcYrfutXT6nfRxhqwoGiXyzwJsGPmekoZYYmfgP", - "symbol": "csoFTT", - "name": "Solend soFTT", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/A38TjtcYrfutXT6nfRxhqwoGiXyzwJsGPmekoZYYmfgP/logo.png", - "tags": ["solend", "lending", "collateral-tokens"], - "extensions": { - "website": "https://solend.fi" - } - }, - { - "chainId": 101, - "address": "8bDyV3N7ctLKoaSVqUoEwUzw6msS2F65yyNPgAVUisKm", - "symbol": "cFTT", - "name": "Solend FTT", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8bDyV3N7ctLKoaSVqUoEwUzw6msS2F65yyNPgAVUisKm/logo.png", - "tags": ["solend", "lending", "collateral-tokens"], - "extensions": { - "website": "https://solend.fi" - } - }, - { - "chainId": 101, - "address": "2d95ZC8L5XP6xCnaKx8D5U5eX6rKbboBBAwuBLxaFmmJ", - "symbol": "cRAY", - "name": "Solend RAY", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2d95ZC8L5XP6xCnaKx8D5U5eX6rKbboBBAwuBLxaFmmJ/logo.png", - "tags": ["solend", "lending", "collateral-tokens"], - "extensions": { - "website": "https://solend.fi" - } - }, - { - "chainId": 101, - "address": "Bpm2aBL57uqVhgxutfRVrbtnjDpZLV8PZrRrytV1LgeT", - "symbol": "cSBR", - "name": "Solend SBR", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Bpm2aBL57uqVhgxutfRVrbtnjDpZLV8PZrRrytV1LgeT/logo.png", - "tags": ["solend", "lending", "collateral-tokens"], - "extensions": { - "website": "https://solend.fi" - } - }, - { - "chainId": 101, - "address": "BsWLxf6hRJnyytKR52kKBiz7qU7BB3SH77mrBxNnYU1G", - "symbol": "cMER", - "name": "Solend MER", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BsWLxf6hRJnyytKR52kKBiz7qU7BB3SH77mrBxNnYU1G/logo.png", - "tags": ["solend", "lending", "collateral-tokens"], - "extensions": { - "website": "https://solend.fi" - } - }, - { - "chainId": 101, - "address": "5PHgMyZpEUCTeXQdb2ARm2KMZNu4rxzLXuhKwXtr8Xzc", - "symbol": "STVA-USDC", - "name": "Raydium LP Token (STVA-USDC)", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5PHgMyZpEUCTeXQdb2ARm2KMZNu4rxzLXuhKwXtr8Xzc/logo.svg", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io" - } - }, - { - "chainId": 101, - "address": "DxYAghKE5sCNFk5BDD8xzgxgdvRmoCzdYKawy7SfyZXq", - "symbol": "PIGS", - "name": "Diamond Pigs", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DxYAghKE5sCNFk5BDD8xzgxgdvRmoCzdYKawy7SfyZXq/logo.png", - "tags": ["IDO", "IDX", "utility-token"], - "extensions": { - "website": "https://diamondpigs.com/" - } - }, - { - "chainId": 101, - "address": "HZRCwxP2Vq9PCpPXooayhJ2bxTpo5xfpQrwB1svh332p", - "symbol": "LDO", - "name": "Lido DAO Token (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HZRCwxP2Vq9PCpPXooayhJ2bxTpo5xfpQrwB1svh332p/logo.png", - "tags": ["wrapped", "ethereum"], - "extensions": { - "address": "0x5a98fcbea516cf06857215779fd812ca3bef1b32", - "assetContract": "https://etherscan.io/address/0x5a98fcbea516cf06857215779fd812ca3bef1b32", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "lido-dao", - "twitter": "https://twitter.com/LidoFinance", - "website": "https://lido.fi/" - } - }, - { - "chainId": 101, - "address": "48cR9mPuj33XowR4BX5nWtn6zqNP2rWjEAKURb6AcvkC", - "symbol": "VLT", - "name": "Vault Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/assets/48cR9mPuj33XowR4BX5nWtn6zqNP2rWjEAKURb6AcvkC/logo.png", - "extensions": { - "website": "https://vaultnft.org/" - } - }, - { - "chainId": 101, - "address": "AKAwZaP91svXuYTe2gD5JVmUZteDFrT4G92rMtrF1Wb4", - "symbol": "WTTE", - "name": "WATTTON Exchange", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AKAwZaP91svXuYTe2gD5JVmUZteDFrT4G92rMtrF1Wb4/logo.png", - "extensions": { - "website": "https://wattton.org" - } - }, - { - "chainId": 101, - "address": "6GF5Gjptix8yCJeVjp6e8uYNAP5Y2Gnb1CqZ9ADEaLdu", - "symbol": "TOPS", - "name": "TOPSOL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6GF5Gjptix8yCJeVjp6e8uYNAP5Y2Gnb1CqZ9ADEaLdu/logo.png", - "tags": ["utility-token", "commodity-token"], - "extensions": { - "website": "https://topsol.finance" - } - }, - { - "chainId": 101, - "address": "Fh3As4AU6bSsj5HcFHFD1LigeXWdFCJicnaQ64h7RFn5", - "symbol": "IPC", - "name": "Imperial Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Fh3As4AU6bSsj5HcFHFD1LigeXWdFCJicnaQ64h7RFn5/logo.png", - "extensions": { - "telegram": "https://t.me/imperialcoinOfficial", - "twitter": "https://twitter.com/ImperialCoin_" - } - }, - { - "chainId": 101, - "address": "FG7x94jPcVbtt4pLXWhyr6sU3iWim8JJ2y215X5yowN5", - "symbol": "FIS", - "name": "StaFi Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FG7x94jPcVbtt4pLXWhyr6sU3iWim8JJ2y215X5yowN5/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.com/invite/jB77etn", - "medium": "https://stafi-protocol.medium.com", - "telegram": "https://t.me/stafi_protocol", - "twitter": "https://twitter.com/StaFi_Protocol", - "website": "https://stafi.io" - } - }, - { - "chainId": 101, - "address": "7hUdUTkJLwdcmt3jSEeqx4ep91sm1XwBxMDaJae6bD5D", - "symbol": "rSOL", - "name": "StaFi rSOL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7hUdUTkJLwdcmt3jSEeqx4ep91sm1XwBxMDaJae6bD5D/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.com/invite/jB77etn", - "medium": "https://stafi-protocol.medium.com", - "telegram": "https://t.me/stafi_protocol", - "twitter": "https://twitter.com/StaFi_Protocol", - "website": "https://stafi.io" - } - }, - { - "chainId": 101, - "address": "CPXDs2uhNwDKAt9V3vXvtspv9U7rsQ2fVr1qAUDmuCaq", - "symbol": "CPX", - "name": "Circlepod Protocol Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CPXDs2uhNwDKAt9V3vXvtspv9U7rsQ2fVr1qAUDmuCaq/logo.png", - "extensions": { - "discord": "https://discord.gg/4rTM9tRV8s", - "twitter": "https://twitter.com/circlepodP", - "website": "https://www.circlepod.app/" - } - }, - { - "chainId": 101, - "address": "GzN5Y1KoP6Yo6KYVYg7JfJ7Urs6oCrtLByHLeZ1ELAnx", - "symbol": "ODC", - "name": "OneDay Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GzN5Y1KoP6Yo6KYVYg7JfJ7Urs6oCrtLByHLeZ1ELAnx/logo.png", - "extensions": { - "website": "https://www.odccoin.com/", - "whitepaper": "https://fbcfc5cd-4898-40bf-9870-db311c0095f0.filesusr.com/ugd/0a74e1_154571838e94457692909858d58f1f99.pdf" - } - }, - { - "chainId": 101, - "address": "GEtb31uJbQ9ULCqGab7VooB4TDtgj1awLtapZtxhsB9Y", - "symbol": "KSC", - "name": "KISS", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/tribeland/token-list/main/assets/mainnet/GEtb31uJbQ9ULCqGab7VooB4TDtgj1awLtapZtxhsB9Y/logo.png", - "extensions": { - "website": "https://www.kisscrypto.net/", - "whitepaper": "https://ae283fe9-fab9-4865-a65a-bcd5559ada09.filesusr.com/ugd/0a74e1_8d61680fa97d40568d9f7adba2eccfd7.pdf" - } - }, - { - "chainId": 101, - "address": "6E8tJq85M64wqerfwBN6iYQGJPVcUFzgc8wKqc3tcKeD", - "symbol": "YAT-PIR", - "name": "Yet Another Token PIRIT", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6E8tJq85M64wqerfwBN6iYQGJPVcUFzgc8wKqc3tcKeD/logo.png", - "extensions": { - "website": "http://n1pool.com/" - } - }, - { - "chainId": 103, - "address": "6E8tJq85M64wqerfwBN6iYQGJPVcUFzgc8wKqc3tcKeD", - "symbol": "YAT-PIR", - "name": "Yet Another Token PIRIT", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6E8tJq85M64wqerfwBN6iYQGJPVcUFzgc8wKqc3tcKeD/logo.png", - "extensions": { - "website": "http://n1pool.com/" - } - }, - { - "chainId": 101, - "address": "7duMWSNdYMof6WKZHs5X1wdmmxUa6cDGqqKShhMSGkgg", - "symbol": "YAT-LAZ", - "name": "Yet Another Token LAZURIT", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7duMWSNdYMof6WKZHs5X1wdmmxUa6cDGqqKShhMSGkgg/logo.png", - "extensions": { - "website": "http://n1pool.com/" - } - }, - { - "chainId": 103, - "address": "7duMWSNdYMof6WKZHs5X1wdmmxUa6cDGqqKShhMSGkgg", - "symbol": "YAT-LAZ", - "name": "Yet Another Token LAZURIT", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7duMWSNdYMof6WKZHs5X1wdmmxUa6cDGqqKShhMSGkgg/logo.png", - "extensions": { - "website": "http://n1pool.com/" - } - }, - { - "chainId": 101, - "address": "59XzU2M7YckoiNw7wUq54eeeg6Kw8gL5554eg2nToat", - "symbol": "LDHTOIXG", - "name": "LDHTOIXGCOIN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/59XzU2M7YckoiNw7wUq54eeeg6Kw8gL5554eg2nToat/logo.png", - "extensions": { - "website": "http://google.com/" - } - }, - { - "chainId": 101, - "address": "FU93FVMNiphc8Jdh2jPHHQvZpwvL4obCELPBhkMnJLxh", - "symbol": "RZZ", - "name": "Razzmena compnay Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FU93FVMNiphc8Jdh2jPHHQvZpwvL4obCELPBhkMnJLxh/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://razzmena.com" - } - }, - { - "chainId": 101, - "address": "6xtyNYX6Rf4Kp3629X11m1jqUmkV89mf9xQakUtUQfHq", - "symbol": "CHIH", - "name": "CHIHUAHUA", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/ChihuahuaSol/Chihuahua/main/chihuahua-token.png", - "tags": ["NFT"], - "extensions": { - "coingeckoId": "chihuahuasol", - "discord": "https://discord.gg/cQMHepBqmc", - "twitter": "https://twitter.com/ChihuahuaSol", - "website": "https://chihuahuasol.com/" - } - }, - { - "chainId": 101, - "address": "9xkb4MSeD2WkJuio3EdGhEjNP5MuAp56scwKpiDNLtHc", - "symbol": "JACKIE", - "name": "Jackie Chan Fan Token", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9xkb4MSeD2WkJuio3EdGhEjNP5MuAp56scwKpiDNLtHc/logo.png", - "tags": ["community-token"], - "extensions": { - "facebook": "https://www.facebook.com/groups/jackiechanfanclubgroup", - "telegram": "https://t.me/jackietoken", - "twitter": "https://twitter.com/jackie_token", - "website": "https://jackietoken.tk/" - } - }, - { - "chainId": 101, - "address": "8oMHsGMaeLLC77DdFYzernNS39oDT7cJ7Gq5o9ThcaFM", - "symbol": "PLUS", - "name": "PlusPlus", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8oMHsGMaeLLC77DdFYzernNS39oDT7cJ7Gq5o9ThcaFM/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://plusplus.is/" - } - }, - { - "chainId": 101, - "address": "DQP2edsDc4bApMaQ4pRim6AE18yCjHpohFLhnWbxc4um", - "symbol": "wDAY", - "name": "ChronoLogic DAY (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DQP2edsDc4bApMaQ4pRim6AE18yCjHpohFLhnWbxc4um/logo.png", - "tags": ["ethereum", "wrapped", "wormhole"], - "extensions": { - "coingeckoId": "chronologic", - "medium": "https://blog.chronologic.network/", - "telegram": "https://t.me/chronologicnetwork", - "twitter": "https://twitter.com/ChronoLogicETH", - "website": "https://chronologic.network/", - "youtube": "http://www.youtube.com/c/ChronoLogic" - } - }, - { - "chainId": 101, - "address": "FAmdutSS9sTVoqTbw2JYrcns58ZfEozrgevgeZuZiyML", - "symbol": "SOL-USDC", - "name": "HydraSwap LP Token (SOL-USDC)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FAmdutSS9sTVoqTbw2JYrcns58ZfEozrgevgeZuZiyML/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/HydraSwap_io", - "website": "https://www.hydraswap.io" - } - }, - { - "chainId": 101, - "address": "5vVrn1ioAjAeCNSYhwA19CnPTSmcDuMPnB2wUFQ5hkeg", - "symbol": "BTC-USDC", - "name": "HydraSwap LP Token (BTC-USDC)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5vVrn1ioAjAeCNSYhwA19CnPTSmcDuMPnB2wUFQ5hkeg/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/HydraSwap_io", - "website": "https://www.hydraswap.io" - } - }, - { - "chainId": 101, - "address": "HRhugQTKnX5TK6dQUygwUr7rgCZmzJjk4CiAxZV3eaTk", - "symbol": "ETH-USDC", - "name": "HydraSwap LP Token (ETH-USDC)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HRhugQTKnX5TK6dQUygwUr7rgCZmzJjk4CiAxZV3eaTk/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/HydraSwap_io", - "website": "https://www.hydraswap.io" - } - }, - { - "chainId": 101, - "address": "UgMdvGuY2HNMmCJQdY6aGty1yDxHBxm9Q9KJVefVjwJ", - "symbol": "W technology", - "name": "W", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/WBORSA/token-list/main/assets/mainnet/UgMdvGuY2HNMmCJQdY6aGty1yDxHBxm9Q9KJVefVjwJ/W%20Coin.png", - "extensions": { - "website": "https://app.w.systems/" - } - }, - { - "chainId": 101, - "address": "8EUyHq7ZVg7t9oFwYWtkiH1ybg5eXjKCGn7oc8FRXwDT", - "symbol": "FLC", - "name": "Feliz Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8EUyHq7ZVg7t9oFwYWtkiH1ybg5eXjKCGn7oc8FRXwDT/logo.png", - "extensions": { - "website": "https://www.felizcoin.org/" - } - }, - { - "chainId": 101, - "address": "7R7rZ7SsLDXkYAfJyRCBScLuZwizeMWaTWrwFhSZU2Jq", - "symbol": "WET", - "name": "Weble Ecosystem Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7R7rZ7SsLDXkYAfJyRCBScLuZwizeMWaTWrwFhSZU2Jq/logo.png", - "extensions": { - "website": "https://wet.weble.ch/" - } - }, - { - "chainId": 101, - "address": "BFsCwfk8VsEbSfLkkgmoKsAPk2N6FMJjeTsuxfGa9VEf", - "symbol": "aeFTT", - "name": "Wrapped FTT (Allbridge from Ethereum)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AGFEad2et2ZJif9jaGpdMixQqvW5i81aBdvKe7PHNfz3/logo.png", - "extensions": { - "coingeckoId": "ftx-token" - } - }, - { - "chainId": 101, - "address": "ALQ9KMWjFmxVbew3vMkJj3ypbAKuorSgGst6svCHEe2z", - "symbol": "MDF", - "name": "MatrixETF DAO Finance", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ALQ9KMWjFmxVbew3vMkJj3ypbAKuorSgGst6svCHEe2z/logo.png", - "tags": ["utility-token"], - "extensions": { - "coingeckoId": "matrixetf", - "telegram": "https://t.me/MatrixETF", - "twitter": "https://twitter.com/MatrixETF", - "website": "https://www.matrixetf.finance/" - } - }, - { - "chainId": 101, - "address": "EfdM1aiUaoXHu3TdVAGYiyHKcvkZURjmxsfXWLa5LyTc", - "symbol": "BRANE", - "name": "Brane", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/elonsuk/BRANE-Token/master/Logo.png", - "tags": ["BRANE", "BRANE-Token"] - }, - { - "chainId": 101, - "address": "5tN42n9vMi6ubp67Uy4NnmM5DMZYN8aS8GeB3bEDHr6E", - "symbol": "WAG", - "name": "Waggle Network", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5tN42n9vMi6ubp67Uy4NnmM5DMZYN8aS8GeB3bEDHr6E/logo.png", - "extensions": { - "medium": "https://medium.com/@wagglenetwork", - "telegram": "https://t.me/waggle_network", - "twitter": "https://twitter.com/wagglenetwork", - "website": "https://waggle.network/" - } - }, - { - "chainId": 101, - "address": "DxWXDwbqNyXs4ABCRWAJU2Xi4xpYJLp3UxRhsu1jU6gs", - "symbol": "LMS", - "name": "LMS Stars", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/assets/DxWXDwbqNyXs4ABCRWAJU2Xi4xpYJLp3UxRhsu1jU6gs/logo.png", - "tags": ["LMS"], - "extensions": { - "website": "https://www.letmespeak.pro/" - } - }, - { - "chainId": 101, - "address": "uNrix3Q5g51MCEUrYBUEBDdQ96RQDQspQJJnnQ4T3Vc", - "symbol": "SBNK", - "name": "Solbank", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/uNrix3Q5g51MCEUrYBUEBDdQ96RQDQspQJJnnQ4T3Vc/logo.png", - "extensions": { - "coingeckoId": "solblank", - "twitter": "https://twitter.com/solbankapp", - "website": "http://solbank.app/" - } - }, - { - "chainId": 101, - "address": "2KccNRqHQdnQ9WS8vLSo8uwVPpW7dojmMmZuDpwi6mKd", - "symbol": "WESH", - "name": "WeShare", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2KccNRqHQdnQ9WS8vLSo8uwVPpW7dojmMmZuDpwi6mKd/logo.png", - "tags": ["tokenized-stock", "weshare", "social-token"], - "extensions": { - "website": "https://www.we-share.online/" - } - }, - { - "chainId": 101, - "address": "EHrY9aueq55y7pWTcFJhCryNwJtAN14spL5UiG938RnV", - "symbol": "KLAYG", - "name": "Klay Games", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/KLAYGAMES/KlayGames/main/KlayLogo_64.png", - "tags": ["game"], - "extensions": { - "website": "https://klaygames.io/" - } - }, - { - "chainId": 101, - "address": "NJdK95TPKguYLUzhNPEumEbwC7cjciEQUzG4UrvhcJv", - "symbol": "AINU", - "name": "AvatarInu", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/NJdK95TPKguYLUzhNPEumEbwC7cjciEQUzG4UrvhcJv/logo.png", - "tags": ["nft", "gaming"], - "extensions": { - "website": "https://avatarinu.com/" - } - }, - { - "chainId": 101, - "address": "2AVXRChvUAnyP3W3Psg4ZTY2w7KYbPy3vZ6FpS5c8ya6", - "symbol": "BLACK", - "name": "Black Freelancer", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2AVXRChvUAnyP3W3Psg4ZTY2w7KYbPy3vZ6FpS5c8ya6/logo.png", - "tags": ["utility-token"], - "extensions": { - "blog": "https://blog.blackfreelancer.com", - "instagram": "https://www.instagram.com/blackfreelancer", - "twitter": "https://twitter.com/blackfreelancr", - "website": "https://www.blackfreelancer.com" - } - }, - { - "chainId": 101, - "address": "GiKE9s8TMYdkWE28CzPDSYn42RK4AHZSxg7cthg1ntcn", - "symbol": "SLTM", - "name": "Soltomm F-token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GiKE9s8TMYdkWE28CzPDSYn42RK4AHZSxg7cthg1ntcn/logo.png", - "tags": ["utility-token", "nft"], - "extensions": { - "medium": "https://soltomm.medium.com", - "telegram": "https://t.me/soltomm", - "twitter": "https://twitter.com/soltomm", - "website": "https://www.soltomm.com" - } - }, - { - "chainId": 101, - "address": "8urbgQGLFvEScPKVbigbzcfU3BFHsZaVGZ7mhrMoaZcu", - "symbol": "SWAB", - "name": "Schwabendollar", - "decimals": 2, - "logoURI": "https://cdn.jsdelivr.net/gh/solana-labs/token-list@15773063f55394cf15353e7b4874c56dc66c97b6/assets/mainnet/8urbgQGLFvEScPKVbigbzcfU3BFHsZaVGZ7mhrMoaZcu/logo.svg", - "tags": ["stablecoin"], - "extensions": { - "instagram": "https://www.instagram.com/schwabendollar", - "twitter": "https://twitter.com/schwabendollar", - "website": "https://schwabendollar.de/" - } - }, - { - "chainId": 101, - "address": "BDNA1bZDCQYerXgjF9dcqeNcqBYKWQQN3z9QXypvQ9uV", - "symbol": "BDNA1", - "name": "Gold SolBull DNA", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BDNA1bZDCQYerXgjF9dcqeNcqBYKWQQN3z9QXypvQ9uV/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/wbkXkWQeex", - "medium": "https://medium.com/@SolBulls", - "twitter": "https://twitter.com/SolanaBullsNFT", - "website": "https://solbulls.art" - } - }, - { - "chainId": 101, - "address": "BDNA2oi3W3TpMfbPMRoEzM55WdSajtyWnADkhsCW9p5f", - "symbol": "BDNA2", - "name": "White SolBull DNA", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BDNA2oi3W3TpMfbPMRoEzM55WdSajtyWnADkhsCW9p5f/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/wbkXkWQeex", - "medium": "https://medium.com/@SolBulls", - "twitter": "https://twitter.com/SolanaBullsNFT", - "website": "https://solbulls.art" - } - }, - { - "chainId": 101, - "address": "BDNA345whxSjPj1xBk7wobHfnv35qe7rJwX2zUnRMZMT", - "symbol": "BDNA3", - "name": "Grey SolBull DNA", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BDNA345whxSjPj1xBk7wobHfnv35qe7rJwX2zUnRMZMT/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/wbkXkWQeex", - "medium": "https://medium.com/@SolBulls", - "twitter": "https://twitter.com/SolanaBullsNFT", - "website": "https://solbulls.art" - } - }, - { - "chainId": 101, - "address": "BDNA4xTPk6iVe2iuQe8931quH55XsZo3R97VwsgfUgK5", - "symbol": "BDNA4", - "name": "Brown SolBull DNA", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BDNA4xTPk6iVe2iuQe8931quH55XsZo3R97VwsgfUgK5/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/wbkXkWQeex", - "medium": "https://medium.com/@SolBulls", - "twitter": "https://twitter.com/SolanaBullsNFT", - "website": "https://solbulls.art" - } - }, - { - "chainId": 101, - "address": "MNDEFzGvMt87ueuHvVU9VcTqsAP5b3fTGPsHuuPA5ey", - "symbol": "MNDE", - "name": "Marinade", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/MNDEFzGvMt87ueuHvVU9VcTqsAP5b3fTGPsHuuPA5ey/logo.png", - "extensions": { - "coingeckoId": "marinade", - "discord": "https://discord.gg/mGqZA5pjRN", - "github": "https://github.com/marinade-finance", - "medium": "https://medium.com/marinade-finance", - "twitter": "https://twitter.com/MarinadeFinance", - "website": "https://marinade.finance" - } - }, - { - "chainId": 101, - "address": "CzqJTjTp3R9opDHmzF5Gy1G2NKDHEyMufa4Keiju4PLu", - "symbol": "wCCX", - "name": "Wrapped Conceal", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/assets/CzqJTjTp3R9opDHmzF5Gy1G2NKDHEyMufa4Keiju4PLu/logo.png", - "tags": ["wrapped"], - "extensions": { - "coingeckoId": "wrapped-conceal", - "discord": "https://discord.conceal.network/", - "twitter": "https://twitter.com/ConcealNetwork", - "website": "https://conceal.network/" - } - }, - { - "chainId": 101, - "address": "FaYTnfmPK8uP4dvtECypG3ugCC3wQrG27pwkB1YkhXsG", - "symbol": "DODG", - "name": "DODG the Elephant Shrew", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FaYTnfmPK8uP4dvtECypG3ugCC3wQrG27pwkB1YkhXsG/logo.png", - "extensions": { - "twitter": "https://twitter.com/DODG_Sh" - } - }, - { - "chainId": 101, - "address": "soso1vCmdxwEZqU47M4NZ4MxZH19ppgqF1auG7dP3wz", - "symbol": "SSL", - "name": "sosol", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/soso1vCmdxwEZqU47M4NZ4MxZH19ppgqF1auG7dP3wz/logo.svg", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/sosol_app", - "website": "https://sosol.app/" - } - }, - { - "chainId": 101, - "address": "zwUfHitWqsD722dAbFypW6vmsTi5pbFmGquRDdPKNUj", - "symbol": "SEED", - "name": "El Palito Coin", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/grgkro/Schwabendollar@main/logo_elpalito.png", - "extensions": { - "facebook": "https://www.facebook.com/elpalitostuttgart", - "instagram": "https://www.instagram.com/elpalito.de", - "website": "https://www.elpalito.de/" - } - }, - { - "chainId": 101, - "address": "4hJ6sjwmsvvFag6TKL97yhWiBSDX9BABWoiXgb3EPXxB", - "symbol": "GTON", - "name": "Graviton", - "decimals": 8, - "logoURI": "https://v1.graviton.one/img/brand/download/graviton-logo/primary-logo-png.png", - "extensions": { - "blog": "https://medium.com/graviton-one", - "coingeckoId": "graviton", - "telegram": "https://t.me/graviton_community", - "twitter": "https://twitter.com/OneGraviton", - "website": "https://graviton.one" - } - }, - { - "chainId": 101, - "address": "4qv2AGjhzxiNz5iTUnTdRVYjjacmaEcVGgFcr1R6sRFe", - "symbol": "NXMC", - "name": "NextMindCoin", - "decimals": 7, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4qv2AGjhzxiNz5iTUnTdRVYjjacmaEcVGgFcr1R6sRFe/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/YXDNHMadC4", - "github": "https://github.com/CEO-NextMindCoin", - "telegram": "https://t.me/NextMindCoin_NXMC", - "twitter": "https://twitter.com/nextmindcoin", - "website": "https://www.nextmindcoin.com" - } - }, - { - "chainId": 101, - "address": "E6UU5M1z4CvSAAF99d9wRoXsasWMEXsvHrz3JQRXtm2X", - "symbol": "DGLN", - "name": "Dogelana", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/E6UU5M1z4CvSAAF99d9wRoXsasWMEXsvHrz3JQRXtm2X/logo.png", - "tags": ["dogecoin", "dogelana", "doge", "solana", "meme", "dgln"], - "extensions": { - "blog": "https://dogelana.com/blog", - "coingeckoId": "dogelana", - "coinmarketcap": "https://coinmarketcap.com/currencies/dogelana/", - "discord": "https://discord.gg/UNjbTguY5x", - "facebook": "https://facebook.com/dogelana", - "instagram": "https://www.instagram.com/realdogelana/", - "reddit": "https://www.reddit.com/r/dogelana", - "telegram": "https://t.me/realdogelana", - "twitter": "https://twitter.com/realdogelana", - "website": "https://www.dogelana.com", - "youtube": "https://www.youtube.com/channel/UCkUS4exbXFaEVx5wBypMKaQ" - } - }, - { - "chainId": 101, - "address": "DTQbtBQUWC6cbw8TD83ma8SWy1oHux8stZsMrXWoyaLp", - "symbol": "KPLR", - "name": "KEPLER PAY", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DTQbtBQUWC6cbw8TD83ma8SWy1oHux8stZsMrXWoyaLp/logo.png", - "tags": ["coin"], - "extensions": { - "website": "https://wtmakers.com" - } - }, - { - "chainId": 101, - "address": "6KfDDXh4SFBEaUmL2JMYYQ9QETQL2PxowUucY1Vg3oe4", - "symbol": "SUSD", - "name": "Salvador USD", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/dsfjichi/susd/logo.png", - "tags": ["stablecoin"], - "extensions": { - "telegram": "https://t.me/salvadousd", - "twitter": "https://twitter.com/SalvadorUsd" - } - }, - { - "chainId": 101, - "address": "8om7E9acx23C62yazUMbGaw5pmp48NmW7mnxGarn3XNi", - "symbol": "GT", - "name": "Good Terrier", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8om7E9acx23C62yazUMbGaw5pmp48NmW7mnxGarn3XNi/logo.png", - "tags": ["Analytics", "Oracle", "Swap", "solana"], - "extensions": { - "discord": "https://discord.com/invite/YchEcgMgeC", - "medium": "https://medium.com/goodterrier", - "telegram": "https://t.me/goodterrier", - "twitter": "https://twitter.com/Goodterrier", - "website": "https://www.goodterrier.com/" - } - }, - { - "chainId": 101, - "address": "9152xjhTyvDeVsRbbA82S5neQjwgkdqEyLTHqPtoRbnq", - "symbol": "CATL", - "name": "Cat Lover", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9152xjhTyvDeVsRbbA82S5neQjwgkdqEyLTHqPtoRbnq/logo.png", - "tags": ["Community"], - "extensions": { - "telegram": "https://t.me/catlovertoken", - "website": "https://catlovertoken.tk/" - } - }, - { - "chainId": 101, - "address": "83LGLCm7QKpYZbX8q4W2kYWbtt8NJBwbVwEepzkVnJ9y", - "symbol": "xUSD", - "name": "Synthetic USD", - "decimals": 6, - "logoURI": "https://www.synthetify.io/icons/xusd.svg", - "extensions": { - "coingeckoId": "usd-coin", - "twitter": "https://twitter.com/synthetify", - "website": "https://synthetify.io/" - } - }, - { - "chainId": 101, - "address": "HWxpSV3QAGzLQzGAtvhSYAEr7sTQugQygnni1gnUGh1D", - "symbol": "xBTC", - "name": "Synthetic BTC", - "decimals": 10, - "logoURI": "https://www.synthetify.io/icons/xbtc.svg", - "extensions": { - "coingeckoId": "bitcoin", - "twitter": "https://twitter.com/synthetify", - "website": "https://synthetify.io/" - } - }, - { - "chainId": 101, - "address": "BdUJucPJyjkHxLMv6ipKNUhSeY3DWrVtgxAES1iSBAov", - "symbol": "xSOL", - "name": "Synthetic SOL", - "decimals": 9, - "logoURI": "https://www.synthetify.io/icons/xsol.svg", - "extensions": { - "coingeckoId": "solana", - "twitter": "https://twitter.com/synthetify", - "website": "https://synthetify.io/" - } - }, - { - "chainId": 101, - "address": "Fr3W7NPVvdVbwMcHgA7Gx2wUxP43txdsn3iULJGFbKz9", - "symbol": "xFTT", - "name": "Synthetic FTT", - "decimals": 8, - "logoURI": "https://www.synthetify.io/icons/xftt.svg", - "extensions": { - "coingeckoId": "ftx-token", - "twitter": "https://twitter.com/synthetify", - "website": "https://synthetify.io/" - } - }, - { - "chainId": 101, - "address": "8bqjz8DeSuim1sEAsQatjJN4zseyxSPdhHQcuuhL8PCK", - "symbol": "xETH", - "name": "Synthetic ETH", - "decimals": 9, - "logoURI": "https://www.synthetify.io/icons/xeth.svg", - "extensions": { - "coingeckoId": "ethereum", - "twitter": "https://twitter.com/synthetify", - "website": "https://synthetify.io/" - } - }, - { - "chainId": 101, - "address": "82Afat35Wr9v4fsZfSqGh8dnXFjxeaiQBfm5G9TK1BNj", - "symbol": "xDOT", - "name": "Synthetic DOT", - "decimals": 6, - "logoURI": "https://www.synthetify.io/icons/xdot.svg", - "extensions": { - "coingeckoId": "polkadot", - "twitter": "https://twitter.com/synthetify", - "website": "https://synthetify.io/" - } - }, - { - "chainId": 101, - "address": "6MeoZEcUMhAB788YXTQN4x7K8MnwSt6RHWsLkuq9GJb2", - "symbol": "xLUNA", - "name": "Synthetic LUNA", - "decimals": 6, - "logoURI": "https://www.synthetify.io/icons/xluna.svg", - "extensions": { - "coingeckoId": "terra-luna", - "twitter": "https://twitter.com/synthetify", - "website": "https://synthetify.io/" - } - }, - { - "chainId": 101, - "address": "HtxznfExBatdX28kMFDvmvU1rXVwiG3JSWcNPdFQ4PLh", - "symbol": "xAVAX", - "name": "Synthetic AVAX", - "decimals": 6, - "logoURI": "https://www.synthetify.io/icons/xavax.svg", - "extensions": { - "coingeckoId": "avalanche-2", - "twitter": "https://twitter.com/synthetify", - "website": "https://synthetify.io/" - } - }, - { - "chainId": 101, - "address": "EAniGDVY2VKUtZxvpHnbazHfZgfo3bp61TxUGHzw3Cn7", - "symbol": "007E", - "name": "007 Exchange", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EAniGDVY2VKUtZxvpHnbazHfZgfo3bp61TxUGHzw3Cn7/logo.png", - "tags": ["Exchange"], - "extensions": { - "telegram": "https://t.me/exchange_007", - "twitter": "https://twitter.com/007Exchange", - "website": "https://007exchange.tk/" - } - }, - { - "chainId": 101, - "address": "Hwv5ecNoHv5kNnQ2ungWN6PSq1pMq89McysSQtiELTTH", - "symbol": "FBS", - "name": "forbitspace", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Hwv5ecNoHv5kNnQ2ungWN6PSq1pMq89McysSQtiELTTH/logo.png", - "extensions": { - "discord": "https://discord.gg/8tBuBPeZ", - "github": "https://github.com/forbitspace", - "medium": "https://medium.com/@forbitspace", - "telegram": "https://t.me/forbitspace", - "twitter": "https://twitter.com/forbitspace", - "website": "https://forbitspace.com/" - } - }, - { - "chainId": 101, - "address": "7kbnvuGBxxj8AG9qp8Scn56muWGaRaFqxg1FsRp3PaFT", - "symbol": "UXD", - "name": "UXD Stablecoin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7kbnvuGBxxj8AG9qp8Scn56muWGaRaFqxg1FsRp3PaFT/uxd-icon-black.png", - "tags": ["stablecoin"], - "extensions": { - "coingeckoId": "uxd-stablecoin", - "discord": "https://discord.com/invite/BHfpYmjsBM", - "medium": "https://uxdprotocol.medium.com/", - "twitter": "https://twitter.com/UXDProtocol", - "website": "https://uxd.fi/" - } - }, - { - "chainId": 101, - "address": "DSmqf5Je3FEUmZntxBzG7c7EYJN3WK3feBV5Zgidukjj", - "symbol": "USDC-wUSDC-wUSDT-wDAI", - "name": "Mercurial LP Token (USDC-wUSDC-wUSDT-wDAI)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DSmqf5Je3FEUmZntxBzG7c7EYJN3WK3feBV5Zgidukjj/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://www.mercurial.finance/" - } - }, - { - "chainId": 101, - "address": "A9mUU4qviSctJVPJdBJWkb28deg915LYJKrzQ19ji3FM", - "symbol": "USDCet", - "name": "USD Coin (Portal from Ethereum)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/A9mUU4qviSctJVPJdBJWkb28deg915LYJKrzQ19ji3FM/logo.png", - "tags": ["wrapped"], - "extensions": { - "address": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", - "assetContract": "https://etherscan.io/address/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "usd-coin" - } - }, - { - "chainId": 101, - "address": "E2VmbootbVCBkMNNxKQgCLMS1X3NoGMaYAsufaAsf7M", - "symbol": "USDCpo", - "name": "USD Coin (Portal from Polygon)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/E2VmbootbVCBkMNNxKQgCLMS1X3NoGMaYAsufaAsf7M/logo.png", - "tags": ["wrapped"], - "extensions": { - "address": "0x2791bca1f2de4661ed88a30c99a7a9449aa84174", - "assetContract": "https://polygonscan.com/token/0x2791bca1f2de4661ed88a30c99a7a9449aa84174", - "bridgeContract": "https://polygonscan.com/address/0x5a58505a96d1dbf8df91cb21b54419fc36e93fde", - "coingeckoId": "usd-coin" - } - }, - { - "chainId": 101, - "address": "FLhkrAUE3kjwQwZPvAqDTAXULTgBUgjcAVtyzvwkcNrJ", - "symbol": "MBB", - "name": "Fraktionalized MBB 2793", - "decimals": 3, - "logoURI": "https://www.arweave.net/0RPQq5Z_808sLjsjZ67__kFbQYdfQNaztLpBuDPKaEA?ext=png", - "tags": ["fractionalized-nft"], - "extensions": { - "vault": "https://fraktion.art/vault/4q9s7Y3sAgbNi7AVwRSHJEnEWxugn8Fntk928rRsi6d9", - "vaultPubkey": "4q9s7Y3sAgbNi7AVwRSHJEnEWxugn8Fntk928rRsi6d9" - } - }, - { - "chainId": 101, - "address": "Hk7P7ufaHe92Dx2Cmz6rSHT8RFj362kLYwMxJ9X5d7eF", - "symbol": "MBB", - "name": "Fraktionalized MBB 1007", - "decimals": 3, - "logoURI": "https://www.arweave.net/piH41aGwPKOVs_idwQGU-wh278ZPNmJPpjchwt_gAEc?ext=png", - "tags": ["fractionalized-nft"], - "extensions": { - "vault": "https://fraktion.art/vault/Ei5wPJtrKfLM9WD3Lj4Gmh31K2jsph4DtRAVH3oEJ2hi", - "vaultPubkey": "Ei5wPJtrKfLM9WD3Lj4Gmh31K2jsph4DtRAVH3oEJ2hi" - } - }, - { - "chainId": 101, - "address": "Dn4noZ5jgGfkntzcQSUZ8czkreiZ1ForXYoV2H8Dm7S1", - "symbol": "USDTet", - "name": "Tether USD (Portal from Ethereum)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Dn4noZ5jgGfkntzcQSUZ8czkreiZ1ForXYoV2H8Dm7S1/logo.png", - "tags": ["wrapped"], - "extensions": { - "address": "0xdac17f958d2ee523a2206206994597c13d831ec7", - "assetContract": "https://etherscan.io/address/0xdac17f958d2ee523a2206206994597c13d831ec7", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "tether" - } - }, - { - "chainId": 101, - "address": "5goWRao6a3yNC4d6UjMdQxonkCMvKBwdpubU3qhfcdf1", - "symbol": "USDTpo", - "name": "Tether USD (Portal from Polygon)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5goWRao6a3yNC4d6UjMdQxonkCMvKBwdpubU3qhfcdf1/logo.png", - "tags": ["wrapped"], - "extensions": { - "address": "0xc2132d05d31c914a87c6611c10748aeb04b58e8f", - "assetContract": "https://polygonscan.com/token/0xc2132d05d31c914a87c6611c10748aeb04b58e8f", - "bridgeContract": "https://polygonscan.com/address/0x5a58505a96d1dbf8df91cb21b54419fc36e93fde", - "coingeckoId": "tether" - } - }, - { - "chainId": 101, - "address": "EjmyN6qEC1Tf1JxiG1ae7UTJhUxSwk1TCWNWqxWV4J6o", - "symbol": "DAI", - "name": "Dai Stablecoin (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EjmyN6qEC1Tf1JxiG1ae7UTJhUxSwk1TCWNWqxWV4J6o/logo.png", - "tags": ["wrapped"], - "extensions": { - "address": "0x6b175474e89094c44da98b954eedeac495271d0f", - "assetContract": "https://etherscan.io/address/0x6b175474e89094c44da98b954eedeac495271d0f", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "dai" - } - }, - { - "chainId": 101, - "address": "4Fo67MYQpVhZj9R7jQTd63FPAnWbPpaafAUxsMGX2geP", - "symbol": "DAIpo", - "name": "Dai Stablecoin (Portal from Polygon)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4Fo67MYQpVhZj9R7jQTd63FPAnWbPpaafAUxsMGX2geP/logo.png", - "tags": ["wrapped"], - "extensions": { - "address": "0x8f3cf7ad23cd3cadbd9735aff958023239c6a063", - "assetContract": "https://polygonscan.com/token/0x8f3cf7ad23cd3cadbd9735aff958023239c6a063", - "bridgeContract": "https://polygonscan.com/address/0x5a58505a96d1dbf8df91cb21b54419fc36e93fde", - "coingeckoId": "dai" - } - }, - { - "chainId": 101, - "address": "3U9pr23hLgoNWPVuKww3TfNutkqXXNQFMHm9cqZ3GfLT", - "symbol": "DOJA", - "name": "Doja Token", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/majesticio/doja-token/logo/dojapic-icon2.png", - "tags": ["community", "sharing", "moonshot"], - "extensions": { - "website": "https://dojatoken.contacthi.org" - } - }, - { - "chainId": 101, - "address": "72hgmvS5zFxaFJfMizq6Gp4gjBqXjTPyX9GDP38krorQ", - "symbol": "HIMA", - "name": "Himalayan Cat Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/72hgmvS5zFxaFJfMizq6Gp4gjBqXjTPyX9GDP38krorQ/logo.png", - "extensions": { - "coingeckoId": "himalayan-cat-coin", - "serumV3Usdc": "HCE4wQXApNyFBTK7gYa98QCYbshCz7EkH8axNz3ahvKc", - "twitter": "https://twitter.com/himacoin", - "website": "https://www.himalayancatcoin.com/" - } - }, - { - "chainId": 101, - "address": "GPz1MmYZG2NUi32nqyUjbVsVyG64mYV4EFUQaZDWwtWL", - "symbol": "OOGA", - "name": "ApeBucks", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GPz1MmYZG2NUi32nqyUjbVsVyG64mYV4EFUQaZDWwtWL/logo.svg" - }, - { - "chainId": 101, - "address": "2DnEfD1hTYxmbkb5vHW3c67EXwu8gA845KYT6RCPDExp", - "symbol": "WALLY", - "name": "WALLY Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/wallysolana/WALLYIMAGE/main/WALLYlogos.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://allycareint.com" - } - }, - { - "chainId": 101, - "address": "4oV4HndNDY12bT7wEfEeQeVk9bVN5EEAc8jtG9ErJS2E", - "symbol": "HIND", - "name": "HINDCOIN", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4oV4HndNDY12bT7wEfEeQeVk9bVN5EEAc8jtG9ErJS2E/HIND.png" - }, - { - "chainId": 101, - "address": "ArzDDtxQaMdAJn2mkZ14cSA1MLqnaXhfCeXCVD8AEGeF", - "symbol": "QBL", - "name": "QIBLACOIN", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ArzDDtxQaMdAJn2mkZ14cSA1MLqnaXhfCeXCVD8AEGeF/QBL.png" - }, - { - "chainId": 101, - "address": "7Sg4VVktQo6kt6ePjeUcmiWEKptkW3U4WZVYv5L4HKbn", - "symbol": "RBT", - "name": "ROBTOKEN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/rabindrarajawat/Solana-blockchain/main/IMG_E8974.JPG" - }, - { - "chainId": 101, - "address": "27FAF4JDSkV3MAWF4Tzc4rJsiNGyfGWP2wvoR4h73eBr", - "symbol": "IV", - "name": "IV WorldWide Entertainment Token", - "decimals": 9, - "logoURI": "https://github.com/bvdaakster/token-list/raw/9b15eb4f84e961016b01409d53979822ec1910db/assets/mainnet/27FAF4JDSkV3MAWF4Tzc4rJsiNGyfGWP2wvoR4h73eBr/token-logo.png", - "extensions": { - "website": "http://ivwwe.com" - } - }, - { - "chainId": 101, - "address": "ErGB9xa24Szxbk1M28u2Tx8rKPqzL6BroNkkzk5rG4zj", - "symbol": "FRKT", - "name": "FRAKT Token", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ErGB9xa24Szxbk1M28u2Tx8rKPqzL6BroNkkzk5rG4zj/logo.png", - "tags": ["utility-token"], - "extensions": { - "coingeckoId": "frakt-token", - "coinmarketcap": "https://coinmarketcap.com/currencies/frakt-token/", - "twitter": "https://twitter.com/FraktArt", - "website": "https://frakt.art" - } - }, - { - "chainId": 101, - "address": "F5rdP7VxCDYy8xaAEksgLqUerCVty4BTe1CmoiCbmu7L", - "symbol": "TPW", - "name": "Fraktionalized Frakt-2795", - "decimals": 3, - "logoURI": "https://www.arweave.net/1LMJ9lC00xVIbUv_XK4FuIQGwm87ua30iRskQslP9Go", - "tags": ["fractionalized-nft"], - "extensions": { - "vault": "https://fraktion.art/vault/5oDXsghEWBitmjGuy8w3MPnkGjZkNc5pjFv3wf9pg1QT", - "vaultPubkey": "5oDXsghEWBitmjGuy8w3MPnkGjZkNc5pjFv3wf9pg1QT" - } - }, - { - "chainId": 101, - "address": "Gc2yWrkqBti7zeWVFD5JWHhj3ouWkAhw3YRg1btYJ5Vw", - "symbol": "MMM", - "name": "Fraktionalized Moment-492", - "decimals": 3, - "logoURI": "https://www.arweave.net/YIxO-jtbg51k2auVaIg7L5RN4Ap0S1Vc-Jm_GrUcAgk?ext=jpeg", - "tags": ["fractionalized-nft"], - "extensions": { - "vault": "https://fraktion.art/vault/7D66e5MgEGN2BzYzogwtFNq6QNPqiFvKwD7Zx3fUytiY", - "vaultPubkey": "7D66e5MgEGN2BzYzogwtFNq6QNPqiFvKwD7Zx3fUytiY" - } - }, - { - "chainId": 101, - "address": "2xQwcN3pQn7VvM4GnWMP8sBA2oPdDPtxnMNcLErZwTwh", - "symbol": "SSF", - "name": "Fraktionalized Silver Starfish", - "decimals": 3, - "logoURI": "https://www.arweave.net/ZOt3SVdXPHbVJVr8H13wVo_G5gHBYxDipo6jaTA549w?ext=png", - "tags": ["fractionalized-nft"], - "extensions": { - "vault": "https://fraktion.art/vault/6aVbY5fLCg5SqfLzZjp3Jo5BdTWBzS1ZuWfEiSuMTTFH", - "vaultPubkey": "6aVbY5fLCg5SqfLzZjp3Jo5BdTWBzS1ZuWfEiSuMTTFH" - } - }, - { - "chainId": 101, - "address": "9jWgVR3Q3QjfmaXNiZ6jht2K43W7sqkn6tZFeoK9B48t", - "symbol": "JRDN", - "name": "Fraktionalized Triumphant", - "decimals": 3, - "logoURI": "https://www.arweave.net/B1rrktxxGta7w34MkEuFoJQxDzKLPXlYtBcR_1TkQPQ?ext=png", - "tags": ["fractionalized-nft"], - "extensions": { - "vault": "https://fraktion.art/vault/7uXCgfBQzL43hehzFhh8tBFTEggrcZJDfQRoRpgXNAeo", - "vaultPubkey": "7uXCgfBQzL43hehzFhh8tBFTEggrcZJDfQRoRpgXNAeo" - } - }, - { - "chainId": 101, - "address": "DVPWKGLFHK73PwgKgTtW28iCZGewQdva2N5HeBLDorVJ", - "symbol": "GOATS", - "name": "GOATS", - "decimals": 4, - "logoURI": "https://www.solgoats.io/logo_full.png", - "tags": ["meme-token", "community-token"], - "extensions": { - "discord": "https://discord.gg/eUwEbWw6ww", - "serumV3Usdc": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", - "twitter": "https://twitter.com/TheGOATSociety_", - "website": "https://www.solgoats.io" - } - }, - { - "chainId": 101, - "address": "DYegPLaJuNvicevUUoC77ek6Xfwi4s4Pabr8scLGopSU", - "symbol": "SNG", - "name": "Synergy", - "decimals": 9, - "logoURI": "https://synergyland.world/logo_G_100_100.png", - "tags": ["synergy", "gaming", "nft"], - "extensions": { - "website": "https://synergyland.world/" - } - }, - { - "chainId": 101, - "address": "3TMdBbnXKASdx9rBcZ5HQsyqCky7Gt2ea44gYB6Ro15A", - "symbol": "SFOX", - "name": "SOL FOX", - "decimals": 8, - "logoURI": "https://cdn.jsdelivr.net/gh/Cryptodoggo97/Looptoken/logo.png", - "tags": ["meme", "community", "gaming"], - "extensions": { - "telegram": "https://t.me/Solfox_Official", - "twitter": "https://twitter.com/SolFox_official", - "website": "https://synergyland.world/" - } - }, - { - "chainId": 101, - "address": "BWe1ReuW5KjaUMZTdq3yPxUAkoBbvm6kaFG4cCvapX9p", - "symbol": "IDRS", - "name": "IDRS", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BWe1ReuW5KjaUMZTdq3yPxUAkoBbvm6kaFG4cCvapX9p/logo.svg", - "tags": ["stablecoin"], - "extensions": { - "website": "https://rupiahdigital.com" - } - }, - { - "chainId": 101, - "address": "7fRXu5A3VSQHjhS2exrETCVK85jANRSh9utUuiJVoQc8", - "symbol": "VER", - "name": "Vera", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/umersurkhailas/spllogo/vbuck.png", - "tags": ["vera-token"] - }, - { - "chainId": 101, - "address": "CN2jeduMaHuehNZNGyyAfvo1DPmAK2zSiX1DHAwkBA8Y", - "symbol": "VER", - "name": "Vera", - "decimals": 8, - "logoURI": "https://dl.dropboxusercontent.com/s/1h1kbyfwhf9m8t3/vera-logo.png?dl=0", - "tags": ["vera-token"], - "extensions": { - "website": "http://veracurrency.com" - } - }, - { - "chainId": 103, - "address": "CN2jeduMaHuehNZNGyyAfvo1DPmAK2zSiX1DHAwkBA8Y", - "symbol": "VER", - "name": "Vera", - "decimals": 8, - "logoURI": "https://dl.dropboxusercontent.com/s/1h1kbyfwhf9m8t3/vera-logo.png?dl=0", - "tags": ["vera-token"], - "extensions": { - "website": "http://veracurrency.com" - } - }, - { - "chainId": 101, - "address": "1YDQ35V8g68FGvcT85haHwAXv1U7XMzuc4mZeEXfrjE", - "symbol": "WGMI", - "name": "WGMI NFT Collector's Club", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/1YDQ35V8g68FGvcT85haHwAXv1U7XMzuc4mZeEXfrjE/logo.png", - "tags": ["community", "NFT", "club", "wgmi", "wagmi"], - "extensions": { - "discord": "https://discord.gg/yr4PpZNQXK", - "twitter": "https://twitter.com/WGMIcc", - "website": "https://wgmi.cc" - } - }, - { - "chainId": 101, - "address": "zp6ybEDFPzQqstgdw8eLfcV43JyfkTR4ty9CbmzQw6X", - "symbol": "LARA", - "name": "LARA Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/zp6ybEDFPzQqstgdw8eLfcV43JyfkTR4ty9CbmzQw6X/logo.png", - "tags": ["utility-token", "LARA"] - }, - { - "chainId": 101, - "address": "CAeZWe4RoK6fj6XHhLiynxZKV2tXqeS1kpTtP3JTWVXw", - "symbol": "FBD", - "name": "FBD Collectible Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CAeZWe4RoK6fj6XHhLiynxZKV2tXqeS1kpTtP3JTWVXw/logo.png", - "tags": ["rare", "value-token", "FBD", "FajCo"] - }, - { - "chainId": 101, - "address": "3USdfJ2KUKC1pS3itv2NuZUPYSgrMhdQPTCGXxpJkMSz", - "symbol": "PNNX", - "name": "Phennix Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3USdfJ2KUKC1pS3itv2NuZUPYSgrMhdQPTCGXxpJkMSz/logo.png", - "tags": ["utility-token", "PNNX"] - }, - { - "chainId": 101, - "address": "FwEHs3kJEdMa2qZHv7SgzCiFXUQPEycEXksfBkwmS8gj", - "symbol": "aaUSDT", - "name": "Wrapped USDT (Allbridge from Avalanche)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB/logo.svg", - "tags": ["stablecoin"], - "extensions": { - "coingeckoId": "tether" - } - }, - { - "chainId": 101, - "address": "8Yv9Jz4z7BUHP68dz8E8m3tMe6NKgpMUKn8KVqrPA6Fr", - "symbol": "aaUSDC", - "name": "Wrapped USDC (Allbridge from Avalanche)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v/logo.png", - "tags": ["stablecoin"], - "extensions": { - "coingeckoId": "usd-coin" - } - }, - { - "chainId": 101, - "address": "EgQ3yNtVhdHz7g1ZhjfGbxhFKMPPaFkz8QHXM5RBZBgi", - "symbol": "aaDAI", - "name": "Wrapped DAI (Allbridge from Avalanche)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FYpdBuyAHSbdaAyD1sKkxyLWbAP8uUW9h6uvdhK74ij1/logo.png", - "tags": ["stablecoin"], - "extensions": { - "coingeckoId": "multi-collateral-dai" - } - }, - { - "chainId": 101, - "address": "Fd8xyHHRjTvxfZrBirb6MaxSmrZYw99gRSqFUKdFwFvw", - "symbol": "aaWBTC", - "name": "Wrapped BTC (Allbridge from Avalanche)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/qfnqNqs3nCAHjnyCgLRDbBtq4p2MtHZxw8YjSyYhPoL/logo.png", - "extensions": { - "coingeckoId": "wrapped-bitcoin" - } - }, - { - "chainId": 101, - "address": "AUrMpCDYYcPuHhyNX8gEEqbmDPFUpBpHrNW3vPeCFn5Z", - "symbol": "AVAX", - "name": "AVAX (Allbridge from Avalanche)", - "decimals": 9, - "logoURI": "https://assets.coingecko.com/coins/images/12559/small/coin-round-red.png", - "extensions": { - "coingeckoId": "avalanche-2" - } - }, - { - "chainId": 101, - "address": "75L31F2cs2m9Y2MQtBowCTyzaaNyn2XeJ1ZMJ9YL4s96", - "symbol": "FBDT", - "name": "FBD Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/75L31F2cs2m9Y2MQtBowCTyzaaNyn2XeJ1ZMJ9YL4s96/logo.png", - "tags": ["rare", "collectible-token", "FBDT", "FBD"] - }, - { - "chainId": 101, - "address": "8ssTatx7m2x5zM24EbzvB9GFxFyUc9RCgpL5pXa2xWX8", - "symbol": "STG", - "name": "SOLARIS", - "decimals": 2, - "logoURI": "https://cdn.jsdelivr.net/gh/grgkro/token-list@6237aabe97cc75d24e472d5991f892dd696d8c66/assets/mainnet/8ssTatx7m2x5zM24EbzvB9GFxFyUc9RCgpL5pXa2xWX8/logo.png", - "tags": ["stablecoin"], - "extensions": { - "instagram": "https://www.instagram.com/schwabendollar", - "twitter": "https://twitter.com/schwabendollar", - "website": "https://schwabendollar.de/" - } - }, - { - "chainId": 101, - "address": "BmLvq52WKMb5MYKLScay5V9C4Sh4E67zxvwLbU6i2vTR", - "symbol": "HP", - "name": "Honey Pot", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BmLvq52WKMb5MYKLScay5V9C4Sh4E67zxvwLbU6i2vTR/logo.png", - "tags": ["BugBear", "NFT"], - "extensions": { - "description": "Bugbear favorite honey pot! Shiny gold honey, taste like money.", - "imageUrl": "https://storage.googleapis.com/honeypotnft/honeypot.png", - "serumV3Usdc": "EhABxYSBodQF7vz6D633cxCG7BSK1S6NrNNPVMSpKLct", - "website": "https://www.thebugbear.com" - } - }, - { - "chainId": 101, - "address": "6X4jtyjKQmNx9zEPjzt1A3hcKEX7fi6BX3ruQ79sLa75", - "symbol": "ATG", - "name": "AbstergoAI", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/ATGxlabs/logo/main/ATGlogo.jpg", - "tags": ["ATG", "NFT"], - "extensions": { - "twitter": "https://twitter.com/AbstergoAI" - } - }, - { - "chainId": 101, - "address": "HzKX1FMvGaymSHxkwn9uvvSG4L3Ba9nvzMaGAdrPqXRQ", - "symbol": "TRD", - "name": "ToardoLandia", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/EdoardoBusetti/Solana_test@main/TRDlogo.jpg", - "extensions": { - "website": "https://toardolandia.com/" - } - }, - { - "chainId": 101, - "address": "4xAPLtoJn7J7ALhLh7jz4unZRRDjCogNbnkJ2xhkYedo", - "symbol": "ROFL", - "name": "ROFLSTOMP TOKEN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4xAPLtoJn7J7ALhLh7jz4unZRRDjCogNbnkJ2xhkYedo/teamROFLtwitter.png", - "tags": ["team-token", "roflstompers"], - "extensions": { - "twitter": "https://twitter.com/MW_ROFLSTOMPERS" - } - }, - { - "chainId": 101, - "address": "7bYdmHbEEGH9ZXmHdeo7fX9dxyZGGyh4w8oc13WU86CJ", - "symbol": "PCRD", - "name": "PubCred token", - "decimals": 9, - "logoURI": "https://cdn.pubcred.com/pc-logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://pubcred.com" - } - }, - { - "chainId": 101, - "address": "nZhog7W722ieakdHxRp1pcHMZwvv1HUCW9Y1rPZHktE", - "symbol": "NXT", - "name": "NEXTSENSE", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/nZhog7W722ieakdHxRp1pcHMZwvv1HUCW9Y1rPZHktE/logo.png" - }, - { - "chainId": 101, - "address": "HvdFyYDQLhz2KhVJew2bYo1cWaE7y8UY7E4yMVBL5uhw", - "symbol": "GMAC", - "name": "GMAC Unique Token", - "decimals": 9, - "logoURI": "https://www.slm.cloud/img/products.png", - "tags": ["community", "utility-token", "club"], - "extensions": { - "twitter": "https://twitter.com/gonzaloaraujoc", - "website": "https://www.slm.cloud" - } - }, - { - "chainId": 101, - "address": "FriCEbw1V99GwrJRXPnSQ6su2TabHabNxiZ3VNsVFPPN", - "symbol": "FRIES", - "name": "Soltato FRIES", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FriCEbw1V99GwrJRXPnSQ6su2TabHabNxiZ3VNsVFPPN/logo.png", - "tags": ["nft", "utility-token"], - "extensions": { - "discord": "https://discord.com/invite/Wkgh9Fvy84", - "serumV3Usdc": "8DKD5dKmmwparxCkpV2BQFTxt164rfadK8kX3at6hWUB", - "twitter": "https://twitter.com/Soltato_NFT", - "website": "https://soltato.io/" - } - }, - { - "chainId": 101, - "address": "p1huPeR7J1o3DQdiV9yMpDiRc3grLXocrHiLpKifsBb", - "symbol": "HIPP", - "name": "HipsterCoin", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/sunnybeach24/HIPSTER/hipp-logo.png", - "tags": ["social-token", "innovation", "community", "utility-token"], - "extensions": { - "website": "https://www.sunnybeach24.com" - } - }, - { - "chainId": 101, - "address": "AWz2TJfkvCX18RNaogJkx9DUAqGyPcwt6tMmh7PdaX58", - "symbol": "DRM", - "name": "DARUMA TOKEN", - "decimals": 9, - "logoURI": "https://unnxdjnntyhxaqlfmu4nyiw43cy6zvol2id3nz4a5ux4tnktbwiq.arweave.net/o1txpa2eD3BBZWU43CLc2LHs1cvSB7bngO0vybVTDZE" - }, - { - "chainId": 101, - "address": "AKxR1NLTtPnsVcWwPSEGat1TC9da3Z2vX7sY4G7ZLj1r", - "symbol": "PNT", - "name": "PHANT", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AKxR1NLTtPnsVcWwPSEGat1TC9da3Z2vX7sY4G7ZLj1r/logo.png", - "tags": ["utility-token"], - "extensions": { - "coingeckoId": "phant", - "coinmarketcap": "https://coinmarketcap.com/currencies/phant/", - "discord": "https://discord.gg/HsHwWGtuaz", - "serumV3Usdc": "9GWz5exH52JAHhe4MyKmo96SRAJy96ZKhEpqrnbVzYqU", - "twitter": "https://twitter.com/wecap_io", - "website": "https://wecap.io/" - } - }, - { - "chainId": 101, - "address": "9BYwEQ3aEDmnXaF8t4mPLCfRCiGzBBVPWcZAL6KYJxRx", - "symbol": "APHD", - "name": "Applehead", - "decimals": 9, - "logoURI": "https://applehead.finance/wp-content/uploads/2021/10/Applehead.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://applehead.finance/" - } - }, - { - "chainId": 101, - "address": "54s1cUvcF5CuMhomJ65A3PFn6RASixP3J96taku6w6PP", - "symbol": "SQD", - "name": "Squid Game Invitation", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/54s1cUvcF5CuMhomJ65A3PFn6RASixP3J96taku6w6PP/logo.png", - "tags": ["tokenized-invitation"] - }, - { - "chainId": 101, - "address": "3vQ58RPSjGqpKRXpDnrMpKRry4ZeQcBPmhzkVZSZ2kGs", - "symbol": "BHCC", - "name": "The Beverly Hills Car Club", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3vQ58RPSjGqpKRXpDnrMpKRry4ZeQcBPmhzkVZSZ2kGs/logo.png", - "extensions": { - "twitter": "https://twitter.com/bevhillscarclub", - "website": "https://beverlyhillscarclub.io/" - } - }, - { - "chainId": 101, - "address": "HPcpwJ5arSHjJDYGmJQYCuHKDfWLqjdmRrb6bhadRkxG", - "symbol": "ILB", - "name": "ILearnBLock", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/marvy-codes/ILB-TOKEN/ilb.jpg", - "tags": ["utility-token", "value-token", "community-token"], - "extensions": { - "instagram": "https://instagram.com/ilearnblock", - "twitter": "https://twitter.com/ilearnblock" - } - }, - { - "chainId": 103, - "address": "8aN9XWUhD3Q7qY4p4uR1GrNbL8H3fF9tssk9VdvXD1Vp", - "symbol": "KDSL", - "name": "KOKILA DILSHAN SL", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/KOKILADILSHANSL/KDSLtoken/logo.png" - }, - { - "chainId": 103, - "address": "5BQmj9wDdsVpwYuEKchWit2PafJkJ1tbacKogCLF4hJh", - "symbol": "ENEC", - "name": "ENEC", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/alexminden/logo/main/enec-logo/main_logo.png" - }, - { - "chainId": 101, - "address": "5xnRrqoyoLBixNwjVet6Xb2ZTyBSXhENyUWj4sqzRGrv", - "symbol": "QUID", - "name": "Quid Token", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/quidtoken/main/quidlogo.png", - "tags": ["social-token", "quid"], - "extensions": { - "telegram": "https://t.me/quidtoken", - "twitter": "https://twitter.com/quidtoken", - "website": "https://www.quidtoken.com/" - } - }, - { - "chainId": 101, - "address": "yvbrxE6zjrA8SxxSpL7oojDBB5QDmF5CVqJWea8JcQE", - "symbol": "CODI", - "name": "CODI", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/yvbrxE6zjrA8SxxSpL7oojDBB5QDmF5CVqJWea8JcQE/logo.png", - "tags": ["Infrastructure", "DeFi"], - "extensions": { - "coingeckoId": "codi-finance", - "discord": "https://discord.gg/npA4RDGv", - "twitter": "https://twitter.com/codi_finance", - "website": "https://codi.finance/" - } - }, - { - "chainId": 101, - "address": "CLg4LWp4p3BfZf5VpE1kaEDv7a8bEf9ELLXAd7xGANmb", - "symbol": "CRB", - "name": "Carbon Farm", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/CarbonFarm/CRBtoken/logo.png", - "tags": ["Farming", "NFT"], - "extensions": { - "github": "https://github.com/CarbonFarm", - "medium": "https://carbonfarm.medium.com/", - "reddit": "https://www.reddit.com/user/CarbonFarm", - "telegram": "https://t.me/carbonfarm", - "twitter": "https://twitter.com/farmcarbonmore", - "website": "https://www.farmcarbonmore.com/" - } - }, - { - "chainId": 101, - "address": "84kYHLFYpBL1bcXXV6VhLAWDVMphejeVdeWqYqsxARcW", - "symbol": "HNF", - "name": "HoneyFarmer", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/CarbonFarm/HNFtoken/logo.png", - "tags": ["Farming", "NFT"], - "extensions": { - "github": "https://github.com/CarbonFarm", - "medium": "https://medium.com/@CarbonFarm", - "reddit": "https://www.reddit.com/user/CarbonFarm", - "telegram": "https://t.me/carbonfarm", - "twitter": "https://twitter.com/farmcarbonmore", - "website": "https://www.farmcarbonmore.com/" - } - }, - { - "chainId": 101, - "address": "28x5iW6faLFiLqY5mshtP6wggXChyshdFaLcuvj72HgS", - "symbol": "DCW", - "name": "DairyCow", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/CarbonFarm/DCWtoken/logo.png", - "tags": ["Farming", "NFT"], - "extensions": { - "github": "https://github.com/CarbonFarm", - "medium": "https://medium.com/@CarbonFarm", - "reddit": "https://www.reddit.com/user/CarbonFarm", - "telegram": "https://t.me/carbonfarm", - "twitter": "https://twitter.com/farmcarbonmore", - "website": "https://www.farmcarbonmore.com/" - } - }, - { - "chainId": 101, - "address": "GjTiVo5ajziFkK27YETD6jXo7femDkRak9yVpofZfqQ8", - "symbol": "BRB", - "name": "BarnBunny", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/CarbonFarm/BRBtoken/logo.png", - "tags": ["Farming", "NFT"], - "extensions": { - "github": "https://github.com/CarbonFarm", - "medium": "https://medium.com/@CarbonFarm", - "reddit": "https://www.reddit.com/user/CarbonFarm", - "telegram": "https://t.me/carbonfarm", - "twitter": "https://twitter.com/farmcarbonmore", - "website": "https://www.farmcarbonmore.com/" - } - }, - { - "chainId": 101, - "address": "G4fsgHkjDzVBSPUicgL5kzEjFSd1EAysP7fCdzidAyzo", - "symbol": "Book", - "name": "BookWorm Token", - "decimals": 1, - "logoURI": "https://pcarvalho.com/nftbookworm/logo.png", - "tags": ["Book", "BookWorm", "NFT", "Publisher", "Auction"], - "extensions": { - "website": "http://nftbookworm.com/" - } - }, - { - "chainId": 103, - "address": "J9JkoZFdi31nJAcSniPMemfneJ7AL2iMYZkrEC9yvTDK", - "symbol": "Book", - "name": "BookWorm Test Token", - "decimals": 1, - "logoURI": "https://pcarvalho.com/nftbookworm/logo.png", - "tags": ["Book", "BookWorm", "NFT", "Publisher", "Auction"], - "extensions": { - "website": "https://nftbookworm.com/" - } - }, - { - "chainId": 101, - "address": "AErxrfertfwzFANXPpgpKkgBPY5kMZzRsafBU3a5mFw6", - "symbol": "LSTR", - "name": "Lstars", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AErxrfertfwzFANXPpgpKkgBPY5kMZzRsafBU3a5mFw6/logo.png" - }, - { - "chainId": 101, - "address": "3vHSsV6mgvpa1JVuuDZVB72vYbeUNzW4mBxiBftwzHEA", - "symbol": "FRNT", - "name": "Final Frontier", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3vHSsV6mgvpa1JVuuDZVB72vYbeUNzW4mBxiBftwzHEA/logo.png", - "tags": ["utility-token"], - "extensions": { - "instagram": "https://instagram.com/finalfrontiersa", - "twitter": "https://twitter.com/FinalFrontierSA", - "website": "https://finalfrontiersa.com/" - } - }, - { - "chainId": 101, - "address": "D1Kyn6tyKQPy3QZTvjKpavEPAWZXqQUH8q9Fc4ZWKHnN", - "symbol": "$BOJACK", - "name": "Bojack Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/D1Kyn6tyKQPy3QZTvjKpavEPAWZXqQUH8q9Fc4ZWKHnN/logo.png", - "tags": ["social-token", "utility-token", "meta-verse"], - "extensions": { - "website": "https://bojackhorsecoin.com" - } - }, - { - "chainId": 101, - "address": "9ubSPNJoTjbvo1aVArBBXHqoTXxdHKvNGiDnHWmskdv7", - "symbol": "$ALPHA", - "name": "Alpha NFT Token", - "decimals": 0, - "logoURI": "https://github.com/alpha-sol/alpha-frontend/blob/main/resources/logo.png", - "tags": [ - "art", - "art-token", - "generative-art", - "community", - "community-token", - "utility-token", - "meta-verse", - "dao", - "governance" - ], - "extensions": { - "website": "https://alphagen.gallery/" - } - }, - { - "chainId": 101, - "address": "Du8zr5ydoqcu5LQutEjr55RUjvmHLpPQKtncAMFhahsV", - "symbol": "DCXa", - "name": "Diverse Capital of Asiatic Exchanges", - "decimals": 9, - "logoURI": "https://dcxa.s3.amazonaws.com/static/icon.png", - "tags": [ - "technology", - "tech-token", - "DeFi", - "community", - "community-token", - "utility-token", - "meta-verse", - "dao", - "governance" - ], - "extensions": { - "website": "https://www.dcxa.io/" - } - }, - { - "chainId": 101, - "address": "4q19vhpG6y4ZeMPLQiUNNaJStb8XivCFQy4m4mdnVnQZ", - "symbol": "stSOL-SOL", - "name": "Mercurial LP Token (stSOL-2Pool)", - "decimals": 12, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4q19vhpG6y4ZeMPLQiUNNaJStb8XivCFQy4m4mdnVnQZ/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://www.mercurial.finance/" - } - }, - { - "chainId": 101, - "address": "AURYydfxJib1ZkTir1Jn1J9ECYUtjb6rKQVmtYaixWPP", - "symbol": "AURY", - "name": "Aurory", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AURYydfxJib1ZkTir1Jn1J9ECYUtjb6rKQVmtYaixWPP/logo.png", - "tags": ["utility-token"], - "extensions": { - "coingeckoId": "aurory", - "description": "Aurory Token", - "website": "https://aurory.io" - } - }, - { - "chainId": 101, - "address": "xAURp5XmAG7772mfkSy6vRAjGK9JofYjc3dmQDWdVDP", - "symbol": "xAURY", - "name": "Aurory", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/xAURp5XmAG7772mfkSy6vRAjGK9JofYjc3dmQDWdVDP/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Aurory Token", - "website": "https://aurory.io/staking" - } - }, - { - "chainId": 103, - "address": "BXKro6nDX9y86rtGn6uh6K1rZUqENzsUHP6gAbdJj1NS", - "symbol": "AKAYA", - "name": "AKAYA_Bistro_NFT_Test", - "decimals": 6, - "logoURI": "https://musa.fyi/images/akaya.jpg", - "tags": ["NFT"], - "extensions": { - "website": "https://www.instagram.com/akaya.bh/" - } - }, - { - "chainId": 101, - "address": "5LSFpvLDkcdV2a3Kiyzmg5YmJsj2XDLySaXvnfP1cgLT", - "symbol": "DOGO", - "name": "Dogemon", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5LSFpvLDkcdV2a3Kiyzmg5YmJsj2XDLySaXvnfP1cgLT/logo.png", - "tags": ["GameFi", "NFT", "DogemonGo"], - "extensions": { - "website": "https://dogemongo.com/" - } - }, - { - "chainId": 101, - "address": "FNAqSGbG4mtPgqrSFbAVMSYXteuefe6BUnWRURUqSkeg", - "symbol": "BAIS", - "name": "BAIS Game", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FNAqSGbG4mtPgqrSFbAVMSYXteuefe6BUnWRURUqSkeg/logo.png", - "tags": ["utility-token"], - "extensions": { - "github": "https://github.com/BAISGame", - "telegram": "https://t.me/BAISGame", - "twitter": "https://twitter.com/BaisGame", - "website": "https://baisgame.com/" - } - }, - { - "chainId": 101, - "address": "8Ap9nTGPGJ1VYbMCE64f7yUTCptKk717Cns1ZfrqvdjE", - "symbol": "HOL", - "name": "HOLONA", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8Ap9nTGPGJ1VYbMCE64f7yUTCptKk717Cns1ZfrqvdjE/logo.png", - "extensions": { - "reddit": "https://www.reddit.com/u/HolonaNetwork", - "telegram": "https://t.me/joinchat/UFpWIQwYE-kwYzA0", - "twitter": "https://twitter.com/HolonaNetwork", - "website": "https://holona.net", - "youtube": "https://youtube.com/channel/UCSTEasbK8OSsvOk2NR6RmCQ" - } - }, - { - "chainId": 101, - "address": "BpK8nx5ygQaaFHnJyQ96mZePRvh74woxCNRT7CkjY81T", - "symbol": "ME", - "name": "ME Tokenized", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BpK8nx5ygQaaFHnJyQ96mZePRvh74woxCNRT7CkjY81T/logo.png", - "extensions": { - "twitter": "https://twitter.com/metoken2" - } - }, - { - "chainId": 101, - "address": "6XYRoRykEKjfdv94jgt4b9bkLgQfoTYjGcCx1WXAh7mm", - "symbol": "OBOL", - "name": "OBOL Token", - "decimals": 0, - "logoURI": "https://github.com/altaga/Kharon-Protocol/blob/main/ObolLogo.png", - "tags": ["IoT-token"], - "extensions": { - "website": "https://kharonprotocol.com" - } - }, - { - "chainId": 101, - "address": "BJDDAfxaiZh9cW4UxSKpsK2BWJfe65TwTi72brKHzCm6", - "symbol": "EDTH", - "name": "Edith Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BJDDAfxaiZh9cW4UxSKpsK2BWJfe65TwTi72brKHzCm6/logo.png", - "tags": [ - "technology", - "DeFi", - "community", - "community-token", - "utility-token" - ], - "extensions": { - "website": "https://edithtoken.com/" - } - }, - { - "chainId": 101, - "address": "94112Trifp3c5rycChpjDuwouSby7Yu7g8bbYsK4PV5Y", - "symbol": "NVS", - "name": "Novisium", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/94112Trifp3c5rycChpjDuwouSby7Yu7g8bbYsK4PV5Y/logo.png", - "extensions": { - "instagram": "https://www.instagram.com/novisium_", - "telegram": "https://t.me/novisiumofficial", - "twitter": "https://twitter.com/novisium_", - "website": "https://novisium.com" - } - }, - { - "chainId": 101, - "address": "99M5AUeqcfiaY6gc5SCbCSToygpRV98PuGBJRiUzNTJ2", - "symbol": "ADJ", - "name": "Andrew Jackson Coin", - "decimals": 9, - "logoURI": "https://ircurrency.org/adj-coin-logo.png", - "tags": [ - "adj", - "inflation", - "resistant", - "currency", - "DeFi", - "crypto", - "community" - ], - "extensions": { - "discord": "https://discord.gg/4cxWg5Jmxt", - "website": "https://ircurrency.org/" - } - }, - { - "chainId": 101, - "address": "E6H5zSHB1cqLW8V7ypkhdQv2bDrZTnTKSYxWfgL8UMTm", - "symbol": "CAVIAR", - "name": "Caviar Token", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/somethingsfishy/caviar/caviar.png", - "tags": [ - "NFT", - "inflation", - "resistant", - "utility-token", - "community-token", - "community" - ], - "extensions": { - "discord": "https://discord.gg/zjtV3EjwUf", - "twitter": "https://twitter.com/fishynftmob", - "website": "https://somethingsfishy.art/" - } - }, - { - "chainId": 101, - "address": "BDy7QrC6JR987ZszfKCjTGwSSAcGEd9mRcDC2TSqNDkF", - "symbol": "LSO", - "name": "Les Sables d'Olonne Crypto", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/nguilbaud/token-list/main/assets/mainnet/BDy7QrC6JR987ZszfKCjTGwSSAcGEd9mRcDC2TSqNDkF/logo.png", - "tags": [ - "tourism", - "technology", - "community", - "community-token", - "utility-token" - ], - "extensions": { - "website": "https://www.lessablesdolonne.fr/" - } - }, - { - "chainId": 101, - "address": "zwqe1Nd4eiWyCcqdo4FgCq7LYZHdSeGKKudv6RwiAEn", - "symbol": "SOLPAY", - "name": "SOLPAY", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/nguilbaud/token-list/main/assets/mainnet/zwqe1Nd4eiWyCcqdo4FgCq7LYZHdSeGKKudv6RwiAEn/logo.png", - "tags": ["DeFi", "technology", "utility-token"], - "extensions": { - "telegram": "https://t.me/solpayfinance", - "twitter": "https://twitter.com/SolPayDeFi", - "website": "https://solpay.finance" - } - }, - { - "chainId": 101, - "address": "HmRpcXedRLmWaRt5iFjsPUfoSTViZgHNSmU5RUmJFZu5", - "symbol": "ENEC", - "name": "ENEC", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/alexminden/logo/main/enec-logo/main_logo.png" - }, - { - "chainId": 101, - "address": "4mkDXzvwMoP11MtKkgMfZW28xbdwY1gsMBz9N6pxdLbU", - "symbol": "GGLD", - "name": "GreenGoldCoin", - "decimals": 4, - "logoURI": "https://www.greengoldcoin.com/public/GreenGoldCoin-logo-128.png", - "tags": ["utility-token", "payment-token"], - "extensions": { - "facebook": "https://www.facebook.com/GreenGoldCoin/", - "instagram": "https://www.instagram.com/explore/tags/greengoldcoin", - "linkedin": "https://www.linkedin.com/company/40953073", - "telegram": "https://t.me/greengoldcoinICO", - "twitter": "https://twitter.com/GreenGoldCoins", - "website": "https://www.greengoldcoin.com", - "youtube": "https://www.youtube.com/channel/UCtUgroJeJEWx6VUuV_2ooPQ" - } - }, - { - "chainId": 101, - "address": "EE5L8cMU4itTsCSuor7NLK6RZx6JhsBe8GGV3oaAHm3P", - "symbol": "AVDO", - "name": "AvocadoCoin", - "decimals": 8, - "logoURI": "http://avocadocoin.com/public/AvocadoCoin-logo-128.png", - "tags": [ - "utility-token", - "payment-token", - "hybrid-token", - "agro-token", - "IoT-token" - ], - "extensions": { - "coingeckoId": "avocadocoin", - "coinmarketcap": "https://coinmarketcap.com/currencies/avocadocoin/", - "facebook": "https://www.facebook.com/avocadocoins/", - "instagram": "https://www.instagram.com/avocadocoin", - "telegram": "https://t.me/AvocadoCoinOfficial", - "twitter": "https://twitter.com/avocadocoin", - "website": "http://www.avocadocoin.com", - "youtube": "https://www.youtube.com/channel/UCnMds055w0M3-_4GDjJsUKw" - } - }, - { - "chainId": 103, - "address": "FQxi8FaHaLtFzW1bZK3zuq2bWFxbJeeiUaUD5WY5oE17", - "symbol": "LORDA", - "name": "Lord Arena", - "decimals": 9, - "logoURI": "https://lordarena.com/public/filemanager/userfiles/logo-lordarena-png-min@2x.png", - "tags": ["NFT"], - "extensions": { - "website": "https://lordarena.com" - } - }, - { - "chainId": 103, - "address": "EW1fpr5t8rge8wSaxFztPjmNMBeb4knaW6pcHtrQhZSt", - "symbol": "SMILE", - "name": "Smiles", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/oboxodo/solana-tokens/main/assets/devnet/EW1fpr5t8rge8wSaxFztPjmNMBeb4knaW6pcHtrQhZSt/smile-logo-256.png" - }, - { - "chainId": 101, - "address": "G1NChRwNJG8BJAPfRCzq7t1aH5UTjdytCEGBDbQHCYcE", - "symbol": "EPC", - "name": "Elliptic", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/G1NChRwNJG8BJAPfRCzq7t1aH5UTjdytCEGBDbQHCYcE/logo.png" - }, - { - "chainId": 101, - "address": "5sBG2b32gk3jsd5azCK4Xs8jH9V6szz3vm9fi7v2cRrC", - "symbol": "CPR", - "name": "Crypto Republic", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5sBG2b32gk3jsd5azCK4Xs8jH9V6szz3vm9fi7v2cRrC/logo.png", - "extensions": { - "website": "https://cryptorepublictoken.com/" - } - }, - { - "chainId": 101, - "address": "7HqhfUqig7kekN8FbJCtQ36VgdXKriZWQ62rTve9ZmQ", - "symbol": "mSOL-SOL", - "name": "Mercurial LP Token (mSOL-2Pool)", - "decimals": 12, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7HqhfUqig7kekN8FbJCtQ36VgdXKriZWQ62rTve9ZmQ/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://www.mercurial.finance/" - } - }, - { - "chainId": 103, - "address": "6xnQiCheV7U6wNZRjKPjan8qpE69yRzSPRb742KSHZYe", - "symbol": "SPK", - "name": "SPL Token", - "decimals": 6, - "logoURI": "https://dl.dropboxusercontent.com/s/j9e71gm4dwitxgp/token.png?dl=0", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "53K4DK7D5vY8wmi3dxNphekBETQHFhqpa2VPwR4DQjvj", - "symbol": "SOLINU", - "name": "SOLINU", - "decimals": 9, - "logoURI": "" - }, - { - "chainId": 101, - "address": "AYb1hhPDFxGADUGKbCfe7qUvyHct3ucqvkmCS65y2HtA", - "symbol": "AKT", - "name": "Alexey Kulikov Token", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/pobegov/ak-token/logo.png" - }, - { - "chainId": 101, - "address": "AWEqvJZhJzD8oJ3MacpbG3mvS4nTgCUBFSjxVuwqetXK", - "symbol": "GPUT", - "name": "GUTA Parallel Universe Token", - "decimals": 9, - "logoURI": "https://github.com/GAtuBAN/GPUT/blob/main/Gput.png", - "tags": ["lgame-fi-token"], - "extensions": { - "discord": "https://discord.gg/kemp5JZZVc" - } - }, - { - "chainId": 101, - "address": "3kHwk8N4c3j1Jtq28v5sFpvX6DBBcB6L4D6xqq6LhULh", - "symbol": "GGG", - "name": "Good Games Guild", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3kHwk8N4c3j1Jtq28v5sFpvX6DBBcB6L4D6xqq6LhULh/logo.png", - "tags": [ - "GameFi", - "NFT", - "dao", - "utility-token", - "meta-verse", - "governance" - ], - "extensions": { - "discord": "https://discord.gg/x47U9qkR5K", - "medium": "https://medium.com/@goodgamesguild/", - "telegram": "https://t.me/GoodGamesGuildChat", - "twitter": "https://twitter.com/goodgamesguild", - "website": "https://goodgamesguild.com" - } - }, - { - "chainId": 101, - "address": "GmwiyYf1Biz9XjgofNBMdKSTgz134pmHWPhBanAFfDfa", - "symbol": "ENT", - "name": "Entropy", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GmwiyYf1Biz9XjgofNBMdKSTgz134pmHWPhBanAFfDfa/logo.png", - "extensions": { - "discord": "https://discord.gg/dVjvdgwvf4", - "medium": "https://medium.com/@entropyofficial", - "telegram": "https://t.me/entropy_official", - "twitter": "https://twitter.com/entropy_dex", - "website": "https://www.entropy.gold" - } - }, - { - "chainId": 101, - "address": "DTn6z1ikPcKa62KHeP7wFgSrq2NvCC1zEUqyJvTdso17", - "symbol": "PHX", - "name": "Phinx", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DTn6z1ikPcKa62KHeP7wFgSrq2NvCC1zEUqyJvTdso17/logo.png" - }, - { - "chainId": 101, - "address": "21cpwEpusR6gR65T3ymiJx16VS7M8VCqRTY4XjQbLBwh", - "symbol": "FISH", - "name": "CATPUNK TOKEN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/minh-git/docusaurus-2/main/catpunk.png", - "tags": ["NFT", "dao", "utility-token", "meta-verse", "governance"], - "extensions": { - "discord": "https://discord.gg/catpunk", - "twitter": "https://twitter.com/ZodiLabOfficial", - "website": "https://catpunk.net" - } - }, - { - "chainId": 101, - "address": "Ee9zTuGPX1YpAnpgPm5pi2juy8NrGQnky5RspvFh8JfE", - "symbol": "ATT", - "name": "AlterToken", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/brunofaczz/alter-logo/logo.png" - }, - { - "chainId": 101, - "address": "2e7yNwrmTgXp9ABUmcPXvFJTSrEVLj4YMyrb4GUM4Pdd", - "symbol": "MSI", - "name": "Matrix Solana Index", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2e7yNwrmTgXp9ABUmcPXvFJTSrEVLj4YMyrb4GUM4Pdd/logo.png", - "tags": ["utility-token"], - "extensions": { - "coingeckoId": "matrix-solana-index", - "telegram": "https://t.me/MatrixETF", - "twitter": "https://twitter.com/MatrixETF", - "website": "https://www.matrixetf.finance/" - } - }, - { - "chainId": 101, - "address": "2fNw2cs23CV2X6JFA4CprbNbk3GcctFH8FcXSDPBkd7X", - "symbol": "FISH", - "name": "CATPUNK TOKEN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/minh-git/docusaurus-2/main/catpunk.png", - "tags": ["NFT", "dao", "utility-token", "meta-verse", "governance"], - "extensions": { - "discord": "https://discord.gg/catpunk", - "twitter": "https://twitter.com/ZodiLabOfficial", - "website": "https://catpunk.net" - } - }, - { - "chainId": 101, - "address": "3Cm1DDX9K9emkjjHoJJKXwwcDpREGxRzLyNgMSCy49zB", - "symbol": "CHEESE", - "name": "Cheese", - "decimals": 9, - "logoURI": "https://assets.solmice.com/file/solmice/cheese/images/757105.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/SolmiceNFT", - "website": "https://solmice.com" - } - }, - { - "chainId": 101, - "address": "2HeykdKjzHKGm2LKHw8pDYwjKPiFEoXAz74dirhUgQvq", - "symbol": "SAO", - "name": "Sator", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2HeykdKjzHKGm2LKHw8pDYwjKPiFEoXAz74dirhUgQvq/Sator_Logo.png", - "tags": ["NFT", "soical-token", "utility-token", "meta-verse"], - "extensions": { - "coingeckoId": "sator", - "github": "https://github.com/SatorNetwork", - "medium": "https://satortoken.medium.com", - "telegram": "https://t.me/SatorSAO", - "twitter": "https://twitter.com/SatorSAO", - "website": "https://sator.io" - } - }, - { - "chainId": 101, - "address": "5ENUvV3Ur3o3Fg6LVRfHL4sowidiVTMHHsEFqNJXRz6o", - "symbol": "LIZARD", - "name": "Lizard Token", - "decimals": 4, - "logoURI": "http://lizardtoken.xyz/gallery/lizard_logo-ts1634859660.jpg", - "extensions": { - "coingeckoId": "lizard-token", - "discord": "https://discord.gg/zMvCkck2k2", - "twitter": "https://twitter.com/Lizard_Token", - "website": "http://www.lizardToken.xyz" - } - }, - { - "chainId": 101, - "address": "9yqPadcWQQ4BnuEbEZci1M5pTQYV8LX1HvckYwXoACdL", - "symbol": "MYCTY", - "name": "My Crypto City", - "decimals": 6, - "logoURI": "http://mycryptocity.net/wp-content/uploads/2021/10/cropped-HDLog2.png", - "tags": ["utility-token", "game", "play2earn"], - "extensions": { - "telegram": "https://t.me/mycryptocity", - "twitter": "https://twitter.com/MyCrypto_City", - "website": "https://mycryptocity.net/" - } - }, - { - "chainId": 101, - "address": "DhuzmUvC4YTRDJwFfPSynDCGaJcMotnqjdNcGeFFrQSD", - "symbol": "PAD", - "name": "Lilypad", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DhuzmUvC4YTRDJwFfPSynDCGaJcMotnqjdNcGeFFrQSD/logo.png", - "extensions": { - "discord": "https://discord.gg/DFdyP9saU6", - "twitter": "https://twitter.com/HypnoFrogzNFT" - } - }, - { - "chainId": 101, - "address": "4SZjjNABoqhbd4hnapbvoEPEqT8mnNkfbEoAwALf1V8t", - "symbol": "CAVE", - "name": "Crypto Cavemen", - "decimals": 6, - "logoURI": "https://ftoblquxiunjey7bu4eevlz2u7kwg5s3yvou7adgge2jbihcu7qq.arweave.net/LNwVwpdFGpJj4acISq86p9VjdlvFXU-AZjE0kKDip-E/?ext=png", - "tags": ["utility-token", "game", "play2earn"], - "extensions": { - "coingeckoId": "cave", - "discord": "https://discord.com/invite/cryptocavemen", - "twitter": "https://twitter.com/TheCavemenClub", - "website": "https://cryptocavemen.io" - } - }, - { - "chainId": 101, - "address": "GFX1ZjR2P15tmrSwow6FjyDYcEkoFb4p4gJCpLBjaxHD", - "symbol": "GOFX", - "name": "GooseFX", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GFX1ZjR2P15tmrSwow6FjyDYcEkoFb4p4gJCpLBjaxHD/logo.png", - "tags": ["NFT", "utility-token", "dao", "governance"], - "extensions": { - "coingeckoId": "goosefx", - "coinmarketcap": "https://coinmarketcap.com/currencies/goosefx/", - "discord": "https://discord.gg/cDEPXpY26q", - "serumV3Usdc": "2wgi2FabNsSDdb8dke9mHFB67QtMYjYa318HpSqyJLDD", - "telegram": "https://t.me/goosefx", - "twitter": "https://twitter.com/GooseFX1", - "website": "https://goosefx.io" - } - }, - { - "chainId": 101, - "address": "EzfgjvkSwthhgHaceR3LnKXUoRkP6NUhfghdaHAj1tUv", - "symbol": "FTT", - "name": "FTX Token (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EzfgjvkSwthhgHaceR3LnKXUoRkP6NUhfghdaHAj1tUv/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x50d1c9771902476076ecfc8b2a83ad6b9355a4c9", - "assetContract": "https://etherscan.io/address/0x50d1c9771902476076ecfc8b2a83ad6b9355a4c9", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "ftx-token", - "serumV3Usdc": "2wteg25ch227n4Rh1CN4WNrDZXBpRBpWJ48mEC2K7f4r", - "serumV3Usdt": "BoHojHESAv4McZx9gXd1bWTZMq25JYyGz4qL1m5C3nvk" - } - }, - { - "chainId": 101, - "address": "9vMJfxuKxXBoEa7rM12mYLMwTacLMLDJqHozw96WQL8i", - "symbol": "UST", - "name": "UST (Portal)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9vMJfxuKxXBoEa7rM12mYLMwTacLMLDJqHozw96WQL8i/logo.png", - "tags": ["wrapped", "wormhole", "stablecoin"], - "extensions": { - "address": "uusd", - "bridgeContract": "https://finder.terra.money/columbus-5/address/terra10nmmwe8r3g99a9newtqa7a75xfgs2e8z87r2sf", - "coingeckoId": "terrausd", - "serumV3Usdc": "8WmckvEoVGZvtN8knjdzFGbWJ3Sr4BcWdyzSYuCrD4YK" - } - }, - { - "chainId": 101, - "address": "7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs", - "symbol": "ETH", - "name": "Ether (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "assetContract": "https://etherscan.io/address/0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "ethereum", - "serumV3Usdc": "8Gmi2HhZmwQPVdCwzS7CM66MGstMXPcTVHA7jF19cLZz", - "serumV3Usdt": "ch7kmPrtoQUSEPBggcNAvLGiMQkJagVwd3gDYfd8m7Q" - } - }, - { - "chainId": 101, - "address": "xnorPhAzWXUczCP3KjU5yDxmKKZi5cSbxytQ1LgE3kG", - "symbol": "SRMet", - "name": "Serum (Portal from Ethereum)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/xnorPhAzWXUczCP3KjU5yDxmKKZi5cSbxytQ1LgE3kG/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x476c5e26a75bd202a9683ffd34359c0cc15be0ff", - "assetContract": "https://etherscan.io/address/0x476c5e26a75bd202a9683ffd34359c0cc15be0ff", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "serum" - } - }, - { - "chainId": 101, - "address": "F6v4wfAdJB8D8p77bMXZgYt8TDKsYxLYxH5AFhUkYx9W", - "symbol": "LUNA", - "name": "LUNA (Portal)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/F6v4wfAdJB8D8p77bMXZgYt8TDKsYxLYxH5AFhUkYx9W/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "uluna", - "bridgeContract": "https://finder.terra.money/columbus-5/address/terra10nmmwe8r3g99a9newtqa7a75xfgs2e8z87r2sf", - "coingeckoId": "terra-luna", - "serumV3Usdc": "HBTu8hNaoT3VyiSSzJYa8jwt9sDGKtJviSwFa11iXdmE" - } - }, - { - "chainId": 101, - "address": "KgV1GvrHQmRBY8sHQQeUKwTm2r2h8t4C8qt12Cw1HVE", - "symbol": "AVAX", - "name": "AVAX (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/KgV1GvrHQmRBY8sHQQeUKwTm2r2h8t4C8qt12Cw1HVE/logo.png", - "tags": ["wrapped"], - "extensions": { - "address": "0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7", - "assetContract": "https://snowtrace.io/token/0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7", - "bridgeContract": "https://snowtrace.io/address/0x0e082f06ff657d94310cb8ce8b0d9a04541d8052", - "coingeckoId": "avalanche-2", - "serumV3Usdc": "E8JQstcwjuqN5kdMyUJLNuaectymnhffkvfg1j286UCr" - } - }, - { - "chainId": 101, - "address": "7VQo3HFLNH5QqGtM8eC3XQbPkJUu7nS9LeGWjerRh5Sw", - "symbol": "HUSD", - "name": "HUSD (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7VQo3HFLNH5QqGtM8eC3XQbPkJUu7nS9LeGWjerRh5Sw/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xdf574c24545e5ffecb9a659c229253d4111d87e1", - "assetContract": "https://etherscan.io/address/0xdf574c24545e5ffecb9a659c229253d4111d87e1", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "husd" - } - }, - { - "chainId": 101, - "address": "33fsBLA8djQm82RpHmE3SuVrPGtZBWNYExsEUeKX1HXX", - "symbol": "BUSDet", - "name": "Binance USD (Portal from Ethereum)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/33fsBLA8djQm82RpHmE3SuVrPGtZBWNYExsEUeKX1HXX/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x4fabb145d64652a948d72533023f6e7a623c7c53", - "assetContract": "https://etherscan.io/address/0x4fabb145d64652a948d72533023f6e7a623c7c53", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "binance-usd" - } - }, - { - "chainId": 101, - "address": "FR87nWEUxVgerFGhZM8Y4AggKGLnaXswr1Pd8wZ4kZcp", - "symbol": "FRAX", - "name": "Frax (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FR87nWEUxVgerFGhZM8Y4AggKGLnaXswr1Pd8wZ4kZcp/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x853d955acef822db058eb8505911ed77f175b99e", - "assetContract": "https://etherscan.io/address/0x853d955acef822db058eb8505911ed77f175b99e", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "frax" - } - }, - { - "chainId": 101, - "address": "7dVH61ChzgmN9BwG4PkzwRP8PbYwPJ7ZPNF2vamKT2H8", - "symbol": "HBTC", - "name": "Huobi BTC (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7dVH61ChzgmN9BwG4PkzwRP8PbYwPJ7ZPNF2vamKT2H8/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x0316eb71485b0ab14103307bf65a021042c6d380", - "assetContract": "https://etherscan.io/address/0x0316eb71485b0ab14103307bf65a021042c6d380", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "huobi-btc" - } - }, - { - "chainId": 101, - "address": "43m2ewFV5nDepieFjT9EmAQnc1HRtAF247RBpLGFem5F", - "symbol": "USDK", - "name": "USDK (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/43m2ewFV5nDepieFjT9EmAQnc1HRtAF247RBpLGFem5F/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x1c48f86ae57291f7686349f12601910bd8d470bb", - "assetContract": "https://etherscan.io/address/0x1c48f86ae57291f7686349f12601910bd8d470bb", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "usdk" - } - }, - { - "chainId": 101, - "address": "ChVzxWRmrTeSgwd3Ui3UumcN8KX7VK3WaD4KGeSKpypj", - "symbol": "SUSHI", - "name": "SushiToken (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ChVzxWRmrTeSgwd3Ui3UumcN8KX7VK3WaD4KGeSKpypj/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x6b3595068778dd592e39a122f4f5a5cf09c90fe2", - "assetContract": "https://etherscan.io/address/0x6b3595068778dd592e39a122f4f5a5cf09c90fe2", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "sushi", - "serumV3Usdc": "3uWVMWu7cwMnYMAAdtsZNwaaqeeeZHARGZwcExnQiFay", - "serumV3Usdt": "T3aC6qcPAJtX1gqkckfSxBPdPWziz5fLYRt5Dz3Nafq" - } - }, - { - "chainId": 101, - "address": "8FU95xFJhUUkyyCLU13HSzDLs7oC4QZdXQHL6SCeab36", - "symbol": "UNI", - "name": "Uniswap (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8FU95xFJhUUkyyCLU13HSzDLs7oC4QZdXQHL6SCeab36/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x1f9840a85d5af5bf1d1762f925bdaddc4201f984", - "assetContract": "https://etherscan.io/address/0x1f9840a85d5af5bf1d1762f925bdaddc4201f984", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "uniswap", - "serumV3Usdc": "B7b5rjQuqQCuGqmUBWmcCTqaL3Z1462mo4NArqty6QFR", - "serumV3Usdt": "FrKM6kJtAjXknHPEpkrQtJSXZwUxV5dq26wDpc4YjQST" - } - }, - { - "chainId": 101, - "address": "9gP2kCy3wA1ctvYWQk75guqXuHfrEomqydHLtcTCqiLa", - "symbol": "BNB", - "name": "Binance Coin (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9gP2kCy3wA1ctvYWQk75guqXuHfrEomqydHLtcTCqiLa/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c", - "assetContract": "https://bscscan.com/address/0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c", - "bridgeContract": "https://bscscan.com/address/0xB6F6D86a8f9879A9c87f643768d9efc38c1Da6E7", - "coingeckoId": "binance-coin", - "serumV3Usdc": "4UPUurKveNEJgBqJzqHPyi8DhedvpYsMXi7d43CjAg2f", - "serumV3Usdt": "FjbKNZME5yVSC1R3HJM99kB3yir3q3frS5MteMFD72sV" - } - }, - { - "chainId": 101, - "address": "2wpTofQ8SkACrkZWrZDjXPitYa8AwWgX8AfxdeBRRVLX", - "symbol": "LINK", - "name": "ChainLink Token (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2wpTofQ8SkACrkZWrZDjXPitYa8AwWgX8AfxdeBRRVLX/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x514910771af9ca656af840dff83e8264ecf986ca", - "assetContract": "https://etherscan.io/address/0x514910771af9ca656af840dff83e8264ecf986ca", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "chainlink", - "serumV3Usdc": "FJMjxMCiDKn16TLhXUdEbVDH5wC6k9EHYJTcrH6NcbDE", - "serumV3Usdt": "Gr2KmhK7Upr4uW56B1QQrJuhhgmot6zAHJeZALTMStiX" - } - }, - { - "chainId": 101, - "address": "C6oFsE8nXRDThzrMEQ5SxaNFGKoyyfWDDVPw37JKvPTe", - "symbol": "PAXG", - "name": "Paxos Gold (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/C6oFsE8nXRDThzrMEQ5SxaNFGKoyyfWDDVPw37JKvPTe/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x45804880de22913dafe09f4980848ece6ecbaf78", - "assetContract": "https://etherscan.io/address/0x45804880de22913dafe09f4980848ece6ecbaf78", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "pax-gold", - "serumV3Usdc": "BeyB6W2iNsH9qSfb7icLTmSPDu8oUGkarMZed4Unrnsr", - "serumV3Usdt": "9SQcpBFAs6ZiLAGUC9azYCN1kv89uTRmFR83sX1FTeh4" - } - }, - { - "chainId": 101, - "address": "HxhWkVpk5NS4Ltg5nij2G671CKXFRKPK8vy271Ub4uEK", - "symbol": "HXRO", - "name": "Hxro (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HxhWkVpk5NS4Ltg5nij2G671CKXFRKPK8vy271Ub4uEK/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x4bd70556ae3f8a6ec6c4080a0c327b24325438f3", - "assetContract": "https://etherscan.io/address/0x4bd70556ae3f8a6ec6c4080a0c327b24325438f3", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "hxro", - "serumV3Usdc": "CBb5zXwNRB73WVjs2m21P5prcEZa6SWmej74Vzxh8dRm", - "serumV3Usdt": "3BScwNxtMrEcQ5VTHyXHYQR98dTaxfyXGaLkuSjBY1dW" - } - }, - { - "chainId": 101, - "address": "3CyiEDRehaGufzkpXJitCP5tvh7cNhRqd9rPBxZrgK5z", - "symbol": "SXP", - "name": "Swipe (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3CyiEDRehaGufzkpXJitCP5tvh7cNhRqd9rPBxZrgK5z/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x8ce9137d39326ad0cd6491fb5cc0cba0e089b6a9", - "assetContract": "https://etherscan.io/address/0x8ce9137d39326ad0cd6491fb5cc0cba0e089b6a9", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "swipe", - "serumV3Usdc": "G5F84rfqmWqzZv5GBpSn8mMwW8zJ2B4Y1GpGupiwjHNM", - "serumV3Usdt": "2FQbPW1ticJz2SMMbEXxbKWJKmw1wLc6ggSP2HyzdMen" - } - }, - { - "chainId": 101, - "address": "6LX8BhMQ4Sy2otmAWj7Y5sKd9YTVVUgfMsBzT6B9W7ct", - "symbol": "FXS", - "name": "Frax Share (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6LX8BhMQ4Sy2otmAWj7Y5sKd9YTVVUgfMsBzT6B9W7ct/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x3432b6a60d23ca0dfca7761b7ab56459d9c964d0", - "assetContract": "https://etherscan.io/address/0x3432b6a60d23ca0dfca7761b7ab56459d9c964d0", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "frax-share" - } - }, - { - "chainId": 101, - "address": "nRtfwU9G82CSHhHGJNxFhtn7FLvWP2rqvQvje1WtL69", - "symbol": "CEL", - "name": "Celsius (Portal)", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/nRtfwU9G82CSHhHGJNxFhtn7FLvWP2rqvQvje1WtL69/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xaaaebe6fe48e54f431b0c390cfaf0b017d09d42d", - "assetContract": "https://etherscan.io/address/0xaaaebe6fe48e54f431b0c390cfaf0b017d09d42d", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "celsius-network-token", - "serumV3Usdc": "79ESpYSb2hM14KTRXPZUwDkxUGC5irE2esd1vxdXfnZz", - "serumV3Usdt": "J9ww1yufRNDDbUbDXmew2mW2ozkx7cme7dMvKjMQVHrL" - } - }, - { - "chainId": 101, - "address": "HihxL2iM6L6P1oqoSeiixdJ3PhPYNxvSKH9A2dDqLVDH", - "symbol": "CREAM", - "name": "Cream (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HihxL2iM6L6P1oqoSeiixdJ3PhPYNxvSKH9A2dDqLVDH/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x2ba592f78db6436527729929aaf6c908497cb200", - "assetContract": "https://etherscan.io/address/0x2ba592f78db6436527729929aaf6c908497cb200", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "cream", - "serumV3Usdc": "4pdQ2D4gehMhGu4z9jeQbEPUFbTxB5qcPr3zCynjJGyp", - "serumV3Usdt": "6fspxMfBmYFTGFBDN5MU33A55i2MkGr7eSjBLPCAU6y9" - } - }, - { - "chainId": 101, - "address": "6rbtgebh89nx2vd9EbzcTMhQS8pKUG9ggoGEijuMFUbC", - "symbol": "SHEIN", - "name": "Sheincoin", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6rbtgebh89nx2vd9EbzcTMhQS8pKUG9ggoGEijuMFUbC/logo.png", - "tags": ["utility-token", "game", "play2earn", "meta-verse", "shein"], - "extensions": { - "twitter": "https://twitter.com/SheinVerse", - "website": "https://sheinverse.com" - } - }, - { - "chainId": 101, - "address": "CrUHen2BpEpXfMtU1KZFYEHNZwhxCMovACdaEC7Q5zkB", - "symbol": "NFB", - "name": "NFBet", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CrUHen2BpEpXfMtU1KZFYEHNZwhxCMovACdaEC7Q5zkB/logo.png", - "tags": ["utility-token", "governance-token", "gaming", "NFTs"], - "extensions": { - "twitter": "https://twitter.com/nfbetofficial", - "website": "https://nfbet.io" - } - }, - { - "chainId": 101, - "address": "ZXS6KKnXeT9xAc3qt2wpwmfKT5p3UspFVKCPP8bVs2Z", - "symbol": "TMI", - "name": "TUMI", - "decimals": 4, - "logoURI": "https://cointumi.com/token.png", - "tags": ["utility-token", "governance-token", "gaming", "NFTs"], - "extensions": { - "telegram": "https://t.me/cointumi", - "website": "https://cointumi.com" - } - }, - { - "chainId": 101, - "address": "3k6zY8YUQsVPiXHh8Ncfw9BgMBcQzKq2B5TJfmSDbMZr", - "symbol": "PEP", - "name": "SolPepper", - "decimals": 4, - "logoURI": "https://lizardtoken.xyz/gallery/pepper-ts1635027628.jpg", - "extensions": { - "website": "https://solpepper.xyz" - } - }, - { - "chainId": 101, - "address": "5hownqSTYjtGJi1u117siKxLXBEAMhkRZaVBM21rwh86", - "symbol": "DOG", - "name": "DogSol", - "decimals": 4, - "logoURI": "https://lizardtoken.xyz/gallery/dog-ts1635027588.png", - "extensions": { - "website": "https://dogsol.xyz" - } - }, - { - "chainId": 101, - "address": "CmjegnBmHaEN2wbHTemVr1xwfgN61JZBgbtLkAa3WHM8", - "symbol": "SILVER", - "name": "SilverSol", - "decimals": 4, - "logoURI": "https://lizardtoken.xyz/gallery/silver-ts1635027635.png", - "extensions": { - "website": "https://silversol.xyz" - } - }, - { - "chainId": 101, - "address": "DjDBpTJdatCrfR4XRWgKiQ8WY6K6RNuMsyTKAQ8rK9Rp", - "symbol": "BRD", - "name": "SolBird", - "decimals": 4, - "logoURI": "https://lizardtoken.xyz/gallery/bird-ts1635027934.png", - "extensions": { - "website": "https://solbird.xyz" - } - }, - { - "chainId": 101, - "address": "BfbhLmrhtELjfFzrtcxpB1GoTpmiVK8qcpSYf7AM914h", - "symbol": "BIRD", - "name": "SolBird2", - "decimals": 4, - "logoURI": "https://lizardtoken.xyz/gallery/bird2-ts1635029482.png", - "extensions": { - "website": "https://solbird2.xyz" - } - }, - { - "chainId": 101, - "address": "7pFo8CrTJuQFxRaTJT7k2TEQFGMijcGjQpcc4hFcmco1", - "symbol": "CAT", - "name": "SolCat", - "decimals": 4, - "logoURI": "https://lizardtoken.xyz/gallery/cat-ts1635027580.jpg", - "extensions": { - "website": "https://solcat.xyz" - } - }, - { - "chainId": 101, - "address": "3Wup5AtKjDki1yX75WZuzGbqrNJTmLPvVPMwWEhBNKES", - "symbol": "BLISS", - "name": "SolFlower", - "decimals": 4, - "logoURI": "https://lizardtoken.xyz/gallery/flower-ts1635027605.jpg", - "extensions": { - "website": "https://solflower.xyz" - } - }, - { - "chainId": 101, - "address": "A8fqp3MkJnDH9L5UzUdckfv2HPAzpqPbpFMRmnYGkZsj", - "symbol": "DRGN", - "name": "DragonSol", - "decimals": 4, - "logoURI": "https://lizardtoken.xyz/gallery/dragon-ts1635027595.jpg", - "extensions": { - "website": "https://dragonsol.xyz" - } - }, - { - "chainId": 101, - "address": "7TXxsfjYt8gR1XZh9vZZNRxhA4t2VxtYbsy9JWHRjFhJ", - "symbol": "MOON", - "name": "MoonSol", - "decimals": 4, - "logoURI": "https://lizardtoken.xyz/gallery/moon-ts1635027621.jpg", - "extensions": { - "website": "https://moonsol.xyz" - } - }, - { - "chainId": 101, - "address": "E1zxRweqCWzviAraKjNjqupuyYTzm1bukJgb8KiBN1sN", - "symbol": "GOLD", - "name": "SolGold", - "decimals": 5, - "logoURI": "https://lizardtoken.xyz/gallery/gold-ts1635027612.jpg", - "extensions": { - "website": "https://solgold.xyz" - } - }, - { - "chainId": 101, - "address": "E5H5mHzUA8pRSL4X2ovv4sZMSorYk56EtCbQExQveRGJ", - "symbol": "MPPLC", - "name": "MoppelCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/E5H5mHzUA8pRSL4X2ovv4sZMSorYk56EtCbQExQveRGJ/logo.png", - "tags": ["coin"], - "extensions": { - "website": "https://sites.google.com/view/moppelcoin/startseite" - } - }, - { - "chainId": 101, - "address": "9xtsYLJjGhwKHxoZf1XU519bwSzwC4gf3XSVy9wZLpNz", - "symbol": "STSNP", - "name": "StarSnuppy", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9xtsYLJjGhwKHxoZf1XU519bwSzwC4gf3XSVy9wZLpNz/logo.png", - "tags": ["coin"], - "extensions": { - "website": "https://starsnuppy.wordpress.com/" - } - }, - { - "chainId": 101, - "address": "BiJQPSEhHKQwMy5n9k66TWhDzXBjSNWTdTEfua164jXF", - "symbol": "JTSN", - "name": "Jetson", - "decimals": 9, - "logoURI": "https://i.ibb.co/8zcfqM3/jetson.jpg", - "tags": ["coin", "AI", "IoT", "Automation"], - "extensions": { - "website": "https://www.jetson.ai/" - } - }, - { - "chainId": 101, - "address": "9bQXrgpNYf9V2QgH6z8diP5e96c18REcDQXd87XCPkZw", - "symbol": "BOLELD", - "name": "BLD", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/assets/9bQXrgpNYf9V2QgH6z8diP5e96c18REcDQXd87XCPkZw/logo.png", - "extensions": { - "website": "https://boleld.newboletoken.com" - } - }, - { - "chainId": 101, - "address": "FLpjpb5hLKBeTneMPe2KVocDxoZCg1Xz7d9ekKZJ2e2n", - "symbol": "LAMP", - "name": "Lamp", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/assets/FLpjpb5hLKBeTneMPe2KVocDxoZCg1Xz7d9ekKZJ2e2n/logo.png", - "tags": ["social-token", "lamp", "few"], - "extensions": { - "website": "https://lamp.church" - } - }, - { - "chainId": 101, - "address": "3CKQgrcvwhvFqVXXxLTb1u262nh26SJ3uutkSCTtbZxH", - "symbol": "TRBL", - "name": "Tribeland Governance Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/tribeland/token-list/main/assets/mainnet/3CKQgrcvwhvFqVXXxLTb1u262nh26SJ3uutkSCTtbZxH/logo.png", - "tags": ["game", "utility-token", "nft", "gaming", "metaverse"], - "extensions": { - "twitter": "https://twitter.com/tribe_land", - "website": "https://tribeland.io" - } - }, - { - "chainId": 101, - "address": "67LPcnaWesD3LirJn4hyaTF5HVcEGivA2iHvTQgd23TU", - "symbol": "OMG", - "name": "OMEGA", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/67LPcnaWesD3LirJn4hyaTF5HVcEGivA2iHvTQgd23TU/logo.png", - "tags": ["OMEGA-Token"] - }, - { - "chainId": 101, - "address": "Cf6rda8prASJemo9w4Q3NeBEM2pcYKK8aNZ5zLk4Dmzh", - "symbol": "FUS", - "name": "FUS Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Cf6rda8prASJemo9w4Q3NeBEM2pcYKK8aNZ5zLk4Dmzh/logo.png", - "tags": ["FUS-Token"], - "extensions": { - "website": "http://www.thehae.biz" - } - }, - { - "chainId": 101, - "address": "4WSv4nmFA8JRKWkV84DHRFWbwaUhaGjNbXibitXQiYGS", - "symbol": "AGC", - "name": "Automatic Get Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4WSv4nmFA8JRKWkV84DHRFWbwaUhaGjNbXibitXQiYGS/logo.png", - "tags": ["AGC-Token"] - }, - { - "chainId": 101, - "address": "GRoESmA4DZjd7MMgvzaDaswZHow75ies6Xje5FoXytDP", - "symbol": "VOO", - "name": "VooVoo Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GRoESmA4DZjd7MMgvzaDaswZHow75ies6Xje5FoXytDP/logo.png", - "tags": ["VOO-token"], - "extensions": { - "website": "https://www.voovoo.io" - } - }, - { - "chainId": 101, - "address": "8oiPhiFrmXS93iC98M4ATev8emQ6XGtf8pz8sntbbqGt", - "symbol": "OASIS", - "name": "Oasis", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8oiPhiFrmXS93iC98M4ATev8emQ6XGtf8pz8sntbbqGt/logo.png", - "tags": ["Utility-token", "game", "NFTs"], - "extensions": { - "website": "https://wonderwall.finance" - } - }, - { - "chainId": 101, - "address": "HHXMCAQGw4SNfwJ3FqTJdFgt2M8GqggFk9cRm4jLYPDB", - "symbol": "Ticket", - "name": "Valknut Gold", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HHXMCAQGw4SNfwJ3FqTJdFgt2M8GqggFk9cRm4jLYPDB/logo.svg", - "tags": ["utility-token", "gift", "game-coin", "gaming"], - "extensions": { - "discord": "https://discord.com/invite/JXKEDfYGGa", - "twitter": "https://twitter.com/solvikingsnft", - "website": "https://solvikings.com/" - } - }, - { - "chainId": 101, - "address": "KUPoVbJmipJb1M7xzQEND5w7u1BbmBytu9wZ2QPjQx4", - "symbol": "CUBE", - "name": "Cubecoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/KUPoVbJmipJb1M7xzQEND5w7u1BbmBytu9wZ2QPjQx4/logo.png", - "tags": ["meme", "community", "cube"], - "extensions": { - "description": "Become the hodl champion.", - "serumV3Usdc": "Gjxg4x8BturwnABaTeHvasgHPXvgLDVnu927ttu7BsAg", - "website": "https://cubecoin.army" - } - }, - { - "chainId": 101, - "address": "3dmtKhD4bGXXdticPXyEeV3WF3mHcEucpSyJbUZum5cG", - "symbol": "CSFCOIN", - "name": "Cage Fight Series Coin", - "decimals": 8, - "logoURI": "https://file.avant-iconic.com/cfstoken.png", - "extensions": { - "description": "Official Cage Fight Series Coin", - "website": "https://coin.cage-fight-series.com" - } - }, - { - "chainId": 101, - "address": "5fixLvM5hyZjX6JSE2wBojoJXoUQw1mE4vLVGYXkjuUU", - "symbol": "BTCN", - "name": "BatkaCoin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5fixLvM5hyZjX6JSE2wBojoJXoUQw1mE4vLVGYXkjuUU/logo.svg" - }, - { - "chainId": 101, - "address": "CpwH9nYz2CwsY7vVqxWbJxAWuvH7KnwP5B9JzoSHYdCA", - "symbol": "SHELL", - "name": "Tribeland Game Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/tribeland/token-list/main/assets/mainnet/CpwH9nYz2CwsY7vVqxWbJxAWuvH7KnwP5B9JzoSHYdCA/logo.png", - "tags": ["game", "utility-token", "nft", "gaming", "metaverse"], - "extensions": { - "twitter": "https://twitter.com/tribe_land", - "website": "https://tribeland.io" - } - }, - { - "chainId": 101, - "address": "GyQK99iAgAoDvQBRAtFfw6j12gGncXbLHPacEENAVN1K", - "symbol": "VST", - "name": "VISTA", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GyQK99iAgAoDvQBRAtFfw6j12gGncXbLHPacEENAVN1K/logo.png" - }, - { - "chainId": 101, - "address": "3hNGkEXhVEbZWdb6Sd5nn8PQP2RBaKfcF8VYGaY4uqUZ", - "symbol": "KSC", - "name": "KISSCOIN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/tribeland/token-list/main/assets/mainnet/3hNGkEXhVEbZWdb6Sd5nn8PQP2RBaKfcF8VYGaY4uqUZ/logo.png", - "extensions": { - "website": "https://www.kisscrypto.net/", - "whitepaper": "https://ae283fe9-fab9-4865-a65a-bcd5559ada09.filesusr.com/ugd/0a74e1_8d61680fa97d40568d9f7adba2eccfd7.pdf" - } - }, - { - "chainId": 101, - "address": "CGTXWnsZiJExZcCTaEKdXP5c7TL733bJo3ttqhtC1Gf1", - "symbol": "TRASH", - "name": "Trashy Pandas", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/22af25161ae56204dbb85a6cc9906875e4582681/assets/mainnet/CGTXWnsZiJExZcCTaEKdXP5c7TL733bJo3ttqhtC1Gf1/logo.png", - "tags": ["utility-token", "nft"], - "extensions": { - "twitter": "https://twitter.com/trashypandasNFT", - "website": "https://www.trashypanda.com" - } - }, - { - "chainId": 101, - "address": "SAMUmmSvrE8yqtcG94oyP1Zu2P9t8PSRSV3vewsGtPM", - "symbol": "SAMU", - "name": "Samusky Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SAMUmmSvrE8yqtcG94oyP1Zu2P9t8PSRSV3vewsGtPM/logo.png", - "tags": ["social-token", "community-token"], - "extensions": { - "coingeckoId": "samusky-token", - "coinmarketcap": "https://coinmarketcap.com/currencies/samusky/", - "discord": "https://discord.gg/samuskyio", - "github": "https://github.com/samuskyio", - "serumV3Usdc": "7PX2k66ecaUJHJweNbdCocR4kvPotvDn2FPu69svCsnu", - "telegram": "https://t.me/samuskyio", - "twitter": "https://twitter.com/samuskyio", - "website": "https://samusky.io" - } - }, - { - "chainId": 101, - "address": "27NnGuWWsJ2aJvG85D27eiYBCcfc8LcFcvuW5yHM6gSz", - "symbol": "BLC", - "name": "bl Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/27NnGuWWsJ2aJvG85D27eiYBCcfc8LcFcvuW5yHM6gSz/logo.png", - "tags": ["trash", "testing"] - }, - { - "chainId": 101, - "address": "2FkuyFr3N9RzvVahPqzXKfa8H9KhYpChwQZSeMKkkVPJ", - "symbol": "SMBT", - "name": "Monke Token", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2FkuyFr3N9RzvVahPqzXKfa8H9KhYpChwQZSeMKkkVPJ/logo.png", - "extensions": { - "serumV3Usdc": "ENetSmU7WTBTcTXC7Q4WcYYw3WjgwmSFTaTECBtY1Wz9", - "twitter": "https://twitter.com/TokenMonke", - "website": "https://tokenmonke.github.io/SMBT/" - } - }, - { - "chainId": 101, - "address": "7hMNi9EVTTRyuUH7FybEcPLa7uG6amLWW8xAmV8qi47", - "symbol": "DIRT", - "name": "SolWorms", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solanadevv/token-list/3f415a0fbe16c25e699842c8dfed327a0fbfc727/assets/mainnet/7hMNi9EVTTRyuUH7FybEcPLa7uG6amLWW8xAmV8qi47/logo.png", - "tags": ["utility-token", "nft"], - "extensions": { - "twitter": "https://twitter.com/SolanaWorms", - "website": "https://www.solworms.com" - } - }, - { - "chainId": 103, - "address": "9vXqVi6UsD9JZwzfZoyQmVusCeUWPv1D1ZcWTpX5hxDu", - "symbol": "GHT", - "name": "Ghost Token", - "decimals": 9, - "logoURI": "https://bitexcer.com/llgo/7786848711618135046.svg", - "tags": ["GHT"], - "extensions": { - "instagram": "https://www.instagram.com/bitexcer/", - "telegram": "https://t.me/bitexcer_info", - "twitter": "https://twitter.com/bitexcer", - "website": "https://bitexcer.com", - "youtube": "https://www.youtube.com/channel/UCmRkuXFFDYe5ISENoCkO6AA" - } - }, - { - "chainId": 101, - "address": "7s5A6XukBCsM7S4EtHsNFzQfvztRdwZWGn1pQwQYfWBm", - "symbol": "CERT", - "name": "CERT", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/identicert/cryptoverse/main/img/tokens/cert.png", - "tags": ["security-token", "utility-token"], - "extensions": { - "twitter": "https://twitter.com/identicert", - "website": "https://identicert.com/" - } - }, - { - "chainId": 101, - "address": "ALbwwCnYj5Mf8S7k4QTSqezLbTMmpVdrv2SMYJTu4v9W", - "symbol": "IDEN", - "name": "IDEN", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/identicert/cryptoverse/main/img/tokens/iden.png", - "tags": ["security-token", "utility-token"], - "extensions": { - "twitter": "https://twitter.com/identicert", - "website": "https://identicert.com/" - } - }, - { - "chainId": 101, - "address": "8z1jFyg9heBFvKVvqMHJQ4UXQqomNpYZHWCsEJhQYaBd", - "symbol": "VIP", - "name": "Bored Rockstar Club", - "decimals": 9, - "logoURI": "https://github.com/solanadevv/token-list/blob/f73febc241c52ad0b977cd12fcf15d706b49a211/assets/mainnet/8z1jFyg9heBFvKVvqMHJQ4UXQqomNpYZHWCsEJhQYaBd/logo.png?raw=true", - "tags": ["utility-token", "nft"], - "extensions": { - "twitter": "https://twitter.com/RockstarClubNFT", - "website": "https://www.boredrockstarclub.com" - } - }, - { - "chainId": 101, - "address": "CrLXpyFeJQbhhkjWcrXGyXcY56KtWEPQmZQpjf853wFG", - "symbol": "YUPPIE", - "name": "Sol80s", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solanadevv/token-list/8bf46f7c84f27a7d51fd233eaca5f064bbf87ba5/assets/mainnet/CrLXpyFeJQbhhkjWcrXGyXcY56KtWEPQmZQpjf853wFG/logo.png", - "tags": ["utility-token", "nft"], - "extensions": { - "twitter": "https://twitter.com/SolEighties", - "website": "https://www.sol80s.com" - } - }, - { - "chainId": 101, - "address": "3UCH5emeLYr5zT41gzrKL9r7ACnQJETr9rJyXK6okuaL", - "symbol": "FANTASY", - "name": "SolFantasy", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solanadevv/token-list/fadf50a0b566216005de963d7afbf2c36047f087/assets/mainnet/3UCH5emeLYr5zT41gzrKL9r7ACnQJETr9rJyXK6okuaL/logo.png", - "tags": ["utility-token", "nft"], - "extensions": { - "twitter": "https://twitter.com/SolFantasyGirls", - "website": "http://solfantasy.com" - } - }, - { - "chainId": 101, - "address": "8g2241fQ8fJamupx79UPqrFEVz851inAqYD7F8eDSSJG", - "symbol": "TIKI", - "name": "SolMaori", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solanadevv/token-list/80a087f36770f46a9f28cc4e1eb78891d4cdd90a/assets/mainnet/8g2241fQ8fJamupx79UPqrFEVz851inAqYD7F8eDSSJG/logo.png", - "tags": ["utility-token", "nft"], - "extensions": { - "twitter": "https://twitter.com/solmaori", - "website": "https://www.solmaori.com" - } - }, - { - "chainId": 101, - "address": "EFKLgGMeGCLzGtJi6NUFSPE7y3ZaShyhhKNy4CubvFxx", - "symbol": "TRUTH", - "name": "TruthToken", - "decimals": 9, - "logoURI": "https://static.wixstatic.com/media/4ffb16_93f9f9561b054cf09ea60fd3d8c1072b~mv2.png", - "tags": ["meme"], - "extensions": { - "twitter": "https://twitter.com/truthtokenco", - "website": "https://www.truthtoken.co" - } - }, - { - "chainId": 101, - "address": "GWRYczsoTksFqiwcrBRiXjihcL9g9udaAQAMeBSczf6h", - "symbol": "SHBL LP token", - "name": "SHBL-USDC Cropper LP", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DubwWZNWiNGMMeeQHPnMATNj77YZPZSAz2WVR5WjLJqz/logo.png", - "tags": ["utility-token", "lp-token"], - "extensions": { - "website": "https://cropper.finance/farms/" - } - }, - { - "chainId": 101, - "address": "8WR1cJ2RvcqFMNpsaBdUHamsibv8ywcCwmUAMg6ob1Xo", - "symbol": "VIBES", - "name": "Vibes", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8WR1cJ2RvcqFMNpsaBdUHamsibv8ywcCwmUAMg6ob1Xo/logo.png", - "tags": ["utility-token", "game"], - "extensions": { - "discord": "https://discord.gg/7Z4XbB7bDu", - "twitter": "https://twitter.com/vibratinghamstr", - "website": "https://www.vibratinghamster.com/" - } - }, - { - "chainId": 101, - "address": "HM9jjC8gThNDfFv3TRWqUdfJp5onWGDXhWirm5sUcFhj", - "symbol": "NERD", - "name": "SolNerds", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solanadevv/token-list/a9a2654d9f5a41feeefab9e15337418a1eb7c08c/assets/mainnet/HM9jjC8gThNDfFv3TRWqUdfJp5onWGDXhWirm5sUcFhj/logo.png", - "tags": ["utility-token", "nft"], - "extensions": { - "twitter": "https://twitter.com/SolNerdsNFT", - "website": "https://www.solnerds.com" - } - }, - { - "chainId": 101, - "address": "4cTDXDzieiTk2qibwtXty8UzvXGZXfd92dK3SF2EuKuV", - "symbol": "DogeSOL", - "name": "DogeSOL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solanadevv/token-list/main/assets/mainnet/4cTDXDzieiTk2qibwtXty8UzvXGZXfd92dK3SF2EuKuV/logo.png", - "tags": ["Doge"], - "extensions": { - "twitter": "https://twitter.com/Doge_Solana", - "website": "https://dogesol.com/" - } - }, - { - "chainId": 101, - "address": "CuEi5x3nzHcCmiyG7CMPRiKNBhGKt9gyUtXkPK347eqa", - "symbol": "BARK", - "name": "BARK", - "decimals": 6, - "logoURI": "https://cdn.jsdelivr.net/gh/solanabark/solbark/logobark.png", - "tags": ["Meme", "Meme-Token", "doge", "shib", "bark"], - "extensions": { - "twitter": "https://twitter.com/solbark" - } - }, - { - "chainId": 101, - "address": "9Exx2WQUZkRwbLB9RxSVThGdkuYdgCWW3v7GgDbFYR3c", - "symbol": "LADS", - "name": "LadsCoin", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/Zderosia/token-list/main/assets/mainnet/9Exx2WQUZkRwbLB9RxSVThGdkuYdgCWW3v7GgDbFYR3c/LadCoinLogo.png", - "tags": ["Pig", "Meme", "Lad"] - }, - { - "chainId": 101, - "address": "xAx6d1sjmBvpWkVZQEqgUvPmGBNndEXPxYpr3QVp61H", - "symbol": "xABR", - "name": "Allbridge Staking", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/allbridge-io/media/main/token.svg", - "extensions": { - "medium": "https://allbridge.medium.com/", - "telegram": "https://t.me/allbridge_announcements", - "twitter": "https://twitter.com/Allbridge_io", - "website": "https://allbridge.io/" - } - }, - { - "chainId": 101, - "address": "DHpoYejUDqzByb6HAdaLWF7KZvwUv2vWYDY9cTENNZui", - "symbol": "acUSDC", - "name": "Wrapped USDC (Allbridge from Celo)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v/logo.png", - "tags": ["stablecoin"], - "extensions": { - "coingeckoId": "usd-coin" - } - }, - { - "chainId": 101, - "address": "Bo4ehCeRcRj2wp5tQpjfCJxYFn4KyRacfDzSa4Aj27tH", - "symbol": "ahBTC", - "name": "Wrapped BTC (Allbridge from HECO)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Bo4ehCeRcRj2wp5tQpjfCJxYFn4KyRacfDzSa4Aj27tH/logo.png", - "tags": ["stablecoin"], - "extensions": { - "coingeckoId": "wrapped-bitcoin" - } - }, - { - "chainId": 101, - "address": "GfzU1fLASNV3r4NtEyrnwTyTakJkYzoivnaL3Snh45oj", - "symbol": "ahUSDT", - "name": "Wrapped USDT (Allbridge from HECO)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GfzU1fLASNV3r4NtEyrnwTyTakJkYzoivnaL3Snh45oj/logo.png", - "tags": ["stablecoin"], - "extensions": { - "coingeckoId": "tether" - } - }, - { - "chainId": 101, - "address": "5pWsyiUEpKHvi86QmQPivfF1WND11DDwv7nS1wVMwsRf", - "symbol": "Meleon", - "name": "Solameleon", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solanadevv/token-list/03d369be7f3f9fc2f1c6cd37b71ada2d9b1708d2/assets/mainnet/5pWsyiUEpKHvi86QmQPivfF1WND11DDwv7nS1wVMwsRf/logo.png", - "tags": ["utility-token", "nft"], - "extensions": { - "twitter": "https://twitter.com/Solameleon", - "website": "https://www.solameleon.com" - } - }, - { - "chainId": 101, - "address": "M6U7nVSLym4CuJjjmXfFbDZp9yG4MiYBRBxWHfoaTxM", - "symbol": "MORS", - "name": "MoroSteel", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/M6U7nVSLym4CuJjjmXfFbDZp9yG4MiYBRBxWHfoaTxM/logo.png", - "tags": ["DEX", "utility-token", "COMMERCE"], - "extensions": { - "description": "Token used to trade international steel", - "website": "https://morosteel.com/" - } - }, - { - "chainId": 101, - "address": "CE6gowswLbhy5y9G2EDfvYSavAcdSaqX3wMta5gySG1H", - "symbol": "BullDog", - "name": "BullDog", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solanadevv/token-list/assets/mainnet/CE6gowswLbhy5y9G2EDfvYSavAcdSaqX3wMta5gySG1H/logo.png", - "tags": ["Meme-Token", "nft"], - "extensions": { - "twitter": "https://twitter.com/BullDogSolana" - } - }, - { - "chainId": 101, - "address": "3jzdrXXKxwkBk82u2eCWASZLCKoZs1LQTg87HBEAmBJw", - "symbol": "FLOOF", - "name": "FLOOF", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/GreenFailure/Floof/main/OkyT9kpz_400x400.png", - "extensions": { - "coingeckoId": "floof", - "discord": "https://discord.gg/Gr5Z8DZ67X", - "serumV3Usdc": "BxcuT1p8FK9cFak4Uuf5nmoAZ7nQGu7FerCMESGqxF7b", - "twitter": "https://twitter.com/FLOOF_SOLANA", - "website": "https://www.floofsolana.com" - } - }, - { - "chainId": 101, - "address": "Ap1gFH91RpuGQAm1y3AJU3GWbjXqTcUQ9b6gFZg5su3Z", - "symbol": "PANTIE", - "name": "Pantie", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Ap1gFH91RpuGQAm1y3AJU3GWbjXqTcUQ9b6gFZg5su3Z/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://pantie.app/" - } - }, - { - "chainId": 101, - "address": "58yYYVT5FoVx2jtvD9xtX4JxE8jogtA5tjMkJudgERMS", - "symbol": "DONKEY", - "name": "Donkey Hee Haw", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/58yYYVT5FoVx2jtvD9xtX4JxE8jogtA5tjMkJudgERMS/logo.png", - "extensions": { - "twitter": "https://twitter.com/donkey_hee_haw" - } - }, - { - "chainId": 101, - "address": "Adqy2jwzqCo9M86AwoS1D1MtCc1gNoDbuVtsS35gf8aE", - "symbol": "CLB", - "name": "Columbus", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Adqy2jwzqCo9M86AwoS1D1MtCc1gNoDbuVtsS35gf8aE/logo.png", - "tags": ["utility-token", "Validator", "Columbus-inc"] - }, - { - "chainId": 101, - "address": "Uuc6hiKT9Y6ASoqs2phonGGw2LAtecfJu9yEohppzWH", - "symbol": "BABY", - "name": "Baby Samo Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Uuc6hiKT9Y6ASoqs2phonGGw2LAtecfJu9yEohppzWH/logo.png", - "tags": ["community-token"], - "extensions": { - "coingeckoId": "baby-samo-coin", - "discord": "https://discord.gg/RhQTNhRk2X", - "twitter": "https://twitter.com/BabySamoCoin", - "website": "https://www.babysamocoin.com/" - } - }, - { - "chainId": 101, - "address": "MSQTxnsq8t94gEqZ42a6mxuw11LBYWF4J5hy84GaECb", - "symbol": "MSQ", - "name": "Magic Square", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/MSQTxnsq8t94gEqZ42a6mxuw11LBYWF4J5hy84GaECb/logo.svg", - "extensions": { - "discord": "https://discord.com/invite/u9SHXU9qNd", - "medium": "https://medium.com/@magicsquare", - "telegram": "https://t.me/Magicsquareio", - "twitter": "https://twitter.com/MagicSquareio", - "website": "https://magicsquare.io/", - "youtube": "https://www.youtube.com/channel/UCJjHbHzZXe0T5gcn97baIbA" - } - }, - { - "chainId": 101, - "address": "AsVNhq2nnoUgMWciCvePRyHk7xAv6i4ruV6oRHFWBcwF", - "symbol": "SHIBL", - "name": "Shibalana Inu", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AsVNhq2nnoUgMWciCvePRyHk7xAv6i4ruV6oRHFWBcwF/logo.png", - "tags": ["community-token", "meme-token", "doge", "dogecoin"], - "extensions": { - "twitter": "https://twitter.com/shibalana_inu", - "website": "https://trade.dexlab.space/#/market/Fc5co91LY2tiZAVuvCmVxDFZWA9SVBVLuxpBcYRQbH1T" - } - }, - { - "chainId": 101, - "address": "FmQN1sQDeD9DF7aQvmJA9zZ8hicJYxUzzCDSnV8tfUtY", - "symbol": "NOOT", - "name": "NOOT Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FmQN1sQDeD9DF7aQvmJA9zZ8hicJYxUzzCDSnV8tfUtY/noot.png", - "tags": ["Meme-Token"] - }, - { - "chainId": 101, - "address": "FucvfR9FF2xsRaGbzrhywNsfxsx2fjoJLEckUDJALG62", - "symbol": "BADURUS", - "name": "BaduroCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FucvfR9FF2xsRaGbzrhywNsfxsx2fjoJLEckUDJALG62/logo.png", - "tags": ["gambling-token", "meme-token"], - "extensions": { - "github": "https://github.com/BaduroCoin", - "twitter": "https://twitter.com/badurocoin", - "website": "https://badurocoin.pl" - } - }, - { - "chainId": 101, - "address": "SLNDpmoWTVADgEdndyvWzroNL7zSi1dF9PC3xHGtPwp", - "symbol": "SLND", - "name": "Solend", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SLNDpmoWTVADgEdndyvWzroNL7zSi1dF9PC3xHGtPwp/logo.png", - "tags": ["solend", "lending"], - "extensions": { - "coingeckoId": "solend", - "serumV3Usdc": "F9y9NM83kBMzBmMvNT18mkcFuNAPhNRhx7pnz9EDWwfv", - "twitter": "https://twitter.com/solendprotocol", - "website": "https://solend.fi" - } - }, - { - "chainId": 101, - "address": "6wFgUMohoSavTuEneDYcrb9qF3JsYVVXyB8jb3PaXCJ4", - "symbol": "Kishu", - "name": "Kishu Inu", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6wFgUMohoSavTuEneDYcrb9qF3JsYVVXyB8jb3PaXCJ4/logo.png", - "tags": ["community-token", "meme-token", "doge", "dogecoin"], - "extensions": { - "twitter": "https://twitter.com/ShibamoonNFT", - "website": "https://www.shibamoon.info/" - } - }, - { - "chainId": 101, - "address": "FZBNaVMz5n1EcKfno8Jgsa2go5GLUwBYVpGPvKAdzNth", - "symbol": "PONQUE", - "name": "Ponque Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FZBNaVMz5n1EcKfno8Jgsa2go5GLUwBYVpGPvKAdzNth/logo.png", - "tags": ["community-token", "utility-token", "capys"], - "extensions": { - "twitter": "https://twitter.com/solcapys", - "website": "https://www.solcapys.club/" - } - }, - { - "chainId": 101, - "address": "cqNTpypmbwghrf1G9VGvSENcw7M7wGSQ7JS8UTQWXwb", - "symbol": "SCUM", - "name": "Solana CUM", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/cqNTpypmbwghrf1G9VGvSENcw7M7wGSQ7JS8UTQWXwb/logo.png", - "tags": ["community-token"], - "extensions": { - "twitter": "https://twitter.com/SolanaCum", - "website": "https://www.solanacum.com/" - } - }, - { - "chainId": 101, - "address": "8E5W9PMhnEvdvM2Q9XBLMJW7UsFiieXnRHPj8zhtB23h", - "symbol": "APPLE", - "name": "Apple Fruit", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8E5W9PMhnEvdvM2Q9XBLMJW7UsFiieXnRHPj8zhtB23h/logo.png", - "tags": ["community-token", "meme-coin", "fruit", "apple-coin"], - "extensions": { - "discord": "https://discord.gg/NfGXqUTV", - "twitter": "https://twitter.com/superfruitnft", - "website": "https://superfruit.farm" - } - }, - { - "chainId": 101, - "address": "2qRHKgE9k7doshwy7ZfENuSHW256pDhcbyspDgU3Ek8C", - "symbol": "SAMOL", - "name": "Samolana NFT", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2qRHKgE9k7doshwy7ZfENuSHW256pDhcbyspDgU3Ek8C/logo.png", - "tags": ["meme", "community", "NFTs", "DEFI", "Dog"], - "extensions": { - "twitter": "https://twitter.com/samolana3" - } - }, - { - "chainId": 101, - "address": "25DXQbnQicHzZ6sH4HgbhpEGUahxEPZUkPkFbU2Jr7D3", - "symbol": "CLICK", - "name": "Nice Click", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/25DXQbnQicHzZ6sH4HgbhpEGUahxEPZUkPkFbU2Jr7D3/logo.png", - "tags": ["meme-token"], - "extensions": { - "twitter": "https://twitter.com/proofofclick", - "website": "https://www.proofofclick.com/" - } - }, - { - "chainId": 101, - "address": "CDxwZo3ayxvTmxin7F6o9xg6SjdE4qWEDXV6MZFBevqw", - "symbol": "SHIBS", - "name": "ShibSol", - "decimals": 9, - "logoURI": "https://discordapp.com/channels/@me/903775821704073247/903777435231846420", - "extensions": { - "twitter": "https://twitter.com/ShibSol", - "website": "https://www.solshib.net/" - } - }, - { - "chainId": 101, - "address": "3tufRsMkBu5rYUCsSQys3ZjBXxXLWeRgttAXX4a1CDdW", - "symbol": "GAWD", - "name": "Gawd Token", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/MaloSkylar/GAWDtoken/GAWDlogo.jpg", - "tags": ["Social-Coin"] - }, - { - "chainId": 101, - "address": "HWnfNCDHWJqqXQBpF379ubyLPhk8sdvFAa2mBsn4T6Bz", - "symbol": "SCODE", - "name": "Scode Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HWnfNCDHWJqqXQBpF379ubyLPhk8sdvFAa2mBsn4T6Bz/logo.png", - "tags": ["utility-token", "nft"], - "extensions": { - "discord": "https://discord.gg/6NMRH4KNG5", - "github": "https://github.com/scenechain", - "medium": "https://medium.com/scenechain", - "twitter": "https://twitter.com/scenechain", - "website": "https://scenechain.org/" - } - }, - { - "chainId": 101, - "address": "G7uwQLyFLpeKWZePU3q5eCMuQYcu3tMoGZvu3JHdksyW", - "symbol": "KUTTA", - "name": "Sheru", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/G7uwQLyFLpeKWZePU3q5eCMuQYcu3tMoGZvu3JHdksyW/logo.png" - }, - { - "chainId": 101, - "address": "A9UhP1xfQHWUhSd54NgKPub2XB3ZuQMdPEvf9aMTHxGT", - "symbol": "DEGN", - "name": "Degen", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/flazewang/degencoinsolana/main/degen.png", - "extensions": { - "twitter": "https://twitter.com/degencoinsol" - } - }, - { - "chainId": 101, - "address": "H6JocWxg5g1Lcs4oPnBecmjQ4Y1bkZhGJHtjMunmjyrp", - "symbol": "SPX", - "name": "Sphinxel", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/H6JocWxg5g1Lcs4oPnBecmjQ4Y1bkZhGJHtjMunmjyrp/logo.png", - "tags": ["meme-token", "community-token", "trading-token"], - "extensions": { - "twitter": "https://twitter.com/SphinxelSPX", - "website": "https://sphinxel.com" - } - }, - { - "chainId": 101, - "address": "FsAXvJ5wrCoSh3cQvdkuceUsQUjLtRcqgoikR9jQ9FBW", - "symbol": "DCN", - "name": "D Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FsAXvJ5wrCoSh3cQvdkuceUsQUjLtRcqgoikR9jQ9FBW/logo.png", - "extensions": { - "twitter": "https://twitter.com/DatalusCorp", - "website": "https://datalus.us" - } - }, - { - "chainId": 101, - "address": "6DXQSpYeUirraMuwnQKgXRK5QMvZUWL67WAuevntTn4Y", - "symbol": "Finger", - "name": "SolaFinger", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solanadevv/token-list/35c428ac8c5fc843cc3d70caf552f7db66058491/assets/mainnet/6DXQSpYeUirraMuwnQKgXRK5QMvZUWL67WAuevntTn4Y/logo.png", - "tags": ["utility-token", "nft"], - "extensions": { - "twitter": "https://twitter.com/solafinger", - "website": "https://www.solafinger.com/" - } - }, - { - "chainId": 101, - "address": "PEGDAG5KpGAw66WBeGJcwub17eAyb9A4iFhBADsDJjF", - "symbol": "SOLM", - "name": "Solanim", - "decimals": 8, - "logoURI": "https://solanim.com/logo.png", - "tags": ["utility-token", "nft"], - "extensions": { - "telegram": "https://t.me/teamsolanim", - "twitter": "https://twitter.com/teamsolanim", - "website": "https://solanim.com/" - } - }, - { - "chainId": 101, - "address": "3Z5o6GGjkzPgBVk7aFPsTGFPqGDdAwXjfGteuQa1SE95", - "symbol": "GHOST", - "name": "Ghost Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3Z5o6GGjkzPgBVk7aFPsTGFPqGDdAwXjfGteuQa1SE95/logo.png", - "tags": ["utility-token", "nft"], - "extensions": { - "twitter": "https://twitter.com/solaghosts", - "website": "https://www.solaghosts.io" - } - }, - { - "chainId": 101, - "address": "7CskY61wSZUZeSoMNHHX6br9kA9hL9v5EwAkS6mqsYNc", - "symbol": "PLING", - "name": "Dumpling", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7CskY61wSZUZeSoMNHHX6br9kA9hL9v5EwAkS6mqsYNc/logo.png", - "extensions": { - "website": "https://projectdumpling.com/" - } - }, - { - "chainId": 101, - "address": "3jv3yRRX2WgBLeUe7p7AFxazudp913CK6BRk9aHCCUxz", - "symbol": "MOGUL", - "name": "Mogul coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3jv3yRRX2WgBLeUe7p7AFxazudp913CK6BRk9aHCCUxz/logo.png", - "tags": ["meme-token"], - "extensions": { - "twitter": "https://twitter.com/MogulWars" - } - }, - { - "chainId": 101, - "address": "4evENxfLeUDk24nrqzMp4gkR3kPxCMeQuCeftjgd66BD", - "symbol": "SBOOBS", - "name": "Solana Boobs", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4evENxfLeUDk24nrqzMp4gkR3kPxCMeQuCeftjgd66BD/logo.jpg", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/solanaboobs", - "website": "https://www.solanaboobs.com/" - } - }, - { - "chainId": 101, - "address": "RdFHYW7mPJouuSpb5vEzUfbHeQedmQMuCoHN4VQkUDn", - "symbol": "LUCHOW", - "name": "LunaChow", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/RdFHYW7mPJouuSpb5vEzUfbHeQedmQMuCoHN4VQkUDn/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xa5ef74068d04ba0809b7379dd76af5ce34ab7c57", - "assetContract": "https://etherscan.io/address/0xa5ef74068d04ba0809b7379dd76af5ce34ab7c57", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "lunachow", - "discord": "https://discord.gg/FBz7dGkxgv", - "facebook": "https://www.facebook.com/LunaChowOfficial", - "instagram": "https://www.instagram.com/lunachow.io/", - "reddit": "https://www.reddit.com/r/lunachow/", - "telegram": "https://t.me/LuChow", - "twitter": "https://twitter.com/LunaChoww", - "website": "https://www.lunachow.com/" - } - }, - { - "chainId": 101, - "address": "3mZMtzsr11srDX7jdpkacsxAo1Na5H4kqepxehjhTkLE", - "symbol": "LUCHOW", - "name": "LunaChow", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3mZMtzsr11srDX7jdpkacsxAo1Na5H4kqepxehjhTkLE/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xa5ef74068d04ba0809b7379dd76af5ce34ab7c57", - "assetContract": "https://etherscan.io/address/0xa5ef74068d04ba0809b7379dd76af5ce34ab7c57", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "lunachow", - "discord": "https://discord.gg/FBz7dGkxgv", - "facebook": "https://www.facebook.com/LunaChowOfficial", - "instagram": "https://www.instagram.com/lunachow.io/", - "reddit": "https://www.reddit.com/r/lunachow/", - "telegram": "https://t.me/LuChow", - "twitter": "https://twitter.com/LunaChoww", - "website": "https://www.lunachow.com/" - } - }, - { - "chainId": 101, - "address": "9k27FY1wmxKEyoMGqK4zJMT2Y8dvkiYRGM2ijjLLTrjq", - "symbol": "UNIVERSE", - "name": "universe", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9k27FY1wmxKEyoMGqK4zJMT2Y8dvkiYRGM2ijjLLTrjq/logo.png", - "tags": ["Metaverse", "Universe"] - }, - { - "chainId": 101, - "address": "CA3XWNSEQNtBiiWQE9CQJp5G93eAZKZF7j6wx9tMTZR7", - "symbol": "CHEEZ", - "name": "Cheezburger", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CA3XWNSEQNtBiiWQE9CQJp5G93eAZKZF7j6wx9tMTZR7/logo.png", - "tags": ["social-token", "meme-token"] - }, - { - "chainId": 101, - "address": "6kr8q1SXXNRLy3imzDsecWkcRtzJiXqiXx1N7LtpMPTe", - "symbol": "BIT", - "name": "Biconomy Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6kr8q1SXXNRLy3imzDsecWkcRtzJiXqiXx1N7LtpMPTe/logo.png", - "tags": ["exchange-token"], - "extensions": { - "bridgeContract": "https://bscscan.com/token/0xc864019047B864B6ab609a968ae2725DFaee808A", - "coingeckoId": "biconomy-exchange-token", - "website": "https://biconomy.com" - } - }, - { - "chainId": 101, - "address": "EFBGjiTEuvhwZGmEzDBJwrWnSDuALx94MERncXNsap3G", - "symbol": "RBTP", - "name": "Robotopian Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EFBGjiTEuvhwZGmEzDBJwrWnSDuALx94MERncXNsap3G/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://robotopia.io" - } - }, - { - "chainId": 101, - "address": "7tfCwa3CCNzhvLCkKPaBWvYxyjq157Wha1EDKZJAxBZ", - "symbol": "RBTK", - "name": "Robotopian Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7tfCwa3CCNzhvLCkKPaBWvYxyjq157Wha1EDKZJAxBZ/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://robotopia.io" - } - }, - { - "chainId": 101, - "address": "Dm3qVmVLAEQPSHoHCzAuF1gpmT2k2SXe1Pw2FgtUVAaC", - "symbol": "DNG", - "name": "DNG Reasearch Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Dm3qVmVLAEQPSHoHCzAuF1gpmT2k2SXe1Pw2FgtUVAaC/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "http://d-n-g.io/" - } - }, - { - "chainId": 101, - "address": "HiQg2CX9BU24gsgDVXg5DR437z5ptYvnT3KY1D7nqfAw", - "symbol": "ORD", - "name": "Oridion", - "decimals": 8, - "logoURI": "https://cdn.jsdelivr.net/gh/9thwall/Oridion/logo-v1.png", - "tags": ["oridion", "utility-token"], - "extensions": { - "twitter": "https://twitter.com/OridionToken", - "website": "https://oridion.io" - } - }, - { - "chainId": 101, - "address": "3mXx1bNiB5bhgwznk4eeqM9eoy6DU3CeCkm1LPabeoEh", - "symbol": "SAMOY", - "name": "Samoy Meme Dog", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3mXx1bNiB5bhgwznk4eeqM9eoy6DU3CeCkm1LPabeoEh/logo.png", - "tags": ["Meme-Token", "Community-Token"] - }, - { - "chainId": 101, - "address": "5pGUEKhMLa7VCvGeP1acgGKPe2vpzQF5hhpyQAFsH2Cg", - "symbol": "COSP", - "name": "Cosplay Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5pGUEKhMLa7VCvGeP1acgGKPe2vpzQF5hhpyQAFsH2Cg/logo.png", - "tags": ["social-token", "utility-token", "nft"], - "extensions": { - "twitter": "https://twitter.com/CosplayCoin", - "website": "https://cosplaycoin.xyz" - } - }, - { - "chainId": 101, - "address": "B6nUf6nNex5Eh41xU6NY4qu9xNwyFyDFxKbRjdkPPenT", - "symbol": "DIGART", - "name": "Digital Artists Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/B6nUf6nNex5Eh41xU6NY4qu9xNwyFyDFxKbRjdkPPenT/logo.png", - "tags": ["social-token", "utility-token", "nft"], - "extensions": { - "twitter": "https://twitter.com/digartcoin", - "website": "https://digartcoin.xyz" - } - }, - { - "chainId": 101, - "address": "9aj5LDmjjwBXk5ijfoyQej3X6waV1rnk7QN4KVqjX8wH", - "symbol": "ARS", - "name": "Artists Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9aj5LDmjjwBXk5ijfoyQej3X6waV1rnk7QN4KVqjX8wH/logo.png", - "tags": ["social-token", "utility-token", "nft"], - "extensions": { - "instagram": "https://www.instagram.com/artistscoin", - "twitter": "https://twitter.com/artistscoin", - "website": "https://artistscoin.xyz" - } - }, - { - "chainId": 101, - "address": "Dhg9XnzJWzSQqH2aAnhPTEJHGQAkALDfD98MA499A7pa", - "symbol": "SHIBA", - "name": "Shibalana", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Dhg9XnzJWzSQqH2aAnhPTEJHGQAkALDfD98MA499A7pa/logo.png", - "extensions": { - "coingeckoId": "shibalana", - "discord": "https://discord.gg/UaK3ZMkkmH", - "serumV3Usdc": "3M8uZhLZMxFUedsEgPzywZr9qbGTv3kKNMCEfAmg8iyK", - "telegram": "https://t.me/shibalana", - "twitter": "https://twitter.com/shibalana", - "website": "https://shibalana.com/" - } - }, - { - "chainId": 101, - "address": "7TPWAzabCP26vuLGuAhBMJFSs5LQNVsw4uFyQUkSGJXj", - "symbol": "PORN", - "name": "Pornlana", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Agaveis/pornlana/main/logo.png", - "tags": ["meme-token"], - "extensions": { - "website": "http://pornlana.com" - } - }, - { - "chainId": 101, - "address": "3xVf2hPbkE5TuZNUPLQXFgFLD4LpvCM45BodbPmnpSSV", - "symbol": "sBull", - "name": "SolBull - GoPromotedToken", - "decimals": 9, - "logoURI": "https://gopromoted.com/sbull200.png", - "tags": ["Utility-Token"], - "extensions": { - "twitter": "https://twitter.com/GoPromotedCom", - "website": "http://gopromoted.com/" - } - }, - { - "chainId": 101, - "address": "8gWEnKqB4qVQgC8yAorMxhiEKqsDcxZSVKFVbQ8g1fzB", - "symbol": "PORN", - "name": "Pornlana", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Agaveis/pornlana/main/logo.png", - "tags": ["meme-token"], - "extensions": { - "website": "http://pornlana.com" - } - }, - { - "chainId": 101, - "address": "UXPhBoR3qG4UCiGNJfV7MqhHyFqKN68g45GoYvAeL2M", - "symbol": "UXP", - "name": "UXP Governance Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/UXPhBoR3qG4UCiGNJfV7MqhHyFqKN68g45GoYvAeL2M/uxp-icon-black.png", - "extensions": { - "coingeckoId": "uxd-protocol-token", - "coinmarketcap": "https://coinmarketcap.com/currencies/uxd-protocol/", - "discord": "https://discord.com/invite/BHfpYmjsBM", - "medium": "https://uxdprotocol.medium.com/", - "serumV3Usdc": "7KQpsp914VYnh62yV6AGfoG9hprfA14SgzEyqr6u9NY1", - "twitter": "https://twitter.com/UXDProtocol", - "website": "https://uxd.fi/" - } - }, - { - "chainId": 101, - "address": "88govxpekHhHv4hF2bgi8UDveP9LnxofhdREmrxLffy8", - "symbol": "USTK", - "name": "Ultra Scarce Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/88govxpekHhHv4hF2bgi8UDveP9LnxofhdREmrxLffy8/logo.png", - "tags": ["utility-token", "wrapped"] - }, - { - "chainId": 101, - "address": "2uEb2S4JCxZSzMxRfEdmj6grtZkgEe6XrfTwgkpswuvS", - "symbol": "VAL", - "name": "Valknut", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2uEb2S4JCxZSzMxRfEdmj6grtZkgEe6XrfTwgkpswuvS/Valknut.png", - "tags": ["utility-token", "game-coin", "gaming"], - "extensions": { - "discord": "https://discord.com/invite/JXKEDfYGGa", - "twitter": "https://twitter.com/solvikingsnft", - "website": "https://solvikings.com/" - } - }, - { - "chainId": 101, - "address": "E6Hkw5o48QfNo6iUi1aepjEBzVq4ZjQLxh7xVtdTqoyB", - "symbol": "DICK", - "name": "Dickcoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/E6Hkw5o48QfNo6iUi1aepjEBzVq4ZjQLxh7xVtdTqoyB/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/dickcoinmoon" - } - }, - { - "chainId": 101, - "address": "3uXMgtaMRBcyEtEChgiLMdHDjb5Azr17SQWwQo3ppEH8", - "symbol": "WBRZ", - "name": "Wrapped BRZ", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x420412E765BFa6d85aaaC94b4f7b708C89be2e2B/logo.png", - "tags": ["exchange-token"], - "extensions": { - "website": "https://www.brztoken.io/" - } - }, - { - "chainId": 101, - "address": "AvB7Ffmt3H16bhq7ToXb839ynKzFgJxu2WDHsR1S9Yft", - "symbol": "FLOKIS", - "name": "FlokiSol", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AvB7Ffmt3H16bhq7ToXb839ynKzFgJxu2WDHsR1S9Yft/Flokisol.png", - "tags": ["community-token", "meme-token"], - "extensions": { - "twitter": "https://twitter.com/FlokiSol", - "website": "https://flokisol.com" - } - }, - { - "chainId": 101, - "address": "TrickCA8nD77Y6iHHEQBAaBFDjFa5zohSThmSVfz2X9", - "symbol": "Trick", - "name": "SolTricks token", - "decimals": 9, - "logoURI": "http://static.soltricks.io/icon.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.soltricks.io", - "twitter": "https://twitter.com/soltricks", - "website": "https://soltricks.io" - } - }, - { - "chainId": 101, - "address": "rendopHqu4oE94AXjEEtporr1xW8Fsp4bZDccyMTYzU", - "symbol": "RENDO", - "name": "rendo.club", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/rendopHqu4oE94AXjEEtporr1xW8Fsp4bZDccyMTYzU/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/SvNZZu6", - "twitter": "https://twitter.com/rendo", - "website": "https://rendo.club" - } - }, - { - "chainId": 101, - "address": "F7mgxaYF1gg1hBtaVzENSG6ey3pn6J1mXhBRmHxDzBNg", - "symbol": "SINU", - "name": "Samo INU", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/F7mgxaYF1gg1hBtaVzENSG6ey3pn6J1mXhBRmHxDzBNg/logo.png", - "tags": ["meme-token"], - "extensions": { - "discord": "https://discord.gg/samoinu", - "twitter": "https://twitter.com/samo_inu", - "website": "https://www.samoinu.com" - } - }, - { - "chainId": 101, - "address": "Ac7GiHwC7vZU2y97GRh9rqCqqnKAAgopYrTAtKccHxUk", - "symbol": "SINU", - "name": "Samo INU", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Ac7GiHwC7vZU2y97GRh9rqCqqnKAAgopYrTAtKccHxUk/logo.png", - "tags": ["meme-token", "community-token"], - "extensions": { - "description": "Samo Inu is an hybrid meme coin with fun and social utilities", - "discord": "https://discord.gg/samoinu", - "twitter": "https://twitter.com/samo_inu", - "website": "https://www.samoinu.com" - } - }, - { - "chainId": 101, - "address": "2LxZrcJJhzcAju1FBHuGvw929EVkX7R7Q8yA2cdp8q7b", - "symbol": "BORK", - "name": "BORK", - "decimals": 3, - "logoURI": "https://arweave.net/VtJL5kdepu6AyVHnHi4GImgyWxmcb2XMPN7jURW_yXQ", - "tags": ["meme-token"], - "extensions": { - "discord": "https://discord.gg/fazKMkWSSA", - "twitter": "https://twitter.com/borksolana", - "website": "https://www.borksolana.club" - } - }, - { - "chainId": 101, - "address": "53dqN1unCex98QWzLZtk1ssJptEcRwZapTrv8pakcgNB", - "symbol": "LGBR", - "name": "LGBR - LETS GO BRANDON", - "decimals": 9, - "logoURI": "http://gopromoted.com/brandon.jpg", - "tags": ["Meme-coin"], - "extensions": { - "discord": "https://discord.gg/Qb7QRNAeH2", - "twitter": "https://twitter.com/LGBRCoin", - "whitepaper": "https://docs.google.com/document/d/1krRMK_b2DkvgV0AEl9rKN2LU4lh-QACWi9rXByfG8tQ/edit?usp=sharing" - } - }, - { - "chainId": 101, - "address": "4dzDhawz7bHfDDfBpbDrLeDu6T7vZEtmmyQtn9Df2PRa", - "symbol": "PUMP", - "name": "PUMP", - "decimals": 3, - "logoURI": "https://wtcaeyantzogvbrzbwcgqfesfnz7mekovkyybs3ae54fptigq5za.arweave.net/tMQCYA2eXGqGOQ2EaBSSK3P2EU6qsYDLYCd4V80Gh3I", - "tags": ["meme-token"], - "extensions": { - "discord": "https://discord.gg/Tab4WFUSY2", - "twitter": "https://twitter.com/S0l_Pump" - } - }, - { - "chainId": 101, - "address": "5uE8w9yoMMu88NV8wUaZMuxCiufBBoSiJbNDAEGmDx7x", - "symbol": "SCIFI", - "name": "SciFi-Verse", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5uE8w9yoMMu88NV8wUaZMuxCiufBBoSiJbNDAEGmDx7x/logo.png", - "tags": ["SciFi", "Game"], - "extensions": { - "website": "https://www.scifiverse.net" - } - }, - { - "chainId": 101, - "address": "BTSPdFLQJ9R3JXAgjVx2JtLq4sNSjiVSGh4tQi4oRUi8", - "symbol": "DYOR", - "name": "DO YOUR OWN RESEARCH", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BTSPdFLQJ9R3JXAgjVx2JtLq4sNSjiVSGh4tQi4oRUi8/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.com/invite/wXaGzqUuru", - "twitter": "https://twitter.com/s0lnumbers", - "website": "http://s0lnumbers.com/" - } - }, - { - "chainId": 101, - "address": "5i8C6n4VbELnTHtES83aqeh16uPiEyve4jHr2QN2WhSz", - "symbol": "ZDRT", - "name": "ZDRT Club Token", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5i8C6n4VbELnTHtES83aqeh16uPiEyve4jHr2QN2WhSz/logo.png", - "tags": ["social-token"], - "extensions": { - "discord": "https://discord.gg/VHpA4tQYXZ", - "website": "https://zdrt.club" - } - }, - { - "chainId": 101, - "address": "4wfCtMp8KQ7r61V4qH2VtHxFjVjUdsWhgAmZgQi33UkT", - "symbol": "ARDN", - "name": "Ariadne Solana", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4wfCtMp8KQ7r61V4qH2VtHxFjVjUdsWhgAmZgQi33UkT/logo.svg", - "tags": ["utility-token", "DeFi", "marketplace", "ariadne"], - "extensions": { - "coingeckoId": "ariadne", - "medium": "https://medium.com/ariadne-project", - "telegram": "https://t.me/ariadne_finance", - "twitter": "https://twitter.com/Ariadne_finance", - "website": "https://ariadne.finance/" - } - }, - { - "chainId": 101, - "address": "GcqEZcpnMYmxRhPp9sRh1wLLWTmFjTwp7CVQcuYX73sT", - "symbol": "WHALE", - "name": "Whale Token", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GcqEZcpnMYmxRhPp9sRh1wLLWTmFjTwp7CVQcuYX73sT/logo.png", - "tags": [ - "community-token", - "meme-token", - "whale", - "whale-token", - "crypto-whale" - ], - "extensions": { - "twitter": "https://twitter.com/CryptoWhale", - "website": "https://cryptowhale.org/" - } - }, - { - "chainId": 101, - "address": "5fhXkD8tXyDB9rmYZSNJ6LneLr2nMteMpCVxeDDEgXa3", - "symbol": "ACE", - "name": "ACE", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5fhXkD8tXyDB9rmYZSNJ6LneLr2nMteMpCVxeDDEgXa3/logo.png" - }, - { - "chainId": 101, - "address": "CJ2K2J3HYU6ibR1JwLkUmD9RM8eytfxtMcLzYPqoQQKo", - "symbol": "BONER", - "name": "BONER", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CJ2K2J3HYU6ibR1JwLkUmD9RM8eytfxtMcLzYPqoQQKo/logo.png", - "tags": ["utility-token", "nft-token"], - "extensions": { - "twitter": "https://twitter.com/BareBonesNFT", - "website": "https://www.barebonesnft.com/" - } - }, - { - "chainId": 101, - "address": "8o66EVAf4u2Hr21m2tuRrPtEXFPLr8G8aL1ETStP8fDu", - "symbol": "VIBE", - "name": "VIBE", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8o66EVAf4u2Hr21m2tuRrPtEXFPLr8G8aL1ETStP8fDu/VIBE-logo.png", - "tags": ["utility-token", "nft-token"], - "extensions": { - "discord": "https://discord.gg/CQQSSSgTDb", - "website": "https://twitter.com/vibetoken_" - } - }, - { - "chainId": 101, - "address": "9bPoFPCwGCVGDMC5gvzisPdjgKC6tRLRDhirJvcktgVh", - "symbol": "SPIRIT", - "name": "Spirit", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Yuriy-Ihor/CyberGothicaAssets/main/Token/logo.png", - "tags": ["game-token", "game-currency"], - "extensions": { - "twitter": "https://twitter.com/Cyber_Gothica" - } - }, - { - "chainId": 101, - "address": "Ax9MbdUbr7cPQhkipXnBh2QNDSzf245Sn4xKfQUDuJGD", - "symbol": "EDGE", - "name": "Lord Edge Elon", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Ax9MbdUbr7cPQhkipXnBh2QNDSzf245Sn4xKfQUDuJGD/logo.png", - "tags": ["Meme-token", "DEFI", "Elon", "Community"], - "extensions": { - "telegram": "https://t.me/lordedgesol", - "twitter": "https://twitter.com/LordedgeSol", - "website": "https://lordedgesol.com" - } - }, - { - "chainId": 101, - "address": "Fzs17QjYy7ZicGgBv2auDGA55TEV2PfSpK8cCax9m6fh", - "symbol": "NBX", - "name": "Nathan Bolin Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Fzs17QjYy7ZicGgBv2auDGA55TEV2PfSpK8cCax9m6fh/logo.png", - "tags": ["social-token", "utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/nathanbolin", - "website": "http://nathanbolin.com/" - } - }, - { - "chainId": 101, - "address": "DYbRXaQcnj44SH9woxvyFdtcKkSoPoCEshRTQDZSjsBm", - "symbol": "MARIJUANA", - "name": "Marijuana Joint", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DYbRXaQcnj44SH9woxvyFdtcKkSoPoCEshRTQDZSjsBm/logo.png", - "tags": ["Meme", "Social"] - }, - { - "chainId": 101, - "address": "FiPpi1nhxws1cPkyy76AzmHkFMyB3NysdU8RruTXuzNf", - "symbol": "KAJU", - "name": "KAJU Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/kajucoin/assets/main/logo.jpg", - "tags": ["Meme", "Social"], - "extensions": { - "instagram": "http://instagram.com/kajucoin", - "twitter": "https://twitter.com/kajucoin", - "website": "http://www.kajucoin.com/" - } - }, - { - "chainId": 101, - "address": "FCqfQSujuPxy6V42UvafBhsysWtEq1vhjfMN1PUbgaxA", - "symbol": "USDCbs", - "name": "USD Coin (Portal from BSC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FCqfQSujuPxy6V42UvafBhsysWtEq1vhjfMN1PUbgaxA/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d", - "assetContract": "https://bscscan.com/address/0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d", - "bridgeContract": "https://bscscan.com/address/0xB6F6D86a8f9879A9c87f643768d9efc38c1Da6E7", - "coingeckoId": "usd-coin" - } - }, - { - "chainId": 101, - "address": "ASoLXbfe7cd6igh5yiEsU8M7FW64QRxPKkxk7sjAfond", - "symbol": "aSOL", - "name": "aSOL Aggregate Solana Stake Pool", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ASoLXbfe7cd6igh5yiEsU8M7FW64QRxPKkxk7sjAfond/logo.svg", - "extensions": { - "coingeckoId": "solana", - "description": "aSOL is the standard for transacting with staked SOL tokens.", - "github": "https://github.com/aSolHQ", - "twitter": "https://twitter.com/aSOLprotocol", - "website": "https://asol.so" - } - }, - { - "chainId": 101, - "address": "Ew2xovnfCPoUwPeqtRJrk3ST8o6txNFPL2QxrcZrbspv", - "symbol": "AUV", - "name": "Atlantis Universe", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Ew2xovnfCPoUwPeqtRJrk3ST8o6txNFPL2QxrcZrbspv/logo.png", - "tags": ["games-token"], - "extensions": { - "twitter": "https://twitter.com/atlantisvers" - } - }, - { - "chainId": 101, - "address": "8qJSyQprMC57TWKaYEmetUR3UUiTP2M3hXdcvFhkZdmv", - "symbol": "USDTbs", - "name": "Tether USD (Portal from BSC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8qJSyQprMC57TWKaYEmetUR3UUiTP2M3hXdcvFhkZdmv/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x55d398326f99059ff775485246999027b3197955", - "assetContract": "https://bscscan.com/address/0x55d398326f99059ff775485246999027b3197955", - "bridgeContract": "https://bscscan.com/address/0xB6F6D86a8f9879A9c87f643768d9efc38c1Da6E7", - "coingeckoId": "tether" - } - }, - { - "chainId": 101, - "address": "BQTN97PwrQGkbNepQxjvcYfRPYbPNgd5PqoioYwBt4qX", - "symbol": "ASGARD", - "name": "Asgard Army DAO Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BQTN97PwrQGkbNepQxjvcYfRPYbPNgd5PqoioYwBt4qX/logo.png", - "tags": ["DOA", "asgard-army", "nft"], - "extensions": { - "website": "https://asgardarmy.com/" - } - }, - { - "chainId": 101, - "address": "DogscQVvNVj7ndEnhWiCXPVPKKwNy9fJd4ATF7mVi5J", - "symbol": "DSC", - "name": "DoggyStyle Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Doggystylecoin/DSC/main/logo.png", - "tags": ["meme-token"], - "extensions": { - "coinmarketcap": "https://coinmarketcap.com/currencies/doggystyle-coin/", - "discord": "https://discord.gg/UACVDtQcCp", - "serumV3Usdc": "36wb7iVPv5Rn5Q1ppqVmtJaxLdwgUYkr6U3SGa9iL3W1", - "twitter": "https://twitter.com/dscoinsolana", - "website": "https://dscsolana.io/" - } - }, - { - "chainId": 101, - "address": "9i5WvFTCpt16Zv1Kk7mE5m9hqZ1zAoaVQwB76gcFhqLv", - "symbol": "SENDIT", - "name": "Sendit", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9i5WvFTCpt16Zv1Kk7mE5m9hqZ1zAoaVQwB76gcFhqLv/logo.png", - "tags": ["social-token", "utility-token"], - "extensions": { - "website": "https://get.stokedtosendit.com" - } - }, - { - "chainId": 101, - "address": "HNpdP2rL6FR6jM3bDxFX2Zo32D1YG2ZCztf9zzCrKMEX", - "symbol": "SER", - "name": "Secretum", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HNpdP2rL6FR6jM3bDxFX2Zo32D1YG2ZCztf9zzCrKMEX/logo.svg", - "extensions": { - "telegram": "https://t.me/joinchat/ZTXM0J9pOMozOGY0", - "twitter": "https://twitter.com/appsecretum", - "website": "https://secretum.io/" - } - }, - { - "chainId": 101, - "address": "3NcCuwvTMnnf7TU2UEVhp6v2nzbLXQiDgzQySS6m8A7P", - "symbol": "SQUIDGAME", - "name": "Squid Game", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3NcCuwvTMnnf7TU2UEVhp6v2nzbLXQiDgzQySS6m8A7P/logo.png", - "tags": ["Meme", "community"] - }, - { - "chainId": 101, - "address": "7S5QMfpwnai8nF8RmHnwfGDQwGa2TURDvkHXH17tMjdn", - "symbol": "betaFANT", - "name": "betaFANT", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7S5QMfpwnai8nF8RmHnwfGDQwGa2TURDvkHXH17tMjdn/logo.png", - "tags": ["dumby-token"], - "extensions": { - "discord": "https://t.co/Vskz9PkBBC?amp=1", - "twitter": "https://twitter.com/PhantasiaSports", - "website": "https://phantasia.app/" - } - }, - { - "chainId": 101, - "address": "ArhMyF2N8XpaujYUxTTDt9EuaBCaGaccxfwaZmkm9XeF", - "symbol": "DOGETH", - "name": "Doge Thug", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ArhMyF2N8XpaujYUxTTDt9EuaBCaGaccxfwaZmkm9XeF/logo.png", - "tags": ["Meme", "Social", "Metaverse"], - "extensions": { - "serumV3Usdc": "F1jBaKCMrxZpEgn79uduxpF2qHeqwiTQ3BwKdT6yqckd", - "website": "https://dogethug.samoymeme.com" - } - }, - { - "chainId": 101, - "address": "D8Fc2HLd9L9V2mJnEUpnys6muJUawKYFnJWcUiaGKnyP", - "symbol": "OOAH", - "name": "OOAH Monkey", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/D8Fc2HLd9L9V2mJnEUpnys6muJUawKYFnJWcUiaGKnyP/logo.png", - "tags": ["Meme", "Social", "Metaverse"], - "extensions": { - "serumV3Usdc": "J6ih6rFbwkx7bMRZYjaFzkAUcsLrCMxZ9CCEbtyEAJbS", - "website": "https://ooah.samoymeme.com" - } - }, - { - "chainId": 101, - "address": "BjTUmZjNUUAPKHVdTs8yZsCmecW5isSK4AbuFihXoUwa", - "symbol": "PUSSY", - "name": "Pussy", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BjTUmZjNUUAPKHVdTs8yZsCmecW5isSK4AbuFihXoUwa/logo.png", - "tags": ["Meme", "Social", "Metaverse"], - "extensions": { - "serumV3Usdc": "ALgq4dHm4bypcsg1JRDc6VPurwDtUsdsbpYB8kDxyZ9o", - "website": "https://pussy.samoymeme.com" - } - }, - { - "chainId": 101, - "address": "5xq71UHmPSZ5s68DkXL8wrBVsWCh4zXgcn4wTWkqFdxa", - "symbol": "JESUS", - "name": "JESUS", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5xq71UHmPSZ5s68DkXL8wrBVsWCh4zXgcn4wTWkqFdxa/logo.png", - "tags": ["Meme", "Social", "Community"], - "extensions": { - "serumV3Usdc": "7h3Pda8GwRg83NifksuZNx9xBS6voe1DyxGrQb6JqfB7", - "website": "https://jesus.samoymeme.com" - } - }, - { - "chainId": 101, - "address": "AJpDoSsLpPpkFdph1EJCEh4fxpLuPE7NAWhqG5vVBeqa", - "symbol": "CRY", - "name": "Crypunks", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AJpDoSsLpPpkFdph1EJCEh4fxpLuPE7NAWhqG5vVBeqa/logo.png", - "tags": ["utility-token", "Metaverse", "Gamefi"], - "extensions": { - "discord": "https://discord.gg/NDacA7b6AQ", - "twitter": "https://twitter.com/crypunks", - "website": "https://crypunks.com/" - } - }, - { - "chainId": 101, - "address": "8xAKtGcMFfjzcN1AuGufkpSjKQ6i9xmZeW1GHNzSNE1j", - "symbol": "SOLGR", - "name": "SOL GOLDEN RETRIEVER", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8xAKtGcMFfjzcN1AuGufkpSjKQ6i9xmZeW1GHNzSNE1j/logo.png", - "tags": ["Meme-token", "DEFI", "Dog", "Community"], - "extensions": { - "discord": "https://discord.gg/2ZPNmRrNpW", - "telegram": "https://t.me/SOLGR_Official", - "twitter": "https://twitter.com/SOLGR_Official", - "website": "https://sogrr.com" - } - }, - { - "chainId": 101, - "address": "9CZHvdrHt48GMMz7EbQ7iQM3ShrUW6vroipVj3WWrdHA", - "symbol": "SOLGR", - "name": "SOL GOLDEN RETRIEVER", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8xAKtGcMFfjzcN1AuGufkpSjKQ6i9xmZeW1GHNzSNE1j/logo.png", - "tags": ["Meme-token", "DEFI", "Dog", "Community"], - "extensions": { - "discord": "https://discord.gg/2ZPNmRrNpW", - "telegram": "https://t.me/SOLGR_Official", - "twitter": "https://twitter.com/SOLGR_Official", - "website": "https://solgrr.com" - } - }, - { - "chainId": 101, - "address": "EjCtfmGrsWePGJmE46gvB9r6oVRErgA2JA4Q5T3k8dUj", - "symbol": "SOLGR", - "name": "SOL GOLDEN RETRIEVER", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EjCtfmGrsWePGJmE46gvB9r6oVRErgA2JA4Q5T3k8dUj/logo.png", - "tags": ["Meme-token", "DEFI", "Dog", "Community"], - "extensions": { - "discord": "https://discord.gg/2ZPNmRrNpW", - "telegram": "https://t.me/SOLGR_Official", - "twitter": "https://twitter.com/SOLGR_Official", - "website": "https://solgrr.com" - } - }, - { - "chainId": 101, - "address": "4ZEDNmqoLbzwJVAJZNhRgz31Da8DauDkpSfH9iU2vXA4", - "symbol": "CATOMIAOU", - "name": "Cato Miaouss", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4ZEDNmqoLbzwJVAJZNhRgz31Da8DauDkpSfH9iU2vXA4/logo.png", - "tags": ["Meme", "community"], - "extensions": { - "serumV3Usdc": "FFJpw24jsFWgjcJKffjBc9FzAeoMpzedHBn9WhwwtcmD", - "website": "https://catomiaouss.samoymeme.com" - } - }, - { - "chainId": 101, - "address": "AMNoi4727tzy7adu4wnx3cN2VQbQdG71DqaPoSm7isJ3", - "symbol": "BITCH", - "name": "Bitch Of Solana", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AMNoi4727tzy7adu4wnx3cN2VQbQdG71DqaPoSm7isJ3/logo.png", - "tags": ["Meme", "community", "utility-token"], - "extensions": { - "serumV3Usdc": "2N78M8HZj2R9rSHxVXx6QWSvFvvnmhoEbsNPfrBdtdGo", - "website": "https://bitch.samoymeme.com" - } - }, - { - "chainId": 101, - "address": "HdjMPYYKaAgHr6Son56hGaSP3CEkDvD67bVzGuVgfz8S", - "symbol": "SHIBETOSHI", - "name": "Shibetoshi Nakamoto", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HdjMPYYKaAgHr6Son56hGaSP3CEkDvD67bVzGuVgfz8S/logo.png", - "tags": ["meme", "community", "NFTs", "DEFI", "Dog"], - "extensions": { - "serumV3Usdc": "91WiupLKLjP8ENihdgiZ53j49aosNm1EYXdLbRD6GAY4", - "twitter": "https://twitter.com/shibetoshi_naka", - "website": "https://www.billym2k.net/" - } - }, - { - "chainId": 101, - "address": "4ZwWddrPzfgMxyEgQ7kzVrqoqX5D9BQJPwduQUBMmePs", - "symbol": "APEM", - "name": "APEMOON", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4ZwWddrPzfgMxyEgQ7kzVrqoqX5D9BQJPwduQUBMmePs/logo.png", - "tags": ["Meme-token", "DEFI", "Community"], - "extensions": { - "telegram": "https://t.me/ApeMoonSOL", - "twitter": "https://twitter.com/ApemoonSOL", - "website": "https://t.me/ApeMoonSOL" - } - }, - { - "chainId": 101, - "address": "QuYNbuTjnAUQ8YxtrmGfu8P1UAEvcG3CngFpXCo3Cts", - "symbol": "APEM", - "name": "APEMOON", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/QuYNbuTjnAUQ8YxtrmGfu8P1UAEvcG3CngFpXCo3Cts/logo.png", - "tags": ["Meme-token", "DEFI", "Community"], - "extensions": { - "telegram": "https://t.me/ApeMoonSOL", - "twitter": "https://twitter.com/ApemoonSOL", - "website": "https://t.me/ApeMoonSOL" - } - }, - { - "chainId": 101, - "address": "BKGp1At3yLDK1NE2gfMuwv1QMAHBwnqgSdULsyzjUagA", - "symbol": "KissMe", - "name": "Kiss Me ", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BKGp1At3yLDK1NE2gfMuwv1QMAHBwnqgSdULsyzjUagA/logo.png", - "tags": ["meme", "community", "utility-token"], - "extensions": { - "serumV3Usdc": "91WiupLKLjP8ENihdgiZ53j49aosNm1EYXdLbRD6GAY4", - "website": "https://kissme.samoymeme.com" - } - }, - { - "chainId": 101, - "address": "3in9a9yHtdjDFRjDyGTTpGUwJpT9zZBcyjQ8J7nqqNtq", - "symbol": "DoggyStyle", - "name": "Doggy Style", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3in9a9yHtdjDFRjDyGTTpGUwJpT9zZBcyjQ8J7nqqNtq/logo.png", - "tags": ["Meme", "community", "utility-token"], - "extensions": { - "serumV3Usdc": "yzKcpbgRmwE5ULL72C4JPUZYQ2S8ZHRFJnrXgQrKyvB", - "website": "https://doggystyle.samoymeme.com" - } - }, - { - "chainId": 101, - "address": "osRA9qNxrtxF4kPAucsv9xHTu4YDrH6TqMMt9B2PsHa", - "symbol": "SHIBETOSHI", - "name": "Shibetoshi Nakamoto", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/osRA9qNxrtxF4kPAucsv9xHTu4YDrH6TqMMt9B2PsHa/logo.png", - "tags": ["meme", "community", "NFTs", "DEFI", "Dog"], - "extensions": { - "twitter": "https://twitter.com/BillyM2k", - "website": "https://www.billym2k.net/" - } - }, - { - "chainId": 101, - "address": "FEdyfKQi9hoS5RtX7UMsof12UZvary8ahxHaLJUVaduX", - "symbol": "YII", - "name": "YIICoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FEdyfKQi9hoS5RtX7UMsof12UZvary8ahxHaLJUVaduX/logo.png", - "tags": ["meme-token"], - "extensions": { - "website": "https://dockcoin.me/" - } - }, - { - "chainId": 101, - "address": "GEdo2wNT5DDy7pQqApKrpc7MVnLmC3GJnb55iRmGieAi", - "symbol": "DogeKing", - "name": "Doge King", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GEdo2wNT5DDy7pQqApKrpc7MVnLmC3GJnb55iRmGieAi/logo.png", - "tags": ["meme-token", "DOGE", "NFT", "community"], - "extensions": { - "twitter": "https://twitter.com/DogeKing_SOL", - "website": "https://solscan.io/token/GEdo2wNT5DDy7pQqApKrpc7MVnLmC3GJnb55iRmGieAi" - } - }, - { - "chainId": 101, - "address": "CPL7TvVnQXQ8aN2DytF53uskyYAVxgNx5z2waJrc3Cev", - "symbol": "Cate", - "name": "CateCoin SOL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CPL7TvVnQXQ8aN2DytF53uskyYAVxgNx5z2waJrc3Cev/logo.png", - "tags": ["meme-token", "CATE", "NFT", "community"], - "extensions": { - "twitter": "https://twitter.com/CatecoinSol", - "website": "https://solscan.io/token/CPL7TvVnQXQ8aN2DytF53uskyYAVxgNx5z2waJrc3Cev" - } - }, - { - "chainId": 101, - "address": "BWm92csusaUNPWu8M2aC2UTcGQVJsrhH7JYtd47zN7FA", - "symbol": "DOELON", - "name": "Dogs Of Elon", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BWm92csusaUNPWu8M2aC2UTcGQVJsrhH7JYtd47zN7FA/logo.png", - "tags": ["meme-token", "DOGE", "NFT", "community"], - "extensions": { - "twitter": "https://twitter.com/ElonDogs", - "website": "https://solscan.io/token/BWm92csusaUNPWu8M2aC2UTcGQVJsrhH7JYtd47zN7FA" - } - }, - { - "chainId": 101, - "address": "EpxkCmZT9MmGe2UfpH7zFEhpi8RknT4BwG2VyGJPG4Ps", - "symbol": "CUMSTAR", - "name": "CumStar SOL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EpxkCmZT9MmGe2UfpH7zFEhpi8RknT4BwG2VyGJPG4Ps/logo.png", - "tags": ["Application", "Payment", "NFT", "community"], - "extensions": { - "twitter": "https://twitter.com/CumStarSol", - "website": "https://solscan.io/token/EpxkCmZT9MmGe2UfpH7zFEhpi8RknT4BwG2VyGJPG4Ps" - } - }, - { - "chainId": 101, - "address": "F5f9hLQ6FNHwuU3dS8CUCRy9r2deJXYCinDL6RAxsPeX", - "symbol": "BABYFLOKISOL", - "name": "Baby Floki Doge", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/F5f9hLQ6FNHwuU3dS8CUCRy9r2deJXYCinDL6RAxsPeX/logo.png", - "tags": ["meme-token", "DOGE", "NFT", "community"], - "extensions": { - "website": "https://solscan.io/token/F5f9hLQ6FNHwuU3dS8CUCRy9r2deJXYCinDL6RAxsPeX" - } - }, - { - "chainId": 101, - "address": "39cG39AZ4cG7oGNMe4RhD3xAzjy1nkiNgk8W6WbDCgeR", - "symbol": "XHamster", - "name": "xHamster", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/39cG39AZ4cG7oGNMe4RhD3xAzjy1nkiNgk8W6WbDCgeR/logo.png", - "tags": [ - "payment-protocol", - "Payment", - "Videos", - "community", - "live-stream" - ], - "extensions": { - "twitter": "https://twitter.com/xhamster_sol", - "website": "https://solscan.io/token/39cG39AZ4cG7oGNMe4RhD3xAzjy1nkiNgk8W6WbDCgeR" - } - }, - { - "chainId": 101, - "address": "Fkbimv9CBGZANAqRJZQ732xEZ5EA4GidjeNRKiYoDY5y", - "symbol": "FLOKI", - "name": "Floki Inu SOL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Fkbimv9CBGZANAqRJZQ732xEZ5EA4GidjeNRKiYoDY5y/logo.png", - "tags": ["meme-token", "DOGE", "NFT", "community", "FLOKI"], - "extensions": { - "twitter": "https://twitter.com/floki_sol", - "website": "https://solscan.io/token/Fkbimv9CBGZANAqRJZQ732xEZ5EA4GidjeNRKiYoDY5y" - } - }, - { - "chainId": 101, - "address": "3fFHsncY59ue2HPduo1KhbZRWYRd8iek5tj88sPXMgFk", - "symbol": "FLOKI", - "name": "Floki Viking", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3fFHsncY59ue2HPduo1KhbZRWYRd8iek5tj88sPXMgFk/logo.png", - "tags": ["community-token", "meme-token", "doge", "Floki"], - "extensions": { - "twitter": "https://twitter.com/FlokiVikingSOL", - "website": "https://www.flokiviking.net" - } - }, - { - "chainId": 101, - "address": "37mG5XYuwMSutQnvERDUZqxumes5hYp89X2gpBbedpZ2", - "symbol": "ELON", - "name": "Dogelon Mars", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/37mG5XYuwMSutQnvERDUZqxumes5hYp89X2gpBbedpZ2/logo.png", - "tags": ["community-token", "meme-token", "doge", "MUSK"], - "extensions": { - "twitter": "https://twitter.com/DogeElonMarsSol", - "website": "https://solscan.io/token/37mG5XYuwMSutQnvERDUZqxumes5hYp89X2gpBbedpZ2" - } - }, - { - "chainId": 101, - "address": "ApSAjELw31MrMMxWXPeSrsDaakmA66XE1gpJKJhhh5ix", - "symbol": "FJB", - "name": "FJB", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ApSAjELw31MrMMxWXPeSrsDaakmA66XE1gpJKJhhh5ix/logo.png", - "tags": ["meme-token"], - "extensions": { - "instagram": "https://www.instagram.com/official_fjb", - "twitter": "https://twitter.com/official_fjb", - "website": "http://OfficialFJB.com" - } - }, - { - "chainId": 101, - "address": "6cH34XtzNgCDwb7NFbiji1a1N8F3FgmXTrFxvzBZNVui", - "symbol": "KINGSHIB", - "name": "King Shiba", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6cH34XtzNgCDwb7NFbiji1a1N8F3FgmXTrFxvzBZNVui/logo.png", - "tags": ["meme", "community", "NFTs", "DEFI", "Dog"], - "extensions": { - "twitter": "https://twitter.com/kingshiba_sol", - "website": "https://www.kingshibaofficial.com/" - } - }, - { - "chainId": 101, - "address": "B8NrYG3ZGbmDS6Xv5PUSdpJmXor9VvtxibvDRKNq3rnc", - "symbol": "METASOL", - "name": "META SOL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/B8NrYG3ZGbmDS6Xv5PUSdpJmXor9VvtxibvDRKNq3rnc/logo.png", - "tags": ["community", "NFTs", "DEFI", "Facebook"], - "extensions": { - "twitter": "https://twitter.com/MetaSol2" - } - }, - { - "chainId": 101, - "address": "9HEGaeiuK1YNq4v69kVXqF1ssnpndpkVE9hbo8PSftGh", - "symbol": "RUGP", - "name": "Rug Pull Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9HEGaeiuK1YNq4v69kVXqF1ssnpndpkVE9hbo8PSftGh/logo.png", - "tags": ["social-token", "utility-token", "meme-token"], - "extensions": { - "description": "This is a coin on a mission to inform you of the dangers investing and prevent you from being scammed.", - "twitter": "https://twitter.com/rug_puller", - "website": "https://rug-pull-coin.com" - } - }, - { - "chainId": 101, - "address": "8cDqXAoivNdvwd1sy74rTfMeYMM4J1u1ey8WRFYk5RD", - "symbol": "YEE", - "name": "YEECoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8cDqXAoivNdvwd1sy74rTfMeYMM4J1u1ey8WRFYk5RD/logo.png", - "tags": ["meme-token"], - "extensions": { - "website": "https://solana-nft.io/" - } - }, - { - "chainId": 103, - "address": "9tjgbaSSEyPgRgTLVaTzzZR46xPq1jU6d7fB217czRdK", - "symbol": "QAI", - "name": "Quartic AI Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9tjgbaSSEyPgRgTLVaTzzZR46xPq1jU6d7fB217czRdK/logo.png", - "tags": ["utility-token", "meme-token"] - }, - { - "chainId": 101, - "address": "7ouSGk4PvjczBVKqXaV5TCuYpZgw8KhcJovvUfyUdsSv", - "symbol": "MBLZ", - "name": "MARBLZ Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7ouSGk4PvjczBVKqXaV5TCuYpZgw8KhcJovvUfyUdsSv/logo.png", - "tags": ["meme-token"], - "extensions": { - "website": "https://marblz.io/" - } - }, - { - "chainId": 101, - "address": "2vspUf3wUsTPARa7EngGD3uoU6YgT9HRDhFpTdxa7rrW", - "symbol": "CRYO", - "name": "cryogen", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2vspUf3wUsTPARa7EngGD3uoU6YgT9HRDhFpTdxa7rrW/logo.png", - "tags": ["utility-token", "Metaverse", "Gamefi"], - "extensions": { - "discord": "https://discord.gg/NDacA7b6AQ", - "twitter": "https://twitter.com/crypunks", - "website": "https://crypunks.com/" - } - }, - { - "chainId": 101, - "address": "3WLDzzYXvhAwyX4xLAVuvVHfh6Eoq8uieKC8HhmLAhDe", - "symbol": "DANDO", - "name": "Dancing Doge", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3WLDzzYXvhAwyX4xLAVuvVHfh6Eoq8uieKC8HhmLAhDe/logo.png", - "extensions": { - "twitter": "https://twitter.com/DandoToken", - "website": "https://dancingdoge.co/" - } - }, - { - "chainId": 101, - "address": "9K4uNquZjVSBBN6fBsp62gtYLropyAxAbdZC7D9XErih", - "symbol": "OPPA", - "name": "OPPA", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9K4uNquZjVSBBN6fBsp62gtYLropyAxAbdZC7D9XErih/logo.png", - "tags": ["community-token", "utility-token"], - "extensions": { - "discord": "https://discord.gg/XN6CbxD6m7", - "twitter": "https://twitter.com/OppaNFT", - "website": "https://nft.heyoppa.com/" - } - }, - { - "chainId": 101, - "address": "5Rxq1GiVeuhhgcy3BEHLtjrHir1RKcNVpi5J6ZGMVDxj", - "symbol": "BERS", - "name": "Bers Coin", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5Rxq1GiVeuhhgcy3BEHLtjrHir1RKcNVpi5J6ZGMVDxj/logo.png", - "tags": [ - "mongolian-token", - "gamefi", - "ads-token", - "community-token", - "nft-token" - ], - "extensions": { - "facebook": "https://www.facebook.com/berscoin", - "website": "https://berscoin.com/", - "youtube": "https://www.youtube.com/c/BersCoinBersTube" - } - }, - { - "chainId": 101, - "address": "ZEExktbqMM5ZMS569pCNbzky92KeEmiFeVwR3exfBNn", - "symbol": "ZEE", - "name": "ZEE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ZEExktbqMM5ZMS569pCNbzky92KeEmiFeVwR3exfBNn/logo.png", - "tags": ["zoints"], - "extensions": { - "website": "https://zoints.com" - } - }, - { - "chainId": 101, - "address": "AymKzSDznoLT7Vhsb4wSRnCj1gjcG3zkgYFY8fxsHHer", - "symbol": "TICKET", - "name": "The Ticket Finance", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AymKzSDznoLT7Vhsb4wSRnCj1gjcG3zkgYFY8fxsHHer/logo.png", - "tags": ["launchpad", "dex", "defi", "exchange", "utility-token"], - "extensions": { - "serumV3Usdc": "HBfdGEMeQQpGogC3Li4uhRqZxGZAVLM9zimt31vdtSdA", - "telegram": "https://t.me/theticketfinance", - "twitter": "https://twitter.com/TheTicketSol", - "website": "https://theticket.finance" - } - }, - { - "chainId": 101, - "address": "2vfgEPJStq761qrkyh8xedrj9zpew1GQ8CobjtQ4wtyM", - "symbol": "BOO", - "name": "BOO", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2vfgEPJStq761qrkyh8xedrj9zpew1GQ8CobjtQ4wtyM/logo.png", - "extensions": { - "twitter": "https://twitter.com/solaghosts", - "website": "https://www.solaghosts.io" - } - }, - { - "chainId": 101, - "address": "CSQn7G3SmbBVFRMvNH5SJV5sd2HipWSCphfDVcXwY3K6", - "symbol": "DANG", - "name": "DANG", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CSQn7G3SmbBVFRMvNH5SJV5sd2HipWSCphfDVcXwY3K6/logo.png", - "extensions": { - "website": "https://dang.gg" - } - }, - { - "chainId": 101, - "address": "G5gqGPsrpkRYZPThJJpoVQRtgjo8zapPZ27iCSp2wPX", - "symbol": "AGG", - "name": "Aggie Coin", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/G5gqGPsrpkRYZPThJJpoVQRtgjo8zapPZ27iCSp2wPX/logo.png", - "tags": ["aggie", "aggie-token"] - }, - { - "chainId": 101, - "address": "AVKnbqNQgXDY8kbnno9eSGfwpVz5idimBnDKiz1vbWAh", - "symbol": "PART", - "name": "Particle", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AVKnbqNQgXDY8kbnno9eSGfwpVz5idimBnDKiz1vbWAh/logo.png", - "tags": ["DeFi", "NFT", "Gaming"], - "extensions": { - "coingeckoId": "particle-technology", - "twitter": "https://twitter.com/particle_techno", - "website": "https://particle.technology/" - } - }, - { - "chainId": 101, - "address": "HYoGYzMcbYq3tAvpg15d8VFYVHw6jWEVuGgpNTrG8hps", - "symbol": "DOGELON", - "name": "DOGELON SOLANA", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HYoGYzMcbYq3tAvpg15d8VFYVHw6jWEVuGgpNTrG8hps/logo.png", - "tags": ["meme"], - "extensions": { - "discord": "https://discord.com/invite/A89B9rsB", - "twitter": "https://twitter.com/DogelonSol", - "website": "https://dogelonsol.io/" - } - }, - { - "chainId": 101, - "address": "2kMjMxSLLY3RP1Svg8THnoiAfnaScAemGUhVRF9bYcC7", - "symbol": "BPCoin", - "name": "BPCoin", - "decimals": 9, - "logoURI": "", - "extensions": { - "instagram": "https://instagram.com/bricksproperties", - "website": "https://bricks.properties" - } - }, - { - "chainId": 103, - "address": "4p9KCkzJ26JDNsQY6FJHx8wn2N8UtTfA9KNduWEuLN9b", - "symbol": "UO", - "name": "UOWN Coin", - "decimals": 10, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4p9KCkzJ26JDNsQY6FJHx8wn2N8UtTfA9KNduWEuLN9b/logo.png", - "tags": ["stablecoin"], - "extensions": { - "website": "https://www.uown.co" - } - }, - { - "chainId": 101, - "address": "7zhbkbKpGaUsJW7AD4yyAfGGoy53Xx2H3Ai5BKcwGKHw", - "symbol": "NOM", - "name": "nom", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7zhbkbKpGaUsJW7AD4yyAfGGoy53Xx2H3Ai5BKcwGKHw/logo.png", - "tags": ["dao", "meme-token", "Defi", "Gamefi"], - "extensions": { - "discord": "https://discord.gg/h7CZnKCb", - "twitter": "https://twitter.com/TheNomDAO", - "website": "https://www.nomdao.com" - } - }, - { - "chainId": 103, - "address": "RMRUKEmLrdjYSpd7gxQQ2y4VuFcM8jkanXaDNuMdaCZ", - "symbol": "RM", - "name": "Ringgit Malaysia", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/RMRUKEmLrdjYSpd7gxQQ2y4VuFcM8jkanXaDNuMdaCZ/logo.png", - "tags": ["stablecoin", "ringgit", "malaysia"], - "extensions": { - "twitter": "https://twitter.com/ringgitfinance", - "website": "https://ringgit.finance" - } - }, - { - "chainId": 101, - "address": "Bp2vDyLQHE7nfx1e4h4E1mFEeMKk36PnvpXfxxPWm5dZ", - "symbol": "SOLPANDS", - "name": "SOLPANDS", - "decimals": 9, - "logoURI": "https://i.ibb.co/m07n4vn/photo-2021-10-30-00-38-55.jpg", - "tags": ["meme-token"], - "extensions": { - "twitter": "https://twitter.com/SOLPANDS" - } - }, - { - "chainId": 101, - "address": "6XWfkyg5mzGtKNftSDgYjyoPyUsLRf2rafj95XSFSFrr", - "symbol": "KITTY", - "name": "Kitty Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6XWfkyg5mzGtKNftSDgYjyoPyUsLRf2rafj95XSFSFrr/logo.png", - "tags": ["meme-token", "kitty", "cat"], - "extensions": { - "coingeckoId": "kitty-coin-solana", - "coinmarketcap": "https://coinmarketcap.com/currencies/kitty-coin-solana/", - "discord": "https://discord.gg/kittycoinsolana", - "serumV3Usdc": "FAHa34qbNbvtEBHgjuALk4WLJMwxJTtV6Z3V3p79XLWG", - "serumV3Usdt": "H8VLs7VYaBg3rg1NvVNJKb1QWMf3kzieTPkgPmVffXTx", - "telegram": "https://t.me/kittycoinsolana_off", - "twitter": "https://twitter.com/KittyCoinSolana", - "website": "https://kittycoinsolana.com/" - } - }, - { - "chainId": 101, - "address": "FZMcCAq9U65mymBjUxKXPUJehDJMLg54Ud5bTrmbaHYS", - "symbol": "DCN", - "name": "DoodleCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FZMcCAq9U65mymBjUxKXPUJehDJMLg54Ud5bTrmbaHYS/logo.png", - "tags": ["meme-token"], - "extensions": { - "website": "https://doodlecoin.me/" - } - }, - { - "chainId": 101, - "address": "DCDUaGKLHcwEXdd2MiUYmW4PFtzCfCxncUZ5UZyGxdqh", - "symbol": "KATZ", - "name": "MeerkatCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DCDUaGKLHcwEXdd2MiUYmW4PFtzCfCxncUZ5UZyGxdqh/logo.png", - "tags": ["community-token"], - "extensions": { - "discord": "https://discord.gg/ynkkE3raZf", - "twitter": "https://twitter.com/mmccsolana", - "website": "https://meerkatmillionaires.club" - } - }, - { - "chainId": 101, - "address": "9wPT3uJrH43TPPupYyaywXaaqBNLTxMDGoaAvnz4RMMR", - "symbol": "DKC", - "name": "DockCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9wPT3uJrH43TPPupYyaywXaaqBNLTxMDGoaAvnz4RMMR/logo.png", - "tags": ["meme-token"], - "extensions": { - "website": "https://dockcoin.me/" - } - }, - { - "chainId": 101, - "address": "Bo2kpetkHvtdjASpeRRiugzmdFhvbVsCMH6aq4mNd8TL", - "symbol": "NETX", - "name": "Syncline Health Network", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Bo2kpetkHvtdjASpeRRiugzmdFhvbVsCMH6aq4mNd8TL/logo.png", - "tags": ["utility-token"], - "extensions": { - "telegram": "https://t.me/joinchat/SKSLdG0sF53TFK6_", - "twitter": "https://twitter.com/synclinenetwork", - "website": "https://syncline.network" - } - }, - { - "chainId": 101, - "address": "6gNNYnBxXccu1PSzFDqhQdNACJNF7TEQc6kPQwZ8Zwv", - "symbol": "INK", - "name": "Octopus Ink", - "decimals": 0, - "logoURI": "https://gateway.pinata.cloud/ipfs/QmV6Au6eeGiS4F7qkWaueNDLyx2vV6fs3q67opyzVDKFz6", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/nSMc9EjvT4", - "twitter": "https://twitter.com/socialoctopusio", - "website": "https://socialoctopus.io" - } - }, - { - "chainId": 101, - "address": "Ch9NFVk5sqEPQHtw2gJVgnHfTm7FW1JspYwc7SxLi6q3", - "symbol": "MEND", - "name": "Mend", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Ch9NFVk5sqEPQHtw2gJVgnHfTm7FW1JspYwc7SxLi6q3/logo.png", - "extensions": { - "twitter": "https://twitter.com/mendappinc", - "website": "https://mend.house" - } - }, - { - "chainId": 101, - "address": "J9yYvSXrtMV749XAbcFeMFpeY4AFwkFq9WpNDmmfV81Q", - "symbol": "POCH", - "name": "Poochu Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/J9yYvSXrtMV749XAbcFeMFpeY4AFwkFq9WpNDmmfV81Q/logo.png", - "tags": [ - "stake-pool-token", - "utility-token", - "meme-token", - "community-token" - ] - }, - { - "chainId": 101, - "address": "7YhfUG27m7ceDCBnB48dGy4mAJab2hqi6YKkp9Ho7ybv", - "symbol": "BANANA", - "name": "Banana Bucks", - "decimals": 2, - "logoURI": "https://i.ibb.co/DMQNjc0/bananabucks-thumbnail.jpg", - "tags": ["meme-token"], - "extensions": { - "discord": "https://discord.gg/DVH2ggAc", - "twitter": "https://twitter.com/solbananabucks" - } - }, - { - "chainId": 101, - "address": "snowRZ1wtHa7eiBhJVUqkyFn8P8zwkmL4UTXU7Zdgbu", - "symbol": "SNOW", - "name": "Snowflake", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/snowRZ1wtHa7eiBhJVUqkyFn8P8zwkmL4UTXU7Zdgbu/logo.png", - "extensions": { - "twitter": "https://twitter.com/snowflake_sol", - "website": "https://snowflake.so" - } - }, - { - "chainId": 101, - "address": "inL8PMVd6iiW3RCBJnr5AsrRN6nqr4BTrcNuQWQSkvY", - "symbol": "IN", - "name": "Sol Invictus", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/inL8PMVd6iiW3RCBJnr5AsrRN6nqr4BTrcNuQWQSkvY/logo-owl.png", - "tags": [ - "decentralizedreserve", - "utility-token", - "DeFi", - "community-token" - ], - "extensions": { - "coingeckoId": "invictus", - "discord": "https://discord.gg/invictusdao", - "serumV3Usdc": "49vwM54DX3JPXpey2daePZPmimxA4CrkXLZ6E1fGxx2Z", - "twitter": "https://twitter.com/InvictusDAO", - "website": "https://invictusdao.fi/" - } - }, - { - "chainId": 101, - "address": "7puG5H5Mc6QpvaXjAVLr6GnL5hhUMnpLcUm8G3mEsgHQ", - "symbol": "LEONIDAS", - "name": "Leonidas Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7puG5H5Mc6QpvaXjAVLr6GnL5hhUMnpLcUm8G3mEsgHQ/logo.png", - "tags": [ - "community-token", - "utility-token", - "social-token", - "NFTs", - "DeFi" - ], - "extensions": { - "coingeckoId": "leonidas-token", - "discord": "https://www.discord.com/invite/drN8FUruAu", - "instagram": "https://www.instagram.com/leonidas_token", - "medium": "https://leonidastoken.medium.com", - "reddit": "https://www.reddit.com/r/leonidas_token", - "serumV3Usdc": "DTEmm1nC7n8vb3KmVabT6dEEnSNeDXNu1jWN4u2DfD7Z", - "telegram": "https://t.me/leonidas_token", - "twitter": "https://twitter.com/leonidas_token", - "website": "https://www.leonidastoken.com" - } - }, - { - "chainId": 101, - "address": "8pMdj3AvCV4EbqRBCHMyDAVeMtBmP4wMhCDXqAtFcAqD", - "symbol": "GROOT", - "name": "Groot", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8pMdj3AvCV4EbqRBCHMyDAVeMtBmP4wMhCDXqAtFcAqD/logo.png", - "tags": ["meme-token"], - "extensions": { - "website": "https://groot.sol/" - } - }, - { - "chainId": 101, - "address": "CiKu4eHsVrc1eueVQeHn7qhXTcVu95gSQmBpX4utjL9z", - "symbol": "SHIB", - "name": "SHIBA INU (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CiKu4eHsVrc1eueVQeHn7qhXTcVu95gSQmBpX4utjL9z/logo.png", - "tags": ["wrapped", "ethereum"], - "extensions": { - "address": "0x95ad61b0a150d79219dcf64e1e6cc01f0b64c4ce", - "assetContract": "https://etherscan.io/address/0x95ad61b0a150d79219dcf64e1e6cc01f0b64c4ce", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "shiba-inu", - "serumV3Usdc": "Er7Jp4PADPVHifykFwbVoHdkL1RtZSsx9zGJrPJTrCgW" - } - }, - { - "chainId": 101, - "address": "HysWcbHiYY9888pHbaqhwLYZQeZrcQMXKQWRqS7zcPK5", - "symbol": "AXSet", - "name": "Axie Infinity Shard (Portal from Ethereum)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HysWcbHiYY9888pHbaqhwLYZQeZrcQMXKQWRqS7zcPK5/logo.png", - "tags": ["wrapped", "ethereum"], - "extensions": { - "address": "0xbb0e17ef65f82ab018d8edd776e8dd940327b28b", - "assetContract": "https://etherscan.io/address/0xbb0e17ef65f82ab018d8edd776e8dd940327b28b", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "axie-infinity", - "serumV3Usdc": "HZCheduA4nsSuQpVww1TiyKZpXSAitqaXxjBD2ymg22X" - } - }, - { - "chainId": 101, - "address": "4Hx6Bj56eGyw8EJrrheM6LBQAvVYRikYCWsALeTrwyRU", - "symbol": "DYDX", - "name": "dYdX (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4Hx6Bj56eGyw8EJrrheM6LBQAvVYRikYCWsALeTrwyRU/logo.png", - "tags": ["wrapped", "ethereum"], - "extensions": { - "address": "0x92d6c1e31e14520e676a687f0a93788b716beff5", - "assetContract": "https://etherscan.io/address/0x92d6c1e31e14520e676a687f0a93788b716beff5", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "dydx", - "serumV3Usdc": "GNmTGd6iQvQApXgsyvHepDpCnvdRPiWzRr8kzFEMMNKN" - } - }, - { - "chainId": 101, - "address": "G5V7t3ZHTUGi6xGfk5nc42P1iRkNN3JhaFwFXkvyDmz5", - "symbol": "tuBTC", - "name": "tuBTC", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/sol-farm/token-logos/dad49dff5a8cb4abc6c3ccae35dc845a2af46f98/tuBTC.png", - "tags": ["tulip-protocol", "lending", "collateral-tokens"], - "extensions": { - "twitter": "https://twitter.com/TulipProtocol", - "waterfallbot": "https://bit.ly/TULIPwaterfall", - "website": "https://tulip.garden" - } - }, - { - "chainId": 101, - "address": "HRYfSMc1gYEvxo9zsh14jYHKxAcfJfoVakKtRtJEomb8", - "symbol": "tuORCA", - "name": "tuORCA", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/sol-farm/token-logos/dad49dff5a8cb4abc6c3ccae35dc845a2af46f98/tuORCA.png", - "tags": ["tulip-protocol", "lending", "collateral-tokens"], - "extensions": { - "twitter": "https://twitter.com/TulipProtocol", - "waterfallbot": "https://bit.ly/TULIPwaterfall", - "website": "https://tulip.garden" - } - }, - { - "chainId": 101, - "address": "CEqYVZCL7sHQ8gChh1yL3uajc2UDs6DXuYjPZyRox6MC", - "symbol": "tuSAMO", - "name": "tuSAMO", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/sol-farm/token-logos/dad49dff5a8cb4abc6c3ccae35dc845a2af46f98/tuSAMO.png", - "tags": ["tulip-protocol", "lending", "collateral-tokens"], - "extensions": { - "twitter": "https://twitter.com/TulipProtocol", - "waterfallbot": "https://bit.ly/TULIPwaterfall", - "website": "https://tulip.garden" - } - }, - { - "chainId": 101, - "address": "4QSK13NTKxTBExbMjHFsj3QfHBn4Hfp3DGLSba8GvFvh", - "symbol": "tuSRM", - "name": "tuSRM", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/sol-farm/token-logos/dad49dff5a8cb4abc6c3ccae35dc845a2af46f98/tuSRM.png", - "tags": ["tulip-protocol", "lending", "collateral-tokens"], - "extensions": { - "twitter": "https://twitter.com/TulipProtocol", - "waterfallbot": "https://bit.ly/TULIPwaterfall", - "website": "https://tulip.garden" - } - }, - { - "chainId": 101, - "address": "8cn7JcYVjDZesLa3RTt3NXne4WcDw9PdUneQWuByehwW", - "symbol": "tumSOL", - "name": "tumSOL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/sol-farm/token-logos/dad49dff5a8cb4abc6c3ccae35dc845a2af46f98/tumSOL.png", - "tags": ["tulip-protocol", "lending", "collateral-tokens"], - "extensions": { - "twitter": "https://twitter.com/TulipProtocol", - "waterfallbot": "https://bit.ly/TULIPwaterfall", - "website": "https://tulip.garden" - } - }, - { - "chainId": 101, - "address": "85SyKDLXZPC1sqdFqasywQojutGhDCobbPHM6zczD1Li", - "symbol": "tuwhETH", - "name": "tuwhETH", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/sol-farm/token-logos/dad49dff5a8cb4abc6c3ccae35dc845a2af46f98/tuwhETH.png", - "tags": ["tulip-protocol", "lending", "collateral-tokens"], - "extensions": { - "twitter": "https://twitter.com/TulipProtocol", - "waterfallbot": "https://bit.ly/TULIPwaterfall", - "website": "https://tulip.garden" - } - }, - { - "chainId": 101, - "address": "6nKUU36URHkewHg5GGGAgxs6szkE4VTioGUT5txQqJFU", - "symbol": "ELON", - "name": "Dogelon Mars (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6nKUU36URHkewHg5GGGAgxs6szkE4VTioGUT5txQqJFU/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x761d38e5ddf6ccf6cf7c55759d5210750b5d60f3", - "assetContract": "https://etherscan.io/address/0x761d38e5ddf6ccf6cf7c55759d5210750b5d60f3", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "dogelon-mars" - } - }, - { - "chainId": 101, - "address": "9ARQsBfAn65q522cEqSJuse3cLhA31jgWDBGQHeiq7Mg", - "symbol": "ALICE", - "name": "My Neighbor Alice (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9ARQsBfAn65q522cEqSJuse3cLhA31jgWDBGQHeiq7Mg/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xac51066d7bec65dc4589368da368b212745d63e8", - "assetContract": "https://etherscan.io/address/0xac51066d7bec65dc4589368da368b212745d63e8", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "my-neighbor-alice" - } - }, - { - "chainId": 101, - "address": "EXExWvT6VyYxEjFzF5BrUxt5GZMPVZnd48y3iWrRefMq", - "symbol": "ENJ", - "name": "Enjin (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EXExWvT6VyYxEjFzF5BrUxt5GZMPVZnd48y3iWrRefMq/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xf629cbd94d3791c9250152bd8dfbdf380e2a3b9c", - "assetContract": "https://etherscan.io/address/0xf629cbd94d3791c9250152bd8dfbdf380e2a3b9c", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "enjin-coin" - } - }, - { - "chainId": 101, - "address": "5TtSKAamFq88grN1QGrEaZ1AjjyciqnCya1aiMhAgFvG", - "symbol": "CHZ", - "name": "Chiliz (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5TtSKAamFq88grN1QGrEaZ1AjjyciqnCya1aiMhAgFvG/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x3506424f91fd33084466f402d5d97f05f8e3b4af", - "assetContract": "https://etherscan.io/address/0x3506424f91fd33084466f402d5d97f05f8e3b4af", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "chiliz" - } - }, - { - "chainId": 101, - "address": "Afe9gSG8NcWicJtC58tUPGWG6pUcdK29d59BJuSAsePJ", - "symbol": "OHM_v1", - "name": "Olympus V1 (Portal)", - "decimals": 8, - "logoURI": "https://cloudflare-ipfs.com/ipfs/QmcDGyz7Ag6PJB7zHQt1uMnJkFjvawAGwWp2UbmoEAtpXp/", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x64aa3364f17a4d01c6f1751fd97c2bd3d7e7f1d5", - "assetContract": "https://etherscan.io/address/0x64aa3364f17a4d01c6f1751fd97c2bd3d7e7f1d5", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585" - } - }, - { - "chainId": 101, - "address": "BCsFXYm81iqXyYmrLKgAp3AePcgLHnirb8FjTs6sjM7U", - "symbol": "SPELL", - "name": "Spell Token (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BCsFXYm81iqXyYmrLKgAp3AePcgLHnirb8FjTs6sjM7U/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x090185f2135308bad17527004364ebcc2d37e5f6", - "assetContract": "https://etherscan.io/address/0x090185f2135308bad17527004364ebcc2d37e5f6", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "spell-token" - } - }, - { - "chainId": 101, - "address": "DiJut4U3CU8b3bRgwfyqtJMJ4wjzJHaX6hudamjH46Km", - "symbol": "ICE", - "name": "IceToken (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DiJut4U3CU8b3bRgwfyqtJMJ4wjzJHaX6hudamjH46Km/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xf16e81dce15b08f326220742020379b855b87df9", - "assetContract": "https://etherscan.io/address/0xf16e81dce15b08f326220742020379b855b87df9", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "popsicle-finance" - } - }, - { - "chainId": 101, - "address": "64L6o4G2H7Ln1vN7AHZsUMW4pbFciHyuwn4wUdSbcFxh", - "symbol": "KEEP", - "name": "Keep Network (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/64L6o4G2H7Ln1vN7AHZsUMW4pbFciHyuwn4wUdSbcFxh/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x85eee30c52b0b379b046fb0f85f4f3dc3009afec", - "assetContract": "https://etherscan.io/address/0x85eee30c52b0b379b046fb0f85f4f3dc3009afec", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "keep-network" - } - }, - { - "chainId": 101, - "address": "3NZ9JMVBmGAqocybic2c7LQCJScmgsAZ6vQqTDzcqmJh", - "symbol": "WBTC", - "name": "Wrapped BTC (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3NZ9JMVBmGAqocybic2c7LQCJScmgsAZ6vQqTDzcqmJh/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x2260fac5e5542a773aa44fbcfedf7c193bc2c599", - "assetContract": "https://etherscan.io/address/0x2260fac5e5542a773aa44fbcfedf7c193bc2c599", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "wrapped-bitcoin" - } - }, - { - "chainId": 101, - "address": "C7NNPWuZCNjZBfW5p6JvGsR8pUdsRpEdP1ZAhnoDwj7h", - "symbol": "MATICet", - "name": "Matic (Portal from Ethereum)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/C7NNPWuZCNjZBfW5p6JvGsR8pUdsRpEdP1ZAhnoDwj7h/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x7d1afa7b718fb893db30a3abc0cfc608aacfebb0", - "assetContract": "https://etherscan.io/address/0x7d1afa7b718fb893db30a3abc0cfc608aacfebb0", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "polygon" - } - }, - { - "chainId": 101, - "address": "Gz7VkD4MacbEB6yC5XD3HcumEiYx2EtDYYrfikGsvopG", - "symbol": "MATICpo", - "name": "Matic (Portal from Polygon)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Gz7VkD4MacbEB6yC5XD3HcumEiYx2EtDYYrfikGsvopG/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270", - "assetContract": "https://polygonscan.com/address/0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270", - "bridgeContract": "https://polygonscan.com/address/0x5a58505a96d1dbf8df91cb21b54419fc36e93fde", - "coingeckoId": "matic-network", - "serumV3Usdc": "5WRoQxE59966N2XfD2wYy1uhuyKeoVJ9NBMH6r6RNYEF" - } - }, - { - "chainId": 101, - "address": "5njTmK53Ss5jkiHHZvzabVzZj6ztu6WYWpAPYgbVnbjs", - "symbol": "QUICK", - "name": "Quickswap (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5njTmK53Ss5jkiHHZvzabVzZj6ztu6WYWpAPYgbVnbjs/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x831753dd7087cac61ab5644b308642cc1c33dc13", - "assetContract": "https://polygonscan.com/address/0x831753dd7087cac61ab5644b308642cc1c33dc13", - "bridgeContract": "https://polygonscan.com/address/0x5a58505a96d1dbf8df91cb21b54419fc36e93fde", - "coingeckoId": "quickswap" - } - }, - { - "chainId": 101, - "address": "J8LKx7pr9Zxh9nMhhT7X3EBmj5RzuhFrHKyJAe2F2i9S", - "symbol": "CAKE", - "name": "PancakeSwap Token (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/J8LKx7pr9Zxh9nMhhT7X3EBmj5RzuhFrHKyJAe2F2i9S/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x0e09fabb73bd3ade0a17ecc321fd13a19e81ce82", - "assetContract": "https://bscscan.com/address/0x0e09fabb73bd3ade0a17ecc321fd13a19e81ce82", - "bridgeContract": "https://bscscan.com/address/0xB6F6D86a8f9879A9c87f643768d9efc38c1Da6E7", - "coingeckoId": "pancakeswap" - } - }, - { - "chainId": 101, - "address": "5RpUwQ8wtdPCZHhu6MERp2RGrpobsbZ6MH5dDHkUjs2", - "symbol": "BUSDbs", - "name": "BUSD Token (Portal from BSC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5RpUwQ8wtdPCZHhu6MERp2RGrpobsbZ6MH5dDHkUjs2/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xe9e7cea3dedca5984780bafc599bd69add087d56", - "assetContract": "https://bscscan.com/address/0xe9e7cea3dedca5984780bafc599bd69add087d56", - "bridgeContract": "https://bscscan.com/address/0xB6F6D86a8f9879A9c87f643768d9efc38c1Da6E7", - "coingeckoId": "binance-usd" - } - }, - { - "chainId": 101, - "address": "2poo1w1DL6yd2WNTCnNTzDqkC6MBXq7axo77P16yrBuf", - "symbol": "USDT-USDC", - "name": "Saber USDT-USDC LP", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2poo1w1DL6yd2WNTCnNTzDqkC6MBXq7axo77P16yrBuf/icon.png", - "tags": ["saber-stableswap-lp"], - "extensions": { - "website": "https://app.saber.so/#/pools/usdc_usdt" - } - }, - { - "chainId": 101, - "address": "PaiYwHYxr4SsEWox9YmyBNJmxVG7GdauirbBcYGB7cJ", - "symbol": "PAI-USDC", - "name": "Saber PAI-USDC LP", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/PaiYwHYxr4SsEWox9YmyBNJmxVG7GdauirbBcYGB7cJ/icon.png", - "tags": ["saber-stableswap-lp"], - "extensions": { - "website": "https://app.saber.so/#/pools/usdc_pai" - } - }, - { - "chainId": 101, - "address": "SLPbsNrLHv8xG4cTc4R5Ci8kB9wUPs6yn6f7cKosoxs", - "symbol": "BTC-renBTC", - "name": "Saber BTC-renBTC LP", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SLPbsNrLHv8xG4cTc4R5Ci8kB9wUPs6yn6f7cKosoxs/icon.png", - "tags": ["saber-stableswap-lp"], - "extensions": { - "website": "https://app.saber.so/#/pools/btc" - } - }, - { - "chainId": 101, - "address": "pBTCmyG7FaZx4uk3Q2pT5jHKWmWDn84npdc7gZXpQ1x", - "symbol": "pBTC-renBTC", - "name": "Saber pBTC-renBTC LP", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/pBTCmyG7FaZx4uk3Q2pT5jHKWmWDn84npdc7gZXpQ1x/icon.png", - "tags": ["saber-stableswap-lp"], - "extensions": { - "website": "https://app.saber.so/#/pools/pbtc" - } - }, - { - "chainId": 101, - "address": "CLPKiHjoU5HwpPK5L6MBXHKqFsuzPr47dM1w4An3Lnvv", - "symbol": "CASH-USDC", - "name": "Saber CASH-USDC LP", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CLPKiHjoU5HwpPK5L6MBXHKqFsuzPr47dM1w4An3Lnvv/icon.png", - "tags": ["saber-stableswap-lp"], - "extensions": { - "website": "https://app.saber.so/#/pools/cash" - } - }, - { - "chainId": 101, - "address": "XUSDfnsgc2QYXRdbPAbMWoXCbBCCspRSvoGJ8o7RV9n", - "symbol": "xUSD-USDC", - "name": "Saber xUSD-USDC LP", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/XUSDfnsgc2QYXRdbPAbMWoXCbBCCspRSvoGJ8o7RV9n/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-synthetify"], - "extensions": { - "website": "https://app.saber.so/#/pools/xusd" - } - }, - { - "chainId": 101, - "address": "xSoLVBNztDTUW8Kou2GJinHoe54Siu9Sk3e2uoU9aUi", - "symbol": "xSOL-SOL", - "name": "Saber xSOL-SOL LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/xSoLVBNztDTUW8Kou2GJinHoe54Siu9Sk3e2uoU9aUi/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-synthetify"], - "extensions": { - "website": "https://app.saber.so/#/pools/xsol" - } - }, - { - "chainId": 101, - "address": "xFTTLsMdN28XHtYTTTVWYz5zwXWBm5r1WTuZ7Cc7SyA", - "symbol": "xFTT-wFTT", - "name": "Saber xFTT-wFTT LP", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/xFTTLsMdN28XHtYTTTVWYz5zwXWBm5r1WTuZ7Cc7SyA/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-synthetify"], - "extensions": { - "website": "https://app.saber.so/#/pools/xftt" - } - }, - { - "chainId": 101, - "address": "xETH89889mVRwsw9tSUnULsdLUPryTpijagy2YXxWyY", - "symbol": "xETH-whETH", - "name": "Saber xETH-whETH LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/xETH89889mVRwsw9tSUnULsdLUPryTpijagy2YXxWyY/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-synthetify"], - "extensions": { - "website": "https://app.saber.so/#/pools/xeth" - } - }, - { - "chainId": 101, - "address": "xBTCPvRuEuRgz5DuuUd3ju3VP5XtR2Dsu1AxyW9JpXK", - "symbol": "xBTC-renBTC", - "name": "Saber xBTC-renBTC LP", - "decimals": 10, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/xBTCPvRuEuRgz5DuuUd3ju3VP5XtR2Dsu1AxyW9JpXK/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-synthetify"], - "extensions": { - "website": "https://app.saber.so/#/pools/xbtc" - } - }, - { - "chainId": 101, - "address": "UST32f2JtPGocLzsL41B3VBBoJzTm1mK1j3rwyM3Wgc", - "symbol": "wUSTV1-USDC", - "name": "Saber wUST_V1-USDC LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/UST32f2JtPGocLzsL41B3VBBoJzTm1mK1j3rwyM3Wgc/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-wormhole-v1"], - "extensions": { - "website": "https://app.saber.so/#/pools/ust" - } - }, - { - "chainId": 101, - "address": "Daimhb91DY4e3aVaa7YCW5GgwaMT9j1ALSi2GriBvDNh", - "symbol": "wDAIV1-USDC", - "name": "Saber wDAI_V1-USDC LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Daimhb91DY4e3aVaa7YCW5GgwaMT9j1ALSi2GriBvDNh/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-wormhole-v1"], - "extensions": { - "website": "https://app.saber.so/#/pools/dai" - } - }, - { - "chainId": 101, - "address": "BUSDaZjarCrQJLeHpWi7aLaKptdR1S8DFpwdDuuZu9p3", - "symbol": "wBUSDV1-USDC", - "name": "Saber wBUSD_V1-USDC LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BUSDaZjarCrQJLeHpWi7aLaKptdR1S8DFpwdDuuZu9p3/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-wormhole-v1"], - "extensions": { - "website": "https://app.saber.so/#/pools/busd" - } - }, - { - "chainId": 101, - "address": "LUNkiLcb2wxcqULmJvMjuM6YQhpFBadG5KZBe7qBpSE", - "symbol": "wLUNAV1-renLUNA", - "name": "Saber wLUNA_V1-renLUNA LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/LUNkiLcb2wxcqULmJvMjuM6YQhpFBadG5KZBe7qBpSE/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-wormhole-v1"], - "extensions": { - "website": "https://app.saber.so/#/pools/luna" - } - }, - { - "chainId": 101, - "address": "FRAXXvt2ucEsxYPK4nufDy5zKhb2xysieqRBE1dQTqnK", - "symbol": "wFRAXV1-USDC", - "name": "Saber wFRAX_V1-USDC LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FRAXXvt2ucEsxYPK4nufDy5zKhb2xysieqRBE1dQTqnK/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-wormhole-v1"], - "extensions": { - "website": "https://app.saber.so/#/pools/frax" - } - }, - { - "chainId": 101, - "address": "HBTCNvkwjMsEtwe2PeXUuMcu8C4Hobw6HDP2m6vpWHGo", - "symbol": "wHBTCV1-renBTC", - "name": "Saber wHBTC_V1-renBTC LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HBTCNvkwjMsEtwe2PeXUuMcu8C4Hobw6HDP2m6vpWHGo/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-wormhole-v1"], - "extensions": { - "website": "https://app.saber.so/#/pools/hbtc" - } - }, - { - "chainId": 101, - "address": "HUSDgP5YieANhAAHD42yivX9aFS1zbodTut2Dvvkj8QS", - "symbol": "wHUSDV1-USDC", - "name": "Saber wHUSD_V1-USDC LP", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HUSDgP5YieANhAAHD42yivX9aFS1zbodTut2Dvvkj8QS/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-wormhole-v1"], - "extensions": { - "website": "https://app.saber.so/#/pools/husd" - } - }, - { - "chainId": 101, - "address": "uSdKg2Cs5bCtFSeNXs7aRVNzZJauX58eCkdsfssxTdW", - "symbol": "wUSDKV1-USDC", - "name": "Saber wUSDK_V1-USDC LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/uSdKg2Cs5bCtFSeNXs7aRVNzZJauX58eCkdsfssxTdW/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-wormhole-v1"], - "extensions": { - "website": "https://app.saber.so/#/pools/usdk" - } - }, - { - "chainId": 101, - "address": "FTXdV5wFFhceKjcd1JRrRQTT2uB7ruMerAqbj2rj1Mz7", - "symbol": "wFTTV1-FTT", - "name": "Saber wFTT_V1-FTT LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FTXdV5wFFhceKjcd1JRrRQTT2uB7ruMerAqbj2rj1Mz7/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-wormhole-v1"], - "extensions": { - "website": "https://app.saber.so/#/pools/ftt" - } - }, - { - "chainId": 101, - "address": "SRMKjSJpBHJ5gSVTrimci49SnXc1LVkBi9TGF9RNYdp", - "symbol": "wSRMV1-SRM", - "name": "Saber wSRM_V1-SRM LP", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SRMKjSJpBHJ5gSVTrimci49SnXc1LVkBi9TGF9RNYdp/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-wormhole-v1"], - "extensions": { - "website": "https://app.saber.so/#/pools/srm" - } - }, - { - "chainId": 101, - "address": "BADGsQo6rTxKZuqkY1kSoqhriQwZW3ZVgyPjgDk9mvyo", - "symbol": "wibBTCV1-BTC", - "name": "Saber wibBTC_V1-BTC LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BADGsQo6rTxKZuqkY1kSoqhriQwZW3ZVgyPjgDk9mvyo/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-wormhole-v1"], - "extensions": { - "website": "https://app.saber.so/#/pools/ibbtc" - } - }, - { - "chainId": 101, - "address": "BRENm9SgYJZuCxM4ZJiH6CmZqEBn4MLpD9cnBZDnJgeT", - "symbol": "wibBTCV1-renBTC", - "name": "Saber wibBTC_V1-renBTC LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BRENm9SgYJZuCxM4ZJiH6CmZqEBn4MLpD9cnBZDnJgeT/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-wormhole-v1"], - "extensions": { - "website": "https://app.saber.so/#/pools/ibbtc_ren" - } - }, - { - "chainId": 101, - "address": "BSCNZ4GLnpZYv4BLk5edymk4qty8a6ZpiMbfvtv9gAzL", - "symbol": "weBUSD-USDC", - "name": "Saber weBUSD-USDC LP", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BSCNZ4GLnpZYv4BLk5edymk4qty8a6ZpiMbfvtv9gAzL/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-wormhole-v2"], - "extensions": { - "website": "https://app.saber.so/#/pools/webusd" - } - }, - { - "chainId": 101, - "address": "USDCgfM1psLGhAbx99iPA72mTySvUcVq33qhCJpm65c", - "symbol": "weUSDC-USDC", - "name": "Saber weUSDC-USDC LP", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/USDCgfM1psLGhAbx99iPA72mTySvUcVq33qhCJpm65c/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-wormhole-v2"], - "extensions": { - "website": "https://app.saber.so/#/pools/weusdc" - } - }, - { - "chainId": 101, - "address": "USDTJZL2vH92K5QeCvQTTzvMXUYAdvk3v46CwZyfsue", - "symbol": "weUSDT-USDT", - "name": "Saber weUSDT-USDT LP", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/USDTJZL2vH92K5QeCvQTTzvMXUYAdvk3v46CwZyfsue/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-wormhole-v2"], - "extensions": { - "website": "https://app.saber.so/#/pools/weusdt" - } - }, - { - "chainId": 101, - "address": "USDKKmk1anWU1aEn6GJ6skL3ZvcB9CBAWVkmPGQEHtz", - "symbol": "wUSDK-USDC", - "name": "Saber wUSDK-USDC LP", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/USDKKmk1anWU1aEn6GJ6skL3ZvcB9CBAWVkmPGQEHtz/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-wormhole-v2"], - "extensions": { - "website": "https://app.saber.so/#/pools/wusdk" - } - }, - { - "chainId": 101, - "address": "HUSzWddUQbavKn24cjozm65eps8rq9yhNn5edtTLWfdz", - "symbol": "wHUSD-USDC", - "name": "Saber wHUSD-USDC LP", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HUSzWddUQbavKn24cjozm65eps8rq9yhNn5edtTLWfdz/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-wormhole-v2"], - "extensions": { - "website": "https://app.saber.so/#/pools/whusd" - } - }, - { - "chainId": 101, - "address": "DAihWEjhBc8LEmV1rEekTaiC2zqE5ex7nEFkmoe1Ppp3", - "symbol": "wDAI-USDC", - "name": "Saber wDAI-USDC LP", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DAihWEjhBc8LEmV1rEekTaiC2zqE5ex7nEFkmoe1Ppp3/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-wormhole-v2"], - "extensions": { - "website": "https://app.saber.so/#/pools/wdai" - } - }, - { - "chainId": 101, - "address": "FRXsjEv4jF3r72FgbCXu8uLbPoZGLmCmg3EN1S3cfC4x", - "symbol": "wFRAX-USDC", - "name": "Saber wFRAX-USDC LP", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FRXsjEv4jF3r72FgbCXu8uLbPoZGLmCmg3EN1S3cfC4x/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-wormhole-v2"], - "extensions": { - "website": "https://app.saber.so/#/pools/wfrax" - } - }, - { - "chainId": 101, - "address": "WTHPuMavN9HBvgUafjrL65WqQytQHDwnTAmdFB9whXA", - "symbol": "ETH-whETH", - "name": "Saber ETH-whETH LP", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WTHPuMavN9HBvgUafjrL65WqQytQHDwnTAmdFB9whXA/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-wormhole-v2"], - "extensions": { - "website": "https://app.saber.so/#/pools/wheth" - } - }, - { - "chainId": 101, - "address": "FTXjwjwWqituSXEHnL5VF1mjDhZoAyJqvHiRPsRq3KWK", - "symbol": "aeFTT-wFTT", - "name": "Saber aeFTT-wFTT LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FTXjwjwWqituSXEHnL5VF1mjDhZoAyJqvHiRPsRq3KWK/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-wormhole-v2"], - "extensions": { - "website": "https://app.saber.so/#/pools/wftt" - } - }, - { - "chainId": 101, - "address": "USTCmQpbUGj5iTsXdnTYHZupY1QpftDZhLokSVk6UWi", - "symbol": "wUST-USDC", - "name": "Saber wUST-USDC LP", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/USTCmQpbUGj5iTsXdnTYHZupY1QpftDZhLokSVk6UWi/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-wormhole-v2"], - "extensions": { - "website": "https://app.saber.so/#/pools/wust" - } - }, - { - "chainId": 101, - "address": "LUN1p1dZwSBgTv1JSdn2apdUuLanHKtgNcnpDydVFTU", - "symbol": "wLUNA-renLUNA", - "name": "Saber wLUNA-renLUNA LP", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/LUN1p1dZwSBgTv1JSdn2apdUuLanHKtgNcnpDydVFTU/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-wormhole-v2"], - "extensions": { - "website": "https://app.saber.so/#/pools/wluna" - } - }, - { - "chainId": 101, - "address": "cUSDDDBZRhpDW7eyUUPMuw6u1SiMnzu6i7movwf5jxk", - "symbol": "acUSD-USDC", - "name": "Saber acUSD-USDC LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/cUSDDDBZRhpDW7eyUUPMuw6u1SiMnzu6i7movwf5jxk/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-allbridge"], - "extensions": { - "website": "https://app.saber.so/#/pools/acusd" - } - }, - { - "chainId": 101, - "address": "GEcowHQW46CrEkfAdbcsdt4SV7taCetZF4sFBXN4USDC", - "symbol": "USDC-acUSDC", - "name": "Saber USDC-acUSDC LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GEcowHQW46CrEkfAdbcsdt4SV7taCetZF4sFBXN4USDC/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-allbridge"], - "extensions": { - "website": "https://app.saber.so/#/pools/acusdc" - } - }, - { - "chainId": 101, - "address": "PLYJZgSkcV8UXTWhTyf2WLCMeBoZum1Y4rXgXkoYiNj", - "symbol": "apUSDT-USDT", - "name": "Saber apUSDT-USDT LP", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/PLYJZgSkcV8UXTWhTyf2WLCMeBoZum1Y4rXgXkoYiNj/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-allbridge"], - "extensions": { - "website": "https://app.saber.so/#/pools/apusdt" - } - }, - { - "chainId": 101, - "address": "APUVVYA8Xf7T1PqLyDvNxLtwQ9rRDf3RUxfMttreVzHP", - "symbol": "apUSDC-USDC", - "name": "Saber apUSDC-USDC LP", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/APUVVYA8Xf7T1PqLyDvNxLtwQ9rRDf3RUxfMttreVzHP/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-allbridge"], - "extensions": { - "website": "https://app.saber.so/#/pools/apusdc" - } - }, - { - "chainId": 101, - "address": "MAiP3Zmjhc6NYiCb2xK2893ifvTTDHciCS57Kga39pC", - "symbol": "MAI-USDC", - "name": "Saber MAI-USDC LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/MAiP3Zmjhc6NYiCb2xK2893ifvTTDHciCS57Kga39pC/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-allbridge"], - "extensions": { - "website": "https://app.saber.so/#/pools/mai" - } - }, - { - "chainId": 101, - "address": "BUSDjE9NEQ15aRFTxKFAjUf5vzqBhEgTNbYevWcSB5qp", - "symbol": "abBUSD-USDC", - "name": "Saber abBUSD-USDC LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BUSDjE9NEQ15aRFTxKFAjUf5vzqBhEgTNbYevWcSB5qp/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-allbridge"], - "extensions": { - "website": "https://app.saber.so/#/pools/abbusd" - } - }, - { - "chainId": 101, - "address": "AET3m1Mp2SLi7QX3tSypcZWyEtk1d8dUGcwhweDiZdaR", - "symbol": "whETH-aeWETH", - "name": "Saber whETH-aeWETH LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AET3m1Mp2SLi7QX3tSypcZWyEtk1d8dUGcwhweDiZdaR/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-allbridge"], - "extensions": { - "website": "https://app.saber.so/#/pools/aeeth" - } - }, - { - "chainId": 101, - "address": "AECpyKJWfXVyWnk2d9md5dUj3RuzHRKfQra8MakjuVRz", - "symbol": "aeUSDC-USDC", - "name": "Saber aeUSDC-USDC LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AECpyKJWfXVyWnk2d9md5dUj3RuzHRKfQra8MakjuVRz/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-allbridge"], - "extensions": { - "website": "https://app.saber.so/#/pools/aeusdc" - } - }, - { - "chainId": 101, - "address": "aeTwxcJhujVCq6rwbJri3s6ViYifsJUCFirMjLHgHZ7", - "symbol": "aeUSDT-USDT", - "name": "Saber aeUSDT-USDT LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/aeTwxcJhujVCq6rwbJri3s6ViYifsJUCFirMjLHgHZ7/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-allbridge"], - "extensions": { - "website": "https://app.saber.so/#/pools/aeusdt" - } - }, - { - "chainId": 101, - "address": "aeDebgky5BssqgLo426rXoQTmGrAn1JjEXp6aXFNLic", - "symbol": "aeDAI-USDC", - "name": "Saber aeDAI-USDC LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/aeDebgky5BssqgLo426rXoQTmGrAn1JjEXp6aXFNLic/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-allbridge"], - "extensions": { - "website": "https://app.saber.so/#/pools/aedai" - } - }, - { - "chainId": 101, - "address": "AVC7uVb6R9B34T8zWxQMEK8twvYk26U71gworsujxFNv", - "symbol": "aaUSDC-USDC", - "name": "Saber aaUSDC-USDC LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AVC7uVb6R9B34T8zWxQMEK8twvYk26U71gworsujxFNv/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-allbridge"], - "extensions": { - "website": "https://app.saber.so/#/pools/aausdc" - } - }, - { - "chainId": 101, - "address": "AVTrxHq5P57fYZTYjMuCRWFqsrLmom2gGThNtgEgK1ip", - "symbol": "aaUSDT-USDT", - "name": "Saber aaUSDT-USDT LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AVTrxHq5P57fYZTYjMuCRWFqsrLmom2gGThNtgEgK1ip/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-allbridge"], - "extensions": { - "website": "https://app.saber.so/#/pools/aausdt" - } - }, - { - "chainId": 101, - "address": "AVDuGckLavyLr5YifViaxnoveY6rwqDezHw5kiKiRQEC", - "symbol": "aaDAI-USDC", - "name": "Saber aaDAI-USDC LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AVDuGckLavyLr5YifViaxnoveY6rwqDezHw5kiKiRQEC/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-allbridge"], - "extensions": { - "website": "https://app.saber.so/#/pools/aadai" - } - }, - { - "chainId": 101, - "address": "AVBDpg1UYpDYQLbzEnRY76R3u82PYHtDuc3NBdFS2k39", - "symbol": "aaWBTC-renBTC", - "name": "Saber aaWBTC-renBTC LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AVBDpg1UYpDYQLbzEnRY76R3u82PYHtDuc3NBdFS2k39/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-allbridge"], - "extensions": { - "website": "https://app.saber.so/#/pools/aawbtc" - } - }, - { - "chainId": 101, - "address": "HLPC9r4gbeP6KagT3qJLzFj7iWcYTJs245k9tuHFQGyR", - "symbol": "ahUSDT-USDC", - "name": "Saber ahUSDT-USDC LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HLPC9r4gbeP6KagT3qJLzFj7iWcYTJs245k9tuHFQGyR/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-allbridge"], - "extensions": { - "website": "https://app.saber.so/#/pools/ahusdt" - } - }, - { - "chainId": 101, - "address": "HLPPmd7NzTTNiqKR6rAZYgrH9VhU47kxftecQSk2oD6J", - "symbol": "ahBTC-renBTC", - "name": "Saber ahBTC-renBTC LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HLPPmd7NzTTNiqKR6rAZYgrH9VhU47kxftecQSk2oD6J/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-allbridge"], - "extensions": { - "website": "https://app.saber.so/#/pools/ahwbtc" - } - }, - { - "chainId": 101, - "address": "PortuzxBGYMQXeNmM9Kc6AtHLBwqSrb6xWwZ4trQ1en", - "symbol": "pUSDT-pUSDC", - "name": "Saber pUSDT-pUSDC LP", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/PortuzxBGYMQXeNmM9Kc6AtHLBwqSrb6xWwZ4trQ1en/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-port"], - "extensions": { - "website": "https://app.saber.so/#/pools/port_2pool" - } - }, - { - "chainId": 101, - "address": "SoLEao8wTzSfqhuou8rcYsVoLjthVmiXuEjzdNPMnCz", - "symbol": "mSOL-SOL", - "name": "Saber mSOL-SOL LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SoLEao8wTzSfqhuou8rcYsVoLjthVmiXuEjzdNPMnCz/icon.png", - "tags": ["saber-stableswap-lp"], - "extensions": { - "website": "https://app.saber.so/#/pools/msol_sol" - } - }, - { - "chainId": 101, - "address": "ALP89a89ASo1h5VosTSABtQBKLBgeoaWQexYQrRCMNfV", - "symbol": "aSOL-SOL", - "name": "Saber aSOL-SOL LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ALP89a89ASo1h5VosTSABtQBKLBgeoaWQexYQrRCMNfV/icon.png", - "tags": ["saber-stableswap-lp"], - "extensions": { - "website": "https://app.saber.so/#/pools/asol" - } - }, - { - "chainId": 101, - "address": "PSopTFPXzTRysj2H6W8oTvYBZmJHtRcVaQaDkckifAy", - "symbol": "pSOL-prtSOL", - "name": "Saber pSOL-prtSOL LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/PSopTFPXzTRysj2H6W8oTvYBZmJHtRcVaQaDkckifAy/icon.png", - "tags": ["saber-stableswap-lp"], - "extensions": { - "website": "https://app.saber.so/#/pools/psol" - } - }, - { - "chainId": 101, - "address": "PrsVdKtXDDf6kJQu5Ff6YqmjfE4TZXtBgHM4bjuvRnR", - "symbol": "prtSOL-SOL", - "name": "Saber prtSOL-SOL LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/PrsVdKtXDDf6kJQu5Ff6YqmjfE4TZXtBgHM4bjuvRnR/icon.png", - "tags": ["saber-stableswap-lp"], - "extensions": { - "website": "https://app.saber.so/#/pools/prtsol" - } - }, - { - "chainId": 101, - "address": "stSjCmjQ96BiGhTk8gkU22j1739R8YBQVMq7KXWTqUV", - "symbol": "stSOL-SOL", - "name": "Saber stSOL-SOL LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/stSjCmjQ96BiGhTk8gkU22j1739R8YBQVMq7KXWTqUV/icon.png", - "tags": ["saber-stableswap-lp"], - "extensions": { - "website": "https://app.saber.so/#/pools/stsol" - } - }, - { - "chainId": 101, - "address": "SoCJs5Qw1D3fjGbTqxxovK15FVnYVrwvTbYcBBrZmWj", - "symbol": "scnSOL-SOL", - "name": "Saber scnSOL-SOL LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SoCJs5Qw1D3fjGbTqxxovK15FVnYVrwvTbYcBBrZmWj/icon.png", - "tags": ["saber-stableswap-lp"], - "extensions": { - "website": "https://app.saber.so/#/pools/socean" - } - }, - { - "chainId": 101, - "address": "kiNeKo77w1WBEzFFCXrTDRWGRWGP8yHvKC9rX6dqjQh", - "symbol": "KKO", - "name": "Kineko", - "decimals": 9, - "logoURI": "https://kineko.io/img/cat.jpg", - "tags": ["DeFi", "Gaming", "Gambling"] - }, - { - "chainId": 101, - "address": "3oLpKntC8W9AxiFhafRGBeALGuKdimduUXVPo1GQNHuX", - "symbol": "Otter", - "name": "Ottercoin", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/ottercoin11/ottercoin/logo.png", - "tags": ["meme-token"], - "extensions": { - "discord": "https://discord.gg/gXymhAfceY", - "twitter": "https://twitter.com/ottercoinn", - "website": "https://ottercoin.info/" - } - }, - { - "chainId": 101, - "address": "9mxv3qiMZdcaBeFBrNqiP7WFZLJMFZDeQEnNpDzcWpa9", - "symbol": "GAMER", - "name": "GamerGains", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9mxv3qiMZdcaBeFBrNqiP7WFZLJMFZDeQEnNpDzcWpa9/logo.png", - "tags": ["gaming", "utility-token"], - "extensions": { - "website": "https://gamergains.com" - } - }, - { - "chainId": 101, - "address": "BUGuuhPsHpk8YZrL2GctsCtXGneL1gmT5zYb7eMHZDWf", - "symbol": "BUG", - "name": "Bug", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BUGuuhPsHpk8YZrL2GctsCtXGneL1gmT5zYb7eMHZDWf/logo.png" - }, - { - "chainId": 101, - "address": "3m7A2A8HHdqmiDrjAfaddj7Hxd88FrBHA1KSoqjoELtu", - "symbol": "WAGMI", - "name": "WAGMI", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3m7A2A8HHdqmiDrjAfaddj7Hxd88FrBHA1KSoqjoELtu/logo.png", - "tags": ["meme-token", "community-token"], - "extensions": { - "coingeckoId": "wagmi-on-solana", - "serumV3Usdc": "eju5JDyaf29jYNfq7VrVAocVxGayDEHVHHiM7MYc331", - "twitter": "https://twitter.com/wagmi_sol", - "website": "https://wagmionsolana.com" - } - }, - { - "chainId": 101, - "address": "MYRXNKuLELno5qnfgB1jcMAMV5aPDG2Qk9SiWCKsMNb", - "symbol": "MYR", - "name": "Malaysian Ringgit", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/MYRXNKuLELno5qnfgB1jcMAMV5aPDG2Qk9SiWCKsMNb/logo.png", - "tags": ["stablecoin", "malaysian", "ringgit"], - "extensions": { - "discord": "https://discord.com/invite/ringgitfinance", - "telegram": "https://t.me/ringgitfinance" - } - }, - { - "chainId": 101, - "address": "SLT3iSYKeBuCyxvnfij4RUhMfKxZCY3s12Z5pfkTXhV", - "symbol": "SLT", - "name": "Solit", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SLT3iSYKeBuCyxvnfij4RUhMfKxZCY3s12Z5pfkTXhV/logo.png", - "tags": ["meme-token"], - "extensions": { - "coingeckoId": "solit", - "coinmarketcap": "https://coinmarketcap.com/currencies/solit/", - "medium": "https://solit.medium.com", - "serumV3Usdc": "DhmedYCzs57hspLjP3SKd3NRcsvDbuPSQdooSQof4vek", - "twitter": "https://twitter.com/solitso", - "website": "https://solit.so" - } - }, - { - "chainId": 101, - "address": "2HLHvyQbALDRZoFV3dQxcDh5P57r2SV24JEur9ebArzZ", - "symbol": "BU", - "name": "Bushel", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/jedbontjes/Ulogo/main/Ulogo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "43UsEVeUuzHhM3vtB7a9c5Hy2mC27S24Exj24HsAqCYc", - "symbol": "WILL", - "name": "Will", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/CyberGothica/WILL/main/logo.png", - "tags": ["game-token", "game-currency"], - "extensions": { - "discord": "https://discord.com/channels/885149106341830666", - "twitter": "https://twitter.com/Cyber_Gothica" - } - }, - { - "chainId": 101, - "address": "9wb7mLFrfoPooHTqdPMinN5bTa4BSQaRuAwsjQDaEZot", - "symbol": "SKD", - "name": "SolKanda INU", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9wb7mLFrfoPooHTqdPMinN5bTa4BSQaRuAwsjQDaEZot/logo.png", - "tags": ["meme", "Community-token"], - "extensions": { - "discord": "https://discord.com/invite/KwyTsTec7C", - "twitter": "https://twitter.com/solkandainu", - "website": "https://www.solkandainu.com" - } - }, - { - "chainId": 101, - "address": "FcbLEFSEGwdbg99jGRqzZr4yxw5yCPNAZ79DoMYJeHve", - "symbol": "SSM", - "name": "Safe Shiba Moon", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FcbLEFSEGwdbg99jGRqzZr4yxw5yCPNAZ79DoMYJeHve/logo.png", - "tags": ["Meme-token", "Gaming", "Gambling"], - "extensions": { - "discord": "https://discord.gg/vvY56JgKuB", - "telegram": "https://t.me/joinchat/2dcSL62oXSpmZjIx", - "twitter": "https://twitter.com/SafeShibaMoon", - "website": "https://www.safeshibamoon.com/" - } - }, - { - "chainId": 101, - "address": "76SLtYw4TU2ANeHi3xwZSqFmeYT2wtbhNUJ5kJh6nykh", - "symbol": "groww", - "name": "GrowwCoin", - "decimals": 4, - "logoURI": "https://growwcoin.com/public/groww-logo.png", - "tags": ["utility-token", "social-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/growwcoin", - "website": "https://growwcoin.com" - } - }, - { - "chainId": 101, - "address": "476ZdKh1xue32zNzFWvnyaDEncrBEdq99sDiZXSGyyJu", - "symbol": "TOF", - "name": "Toffee Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/476ZdKh1xue32zNzFWvnyaDEncrBEdq99sDiZXSGyyJu/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "7osS84AkAG2TCrUvrE1wfKwfAqWTCrHnaCsrsyVJd5pY", - "symbol": "THUG", - "name": "Fraktionalized THUG 2856", - "decimals": 3, - "logoURI": "https://arweave.net/q4h6GvG6MQfhXXNJTbLILbZY1OIgLqkJNHzNLClHDiw", - "tags": ["fractionalized-nft"], - "extensions": { - "vault": "https://fraktion.art/vault/Hug8MsePSvyFcnKbkchnDdDQTJbWo2GZNchr3DE6vqrV", - "vaultPubkey": "Hug8MsePSvyFcnKbkchnDdDQTJbWo2GZNchr3DE6vqrV" - } - }, - { - "chainId": 101, - "address": "4Te4KJgjtnZe4aE2zne8G4NPfrPjCwDmaiEx9rKnyDVZ", - "symbol": "SCT", - "name": "SolClout", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4Te4KJgjtnZe4aE2zne8G4NPfrPjCwDmaiEx9rKnyDVZ/logo.png", - "tags": ["social-defi"], - "extensions": { - "twitter": "https://twitter.com/solclout", - "website": "https://www.solclout.com/" - } - }, - { - "chainId": 101, - "address": "CMUA9y6exE7WNF69Lcwc8CWQ3FygyjNTxpMtttxBwXTH", - "symbol": "GAMMA", - "name": "GAMMACoin", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/samhiggs/gammatoken/gamma_logo.png", - "tags": ["meme-token", "work-token", "gamma"] - }, - { - "chainId": 101, - "address": "HtMeEeMQzz5LhzR673dMPS551ck3uCckYNMJxdD6GXpr", - "symbol": "RDCER", - "name": "Resp Dev Cert Emissions Reduction", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/MBernierPanama/RDInitiative/main/RDCER-Github-1.png", - "tags": ["rd-initiative", "emissions-reduction"], - "extensions": { - "discord": "https://discord.gg/5Zx3Qdng4M" - } - }, - { - "chainId": 101, - "address": "5bNttaMQtpu49ivhgRLBAAddGyawpae3SRQ93JYxLp8q", - "symbol": "RDIDAO", - "name": "Resp Dev Invest DAO", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/MBernierPanama/RDInitiative/main/RDIDAO-Github-1.png", - "tags": ["rd-initiative", "invest", "dao"], - "extensions": { - "discord": "https://discord.gg/5Zx3Qdng4M" - } - }, - { - "chainId": 101, - "address": "GdCxbUymsA6WVv3RLt9zUYRsiUPyeRiE2H7zFJEtfvsn", - "symbol": "RDPART", - "name": "Resp Dev Participate", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/MBernierPanama/RDInitiative/main/RPART-Github-2.png", - "tags": ["rd-initiative", "participate"], - "extensions": { - "discord": "https://discord.gg/5Zx3Qdng4M" - } - }, - { - "chainId": 101, - "address": "Hh8Y53uUrcYchjLsYPfm35PE1iJyz5tdiXiJnxh2Nnwn", - "symbol": "SHAB", - "name": "Shabro", - "decimals": 8, - "logoURI": "https://shabronet.com/images/shabro_solana_token_icon.png", - "tags": ["social-token", "utility-token"], - "extensions": { - "website": "https://shabronet.com/" - } - }, - { - "chainId": 101, - "address": "9qXxEVGagc9ccd6b135Z8ZLr4VAWUd7T5KcmMyjYKBdB", - "symbol": "ONGR", - "name": "OnigiriCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9qXxEVGagc9ccd6b135Z8ZLr4VAWUd7T5KcmMyjYKBdB/logo.png", - "extensions": { - "twitter": "https://twitter.com/OnigiriCoin" - } - }, - { - "chainId": 101, - "address": "3LCSAo9Hf64cxtPbArLog3PKkwGkZFN7Ttz1zLdPWPTS", - "symbol": "MORN", - "name": "GoodMorning Token", - "decimals": 9, - "logoURI": "https://i.ibb.co/8dYwfYw/MORN-Circle.png", - "tags": ["meme-token", "community-token", "discord", "gm"], - "extensions": { - "discord": "https://discord.gg/J8XnfSS8AV", - "twitter": "https://twitter.com/token_gm", - "website": "https://gmtoken.cc/" - } - }, - { - "chainId": 101, - "address": "3nWodcvMjowsrDa2TB3FG1gaCJ4d2DstDzo4roBdMWKY", - "symbol": "ANA", - "name": "Anahata Meta", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3nWodcvMjowsrDa2TB3FG1gaCJ4d2DstDzo4roBdMWKY/logo.png", - "tags": ["community-token"], - "extensions": { - "twitter": "https://twitter.com/AnahataMeta" - } - }, - { - "chainId": 103, - "address": "HxtN5ohiptXBaqjiJCkXqWaXjTTLo3vAxCMuVevvAf8q", - "symbol": "CINS", - "name": "Cinovos", - "decimals": 9, - "logoURI": "https://i.ibb.co/1ZGfW5p/cinovos-token-11-2021.png", - "tags": ["CINS", "Cinovos"], - "extensions": { - "website": "https://cinovos.com" - } - }, - { - "chainId": 101, - "address": "RFn7mUjf24UFMBdDVmoggAii4gyHdRDDqmKzGVbkd8c", - "symbol": "FOUR", - "name": "The 4th Pillar Token (Portal)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/RFn7mUjf24UFMBdDVmoggAii4gyHdRDDqmKzGVbkd8c/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x4730fB1463A6F1F44AEB45F6c5c422427f37F4D0", - "assetContract": "https://etherscan.io/address/0x4730fB1463A6F1F44AEB45F6c5c422427f37F4D0", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "the-4th-pillar" - } - }, - { - "chainId": 103, - "address": "97MxeDbRgc6vYP1Sty2XdPXks3QhMD97EVYJ9pP4XcR3", - "symbol": "HGEN", - "name": "HGEN", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/97MxeDbRgc6vYP1Sty2XdPXks3QhMD97EVYJ9pP4XcR3/logo.png" - }, - { - "chainId": 103, - "address": "2U3Mf4umT4CpLhhdwpfmGiktyvhdrLrNNv4z4GgsXNMe", - "symbol": "GENS", - "name": "GENS", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2U3Mf4umT4CpLhhdwpfmGiktyvhdrLrNNv4z4GgsXNMe/logo.png" - }, - { - "chainId": 101, - "address": "FKkAyqqbcrSQiizKmNEFz64VWVct4H5VgFfJ7JA9wYY2", - "symbol": "HVT", - "name": "HARVEST", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FKkAyqqbcrSQiizKmNEFz64VWVct4H5VgFfJ7JA9wYY2/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "http://farmlands.biz/" - } - }, - { - "chainId": 101, - "address": "A98UDy7z8MfmWnTQt6cKjje7UfqV3pTLf4yEbuwL2HrH", - "symbol": "MODUL", - "name": "Modul", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/parametrise/ParametriseLogo/main/Modul_Logomark_White_Pinky_Background.png", - "tags": ["utility-token"], - "extensions": { - "discord": "http://discord.gg/SyqUrzSGEC", - "twitter": "https://twitter.com/Moduluc", - "website": "https://moduluc.com/" - } - }, - { - "chainId": 101, - "address": "6VyYxDbvZ1C27yjbDfPzwUwGsRyYYcDjhV5noG4WJv49", - "symbol": "MUTT", - "name": "MUTT", - "decimals": 5, - "logoURI": "https://arweave.net/YKl53d9y6oMzXfdCHugq49avMgRF3Y8etWRliDXZUWw", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/solanamutts", - "website": "http://www.solanamutts.com/" - } - }, - { - "chainId": 101, - "address": "6StzwSrFeQEkF2xwADqdoz63RXR8dftf9BZnk91o52rm", - "symbol": "PEACH", - "name": "PEACHO TOKEN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6StzwSrFeQEkF2xwADqdoz63RXR8dftf9BZnk91o52rm/peach.png", - "tags": ["community-token", "meme-token"] - }, - { - "chainId": 101, - "address": "AmVpjztzMEzup8opT4aDJQsn5wSyFqBGxBQu1xC2nRPA", - "symbol": "WEEN", - "name": "Weenee", - "decimals": 9, - "logoURI": "https://gateway.pinata.cloud/ipfs/QmcatVKBeBBPYUXWq1x7BUpmGbi7U8m1fhMGRxiKJQpfL1", - "tags": ["meme-token", "utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/lilweenees", - "website": "https://weenee.me" - } - }, - { - "chainId": 101, - "address": "7dgHoN8wBZCc5wbnQ2C47TDnBMAxG4Q5L3KjP67z8kNi", - "symbol": "MANA", - "name": "Decentraland (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7dgHoN8wBZCc5wbnQ2C47TDnBMAxG4Q5L3KjP67z8kNi/logo.png", - "tags": ["wrapped", "ethereum"], - "extensions": { - "address": "0x0f5d2fb29fb7d3cfee444a200298f468908cc942", - "assetContract": "https://etherscan.io/address/0x0f5d2fb29fb7d3cfee444a200298f468908cc942", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "decentraland", - "serumV3Usdc": "7GSn6KQRasgPQCHwCbuDjDCsyZ3cxVHKWFmBXzJUUW8P" - } - }, - { - "chainId": 101, - "address": "49c7WuCZkQgc3M4qH8WuEUNXfgwupZf1xqWkDQ7gjRGt", - "symbol": "SAND", - "name": "Sandbox (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/49c7WuCZkQgc3M4qH8WuEUNXfgwupZf1xqWkDQ7gjRGt/logo.png", - "tags": ["wrapped", "ethereum"], - "extensions": { - "address": "0x3845badade8e6dff049820680d1f14bd3903a5d0", - "assetContract": "https://etherscan.io/address/0x3845badade8e6dff049820680d1f14bd3903a5d0", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "the-sandbox", - "serumV3Usdc": "3FE2g3cadTJjN3C7gNRavwnv7Yh9Midq7h9KgTVUE7tR" - } - }, - { - "chainId": 101, - "address": "3hT6jycBqLLNA7vyYczq8Byo1oFpT6UEH6UK7aFu9UBf", - "symbol": "LCD-SOL", - "name": "LCD-SOL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3hT6jycBqLLNA7vyYczq8Byo1oFpT6UEH6UK7aFu9UBf/logo.svg", - "tags": ["utility-token"], - "extensions": { - "website": "https://www.crazydice.app" - } - }, - { - "chainId": 101, - "address": "J1UmPj193heku4zCiSCPZ15VUma9iH1pyJP52j571dQU", - "symbol": "JUMP", - "name": "Jump", - "decimals": 10, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/J1UmPj193heku4zCiSCPZ15VUma9iH1pyJP52j571dQU/logo.png" - }, - { - "chainId": 101, - "address": "3aAYh35n81F8HPG2QBdE48aYdzGFj2fsLccg91X4AcRc", - "symbol": "CLASH", - "name": "Clash Of Cars", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3aAYh35n81F8HPG2QBdE48aYdzGFj2fsLccg91X4AcRc/logo.png", - "tags": ["solana-token", "utility-token", "community-token"], - "extensions": { - "coingeckoId": "clash-of-cars", - "discord": "https://discord.gg/KP8pUYGc", - "twitter": "https://twitter.com/ClashOfCars", - "website": "https://clashofcars.io" - } - }, - { - "chainId": 101, - "address": "BuWRApgShkSthUiEzBFUo6iVVUqAd8oMucdCwLjh9Efq", - "symbol": "MAYA", - "name": "Maya", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BuWRApgShkSthUiEzBFUo6iVVUqAd8oMucdCwLjh9Efq/logo.png", - "tags": ["solana-token", "utility-token", "community-token"], - "extensions": { - "website": "https://genezys.io" - } - }, - { - "chainId": 101, - "address": "5y8yKzbiKhZnNj1P68rZKvnB1jjWrmzffJ8zV7y1ms9s", - "symbol": "JPORTA", - "name": "JPORTA Coin", - "decimals": 8, - "logoURI": "https://user-images.githubusercontent.com/93989494/141846479-5fb57a0f-d290-433a-afce-2889d18749fb.png", - "tags": ["meme-token"] - }, - { - "chainId": 101, - "address": "49jpm8SpyTwaGaJfUa4AmU28hmW1HoKuqzXkgykysowU", - "symbol": "PSY", - "name": "PSY Coin", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/charliebakerr/psy-token/main/psycoinlogo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/mvWUh8fGYp", - "twitter": "https://twitter.com/shroomz_nft", - "website": "https://shroomznft.io/" - } - }, - { - "chainId": 101, - "address": "B8PczNDh5ydRMWdZmezBeGfgRqcG2Yw8e7BYEQcaSDif", - "symbol": "LNRZ", - "name": "Lunariz", - "decimals": 8, - "logoURI": "https://media.lunariz.com/LNRZ/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/LunarizLNRZ", - "website": "https://lunariz.com" - } - }, - { - "chainId": 101, - "address": "DktNJUJAWJyeLw3ykCkFNpGohE24SoEhevKBskRi6P1y", - "symbol": "SOLBEAR", - "name": "Solar Bear", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DktNJUJAWJyeLw3ykCkFNpGohE24SoEhevKBskRi6P1y/logo.png", - "tags": ["utility-token", "meme-token", "dex"], - "extensions": { - "discord": "https://discord.io/solarbear", - "telegram": "https://t.me/solar_bear_official", - "twitter": "https://twitter.com/solarbear_sol", - "website": "https://solar-bear.com" - } - }, - { - "chainId": 101, - "address": "Foea9rMuUk58xn414yB4PfWcP2VweR2mr3SU3ZUmSEa7", - "symbol": "TURNT", - "name": "TURNT", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Foea9rMuUk58xn414yB4PfWcP2VweR2mr3SU3ZUmSEa7/logo.png", - "extensions": { - "twitter": "https://twitter.com/TurntUpTikis", - "website": "https://www.turntuptikis.com/" - } - }, - { - "chainId": 103, - "address": "C6CTTSQALChg3k3VY5iBAhvFuqqvqbaehVdZXaqcyiz", - "symbol": "DXDGM", - "name": "DEXGM", - "decimals": 0, - "logoURI": "https://gateway.pinata.cloud/ipfs/QmQiNfkoXXHtnuWL1rmuRTfQ92RVypGsvjKs4WGsaT61yt", - "tags": ["DXDGM"] - }, - { - "chainId": 101, - "address": "61BUcCw7xtnjPHCVgBcMe6Q5eF2cgwiSnpSvT8MfMbQw", - "symbol": "KBP", - "name": "KBPsystem", - "decimals": 9, - "logoURI": "https://koleenbp.com/img/portfolio/kbpsystem-blue.png", - "tags": ["kbpsystem", "utility-token", "rewards"] - }, - { - "chainId": 101, - "address": "7q3AdgKuMeDRnjaMQs7ppXjaw4HUxjsdyMrrfiSZraiN", - "symbol": "SOLV", - "name": "SOLVIEW", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Solviewapp/solviewlogo/main/icon.png", - "extensions": { - "telegram": "https://t.me/solviewofficial", - "twitter": "https://twitter.com/Solviewapp", - "website": "https://solview.app/" - } - }, - { - "chainId": 101, - "address": "7aohFKctcbgaSzNTtfL1999hUy4tgDeUC7wLU1ozNmxc", - "symbol": "CRAT", - "name": "CRAT", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7aohFKctcbgaSzNTtfL1999hUy4tgDeUC7wLU1ozNmxc/logo.png", - "tags": ["NFT", "utility-token"], - "extensions": { - "discord": "https://discord.com/invite/corporatslab", - "serumV3Usdc": "8VD5vFACkFyR5G1Nz7xievERN4bjQE7YdLhiDKBMTFxV", - "twitter": "https://twitter.com/RatataNFTs" - } - }, - { - "chainId": 101, - "address": "GV6n9Uow3XzMWSs8vwTCML8SvMA6ozbidaEfdPoSoraQ", - "symbol": "SVIZ", - "name": "Space Vizsla", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GV6n9Uow3XzMWSs8vwTCML8SvMA6ozbidaEfdPoSoraQ/VizslaMoonLogo100x100.png", - "tags": ["meme-token", "community-token", "space-vizsla", "vizsla"], - "extensions": { - "telegram": "https://t.me/VizslaToken", - "website": "https://vizslatoken.org" - } - }, - { - "chainId": 101, - "address": "NA45Qgq1xn2EcrrKik7o9rVPMSgmDXK6kv8134Q8ADW", - "symbol": "EWOOF", - "name": "ElonWoof", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/NA45Qgq1xn2EcrrKik7o9rVPMSgmDXK6kv8134Q8ADW/logo.png", - "tags": ["meme-token"], - "extensions": { - "discord": "https://discord.com/invite/PxnfsBp8zX", - "twitter": "https://twitter.com/elon_woof", - "website": "https://www.elonwoof.com/" - } - }, - { - "chainId": 101, - "address": "2HvCRmrArygEUj2ZoTChjoDTkcQ4PWCGHmxyYt3FieuN", - "symbol": "ELEC", - "name": "ELE Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2HvCRmrArygEUj2ZoTChjoDTkcQ4PWCGHmxyYt3FieuN/logo.png" - }, - { - "chainId": 101, - "address": "9ePJirBV8kDpTxMrr5J2hUFFCEY9Z2AVGawCLmfPfiU5", - "symbol": "SVET", - "name": "SVETLANA", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9ePJirBV8kDpTxMrr5J2hUFFCEY9Z2AVGawCLmfPfiU5/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "2oR1D21bNczbpgH6jY4DEtMbGD49boZ7DPVVUXnTV1iL", - "symbol": "SKUMA", - "name": "SOLKUMAINU", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2oR1D21bNczbpgH6jY4DEtMbGD49boZ7DPVVUXnTV1iL/logo.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "discord": "https://discord.gg/PJ9BGz3Tmx", - "twitter": "https://twitter.com/solkumainu", - "website": "https://solkumainu.com" - } - }, - { - "chainId": 101, - "address": "ALQ6fjG5vSp9ou9PZHZES2cgu5E6QghL37gLNM2seZNh", - "symbol": "DTPT", - "name": "Degen Trash Panda Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ALQ6fjG5vSp9ou9PZHZES2cgu5E6QghL37gLNM2seZNh/logo.png", - "tags": ["NFT"], - "extensions": { - "twitter": "https://twitter.com/DegenTrashPanda", - "website": "https://degentrashpandas.com/" - } - }, - { - "chainId": 101, - "address": "4oZyezadeP4KdskT3oDXWFR6Nsado4rGanaH6p6wNR3P", - "symbol": "MIX", - "name": "MIX", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4oZyezadeP4KdskT3oDXWFR6Nsado4rGanaH6p6wNR3P/logo.png", - "tags": ["stablecoin"], - "extensions": { - "website": "https://mixture.money/" - } - }, - { - "chainId": 101, - "address": "GENEtH5amGSi8kHAtQoezp1XEXwZJ8vcuePYnXdKrMYz", - "symbol": "GENE", - "name": "Genopets", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GENEtH5amGSi8kHAtQoezp1XEXwZJ8vcuePYnXdKrMYz/logo.png", - "tags": ["genopets", "utility-token"], - "extensions": { - "coingeckoId": "genopets", - "discord": "https://discord.gg/genopets", - "serumV3Usdc": "FwZ2GLyNNrFqXrmR8Sdkm9DQ61YnQmxS6oobeH3rrLUM", - "twitter": "https://twitter.com/genopets", - "website": "https://genopets.me" - } - }, - { - "chainId": 101, - "address": "75MxtZ7E6N4mapt2x5cYNHKpri6L6cb63e3YFfZBAAtd", - "symbol": "SMN", - "name": "Solmon", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/75MxtZ7E6N4mapt2x5cYNHKpri6L6cb63e3YFfZBAAtd/logo.png", - "tags": ["utility-token", "DeFi"] - }, - { - "chainId": 101, - "address": "AYXKguzBnvSLaGXYvfaWSiUT5gtoBX6wE1KkRb7s8sJV", - "symbol": "MADZ", - "name": "MADZ social token", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/bwoodr01/cdn@main/src/wine.png", - "tags": ["wine-token", "social-token", "community-token"] - }, - { - "chainId": 101, - "address": "Gs3LLGvDSb85i6Qnu6zKnW7FArxHiPXEjj2JJjbRqtHf", - "symbol": "TIDEE", - "name": "TITTY TOKEN", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Gs3LLGvDSb85i6Qnu6zKnW7FArxHiPXEjj2JJjbRqtHf/logo.png" - }, - { - "chainId": 101, - "address": "AMzb4Tc7gDGHrsz1zUQzjtmQS2AXWuejveAKXKSpsoPU", - "symbol": "GAMESHIB", - "name": "GAME SHIB COIN", - "decimals": 9, - "logoURI": "https://gameshib.com/images/gameshib420.png", - "tags": ["game", "gamefi", "social-token", "meme", "shib"], - "extensions": { - "serumV3Usdc": "63PTn92SL43vSdNSbKRvPxhvNr2vzsoXT2aakz1JNpCb", - "twitter": "https://twitter.com/Gameshibcoin", - "website": "https://gameshib.com" - } - }, - { - "chainId": 101, - "address": "2ah3bN48SKfRJbV93zEwfWz3FoUh44RUhRxDWFGzeaGL", - "symbol": "SAFE", - "name": "Safecoin", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/Fair-Exchange/safecoinwiki/master/Logos/SafeCoin/256.png", - "tags": ["wrapped-wormhole2"], - "extensions": { - "bridgeContract": "https://etherscan.io/address/0xdaf566020156297e2837fdfaa6fbba929a29461e", - "coingeckoId": "safe-coin-2", - "discord": "https://discord.gg/c6hWAkQ", - "facebook": "https://www.facebook.com/safecoins/", - "instagram": "https://www.instagram.com/safecoinproject/", - "medium": "https://safecoin.medium.com/", - "serumV3Usdc": "3zyMD67tUqSfuF8XTZjzBjqT6daEUfx2nk6YSVtmzDnD", - "serumV3Usdt": "2sedHoXJosRteBjP4FEV4U9TJ6JhHaNDgmkzm2dNtSHe", - "telegram": "https://t.me/SafeCoinEN", - "twitter": "https://twitter.com/safecoins", - "website": "https://safecoin.org" - } - }, - { - "chainId": 101, - "address": "97d6kj4itu6cqCNbxwmxjHxUD4QD1wicEi2jFw2Fm5vi", - "symbol": "DEEZ", - "name": "Deez Nuts", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/97d6kj4itu6cqCNbxwmxjHxUD4QD1wicEi2jFw2Fm5vi/logo.png", - "tags": ["meme-token", "community-token"], - "extensions": { - "serumV3Usdc": "DcKJGNX3rAiEgEFKQiaYx9qydhy2z5vHdHTFjLa4KvGq", - "twitter": "https://twitter.com/DeezSolana", - "website": "https://deezsolana.com" - } - }, - { - "chainId": 101, - "address": "8qXGZR71AViyKMZxNesqumG5m6549t2aoQFpxoZa1x87", - "symbol": "420TOKE", - "name": "TOKES", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/jdrnthl/TOKES/main/logo.svg", - "tags": ["weed", "420", "dank", "utility-token"] - }, - { - "chainId": 101, - "address": "5Wgco6reiMwazERpAm3JS1xD7JBHNJJQdNEE9MrUkwtJ", - "symbol": "SP", - "name": "Space Puppy", - "decimals": 9, - "logoURI": "https://spacepuppy.fun/logo_space_puppy.png", - "tags": ["community-token", "meme-token", "social-token", "multi-chain"], - "extensions": { - "telegram": "https://t.me/space_puppy", - "twitter": "https://twitter.com/_spacepuppy", - "website": "https://spacepuppy.fun" - } - }, - { - "chainId": 101, - "address": "AcgJKkqKgoeDQY82pSTFzaJE4dy82kXnoAkg4aNhN2a9", - "symbol": "GMC", - "name": "GM Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AcgJKkqKgoeDQY82pSTFzaJE4dy82kXnoAkg4aNhN2a9/logo.png", - "tags": ["community-token", "meme-token", "social-token", "DeFi"], - "extensions": { - "discord": "https://discord.gg/JubHmwbg36", - "twitter": "https://twitter.com/GMCoiners", - "website": "https://twitter.com/GMCoiners" - } - }, - { - "chainId": 101, - "address": "APm3NKwCVAZ2nCtSgqZ2yG9c3iW3Gft4YKcZV5yUNfT7", - "symbol": "BCGW", - "name": "Blockchain Games Token", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/Hideinseek/techdegree-project-1/main/images/2928898_th2.jpeg", - "tags": ["utility-token", "nft"], - "extensions": { - "twitter": "https://twitter.com/BlockchainGW", - "website": "http://blockchaingames.world" - } - }, - { - "chainId": 101, - "address": "E4LzQYYFg4agn62od66JCq2NGq3o9h6TBnnurTgZhSJs", - "symbol": "TRAM", - "name": "Tramina", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/Eleluokuol/Tramina-/Tramina-Logo.png", - "tags": ["Tramina", "TRAM"] - }, - { - "chainId": 101, - "address": "sonarX4VtVkQemriJeLm6CKeW3GDMyiBnnAEMw1MRAE", - "symbol": "SONAR", - "name": "Sonar Watch", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/sonarX4VtVkQemriJeLm6CKeW3GDMyiBnnAEMw1MRAE/logo.png", - "tags": ["utility-token"], - "extensions": { - "coingeckoId": "sonarwatch", - "discord": "https://discord.gg/sonarwatch", - "twitter": "https://twitter.com/Sonarwatch", - "website": "https://sonar.watch/" - } - }, - { - "chainId": 101, - "address": "yFuQR2juKrFm3vXDhv1eSDTuvppQqPeZjowinWMJFgt", - "symbol": "ITAL", - "name": "TALENTMICRO", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/yFuQR2juKrFm3vXDhv1eSDTuvppQqPeZjowinWMJFgt/logo.png", - "tags": ["utility-token", "ITAL", "social-token"], - "extensions": { - "discord": "https://discord.gg/jRz63Dsa3p", - "facebook": "https://www.facebook.com/ital.talentmicro", - "instagram": "https://www.instagram.com/TalentMicro_ITAL", - "linkedin": "https://www.linkedin.com/company/ital-crypto", - "medium": "https://medium.com/@TalentMicro_ITAL", - "reddit": "https://www.reddit.com/user/ITAL_TalentMicro", - "telegram": "https://t.me/TalentMicro_ITAL_bot", - "twitter": "https://twitter.com/talentmicroital", - "website": "https://www.ital.social" - } - }, - { - "chainId": 101, - "address": "8PH4JNMgdESsXdTbTEhseNgu1PwWWEQw5vAZHSZxaP23", - "symbol": "XLE", - "name": "Excelli Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8PH4JNMgdESsXdTbTEhseNgu1PwWWEQw5vAZHSZxaP23/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://excellicoin.com" - } - }, - { - "chainId": 101, - "address": "2KJwBUfD6oFSMJuKs8ppjULFZtquScYrDpxD38zvHHKP", - "symbol": "PSDN", - "name": "Poseidon Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2KJwBUfD6oFSMJuKs8ppjULFZtquScYrDpxD38zvHHKP/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/token_poseidon" - } - }, - { - "chainId": 101, - "address": "Hkhpu6BU89R6cYZSBgmEfnfshn3NUvnHG6vRBREJFEv7", - "symbol": "OGJ", - "name": "Origin Jambo Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Hkhpu6BU89R6cYZSBgmEfnfshn3NUvnHG6vRBREJFEv7/logo.png", - "extensions": { - "discord": "https://www.discord.gg/jambomambo", - "twitter": "https://twitter.com/JamboMamboLand", - "website": "https://www.jambomambo.io/" - } - }, - { - "chainId": 101, - "address": "3Y1Nc9Cd4jDGeSQEZ8hpfS66LixZ4W3gKLdwf3ph7Bb4", - "symbol": "JEW", - "name": "JEW Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3Y1Nc9Cd4jDGeSQEZ8hpfS66LixZ4W3gKLdwf3ph7Bb4/logo.png" - }, - { - "chainId": 101, - "address": "Cs3ywW9tRrsbkGLqiYPaZ4wPXecEB1vNfnnAR6pbmfBm", - "symbol": "DOGQ", - "name": "Dog Queen", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Namblckchain/token-list/main/assets/mainnet/Cs3ywW9tRrsbkGLqiYPaZ4wPXecEB1vNfnnAR6pbmfBm/logo.png", - "tags": ["meme-token", "community-token"] - }, - { - "chainId": 101, - "address": "5yUX1XpjLSTDyNBTQ3N3oYpu6RH4gckqnSS6Ecg79fAL", - "symbol": "TDX", - "name": "Tiddie Token", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/tiddietoken/Icon2/Screenshot_20211109-102934_WhatsApp.jpg", - "tags": ["meme-token", "social-token"] - }, - { - "chainId": 101, - "address": "Ag7ny2w9BE33hp41iSG2yCL8i3PyZbWV7yZZXdQekvsB", - "symbol": "illkillyou", - "name": "illkillyou", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Ag7ny2w9BE33hp41iSG2yCL8i3PyZbWV7yZZXdQekvsB/logo.png", - "tags": ["meme-token"], - "extensions": { - "website": "https://twitter.com/rajgokal/status/1457750326212235273" - } - }, - { - "chainId": 101, - "address": "375hSNDx3yvHbZCPP7g3Cw85c5nWYLntvUZw7kkkJMRf", - "symbol": "MNM", - "name": "The Metaverse Museum", - "decimals": 9, - "logoURI": "https://themetaversemuseum.s3.eu-west-3.amazonaws.com/baselogo.png", - "tags": ["meta-verse", "utility-token", "community-token"], - "extensions": { - "website": "https://themetaversemuseum.io" - } - }, - { - "chainId": 101, - "address": "2yhLAqkhVEoJ2BCQPWmGVSR2DK4UG2af532UDdcsyPzT", - "symbol": "OMDT", - "name": "Omnidex", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2yhLAqkhVEoJ2BCQPWmGVSR2DK4UG2af532UDdcsyPzT/logo.png", - "tags": ["community"] - }, - { - "chainId": 101, - "address": "4oS3LJTPVr8UW9g2gJMEADotTF3omitQMxvXqgRTm8Mw", - "symbol": "PAPA", - "name": "SOLPAPA", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4oS3LJTPVr8UW9g2gJMEADotTF3omitQMxvXqgRTm8Mw/logo.png", - "tags": ["SOLPAPA", "NFTs", "TOKEN", "meme-token"] - }, - { - "chainId": 101, - "address": "3oFeqagQB8Yh5UeJCnTiPW4sEo5K1Cdgp5NPuXoJYj3T", - "symbol": "CORN", - "name": "Solacorn Token", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3oFeqagQB8Yh5UeJCnTiPW4sEo5K1Cdgp5NPuXoJYj3T/logo.png", - "tags": ["NFTs", "P2E"], - "extensions": { - "website": "https://www.solacorn.com/" - } - }, - { - "chainId": 101, - "address": "EMr7DzCHgA7Ako9uE2s82gXhyEw76GF4FkxnfWn9XEFP", - "symbol": "SOW", - "name": "SOLOW Finance", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EMr7DzCHgA7Ako9uE2s82gXhyEw76GF4FkxnfWn9XEFP/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "GXm9UzbAERvZsfsM8CB6sWrn74BJ6ZAfDoNdeNRCmy2E", - "symbol": "MINGO", - "name": "Mingo Token", - "decimals": 9, - "logoURI": "https://s3.amazonaws.com/flashyflamingos.com/token.png", - "tags": ["meme-token", "nft"], - "extensions": { - "website": "https://flashyflamingos.com/" - } - }, - { - "chainId": 101, - "address": "FoXyMu5xwXre7zEoSvzViRk3nGawHUp9kUh97y2NDhcq", - "symbol": "FOXY", - "name": "Famous Fox Federation", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FoXyMu5xwXre7zEoSvzViRk3nGawHUp9kUh97y2NDhcq/logo.png", - "tags": ["NFT", "utility-token"], - "extensions": { - "discord": "https://discord.gg/famousfoxes", - "twitter": "https://twitter.com/famousfoxfed", - "website": "https://famousfoxes.com/" - } - }, - { - "chainId": 101, - "address": "GrEDCQ4oVMyc5otXMd9BB5u3dhBiXiXdtM3vAxTjLZX3", - "symbol": "wat", - "name": "Fraktionalized EXCHANGE NOTIFICATION NFT", - "decimals": 3, - "logoURI": "https://cdn.exchange.art/comm_token/background_images/1.jpg", - "tags": ["fractionalized-nft"], - "extensions": { - "vault": "https://fraktion.art/vault/HbmF6oVqXNLzNUVgMy2bEDJTkMc5f6b4URFF2dC4bNS7", - "vaultPubkey": "HbmF6oVqXNLzNUVgMy2bEDJTkMc5f6b4URFF2dC4bNS7" - } - }, - { - "chainId": 101, - "address": "ELe6SZqMy7a73AfWrBtto2XqRs49aBMCKaLPSH5759Dv", - "symbol": "MRST", - "name": "Fraktionalized Megalodon Rogue Shark Tooth", - "decimals": 3, - "logoURI": "https://www.arweave.net/_oDYT91APrEJkQoajLAkSFs_bsrv3erlEPzX5Wiwlro?ext=gif", - "tags": ["fractionalized-nft"], - "extensions": { - "vault": "https://fraktion.art/vault/D6ErHk23Df2E1c1LqSqvzYhLzPBzKyh3xKrRDva2gxTj", - "vaultPubkey": "D6ErHk23Df2E1c1LqSqvzYhLzPBzKyh3xKrRDva2gxTj" - } - }, - { - "chainId": 101, - "address": "YDMU6AZMmHB6dzcM3u34cgiHCMuM4z8bmMjTUv3drUA", - "symbol": "FSY", - "name": "Fraktionalized Synapses-914", - "decimals": 3, - "logoURI": "https://www.arweave.net/WrsR1b43gWefNIQetPTjuwhwIiBeSsIW0YiiBuO4jHE?ext=gif", - "tags": ["fractionalized-nft"], - "extensions": { - "vault": "https://fraktion.art/vault/6ibb1MyYeTujF66GgbiQExSXSHMk3fV75iPF2vrr274U", - "vaultPubkey": "6ibb1MyYeTujF66GgbiQExSXSHMk3fV75iPF2vrr274U" - } - }, - { - "chainId": 101, - "address": "2t25po1qdFfZcBzREPYTwfuojWUdT6dUYREov6k3CaXU", - "symbol": "TWR", - "name": "Fraktionalized Tower Community NFT", - "decimals": 3, - "logoURI": "https://www.arweave.net/-WwoWhp965cBVUYwFWjGXvygQOsWjTEDYi-3VI0cWlo?ext=png", - "tags": ["fractionalized-nft"], - "extensions": { - "vault": "https://fraktion.art/vault/3ovaiNKdfyDhq7yTjQ94LS1qvmmKJv4DQPXmWooFKUjR", - "vaultPubkey": "3ovaiNKdfyDhq7yTjQ94LS1qvmmKJv4DQPXmWooFKUjR" - } - }, - { - "chainId": 101, - "address": "AcMqhvAD1qG2K1pesnXLix1zPQDMW54rBdaqUznmWhcS", - "symbol": "PLS", - "name": "Fraktionalized Synapses-1058", - "decimals": 3, - "logoURI": "https://www.arweave.net/NGEfBIu3mAC7rE0y1qX2BsvvLxg4ZaPKkgN-BBiS0Zg?ext=gif", - "tags": ["fractionalized-nft"], - "extensions": { - "vault": "https://fraktion.art/vault/EzXyaBouLkRWqednXACYeNm6pDhLnKw3BaBEB2hJbLPB", - "vaultPubkey": "EzXyaBouLkRWqednXACYeNm6pDhLnKw3BaBEB2hJbLPB" - } - }, - { - "chainId": 101, - "address": "U3iWnWUqdbn1SXAn6CrmuQoFCYBC3vRb2vmM7CMPEnj", - "symbol": "Nom", - "name": "Fraktionalized Frakt-1274", - "decimals": 3, - "logoURI": "https://www.arweave.net/Ztw0zOyMrnvKNfcEBWxlpijGM2K0NYPoBXbhxg4bWQE", - "tags": ["fractionalized-nft"], - "extensions": { - "vault": "https://fraktion.art/vault/5AuSjp5d94882J3ctoeNjq8qRyzrvvznmUXKAAjJc9cT", - "vaultPubkey": "5AuSjp5d94882J3ctoeNjq8qRyzrvvznmUXKAAjJc9cT" - } - }, - { - "chainId": 101, - "address": "GPb3fbFaXEy9b8WZexy3CogjrD322iDgLCx2Fe3tq6K5", - "symbol": "RARE", - "name": "Fraktionalized Moment-45", - "decimals": 3, - "logoURI": "https://www.arweave.net/jsWoTIne-qV9ZjcCxwbrGXiuV3E_W3T9Ai7fw_44Pik?ext=jpeg", - "tags": ["fractionalized-nft"], - "extensions": { - "vault": "https://fraktion.art/vault/9C5aAzTJZeT9kBHENKd5CtchUk4Mv29ys8KaBTUfvrcF", - "vaultPubkey": "9C5aAzTJZeT9kBHENKd5CtchUk4Mv29ys8KaBTUfvrcF" - } - }, - { - "chainId": 101, - "address": "5Cf7LFQ36L7caoowobjRvZUuXqE234vPbT8bLGphc25c", - "symbol": "SLN", - "name": "Fraktionalized Solanne: Up Only 1/1", - "decimals": 3, - "logoURI": "https://www.arweave.net/HrAPpiyDALvoS9oj8b1_keTmuMKRlnjRuieyjN0RVLY?ext=jpg", - "tags": ["fractionalized-nft"], - "extensions": { - "vault": "https://fraktion.art/vault/2uwtAQNGkjhEaBjN5FavvrT3tbp6JZPuCwXr7qBBekb5", - "vaultPubkey": "2uwtAQNGkjhEaBjN5FavvrT3tbp6JZPuCwXr7qBBekb5" - } - }, - { - "chainId": 101, - "address": "FSdUB3eBDy28H9z3izzV8KbB2SLUa1mRpe1R482CEsfR", - "symbol": "tst", - "name": "Fraktionalized Skyline FLP", - "decimals": 3, - "logoURI": "https://www.arweave.net/7GLSB6nsDtbhFoOKZLbtgDoO0DTxPyxt3VJB1mHkmwM?ext=png", - "tags": ["fractionalized-nft"], - "extensions": { - "vault": "https://fraktion.art/vault/C3VwkKSuL8KqxCmz4JV1Lx798isHjxcoNTwkVRGyV8Sm", - "vaultPubkey": "C3VwkKSuL8KqxCmz4JV1Lx798isHjxcoNTwkVRGyV8Sm" - } - }, - { - "chainId": 101, - "address": "8D94XbVAjXRzRb8p1iz8dwPtuDKufeLX59WXEuGYLtPX", - "symbol": "FLDG", - "name": "FlokiDoge", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8D94XbVAjXRzRb8p1iz8dwPtuDKufeLX59WXEuGYLtPX/flokidogelogo.png", - "tags": ["utility-token", "meme-token", "doge", "Shib", "elon", "floki"] - }, - { - "chainId": 101, - "address": "BhNHLeVEJocDsQUMsjGSkzVeuGgrTFsucCXbNC2u22pM", - "symbol": "POLLO", - "name": "POLLO", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BhNHLeVEJocDsQUMsjGSkzVeuGgrTFsucCXbNC2u22pM/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://twitter.com/pollo_thumbs_up" - } - }, - { - "chainId": 101, - "address": "GmrHVLSvbt2HRwCY54SddihKvzseL7SAPndxrWYPnbUt", - "symbol": "FEX", - "name": "Fex", - "decimals": 2, - "logoURI": "https://www.linkpicture.com/q/fex.png" - }, - { - "chainId": 101, - "address": "DK6PWMyuZ4NMjsm9AWNCTMKrajQYrtfMjMJ3QauX2UH5", - "symbol": "BITXBIT", - "name": "BITXBIT", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DK6PWMyuZ4NMjsm9AWNCTMKrajQYrtfMjMJ3QauX2UH5/logo.png", - "tags": ["social-token", "technology", "utility-token"], - "extensions": { - "twitter": "https://twitter.com/bitXbit_aus", - "website": "https://bitxbit.com.au" - } - }, - { - "chainId": 101, - "address": "HqxyA7nVgtcoXhTrEcaWxzH2xuNeNDsie8nA8Unp1pZ2", - "symbol": "ZULIA", - "name": "ZULIA", - "decimals": 9, - "logoURI": "https://zuliacoin.com/wp-content/uploads/2021/09/zuliacoin.png", - "tags": ["stablecoin"], - "extensions": { - "telegram": "https://t.me/zuliacoin", - "twitter": "https://twitter.com/zuliacoin", - "website": "https://zuliacoin.com" - } - }, - { - "chainId": 101, - "address": "89r9FGEtk5a6PPmhQzrByjRd6kF8ZLGibjYNK59Rpc4V", - "symbol": "JIAN", - "name": "JIAN COIN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/89r9FGEtk5a6PPmhQzrByjRd6kF8ZLGibjYNK59Rpc4V/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "13mmS8pzL7EESnKdMu7ioCsVp7XBWGWKBMtW6BqR2e2K", - "symbol": "RED", - "name": "Token Red", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/13mmS8pzL7EESnKdMu7ioCsVp7XBWGWKBMtW6BqR2e2K/logo.png", - "extensions": { - "website": "https://redfishcommunications.net/" - } - }, - { - "chainId": 101, - "address": "5P8fWyGpwNhScv3hJCiSSBKWpo7sYR954AddefEvqMWM", - "symbol": "MNL", - "name": "MANUEL", - "decimals": 9, - "logoURI": "https://cdn.pixabay.com/photo/2017/01/26/13/00/mom-2010524_960_720.png" - }, - { - "chainId": 101, - "address": "ArtbSHxfQUg7EUbP2iLjrBiMZvheS5GsmMcDRQKbDDzE", - "symbol": "KRMA", - "name": "KARMA", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ArtbSHxfQUg7EUbP2iLjrBiMZvheS5GsmMcDRQKbDDzE/logo.png", - "tags": ["social-token"], - "extensions": { - "discord": "https://discord.gg/6KUXFshH", - "twitter": "https://twitter.com/harikrismenon", - "website": "https://getkarma.xyz" - } - }, - { - "chainId": 101, - "address": "6sTdGdDSaHJ4SbieiD7oA3b1Sjbu9LZWE3h2mpFxjikw", - "symbol": "DGAF", - "name": "DGAF Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6sTdGdDSaHJ4SbieiD7oA3b1Sjbu9LZWE3h2mpFxjikw/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://www.earjuice.com/" - } - }, - { - "chainId": 101, - "address": "A6XKxTA1PiYjk3KTh9txMGCCc5CaNj56fRKnmpr6pYDN", - "symbol": "LECT", - "name": "Lecturer Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/A6XKxTA1PiYjk3KTh9txMGCCc5CaNj56fRKnmpr6pYDN/logo.png", - "extensions": { - "website": "https://sol.lecturertoken.com" - } - }, - { - "chainId": 101, - "address": "FQq2FsHvWgS84usEGa6rmr6WSeDNZjVd3KAD2W9rKFeq", - "symbol": "CATC", - "name": "CatsCoffee", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/gbc8181/Cats_Coffee/logo/pre_logo.jpg", - "extensions": { - "twitter": "https://twitter.com/CatsCoffeeCATC" - } - }, - { - "chainId": 103, - "address": "86x8r57bTMmaU7i5SqsY9gwiuxqddt8vPA7WXuR6Bhx1", - "symbol": "HGC", - "name": "Hatch Group Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/86x8r57bTMmaU7i5SqsY9gwiuxqddt8vPA7WXuR6Bhx1/logo.png", - "extensions": { - "website": "https://www.hatchgroup.co.uk/" - } - }, - { - "chainId": 101, - "address": "2ABVP6Ndy5KEqUhbFRpJuCqBQ6MdVkLgJTfh6ZbVqenj", - "symbol": "AZUR", - "name": "AZUR", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2ABVP6Ndy5KEqUhbFRpJuCqBQ6MdVkLgJTfh6ZbVqenj/logo.png", - "extensions": { - "website": "https://azur-chain.com/" - } - }, - { - "chainId": 101, - "address": "57AS2y8g4MPN4R9uDRZQjr8c2ksa2PGrVJqJL5361BN5", - "symbol": "NARCH", - "name": "NARCHCoin", - "decimals": 0, - "logoURI": "https://cdn.dribbble.com/users/612987/screenshots/4309689/letter-n-logo.jpg", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "BmvZaohxsWzsxeX3HX4145rtP6BcGbftUDKUz78d2xR2", - "symbol": "SPIBETA", - "name": "Spider Beta", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BmvZaohxsWzsxeX3HX4145rtP6BcGbftUDKUz78d2xR2/logo.png", - "tags": ["meme-token"], - "extensions": { - "website": "https://www.spider.com/" - } - }, - { - "chainId": 101, - "address": "AGrCEkCgXeTuD8GzHJmw2PEx4DKqmrnNiV6BYCsZK2Vg", - "symbol": "GXG", - "name": "Geometry Governance token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AGrCEkCgXeTuD8GzHJmw2PEx4DKqmrnNiV6BYCsZK2Vg/logo.png", - "tags": ["geometry", "geometryfi", "geobots", "governance"], - "extensions": { - "discord": "https://www.discord.gg/geobots", - "medium": "https://medium.com/geometryfi", - "website": "https://geometry.fi" - } - }, - { - "chainId": 101, - "address": "ASTkbpe5ckW1mx6WDLE9zPScWsYjSh6h5zQ89UYoUQ7D", - "symbol": "CHAM", - "name": "SOLChamies", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ASTkbpe5ckW1mx6WDLE9zPScWsYjSh6h5zQ89UYoUQ7D/logo.png", - "tags": ["social-token", "utility-token"], - "extensions": { - "discord": "https://discord.gg/GAN7MmCxAw", - "twitter": "https://twitter.com/SOLChamies", - "website": "https://solchamies.com/" - } - }, - { - "chainId": 101, - "address": "isnWzCRtawba3ySXBvKT6TFunfK8tdytKTFmS3xpySv", - "symbol": "ASL-NFT", - "name": "ASL Moto NFT", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Acidastro/token-list/main/assets/mainnet/8ncGBhpwZcw3Hj9Cr8rmXw4R5YoLwwvzzDAaoBfiN8pn/logo.png", - "tags": ["utility-token", "nft-token"], - "extensions": { - "telegram": "https://t.me/Artur_buell", - "website": "https://instalinks.ru/ArturBuell" - } - }, - { - "chainId": 101, - "address": "8XkS7ZDPR9zXcNcYR884tBScnQRyFcWRb7WcLtCR6zEZ", - "symbol": "CNDR", - "name": "CondorCoin", - "decimals": 12, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8XkS7ZDPR9zXcNcYR884tBScnQRyFcWRb7WcLtCR6zEZ/logo.png", - "tags": ["utility-token"], - "extensions": { - "facebook": "https://www.facebook.com/Condor-Coin-108233578306800", - "instagram": "https://www.instagram.com/condorcoin/", - "reddit": "https://www.reddit.com/user/condorcoin", - "twitter": "https://twitter.com/condor_coin", - "website": "https://www.condorcoin.co/" - } - }, - { - "chainId": 101, - "address": "4ZEC2PNED2i2H8fxjEzLrnKjUriWjWhaXCH76cTCC6Zd", - "symbol": "ASL", - "name": "ASL Moto Token", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/Acidastro/token-list/main/assets/mainnet/8ncGBhpwZcw3Hj9Cr8rmXw4R5YoLwwvzzDAaoBfiN8pn/logo.png", - "tags": ["utility-token", "Defi-Token"], - "extensions": { - "telegram": "https://t.me/Artur_buell", - "website": "https://instalinks.ru/ArturBuell" - } - }, - { - "chainId": 101, - "address": "CLhx8u9HXyMTew88dh2N9EyTqV2j6PwKSoTj6jivqaqH", - "symbol": "GGMI", - "name": "Gonna Make It Governance Token", - "decimals": 9, - "logoURI": "https://gonnamakeit.io/branding/ggmi-token.png", - "tags": ["DeFi", "Gaming", "governance-token"], - "extensions": { - "discord": "https://discord.gg/rAnhpNqQmq", - "twitter": "https://twitter.com/gonnamakeitapp", - "website": "https://gonnamakeit.io/" - } - }, - { - "chainId": 101, - "address": "8p1GqwyQMieGDJp2VcNY4j1bNEdWPnDUtVhaZrMhL6LF", - "symbol": "GMI", - "name": "Gonna Make It Utility Token", - "decimals": 9, - "logoURI": "https://gonnamakeit.io/branding/gmi-token.png", - "tags": ["DeFi", "Gaming", "utility-token"], - "extensions": { - "discord": "https://discord.gg/rAnhpNqQmq", - "twitter": "https://twitter.com/gonnamakeitapp", - "website": "https://gonnamakeit.io/" - } - }, - { - "chainId": 101, - "address": "WLPyXq7WRfdWLiP4fvRfSisrfDzLiPmCeVTE6okKQWE", - "symbol": "wpUSDC-USDC", - "name": "Saber wpUSDC-USDC LP", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WLPyXq7WRfdWLiP4fvRfSisrfDzLiPmCeVTE6okKQWE/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-wormhole-v2"], - "extensions": { - "website": "https://app.saber.so/#/pools/wpusdc" - } - }, - { - "chainId": 101, - "address": "WLP59xUDvQMQdzC2SgPmZeRF1oj2RSvGZiQLksj4bwj", - "symbol": "wpUSDT-USDT", - "name": "Saber wpUSDT-USDT LP", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WLP59xUDvQMQdzC2SgPmZeRF1oj2RSvGZiQLksj4bwj/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-wormhole-v2"], - "extensions": { - "website": "https://app.saber.so/#/pools/wpusdt" - } - }, - { - "chainId": 101, - "address": "GtHxqAqbaZB8eo8R8pGXUhWxs6X8WQWMWTUWKTgSFbHo", - "symbol": "Potion", - "name": "Potion", - "decimals": 6, - "logoURI": "https://i.imgur.com/zURNQAX.png", - "tags": ["community-token", "DAO", "Staking"], - "extensions": { - "discord": "https://discord.gg/fF9VEsxx", - "twitter": "https://twitter.com/SolanaMMB", - "website": "https://mutantmonkey.business/" - } - }, - { - "chainId": 101, - "address": "HrurWc98nGZ5nqZcGDUbr8mrmV6QseWGTPdTN5mwYPUH", - "symbol": "UNK", - "name": "Unknown Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HrurWc98nGZ5nqZcGDUbr8mrmV6QseWGTPdTN5mwYPUH/logo.png", - "tags": ["community-token"], - "extensions": { - "website": "https://officialnameunknown.com/nfts" - } - }, - { - "chainId": 101, - "address": "4EKX35aZroQ9oGk8gf7deGHe77VXMxXcy7ahJRw7qwd1", - "symbol": "GMIMO", - "name": "Golden Access MIMO", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4EKX35aZroQ9oGk8gf7deGHe77VXMxXcy7ahJRw7qwd1/logo.png", - "extensions": { - "discord": "https://discord.com/invite/rznuTnenPJ", - "medium": "https://medium.com/@mimo_3408", - "twitter": "https://twitter.com/MillionMonke", - "website": "https://millionmonke.com/" - } - }, - { - "chainId": 101, - "address": "GkSMSvjjcd8AXqbkzo4CiFXrsVB5JEhqLvd48HoVhJDA", - "symbol": "SMIMO", - "name": "Silver Access MIMO", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GkSMSvjjcd8AXqbkzo4CiFXrsVB5JEhqLvd48HoVhJDA/logo.png", - "extensions": { - "discord": "https://discord.com/invite/rznuTnenPJ", - "medium": "https://medium.com/@mimo_3408", - "twitter": "https://twitter.com/MillionMonke", - "website": "https://millionmonke.com/" - } - }, - { - "chainId": 101, - "address": "FidMgPpM9CBVLqYtpBUCBLfCsth5sbVKA5haetJdZ82R", - "symbol": "FLOPPA", - "name": "Floppa Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FidMgPpM9CBVLqYtpBUCBLfCsth5sbVKA5haetJdZ82R/logo.png", - "tags": ["meme-token"], - "extensions": { - "telegram": "https://t.me/floppacoincommunity", - "website": "https://www.floppamemecoin.com" - } - }, - { - "chainId": 101, - "address": "gmdu3snwW28DmmxCseChp9owWLUhamH9eS3hWfHG8Vg", - "symbol": "GMSOL", - "name": "We Say gm", - "decimals": 9, - "logoURI": "https://github.com/icnivadmai/gm-logo/blob/master/logo.png", - "tags": ["community-token", "meme-token", "social-token"], - "extensions": { - "discord": "https://discord.com/invite/3KYEhaHFN5", - "twitter": "https://twitter.com/officialwesaygm", - "website": "https://www.wesaygm.com/" - } - }, - { - "chainId": 103, - "address": "DCEXw37nxoFTRmbtbEW4gnBijrqHPSyBt2VirUQYoXfX", - "symbol": "BERSX", - "name": "Bers Coin dev", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DCEXw37nxoFTRmbtbEW4gnBijrqHPSyBt2VirUQYoXfX/logo.png", - "tags": [ - "mongolian-token", - "gamefi", - "ads-token", - "community-token", - "nft-token" - ], - "extensions": { - "discord": "https://discord.gg/2eACjdq9", - "facebook": "https://www.facebook.com/berscoin", - "website": "https://berscoin.com/", - "youtube": "https://www.youtube.com/c/BersCoinBersTube" - } - }, - { - "chainId": 101, - "address": "F8qzs4rwAn2egKvQYrwQeY4R4MFQiRADv289gGF4LFti", - "symbol": "PNCK", - "name": "Poncik", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/F8qzs4rwAn2egKvQYrwQeY4R4MFQiRADv289gGF4LFti/logo.png" - }, - { - "chainId": 101, - "address": "BpZ93AYjkYgGtpMf15CVqFogtbeRmgyoevpwDcPq2vNv", - "symbol": "Soltopia", - "name": "RUG", - "decimals": 9, - "logoURI": "https://ipfs.io/ipfs/QmbpkaK4EZxe31HDMso4CK8nN54pstpHYewxDvRSZUSPjw", - "tags": ["meme-token"] - }, - { - "chainId": 101, - "address": "CBPfSGeSf76o3r4628k7BcZ5YBNxHh7hkCzu4AmVgk2Q", - "symbol": "KSOL", - "name": "KITTYCOIN SOL", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CBPfSGeSf76o3r4628k7BcZ5YBNxHh7hkCzu4AmVgk2Q/logo.png", - "tags": ["utility-token"], - "extensions": { - "facebook": "https://facebook.com/KittycoinSOL", - "telegram": "https://t.me/KittycoinSOL", - "twitter": "https://twitter.com/KittycoinSOL", - "website": "https://kittycoinsol.com/", - "youtube": "https://www.youtube.com/channel/UCRn6xC1Gmr6enUia-mg2rIA" - } - }, - { - "chainId": 101, - "address": "GWHaVysqHeeFgjM4eKDSAh5cbgG9VZNPNFSdJeNsfgKN", - "symbol": "CNC", - "name": "Chestnut Coin", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GWHaVysqHeeFgjM4eKDSAh5cbgG9VZNPNFSdJeNsfgKN/logo.png" - }, - { - "chainId": 103, - "address": "4kcjCkyD87Rjosrpe9r5UhNUzC4dx7SjzTkMLW7Dgb3T", - "symbol": "SHMAC", - "name": "Shiba McEntire", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4kcjCkyD87Rjosrpe9r5UhNUzC4dx7SjzTkMLW7Dgb3T/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://shmactoken.com/" - } - }, - { - "chainId": 101, - "address": "J4MJ5VKsWoph5XtGF8aHEA5dMLQCwDFoAnRh1GtBdAtJ", - "symbol": "AUVS", - "name": "Atlantisvers", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/J4MJ5VKsWoph5XtGF8aHEA5dMLQCwDFoAnRh1GtBdAtJ/logo.png", - "tags": ["games-token"], - "extensions": { - "twitter": "https://twitter.com/atlantisvers", - "website": "https://atlantisvers.io/" - } - }, - { - "chainId": 101, - "address": "AG6RVirrcJYxQxLoHhxdLAtUAMunkvcFW2agks9CyUXt", - "symbol": "GNXD", - "name": "NeXt-DeFi Governance", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AG6RVirrcJYxQxLoHhxdLAtUAMunkvcFW2agks9CyUXt/logo.png", - "extensions": { - "discord": "https://discord.gg/KH2YywfrgS", - "medium": "https://medium.com/@NXDF", - "reddit": "https://www.reddit.com/r/next_defi_protocol/", - "telegram": "https://t.me/nxdfarmy", - "twitter": "https://twitter.com/NXDF16", - "website": "https://nxdf.io/", - "youtube": "https://www.youtube.com/channel/UCMdPUPpCTVf-OHvMLCdzxOQ" - } - }, - { - "chainId": 101, - "address": "BsrrKFLVfEjyR6sjsbPBdu9H5aHjL4m4TeGqkKMecMfH", - "symbol": "SOLAEGG", - "name": "SolanaEgg token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BsrrKFLVfEjyR6sjsbPBdu9H5aHjL4m4TeGqkKMecMfH/logo.png" - }, - { - "chainId": 101, - "address": "C4xWe67MMg5zJia7gZ8BmH2btvCfMeSMWRVWXCGvoAfG", - "symbol": "PSCHARM", - "name": "PreSale CHARM Token", - "decimals": 9, - "logoURI": "https://s3.amazonaws.com/charmtoken.net/images/Charm_logo_redmask.png", - "tags": ["utility-token", "nft"], - "extensions": { - "website": "https://charmtoken.net" - } - }, - { - "chainId": 101, - "address": "rvjXnhXCwaZD2b4mZA321khA959yAg1GT9YWTqr6jTN", - "symbol": "THCT", - "name": "Thai Baht Casino Token", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/rvjXnhXCwaZD2b4mZA321khA959yAg1GT9YWTqr6jTN/logo_temp.png" - }, - { - "chainId": 101, - "address": "CH9AbJkhRGGMg9MKsWhHGz36BP6Xpqe7ndrzPCtkwKME", - "symbol": "USCT", - "name": "US Dollars Casino Token", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CH9AbJkhRGGMg9MKsWhHGz36BP6Xpqe7ndrzPCtkwKME/USCT.png" - }, - { - "chainId": 101, - "address": "4Su1xAHY9Lhc55pvMdeoUUWV5bojDog9TxBPgybqpoha", - "symbol": "CNYCT", - "name": "Chinese Yuan Casino Token", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4Su1xAHY9Lhc55pvMdeoUUWV5bojDog9TxBPgybqpoha/CNYCT.png" - }, - { - "chainId": 101, - "address": "EYgBLpkEpUTegYDu6vFZ1jf5i49NggUM9RB32Y1JPPav", - "symbol": "UCT", - "name": "Uni Casino Token", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EYgBLpkEpUTegYDu6vFZ1jf5i49NggUM9RB32Y1JPPav/UCT.png" - }, - { - "chainId": 101, - "address": "3iBZV8gvUFxp333FFogUPVi6MP9dEZ74xUxVzEQvNPii", - "symbol": "SHIBU", - "name": "SHIBU Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/shibuio/token-list/main/assets/mainnet/3iBZV8gvUFxp333FFogUPVi6MP9dEZ74xUxVzEQvNPii/logo.png", - "tags": ["meme-token", "NFT"], - "extensions": { - "twitter": "https://twitter.com/shibu_io", - "website": "https://shibu.io/" - } - }, - { - "chainId": 101, - "address": "4qcHQruwW1NcSMxQ6v2eYKGxnGSDHdEZ9i7JvaL1ZADL", - "symbol": "SLNK", - "name": "Solanka Coin", - "decimals": 9, - "logoURI": "https://arweave.net/u0Nbp8wLcvtMsawdnddN4LH5rdxmQtKoul3TN7e2r0Q/solanka.png", - "tags": ["community-token", "meme-token"], - "extensions": { - "website": "https://woken-token.github.io/solanka-coin/" - } - }, - { - "chainId": 101, - "address": "9BiqBycZWkWH21vYqCbu2bL1PjZbR5GxWGA8LQkShbyt", - "symbol": "MEW", - "name": "Solcatcoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9BiqBycZWkWH21vYqCbu2bL1PjZbR5GxWGA8LQkShbyt/logo.png", - "tags": ["meme", "cat", "community-token"], - "extensions": { - "discord": "https://discord.gg/solcatcoin", - "twitter": "https://twitter.com/SolCatCoin", - "website": "https://www.solcatcoin.com/" - } - }, - { - "chainId": 101, - "address": "AoL4f5i5BaXcTAYKaqzy3mxVzDgAGncBaW9VNjfZZxwH", - "symbol": "YOUNG2", - "name": "YOUNG2 Token", - "decimals": 9, - "logoURI": "https://github.com/kskhbh2/token-list/blob/5a6d34fd2c0b7121e4d2fc6565986f627aeb0975/logo.png" - }, - { - "chainId": 101, - "address": "GT6WPwDrM1L1aFMw9FzQZRW3hgMZp5v8qU1hiVpYeWWg", - "symbol": "WBRZ-USDL", - "name": "Lagrange WBRZ-USDL LP", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/cavidk/lp-token/main/lp-logo.png", - "tags": ["lp-token"], - "extensions": { - "discord": "https://discord.gg/lagrange-fi", - "github": "https://github.com/Lagrange-fi", - "twitter": "https://twitter.com/Lagrange_fi", - "website": "https://lagrange.fi/" - } - }, - { - "chainId": 101, - "address": "GLmaRDRmYd4u3YLfnj9eq1mrwxa1YfSweZYYZXZLTRdK", - "symbol": "SOLAB", - "name": "Solabrador", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GLmaRDRmYd4u3YLfnj9eq1mrwxa1YfSweZYYZXZLTRdK/solabradon250x250.png", - "tags": ["social-token"], - "extensions": { - "coingeckoId": "solabrador", - "discord": "https://discord.gg/8HJK4apjd7", - "serumV3Usdc": "5m7CdEhV6Tq5KnSCy5Cg4w6ug5DFCcHrUJ8JMzKVDdav", - "twitter": "https://twitter.com/Solabrador", - "website": "https://solabrador.com" - } - }, - { - "chainId": 101, - "address": "9fzQfEM5aq1GLugzHMM6prq8tsURN2pxQMjARaWGd2py", - "symbol": "ITSC", - "name": "ITS Cash", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9fzQfEM5aq1GLugzHMM6prq8tsURN2pxQMjARaWGd2py/logo.svg", - "tags": ["utility-token", "Peruvian-token"], - "extensions": { - "website": "https://www.itscash.me" - } - }, - { - "chainId": 101, - "address": "7sGYCckERRZ7cEpa8vxepoby953Z42jLbfyGg5HeSe3r", - "symbol": "GIGA", - "name": "Giga Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7sGYCckERRZ7cEpa8vxepoby953Z42jLbfyGg5HeSe3r/logo1.png", - "tags": [ - "stake-pool-token", - "utility-token", - "meme-token", - "community-token" - ] - }, - { - "chainId": 101, - "address": "C1XaSueYWYCVrYqRcYLx5Qg9QngGqM3Ar6NecnCBxtta", - "symbol": "BX", - "name": "BitPhoenix X", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/C1XaSueYWYCVrYqRcYLx5Qg9QngGqM3Ar6NecnCBxtta/logo.png", - "tags": ["digital-coin"], - "extensions": { - "website": "https://github.com/bitphoenixx" - } - }, - { - "chainId": 101, - "address": "EswgBj2hZKdgovX2ihWSUDnuBg9VNbGmSGoH5yjNsPRa", - "symbol": "PHY", - "name": "Physis", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EswgBj2hZKdgovX2ihWSUDnuBg9VNbGmSGoH5yjNsPRa/logo.png", - "tags": [ - "utility-token", - "metaverse", - "multiverse", - "wellness", - "extended-reality", - "augmented-reality", - "virtual-reality", - "mixed-reality", - "physis" - ], - "extensions": { - "coingeckoId": "physis", - "discord": "https://discord.gg/jQ4fXyD6cz", - "telegram": "https://t.me/PhysisVerse", - "twitter": "https://twitter.com/PhysisVerse", - "website": "https://phys.is/" - } - }, - { - "chainId": 101, - "address": "3Mvx4nQcUNL6EcxxPBhxaCffs8nDGEuLFh3TAwdbgBCZ", - "symbol": "PHY-SOL", - "name": "Physis LP Token (PHY-SOL)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EswgBj2hZKdgovX2ihWSUDnuBg9VNbGmSGoH5yjNsPRa/logo.png", - "tags": ["lp-token"] - }, - { - "chainId": 101, - "address": "8WwG3MnTPhcibxnywUhLLBJkk4LAUFhBouDasiBE7hZy", - "symbol": "PFDT", - "name": "Platinum Fund Dev Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HfYFjMKNZygfMC8LsQ8LtpPsPxEJoXJx4M6tqi75Hajo/logo.png", - "tags": ["utility-token"], - "extensions": { - "medium": "https://medium.com/platinum-fund", - "telegram": "https://t.me/platinumfund", - "website": "https://platinum.fund" - } - }, - { - "chainId": 101, - "address": "JAcbPtpS9HsTAvhmQx7Nz95Kq7LRidX3ePXRowgQNHix", - "symbol": "SMB", - "name": "Fraktionalized SMB 1086", - "decimals": 3, - "logoURI": "https://arweave.net/gb8JNvIYFUscR5WCHsdYpFKRWcn8mb6T5b2Pn0cJNaE", - "tags": ["fractionalized-nft"], - "extensions": { - "vault": "https://fraktion.art/vault/8D1KmYWLdXZZiHqHbs8FS7Kw7RyF3jz2QbkhbwGGxhGj", - "vaultPubkey": "8D1KmYWLdXZZiHqHbs8FS7Kw7RyF3jz2QbkhbwGGxhGj" - } - }, - { - "chainId": 101, - "address": "9dwrdifAVWZsyEPxi15D8LcLsdrvTbpabrGw5EVzc7pp", - "symbol": "NinjaDoge", - "name": "NinjaDoge", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9dwrdifAVWZsyEPxi15D8LcLsdrvTbpabrGw5EVzc7pp/logo.png", - "tags": ["Meme", "community", "utility-token", "shib", "nft"], - "extensions": { - "serumV3Usdc": "Bm6GpVJsSfhmLEwJqQxGRLBvq4Gf5ERCsY8Xp1TZzPAk", - "twitter": "https://twitter.com/sol_ninja_doge" - } - }, - { - "chainId": 101, - "address": "9VH6kTELjTFd1RunKZJsCvtzAVLTTsb44kQzWywixLbX", - "symbol": "SHIBMOON", - "name": "Shib Moon", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9VH6kTELjTFd1RunKZJsCvtzAVLTTsb44kQzWywixLbX/logo.png", - "tags": ["Meme", "community", "utility-token", "Shiba"], - "extensions": { - "serumV3Usdc": "2B6CxvMS91eNyQ1FPyEqybvjFiZtKaBqHWKfXAKn1jij" - } - }, - { - "chainId": 101, - "address": "7s7PKr3qhuvZjngR1Zmsy53tFLLhZA4aoMnzeE8Z2H5Z", - "symbol": "GALAXY", - "name": "Galaxy", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7s7PKr3qhuvZjngR1Zmsy53tFLLhZA4aoMnzeE8Z2H5Z/logo.png", - "tags": ["metaverse", "gaming", "utility-token", "nft", "DeFi"], - "extensions": { - "serumV3Usdc": "2B6CxvMS91eNyQ1FPyEqybvjFiZtKaBqHWKfXAKn1jij" - } - }, - { - "chainId": 101, - "address": "9TcgiNyRYyTusbQKS7nXuWY9QajdBk4YQphoUCqesAFD", - "symbol": "UNISOL", - "name": "UNISOL", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9TcgiNyRYyTusbQKS7nXuWY9QajdBk4YQphoUCqesAFD/logo.png", - "tags": ["meme", "community", "utility-token"], - "extensions": { - "serumV3Usdc": "8pQRoGRYnJaxQ33WyaXajMQP3XR4Kw6Tf1PeVHQewoJC" - } - }, - { - "chainId": 101, - "address": "FncRHFTSigcNzH66WP3Jh7kupaEHtGV48x8RyMm9cU6d", - "symbol": "SNIPPLES", - "name": "Solana Nipples", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FncRHFTSigcNzH66WP3Jh7kupaEHtGV48x8RyMm9cU6d/logo.png", - "tags": ["meme", "community", "utility-token"] - }, - { - "chainId": 101, - "address": "4mZhMJYyFxUfBmNqvc1jFwnYi6YauELx6puA5kcymEBb", - "symbol": "GXO", - "name": "Geometry Operational token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4mZhMJYyFxUfBmNqvc1jFwnYi6YauELx6puA5kcymEBb/logo.png", - "tags": ["geometry", "geometryfi", "geobots", "governance"], - "extensions": { - "discord": "https://www.discord.gg/geobots", - "medium": "https://medium.com/geometryfi", - "website": "https://geometry.fi" - } - }, - { - "chainId": 101, - "address": "zmtcoJNJ8LwGx2T592Sjur5gF3jGJNmawkWrAgTFLYF", - "symbol": "MINT", - "name": "Mintbox Token", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solanadevv/token-list/de1043528e31f03aa093333e2a2de3c6c5da4f06/assets/mainnet/zmtcoJNJ8LwGx2T592Sjur5gF3jGJNmawkWrAgTFLYF/logo.png", - "tags": ["community-token", "utility-token", "Mint", "NFTs"] - }, - { - "chainId": 103, - "address": "5aymQzpDXqduK1VgzoKFVsacYZ9qGsPdeAJqa3teUDGs", - "symbol": "SolWormDev", - "name": "Solana Worm Dev", - "decimals": 0, - "logoURI": "https://arweave.net/QgzEgUiWcPUOPIX8EyPGZpzbh1JysKHPS7K9_xRYDo0", - "tags": [ - "Book", - "BookWorm", - "NFT", - "Publisher", - "Auction", - "Cupon", - "Perks" - ] - }, - { - "chainId": 103, - "address": "7gcP2fx97KpdSEGLBdxtsd7YzjWS6dsA9BLTwQMrM8Pk", - "symbol": "GoldWormDev", - "name": "Gold Worm Dev", - "decimals": 0, - "logoURI": "https://arweave.net/7qE73qF7dHTEc5dKLndcL7cAxvR45fjoWDXdQdQlBBQ", - "tags": [ - "Book", - "BookWorm", - "NFT", - "Publisher", - "Auction", - "Cupon", - "Perks" - ] - }, - { - "chainId": 103, - "address": "Crm2bpr3ai5QKMNfaq11NkBnHeMGULeP5YDLpkLeJjnw", - "symbol": "SilverWormDev", - "name": "Silver Worm Dev", - "decimals": 0, - "logoURI": "https://arweave.net/NXblD18WvawSyQ2Qm3n5yqj7i_54xL_hJQpc18tvuCA", - "tags": [ - "Book", - "BookWorm", - "NFT", - "Publisher", - "Auction", - "Cupon", - "Perks" - ] - }, - { - "chainId": 103, - "address": "DPygBbLS3vyF95z6dz64M6DtLDVipBibUctW1bEy5qtw", - "symbol": "CopperWormDev", - "name": "Copper Worm Dev", - "decimals": 0, - "logoURI": "https://arweave.net/JOAw1EkrtukD3UohmvZTbaqPcTsOV6IaLjuzf6aQS5U", - "tags": [ - "Book", - "BookWorm", - "NFT", - "Publisher", - "Auction", - "Cupon", - "Perks" - ] - }, - { - "chainId": 101, - "address": "33cGFtKGiQPez1m6fHJBbS7nNQNvb5twYifCEL9spguN", - "symbol": "SolWorm", - "name": "Solana Worm", - "decimals": 0, - "logoURI": "https://arweave.net/QgzEgUiWcPUOPIX8EyPGZpzbh1JysKHPS7K9_xRYDo0", - "tags": [ - "Book", - "BookWorm", - "NFT", - "Publisher", - "Auction", - "Cupon", - "Perks" - ] - }, - { - "chainId": 101, - "address": "FJD3zv1F88DVEHcR8hDAWegHD9VEASYngPoGUEc9Ep64", - "symbol": "GoldWorm", - "name": "Gold Worm", - "decimals": 0, - "logoURI": "https://arweave.net/7qE73qF7dHTEc5dKLndcL7cAxvR45fjoWDXdQdQlBBQ", - "tags": [ - "Book", - "BookWorm", - "NFT", - "Publisher", - "Auction", - "Cupon", - "Perks" - ] - }, - { - "chainId": 101, - "address": "CcswZVLDUnVNY4UiXJ1SN3fm8nTN9rfkuD8nkXhCUsqz", - "symbol": "SilverWorm", - "name": "Silver Worm", - "decimals": 0, - "logoURI": "https://arweave.net/NXblD18WvawSyQ2Qm3n5yqj7i_54xL_hJQpc18tvuCA", - "tags": [ - "Book", - "BookWorm", - "NFT", - "Publisher", - "Auction", - "Cupon", - "Perks" - ] - }, - { - "chainId": 101, - "address": "GmjTSDnXj8DFRG5y869MFbjruNwWiJY7GB5oRKq8Jwj", - "symbol": "CopperWorm", - "name": "Copper Worm", - "decimals": 0, - "logoURI": "https://arweave.net/JOAw1EkrtukD3UohmvZTbaqPcTsOV6IaLjuzf6aQS5U", - "tags": [ - "Book", - "BookWorm", - "NFT", - "Publisher", - "Auction", - "Cupon", - "Perks" - ] - }, - { - "chainId": 101, - "address": "E9bjYSAqabYAd2Zaev4qAMVNAiX7Z2Dp4Sn1JgsTn2b6", - "symbol": "CCC", - "name": "Chairman Chow", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/E9bjYSAqabYAd2Zaev4qAMVNAiX7Z2Dp4Sn1JgsTn2b6/logo.png", - "tags": ["meme-token", "community-token", "doge-token", "doge"], - "extensions": { - "discord": "https://discord.gg/8twDmsWega", - "telegram": "https://t.me/joinchat/1XaURMrPqOBjNWVk", - "twitter": "https://twitter.com/chairmanofdoge", - "website": "https://www.chairmanchowtoken.com" - } - }, - { - "chainId": 103, - "address": "HBEjV98i1CoyN9nWBdyumomJN6M4EQgkpgHp4c8Ue5cW", - "symbol": "Miin", - "name": "Miin Token", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HBEjV98i1CoyN9nWBdyumomJN6M4EQgkpgHp4c8Ue5cW/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://miinasian.vn" - } - }, - { - "chainId": 101, - "address": "3cAzWmrfovbkb3pU9mktcEzCiAXrVWRf2yp3T8PdJ2Zt", - "symbol": "DRINK", - "name": "Solana Drink", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3cAzWmrfovbkb3pU9mktcEzCiAXrVWRf2yp3T8PdJ2Zt/logo.jpg", - "tags": ["drink", "NFT"], - "extensions": { - "discord": "https://discord.gg/solanadrink", - "twitter": "https://twitter.com/solanadrink", - "website": "https://solanadrink.com" - } - }, - { - "chainId": 101, - "address": "7zBWymxbZt7PVHQzfi3i85frc1YRiQc23K7bh3gos8ZC", - "symbol": "VI", - "name": "VI", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7zBWymxbZt7PVHQzfi3i85frc1YRiQc23K7bh3gos8ZC/logo.png", - "tags": [ - "social-token", - "community-token", - "utility-token", - "governance-token" - ], - "extensions": { - "discord": "http://discord.gg/eWVrppgCex", - "telegram": "https://t.me/Vybit_app", - "twitter": "https://twitter.com/vybit_app", - "website": "https://vybit.app" - } - }, - { - "chainId": 101, - "address": "DiJWJ6hgV7Vm5JP6SU7xvo7nULR14UvrGoWmSu34fEvZ", - "symbol": "SolBullDog", - "name": "SolanaBullDog", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DiJWJ6hgV7Vm5JP6SU7xvo7nULR14UvrGoWmSu34fEvZ/logo.png", - "tags": ["meme-token", "NFT"], - "extensions": { - "twitter": "https://twitter.com/BullDogSolana", - "website": "http://bulldogsolana.space/" - } - }, - { - "chainId": 101, - "address": "4tJZhSdGePuMEfZQ3h5LaHjTPsw1iWTRFTojnZcwsAU6", - "symbol": "ELU", - "name": "Elumia Crowns", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4tJZhSdGePuMEfZQ3h5LaHjTPsw1iWTRFTojnZcwsAU6/logo.png", - "tags": ["governance-token", "elumia", "LOE", "elumia-crowns"], - "extensions": { - "twitter": "https://twitter.com/PlayElumia" - } - }, - { - "chainId": 101, - "address": "GDsVXtyt2CBwieKSYMEsjjZXXvqz2G2VwudD7EvXzoEU", - "symbol": "HIRAM", - "name": "Hiram Coin", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GDsVXtyt2CBwieKSYMEsjjZXXvqz2G2VwudD7EvXzoEU/logo.png", - "tags": ["community-token", "meme-token"], - "extensions": { - "coingeckoId": "hiram-coin", - "website": "https://freemason-coin.io" - } - }, - { - "chainId": 101, - "address": "EzL6LLmv4vgfF7irkjG7ZxM92bTJ9f6nFopDXJTow7zj", - "symbol": "CONDOMS", - "name": "Solana Condoms", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EzL6LLmv4vgfF7irkjG7ZxM92bTJ9f6nFopDXJTow7zj/logo.png", - "tags": ["Meme", "community", "utility-token", "nft"], - "extensions": { - "twitter": "https://twitter.com/solcondoms", - "website": "http://solcondoms.xyz/" - } - }, - { - "chainId": 101, - "address": "7EGDKpVgb7W5HK6umEo3xQ2spthwnNa5JcKAPb41R2Ku", - "symbol": "TBT", - "name": "The Brain Trust", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7EGDKpVgb7W5HK6umEo3xQ2spthwnNa5JcKAPb41R2Ku/logo.png", - "tags": ["dao-token"], - "extensions": { - "website": "https://thebraintrustdao.com/" - } - }, - { - "chainId": 101, - "address": "CmSryDa4mnDYUicq7qSESsTKAdgBP26jSYcg8zavVoJd", - "symbol": "GM", - "name": "GM Solana", - "decimals": 7, - "logoURI": "https://cdn.jsdelivr.net/gh/brendanhernou/gm/GMSolana.jpg", - "tags": ["social-token", "GM-Solana", "Goodmorning", "GM"], - "extensions": { - "website": "https://gmsol.io" - } - }, - { - "chainId": 101, - "address": "7TmeYWYi29eV4u9Y2APupJBT7Ym28vdkgrw1QKHA3pW6", - "symbol": "WAVE", - "name": "WAVE Token", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/wretchedwaters/wavetoken/main/logo/logo.png", - "tags": ["community-token"], - "extensions": { - "website": "https://wretchedwaters.io" - } - }, - { - "chainId": 101, - "address": "icex2Fy2KtXjfiAAUEHLPHu7XKDLvwiyVUPP9PNpSkF", - "symbol": "ICE", - "name": "Fancy Diamond ICE", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/icex2Fy2KtXjfiAAUEHLPHu7XKDLvwiyVUPP9PNpSkF/logo.png", - "tags": ["utility-token", "community-token", "NFTs"], - "extensions": { - "discord": "https://discord.gg/fancydiamondsol/", - "twitter": "https://twitter.com/fancydiamondsol", - "website": "https://holdfancy.diamonds/" - } - }, - { - "chainId": 101, - "address": "Aogv6j1wWiBAZcqRNN1Y89eozda2ke6rkc4CYy7c4iCi", - "symbol": "JUNGLE", - "name": "Jungle", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Aogv6j1wWiBAZcqRNN1Y89eozda2ke6rkc4CYy7c4iCi/logo.png", - "extensions": { - "coingeckoId": "jungle", - "discord": "https://discord.gg/7qjTkEkUuu", - "twitter": "https://twitter.com/thugmonkez", - "website": "https://thugmonkez.com/" - } - }, - { - "chainId": 101, - "address": "97yaD8NFLkMggzxj22KqrWkoYDSMjX7KD9FWY3eCEFh2", - "symbol": "CORNE", - "name": "CornDoge", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/97yaD8NFLkMggzxj22KqrWkoYDSMjX7KD9FWY3eCEFh2/Corndoge.png" - }, - { - "chainId": 101, - "address": "9ui27Q32YMQtCvbkohgsnhji1gPva43RLmBERfw79xX", - "symbol": "SOLAR", - "name": "Solarna Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9ui27Q32YMQtCvbkohgsnhji1gPva43RLmBERfw79xX/logo.png", - "tags": [ - "social-token", - "utility-token", - "dex", - "cross-swap", - "wallet-token" - ], - "extensions": { - "website": "https://solarna.io" - } - }, - { - "chainId": 101, - "address": "6wiFZaYrisr78dEuCAxLEbJZ2HWoT5SnWNGXZ4ZzEJpy", - "symbol": "SOLAROLD", - "name": "Solarna Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6wiFZaYrisr78dEuCAxLEbJZ2HWoT5SnWNGXZ4ZzEJpy/logo.png", - "tags": [ - "social-token", - "utility-token", - "dex", - "cross-swap", - "wallet-token" - ], - "extensions": { - "website": "https://google.com" - } - }, - { - "chainId": 101, - "address": "2wmKXX1xsxLfrvjEPrt2UHiqj8Gbzwxvffr9qmNjsw8g", - "symbol": "Solar", - "name": "Solar", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SolarDexOfficial/solar_token_icon/main/token-icon.jpeg", - "tags": ["community-token"], - "extensions": { - "coingeckoId": "solar", - "coinmarketcap": "https://coinmarketcap.com/currencies/solardex/", - "serumV3Usdc": "BHfFJM36MirbBtLCcnZokwRvxUPxk7Ez6EAT6k44q6Go", - "telegram": "https://t.me/solardexofficialchat", - "twitter": "https://twitter.com/solar_dex", - "website": "https://solardex.finance/" - } - }, - { - "chainId": 101, - "address": "AD27ov5fVU2XzwsbvnFvb1JpCBaCB5dRXrczV9CqSVGb", - "symbol": "REAL", - "name": "Realy Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AD27ov5fVU2XzwsbvnFvb1JpCBaCB5dRXrczV9CqSVGb/logo.svg", - "tags": ["Metaverse", "Governance-token"], - "extensions": { - "serumV3Usdc": "AU8VGwd4NGRbcMz9LT6Fu2LP69LPAbWUJ6gEfEgeYM33", - "telegram": "https://t.me/realyofficial", - "twitter": "https://twitter.com/RealyOfficial", - "website": "https://realy.pro/" - } - }, - { - "chainId": 101, - "address": "Evem1GAsUFeAVh6inpwTkdhFFHa9TCU9GtgqQfdKHYre", - "symbol": "cc", - "name": "Cat Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Evem1GAsUFeAVh6inpwTkdhFFHa9TCU9GtgqQfdKHYre/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "EkSPpfdGCstzExF3eCsHFqjmyS71bguaZ1qJZCXXTCnv", - "symbol": "SBY", - "name": "SolBody", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EkSPpfdGCstzExF3eCsHFqjmyS71bguaZ1qJZCXXTCnv/logo.png", - "tags": ["community-token"], - "extensions": { - "website": "https://solbody.io" - } - }, - { - "chainId": 101, - "address": "CLVZwHqS1CLdqGMSsFvRYVyGM7HUXAYXNkAfarn2nLRz", - "symbol": "QTON", - "name": "QUIZTOK", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/quiztok/token-list/main/assets/mainnet/CLVZwHqS1CLdqGMSsFvRYVyGM7HUXAYXNkAfarn2nLRz/logo.png", - "extensions": { - "facebook": "https://www.facebook.com/quiztok.kr", - "github": "https://github.com/quiztok", - "instagram": "https://www.instagram.com/quiztok_kr/", - "telegram": "https://t.me/QuiztokCS", - "twitter": "https://twitter.com/quiztokkr", - "website": "https://quiztok.com/", - "youtube": "https://www.youtube.com/channel/UCtl9jTbXMa43F17zrnr1AeQ" - } - }, - { - "chainId": 101, - "address": "6o4f6tuvVQTa9PTrHN9pvUeXEPusN6RLgMam1Zc7tYbm", - "symbol": "WEN", - "name": "WEN Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6o4f6tuvVQTa9PTrHN9pvUeXEPusN6RLgMam1Zc7tYbm/logo.png", - "tags": ["community-token", "meme-token", "social-token"], - "extensions": { - "twitter": "https://twitter.com/notifbutwen" - } - }, - { - "chainId": 101, - "address": "AHdENcRMAo63LYQiMQN53e3KzXXChw5YPHsqrtRDTZza", - "symbol": "DEVILz", - "name": "DEVILz", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AHdENcRMAo63LYQiMQN53e3KzXXChw5YPHsqrtRDTZza/logo.png", - "tags": ["social-token", "utility-token"], - "extensions": { - "twitter": "https://twitter.com/NFTDevilz", - "website": "https://nftdevilz.com" - } - }, - { - "chainId": 101, - "address": "Au6EdrSDubCUc34awy9c6iQAg5GSos9pPBXyZQtyZewV", - "symbol": "NXDF", - "name": "NeXt-DeFi Protocol", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Au6EdrSDubCUc34awy9c6iQAg5GSos9pPBXyZQtyZewV/logo.png", - "extensions": { - "discord": "https://discord.gg/KH2YywfrgS", - "medium": "https://medium.com/@NXDF", - "reddit": "https://www.reddit.com/r/next_defi_protocol/", - "telegram": "https://t.me/nxdfarmy", - "twitter": "https://twitter.com/NXDF16", - "website": "https://nxdf.io/", - "youtube": "https://www.youtube.com/channel/UCMdPUPpCTVf-OHvMLCdzxOQ" - } - }, - { - "chainId": 101, - "address": "yUSDT1nYX9JHLqRCX1RqZyATiRKaSYiMLWLMatr3U2h", - "symbol": "yUSDC", - "name": "yUSDC (Parrot USDC Stability Pool Token)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/yUSDT1nYX9JHLqRCX1RqZyATiRKaSYiMLWLMatr3U2h/logo.svg", - "extensions": { - "discord": "https://discord.gg/gopartyparrot", - "medium": "https://gopartyparrot.medium.com/", - "telegram": "https://t.me/gopartyparrot", - "twitter": "https://twitter.com/gopartyparrot", - "website": "https://parrot.fi" - } - }, - { - "chainId": 101, - "address": "Learn5MyYtgdjiHfvW3w2z79mHws2TcfmrL2sA5grgz", - "symbol": "LEARN", - "name": "Learn Crypto", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Learn5MyYtgdjiHfvW3w2z79mHws2TcfmrL2sA5grgz/logo.png", - "tags": ["community-token", "utility-token", "DeFi"], - "extensions": { - "discord": "https://discord.com/invite/learncrypto", - "telegram": "https://t.me/learncrypto5" - } - }, - { - "chainId": 101, - "address": "J948cnkxckQ1HS9xVeThCg61t89Y69oyMYCGHBH9WjFW", - "symbol": "MIL", - "name": "Foresight Utility Token", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/J948cnkxckQ1HS9xVeThCg61t89Y69oyMYCGHBH9WjFW/logo.png", - "tags": [ - "community-token", - "utility-token", - "social-token", - "NFTs", - "DeFi" - ], - "extensions": { - "website": "https://www.foresight.mobi/" - } - }, - { - "chainId": 101, - "address": "KaizUQ81Xku3PZpHDrWW1oDNLjTez6a2JiDznydXqNC", - "symbol": "KAIZEN", - "name": "Kaizen.Finance", - "decimals": 9, - "logoURI": "https://kaizen.finance/assets/images/kaizen-assets/logo-kaizen-symbol.png", - "tags": [ - "kaizen", - "kaizen-finance", - "locked-token", - "vesting-token", - "bridge", - "DEX" - ], - "extensions": { - "description": "Kaizen is the first-ever cross-chain token lifecycle management platform built with the needs of both projects and investors alike.", - "medium": "https://kaizenfinance.medium.com", - "telegram": "https://t.me/KaizenFinance", - "twitter": "https://twitter.com/kaizen_finance", - "website": "https://kaizen.finance" - } - }, - { - "chainId": 103, - "address": "Ea9UXtBtVn1CcYjs5QWrRoyjsUE1YnMWFVoYui5kkA7o", - "symbol": "ETE", - "name": "Eternal Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Ea9UXtBtVn1CcYjs5QWrRoyjsUE1YnMWFVoYui5kkA7o/logo.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/HaiTran60137177", - "website": "https://www.s3corp.com.vn" - } - }, - { - "chainId": 101, - "address": "DbRA7Jp8p3tztoPWrDQeJqpKLKXJpotUzJoeiiCdxewz", - "symbol": "GMP", - "name": "Gamerpull", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DbRA7Jp8p3tztoPWrDQeJqpKLKXJpotUzJoeiiCdxewz/logo.png", - "tags": ["community-token", "social-token", "utility-token"], - "extensions": { - "description": "Play video games with anyone anywhere in the world on any platform and earn using your Esport skills.", - "serumV3Usdt": "FoUNnH6RTVFrL92PsvgLbwTZbFHK1PUe1rb2ZWfF3VGK", - "twitter": "https://twitter.com/GamerPull", - "website": "https://gamerpull.com/" - } - }, - { - "chainId": 101, - "address": "DqxzPWQ2FKHn8pRoy9jCpA6M3GkEqYfieiAVwMYWVyXr", - "symbol": "ROAR", - "name": "Roar Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DqxzPWQ2FKHn8pRoy9jCpA6M3GkEqYfieiAVwMYWVyXr/logo.png", - "tags": ["community-token", "social-token", "utility-token"], - "extensions": { - "description": "Earn ROAR by playing to soltigers game", - "twitter": "https://twitter.com/SOL_Tigers", - "website": "https://soltigers.io/" - } - }, - { - "chainId": 101, - "address": "APTtJyaRX5yGTsJU522N4VYWg3vCvSb65eam5GrPT5Rt", - "symbol": "APT", - "name": "Apricot", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/APTtJyaRX5yGTsJU522N4VYWg3vCvSb65eam5GrPT5Rt/logo.svg", - "tags": ["apricot", "lending", "x-farm"], - "extensions": { - "coingeckoId": "apricot", - "discord": "https://discord.gg/Aw6MEUue", - "medium": "https://apricotfinance.medium.com/", - "twitter": "https://twitter.com/ApricotFinance", - "website": "https://apricot.one" - } - }, - { - "chainId": 103, - "address": "H6UWLcYpDoDUNXgnFxxvKtm4MhKENVVAuGukyMHxpyNJ", - "symbol": "LDXI", - "name": "LDXI Token", - "decimals": 9, - "logoURI": "https://github.com/Randi-Edi/token_logos/blob/main/ldx.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "DH5KjPM53i7NMj69CEZ6FiF82ipbgz1U6QzNfQNY87Pr", - "symbol": "SOLAB", - "name": "SOLAB Finance", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Protossnam/token-list/main/assets/mainnet/DH5KjPM53i7NMj69CEZ6FiF82ipbgz1U6QzNfQNY87Pr/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "9EypAuptQxzpq5hNob6S4HT75UAbcbNsh6ysYmnic8vf", - "symbol": "MDC", - "name": "Medcoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9EypAuptQxzpq5hNob6S4HT75UAbcbNsh6ysYmnic8vf/logo.png", - "tags": ["Community-token"], - "extensions": { - "telegram": "https://t.me/medcointech", - "website": "https://medcoin.tech/" - } - }, - { - "chainId": 101, - "address": "2ScZPtpLG4bb3SHfXEuTr9BuLdixDc1v3UTga2iiSH8n", - "symbol": "CHONK", - "name": "CHONKERS", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/megachonk/chonk/main/Chonkers.png", - "tags": ["community-token", "meme-token"], - "extensions": { - "twitter": "https://twitter.com/ChonkersSolana" - } - }, - { - "chainId": 103, - "address": "9XPDVRQ3vfeccyvj6xh2uS5meuRKTXPueWcqGKgjo6pK", - "symbol": "BTP", - "name": "BLOCKOVATE TEST PROJECT", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9XPDVRQ3vfeccyvj6xh2uS5meuRKTXPueWcqGKgjo6pK/logo.png" - }, - { - "chainId": 101, - "address": "AfXLBfMZd32pN6QauazHCd7diEWoBgw1GNUALDw3suVZ", - "symbol": "FIRE", - "name": "Solfire Finance", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AfXLBfMZd32pN6QauazHCd7diEWoBgw1GNUALDw3suVZ/logo.png", - "tags": ["community-token"], - "extensions": { - "telegram": "https://t.me/solfirefinance", - "website": "https://solfire.finance/" - } - }, - { - "chainId": 101, - "address": "D3cm6WRnyBct3p7vFqyTt2CaynsGPuVQT2zW6WHSTX6q", - "symbol": "THECA", - "name": "Theca", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/D3cm6WRnyBct3p7vFqyTt2CaynsGPuVQT2zW6WHSTX6q/logo.png", - "tags": ["utility-token", "Application"], - "extensions": { - "address": "D3cm6WRnyBct3p7vFqyTt2CaynsGPuVQT2zW6WHSTX6q", - "coingeckoId": "theca", - "coinmarketcap": "https://coinmarketcap.com/currencies/theca/", - "description": "Theca has the mission to protect, spread and promote knowledge through blockchain technology, making the works of authors accessible to anyone. Theca: the first blockchain library", - "discord": "https://discord.com/invite/YfbVenPbvq", - "instagram": "https://www.instagram.com/theca_org", - "medium": "https://theca.medium.com/", - "serumV3Usdc": "6uH2rvVUySwnVFw7CMNV4HTzuxHTUNC7pK22pXcqgSey", - "twitter": "https://twitter.com/Theca_org", - "website": "https://theca.org" - } - }, - { - "chainId": 101, - "address": "3eLpKZBgu6pKG2TSpvTfTeeimT294yxV2AEiBKZdY2ai", - "symbol": "SGG", - "name": "Solx Gaming Guild", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3eLpKZBgu6pKG2TSpvTfTeeimT294yxV2AEiBKZdY2ai/logo.png", - "tags": ["dao", "gaming", "gamefi", "utility-token"], - "extensions": { - "description": "Solx Gaming Guild DAO", - "twitter": "https://twitter.com/SolxGamingGuild" - } - }, - { - "chainId": 101, - "address": "DLvxinqHRjdJAXW3WJdvbGC5WgBr1v6RCXquLANM7DcV", - "symbol": "SLPY", - "name": "Solapoly Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DLvxinqHRjdJAXW3WJdvbGC5WgBr1v6RCXquLANM7DcV/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/solapolygame", - "website": "https://www.solapoly.com/" - } - }, - { - "chainId": 101, - "address": "3xXMjiMyu4hthrVWmsxvBrKtehBWFgSKRnGB9Je4mmdA", - "symbol": "SINGULARITY", - "name": "Singularity", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3xXMjiMyu4hthrVWmsxvBrKtehBWFgSKRnGB9Je4mmdA/logo.png", - "tags": ["utility-token"], - "extensions": { - "blog": "https://blog.singularityonline.app", - "description": "Singularity Online in-game currency Token", - "twitter": "https://twitter.com/SingularityMeta", - "website": "https://singularityonline.app", - "whitepaper": "https://whitepaper.singularityonline.app" - } - }, - { - "chainId": 101, - "address": "8JSMcHAXLjmdcxXre3Cb6uccbMUSRvLw4NF3WNDP7UVD", - "symbol": "SBALL", - "name": "SOLANA KING BALL", - "decimals": 9, - "logoURI": "https://i.ibb.co/DQ0HmQp/logos.png", - "tags": ["meme-token"], - "extensions": { - "discord": "https://discord.com/invite/WNzG2QKdgj", - "twitter": "https://twitter.com/solanakingball" - } - }, - { - "chainId": 101, - "address": "6TrhkzBAokyonkodNY3hsxqMhf1kaj6Zjk7QKc3E6QZc", - "symbol": "TRS", - "name": "Trush", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6TrhkzBAokyonkodNY3hsxqMhf1kaj6Zjk7QKc3E6QZc/logo.png", - "tags": ["defi"], - "extensions": { - "website": "https://www.trush.io" - } - }, - { - "chainId": 101, - "address": "81Y4XyV6TQj3XjQnJ1LNq9BifH6BwwuymPFjNd5Ab8i7", - "symbol": "SADBOX", - "name": "Sad Box Token", - "decimals": 8, - "logoURI": "https://cdn.jsdelivr.net/gh/Zilula/moke-token/sadboxLogo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "HAZyBXwLQUxBPNbCeHdHYDFt3qjEQFEsJ2ojWE66zHRP", - "symbol": "SOCKFR", - "name": "SockFRACT", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HAZyBXwLQUxBPNbCeHdHYDFt3qjEQFEsJ2ojWE66zHRP/logo.png", - "extensions": { - "discord": "https://discord.com/invite/rznuTnenPJ", - "medium": "https://medium.com/@mimo_3408", - "twitter": "https://twitter.com/MillionMonke", - "website": "https://millionmonke.com/" - } - }, - { - "chainId": 101, - "address": "62n7HVBjPpydoZEfipAZ2vasGnaC6jMB5cRoBsTdwxAd", - "symbol": "SDXC", - "name": "SOLIDEX", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/62n7HVBjPpydoZEfipAZ2vasGnaC6jMB5cRoBsTdwxAd/logo.png", - "extensions": { - "instagram": "https://instagram.com/solidex_finance", - "telegram": "https://t.me/solidexfinance", - "twitter": "https://twitter.com/solidexf", - "website": "https://solidex.finance" - } - }, - { - "chainId": 101, - "address": "ChZp13iVvEYPSfhYnURo8cegaT8yUN8GYnUFfV1meB7L", - "symbol": "paimon", - "name": "paimon", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ChZp13iVvEYPSfhYnURo8cegaT8yUN8GYnUFfV1meB7L/logo.png", - "tags": ["paimon-token", "paimon"] - }, - { - "chainId": 101, - "address": "29gwg5bs4x33L53wRfPoerReQfQgMDwftACQifGEtqk6", - "symbol": "GOS", - "name": "Gorilla Squad", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/29gwg5bs4x33L53wRfPoerReQfQgMDwftACQifGEtqk6/logo.png", - "tags": ["NFT", "meme", "Community-token"], - "extensions": { - "description": "The Gorilla Squad comprises 5,555 unique NFTs with in-born attributes and a sole mission to RULE.", - "discord": "https://discord.gg/BaBYDhYJQn", - "twitter": "https://twitter.com/gorrilla_squad", - "website": "https://www.thegorillasquad.com" - } - }, - { - "chainId": 101, - "address": "F8qiDPBtLm3a78gdRQ5eioMiL3Swb8dyeUpULsUHEhDY", - "symbol": "CREATIVE", - "name": "Creative Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/dmontaldo/static-content/main/creative-token.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "EgunFXyGMyGkAy5mWhL1CcHT9RqDTn9vE1HWEbF7jMkC", - "symbol": "HZB", - "name": "Haizenberg", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EgunFXyGMyGkAy5mWhL1CcHT9RqDTn9vE1HWEbF7jMkC/logo.png", - "extensions": { - "telegram": "https://t.me/hzb_channel", - "website": "https://hzbt.github.io/" - } - }, - { - "chainId": 101, - "address": "BzNgVm6TAUzo81QJzXCEockZskrKgB96huDRae9pwJXZ", - "symbol": "GAMEFI", - "name": "GameFi Coin", - "decimals": 9, - "logoURI": "https://gameficoin.com/images/gamefilogo.png", - "tags": ["gamefi", "meme", "game-token"], - "extensions": { - "twitter": "https://twitter.com/gameficoin", - "website": "https://gameficoin.com" - } - }, - { - "chainId": 101, - "address": "FXdxsZhNYGSBdne2LZ448SJ1QDXk8KaEzvKivCvc38h3", - "symbol": "ACCT", - "name": "Agrinix Carbon Credit Token", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/brunofaczz/acct-image/logo.jpeg", - "tags": ["utility-token"], - "extensions": { - "website": "https://acct.agrinix.com.br" - } - }, - { - "chainId": 101, - "address": "NTRNt4MmibcfkRHww3Y4WXRwFkXWxLvFXhBJ27YUbVN", - "symbol": "NTRN", - "name": "UNQ Neutrino", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/NTRNt4MmibcfkRHww3Y4WXRwFkXWxLvFXhBJ27YUbVN/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.com/invite/unqnetwork", - "twitter": "https://twitter.com/clubunq", - "website": "https://unquniverse.com/" - } - }, - { - "chainId": 101, - "address": "DMTRqrUy2MVRTLZN7wv54sboHZDiiVsbeqXAiCUpDyNZ", - "symbol": "DMTR", - "name": "UNQ Dark Matter", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DMTRqrUy2MVRTLZN7wv54sboHZDiiVsbeqXAiCUpDyNZ/logo.png", - "extensions": { - "discord": "https://discord.com/invite/unqnetwork", - "twitter": "https://twitter.com/clubunq", - "website": "https://unquniverse.com/" - } - }, - { - "chainId": 101, - "address": "E4D4p3cSHZrSATTqvVMy5PsBJWZMKFE5fJYVJPHHo7B4", - "symbol": "LOOTERS", - "name": "Shadow Looters Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/E4D4p3cSHZrSATTqvVMy5PsBJWZMKFE5fJYVJPHHo7B4/logo.png", - "tags": ["Governance-token", "Game-Fi"], - "extensions": { - "discord": "https://discord.gg/5E4RzUPYjs", - "twitter": "https://twitter.com/shadowlooters" - } - }, - { - "chainId": 101, - "address": "5PnmhtnvJgPnBuRtgG8erR5AwAPkqkEF9MLieFnxLygX", - "symbol": "PARTY", - "name": "Party Giraffes", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/xRoBBeRT/PG-Logo/PGlogo.png", - "tags": ["community-token"], - "extensions": { - "discord": "https://discord.com/invite/partygiraffes", - "twitter": "https://twitter.com/PartyGiraffes", - "website": "https://partygiraffes.net" - } - }, - { - "chainId": 101, - "address": "6zQwyDe541Ys4Q85vkhvHMMRW7ypA4PyHCSF1doWZ4tw", - "symbol": "FLOKIS", - "name": "Floki Shiba Solana", - "decimals": 9, - "logoURI": "https://i.imgur.com/aBLrIE0.png", - "tags": ["meme-token"], - "extensions": { - "discord": "https://discord.gg/QDfXeXhkqR", - "twitter": "https://twitter.com/floki_solana", - "website": "http://flokisol.tech/" - } - }, - { - "chainId": 101, - "address": "DhfF81uahANRYQ4rn8VZKSGVmLE4k2nzccgfZMazmLJ2", - "symbol": "TIPZ", - "name": "Tipzcoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DhfF81uahANRYQ4rn8VZKSGVmLE4k2nzccgfZMazmLJ2/logo.png", - "tags": ["community-token"], - "extensions": { - "twitter": "https://twitter.com/tipzcoin" - } - }, - { - "chainId": 101, - "address": "jKoDjNz1nVmBz2X5d5DvcKBon1VLh2TS9VjsoCJJ4AD", - "symbol": "NIB", - "name": "NiB Token", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/devbaze/looptoken/logo.png", - "tags": ["social-token", "loop"], - "extensions": { - "discord": "https://discord.com/invite/EtRQ4gs73c" - } - }, - { - "chainId": 101, - "address": "9VVAUW3NjXWgsaD7eNjDmGeSxLP9v72neKKUvXSkijsK", - "symbol": "SHIBANA", - "name": "SHIBANA", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9VVAUW3NjXWgsaD7eNjDmGeSxLP9v72neKKUvXSkijsK/Shibana.png", - "tags": ["community-token", "meme-token", "Defi"], - "extensions": { - "discord": "https://discord.gg/shibana", - "twitter": "https://twitter.com/ShibanaCoin", - "website": "https://www.shibana.io/" - } - }, - { - "chainId": 101, - "address": "4ThReWAbAVZjNVgs5Ui9Pk3cZ5TYaD9u6Y89fp6EFzoF", - "symbol": "1SOL", - "name": "1sol.io Token", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4ThReWAbAVZjNVgs5Ui9Pk3cZ5TYaD9u6Y89fp6EFzoF/logo.png", - "tags": ["wrapped", "utility-token", "aggregator"], - "extensions": { - "coinmarketcap": "https://coinmarketcap.com/currencies/1sol/", - "description": "1Sol aggregates DEX(s), lending, yield-farming, and cross-chain trading.", - "discord": "https://discord.gg/juvVBKnvkj", - "github": "https://github.com/1sol-io", - "medium": "https://medium.com/@1solProtocol", - "telegram": "https://t.me/onesolcommunity", - "twitter": "https://twitter.com/1solProtocol", - "website": "https://app.1sol.io/" - } - }, - { - "chainId": 101, - "address": "Az4wTkL8AbFps6yJ7WgMg4kAS7UWxaHPxWzdxSCLbiA8", - "symbol": "KNSR", - "name": "KNSR Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Az4wTkL8AbFps6yJ7WgMg4kAS7UWxaHPxWzdxSCLbiA8/knsr.svg", - "tags": ["social-token"], - "extensions": { - "website": "https://www.knsr.io/" - } - }, - { - "chainId": 101, - "address": "EgnemVHLdXUkz6LFQRaQBihYFqWWMC8hStpZhrPkKyec", - "symbol": "MGX", - "name": "Magmox", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/MagmoxMGXTeam/token-list/main/assets/mainnet/EgnemVHLdXUkz6LFQRaQBihYFqWWMC8hStpZhrPkKyec/logo.png", - "tags": ["utility"], - "extensions": { - "telegram": "https://t.me/joinMagmoxMGX", - "twitter": "https://twitter.com/MagmoxMGX", - "website": "https://magmox.com" - } - }, - { - "chainId": 101, - "address": "DmXfDUeyRJqnpvdjssGgUXwZrRFPXvu2DfMq4jfTTC9C", - "symbol": "WEENS", - "name": "Ween", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DmXfDUeyRJqnpvdjssGgUXwZrRFPXvu2DfMq4jfTTC9C/logo.png", - "tags": ["meme-token"], - "extensions": { - "coingeckoId": "ween-token", - "description": "Ween Token, a meme coin for people who love wiener dogs.", - "discord": "https://discord.gg/longweenclub", - "twitter": "https://twitter.com/weentoken", - "website": "https://weentoken.com" - } - }, - { - "chainId": 101, - "address": "HNtzvJgduuyNsFDnqH4GyHDqNQJShJMxzUcGnUW9xeWi", - "symbol": "AGRO", - "name": "Agroland", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/xan5h33/agroland/master/agLogo.png", - "extensions": { - "github": "https://github.com/xan5h33/agroland" - } - }, - { - "chainId": 101, - "address": "STMSXv13iwhDxH2MZa5bTr1pSsn7qH5VRKbuJvMzvkm", - "symbol": "STM", - "name": "Soltama", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/STMSXv13iwhDxH2MZa5bTr1pSsn7qH5VRKbuJvMzvkm/logo.png", - "tags": ["meme", "Nft"], - "extensions": { - "website": "http://www.soltama.com/" - } - }, - { - "chainId": 101, - "address": "FcjViE1oVbXFza5ry9Q7WZ9XNd95zu1LqEiSUdeJMPTP", - "symbol": "wbBUSD-4Pool", - "name": "Mercurial LP Token (BUSD-4Pool)", - "decimals": 12, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FcjViE1oVbXFza5ry9Q7WZ9XNd95zu1LqEiSUdeJMPTP/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://www.mercurial.finance/" - } - }, - { - "chainId": 101, - "address": "CZrt1PboqCm78iZBztRkHDkpzxLYrm2YeHYtE4voyeJh", - "symbol": "BNTR", - "name": "Crypto Banter", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CZrt1PboqCm78iZBztRkHDkpzxLYrm2YeHYtE4voyeJh/logo.png", - "tags": ["social-token", "utility-token", "community-token", "DeFi"], - "extensions": { - "facebook": "https://www.facebook.com/cryptobanter", - "instagram": "https://www.instagram.com/crypto_banter", - "twitter": "https://twitter.com/crypto_banter", - "youtube": "https://www.youtube.com/channel/UCN9Nj4tjXbVTLYWN0EKly_Q" - } - }, - { - "chainId": 101, - "address": "FzbRW9UWtpJxBJBuTRsTgpdJrQvDUVjddhiTuGVkhENz", - "symbol": "SOLG", - "name": "Solana Gold", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FzbRW9UWtpJxBJBuTRsTgpdJrQvDUVjddhiTuGVkhENz/logo.png", - "tags": ["Community-token"], - "extensions": { - "telegram": "https://t.me/solanagoldorg", - "website": "https://solanagold.org/" - } - }, - { - "chainId": 101, - "address": "45ojchnvC3agGNvs86MWBq8N4miiTY6X8ECQzgQNDE4v", - "symbol": "SWERVE", - "name": "Swerve Protocol", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/swervesolana/swerve-assets/main/logo_400x400.jpg", - "tags": ["DeFi"], - "extensions": { - "twitter": "https://twitter.com/swervesolana", - "website": "https://www.swervesolana.com" - } - }, - { - "chainId": 101, - "address": "6vEscJrY775p2JtCGXYgaq2rXkvv2G2edeQoRRLfiQzW", - "symbol": "SNFT", - "name": "OpenSolNFT", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6vEscJrY775p2JtCGXYgaq2rXkvv2G2edeQoRRLfiQzW/logo.png", - "tags": ["currency-token"] - }, - { - "chainId": 101, - "address": "DAZbw2FG5PCssV24SsP1E3m1whDn8paXZMwBdfVHRt5w", - "symbol": "MCS", - "name": "Million Coin Solana", - "decimals": 9, - "logoURI": "https://cdn.discordapp.com/attachments/908414498933735525/908414576838733854/Square-512.jpg", - "tags": ["meme-token"], - "extensions": { - "twitter": "https://twitter.com/MillionCoinSol" - } - }, - { - "chainId": 101, - "address": "EpnJLu5oc1UWG25jNvSzuezz1ENrxbDnLg1wQDC7Hfbw", - "symbol": "TURD", - "name": "Actual Shitcoin", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EpnJLu5oc1UWG25jNvSzuezz1ENrxbDnLg1wQDC7Hfbw/logo.png", - "tags": ["MEME"], - "extensions": { - "twitter": "https://twitter.com/actualshitcoin", - "website": "https://actualshitcoin.com" - } - }, - { - "chainId": 101, - "address": "3BWKZdsnHusiQ9Z7mGqp6aJVBcukXKy1Y33cBeeXtWEM", - "symbol": "GAEA", - "name": "GAEA Finance", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3BWKZdsnHusiQ9Z7mGqp6aJVBcukXKy1Y33cBeeXtWEM/logo.png" - }, - { - "chainId": 101, - "address": "CAPYD6Lrm7bTZ6C7t7JvSxvpEcfKQ9YNB7kUjh6p6XBN", - "symbol": "CAPY", - "name": "Capybara", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CAPYD6Lrm7bTZ6C7t7JvSxvpEcfKQ9YNB7kUjh6p6XBN/logo.png", - "tags": ["meme", "Nft"], - "extensions": { - "website": "http://www.capybaraworld.com/" - } - }, - { - "chainId": 101, - "address": "9TE7ebz1dsFo1uQ2T4oYAKSm39Y6fWuHrd6Uk6XaiD16", - "symbol": "MIMO", - "name": "Million Monke", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9TE7ebz1dsFo1uQ2T4oYAKSm39Y6fWuHrd6Uk6XaiD16/logo.png", - "extensions": { - "discord": "https://discord.com/invite/rznuTnenPJ", - "medium": "https://medium.com/@mimo_3408", - "twitter": "https://twitter.com/MillionMonke", - "website": "https://millionmonke.com/" - } - }, - { - "chainId": 101, - "address": "c8JyuF2fD84G6Vk4AmeVfTUoseNRmv2A9JpymAXi4B6", - "symbol": "WENSIR", - "name": "Wensircoin", - "decimals": 7, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/c8JyuF2fD84G6Vk4AmeVfTUoseNRmv2A9JpymAXi4B6/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/wensircoin", - "website": "https://www.wensirsolana.com/" - } - }, - { - "chainId": 101, - "address": "7yyTQNQdi45pRVCkDXB8yLRcPw9KFvd9P2Bw3u22HUj9", - "symbol": "ATWORLD", - "name": "ATWORLD", - "decimals": 3, - "logoURI": "https://cdn.jsdelivr.net/gh/AbdallaMalik/ATWORLD/ATWORLDtoken/ATWORLD-LOGO.png", - "tags": ["community-token"], - "extensions": { - "facebook": "https://www.facebook.com/ATWORLDCORP/", - "telegram": "https://t.me/atworldtoken", - "twitter": "https://twitter.com/atworldtoken", - "website": "https://Atworld.io/" - } - }, - { - "chainId": 101, - "address": "B7xc2vPFDzWwD3ZaHPr2sACB49XFM2bqMQpqpoo87TjA", - "symbol": "SRBs", - "name": "Solana Robots", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/B7xc2vPFDzWwD3ZaHPr2sACB49XFM2bqMQpqpoo87TjA/logo.png", - "tags": ["community-token", "srbs"] - }, - { - "chainId": 101, - "address": "2946ofy854iifvXCQmHX2AJgxRBoQcchy1gfD26RtkHp", - "symbol": "SHIBT", - "name": "SHIBA LIGHT", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2946ofy854iifvXCQmHX2AJgxRBoQcchy1gfD26RtkHp/logo.png", - "tags": ["DEX", "MEME"], - "extensions": { - "discord": "https://discord.gg/aWcp7uRe", - "telegram": "https://t.me/shiba_light", - "website": "https://shibalight.com" - } - }, - { - "chainId": 101, - "address": "4bLJGNHxUyUSBAaKaRt4J6bM7Pi7d7L8fF7u7vbonPMa", - "symbol": "CLEF", - "name": "CLEF COIN", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4bLJGNHxUyUSBAaKaRt4J6bM7Pi7d7L8fF7u7vbonPMa/logo.png" - }, - { - "chainId": 101, - "address": "4fZ39Btvq4mB9Z1tWWtqfMS2cgyAUbkfPeGCGuiPpk29", - "symbol": "CDC", - "name": "Crypto Dispensary Coin", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4fZ39Btvq4mB9Z1tWWtqfMS2cgyAUbkfPeGCGuiPpk29/logo.png", - "extensions": { - "website": "https://cryptodispensary.net" - } - }, - { - "chainId": 101, - "address": "CMdr2YEhJbnf82NSPci8PdG1zfViQPGExbbZoy5LJL7v", - "symbol": "AGX", - "name": "AGX Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CMdr2YEhJbnf82NSPci8PdG1zfViQPGExbbZoy5LJL7v/logo.png", - "tags": ["stablecoin"], - "extensions": { - "address": "0x69CF1e63090Acf1e1E16ec0066055f8973fc9Ec8", - "assetContract": "https://etherscan.io/address/0x69CF1e63090Acf1e1E16ec0066055f8973fc9Ec8", - "website": "https://lode.one" - } - }, - { - "chainId": 101, - "address": "PoLEXM5xikzieXENFvP7WwHJPorcFiCUVuMo9BAGZT3", - "symbol": "POLE", - "name": "Pole Aggregator Governance Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/PoLEXM5xikzieXENFvP7WwHJPorcFiCUVuMo9BAGZT3/logo.svg", - "extensions": { - "discord": "https://discord.gg/RASngHfHhS", - "github": "https://github.com/pole-finance", - "medium": "https://medium.com/pole-aggregator", - "serumV3Usdc": "Ak1UDskYAjztX5YkxW8dmERjLwS9fYmk1b3G6fpWDxp6", - "twitter": "https://twitter.com/Pole_Finance", - "website": "https://pole.finance" - } - }, - { - "chainId": 101, - "address": "FvvQ6VPBkYB79ti5HmF1ea5Hbdkq7an3UsNmRa5TSfTW", - "symbol": "K2J", - "name": "K2J", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FvvQ6VPBkYB79ti5HmF1ea5Hbdkq7an3UsNmRa5TSfTW/logo.png" - }, - { - "chainId": 101, - "address": "cNXe9Qi7xPYxyjw8D8BGs9MTPnCNwppg2bEmzdaaprp", - "symbol": "GAMEZ", - "name": "GAMERROOM", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/cNXe9Qi7xPYxyjw8D8BGs9MTPnCNwppg2bEmzdaaprp/logo.png", - "extensions": { - "twitter": "https://twitter.com/the_gamerroom", - "website": "https://gamerroom.io" - } - }, - { - "chainId": 101, - "address": "46Sg2dkZ4gMRHt6QpuWdUiA7HbgeavyKeGiK7hDggeow", - "symbol": "MELS", - "name": "MeelasCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/46Sg2dkZ4gMRHt6QpuWdUiA7HbgeavyKeGiK7hDggeow/logo.png" - }, - { - "chainId": 101, - "address": "DdNj56j1daQhtTKRzrFsrZqsh3EiMmeHcrv2h9ojNHqr", - "symbol": "AYO", - "name": "Ayoken", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DdNj56j1daQhtTKRzrFsrZqsh3EiMmeHcrv2h9ojNHqr/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/ayokenlabs", - "website": "https://www.ayoken.com" - } - }, - { - "chainId": 101, - "address": "4hNvzLiFSVt9AL5cpUszVredNbmQFvvokDGexQxKuFV2", - "symbol": "WLP", - "name": "Web Link Protocol", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4hNvzLiFSVt9AL5cpUszVredNbmQFvvokDGexQxKuFV2/logo.png", - "tags": ["utility-token", "currency-token"] - }, - { - "chainId": 101, - "address": "AjaDbQQmkZ1iWE6MR2xBuoNNRmVJhV8f3wwSrAeg9ggA", - "symbol": "D20", - "name": "d20 Gamer Nation", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AjaDbQQmkZ1iWE6MR2xBuoNNRmVJhV8f3wwSrAeg9ggA/logo.png", - "tags": ["meme-token"], - "extensions": { - "discord": "https://discord.gg/7G5ZjxYp7M", - "website": "https://thegamernation.org" - } - }, - { - "chainId": 101, - "address": "Gemd25RpoWBa6HviAXxLyf1sbGT23CUxHjmwetzTEfL2", - "symbol": "GEMS", - "name": "Space Heads Gem", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Gemd25RpoWBa6HviAXxLyf1sbGT23CUxHjmwetzTEfL2/logo.svg", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/spaceheads", - "instagram": "https://www.instagram.com/space_heads_nft/", - "twitter": "https://twitter.com/space_heads_nft", - "website": "https://spaceheads.co" - } - }, - { - "chainId": 101, - "address": "5vm1hVMm9VpRR1HrdGJdcTHMzTsKkY8nVm3BUYoU4wUw", - "symbol": "SHIMO", - "name": "Shibi Samo", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5vm1hVMm9VpRR1HrdGJdcTHMzTsKkY8nVm3BUYoU4wUw/logo.png", - "tags": ["meme", "community", "NFTs", "DEFI", "Dog"], - "extensions": { - "discord": "https://discord.gg/dCzfnNtZaH", - "telegram": "https://t.me/joinchat/DX1mQFn9behmNjRl", - "twitter": "https://twitter.com/ShibiSamo", - "website": "https://shibi-samo.com" - } - }, - { - "chainId": 101, - "address": "86H9UVqUFqPjKiMPVhRLfWiTsJRWRc9yFGJACmboZCyi", - "symbol": "FSKZ", - "name": "FUTURE SKULLZ", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/86H9UVqUFqPjKiMPVhRLfWiTsJRWRc9yFGJACmboZCyi/logo.png" - }, - { - "chainId": 101, - "address": "8W6QYqd35bH6BWt2zQVVcKzJj6MrXeGAsnEhcrsogypK", - "symbol": "TIMBA", - "name": "TIMBA DAO ", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8W6QYqd35bH6BWt2zQVVcKzJj6MrXeGAsnEhcrsogypK/logo.png", - "tags": ["social-token", "community-token"], - "extensions": { - "discord": "https://discord.gg/Fv89T76F" - } - }, - { - "chainId": 101, - "address": "2FKuYE5D75e9Fjg3ymGBrFfVc8tVKac4SeyvZn5dGNUz", - "symbol": "VITAL", - "name": "VITAL Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2FKuYE5D75e9Fjg3ymGBrFfVc8tVKac4SeyvZn5dGNUz/logo.png", - "tags": ["community-token", "utility-token"], - "extensions": { - "coingeckoId": "vitall-markets", - "discord": "https://discord.gg/Z3cFSSZKwU", - "twitter": "https://twitter.com/vitallmarkets", - "website": "https://www.vitallmarkets.com/" - } - }, - { - "chainId": 101, - "address": "FLuFFY16jePbVTrJ68SY3YbwyZvne2w2ktAVkArpBufG", - "symbol": "FLUFFY", - "name": "Fluffy Heads Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FLuFFY16jePbVTrJ68SY3YbwyZvne2w2ktAVkArpBufG/logo.png", - "tags": ["social-token", "Fluffy"], - "extensions": { - "discord": "https://discord.gg/msdttEjB7u", - "twitter": "https://twitter.com/FluffyHeadsNFT", - "website": "https://fluffyheads.club/" - } - }, - { - "chainId": 101, - "address": "seedEDBqu63tJ7PFqvcbwvThrYUkQeqT6NLf81kLibs", - "symbol": "SEEDED", - "name": "Seeded Network", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/seedEDBqu63tJ7PFqvcbwvThrYUkQeqT6NLf81kLibs/logo.png", - "tags": ["lending", "defi"], - "extensions": { - "discord": "https://seeded.network/discord", - "medium": "https://blog.seeded.network/", - "reddit": "https://reddit.com/r/SeededNetwork", - "twitter": "https://twitter.com/SeededNetwork", - "website": "https://seeded.network" - } - }, - { - "chainId": 101, - "address": "DZkcS3dkDRj4KgxPKrJqAkruL8UznAgn5kFtL7bM9sP1", - "symbol": "SH", - "name": "SpaceHeads Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DZkcS3dkDRj4KgxPKrJqAkruL8UznAgn5kFtL7bM9sP1/logo.svg", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/spaceheads", - "instagram": "https://www.instagram.com/space_heads_nft/", - "twitter": "https://twitter.com/space_heads_nft", - "website": "https://spaceheads.co" - } - }, - { - "chainId": 101, - "address": "AELJZ6bGcTRMzA4qHPZzqmfQ7eKDz47wNtzjDG5tqkRR", - "symbol": "HEAD", - "name": "Heads Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AELJZ6bGcTRMzA4qHPZzqmfQ7eKDz47wNtzjDG5tqkRR/logo.svg", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/spaceheads", - "instagram": "https://www.instagram.com/space_heads_nft/", - "twitter": "https://twitter.com/space_heads_nft", - "website": "https://spaceheads.co" - } - }, - { - "chainId": 101, - "address": "4HecfhYXWiRhfJyjfRAufrxkRocBgwDzRmYAzCLS3VDA", - "symbol": "HEADS", - "name": "Space Heads Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4HecfhYXWiRhfJyjfRAufrxkRocBgwDzRmYAzCLS3VDA/logo.svg", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/spaceheads", - "instagram": "https://www.instagram.com/space_heads_nft/", - "twitter": "https://twitter.com/space_heads_nft", - "website": "https://spaceheads.co" - } - }, - { - "chainId": 101, - "address": "3nXruwsZYPqf6A5NgoVMPTsqgN3ur2PU3DTzmNgnwiDa", - "symbol": "ESA", - "name": "Esculap", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3nXruwsZYPqf6A5NgoVMPTsqgN3ur2PU3DTzmNgnwiDa/logo.png", - "tags": ["health", "eBank", "DLTAI", "predictions", "database"], - "extensions": { - "facebook": "https://www.facebook.com/Esculap-110660738044410", - "instagram": "https://www.instagram.com/esculapesa/", - "linkedin": "https://www.linkedin.com/company/esculapesa", - "telegram": "https://t.me/esculapesa", - "twitter": "https://twitter.com/EsculapESA", - "website": "https://esculap.uk", - "youtube": "https://youtube.com/channel/UCBlLNzv4H6EgL_th2sNmtWQ" - } - }, - { - "chainId": 101, - "address": "DUTLCXjguLEmzBXVQbjuyfqCD1Qa3f9TgaTAXXHK8ub3", - "symbol": "LIBN", - "name": "LIBANO", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DUTLCXjguLEmzBXVQbjuyfqCD1Qa3f9TgaTAXXHK8ub3/logo.png", - "tags": ["utility-token", "Startup-token"], - "extensions": { - "telegram": "https://t.me/LibanoCoinCommunity", - "twitter": "https://twitter.com/Libano_Official" - } - }, - { - "chainId": 101, - "address": "BFXZ7Mpw6zQGQYtQH1VUjtTrfKGc7uNjQWUize3Fdu2a", - "symbol": "PKMN", - "name": "PokeDollar", - "decimals": 9, - "logoURI": "https://pkmnsoltrainersbucket-devnet0.s3.amazonaws.com/pokeball_sq.gif", - "tags": ["videogame", "utility-token", "gaming", "pkmn"] - }, - { - "chainId": 101, - "address": "EkazenTsXibMibBBTcaFkwuYdqVZrDj5tcUABR9jUNW", - "symbol": "MFER", - "name": "Monkey Fucker", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EkazenTsXibMibBBTcaFkwuYdqVZrDj5tcUABR9jUNW/logo.png", - "tags": ["social-token", "community-token"], - "extensions": { - "discord": "https://discord.gg/fTvkBYAM3M", - "twitter": "https://twitter.com/kodamaNFTart", - "website": "http://rational.af" - } - }, - { - "chainId": 101, - "address": "J4D6LT4YqaZBF4snQskq8sYbxjx5P9pXHyXKBcaGbq98", - "symbol": "GREAT", - "name": "Great Legendary", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/J4D6LT4YqaZBF4snQskq8sYbxjx5P9pXHyXKBcaGbq98/logo.png", - "tags": ["community-token", "game-token"], - "extensions": { - "telegram": "https://t.me/greatlegendary", - "twitter": "https://twitter.com/GreatLegendarys", - "website": "https://greatlegendary.com/" - } - }, - { - "chainId": 101, - "address": "2pNLzaGGYdL3u5qy5CybnP196CzuRf6crJ1VNpd4tmPu", - "symbol": "SNFT", - "name": "OpenSOL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2pNLzaGGYdL3u5qy5CybnP196CzuRf6crJ1VNpd4tmPu/logo.png", - "tags": ["governance-token"] - }, - { - "chainId": 101, - "address": "CASHVDm2wsJXfhj6VWxb7GiMdoLc17Du7paH4bNr5woT", - "symbol": "CASH", - "name": "Cashio Dollar", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CASHVDm2wsJXfhj6VWxb7GiMdoLc17Du7paH4bNr5woT/icon.png", - "tags": ["stablecoin"], - "extensions": { - "coingeckoId": "cashio-dollar", - "discord": "https://discord.com/invite/GmkRRKJkuh", - "medium": "https://medium.com/@cashioapp", - "twitter": "https://twitter.com/CashioApp", - "website": "https://cashio.app" - } - }, - { - "chainId": 101, - "address": "CowKesoLUaHSbAMaUxJUj7eodHHsaLsS65cy8NFyRDGP", - "symbol": "COW", - "name": "Cash Cow", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CowKesoLUaHSbAMaUxJUj7eodHHsaLsS65cy8NFyRDGP/icon.png", - "tags": ["governance-token"], - "extensions": { - "discord": "https://discord.com/invite/GmkRRKJkuh", - "medium": "https://medium.com/@cashioapp", - "twitter": "https://twitter.com/CashioApp", - "website": "https://cashio.app" - } - }, - { - "chainId": 101, - "address": "5QjajzuSfugQqqL8NSdkXdC9jDKHwf83yFHfWimhKXBa", - "symbol": "IUS", - "name": "IUS", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5QjajzuSfugQqqL8NSdkXdC9jDKHwf83yFHfWimhKXBa/logo.png" - }, - { - "chainId": 101, - "address": "AoPAKdi7u8BL8D6c64riBDzXdBbS8xCohWzmq8JZozfy", - "symbol": "NLT", - "name": "Neural Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AoPAKdi7u8BL8D6c64riBDzXdBbS8xCohWzmq8JZozfy/logo.png", - "tags": ["community-token", "social-token"], - "extensions": { - "website": "https://higherlevelfx.com" - } - }, - { - "chainId": 101, - "address": "8o2LqpeVcdpNB8qeGJcAFr4rQ4cc2wTpJPdgtsWZWdh7", - "symbol": "LIGMA", - "name": "whats ligma", - "decimals": 12, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8o2LqpeVcdpNB8qeGJcAFr4rQ4cc2wTpJPdgtsWZWdh7/ligma_logo2.png", - "tags": ["utility-token", "meme-token"], - "extensions": { - "website": "https://ligmadao.io" - } - }, - { - "chainId": 101, - "address": "GnzxEyULVPQYb5F5hxGc8dEGivctVrfr5mtsdp4z5xU2", - "symbol": "DJN", - "name": "Fenix Danjon", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GnzxEyULVPQYb5F5hxGc8dEGivctVrfr5mtsdp4z5xU2/logo.png", - "tags": ["community-token", "utility-token"], - "extensions": { - "twitter": "https://twitter.com/FenixDanjon", - "website": "https://fenixdanjon.com" - } - }, - { - "chainId": 101, - "address": "G45ASjWvWiWy6HcczTDhxe2JcSTNVr3hEdrKVo5X6PPU", - "symbol": "LEONIDAS-USDC", - "name": "Raydium LP Token (LEONIDAS-USDC)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/G45ASjWvWiWy6HcczTDhxe2JcSTNVr3hEdrKVo5X6PPU/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io" - } - }, - { - "chainId": 101, - "address": "BEya3zocofJYvAN8oSsoNgxkXQN9HwL1ShU4tdHjRsqL", - "symbol": "POOK", - "name": "Pook", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BEya3zocofJYvAN8oSsoNgxkXQN9HwL1ShU4tdHjRsqL/logo.png", - "tags": [ - "community-token", - "social-token", - "meme-token", - "utility-token", - "pook" - ], - "extensions": { - "discord": "https://discord.gg/uxKXY5GEN3" - } - }, - { - "chainId": 101, - "address": "8H7xRwEB5x8QLWX29iLJmGtHdvn98AHh3kk4NjJx64rf", - "symbol": "LEONIDAS-USDC", - "name": "Cropper Finance LP Token (LEONIDAS-USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8H7xRwEB5x8QLWX29iLJmGtHdvn98AHh3kk4NjJx64rf/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io" - } - }, - { - "chainId": 101, - "address": "9XYbEGVjBK2BWvtvjoJBZtnoHtkkdGiw321tdN6eLa4A", - "symbol": "SPORE", - "name": "Flower View", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9XYbEGVjBK2BWvtvjoJBZtnoHtkkdGiw321tdN6eLa4A/logo.png", - "tags": ["utility-token", "community-token"] - }, - { - "chainId": 101, - "address": "6QxNGjZsLaKa35pKnxY2sa7GcUCnWSni9LPfw7KDLqYr", - "symbol": "MOF", - "name": "Molar Finance", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6QxNGjZsLaKa35pKnxY2sa7GcUCnWSni9LPfw7KDLqYr/logo.png", - "tags": ["utility-token", "aggregator", "DEX", "tool", "Exchange"], - "extensions": { - "description": "We are chemist on the solana ecosystem, Dev ops at its peek. All your favorite tools in one place", - "discord": "https://discord.gg/5euk87sWhH", - "github": "https://github.com/Molarfinance", - "twitter": "https://twitter.com/MolarFinance", - "website": "https://molar.finance" - } - }, - { - "chainId": 101, - "address": "9QoLCRyjzPR6v8wkediV577GNQYmGEr96PkpUccCCLBY", - "symbol": "SARG", - "name": "SARG the Endangered", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9QoLCRyjzPR6v8wkediV577GNQYmGEr96PkpUccCCLBY/logo.png", - "tags": ["community-token", "meme-token"] - }, - { - "chainId": 101, - "address": "CXVZgdAGahKyZaTegfJLq5TwjbJkJdSjM3xJHgnSfH26", - "symbol": "FROGG", - "name": "Frog Fork", - "decimals": 6, - "logoURI": "https://i.imgur.com/4S8wvMS.png", - "tags": ["community-token"], - "extensions": { - "discord": "https://discord.gg/E69ZfD8nYV", - "twitter": "https://twitter.com/frogsolana", - "website": "http://frogsolana.org/" - } - }, - { - "chainId": 103, - "address": "2wShzRrTuEV4uKpVHcjEEG2yksZtaQWSbWjawKBkXvi2", - "symbol": "fCryptoPunk-1021", - "name": "Fractionalised CryptoPunk-1021", - "decimals": 2, - "logoURI": "https://i.imgur.com/dCqJri9.png", - "tags": ["bridgesplit-fraction"], - "extensions": { - "vault": "https://devnet.bridgesplit.com/markets/2wShzRrTuEV4uKpVHcjEEG2yksZtaQWSbWjawKBkXvi2" - } - }, - { - "chainId": 101, - "address": "DVhia9KmzYCP1URf4s8DrPsE46A5PuT5TPyVRgr4c895", - "symbol": "HEXAGON", - "name": "Hexagon Protocol", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DVhia9KmzYCP1URf4s8DrPsE46A5PuT5TPyVRgr4c895/logo.png", - "tags": ["DeFi", "DApp", "GameFi", "NFT"], - "extensions": { - "serumV3Usdc": "BQBGTapjYAYa9bY46GCByW2tjQtbHHvEMwGCDYpN3kTR" - } - }, - { - "chainId": 101, - "address": "CFNstfcpNu8r8UsMKiKBg13f5iS7nytje41pS2Uc9f8q", - "symbol": "LJM", - "name": "Jaemyung", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CFNstfcpNu8r8UsMKiKBg13f5iS7nytje41pS2Uc9f8q/logo.png", - "tags": ["meme-token"] - }, - { - "chainId": 101, - "address": "HyxD4QcgeYW6H1acA2tyxFNQ1fTD37J4MZCMEeXCLQsK", - "symbol": "DPAY", - "name": "Doge Pay", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HyxD4QcgeYW6H1acA2tyxFNQ1fTD37J4MZCMEeXCLQsK/logo.png", - "tags": ["utility-token", "meme-token"] - }, - { - "chainId": 101, - "address": "4n2fdrTT2oVpYUzyHxURUwaZDKdXF2tsPLo7EKf6KU78", - "symbol": "YSY", - "name": "Seokyoul", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4n2fdrTT2oVpYUzyHxURUwaZDKdXF2tsPLo7EKf6KU78/logo.png", - "tags": ["meme-token"] - }, - { - "chainId": 101, - "address": "6HQscHoVdhAhABJFUU4vAgVicGzRwgARSTeob8r9brzv", - "symbol": "SOLDN", - "name": "Solana Diamond", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6HQscHoVdhAhABJFUU4vAgVicGzRwgARSTeob8r9brzv/logo.png", - "tags": ["Community-token"] - }, - { - "chainId": 101, - "address": "DJ5BWLXXceGR7DqjqfNYihDWf15jPEjQD8ZhCpW7ocNT", - "symbol": "PRDX", - "name": "Paradox Token", - "decimals": 9, - "logoURI": "https://cobaltlend.com/wp-content/uploads/2021/11/581-5813108_transparent-triskelion-png-celtic-spiral-white-transparent-png.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/QtdzCR9ZQn", - "instagram": "https://www.instagram.com/paradoxrealm13/", - "twitter": "https://twitter.com/ParadoxRealms", - "website": "https://paradoxrealm.com" - } - }, - { - "chainId": 101, - "address": "EQvh5nmHoD16dTTiZ7222EBSUQ563rh6o8kJ1W4Mwh7Z", - "symbol": "APEX", - "name": "Monster Apex", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EQvh5nmHoD16dTTiZ7222EBSUQ563rh6o8kJ1W4Mwh7Z/logo.png", - "tags": ["NFT-Gaming"], - "extensions": { - "telegram": "https://t.me/monsterapex", - "twitter": "https://twitter.com/monsterapex" - } - }, - { - "chainId": 101, - "address": "8WyEJS6QQeR7kRBCTBNptRDKeNcjM9P2F6yPQPkLB1H7", - "symbol": "SOLP", - "name": "Solana Play", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8WyEJS6QQeR7kRBCTBNptRDKeNcjM9P2F6yPQPkLB1H7/logo.png", - "tags": ["Community-token"] - }, - { - "chainId": 101, - "address": "74zkWmfyLSvu4mWEYRNEmcjrZkgPG3yhJDY1TX684VeK", - "symbol": "WAR", - "name": "War Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/74zkWmfyLSvu4mWEYRNEmcjrZkgPG3yhJDY1TX684VeK/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/WarCoin_" - } - }, - { - "chainId": 103, - "address": "HVVB2ZDw1ykyRYSwcMrDXsQ6sesGe7qyp5vB3zAuK4Hw", - "symbol": "fBoku-420", - "name": "Fractionalised Boku-420", - "decimals": 2, - "logoURI": "https://i.imgur.com/O3h1zUq.png", - "tags": ["bridgesplit-fraction"], - "extensions": { - "vault": "https://devnet.bridgesplit.com/markets/HVVB2ZDw1ykyRYSwcMrDXsQ6sesGe7qyp5vB3zAuK4Hw" - } - }, - { - "chainId": 101, - "address": "3Ysmnbdddpxv9xK8FUKXexdhRzEA4yrCz8WaE6Za5sjV", - "symbol": "EDX", - "name": "edeXa Service Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3Ysmnbdddpxv9xK8FUKXexdhRzEA4yrCz8WaE6Za5sjV/logo.svg", - "tags": ["utility-token"], - "extensions": { - "website": "https://edexa.com/" - } - }, - { - "chainId": 101, - "address": "F2Rsx71Rg64a2gi5wSGxihAeLvPWt76kaNbcAjSMnULF", - "symbol": "SOLCSH", - "name": "Solana Cash", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/F2Rsx71Rg64a2gi5wSGxihAeLvPWt76kaNbcAjSMnULF/logo.png", - "tags": ["Community-token"] - }, - { - "chainId": 103, - "address": "3sJWs1uNphtHMVrqqP6foFxNTi1XLa6BZiyftq41y6kQ", - "symbol": "SINGULARITY", - "name": "Singularity", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3sJWs1uNphtHMVrqqP6foFxNTi1XLa6BZiyftq41y6kQ/logo.png", - "tags": ["utility-token"], - "extensions": { - "blog": "https://blog.singularityonline.app", - "description": "Singularity Online in-game currency Token", - "twitter": "https://twitter.com/SingularityMeta", - "website": "https://singularityonline.app", - "whitepaper": "https://whitepaper.singularityonline.app" - } - }, - { - "chainId": 101, - "address": "65aNqK5p43JhpFJLBiJPB1MmkW5uo2s6y5Dkj5KQdw3w", - "symbol": "TUI", - "name": "TradeUI", - "decimals": 3, - "logoURI": "https://pbs.twimg.com/profile_images/1260288995323502598/9aAFR0pr_400x400.jpg", - "tags": [ - "social-token", - "community-token", - "reward-token", - "utility-token" - ], - "extensions": { - "discord": "http://discord.gg/uSDVQRF", - "facebook": "https://facebook.com/tradeui", - "twitter": "https://twitter.com/tradeui", - "website": "https://tradeui.com" - } - }, - { - "chainId": 101, - "address": "AbJ2e39BhfPpvpnrf5gupAL9W9yZW3zXxd8hsi2ZjQb", - "symbol": "MTGVERSE", - "name": "MetaGameVerse", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AbJ2e39BhfPpvpnrf5gupAL9W9yZW3zXxd8hsi2ZjQb/logo.png", - "tags": ["NFTs", "Gaming", "Ecosystem"], - "extensions": { - "discord": "https://medium.com/@MetaGameVerse", - "telegram": "https://t.me/MetaGameVerse", - "twitter": "https://twitter.com/MetaGameVerse", - "website": "https://metagameverse.info" - } - }, - { - "chainId": 101, - "address": "DFL1zNkaGPWm1BqAVqRjCZvHmwTFrEaJtbzJWgseoNJh", - "symbol": "DFL", - "name": "DeFi Land", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DFL1zNkaGPWm1BqAVqRjCZvHmwTFrEaJtbzJWgseoNJh/logo.png", - "tags": ["utility-token"], - "extensions": { - "coingeckoId": "defi-land", - "coinmarketcap": "https://coinmarketcap.com/currencies/defi-land", - "discord": "https://discord.com/invite/defiland", - "medium": "https://defiland.medium.com/", - "serumV3Usdc": "9UBuWgKN8ZYXcZWN67Spfp3Yp67DKBq1t31WLrVrPjTR", - "telegram": "https://t.me/defiland_official", - "twitter": "https://twitter.com/DeFi_Land", - "website": "https://defiland.app/" - } - }, - { - "chainId": 101, - "address": "GDoR2uR265AFrY7LTi5Epp6T2wMTcVPmCo6Xmq51cw6P", - "symbol": "PNGN", - "name": "Penguin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GDoR2uR265AFrY7LTi5Epp6T2wMTcVPmCo6Xmq51cw6P/penguLogo.png", - "tags": ["utility-token", "nft-token"], - "extensions": { - "discord": "https://discord.gg/CQQSSSgTDb" - } - }, - { - "chainId": 101, - "address": "8vJdZKtvqd7WDtMZM2gi7WiFqyNxVGqyk71p7vzK6YUQ", - "symbol": "YDDK", - "name": "YDDK", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8vJdZKtvqd7WDtMZM2gi7WiFqyNxVGqyk71p7vzK6YUQ/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "D4skewS3sjd5ak8Noto6brxcUHQC42McJW5duWvmerHK", - "symbol": "KW", - "name": "Kilowatt", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/D4skewS3sjd5ak8Noto6brxcUHQC42McJW5duWvmerHK/logo.png", - "tags": ["meme-token"], - "extensions": { - "twitter": "https://twitter.com/kilowattproject", - "website": "https://kilo.solar" - } - }, - { - "chainId": 101, - "address": "4AHDENUSystAUR3VEgcUFLYAVL4BGNhLgq8uaAaKoQKq", - "symbol": "SHRIMP", - "name": "Shrimp Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4AHDENUSystAUR3VEgcUFLYAVL4BGNhLgq8uaAaKoQKq/logo.png", - "tags": [ - "community-token", - "utility-token", - "flamingo-party", - "shrimp-coin" - ], - "extensions": { - "twitter": "https://twitter.com/Flamingos_nft", - "website": "https://flamingoparty.io" - } - }, - { - "chainId": 101, - "address": "HCgybxq5Upy8Mccihrp7EsmwwFqYZtrHrsmsKwtGXLgW", - "symbol": "STARS", - "name": "StarLaunch", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HCgybxq5Upy8Mccihrp7EsmwwFqYZtrHrsmsKwtGXLgW/logo.png", - "extensions": { - "coingeckoId": "starlaunch", - "telegram": "https://t.me/StarLaunchOfficial", - "twitter": "https://twitter.com/StarLaunchSOL", - "website": "https://www.starlaunch.com/" - } - }, - { - "chainId": 101, - "address": "GKyNQYSnQ3AoJp5HaYu9R4Qhza3NZjDKU7BedmNyFnPL", - "symbol": "SOLMT", - "name": "Solana Meta", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GKyNQYSnQ3AoJp5HaYu9R4Qhza3NZjDKU7BedmNyFnPL/logo.png", - "tags": ["community-token"], - "extensions": { - "telegram": "https://t.me/solanameta" - } - }, - { - "chainId": 101, - "address": "88881Hu2jGMfCs9tMu5Rr7Ah7WBNBuXqde4nR5ZmKYYy", - "symbol": "sUSDC-8", - "name": "Saber Wrapped USD Coin (8 decimals)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/88881Hu2jGMfCs9tMu5Rr7Ah7WBNBuXqde4nR5ZmKYYy/icon.png", - "tags": ["stablecoin", "saber-market-usd", "saber-dec-wrapped"], - "extensions": { - "coingeckoId": "usd-coin", - "website": "https://app.saber.so" - } - }, - { - "chainId": 101, - "address": "9999j2A8sXUtHtDoQdk528oVzhaKBsXyRGZ67FKGoi7H", - "symbol": "sBTC-9", - "name": "Saber Wrapped Bitcoin (Sollet) (9 decimals)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9999j2A8sXUtHtDoQdk528oVzhaKBsXyRGZ67FKGoi7H/icon.png", - "tags": [ - "wrapped-sollet", - "ethereum", - "saber-market-btc", - "saber-dec-wrapped" - ], - "extensions": { - "coingeckoId": "bitcoin", - "website": "https://app.saber.so" - } - }, - { - "chainId": 101, - "address": "AEUT5uFm1D575FVCoQd5Yq891FJEqkncZUbBFoFcAhTV", - "symbol": "sUSDT-9", - "name": "Saber Wrapped USDT (9 decimals)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AEUT5uFm1D575FVCoQd5Yq891FJEqkncZUbBFoFcAhTV/icon.png", - "tags": ["stablecoin", "saber-market-usd", "saber-dec-wrapped"], - "extensions": { - "coingeckoId": "tether", - "website": "https://app.saber.so" - } - }, - { - "chainId": 101, - "address": "BtX7AfzEJLnU8KQR1AgHrhGH5s2AHUTbfjhUQP8BhPvi", - "symbol": "srenBTC-10", - "name": "Saber Wrapped renBTC (10 decimals)", - "decimals": 10, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BtX7AfzEJLnU8KQR1AgHrhGH5s2AHUTbfjhUQP8BhPvi/icon.png", - "tags": ["saber-market-btc", "saber-dec-wrapped"], - "extensions": { - "coingeckoId": "renbtc", - "website": "https://app.saber.so" - } - }, - { - "chainId": 101, - "address": "C9xqJe3gMTUDKidZsZ6jJ7tL9zSLimDUKVpgUbLZnNbi", - "symbol": "sCASH-9", - "name": "Saber Wrapped CASH (9 decimals)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/C9xqJe3gMTUDKidZsZ6jJ7tL9zSLimDUKVpgUbLZnNbi/icon.png", - "tags": ["stablecoin", "saber-market-usd", "saber-dec-wrapped"], - "extensions": { - "coingeckoId": "usd-coin", - "website": "https://app.saber.so" - } - }, - { - "chainId": 101, - "address": "CLP2aB2bCXZEaoQjUNQdn64dCSzCVxKE3Kjgo3PcAYeY", - "symbol": "PAI-CASH", - "name": "Saber PAI-CASH LP", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CLP2aB2bCXZEaoQjUNQdn64dCSzCVxKE3Kjgo3PcAYeY/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-cashio"], - "extensions": { - "website": "https://app.saber.so/#/pools/pai_cash" - } - }, - { - "chainId": 101, - "address": "CLPLCvWFycur9CysMT3pmdkUXxPfBjXVkWyxTGntzoZ7", - "symbol": "acUSD-CASH", - "name": "Saber acUSD-CASH LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CLPLCvWFycur9CysMT3pmdkUXxPfBjXVkWyxTGntzoZ7/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-cashio"], - "extensions": { - "website": "https://app.saber.so/#/pools/acusd_cash" - } - }, - { - "chainId": 101, - "address": "CLPRkuzQFiYnXddGTTKLvqgjgh4Tm7q16sVvivWNRzo8", - "symbol": "wUST-CASH", - "name": "Saber wUST-CASH LP", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CLPRkuzQFiYnXddGTTKLvqgjgh4Tm7q16sVvivWNRzo8/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-cashio"], - "extensions": { - "website": "https://app.saber.so/#/pools/ust_cash" - } - }, - { - "chainId": 101, - "address": "FACTQhZBfRzC7A76antnpAoZtiwYmUfdAN8wz7e8rxC5", - "symbol": "srenBTC-9", - "name": "Saber Wrapped renBTC (9 decimals)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FACTQhZBfRzC7A76antnpAoZtiwYmUfdAN8wz7e8rxC5/icon.png", - "tags": ["saber-market-btc", "saber-dec-wrapped"], - "extensions": { - "coingeckoId": "renbtc", - "website": "https://app.saber.so" - } - }, - { - "chainId": 101, - "address": "FTT9GrHBVHvDeUTgLU8FxVJouGqg9uiWGmmjETdm32Sx", - "symbol": "swFTT-9", - "name": "Saber Wrapped FTT (Portal) (9 decimals)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FTT9GrHBVHvDeUTgLU8FxVJouGqg9uiWGmmjETdm32Sx/icon.png", - "tags": ["saber-market-ftt", "wormhole-v2", "saber-dec-wrapped"], - "extensions": { - "coingeckoId": "ftx-token", - "website": "https://app.saber.so" - } - }, - { - "chainId": 101, - "address": "FTT9rBBrYwcHam4qLvkzzzhrsihYMbZ3k6wJbdoahxAt", - "symbol": "sFTT-9", - "name": "Saber Wrapped Wrapped FTT (Sollet) (9 decimals)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FTT9rBBrYwcHam4qLvkzzzhrsihYMbZ3k6wJbdoahxAt/icon.png", - "tags": [ - "wrapped-sollet", - "ethereum", - "saber-market-ftt", - "saber-dec-wrapped" - ], - "extensions": { - "coingeckoId": "ftx-token", - "website": "https://app.saber.so" - } - }, - { - "chainId": 101, - "address": "JEFFSQ3s8T3wKsvp4tnRAsUBW7Cqgnf8ukBZC4C8XBm1", - "symbol": "sUSDC-9", - "name": "Saber Wrapped USD Coin (9 decimals)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/JEFFSQ3s8T3wKsvp4tnRAsUBW7Cqgnf8ukBZC4C8XBm1/icon.png", - "tags": ["stablecoin", "saber-market-usd", "saber-dec-wrapped"], - "extensions": { - "coingeckoId": "usd-coin", - "website": "https://app.saber.so" - } - }, - { - "chainId": 101, - "address": "KNVfdSJyq1pRQk9AKKv1g5uyGuk6wpm4WG16Bjuwdma", - "symbol": "swhETH-9", - "name": "Saber Wrapped Ether (Portal) (9 decimals)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/KNVfdSJyq1pRQk9AKKv1g5uyGuk6wpm4WG16Bjuwdma/icon.png", - "tags": ["saber-market-eth", "wormhole-v2", "saber-dec-wrapped"], - "extensions": { - "coingeckoId": "ethereum", - "website": "https://app.saber.so" - } - }, - { - "chainId": 101, - "address": "KUANeD8EQvwpT1W7QZDtDqctLEh2FfSTy5pThE9CogT", - "symbol": "srenLUNA-9", - "name": "Saber Wrapped renLUNA (9 decimals)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/KUANeD8EQvwpT1W7QZDtDqctLEh2FfSTy5pThE9CogT/icon.png", - "tags": ["saber-market-luna", "saber-dec-wrapped"], - "extensions": { - "website": "https://app.saber.so" - } - }, - { - "chainId": 101, - "address": "SBTCB6pWqeDo6zGi9WVRMLCsKsN6JiR1RMUqvLtgSRv", - "symbol": "sBTC-8", - "name": "Saber Wrapped Bitcoin (Sollet) (8 decimals)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SBTCB6pWqeDo6zGi9WVRMLCsKsN6JiR1RMUqvLtgSRv/icon.png", - "tags": [ - "wrapped-sollet", - "ethereum", - "saber-market-btc", - "saber-dec-wrapped" - ], - "extensions": { - "coingeckoId": "bitcoin", - "website": "https://app.saber.so" - } - }, - { - "chainId": 101, - "address": "SL819j8K9FuFPL84UepVcFkEZqDUUvVzwDmJjCHySYj", - "symbol": "sETH-8", - "name": "Saber Wrapped Ethereum (Sollet) (8 decimals)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SL819j8K9FuFPL84UepVcFkEZqDUUvVzwDmJjCHySYj/icon.png", - "tags": [ - "wrapped-sollet", - "ethereum", - "saber-market-eth", - "saber-dec-wrapped" - ], - "extensions": { - "coingeckoId": "ethereum", - "website": "https://app.saber.so" - } - }, - { - "chainId": 101, - "address": "5ZkhmAq3biQ2deednocqrhs8WqbwyV9A1CxJ8PXQuGXk", - "symbol": "ZER0", - "name": "Zer0 Coin", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5ZkhmAq3biQ2deednocqrhs8WqbwyV9A1CxJ8PXQuGXk/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://www.facebook.com/ZeroLin" - } - }, - { - "chainId": 103, - "address": "HMi8JHY3HXcSAbjYbW8Ab1Ztr47QtwNZBSZkvcbYZqhR", - "symbol": "ECZ", - "name": "Eczodex", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HMi8JHY3HXcSAbjYbW8Ab1Ztr47QtwNZBSZkvcbYZqhR/logo.png", - "tags": ["utility-token"], - "extensions": { - "reddit": "https://www.reddit.com/r/Eczodex/", - "twitter": "https://twitter.com/eczodex", - "website": "https://eczodex.com/" - } - }, - { - "chainId": 101, - "address": "FNrmswTa4f8WuYawZkZpVysUUny6bGRppmFJ8f2BMxun", - "symbol": "POLKA", - "name": "Polkasol", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FNrmswTa4f8WuYawZkZpVysUUny6bGRppmFJ8f2BMxun/polkasol.png", - "tags": ["Meme-token"] - }, - { - "chainId": 103, - "address": "41WNKuHHQXEqjiQjRm9kwupq1rcT84AWYPnki3xdQDg9", - "symbol": "AGG", - "name": "Aggie Coin", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/G5gqGPsrpkRYZPThJJpoVQRtgjo8zapPZ27iCSp2wPX/logo.png", - "tags": ["aggie", "aggie-token"] - }, - { - "chainId": 101, - "address": "HCQttNoEK41AG7Vk2ZBkqeD7Tpdohc4ECVebVj8nhxm1", - "symbol": "PHR", - "name": "PHR Block", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/bdeepakreddy/img-repo/d359d9f2d09689e9b57fc709337d6fda8b531455/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://www.phrblock.com" - } - }, - { - "chainId": 101, - "address": "HZgj7qvCUSiF5sPE4VDKUUF63ogKrzdnp9KXSePuCCsh", - "symbol": "kHz", - "name": "KOLONIE", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HZgj7qvCUSiF5sPE4VDKUUF63ogKrzdnp9KXSePuCCsh/logo.svg", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "8NAcUx21PWMS2MjXWfnWgBWfy1r1yfL4AeESgdteGaut", - "symbol": "TBC", - "name": "Trader Best Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8NAcUx21PWMS2MjXWfnWgBWfy1r1yfL4AeESgdteGaut/logo.svg", - "tags": ["social-token"], - "extensions": { - "twitter": "https://twitter.com/Imwarmsmile" - } - }, - { - "chainId": 101, - "address": "72VTRtQ6dBfsRzqSNPN5Ws9Bk6GEZCcMWm94oWiiYRiv", - "symbol": "EXGF", - "name": "Doge Ex-Girlfriend", - "decimals": 12, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/72VTRtQ6dBfsRzqSNPN5Ws9Bk6GEZCcMWm94oWiiYRiv/logo.png", - "tags": ["meme-token"], - "extensions": { - "website": "https://www.dogeexgf.net" - } - }, - { - "chainId": 101, - "address": "2vRgBSJEVPXxayrhXoazQyCKSGFYQG3ZdfT2Gv5gZykL", - "symbol": "SHROOMZ", - "name": "Crypto Mushroomz", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2vRgBSJEVPXxayrhXoazQyCKSGFYQG3ZdfT2Gv5gZykL/logo.png", - "tags": [ - "community-token", - "utility-token", - "social-token", - "NFTs", - "DeFi" - ], - "extensions": { - "coingeckoId": "crypto-mushroomz", - "coinmarketcap": "https://coinmarketcap.com/currencies/crypto-mushroomz/", - "serumV3Usdc": "E9XAtU18PXeSMcz5gkAkZ6yfj1E5nzY21x576ZvEg9VA", - "twitter": "https://twitter.com/cryptomushroomz", - "website": "https://www.cryptomushroomz.io" - } - }, - { - "chainId": 101, - "address": "6uZ7MRGGf3FJhzk9TUk3QRMR2fz83WY9BEVBukRvMRVX", - "symbol": "NANA", - "name": "NANA", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6uZ7MRGGf3FJhzk9TUk3QRMR2fz83WY9BEVBukRvMRVX/logo.png", - "tags": ["utility-token"], - "extensions": { - "coingeckoId": "chimp-fight", - "discord": "https://discord.gg/zJ9wQYzBsB", - "medium": "https://medium.com/@chimpfight", - "twitter": "https://twitter.com/chimpfightgame", - "website": "https://chimpfight.io" - } - }, - { - "chainId": 101, - "address": "Qikhhhg9Ta3Jg7WoDFbSYuCAE14hx9hPvdz1zVp3zUw", - "symbol": "BURD", - "name": "tudaBirds Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Qikhhhg9Ta3Jg7WoDFbSYuCAE14hx9hPvdz1zVp3zUw/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "tudabirds metaNest", - "discord": "https://discord.gg/tudabirds", - "facebook": "https://business.facebook.com/tudabirds", - "instagram": "https://www.instagram.com/tudabirds", - "medium": "https://tudabirds.medium.com", - "telegram": "https://t.me/tudabirdsgroup", - "website": "https://tudabirds.io" - } - }, - { - "chainId": 101, - "address": "6naWDMGNWwqffJnnXFLBCLaYu1y5U9Rohe5wwJPHvf1p", - "symbol": "SCRAP", - "name": "SCRAP", - "decimals": 3, - "logoURI": "https://art.pixilart.com/bd1b1275fdc0ac1.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/taiyorobotics", - "website": "https://taiyorobotics.com/" - } - }, - { - "chainId": 101, - "address": "9YAnyZ2cMUbQSwWAE76fohF58o4DHwaZFE9vgH5dVAJL", - "symbol": "MILES", - "name": "Degen Air Miles", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9YAnyZ2cMUbQSwWAE76fohF58o4DHwaZFE9vgH5dVAJL/logo.png", - "tags": [ - "community-token", - "utility-token", - "social-token", - "NFTs", - "DeFi" - ], - "extensions": { - "discord": "https://discord.gg/degenair", - "twitter": "https://twitter.com/DegenAirNFT", - "website": "https://degenair.io" - } - }, - { - "chainId": 101, - "address": "pBNFtb4Dvox5jtr3aYmFaWyUBNnseDGNiyeQdsgGr19", - "symbol": "KEY", - "name": "Mysteria Game Key", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/pBNFtb4Dvox5jtr3aYmFaWyUBNnseDGNiyeQdsgGr19/logo.png", - "tags": ["game", "ticket", "fungible", "key", "puzzle"], - "extensions": { - "discord": "https://discord.com/invite/VRWxVCYrBb", - "twitter": "https://twitter.com/play_mysteria", - "website": "https://playmysteria.com" - } - }, - { - "chainId": 101, - "address": "939KAUTAyNdmpahj1vQmbS67D7auhyJnkMt4sv2tzBwU", - "symbol": "SHIMOO", - "name": "Shibi Samo Official", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/939KAUTAyNdmpahj1vQmbS67D7auhyJnkMt4sv2tzBwU/logo.png", - "tags": ["meme", "community", "NFTs", "DEFI", "Dog"], - "extensions": { - "discord": "https://discord.gg/GrPTmFqZ6m", - "twitter": "https://twitter.com/ShibiSamo", - "website": "https://shibi-samo.com" - } - }, - { - "chainId": 101, - "address": "GFABRXExXpA9SzXc8GkURg8kEqPoxKPTB9tp57miaLsK", - "symbol": "NMS", - "name": "New Myanmar Shekel", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GFABRXExXpA9SzXc8GkURg8kEqPoxKPTB9tp57miaLsK/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "website": "https://bitmmr.com/" - } - }, - { - "chainId": 101, - "address": "8Sro4c3KZzTwMqXzdo3XwZUdDG8fuhuhX3uDUce5kxXX", - "symbol": "Dara", - "name": "Dara token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8Sro4c3KZzTwMqXzdo3XwZUdDG8fuhuhX3uDUce5kxXX/dara.png", - "tags": ["community", "NFTs", "Defi"] - }, - { - "chainId": 101, - "address": "EYXHfsSMwEfvdf4S1VjSCe7hphAuwnMJx6RvzxzMMeHr", - "symbol": "BORN", - "name": "Reborn", - "decimals": 8, - "logoURI": "https://github.com/Benjamunja/Unique/blob/571e466fda0a4ef6ef3463e96a9779ab556c6cab/Unique.jpg", - "tags": ["community-token"] - }, - { - "chainId": 101, - "address": "8nBNn2TcXnBFzc8TjoafWxLWw2BYHyNebZQ1w9PrWUs2", - "symbol": "BLOCKS", - "name": "BLOCKS", - "decimals": 3, - "logoURI": "https://i.imgur.com/Hex1oqB.png", - "tags": ["community", "NFTs"] - }, - { - "chainId": 101, - "address": "Bqakvb2XEN7eqXG5eUumg86yCxb3gstNNGUHwhSa3bnS", - "symbol": "SolS", - "name": "S Token", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/soldogs/sols@main/Logo.png", - "tags": ["meme-token", "S", "community-token"], - "extensions": { - "twitter": "https://twitter.com/Sol_S_Official", - "website": "https://www.solstoken.com/" - } - }, - { - "chainId": 101, - "address": "5CAmbZa5RFdRpGCiDh6ADzVetupyNjnyMMeBfQgyPCzT", - "symbol": "LCD-USDT", - "name": "LCD-USDT", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5CAmbZa5RFdRpGCiDh6ADzVetupyNjnyMMeBfQgyPCzT/logo.svg", - "tags": ["utility-token"], - "extensions": { - "telegram": "https://t.me/crazydiceapp", - "twitter": "https://twitter.com/CrazyDiceApp", - "website": "https://www.crazydice.app" - } - }, - { - "chainId": 101, - "address": "7R78EGQjThEVchSUGuzs3KgptMg37FxzgKpaLcGYp7pi", - "symbol": "LCD-USDC", - "name": "LCD-USDC", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7R78EGQjThEVchSUGuzs3KgptMg37FxzgKpaLcGYp7pi/logo.svg", - "tags": ["utility-token"], - "extensions": { - "telegram": "https://t.me/crazydiceapp", - "twitter": "https://twitter.com/CrazyDiceApp", - "website": "https://www.crazydice.app" - } - }, - { - "chainId": 101, - "address": "B7dLZ8LVV7bR5xJEpRzmkYk7sx7pBkiqkf58ZHpPiNpw", - "symbol": "LCD-LINK", - "name": "LCD-LINK", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/B7dLZ8LVV7bR5xJEpRzmkYk7sx7pBkiqkf58ZHpPiNpw/logo.svg", - "tags": ["utility-token"], - "extensions": { - "telegram": "https://t.me/crazydiceapp", - "twitter": "https://twitter.com/CrazyDiceApp", - "website": "https://www.crazydice.app" - } - }, - { - "chainId": 101, - "address": "CXbhgErBXhKiTJu95dK1aaoHukrg1Ghn8N2Spda7wSV", - "symbol": "LCD-SAMO", - "name": "LCD-SAMO", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CXbhgErBXhKiTJu95dK1aaoHukrg1Ghn8N2Spda7wSV/logo.svg", - "tags": ["utility-token"], - "extensions": { - "telegram": "https://t.me/crazydiceapp", - "twitter": "https://twitter.com/CrazyDiceApp", - "website": "https://www.crazydice.app" - } - }, - { - "chainId": 101, - "address": "nvW2Fqyei7s1DhWqjiQU81eUxVE7iY4zKnicbL3yr61", - "symbol": "RISK-SOL", - "name": "RISK-SOL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/nvW2Fqyei7s1DhWqjiQU81eUxVE7iY4zKnicbL3yr61/logo.svg", - "tags": ["utility-token"], - "extensions": { - "telegram": "https://t.me/crazydiceapp", - "twitter": "https://twitter.com/CrazyDiceApp", - "website": "https://www.crazydice.app" - } - }, - { - "chainId": 101, - "address": "9xCabyenVjP7H2uQbMkLvvAdrEmQhpZDjDETuunjMqs", - "symbol": "RISK-USDT", - "name": "RISK-USDT", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9xCabyenVjP7H2uQbMkLvvAdrEmQhpZDjDETuunjMqs/logo.svg", - "tags": ["utility-token"], - "extensions": { - "telegram": "https://t.me/crazydiceapp", - "twitter": "https://twitter.com/CrazyDiceApp", - "website": "https://www.crazydice.app" - } - }, - { - "chainId": 101, - "address": "GWDCXrc79q1xMroKisZmpSk5PXpgivD88pCg4mS63Ghf", - "symbol": "RISK-USDC", - "name": "RISK-USDC", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GWDCXrc79q1xMroKisZmpSk5PXpgivD88pCg4mS63Ghf/logo.svg", - "tags": ["utility-token"], - "extensions": { - "telegram": "https://t.me/crazydiceapp", - "twitter": "https://twitter.com/CrazyDiceApp", - "website": "https://www.crazydice.app" - } - }, - { - "chainId": 101, - "address": "RuWFALHvbEY224W5ktzSVm4RP1FcV1wykJkfmuCQXkt", - "symbol": "RISK-LINK", - "name": "RISK-LINK", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/RuWFALHvbEY224W5ktzSVm4RP1FcV1wykJkfmuCQXkt/logo.svg", - "tags": ["utility-token"], - "extensions": { - "telegram": "https://t.me/crazydiceapp", - "twitter": "https://twitter.com/CrazyDiceApp", - "website": "https://www.crazydice.app" - } - }, - { - "chainId": 101, - "address": "J7SNiV2ah5z9g1rGA9oWgET4XsbwuSCWjNNDBdboAmPp", - "symbol": "RISK-SAMO", - "name": "RISK-SAMO", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/J7SNiV2ah5z9g1rGA9oWgET4XsbwuSCWjNNDBdboAmPp/logo.svg", - "tags": ["utility-token"], - "extensions": { - "telegram": "https://t.me/crazydiceapp", - "twitter": "https://twitter.com/CrazyDiceApp", - "website": "https://www.crazydice.app" - } - }, - { - "chainId": 101, - "address": "41TwwURtuv4k8TuFxp1vfFYP9noMbHXqtscse8xLM26V", - "symbol": "LINU", - "name": "LittleInu Token", - "decimals": 9, - "logoURI": "https://cdn.discordapp.com/attachments/904210282719621120/912640098913361930/unknown.png", - "tags": ["meme-token", "nft"], - "extensions": { - "discord": "https://discord.gg/tazMH4qfd3", - "twitter": "https://twitter.com/littleinusol" - } - }, - { - "chainId": 101, - "address": "8Wmonq7dhFJXuHqFCcVgWTmmUPCBC4C6J5xbB5HhGb6n", - "symbol": "42", - "name": "42", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/fortytwotoken/42token/forty-two.png", - "tags": ["forty-two", "the-answer"], - "extensions": { - "twitter": "https://twitter.com/solana_42" - } - }, - { - "chainId": 101, - "address": "WETk2zhvTruGmVe1RFNHYt7netgpPWsGrezgB22vD3U", - "symbol": "WETK", - "name": "We-Tokenize", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WETk2zhvTruGmVe1RFNHYt7netgpPWsGrezgB22vD3U/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://we-tokenize.com" - } - }, - { - "chainId": 103, - "address": "91enn7UUM3rXqqMAmYgYRNuVQBRgTumTvV7kMCVyz5g", - "symbol": "XYZ2", - "name": "XYZ2 Test", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/91enn7UUM3rXqqMAmYgYRNuVQBRgTumTvV7kMCVyz5g/logo.png" - }, - { - "chainId": 101, - "address": "ApvVgC5vc3yxrDJw933UZX7zB7CAy6JCeeZdqEjdsRsV", - "symbol": "8PI", - "name": "8teapi", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ApvVgC5vc3yxrDJw933UZX7zB7CAy6JCeeZdqEjdsRsV/logo.svg", - "tags": ["personal"], - "extensions": { - "twitter": "https://twitter.com/8teAPi", - "website": "https://www.8teapi.com" - } - }, - { - "chainId": 101, - "address": "8koDKfrrjN5Yiu8JHybCDcSk5vHECesfw7a8kUQ9iqi4", - "symbol": "QUEST-USDT", - "name": "Raydium LP Token V4 (QUEST-USDT)", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EDudY1AYk9t72DtzhagzM9y6G8HBN7aY6eVu3XWG4WT9/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io" - } - }, - { - "chainId": 101, - "address": "7z3r8Q4Uh2MiHRS2ABQVms3ficvki5hz9YKXAcmeyEQx", - "symbol": "BKC", - "name": "Blakecoin", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7z3r8Q4Uh2MiHRS2ABQVms3ficvki5hz9YKXAcmeyEQx/BlakeToken.png", - "tags": ["community-token"], - "extensions": { - "website": "https://blakeim.com" - } - }, - { - "chainId": 101, - "address": "GBJtgKjLSFgaxPaD56eWSHdNZ1o3t5T4UZUi4QRTXebi", - "symbol": "Hacklab", - "name": "HACKLAB", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/HacklabAzerbaijan/hacklab_token/main/logo.jpg", - "tags": ["DAO", "community-token", "governance"], - "extensions": { - "facebook": "https://www.facebook.com/hacklabaz", - "github": "https://github.com/HacklabAzerbaijan", - "instagram": "https://www.instagram.com/hacklabaz/", - "linkedin": "https://www.linkedin.com/company/hacklabaz/about/", - "website": "https://hacklab.az/" - } - }, - { - "chainId": 101, - "address": "EN8gTAjVJtQJnGTXGc61iJKeE2uZ2pG1bh4i2syDCydF", - "symbol": "CVS", - "name": "Cannaverse", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EN8gTAjVJtQJnGTXGc61iJKeE2uZ2pG1bh4i2syDCydF/cannaverse.png", - "tags": ["utility-token"], - "extensions": { - "telegram": "https://t.me/joinchat/tgIDibSI9Cg0NjM8" - } - }, - { - "chainId": 101, - "address": "GE6woJHj29zssJRKDgFZZevJdQvjCyXqACZkvbdXaLZ", - "symbol": "fKZEN", - "name": "Kaizen.Finance Locked", - "decimals": 9, - "logoURI": "https://cdn.kaizen.finance/assets/images/symbols/kzen-locked.png", - "tags": [ - "kaizen", - "kaizen-finance", - "locked-token", - "utility-token", - "vesting-token" - ], - "extensions": { - "description": "Locked KZEN token. First ever Token Lifecycle Management Platform.", - "medium": "https://kaizenfinance.medium.com", - "telegram": "https://t.me/KaizenFinance", - "twitter": "https://twitter.com/kaizen_finance", - "website": "https://kaizen.finance" - } - }, - { - "chainId": 101, - "address": "DcqWM1BdgfUFktSKw8XC6qLAo2Ki2dUFXc1YYe67c8kD", - "symbol": "DRUGS", - "name": "Cartel DRUGS", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DcqWM1BdgfUFktSKw8XC6qLAo2Ki2dUFXc1YYe67c8kD/logo.png", - "tags": ["meme-token", "utility-token", "stake-pool-token"], - "extensions": { - "discord": "https://discord.gg/cartelofsolana", - "serumV3Usdc": "6FSr3WhrLCdetbfr75JizgHsc3EDxmUxdKq6gTQwbefn", - "twitter": "https://twitter.com/solcartel", - "website": "https://www.solcartel.com/" - } - }, - { - "chainId": 101, - "address": "ZVyeVWSFcinmH9XVHFjzZ9xtuqs4dFFboUPtAMZVyg7", - "symbol": "SDG", - "name": "samodoge", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/Samodoge/samodogelogo@master/samodoge.png", - "tags": ["community-token", "meme-coin", "meme-token"], - "extensions": { - "discord": "http://discord.link/SAMODOGE", - "twitter": "https://twitter.com/samodoge", - "website": "http://samodoge.com/" - } - }, - { - "chainId": 101, - "address": "BXHUUQvD8YaEv4eModMzK9ds1f5g6Zx3iUY7MgTANjGf", - "symbol": "Testtokentb", - "name": "Testtokentb", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BXHUUQvD8YaEv4eModMzK9ds1f5g6Zx3iUY7MgTANjGf/logo.png" - }, - { - "chainId": 101, - "address": "FNFKRV3V8DtA3gVJN6UshMiLGYA8izxFwkNWmJbFjmRj", - "symbol": "TTT", - "name": "TabTrader Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FNFKRV3V8DtA3gVJN6UshMiLGYA8izxFwkNWmJbFjmRj/logo.svg", - "tags": ["utility-token"], - "extensions": { - "coingeckoId": "tabtrader", - "description": "TabTrader allows users to trade anywhere and anytime from their mobile device with all the main crypto exchanges accessible through a unified interface.", - "discord": "https://discord.gg/pSMjEh7paU", - "medium": "https://medium.com/@tabtraderbtc", - "telegram": "https://t.me/tabtrader_token_en", - "twitter": "https://twitter.com/tabtraderpro", - "website": "https://tab-trader.com/", - "youtube": "https://www.youtube.com/c/TabTrader" - } - }, - { - "chainId": 101, - "address": "Hb8uzkDbZh6hRe9LpeXYYhUxPEwwJc8LojjSPNKQWywq", - "symbol": "NRD", - "name": "Nirad", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Hb8uzkDbZh6hRe9LpeXYYhUxPEwwJc8LojjSPNKQWywq/logo.png", - "tags": [ - "currency", - "social-token", - "community-token", - "trading-token", - "reward-token", - "utility-token" - ], - "extensions": { - "website": "https://datchat.com/app1/" - } - }, - { - "chainId": 101, - "address": "wndrmt7dnQVapGC8Mff6jxN2qr54jJb1cdKsVDKH4oP", - "symbol": "$WONDER", - "name": "Wonder", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/wndrmt7dnQVapGC8Mff6jxN2qr54jJb1cdKsVDKH4oP/logo.svg" - }, - { - "chainId": 101, - "address": "3jHi4W7nPecSBvXLXt7NzBiRCcfX9MbTct5JCeMAYdE6", - "symbol": "PUG", - "name": "Cryptic Pug", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3jHi4W7nPecSBvXLXt7NzBiRCcfX9MbTct5JCeMAYdE6/logo.png" - }, - { - "chainId": 101, - "address": "AWukJTnvj1rUi9LmxezP7vseCVnESnPrYAsSipxuhUgh", - "symbol": "NCOINS", - "name": "NCoin", - "decimals": 9, - "logoURI": "http://content.ncoinchain.com/ncoinlogo.png", - "tags": ["multi-chain", "payment-token"], - "extensions": { - "website": "https://ncoinchain.com" - } - }, - { - "chainId": 101, - "address": "E77cpQ4VncGmcAXX16LHFFzNBEBb2U7Ar7LBmZNfCgwL", - "symbol": "abUSDT", - "name": "Wrapped USDT (Allbridge from BSC)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BQcdHdAQW1hczDbBi9hiegXAR7A98Q9jx3X3iBBBDiq4/logo.png", - "tags": ["stablecoin"], - "extensions": { - "coingeckoId": "tether" - } - }, - { - "chainId": 101, - "address": "8XSsNvaKU9FDhYWAv7Yc7qSNwuJSzVrXBNEk7AFiWF69", - "symbol": "abUSDC", - "name": "Wrapped USDC (Allbridge from BSC)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BXXkv6z8ykpG1yuvUDPgh732wzVHB69RnB9YgSYh3itW/logo.png", - "tags": ["stablecoin"], - "extensions": { - "coingeckoId": "usd-coin" - } - }, - { - "chainId": 101, - "address": "3os2M3bX9qta154PRbU9rzaPUYAKAqVpaMMS8u2hoUQu", - "symbol": "abBTCB", - "name": "Wrapped BTC (Allbridge from BSC)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/qfnqNqs3nCAHjnyCgLRDbBtq4p2MtHZxw8YjSyYhPoL/logo.png", - "extensions": { - "coingeckoId": "wrapped-bitcoin" - } - }, - { - "chainId": 101, - "address": "EyrnrbE5ujd3HQG5PZd9MbECN9yaQrqc8pRwGtaLoyC", - "symbol": "abETH", - "name": "Wrapped ETH (Allbridge from BSC)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FeGn77dhg1KXRRFeSwwMiykZnZPw5JXW6naf2aQgZDQf/logo.png", - "extensions": { - "coingeckoId": "weth" - } - }, - { - "chainId": 101, - "address": "GD8B6KhufThbCGmNodrTE5feVxU2kK5TRzwxqjahv12G", - "symbol": "LQN", - "name": "LIQNFT.com", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GD8B6KhufThbCGmNodrTE5feVxU2kK5TRzwxqjahv12G/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/PYZWRHgVwM", - "twitter": "https://twitter.com/liqnft", - "website": "https://liqnft.com/" - } - }, - { - "chainId": 101, - "address": "3DHPqxdMXogNNnpqBMF8N4Zs4dn1WR31H7UjWq6FExwG", - "symbol": "DAWG", - "name": "DAWG", - "decimals": 9, - "logoURI": "https://user-images.githubusercontent.com/15795037/143055147-72513c02-be9b-4639-bb30-3c1c037cb030.png", - "tags": ["doge-capital", "meme-token"], - "extensions": { - "coingeckoId": "dawg", - "discord": "https://discord.com/invite/DeM5VFF29v", - "twitter": "https://twitter.com/thedogecapital", - "website": "https://www.thedogecapital.com/" - } - }, - { - "chainId": 101, - "address": "BaNtgHgwjNWPsepLe89KBQS9NbPoDCeAdLPGaYtreJoS", - "symbol": "GOAT", - "name": "Greatest Of All Time Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BaNtgHgwjNWPsepLe89KBQS9NbPoDCeAdLPGaYtreJoS/logo.png", - "tags": ["nft"], - "extensions": { - "website": "https://twitter.com/The_Goat_Token" - } - }, - { - "chainId": 101, - "address": "B2EMhAUhckRevpPDt11o7Gmjg59SSTqKQPsfus66k1hQ", - "symbol": "BAZ", - "name": "BAZ", - "decimals": 0, - "logoURI": "https://www.arthurr.co.uk/baz/logo.png", - "extensions": { - "website": "https://www.arthurr.co.uk/baz" - } - }, - { - "chainId": 101, - "address": "RLBxxFkseAZ4RgJH3Sqn8jXxhmGoz9jWxDNJMh8pL7a", - "symbol": "RLB", - "name": "Rollbit Coin", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/RLBxxFkseAZ4RgJH3Sqn8jXxhmGoz9jWxDNJMh8pL7a/logo.png", - "tags": [ - "utility-token", - "community-token", - "stake-pool-token", - "lottery" - ], - "extensions": { - "description": "Stake your RLB on rollbit.com to participate in a profit share distribution every 100 Bitcoin blocks", - "discord": "https://discord.gg/Mwx3zqH", - "facebook": "https://facebook.com/Rollbit", - "instagram": "https://instagram.com/rollbitcom", - "serumV3Usdc": "DFdcGFcAVWZ3UgVgpbBChFKen3URZdZ8dmju8GTXQgCE", - "twitter": "https://twitter.com/rollbitcom", - "website": "https://www.rollbit.com" - } - }, - { - "chainId": 101, - "address": "2gb84xxkfRdK6XJTuDePXVECkAXsFk1rLGZDuCH937K4", - "symbol": "FAUS", - "name": "Faust Coin", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2gb84xxkfRdK6XJTuDePXVECkAXsFk1rLGZDuCH937K4/logo.png" - }, - { - "chainId": 101, - "address": "8b2XtrXTQ3Qt3iYFhvpDKHLGXi3pZaobRsUyktD6gsJc", - "symbol": "BOGEL", - "name": "Bogel Token", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8b2XtrXTQ3Qt3iYFhvpDKHLGXi3pZaobRsUyktD6gsJc/logo.png" - }, - { - "chainId": 101, - "address": "BjgmaM6xoRXv3tzAbgz1xiX3kVG2aqsUsV4PPhACXMCR", - "symbol": "MEMEGO", - "name": "Flamemego", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BjgmaM6xoRXv3tzAbgz1xiX3kVG2aqsUsV4PPhACXMCR/logo.png", - "tags": ["MEME-TOKEN", "NFTs", "DEX", "marketplace"], - "extensions": { - "discord": "https://discord.gg/k7TJMX9G6D", - "medium": "https://Flamemego.medium.com", - "twitter": "https://twitter.com/Flamemego", - "website": "https://flamemego.io/" - } - }, - { - "chainId": 101, - "address": "SparkXuAqXDH1zhJGdkCRLtg6xHqJkNzRY1PCnLrV9v", - "symbol": "SPARK", - "name": "Spark", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/codeholic/token-list/main/assets/mainnet/SparkXuAqXDH1zhJGdkCRLtg6xHqJkNzRY1PCnLrV9v.svg", - "extensions": { - "website": "https://brazier.app/" - } - }, - { - "chainId": 101, - "address": "5MoDJmq3JqsNnottRdot3WHmhmD6h8VRodqsBKVu9LPk", - "symbol": "APEC", - "name": "APEC", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5MoDJmq3JqsNnottRdot3WHmhmD6h8VRodqsBKVu9LPk/logo.png", - "tags": ["DeFi", "meme-token"], - "extensions": { - "twitter": "https://twitter.com/apeccoin", - "website": "https://apecoin.money" - } - }, - { - "chainId": 101, - "address": "ALPX6x8FkkdQyn9YuoVZjPAapL4nUC7vjJ3AtwStmj9P", - "symbol": "abUSDC-USDC", - "name": "Saber abUSDC-USDC LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ALPX6x8FkkdQyn9YuoVZjPAapL4nUC7vjJ3AtwStmj9P/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-allbridge"], - "extensions": { - "website": "https://app.saber.so/#/pools/abusdc" - } - }, - { - "chainId": 101, - "address": "ALPaPPo6xmeGv3a63Pc4S8NJFAAuchhD7XnkkWJqzvXJ", - "symbol": "abUSDT-USDT", - "name": "Saber abUSDT-USDT LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ALPaPPo6xmeGv3a63Pc4S8NJFAAuchhD7XnkkWJqzvXJ/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-allbridge"], - "extensions": { - "website": "https://app.saber.so/#/pools/abusdt" - } - }, - { - "chainId": 101, - "address": "ALPb4SssuKFScyUFnTcXLtF3NAkwFuFpQFric5yo4Qpo", - "symbol": "abBTCB-renBTC", - "name": "Saber abBTCB-renBTC LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ALPb4SssuKFScyUFnTcXLtF3NAkwFuFpQFric5yo4Qpo/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-allbridge"], - "extensions": { - "website": "https://app.saber.so/#/pools/abbtcb" - } - }, - { - "chainId": 101, - "address": "ALPi51sXwH9kNcQuneDwz7kPzJs3hJ5xV6SmnuyqodQP", - "symbol": "abETH-weWETH", - "name": "Saber abETH-weWETH LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ALPi51sXwH9kNcQuneDwz7kPzJs3hJ5xV6SmnuyqodQP/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-allbridge"], - "extensions": { - "website": "https://app.saber.so/#/pools/abeth" - } - }, - { - "chainId": 101, - "address": "WLPAEUgB95YrU7Vk1FVPeSP5C3e66bf63frHRgsyxHv", - "symbol": "wbUSDT-USDT", - "name": "Saber wbUSDT-USDT LP", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WLPAEUgB95YrU7Vk1FVPeSP5C3e66bf63frHRgsyxHv/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-wormhole-v2"], - "extensions": { - "website": "https://app.saber.so/#/pools/wbusdt" - } - }, - { - "chainId": 101, - "address": "WLPR8Sy6Fbnf2sZHVg8Z7uW1QnRThnjhb244kf4ddCS", - "symbol": "wbBUSD-USDC", - "name": "Saber wbBUSD-USDC LP", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WLPR8Sy6Fbnf2sZHVg8Z7uW1QnRThnjhb244kf4ddCS/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-wormhole-v2"], - "extensions": { - "website": "https://app.saber.so/#/pools/wbusd" - } - }, - { - "chainId": 101, - "address": "WLPsu8oyn1muh5nimxvBsgo6hh6t5jAdUtZ1VmJkohs", - "symbol": "wbUSDC-USDC", - "name": "Saber wbUSDC-USDC LP", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WLPsu8oyn1muh5nimxvBsgo6hh6t5jAdUtZ1VmJkohs/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-wormhole-v2"], - "extensions": { - "website": "https://app.saber.so/#/pools/wbusdc" - } - }, - { - "chainId": 101, - "address": "Hq9MuLDvUAWqC29JhqP2CUJP9879LfqNBHyRRREEXwtZ", - "symbol": "FLOCK", - "name": "Flock", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Hq9MuLDvUAWqC29JhqP2CUJP9879LfqNBHyRRREEXwtZ/logo.png", - "tags": ["utlity-token"], - "extensions": { - "discord": "https://discord.gg/DapperDucks", - "twitter": "https://twitter.com/Dapper_DucksNFT" - } - }, - { - "chainId": 101, - "address": "2xjPDhujjDAM51aEXkG4tCGyQMxvfgMwAhVUcP3bBESH", - "symbol": "SLIK", - "name": "SLIK", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2xjPDhujjDAM51aEXkG4tCGyQMxvfgMwAhVUcP3bBESH/logo.png", - "tags": ["utility-token"], - "extensions": { - "telegram": "https://t.me/sliksafe", - "twitter": "https://twitter.com/sliksafe", - "website": "https://sliksafe.com" - } - }, - { - "chainId": 101, - "address": "2S3Ay27AY2bZLDfMhb8AGWT4Q1m8mu4PSKsUi77WFcQT", - "symbol": "TUNG", - "name": "Tungy Coin", - "decimals": 14, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2S3Ay27AY2bZLDfMhb8AGWT4Q1m8mu4PSKsUi77WFcQT/logo.png", - "tags": ["meme-token"], - "extensions": { - "twitter": "https://twitter.com/TungyCube", - "website": "https://tungycoin.com" - } - }, - { - "chainId": 101, - "address": "ELVRweR9SQECBiwXAJLQsFkXW9ME4hKwDD2nRg6QmoBV", - "symbol": "fair3d.me", - "name": "Rewarding Contributions to f3d", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/staccDOTsol/token-list/main/assets/mainnet/ELVRweR9SQECBiwXAJLQsFkXW9ME4hKwDD2nRg6QmoBV/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/mVZVuTbh4T", - "twitter": "https://twitter.com/STACCart", - "website": "https://fair3d.me" - } - }, - { - "chainId": 101, - "address": "EKSM2sjtptnvkqq79kwfAaSfVudNAtFYZSBdPe5jeRSt", - "symbol": "SOLCH", - "name": "SolanaCash", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EKSM2sjtptnvkqq79kwfAaSfVudNAtFYZSBdPe5jeRSt/logo.png", - "tags": ["DeFi"], - "extensions": { - "twitter": "https://twitter.com/solanacash_io", - "website": "https://solanacash.io" - } - }, - { - "chainId": 101, - "address": "3jasj72YfitGmo3jtHvmCQXFNqAoJoGxLiVnqaDeZdXf", - "symbol": "AIEA", - "name": "AI Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3jasj72YfitGmo3jtHvmCQXFNqAoJoGxLiVnqaDeZdXf/logo.png", - "tags": ["community-token", "social-token"], - "extensions": { - "website": "https://ai-token.io" - } - }, - { - "chainId": 101, - "address": "4RGQbaSi5YGySUmoiMZB6mFrmr7XzvokUF7oxneiMnDs", - "symbol": "CML", - "name": "CML IT", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4RGQbaSi5YGySUmoiMZB6mFrmr7XzvokUF7oxneiMnDs/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "B98YTvnDdVQ9NKT3pdbFwJn2TMTDitz1xzfxgA1zXCDC", - "symbol": "wCOS_v1", - "name": "COS Contentos (Wormhole v1)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/B98YTvnDdVQ9NKT3pdbFwJn2TMTDitz1xzfxgA1zXCDC/logo.svg", - "tags": ["wrapped", "wormhole", "utility-token", "ethereum"], - "extensions": { - "address": "0x589891a198195061cb8ad1a75357a3b7dbadd7bc", - "assetContract": "https://etherscan.io/address/0x589891a198195061cb8ad1a75357a3b7dbadd7bc", - "bridgeContract": "https://etherscan.io/address/0xf92cD566Ea4864356C5491c177A430C222d7e678", - "coingeckoId": "contentos", - "medium": "https://medium.com/contentos-io", - "twitter": "https://twitter.com/contentosio", - "website": "https://www.contentos.io/" - } - }, - { - "chainId": 101, - "address": "yUSD1iVx5cgmRREB81pJW8byQTaY3HwsPzeMLCm26Ne", - "symbol": "yUSDC", - "name": "yUSDC (Parrot Stability Pool Token)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/yUSD1iVx5cgmRREB81pJW8byQTaY3HwsPzeMLCm26Ne/logo.svg", - "extensions": { - "discord": "https://discord.gg/gopartyparrot", - "medium": "https://gopartyparrot.medium.com/", - "telegram": "https://t.me/gopartyparrot", - "twitter": "https://twitter.com/gopartyparrot", - "website": "https://parrot.fi" - } - }, - { - "chainId": 101, - "address": "G1B6TwvfotwX4eVY7pcP6SDyZRGiTPwnKAL3bexi72WN", - "symbol": "xKZEN", - "name": "KZEN Locked", - "decimals": 9, - "logoURI": "https://cdn.kaizen.finance/assets/images/symbols/kzen-locked.png", - "tags": [ - "kaizen", - "kaizen-finance", - "locked-token", - "utility-token", - "vesting-token" - ], - "extensions": { - "description": "Locked KZEN token. First ever Token Lifecycle Management Platform.", - "medium": "https://kaizenfinance.medium.com", - "telegram": "https://t.me/KaizenFinance", - "twitter": "https://twitter.com/kaizen_finance", - "website": "https://kaizen.finance" - } - }, - { - "chainId": 101, - "address": "8NhthBCeEreii3he6J18tuaQk5MkopKNJt53ou4PDZpM", - "symbol": "FRENS", - "name": "Where is Nunu", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8NhthBCeEreii3he6J18tuaQk5MkopKNJt53ou4PDZpM/logo.png", - "tags": ["utility-token", "NFTs", "Where-is-Nunu", "Infamous-Thugbirdz"], - "extensions": { - "discord": "https://discord.gg/Hewj6Beatf", - "website": "https://www.where-is-nunu.com" - } - }, - { - "chainId": 101, - "address": "FgSsGV8GByPaMERxeQJPvZRZHf7zCBhrdYtztKorJS58", - "symbol": "pUSDC", - "name": "Port Finance USDC", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FgSsGV8GByPaMERxeQJPvZRZHf7zCBhrdYtztKorJS58/USDC.svg", - "tags": ["port", "lending", "collateral-tokens"], - "extensions": { - "website": "https://port.finance" - } - }, - { - "chainId": 101, - "address": "8ezDtNNhX91t1NbSLe8xV2PcCEfoQjEm2qDVGjt3rjhg", - "symbol": "pSOL", - "name": "Port Finance SOL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8ezDtNNhX91t1NbSLe8xV2PcCEfoQjEm2qDVGjt3rjhg/SOL.svg", - "tags": ["port", "lending", "collateral-tokens"], - "extensions": { - "website": "https://port.finance" - } - }, - { - "chainId": 101, - "address": "3RudPTAkfcq9Q9Jk8SVeCoecCBmdKMj6q5smsWzxqtqZ", - "symbol": "pUSDT", - "name": "Port Finance USDT", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3RudPTAkfcq9Q9Jk8SVeCoecCBmdKMj6q5smsWzxqtqZ/USDT.svg", - "tags": ["port", "lending", "collateral-tokens"], - "extensions": { - "website": "https://port.finance" - } - }, - { - "chainId": 101, - "address": "Dt1Cuau5m5CSmun8hZstjEh9RszxAmejnq7ZaHNcuXfA", - "symbol": "pmSOL", - "name": "Port Finance mSOL", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Dt1Cuau5m5CSmun8hZstjEh9RszxAmejnq7ZaHNcuXfA/mSOL.svg", - "tags": ["port", "lending", "collateral-tokens"], - "extensions": { - "website": "https://port.finance" - } - }, - { - "chainId": 101, - "address": "CiL3DpK53BRppcmxtMSDzfaNQmyPzPa9EZZhmS1LUkoM", - "symbol": "START", - "name": "Startupism", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/cdelalama/startupism/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Startupism is a community token for startup founders. It gamifies the entrepreneur's hero journey.", - "twitter": "https://twitter.com/startupism_ai", - "website": "https://www.startupism.ai" - } - }, - { - "chainId": 101, - "address": "HBiYxV9W4SAX4YS6JHHozGDDM62CdcMakiToed5rSZR", - "symbol": "SHTM", - "name": "SHIT MOON", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HBiYxV9W4SAX4YS6JHHozGDDM62CdcMakiToed5rSZR/logo.png" - }, - { - "chainId": 101, - "address": "FiER3ViRr6xU8DNFJK9of2sioUEjg6xMhtJrA7dAmfEP", - "symbol": "SRPD", - "name": "Surprised", - "decimals": 10, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FiER3ViRr6xU8DNFJK9of2sioUEjg6xMhtJrA7dAmfEP/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "3St1AJT8p8GP3FKa8UjNekkzauesEuE2rmzqVyLcC3Wn", - "symbol": "MB", - "name": "Amoeba", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3St1AJT8p8GP3FKa8UjNekkzauesEuE2rmzqVyLcC3Wn/logo.jpg", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/AmoebaEcosystem" - } - }, - { - "chainId": 101, - "address": "EeFrrySDy3mp8vHyqMFrFyHREfqcdrXPzkAyVjpwbfMk", - "symbol": "AMA", - "name": "AMA token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EeFrrySDy3mp8vHyqMFrFyHREfqcdrXPzkAyVjpwbfMk/logo.png", - "extensions": { - "twitter": "https://twitter.com/financeQ8" - } - }, - { - "chainId": 101, - "address": "YY85DMGbftvE4eKQauey4yAGWvUJ9LxbfFRQSnogF53", - "symbol": "DTOK", - "name": "Developer Utility Token", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/YY85DMGbftvE4eKQauey4yAGWvUJ9LxbfFRQSnogF53/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Developer utility token is a community reward token for developers of cryptourios.io.", - "website": "https://cryptourios.io/tokens/dtok" - } - }, - { - "chainId": 101, - "address": "3DTgQ3zv1oQ91NYYSAzdbM1HHxMwNmYQYy5CfE8pfnu9", - "symbol": "CITE", - "name": "Citation", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/citation-coin/citation-coin/main/logo.png", - "extensions": { - "twitter": "https://twitter.com/citation_crypto", - "website": "https://github.com/citation-coin/citation-coin" - } - }, - { - "chainId": 101, - "address": "EfYk923A6knsoSKRpi7uGozaevzAp4KcXe7C9qXxBbuv", - "symbol": "MOGO", - "name": "MONKE GOD", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EfYk923A6knsoSKRpi7uGozaevzAp4KcXe7C9qXxBbuv/logo.png", - "tags": ["meme-token", "monkey", "monkeygod", "community-token"], - "extensions": { - "twitter": "https://twitter.com/monkegodcoin", - "website": "https://monkegodcoin.com" - } - }, - { - "chainId": 101, - "address": "kZEn3aDxEzcFADPe2VQ6WcJRbS1hVGjUcgCw4HiuYSU", - "symbol": "KZEN", - "name": "Kaizen Finance", - "decimals": 9, - "logoURI": "https://kaizen.finance/assets/images/kaizen-assets/logo-kaizen-symbol.png", - "tags": [ - "kaizen", - "kaizen-finance", - "locked-token", - "vesting-token", - "bridge", - "DEX" - ], - "extensions": { - "description": "Kaizen is the first-ever cross-chain token lifecycle management platform built with the needs of both projects and investors alike.", - "medium": "https://kaizenfinance.medium.com", - "telegram": "https://t.me/KaizenFinance", - "twitter": "https://twitter.com/kaizen_finance", - "website": "https://kaizen.finance" - } - }, - { - "chainId": 101, - "address": "FADvkbzT3JY1gFqQRoaMyipfy6GvpVhbVfn3q3om7ZVG", - "symbol": "QTC", - "name": "Quantum", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FADvkbzT3JY1gFqQRoaMyipfy6GvpVhbVfn3q3om7ZVG/logo.png", - "extensions": { - "twitter": "https://twitter.com/quantumQTC", - "website": "http://www.quantum-coin.co" - } - }, - { - "chainId": 101, - "address": "JAzfmYG4WMDs8yeSLAR1rHrhS3QgknpQeMno9omsqeeo", - "symbol": "MNR", - "name": "Moon Raccoons token", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/JAzfmYG4WMDs8yeSLAR1rHrhS3QgknpQeMno9omsqeeo/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Major currency inside of Moon Raccoons Metaverse", - "discord": "https://discord.gg/66FX52eZrk", - "twitter": "https://twitter.com/moonraccoonsnft", - "website": "https://moonraccoon.io" - } - }, - { - "chainId": 101, - "address": "95dZLhb9FkL7mP7mrBQcnLZdoHVzsyekNGSXmXnrL9S1", - "symbol": "BLACKMOON", - "name": "Blackmoon Finance", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/95dZLhb9FkL7mP7mrBQcnLZdoHVzsyekNGSXmXnrL9S1/logo.png", - "tags": ["community-token"] - }, - { - "chainId": 101, - "address": "DRh7AedYnCCpEwhPHSVox24g2zxqBK84MroyuXCknP8c", - "symbol": "YOUC", - "name": "yOUcash", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DRh7AedYnCCpEwhPHSVox24g2zxqBK84MroyuXCknP8c/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://www.youengine.com" - } - }, - { - "chainId": 101, - "address": "78PyZ96q9WpMBpxY89Ct9ovBBxuKYaUEzt9gGZsWXQQ2", - "symbol": "SOD", - "name": "SOLID", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solidsbs/asset/dc74c7250fb5b97e6c84c3fe1241dba47288b3eb/solid.png", - "tags": [ - "currency", - "social-token", - "community-token", - "trading-token", - "reward-token", - "utility-token" - ], - "extensions": { - "twitter": "https://twitter.com/solidsbs", - "website": "https://solid.sbs/" - } - }, - { - "chainId": 101, - "address": "BDCyYhw4zvf8wx3e8rXcrcYnmsX5BxF7R6g5ooXqu3uL", - "symbol": "SamoShib", - "name": "Samo Shib", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BDCyYhw4zvf8wx3e8rXcrcYnmsX5BxF7R6g5ooXqu3uL/logo.png", - "tags": ["Meme-Token", "NFTs", "Meme-NFTs"], - "extensions": { - "discord": "https://discord.gg/samoshib", - "serumV3Usdc": "CBaYZDJktoYTrSc38Qd2dq3Kko9bzVKMx6i31nBRVSd4", - "twitter": "https://twitter.com/samoshib", - "website": "https://www.samoshib.com" - } - }, - { - "chainId": 101, - "address": "9eEwTum1ppuc5HnhwSR1HYFZ1F712eD8n6mwzT92HumG", - "symbol": "TCTY", - "name": "Traceability", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9eEwTum1ppuc5HnhwSR1HYFZ1F712eD8n6mwzT92HumG/icon.png", - "tags": [ - "currency", - "social-token", - "community-token", - "trading-token", - "reward-token", - "utility-token" - ] - }, - { - "chainId": 101, - "address": "DRE26YQhpsifRS2pQptiVMpidVVvVNL8kbSbaXQyHmqi", - "symbol": "TOAPP", - "name": "Appreciation", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DRE26YQhpsifRS2pQptiVMpidVVvVNL8kbSbaXQyHmqi/logo.png" - }, - { - "chainId": 101, - "address": "SLRCdL7ZiF8UUHCMqoeCCYhb4FDoHwDJG6MgEmVb9is", - "symbol": "SLRC", - "name": "Sollarion Crystal", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SLRCdL7ZiF8UUHCMqoeCCYhb4FDoHwDJG6MgEmVb9is/logo.png", - "tags": [ - "utility-token", - "gaming", - "metaverse", - "nfts", - "play-to-earn", - "solana-ecosystem", - "staking" - ], - "extensions": { - "description": "SLRC tokens are built on the Solana blockchain. Users can use SLRC to participate in the game, buy cards on marketplace, bet with other players, win in matches and tournaments etc. Also staking rewards are paid in SLRC tokens.", - "discord": "https://discord.com/invite/x2DcJ4uRd9", - "instagram": "https://www.instagram.com/solanagalaxynft/", - "twitter": "https://twitter.com/SolanaGalaxyNFT", - "website": "https://sollarion.com/" - } - }, - { - "chainId": 101, - "address": "9sQtcMxC7zwoVm9vsbZD6XkbZMik5882sA22oc6kb6bU", - "symbol": "GAP", - "name": "Solana Gap", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9sQtcMxC7zwoVm9vsbZD6XkbZMik5882sA22oc6kb6bU/logo.png", - "tags": ["community-token", "utility-token", "stake-pool-token"], - "extensions": { - "telegram": "https://t.me/SolanaGAP", - "twitter": "https://twitter.com/SolanaGAP", - "website": "https://solanagap.com" - } - }, - { - "chainId": 101, - "address": "4U7hSJxbgDoAcQqL2SZpB3hik225ZuG3L33VyrpZD8BA", - "symbol": "ADA", - "name": "CARDASOL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4U7hSJxbgDoAcQqL2SZpB3hik225ZuG3L33VyrpZD8BA/logo.png", - "tags": ["Meme-token"], - "extensions": { - "discord": "https://discord.com/invite/tusA7HfUD4", - "telegram": "https://t.me/cardasol", - "twitter": "https://twitter.com/Carda_sol", - "website": "https://cardasoltoken.com" - } - }, - { - "chainId": 101, - "address": "Fj4js23EXVLoUQ26VPfmwVbt76XLn6souUGis71FvNmM", - "symbol": "LEARN", - "name": "Solearna", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Fj4js23EXVLoUQ26VPfmwVbt76XLn6souUGis71FvNmM/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/z3AZSHfcQ4", - "reddit": "https://www.reddit.com/r/solearna", - "telegram": "https://t.me/joinchat/3U4rp853CFMyNGY0", - "twitter": "https://twitter.com/solearna", - "website": "https://solearna.com/" - } - }, - { - "chainId": 101, - "address": "88YqDBWxYhhwPbExF966EdaCYBKP51xVm1oGBcbWzcf2", - "symbol": "GRLC", - "name": "Garlic", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/88YqDBWxYhhwPbExF966EdaCYBKP51xVm1oGBcbWzcf2/logo.png", - "tags": ["utility-token", "nfts"], - "extensions": { - "description": "The Ivy Vampires Garlic Token", - "discord": "https://discord.gg/X6rgFCSQ", - "twitter": "https://twitter.com/IvyVampires", - "website": "https://www.ivyvampires.com/" - } - }, - { - "chainId": 101, - "address": "6FXNqrezcTvvySBTmANUxCes9D5apGv6Jbehi2ct1E8Q", - "symbol": "THANKS", - "name": "Thanks Token", - "decimals": 4, - "logoURI": "https://cdn.jsdelivr.net/gh/quinqu/thanks-token/logo/thanks.jpg", - "extensions": { - "description": "Give a Thanks (Token)", - "twitter": "https://twitter.com/softbt" - } - }, - { - "chainId": 101, - "address": "3th4wtEfsK3HmGYn1uEdv9718YaebGMBW5PAPP26Te9x", - "symbol": "EGEMS", - "name": "Forgebot Electrogems", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3th4wtEfsK3HmGYn1uEdv9718YaebGMBW5PAPP26Te9x/logo.png", - "tags": ["nft"], - "extensions": { - "discord": "https://discord.gg/nZmwCFbtC2", - "twitter": "https://twitter.com/forgebots" - } - }, - { - "chainId": 101, - "address": "T8KdT8hDzNhbGx5sjpEUxepnbDB1TZoCa7vtC5JjsMw", - "symbol": "sUSDT-8", - "name": "Saber Wrapped USDT (8 decimals)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/T8KdT8hDzNhbGx5sjpEUxepnbDB1TZoCa7vtC5JjsMw/icon.png", - "tags": ["stablecoin", "saber-mkt-usd", "saber-dec-wrapped"], - "extensions": { - "coingeckoId": "tether", - "serumV3Usdc": "77quYg4MGneUdjgXCunt9GgM1usmrxKY31twEy3WHwcS", - "website": "https://app.saber.so" - } - }, - { - "chainId": 101, - "address": "HfsvmwJtXVkExnigHzvry42shBvNWk55ndmVHCxdXEXJ", - "symbol": "SIVI", - "name": "Siva Coin", - "decimals": 9, - "logoURI": "https://i.imgur.com/t4xXJCA.png", - "tags": ["social-token"], - "extensions": { - "description": "We can help you turn your content into extra income and pursue more of what you love.", - "website": "https://siva.vip/" - } - }, - { - "chainId": 101, - "address": "7MirouXpJ1J9wYT3jB9xSp8GKwjx9fJ2hHut5HxWxdLa", - "symbol": "GKC", - "name": "Ghost Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7MirouXpJ1J9wYT3jB9xSp8GKwjx9fJ2hHut5HxWxdLa/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://www.ghostkitchenbrands.com/" - } - }, - { - "chainId": 103, - "address": "DchriVmCLnaDytihAWeAPVdGhHCf8dXM6UdPMGGT9rhx", - "symbol": "SFVN", - "name": "Sofven", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DchriVmCLnaDytihAWeAPVdGhHCf8dXM6UdPMGGT9rhx/logo.png", - "extensions": { - "website": "https://www.sofven.com" - } - }, - { - "chainId": 101, - "address": "69UCbruXAtuHm1cHEcv5zWeW3gE5mcKEsmmuRykgoqo2", - "symbol": "FPVGC", - "name": "First Principle Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/69UCbruXAtuHm1cHEcv5zWeW3gE5mcKEsmmuRykgoqo2/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "poDLpYm4N53sLjtaqJoqGaa4AH34uwq2GkXDWNiMztn", - "symbol": "PODL", - "name": "Poodle Inu", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/poDLpYm4N53sLjtaqJoqGaa4AH34uwq2GkXDWNiMztn/logo.png", - "tags": ["meme-token", "nft", "utility-token", "community-token"], - "extensions": { - "discord": "https://discord.gg/ejWddvadHZ", - "twitter": "https://twitter.com/SolPoodleInu", - "website": "https://solpodl.com/" - } - }, - { - "chainId": 102, - "address": "9HAmU9sW1dVTZWd84qa5U83YdJLhemL21SheySznXJNM", - "symbol": "wFINN", - "name": "wFINN Coin (Wormhole V2)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9HAmU9sW1dVTZWd84qa5U83YdJLhemL21SheySznXJNM/logo.png", - "tags": ["wrapped"], - "extensions": { - "address": "0x43b29D1b0941cB5a5bbe0ABd958eF03616437A49", - "assetContract": "https://etherscan.io/address/0x43b29D1b0941cB5a5bbe0ABd958eF03616437A49", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585" - } - }, - { - "chainId": 101, - "address": "2DJZLCpTgSodW4DCEA7wJG29ypbnNRpZjSmmBRyRA4dt", - "symbol": "BEAT", - "name": "BEAT TOKEN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2DJZLCpTgSodW4DCEA7wJG29ypbnNRpZjSmmBRyRA4dt/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "Hgvs5aM4SXy4YHsZZXUBcnvNXFmop6XCzAFGnkamQdRq", - "symbol": "SKE", - "name": "Solana King Empire", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Hgvs5aM4SXy4YHsZZXUBcnvNXFmop6XCzAFGnkamQdRq/logo.png" - }, - { - "chainId": 101, - "address": "DKCc1ja8WfxL1oki7zTBKoac74GHZXLfrcazBWbDJpwD", - "symbol": "ZYB", - "name": "Ziyob", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DKCc1ja8WfxL1oki7zTBKoac74GHZXLfrcazBWbDJpwD/ZiyobLogo.png", - "tags": ["Ziyob-token", "Ziyob", "ZYB"], - "extensions": { - "website": "https://www.ziyob.com" - } - }, - { - "chainId": 101, - "address": "21vatMcwZz53Eu2EUDCS9xoZUXdJ9ABMTQYNMKKkzoNW", - "symbol": "CEX", - "name": "Catena X", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/21vatMcwZz53Eu2EUDCS9xoZUXdJ9ABMTQYNMKKkzoNW/Logo.png", - "tags": ["community", "DEFI", "Bridage"], - "extensions": { - "coingeckoId": "catena-x", - "telegram": "https://t.me/CatenaX", - "twitter": "https://twitter.com/catena_x", - "website": "https://catenax.org" - } - }, - { - "chainId": 101, - "address": "8uCVHmHrRH61PgDx9KgzpNanuv18QbmZnQbjZ82f2RfG", - "symbol": "PPAY", - "name": "PocketPay Finance", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8uCVHmHrRH61PgDx9KgzpNanuv18QbmZnQbjZ82f2RfG/logo.png", - "extensions": { - "twitter": "https://twitter.com/PocketPayFin", - "website": "https://pocketpay.finance" - } - }, - { - "chainId": 101, - "address": "5gs8nf4wojB5EXgDUWNLwXpknzgV2YWDhveAeBZpVLbp", - "symbol": "XTAG", - "name": "xHashtag Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5gs8nf4wojB5EXgDUWNLwXpknzgV2YWDhveAeBZpVLbp/logo.png", - "extensions": { - "twitter": "https://twitter.com/xhashtagio", - "website": "https://www.xhashtag.io/" - } - }, - { - "chainId": 101, - "address": "NEBUuriMe6MAhVo9Y9U6FwUg1ah1CEoL4iZfkDJ6BzD", - "symbol": "NEBU", - "name": "NEBU", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/NEBUuriMe6MAhVo9Y9U6FwUg1ah1CEoL4iZfkDJ6BzD/logo.png" - }, - { - "chainId": 101, - "address": "A94X2fRy3wydNShU4dRaDyap2UuoeWJGWyATtyp61WZf", - "symbol": "TRYB", - "name": "BiLira", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/A94X2fRy3wydNShU4dRaDyap2UuoeWJGWyATtyp61WZf/logo.png", - "tags": ["tryb", "bilira", "stablecoin"], - "extensions": { - "coingeckoId": "bilira", - "github": "https://github.com/bilira-org", - "instagram": "https://instagram.com/bilira_official", - "telegram": "https://t.me/BiLira_Official", - "website": "http://bilira.co" - } - }, - { - "chainId": 101, - "address": "BKLPnzg7HZfARBRxBNc7oiiYo7ALKH5Enmz2sTq6LkCM", - "symbol": "Ycoins", - "name": "Yute Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BKLPnzg7HZfARBRxBNc7oiiYo7ALKH5Enmz2sTq6LkCM/logo.png" - }, - { - "chainId": 101, - "address": "5K1JtWpdSksVKaL6R2DuLpCDAjzxK6sq2CpXaXDWHVLg", - "symbol": "YORK", - "name": "Yorkipoo", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5K1JtWpdSksVKaL6R2DuLpCDAjzxK6sq2CpXaXDWHVLg/logo.png", - "tags": ["community-token", "meme-token", "social-token"], - "extensions": { - "telegram": "https://t.me/yorkipoocoin", - "twitter": "https://twitter.com/yorkipoocoin", - "website": "https://yorkipoocoin.com" - } - }, - { - "chainId": 101, - "address": "AqLjXoMbZE9vMj3df1JQwJiLAb4WXh2K3K4JTpzGNKSo", - "symbol": "MLD", - "name": "Metaland", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/bdeepakreddy/img-repo/main/coin.png", - "tags": ["nft", "nft-token", "nft-marketplace", "game-token"], - "extensions": { - "discord": "https://discord.gg/MRvfvpGvXq", - "website": "https://www.metaland.place" - } - }, - { - "chainId": 101, - "address": "3qtvTtcoAXaoTd8f1dmF8wzw17A1XPphuaDuGiBeVuTA", - "symbol": "ANGELZ", - "name": "ANGELZ Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3qtvTtcoAXaoTd8f1dmF8wzw17A1XPphuaDuGiBeVuTA/logo.png", - "tags": ["socialtoken", "angelz"], - "extensions": { - "github": "https://github.com/AngelzTokenTeam", - "website": "http://angelztoken.com/" - } - }, - { - "chainId": 101, - "address": "6Q3KU2dh4Nwkh8TpX7bF848cgUaXzaB9gzwbC6RLWbDy", - "symbol": "INFY", - "name": "NFT INFINITY", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6Q3KU2dh4Nwkh8TpX7bF848cgUaXzaB9gzwbC6RLWbDy/logo.jpg", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/rGYPbXPvZT", - "telegram": "https://t.me/joinchat/Rs7H8jFCyZZlOGMx", - "twitter": "https://twitter.com/nftdinfinity", - "website": "https://nftdinfinity.com/" - } - }, - { - "chainId": 101, - "address": "CYbXZ7U1AeV8kjtJG3YqKMLaWtdMLa24JojrikZZdXAG", - "symbol": "DIVX", - "name": "Dividex", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CYbXZ7U1AeV8kjtJG3YqKMLaWtdMLa24JojrikZZdXAG/logo.png", - "tags": ["utility-token"], - "extensions": { - "telegram": "https://t.me/joinchat/RSi9ys6xK1M4N2Zh", - "website": "https://dividex.io/" - } - }, - { - "chainId": 101, - "address": "5yzDXTMcxP7k4RRo1Wjg2USAiP4FrgNJqGPmWAVQKeLU", - "symbol": "FINDLAY", - "name": "Findlay Force", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5yzDXTMcxP7k4RRo1Wjg2USAiP4FrgNJqGPmWAVQKeLU/logo.png", - "tags": [ - "social-token", - "community-token", - "trading-token", - "utility-token" - ], - "extensions": { - "facebook": "https://www.facebook.com/findlayhats/", - "instagram": "https://www.instagram.com/findlayhats/", - "twitter": "https://twitter.com/findlayhats", - "website": "https://www.findlayhats.com/" - } - }, - { - "chainId": 101, - "address": "A2yu4dj4VCbXmV9Z58Vk6TEP5MwoHCZF22HpY9rjSTvx", - "symbol": "winter", - "name": "winter token", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/Samodoge/solwinterlogo@master/solwinter.png", - "tags": ["community-token"], - "extensions": { - "twitter": "https://twitter.com/SolsWinter", - "website": "https://solswinter.io/" - } - }, - { - "chainId": 101, - "address": "58S8vzz3JTi7brm1QhuddkwP9vp31uLXwtfTdb3vDczh", - "symbol": "VIEW", - "name": "VIEW", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/58S8vzz3JTi7brm1QhuddkwP9vp31uLXwtfTdb3vDczh/logo.png", - "tags": ["advertising-platform", "meme-token"], - "extensions": { - "description": "The VIEW platform is a digital advertising platform that connects advertisers and advertising consumers based on the blockchain technology. ", - "telegram": "https://t.me/VIEW_Official", - "website": "https://viewplatform.net/index_en.html", - "whitepaper": "https://viewplatform.net/wp/VIEW_WP_V1.0_EN.pdf" - } - }, - { - "chainId": 101, - "address": "Dphg7WWPYPKMtVyxBJpjwP2sG8HBkG4mm89kX1jgKA2L", - "symbol": "AUX", - "name": "AUX Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Dphg7WWPYPKMtVyxBJpjwP2sG8HBkG4mm89kX1jgKA2L/logo.png", - "tags": ["stablecoin"], - "extensions": { - "address": "0xab60CcAC0d4157c2b03e5D883bDbe60317992f58", - "assetContract": "https://etherscan.io/address/0xab60CcAC0d4157c2b03e5D883bDbe60317992f58", - "website": "https://lode.one" - } - }, - { - "chainId": 101, - "address": "76f4Q85ZamR7LhFwjQmw8nLc7cg1WjGYTLFLTxFWtAJ2", - "symbol": "OLDMAN", - "name": "Dad Oldman token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/76f4Q85ZamR7LhFwjQmw8nLc7cg1WjGYTLFLTxFWtAJ2/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "F1gQgd8hQCc68rfhZoMrRgEcN393cD2LaySCHFXS1Vii", - "symbol": "RIDE", - "name": "chain RIDE token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/F1gQgd8hQCc68rfhZoMrRgEcN393cD2LaySCHFXS1Vii/logo.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "3fXCWpQaEHEsnHSYAqcxm3QLPGLxYiZzoJbqRY9wWxV2", - "symbol": "DCCT", - "name": "Docu Chain", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3fXCWpQaEHEsnHSYAqcxm3QLPGLxYiZzoJbqRY9wWxV2/logo.png", - "tags": ["document-platform"], - "extensions": { - "description": "The DocuChain project aims to establish a protocol and a platform that encompasses blockchainbased e-document/contract creation, sending, and authentication that have advanced from existing edocument/contract services in line with this trend.", - "website": "https://docuchain.co/", - "whitepaper": "https://docuchain.co/wp/DocuChain_WP_V1.0_EN.pdf" - } - }, - { - "chainId": 101, - "address": "H84W8smQNsiHkwPJHvGDyecSRCCXTWew3stfMF1KGpYR", - "symbol": "LODE", - "name": "LODE Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/H84W8smQNsiHkwPJHvGDyecSRCCXTWew3stfMF1KGpYR/logo.png", - "tags": ["dividend"], - "extensions": { - "address": "0x897f505d9637622219e4687eC1A71b4Acf204816", - "assetContract": "https://etherscan.io/address/0x897f505d9637622219e4687eC1A71b4Acf204816", - "website": "https://lode.one" - } - }, - { - "chainId": 101, - "address": "HZNpqL7RT9gxf9eWoWsWzC5DfjzQ41XTQgEA7p3VzaaD", - "symbol": "TWT", - "name": "Trust Wallet (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HZNpqL7RT9gxf9eWoWsWzC5DfjzQ41XTQgEA7p3VzaaD/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x4B0F1812e5Df2A09796481Ff14017e6005508003", - "assetContract": "https://bscscan.com/address/0x4B0F1812e5Df2A09796481Ff14017e6005508003", - "bridgeContract": "https://bscscan.com/address/0x4B0F1812e5Df2A09796481Ff14017e6005508003", - "coingeckoId": "trust-wallet-token", - "twitter": "https://twitter.com/trustwallet", - "website": "https://trustwallet.com" - } - }, - { - "chainId": 101, - "address": "CAAFUFXRks6NLBtNPmedfEWycC51w7XyR9twj3vEqmMG", - "symbol": "MAINE", - "name": "Maine Coon", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CAAFUFXRks6NLBtNPmedfEWycC51w7XyR9twj3vEqmMG/logo.svg", - "tags": ["meme", "meme-token", "roar", "meow", "cat"], - "extensions": { - "website": "https://www.mainecooncrypto.com/" - } - }, - { - "chainId": 101, - "address": "SENBBKVCM7homnf5RX9zqpf1GFe935hnbU4uVzY1Y6M", - "symbol": "SNTR", - "name": "Sentre", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SENBBKVCM7homnf5RX9zqpf1GFe935hnbU4uVzY1Y6M/logo.png", - "tags": ["utility-token"], - "extensions": { - "coingeckoId": "sentre", - "discord": "https://discord.gg/FyHJgQ7W", - "medium": "https://sentre.medium.com", - "telegram": "https://t.me/Sentre", - "twitter": "https://twitter.com/SentreProtocol", - "website": "https://sentre.io" - } - }, - { - "chainId": 101, - "address": "BAq9fjWbUSN5zED6dSscg8FiJfSRcEvawweuq5sKrjDB", - "symbol": "GSL", - "name": "Gamesol", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BAq9fjWbUSN5zED6dSscg8FiJfSRcEvawweuq5sKrjDB/logo.png", - "tags": ["Game-Token", "Gamefi"], - "extensions": { - "discord": "https://discord.io/gamesol_io", - "twitter": "https://twitter.com/GameSol_io", - "website": "https://gamesol.io" - } - }, - { - "chainId": 101, - "address": "w71tgPPw37F7sCxxq1bcT63D3dtV6bJ7MUD3q7fpLqg", - "symbol": "SIM", - "name": "Serious Internet Money", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/w71tgPPw37F7sCxxq1bcT63D3dtV6bJ7MUD3q7fpLqg/logo.png", - "tags": ["utility-token", "dao", "nfts", "staking", "nft-token"], - "extensions": { - "twitter": "https://twitter.com/solanapsb", - "website": "https://solanapepeserious.business/" - } - }, - { - "chainId": 101, - "address": "92SCBrWw1N9fy2eXHbq8xME9nHuGx3Xs9ZWhRu1ZutHA", - "symbol": "PRN", - "name": "Piranha", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/92SCBrWw1N9fy2eXHbq8xME9nHuGx3Xs9ZWhRu1ZutHA/logo.png", - "extensions": { - "twitter": "https://twitter.com/piranhasol", - "website": "http://wwww.piranha.network" - } - }, - { - "chainId": 101, - "address": "AATv4cJz1ykW3XBDBwqCwbvGjg3SfWNJ47tSKhriTZuD", - "symbol": "MGS", - "name": "MoonGearSolid", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AATv4cJz1ykW3XBDBwqCwbvGjg3SfWNJ47tSKhriTZuD/logo.png", - "tags": ["Utility-token", "Defi", "Fund-management"], - "extensions": { - "discord": "https://discord.gg/4nrky27yu5", - "twitter": "https://twitter.com/MoonGearSolid" - } - }, - { - "chainId": 101, - "address": "6dhTynDkYsVM7cbF7TKfC9DWB636TcEM935fq7JzL2ES", - "symbol": "BONK", - "name": "BONK", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6dhTynDkYsVM7cbF7TKfC9DWB636TcEM935fq7JzL2ES/logo.png", - "extensions": { - "twitter": "https://twitter.com/ShibaCouncil", - "website": "https://shibacouncil.com" - } - }, - { - "chainId": 101, - "address": "56tNQ29XBrbovm5K5SThuQatjCy92w2wKUaUeQ8WCD9g", - "symbol": "CRYY", - "name": "CRY Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/56tNQ29XBrbovm5K5SThuQatjCy92w2wKUaUeQ8WCD9g/logo.png", - "tags": ["meme-token"], - "extensions": { - "coingeckoId": "cry-coin", - "discord": "https://discord.gg/kkY6dT4ARX", - "twitter": "https://twitter.com/crycoinofficial", - "website": "https://crycoin.io" - } - }, - { - "chainId": 101, - "address": "6NreacWdGLoWRc9m6Si6B5UZ8svaQthnKnZy6bssf3av", - "symbol": "KOO", - "name": "Koo coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6NreacWdGLoWRc9m6Si6B5UZ8svaQthnKnZy6bssf3av/logo.png" - }, - { - "chainId": 101, - "address": "vqU8NVkkgpFtt3YECwuQRD3RhX7LYaqZKrotZbdiBJn", - "symbol": "MOONRACE", - "name": "Moonrace", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/vqU8NVkkgpFtt3YECwuQRD3RhX7LYaqZKrotZbdiBJn/logo.png", - "tags": ["meme-token", "metaverse", "gaming"], - "extensions": { - "twitter": "https://twitter.com/moonracecoin", - "website": "https://moonrace.xyz/" - } - }, - { - "chainId": 101, - "address": "GyVHQisPRasinD6E2SGTGLUt7eE9ZStsLKSzZN9uNBpM", - "symbol": "MLND", - "name": "Metaland Token", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/bdeepakreddy/img-repo/main/token.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/MRvfvpGvXq", - "website": "https://www.metaland.place" - } - }, - { - "chainId": 101, - "address": "X1rN2wMDSoX3QacCgcumMGDQvk1ssr1LqTTwLsCRvf9", - "symbol": "SEED", - "name": "Stars Seed", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/X1rN2wMDSoX3QacCgcumMGDQvk1ssr1LqTTwLsCRvf9/logo.png", - "tags": ["NFT", "STARS", "INFLUENCERS", "FAN-NFT", "STAKING"], - "extensions": { - "twitter": "https://twitter.com/ExchangeStars", - "website": "https://stars.exchange" - } - }, - { - "chainId": 103, - "address": "2wnwtV87ujGZX3mhcRCHnfcJZufh2ffEQLvkNKAn63dE", - "symbol": "URA", - "name": "URA", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2wnwtV87ujGZX3mhcRCHnfcJZufh2ffEQLvkNKAn63dE/logo.png", - "tags": ["dao", "gaming", "gamefi", "governance-token"], - "extensions": { - "website": "https://uranusx.io" - } - }, - { - "chainId": 103, - "address": "6HusCnR1e3RKiLuzMCUzBZkaUTvjGYvT6EisRXGWPa5n", - "symbol": "ROBO", - "name": "ROBO", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3QEMVBPQm7PK86oms35izjca89fBbigDvs9wNNVH3Wi8/logo.png", - "tags": ["dao", "gaming", "gamefi", "utility-token"], - "extensions": { - "website": "https://roboworld.io" - } - }, - { - "chainId": 101, - "address": "9gVyinZd945tJddQBP7Lwo97kUpos7zNw6VkBA55VyPd", - "symbol": "ISOL", - "name": "Infinity Solana", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9gVyinZd945tJddQBP7Lwo97kUpos7zNw6VkBA55VyPd/logo.png", - "tags": ["stake-pool-token"], - "extensions": { - "discord": "https://discord.gg/uTPNNuSbG5", - "twitter": "https://twitter.com/infinity_solana" - } - }, - { - "chainId": 101, - "address": "6TkXczqRJ71jRG5XNjaF1i2kW38PtCeLcG1LdttEVjun", - "symbol": "DUDES", - "name": "Dudes DAO", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6TkXczqRJ71jRG5XNjaF1i2kW38PtCeLcG1LdttEVjun/logo.png" - }, - { - "chainId": 101, - "address": "DdYm4xFMroFwztupfN4mwVmCQTrVgQ8gXGzzscXzCnkF", - "symbol": "CCT", - "name": "CC Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/dmontaldo/static-content/main/cct-token.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "8T3pZV6rspPm98i5pFTKDxvuSF8R1YZMzDKhFuD5LY4s", - "symbol": "TIP", - "name": "Tip Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/dmontaldo/static-content/main/tip-token.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "A5jZTDzSxySC1YGGN85XjoyDbxxcjKBAWb5viX8KhivA", - "symbol": "$EC", - "name": "Elder Coin", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/A5jZTDzSxySC1YGGN85XjoyDbxxcjKBAWb5viX8KhivA/logo.png", - "extensions": { - "twitter": "https://twitter.com/0xCthulhu", - "website": "https://0xcthulhu.io/" - } - }, - { - "chainId": 101, - "address": "JAAZw9LPm6xCyMHyR1F4FCDWwbCa5ac4MkwXm3rw3jpW", - "symbol": "DEO", - "name": "DEO", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/JAAZw9LPm6xCyMHyR1F4FCDWwbCa5ac4MkwXm3rw3jpW/logo.png" - }, - { - "chainId": 101, - "address": "AbZyorYfq9drppborCYCqdjt4g1apskgf1NTHZAdCVsR", - "symbol": "CC", - "name": "Clumsy Club", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AbZyorYfq9drppborCYCqdjt4g1apskgf1NTHZAdCVsR/logo.png", - "tags": ["Community-token"] - }, - { - "chainId": 101, - "address": "F2bJk8vrGFfzXBfiWFJTJx8RW9BUpnUCVL1tY5RqMAg6", - "symbol": "SUS", - "name": "SUSOKEN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/F2bJk8vrGFfzXBfiWFJTJx8RW9BUpnUCVL1tY5RqMAg6/logo.png", - "tags": ["fun-token", "not-serious-token"], - "extensions": { - "discord": "https://discord.gg/Z3eaHY36Ed" - } - }, - { - "chainId": 101, - "address": "BuToUqdPzbhB16rtFHwReDPVUjaQ3YRBYNU6i3x2HYYb", - "symbol": "BUTO", - "name": "BUTOKEN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BuToUqdPzbhB16rtFHwReDPVUjaQ3YRBYNU6i3x2HYYb/logo.jpg" - }, - { - "chainId": 103, - "address": "9koJxhRXUX3zAbgWmFdvJkJjm8WfmV5MdcCRMapuuSvc", - "symbol": "HMTC", - "name": "Hamlett Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9koJxhRXUX3zAbgWmFdvJkJjm8WfmV5MdcCRMapuuSvc/logo.png", - "tags": ["troll", "company"], - "extensions": { - "twitter": "https://twitter.com/Jul00t", - "website": "http://hamlett-company.tk/" - } - }, - { - "chainId": 101, - "address": "3F78gqMGe12Z2RV77qevTcYP1z6jus5R5LAmbU2mDxRJ", - "symbol": "PIU", - "name": "PIU COIN", - "decimals": 9, - "logoURI": "https://i.ibb.co/s9T8Zvj/mamu.jpg", - "tags": ["mamma", "altcoin"] - }, - { - "chainId": 101, - "address": "FtRnQYHNmQNkX1T1ZuWd7HtFV2GrvJwTm4CwtXMvWRs8", - "symbol": "SBBY", - "name": "StakedBabylonDAO", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5SZSVgnQDgKKxtCe3UA3x4T7tcSRNDaL3NmfdEqpuLzo/logo.jpg", - "tags": ["Utility-token", "Defi", "StakedBabylonDAO"], - "extensions": { - "twitter": "https://twitter.com/babylondao" - } - }, - { - "chainId": 101, - "address": "5SZSVgnQDgKKxtCe3UA3x4T7tcSRNDaL3NmfdEqpuLzo", - "symbol": "BBY", - "name": "BabylonDAO", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5SZSVgnQDgKKxtCe3UA3x4T7tcSRNDaL3NmfdEqpuLzo/logo.jpg", - "tags": ["Utility-token", "Defi", "BabylonDAO"], - "extensions": { - "twitter": "https://twitter.com/babylondao" - } - }, - { - "chainId": 101, - "address": "9ovRpcbTPAGAsnfPDRHyu7Jy5qaXfmYpn8xNpaLkU1tX", - "symbol": "JOV", - "name": "Jove", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9ovRpcbTPAGAsnfPDRHyu7Jy5qaXfmYpn8xNpaLkU1tX/logo.png", - "tags": ["community-token", "game", "NFT"], - "extensions": { - "discord": "https://discord.com/invite/pecpAJNUJP", - "twitter": "https://twitter.com/JoveCryptoGames", - "website": "https://jove.games/" - } - }, - { - "chainId": 101, - "address": "9SqXkCCpcRGrimjMfPdof9awceRHUEwy5qvmTgW779QD", - "symbol": "FUEL", - "name": "Fuel", - "decimals": 2, - "logoURI": "https://arweave.net/8shYrOoCPffqqQTwuGm2BXbzAllV0OtRCNZ_SMyvg7c?ext=png" - }, - { - "chainId": 101, - "address": "3jcdrN3muKRJxCvuhHJ71ADDqsshFS1hQMj1Z5cGs6Gm", - "symbol": "FRE", - "name": "Frevation", - "decimals": 2, - "logoURI": "https://www.frevation.com/tokens/fre/logo.png" - }, - { - "chainId": 101, - "address": "45wdSjpSqZCk9mkqmq5Nh7beCEqqUJMJcVduwYCip5eq", - "symbol": "BOFB", - "name": "BofB", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/45wdSjpSqZCk9mkqmq5Nh7beCEqqUJMJcVduwYCip5eq/logo.svg", - "tags": [ - "utility-token", - "social-token", - "community-token", - "BankOfBitcoin", - "bofb", - "metaverse" - ], - "extensions": { - "description": "BofB is where Bank meets Bitcoin. BofB's vision is to become a transitional platform that will help connect the old banking system with how everyone will bank in the future. Our mission is to help achieve the right to bank to everyone by allowing the entire world to be able to access our platform as long as they can meet the most simple requirement which is wanting to join our platform. KYC and AML will be mandatory but banking should be easy and for everyone in the world. Our main strategy will be to have the strongest presence in the Metaverse.", - "discord": "https://discord.gg/7kcg2rxDxb", - "instagram": "https://www.instagram.com/bofbdc", - "telegram": "https://t.me/bofbdc", - "twitter": "https://twitter.com/bofbdc", - "website": "https://bofb.com" - } - }, - { - "chainId": 101, - "address": "JBKQgpTs11KR2sVqXRYXmWAbsE3ZuBzX3dGM2hjsiNcP", - "symbol": "CARD", - "name": "CARDEI Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/JBKQgpTs11KR2sVqXRYXmWAbsE3ZuBzX3dGM2hjsiNcP/logo.png", - "tags": ["utility-token", "currency-token"] - }, - { - "chainId": 101, - "address": "9EwkJGjMenzW6F14ycgjvyojDZ3aK3sYvww27HKDVx3o", - "symbol": "CHURU", - "name": "CHURU", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9EwkJGjMenzW6F14ycgjvyojDZ3aK3sYvww27HKDVx3o/logo.png", - "tags": ["NFTs", "P2E"], - "extensions": { - "website": "https://www.themeowcapital.com" - } - }, - { - "chainId": 101, - "address": "Eb4ZW4bPZybnsefY8B8h9z5sb8W7Q7HW9un5PL2N1dPb", - "symbol": "LACH", - "name": "Lachenal Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Eb4ZW4bPZybnsefY8B8h9z5sb8W7Q7HW9un5PL2N1dPb/logo.jpg", - "tags": ["school-token"] - }, - { - "chainId": 101, - "address": "AJnZPCRayvrPheXpEcJDCDU7pHvsRvVsxD8UfSEyMa4p", - "symbol": "KEIK", - "name": "KeithKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/theNetworkChuck/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HafihnBU1fFn2Gi4GBh8gTcqw4BFDzkFmKLQf9ikGoyr", - "symbol": "CHAKRA", - "name": "CHAKRA", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HafihnBU1fFn2Gi4GBh8gTcqw4BFDzkFmKLQf9ikGoyr/logo.png", - "tags": ["NFTs", "utility-token", "currency-token", "community-token"] - }, - { - "chainId": 101, - "address": "GxkmWoupEMFg4w4aCxcsLgJsxvQybMQPf9PMetCkFJfy", - "symbol": "ATL", - "name": "Astral", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GxkmWoupEMFg4w4aCxcsLgJsxvQybMQPf9PMetCkFJfy/logo.png", - "tags": ["community-token", "meme-token"], - "extensions": { - "github": "https://github.com/AslakOffi" - } - }, - { - "chainId": 101, - "address": "5EvkywasgapiYDtoAdfvFoVnzQPN1bsap4RUyoLyY9fB", - "symbol": "RWC", - "name": "REPUBLIC WORLD", - "decimals": 3, - "logoURI": "https://cdn.jsdelivr.net/gh/AbdallaMalik/RWC/logo/RWC.png", - "tags": ["game-token"], - "extensions": { - "facebook": "https://Facebook.com/republicworldss", - "telegram": "https://t.me/Republicworldgame", - "website": "http://Republicworld.io" - } - }, - { - "chainId": 103, - "address": "BmfgBHamrb6xRxkU33z6Hq4itEZ2K7KSkHdHGpeMYF9m", - "symbol": "RAVEN", - "name": "RAVEN Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BmfgBHamrb6xRxkU33z6Hq4itEZ2K7KSkHdHGpeMYF9m/logo.png" - }, - { - "chainId": 101, - "address": "7re6D7DzKKhFzkqYznoyrc3Wdz1QWVEsou8W1u1G1g3p", - "symbol": "ASS", - "name": "Assaed coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7re6D7DzKKhFzkqYznoyrc3Wdz1QWVEsou8W1u1G1g3p/logo.png", - "tags": ["assaed", "utility-token"], - "extensions": { - "twitter": "https://twitter.com/Ndirxnadix" - } - }, - { - "chainId": 101, - "address": "FTf8LQBKpiBjmbQdqXY84a3bzU9C9Q3hkzVd9nzb8kz6", - "symbol": "FIFA", - "name": "SOCCER WORLD", - "decimals": 3, - "logoURI": "https://github.com/vdbhatt3/Soccer/blob/main/docs/soccer.png", - "tags": ["game-token", "meme-token"] - }, - { - "chainId": 101, - "address": "8AFGosRN65dAsXdhXK7rGb82vuQ7BVn1iQQJuhEwaHNL", - "symbol": "OMPT", - "name": "OnlyMP3", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8AFGosRN65dAsXdhXK7rGb82vuQ7BVn1iQQJuhEwaHNL/logo.png", - "extensions": { - "twitter": "https://twitter.com/_onlymp3", - "website": "https://onlymp3.com" - } - }, - { - "chainId": 101, - "address": "64wFMuUZQ3KykKrf6Xi9pgpmASLfePiaAhXHqc9kHS4V", - "symbol": "LYS", - "name": "Lysnake", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/64wFMuUZQ3KykKrf6Xi9pgpmASLfePiaAhXHqc9kHS4V/logo.png", - "tags": ["community-token", "meme-token", "social-token"], - "extensions": { - "twitter": "https://twitter.com/LysnakeYT", - "website": "https://lysnakeit.fr" - } - }, - { - "chainId": 101, - "address": "puppy8Lhckjh768j7vCPLr4244a64ZqioskcXxyb4rC", - "symbol": "PUPPY", - "name": "Puppy", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/puppy8Lhckjh768j7vCPLr4244a64ZqioskcXxyb4rC/logo.png", - "tags": ["meme", "Community-token", "utility-token"], - "extensions": { - "discord": "https://discord.gg/Vzp5BYr4FC", - "serumV3Usdc": "GQQKuYXvdDV8qYMAaZDMuXYdhk1cokWhtSqULWnHZ6Gy", - "website": "https://puppycoin.eu/" - } - }, - { - "chainId": 101, - "address": "88GEfTd3JKyQtRE3kYCup73MFe2gqHtZSCgqaUB5zDHV", - "symbol": "aeWBTC", - "name": "Wrapped BTC (Allbridge from Ethereum)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/qfnqNqs3nCAHjnyCgLRDbBtq4p2MtHZxw8YjSyYhPoL/logo.png", - "extensions": { - "coingeckoId": "wrapped-bitcoin" - } - }, - { - "chainId": 101, - "address": "2ASbApnFVSTp2RJvMLgLVfbDwJvu1FRXdhJWrGs89Lhj", - "symbol": "aeMIM", - "name": "Wrapped MIM (Allbridge from Ethereum)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2ASbApnFVSTp2RJvMLgLVfbDwJvu1FRXdhJWrGs89Lhj/logo.png", - "extensions": { - "coingeckoId": "magic-internet-money" - } - }, - { - "chainId": 101, - "address": "BAexggGFsiLCKr17cSZF12wkHd8BkR1DBhzuSb78WTR2", - "symbol": "aeFEI", - "name": "Wrapped FEI (Allbridge from Ethereum)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BAexggGFsiLCKr17cSZF12wkHd8BkR1DBhzuSb78WTR2/logo.png", - "extensions": { - "coingeckoId": "fei-usd" - } - }, - { - "chainId": 101, - "address": "FdvkkCbCgYht1xTR1W9MBJhEF1JEPVhHtW1NXBYRzZts", - "symbol": "afBTC", - "name": "Wrapped BTC (Allbridge from Fantom)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/qfnqNqs3nCAHjnyCgLRDbBtq4p2MtHZxw8YjSyYhPoL/logo.png", - "extensions": { - "coingeckoId": "wrapped-bitcoin" - } - }, - { - "chainId": 101, - "address": "BiryxNvVTABRs3pEE4fvVuu4d17aAYEsNmcPnJ8E8WeT", - "symbol": "afETH", - "name": "Wrapped ETH (Allbridge from Fantom)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FeGn77dhg1KXRRFeSwwMiykZnZPw5JXW6naf2aQgZDQf/logo.png", - "extensions": { - "coingeckoId": "weth" - } - }, - { - "chainId": 101, - "address": "Grk6b4UMRWkgyq4Y6S1BnNRF4hRgtnMFp7Sorkv6Ez4u", - "symbol": "afUSDC", - "name": "Wrapped USDC (Allbridge from Fantom)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BXXkv6z8ykpG1yuvUDPgh732wzVHB69RnB9YgSYh3itW/logo.png", - "tags": ["stablecoin"], - "extensions": { - "coingeckoId": "usd-coin" - } - }, - { - "chainId": 101, - "address": "HjUhUzi6fVkY1BndaSc4Dcg2mCzvnqzXjVJtXsj78ver", - "symbol": "afDAI", - "name": "Wrapped DAI (Allbridge from Fantom)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FYpdBuyAHSbdaAyD1sKkxyLWbAP8uUW9h6uvdhK74ij1/logo.png", - "tags": ["stablecoin"], - "extensions": { - "coingeckoId": "dai" - } - }, - { - "chainId": 101, - "address": "6JbKyQenGQgnCx7ctmBC4F1ZYsnZdLpchf7F49ywLLUX", - "symbol": "POG", - "name": "POGGERS COIN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6JbKyQenGQgnCx7ctmBC4F1ZYsnZdLpchf7F49ywLLUX/logo.jpg", - "tags": ["community-token", "meme-token"] - }, - { - "chainId": 101, - "address": "H3JwKryBPTaH3meBcW5qYZVGTv5gceCYMQwmbmWZUzX9", - "symbol": "HIELON", - "name": "Hi Elon Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/H3JwKryBPTaH3meBcW5qYZVGTv5gceCYMQwmbmWZUzX9/logo.png" - }, - { - "chainId": 101, - "address": "B6NyNs3k2DZm6XYNL5wyC8sWEkEL4S8eekonRaSjjD7B", - "symbol": "TrumpcoinXSOL", - "name": "TRUMPXSOL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/B6NyNs3k2DZm6XYNL5wyC8sWEkEL4S8eekonRaSjjD7B/logo.png", - "extensions": { - "twitter": "https://twitter.com/trump_sol", - "website": "https://www.trumpcoinxsol.com" - } - }, - { - "chainId": 101, - "address": "8pxVzXsV19u9NStX9TTjafaCS6JDt7Es2wRJ9h319jFy", - "symbol": "Luna", - "name": "Lunaria", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8pxVzXsV19u9NStX9TTjafaCS6JDt7Es2wRJ9h319jFy/logo.png", - "tags": ["stablecoin"], - "extensions": { - "discord": "https://discord.gg/3tsYkuw5G9" - } - }, - { - "chainId": 101, - "address": "BhGjzKt8tU8YD78WEL7Tag6e4DA5kRCZFBCuFsQMy9Tm", - "symbol": "EGG", - "name": "Egg Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BhGjzKt8tU8YD78WEL7Tag6e4DA5kRCZFBCuFsQMy9Tm/logo.png" - }, - { - "chainId": 101, - "address": "7efKNiTv3jsiqesUPaujCKoFM3d1Lj7qPybcrggQMCcj", - "symbol": "SFBALL", - "name": "Solana Football", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7efKNiTv3jsiqesUPaujCKoFM3d1Lj7qPybcrggQMCcj/logo.png" - }, - { - "chainId": 101, - "address": "5i7VMjLqZGmnNZREzGFPqxT6c6f4k7oTasbfQMpZWgs8", - "symbol": "HGM", - "name": "Hagim", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5i7VMjLqZGmnNZREzGFPqxT6c6f4k7oTasbfQMpZWgs8/logo.png", - "tags": ["community-token", "hagim-token", "hagim-floki", "nfts"] - }, - { - "chainId": 101, - "address": "C9PXceoq8uho2RZDGdtxYmyGYXeJUABaUP4qn37wQCgB", - "symbol": "poUSDC", - "name": "Pole Aggregator USDC", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/C9PXceoq8uho2RZDGdtxYmyGYXeJUABaUP4qn37wQCgB/USDC.svg", - "tags": ["pole", "aggregator"], - "extensions": { - "website": "https://pole.finance/" - } - }, - { - "chainId": 101, - "address": "3oePHsi4fhoyuLAjqXEgBUPB1cs4bP9A8cZpc1dATS9c", - "symbol": "CHEEZE", - "name": "Cheeze", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3oePHsi4fhoyuLAjqXEgBUPB1cs4bP9A8cZpc1dATS9c/logo.png", - "extensions": { - "website": "https://www.ratbastard.io" - } - }, - { - "chainId": 101, - "address": "Ac7Q9QfNtwcjsDogkDh1rduRPJX21Tqe52t9NHXCfKRF", - "symbol": "ENDR", - "name": "Ender", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Ac7Q9QfNtwcjsDogkDh1rduRPJX21Tqe52t9NHXCfKRF/logo.png", - "tags": ["community-token", "meme-token"], - "extensions": { - "website": "https://discord.gg/4JzJfcMw8H" - } - }, - { - "chainId": 101, - "address": "stedjBnitxnJCRuWfsHP5x7pjXQhHsvbQMwq5ip8jQN", - "symbol": "PANDA-WHALE", - "name": "Panda Whale Collectible", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/stedjBnitxnJCRuWfsHP5x7pjXQhHsvbQMwq5ip8jQN/logo.png", - "tags": ["nft"], - "extensions": { - "discord": "https://discord.gg/nPSXvdJpvz", - "telegram": "https://t.me/pandacoin_announcements", - "twitter": "https://twitter.com/pandacoin_fi", - "website": "https://pandacrypto.org/" - } - }, - { - "chainId": 101, - "address": "9qTA3A113oG94ppSpiJTwWCyj44wyNcgPAs5i9d7QQne", - "symbol": "$CULT", - "name": "Culture Coin", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9qTA3A113oG94ppSpiJTwWCyj44wyNcgPAs5i9d7QQne/logo.png", - "tags": ["nft-token"], - "extensions": { - "twitter": "https://twitter.com/vulturesnft", - "website": "https://culturevultures.io" - } - }, - { - "chainId": 101, - "address": "Frog8vt6gmuuUuuerd7ispP6yavssBUtMpEP5DCEuUgD", - "symbol": "$FROG", - "name": "Frog", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Frog8vt6gmuuUuuerd7ispP6yavssBUtMpEP5DCEuUgD/logo.png", - "extensions": { - "twitter": "https://twitter.com/pepepunksnft", - "website": "https://pepepunks.net" - } - }, - { - "chainId": 101, - "address": "FUHEdLxGtu2cpWuTX4u9Md8hYEb2WKScJXE2pTh9AUWt", - "symbol": "$DMT", - "name": "DMT", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FUHEdLxGtu2cpWuTX4u9Md8hYEb2WKScJXE2pTh9AUWt/logo.png", - "tags": ["community-token", "meme-token"], - "extensions": { - "discord": "https://discord.gg/X8xgfTk3bT", - "twitter": "https://twitter.com/SolMushies", - "website": "https://solmushies.io/" - } - }, - { - "chainId": 101, - "address": "7H4Co5vUfRGuYCHFitwCr2iCvKpv7QiRA8hFfwa1y4x3", - "symbol": "DOM", - "name": "Dominus", - "decimals": 17, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7H4Co5vUfRGuYCHFitwCr2iCvKpv7QiRA8hFfwa1y4x3/logo.png", - "extensions": { - "website": "https://www.dominus.finance" - } - }, - { - "chainId": 101, - "address": "Gz1xDkMQzBbGt5fVekmUBQdWaKSgbSfKBcPjnHRF6W21", - "symbol": "TRICCI", - "name": "tricci totodu30", - "decimals": 7, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Gz1xDkMQzBbGt5fVekmUBQdWaKSgbSfKBcPjnHRF6W21/logo.png", - "tags": ["tricci-token"], - "extensions": { - "twitch": "https://www.twitch.tv/lifep4k" - } - }, - { - "chainId": 101, - "address": "9Jog79BFVaD2eiR4evZvXDqvdphd62etqwqCPEM325uq", - "symbol": "ALPS", - "name": "Alpstake Ownership", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9Jog79BFVaD2eiR4evZvXDqvdphd62etqwqCPEM325uq/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/alpstake" - } - }, - { - "chainId": 101, - "address": "6j14WyX1Ag2pLWvn99euK4xp2VcZD62VeJv2iwCrYmT8", - "symbol": "$KSH", - "name": "Keeshond Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6j14WyX1Ag2pLWvn99euK4xp2VcZD62VeJv2iwCrYmT8/logo.png", - "tags": ["Meme-Token", "NFT"], - "extensions": { - "twitter": "https://twitter.com/KeeshondC", - "website": "https://keeshondcoin.com/" - } - }, - { - "chainId": 101, - "address": "5L2YboFbHAUpBDDJjvDB5M6pu9CW2FRjyDB2asZyvjtE", - "symbol": "PIXL", - "name": "Pixels.so Token", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5L2YboFbHAUpBDDJjvDB5M6pu9CW2FRjyDB2asZyvjtE/logo.png", - "tags": ["utility-token", "NFT", "DeFi"], - "extensions": { - "description": "Borrow Against Your NFTs - Deposit NFTs to Earn Yield.", - "discord": "https://discord.gg/rMdRdhTQ", - "telegram": "https://t.me/pixels_official", - "twitter": "https://twitter.com/pixels_so", - "website": "https://www.pixels.so" - } - }, - { - "chainId": 101, - "address": "G7eETAaUzmsBPKhokZyfbaT4tD9igdZSmfQGEYWem8Sw", - "symbol": "EYE", - "name": "NftEyez Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/NftEyez/assets/main/assets/eye-coin.png", - "tags": ["nfteyez"], - "extensions": { - "discord": "https://discord.gg/mfAvPq9v", - "twitter": "https://twitter.com/eyeznft", - "website": "https://nfteyez.global" - } - }, - { - "chainId": 101, - "address": "7xd71KP4HwQ4sM936xL8JQZCwE4amUko1AdCCf6Znjrt", - "symbol": "FREN", - "name": "SOL Frens", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7xd71KP4HwQ4sM936xL8JQZCwE4amUko1AdCCf6Znjrt/logo.png", - "tags": ["community-token", "meme-token"] - }, - { - "chainId": 101, - "address": "GqvM4xqeegtVgzY5mbEoq8Z9Wf8XpHuAxpg7gXN2dQ37", - "symbol": "FLOW", - "name": "Flower Solana", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GqvM4xqeegtVgzY5mbEoq8Z9Wf8XpHuAxpg7gXN2dQ37/logo.png", - "tags": ["community-token", "meme-token", "MetaVerse"], - "extensions": { - "twitter": "https://twitter.com/FlowerSolana", - "website": "https://www.flowersolana.com/" - } - }, - { - "chainId": 101, - "address": "ADQauiPc85ciT33JTTpxkC5BiTt6zYukWfDYPvZE7nBD", - "symbol": "DOGERACA", - "name": "DogeRaCa", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ADQauiPc85ciT33JTTpxkC5BiTt6zYukWfDYPvZE7nBD/logo.png", - "tags": ["GAME", "MEME", "DEFI", "nft-token"], - "extensions": { - "twitter": "https://twitter.com/doge_raca", - "website": "https://www.dogeraca.org" - } - }, - { - "chainId": 101, - "address": "4KZd4rxAhxyzNmugAVnaedoe8KKNCJfSjPQQBhUaN7Bh", - "symbol": "Orbital", - "name": "Orbital", - "decimals": 4, - "logoURI": "https://github.com/orbital-market/Orbital-Market/blob/main/orbital-static.png", - "tags": ["community-token", "utility-token"] - }, - { - "chainId": 101, - "address": "cxxShYRVcepDudXhe7U62QHvw8uBJoKFifmzggGKVC2", - "symbol": "CHICKS", - "name": "SolChicks", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/cxxShYRVcepDudXhe7U62QHvw8uBJoKFifmzggGKVC2/logo.png", - "tags": ["gaming", "nfts", "utility-token", "community-token"], - "extensions": { - "coingeckoId": "solchicks-token", - "description": "The Leading Play-to-Earn Fantasy Game on Solana", - "discord": "https://discord.gg/solchicks", - "telegram": "https://t.me/solchicksnft", - "twitter": "https://twitter.com/SolChicksNFT", - "website": "https://www.solchicks.io/" - } - }, - { - "chainId": 101, - "address": "8j3hXRK5rdoZ2vSpGLRmXtWmW6iYaRUw5xVk4Kzmc9Hp", - "symbol": "SHARDS", - "name": "SolChicks Shards", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8j3hXRK5rdoZ2vSpGLRmXtWmW6iYaRUw5xVk4Kzmc9Hp/logo.png", - "tags": ["gaming", "nfts", "utility-token", "community-token"], - "extensions": { - "coingeckoId": "solchicks-shards", - "description": "SHARDS is the utility token for SolChicks, the leading play-to-earn fantasy game on Solana", - "discord": "https://discord.gg/solchicks", - "telegram": "https://t.me/solchicksnft", - "twitter": "https://twitter.com/SolChicksNFT", - "website": "https://www.solchicks.io/" - } - }, - { - "chainId": 101, - "address": "7rmV64vLfbrbS5rTFvojYWzCVEn8dnJ9RfSRx3nD6C5E", - "symbol": "MARIO", - "name": "Super Mario", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7rmV64vLfbrbS5rTFvojYWzCVEn8dnJ9RfSRx3nD6C5E/logo.png", - "tags": ["Community-token", "Meme", "NFT"], - "extensions": { - "serumV3Usdc": "GN2TTgnWm7WyMEFZjbtzZL2d7NxhBk4QMZtDdLZUkcqv" - } - }, - { - "chainId": 101, - "address": "iobVLW6ePUrcX7Y4DzW69QDpQt2CkJ6c3SZmaLozibj", - "symbol": "BTCNFT", - "name": "Bitcoin NFT Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/iobVLW6ePUrcX7Y4DzW69QDpQt2CkJ6c3SZmaLozibj/logo.png", - "tags": ["nft-token", "btc-nft"], - "extensions": { - "twitter": "https://twitter.com/btcnftcoin", - "website": "https://btcnftcoin.com/" - } - }, - { - "chainId": 101, - "address": "ANHqBGhAHkkfGo1Jtu2BTbdhSFyh7N43sHv1riHtCNRt", - "symbol": "CUCKOO", - "name": "Cuckoo", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/CuckooDex/static/main/favicon-32x32.png", - "tags": ["utility-token", "community-token", "nft-token"], - "extensions": { - "discord": "https://discord.com/invite/GtxjqTxnZG", - "twitter": "https://twitter.com/cuckoodex", - "website": "https://cuckoodex.com" - } - }, - { - "chainId": 101, - "address": "G9tt98aYSznRk7jWsfuz9FnTdokxS6Brohdo9hSmjTRB", - "symbol": "PUFF", - "name": "PUFF", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/G9tt98aYSznRk7jWsfuz9FnTdokxS6Brohdo9hSmjTRB/logo.png", - "tags": ["utility-token"], - "extensions": { - "coingeckoId": "puff", - "discord": "https://discord.gg/stonedapecrew", - "serumV3Usdc": "FjkwTi1nxCa1S2LtgDwCU8QjrbGuiqpJvYWu3SWUHdrV", - "twitter": "https://twitter.com/stonedapecrew", - "website": "https://www.stonedapecrew.com/" - } - }, - { - "chainId": 101, - "address": "CjsinDkm95vqRTWsRv7A2nyf1br4oMWAZUZHA7xLD5gR", - "symbol": "PFace", - "name": "PrimaFace", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CjsinDkm95vqRTWsRv7A2nyf1br4oMWAZUZHA7xLD5gR/logo.png" - }, - { - "chainId": 101, - "address": "CasshNb6PacBzSwbd5gw8uqoQEjcWxaQ9u9byFApShwT", - "symbol": "Cassia", - "name": "Cassia TOKEN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CasshNb6PacBzSwbd5gw8uqoQEjcWxaQ9u9byFApShwT/cassia_3.jpg", - "tags": ["community-token"] - }, - { - "chainId": 101, - "address": "BhPXDQio8xtNC6k5Bg5fnUVL9kGN8uvRDNwW8MZBu8DL", - "symbol": "BANA", - "name": "Shibana", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BhPXDQio8xtNC6k5Bg5fnUVL9kGN8uvRDNwW8MZBu8DL/Shibana.png", - "tags": ["DeFi", "meme-token", "Meta", "solana", "community-token"], - "extensions": { - "coingeckoId": "shibana", - "discord": "https://discord.com/invite/X8tKR52E32", - "twitter": "https://twitter.com/ShibanaCoin", - "website": "https://www.shibana.io/" - } - }, - { - "chainId": 101, - "address": "D4NXEPTGUcwntfyY3P1w8F7kpLbs2vn4G5LmwDF9ERPY", - "symbol": "BNANA", - "name": "Banana Solana Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/D4NXEPTGUcwntfyY3P1w8F7kpLbs2vn4G5LmwDF9ERPY/logo.png" - }, - { - "chainId": 101, - "address": "v7bs339b8oqXgYGJu4mX9cB8tZrFVSozBjW6QZZKE3m", - "symbol": "GON", - "name": "MetaDrago Token", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/v7bs339b8oqXgYGJu4mX9cB8tZrFVSozBjW6QZZKE3m/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://t.co/ASaaDoQjIi?amp=1", - "twitter": "https://twitter.com/MetaDragoNFT" - } - }, - { - "chainId": 101, - "address": "sinjBMHhAuvywW3o87uXHswuRXb3c7TfqgAdocedtDj", - "symbol": "sIN", - "name": "Wrapped Staked Sol Invictus", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/sinjBMHhAuvywW3o87uXHswuRXb3c7TfqgAdocedtDj/logo.png", - "tags": [ - "decentralizedreserve", - "utility-token", - "DeFi", - "community-token" - ], - "extensions": { - "discord": "https://discord.gg/invictusdao", - "twitter": "https://twitter.com/InvictusDAO", - "website": "https://invictusdao.fi/" - } - }, - { - "chainId": 101, - "address": "AAmGoPDFLG6bE82BgZWjVi8k95tj9Tf3vUN7WvtUm2BU", - "symbol": "RACEFI", - "name": "RaceFi Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AAmGoPDFLG6bE82BgZWjVi8k95tj9Tf3vUN7WvtUm2BU/logo.png", - "tags": ["RaceFi", "Metaverse", "GameFi", "solana", "NFT", "NFT-Gaming"], - "extensions": { - "coingeckoId": "racefi", - "description": "The fist AI/ML Play-to-Earn Racing Game on Solana", - "discord": "https://discord.com/invite/rDX8uwd2sg", - "telegram": "https://t.me/racefi_io", - "website": "https://racefi.io/" - } - }, - { - "chainId": 101, - "address": "AFbX8oGjGpmVFywbVouvhQSRmiW2aR1mohfahi4Y2AdB", - "symbol": "GST", - "name": "GST", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AFbX8oGjGpmVFywbVouvhQSRmiW2aR1mohfahi4Y2AdB/logo.png", - "extensions": { - "website": "https://stepn.com/" - } - }, - { - "chainId": 101, - "address": "7i5KKsX2weiTkry7jA4ZwSuXGhs5eJBEjY8vVxR4pfRx", - "symbol": "GMT", - "name": "GMT", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7i5KKsX2weiTkry7jA4ZwSuXGhs5eJBEjY8vVxR4pfRx/logo.png", - "extensions": { - "website": "https://stepn.com/" - } - }, - { - "chainId": 101, - "address": "DogeLZECE9CthXasBLFxgeA2umEyt8CcV7Jsf6P5ZTFo", - "symbol": "DLANA", - "name": "Dogelana Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DogeLZECE9CthXasBLFxgeA2umEyt8CcV7Jsf6P5ZTFo/logo.png", - "tags": ["social-token", "community-token"], - "extensions": { - "discord": "https://discord.gg/dogelana", - "github": "https://github.com/dogelanaio", - "telegram": "https://t.me/dogelana", - "twitter": "https://twitter.com/dogelana", - "website": "https://dogelana.io" - } - }, - { - "chainId": 101, - "address": "Pika2wSYzve4njHBwcqzp2QZPr8w18hRwAkugf13BxK", - "symbol": "PIKA", - "name": "Pikachu", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Pika2wSYzve4njHBwcqzp2QZPr8w18hRwAkugf13BxK/logo.png", - "tags": ["community-token", "meme", "nft"], - "extensions": { - "serumV3Usdc": "BTtbWNAVB3eYfPUBuztYpxwNQVWYKN7TKU5e8HDPXCd9" - } - }, - { - "chainId": 101, - "address": "FL4r6VCXhKWu5BUPjgzA1ygYEwbcrcChbxiYta5Gyj5v", - "symbol": "BATTLE", - "name": "Battle Drones", - "decimals": 6, - "logoURI": "https://battledronesnft.com/tokenPic.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/jRz63Dsa3p", - "twitter": "https://twitter.com/BattleDronesNFT", - "website": "https://battledronesnft.com/" - } - }, - { - "chainId": 101, - "address": "FxPEv1xy4Tcje2pcJA1Wr4Wgn9rxiJSxHA5qicHi3ivg", - "symbol": "KATJ", - "name": "Katja Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FxPEv1xy4Tcje2pcJA1Wr4Wgn9rxiJSxHA5qicHi3ivg/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "7v5K9VFiqNTWnmkK4wofVfRzG7f7AGQ7WLXLmP91UibU", - "symbol": "DOGExTESLA", - "name": "DogeTesla", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7v5K9VFiqNTWnmkK4wofVfRzG7f7AGQ7WLXLmP91UibU/logo.png", - "tags": ["doge-token", "Tesla", "Doge", "Musk"], - "extensions": { - "twitter": "https://twitter.com/dogetesla_", - "website": "https://www.dogetesla.space" - } - }, - { - "chainId": 101, - "address": "CooQi1ti8NompmbiNENsm1qicdEMqZau9G4FZg5V4bzh", - "symbol": "COO", - "name": "Pigeon Resistance DAO", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/pigeon-resistance/token-list/main/assets/mainnet/CooQi1ti8NompmbiNENsm1qicdEMqZau9G4FZg5V4bzh/logo.png", - "extensions": { - "twitter": "https://twitter.com/pigeonresist", - "website": "https://pigeonresistance.org" - } - }, - { - "chainId": 101, - "address": "55t1PfJngPgMS4c4HeSHPy54VWfkMEk7XBQhSkdz6Cm6", - "symbol": "VOO", - "name": "VooVoo", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/55t1PfJngPgMS4c4HeSHPy54VWfkMEk7XBQhSkdz6Cm6/logo.png", - "tags": ["VOO-token"], - "extensions": { - "website": "https://www.voovoo.io" - } - }, - { - "chainId": 101, - "address": "JF7Cm3UH3BK1mKawg38e5Pfyv7XVL46QvwqbphFX2ij", - "symbol": "CND", - "name": "Conado", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/JF7Cm3UH3BK1mKawg38e5Pfyv7XVL46QvwqbphFX2ij/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/conado" - } - }, - { - "chainId": 101, - "address": "BKSeassCi1Tx1CnmnWQp85JVSBSWBuiMaL3zFUrY1diM", - "symbol": "WON", - "name": "Wonders", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BKSeassCi1Tx1CnmnWQp85JVSBSWBuiMaL3zFUrY1diM/logo.png", - "tags": ["utility-token", "community-token", "social-token"], - "extensions": { - "discord": "https://discord.gg/vP7kqKY", - "website": "https://wondergeek.fr/" - } - }, - { - "chainId": 101, - "address": "7h7SyWJGLXFDm8xn289rEbGnLZhQBcHDFayQ8tcqyLMw", - "symbol": "WST", - "name": "Wallistoken", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/JF7Cm3UH3BK1mKawg38e5Pfyv7XVL46QvwqbphFX2ij/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/Sneazz__" - } - }, - { - "chainId": 101, - "address": "ENJm611c5aM8Hur9f6oqvLyjU6PjyAA63Pxs8EZ4RrNo", - "symbol": "TresLeches", - "name": "Tres Leches Cake", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ENJm611c5aM8Hur9f6oqvLyjU6PjyAA63Pxs8EZ4RrNo/logo.png", - "tags": ["meme-token"], - "extensions": { - "discord": "https://discord.gg/ep29yETXFC", - "twitter": "https://twitter.com/TresLechesToken", - "website": "https://tresleches.finance" - } - }, - { - "chainId": 101, - "address": "D2m2WoHKXdahVwA6gUxqfuCgxbUWv1S9y2p4mMRqnuWi", - "symbol": "LechesCake", - "name": "Tres Leches Cake NFT", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/D2m2WoHKXdahVwA6gUxqfuCgxbUWv1S9y2p4mMRqnuWi/logo.png", - "tags": ["NFT", "utility-token"], - "extensions": { - "discord": "https://discord.gg/ep29yETXFC", - "twitter": "https://twitter.com/treslechestoken", - "website": "https://tresleches.finance" - } - }, - { - "chainId": 101, - "address": "93JDWR3ygdx5g2z6zMvj7Ckkwx8viVDPdCDRFBSoyAr6", - "symbol": "PRB", - "name": "PROBE", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/93JDWR3ygdx5g2z6zMvj7Ckkwx8viVDPdCDRFBSoyAr6/logo.png", - "tags": ["social-token", "community-token", "meme-token"], - "extensions": { - "discord": "https://discord.gg/7RXbNDhS", - "telegram": "https://t.me/enzohallot", - "twitter": "https://twitter.com/EnzoHallot", - "website": "https://probe.tech/" - } - }, - { - "chainId": 101, - "address": "BDVKYcMXKwkWcPkUtdLSMC98jeu8jB9vLywXQP7yrfnD", - "symbol": "DB", - "name": "Diamond Block", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BDVKYcMXKwkWcPkUtdLSMC98jeu8jB9vLywXQP7yrfnD/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/HH8UuUHEqs", - "instagram": "https://instagram.com/solblockpunks", - "twitter": "https://twitter.com/solblockpunks", - "website": "https://solblockpunks.com" - } - }, - { - "chainId": 101, - "address": "CVj6FV4HmhEsn7xQXCjj5iqbDQHB7hQ8AwZjB6P8UMDu", - "symbol": "CoW", - "name": "Culture of Women Token", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/cultureofwomen/CoW-token/CoW.jpeg", - "tags": ["utility-token", "meme-token", "nfts"], - "extensions": { - "discord": "https://discord.gg/cultureofwomen", - "twitter": "https://twitter.com/CultureOfWomen", - "website": "https://cultureofwomen.com/" - } - }, - { - "chainId": 101, - "address": "DWkd7xS3cDXJSMZqXHWN9oNgyCq49x7AdUqdadhTKW43", - "symbol": "TETRA", - "name": "Tetracoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DWkd7xS3cDXJSMZqXHWN9oNgyCq49x7AdUqdadhTKW43/logo.png", - "tags": ["community-token", "social-token"], - "extensions": { - "discord": "https://discord.gg/5Wq4aBjx", - "telegram": "https://t.me/tetracoinofficial" - } - }, - { - "chainId": 101, - "address": "HnZiKrSKYQkEfzjQs6qkvuGbBmrBP9YzjB1SMM7tiGZ1", - "symbol": "SUCH", - "name": "Such Shiba", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HnZiKrSKYQkEfzjQs6qkvuGbBmrBP9YzjB1SMM7tiGZ1/logo.png", - "tags": ["community-token", "social-token", "meme-token"], - "extensions": { - "twitter": "https://twitter.com/SuchShibas" - } - }, - { - "chainId": 101, - "address": "8kQyyeurfv2upeMaZZgyyyPGev5rq8phgnUx8khA5T7D", - "symbol": "DZU", - "name": "Dzungaria DAO", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8kQyyeurfv2upeMaZZgyyyPGev5rq8phgnUx8khA5T7D/logo.png", - "tags": [ - "decentralizedreserve", - "utility-token", - "DeFi", - "community-token" - ], - "extensions": { - "discord": "https://discord.gg/SFKrDXGr", - "twitter": "https://twitter.com/DzungariaDAO", - "website": "https://www.dzungaria.xyz/" - } - }, - { - "chainId": 101, - "address": "UNQtEecZ5Zb4gSSVHCAWUQEoNnSVEbWiKCi1v9kdUJJ", - "symbol": "UNQ", - "name": "UNQ", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/UNQtEecZ5Zb4gSSVHCAWUQEoNnSVEbWiKCi1v9kdUJJ/logo.png", - "tags": ["utility-token"], - "extensions": { - "coingeckoId": "unq", - "coinmarketcap": "https://coinmarketcap.com/currencies/unqclub", - "discord": "https://discord.com/invite/unqnetwork", - "twitter": "https://twitter.com/clubunq", - "website": "https://unq.club/" - } - }, - { - "chainId": 101, - "address": "J9HSQ22QXCFiA5x2QMQVfeUVjhhx365rbF37CCH2LsR4", - "symbol": "SMETA", - "name": "SOLSPHERE METACOIN", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/J9HSQ22QXCFiA5x2QMQVfeUVjhhx365rbF37CCH2LsR4/solspheremeta.png", - "tags": [ - "metaverse", - "virtual-real-estate", - "utility-token", - "community-token", - "play-to-earn" - ], - "extensions": { - "discord": "https://discord.gg/kMYkYVEGPu", - "twitter": "https://twitter.com/SolSphereNFT", - "website": "https://solsphere.io" - } - }, - { - "chainId": 101, - "address": "A4zyBooAFkpfy7osonRJMQ8a6zArGxN5fNXjXo1ZTZK2", - "symbol": "NTCK", - "name": "NetworkChuck Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/theNetworkChuck/crypto/main/NetworkChuckCoin/logo.png", - "tags": ["social-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/networkchuck", - "website": "https://networkchuck.com", - "youtube": "https://www.youtube.com/channel/UC9x0AN7BWHpCDHSm9NiJFJQ" - } - }, - { - "chainId": 101, - "address": "BQ9VGULyxbEWyfNK2TmYctY8wbLQDQ9UPzwSY3WfxT14", - "symbol": "RAGE", - "name": "Solana Rage", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BQ9VGULyxbEWyfNK2TmYctY8wbLQDQ9UPzwSY3WfxT14/logo.png", - "tags": ["meme-token"] - }, - { - "chainId": 101, - "address": "A9bQVYHePdN4LaW7BAXm1aL69SMGZ62LqLkeyPjP3rpN", - "symbol": "TERPS", - "name": "TERPS TOKEN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/A9bQVYHePdN4LaW7BAXm1aL69SMGZ62LqLkeyPjP3rpN/logo.png", - "extensions": { - "twitter": "https://twitter.com/KryptoKronicNFT", - "website": "https://kryptokronic.io/" - } - }, - { - "chainId": 101, - "address": "9VTbmHuiQWK3rTnDLQewg3PbmBRXnuvrKW142Xsm8KWi", - "symbol": "TRMT", - "name": "TIERRA", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9VTbmHuiQWK3rTnDLQewg3PbmBRXnuvrKW142Xsm8KWi/logo.png", - "tags": ["TIERRA"], - "extensions": { - "website": "http://tierrameta.io" - } - }, - { - "chainId": 101, - "address": "HHjoYwUp5aU6pnrvN4s2pwEErwXNZKhxKGYjRJMoBjLw", - "symbol": "PIP", - "name": "PIP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HHjoYwUp5aU6pnrvN4s2pwEErwXNZKhxKGYjRJMoBjLw/logo.svg", - "tags": ["web3", "social-token", "utility-token"], - "extensions": { - "discord": "https://discord.gg/P2AU78UB3e", - "linkedin": "https://www.linkedin.com/company/getpip", - "medium": "https://medium.com/@getpip", - "reddit": "https://www.reddit.com/r/getpip", - "telegram": "https://t.me/getpip", - "twitter": "https://twitter.com/getpipcom", - "website": "https://www.getpip.com", - "youtube": "https://www.youtube.com/channel/UCB0bXqJZTq9li7_3ZOkEwdQ" - } - }, - { - "chainId": 101, - "address": "9Hf6j1UNsSTBAGh7Xng2ig27TYzJQn2MzR6aipUtw18y", - "symbol": "EZS", - "name": "EZsmarts", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/EZsmarts/Solana-repo/main/EZsmarts-Token.png" - }, - { - "chainId": 101, - "address": "BFJ6rAVroCPaYbvgcT11ku4NG4KbfX3gWDGrbEUJ7r34", - "symbol": "KYO", - "name": "KYO", - "decimals": 9, - "logoURI": "https://i.imgur.com/BLTZykc.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "CJy5cjAMuczQpUkKq2dfNAKLttMKefZyzQVJnxsP5ti6", - "symbol": "GRAVITY", - "name": "GRAVITY", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CJy5cjAMuczQpUkKq2dfNAKLttMKefZyzQVJnxsP5ti6/logo.jpg", - "tags": ["community-token"], - "extensions": { - "discord": "https://discord.com/invite/gravityToken" - } - }, - { - "chainId": 101, - "address": "AtgKBiAwAmAbSNaZCSfvvCCuypsqbHgry2MmaE1PUh2Z", - "symbol": "SOLsquid", - "name": "SOLsquid", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AtgKBiAwAmAbSNaZCSfvvCCuypsqbHgry2MmaE1PUh2Z/logo.png", - "tags": ["community-token"], - "extensions": { - "discord": "https://discord.gg/2tgb7cft6u", - "telegram": "https://t.me/SOLsquid", - "twitter": "https://twitter.com/SOLsquidToken" - } - }, - { - "chainId": 103, - "address": "6W5L2kBemn9sLWNdpDqZkFU8CjHfRhHZuG4tpfexfWYp", - "symbol": "CHB", - "name": "Cheeseburger", - "decimals": 9, - "logoURI": "https://www.mcdonalds.com/is/image/content/dam/usa/nfl/nutrition/items/hero/desktop/t-mcdonalds-Double-Cheeseburger.jpg", - "tags": ["community-token"] - }, - { - "chainId": 101, - "address": "9JK1KNvGdWvZUX783nULvDZaZMVhdzohL2dKUUkjW2jZ", - "symbol": "NINJA/USDC", - "name": "ATRIX LP Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FgX1WD9WzMU3yLwXaFSarPfkgzjLb2DZCqmkx9ExpuvJ/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://www.atrix.finance/" - } - }, - { - "chainId": 101, - "address": "7K5AQHswmRMNCFQjT9y8DyQeDMGDvAEjVRob8sJdGrsN", - "symbol": "ATCOIN", - "name": "ATCOIN", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/AbdallaMalik/ATWORLD/ATCOINtoken/ATCOIN-LOGO.png", - "tags": ["community-token"], - "extensions": { - "telegram": "https://t.me/atworldcoin", - "twitter": "https://twitter.com/atworldcoin", - "website": "http://atcoin.club" - } - }, - { - "chainId": 101, - "address": "79MEbJ299WbsWbE33q2GSRDJdQoVYzm8JXUMBfbASnJk", - "symbol": "BDG", - "name": "BidOn Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/79MEbJ299WbsWbE33q2GSRDJdQoVYzm8JXUMBfbASnJk/logo.png" - }, - { - "chainId": 101, - "address": "BoaXkBim5WC4KPKdCCoQMoQDfypndQu1dRuicvtUxhE5", - "symbol": "GREG", - "name": "GREGORY TOKEN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BoaXkBim5WC4KPKdCCoQMoQDfypndQu1dRuicvtUxhE5/logo.png" - }, - { - "chainId": 101, - "address": "BXVR8wqs8ixPMHnuUq65buJQmimwG9WG5pNKKKBRd2S4", - "symbol": "GUMA", - "name": "GUM ARABIC", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/AbdallaMalik/GUMA/logo/GUMA.jpg", - "tags": ["Trading-token"], - "extensions": { - "facebook": "https://facebook.com/gumarabictoken", - "telegram": "https://t.me/gumarabictoken", - "twitter": "https://twitter.com/gum_token", - "website": "http://gumarabic.io" - } - }, - { - "chainId": 101, - "address": "86xL1LZhW7wj49Y6ttJ58ZeL9hDnpYUiCjVBPzHJSDiJ", - "symbol": "WHALE", - "name": "Panda WHALE Collectible", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/86xL1LZhW7wj49Y6ttJ58ZeL9hDnpYUiCjVBPzHJSDiJ/logo.png", - "tags": ["nft"], - "extensions": { - "discord": "https://discord.gg/nPSXvdJpvz", - "telegram": "https://t.me/pandacoin_announcements", - "twitter": "https://twitter.com/pandacoin_fi", - "website": "https://pandacrypto.org/" - } - }, - { - "chainId": 101, - "address": "BYvRESCxiFvzz2yTckNB6wi8yuYiobQU7NHMUbVE7Wu5", - "symbol": "DOLPHIN", - "name": "Panda DOLPHIN Collectible", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BYvRESCxiFvzz2yTckNB6wi8yuYiobQU7NHMUbVE7Wu5/logo.png", - "tags": ["nft"], - "extensions": { - "discord": "https://discord.gg/nPSXvdJpvz", - "telegram": "https://t.me/pandacoin_announcements", - "twitter": "https://twitter.com/pandacoin_fi", - "website": "https://pandacrypto.org/" - } - }, - { - "chainId": 101, - "address": "HDXJnHUdi11qNb2aJ4xVaAvvhgnrRVDbZ9ogw3d81ZYc", - "symbol": "EGEM", - "name": "ForgeBots Electrogems", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HDXJnHUdi11qNb2aJ4xVaAvvhgnrRVDbZ9ogw3d81ZYc/logo.png" - }, - { - "chainId": 101, - "address": "5BXRYnEftT8aRnPBjPkz2nsXX6muFUUTanx78GN42qKQ", - "symbol": "EXPO", - "name": "EXPOSURE", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5BXRYnEftT8aRnPBjPkz2nsXX6muFUUTanx78GN42qKQ/logo.png", - "tags": ["utility-token", "artsdigital-token"], - "extensions": { - "website": "http://arts.digital" - } - }, - { - "chainId": 101, - "address": "NYANnvzqZeKmkNoHF1bcdqWfTvxLfjaDKTi2tksNapJ", - "symbol": "NYAN", - "name": "Nyan Cat", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/NYANnvzqZeKmkNoHF1bcdqWfTvxLfjaDKTi2tksNapJ/logo.png", - "tags": ["meme-token", "nft", "utility-token", "community-token"], - "extensions": { - "discord": "https://discord.gg/NfVj6T8qvh", - "twitter": "https://twitter.com/SolNyanCat", - "website": "https://solnyan.com/" - } - }, - { - "chainId": 101, - "address": "89MrW4Y3UxWqVAbJM2xfqy9uGNE7tMFT6uCtn6i2XH7x", - "symbol": "SMOL", - "name": "SMOL Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/89MrW4Y3UxWqVAbJM2xfqy9uGNE7tMFT6uCtn6i2XH7x/logo.png", - "tags": ["nft", "utility-token", "community-token"], - "extensions": { - "discord": "https://discord.gg/fqRa2jt9Q4", - "twitter": "https://twitter.com/BabySolanaMBS", - "website": "https://babysolanamonkey.business/" - } - }, - { - "chainId": 101, - "address": "CiDHbwzXqKC2gchuiwbkP36ktHSJV8QHAoJ5FTa8s6QS", - "symbol": "MKC", - "name": "Mickey Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CiDHbwzXqKC2gchuiwbkP36ktHSJV8QHAoJ5FTa8s6QS/logo.png", - "tags": ["utility-token", "meme", "dex", "amm", "nft"], - "extensions": { - "discord": "https://discord.io/mickeycoin", - "telegram": "https://t.me/mickeycoin_official", - "twitter": "https://twitter.com/mickeycoin_sol", - "website": "https://mickeycoins.com" - } - }, - { - "chainId": 101, - "address": "4CuBdvKbwy1wo8o9sDs7mUQZTL1weKitpBA6X2D5a1nX", - "symbol": "NSA", - "name": "Nebula Stars Anthill", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/nonconforme/nebula_stars_anthill/nebula_logo_mini.png", - "tags": ["social-token", "farming", "nebula"], - "extensions": { - "telegram": "https://t.me/nebula_android_application", - "website": "https://nebula.spl-token.com" - } - }, - { - "chainId": 101, - "address": "boba6XbsqCYTciFuzEmqAtBmdLVPzfj1Ui3wRBv8rQR", - "symbol": "BOBA", - "name": "Boba", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/boba6XbsqCYTciFuzEmqAtBmdLVPzfj1Ui3wRBv8rQR/logo.png", - "extensions": { - "discord": "https://discord.com/invite/YRtzm69Qzd", - "medium": "https://boba-so.medium.com", - "telegram": "https://t.me/boba_so", - "twitter": "https://twitter.com/boba_solana", - "website": "https://boba.so" - } - }, - { - "chainId": 101, - "address": "6TQYoqKGwtUYhPQUaG9SyzXJuwX38xPFVtHs3B1VRav4", - "symbol": "FAUCI", - "name": "Fauci Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6TQYoqKGwtUYhPQUaG9SyzXJuwX38xPFVtHs3B1VRav4/logo.png", - "tags": ["meme-token"], - "extensions": { - "discord": "https://discord.gg/QBTpckzaTx" - } - }, - { - "chainId": 101, - "address": "BTmj9HU4iQeDGG9k9v1a1tmFJCF1wyDaTJYidPPo2Nk", - "symbol": "FLWR", - "name": "Flower", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BTmj9HU4iQeDGG9k9v1a1tmFJCF1wyDaTJYidPPo2Nk/logo.png", - "extensions": { - "discord": "https://discord.gg/solflowersnft", - "twitter": "https://twitter.com/solflowers_io", - "website": "https://www.solflowers.io/" - } - }, - { - "chainId": 101, - "address": "DmnQJhJ2jjFrotQsySdMzGc7hq9x8snb3rPT2qyShoC8", - "symbol": "BEACH", - "name": "BEACH", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DmnQJhJ2jjFrotQsySdMzGc7hq9x8snb3rPT2qyShoC8/logo.png", - "tags": ["community-token", "meme-token"], - "extensions": { - "discord": "https://discord.gg/VAybaUNMsD", - "twitter": "https://twitter.com/beachdaysio", - "website": "https://beachdays.io/" - } - }, - { - "chainId": 101, - "address": "ForaXiBD8K3a7C1PwxV1xqDHs5aV8y8nWRmHebafdkes", - "symbol": "FORA", - "name": "Fora", - "decimals": 9, - "logoURI": "https://www.fora.co/images/Fora+Logo+Solana/icon.png", - "tags": ["fora", "utility-token"], - "extensions": { - "description": "Co-founders hmu -\u003e ryan@kanelabs.com", - "discord": "https://discord.gg/6erTzYChXh", - "website": "https://fora.co" - } - }, - { - "chainId": 101, - "address": "GHAhTrgtYW7jRkojQQWPGkMbmG5jGK25QBu6FSj5tvZ5", - "symbol": "GLTR", - "name": "Glitter", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GHAhTrgtYW7jRkojQQWPGkMbmG5jGK25QBu6FSj5tvZ5/logo.png", - "tags": ["coin"], - "extensions": { - "discord": "https://milliononmars.com/discord", - "twitter": "https://twitter.com/MilliononMars", - "website": "https://milliononmars.com" - } - }, - { - "chainId": 101, - "address": "6MpQesMjehBwJzgDRDsbUXqjHetf1LGE94H7FDzRVL9Y", - "symbol": "ThugPenguin", - "name": "Thug Penguin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6MpQesMjehBwJzgDRDsbUXqjHetf1LGE94H7FDzRVL9Y/logo.png", - "tags": ["community-token", "meme", "thug"], - "extensions": { - "serumV3Usdc": "HKYrwWJEhv7yTKFtraNtMWptirAPHsriMVDuUYiGgC4v", - "twitter": "https://twitter.com/ThugTokens", - "website": "https://thugtokens.com/" - } - }, - { - "chainId": 101, - "address": "BzY2yoAPi3tD5xqVqEzrSPu5CSv9Vk7V2fsjJAQLqLv8", - "symbol": "ThugMonkey", - "name": "Thug Monkey", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BzY2yoAPi3tD5xqVqEzrSPu5CSv9Vk7V2fsjJAQLqLv8/logo.png", - "tags": ["community-token", "meme", "thug"], - "extensions": { - "serumV3Usdc": "AgUSpr5zSppSY3Gdz8j1HeKZuyntd3Q9KkjkT2KcYsj", - "twitter": "https://twitter.com/ThugTokens", - "website": "https://thugtokens.com/" - } - }, - { - "chainId": 101, - "address": "Gh6jp5U3yfcJwkZ7RoY6Ak2tgd752dSqBSYwHnfK3gft", - "symbol": "Gangsta", - "name": "Gangsta", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Gh6jp5U3yfcJwkZ7RoY6Ak2tgd752dSqBSYwHnfK3gft/logo.png", - "tags": ["community-token", "meme", "thug"], - "extensions": { - "serumV3Usdc": "FJwGJFcu47vgGHEM6y124HxFuCeg9o5UAgA5skgWsSUv", - "twitter": "https://twitter.com/ThugTokens", - "website": "https://thugtokens.com/" - } - }, - { - "chainId": 101, - "address": "JBK72yMfskz6tkaDCSM6bmaTf6ub7zDZUgBNxTWRAx8p", - "symbol": "ThugPandas", - "name": "Thug Pandas", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/JBK72yMfskz6tkaDCSM6bmaTf6ub7zDZUgBNxTWRAx8p/logo.png", - "tags": ["community-token", "meme", "thug"], - "extensions": { - "serumV3Usdc": "FiJzMSWGzG5kwumYeYZNuRm9ByPj8mF1cFMeks5kRMhg", - "twitter": "https://twitter.com/ThugTokens", - "website": "https://thugtokens.com/" - } - }, - { - "chainId": 101, - "address": "8Au2WcQrgn1oTKfnnaFfb3iMjfdXYp7Y7CrHi8JaNSUZ", - "symbol": "ThugShiba", - "name": "Thug Shiba", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8Au2WcQrgn1oTKfnnaFfb3iMjfdXYp7Y7CrHi8JaNSUZ/logo.png", - "tags": ["community-token", "meme", "thug"], - "extensions": { - "serumV3Usdc": "9UJ3AhPZjpBCupqj3Ch32MEB6RJgyYKAC8zvWLNpx5nn", - "twitter": "https://twitter.com/ThugTokens", - "website": "https://thugtokens.com/" - } - }, - { - "chainId": 101, - "address": "7wKWd1kXz1wM5epW5hsu4Em3GAByGyDc3wr2AspMWjDG", - "symbol": "$UFO", - "name": "Solian UFO Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7wKWd1kXz1wM5epW5hsu4Em3GAByGyDc3wr2AspMWjDG/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "http://discord.gg/jD4SvGwMb3", - "twitter": "https://twitter.com/Solian_s", - "website": "https://soliansnft.netlify.app/" - } - }, - { - "chainId": 101, - "address": "Aeiwkg1ep4YYQRomeZrr1J1hfbu7M36N3BwQ7AFJNCEz", - "symbol": "AGB", - "name": "Angry Bird", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Aeiwkg1ep4YYQRomeZrr1J1hfbu7M36N3BwQ7AFJNCEz/logo.png", - "tags": [ - "utility-token", - "meme-token", - "nfts", - "meme-token", - "community-token", - "game-token", - "metaverse-token" - ], - "extensions": { - "twitter": "https://twitter.com/AngryBirdLabs", - "website": "https://angrybird.org" - } - }, - { - "chainId": 101, - "address": "7teDwSD3gCyWiBMFBvhojKWUcCE8rV6Qi39jfB8TZL3i", - "symbol": "FUD", - "name": "Forge Utah DAO Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7teDwSD3gCyWiBMFBvhojKWUcCE8rV6Qi39jfB8TZL3i/logo.png", - "tags": ["community-token"], - "extensions": { - "twitter": "https://twitter.com/ForgeUtah" - } - }, - { - "chainId": 101, - "address": "FvuVVPH5UYqe61UkEnNfPTWbgc5DBLGqW5pjz4iquwPr", - "symbol": "SHKL", - "name": "Shekel Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FvuVVPH5UYqe61UkEnNfPTWbgc5DBLGqW5pjz4iquwPr/logo.svg", - "tags": ["community-token", "meme-token"] - }, - { - "chainId": 101, - "address": "GiaaHW6H1gYM6ygzug2gSpGMAy7NAMCQGHsT4LgXZxwY", - "symbol": "FACT", - "name": "FACT Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GiaaHW6H1gYM6ygzug2gSpGMAy7NAMCQGHsT4LgXZxwY/logo.png", - "tags": ["FACTToken"], - "extensions": { - "twitter": "https://twitter.com/FactToken" - } - }, - { - "chainId": 101, - "address": "9Tctj47WGuQ8cfnU5eJRRxaJhbnzLssFnb9Ujy79vwxQ", - "symbol": "LBC", - "name": "LobCoins", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9Tctj47WGuQ8cfnU5eJRRxaJhbnzLssFnb9Ujy79vwxQ/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://github.com/ImmTheo" - } - }, - { - "chainId": 101, - "address": "Bqt9y5yQ68dThZNJuoYy5ficCxAvmbYycNR8BsNbiQPk", - "symbol": "NAS", - "name": "Not A Scam Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Bqt9y5yQ68dThZNJuoYy5ficCxAvmbYycNR8BsNbiQPk/logo.png", - "tags": ["notascamtoken"] - }, - { - "chainId": 101, - "address": "7WxzZAPQGeky9eAdgZr2jgznSHcNLaHfZpd9pHpPsfWp", - "symbol": "CHB", - "name": "CHEEBA INU", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7WxzZAPQGeky9eAdgZr2jgznSHcNLaHfZpd9pHpPsfWp/logo.svg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Ceg14BA1ULy2UnBAHqiv1v29m9yzc5E5Ga3mfnz9qeVb", - "symbol": "FLOP", - "name": "FLOPPYX", - "decimals": 20, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Ceg14BA1ULy2UnBAHqiv1v29m9yzc5E5Ga3mfnz9qeVb/logo.png", - "tags": ["floppyx"] - }, - { - "chainId": 101, - "address": "vXV3qR4WifEPiteogi9FDQveVthwrvEeRxpjyQdDHwq", - "symbol": "BDHK", - "name": "Bernard Hackwell", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/bernardhackwell/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BYbhQgLbfrbQJ1ZvDbffVbCuQvM1xn8HhtNGNt7tBCpK", - "symbol": "CITY", - "name": "Manchester City Fan Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BYbhQgLbfrbQJ1ZvDbffVbCuQvM1xn8HhtNGNt7tBCpK/logo.png", - "tags": ["manchester", "city", "fan-token"], - "extensions": { - "discord": "https://discord.gg/UDBRKsEY", - "telegram": "https://t.me/ManCityTokenCommunity", - "twitter": "https://twitter.com/ManCityToken", - "website": "https://citytoken.fund" - } - }, - { - "chainId": 101, - "address": "5WWRMYPchxgh3VmYGPqoq2kfzCtBLxXB9vFH2TeFeR9m", - "symbol": "TPC", - "name": "TOYPOODLE COIN", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5WWRMYPchxgh3VmYGPqoq2kfzCtBLxXB9vFH2TeFeR9m/logo.png", - "tags": ["meme-token"] - }, - { - "chainId": 101, - "address": "9iCpAn9eazRTXsDawhBaPEnirRzBbtYzTn4feZArBEmn", - "symbol": "BEE", - "name": "SOLBEE", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9iCpAn9eazRTXsDawhBaPEnirRzBbtYzTn4feZArBEmn/logo.png" - }, - { - "chainId": 101, - "address": "6F9XriABHfWhit6zmMUYAQBSy6XK5VF1cHXuW5LDpRtC", - "symbol": "RUN", - "name": "Run Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6F9XriABHfWhit6zmMUYAQBSy6XK5VF1cHXuW5LDpRtC/RunGear.png", - "tags": ["utility-token"], - "extensions": { - "coingeckoId": "run", - "discord": "https://discord.com/invite/V2f74X8Zrt", - "telegram": "https://t.me/RunNode", - "twitter": "https://twitter.com/runnode", - "website": "https://runnode.com" - } - }, - { - "chainId": 101, - "address": "DVmRa87hDpCKHhWr8XEy1G4GMhB9QjaVUgjSspdihNcC", - "symbol": "JGR", - "name": "JAGUAR", - "decimals": 8, - "logoURI": "https://pbs.twimg.com/media/FDi18oAWQAIEdWX?format=jpg\u0026name=240x240", - "tags": ["mem-token"], - "extensions": { - "twitter": "https://twitter.com/Samurai37685862" - } - }, - { - "chainId": 101, - "address": "DzyZr2caKBt6cTzeXwx3VMPa91kvQg8uejH4xts9LmtJ", - "symbol": "$HIT", - "name": "Shitcoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DzyZr2caKBt6cTzeXwx3VMPa91kvQg8uejH4xts9LmtJ/logo.png", - "tags": ["meme-token", "meme"] - }, - { - "chainId": 101, - "address": "EiJEQs1Hdo41RWvdFeRJi1umZLuvkgBYbipWS7Udpdxc", - "symbol": "ACE", - "name": "ACEVERSE", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EiJEQs1Hdo41RWvdFeRJi1umZLuvkgBYbipWS7Udpdxc/logo.png", - "tags": ["community-token"], - "extensions": { - "website": "https://www.aceverse.net" - } - }, - { - "chainId": 101, - "address": "2KozeiQ6xnZsLRpjv9KfJdYbvzzLVttRQZ8HT7ibdsX9", - "symbol": "107", - "name": "107 Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2KozeiQ6xnZsLRpjv9KfJdYbvzzLVttRQZ8HT7ibdsX9/logo.png", - "tags": ["utility-token", "community-token"] - }, - { - "chainId": 101, - "address": "DiCDmDzHBGBiACK2nDzUpp9hyuFbSAgsqUttwdnAsVNg", - "symbol": "TEST", - "name": "SPL Test Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DiCDmDzHBGBiACK2nDzUpp9hyuFbSAgsqUttwdnAsVNg/logo.png", - "tags": ["test-token"], - "extensions": { - "website": "https://www.test.bg/" - } - }, - { - "chainId": 101, - "address": "ALohVojeKow4qwNBP1vD11YjQ8cpLMJgCP55asRGBxDR", - "symbol": "RDOG", - "name": "RoulDog", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ALohVojeKow4qwNBP1vD11YjQ8cpLMJgCP55asRGBxDR/logo.png", - "tags": ["meme-token"] - }, - { - "chainId": 101, - "address": "GjzLwTZvhdhswB1oyLZwH3tvL24Tv87UBmhNNnBgF42B", - "symbol": "NUNI", - "name": "Nuni Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GjzLwTZvhdhswB1oyLZwH3tvL24Tv87UBmhNNnBgF42B/logo.png" - }, - { - "chainId": 101, - "address": "7EpBKD7A6F8dpms4ZAC9mkKSnzHeEwx4sHi82G65rMh2", - "symbol": "SFT", - "name": "SolFortune Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7EpBKD7A6F8dpms4ZAC9mkKSnzHeEwx4sHi82G65rMh2/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.com/invite/DMK6q2Gp5y", - "twitter": "https://twitter.com/SolFortuneNFT", - "website": "https://solfortune.com" - } - }, - { - "chainId": 101, - "address": "2Dk6yiK64X77sGehh9uqTEeBkd7xtLcspWRAjYZDUydu", - "symbol": "1000X", - "name": "1000X Exchange Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Dk6yiK64X77sGehh9uqTEeBkd7xtLcspWRAjYZDUydu/logo.png" - }, - { - "chainId": 101, - "address": "BcZP34sFyzM28VP44V3vP98Lr1VT97CBewkPFmCx3BnG", - "symbol": "AOD", - "name": "Apes Of Dragons", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BcZP34sFyzM28VP44V3vP98Lr1VT97CBewkPFmCx3BnG/logo.png" - }, - { - "chainId": 101, - "address": "7ahemqNsiXytAvppX1swLVNV8iCRar6zMm6xsoL39XG1", - "symbol": "TOMY", - "name": "TOMMY Token", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7ahemqNsiXytAvppX1swLVNV8iCRar6zMm6xsoL39XG1/logo.png" - }, - { - "chainId": 103, - "address": "CChTcums6omR9BpAZLZVuAfomYvwirLspgkp35nN3QH1", - "symbol": "$WDR", - "name": "Wonderland", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CChTcums6omR9BpAZLZVuAfomYvwirLspgkp35nN3QH1/logo.svg", - "tags": ["Metaverse", "Game-Fi"] - }, - { - "chainId": 101, - "address": "ZvGkPneitqsPfVUK1wdeNPuKoNc8dZTX89MPqbTKFsK", - "symbol": "ICY", - "name": "ICY TOKEN", - "decimals": 9, - "logoURI": "https://peskyicecube.xyz/logo.png", - "tags": ["community-token"], - "extensions": { - "website": "https://peskyicecube.xyz/" - } - }, - { - "chainId": 101, - "address": "AEkmazvpQEs6ZKs6yuv7akiJBbpmAfJquvaem4rsQ7oL", - "symbol": "KUJIBET", - "name": "KujiBet", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AEkmazvpQEs6ZKs6yuv7akiJBbpmAfJquvaem4rsQ7oL/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Sports Betting Exchange.", - "discord": "https://discord.gg/tcDZTPWX", - "twitter": "https://twitter.com/kujibet", - "website": "http://www.kujibet.com", - "youtube": "https://www.youtube.com/channel/UCJqMBbJnEB8CqDT8B56kgEQ" - } - }, - { - "chainId": 101, - "address": "6YLq4dfqH1PcNYEQMWKA7NKm4WF7NE5ajRvaEFrdyyYG", - "symbol": "REWD", - "name": "Reward Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6YLq4dfqH1PcNYEQMWKA7NKm4WF7NE5ajRvaEFrdyyYG/logo.png" - }, - { - "chainId": 101, - "address": "12Nxv2oMuGjdGG3617GWfbhbQkWvcLFC3M6nHFc7fUNQ", - "symbol": "HALAL", - "name": "Halal Coin", - "decimals": 12, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/12Nxv2oMuGjdGG3617GWfbhbQkWvcLFC3M6nHFc7fUNQ/logo.jpg", - "tags": ["meme-coin", "meme-token", "community-token", "fun-token"], - "extensions": { - "instagram": "https://www.instagram.com/halal_coin/?utm_medium=copy_link", - "website": "http://halalcoin.ezyro.com/" - } - }, - { - "chainId": 101, - "address": "87FK6uYhvxQyyvqdUDsQ6SNYbTzyrgwA4RXyZcNLfc36", - "symbol": "MEDSAF", - "name": "MEDSAF TOKEN", - "decimals": 8, - "logoURI": "https://dl.dropboxusercontent.com/s/gf6ici5n15krscy/medsaf.png?dl=0", - "tags": ["medsaf-token", "medical-token"], - "extensions": { - "website": "https://medsaf.com" - } - }, - { - "chainId": 101, - "address": "HnQv3NanZY9HbfLZx5Uu9x5Vrki6P4XkV4GwyaPofopp", - "symbol": "GROWL", - "name": "Growl Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HnQv3NanZY9HbfLZx5Uu9x5Vrki6P4XkV4GwyaPofopp/logo.png", - "tags": ["community-token", "social-token", "utility-token"], - "extensions": { - "description": "Receive Growl By Holding your Leopard NFT", - "twitter": "https://twitter.com/LeopardSNFT", - "website": "https://leopardsyndicate.com/" - } - }, - { - "chainId": 101, - "address": "pskJRUNzJbVu4RaZSUJYfvaTNXmFdRCutegL6P2Y9tG", - "symbol": "PSK", - "name": "Pesky Penguins Droplet", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/pskJRUNzJbVu4RaZSUJYfvaTNXmFdRCutegL6P2Y9tG/logo.png", - "tags": ["utility-token", "solvent-droplet"], - "extensions": { - "discord": "https://discord.gg/thK8BCtQbM", - "github": "https://github.com/solventprotocol", - "medium": "https://medium.com/@solventprotocol", - "serumV3Usdc": "3XRsg7YRVcvZme9rHpATL55WPHrnGXvVL8E7ycNNFu4f", - "telegram": "https://t.me/solventprotocol", - "twitter": "https://twitter.com/solventprotocol", - "website": "https://solvent.xyz" - } - }, - { - "chainId": 101, - "address": "4nQqJkBx3Dnovc6ueEdkJfFr2zi2fc77834czmoymR1b", - "symbol": "WAMO", - "name": "WAMO", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4nQqJkBx3Dnovc6ueEdkJfFr2zi2fc77834czmoymR1b/symbol.png", - "tags": ["community-token", "social-token", "utility-token"], - "extensions": { - "description": "WAMO is the utility token for SolSamos.", - "twitter": "https://twitter.com/solsamosnft" - } - }, - { - "chainId": 101, - "address": "6NWkhj6Xc9o3xhsd7iFpP4Uwv5mtEwwp7i5aTi4ngTSb", - "symbol": "SEED", - "name": "Carnivarous Seed Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6NWkhj6Xc9o3xhsd7iFpP4Uwv5mtEwwp7i5aTi4ngTSb/logo.png", - "extensions": { - "twitter": "https://twitter.com/CarnivarousClub", - "website": "https://carnivarousplant.club" - } - }, - { - "chainId": 101, - "address": "DRmkjPzGMmdKXt6HegGuyGVo2CB4P7fh52aYWhPC4dGk", - "symbol": "GRAAL", - "name": "Kaamelott", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DRmkjPzGMmdKXt6HegGuyGVo2CB4P7fh52aYWhPC4dGk/logo.png", - "tags": ["meme-token", "community-token", "social-token", "kaamelott"], - "extensions": { - "facebook": "https://facebook.com/KaamelottOff/", - "instagram": "https://www.instagram.com/kaamelott.officiel", - "twitter": "https://twitter.com/Kaamelott_tweet" - } - }, - { - "chainId": 101, - "address": "QygDPqqezpdeRs8Rfj5HqCbPc8xRXYg8tn5B5UsHvEc", - "symbol": "Hack", - "name": "Hacklab NFT", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/HacklabAzerbaijan/Hack_NFT/main/logo.png", - "tags": ["NFT", "community"], - "extensions": { - "facebook": "https://www.facebook.com/hacklabaz", - "github": "https://github.com/HacklabAzerbaijan", - "instagram": "https://www.instagram.com/hacklabaz/", - "linkedin": "https://www.linkedin.com/company/hacklabaz/about/", - "website": "https://hacklab.az/" - } - }, - { - "chainId": 101, - "address": "AkJF8CkEjmV5vt3uhDD73dNWxfjTKKdCsqeg2XazWEca", - "symbol": "AoD", - "name": "Apes On Dragons", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AkJF8CkEjmV5vt3uhDD73dNWxfjTKKdCsqeg2XazWEca/logo.png" - }, - { - "chainId": 101, - "address": "8nF3i7zjAgcypnouABM7jPimXaVCX4yR2HV4EfKgrE5z", - "symbol": "WPT", - "name": "WEPOP TOKEN", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8nF3i7zjAgcypnouABM7jPimXaVCX4yR2HV4EfKgrE5z/logo.png", - "tags": ["social-token", "utility-token", "community-token", "fun-token"], - "extensions": { - "description": "The official Wepop.store token", - "facebook": "https://www.facebook.com/Wepopdotstore", - "instagram": "https://instagram.com/wepop.store", - "twitter": "https://twitter.com/Wepop_store", - "website": "https://wepop.store", - "youtube": "https://www.youtube.com/channel/UCofafCOwPRLDuShEfnRswnA" - } - }, - { - "chainId": 101, - "address": "DhEqJyfGTySCCDw1iEoFzP9NdLoc7WJGNLDfSTrN7KCu", - "symbol": "GURGA", - "name": "Gurgamezcla Bull", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DhEqJyfGTySCCDw1iEoFzP9NdLoc7WJGNLDfSTrN7KCu/logo.svg", - "tags": ["meme-token", "milano", "gurga", "gurgamezcla", "bull"], - "extensions": { - "instagram": "https://www.instagram.com/gurgamezcla/", - "website": "https://ggstudio.io" - } - }, - { - "chainId": 101, - "address": "DYQ3oKHyF8DVDr2gm3tLmFzuQ4HTfrE78NvmCh3WJ1XC", - "symbol": "ZEN", - "name": "ZEN", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DYQ3oKHyF8DVDr2gm3tLmFzuQ4HTfrE78NvmCh3WJ1XC/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://hashzen.xyz/" - } - }, - { - "chainId": 101, - "address": "4xT2BPEh3GY5bJveNTngSTqstH5SfH2zAQYAGjfZC8Lq", - "symbol": "JDM", - "name": "JapaneseDomesticMarket Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4xT2BPEh3GY5bJveNTngSTqstH5SfH2zAQYAGjfZC8Lq/logo.png", - "tags": ["tokenomics", "community-token"] - }, - { - "chainId": 101, - "address": "7tE99RKS4RwQxEjvZfh4CQMoQMMTRdL5KQbugsfhNYPg", - "symbol": "FLW", - "name": "Flow Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7tE99RKS4RwQxEjvZfh4CQMoQMMTRdL5KQbugsfhNYPg/logo.png", - "tags": ["utility-token"], - "extensions": { - "serumV3Usdc": "Cc2K7Ao4FtgoquT2ua7zvRuYnQMBSz2s83A5zTyR8h2z", - "website": "https://moveflow.tech" - } - }, - { - "chainId": 101, - "address": "7PGnndsCpy477mry5cumk9pBGe5USP1Tw2DpipHpAWBA", - "symbol": "WORE", - "name": "Wood Ore", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7PGnndsCpy477mry5cumk9pBGe5USP1Tw2DpipHpAWBA/logo.png" - }, - { - "chainId": 101, - "address": "Ao2yQZRaLxV46M1SAtHu9VtnMuZHepMmLHSfAZiyZtxy", - "symbol": "BOOTY", - "name": "Big Booty Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Ao2yQZRaLxV46M1SAtHu9VtnMuZHepMmLHSfAZiyZtxy/logo.png", - "tags": ["meme", "big", "booty", "coin", "adult"], - "extensions": { - "website": "http://bigbootycoin.net/" - } - }, - { - "chainId": 101, - "address": "nzN5LqVJJmbuFMiWETDvVh519MwUp7qdb7QV9r5xA8S", - "symbol": "BTT", - "name": "Beleven Test Token", - "decimals": 12, - "logoURI": "https://www.google.com/imgres?imgurl=https%3A%2F%2Fmedia-exp1.licdn.com%2Fdms%2Fimage%2FC560BAQGT_8JiOehf2Q%2Fcompany-logo_200_200%2F0%2F1553000966716%3Fe%3D2159024400%26v%3Dbeta%26t%3DhL0TXFSFIAtPuEKiA_f6dweSEsOe0TDIbDuH04Kn88Q\u0026imgrefurl=https%3A%2F%2Fua.linkedin.com%2Fcompany%2Fgentledevs---%25D1%2580%25D0%25BE%25D0%25B7%25D1%2580%25D0%25BE%25D0%25B1%25D0%25BA%25D0%25B0-%25D0%25BC%25D0%25BE%25D0%25B1%25D1%2596%25D0%25BB%25D1%258C%25D0%25BD%25D0%25B8%25D1%2585-%25D0%25B4%25D0%25BE%25D0%25B4%25D0%25B0%25D1%2582%25D0%25BA%25D1%2596%25D0%25B2\u0026tbnid=FtHIxqUkOX5DTM\u0026vet=12ahUKEwig672M78X0AhVNCHcKHZ-lB1MQMygBegUIARCVAQ..i\u0026docid=Z-ph3rp8gPo9sM\u0026w=200\u0026h=200\u0026itg=1\u0026q=beleven\u0026ved=2ahUKEwig672M78X0AhVNCHcKHZ-lB1MQMygBegUIARCVAQ", - "tags": ["meme-coin", "meme-token", "community-token", "fun-token"] - }, - { - "chainId": 101, - "address": "EbmCtHX3quEWUJ2AtEyk9zGT7eMxs1Nq4H6nf746qf6a", - "symbol": "CRD", - "name": "Cards Cash", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EbmCtHX3quEWUJ2AtEyk9zGT7eMxs1Nq4H6nf746qf6a/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://discord.gg/rAZyFEv4Fp" - } - }, - { - "chainId": 101, - "address": "EjKuHMKXXjbsc1MbVgXzv7GRWTgBaaTiAvQMKpJPAzTp", - "symbol": "$PNDC", - "name": "Pandar Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EjKuHMKXXjbsc1MbVgXzv7GRWTgBaaTiAvQMKpJPAzTp/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://www.thepandas.io/" - } - }, - { - "chainId": 101, - "address": "HdCxSk9RNi2FofU1VSmcBAxYgJXbb5DHY3K613M66iPC", - "symbol": "UPY", - "name": "Upsilon", - "decimals": 9, - "logoURI": "https://imgur.com/f3K0KJG", - "tags": ["utility-token", "gaming-token"] - }, - { - "chainId": 101, - "address": "7SwZm1Xs6k1tMEXfrAzUtPjZsW2ex8MTJNuqaenWKKSN", - "symbol": "MAGI", - "name": "Crypto Pop Collectibles MAGI", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7SwZm1Xs6k1tMEXfrAzUtPjZsW2ex8MTJNuqaenWKKSN/logo.png", - "tags": [ - "utility-token", - "NFTS", - "Community-Token", - "Game-Token", - "Metaverse-Token" - ], - "extensions": { - "description": "Crypto Pop Collectibles Gaming/Utility Token.", - "discord": "https://discord.gg/Bv4k7npwM2", - "website": "https://cryptopopcollectibles.com" - } - }, - { - "chainId": 101, - "address": "BHcuncUCUxsBw1yyENizoseEAH2Qrt4UxbcukPhQEGPQ", - "symbol": "FCKU", - "name": "FCKU", - "decimals": 9, - "logoURI": "https://i.imgur.com/KG422cB.jpeg", - "tags": ["utility-token", "NFTS", "Community-Token"], - "extensions": { - "description": "Moonverse Launchpad Utility Token", - "website": "https://rascalsnft.com" - } - }, - { - "chainId": 101, - "address": "6wShYhqA2gs3HUAZ4MyaPDpKPBWFJUQQUGaCoy2k1Tgz", - "symbol": "TUT", - "name": "TUT", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6wShYhqA2gs3HUAZ4MyaPDpKPBWFJUQQUGaCoy2k1Tgz/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://www.turntuptikis.com/" - } - }, - { - "chainId": 101, - "address": "3UcBMHnSTCXaxUbP6B96kHcED98DgEnNa9rGKzwXKMf4", - "symbol": "PTR", - "name": "PARTNER COIN", - "decimals": 0, - "logoURI": "https://user-images.githubusercontent.com/10572843/146142464-373cc98d-d147-4e68-84fc-f5e80bb67de6.png", - "tags": ["community-token", "social-token", "utility-token"], - "extensions": { - "coingeckoId": "partneroid", - "description": "PTR is a community token for partnerships and collaborations. Visit OpenFren.com for more info.", - "discord": "https://discord.gg/zjsScRb3nZ", - "twitter": "https://twitter.com/openfren", - "website": "https://openfren.com" - } - }, - { - "chainId": 101, - "address": "H18JF1LhJmNqqRCxc3JaWx4KZ4ACUYeARrr1XbGyzFiD", - "symbol": "SunS", - "name": "Sunflowers seeds", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/H18JF1LhJmNqqRCxc3JaWx4KZ4ACUYeARrr1XbGyzFiD/logo.png", - "tags": ["meme-token", "CATE", "NFT", "community"], - "extensions": { - "website": "https://anasnejb.com" - } - }, - { - "chainId": 103, - "address": "FdGKBaPt6yg4VP2E2aicV2hTJY37cjnh4ouGKkTmL714", - "symbol": "SNKC", - "name": "SnakeChainCoin", - "decimals": 8, - "logoURI": "https://cdn.jsdelivr.net/gh/gowtham-k147/snkctoken/logo.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 103, - "address": "GzQ2JiAkyMDQuw5NGrhZzgcWCyAQdRGQSm9hQzCoLVKr", - "symbol": "FITT", - "name": "Fit Panda Test", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GzQ2JiAkyMDQuw5NGrhZzgcWCyAQdRGQSm9hQzCoLVKr/logo.png", - "tags": ["security-token"] - }, - { - "chainId": 101, - "address": "AXUjVTpm2SWr2fjnQpJbLzy6dSGXPMTjPjWn4LxHjrKC", - "symbol": "DR", - "name": "doro Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AXUjVTpm2SWr2fjnQpJbLzy6dSGXPMTjPjWn4LxHjrKC/logo.png", - "tags": ["utility-token"], - "extensions": { - "facebook": "https://www.facebook.com/meziane.allaoua19/", - "telegram": "https://t.me/Allaouabusiness" - } - }, - { - "chainId": 101, - "address": "CKGZzeufghDK7Sekk4MnP34m1TuEkmhGU25rs6YGeHdP", - "symbol": "XMAS", - "name": "XMAS DAO", - "decimals": 1, - "logoURI": "https://i.postimg.cc/d1V9LHsz/L1032992.jpg", - "tags": ["meme-token"], - "extensions": { - "website": "https://xmasdao.com" - } - }, - { - "chainId": 101, - "address": "8pfJr8MUHjS5tDVajmRCP7abEvEj3oYbYFR6f5jEhPH3", - "symbol": "SLT", - "name": "Soulé Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8pfJr8MUHjS5tDVajmRCP7abEvEj3oYbYFR6f5jEhPH3/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "FoygQKho2MmqyoYxSNx3KHe81kYPKFTCPdncwArUK4VP", - "symbol": "KDX", - "name": "Kodex", - "decimals": 6, - "logoURI": "https://kodingx.com/lib/logos/IconX-KodingX.png", - "tags": ["DeFi", "DApp", "NFT", "community-token", "real-estate-token"], - "extensions": { - "discord": "https://discord.gg/SyyHgAD9XD", - "instagram": "https://www.instagram.com/xkoding/", - "website": "https://www.kodingx.com" - } - }, - { - "chainId": 101, - "address": "SLRExi43rM1yJbwecLZ8AbBRdAcWaCExGLEu4uxPqmo", - "symbol": "SLRE", - "name": "Sollarion Energy", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SLRExi43rM1yJbwecLZ8AbBRdAcWaCExGLEu4uxPqmo/logo.png", - "tags": [ - "utility-token", - "gaming", - "metaverse", - "nfts", - "play-to-earn", - "solana-ecosystem", - "staking" - ], - "extensions": { - "description": "SLRE tokens are built on the Solana blockchain. This token is important for in-game Forge.", - "discord": "https://discord.com/invite/x2DcJ4uRd9", - "instagram": "https://www.instagram.com/solanagalaxynft/", - "twitter": "https://twitter.com/SolanaGalaxyNFT", - "website": "https://sollarion.com/" - } - }, - { - "chainId": 101, - "address": "4Fy8Abq9JTqg8bpTtgUpvxC2gocrbqRTUjTBwgHEjim1", - "symbol": "STT", - "name": "Start Tower Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4Fy8Abq9JTqg8bpTtgUpvxC2gocrbqRTUjTBwgHEjim1/logo.png", - "tags": ["starttower-token", "meta-verse"], - "extensions": { - "twitter": "https://twitter.com/antobreizh", - "website": "https://www.tiktok.com/@qwentosb?" - } - }, - { - "chainId": 101, - "address": "5SYkmkvQHPQ6EyqPjZYc4R4h5Az1avpArHL9vuPr99Bj", - "symbol": "Squad", - "name": "SolSquad", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5SYkmkvQHPQ6EyqPjZYc4R4h5Az1avpArHL9vuPr99Bj/logo.png", - "tags": ["DeFi", "community-token", "Meta", "nft", "metaverse"], - "extensions": { - "discord": "https://discord.gg/RNEPm5u9", - "twitter": "https://twitter.com/solsquadmeta" - } - }, - { - "chainId": 101, - "address": "2qAWVzDrc49b4PD2wtMRMJN4d6cvgTtvANgsvoayvUid", - "symbol": "NASTYA", - "name": "Sweet Princess Nastya", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2qAWVzDrc49b4PD2wtMRMJN4d6cvgTtvANgsvoayvUid/logo.jpg", - "tags": ["friendship-token"] - }, - { - "chainId": 101, - "address": "X2y9KtLFWCRomutronoPoXDmcGrBoyYgMajTFH51EFG", - "symbol": "RII", - "name": "RII TOKEN", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/X2y9KtLFWCRomutronoPoXDmcGrBoyYgMajTFH51EFG/logo.png", - "tags": ["community-token", "meme-token"], - "extensions": { - "website": "https://www.terrestrialtrexclub.com/" - } - }, - { - "chainId": 101, - "address": "EfCMgVD5tCvYH8AtYgJbDmB83X8dgxWTjuAtP7oui1Av", - "symbol": "Mpet", - "name": "Meta Pet Book", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EfCMgVD5tCvYH8AtYgJbDmB83X8dgxWTjuAtP7oui1Av/logo.png", - "tags": ["Metaverse", "Pet", "NFTs", "NFT-Token"], - "extensions": { - "discord": "https://discord.gg/9X4ZaNSmEX", - "telegram": "https://t.me/+56ohaRsnGfcyNDdk", - "twitter": "https://twitter.com/Metapetbook" - } - }, - { - "chainId": 101, - "address": "Cm3dsFkMtydExWib9pAxueaWhzMaZxJ5CWjMNT9tq2Eu", - "symbol": "SCS", - "name": "Super Cat Sol", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Cm3dsFkMtydExWib9pAxueaWhzMaZxJ5CWjMNT9tq2Eu/logo.png", - "tags": ["community-token"], - "extensions": { - "twitter": "https://twitter.com/SuperCatSol" - } - }, - { - "chainId": 101, - "address": "CCDju4Pf9gTZq2WkScnHnRX8oUqHn37wtp1gNBQPB5mP", - "symbol": "BCY", - "name": "BitcoinCity", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CCDju4Pf9gTZq2WkScnHnRX8oUqHn37wtp1gNBQPB5mP/logo.png", - "tags": ["meme-token", "trading-token", "community-token", "bitcoincity"] - }, - { - "chainId": 101, - "address": "6r9ThcybVr3pbdyZHxUuABHNZJWtmcqZAYyK1HCs62fN", - "symbol": "TEPS", - "name": "Steps Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6r9ThcybVr3pbdyZHxUuABHNZJWtmcqZAYyK1HCs62fN/logo.png", - "tags": ["walk-token", "NFT", "utility-token"], - "extensions": { - "discord": "https://discord.gg/Fbw9wBafzQ", - "twitter": "https://twitter.com/TheFrameboy", - "website": "https://www.theframeboy.com/" - } - }, - { - "chainId": 101, - "address": "2ADKYuqzwQwCKQtDb4fchL4Dxc8QZYcvrvTGGEGD6Ghh", - "symbol": "YID", - "name": "Yid Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2ADKYuqzwQwCKQtDb4fchL4Dxc8QZYcvrvTGGEGD6Ghh/logo.png" - }, - { - "chainId": 101, - "address": "6bBfw33QQiLL8qFadJCtXhY53t1q2cbmw8T4uFThK68p", - "symbol": "SKC", - "name": "Soul Skull", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6bBfw33QQiLL8qFadJCtXhY53t1q2cbmw8T4uFThK68p/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.com/invite/UmbV22ZK88", - "twitter": "https://twitter.com/skullcoolnft", - "website": "https://skullcoolnft.com/" - } - }, - { - "chainId": 101, - "address": "GWsZd8k85q2ie9SNycVSLeKkX7HLZfSsgx6Jdat9cjY1", - "symbol": "PCN", - "name": "Pollen Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GWsZd8k85q2ie9SNycVSLeKkX7HLZfSsgx6Jdat9cjY1/logo.svg", - "tags": [ - "utility-token", - "gaming", - "play-to-earn", - "solana-ecosystem", - "network" - ], - "extensions": { - "description": "Pollen Coin is an SPL Token designed to help proliferate the Pollen Network" - } - }, - { - "chainId": 101, - "address": "trUmpZnz3uf4pHDwsVbdpEeMygiiVCpJq9ZgoWcaWBz", - "symbol": "TRUMP", - "name": "TrumpCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/trUmpZnz3uf4pHDwsVbdpEeMygiiVCpJq9ZgoWcaWBz/logo.png", - "tags": ["meme-coin", "cowfefe"] - }, - { - "chainId": 101, - "address": "G6DqT7dogdEtqPq2usCy85GfGKpzcULHduAWEjuVN56E", - "symbol": "THNKS", - "name": "Thanks", - "decimals": 4, - "logoURI": "https://cdn.jsdelivr.net/gh/quinqu/thanks-token/logo/thanks.jpg", - "extensions": { - "description": "tytytytyty", - "twitter": "https://twitter.com/softbt" - } - }, - { - "chainId": 101, - "address": "FZxUbyQ9oeFiSDaabw8KfAWACsDMQhbuxR9vm2Rh7Ewm", - "symbol": "PHASE", - "name": "PHASE", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FZxUbyQ9oeFiSDaabw8KfAWACsDMQhbuxR9vm2Rh7Ewm/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/jVwHMvXfp9", - "twitter": "https://twitter.com/phase_trade", - "website": "https://phase.trade/" - } - }, - { - "chainId": 101, - "address": "9GSRxyiczjQvmeWA8mVoQS4bgrZzbpkG8hzQiZ9mhwuT", - "symbol": "MAK", - "name": "MAKOH", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9GSRxyiczjQvmeWA8mVoQS4bgrZzbpkG8hzQiZ9mhwuT/logo.png", - "tags": ["web3", "defi", "utility-token"], - "extensions": { - "twitter": "https://twitter.com/MakohToken" - } - }, - { - "chainId": 101, - "address": "C9QmRRaFdar7JBPD4hbKJnMBsHx2NMjf1oKS1CdZwZXa", - "symbol": "KTSG", - "name": "Kitty Sol Gang", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/C9QmRRaFdar7JBPD4hbKJnMBsHx2NMjf1oKS1CdZwZXa/logo.png", - "tags": ["nft-token"], - "extensions": { - "discord": "https://discord.com/invite/pdVbz6yf", - "twitter": "https://twitter.com/kittysolgang", - "website": "https://kittysolgang.com" - } - }, - { - "chainId": 101, - "address": "6DTw9cra3RdWEJEnu7mCVE7rjxnXdV8qDa4StzuUcXcq", - "symbol": "MAN", - "name": "Maana", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6DTw9cra3RdWEJEnu7mCVE7rjxnXdV8qDa4StzuUcXcq/logo.png", - "tags": ["maana-token", "social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "EGhBEcyJQBNopq7Ah83PXJNhSPYz4ELCTTNj3KWHC12r", - "symbol": "SPRA", - "name": "Sepira-Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EGhBEcyJQBNopq7Ah83PXJNhSPYz4ELCTTNj3KWHC12r/logo.png", - "tags": ["social-token", "sepira-coin"] - }, - { - "chainId": 101, - "address": "CLimr85Hjy69xRQozkg5BiVHiqATYm2WMPhbqPPqY3Hs", - "symbol": "CLIM", - "name": "Climate", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CLimr85Hjy69xRQozkg5BiVHiqATYm2WMPhbqPPqY3Hs/logo.png", - "tags": ["climate-token", "utility-token"] - }, - { - "chainId": 101, - "address": "Lib3nSXiss8HoXC9QQy97GkU1RX1n15XpeMhzLVjk7u", - "symbol": "LIB", - "name": "Freedom Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Lib3nSXiss8HoXC9QQy97GkU1RX1n15XpeMhzLVjk7u/logo.png", - "tags": [ - "payment", - "deflatory", - "De-Fi", - "capped", - "Austrian", - "LaizzesF" - ] - }, - { - "chainId": 101, - "address": "FKZh6fATukQHweUhCjL6i9vfQjQbfG1sWRzRmWx5U5Ee", - "symbol": "DFHL", - "name": "Delf-OHL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FKZh6fATukQHweUhCjL6i9vfQjQbfG1sWRzRmWx5U5Ee/logo.png", - "tags": ["memme-token", "utility-token"] - }, - { - "chainId": 101, - "address": "CoLaAnVnyzMo88o1iZs3sgKTct6BEdQPD7eYfZEz6KVG", - "symbol": "COLA", - "name": "CocaCola", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CoLaAnVnyzMo88o1iZs3sgKTct6BEdQPD7eYfZEz6KVG/logo.png", - "tags": [ - "meme-coin", - "utility-token", - "thirst", - "tooth-decay", - "candida", - "diabetes", - "CVD", - "NAFLD", - "cancer" - ] - }, - { - "chainId": 101, - "address": "HzqyRGwBxRC9oVsAG4mPj9zL3s2GgcAi5h3QbATEp5fk", - "symbol": "MICRO", - "name": "MICRODOT", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HzqyRGwBxRC9oVsAG4mPj9zL3s2GgcAi5h3QbATEp5fk/logo.png", - "tags": ["social-token", "utility-token"], - "extensions": { - "twitter": "https://twitter.com/RaversCrypto", - "website": "https://www.crypto-ravers.com" - } - }, - { - "chainId": 101, - "address": "HxZ7hpjAfAxRqGNYGVxgHDqJm1RyjcQs6h6kYkD2UVEz", - "symbol": "SCAM", - "name": "ScamCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HxZ7hpjAfAxRqGNYGVxgHDqJm1RyjcQs6h6kYkD2UVEz/logo.png", - "tags": ["meme-token", "nft-token"], - "extensions": { - "twitter": "https://twitter.com/scamcoin43" - } - }, - { - "chainId": 101, - "address": "GW6NUnFwVdbmobcKdHoDKANMjZ5NojtgoPCfSWbQhcrQ", - "symbol": "SLT", - "name": "SteeLTv", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GW6NUnFwVdbmobcKdHoDKANMjZ5NojtgoPCfSWbQhcrQ/logo.png", - "tags": ["meme-token"], - "extensions": { - "website": "https://discord.gg/E4pVjeRehG" - } - }, - { - "chainId": 101, - "address": "5rFmh8C6Zj1VfL7ogB6PyVDnQkqsayvEPsEbbkUPX8f", - "symbol": "SLCAT", - "name": "Salad Cat Coin", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5rFmh8C6Zj1VfL7ogB6PyVDnQkqsayvEPsEbbkUPX8f/logo.png", - "tags": ["meme-token", "community-token"], - "extensions": { - "website": "https://saladcatcoin.com" - } - }, - { - "chainId": 101, - "address": "7tDaFkMdivNDyEhCFoXLk46eyjEPVJ58evdFqVojKTi1", - "symbol": "UBER", - "name": "TRANSPORT", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7tDaFkMdivNDyEhCFoXLk46eyjEPVJ58evdFqVojKTi1/logo.svg", - "tags": ["transport-token", "delivery-token", "utility-token"] - }, - { - "chainId": 101, - "address": "9RofDtXQWNtoEhBQjuVd9WucyW8ipUYbZ31CPsrqBGP1", - "symbol": "PBZ", - "name": "Pebblez", - "decimals": 8, - "logoURI": "https://cdn.jsdelivr.net/gh/zibo123/Pebblez/pebblezlogo.png", - "tags": ["community-token"], - "extensions": { - "facebook": "https://www.facebook.com/pebbleztoken" - } - }, - { - "chainId": 101, - "address": "BXrwYC5E8p3X2Zc2keWRrBJ3khpAQEiTBzKpSBE22Dy9", - "symbol": "PTM", - "name": "PotatoesMoon", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BXrwYC5E8p3X2Zc2keWRrBJ3khpAQEiTBzKpSBE22Dy9/logo.png", - "tags": [ - "utility-token", - "meme-token", - "community-token", - "social-token" - ], - "extensions": { - "website": "https://www.youtube.com/c/lecarburodu63/" - } - }, - { - "chainId": 101, - "address": "NFTUkR4u7wKxy9QLaX2TGvd9oZSWoMo4jqSJqdMb7Nk", - "symbol": "BLOCK", - "name": "Blockasset", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/NFTUkR4u7wKxy9QLaX2TGvd9oZSWoMo4jqSJqdMb7Nk/logo.png", - "extensions": { - "coingeckoId": "blockasset", - "discord": "https://discord.com/invite/mynn9p6uNw", - "telegram": "https://t.me/blockassetupdates", - "twitter": "https://twitter.com/Blockassetco", - "website": "https://blockasset.co" - } - }, - { - "chainId": 101, - "address": "H48ZPpo7CCLPTXMVZaftMnF6HCdFvzPehY9frzDHimTN", - "symbol": "SHIBA-USDC", - "name": "Shibalana LP Token (SHIBA-USDC)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/H48ZPpo7CCLPTXMVZaftMnF6HCdFvzPehY9frzDHimTN/logo.png", - "tags": ["lp-token"], - "extensions": { - "discord": "https://discord.gg/Wn6UYeQQGv", - "telegram": "https://t.me/shibalana", - "twitter": "https://twitter.com/shibalana", - "website": "https://shibalana.com" - } - }, - { - "chainId": 101, - "address": "zmFoYNC3CuGY1VmgAcxXzfLMnSMVZpJF6RGJU5vDxvT", - "symbol": "JUUJUU", - "name": "JUUJUU", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/zmFoYNC3CuGY1VmgAcxXzfLMnSMVZpJF6RGJU5vDxvT/logo.png", - "tags": ["social-token", "community-token"], - "extensions": { - "website": "https://www.coolbabykaiju.com" - } - }, - { - "chainId": 101, - "address": "9vXwY4zS3Fs7Ej1gp6LtG32iRJbdKEKFnp35HnPew74o", - "symbol": "PELF", - "name": "PELF Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9vXwY4zS3Fs7Ej1gp6LtG32iRJbdKEKFnp35HnPew74o/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://Pelfcoin.io" - } - }, - { - "chainId": 101, - "address": "GLxsZ4aMXNAq5XQ8wyp5cGPov3fajZVXeF6w8w4Pd58M", - "symbol": "BWS", - "name": "Bedrosova", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/BedrosovaYulia/token-list/main/assets/mainnet/GLxsZ4aMXNAq5XQ8wyp5cGPov3fajZVXeF6w8w4Pd58M/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "1 hour of developer's work or consultation up to 1 hour", - "website": "https://bedrosova.ru" - } - }, - { - "chainId": 101, - "address": "YodaXmvJfRMEecpYacvcvDEM3TCom6dVdFik4x8HyFe", - "symbol": "YODA", - "name": "YodaCoin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/YodaXmvJfRMEecpYacvcvDEM3TCom6dVdFik4x8HyFe/logo.jpg" - }, - { - "chainId": 101, - "address": "3TaJVXPNLujB1ZCbLCxHJkwjTj8DfGc35GXtgmHpybs2", - "symbol": "GENIAL", - "name": "Genial4 Educational Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3TaJVXPNLujB1ZCbLCxHJkwjTj8DfGc35GXtgmHpybs2/logo.png", - "tags": ["utility-token", "genial4"], - "extensions": { - "website": "https://www.genial4.com/" - } - }, - { - "chainId": 101, - "address": "6xcfmgzPgABAuAfGDhvvLLMfMDur4at7tU7j3NudUviK", - "symbol": "FOSSIL", - "name": "FOSSIL", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6xcfmgzPgABAuAfGDhvvLLMfMDur4at7tU7j3NudUviK/logo.png", - "tags": ["utility-token"], - "extensions": { - "coingeckoId": "fossil", - "serumV3Usdc": "BHHvygk9aQ6P48uitEHk1eTGtXxX2Q9dh3W9U3VZhGWj", - "twitter": "https://twitter.com/ShukutaiDinos", - "website": "https://shukutaidinos.com/" - } - }, - { - "chainId": 101, - "address": "GjYD3xQGJuk6xFzbkLx6ad3CiHbYJ6xwetwqNPMhvXmS", - "symbol": "ELV", - "name": "Elevator Beta", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GjYD3xQGJuk6xFzbkLx6ad3CiHbYJ6xwetwqNPMhvXmS/logo.png", - "tags": ["utility-token", "social-token"], - "extensions": { - "website": "https://www.elevator.biz" - } - }, - { - "chainId": 101, - "address": "4h41QKUkQPd2pCAFXNNgZUyGUxQ6E7fMexaZZHziCvhh", - "symbol": "SUITE", - "name": "The Suites Token", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4h41QKUkQPd2pCAFXNNgZUyGUxQ6E7fMexaZZHziCvhh/logo.png", - "tags": ["NFT", "GAME"], - "extensions": { - "twitter": "https://twitter.com/TheSuitesNFT", - "website": "https://thesuites.app" - } - }, - { - "chainId": 101, - "address": "3pEGfQfY3mHmcy7euvTcYQy9bKw2UuNQwqgxUwwN6fFq", - "symbol": "ZOODIACS", - "name": "Zoodiac Tokens", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/DefiantDev/token-list/main/assets/mainnet/3pEGfQfY3mHmcy7euvTcYQy9bKw2UuNQwqgxUwwN6fFq/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/ZoodiacsNFT", - "website": "https://www.zoodiacs.io/" - } - }, - { - "chainId": 103, - "address": "AA1SM4BpEv9QRnWGeriD92HFegb3VXnKm3ENru7n2a4F", - "symbol": "NEUM", - "name": "Starlight coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AA1SM4BpEv9QRnWGeriD92HFegb3VXnKm3ENru7n2a4F/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://starlight.ooo" - } - }, - { - "chainId": 101, - "address": "CtC6uBe3QNNmBD8s9DLBnjT2gpN1uPNCb2PVPUDNTmHt", - "symbol": "HILL", - "name": "HillPhantom Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CtC6uBe3QNNmBD8s9DLBnjT2gpN1uPNCb2PVPUDNTmHt/logo.png" - }, - { - "chainId": 101, - "address": "r8nuuzXCchjtqsmQZVZDPXXq928tuk7KVH479GsKVpy", - "symbol": "DAOJONES", - "name": "Fractionalized SMB-2367", - "decimals": 2, - "logoURI": "https://arweave.net/ncRp795w-ca_Xb5zkUBtBmxSQ_bcYA49E03NtMoHJMg", - "tags": ["bridgesplit-fraction", "smb", "fnft"], - "extensions": { - "discord": "https://discord.gg/fjrFpbweAP", - "twitter": "https://twitter.com/bridgesplit", - "vault": "https://app.bridgesplit.com/markets/r8nuuzXCchjtqsmQZVZDPXXq928tuk7KVH479GsKVpy" - } - }, - { - "chainId": 101, - "address": "PEPSiFsZx6vvZvSqycBgCrqvGyhu31M1ytPc4gSsgYG", - "symbol": "PEPSI", - "name": "Pepsi tokens", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/PEPSiFsZx6vvZvSqycBgCrqvGyhu31M1ytPc4gSsgYG/logo.png", - "tags": ["thirst", "hunger", "obesity"] - }, - { - "chainId": 101, - "address": "J3ikF1EBSNCtcoUzLXr6HFLqhQTyyE3Pp3MwPth1joaf", - "symbol": "BTCLAUNCH", - "name": "BTCNFT LAUNCH DEC 5", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/J3ikF1EBSNCtcoUzLXr6HFLqhQTyyE3Pp3MwPth1joaf/logo.png", - "tags": ["btcnft", "btc", "nft"], - "extensions": { - "website": "https://www.blockchain.com/btc/tx/f39100521ce727f109741e46c2789dbffffbda4422c4e99dd34549e06719cc10" - } - }, - { - "chainId": 101, - "address": "E48Ueg1o9avL5s7XBjfLViercSrNSJCvmbZMvnwN873", - "symbol": "MCK", - "name": "Mickey", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/E48Ueg1o9avL5s7XBjfLViercSrNSJCvmbZMvnwN873/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.io/mickeycoin", - "telegram": "https://t.me/mickeycoin_official", - "twitter": "https://twitter.com/mickeycoin_sol", - "website": "https://mickeycoins.com" - } - }, - { - "chainId": 101, - "address": "mETADas7y1WSAwkqM7Dar1Mq9LUJ8QSwzKmZccLTvTf", - "symbol": "META", - "name": "Metacoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/mETADas7y1WSAwkqM7Dar1Mq9LUJ8QSwzKmZccLTvTf/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "7HrUC7ucM7hr3QPJNhadXhuFtQhpY1sMppNJj1N9x1FY", - "symbol": "KOALA", - "name": "Koala Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7HrUC7ucM7hr3QPJNhadXhuFtQhpY1sMppNJj1N9x1FY/icon.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/snft2022", - "website": "https://solana-nft.io/" - } - }, - { - "chainId": 101, - "address": "sHitufpUtFkrAGTNnhsoGaV7KhPNE4XHMp8PA5PuMwd", - "symbol": "SHIT", - "name": "Shitcoins", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/sHitufpUtFkrAGTNnhsoGaV7KhPNE4XHMp8PA5PuMwd/logo.png", - "tags": ["TheShit", "capped", "deflatory"] - }, - { - "chainId": 101, - "address": "kRitycGRGTXk4KM9ScNczrqgiVfz2DacrkgqwJmdGfm", - "symbol": "KRIS", - "name": "Krish Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/kRitycGRGTXk4KM9ScNczrqgiVfz2DacrkgqwJmdGfm/logo.svg" - }, - { - "chainId": 101, - "address": "CaShuGDxFr4NLRMcUR6vBxMMdjkc8W5ApYPyVdHDEZQM", - "symbol": "CA$H", - "name": "Money", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CaShuGDxFr4NLRMcUR6vBxMMdjkc8W5ApYPyVdHDEZQM/logo.png", - "tags": ["payment", "capped", "deflatory", "De-fi"] - }, - { - "chainId": 101, - "address": "TwtRRGX2Lq3e5C71ix5gr1cn1CmnzmQGr4hrFMDbFFN", - "symbol": "TWITR", - "name": "Twitter-coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/TwtRRGX2Lq3e5C71ix5gr1cn1CmnzmQGr4hrFMDbFFN/logo.png", - "tags": ["Twitter-coin"] - }, - { - "chainId": 101, - "address": "soUrSAYJo1Va5KGLhiqq2TbYwDMe8XXptZgyVLs5ud2", - "symbol": "SOUND", - "name": "SOUND tokens", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/soUrSAYJo1Va5KGLhiqq2TbYwDMe8XXptZgyVLs5ud2/logo.png", - "tags": [ - "utility-token", - "buy-music", - "pay-performance", - "De-Fi", - "De-Mu" - ] - }, - { - "chainId": 101, - "address": "FMBfAxhiTwDmujiEGbexFtExHR9q7nqnRF1Rjd5UmhS7", - "symbol": "BACON", - "name": "BACON tokens", - "decimals": 9, - "logoURI": "https://zplphm7g437efyuli2psx6tmh4nf7ux6zf3iw65xnk5zjltaomca.arweave.net/y9bzs-bm_kLii0afK_psPxpf0v7Jdot7t2q7lK5gcwQ", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/SolanaBacon", - "website": "https://swinegang.com/" - } - }, - { - "chainId": 101, - "address": "CASHhd6REHunCFWUnwofYjHVEaYAmZT4qzeGxg73vVzL", - "symbol": "Cash", - "name": "Capital", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CASHhd6REHunCFWUnwofYjHVEaYAmZT4qzeGxg73vVzL/logo.png", - "tags": ["payment", "capped", "deflatory", "De-Fi"] - }, - { - "chainId": 101, - "address": "4JdgGfKykyzZdKpCFaDSu6dKZ2ynAv6cqKX79banN4Ya", - "symbol": "SLZR", - "name": "Solzer", - "decimals": 7, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4JdgGfKykyzZdKpCFaDSu6dKZ2ynAv6cqKX79banN4Ya/logo.svg", - "tags": ["solzer", "meme-token", "social-token", "community-token"], - "extensions": { - "discord": "https://discord.gg/AyQQ2N8dnD", - "twitter": "https://twitter.com/SolzersOfficial", - "website": "https://solzers.com/" - } - }, - { - "chainId": 101, - "address": "maLen3sJGjSrWermkmjtD63jMwuDfD8kAZ6qtJ3JuYZ", - "symbol": "MPT", - "name": "Male Privelege Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/maLen3sJGjSrWermkmjtD63jMwuDfD8kAZ6qtJ3JuYZ/logo.png", - "tags": ["underground-economy", "De-Fi", "anti-authoritarian"] - }, - { - "chainId": 101, - "address": "omiQMAY55K67aVCVQw9xhjV6swuXVbdTPTvQsWHRcun", - "symbol": "OMI", - "name": "Omikron", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/omiQMAY55K67aVCVQw9xhjV6swuXVbdTPTvQsWHRcun/logo.png", - "tags": ["going-viral", "joy-of-dictators", "glee-of-politicians"] - }, - { - "chainId": 101, - "address": "FHK4riNxYRXTjCZxFK6a8V7tbvphVUfgtsEmySWP56L5", - "symbol": "SHAI", - "name": "ShaiCoin", - "decimals": 9, - "logoURI": "https://us.123rf.com/450wm/inkdrop/inkdrop1910/inkdrop191006626/132480841-police-de-texte-%C3%A0-effet-de-glitch-n%C3%A9on-d%C3%A9form%C3%A9e-de-la-lettre-s-rendu-3d.jpg?ver=6", - "tags": ["utility-token", "Shai"], - "extensions": { - "youtube": "https://www.youtube.com/channel/UCWOOi-1RPVdOxf-FY283FZA" - } - }, - { - "chainId": 101, - "address": "PuMpDwapgJU48tc1Nh5y4FBDZa8z5fuF9aUSa7wR3CP", - "symbol": "PUMP", - "name": "Pump it up", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/PuMpDwapgJU48tc1Nh5y4FBDZa8z5fuF9aUSa7wR3CP/logo.png", - "tags": ["pumping", "dumping"] - }, - { - "chainId": 101, - "address": "H3mRKonYi5pEi7eJfvQxwEYoHpV3qB2urZGtLfjk27NN", - "symbol": "MLGO", - "name": "MLGO tokens", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/H3mRKonYi5pEi7eJfvQxwEYoHpV3qB2urZGtLfjk27NN/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://mlgo.io/" - } - }, - { - "chainId": 101, - "address": "3vDfXEw3MZQgjYpLbjoZDYmgVci16CsC6ZDLgUzmcKR2", - "symbol": "FLVR", - "name": "Flokiverse", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/DaveBane/Flokiverse/Flokiverselogo.png", - "tags": ["meme-token", "game-token"], - "extensions": { - "twitter": "https://twitter.com/TheFlokiverse", - "website": "https://theflokiverse.com" - } - }, - { - "chainId": 101, - "address": "Dqo4Q2ku79MeyUXk8zcpiexhjMe1RgFQKrdpCN9VePJm", - "symbol": "DBLN", - "name": "Doublon", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Dqo4Q2ku79MeyUXk8zcpiexhjMe1RgFQKrdpCN9VePJm/logo.png", - "tags": ["utility-token", "international-token"], - "extensions": { - "instagram": "https://www.instagram.com/clement_aglr" - } - }, - { - "chainId": 103, - "address": "7SQq39bhiP45dwvmtEUpGqiddpycHjWQ6nzAM2sTJ9Bi", - "symbol": "YOC", - "name": "YOC token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7SQq39bhiP45dwvmtEUpGqiddpycHjWQ6nzAM2sTJ9Bi/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "yWrsPP55pxTXWBnuReEd7B1gTFqLsfbhP3ZvnGCdrE4", - "symbol": "BTDX", - "name": "Bitadx Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/yWrsPP55pxTXWBnuReEd7B1gTFqLsfbhP3ZvnGCdrE4/logo.png", - "extensions": { - "twitter": "https://twitter.com/bitadx", - "website": "https://www.bitadx.com" - } - }, - { - "chainId": 101, - "address": "JB9sPerGhfdwCDajmd8x4y2gkC4EtXVevoAoPwni39ik", - "symbol": "ABP", - "name": "ABP token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/JB9sPerGhfdwCDajmd8x4y2gkC4EtXVevoAoPwni39ik/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "9xEsFYFuJRPhLyZ6ysVHc8k7Z5LsCXhWHj5vm1DQd3Qp", - "symbol": "GUNS", - "name": "Cartel GUNS", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9xEsFYFuJRPhLyZ6ysVHc8k7Z5LsCXhWHj5vm1DQd3Qp/logo.png", - "tags": ["meme-token", "utility-token", "stake-pool-token"], - "extensions": { - "discord": "https://discord.gg/cartelofsolana", - "twitter": "https://twitter.com/solcartel", - "website": "https://www.solcartel.com/" - } - }, - { - "chainId": 101, - "address": "FortJWoPT9EDfEdXUgoD9VdFzz5DARb6u5nfdLUZf8nK", - "symbol": "FORT", - "name": "Fortnite", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FortJWoPT9EDfEdXUgoD9VdFzz5DARb6u5nfdLUZf8nK/logo.png", - "tags": ["game-token", "buy-sell", "get-paid"] - }, - { - "chainId": 101, - "address": "AdEnwi15gK4TsPncsyU8evgySt8tZ5vkugG29kz52GLS", - "symbol": "SOLNUT", - "name": "SOLANA NUT", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AdEnwi15gK4TsPncsyU8evgySt8tZ5vkugG29kz52GLS/logo.png", - "tags": ["meme-token"], - "extensions": { - "twitter": "https://twitter.com/Solana_Nut" - } - }, - { - "chainId": 101, - "address": "muSiCJtkftyEH5GicoF9D1Cc19qK5N7C9zEoeuUnAXn", - "symbol": "MUSIC", - "name": "Music", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/muSiCJtkftyEH5GicoF9D1Cc19qK5N7C9zEoeuUnAXn/logo.png", - "tags": [ - "buy-sell-music", - "pay-concerts", - "get-paid", - "support-musicians" - ] - }, - { - "chainId": 101, - "address": "314MsRJXmA4b4thSs8RReUvBiBwdZcTUL9GR8ndJLPgj", - "symbol": "PI", - "name": "3.14", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/314MsRJXmA4b4thSs8RReUvBiBwdZcTUL9GR8ndJLPgj/logo.png", - "tags": ["Next-viral-token", "capped-supply"] - }, - { - "chainId": 101, - "address": "ELECstkptPdDmVcA7wzPifTqqhZBHqaVcPVevWZwqiep", - "symbol": "ELEC", - "name": "Election token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ELECstkptPdDmVcA7wzPifTqqhZBHqaVcPVevWZwqiep/logo.png", - "tags": [ - "utility-token", - "national-elections", - "local-elections", - "safe-elections", - "secure-elections", - "blockchain-elections" - ] - }, - { - "chainId": 101, - "address": "8mYrpQbdcd4VrobcdcaqKLBHiKdaKEtMh5sgGbkXMird", - "symbol": "LANDS", - "name": "Lost Lands", - "decimals": 4, - "logoURI": "https://lostlands.club/lostlands_token.png", - "tags": ["nft", "utility-token"], - "extensions": { - "discord": "https://discord.com/invite/c7Jk9a6GJK", - "twitter": "https://twitter.com/LandsSol", - "website": "https://lostlands.club" - } - }, - { - "chainId": 101, - "address": "C6F3XYB7Ny4uemJPkGUcaVfSWFn5jykG3RWH1CyhTTvr", - "symbol": "RENY", - "name": "RENY", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/C6F3XYB7Ny4uemJPkGUcaVfSWFn5jykG3RWH1CyhTTvr/logo.png", - "tags": [ - "community-token", - "real-estate", - "utility-token", - "digital-nomad", - "fractional-ownership" - ], - "extensions": { - "twitter": "https://twitter.com/RenyEstate", - "website": "https://arealnomad.com" - } - }, - { - "chainId": 101, - "address": "mpczNCEv3ScNB5gGpBcdtda8MKw4BW55RbinrGCUNgK", - "symbol": "MPC", - "name": "Male Privilege Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/mpczNCEv3ScNB5gGpBcdtda8MKw4BW55RbinrGCUNgK/logo.png", - "tags": ["underground-economy", "De-Fi", "anti-authoritarian"] - }, - { - "chainId": 101, - "address": "k5Ybbtmnd1eAtBZoTqB9uzd24bVPz8Aip5EGVCJXQCM", - "symbol": "sBTC", - "name": "Solana Bitcoin", - "decimals": 8, - "logoURI": "https://i.ibb.co/SmxfhQT/sbtc.jpg", - "tags": ["general"] - }, - { - "chainId": 101, - "address": "8cr7NKnPR1cTjfcQjiHUMyYdnrjyxXhDqXWpzwqGNZZk", - "symbol": "SFL", - "name": "SAFESOL", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8cr7NKnPR1cTjfcQjiHUMyYdnrjyxXhDqXWpzwqGNZZk/logo.png", - "tags": ["social-token"], - "extensions": { - "discord": "https://discord.gg/unhGGVXANW", - "twitter": "https://twitter.com/safesolana" - } - }, - { - "chainId": 101, - "address": "4VJjP6PDuRJ6pXv73RCfihFsRatQDXsW1mzZyh6ADmiH", - "symbol": "CANN", - "name": "CannabisCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4VJjP6PDuRJ6pXv73RCfihFsRatQDXsW1mzZyh6ADmiH/logo.png", - "tags": ["utility-token", "community-token", "social-token"], - "extensions": { - "twitter": "https://twitter.com/cannabiscoins_", - "website": "https://www.cannabiscoin.space/" - } - }, - { - "chainId": 101, - "address": "DP37WVgLKyoTst3rcF3ZSfWsczoPtujRZ2kWmeBzXDdN", - "symbol": "RDG", - "name": "Craoutch", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DP37WVgLKyoTst3rcF3ZSfWsczoPtujRZ2kWmeBzXDdN/logo.png", - "tags": ["meme-token", "social-token", "community-token"], - "extensions": { - "discord": "https://discord.gg/AyQQ2N8dnD", - "twitter": "https://twitter.com/SolzersOfficial", - "website": "https://solzers.com/" - } - }, - { - "chainId": 101, - "address": "Diss55mm6WhvBj5qHSsVbU6W9R4LyonMb3GLmj4bh3aF", - "symbol": "DIS", - "name": "Dissenter coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Diss55mm6WhvBj5qHSsVbU6W9R4LyonMb3GLmj4bh3aF/logo.png", - "tags": [ - "self-thinking", - "anti-authoritarian", - "non-conformistic", - "De-Fi", - "capped" - ] - }, - { - "chainId": 101, - "address": "D18Vvg9PacxDK8FrGFijqrxc3QpF4dg5DDu4ff6SuAzP", - "symbol": "GUARDS", - "name": "GUARDS", - "decimals": 4, - "logoURI": "https://uw3arkapc6mahymsgieljx2isutp7c5lk5y7pufcucifobbwasdq.arweave.net/pbYIqA8XmAPhkjIItN9IlSb_i6tXcffQoqCQVwQ2BIc", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/solanaguards", - "website": "http://guards.io/" - } - }, - { - "chainId": 101, - "address": "FWFgveLWjyfUcmnquyMzQ7cyGRMUoWNfrQ31y3W2Ejbm", - "symbol": "VST", - "name": "Vesta", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FWFgveLWjyfUcmnquyMzQ7cyGRMUoWNfrQ31y3W2Ejbm/logo.png", - "tags": ["utility-token", "dex"], - "extensions": { - "discord": "https://discord.io/vestadex", - "telegram": "https://t.me/vesta_official", - "twitter": "https://twitter.com/vesta_sol", - "website": "https://vesta-dex.net" - } - }, - { - "chainId": 101, - "address": "32DSeHgkX64GcFNMjJXyRpG5eqoBVXJvdQpWyL1UgSrN", - "symbol": "JJ", - "name": "JuuJuuCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/32DSeHgkX64GcFNMjJXyRpG5eqoBVXJvdQpWyL1UgSrN/logo.png", - "tags": ["utility-token", "community-token", "social-token"], - "extensions": { - "website": "https://www.coolbabykaiju.com/" - } - }, - { - "chainId": 101, - "address": "2Ete4fPkfRpgEzA8ypZUxVoiRAv8ZdrD9rZ6YA9b9m3j", - "symbol": "$SSO", - "name": "Solly Solana", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Ete4fPkfRpgEzA8ypZUxVoiRAv8ZdrD9rZ6YA9b9m3j/logooo.png", - "extensions": { - "discord": "https://discord.gg/sollysolana", - "twitter": "https://twitter.com/sollysolana" - } - }, - { - "chainId": 101, - "address": "RDRnT9rLYT2QRJpHwtKBAzJTQnPnnzJgCCqfeUP4Sf1", - "symbol": "RDR", - "name": "Red Dead Redemption", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/RDRnT9rLYT2QRJpHwtKBAzJTQnPnnzJgCCqfeUP4Sf1/logo.png", - "tags": ["game-coin", "pay", "get-paid"] - }, - { - "chainId": 101, - "address": "7ErrAxG4JHjrmohEu4gAjccdTBvc3ZxxLfxeBh1XkdNj", - "symbol": "MICH", - "name": "MichMich", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7ErrAxG4JHjrmohEu4gAjccdTBvc3ZxxLfxeBh1XkdNj/logo.png", - "tags": ["community-token"], - "extensions": { - "website": "https://github.com/Michenux/michmich-token" - } - }, - { - "chainId": 101, - "address": "J1inBU6NJahWE6NdSrR3cKr161ZmGdPsM7QTvHfNsD4J", - "symbol": "CORP", - "name": "Hound Tokens", - "decimals": 9, - "logoURI": "https://arweave.net/oVaTC19OqJlQvO8KR78ilL1XqTn29BSCisyvyHGrjSg?ext=png", - "extensions": { - "twitter": "https://twitter.com/SaiboguC", - "website": "https://www.saibogucorp.com/" - } - }, - { - "chainId": 101, - "address": "4q5UBXJxE91BZKX548qhU8i5QBWvZdXzS3RZwfTgLQda", - "symbol": "N2H4", - "name": "Hydrazine", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4q5UBXJxE91BZKX548qhU8i5QBWvZdXzS3RZwfTgLQda/logo.png", - "extensions": { - "telegram": "https://t.me/StarLaunchOfficial", - "twitter": "https://twitter.com/StarLaunchSOL", - "website": "https://www.starlaunch.com/" - } - }, - { - "chainId": 101, - "address": "C3TJTA1NPMK1JsWzs7afYTTFnybVCXzwA6ZSe5ksx4Xw", - "symbol": "ADR", - "name": "AIR DROP", - "decimals": 12, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/C3TJTA1NPMK1JsWzs7afYTTFnybVCXzwA6ZSe5ksx4Xw/logo.png", - "tags": ["air-drop-token", "social-token", "community-token"], - "extensions": { - "blog": "https://acomdir.com", - "website": "https://jenka-nauta.com" - } - }, - { - "chainId": 101, - "address": "TR1PeRyej6G2KfX7bbYEVpdCQWaZrzkPGsoPU2cpZWx", - "symbol": "TRIP", - "name": "Trip Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/TR1PeRyej6G2KfX7bbYEVpdCQWaZrzkPGsoPU2cpZWx/logo.png", - "tags": ["DApp", "community-token"], - "extensions": { - "website": "https://www.tripprotocol.org/" - } - }, - { - "chainId": 101, - "address": "HgCCkxNtCJDPiHyi2STKbcNg74g7NrbTYep4JCFZzTBt", - "symbol": "MMA", - "name": "Metaverse Mining Alliance", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HgCCkxNtCJDPiHyi2STKbcNg74g7NrbTYep4JCFZzTBt/logo_small.jpg", - "tags": ["utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/MetaverseMining", - "website": "https://mmagaming.io/" - } - }, - { - "chainId": 101, - "address": "7WSpoEhi7zQB8t7Y5TqAdp83SMLExFh263cyJZR6BDKu", - "symbol": "COE", - "name": "VMW Hands on Team - Coin of Excellence", - "decimals": 1, - "logoURI": "https://raw.githubusercontent.com/flashdumper/coe/master/logo.png", - "tags": ["utility-token", "meme-token"], - "extensions": { - "website": "https://flashdumper.github.io" - } - }, - { - "chainId": 101, - "address": "TE1Eu2kGHetAeC6L89FhjDNBqdD4fGWmMVbengtr7Sj", - "symbol": "TELE", - "name": "Teleport", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/TE1Eu2kGHetAeC6L89FhjDNBqdD4fGWmMVbengtr7Sj/logo.png", - "tags": ["DApp", "community-token"], - "extensions": { - "website": "https://www.heyteleport.com/" - } - }, - { - "chainId": 101, - "address": "5Virh6fFyNfrpZso5E7c7ANYyyJ45ADE4bq6AcQXTaRK", - "symbol": "HELIOS", - "name": "HELIOS PROJECT", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5Virh6fFyNfrpZso5E7c7ANYyyJ45ADE4bq6AcQXTaRK/logo.png", - "tags": ["nft", "meta"], - "extensions": { - "twitter": "https://twitter.com/helios_lab" - } - }, - { - "chainId": 101, - "address": "GYv7dD3cbsL8BHgp12wx34xtMwfS1C5j4MdsGQU5Gg4i", - "symbol": "OIL", - "name": "OIL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GYv7dD3cbsL8BHgp12wx34xtMwfS1C5j4MdsGQU5Gg4i/oil-barrel.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/cyber_apes_nft" - } - }, - { - "chainId": 101, - "address": "EPae2UjdHnQiB6SaC8WJ2jMa7NJEMmuW9ZR4Z4yRMUhy", - "symbol": "ANGRY", - "name": "WhySoAngry", - "decimals": 8, - "logoURI": "https://cdn.jsdelivr.net/gh/angryreindeers/tokenlogo/angry_coin.png", - "tags": ["nft-token"], - "extensions": { - "discord": "http://discord.gg/ZV4yhRUReP", - "twitter": "https://twitter.com/Angry_Reindeers", - "website": "https://www.angryreindeers.com/" - } - }, - { - "chainId": 103, - "address": "FURiApwZQoZmVR7xavw2ZdM14FHUVeeUbn9zo3ipLs52", - "symbol": "FURIA", - "name": "Furia Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FURiApwZQoZmVR7xavw2ZdM14FHUVeeUbn9zo3ipLs52/logo.png" - }, - { - "chainId": 101, - "address": "sCsVEENGKrjh8S4sLr2pb8kn7mMbwasBBzhyT4w7DGv", - "symbol": "SKATE", - "name": "Skate Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/sCsVEENGKrjh8S4sLr2pb8kn7mMbwasBBzhyT4w7DGv/logo.png", - "extensions": { - "discord": "https://discord.gg/QsJVtT3a8h", - "twitter": "https://twitter.com/skatercatsoc", - "website": "https://www.skatercatsociety.com/" - } - }, - { - "chainId": 101, - "address": "9kt93AW5QMjFL6ZxomnSq3FbWiU5ibNeTSgBz9UDFSB6", - "symbol": "GOD", - "name": "GOD", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9kt93AW5QMjFL6ZxomnSq3FbWiU5ibNeTSgBz9UDFSB6/logo.png", - "extensions": { - "discord": "https://discord.gg/4wvSFbkFqY", - "twitter": "https://twitter.com/gods_sol", - "website": "https://gods.so/" - } - }, - { - "chainId": 101, - "address": "HRyyRN2GY4yxrxCx5bekuEEKvFqztr42eVRY5UdkYWGf", - "symbol": "MBM", - "name": "Bonezz Inu", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HRyyRN2GY4yxrxCx5bekuEEKvFqztr42eVRY5UdkYWGf/logo.png" - }, - { - "chainId": 101, - "address": "5DgD1XeBy5QU2C3uoD384LTA4jM3PuwEcqmbDKDh7XHs", - "symbol": "IUSA", - "name": "IUSA", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5DgD1XeBy5QU2C3uoD384LTA4jM3PuwEcqmbDKDh7XHs/logo.png" - }, - { - "chainId": 101, - "address": "43TzdKUmiMJGsnvcAz9qzSPb98V2gABcJDDagvK9ZcVF", - "symbol": "CANNABIS", - "name": "Cannabis Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/43TzdKUmiMJGsnvcAz9qzSPb98V2gABcJDDagvK9ZcVF/logo.png", - "tags": ["utility-token", "community-token", "social-token"], - "extensions": { - "twitter": "https://twitter.com/cannabiscoins_", - "website": "https://www.cannabiscoin.space/" - } - }, - { - "chainId": 101, - "address": "6g1VPx4L1U69qkAcQyRh9b9UtsT7FboA4maeBb62fCY4", - "symbol": "POT", - "name": "PotCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6g1VPx4L1U69qkAcQyRh9b9UtsT7FboA4maeBb62fCY4/logo.png", - "tags": ["WEED", "community-token", "social-token"], - "extensions": { - "twitter": "https://twitter.com/Potcoins_", - "website": "https://www.potcoin.space/" - } - }, - { - "chainId": 101, - "address": "3wmg5g9hJC7oc6GPnoFGLDo1LnmDakvJw9WZL7HhPn4t", - "symbol": "LUDU", - "name": "LuduFi", - "decimals": 9, - "logoURI": "https://ludufi.io/ludufi.png", - "tags": ["utility-token", "LUDU"], - "extensions": { - "discord": "https://discord.gg/uZGdzzfGxd", - "twitter": "https://twitter.com/LuduFi_", - "website": "https://ludufi.io/" - } - }, - { - "chainId": 101, - "address": "DAt6azHcBFw4e5BDrVpnMcjmfgPsngaLspkbMbkFBWFN", - "symbol": "THC", - "name": "HempCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DAt6azHcBFw4e5BDrVpnMcjmfgPsngaLspkbMbkFBWFN/logo.png", - "tags": ["Marijuana", "Community-token", "Weed-token"], - "extensions": { - "twitter": "https://twitter.com/hempcoinx", - "website": "https://www.hempcoin.space/" - } - }, - { - "chainId": 101, - "address": "Cauqq1q5UrTqs3DEDme8oKagDfJgJsr1AqUmj3iq24N8", - "symbol": "DOPE", - "name": "DopeCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Cauqq1q5UrTqs3DEDme8oKagDfJgJsr1AqUmj3iq24N8/logo.png", - "tags": ["Cannabis", "Community-token", "WEEK"], - "extensions": { - "twitter": "https://twitter.com/thedopecoin", - "website": "https://www.dopecoin.space/" - } - }, - { - "chainId": 101, - "address": "YtfMZ4jg2ubdz4GasY86iuGjHdo5rCPJnFqgSf8gxAz", - "symbol": "CHB", - "name": "Charactbit", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6D4aGWykMymkFaeVzDS6MiH6QEujsHUze2pPGbJEyh7y/logo.png", - "tags": ["MetaVerse", "nft-token"], - "extensions": { - "twitter": "https://twitter.com/charactbit", - "website": "https://www.charactbit.com/" - } - }, - { - "chainId": 101, - "address": "9QBTKuSCDaJjtxYnYcVzoiKENMdJ5DRei5ZUCEeWyZnj", - "symbol": "TRYB", - "name": "BiLira (Portal)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9QBTKuSCDaJjtxYnYcVzoiKENMdJ5DRei5ZUCEeWyZnj/logo.png", - "tags": ["stablecoin", "wormhole", "wrapped"], - "extensions": { - "address": "0x2c537e5624e4af88a7ae4060c022609376c8d0eb", - "assetContract": "https://etherscan.io/token/0x2c537e5624e4af88a7ae4060c022609376c8d0eb", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "github": "https://github.com/bilira-org", - "instagram": "https://instagram.com/bilira_official", - "telegram": "https://t.me/BiLira_Official", - "website": "http://bilira.co" - } - }, - { - "chainId": 101, - "address": "6rzLw7uzkR76jXNMRR5pLAYjutsbET9avgBkpCUvojyW", - "symbol": "BONGWEED", - "name": "BongWeedCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6rzLw7uzkR76jXNMRR5pLAYjutsbET9avgBkpCUvojyW/logo.png", - "tags": ["Cannabis", "Community-token", "BONGWEED"], - "extensions": { - "twitter": "https://twitter.com/bongweedcoins", - "website": "https://www.bongweedcoin.com/" - } - }, - { - "chainId": 101, - "address": "FvHys7nD2kZMfk4DaNJwWTbQVdhFDkCP45tfsf5ZFgjX", - "symbol": "SVRY", - "name": "SVRY Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FvHys7nD2kZMfk4DaNJwWTbQVdhFDkCP45tfsf5ZFgjX/logo.png", - "tags": ["utility-token", "family-token"] - }, - { - "chainId": 103, - "address": "ENhqgyaVeCWzR3AUhVTXDWmqhELFoigU9pdg6GfS9JAN", - "symbol": "SDK", - "name": "SDK-Dev", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ENhqgyaVeCWzR3AUhVTXDWmqhELFoigU9pdg6GfS9JAN/logo.svg", - "tags": ["token"] - }, - { - "chainId": 101, - "address": "ASHTTPcMddo7RsYHEyTv3nutMWvK8S4wgFUy3seAohja", - "symbol": "$ASH", - "name": "Mortuary Inc Ashes", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ASHTTPcMddo7RsYHEyTv3nutMWvK8S4wgFUy3seAohja/logo.svg", - "tags": ["NFT", "social-token", "community-token", "utility-token"], - "extensions": { - "discord": "https://discord.gg/DTdYZVhwne", - "twitter": "https://twitter.com/MortuaryIncNFT", - "website": "https://mortuary-inc.io/" - } - }, - { - "chainId": 101, - "address": "EuHgNxKE99NNCZTv6djpbkRVTPMoqA1v93DTL2Thp1Hr", - "symbol": "BIG", - "name": "TBD Coin", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EuHgNxKE99NNCZTv6djpbkRVTPMoqA1v93DTL2Thp1Hr/logo.png", - "tags": ["Community-token"], - "extensions": { - "description": "The BIG Deal is a blockchain based auction house for physical goods, digital assets, NFT's and more.", - "github": "https://github.com/thebigdeals", - "instagram": "https://www.instagram.com/thebigdeal_official", - "linkedin": "https://www.linkedin.com/company/the-big-deals", - "medium": "https://medium.com/@thebigdealofficial", - "telegram": "https://t.me/+sWdEDZzdkSVlY2I1", - "twitter": "https://twitter.com/thebigdeal_play", - "website": "https://thebig.deals/" - } - }, - { - "chainId": 101, - "address": "JAienPrR8TgR4Bdo3UgxA9Kj1kB1JwuPkvcDpLfesruh", - "symbol": "MMMT", - "name": "mememetoken", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/JAienPrR8TgR4Bdo3UgxA9Kj1kB1JwuPkvcDpLfesruh/logo.png", - "tags": ["meme-token"], - "extensions": { - "twitter": "https://twitter.com/mememenft" - } - }, - { - "chainId": 101, - "address": "DxcDecsWbXBy5S8phbRAMfNH8hJZWLwUkMug8JNT77d2", - "symbol": "ATT", - "name": "Attention Coin", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DxcDecsWbXBy5S8phbRAMfNH8hJZWLwUkMug8JNT77d2/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "DM8WStrzE7XHLr5EeuE8693VAqAx3MiTcAqfH6WcsSSC", - "symbol": "KAKA", - "name": "KAKA", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DM8WStrzE7XHLr5EeuE8693VAqAx3MiTcAqfH6WcsSSC/logo.png", - "tags": ["kaka-token"] - }, - { - "chainId": 101, - "address": "6w6JEuFqkuCynQ4PnyE34BGBJCGC4diPTLgSy1grnjpJ", - "symbol": "WSP", - "name": "WinterSolePets", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6w6JEuFqkuCynQ4PnyE34BGBJCGC4diPTLgSy1grnjpJ/logo.png", - "tags": ["NFT"], - "extensions": { - "description": "NFT Holders They're Weekly / Monthly $ WSP Rewards Will Be Given Lifetime.", - "discord": "https://discord.gg/3GS6DBSkbK", - "medium": "https://medium.com/@WinterSolePets", - "telegram": "https://t.me/WinterSolePets", - "twitter": "https://twitter.com/WinterSolePets", - "website": "https://www.wintersolepets.com" - } - }, - { - "chainId": 101, - "address": "BNDXucPySXoaHPqGP7tyn3xYVL9C7kkQoZqCLoT1fC5W", - "symbol": "BNDX", - "name": "Bondex", - "decimals": 9, - "logoURI": "https://arweave.net/uR-Niw7icxnt8N5E5rm0lGaI_g6nKxqSiO0tYtzAoTE", - "tags": ["utility-token", "social-token"], - "extensions": { - "facebook": "https://m.facebook.com/Bondexcap/", - "medium": "https://medium.com/@BondexCapital", - "reddit": "https://www.reddit.com/u/Bondexcap/", - "website": "https://www.bondex.app/" - } - }, - { - "chainId": 101, - "address": "CDFByd2FA8YTUM55bVZ4rEvKx814fEucHCMg92MxH4iW", - "symbol": "BRSF", - "name": "Brousouf", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CDFByd2FA8YTUM55bVZ4rEvKx814fEucHCMg92MxH4iW/logo.png", - "tags": ["Gadz", "Community-token", "Brousouf", "Chalons"] - }, - { - "chainId": 101, - "address": "CANSqmUfQ9jfVXJP1ei7eeTw5odbdnHkFGq6GARq8ad8", - "symbol": "$CANS", - "name": "Homeless Coin", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CANSqmUfQ9jfVXJP1ei7eeTw5odbdnHkFGq6GARq8ad8/logo.png", - "tags": ["NFT-Token", "NFT-Project", "Meme-Token"], - "extensions": { - "twitter": "https://twitter.com/homeless_mouse", - "website": "https://homelessmouse.io" - } - }, - { - "chainId": 101, - "address": "ARcAdExwxKEaTMKFjAWL17YespofK3a7poexuBvAPmrN", - "symbol": "ARCADE", - "name": "Arcade", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ARcAdExwxKEaTMKFjAWL17YespofK3a7poexuBvAPmrN/logo.png", - "extensions": { - "discord": "https://discord.gg/P98Zp5FYST", - "twitter": "https://twitter.com/arcade2earn", - "website": "https://www.arcade2earn.io/" - } - }, - { - "chainId": 101, - "address": "xARjQBdLR3q4vXh7DwbKVFg4fKJcfHk7aZaJTaByvhM", - "symbol": "xARCADE", - "name": "xArcade", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/xARjQBdLR3q4vXh7DwbKVFg4fKJcfHk7aZaJTaByvhM/logo.png", - "extensions": { - "discord": "https://discord.gg/P98Zp5FYST", - "twitter": "https://twitter.com/arcade2earn", - "website": "https://www.arcade2earn.io/" - } - }, - { - "chainId": 101, - "address": "AUTF8zA3uUMvaK18QAAwrfchzRHK9WdMnaJ2pu5GY68E", - "symbol": "PNFT", - "name": "PLUS NFT", - "decimals": 2, - "logoURI": "https://cdn.jsdelivr.net/gh/AbdallaMalik/PNFT/PNFT/PNTF.png", - "tags": ["utility-token"], - "extensions": { - "facebook": "https://www.facebook.com/Plussnft", - "instagram": "https://www.instagram.com/plussnft", - "twitter": "https://twitter.com/PlussNft", - "website": "http://plusnft.io", - "youtube": "https://www.youtube.com/channel/UCB25WKjPogsjtctYWZw93jw" - } - }, - { - "chainId": 101, - "address": "7eKVPDKxC6hd3hyrf8JczTme1g1PXXpoiD4qFZx83nrT", - "symbol": "NINI", - "name": "NIFTY NIBBAS", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7eKVPDKxC6hd3hyrf8JczTme1g1PXXpoiD4qFZx83nrT/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4SzxkQvBSXdFjdRGEe14669qdkufp5eBSnia69uRaEFB", - "symbol": "POPC", - "name": "PopCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4SzxkQvBSXdFjdRGEe14669qdkufp5eBSnia69uRaEFB/logo.png", - "tags": ["MetaVerse", "nft-token", "token", "PopCoin"], - "extensions": { - "twitter": "https://twitter.com/OfficialPopCoin" - } - }, - { - "chainId": 103, - "address": "9B6Z1znWiJDhp6NwdVSidWizyGXRAXypfmmCtmQVgH8Y", - "symbol": "FURIA", - "name": "Furia Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9B6Z1znWiJDhp6NwdVSidWizyGXRAXypfmmCtmQVgH8Y/logo.png" - }, - { - "chainId": 101, - "address": "4D2umdRkmjgsFj4Vf9foJGMkTjNQ41jXaGuAL3xb4dQj", - "symbol": "FLX", - "name": "Fluxx", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4D2umdRkmjgsFj4Vf9foJGMkTjNQ41jXaGuAL3xb4dQj/logo.svg", - "tags": ["token"], - "extensions": { - "website": "https://fluxx.webnode.sk/" - } - }, - { - "chainId": 101, - "address": "6c4L5nTH2sBKkfeuP3WhGp6Vq1tE4Suh4ezRp5KSu8Z7", - "symbol": "FANI", - "name": "FANITRADE", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6c4L5nTH2sBKkfeuP3WhGp6Vq1tE4Suh4ezRp5KSu8Z7/logo.svg", - "tags": ["fanitrade", "faniswap", "fanipool", "fanidex", "faniverse"], - "extensions": { - "coingeckoId": "fanitrade", - "coinmarketcap": "https://coinmarketcap.com/currencies/fanitrade", - "instagram": "https://www.instagram.com/fanitrade/", - "website": "https://fanitrade.com/" - } - }, - { - "chainId": 101, - "address": "ENRkZoPMVKyxos91yji7dtqQ3SfYkLp2A1rNuaVE6G2p", - "symbol": "ENR", - "name": "Energy", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ENRkZoPMVKyxos91yji7dtqQ3SfYkLp2A1rNuaVE6G2p/logo.png", - "tags": [ - "power-token", - "wind", - "solar", - "nuclear", - "coal", - "electricity", - "whatever-else" - ] - }, - { - "chainId": 101, - "address": "GEJpt3Wjmr628FqXxTgxMce1pLntcPV4uFi8ksxMyPQh", - "symbol": "daoSOL", - "name": "daoSOL Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GEJpt3Wjmr628FqXxTgxMce1pLntcPV4uFi8ksxMyPQh/logo.png", - "tags": ["stake-pool-token"], - "extensions": { - "description": "daoSOL is the staking token issued by the MonkeDAO staking pool", - "twitter": "https://twitter.com/MonkeDAO", - "website": "https://monkedao.io/" - } - }, - { - "chainId": 101, - "address": "D8AwdkJ6Kky97CPCxt8Em7otH6YER33zuNEDSQP8SEmz", - "symbol": "NLI", - "name": "nity lofi", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/D8AwdkJ6Kky97CPCxt8Em7otH6YER33zuNEDSQP8SEmz/logo.png", - "tags": ["meme-token"], - "extensions": { - "discord": "https://discord.com/invite/VCtbfspD", - "instagram": "https://www.instagram.com/nity_lofi/", - "website": "https://www.youtube.com/channel/UCP6vKUsfqpho8dV4vO4G93A" - } - }, - { - "chainId": 101, - "address": "UBhC118zKZRrVmkezncpf9wvXTLUpwwj5EUZkfNdhxs", - "symbol": "WOLFIE", - "name": "WOLFIE Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/UBhC118zKZRrVmkezncpf9wvXTLUpwwj5EUZkfNdhxs/logo.png" - }, - { - "chainId": 101, - "address": "61QabzGrvN3oYjSgkpoUXash6cucHkYgnnXBAtT5MdLS", - "symbol": "HMG", - "name": "Hamingja", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/61QabzGrvN3oYjSgkpoUXash6cucHkYgnnXBAtT5MdLS/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/HamingjaToken" - } - }, - { - "chainId": 101, - "address": "5idMFZTcT1xrhuf5vgeyF9cs5f43n6TiaDbZsrtC5zTv", - "symbol": "SIU", - "name": "SIU", - "decimals": 9, - "logoURI": "https://arweave.net/23nANpuvTnApbxoFgvXClZyeike1Jg88x8T6b2QXWYA?ext=png", - "extensions": { - "discord": "https://discord.gg/kuraininjas", - "twitter": "https://twitter.com/KuraiNinjas" - } - }, - { - "chainId": 101, - "address": "7uuybREAsTt8epsnjrXbCUDcP6c9CKsnUEfDZr4MhEag", - "symbol": "MOONVRS", - "name": "Moonverse", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7uuybREAsTt8epsnjrXbCUDcP6c9CKsnUEfDZr4MhEag/logo.png", - "tags": ["MetaVerse", "moon", "token", "moonverse"], - "extensions": { - "instagram": "https://www.instagram.com/moonversetoken/", - "twitter": "https://twitter.com/moonversetoken" - } - }, - { - "chainId": 101, - "address": "CYCLPDU3Pv4a12eKQd8iTXDJwb8Lc6AFp3mXrgcBhKFw", - "symbol": "CYCL", - "name": "Cyclic", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CYCLPDU3Pv4a12eKQd8iTXDJwb8Lc6AFp3mXrgcBhKFw/logo.png", - "tags": [ - "market-cycle", - "fashion-cycle", - "day-cycle", - "life-cycle", - "all-is-cyclic" - ] - }, - { - "chainId": 101, - "address": "5YyVJfYwCbvuVVEWTvNLYWUkM7mkWNxFBhsb2YmisKrL", - "symbol": "SLIME", - "name": "Pixel Slime", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5YyVJfYwCbvuVVEWTvNLYWUkM7mkWNxFBhsb2YmisKrL/logo.png", - "tags": ["Community-token"] - }, - { - "chainId": 101, - "address": "4tVnbp4KY8Ur6A9YQtZfs43r91LkFhdfAjot8wxw3uCF", - "symbol": "PIXEL", - "name": "NINJA-PIXEL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4tVnbp4KY8Ur6A9YQtZfs43r91LkFhdfAjot8wxw3uCF/logo.png", - "tags": ["nft-token"], - "extensions": { - "discord": "https://discord.gg/NinjaProtocol", - "twitter": "https://twitter.com/NinjaProtocol", - "website": "https://ninjaprotocol.io/" - } - }, - { - "chainId": 101, - "address": "rg3SH72WW9szTMVLUXamk4cNmLxRwdd5KM73vDMrtvK", - "symbol": "ONI", - "name": "ONI", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/rg3SH72WW9szTMVLUXamk4cNmLxRwdd5KM73vDMrtvK/logo.png", - "tags": ["GAMING", "NFT", "UTILITY"], - "extensions": { - "discord": "https://discord.gg/NinjaProtocol", - "twitter": "https://twitter.com/NinjaProtocol", - "website": "https://ninjaprotocol.io/" - } - }, - { - "chainId": 101, - "address": "2bLBrov57Y78uZp9dcUBLRVZ49eSU843Bx3tccjrfSEN", - "symbol": "DTM", - "name": "DTMcoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2bLBrov57Y78uZp9dcUBLRVZ49eSU843Bx3tccjrfSEN/logo.png", - "tags": ["meme-token", "utility-token"], - "extensions": { - "discord": "https://discord.com/invite/YmMtHNm" - } - }, - { - "chainId": 101, - "address": "D3zwkVf2c1FNC7fW7tZixKjPLgaqhbm1cizKo332UDcm", - "symbol": "KMDO", - "name": "Komodo Dragonz", - "decimals": 4, - "logoURI": "https://cdn.jsdelivr.net/gh/AbdallaMalik/KMDO/logo/KMDO.png", - "tags": ["Utility-Token"], - "extensions": { - "twitter": "https://twitter.com/Komodo_Dragonz_", - "website": "http://komododragonz.com" - } - }, - { - "chainId": 101, - "address": "38NBXKjUs5CM56E1nLfZXJgHLyob5pkYp1ERegqueQqy", - "symbol": "SOLLESS", - "name": "Solless Art Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/38NBXKjUs5CM56E1nLfZXJgHLyob5pkYp1ERegqueQqy/logo.png", - "tags": ["social-token", "community-token", "SOLLESS"], - "extensions": { - "twitter": "https://twitter.com/sollessart" - } - }, - { - "chainId": 101, - "address": "EiNEYyUcPHpGt2btoMeuTrLtsAeayY74ECvPRYzcdPpo", - "symbol": "ROYALE", - "name": "Royale token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EiNEYyUcPHpGt2btoMeuTrLtsAeayY74ECvPRYzcdPpo/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://miniroyale.io" - } - }, - { - "chainId": 101, - "address": "BABYsocP6cB95xvBDXnjXKX96VBNC37dmNWUtaV9Jk6v", - "symbol": "SBABYDOGE", - "name": "SOL BABAY DOGE COIN", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BABYsocP6cB95xvBDXnjXKX96VBNC37dmNWUtaV9Jk6v/logo.png", - "tags": ["MEME", "dogecoin", "meme-coin", "DOGE"], - "extensions": { - "coingeckoId": "sol-baby-doge", - "serumV3Usdc": "GCmfmqvNbY9LXWJ39fD8wNDn1HLj4sF2m9WAoNVVYaFt", - "twitter": "https://twitter.com/sbabydogecoin", - "website": "http://solbabydoge.com/" - } - }, - { - "chainId": 101, - "address": "2J33fEqfphSio1DQ5kSxwMMNnRmVmK4SuHCVzSdBeCHM", - "symbol": "NYANS", - "name": "NYANS DOGES", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/nyansdoges/nyanstoken/main/nyans-token.png", - "tags": ["NFT", "MEME"], - "extensions": { - "twitter": "https://twitter.com/NyansDoges", - "website": "https://nyansdoges.com/" - } - }, - { - "chainId": 103, - "address": "3ZmQRcaKCmz9WF5L3noi6tZHhbY3ZmyujqyhTViWuffn", - "symbol": "USDC-USDr", - "name": "Raydium LP Token V4 (USDC-USDr)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/So11111111111111111111111111111111111111112/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 103, - "address": "DJZUA9cQCtRiMH66tUJJNKR4RUmw7xZXhKnr7FGgiLKU", - "symbol": "ETH-SOL", - "name": "Raydium LP Token V4 (ETH-SOL)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/So11111111111111111111111111111111111111112/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 103, - "address": "8So1qJrk33QCrSaGGmPGxtzPbR3hkPqXjUJjgAbghRa1", - "symbol": "ATLAS-RAY", - "name": "Raydium LP Token V4 (ATLAS-RAY)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/So11111111111111111111111111111111111111112/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 103, - "address": "3xAobruK6JiKnLDwjmBa3UqmqbiZK5YxQyvTYMNsiqFB", - "symbol": "SAMO-RAY", - "name": "Raydium LP Token V4 (SAMO-RAY)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/So11111111111111111111111111111111111111112/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "5zQNcdfrexsVzaak53Shc5C3WQzbT8eKZU1be1nn9VZm", - "symbol": "PP", - "name": "PP Coin", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5zQNcdfrexsVzaak53Shc5C3WQzbT8eKZU1be1nn9VZm/logo.png", - "tags": ["community-token", "game-token", "nft"], - "extensions": { - "discord": "https://discord.gg/xHsjfEENFC", - "twitter": "https://twitter.com/PossumPosseClub", - "website": "https://www.possumposse.club/" - } - }, - { - "chainId": 101, - "address": "CtKP9sK6MHfQquhME6tyooc7LaztAN1pUBmHZT5RVQLR", - "symbol": "ANT", - "name": "Ant", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CtKP9sK6MHfQquhME6tyooc7LaztAN1pUBmHZT5RVQLR/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4tqCXeEtbGCzmav8QPiNeBZnh9p59HMbXYk8SW2z4Fj3", - "symbol": "BNZO", - "name": "BonzOhm", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4tqCXeEtbGCzmav8QPiNeBZnh9p59HMbXYk8SW2z4Fj3/logo.png", - "tags": ["social-token", "nft", "lp-token"], - "extensions": { - "instagram": "https://www.instagram.com/bonzos_nfts/", - "twitter": "https://twitter.com/bonzos_nft", - "website": "https://thebonzos.xyz" - } - }, - { - "chainId": 101, - "address": "F1VM5fztZ62JyP2XjU2wwVvPF53RvnMdpSaG3YgcPiUV", - "symbol": "DEVB", - "name": "DEVB TOKEN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/F1VM5fztZ62JyP2XjU2wwVvPF53RvnMdpSaG3YgcPiUV/logo.png", - "tags": ["DEV"], - "extensions": { - "website": "https://bigdickenergy.io/" - } - }, - { - "chainId": 103, - "address": "AEpC72EBDg5ZN8KXFZPB6bkTWqmYgGaDZ4m8ebyFLLrq", - "symbol": "KPL", - "name": "KAPPOLO TOKEN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AEpC72EBDg5ZN8KXFZPB6bkTWqmYgGaDZ4m8ebyFLLrq/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "8kbEpp3ujqQnZsTmbWNvdoSN8BhqxguTB42RZyhnmKuk", - "symbol": "HAROLD", - "name": "Harold (Hide The Pain Harold)", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8kbEpp3ujqQnZsTmbWNvdoSN8BhqxguTB42RZyhnmKuk/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9mK7QR9mAzdSysPEbNfmeb2EqKM5yrjy7hpfW3S96d13", - "symbol": "TCV", - "name": "Triple Cycle Void", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9mK7QR9mAzdSysPEbNfmeb2EqKM5yrjy7hpfW3S96d13/tcvtoken.jpg", - "tags": ["tcv-token"] - }, - { - "chainId": 101, - "address": "2bH4zPEedsVQufAwfzsXrydDbmNhvtu9DHEp8aN2f6kJ", - "symbol": "LEX", - "name": "Lexas", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2bH4zPEedsVQufAwfzsXrydDbmNhvtu9DHEp8aN2f6kJ/logo.png", - "tags": ["social-token", "meme-token", "community-token", "game-token"], - "extensions": { - "instagram": "https://www.instagram.com/victor.dscp/", - "twitter": "https://twitter.com/Lexas31789977" - } - }, - { - "chainId": 101, - "address": "CaTGDWtaY5hzDNja8FLNiAiQ3fZZaZ3wDjmeCPqYekam", - "symbol": "Calindra", - "name": "Calindra Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CaTGDWtaY5hzDNja8FLNiAiQ3fZZaZ3wDjmeCPqYekam/calindra.png", - "tags": ["community-token"] - }, - { - "chainId": 101, - "address": "AsQm9EwggKUe2s521mwAb92epQAZKnyiMUr8xuu23uCf", - "symbol": "DMY", - "name": "Dummyland", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AsQm9EwggKUe2s521mwAb92epQAZKnyiMUr8xuu23uCf/logo.png", - "tags": ["Governance-token", "utility-token"], - "extensions": { - "discord": "https://discord.com/inviteWhApWVU8", - "instagram": "https://www.instagram.com/dummylandai", - "twitter": "https://twitter.com/dummylandai", - "website": "https://dummyland.ai" - } - }, - { - "chainId": 101, - "address": "BDPkpgh2wF2G68o7GSaiodSQF65baW7pdYi76zAzWDA7", - "symbol": "LNDAO", - "name": "Lightning DAO", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BDPkpgh2wF2G68o7GSaiodSQF65baW7pdYi76zAzWDA7/logo.png", - "tags": ["community-token", "governance-token"] - }, - { - "chainId": 101, - "address": "81x8As53d4wuJDPAGfsJBkX8hZWXjrJDpgoBTeP5gZNu", - "symbol": "AMN", - "name": "Ameen", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/81x8As53d4wuJDPAGfsJBkX8hZWXjrJDpgoBTeP5gZNu/logo.png", - "tags": ["Governance-token", "utility-token"], - "extensions": { - "instagram": "https://www.instagram.com/al__ameenjr", - "twitter": "https://twitter.com/babaalameen7" - } - }, - { - "chainId": 101, - "address": "BGN9c9JJxMgmm7rUqeLanYwWwo2GbedjUFaXn7tAeuXK", - "symbol": "Hono", - "name": "Hono", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BGN9c9JJxMgmm7rUqeLanYwWwo2GbedjUFaXn7tAeuXK/hono.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "DMkAp8aGEny6oEdWJNzwZPTL57biX6BwwGrzEF9bNRcS", - "symbol": "LOOT", - "name": "Loot Heroes", - "decimals": 4, - "logoURI": "https://lootheroes.io/lootcoin.png", - "extensions": { - "twitter": "https://twitter.com/lootheroesnft", - "website": "https://lootheroes.io" - } - }, - { - "chainId": 103, - "address": "5qWoPqMYi7GQRbGNbEGKiQ4odG1VVmCPHKLQRhdeXqu5", - "symbol": "LOOT", - "name": "Loot Heroes", - "decimals": 4, - "logoURI": "https://lootheroes.io/lootcoin.png", - "extensions": { - "twitter": "https://twitter.com/lootheroesnft", - "website": "https://lootheroes.io" - } - }, - { - "chainId": 101, - "address": "FANTafPFBAt93BNJVpdu25pGPmca3RfwdsDsRrT3LX1r", - "symbol": "FANT", - "name": "Phantasia", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FANTafPFBAt93BNJVpdu25pGPmca3RfwdsDsRrT3LX1r/logo.png", - "tags": ["utility-token", "governance-token"], - "extensions": { - "coingeckoId": "phantasia", - "coinmarketcap": "https://coinmarketcap.com/currencies/phantasia/", - "discord": "https://t.co/Vskz9PkBBC?amp=1", - "github": "https://github.com/Phantasia-Sports", - "medium": "https://medium.com/@phantasia", - "twitter": "https://twitter.com/PhantasiaSports", - "website": "https://phantasia.app/" - } - }, - { - "chainId": 101, - "address": "9Ksdsju1hgbfvTt8mR8h4NepRnEhjjqYjS9vALofwZAS", - "symbol": "RBTC", - "name": "Roboto", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9Ksdsju1hgbfvTt8mR8h4NepRnEhjjqYjS9vALofwZAS/logo.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/robotoio", - "website": "http://www.roboto.io/" - } - }, - { - "chainId": 101, - "address": "GG2Je65Rx55MreTBEFNfFFHPEXcmfGq2vuZVLDN2GXYk", - "symbol": "ALTR", - "name": "Altar Finance", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GG2Je65Rx55MreTBEFNfFFHPEXcmfGq2vuZVLDN2GXYk/logo.png", - "tags": ["Exchange", "DApp"], - "extensions": { - "telegram": "https://t.me/altarfinanceCH", - "website": "https://altar.finance/" - } - }, - { - "chainId": 101, - "address": "54J1tQbQVVPvEcnDqCYNfMe2pEyWEWmix2cb3t1ENim8", - "symbol": "BAMBOO", - "name": "BAMBOO (Gorillaz Club)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/54J1tQbQVVPvEcnDqCYNfMe2pEyWEWmix2cb3t1ENim8/logo.png", - "tags": ["utility-token", "community-token", "nfts"], - "extensions": { - "twitter": "https://twitter.com/gorillaz_nft", - "website": "http://www.gorillaznft.com" - } - }, - { - "chainId": 101, - "address": "3aD7pEXJPVEXqAgksBxbRtFRGTWCXn9GuWCjKQxc3xsh", - "symbol": "DEVT", - "name": "DevTech45", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3aD7pEXJPVEXqAgksBxbRtFRGTWCXn9GuWCjKQxc3xsh/logo.png", - "tags": ["community-token", "social-token"], - "extensions": { - "discord": "https://discord.gg/MneHecEKQJ", - "twitter": "https://twitter.com/SirKingDev" - } - }, - { - "chainId": 101, - "address": "5VbDmpeTUgMZvybfaq43FmxH1Be5nkpy2BEDLZyvxuQD", - "symbol": "FREE", - "name": "Free Time Coin", - "decimals": 8, - "logoURI": "https://freetimecoin.com/images/freelogo.png", - "tags": ["meme", "DApp"], - "extensions": { - "twitter": "https://twitter.com/freetimecoin", - "website": "https://freetimecoin.com/" - } - }, - { - "chainId": 101, - "address": "6cUa7n3hXcDQNwKjqfVW8v6NG9B2HfU2h7orKF28b2x", - "symbol": "RICH", - "name": "The Rich DAO", - "decimals": 8, - "logoURI": "https://therichdao.com/images/richlogo.png", - "tags": ["meme", "DApp"], - "extensions": { - "twitter": "https://twitter.com/TheRichDAO", - "website": "https://therichdao.com/" - } - }, - { - "chainId": 101, - "address": "CQKBCgPh8ievVBAZAuBC9K2LvDMbBFanqJwK9WcqYgXU", - "symbol": "HGJ", - "name": "Hamingja 2.0", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CQKBCgPh8ievVBAZAuBC9K2LvDMbBFanqJwK9WcqYgXU/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/HamingjaToken" - } - }, - { - "chainId": 101, - "address": "3WV4fTWGvtWNvQb8oVU4t99By8KztDLtExqHnkPfHAA9", - "symbol": "PAW", - "name": "CopyCats token", - "decimals": 9, - "logoURI": "https://imagedelivery.net/aAmca-Po70V1nH4n9cT-uA/98c9b68b-1494-43d1-0c2c-31e5d0129a00/public", - "extensions": { - "discord": "http://discord.copycats.digital/", - "twitter": "https://twitter.com/copycatssol", - "website": "https://www.copycats.digital/" - } - }, - { - "chainId": 101, - "address": "FfmwaR8Vs7jc3i88sbNqnaf5XDqTozxSy13eK61bw2v6", - "symbol": "PBLM", - "name": "Pinke Blumen", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FfmwaR8Vs7jc3i88sbNqnaf5XDqTozxSy13eK61bw2v6/logo.png", - "tags": ["meme-coin", "social-token"], - "extensions": { - "twitter": "https://twitter.com/itsfeellings" - } - }, - { - "chainId": 101, - "address": "HeQSLWpVaBTiiwX39gZ8Q1WcXxMpBgADv1spmvwkJB5F", - "symbol": "SRAC", - "name": "Solana Race", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HeQSLWpVaBTiiwX39gZ8Q1WcXxMpBgADv1spmvwkJB5F/logo.png", - "extensions": { - "twitter": "https://twitter.com/solana_race" - } - }, - { - "chainId": 101, - "address": "9eG37nGfZBPnRYUa9JM5qmgFZAzJTnWmN6EJRNpNPn9z", - "symbol": "GRQ", - "name": "Get Rich Quick token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/flashdumper/grq/master/grq.png", - "tags": ["meme-token"], - "extensions": { - "website": "https://solscan.io/" - } - }, - { - "chainId": 101, - "address": "67kARmmNbhnwLbM61MKYaLC6oG31D3DrSXHFZGcg2Ehs", - "symbol": "HOWDY", - "name": "HOWDY DAO", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/67kARmmNbhnwLbM61MKYaLC6oG31D3DrSXHFZGcg2Ehs/logo.png", - "extensions": { - "twitter": "https://twitter.com/HowdyDao" - } - }, - { - "chainId": 101, - "address": "J8iu9djzKxxSY1s5inb7KDrka32iR3rF6rCDHGjafANf", - "symbol": "OKAY", - "name": "OKAY Token", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/thepbac/okaytoken/main/okay.png", - "tags": [ - "eCommerce", - "NFT", - "community", - "game-token", - "game-currency", - "GameFi", - "Gaming" - ], - "extensions": { - "website": "http://okayhouse.app" - } - }, - { - "chainId": 101, - "address": "AkhdZGVbJXPuQZ53u2LrimCjkRP6ZyxG1SoM85T98eE1", - "symbol": "BOT", - "name": "Starbots Token", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AkhdZGVbJXPuQZ53u2LrimCjkRP6ZyxG1SoM85T98eE1/logo.png", - "tags": ["utility-token", "governance-token", "game-token"], - "extensions": { - "coingeckoId": "starbots", - "twitter": "https://twitter.com/Starbots_game", - "website": "https://starbots.net" - } - }, - { - "chainId": 101, - "address": "HC9qZTgTYf12cFPaK3dK2HZJ9M47r2JenrsvQ1Ewnds8", - "symbol": "C999", - "name": "Cosmogol 999", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HC9qZTgTYf12cFPaK3dK2HZJ9M47r2JenrsvQ1Ewnds8/logo.svg", - "tags": ["token"], - "extensions": { - "github": "https://github.com/shadok-finance", - "medium": "https://medium.com/@shadok.finance", - "twitter": "https://twitter.com/shadokfinance", - "website": "https://www.shadok.finance" - } - }, - { - "chainId": 101, - "address": "AxXoJZhSfeVUe3qgFZTt4NwQRJB61pBQAHTdWTN9PNms", - "symbol": "KAYAC", - "name": "Kayac", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AxXoJZhSfeVUe3qgFZTt4NwQRJB61pBQAHTdWTN9PNms/KAYAC_LOGO.png", - "tags": ["utility-token", "governance-token", "game-token"], - "extensions": { - "github": "https://github.com/GlyphBound", - "twitter": "https://twitter.com/GlyphBound", - "website": "https://www.glyph-bound.com/" - } - }, - { - "chainId": 101, - "address": "6Dcr8QV9spfrrA6WNKnUrMrFWD8k7bcnj8wjpXaxufmR", - "symbol": "PHD", - "name": "PlantsHero Diamond", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6Dcr8QV9spfrrA6WNKnUrMrFWD8k7bcnj8wjpXaxufmR/logo.png", - "tags": ["utility-token", "Metaverse", "Gamefi"], - "extensions": { - "website": "http://www.plantshero.com/" - } - }, - { - "chainId": 101, - "address": "DqupStSzmSMvP44StQw7vpzrGWNa3qh7iN6HQsQWReNi", - "symbol": "UMBR", - "name": "Umbrella", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DqupStSzmSMvP44StQw7vpzrGWNa3qh7iN6HQsQWReNi/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "EyvyHU1cbQufSYkoUe2nkSjQWBA36MaAZbvmtJMYoZDo", - "symbol": "AVT", - "name": "AVT", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EyvyHU1cbQufSYkoUe2nkSjQWBA36MaAZbvmtJMYoZDo/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "GRsn8fzybTYaiC8N4ZuYHZzcw5T6rN9FK1bpr6MQkKN7", - "symbol": "SPLUNK", - "name": "SPLUNK Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GRsn8fzybTYaiC8N4ZuYHZzcw5T6rN9FK1bpr6MQkKN7/logo.png", - "tags": ["SPLUNKToken"], - "extensions": { - "twitter": "https://twitter.com/SplunkMeta" - } - }, - { - "chainId": 101, - "address": "9dS2MDzzt5Wiu3jLfFJ5z83iSjC2KirJg9vP536uHWDE", - "symbol": "BMG", - "name": "Battle Monster Game", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9dS2MDzzt5Wiu3jLfFJ5z83iSjC2KirJg9vP536uHWDE/Logo.png", - "tags": ["community-token", "meme-token", "NFT"], - "extensions": { - "discord": "https://discord.com/invite/tr2ABHCAHQ", - "twitter": "https://twitter.com/BattleMonster_", - "website": "https://web.battlemonster.io/" - } - }, - { - "chainId": 101, - "address": "soL6gkvtJa7wtiqHXPZ2G6g2V9ZdT7GzFRJJPxTRS67", - "symbol": "$SOLID", - "name": "Solidarity Solutions", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/soL6gkvtJa7wtiqHXPZ2G6g2V9ZdT7GzFRJJPxTRS67/logo.png", - "tags": ["DeFi", "DEX", "Farm", "Stake", "AMM", "ECO"], - "extensions": { - "twitter": "https://twitter.com/Solidarity2021", - "website": "https://www.solidarity.solutions" - } - }, - { - "chainId": 101, - "address": "tsthEKwxAncDJJUUdLKNfS82Vm6Mk1M7hT9chKnq5C2", - "symbol": "AIRBOX", - "name": "AirBox Token", - "decimals": 11, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/tsthEKwxAncDJJUUdLKNfS82Vm6Mk1M7hT9chKnq5C2/logo.png", - "tags": ["meme-token", "utility-token", "community-token"], - "extensions": { - "blog": "https://jenka-nauta.com", - "website": "http://www.airbox-token.acomdir.com/" - } - }, - { - "chainId": 101, - "address": "CRWNYkqdgvhGGae9CKfNka58j6QQkaD5bLhKXvUYqnc1", - "symbol": "CRWNY", - "name": "Crowny token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CRWNYkqdgvhGGae9CKfNka58j6QQkaD5bLhKXvUYqnc1/logo.png", - "extensions": { - "coingeckoId": "crowny-token", - "discord": "https://www.discord.gg/4JvMHrgNvv", - "medium": "https://crowny.medium.com/", - "serumV3Usdc": "H8GSFzSZmPNs4ANW9dPd5XTgrzWkta3CaT57TgWYs7SV", - "telegram": "https://t.me/crownyofficial", - "twitter": "https://twitter.com/crownyio", - "website": "https://crowny.io/" - } - }, - { - "chainId": 101, - "address": "2geYxMQ9o466tQ3JitUVR5Xmuk4a11KXs7ZmSX1hiSJp", - "symbol": "McNoot", - "name": "McNoot", - "decimals": 9, - "logoURI": "https://arweave.net/NyYZJt_ItdAhB3Jc4M4j8zrO_Ytz2RrSsuzqcp3YmZ8?ext=png", - "extensions": { - "twitter": "https://twitter.com/littlenoots", - "website": "https://www.littlenoots.com/" - } - }, - { - "chainId": 101, - "address": "Basis9oJw9j8cw53oMV7iqsgo6ihi9ALw4QR31rcjUJa", - "symbol": "BASIS", - "name": "basis", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Basis9oJw9j8cw53oMV7iqsgo6ihi9ALw4QR31rcjUJa/logo.png", - "tags": ["utility-token"], - "extensions": { - "coingeckoId": "basis-markets", - "description": "BASIS is basis.markets' fee-sharing token. Holders are able to stake their BASIS tokens to receive a proportional share of trading fee rewards generated by the basis.markets Decentralised Basis Liquidity Pool (DBLP). BASIS tokens also give access to a high-reward liquidity mining programme, as well as, discounted future deposits into the basis.markets DBLP.", - "discord": "https://discord.gg/basismarkets", - "medium": "https://basismarkets.medium.com/", - "serumV3Usdc": "HsUNWR7ghHSumwDW3MNgs2HSh94yrDuZFVR1XpykA9or", - "twitter": "https://twitter.com/basismarkets", - "website": "https://basis.markets" - } - }, - { - "chainId": 101, - "address": "5bpYrWuERdLHJkgMoA3nrL98e3T3RV3sudgUPCWocirA", - "symbol": "BASIS-USDC", - "name": "Raydium Permissionless LP Token (BASIS-USDC)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5bpYrWuERdLHJkgMoA3nrL98e3T3RV3sudgUPCWocirA/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "DjPt6xxMoZx1DyyWUHGs4mwqWWX48Fwf6ZJgqv2F9qwc", - "symbol": "VOID", - "name": "VOID Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DjPt6xxMoZx1DyyWUHGs4mwqWWX48Fwf6ZJgqv2F9qwc/logo.png", - "tags": [ - "utility-token", - "game-token", - "game-currency", - "GameFi", - "Gaming" - ], - "extensions": { - "coingeckoId": "void-games", - "description": "VOID is a multiplayer online game with a strong focus on personalizing your character. Fight solo or in a small teams on epic on field battlegrounds.", - "discord": "https://discord.gg/rzfe6k39aU", - "facebook": "https://facebook.com/monkeyballgames", - "instagram": "https://www.instagram.com/void_dot_games", - "medium": "https://void-dot-games.medium.com", - "telegram": "https://t.me/voidcommunitychat", - "twitter": "https://twitter.com/void_dot_games", - "website": "https://www.void.games" - } - }, - { - "chainId": 101, - "address": "8q8WUe4m13VjJq4Jta1NAapVSqMj1edhzDGF7z7UPEta", - "symbol": "CLUB", - "name": "Club Coin", - "decimals": 0, - "logoURI": "https://dmc-generator.s3.us-west-1.amazonaws.com/club_coin_ee389828e3.png", - "tags": ["nft", "utility-token", "community"], - "extensions": { - "discord": "https://discord.gg/YGyWWHWJyX", - "twitter": "https://twitter.com/dogmonauts", - "website": "https://moonclub.xyz" - } - }, - { - "chainId": 101, - "address": "A97YQknPnoxPRRpnQdmxGkDzDzVAmN5Npo6R5oMWmrAG", - "symbol": "TEST", - "name": "TEST", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/F7mgxaYF1gg1hBtaVzENSG6ey3pn6J1mXhBRmHxDzBNg/logo.png", - "tags": ["meme-token", "community-token"] - }, - { - "chainId": 101, - "address": "3Z3iGPMSWWizHvyLsq1FcvoPempWK22UK6KoES6dHbSs", - "symbol": "MAME", - "name": "mameCoin", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3Z3iGPMSWWizHvyLsq1FcvoPempWK22UK6KoES6dHbSs/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.com/invite/TcCZGu7HfA", - "twitter": "https://twitter.com/mameCoin", - "website": "https://mamecoin.id/" - } - }, - { - "chainId": 101, - "address": "Bn94VJuH9LtBfNsjWffGzfjfMewbQFL2B26493Evv6zz", - "symbol": "SQRC", - "name": "Squarecoin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Bn94VJuH9LtBfNsjWffGzfjfMewbQFL2B26493Evv6zz/logo.png", - "tags": ["meme-token", "nft-token"], - "extensions": { - "twitter": "https://twitter.com/SquareheadzNFT", - "website": "https://squareheadz.xyz/" - } - }, - { - "chainId": 101, - "address": "BA7Kht54DCCaNyoRG7Te2Ynbwxk3QJ9fnSCHLY8qJazF", - "symbol": "DOJO", - "name": "Dojo coin", - "decimals": 6, - "logoURI": "https://storage.googleapis.com/dojo-coin/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://storage.googleapis.com/dojo-coin/index.html" - } - }, - { - "chainId": 101, - "address": "GJQ1iDoPWWo7pXeNKhC9BLD3FHL2tgFEVGMHYGEfQZT", - "symbol": "ALTAR", - "name": "Altar", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GJQ1iDoPWWo7pXeNKhC9BLD3FHL2tgFEVGMHYGEfQZT/logo.png", - "tags": ["Exchange", "DApp"], - "extensions": { - "telegram": "https://t.me/altarfin", - "twitter": "https://twitter.com/AltarFin", - "website": "https://altar.finance/" - } - }, - { - "chainId": 101, - "address": "5shLzmEZo5rsqcEKs3z42xVdHSqrv9c8mqaoBbxBrcKi", - "symbol": "PCRN", - "name": "PopCorn Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5shLzmEZo5rsqcEKs3z42xVdHSqrv9c8mqaoBbxBrcKi/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "HC3vmsaWD15wzw2V6EoXDtB2NL9Rruc7rjE65pPWubkK", - "symbol": "ORBEM", - "name": "Orbem", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HC3vmsaWD15wzw2V6EoXDtB2NL9Rruc7rjE65pPWubkK/logo.png", - "tags": [ - "utility-token", - "game-coin", - "ORBEM", - "Orbem-Coin", - "Orbem-Token", - "Duna-Games", - "Zyon-Defenders" - ], - "extensions": { - "discord": "https://discord.gg/f5GCcnZ7", - "instagram": "https://www.instagram.com/zyondefenders/", - "linkedin": "https://www.linkedin.com/company/duna-games", - "reddit": "https://www.reddit.com/user/ZyonDefenders", - "telegram": "https://t.me/joinchat/k4Rxha6DSzA2ODYx", - "website": "http://zyondefenders.com/" - } - }, - { - "chainId": 101, - "address": "2hdKbGbXiPHwyXdPyUCkAVuMEGfEu9eB1ampgYWBZpFy", - "symbol": "DST", - "name": "Dream Sanctuary Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2hdKbGbXiPHwyXdPyUCkAVuMEGfEu9eB1ampgYWBZpFy/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "DkRxg4Yrq92MAN5LCiQpH1DmsuZB3syUzWm2JobRFuP7", - "symbol": "TALENTS", - "name": "VURO", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DkRxg4Yrq92MAN5LCiQpH1DmsuZB3syUzWm2JobRFuP7/logo.png", - "tags": ["utility-token", "VURO"], - "extensions": { - "description": "Workspaces in the metaverse", - "instagram": "https://www.instagram.com/vuro.io/", - "twitter": "https://twitter.com/Vuro_io", - "website": "https://vuro.io" - } - }, - { - "chainId": 101, - "address": "74YedyBSKbjYzWMhwuBQz3mwsN6vuSSdAfzX9WLZQUtq", - "symbol": "GNAR", - "name": "GNAR", - "decimals": 2, - "logoURI": "https://cdn.jsdelivr.net/gh/AbdallaMalik/GNAR/logo/GNAR.png", - "tags": ["Utility-Token"], - "extensions": { - "twitter": "https://twitter.com/Komodo_Dragonz_", - "website": "https://komododragonz.com" - } - }, - { - "chainId": 101, - "address": "EfiqH74NTt8U3PE5gDXWAwF8JHsYWsTzTeskH31D2Qon", - "symbol": "CLB", - "name": "CLUBB", - "decimals": 2, - "logoURI": "https://cdn.jsdelivr.net/gh/AbdallaMalik/CLB/logo/CLB.png", - "tags": ["community-token"], - "extensions": { - "facebook": "https://www.facebook.com/Cllubbltd-103882295479000", - "instagram": "https://www.instagram.com/cllubbltd", - "twitter": "https://twitter.com/cllubbltd", - "website": "http://cllubb.com/cclub" - } - }, - { - "chainId": 101, - "address": "ALP8mkba7FHrpn18hGMRURF1aRNS7P2y1SRzqE6ra3Zo", - "symbol": "afUSDC-USDC", - "name": "Saber afUSDC-USDC LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ALP8mkba7FHrpn18hGMRURF1aRNS7P2y1SRzqE6ra3Zo/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-allbridge"], - "extensions": { - "website": "https://app.saber.so/#/pools/afusdc" - } - }, - { - "chainId": 101, - "address": "ALPDpWSYbwNkkuVB3wd1nZx7dZBLV7fEGvbDu9KJxLik", - "symbol": "aeFEI-wtUST", - "name": "Saber aeFEI-wtUST LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ALPDpWSYbwNkkuVB3wd1nZx7dZBLV7fEGvbDu9KJxLik/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-allbridge"], - "extensions": { - "website": "https://app.saber.so/#/pools/fei_ust" - } - }, - { - "chainId": 101, - "address": "ALPGFAuqQsWDB8NSKQ7rgQVhShj4LBCNC72ebdZrJs2e", - "symbol": "afETH-weWETH", - "name": "Saber afETH-weWETH LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ALPGFAuqQsWDB8NSKQ7rgQVhShj4LBCNC72ebdZrJs2e/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-allbridge"], - "extensions": { - "website": "https://app.saber.so/#/pools/afeth" - } - }, - { - "chainId": 101, - "address": "ALPaX3bS8zPKsVN6eS7Ln7dvEbDAfDtXsLz5pe2JRddq", - "symbol": "aeFEI-CASH", - "name": "Saber aeFEI-CASH LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ALPaX3bS8zPKsVN6eS7Ln7dvEbDAfDtXsLz5pe2JRddq/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-allbridge"], - "extensions": { - "website": "https://app.saber.so/#/pools/fei_cash" - } - }, - { - "chainId": 101, - "address": "ALPbh25PVwDDEhmJizhrtyhfgXNjh17RtbZc4i5ZAHdh", - "symbol": "aeMIM-CASH", - "name": "Saber aeMIM-CASH LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ALPbh25PVwDDEhmJizhrtyhfgXNjh17RtbZc4i5ZAHdh/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-allbridge"], - "extensions": { - "website": "https://app.saber.so/#/pools/mim_cash" - } - }, - { - "chainId": 101, - "address": "ALPfb7HJd4oenNBknjzCbVc2RooC5N1H6N391hbZ82ky", - "symbol": "aeMIM-wtUST", - "name": "Saber aeMIM-wtUST LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ALPfb7HJd4oenNBknjzCbVc2RooC5N1H6N391hbZ82ky/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-allbridge"], - "extensions": { - "website": "https://app.saber.so/#/pools/mim_ust" - } - }, - { - "chainId": 101, - "address": "ALPoQFUuKsoN6P4gLBiKXMSaYFP9YChniKwvKAFRPvn5", - "symbol": "afBTC-renBTC", - "name": "Saber afBTC-renBTC LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ALPoQFUuKsoN6P4gLBiKXMSaYFP9YChniKwvKAFRPvn5/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-allbridge"], - "extensions": { - "website": "https://app.saber.so/#/pools/afbtc" - } - }, - { - "chainId": 101, - "address": "ALPqczrbEXS8k5JF69tEPyu6TTE8qJbiwrzADfjVfKov", - "symbol": "afDAI-USDC", - "name": "Saber afDAI-USDC LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ALPqczrbEXS8k5JF69tEPyu6TTE8qJbiwrzADfjVfKov/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-allbridge"], - "extensions": { - "website": "https://app.saber.so/#/pools/afdai" - } - }, - { - "chainId": 101, - "address": "UST98bfV6EASdTFQrRwCBczpehdMFwYCUdLT5tEbhpW", - "symbol": "swtUST-9", - "name": "Saber Wrapped UST (Portal) (9 decimals)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/UST98bfV6EASdTFQrRwCBczpehdMFwYCUdLT5tEbhpW/icon.png", - "tags": [ - "wrapped", - "wormhole", - "saber-mkt-usd", - "wormhole-v2", - "saber-dec-wrapped" - ], - "extensions": { - "address": "uusd", - "bridgeContract": "https://finder.terra.money/columbus-5/address/terra10nmmwe8r3g99a9newtqa7a75xfgs2e8z87r2sf", - "coingeckoId": "terra-usd", - "website": "https://app.saber.so" - } - }, - { - "chainId": 101, - "address": "WLP7MDjSKGWxs2s6o2d8JFvvqLJD8KHZpcTAZf9ongE", - "symbol": "weSRM-SRM", - "name": "Saber weSRM-SRM LP", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WLP7MDjSKGWxs2s6o2d8JFvvqLJD8KHZpcTAZf9ongE/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-wormhole-v2"], - "extensions": { - "website": "https://app.saber.so/#/pools/wsrm" - } - }, - { - "chainId": 101, - "address": "WLP9nwD2FUJyNeKWGEi8QnF1a5G3VC7zM9uCqE1W8tx", - "symbol": "wibBTC-renBTC", - "name": "Saber wibBTC-renBTC LP", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WLP9nwD2FUJyNeKWGEi8QnF1a5G3VC7zM9uCqE1W8tx/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-wormhole-v2"], - "extensions": { - "website": "https://app.saber.so/#/pools/wibbtc" - } - }, - { - "chainId": 101, - "address": "WLP9zHZ3FcsPAcM891AQBn4ZWyS3wYgddiLPbSyzmDm", - "symbol": "weHBTC-renBTC", - "name": "Saber weHBTC-renBTC LP", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WLP9zHZ3FcsPAcM891AQBn4ZWyS3wYgddiLPbSyzmDm/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-wormhole-v2"], - "extensions": { - "website": "https://app.saber.so/#/pools/whbtc" - } - }, - { - "chainId": 101, - "address": "AvfTV1GztEciuYWsbJ2bDxxcPt1ZbyLe6tMPk7bmw7WM", - "symbol": "MFTK", - "name": "Macfor Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AvfTV1GztEciuYWsbJ2bDxxcPt1ZbyLe6tMPk7bmw7WM/Logo.png", - "extensions": { - "website": "https://macfor.com.br/" - } - }, - { - "chainId": 101, - "address": "4Y4z7at4WxCFs9TgVn5xJ6twMuyuRwSUyrUJoSea4GYP", - "symbol": "MIN", - "name": "MIN Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4Y4z7at4WxCFs9TgVn5xJ6twMuyuRwSUyrUJoSea4GYP/logo.png", - "extensions": { - "website": "https://shopee.tw/minpick" - } - }, - { - "chainId": 101, - "address": "EUrd5Mxa3UsREEPk3Zi6NvoJxrAN1MjxLTm1Vz3v8hk8", - "symbol": "DOWA", - "name": "Destiny of War Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EUrd5Mxa3UsREEPk3Zi6NvoJxrAN1MjxLTm1Vz3v8hk8/logo.png", - "extensions": { - "website": "https://destinyofwar.com/" - } - }, - { - "chainId": 101, - "address": "D2DWXG6oDhywmYeFXQy3pCkLp7RKiwuoSZgjhNSqx14N", - "symbol": "PIOLY", - "name": "Pioly Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/D2DWXG6oDhywmYeFXQy3pCkLp7RKiwuoSZgjhNSqx14N/logo.png", - "extensions": { - "website": "https://destinyofwar.com/" - } - }, - { - "chainId": 101, - "address": "6cKnRJskSTonD6kZiWt2Fy3NB6ZND6CbgA3vHiZ1kHEU", - "symbol": "ppUSDC", - "name": "Port Finance 2022 March Principal USDC", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FgSsGV8GByPaMERxeQJPvZRZHf7zCBhrdYtztKorJS58/USDC.svg", - "tags": ["port", "lending"], - "extensions": { - "website": "https://port.finance" - } - }, - { - "chainId": 101, - "address": "B64haiHLQoWdrvcJqufRG5dEMms96rDpwuaTjYTihQEo", - "symbol": "pyUSDC", - "name": "Port Finance 2022 March Yield USDC", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FgSsGV8GByPaMERxeQJPvZRZHf7zCBhrdYtztKorJS58/USDC.svg", - "tags": ["port", "lending"], - "extensions": { - "website": "https://port.finance" - } - }, - { - "chainId": 101, - "address": "J7WYVzFNynk9D28eBCccw2EYkygygiLDCVCabV7CupWL", - "symbol": "MONGOOSE", - "name": "Mongoose Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/J7WYVzFNynk9D28eBCccw2EYkygygiLDCVCabV7CupWL/logo.png", - "tags": ["MEME", "Community-token", "Mongoose"], - "extensions": { - "coingeckoId": "mongoosecoin", - "twitter": "https://twitter.com/mongoosescoin", - "website": "https://www.mongoosecoin.space/" - } - }, - { - "chainId": 101, - "address": "AHGXtqajWiph31bh5y3MfSK4Bo6JGyt3xpveEZ41ZLaX", - "symbol": "ARAB", - "name": "ARAB MONEY", - "decimals": 9, - "logoURI": "https://rawcdn.githack.com/arabpunkz/oillogo/8f141fb5d74220e3c8a5261508847b716a1b5b4b/arab.png", - "tags": ["community-token"], - "extensions": { - "discord": "https://discord.gg/4GS8A4VQWR", - "twitter": "https://twitter.com/arabpunkz", - "website": "https://arabpunkz.com/" - } - }, - { - "chainId": 101, - "address": "CooL7VvP1BoSmnPDTXUnKQgRo1tMUo9mHfmwMWn4sm9F", - "symbol": "$COOL", - "name": "COOLTURA", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CooL7VvP1BoSmnPDTXUnKQgRo1tMUo9mHfmwMWn4sm9F/logo.png", - "extensions": { - "twitter": "https://twitter.com/danipass0s", - "website": "https://cooltura.wtf" - } - }, - { - "chainId": 101, - "address": "kti1UbBFcCZbfccmGE57W9f6Byy5EY9YLLdsecs3UHa", - "symbol": "BUTTER", - "name": "Infamous Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/kti1UbBFcCZbfccmGE57W9f6Byy5EY9YLLdsecs3UHa/logo.jpg", - "tags": ["utility-token", "NFTs", "Infamous-Thugbirdz"], - "extensions": { - "website": "https://www.infamous-thugbirdz.com" - } - }, - { - "chainId": 101, - "address": "3rj25VfGX89DXMBTjghcpszibzx88NidMbUy2oHHKgSs", - "symbol": "BREAD", - "name": "Bread", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/kti1UbBFcCZbfccmGE57W9f6Byy5EY9YLLdsecs3UHa/logo.jpg", - "tags": ["utility-token"], - "extensions": { - "website": "https://www.infamous-thugbirdz.com" - } - }, - { - "chainId": 101, - "address": "Bq3N5VVipKZBqvQzz7tnzQGGU4kNdJaq3ZBgQncU7bLU", - "symbol": "TURF", - "name": "Turf", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/kti1UbBFcCZbfccmGE57W9f6Byy5EY9YLLdsecs3UHa/logo.jpg", - "tags": ["utility-token"], - "extensions": { - "website": "https://www.infamous-thugbirdz.com" - } - }, - { - "chainId": 101, - "address": "FCnc2S8Rk517EpobQX94SyUr3YDqHDiamWFFzQGKTKhp", - "symbol": "GVIBE", - "name": "Good Vibe", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FCnc2S8Rk517EpobQX94SyUr3YDqHDiamWFFzQGKTKhp/logo.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "5fibbme9FE1ttgaMHjKnt529va9Pf9oYEjJLU9F3G3s4", - "symbol": "AMBR", - "name": "AMBROSIA", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5fibbme9FE1ttgaMHjKnt529va9Pf9oYEjJLU9F3G3s4/logo.png", - "tags": ["community-token", "utility-token", "Ambrosians", "AMBROSIA"], - "extensions": { - "twitter": "https://twitter.com/ambrosiansnft", - "website": "https://ambrosians.io" - } - }, - { - "chainId": 101, - "address": "A7rqejP8LKN8syXMr4tvcKjs2iJ4WtZjXNs1e6qP3m9g", - "symbol": "Zion", - "name": "Zion", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/LousyNFTs/token-list/main/assets/mainnet/A7rqejP8LKN8syXMr4tvcKjs2iJ4WtZjXNs1e6qP3m9g/Ziontoken_2_84.png", - "tags": ["social-token", "community-token"], - "extensions": { - "coingeckoId": "zion", - "discord": "http://discord.gg/catcartel", - "twitter": "https://twitter.com/SolanaCatCartel", - "website": "https://catcartel.io/" - } - }, - { - "chainId": 101, - "address": "9kuK9j3HE33MAx3CDtbGQ9qg1cteQHNsRUV4i7JUh2bX", - "symbol": "CHARM", - "name": "Lucky Charm", - "decimals": 8, - "logoURI": "https://7rb7bdnwxw62kj4c7hle5pxatck5eycsl2tx4tlizgmlmjssdxna.arweave.net/_EPwjba9vaUngvnWTr7gmJXSYFJep35NaMmYtiZSHdo", - "tags": ["social-token", "utility-token"], - "extensions": { - "description": "CHARM is the token that allows the holder to influence the likelihood of a desirable outcome in random events in the metaverse", - "discord": "https://discord.gg/YGTJU6qzqK", - "twitter": "https://twitter.com/alleyesotprice", - "website": "https://www.alleyesontheprice.com" - } - }, - { - "chainId": 101, - "address": "Q7y93vgxVdwgn2D9TZkJqfML67dTVWeyGsQdPyfBzoN", - "symbol": "NICE", - "name": "Nice Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Q7y93vgxVdwgn2D9TZkJqfML67dTVWeyGsQdPyfBzoN/logo.png", - "tags": ["meme-token"] - }, - { - "chainId": 101, - "address": "GD57bW3qQaqk8HkbWrFV3t4tSAeJsjngFRtYwbF1wZhZ", - "symbol": "KLUB", - "name": "Koala Klubhouse", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GD57bW3qQaqk8HkbWrFV3t4tSAeJsjngFRtYwbF1wZhZ/logo.png", - "tags": ["NFT-token"], - "extensions": { - "twitter": "https://twitter.com/koalaklubhouse", - "website": "https://www.koalaklubhouse.art/" - } - }, - { - "chainId": 101, - "address": "Fv3ZG56M2cWvF8sy9VWzWyvtHPhugNc1BAzpyoAPvL7r", - "symbol": "SOLNUT", - "name": "Solana Nut", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Fv3ZG56M2cWvF8sy9VWzWyvtHPhugNc1BAzpyoAPvL7r/logo.png", - "tags": ["meme-token", "nfts"], - "extensions": { - "discord": "https://discord.gg/solananut", - "medium": "https://medium.com/@nutsolana", - "serumV3Usdc": "CUttKiPJyu3dsfNwzaEHusGqY36qNkuWcZrVGrnPe9KQ", - "twitter": "https://twitter.com/Solana_Nut", - "website": "https://solananut.com/" - } - }, - { - "chainId": 101, - "address": "FiFxBfTSqcz6vWRbp5TKbyhgfkXauSfHiRwxKqMcbuNA", - "symbol": "FIF", - "name": "Fifsee", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FiFxBfTSqcz6vWRbp5TKbyhgfkXauSfHiRwxKqMcbuNA/logo.png", - "extensions": { - "twitter": "https://twitter.com/fifseeofficial", - "website": "https://www.fifsee.com" - } - }, - { - "chainId": 101, - "address": "2FkjWQNwKC2mW9cdyYs9umVU58cJAFSig7wcxShTowST", - "symbol": "AUTH", - "name": "Auth Token", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2FkjWQNwKC2mW9cdyYs9umVU58cJAFSig7wcxShTowST/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "D9mWdqrs7bpXEcTpocadL2kPWdAJQfMqWbSsxzT2L8qN", - "symbol": "CERTIDOX", - "name": "CertiDox Token", - "decimals": 9, - "logoURI": "https://certidox.com/assets/images/logo-light.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://certidox.com/" - } - }, - { - "chainId": 101, - "address": "CeLAKJWAhNNixku9eLRB3CL9oB6eRE4z2mU6kGdgTgw", - "symbol": "BROCK", - "name": "Brock Coin", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CeLAKJWAhNNixku9eLRB3CL9oB6eRE4z2mU6kGdgTgw/logo.png", - "tags": ["meme-token", "nfts"] - }, - { - "chainId": 101, - "address": "91AmTdeHp458JAkkNzVa2gjGnA7tqHAMyuqVG2TauRJU", - "symbol": "RAG", - "name": "RAGNAROK", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/91AmTdeHp458JAkkNzVa2gjGnA7tqHAMyuqVG2TauRJU/logo.png", - "tags": ["community-token", "utility-token", "Game", "NFT"] - }, - { - "chainId": 101, - "address": "B1nrnT8LvkxqJFw3A9tWoXCpbLUNKYkn8gW8qYZoTRaN", - "symbol": "COBRA", - "name": "Cobra Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/B1nrnT8LvkxqJFw3A9tWoXCpbLUNKYkn8gW8qYZoTRaN/logo.png", - "tags": ["COBRA", "Community-token", "MEME"], - "extensions": { - "twitter": "https://twitter.com/cobracoin_", - "website": "https://www.cobracoin.info/" - } - }, - { - "chainId": 101, - "address": "BECBejLA8KGEzXKvfCwyuFFfeiyhBYxULF4MhVdyduQ5", - "symbol": "HONEY", - "name": "HoneyCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/LeonardHRonan/honeycoin/main/logo%202.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Ea2t1QJFvpFueiju9qgtJX5dXjEt7PjQ2KNrWZA7bkSL", - "symbol": "PNDC", - "name": "PandaCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Ea2t1QJFvpFueiju9qgtJX5dXjEt7PjQ2KNrWZA7bkSL/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "je2RGLazSDwyG4fReN7endwmM472aotoETMuGscrUDF", - "symbol": "NOP", - "name": "Napkin Of Power Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/je2RGLazSDwyG4fReN7endwmM472aotoETMuGscrUDF/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CSwXHpHP4Gwg1qXSjR45zmNaVNxSkVf8qy3PCNR45XTL", - "symbol": "AZMD", - "name": "AZMD Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Magic-Deceiver/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9QXAu7FTf7hmswBQwKxvuqGgWH42FyQjqXJanUt6y4eC", - "symbol": "MOUNT", - "name": "MOUNT", - "decimals": 9, - "logoURI": "https://arweave.net/fy9pbbRbYRg-Y40B34ojIGrb3wxpadQgsiktan1LfKY?ext=png", - "extensions": { - "twitter": "https://twitter.com/MetaMounts", - "website": "https://metamounts.io/" - } - }, - { - "chainId": 101, - "address": "GNAvTeFYjQ3BGgzAy1VThHLj9GxXCz8QmocfYpUbARca", - "symbol": "CRDK", - "name": "Conrad Duke", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/crazyclimber73/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DEbfwv4einBrcPbQsymvHctbzcdZZE9y9sHMTTirTJmo", - "symbol": "CKING", - "name": "Crypto King Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/CKSLLC/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GjCHuYuccKrjugBMmYYC17W42zNHNB7XeSxNCXZeetS4", - "symbol": "GORD", - "name": "Gordon Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GjCHuYuccKrjugBMmYYC17W42zNHNB7XeSxNCXZeetS4/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DTRZj3UpNdRZYDNybwo8QWiF1sRLta9gjWv4vhLMW62P", - "symbol": "CM", - "name": "CashMoney", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/hhannis/digitalassets/main/cashmoney.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EmrbjdPbxvVjgU412w8FeLQSC354d3vPLcp1y3WNqq84", - "symbol": "COCKS", - "name": "GAMECOCKS COIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/stsomeware/gamecockcoin/main/gamecock.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FLB6MZMSNtYzL9dJfbfuZwP9hkTrGV3UGiGFuCj1SChn", - "symbol": "GCTK", - "name": "GruntCode Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/gruntcode/crypto/main/gclogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9Ut9K1ntBd8qu8kihDUtEfUPuiujg5eGdCyHHdgAYyPh", - "symbol": "TXBY", - "name": "TxByte Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/txbytecoin/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HdmqgX1u1TzeJFw62UGi3NAvbrBqBM39Vg7WRFDKexHo", - "symbol": "BUSCH", - "name": "Busch Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/TheFortuitous/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DUpCdjkkKcaCvVeWNxxUajLLNmcoZ8qdohtq42RnR9rx", - "symbol": "MRC", - "name": "MerlinoCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/timo42453189/crypto/main/logo.png", - "tags": ["cat-token"] - }, - { - "chainId": 101, - "address": "4WZQUN8Kt4UE1L7L5XhdffTDL1cbPKUzFakXyv59GP84", - "symbol": "FAJW", - "name": "Faj Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/hgoudat/fajwahcoin/main/faj-color-square.png", - "extensions": { - "website": "https://www.fajwah.com" - } - }, - { - "chainId": 101, - "address": "5JaZgVn2LuKmRyBMhcfydq6L3dxmZhySeTE7rePYbH3k", - "symbol": "RLAB", - "name": "Research Lab Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/LouisWhit/socialspreadinggames/main/virus-token.png", - "tags": ["utility-token", "social-token", "community-token"], - "extensions": { - "discord": "https://discord.gg/wm4f7szXuU", - "twitter": "https://twitter.com/VirologyNFT", - "website": "https://www.virologynft.com/" - } - }, - { - "chainId": 101, - "address": "6nY5u2KWywfY6ERXgBBr6YNfBATHi13HT1fge64vCAKo", - "symbol": "HOHOHO", - "name": "Santa Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6nY5u2KWywfY6ERXgBBr6YNfBATHi13HT1fge64vCAKo/santa.png", - "tags": ["meme-token", "community-token", "bull", "nft", "utility-token"], - "extensions": { - "discord": "https://discord.gg/XE2PjtcyXs", - "website": "https://santacoin.xyz" - } - }, - { - "chainId": 101, - "address": "9kauevxBjRrZef2PqwZVW4edrkNZ2KkPfmUx3R3QhRdy", - "symbol": "AWCN", - "name": "AwfulCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/AwfulGamer1/crypto/main/40397979_10155824824890773_871328072698167296_n.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9NkjeLqSoWpQVZw12DHu9aTuyR4ssbgzDrjR2anKsZaF", - "symbol": "LEG", - "name": "Legion Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/dorian-gabIer/legioncoin/main/3633.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Cez3uhQiwAMMNsmKGd1YH5Xbf1cNb7pdmNDjZTmr6vpc", - "symbol": "TOEKEN", - "name": "Toeken", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Cez3uhQiwAMMNsmKGd1YH5Xbf1cNb7pdmNDjZTmr6vpc/logo.png", - "extensions": { - "website": "https://www.toem.art/" - } - }, - { - "chainId": 101, - "address": "5xjbrm9xXNNPScdgy9kz6burQ2dXoASkQP1cUQtjZrcb", - "symbol": "TOKE", - "name": "TOKE TOKE'N", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5xjbrm9xXNNPScdgy9kz6burQ2dXoASkQP1cUQtjZrcb/logo.png", - "tags": ["toke-token", "utility-token"] - }, - { - "chainId": 101, - "address": "6g6GDxiHh6y4DSnmUEMCU3Wk111RPTAoNgUwZT7R7x7E", - "symbol": "BRT", - "name": "Bear Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/teemuvayrynen/beartoken/main/logo.png", - "tags": ["meme-token"] - }, - { - "chainId": 101, - "address": "QA4wEnnsYhneiss2grLFcnyjV5RjQ1mauADjPsjY1iX", - "symbol": "KEIK", - "name": "BearHat", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/indigoMeursault/cryoti/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CU2Qz8X4ZTvqja23RUQ8XNWwf8T7Et68LPcxQ5eaF5LT", - "symbol": "GDGR", - "name": "GudgerCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ngudger2021/crypto/main/gudger-coin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EKpxcWttG5hcoRTZbo4owL4t3rGMMoPbv53cuu2Vv5do", - "symbol": "GENE", - "name": "The Gene Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/didyourobit/logo/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CNVT48GsJeUBLLVVM9DG7SKaJJeBuskB2wCwrEKHHiE1", - "symbol": "LOI", - "name": "Loial", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/luisyamashiro/Loial/main/Loial.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5SnqZ1eUf9QtLya5PuV9ddsisRZrobSdNd1iRbg2p3sZ", - "symbol": "FURY", - "name": "FuryCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/gondor5/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "JBjj5FKogTJUjZUPhftYePkLzWToR2y7Gc1mNfS58AGK", - "symbol": "GUMN", - "name": "GuCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/gibbs5126/crypto/main/Gumine.PNG", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7SAWTcarCZGvGATppHAxYucAQ43MkwBRVF2FS8DCaty1", - "symbol": "SM3y", - "name": "SM3y Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/smalley1992/crypto2/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HDsN12NXKpseHW6nC935C2pdVwZT5fegojH8t4i23HYn", - "symbol": "C10", - "name": "C10 Inc Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/parkerhemming2001/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DU7fpiWoJcJn1zAPqRKsXuWjFuWPcoP6osq6L7XSDSa2", - "symbol": "DUCK", - "name": "DuckCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mrcpapa/duckcoin/main/duckcoin-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2VLVsnz9AGP5beSwsqWBfsqdkW9L67nFvA6xoM18PqP9", - "symbol": "LUMA", - "name": "LUMA Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/gabrielfigueroa/crypto/main/unnamed.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HR4fmpx558JsboAhJKgkGRVYdq2DeK3atGygw8Em9REq", - "symbol": "WANE", - "name": "Wane Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/hamdouka93/Crypto/main/maxresdefault.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GsE1t2A9a7Bq7pGBAKFNqFTvwqkBtCD6B7QU8fLYkBd5", - "symbol": "glowiebois", - "name": "DEEP WEB HONEYPOT", - "decimals": 0, - "logoURI": "https://github.com/dylanbaker12/crypto/blob/main/th.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CcGwAW2xcDuWAtn8Q74xbsAYC5wdidVMtvaFRPi15BRM", - "symbol": "MKST", - "name": "MakaroSoft", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/tmakaro/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "66sTs6BUychYMy5dy9yPXPz3wQVRkFrbi5uvLttmjVvH", - "symbol": "wtf", - "name": "WonTooFree", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/PenTestTom/crypto/main/Logo-White.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FxdKLE4qaoUGGfGRFmtsWCmypLVmP5xv76KZZn8gbEH", - "symbol": "LAZO", - "name": "Lazo Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/John7Lazo/lazocoin/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EudR9SP68ycb4uApJChFCyzdmAjwgeaCYxXR6u9R5mCx", - "symbol": "BWRX", - "name": "BAYWORX", - "decimals": 0, - "logoURI": "https://github.com/bayworx/crypto/blob/main/bw_gear.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4YRtGRmbFZVzqetnJge9cPTA7PJpK51fyv8huwbJAzGt", - "symbol": "PEP", - "name": "Pepega Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/thevoid69/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5abvCZ66fh2pt36V66YG5X2PoERSbS6qri69dnTuwrem", - "symbol": "RICOIN", - "name": "Rickoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/RickyvdBerg/riccoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AhwH3NSkyzGfasYpXA1N7v1KJJu6rFkeQ8EKuoh3Ab3C", - "symbol": "LNFTxLIQ", - "name": "LNFT SolPunk-9456", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AhwH3NSkyzGfasYpXA1N7v1KJJu6rFkeQ8EKuoh3Ab3C/logo.png", - "tags": ["liqnft-owner-token"], - "extensions": { - "discord": "https://discord.gg/PYZWRHgVwM", - "twitter": "https://twitter.com/liqnft", - "website": "https://www.liqnft.com/gallery/LIQ" - } - }, - { - "chainId": 101, - "address": "4tJRo9Dfd5q9ddoJztsu9sq7h3uhrPVEgxoqHgnjZ1Ck", - "symbol": "RUNR", - "name": "CryptoRunr", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/cryptorunr/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "JAzhmrgDUpGHvcBgfD1F1EsszUPnKuw1qfBtRDMQUxMk", - "symbol": "TJ", - "name": "Tarja", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jonathancywa/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DeGqHpa2M5icraaadStxgvQaV37rkQLKv2XSZQ2H1rXD", - "symbol": "LEGI", - "name": "Legion", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/dorian-gabIer/legioncoin/main/3633.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "73vwXADoix7uPRfTLhPQX2Cabv5hM5W5MEZ6WZUj16r9", - "symbol": "KARC", - "name": "KarmaCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/skidad75/karmaToken/main/karmaCoinLogo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CFhGVFKsBFmQzBrcXRFQBoYfe2Q38hb8LTfwGGD3Va1o", - "symbol": "NOOD", - "name": "SolNoodles", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CFhGVFKsBFmQzBrcXRFQBoYfe2Q38hb8LTfwGGD3Va1o/logo.png", - "tags": ["NFT-token"], - "extensions": { - "instagram": "https://instagram.com/solnoodles", - "twitter": "https://twitter.com/solnoodles", - "website": "https://www.solnoodles.com/" - } - }, - { - "chainId": 101, - "address": "6AbPCZfkwLsQ8mVNXXUyv76zKd8qduigBur6pRezmNFf", - "symbol": "KORA", - "name": "Kora", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/shaneholloman-org/crypto/main/logo.svg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DVEco5eLPWqKQpEZq2XAFwyRaQuZ1KhVLw555Yky9E2U", - "symbol": "PTXE", - "name": "ProtoCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/klercke/protocoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HDKhvWcHmHQz6tF5iotDUTrZ2jNAqgjeKHT7YiXWSv6a", - "symbol": "PDA", - "name": "PandaToken", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ZetaWaves/PandaToken/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8r2xj9f8ud4NVEkiLUk2dyzVxAckZbyidKRsTp41xAzv", - "symbol": "CYCX", - "name": "CYCLYCX Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/evantye/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2ri2nbqn2nSzcjnqksVrG8cHpbKXgGN8RqGwPHC7LYKz", - "symbol": "MFOX", - "name": "MetaFox", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/metafox8/mfox/main/logo.png", - "tags": ["social-token", "community-token", "meme-token"] - }, - { - "chainId": 101, - "address": "6g9XX8V5eyQEpE5paRx3di56UXXpdJ1XSEtrKvp3Jk8S", - "symbol": "FLPC", - "name": "FlipCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/shnabz/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6yvVwhfmy5nnAP2WEmQMQSpEhKUR2a6ekDcop6F6GcHd", - "symbol": "CEMA", - "name": "CEMA Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/LightOrithm/crypto/main/logo.png", - "extensions": { - "twitter": "https://twitter.com/lightorithm", - "website": "https://foxanchor.com/" - } - }, - { - "chainId": 101, - "address": "12xkr3HDV3r3rgCNa2YPBSsmpBAfpxLeu64UkzPMp5k4", - "symbol": "DTBN", - "name": "Databending Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/AdamJSoftware/databending-coin/main/databending_coin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5itxjY1UM58Z2y77rkW5cRZt6qx8WGAtg6Q36NszDaXa", - "symbol": "VRTX", - "name": "VortX", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/MilesBellum/VortX-Token/main/logo/VortX_Token_logo.png", - "tags": ["social-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/VortXToken", - "website": "https://vortxtoken.com" - } - }, - { - "chainId": 101, - "address": "DJwhXmhFHqUEntFPT5ZYvFm1Pt3ZYvbGxKQ2YAB1qNgE", - "symbol": "PSBT", - "name": "PassByte", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/digitalworld-crypto/PassByteToken/main/PassByte%20Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BRe8gKGMCfNvzdGEmV3JDWbn3hjqf1Vptsw5eeFrupjd", - "symbol": "MANDA", - "name": "Mandanapu", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Akhandaaa/Snowman/main/Logo.PNG", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4pLFiemidbyyiGzP4C7jSpnLabCaZmJWTGeSnet7pwBW", - "symbol": "TQSI", - "name": "TemQueSerInvestigado", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/tqsinvestigado/tqsi-coin/main/TQSI_logo.png", - "tags": ["social-token", "investigation"] - }, - { - "chainId": 101, - "address": "U3aivtiLGRUgtek1s9YCdnancYr5VCTLJ6RoapYiNJN", - "symbol": "SPKY", - "name": "Spooky Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/DovahKemp/Crypto/main/d5nacc0-98fe73be-a868-428e-8ea1-d7d7fda6a093.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "udwm8g41w7Ua7BqtVCw3n5HM3Xa8pF1CeqVv2MSbt2D", - "symbol": "ODIN", - "name": "Odin Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Aygran/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7Y82cteBE5kUBrFURoYkMUMLNoydYxH6xXkqai9kPECa", - "symbol": "BNCH", - "name": "BenchCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/JoshSennett/BenchCoin/main/Benchcoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7Y77sFZfUKDgnxYGBZiBdc27avQBPYnd35tNqub8xjVx", - "symbol": "PICO", - "name": "PiCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/2piMicrosox/crypto/main/2Pi.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5g8aQtjg6rw8Yr6kDSxtgr7e6CrBjxrUNJKLMtsCFvDk", - "symbol": "BQNT", - "name": "Boriken Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/KP4CA/crypto/main/bqnt.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GV8YdQA9GRHHWeqkibydNNxfhP4N6Vg3k551MN1RRZpb", - "symbol": "LOSP", - "name": "LOCOSPdotORG", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/LOCOSP/locosp-coin/main/logo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3k87Pv2ZfFrhTUpaf9xcXCN2vBKG4zBVuffvc3dT5PuL", - "symbol": "MYMD", - "name": "My Maid", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ldnetwork/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9rp6efeEcbqSRmJRYtN4rGbxtaz7qnhocFY7DvTjJnz9", - "symbol": "POOP", - "name": "Nincompoops Investments Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/patrick-nincompoops/nicoin/main/NI.png", - "tags": ["social-token", "community-token"], - "extensions": { - "website": "http://nincompoopsinvestments.com" - } - }, - { - "chainId": 101, - "address": "HRTU4H7FticycnuHSJty2eCbva1JjCn194fEVCKQWgw7", - "symbol": "KEIK", - "name": "CuliacanCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Culiacancoin/Crypto/main/460-4601862_logo-puro-sinaloa-calidad-hd-png-download.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3EmsKNv1Hze2KsfzBPwvWPVoCDfV9NQXD5uQjnyh9kCu", - "symbol": "PHC", - "name": "PegCoin", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/PegHeads-Inc/PegCoin-Image/master/PegCoin.png", - "tags": ["utility-token"], - "extensions": { - "github": "https://github.com/PegHeads-Inc", - "twitter": "https://twitter.com/pegheads1", - "website": "https://pegheads.ai" - } - }, - { - "chainId": 101, - "address": "GGpfnHaiQnnQ7wBbMB6MAipzaDLeSmCjDgf9GipyDsmu", - "symbol": "AUM", - "name": "AumKara", - "decimals": 0, - "logoURI": "https://github.com/ppbrahm/crypto/blob/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8XcFaoWqS4V7TZD415EBYBn7ZV8kkLCxxDEEb6HwSEyc", - "symbol": "PTC", - "name": "Patel Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/RushBeats/PatelCoinLogo/main/patelCoinLogo-min.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "GgBxABwcwpScmzqMb5tpS1JUVau7gf8gzK7WCdMqru3f", - "symbol": "DMMM", - "name": "Dent Man Mike", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/dentmanmike/crypto/main/dentmanmike.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7rGsvajFsjHeq6PTUsdZzNBUpTu88y6i1YP7npkopBJk", - "symbol": "AVLC", - "name": "AntiviralCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/AndrewAubury/cryptoimages/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FhGt8avUy8fKafd8rDAXWVfH19NUgZtyL8F7JojnVyBK", - "symbol": "GNG", - "name": "Ginger Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/z3rodown/gingertoken/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "87qcCHFHdyRkpKYWCnvVYUX6gqnGYCcsN29Zi8c5aAfo", - "symbol": "DAZC", - "name": "Dazcoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/faikwo/dazcoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "JmbT6JEib5gUKuM49YNs67u6Sc37z3AVq9XeXCUMuqe", - "symbol": "HOLF", - "name": "Heathen Ohana", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Thorne79/crypto/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BLjf2hgEoZNtrKFqbnXYcHnnXB6YecDEh6npUvEBe4uT", - "symbol": "918C", - "name": "PAC918 Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/dfdubtv/crypto/main/logo.png", - "tags": ["social-token", "community-token", "metaverse", "utility-token"], - "extensions": { - "twitter": "https://twitter.com/PAC918coin", - "website": "https://pac918.com/coin" - } - }, - { - "chainId": 101, - "address": "9QxjCX6G69kbjdVmwUaNtmhPmnMgeKaMNAdmC8eoMPgW", - "symbol": "STCN", - "name": "Spanishtown Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/oldschooldesignz/crypto/main/spanishtown.png", - "tags": ["social-token", "community-token", "mardi-gras-token"] - }, - { - "chainId": 101, - "address": "7uB6y88ECgZE6dkwXHJAmQzzKiNeKSH7PSaPBxux3sXw", - "symbol": "CABC", - "name": "Cable Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/AshtonCable/cablecoin/main/cable-games-bg.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Hpfv5wUCASzmuBzbt24GbTHA2AL32KBZCeNntPmDeZTs", - "symbol": "WYK", - "name": "WaYaK Monke", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/pyrohunter13/crypto/main/coin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9nDPtHURxy4WByYnyjmish1Sehzpnq4qtLZpSXrb863N", - "symbol": "DAO", - "name": "DAO Coin", - "decimals": 9, - "logoURI": "https://therichdao.com/images/daologo.png", - "tags": ["community-token", "social-token"] - }, - { - "chainId": 101, - "address": "AJt9AteA9QoFtnHc768WGykgWN4zcY8aSYB9LojHfLvn", - "symbol": "GAME", - "name": "Game Coin", - "decimals": 8, - "logoURI": "https://gameficoin.com/game/gamelogo.png", - "tags": ["gamefi", "meme"] - }, - { - "chainId": 101, - "address": "AcYyc7e6kwre2FUWk2x26HFVYr1A6eg5uoW2XhcHpyCr", - "symbol": "Web3", - "name": "Web3 Coin", - "decimals": 9, - "logoURI": "https://freetimecoin.com/images/web3logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "F9pjKSbaZBk7833Q96msrVrqvxN3AqbC9NEfPwPLkCoY", - "symbol": "GSCA", - "name": "Geko State Coin Alpha", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/rath17023/GSC/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FXs5Sdz1d4hitKhmT58z2f134eCDashjKaEfJvEzfZ75", - "symbol": "VIRUS", - "name": "WVO Voting Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/LouisWhit/socialspreadinggames/main/wvo-token.png", - "tags": ["utility-token", "social-token", "community-token"], - "extensions": { - "discord": "https://discord.gg/wm4f7szXuU", - "twitter": "https://twitter.com/VirologyNFT", - "website": "https://www.virologynft.com/" - } - }, - { - "chainId": 101, - "address": "BTeSJi1ek9Eq7M3DN9j59R7xyexiZ7Vih8ucv7F2uNqs", - "symbol": "COCO", - "name": "CoconutCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/wgpowers98/Crypto/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CYLCxdEcrn9sQGnGHb3JqPDEnMpcjVAGjaFE99kDnXsc", - "symbol": "TXC", - "name": "TruexCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/truexcoin/truexcoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5Z7bWSvcxVeUkroSypFW3Tsw7vPoJUcCxhTFNenLxNoR", - "symbol": "MSP", - "name": "MSP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5Z7bWSvcxVeUkroSypFW3Tsw7vPoJUcCxhTFNenLxNoR/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "9vGzJqzi15XKFzaFULcjcpzKpnYZcP7MwN64AE4F5KMx", - "symbol": "DYC", - "name": "Deany Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/LightHardt/crypto/main/Studio_Project.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AVqtRUtYiLdJ2jEk3PYuJNpom3E4sRqfNWBoTEnwR7Ao", - "symbol": "CGC", - "name": "Charitable Giving Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/XxXDark-LordXxX/Charitable-Giving-Coin/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DGBdLTdgbV1cTYQKjLWBVEZ64L1k6YikwTzfqHYYciNv", - "symbol": "FAROS", - "name": "Arte FAROS", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Luiort/FAROS/main/logo.png?token=AHER75IJ66LAPA7763KI2RLBWRFDI", - "tags": ["social-token", "Art-token"] - }, - { - "chainId": 101, - "address": "GYjr7M9Pt2n7eFTw1auyxMsYin9AXGcGFT6JjRehkwhn", - "symbol": "BANC", - "name": "Banana Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/alpine-token-gh/crypto/main/banana_pix.jpg", - "tags": ["social-token"], - "extensions": { - "discord": "https://discord.gg/fGWr9WRGvu", - "twitter": "https://twitter.com/bananatokensol", - "website": "https://justbanana.io" - } - }, - { - "chainId": 101, - "address": "AoxZQGRUcRaQJgtmVa8ydm3euZdvMfn8fCRJWFBqLc4Q", - "symbol": "FRLX", - "name": "FRALEX", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AoxZQGRUcRaQJgtmVa8ydm3euZdvMfn8fCRJWFBqLc4Q/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FZVTWqHifiTAozipkCz5mtERSZQRPg9JV1GZFXXetRij", - "symbol": "PTA", - "name": "Prometa", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FZVTWqHifiTAozipkCz5mtERSZQRPg9JV1GZFXXetRij/ProMeta.png", - "tags": ["community-token", "meme-token"], - "extensions": { - "discord": "https://discord.gg/7Tza6buS", - "medium": "https://medium.com/@plusmetaofficial", - "reddit": "https://www.reddit.com/user/Prometaoffcical", - "twitter": "https://twitter.com/PrometaOfficial" - } - }, - { - "chainId": 101, - "address": "EPbF1VLfd2suCRCVcnK1Ly1wrvE4jRc6rSN4yrnS7hUk", - "symbol": "HHC", - "name": "Humphry and Halo Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/GoldenCrow217/crypto/main/H%26H%20(1).png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "81RucdFcT4Hmw71Tq6A5kUsk7py7DwoWPKWvjfGkzhDC", - "symbol": "BTY", - "name": "Bity Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Titi923/Crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BWdQJ7mQS81MujywpixqtpPnCdLmiuiVANwLaMnRHDxs", - "symbol": "SNEKY", - "name": "Sneky", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/MrOddbird/crypto/main/logo.PNG", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EvWmXXuZA6J1RCeATbUYupFcjMtSanoYEadX8SZxAHeZ", - "symbol": "GNEG", - "name": "GNEG Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/sausgulparen/logo/main/gneg.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "69pC7U7hod1ZLggEj9KoftVBseEKq3TwCwAvffEP24dp", - "symbol": "MXRS", - "name": "MAXRIS", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/m4xr1s/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HjC5UnFFVDyhtcCQQa6wDEQFcDfFZrpSAckABGf4Q1gx", - "symbol": "POKIES", - "name": "Pokies Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Kumara-Upadhayayula/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8DSUDdZuCvUQ8FxASUUJBE2M8QmDVojTim9K99c9oPjm", - "symbol": "IXDT", - "name": "IXDT", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ixdt/dotfiles/master/i.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "s3rrsS4VHhJVNehT95LyTbTr33bijpcXQy5s7ukEJ5q", - "symbol": "SBC", - "name": "Sam Bear Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/s3rrsS4VHhJVNehT95LyTbTr33bijpcXQy5s7ukEJ5q/logo.png", - "tags": [ - "meme-coin", - "meme-token", - "community-token", - "nft", - "bearish", - "monetary-experiment" - ], - "extensions": { - "discord": "https://discord.gg/eRgSfy5ACA", - "twitter": "https://twitter.com/SamBearCoin", - "website": "https://sambearcoin.art" - } - }, - { - "chainId": 101, - "address": "H87svx8UzhFKnGPr412zbEPtfym4pbZKfdPnxy7af6Ux", - "symbol": "MUD", - "name": "Malik Draz", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/malikdraz/malik-draz-solana-crypto/main/malik-draz-crypto-logo-solana.png", - "tags": ["social-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/malikudraz", - "website": "https://malikdraz.com", - "youtube": "https://www.youtube.com/channel/UCCZNFtE6ghcRlpcwuzmZJIA" - } - }, - { - "chainId": 101, - "address": "48JBpRSKQApwkyzfUTwbGqMXXk4kmSYmT8tad6dPXN4E", - "symbol": "PFC", - "name": "Proficoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Iferencak/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "A2ALonhy5FnjbhwY9BgVsrLhEodTFd8jMfJ2V3nZDNpy", - "symbol": "PSC", - "name": "The PS Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ps3460/crypto/main/logolg.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "A26a8gt8H28XSUwnhQGAyLwnKaeGAsWX6wxJUZ8fxtLf", - "symbol": "DNK", - "name": "Danko Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/BratanFree/cryptodanko/main/danko-logo.jpg", - "tags": ["social-token", "meme-token"] - }, - { - "chainId": 101, - "address": "DkXnDJfqp38YBYjJ2BmPvBKeaS2BHExzwhnYRyLEQ6sX", - "symbol": "URA", - "name": "URA", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DkXnDJfqp38YBYjJ2BmPvBKeaS2BHExzwhnYRyLEQ6sX/logo.png", - "tags": ["dao", "gaming", "gamefi", "governance-token"], - "extensions": { - "discord": "https://discord.gg/NqmHKDZp8d", - "facebook": "https://www.facebook.com/uranusx.official", - "reddit": "https://www.reddit.com/r/uranusx_official", - "telegram": "https://t.me/uranusx_global", - "twitch": "https://www.twitch.tv/uranusx_official", - "twitter": "https://twitter.com/uranusx_global", - "website": "https://uranusx.io", - "youtube": "https://www.youtube.com/channel/UCclA3Nu86rRSrzzcVWIUQdg" - } - }, - { - "chainId": 101, - "address": "6ifkw5MWM9pAL9x2dVkAUM6Bf962zHKRqnvjGz4UbibA", - "symbol": "ROBO", - "name": "ROBO", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6ifkw5MWM9pAL9x2dVkAUM6Bf962zHKRqnvjGz4UbibA/logo.png", - "tags": ["dao", "gaming", "gamefi", "utility-token"], - "extensions": { - "discord": "https://discord.gg/zpYNxg7NUy", - "facebook": "https://www.facebook.com/roboworld.official", - "reddit": "https://www.reddit.com/r/roboworld_global", - "telegram": "https://t.me/Roboworldglobal", - "twitch": "https://www.twitch.tv/uranusx_official", - "twitter": "https://twitter.com/uranusx_rbw", - "website": "https://roboworld.io", - "youtube": "https://www.youtube.com/channel/UCclA3Nu86rRSrzzcVWIUQdg" - } - }, - { - "chainId": 101, - "address": "2fvPmqYk1NemSQ3NFUSu3zw3LgiZKxzFoz79oqkKdmaY", - "symbol": "PXE", - "name": "PixieCat", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/DavidJKTofan/pixie-crypto-token/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7C7c4Ci84sZMySSYkwQ4YKMQtnNPhdTbbnSTsoDC4cjs", - "symbol": "TOST", - "name": "Toast Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/toztii/logo/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DaaHNKna19EUgVyWS8MRBa8pvAfjvi3TTVWqVRucNgkH", - "symbol": "PKLC", - "name": "Pikls Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Metamorfolog/crypto/main/piklsCoinUpdate-min.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9h4xLqWTpuqcGB7nzD17vWTBxhZdjVWrumoPLsnKSoT1", - "symbol": "CY1", - "name": "CJ", - "decimals": 0, - "logoURI": "https://github.com/christos1996/Crypto/blob/main/pngtree-blue-bird-vector-or-color-illustration-png-image_5266726.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BAcKERxnjUoWNDPzv6SjE1piZEhZPcLgcgpcxYiCSKvy", - "symbol": "SOLB", - "name": "Solbacker", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BAcKERxnjUoWNDPzv6SjE1piZEhZPcLgcgpcxYiCSKvy/logo.png", - "extensions": { - "telegram": "https://t.me/solbacker", - "twitter": "https://twitter.com/solbacker_io", - "website": "https://www.solbacker.io/" - } - }, - { - "chainId": 101, - "address": "3WLPaFRqiUT79dNQFBVdK6HVtDfHVEywfNww8JPfQfXu", - "symbol": "GL", - "name": "GalaxLite Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/greysonleong/Crypto/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CDLamTV7E1dgSQFw3YiiZnhNfSRKz9Wvhc3K3NzVKT7m", - "symbol": "NIL", - "name": "Nil Coin", - "decimals": 0, - "logoURI": "https://github.com/chayelheinsen/nilcoin/blob/80b91ee7d96d631e4d4e6bbeaf22b5cfa136cf47/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Cyg784suVRPBekZ3EsAc2UjDfvbZk9iu9HphD9BkfEKC", - "symbol": "SVTC", - "name": "SvetrCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/petrsvetr123lol/Crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FZKnpMfrDtxB5j2xQFN1YHtxZgWEEpHAhi1HDGZDhubo", - "symbol": "YWC", - "name": "Yoseph Wijaya Cool Coin", - "decimals": 1, - "logoURI": "https://raw.githubusercontent.com/nsnull0/YWC/main/logo.jpg", - "tags": ["social-token", "community-token"], - "extensions": { - "website": "https://yoseph.ws" - } - }, - { - "chainId": 101, - "address": "6kCBuk7CQieiRFGX6iw89pgF86mjLrUM2PRBemFLinNd", - "symbol": "VULC", - "name": "VULCOIN", - "decimals": 0, - "logoURI": "https://github.com/adambingley/crypto/blob/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FPUo3gkLJKDw3QHoHQWwG9NEDZyDteDAGspNCNMkQtcW", - "symbol": "SLAVUS", - "name": "SLAVUS Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/devSLAVUS/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ReinhxoLwdYhndDaEr2rsMSBvWEmE9ycb2kRjpWi9eY", - "symbol": "REIN", - "name": "REIN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ReinhxoLwdYhndDaEr2rsMSBvWEmE9ycb2kRjpWi9eY/logo.png", - "tags": ["NFT", "utility-token"], - "extensions": { - "discord": "https://discord.gg/aBjtec3zYs", - "twitter": "https://twitter.com/RatataNFTs", - "website": "https://corporatslab.com" - } - }, - { - "chainId": 101, - "address": "Ata6mDfMdwLzGycj41aHJq4ahDvHYfSC1GQapCtjndoH", - "symbol": "QLN", - "name": "MYTHIC QILIN COIN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/jack21m/logo/main/qilin.png", - "tags": ["social-token", "community-token", "meme-token"], - "extensions": { - "discord": "https://discord.gg/BSerFpJSEc", - "twitter": "https://twitter.com/MythicQilin", - "website": "http://www.mythicqilin.com/" - } - }, - { - "chainId": 101, - "address": "HNuNFMU6c5usjgHnXNc7HCAKFWjtVYvFVxMh1q2SLR3U", - "symbol": "YKAY", - "name": "YKAY Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/huh-chaff/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "87s213foYFiC3nUEoGTu5FEvipFfsuTtf1fCQAGpCPmT", - "symbol": "DEW", - "name": "DewCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Zroxus/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7b4GEPrvMz61ZG7p1UzEg8s6pw5isD1uTRLR8tDLP8zC", - "symbol": "DNY", - "name": "Donny Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/donegamattia/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4SwHidnf71JXXkyuS3saGvsUTmxtWFUbzAJ4XLsWEHTN", - "symbol": "VDTC", - "name": "ViktorioTV Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/viktoriotv/cryptologo/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GEqYydMW3JZqapzrkJGTaScFbetV8riKAPui3SQcPZMo", - "symbol": "EZCN", - "name": "EZ-COIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/elh0901/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "A7qGcsFoqpMKPScU88RxL4WWtchX1exDyp5EifBr4m6h", - "symbol": "KRNC", - "name": "Karen Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SODIron/Crypto/main/logo.png", - "tags": ["social-token", "nft"] - }, - { - "chainId": 101, - "address": "Fdxh6WL31JQhVvedDkQb2kPkVpk4ZMNj2f6x5ZrCkRbp", - "symbol": "CONC", - "name": "Conservative Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jhemley1/crypt/969897a6f58f874dd673a8360b1f0b3ec24063e9/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EfFfffeVwmt3iYYiBwmburzeVrAg315rCubNox5FaJeo", - "symbol": "DGC", - "name": "DigiCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/digijustin/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GHP2CEPaawZkkDqhq4i8HGJV1TAJ3uati5RFDa6zGmC6", - "symbol": "MTMS", - "name": "MTMS Network", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GHP2CEPaawZkkDqhq4i8HGJV1TAJ3uati5RFDa6zGmC6/logo.png", - "tags": ["utility-token", "mtms-token", "meta-meeting", "meet-to-earn"], - "extensions": { - "description": "MTMS is a utility token, Dex, and metaverse meet-to-earn Dapps on Solana.", - "facebook": "https://www.facebook.com/mtmslive", - "instagram": "https://www.instagram.com/mtmsnetwork", - "medium": "https://mtms-metameeting.medium.com", - "telegram": "https://t.me/mtmsofficial", - "twitter": "https://twitter.com/official_mtms", - "website": "https://mtms.live" - } - }, - { - "chainId": 101, - "address": "Ayb55LvLMZc8i8XmbskEGCXE1QMXwCXYCmLpCNNhJEr9", - "symbol": "RAMZ", - "name": "Ramsay Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/cramsay3/crypto/360a9f916f6332710065df9aefc2f1598f4f5aff/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FKMnUTbhjeoJU33CJo73oDAPFuDM2nkxFVvrhPp9jLYL", - "symbol": "CLKK", - "name": "Clikkit", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SDCat99/clikkitimg/main/clikkit.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7u37yJKifkFC9nLP6oYbLSj9TCELn2D8sMHQoZYatVmE", - "symbol": "JKA", - "name": "JaydoCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Muzz1409/MainLogo/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CcQoer5zWDxz1DpT1KQyqSEtpZKqCWFhwjJDXW9ULrDN", - "symbol": "GORL", - "name": "Gorlo", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/GorloGitHub/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4bRgrxSKhEg2yMmXoa21Sg6dnEWjNoPECEnYdfGhfTPj", - "symbol": "MOLR", - "name": "Molar", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Igorgregorek/molar/main/molar.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9PHrDyomXcXrFqwWW4dsbJk66BvAxAYgQgw4emngH6tg", - "symbol": "SGA", - "name": "SGA Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/sblacksg/sgacrypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AR5z7CDpfqGgbhHQkKwDAiknkDSRJVjB1gFRLp3AA8CY", - "symbol": "NEKOJOKE$$$", - "name": "NEKOJOKECOIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/tengjuikchang1983/crypto/main/JokeNeko.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9rfXzv2AqNJzPBq9ppFfcny4DTqLzWMzLLLAY6CnLdvu", - "symbol": "JOHN", - "name": "John343", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/John34344/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ACgt6KadMNYYxu9uqVvmoPPwQokBSrVTWtXME7HhFLHJ", - "symbol": "JLFC", - "name": "JLF Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/brackencyber/JLFCoin/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2eq2uvkGR1LidQjxwib6Y4KdejJGaqS61foSSXoGQQhz", - "symbol": "PKC", - "name": "Pack Coin", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/FreemoX/PKC-Pack-Coin/main/PKC-Pack-Coins-Icon.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5Px2dwF1iod4SqKsn7sYL7p61GqHEiN8nqyutYACDxQF", - "symbol": "OM", - "name": "AUM", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ppbrahm/aum/main/aumlogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "J8xx6gqQCP9yvQuZ1LyudeKaSTAXzu4fsGr5d8BRkyFW", - "symbol": "PIPIK", - "name": "PipikPeniaz", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/tobikbobik/crypto/main/pipikpeniaz.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9h6pmMs2eaQ95zzvHpYyssQoEcoUnHPLJs5sYVNikNxk", - "symbol": "UVTSmart", - "name": "UVT SmartBits", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SMG-bits/SmartBits/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "D1HA1d3tE1Pk5aQNhKGfAEFo6s364srRS2iZp6TPXB8L", - "symbol": "AUBC", - "name": "AubriCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/phuxtick/aubri-token/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5P8qGxw7GuhhoLs6T67mfwLdNMotmLXxBWkpbeD8cmK3", - "symbol": "SirT", - "name": "Sirius Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/siriusdave/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "A7swkKhzDCgBkpp2h3UHTtHEVmDVRLFxrGx6HwbYmZEh", - "symbol": "BKN", - "name": "BruceKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/pjfnsk/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2qwfXXpVadqWCZDFf53jr43SkceSnVFt8TSb8zUQLWHF", - "symbol": "STC", - "name": "Shitoshi", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/francip2190/shitoshi/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CfEMapS6FWUgaGXFtjCX123TL2FNQn9927x9iRE5ZzSE", - "symbol": "ZONE", - "name": "The Zone Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/liltaf/zone-token/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "G9sTdFXB6ysWB95bD8FFgB4Ckc9d74ws9GsqxfgF6JPt", - "symbol": "ASKO", - "name": "Asset Koin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/FilipSpace24/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7wkNjtQaDYrme1EsYrbbCQiZRz3pgjC2t5sdJoEMpxcH", - "symbol": "R3N", - "name": "R3DWA Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7wkNjtQaDYrme1EsYrbbCQiZRz3pgjC2t5sdJoEMpxcH/logo.png", - "tags": [ - "utility-token", - "game-token", - "game-currency", - "GameFi", - "Gaming" - ], - "extensions": { - "description": "Pas cher." - } - }, - { - "chainId": 101, - "address": "8yjkMedQpR4x7fVK4BZjE1hPbEK3iPumAsqqUYncLhtM", - "symbol": "KNFK", - "name": "Kunefke Koin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/brandonkunefke/KNFK/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5mDoMYBTvBPWWBGFCz9AWoFHBYQgskBksuizsxKBMcXX", - "symbol": "SOF", - "name": "Sophia", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/9b-hido/9B-Crypto-stuff/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HHNgXZSZF97YzFPBSSWm6muuKEnSjEDcSjZecLV3wU5c", - "symbol": "SRRY", - "name": "SoSorry Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/sosorry-coin/crypto/main/lo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "A1yQ9BtkeYpZje4Kbmq9aNvZ4H7Dqb2cWenoWS6gQ4np", - "symbol": "DNMT", - "name": "DinoMatic", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/dinomatic/icons/main/D.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "H9TqnUZfdu4HcJXNtbk3BmRPoJ5m1TQgV9uibPnDPg8w", - "symbol": "DLPC", - "name": "De La Poer Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/OliverBeresford/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "pCKvG8uhzvBc7JEK6bBktwKixesUsbWjxdbLfcuSxh7", - "symbol": "ASYC", - "name": "AsynCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/AkshatRastogi-1nC0re/asyncoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6EqdKhWfzBKKfugVRnnUgxp8EyhnMcBEWoPcaFGfq1VK", - "symbol": "BYT", - "name": "ByteToken", - "decimals": 0, - "logoURI": "https://github.com/HadiMorrow/Byte-Token/blob/main/byte-logo-png-transparent.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HBvYEZLfCPnKKuPPy8g7gFRkcjM9DLiPurEnt1CoP8Xe", - "symbol": "SZYMIX", - "name": "SzymixCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HBvYEZLfCPnKKuPPy8g7gFRkcjM9DLiPurEnt1CoP8Xe/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "C8N2dnob3qQbp1sqRhpaqyh9h4NfwMyKkdpjRNSsvA5e", - "symbol": "SPC", - "name": "Sahar Priva Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SaharPR/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "H4PJ6A8VEAKZM6vZHs1Ud6ohRdWUD2AXmbY8EqzNKK7W", - "symbol": "OXYG", - "name": "Oxy Gem", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/H4PJ6A8VEAKZM6vZHs1Ud6ohRdWUD2AXmbY8EqzNKK7W/logo.png", - "tags": [ - "utility-token", - "game-token", - "game-currency", - "GameFi", - "Gaming" - ], - "extensions": { - "description": "OxySpace is the next-gen esports metaverse empowering players to create, play, compete, and earn.", - "discord": "https://discord.gg/9rthWDuB3B", - "instagram": "https://www.instagram.com/oxyspace.app", - "twitter": "https://twitter.com/oxyspace_app", - "website": "https://www.oxyspace.app" - } - }, - { - "chainId": 101, - "address": "5MmPuS9D1iQwhqpanamkYppRS9J2iZpD5rpum2mHFux8", - "symbol": "MAEL", - "name": "Maelstromdal Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/deanlucero/Crypto/main/YouTubeLogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "94sjUKfvsd512K9YHKbhQkmpbVrHvvqu7w72Aedmn3mK", - "symbol": "BDC", - "name": "Billion Dollar Club Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/TheVeqaZ/Bllion-Dollar-Club/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AhEVpqjwN7LmNSxESV1GGuJugiCvqrTu7FEaYEKw5Ntx", - "symbol": "SOKA", - "name": "Soka Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/imsoka/sokacoin/master/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "RoCKnAqV8LmchWKBdpapKj9sPaM1F9kiNDxvLU8sN8d", - "symbol": "RCK", - "name": "Rock", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/RoCKnAqV8LmchWKBdpapKj9sPaM1F9kiNDxvLU8sN8d/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DaPHpTFwTHJaDUURNyHipqaLvoZyrBcZtpzaCTV8hrwJ", - "symbol": "PBM", - "name": "Praised by Masche", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/praisedbymasche/sol/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7AjkC42JBNwbM6TUkG5wvzjmtSVus5idQUmTZ46Zx318", - "symbol": "NP", - "name": "Neptunium", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MrRobot4444/crypto/main/NeptuniumLogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6xUsqjDu9iboUJimq1cv19QU65vfXHWkkKFem7FYHwYm", - "symbol": "ASH", - "name": "Ash Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/AshBeigian/crypto-/main/A.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "T4iPCH1Fo6fGdebxrTnwM79t82DhS4uJJ4xesykUThw", - "symbol": "HAF", - "name": "Hot Air Finance", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/T4iPCH1Fo6fGdebxrTnwM79t82DhS4uJJ4xesykUThw/logo.png", - "extensions": { - "twitter": "https://twitter.com/HotAirFinance", - "website": "https://hotair.finance" - } - }, - { - "chainId": 101, - "address": "HNBC4G1jfiaYcp8X1oXW9riXRiQXprib8sPLtv85RVES", - "symbol": "vHAF", - "name": "Hot Air Finance Vote Token", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HNBC4G1jfiaYcp8X1oXW9riXRiQXprib8sPLtv85RVES/logo.png", - "extensions": { - "twitter": "https://twitter.com/HotAirFinance", - "website": "https://hotair.finance" - } - }, - { - "chainId": 101, - "address": "UCFj8biQNPGHWUgKVcSHzWtkKjizrgKEPLGuN3wazqn", - "symbol": "RNG", - "name": "RNG.Fail", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/Wiliver/rng-fail/main/rng.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/Z2JQym9r96" - } - }, - { - "chainId": 101, - "address": "8NvwnKWfiKgFD9FrPAtzPJfp7y8XZH2h4EZtYmGkrJoF", - "symbol": "ONELA", - "name": "OnelaCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Romain-dev0/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9ue6CAnzqYaEppcXA2AnVZKQKasQ6qjLStbbsDf4tCVC", - "symbol": "swfbv", - "name": "swfbvKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/swfbv/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9i7CwfBiJMsKUDGceCbj3JxSFr1rnKfjfPKoHg9uPs5P", - "symbol": "MXBC", - "name": "BradlCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mBradl/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Bmkz7nwEMHMM2UPdsY7kdz97CXjxj6okr16djAgVbtgC", - "symbol": "IKST", - "name": "Imran Khan Social Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/socialcrypto/ikst/main/IKST_logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3cVsanUhbo91Qcuzrzx7qZAutpXYcaMr64jfq5Cs17es", - "symbol": "LNFTxBHD448", - "name": "LNFT Solsteads-448", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3cVsanUhbo91Qcuzrzx7qZAutpXYcaMr64jfq5Cs17es/logo.png", - "tags": ["liqnft-owner-token"], - "extensions": { - "discord": "https://discord.gg/PYZWRHgVwM", - "twitter": "https://twitter.com/liqnft", - "website": "https://www.liqnft.com/gallery/BHD448" - } - }, - { - "chainId": 101, - "address": "7X3ZRf2aftbsqb5Mb9QP5TSsPAACmcKwq1Ex3WWPJUUF", - "symbol": "BIND", - "name": "BIND token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/davisi3/crypto/main/bind.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4YQ9NvzPg1pqs8tFZ2ggeq5qCGY8hUsJC97fLBcenav4", - "symbol": "BLKTY", - "name": "Blackie", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ilc00/crypto/main/blackie.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8ARcrxoAojZ2aQPFbwRANH4ne34Zd5HY3RsDfp98ZkY5", - "symbol": "LETC", - "name": "LTETT Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/aolinger/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8YosQxNWqPtrKXcPYFsjWv4MvAC1tV6p1iUfzyTgUn9q", - "symbol": "SHT", - "name": "Soft High Tech", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8YosQxNWqPtrKXcPYFsjWv4MvAC1tV6p1iUfzyTgUn9q/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/softhightech", - "website": "https://softhightech.com" - } - }, - { - "chainId": 101, - "address": "9QqiExUzS3BtujmunYHQKVP73mJstsDFgQHvkcKEpjFf", - "symbol": "KUBE", - "name": "Kube Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jankube-de/coin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BThiYmTDGgRm9rmXdRMLBxvouu7WStcegpBDwyy5jJgN", - "symbol": "RACL", - "name": "RACELAND Coin", - "decimals": 0, - "logoURI": "https://tech.automacaoraceland.pt/logo.png", - "tags": ["social-token", "community-token"], - "extensions": { - "description": "RACELAND S.A. Internal Coin by RACELAND Automação Lda", - "website": "https://raceland.pt" - } - }, - { - "chainId": 101, - "address": "5prsLoqaQdQ1wkmzH3vMJVURzhcksdSL9q5Bq9uqz35w", - "symbol": "RACN", - "name": "Raccoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/sullie-dev/coin-logo/main/Raccoin.png?token=AECYTNBEB6YCX74MTV7T3ETBXZH2Y", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FiGhTeZQLVUtkYuLWgSunbBngdPPWv3FrnfqetDZFUDv", - "symbol": "FGHT", - "name": "Fight", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FiGhTeZQLVUtkYuLWgSunbBngdPPWv3FrnfqetDZFUDv/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "5sYXHJ9z92rjCTpvcmx2L51P3316qYCyMQxjEoNJLhtX", - "symbol": "TCD", - "name": "Tara Coin Dollar", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/BleeckPi/ctd/main/TCD.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4RQUF5AaTuXGaxJaoJpP7FFEUJALAv4YwHH585SxPTia", - "symbol": "SAMY", - "name": "SammyCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/thezolon/samycoin/main/samycoinlogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HeeW8waT8GTAG8jjNeXAYiDtwg7m5JxA3eptncSFhY5H", - "symbol": "TTK", - "name": "Tartalon Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/thetartalon/crypto1/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BwhiDmLTL56AzuoetVBbKVr8UMhaVm3zvnQ82uHGouL7", - "symbol": "Vodacoin", - "name": "Vodacoin crypto", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/zaid-aub/Vodacoin/main/Vodacoin.png.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HFRHgfT17WzTK8Bf1hkcn8neoiKb4DgRNzUARtJQ5MLg", - "symbol": "IVAN", - "name": "IVC", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ivanasicl/crypto-IVAN/main/ivan.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AfARcLLqRHsZc4xPWHE9nXZAswZaW294Ff1xcYQbjkLq", - "symbol": "KROOK", - "name": "Krook Coin", - "decimals": 9, - "logoURI": "https://user-images.githubusercontent.com/1009138/143821720-d9c6f5fd-96d7-424f-9b1f-b185451cbb31.png", - "tags": ["social-token"], - "extensions": { - "discord": "https://discord.gg/krookssolana", - "serumV3Usdc": "aGyXAmV1QBESopcEgmr52qtaQ4DuEBg7WJARh1ojSPx", - "twitter": "https://twitter.com/KrooksSol", - "website": "https://thekrooks.io/" - } - }, - { - "chainId": 101, - "address": "GJktnoNYzPbtf8Y6dECKUD7AsqhuseNr73tZj7boBSZQ", - "symbol": "MAAD", - "name": "Members Anonymous Association DAO Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GJktnoNYzPbtf8Y6dECKUD7AsqhuseNr73tZj7boBSZQ/logo.png" - }, - { - "chainId": 101, - "address": "A1hjmtFWNwhsLr1gycvx4TonmwR1uLoHwCxi14Q4C1Pf", - "symbol": "DRAGONWND", - "name": "DragonWind", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/gglazer/crypto_dragonwind/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2KLLYZs2Lgx15o2GC9La5uLciBCFdRAWJ6m2PEK3uUuz", - "symbol": "DXN", - "name": "Da X Nilsson Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/danielxnilsson/cryptodxn/main/krypto_DXN_trans.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "gvK3ehKkvHwXGqiBVB6fMmYx333DMUfzp2tp6cW82Pf", - "symbol": "MELL", - "name": "MellCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Mxlanie/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CDAQD65KwCEqLaZqzP4esJ9BCWFaazfpE6jvKL5ypLY2", - "symbol": "BLKH", - "name": "BlackHeart", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/tblackheart/crypto-logo/main/icons8-black-heart-96.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BL3X2JsXfb6c6M3HmxctUsxoqy3QcbzZMak13cgMbYgD", - "symbol": "BOOM", - "name": "Boom", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/meezcal/boom/main/logo.jpg", - "tags": ["social-token", "lebanon-token", "community-token"], - "extensions": { - "description": "Boom is utility token that is created to help the lebanese community that was affected by Beirut explosion in August 4, 2020" - } - }, - { - "chainId": 101, - "address": "Accqi3Zt9mnqRnsZAkD2GxVwXr4S1eHzZbx3yMTAhg8g", - "symbol": "DOC", - "name": "DOC", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Andrea00Azul/Crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HRjCPghjQSoWvTyMH3bANCpnJ5f1SwaqBotDYMFCPkV", - "symbol": "SLVC", - "name": "Slutville Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/linuxjoe1/slutville-coin/main/logo1.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9VXUw9z2CNpBhTrqfqvnzs495P67axywqydaQVcaHYAw", - "symbol": "TAML", - "name": "TamilCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/gskonlines/mycrypto/main/Tamil.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4oHiGGKu8XTnzxZLM6uS8ksLUsKudSLR72xAAQA37m3e", - "symbol": "ELDTN", - "name": "EldinToken", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/sleevegarlic/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "H6bVzHciGHLqBN8AFCDPQKLDDhfH33YBJ21UWs4cCh3t", - "symbol": "DOL", - "name": "Dolar", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mcflabby/crypto/main/dolar.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ENh1e7yRkUsp7gPJGK7w1PH3RiKjAJn4tTRWHHbjGqzc", - "symbol": "DaDon", - "name": "Da Don", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/dprange/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "63vT4MTT4dKgdNBc7TacURrGGFM1XGEkrs2F1MeAy7Wz", - "symbol": "IFUPT", - "name": "IFU PT", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/incognitfigure/ifu/main/ifutoken.png", - "tags": ["utility-token", "social-token"], - "extensions": { - "description": "Incognitfigure Unipessoal Lda investment token.", - "website": "https://ifu.pt" - } - }, - { - "chainId": 101, - "address": "4dk1efRnie9zGLymwERRnB2z6X3YWeAFRdE1kfcHtps1", - "symbol": "HUFF", - "name": "Huffbuffer", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/huffbuffer1/huffbuffer/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8TD2szF72D3qs47oX8BXzAG3nm4fcsn1yAmFssdbTAhr", - "symbol": "ETER", - "name": "Eternity", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8TD2szF72D3qs47oX8BXzAG3nm4fcsn1yAmFssdbTAhr/logo.png", - "tags": ["social-token", "community-token"], - "extensions": { - "description": "Eternity Is a token created for fun might turn into something cool we don't know yet" - } - }, - { - "chainId": 101, - "address": "8QxkX2amPFSbgpKdPEquQp3nxoQ51YXPxzJh7CkpAaSF", - "symbol": "ZMC", - "name": "ZM Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/emanhackwell/crypto/main/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://zsideimate.hu" - } - }, - { - "chainId": 101, - "address": "87Y85RDtZbgijbny2xLco9ModZNAtyrd2nL4xGWMvytQ", - "symbol": "QAC", - "name": "quacc", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/crypto-quacc/quacc/main/quacc.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4623MTUYesNujtrwsziMRaHF5mzB3u1NxZCqYNQCavoL", - "symbol": "Opinswap", - "name": "OPIN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4623MTUYesNujtrwsziMRaHF5mzB3u1NxZCqYNQCavoL/logo.png", - "tags": ["Exchange-token"] - }, - { - "chainId": 101, - "address": "6MCitDvVP2UmTPhc9vwo9dBmpagex5QtjJrtCvGNwnmJ", - "symbol": "TSFU", - "name": "Coin For Miguel", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6MCitDvVP2UmTPhc9vwo9dBmpagex5QtjJrtCvGNwnmJ/logo.png", - "tags": ["community-token", "social-token"], - "extensions": { - "twitter": "https://twitter.com/Lynxer20" - } - }, - { - "chainId": 101, - "address": "ChwWnsw7jjWdrAjHQ62R9Yf5ivbbYZGAW5FjaKK4fG3Y", - "symbol": "COPPER", - "name": "Copper Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Deterix/copper/main/penny.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EycHkjJm83PFV8eH8TE8b52o1e3Mi5AULpkhyB3ckWzr", - "symbol": "USCA", - "name": "Uscado the relationship balancer coin", - "decimals": 1, - "logoURI": "https://raw.githubusercontent.com/danielxnilsson/cryptodxn/main/uscados.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "JArUA4zzX8ajLx7fLE6ZTBM1G1yc8xuCkPf18YsYg3Wk", - "symbol": "GBFC", - "name": "GuldBorg family Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Pirat0303/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AXyYeUoEqPR5hKqjNdezFhUgGkLvfxyoqaAcvc3eeuab", - "symbol": "NRTC", - "name": "North Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/maviharjit/NorthCoin/main/NorthCoinLogo%20500x500.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "B114cLy9DF83jWKZbNNz8jdikx3PxrCctPx11pJ2BXrM", - "symbol": "WENDY", - "name": "Wcoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/peterda84/crypto/main/w.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CiuBomi5eWLNLwSa2mr2w1S4jBmz7BAfiMu7WRZmcJB6", - "symbol": "DGLE", - "name": "Doogle Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Doogle32187/Doogle-ICON/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6TsFcWgr6QAzURndCAEhUFqY132Mfo29bTLfgCYMhDUC", - "symbol": "FOFA", - "name": "Four Fathers", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jetlim1/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9ythGaUhHiAfcp1Ugxpq1JK2UVH6W7vz7dZW9qcYczRg", - "symbol": "VATO", - "name": "VatoCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/anthony0723/vatocoin/main/VCoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6bbmQEK8674rjak3T9hBouXiZcNDkXF8anYA38LL48nr", - "symbol": "OCHO", - "name": "Ocho Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/crossfitocho/coin/main/3.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3KSGhbxAP1BkU7jeq1ga9Ws2wWGD3MwS78EhMWteVEzw", - "symbol": "CHOW", - "name": "ChiChiCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/bew1769/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "C2uoUDDKArZU9orfEALacuSYthJM3xnhEVoayZtDyTK3", - "symbol": "PAWZI", - "name": "PawziGear", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/romorris/Pawzi/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6YbnPUaCoadCJqhjYfavVBRc7Lj6MYwvxeYvytdx9JR5", - "symbol": "OCLS", - "name": "LiftCoin", - "decimals": 0, - "logoURI": "https://github.com/aftoracloud/ocls-crypto/blob/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "d93Fvhq5Lrp6dhkJwGGTqAZeR2MhEEEJjzCoHzweMpk", - "symbol": "FLAP", - "name": "Flap Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/d93Fvhq5Lrp6dhkJwGGTqAZeR2MhEEEJjzCoHzweMpk/Flap.png" - }, - { - "chainId": 101, - "address": "EUXizUbT7aZoCXqgtRrSVox9rN85mmJSEZ2crsuDvjZj", - "symbol": "SHTK", - "name": "ShipToken", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Sunkenfrigate/Logo/main/Shippy.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ax7EjwgRaerUacfCAptcMnkckmf8Wiee5T9KLqSzsF6", - "symbol": "AZA", - "name": "Kaliza", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ax7EjwgRaerUacfCAptcMnkckmf8Wiee5T9KLqSzsF6/logo.png", - "tags": [ - "utility-token", - "secutiry-token", - "game-currency", - "launchpad", - "tokenization" - ], - "extensions": { - "description": "AZA is a token of Kaliza’s platforms that offer simplified real-world investments.", - "telegram": "https://t.me/kaliza_launchpad", - "twitter": "https://twitter.com/kaliza_aza", - "website": "https://www.kaliza.io" - } - }, - { - "chainId": 101, - "address": "GizKeyyHjGMTDwC2qqdKYi9LDbgQxdSX9ABKSZKLvEdQ", - "symbol": "DOUCHA", - "name": "DouchaCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Judical/DouchaCoin/main/Doucha.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EcGxe9UeinRxn9NnTsQTCiwepGwVbz6gvuLHqjiJgHHd", - "symbol": "GONC", - "name": "Gonavi Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/crpo10/token/main/logo.png", - "tags": ["utility-token", "social-token"] - }, - { - "chainId": 101, - "address": "4sydfVabeMZ8MRxZBzs48UzTebjYQQkxeFCeuRUoz47i", - "symbol": "BLHZ", - "name": "Bel Hazon", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jhncrent/crypto/main/mybookxx.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BfM12YHvYxnrQQqBfdWz4ehBcjgmz4uaL43PV74p57XV", - "symbol": "NEPL", - "name": "NepalCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ePrabin/Nepal/main/logo.PNG", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "SHDWyBxihqiCj6YekG2GUr7wqKLeLAMK1gHZck9pL6y", - "symbol": "SHDW", - "name": "Shadow Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SHDWyBxihqiCj6YekG2GUr7wqKLeLAMK1gHZck9pL6y/logo.png", - "tags": ["utility-token"], - "extensions": { - "coingeckoId": "genesysgo-shadow", - "coinmarketcap": "https://coinmarketcap.com/currencies/genesysgo-shadow/", - "discord": "https://discord.gg/y86HPCkk", - "serumV3Usdc": "CVJVpXU9xksCt2uSduVDrrqVw6fLZCAtNusuqLKc5DhW", - "website": "https://www.shadowysupercoderdao.com" - } - }, - { - "chainId": 101, - "address": "3KTkQJEMJXP741EJBFcAS34Lx9t8GsBYaW2BUUWkeyDH", - "symbol": "CC", - "name": "Castle Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3KTkQJEMJXP741EJBFcAS34Lx9t8GsBYaW2BUUWkeyDH/logo.png", - "tags": [ - "social-token", - "utility-token", - "meme-token", - "community-token" - ], - "extensions": { - "discord": "https://discord.gg/4jNRF9zfCV", - "twitter": "https://twitter.com/Castle_Clique", - "youtube": "https://www.youtube.com/c/CastleClique" - } - }, - { - "chainId": 101, - "address": "ofyujgvpGgNC4yafE9A32MbmdcLZWcSaqZdfjQEemrP", - "symbol": "DHC", - "name": "Die Hard Coin", - "decimals": 0, - "logoURI": "https://gateway.pinata.cloud/ipfs/QmY59QodV6YTdvQB1h2Za74xx4ziRkKmdMsRtyD6qUQ8yN", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7c5kQDeDMfW9dskciZqjz9wk5BsFkC5HWivpM9eqNDN8", - "symbol": "DEO", - "name": "Deowolf Coin", - "decimals": 0, - "logoURI": "https://github.com/JarvisUndefined/deocoin/blob/main/Wolf-with-blue-eyes1.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GsTPRchUXTokPt59hx7gi7RrrmKAfLBdiozQxNBCgsZo", - "symbol": "CHORE", - "name": "Chore", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ChoreCrypto/ChoreLogo/main/javaClass.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FWPfFhWcUZjaZaAkjJUteMuhSmePRbNr4NwJ6mLdoADn", - "symbol": "FRT", - "name": "FireRosted", - "decimals": 9, - "logoURI": "https://github.com/HadiMorrow/Byte-Token/blob/main/logo.png?raw=true", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7gAhXVMvd3DCsajz2baKoVd1gouNrvUNs64CqMHoFqqy", - "symbol": "UNKWN", - "name": "Unknown Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/whoelsebutSB/token-list/main/assets/mainnet/7gAhXVMvd3DCsajz2baKoVd1gouNrvUNs64CqMHoFqqy/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HS5vNPFkucPqMy9Q75poiMioq8eME5ekPpkQsuesRRTL", - "symbol": "TLTK", - "name": "Tillman Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/TillmanTokens/Crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8EFGJUpWty9woWLWeDnbkEEQevVC87vn4GozkVtexDvm", - "symbol": "CARR", - "name": "CarrCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/carrcoin/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6jPAiSRGjEcDNJGHC85WFn94VNMkmoJhU8wdqoc8cWS2", - "symbol": "FART", - "name": "Fart", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/dranderson21/Fart/main/logo.PNG", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8ZUiEH3UjarfBYwYDPBQtVJySAopmoxdqokw25EuWzRS", - "symbol": "GDSC", - "name": "Gray Data Social Credit", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/technopharmer2000/crypto/main/GDSC.png?token=ALXPHJMMBXGLIKIPTVGRHTLBWVOCS", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4jgmjdQUWEZ4EAzi4TWSz3DnGLgruSA29wp1thZkzP5j", - "symbol": "KKAI", - "name": "Kalani Kai", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/engage-intellect/kkai/main/logo.PNG", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GddE977h9ShBB1wCHmaTXfcCZZFMs1KA5Ag7YxajSf3r", - "symbol": "DGDC", - "name": "GavinCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/cfultz/crypto/main/logo.png", - "tags": ["social-token", "meme-token", "support-musicians"] - }, - { - "chainId": 101, - "address": "7ibGhXXWYMacnnHxx5tR6NytJc8cJUh7HvAWSozXr5UT", - "symbol": "GABA", - "name": "Gabbano", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/manutije/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4ziFfbYCNqVRcv4HwF36v7PCrg2mRA2qvqExoGrCTAPL", - "symbol": "HLXN", - "name": "Holoxon", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/TyronSmiteApril/crypto/main/holoxon.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "HS5vNPFkucPqMy9Q75poiMioq8eME5ekPpkQsuesRRTL", - "symbol": "TLTK", - "name": "Tillman Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/TillmanTokens/Crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "fppmFy1QetV3Ztt6EdBNqethbhFotJ6oAkwhQM93Qfe", - "symbol": "LENGTH", - "name": "Length Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/length967/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FK1ZUhj2sddnR2epLvK4cvrKmY22gv3dsio233iuAcq8", - "symbol": "LILD", - "name": "Lil D Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/sdesopo42/Crypto_Lil_D_Token/main/Lil_D_Coin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AJ6EVZEePA5HAn58ZRbLCWX3MsK2BKrkT6bJYunuTU71", - "symbol": "NIRV", - "name": "Nirvana", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AJ6EVZEePA5HAn58ZRbLCWX3MsK2BKrkT6bJYunuTU71/logo.png", - "tags": ["social-token", "community-token"], - "extensions": { - "description": "NIRV Is a token created for fun might turn into something cool we don't know yet" - } - }, - { - "chainId": 101, - "address": "A7Uvm8dvtMDNrYCKmHyox6BKYSkxU6DdYmTyfZA96nNW", - "symbol": "COLE", - "name": "Cole Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/egobyte/crypto_image/main/cole.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CXpU3zvNdQsgb6xVEcMYHLP3FQyFDv6Kck1f3fugibN7", - "symbol": "PITC", - "name": "Pit Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/narana2/PITC/main/PITC_logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FoFMZpggKZ9Eq8gS582Z98w5mqXTuLQRmYw9c3gVEKW7", - "symbol": "OSIP", - "name": "OSIP Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/batangilog/osip/main/image.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "57zX7VtLqWMM3CJCbqGnyQr3kzN3sYMiYjoTujWf7g7y", - "symbol": "SHAVE", - "name": "Shavecoin", - "decimals": 0, - "logoURI": "https://github.com/awinterm13/token-list/raw/main/assets/mainnet/57zX7VtLqWMM3CJCbqGnyQr3kzN3sYMiYjoTujWf7g7y/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "97ner9bBhnmbg1yZXMh85WNYsYSLTqUb4RvyMttD57fh", - "symbol": "FJBT", - "name": "Fuck Joe Biden Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Texaglo/-fjb/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9pypdozsBG1KVABkQvHTzgEuAXfSj5cQour9cB73SLLg", - "symbol": "$TBS", - "name": "Texaglo Blockchain Service", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Texaglo/-TBS/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "hsX5YHyYMME4zaxfHCaxdPsGBZNW94Cir5GDfVh6Hc4", - "symbol": "INMA", - "name": "Inman Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/minman1979/Crptocurrency/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "F6ZoD5zLzpFG7r35Gi4tMKbqxU8hMaQkK2VKaYpQQsEJ", - "symbol": "BR86", - "name": "BloodRose86 Cion", - "decimals": 0, - "logoURI": "https://github.com/BloodRose86/crypto/blob/main/bloodrose86.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "55cVxgRyn4WS6dTdzfNepn2374v46xRUdk31sH1eYi7R", - "symbol": "CLR", - "name": "Celerity", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/celerityd/celerity/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3aXrbPCeUG9g9M3PGujB9bMaMHiodsCa1qmyhb2QWRko", - "symbol": "DJCF", - "name": "DJ CandyFlip", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/CandyCode-CC/crypto/main/logo.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 103, - "address": "7M2dxU1tavGpKX47baKCsspBjZ5Rcthcun8DDouSU49x", - "symbol": "USDC-USDr", - "name": "Raydium LP Token (USDC-USDr)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7M2dxU1tavGpKX47baKCsspBjZ5Rcthcun8DDouSU49x/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 103, - "address": "8Tddz1epzDM5nvEaYc5uPtmgu3DCRabRxsnfXu6yUneD", - "symbol": "ETH-SOL", - "name": "Raydium LP Token (ETH-SOL)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8Tddz1epzDM5nvEaYc5uPtmgu3DCRabRxsnfXu6yUneD/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 103, - "address": "4sGmJRR53TLUo6S1ovFChdEuEssjymPNuEaaDQacuKws", - "symbol": "ATLAS-RAY", - "name": "Raydium LP Token (ATLAS-RAY)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4sGmJRR53TLUo6S1ovFChdEuEssjymPNuEaaDQacuKws/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 103, - "address": "AZFu6w1oj7t9QSgcBhpHdVmSp39QLuk6dMcqkqJ1cHXP", - "symbol": "SAMO-RAY", - "name": "Raydium LP Token (SAMO-RAY)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AZFu6w1oj7t9QSgcBhpHdVmSp39QLuk6dMcqkqJ1cHXP/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 103, - "address": "6EJAff7wySn7TMeGLH8Nk7XCZ9uYdkrYiiM5qA4sKR8i", - "symbol": "USDr", - "name": "Ratio Finance Stable Coin USDr", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6EJAff7wySn7TMeGLH8Nk7XCZ9uYdkrYiiM5qA4sKR8i/logo.png", - "tags": ["stable-coin"], - "extensions": { - "website": "https://ratio.finance/" - } - }, - { - "chainId": 101, - "address": "9uVxrZA32nPdYqvwuzNLrgFMJemMq6dYwesy3LDfnZRq", - "symbol": "CHILI", - "name": "CHILI COIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/CY4N1DE/chilicoin/main/chili.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "6xGpXJre3Lp4yr8y22QdQGzooKaa2PTgksjwGUpMJoJi", - "symbol": "22MTA", - "name": "META 22", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6xGpXJre3Lp4yr8y22QdQGzooKaa2PTgksjwGUpMJoJi/logo.png", - "tags": ["utility-token", "GameFi", "DeFi", "MetaVerse", "stablecoin"], - "extensions": { - "description": "Meta22 Token", - "instagram": "https://www.instagram.com/meta_.22/", - "waterfallbot": "https://bit.ly/Meta22ToTheMoon", - "website": "https://meta22.io" - } - }, - { - "chainId": 101, - "address": "8xzn4uTZUDH4Etx9NPZeRsiXYoQDkahFEWrh7fF9uP3M", - "symbol": "SMDG", - "name": "SmudgeyCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/nebbby14/crypto/main/smudge.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "Av8oBwC39SJGWUH94wPJVzjSbaEReKZp8cYP6zUzvqQP", - "symbol": "NLC", - "name": "NewLifeCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/designerbjk/newlife/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "52NggxAXyBqp32P2fpdvcTrR1b3mcasBBkdjwzLUXjWN", - "symbol": "EZC", - "name": "EZ Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ToTt0G/EZC/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GZhRs3M3yzLAPCcRqgdHsZzLA6KU5ijWqgm1TzfP32P9", - "symbol": "DMMY", - "name": "D\u0026M Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/donovanm21/token-list/main/assets/mainnet/GZhRs3M3yzLAPCcRqgdHsZzLA6KU5ijWqgm1TzfP32P9/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Rock9rpDQsjm8Lme6GWp7Zn94efuQpGvB8x54mmMvad", - "symbol": "ROCK", - "name": "Rockstar", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Rock9rpDQsjm8Lme6GWp7Zn94efuQpGvB8x54mmMvad/logo.png", - "tags": [ - "utility-token", - "fan-token", - "concert-token", - "musician-token", - "merchandise-token" - ] - }, - { - "chainId": 101, - "address": "8y1Srnf32DRcjHV9NaP4mTQ64ugjnuG2qxuuXyAa9Tq3", - "symbol": "elRON", - "name": "electronic RON", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ilc000/crypto/main/elRON.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8yGd68J1jn9BTpo2yy9EnUUUd9Hb7Ea7guDouDxBL7Hi", - "symbol": "FIBU", - "name": "Firmware Build", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/firmwarebuild/crypto/main/LOGO.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3jpmqo232z4MpkAPGAF4ZMYCMMmwKDPJRFw9x8xEcZ9v", - "symbol": "CITC", - "name": "CalligoIT Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/nevenkordic/crypto/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DzyVnoAg8vv25eNVWvf95vqWJ6Jx4LuoTVRJxzSk5aQP", - "symbol": "MANA", - "name": "Mana", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DzyVnoAg8vv25eNVWvf95vqWJ6Jx4LuoTVRJxzSk5aQP/mana-logo.png" - }, - { - "chainId": 101, - "address": "AJ5potzXbvwpevuMWqx7SaQCtRCuWfqYNXr9hrrwLhig", - "symbol": "IIM", - "name": "IT IS MINE COIN", - "decimals": 9, - "logoURI": "https://github.com/coolsilver1984/itismine/blob/main/final_61b5f91a3d0e2d00b83779fd_645128.png" - }, - { - "chainId": 101, - "address": "839WJzo5rausr5LkJUeDfZipjVHG4fsq67vyhyhVsJF3", - "symbol": "LVEC", - "name": "Love coin token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/commorad-zekri/crypto-love-coin/main/love-coin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CBnhiayTEVC1Qn6fn2iWJ1DvqVTYTjvJCy4UUYJwJBPW", - "symbol": "LZTRN", - "name": "LozzaTron", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/LaurenceThornber/crypto/main/logo.PNG", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AcypHt7RkiQuGSy22jnDBibQhJZHnCnT6ybiJbuUA3AM", - "symbol": "NRDL", - "name": "Nimrodel", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/NimrodelGR/Nimrodel/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "F2sMWsxnKjtejFHchYtvMrmyMkFFR6Pg3n2SZQihemLN", - "symbol": "CFJP", - "name": "JP Scriven", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/cfjps/crypto/main/logo.JPG", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4Xant3HaiLVaYqzSzZQwGHCzbtptBS3npVfuREkQHni2", - "symbol": "kiwik", - "name": "Kiwik Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/yassix91/habandagaCoin/main/landing-kiwik.png", - "tags": ["platform", "videos", "payment"] - }, - { - "chainId": 101, - "address": "7SccykJkXNyZqh7nBjDm3NjHNVtZ8BgLEBd36crgbLYZ", - "symbol": "RSHS", - "name": "RealServer_Ro", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Z33uSsss/crypto/main/logo%20real%20server-factura.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Bp7aKzRUjusE887totYfwLNYXkiPEWKiAE863sTFRKh4", - "symbol": "ATOM", - "name": "Atomfire Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/thenerdparadigm/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "444rGVugJ4zyt8hMsjMPNeJL8VZEomiVusuYfTfBigKd", - "symbol": "BRC", - "name": "BloodRose86 Coin", - "decimals": 9, - "logoURI": "https://github.com/BloodRose86/crypto/blob/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GGz1x1Y9sFNPnWXbNwyUe9hqHZoVs4xzBebUmqhiEQzX", - "symbol": "CROC", - "name": "CROC", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/neversl33p/logo/main/Logo%20coin.png", - "tags": ["social-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/SolanaCBS" - } - }, - { - "chainId": 101, - "address": "9i234nZC5JSXVTJh5iUAaNXNhTejztzvMdB4A5dLTqCU", - "symbol": "SNA", - "name": "Sonata", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jolistic/Sonata/main/REDSNA.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Cc5qmXcJ1FjtR9GqmaHG9VfVTH7Kg5b5G7m5qKCagCP2", - "symbol": "DSN", - "name": "Dubsteet Coin", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/Dubsteet/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8tDCkvnhZzzrLLML218xs2etYbqMugfG34CVPRdxa7AP", - "symbol": "OXSH", - "name": "Oxy Shard", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8tDCkvnhZzzrLLML218xs2etYbqMugfG34CVPRdxa7AP/logo.png", - "tags": [ - "utility-token", - "game-token", - "game-currency", - "GameFi", - "Gaming" - ], - "extensions": { - "description": "OxySpace is a Play-to-Earn PvP and PvE game based on blockchain technology.", - "discord": "https://discord.gg/9rthWDuB3B", - "instagram": "https://www.instagram.com/oxyspace.app", - "twitter": "https://twitter.com/oxyspace_app", - "website": "https://www.oxyspace.app" - } - }, - { - "chainId": 101, - "address": "AQcvRhLY9ebLLXkoScWH5QQTvPg1xpnCdngMkqiXww74", - "symbol": "AARD", - "name": "Aardvark Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AQcvRhLY9ebLLXkoScWH5QQTvPg1xpnCdngMkqiXww74/logo.png", - "tags": ["meme-token"], - "extensions": { - "twitter": "https://twitter.com/OrycteropusA" - } - }, - { - "chainId": 101, - "address": "AJ38ch6VQ5Uxc1mZVJPDj34FRzTZqrNCxot9bRUak8Nu", - "symbol": "BOKO", - "name": "BorisKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/bobtiji/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8A58At5hRv4V5DEBeN2nZ8AzRhqeB47bUpjL2fLJB1si", - "symbol": "IMINENCE", - "name": "Iminence Software", - "decimals": 0, - "logoURI": "https://www.iminence.com/public/img/cms/iminence/logo/256px.png", - "tags": ["cms-token", "iminence-token", "software-token"], - "extensions": { - "facebook": "https://www.facebook.com/cms.iminence/", - "twitter": "https://twitter.com/cmsiminence", - "website": "https://www.iminence.com" - } - }, - { - "chainId": 101, - "address": "93zxUZEMwo4tCS7xmoGbDaRhHUmb1xz4dm38g2kv23GV", - "symbol": "TRD", - "name": "Taradactal Token", - "decimals": 0, - "logoURI": "https://github.com/HadiMorrow/Taradactle/blob/main/logo.png?raw=true", - "tags": ["meme-token"] - }, - { - "chainId": 101, - "address": "BNpbt5qqWX27WQXmw6DmrbtVzbpEfy8Tj5DM6uTQphJR", - "symbol": "MARVIN", - "name": "Elon's Marvin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BNpbt5qqWX27WQXmw6DmrbtVzbpEfy8Tj5DM6uTQphJR/logo.png", - "tags": ["MARVIN", "Community-token", "Elon"], - "extensions": { - "twitter": "https://twitter.com/MarvinToken", - "website": "https://www.elonsmarvin.com/" - } - }, - { - "chainId": 101, - "address": "88mRh7c5RVgicAowFqHxpPHDY6yVDxf1H2uPS9TYw47K", - "symbol": "MAGT", - "name": "Mohammed Ayaan Ghugharia TOKEN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/AyaanMAG/AyaanMAG-Token/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7HM8oZs8r5LkZKjCH1Te7aCT1ssTwWUE58rVg6ftaZTQ", - "symbol": "NIRO", - "name": "NiroCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/NNirosan02/crypto/master/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BrQU6uJPLRi8BXb9FXJMwcvRceKgsPJmx8ZkbWaFt8e6", - "symbol": "PB", - "name": "Panda Bucks", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/mrdonpanda/pandabucks/main/pandabucks.png", - "tags": ["Panda", "social-token"] - }, - { - "chainId": 101, - "address": "7UHXbSY6Wnta6EJakTMvYxmWFbqCrTvmGm6ez3Fbj1W9", - "symbol": "SXCT", - "name": "Saxocat", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/podycust/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HE743xcwoEPaFGWmfXXpvwqWZ4MkjGxw9t2JZADmMb4y", - "symbol": "JVJX", - "name": "JavaJixCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/JavaJix/JavaJixTokenLogo/main/java_jix_logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FUeyuZqhaJwwVnJraM1HfJENJEEVi4akuGKjrbV5oqqB", - "symbol": "RAW", - "name": "Raw Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/idomez/rawcoin/main/logo.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "5APccmJuY2hnmXqN8yjMA97k3obB6xH5Xah1eTiLa5eG", - "symbol": "TUTT", - "name": "The Unkown Tipping Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/TUT-Token/sol_token/main/tut.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AknQ9t63Zr2xATRdoRqETfJBzRLTLzPaUS4pdu5ZrKfc", - "symbol": "SCR", - "name": "SolaCredits", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AknQ9t63Zr2xATRdoRqETfJBzRLTLzPaUS4pdu5ZrKfc/logo.png", - "tags": ["utility-token", "game-token", "game-currency", "nft", "Gaming"], - "extensions": { - "description": "Sola Space Academy is Space Training Exploration Challenge Game.", - "discord": "https://discord.gg/9TtWpwxvfH", - "telegram": "https://t.me/solacommand", - "twitter": "https://twitter.com/solacommand", - "website": "https://ssa.systemtechs.co.uk" - } - }, - { - "chainId": 101, - "address": "6p8FkfLtzUcYAndy9raW2zJ6W7D6bPeB6Ey8gUKLpw4X", - "symbol": "BAER", - "name": "Baer Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/bathsource/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "12jnEAyj5qkW9UPfQS7z7Yxz3LB9cHXdg65sZTfMj6Gg", - "symbol": "ARTEL", - "name": "ArtelCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Artel-Scaffolding-Ltd/cryptodev/main/logo/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GERkQKPenbJPoaLny5tfdbVzfDZpmkARFHdXN7KNLBSu", - "symbol": "OXEN", - "name": "OxyCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/wet33523fsdf/oxycoin/main/logo.png", - "tags": ["social-token", "oxy-token"] - }, - { - "chainId": 101, - "address": "QbHcjuaK1iKXxd9iKbpaQv3w3wFSoUX9CDm3Kp5EQLi", - "symbol": "DOFF", - "name": "DoffiCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Dofferson/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9pXKosNGYSczhyb8e8k9sjc7SPCzvTc1g1bMkrhK5tvv", - "symbol": "XECO", - "name": "XEOS Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/TurtleDevil1/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ALk6U66xwzsWff79heA38ciVuN5uUQg4hVtMLewHcnpt", - "symbol": "MKCN", - "name": "Milky Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Noah-Engineer/Milky-coin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2zCtgdca2wYH7Hu1hecR1hrsGEh5dHmNA8BcaUoNmda7", - "symbol": "CSH", - "name": "Cashano", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/cashano/csh/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6mDnpYW73bp2TJeRghuDhKipVvNfDvPjQf8HjnyKTSGJ", - "symbol": "KSCC", - "name": "Kitter Skitter", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/whooliepenguin/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CH1UzhpTpq3C4Sxfa3qd3W6h7my464Y1Nmws7kTtezgm", - "symbol": "WAC", - "name": "WACoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Warriors-Army/WACoin/main/wac-coin.png", - "tags": ["social-token"], - "extensions": { - "description": "A virtual economic system for my community.", - "discord": "https://discord.gg/N49Gxsu", - "twitter": "https://twitter.com/WarriorsArmyOff" - } - }, - { - "chainId": 101, - "address": "HvYpb3sRhusCXPw5wFGuv9vMhnAcpDTsoh3pKVgXQ3kH", - "symbol": "DICN", - "name": "Dissy Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/marcopollacci/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EBZ1yiEQV64sD4hjGpase7xH8zyc9kBdnjS8hCVdx895", - "symbol": "WDE", - "name": "Auburn Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/dpd696/crypto/main/logo.png", - "tags": ["social-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/dpd696" - } - }, - { - "chainId": 101, - "address": "BawvMiq3zUvY1pBcHLkhQJv14NWP4rQLDFXw5Q64CCjn", - "symbol": "DUDU", - "name": "NUMANG TOKEN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/haocheng1997/dudu_token/main/numang.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7sAh3TsoT2fFDm9ERKbHpco4oRyytanpcdXFfRCTbupR", - "symbol": "TERP", - "name": "Terp Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7sAh3TsoT2fFDm9ERKbHpco4oRyytanpcdXFfRCTbupR/tt.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "EZrBfhaPN8JpA4ecpnQHSkj6szGBisnvpcn1kfdCh2ok", - "symbol": "CAMP", - "name": "Camp Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EZrBfhaPN8JpA4ecpnQHSkj6szGBisnvpcn1kfdCh2ok/logo.png" - }, - { - "chainId": 101, - "address": "2waJmsGu1pd2a3VbAnQXnsaPRAAZLPcCuL3U4ot6QZkz", - "symbol": "SOUV", - "name": "Souvenir", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/stasinuspierrus/crypto/main/logocrypto.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FxTMCsDCBaS9xAes1Q671wHdokWgv2n87iynLsv7W2Cq", - "symbol": "HNNY", - "name": "Honeybucks", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/honeybucks/crypto/main/honeybucks.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "F7oER7ThE9ALwcTdqsb3JdVkPHNhge5t6TroEur5hB38", - "symbol": "SCHAEF", - "name": "SchaefCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/schaef1/crypto/main/SchaefCoinLogo.svg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7jz9nNnLPkMf5N4aYCJP3fitvFw5moduhbw8sHNEFpmk", - "symbol": "MSGC", - "name": "Melcosoft Game Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/melcosoftclub/melcosoftcoin/main/logo2.png", - "tags": ["social-token", "community-token"], - "extensions": { - "description": "A virtual economic system for my community.", - "discord": "https://discord.gg/XzkVEKDg", - "facebook": "https://www.facebook.com/melcosoftsu", - "instagram": "https://www.instagram.com/melcosoftsu", - "telegram": "https://t.me/melcosoft_official", - "twitter": "https://twitter.com/melcosoft_su", - "website": "https://melcosoft.games" - } - }, - { - "chainId": 101, - "address": "DNDYfdWL9dB5vyqLHncChJKs81VjnDJaqBwGMziFFkQt", - "symbol": "SLDM", - "name": "Slumdog Millionaire", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/smitpatel7/SlumDogMillionaire/main/logo.png", - "tags": ["social-token", "NFT-Gaming", "Utility-Token", "Game-Token"] - }, - { - "chainId": 101, - "address": "8B14CodaG7rQdYjGutpc3N74Qo4RHeiJnrFxSoYGTr8W", - "symbol": "JCARE", - "name": "JCAREcoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/DonovanVA/Crypto/main/JCARE.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "iaoa6DBpVv2bqtMjNFpXSbxtWdQTKsa3s9Xg897XNKg", - "symbol": "KLYC", - "name": "KellyCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mvkellyjr/coinlogo/main/GoldenK.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "H66uizqhr2Rye3xAWaCTeGXvhEWxasRdLGgKwctwkoEc", - "symbol": "PORK", - "name": "Pork Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/porkcoin4968/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FgJQJX9NoWqzBCgEFZuUuNXqrCh6tWzpeHwJqsKnSWhu", - "symbol": "ISHA", - "name": "isha coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/isha-sol/isha-coin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7YHXypSK2TKjBjzomxb29o6RJtV8q9C4Hyy979CZm5Th", - "symbol": "HIAX", - "name": "HiaceCoin", - "decimals": 0, - "logoURI": "https://github.com/VictorLaszio/HiaceCoin/blob/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "C7SRB4fH2evhkc6nFpM9oqN1ZpZ5NAnJLMBt6tegaFXA", - "symbol": "NPTC", - "name": "NeptuniumCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/C7SRB4fH2evhkc6nFpM9oqN1ZpZ5NAnJLMBt6tegaFXA/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BBQtieeXpnT5CztuhHBuVjuFP4XcpWTWf18FKKXAyBww", - "symbol": "DJK", - "name": "DJKouzaCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/djkouza/djk-coin/main/DJK-Coin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "A7ZGw8BLWEPiRKai4H1AA39fsM2hr2xwmGBcxZ2uUsD9", - "symbol": "CROWN", - "name": "Crown", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/A7ZGw8BLWEPiRKai4H1AA39fsM2hr2xwmGBcxZ2uUsD9/logo.png", - "tags": ["GAME", "NFT"], - "extensions": { - "twitter": "https://twitter.com/photofinishgame", - "website": "https://photofinishhorseracing.com" - } - }, - { - "chainId": 101, - "address": "BdYkmFb3TNvZwWA8QXGKcsnFcPNFi1p1z9SaWbNgn6r2", - "symbol": "JOMAR", - "name": "Jomar Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jomartech/crypto/main/JomarLogo.svg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "D6APqJuEDZkT7mQz7C1ikBgypAc3tzYH86AnUuFxePWL", - "symbol": "TCOIN", - "name": "T-Coin", - "decimals": 0, - "logoURI": "https://github.com/Teddy0307/crypto/blob/main/T-Coin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2z9RV8Zr3cAtcXnkFXqP5dtwpsxAgAvJHCkYjETvmM5z", - "symbol": "MEEP", - "name": "MeepleCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2z9RV8Zr3cAtcXnkFXqP5dtwpsxAgAvJHCkYjETvmM5z/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Etkh3QdA1seEH3xaL37rJpwitLWXo5iYa8aiBiqcoET6", - "symbol": "OFCN", - "name": "Objectif Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Ybraver/vue/c3a1c798c1ed37fc37fb36c471161c2656890372/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6qnRBUMk6Mr3xUCc5CBYWrdCb8Nr19U2HooLHcQ2ZxgQ", - "symbol": "GBGL", - "name": "Gobagoul Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Stcroix1414/gabaoulcoin/main/Coin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "12jExsp4wKGkVM64M97fis8R5jE67t5PXjZRzZcp2bcn", - "symbol": "SYMP", - "name": "SympCredit", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/thomasflx/symp-tokens/main/credits/logo.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "6PfxF85LgsnzryHrEF2c8CYWyb3yZFtfvh1Mh9MmnbjM", - "symbol": "BZML", - "name": "BreezyModels Coin", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/andreamarin23/crypto/main/My_logo.png", - "tags": ["social-token", "community-token"], - "extensions": { - "discord": "https://discord.gg/wWThnqNrud", - "instagram": "https://instagram.com/breezymodels/", - "website": "https://www.breezymodels.ml/", - "youtube": "https://www.youtube.com/c/BreezyChannel" - } - }, - { - "chainId": 101, - "address": "3iDK5HRmSf91fnkJ4x7UV2Rj53YyNdedtps6kddRnCtZ", - "symbol": "FRC", - "name": "Freya Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Jaeger790/crypto/main/freyacoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HHVz54Lh3Mx4mSZEtfd8spRcJdSaNKA8WhyxdniXrw7D", - "symbol": "SDDS", - "name": "Dexter Scooby Scrappy Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/gagar/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4X3JtV6USDr23Am4aSur9nDhfGfSR91TsmonCNw7VUkW", - "symbol": "RKSL", - "name": "RocketSloth", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/RocketSloth/Crypto/main/Sloth_png.png", - "tags": ["social-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/RocketSlothCoin" - } - }, - { - "chainId": 101, - "address": "6GVGRXC5wf7NjnTQxaqEZErtdsHupke7Fiz5pUG5VkkM", - "symbol": "HOOD", - "name": "HoodRatsNFT Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/lito95/cheezV2/main/logo.png", - "extensions": { - "discord": "https://discord.gg/N3eVCCbmbB", - "twitter": "https://twitter.com/HoodRatsNFT" - } - }, - { - "chainId": 101, - "address": "8zbnRTFmyMKNpbUNJDr7rputhEjxFQ1wxwh2GJjnjP9", - "symbol": "ORC", - "name": "OSINT-Research coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/OSINTResearch/OSINTResearch-coin/main/logo.png", - "tags": ["social-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/osint_research" - } - }, - { - "chainId": 101, - "address": "27UKQ4WVepzncEzW8ifofsaAmMCVyz5qdTJuJPEGrWxY", - "symbol": "ELI5", - "name": "CryptoKids", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/remedyblockchain/ELI-5/main/ELI5.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AzRY2yit9mHVaPzP2kH7h3K9EzWvY52eddUpGqaux7Y7", - "symbol": "POPS", - "name": "POP-SOLANA", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Zenophire/POP-SOLANA/main/SMALL.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2Xz9bhz8zAidDz6REu5CxDYdBdn3RQMXR2FPRxoWs5Sd", - "symbol": "MACX", - "name": "LeoMac", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/smacdonald23/crypto/main/logo.png", - "tags": ["social-token", "community-token", "Utility-Token"], - "extensions": { - "discord": "https://discord.gg/feM342Y5" - } - }, - { - "chainId": 101, - "address": "GP85XWxGYtSAUsq5JKoN13hBTEqTBKPRANcohSGHd3Hx", - "symbol": "MIAO", - "name": "MIAO COIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/qian262/Crypto/main/pngegg.png", - "tags": [ - "utility-token", - "social-token", - "community-token", - "metaverse-Token" - ] - }, - { - "chainId": 101, - "address": "FwovKxHTJA8pLtSnkJWxFyTetTU1kKzg7o6gjRgFAAXf", - "symbol": "HEDR", - "name": "Heder Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/HederGit/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AeC4LWpgMdYVekFwXn3yFA8PrsBG3QZFGYMvKFRJLdPb", - "symbol": "VMTK", - "name": "Vitor Moreira", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/vhlmoreira/crypto/main/logo3.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "27uumiju3EkRoPzWvwRub9eGBVwYJaBfFQyFmxCXr82H", - "symbol": "RAMK", - "name": "RAMKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/myattriot/Testing/main/RAMCoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9FQnWG6GaUq3cTcQ8PPPjUdQB2QyTB522yUJhj9FEA6r", - "symbol": "SLCN", - "name": "SolarCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/tejums007/solarcoin/main/solarcoin.PNG", - "tags": ["solarcoin"] - }, - { - "chainId": 101, - "address": "9bFhizH8pNDxfNxFoA2Tdf3UwAV7XwGEbCC8penaExj6", - "symbol": "CAIRN", - "name": "CairnsCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mikecairns1/cairn/main/logo.png", - "tags": ["Cairns-Coin"] - }, - { - "chainId": 101, - "address": "4HFqBfbTHdCSVED2E1FaMrkNgNikw6KNy7FnchSAohWP", - "symbol": "DBRK", - "name": "Dr BurkeCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/JamesPBurke/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Hq9UCHNNTifPhbdJMSxXcE6ba6xALZ4uh5s6xVq3cJmQ", - "symbol": "KBS", - "name": "Kai Bell Soup", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/WhirlyBell/KaiBell/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Bz8U9LupMio1mk12CDZi2hhbpraBzkjpbTaBdMYt89xF", - "symbol": "PHBC", - "name": "PhoebeCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/phoebecoin/crypto/main/phoebe.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DnEGjYuPq9UzZSBcqfHvpqHB1KKKyNgCEPsELFDXJNyC", - "symbol": "YASB", - "name": "Yassin Bucks", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/YassinAbdi/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9kufJs6yVbtZrwCiNVLyjKPyjY3d3iVUVos3ujvgn9Wt", - "symbol": "TFNE", - "name": "Tranfinite", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/gomez1112/crypto/main/Twitter%20Profile%20Picture-modified.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FA8KHovFPzhBDTs9LmP6kHbR21APLaPjpTjTFeKATDbC", - "symbol": "SJC", - "name": "Sjadey Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Sjadelin/SjadeyCoin/main/SjadeySolutions_Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "C5AUZsFv35EuJEaGMoRyGJu9jzJ4VBxEvSia3Sry357h", - "symbol": "SBTK", - "name": "ShitboxToken", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/bananaman2020/shitboxtoken/main/shitboxlogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "84K5R4beJJMiLpnVF9uaRpKrYSuFG6k4mBecAkpKcky6", - "symbol": "MJMJ007A", - "name": "James Murray", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mjmj007a/crypto/main/1-mjmj007a-hires2_Estpa-sm.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HkNokfCXG33eu5vCcS49mq3jZcKZeQSQCyta964YxxYg", - "symbol": "CRRT", - "name": "Breezy Bunnies Carrot", - "decimals": 0, - "logoURI": "https://breezybunnies.com/images/3-p-500.png", - "tags": ["nft"], - "extensions": { - "twitter": "https://twitter.com/Breezybunniess", - "website": "https://breezybunnies.com/" - } - }, - { - "chainId": 101, - "address": "3oSUm4nYjtqTuDTg59cCwoFHbR6wYQsbM8xXuJ4K8vvG", - "symbol": "ZTKN", - "name": "Z Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ZToken/LOGO/main/TOKEN.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "RqvX8H6QqEK556zatjaH772Rmu3wdx9ovdZqZMtkwe6", - "symbol": "DRAGON", - "name": "DragonCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/azcoigreach/dragon-tokens/main/dragon.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BJRESWVMtcAKAFoDzz3D7wnfxbhiuKJUZ81cVDukwusd", - "symbol": "THDC", - "name": "ThodoCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/staurakis/thodoscoin/main/thodocoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9d99rTT5XMfDnb7BFG5j7ejJGU4RVghd1V2ysLh4CyKj", - "symbol": "PC", - "name": "PearCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/timpan77/cryptoc/main/logo.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "DcKqtwACf8tSncmyvSmTsXLizXin48TPWAdz9JEfgyms", - "symbol": "NXC", - "name": "NixCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/charbelll/nixcoin/main/nixcoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4d9wEUBVUh8cYKoYkBkkwcUMsaRygim2gRJqSycALqw7", - "symbol": "CNDMB", - "name": "CanadianMoonBoyCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/trevoroleary/CNDMB/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FnQ5HFHJjyJ2Ut5Ax3QMpG6LbU8rQuwK57CWzG45Vm2L", - "symbol": "ivlt", - "name": "I-Velt Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/iveltcoin/token-list/9c11878fdedfe051d9341551db7caf03527652e8/assets/mainnet/FnQ5HFHJjyJ2Ut5Ax3QMpG6LbU8rQuwK57CWzG45Vm2L/site_logo.png", - "tags": ["social-token", "ivelt"] - }, - { - "chainId": 101, - "address": "Bt3nRHbGf82y4ywqpBZ5FAHJ95uZJPwpmZMSZRpFxjXt", - "symbol": "PRMT", - "name": "Promort", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/doubled1105/promort/main/IMG_2026.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2dEmoDzXBgkQ5qfgHieiEpyytjBqB1j1cvR5CSZrnSB3", - "symbol": "CNNC", - "name": "CnnctingKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/robermakram/Cryptocurrency/main/IMG_4092.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "4ZV4yb127M2xULJKfMwprNCni4V8KCnTcMUcQ56iJD78", - "symbol": "HZC", - "name": "HorizonCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/EmiN364/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7sDbbcYiDAY5gqz3mCRD16JpuudKPUkCEcmc5JE4Z74s", - "symbol": "KEC", - "name": "Kieran Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/cloudysoda4/kieran-coin/main/coin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "219T3V6e8EBegoNKFYMZ5VSvMw26JBwmgViG7nDNp4b9", - "symbol": "POT", - "name": "Potato", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/bensat21/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CNuggUieEKApV1cfaKyvG86qu3Bg5fVtozbbLxVGz5ky", - "symbol": "FRLUV", - "name": "FreeLuv", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/greenel/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HaD4sYtdJQqAcXnpZkbv6DjTC4Qa2YyHeirwrKfP5TLr", - "symbol": "SYMPCOIN", - "name": "SympCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/thomasflx/symp-tokens/main/coins/logo.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "CJdZt6kta7i3Z1hg5g6PpsCVD1cDCn7zYWWkLpXcwvba", - "symbol": "PUGC", - "name": "PUG", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/celerityd/pug/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "yzLrXYxYw7VsFvcpPnyvWpedyCKkorMVETq31vKsNvQ", - "symbol": "HAAH", - "name": "Hamzah Alhumaidi", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/hamzahalhumaidi/crypto/main/images.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DL1WSv3tZpYr6pN489XXgP5GFvLyGtoDy6EW6dL6bFfL", - "symbol": "0T", - "name": "Jeweloophole", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Jeweloophole/0T/main/logo.png", - "tags": ["detroit-mentality"], - "extensions": { - "website": "https://jeweloophole.org" - } - }, - { - "chainId": 101, - "address": "A6k6EFVrW9MLEpWnwFZTqBcMKkB6VjyPH8RyVMddb7pJ", - "symbol": "LMRV", - "name": "LilMarv", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/RayG96/marvcoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6c2rt6aYpRKwddwwtE68BS2ok8y4U8VUZdThCjfcX38M", - "symbol": "AAP", - "name": "AstralApes", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/sungminkim01/token-list/main/assets/mainnet/6c2rt6aYpRKwddwwtE68BS2ok8y4U8VUZdThCjfcX38M/logo.png", - "tags": [ - "AAP", - "ASTRALAPES", - "ASTRALBABYAPECLUB", - "ASTRALHOUSE", - "ASTRALJUNGLE", - "ASTRALMARKET" - ], - "extensions": { - "description": "AAP is a renowned NFT aggregator that offers a diverse range of NFT solutions. AAP enables organizations and start-ups to incorporate blockchain technology into their current operations. Users may use AAP to develop, own, and trade NFTs in a variety of industries, including entertainment, music, artwork, and esports. AAP is used together with play-to-earn mechanics, allowing players to earn tokens and NFTs while playing games.", - "discord": "http://discord.gg/astralapes", - "instagram": "https://www.instagram.com/astralapes/", - "twitter": "https://twitter.com/ASTRALAPES", - "website": "https://www.astralapes.com" - } - }, - { - "chainId": 101, - "address": "7JqTBx8rPmnHqzZjnzud6eyyqjuRVQeUmkZhPfx3rW5L", - "symbol": "CUVY", - "name": "Curvy Shroom Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Papinski/crypto/main/shroom.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "31hz8bvkaJEAwhg1JVCbtNvuQ5dJKSZGMdsNQz86At99", - "symbol": "COCN", - "name": "CachorroCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/LukeM94/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4LiYbWTHuKz9A4XVeUumjg1mwys5XUTyZzPWMtZYjeoQ", - "symbol": "TKR", - "name": "Tucker", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mrshawntucker/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "D3DrumetAR9yjcKLYYbxzGDtqovgqGSse5AYkdby5oVw", - "symbol": "GG", - "name": "Gruesome Goblin Token", - "decimals": 6, - "logoURI": "https://www.gruesomegoblins.com/assets/images/Token.png", - "tags": ["GOBLINS", "NFT-Token"], - "extensions": { - "twitter": "https://twitter.com/gruesomegoblins", - "website": "https://gruesomegoblins.com/" - } - }, - { - "chainId": 101, - "address": "A5pAmfS5PA7STgLh2wUpUy4LPGa7xqujMkLvZ9xwdPfv", - "symbol": "STC", - "name": "Scietech coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MCG10coder/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HeJ1yyA6v657o7AJgPF2GiW5yoinobc6CjMVudaTXr9R", - "symbol": "MKT", - "name": "Monkey Token", - "decimals": 6, - "logoURI": "https://i.ibb.co/MPn4qRD/icon.png" - }, - { - "chainId": 101, - "address": "A3xL7crmipM83EqMDgRhHqzvn7RtR3724RH3d8Q5QJUP", - "symbol": "TDTC", - "name": "Dick Tickler Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/dallasat/coin/main/tdtc.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7iBrwijJn8cHmvjNMYDKe7BiES3m9rBh7jtkZRBbfVpJ", - "symbol": "TRTC", - "name": "Traina Credits", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/dallasat/coin/main/dtlogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ueHVLNy1mFrr9YucxVyvF287CR2Zs8v37TwAq1aqivw", - "symbol": "TLWJR", - "name": "TLWilliamsJr", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/GinJudokax/TLWilliams/main/SOL_Token_Pic_1.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6rAYvHh7QZQZJ8K5aS44k2C2XB5r7RcFSBV8piUWAwTg", - "symbol": "DOBE", - "name": "DobeCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/northportio/crypto/main/logo.png" - }, - { - "chainId": 101, - "address": "6tFDVzLLy87Wk42dqQjhC6p731rrKpHNhEXjQnFqACFW", - "symbol": "SPL", - "name": "Space Lemons", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/gamer4life1/crypto-pic/master/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2nePy8QQqjhPLWg3Kp4RRKGGcvvQ3hf9L7YWp6BjNN9c", - "symbol": "RCDI", - "name": "RyCanDoIt Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/rycandoit/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3qvg2hSA4NHhe73Xv6rUuhFoGM77VBvZrmE4tWSHMQWe", - "symbol": "PHPC", - "name": "Philippine Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3qvg2hSA4NHhe73Xv6rUuhFoGM77VBvZrmE4tWSHMQWe/logo.jpg", - "tags": ["stablecoin"], - "extensions": { - "website": "https://www.sagesoftcloud.com/" - } - }, - { - "chainId": 101, - "address": "AcndTryRKudMeYQLmn8cxXRKCrHow8paJUndxS3YmBC8", - "symbol": "APT3", - "name": "APT3 Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/stsomeware/apt3/main/logo.png", - "tags": ["social-token", "community-token"], - "extensions": { - "website": "https://www.apt3.com" - } - }, - { - "chainId": 101, - "address": "G2CXQrHh8R8j5fRuLLjQKZi22tBmAr2dNMRLxetmFmpy", - "symbol": "MKYC", - "name": "Mikey Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ItsMikeyy/MikeyCoin/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7uhJguD9nMQUE4Vka7EXqF2xeZbuQ5ehPt3cbTBomvXM", - "symbol": "DRYL", - "name": "Daryl Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7uhJguD9nMQUE4Vka7EXqF2xeZbuQ5ehPt3cbTBomvXM/logo.png" - }, - { - "chainId": 101, - "address": "2A88e7yXkNcgb8vwKvFbUhnQciCjE2Nd1QQmxt5CMdmn", - "symbol": "SHCH", - "name": "ShchichCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Aksid83/shch/main/logo.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "3RtkQCZYd3ZDW4F8mAkZ9EsztJXTmQau3uDtXdD92KM1", - "symbol": "NC", - "name": "Naz Coin", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/cyber-arknet/nazcoin/main/nazcoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HDdFjjyciMqE1mE4nwXMWKDYXUuzA1jbM7zPUF7CLYus", - "symbol": "ELI", - "name": "Eli Lapkin token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/eli-lapkin/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FCu4aywtY4FWVsHg3FacRDSMgF2WHXZdmFrCcXVYsuFZ", - "symbol": "NINA", - "name": "Nina Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/thedamian/NinaCoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HVrk6yPpVABm17GQf9ac28QGgpNa9jDUnJ8yTx5WT6am", - "symbol": "EST", - "name": "KE4EST COIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ke4est/cypto/main/altcoinlogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BxVxptuPHfUbsebvsYgiHxAxCmLgT3zeYc8n1SAvPRdr", - "symbol": "OCC", - "name": "On9 Cat Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/starholes/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8Sv5TQPQtv3gA9D5ucp7XoG8TDGbo4UNBhACcg36G9iY", - "symbol": "NOOB", - "name": "NOOB COIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Xstar97/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2jCtt2fy9Cq5MhdgxH7Rj1e1PHByziiuW9WQBqtb4uPW", - "symbol": "HOTROD", - "name": "Hotrod Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/markeo4/crypto/main/HR_Coin.png", - "tags": ["social-token", "utility-token"], - "extensions": { - "discord": "https://discord.gg/bYY7CsgN7y", - "twitter": "https://twitter.com/HottestRods", - "website": "https://hottestrods.com/" - } - }, - { - "chainId": 101, - "address": "7dQ5ojWAVPBUT5HqUUj8dXo5VsnpjBEc1axZUyoLmcex", - "symbol": "SEDDY", - "name": "Seddy Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ymiseddy/logos/main/coin/seddycoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "tCchMAUtunqzwJ9aCm3co5YiUzRSceEmf2bw46hmAbw", - "symbol": "TGNPRO", - "name": "TGN Productions Inc", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/tgnproductionsinc/TGNProToken/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8RmcC8ENzd4C6By6puSY6DKe8KBTdpG2w5xAxHGUaTMG", - "symbol": "EKIT", - "name": "Ekadrishta Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/EkadrishtaITSolutionsLLP/crypto/main/logo.png", - "tags": ["social-token", "social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "BL23qc9ddViFVeQ3vn4cXRPdqd6C6K8Yb2CtrQ2etkMb", - "symbol": "XNTK", - "name": "Xengil Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Xengil/xntk/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DEbeG7mzbAhxmA6WMqNLhb62vrQtuq7mrxWdYk8GjCMn", - "symbol": "LYTRM", - "name": "Lytrium", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/edmiecheil/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Em9L4m8VZUpRUiajnwmkDMXeJ7yvGfVNZraaGknnsB4A", - "symbol": "WRO", - "name": "WRO NETWORK", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Em9L4m8VZUpRUiajnwmkDMXeJ7yvGfVNZraaGknnsB4A/logo.png", - "tags": ["social-token", "fun-token", "meme-token"] - }, - { - "chainId": 101, - "address": "4PGTcVUMoyaLUvqDhcKGGR2moo6oPe4DmWdHZsdGJcB6", - "symbol": "TTM", - "name": "TO THE MOON", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/GalacticApeSpaceClub/imagemiib/main/Webp.net-resizeimage.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9r6vbKHTY5ZGVhCZMgCDw1MQMeXrRtSgfErgNzXt1q9P", - "symbol": "ASSS", - "name": "Ape Strong", - "decimals": 9, - "logoURI": "https://iili.io/7EE4rx.jpg", - "tags": ["Meme", "Ape"], - "extensions": { - "twitter": "https://twitter.com/ApeStrongSeries", - "website": "http://www.apestrong.art/" - } - }, - { - "chainId": 101, - "address": "F1XTV55UN5UMu7nkofLZGLSnswM4qU6iDfRRs4JDcvfp", - "symbol": "TOKO", - "name": "TokoCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/hayaitoko/tokocoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7P8WeYZFfccFcvRmNyKFGWaReUYGDt9177vPKzs3tFyS", - "symbol": "xESP", - "name": "eSoup Token", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/esoup/token/main/logo.png", - "tags": ["social-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/mcyork", - "website": "https://crypto.esoup.net" - } - }, - { - "chainId": 101, - "address": "ABRQiF7QFBqWA472DP6FhfbbVjtw9qS2NBN6As6LGuYg", - "symbol": "CMU", - "name": "Cyberindo", - "decimals": 9, - "logoURI": "https://cyberindo.tech/logo.png", - "tags": [ - "utility-token", - "capital-token", - "DApp", - "Application", - "payment-protocol", - "Payment" - ], - "extensions": { - "twitter": "https://twitter.com/CyberindoTech", - "website": "http://www.cyberindo.tech/" - } - }, - { - "chainId": 101, - "address": "7UUWK4HFvkFvhd6U4DxCBi1yY7XWhQguabXK1MxtANKW", - "symbol": "KSD", - "name": "Kyoudai Synthetic Drug", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7UUWK4HFvkFvhd6U4DxCBi1yY7XWhQguabXK1MxtANKW/logo.png", - "tags": ["nft", "p2e", "kyoudai", "academy"], - "extensions": { - "twitter": "https://twitter.com/KyoudaiAcademy", - "website": "https://www.kyoudai.academy/" - } - }, - { - "chainId": 101, - "address": "uofopKqHsuuJo21z1tinDMaXN18C4uXJGLkfddFh9zL", - "symbol": "THBP", - "name": "Thai Baht Plus", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/cryptoflash007/crypto/main/THBPlus1.png", - "tags": ["utility-token"] - }, - { - "chainId": 103, - "address": "3TMHmSNcTuAE6t3gnpJmFMmNUH1Mm2n6VoAQnGdfgGp5", - "symbol": "CCT", - "name": "Cool Carbon Tonne", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3TMHmSNcTuAE6t3gnpJmFMmNUH1Mm2n6VoAQnGdfgGp5/logo.png" - }, - { - "chainId": 101, - "address": "e6r9LKsNoenL8a6dzqLUqgQr5qkQTGuwHYtdHnhAABi", - "symbol": "RC", - "name": "Roach Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/tzeshen/Crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7F1ERKVW2j4zNxLPp8etPUj2argvrSQuZBYAzvAJ1Mj5", - "symbol": "SNARF", - "name": "Snarf Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/iamsnarf/SnarfCoin/main/SnarfCoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "J3bPYVNNmnWbZpBbdiWCbCmRoCUFCasr76567YjKZdMt", - "symbol": "NVRX", - "name": "Nevrix Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/rmarcel-firestorm/nvrx/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "E3jdc9DMbYQnyBvhBQzqspyugMmY4x6QVfY2iLzmJnqV", - "symbol": "WDC", - "name": "WidCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/willidesec/crypto-widex/master/crypto-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "J1SwjFPmo9zNE6UV1FphcR7ohkaLecCYDeKTkWHiNgKM", - "symbol": "SANDE", - "name": "Sande-Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Ravask/crypto/main/sande-coin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3Mv7tMjYVUReWGp9w8dqVkk6MfKZPSGF5XfE6Ez7foJP", - "symbol": "TWC", - "name": "TECH WISE COIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/CraigEd/Crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9L8vpXqxusiTx3qZFJeiHA5RAynuM8NFHfx62YSkkavB", - "symbol": "FENR", - "name": "Fenrir Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SexyWerewolf/FenrirCoin/main/logo.png", - "tags": ["Payment", "Application", "utility-token", "community-token"], - "extensions": { - "github": "https://github.com/sexywerewolf" - } - }, - { - "chainId": 101, - "address": "2NZo5Dd1qJDTTP3HCMvTPeP3A2HjaZX1UBwv7kk8eNbe", - "symbol": "BC", - "name": "Borneo Chicos", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/borneochicos/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "86W1fnAL11sBVyAZH8B7TxRKPsMHqHw1wdeybEdbtZCE", - "symbol": "TECN", - "name": "Temicoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Temico/temicoin/main/temicoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7VRjzC7XhbEs8ciYL9HSwgXRSwaMArGELx3FAWgJhKMf", - "symbol": "SPRK", - "name": "Sprocket", - "decimals": 0, - "logoURI": "https://github.com/SprocketHat/Crypto/blob/main/1639397622620.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9MdLY4syYwLWgcmD8yzPvxZNGgmnb9Adcb3rFP1Amqfg", - "symbol": "FNCY", - "name": "Fancy Action", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/FancyActionToken/crypto/main/FNCY.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Dng7TUrbfwc6re3qMW6UaSwccq6N3pbmkhtZNo7LWYtK", - "symbol": "KINGS", - "name": "Kings Coin", - "decimals": 9, - "logoURI": "https://github.com/robwesselskw1c/kingscoinlogo/blob/main/kings_coin_bald.png", - "tags": ["meme-token", "utility-token", "community-token"] - }, - { - "chainId": 101, - "address": "BaG8Nw8Ct72teFUeWXHSdzVW2y5A5BKTr77hfFG3Sei6", - "symbol": "CNORD", - "name": "Crypto Nord", - "decimals": 0, - "logoURI": "https://stephanjess.de/logo.png", - "tags": ["social-token"], - "extensions": { - "twitter": "https://twitter.com/RealCryptoNord", - "website": "https://crypto-nord.de/" - } - }, - { - "chainId": 101, - "address": "DL6XYgEXK6pHpBjKV8CDCCigTk3NQ4Qwj3WfahUvFTNW", - "symbol": "LILJ", - "name": "LiljaCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DL6XYgEXK6pHpBjKV8CDCCigTk3NQ4Qwj3WfahUvFTNW/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7B3tU3tWEs5ApW6audcT9MUDttP6kiV2XLfrdoVBeyQt", - "symbol": "CVC", - "name": "Civic", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7B3tU3tWEs5ApW6audcT9MUDttP6kiV2XLfrdoVBeyQt/logo.png", - "tags": ["ethereum", "wrapped", "utility-token"], - "extensions": { - "discord": "https://discord.gg/MWmhXauJw8", - "twitter": "https://twitter.com/civickey", - "website": "https://www.civic.com/" - } - }, - { - "chainId": 101, - "address": "CB1piXLFESJuzaRtsTT5Ty6UX9P4Lu17csRvC9vFmowM", - "symbol": "BJTC", - "name": "BajtyCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Bajty/BajtyCoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BKbs3bmCi78myaeFv7Jzj68pSPtM3VwpQHWsNwqE52w8", - "symbol": "MIMA", - "name": "Mima Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/nicktolhurst/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Duch2MmgCar9UGt76smK5HcJ7anBRa31uNZZvNJt3b5S", - "symbol": "LNFTxSMB3719", - "name": "LNFT Solana Monkey Business-3719", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Duch2MmgCar9UGt76smK5HcJ7anBRa31uNZZvNJt3b5S/logo.png", - "tags": ["liqnft-owner-token"], - "extensions": { - "discord": "https://discord.gg/PYZWRHgVwM", - "twitter": "https://twitter.com/liqnft", - "website": "https://www.liqnft.com/gallery/SMB3719" - } - }, - { - "chainId": 101, - "address": "77oeFJMZeEsPD4ZfmaTJzwPXJTKpAN7uCX9GeVHzDdwj", - "symbol": "WTHM", - "name": "WERTHMANN TOKEN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/rtxjp/crypto/main/moon-planet-nature-crescent-wallpaper.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2w7LH6PLxo8gk9ssR6P36rk4Zaq2qM7mWz5S5e7PNrNG", - "symbol": "CHUB", - "name": "Chubby Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/judeallanhill/crypto/main/12433.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HJmkRP6NwF9cMAis78atdBWG2TrGtzhH4M28T8VPB2T8", - "symbol": "GDM", - "name": "Gundam Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/tetsuo-nl/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "388VX2FShukuv9sRYejMyWWMgbu3j5iAk1pRC2fAb1qD", - "symbol": "LOCAL", - "name": "Local Token", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/MPWAssociates/Local-Token/main/LocalTokenLogoGitHub.png", - "tags": ["Community", "Shop-Small", "Local-Token", "P2E"], - "extensions": { - "twitter": "https://twitter.com/local_token", - "website": "https://www.ourlocaltokens.com" - } - }, - { - "chainId": 101, - "address": "CkQsGJByd8Eof4YhaVZEh7KYijRM9LcmhwqatRuN8TsG", - "symbol": "PINATA", - "name": "Open Pinata", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/aonsmith/crypto/main/logo.png", - "tags": ["social-token", "metaverse", "utility-token"] - }, - { - "chainId": 101, - "address": "7kUK6RDuMWNDpWapKsru7Qh4ou6CUUdZHCb7oBrTtt4H", - "symbol": "DODO", - "name": "DodoCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/doryalo/dodocoin/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "E2EQNjDyUqMXKj8G6JgyBrT7QtxuA4puPuFYB75QkdE8", - "symbol": "ISI", - "name": "Isi Coin", - "decimals": 0, - "logoURI": "https://github.com/dzaja123/dummy-token/blob/main/logo.png", - "tags": ["social-token", "token"] - }, - { - "chainId": 101, - "address": "CueKAJkMnVrRUHW29rAkhsQcj6c4qtmghUmpUZeTvsoQ", - "symbol": "RAV", - "name": "Rav Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/RaviDhirani/rcoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "NuCLiDyTU5ETFvaxfZj76zBe3uUYJe4wvrtzkt2ZAnR", - "symbol": "NUCL", - "name": "Nuclear", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/NuCLiDyTU5ETFvaxfZj76zBe3uUYJe4wvrtzkt2ZAnR/logo.png", - "tags": ["The-Core", "of-everything", "capped", "deflatory"] - }, - { - "chainId": 101, - "address": "JCrX22B88PfXdrjMDEhgh85yC2EtUeyB6erPMpnvDS4s", - "symbol": "GRIDX", - "name": "Gridiron Protocol", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/JCrX22B88PfXdrjMDEhgh85yC2EtUeyB6erPMpnvDS4s/logo.png", - "extensions": { - "website": "https://www.gridirondex.com" - } - }, - { - "chainId": 103, - "address": "Gg4g7oFT5be2mVk8rPyXYsmg5yhu6LTzK6aVP3ZvUjgy", - "symbol": "GRIDX", - "name": "Gridiron Protocol", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/JCrX22B88PfXdrjMDEhgh85yC2EtUeyB6erPMpnvDS4s/logo.png", - "extensions": { - "website": "https://www.gridirondex.com" - } - }, - { - "chainId": 101, - "address": "4PKZftmFS776BSwnDhhwfsxgLxtFiHpoErNdz9rAdxhu", - "symbol": "KUSH", - "name": "Kush Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/c9obvi/kushCoin/main/kushCoinLogo.png", - "tags": ["social-token", "community-token", "NFT", "game"], - "extensions": { - "description": "Buds for bits, coins for Kush", - "discord": "https://discord.gg/EQMkNZUgxt", - "twitter": "https://twitter.com/WeeklySesh" - } - }, - { - "chainId": 101, - "address": "8H9cughzmpmtQKVg48d7UjAWB3kiR7v8sWrhRrZehypb", - "symbol": "AUCO", - "name": "Aur Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/AUR-COIN/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4j5bhHvAyTzLih5WCRvsVpuyZa2KiXaiixporbEqb1Cy", - "symbol": "LST", - "name": "Last Supper Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/svenrobbie/cryptosol/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GfmUGCL2kY21tqpDoeVYnjP4c57wyQZzamyHjbqU4TKd", - "symbol": "VENUS", - "name": "Venus Protocol", - "decimals": 9, - "logoURI": "https://cdn.discordapp.com/attachments/904210282719621120/919989957827919932/256x256_2.png", - "tags": ["trading-token", "utility-token"], - "extensions": { - "discord": "https://discord.gg/T39rQGunSK", - "twitter": "https://twitter.com/venusprotosol", - "website": "http://www.venusprotocolsol.live/" - } - }, - { - "chainId": 101, - "address": "B3X2intXe1biLN9kok5BZGUXQ2UrSYwaaz6duJ7dpcEt", - "symbol": "MAFI", - "name": "Mafi", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/fkanter602/Crypto/main/MAFI_LOGO_1.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "HS3vkEDFe77SFyWYrj5yyvGjLvvr2uq7Aa2g4NwTiF2Z", - "symbol": "TECZ", - "name": "Temicoinz", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Temico/temicocoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3pX59cis3ZXnX6ZExPoUQjpvJVspmj4YavtUmpTpkB33", - "symbol": "Chicks", - "name": "SolChick", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3pX59cis3ZXnX6ZExPoUQjpvJVspmj4YavtUmpTpkB33/logo.png", - "tags": ["gaming", "nfts", "utility-token", "community-token"], - "extensions": { - "description": "The Leading Play-to-Earn Fantasy Game on Solana", - "discord": "https://discord.gg/solchicks", - "telegram": "https://t.me/solchicksnft", - "twitter": "https://twitter.com/SolChicksNFT" - } - }, - { - "chainId": 101, - "address": "inuXXDC6Tw1Fu6qUAfRbELG5x5pSA4afTskf7MvwjhN", - "symbol": "KINU", - "name": "KIN INU", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/inuXXDC6Tw1Fu6qUAfRbELG5x5pSA4afTskf7MvwjhN/logo.svg", - "tags": ["meme-token"], - "extensions": { - "website": "https://kininu.com" - } - }, - { - "chainId": 101, - "address": "AWqBvorwthhaV2CTmzzu7FehKAdce6iTczsKKcqEBggZ", - "symbol": "HUAT", - "name": "Huat Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ericxgx/crypto/main/logo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "4j5bhHvAyTzLih5WCRvsVpuyZa2KiXaiixporbEqb1Cy", - "symbol": "LST", - "name": "Last Supper Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/svenrobbie/cryptosol/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "84kqep5DBSYXCev2AmTxVNeoTCSXW2vdPr7xpCif3DuE", - "symbol": "IAN", - "name": "Ian Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/ianridsdill/crypto/main/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://ianridsdill.ca" - } - }, - { - "chainId": 101, - "address": "7fLNbYHSu6fDPvEMqww7VgJ76PBxnJjkgdXjCGv5fQCA", - "symbol": "UTOC", - "name": "Utopolis Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Utopolis/Blockchain_logo/main/utopolis_logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4hBZG7N8DEp1WKHfCvcVd3CtEkvMkXnGNhNYzZiopCHw", - "symbol": "ROMC", - "name": "ROM Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Utopolis/Blockchain_logo/main/romestant.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2Gw79PQcuJABAq8qZqN8oVAXMKzuV1FFgyRwrCMKtqLx", - "symbol": "4RM", - "name": "ReichMark", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/HerrPenguin/Crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8EgH47vnsKHC72gp25DKMhNuBqUMSZBNoVLb4FXRh7ga", - "symbol": "MOMO", - "name": "MOMO Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/frazzor123/MOMOCOIN/main/MOMO_Coin_logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HUFYuSidX6H4kGMJr1jFBiTS3DGhC6M6iiw7SvTnEzJM", - "symbol": "SILLI", - "name": "Silli Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/sillitoken/silli/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9MjAmgHXbu5drkNa9XpzfozgsM5Dcq6bSnKZzdNrwscC", - "symbol": "$FORCE", - "name": "Force", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9MjAmgHXbu5drkNa9XpzfozgsM5Dcq6bSnKZzdNrwscC/logo.png", - "tags": ["community-token", "social-token", "utility-token"], - "extensions": { - "twitter": "https://twitter.com/solenforcers", - "website": "https://solenforcers.io/" - } - }, - { - "chainId": 101, - "address": "A9611k8CppA7zrwsQ72qzN3FrYv3j5jpK8FGqpqBZMLk", - "symbol": "SECT8", - "name": "Sector 8", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Darreans/logo/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BhxPoUPkVASfT9y4ipJ6t4sN8uEuThz9voKaPrkv2sFQ", - "symbol": "ANT", - "name": "Ant Coin", - "decimals": 9, - "logoURI": "https://arweave.net/BchXu9WIA85Zxf1fntkKxDG7UzfsY_IFyVufswXWEMY/ants-logo-black.png", - "tags": ["community-token", "social-token"], - "extensions": { - "discord": "https://discord.com/invite/solants", - "twitter": "https://twitter.com/solantsnft", - "website": "https://solants.io/" - } - }, - { - "chainId": 101, - "address": "ANsbGkBC8JbfcAgqLUEyfBMdbvmqPFunqmNqfuPm9HBi", - "symbol": "ZGGY", - "name": "ZiggyCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ziggymoens/crypto/main/logo.png", - "tags": ["social-token"], - "extensions": { - "facebook": "https://www.facebook.com/ziggymoens", - "instagram": "https://www.instagram.com/ziggymoens", - "linkedin": "https://www.linkedin.com/in/ziggymoens", - "website": "https://ziggymoens.github.io" - } - }, - { - "chainId": 101, - "address": "cYmnZTPmyMgiffoVm1JpjhiUk3XNxExSvjgXK24ZpMs", - "symbol": "SKUD", - "name": "Skudder Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/chriswerner007/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2bdHb59xYNtJNf1FuK8Tt96CsZyTTXFMNEDxTgXMCkdq", - "symbol": "GOOB", - "name": "GOOB", - "decimals": 9, - "logoURI": "https://arweave.net/h1AbbOh8hEcm7pXm9hi_Yk_WaYoihquY7ZWzAvWWIc4?ext=png", - "extensions": { - "twitter": "https://twitter.com/goobienft", - "website": "https://goobiesnft.io/" - } - }, - { - "chainId": 101, - "address": "4G6wwVS3YUL7sgG14eAXaazYjVb16aD8uzhvXsNzSrJw", - "symbol": "SLOC", - "name": "Slo coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/robiweb74/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3p7pqeerwsuhL8FD2cdTHYqnVrU3w6X5pCap3pwPbs6T", - "symbol": "POW", - "name": "Pow coin", - "decimals": 1, - "logoURI": "https://raw.githubusercontent.com/danielxnilsson/cryptodxn/main/pow_1_coin_s.png", - "tags": ["community-token", "social-token"] - }, - { - "chainId": 101, - "address": "3SVhemQ5YHF6sDTZfjm98uTZimSZUVNh8pexcWibdg2s", - "symbol": "DXB", - "name": "Dubai Future Foundation", - "decimals": 0, - "logoURI": "https://github.com/samurtuza/DXB/blob/main/DXB.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5iAftA3uLN1LsaPWWs5ifuMDk5wjo8r8qRust3EJq3X2", - "symbol": "ROZIC", - "name": "Rozic Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/aljaz-rozic/cyrpto/main/prenos.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "58Jbfajet1o3L5LzZopwkSHtGKo2PdKkZBTPnWLQpc3T", - "symbol": "NIKKEL", - "name": "Nikkel Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/NikkelCoin/coin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "JdQi3VZFVF1Xbd1qqMGbrmyqDwKhPovdpswPtNEt5om", - "symbol": "LID", - "name": "Livia AI Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/KayRohde/crypto-token/main/logo.png" - }, - { - "chainId": 101, - "address": "6VYF5jXq6rfq4QRgGMG6co7b1Ev1Lj7KSbHBxfQ9e1L3", - "symbol": "wDingocoin", - "name": "Wrapped Dingocoin", - "decimals": 8, - "logoURI": "https://wrap.dingocoin.org/wDingocoin.png", - "tags": ["social-token"], - "extensions": { - "discord": "https://discord.gg/y3J946HFQM", - "facebook": "https://www.facebook.com/Dingocoin.org", - "instagram": "https://www.instagram.com/dingocoin", - "reddit": "https://www.reddit.com/r/dingocoin", - "telegram": "https://t.me/DingoCoinTalk", - "twitter": "https://twitter.com/dingocoincrypto", - "website": "https://dingocoin.org" - } - }, - { - "chainId": 101, - "address": "7ZYjz3pLHUnqX2wrd7VfQPCdS3MLESVxRnYkfEFe8Dyn", - "symbol": "LUGOO", - "name": "GOOSEYS", - "decimals": 1, - "logoURI": "https://raw.githubusercontent.com/Snaps19/gooseycoin/main/lucy(1).png", - "tags": ["community-token", "social-token"] - }, - { - "chainId": 101, - "address": "4QHgnsUhyM4wZUhnHpMBcH37VBr81Ka3L8o1t34yQAfR", - "symbol": "MOCO", - "name": "Monarch Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/kmoerkens/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CXdiBsn4f67dSvgyRSWrxmTaf2JA77EH5YBFpAs7fzUF", - "symbol": "MTRX", - "name": "Araujo Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/overDraftIO/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ApgNFHXMsY9qM8yaaSVzqX7xtbKkGjgo64NLGuf2hQjW", - "symbol": "VRSW", - "name": "VeraSaw", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ApgNFHXMsY9qM8yaaSVzqX7xtbKkGjgo64NLGuf2hQjW/logo.png", - "extensions": { - "discord": "https://discord.gg/w9e8yM7DtZ", - "twitter": "https://twitter.com/VeraSaw", - "website": "https://verasaw.io" - } - }, - { - "chainId": 101, - "address": "ETk89me8ru2rrAMx92Ufr2mGE2UDsXhXcuUEzSgMZqdk", - "symbol": "DVRO", - "name": "Vrolix", - "decimals": 0, - "logoURI": "https://github.com/DirkV69/Crypto/blob/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GXz5qhsjuu2ehynoEVrL2by7GouhJKfD8kW3mHUVdffQ", - "symbol": "MARL", - "name": "Marling Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Rawhound/MC/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EnzoXw6dNuU1TgkuN2o4vjebHtZjuqX5mfNTUo2sYvM6", - "symbol": "ENZO", - "name": "Enzo Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EnzoXw6dNuU1TgkuN2o4vjebHtZjuqX5mfNTUo2sYvM6/logo.png" - }, - { - "chainId": 101, - "address": "5SgeEe9gQiuvXRrAeQLZdMhRfPeyFmAWLGLJcVVwyj6K", - "symbol": "TRIU", - "name": "Triumphia Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/pushingpandas/triumphia/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8kUVc7aa24mRhMR17a8XtshUvAe2kLGseKBuR7q1KAWU", - "symbol": "GBC", - "name": "Gasbert Coin", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8kUVc7aa24mRhMR17a8XtshUvAe2kLGseKBuR7q1KAWU/logo-gbc.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4qAGvkJfboj1K9KHMizpVTLUCCkMANM8CLGPCXwSCCRz", - "symbol": "BABAB", - "name": "Bananine Baberto", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/barb94/token-list/main/assets/mainnet/4qAGvkJfboj1K9KHMizpVTLUCCkMANM8CLGPCXwSCCRz/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "H3r2shEWVKtsMTzdV9Wjhwj6GciJP3iUouQqnF8QQ6bY", - "symbol": "TBL", - "name": "Token Della Balotta", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/Vanno97/crypto/main/logo.png" - }, - { - "chainId": 101, - "address": "BeF6YAAXse91gkDTKN9iwc2m8YLrH4HVT9TTaDPzrbcX", - "symbol": "THSL", - "name": "TreeHouseSol", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/edTreeHouse/crypto/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9nzAeR98tptPo2DWycNNVt4VotefttiHmaDc1qSr5pDN", - "symbol": "FLC", - "name": "Fortune legacy coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/abelgirmay/crypto/main/fortunelegacy.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8KyChGxPRTfL6CFuSw8rMLpT7HttsSkCWnEyJydDcsYR", - "symbol": "META", - "name": "META", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/pblackhurst/Metacoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "E2MoWRZsVWMrnqfZsMJvmCij2mGJUripxtokuS1coUi8", - "symbol": "KOKO", - "name": "KomaliKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/giltnerj0/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CSsSJSfJmaqocgqVHpHeoHDzCawVpCBZmFbmZ4AisoVH", - "symbol": "QUACK", - "name": "QuackCoin", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/nfacha/token-list/main/assets/mainnet/CSsSJSfJmaqocgqVHpHeoHDzCawVpCBZmFbmZ4AisoVH/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2esX8PzjDqsfL2t7i6jfyLbP53gNN2Rp7cFPCP2842Hr", - "symbol": "FANG", - "name": "Fang Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/DeveloperNeb101/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HnCVVhSgvJGFdk3yCe5qwaqr1qGZKnTjsTV2Hiq3uUGx", - "symbol": "DEVR", - "name": "DevRaeph Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/DevRaeph/crypto/main/logo.png", - "tags": ["streaming", "earnings"], - "extensions": { - "description": "DevRaeph Coin is a special Token for Twitch viewers.", - "twitch": "https://twitch.tv/devraeph", - "website": "https://devraeph.com" - } - }, - { - "chainId": 101, - "address": "HfEd81FSGtMVdyt4QzNWDxV7Lbde7sB42bFG123wCLK3", - "symbol": "PLUTO", - "name": "Pluto Buckz", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/Tacofromspace/Pluto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EctmRn2jMAdTDvQdG7mxadyiTvhGZiGYNrt9PWe6zioG", - "symbol": "SANTA", - "name": "Santaclaus", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EctmRn2jMAdTDvQdG7mxadyiTvhGZiGYNrt9PWe6zioG/logo.png", - "tags": ["community-token", "utility-token", "meme-token"], - "extensions": { - "discord": "https://discord.gg/3vjNGAPF", - "twitter": "https://twitter.com/SolSantaclaus", - "website": "https://www.santaclaus-sol.com/" - } - }, - { - "chainId": 101, - "address": "J5MNuEaYdDg52U1MLVUieJ2KXKdKXZLGzCuMW4wxtDKk", - "symbol": "SYMPTHOMAS", - "name": "Sympthomas", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/thomasflx/symp-tokens/main/sympthomas/logo.jpg", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "Da7LWn6guErBqAakf9zcQMGF79eGvBMNCQWMAGUmMK4i", - "symbol": "JKN", - "name": "femboy jack", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/alf-sainsburys/crypto/main/Screenshot_20211213-231333_Gallery.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5eitJZGxFq7ufpd3UpUgjnXTbQr7hbs9BTZBPnVaBtss", - "symbol": "MRCM", - "name": "Marcum Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/XeleX101/crypto/main/MarcumCoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FTbPBRWejaGcmnsRZfcbmA3vfcmPox4B25wRU9PFxVyv", - "symbol": "HOGG", - "name": "Hog Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ambreeze/hog-coin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8gdQTyjbE6qTjX82gdHV47e5FKQDZpKw8K3gVQ3p2NMi", - "symbol": "ROME", - "name": "ROMESTANT Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Utopolis/Blockchain_logo/main/romestant_fr.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9DHbizi6B513woHgN6eWXxczRGFopAahrV2cPpauwGDy", - "symbol": "SUPRC", - "name": "SuprC", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/superfistdandy/crypt/main/suprC.PNG", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2QA5NrCMzeTqZVWTQXEc62yeHWB2vVfdVjcSYtewJ1GB", - "symbol": "$AFRO", - "name": "Afro", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Texaglo/afro/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CLkuUdjLwu4xS49rwTr1FpMHwvtcoFXUwh9anbYqMUe9", - "symbol": "HUSAR", - "name": "Sekler Husar Inu", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/pr04ak/alt1/main/logo.png", - "tags": ["social-token", "community-token", "meme-token"], - "extensions": { - "telegram": "https://t.me/pr04ak" - } - }, - { - "chainId": 101, - "address": "CwkES31Z5SThDAzYK6izHEQ2XmqSSrHEay2M5P2qDtMk", - "symbol": "GOPC", - "name": "Gopal Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/gmallapp/gopal-coin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Gddp96Qygv4M1uJ9LJL9c9bu4XmY1khYLnVRv2HDQDKC", - "symbol": "TISS", - "name": "Time Is Standing Still Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/theunisj/TISS/main/TimeIsStandingStillLogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3wegcJmLCELNzbV26HPyCJstJ5gWAAjeY4pX9QEExLnr", - "symbol": "MOB", - "name": "Mobius", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mobius-token/logo/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "31fic4MCV5rfntTCRpoZCAYpqEt8ebH498pPzm1XhiFM", - "symbol": "CRCO", - "name": "Costa Rica Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Bart-98/CR-coin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4jEYxe1KsqcR4TUfn4jmD333BRgbV1JcbkZ4aJ1FXb7t", - "symbol": "FUNKLE", - "name": "Garfunkle", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Zumux/funkle-coin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4BAPMaeBoqKQPpK3HGYAnAJ8BsUk4CNX9QWLCf4T5nho", - "symbol": "BSNT", - "name": "BSN Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/dajohnso4374/crypto/main/darren.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "E7DpePKcHa7wzfA1k7rzjkhmCa7PfT7p7DTyyJwTLqdn", - "symbol": "Moxie", - "name": "PrinceMoxie", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ViperMiner/Crypto/main/Moxie%20Card.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3Fdme9Lm55xjXxhCNUQRzaae68W4oiLcS29v2L8YsRRk", - "symbol": "BSHRP", - "name": "BSHARP", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/namesakeradio/bsharp/main/bsharplogo3.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "MEANeD3XDdUmNMsRGjASkSWdC8prLYsoRJ61pPeHctD", - "symbol": "MEAN", - "name": "MEAN", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/MEANeD3XDdUmNMsRGjASkSWdC8prLYsoRJ61pPeHctD/logo.svg", - "extensions": { - "coingeckoId": "meanfi", - "discord": "https://discord.meanfi.com/", - "medium": "https://meandao.medium.com", - "serumV3Usdc": "3WXrxhrj4PXYUwW4ozBjxdSxwEp9ELKf3vETxXTqdiQJ", - "twitter": "https://twitter.com/meanfinance", - "website": "https://www.meanfi.com/" - } - }, - { - "chainId": 101, - "address": "49TV8AmixQUv3sqXZ16Q7BeTMcoDAFVPKTN8rZ3sdwXx", - "symbol": "PNW", - "name": "Evergreen", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/lucadenhez/crypto/main/logo.png", - "tags": ["social-token"], - "extensions": { - "instagram": "https://www.instagram.com/lucadenhez", - "website": "https://lucadenhez.com/evergreen" - } - }, - { - "chainId": 101, - "address": "8vnbD3zUR8H3c2bYUEDKyF5VFE1iSpbHKPfN59W3BWLJ", - "symbol": "BURGER", - "name": "BurgerCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MangoCoder360/burgercoin-image/master/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CUQGwSFxaMdRSt2nZpY6j8p39LMyzZNSsgyApjPmrKnu", - "symbol": "TACO", - "name": "TacohKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/greedydurian/Crypto/main/taco.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FyYUZ4C6Sz1eqAZTiVuP4BaVfaakcSrzXNDUWGoaN5yW", - "symbol": "DLCN", - "name": "DaleCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/bigdale123/DaleCoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BWsKWzLWUcLNPnaynFLrsHSyMEpgoMiwqL3jnNhEXgSU", - "symbol": "CMNLCK", - "name": "CommonLuck Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/One-Hundred-and-Eight/sol_tokens/main/cmnlck/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4Yo5MmcAmyFYomUxju99BwUvT8Bi55iwm1idYGQJEQhY", - "symbol": "WWW", - "name": "WWW Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/alilholt/crypto/main/logo2.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "846q7wB2kCgA5m8ksqXjPoMdrypM7WMWz5iLELR93ueM", - "symbol": "SHE", - "name": "SheeshCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ll3macorn/sheeshcoin/main/logo.png", - "tags": ["SHEESH"], - "extensions": { - "description": "SheeshCoin is quite poggers", - "discord": "https://discord.gg/ntAgpWSbuc", - "instagram": "https://www.instagram.com/baileyboylson", - "reddit": "https://www.reddit.com/u/Ll3macorn", - "website": "https://ll3mamc.com.au" - } - }, - { - "chainId": 101, - "address": "JDdmEMX1kyvmiTArqsH7JiG75JWhrheJXHCi357qt5QB", - "symbol": "MMMM", - "name": "Mobile Money", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/peteshouse/logo/main/Logo.png", - "tags": ["social-token", "NFT", "Game", "fan-token"] - }, - { - "chainId": 101, - "address": "mh7AXXDW83uSRU3gPgZgygz7YPYYY4AnSukyGNZmjgL", - "symbol": "KSHK", - "name": "KishhKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Nav2k19/crypto/main/KISHKOIN.jpg", - "tags": ["social-token", "kish", "vibez"] - }, - { - "chainId": 101, - "address": "GENW9qVvxHMVmRTVokgHRPqSr3syV2AmKoehqrRWiYFu", - "symbol": "DUSA", - "name": "Medusa", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GENW9qVvxHMVmRTVokgHRPqSr3syV2AmKoehqrRWiYFu/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.com/invite/gorgongang", - "twitter": "https://twitter.com/GorgonGangNft", - "website": "https://www.gorgongang.gg/" - } - }, - { - "chainId": 101, - "address": "4CWQ6KS2ZhNQtWxAytY8AGGt8qgfNEK1dvnHMMQhQBpE", - "symbol": "KUNCI", - "name": "Kunci Coin", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4CWQ6KS2ZhNQtWxAytY8AGGt8qgfNEK1dvnHMMQhQBpE/logo.png", - "tags": ["utility-token"], - "extensions": { - "instagram": "https://instagram.com/kuncicoin_id", - "telegram": "https://t.me/kunciofficial", - "twitter": "https://twitter.com/Kuncicoin_id", - "website": "https://kuncicoin.com/" - } - }, - { - "chainId": 101, - "address": "67oHSptHjcGJdh3VECE3GFGynQcCtMGNRJyKPav55itP", - "symbol": "CAWL", - "name": "Cyber Ape WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/CyberApeAge/PFPs/main/Cyber%20Ape%20Concept%2042.png", - "tags": ["utility-token", "Ape", "NFT-Gaming", "play-to-earn", "p2e"], - "extensions": { - "twitter": "https://twitter.com/CyberApeAge" - } - }, - { - "chainId": 101, - "address": "BgzSLhARcWjWQMF8L2gjv65PCoq3JyMcPokhhzLSrqJ2", - "symbol": "KC", - "name": "Khtain Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/bkcsplayer/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8dMrgk4joLzA3o69r87HeQ4ZyLyKNS2SZD1sVAJ6JWtB", - "symbol": "FELTS", - "name": "Felts Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Felts89/Crypto/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FAbqiU27CNBoFwdWqryAF5KdHiMo4Q3GmamEEDKp6QfZ", - "symbol": "108", - "name": "One Hundred and Eight", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/One-Hundred-and-Eight/sol_tokens/main/108/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FhTJbTK91rDiYNZFpQUf9oyw7PTPneXPVTmTUktxYMq3", - "symbol": "ZAK", - "name": "Zaki", - "decimals": 0, - "logoURI": "https://github.com/hyedalian2/Zaki-Crypto/blob/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8pcs3hQk5iEfgNc2yykuJ9HBgVbXgAUmeagPrWQmkNFU", - "symbol": "EHSAS", - "name": "Ehsas Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/3lii06/ehsastoken/main/ehsas.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AoAm3Mqa57RasPhiiPXjssyAUv6unhxaNQ5xA4qgsMjo", - "symbol": "MOO", - "name": "Moo Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/NicolaeO/crypto/main/logo.png", - "tags": ["social-token", "moo", "cow", "milk"], - "extensions": { - "discord": "https://discord.gg/kJ2YYyrnHP", - "telegram": "https://t.me/MooToken" - } - }, - { - "chainId": 101, - "address": "6sNhtA5dqqgyinJ1aavvLycD5CBqrTAbGm9Sf75Nzsy7", - "symbol": "MABK", - "name": "MamboKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/kight555/crypto/main/1.png", - "tags": ["social-token", "mambo", "catnip"] - }, - { - "chainId": 101, - "address": "GFpSv8R5AxiC2ZKC4yqf3jfVFKt1KVB5jk9x6YEQ7XSQ", - "symbol": "AQS", - "name": "AQSCOIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/n0tspam/AQSCOIN/main/logo.png", - "tags": ["innovation-token"] - }, - { - "chainId": 101, - "address": "3PNqq4kEqgRSkV5dYdcc6mtoaoXdaun9ytoCr4BgX5yA", - "symbol": "CSC", - "name": "Captain Shiba", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3PNqq4kEqgRSkV5dYdcc6mtoaoXdaun9ytoCr4BgX5yA/logo.png", - "tags": ["community", "NFT"], - "extensions": { - "twitter": "https://twitter.com/captainshibaz", - "website": "https://captain-shiba.com" - } - }, - { - "chainId": 101, - "address": "38JE7RdaF5BL9xJnuo9qP6bW1kb3ddaaRSTV6bbBjREo", - "symbol": "HOLO", - "name": "HoloCoing", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/BoundlessTechSolutions/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "E3RN9omoTNdqKXGj988X8JuCXwNZ6ZHXbfpaZ1nVZbrA", - "symbol": "APE", - "name": "Cyber Ape", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/CyberApeAge/PFPs/main/Cyber%20Ape%20Concept%2043.png", - "tags": [ - "utility-token", - "gaming-token", - "gaming", - "play-to-earn", - "p2e" - ], - "extensions": { - "twitter": "https://twitter.com/CyberApeAge" - } - }, - { - "chainId": 101, - "address": "BWeWGe646b92CUerrphZnFNRfqqAd33WdQSerS5hZ4eB", - "symbol": "CA93", - "name": "Cambrian Alumni 93", - "decimals": 10, - "logoURI": "https://raw.githubusercontent.com/rellikeno/CA93_Coin/main/CA93_Coin.png", - "tags": [ - "social-token", - "community-token", - "utility-token", - "fan-token", - "tech-token", - "currency-token" - ], - "extensions": { - "facebook": "https://m.facebook.com/PWCCA93/", - "website": "https://www.cambrianalumni93.org", - "youtube": "https://www.youtube.com/channel/UCPgDNcJSX2Ix629azkojIUA" - } - }, - { - "chainId": 101, - "address": "Bvq7LR4DrS1QbkD7AggtzuQotw2NWdy6UCVST6bH6vvr", - "symbol": "YOU", - "name": "YouBaby Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/DevRaeph/crypto/main/YouBabyCoin/logo.png", - "tags": ["social-token", "earnings"], - "extensions": { - "website": "https://youbaby.at" - } - }, - { - "chainId": 101, - "address": "DcNJWM1YdAu79kT5fNKxjGDX2SQDMoJwskMj1AaXd92a", - "symbol": "Korea-Won", - "name": "Koreapunkz-Won", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DcNJWM1YdAu79kT5fNKxjGDX2SQDMoJwskMj1AaXd92a/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "HyrzGRfn9Tj1DMzh8QW9qtxhXbcaMfqveBJhrkNVsSVU", - "symbol": "CRNZ", - "name": "Cranzana", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Karuzo98/crypto/main/Cranzana.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Dz3a5NSiy2BRE1boBjAEz6VHNDsTVwdxhx2eZCvL5oWK", - "symbol": "SQDC", - "name": "Squid Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/abl10801/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "dapeM1DJj3xf2rC5o3Gcz1Cg3Rdu2ayZae9nGcsRRZT", - "symbol": "DAPE", - "name": "Degenerate Ape Academy Droplet", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/dapeM1DJj3xf2rC5o3Gcz1Cg3Rdu2ayZae9nGcsRRZT/logo.png", - "tags": ["utility-token", "solvent-droplet"], - "extensions": { - "discord": "https://discord.gg/thK8BCtQbM", - "github": "https://github.com/solventprotocol", - "medium": "https://medium.com/@solventprotocol", - "serumV3Usdc": "CQQAHgfsu5uFTPzwewZ7QrLLSPk1K9MmqnuxiwmPDBzN", - "telegram": "https://t.me/solventprotocol", - "twitter": "https://twitter.com/solventprotocol", - "website": "https://solvent.xyz" - } - }, - { - "chainId": 101, - "address": "4jWGanaJh4GBpiEfoTzWuNsXFqSC5Rmq8ij195AV8cut", - "symbol": "VPSGB", - "name": "VPS GB Coin", - "decimals": 0, - "logoURI": "https://github.com/louij2/crypto/blob/main/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://vpsgb.co.uk", - "youtube": "https://www.youtube.com/channel/UCO15seGcv6e2CXWRfiHm6MQ" - } - }, - { - "chainId": 101, - "address": "CmQU5aan8Dng9xAuvYgpzroRkKWfeWaWD4X5mtErJ9E4", - "symbol": "DIXI", - "name": "DIXI Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/DevRaeph/crypto/main/DixiCoin/logo.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "2eZ45YBgQEftoxEVyCTWEULLNkDxSVSMrwv7LXiZn4sk", - "symbol": "STAR", - "name": "SOLASTAR", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2eZ45YBgQEftoxEVyCTWEULLNkDxSVSMrwv7LXiZn4sk/STAR.jpg", - "tags": ["social-token", "community-token", "meme-token"], - "extensions": { - "discord": "https://discord.gg/jqm4gmtzbk", - "telegram": "https://t.me/solanastar", - "twitter": "https://twitter.com/STARsolana" - } - }, - { - "chainId": 101, - "address": "5pfUatZaaj332Pc1anrsX5AJaR2ogWrXyFAudqkFQc5e", - "symbol": "FOR", - "name": "FAVORITE", - "decimals": 8, - "logoURI": "https://pbs.twimg.com/media/FGhR6SMX0A4ed8o?format=jpg\u0026name=360x360", - "tags": ["game-token"], - "extensions": { - "twitter": "https://twitter.com/Samurai37685862" - } - }, - { - "chainId": 101, - "address": "2FwYJP2YDBkxZYPMWaNJtNHxjCstMAY8SKBHMp3BGkWF", - "symbol": "VOX", - "name": "Voxxi", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/frankwarwick/crypto/main/voxcoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "G3MRfuriArrzbCN148ftKJbTeMhxxrnM5zrQGJvnAEM5", - "symbol": "KONG", - "name": "Kong", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/G3MRfuriArrzbCN148ftKJbTeMhxxrnM5zrQGJvnAEM5/shinylogo.png" - }, - { - "chainId": 101, - "address": "Dmv1M32r9ZFwXiwt9QKkTJrPjCx5ozC2ot4niHB6562h", - "symbol": "DRTN", - "name": "DrexxTkn", - "decimals": 0, - "logoURI": "https://i.imgur.com/tM6UvZP.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Cdqnj1tFnQaVH4meAbTgQ6jJgHxYAJ1WwP9htrj7JxWQ", - "symbol": "CYBER", - "name": "Cyber Ape Age", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/CyberApeAge/PFPs/main/Cyber%20Ape%20Concept%2044.png", - "tags": ["social-token", "ape", "NFT", "play-2-earn", "P2E"], - "extensions": { - "twitter": "https://twitter.com/CyberApeAge" - } - }, - { - "chainId": 101, - "address": "C57GUQaD4qJcUpQJWJuzz9zQ8ySQuEsfuksFhV2xyhxq", - "symbol": "RZC", - "name": "RZCoin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/rz1989s/RZCoin/main/Assets/Logo/Logo.png", - "extensions": { - "discord": "https://discord.gg/zs4W37BUSt", - "twitter": "https://twitter.com/rhezasulaiman" - } - }, - { - "chainId": 101, - "address": "AVg5MNyVb3CgGx43vHk28zDPBdeasJc1LrrbwDeGjGa5", - "symbol": "JOCO", - "name": "JohnCOIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/john5071/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9aApttjwJAter9qh9NpNuaADfZRaUbtjGixRTN3zaiiQ", - "symbol": "BIO", - "name": "Biohazard", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/BiohazzardXIII/crypto/main/BioCoinLogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3XqdvAtmfBoJW7QSncwxpDeUnf4Uw9SykKeJoTQY3cwP", - "symbol": "SOZC", - "name": "SozioCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ImJstNickDev/SozioCoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FfCyBkXo1VwkJw9xvjcQo521nBC4d5QTVt9juS25oqXu", - "symbol": "T10NAT", - "name": "T10NAT Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/n0rwegianblue/t10natcoin/main/t10nat-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BygDd5LURoqztD3xETc99WCxLUbTi6WYSht9XiBgZ4HW", - "symbol": "WMP", - "name": "Whalemap", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/ssi91/crypto/main/logo.svg", - "tags": ["social-token"], - "extensions": { - "coingeckoId": "whalemap", - "website": "https://whalemap.io/" - } - }, - { - "chainId": 101, - "address": "4q1aDEgMtYmASAN4F3MHycAbqQhLZUBztXVyDqXiiXF5", - "symbol": "HMLC", - "name": "HEMEL Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/cristhiank/hemelcoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5ZXZEPxpC35nBxEiVhs257HMNeTd3htYk7FUvBsYFfcr", - "symbol": "Armen", - "name": "Armenia", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/hamesdhacker/Tram/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3xzVH324eKe9XGyo2L72zyWbZiqA2kMu4NnFe26PhQCb", - "symbol": "NFTX", - "name": "NFT Universal Exchangable", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/mixartemev/token-list/main/assets/mainnet/3xzVH324eKe9XGyo2L72zyWbZiqA2kMu4NnFe26PhQCb/logo.png", - "tags": ["utility-token", "NFT"], - "extensions": { - "telegram": "https://t.me/u_nft" - } - }, - { - "chainId": 101, - "address": "6Wt3E23jMiDfZJursDfitbCGK9SsRdVAKMMMz29Z5p54", - "symbol": "FXWX", - "name": "Fixiwixi Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/unicornsteak/fixiwixi-coin/main/fixi_wixi-coin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "98Q6u9iTu6x3kzT4feCZo8sRHNWKaHcTodgWNjTo27uF", - "symbol": "VRXC", - "name": "Vroxcoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/LukasVrox/PBcrypto/main/Vroxcoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AzqYUWKG5kqXgNwCvnuKdF8nRNBsJvbLK6NpTzWJtxHr", - "symbol": "YODA", - "name": "YodaMaster", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/kurtchan828/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BVPT9GdcY6mxfQQFG8yKK7XtawC9HcioUJKNFgVguKgf", - "symbol": "KTM", - "name": "Kristapaas_lv Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MordoTheHacker/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "93hB3wZSaz2h25hhUA9wDovVgaDLXKx8aR7hECahkMSp", - "symbol": "SDOR", - "name": "SDORCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/shaneorourke/crypto_token/main/SDOR.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AhQD9vmYfPwoDRsMdBwcRK1Zv7x1C5EntQKWMmuUwbSY", - "symbol": "PBC", - "name": "PandaBearCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ShayanBanerjee/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "78jgechALV3SaJaSzyKNPFDMUS9A9CXY1K3Vub6Badjy", - "symbol": "CHKY", - "name": "Chomsky Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/rickyspanish6/crypto-chomsky/main/logo.png", - "tags": ["bruh"] - }, - { - "chainId": 101, - "address": "BDrL8huis6S5tpmozaAaT5zhE5A7ZBAB2jMMvpKEeF8A", - "symbol": "NOVA", - "name": "NOVA FINANCE", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BDrL8huis6S5tpmozaAaT5zhE5A7ZBAB2jMMvpKEeF8A/logo.svg", - "extensions": { - "twitter": "https://twitter.com/NovaFinance_" - } - }, - { - "chainId": 101, - "address": "9MefqocoPxZStLAYKPXSFVG11GNGnCy2LSHNQ2EyRjAw", - "symbol": "TIKH", - "name": "Tikhedewal Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Sanketikaran/TikhedewalCrypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4wPXWiJxKhaVHCe1WKcjDe8DvZS1WBe2QEPv2tih1aaC", - "symbol": "BLC", - "name": "BitLite Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Danieljr1995/crypto/main/bitlitelogo.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "website": "https://bitlite.live" - } - }, - { - "chainId": 101, - "address": "4psTdyTHQHDuvRdSR4UNgBd8QbcM7G3r1uiwhfNR6vfa", - "symbol": "RWL", - "name": "RAW LIGHT", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4psTdyTHQHDuvRdSR4UNgBd8QbcM7G3r1uiwhfNR6vfa/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4AWPuaGUTqdyyV9T25RVZSEU2i9vyPw7YaNW5U64PmwR", - "symbol": "BWGN", - "name": "Blumenwagen", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Blumenwagen/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HsueFrZbKRE7iFpML5PGisHj5BmsCuf5dYXYvpu8oXe3", - "symbol": "ISBT", - "name": "Interstellar Banking Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/SecuritySkunk/cryptotoken/main/logo.png", - "tags": ["game-coin"], - "extensions": { - "discord": "https://discord.gg/WhefX8qf" - } - }, - { - "chainId": 101, - "address": "APuSEj1Skt97HnNA5HV4XKxZrTUJuHkqAyusq5TEDd7F", - "symbol": "INC", - "name": "Infina", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/APuSEj1Skt97HnNA5HV4XKxZrTUJuHkqAyusq5TEDd7F/logo.png", - "tags": ["utility-token", "meta-verse"] - }, - { - "chainId": 101, - "address": "7nvesyC4rCjxisG8jmZA3CXGD3oR94xGP7B3HguZUVk4", - "symbol": "AZ", - "name": "Alekss Zeltins", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/AlekssZeltins/SolanaToken/main/smile-teeth-smile-oxxxymiron-wallpaper-preview.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BxCySPxFsR1zryF2ub7ouSXUGn952SB2mQ8dz45qvjtx", - "symbol": "DEXC", - "name": "Dex Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/kmoerkens/crypto_dex/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BgnfsEaGq3wKrGDE4SWcWPjyf1BAmupNBtgCU7NjuGXU", - "symbol": "XMAS", - "name": "Merry-X", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/robinsafari/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8RY64EeefQT83yAsMsy4hXGWJDLHL16Sy8FHCBG4sTLL", - "symbol": "DBRY", - "name": "DebroyCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/rkdebroy/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "F5GuftC65xBqV3rbKN7xgJfZM8Xgma99E58gtgrrrDpR", - "symbol": "USD", - "name": "TETHER USD", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/Smaler1/coin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "H1dMaosS57MArEM6Z9aPqGgrbMwCUZuJuc6VzPMWH8bm", - "symbol": "YAK", - "name": "YAKSA token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/H1dMaosS57MArEM6Z9aPqGgrbMwCUZuJuc6VzPMWH8bm/logo.png", - "tags": ["social-token", "utility-token"], - "extensions": { - "website": "https://www.yaksa.io/" - } - }, - { - "chainId": 101, - "address": "H6U5jkquLLK5u8FNVn4bTnmscSGm9fRNCGNe5xFBLDiM", - "symbol": "Do", - "name": "Do", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/dodo124/crypto/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6ZdDMWym4VpY63PwsupC4AR5PrgbY2Xs5Et3RGf45LLv", - "symbol": "WHOOP", - "name": "Juggalo-Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Vio13ntJ/Logo/main/Logo1_50.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FatneQg39zhrG6XdwYb8fzM4VgybpgqjisJYESSBD7FV", - "symbol": "MKD", - "name": "Musk Doge", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FatneQg39zhrG6XdwYb8fzM4VgybpgqjisJYESSBD7FV/logo.png", - "tags": ["utility-token", "meme"], - "extensions": { - "discord": "https://discord.io/muskdoge_sol", - "telegram": "https://t.me/muskdoge_sol", - "twitter": "https://twitter.com/muskdoge_sol", - "website": "https://musk-doge.net" - } - }, - { - "chainId": 101, - "address": "9VQvshdNty8c69UQYCZDF8m96YZiJGGTVrNXDGfgKJeZ", - "symbol": "TKNR", - "name": "Tokenara", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/gregbanna/token/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ETre2G9u2dBj4QDAiVikx8Dt3QRcVh2k6GcqLB34zTKp", - "symbol": "LZR", - "name": "LZR", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ej78/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4WxMSTxij4uZVjz5rYhJS8wUUwNHYJxTAXCQjZLSqcmi", - "symbol": "CoTo", - "name": "CoupleToken", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Agent-3301/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3WLQr6NL9zh6DjraaoPnsqdwxakNgBKxSvNewkoGhmsZ", - "symbol": "FTH", - "name": "My Father", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/rahitash/fthtoken/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "71SN1BdtEKPcfMFmC8xkv75RsdwNB1XsuWTp7ugGALsb", - "symbol": "DRYZ", - "name": "DryzzleKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/danyou/crypto/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8z4ghJPp3ccvEtuXZbceGRfoX7AZHhcdwiapYzmsxmyC", - "symbol": "TIGER", - "name": "TIGER COIN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8z4ghJPp3ccvEtuXZbceGRfoX7AZHhcdwiapYzmsxmyC/logo.png", - "tags": ["TIGER", "Community-token", "MEME"], - "extensions": { - "coingeckoId": "tiger-coin", - "twitter": "https://twitter.com/tigercoin_", - "website": "https://www.tigercoin.space" - } - }, - { - "chainId": 101, - "address": "CvgBPD8H2P26GodbuxMryFppQdhqR7tuBGWjCWdhJssK", - "symbol": "YODA", - "name": "Baby Yoda", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CvgBPD8H2P26GodbuxMryFppQdhqR7tuBGWjCWdhJssK/logo.png", - "tags": ["YODA", "Community-token", "MEME"], - "extensions": { - "twitter": "https://twitter.com/babyyoda_token", - "website": "https://www.babyoda.info" - } - }, - { - "chainId": 101, - "address": "C56RByoj5dmr7QToNNZXnJrPTSPQGbfJp29Nyrsjs9SE", - "symbol": "AYA", - "name": "AYACOIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/torsteinknutson/crypto_sol/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ATK7foBcmr5HNRNwPkDtQtesTtvbivE6f8J2MWoH1AbW", - "symbol": "PFC", - "name": "Pflufdl Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/FDHoho007/token-list/main/assets/mainnet/ATK7foBcmr5HNRNwPkDtQtesTtvbivE6f8J2MWoH1AbW/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Ckz7u6p9L5DD1Qf162ChMoCNfJKphEBnMYdc8jmxxWG5", - "symbol": "RSK", - "name": "RosikoCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Rosiko/Coin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FV4NP8tweRyzwd5mo9V77ykV9jc9QthFs78Dan5C2Nf7", - "symbol": "EMPRESS", - "name": "Empress Coin", - "decimals": 0, - "logoURI": "https://github.com/salaamst/crypto/blob/main/empresslast2.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8QzztHPYxAfV6rirUDrjMQCjfg8a2bi7VM3z25HNGEm1", - "symbol": "KINS", - "name": "Kinson", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mauriceatkinson/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2C6QKsbUe8d8NdSpVGh2QNDrEWZjatwqALZJyHCf9e2D", - "symbol": "HVN", - "name": "Hovno", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/filip-a-a-a/crypto/main/hovno.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6F2xFQE5weEKZQsfNva1hXVYRVfo8d2NGbeAZYm1fNax", - "symbol": "MLEM", - "name": "MLEM Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/xatarox/MLEM/main/MLEM.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2sAfB9CDBGFdmvQRB4DAAv8shu2JS5rXoC6bUMezyJjZ", - "symbol": "Shipu", - "name": "SHIBA PURE", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2sAfB9CDBGFdmvQRB4DAAv8shu2JS5rXoC6bUMezyJjZ/logo.png", - "tags": ["meme-token"], - "extensions": { - "discord": "https://discord.io/Shibapuretoken", - "twitter": "https://twitter.com/Shibapuretoken" - } - }, - { - "chainId": 101, - "address": "EevgM1mYtXmYUDt6JauTQi9fuj5RvGJp2QY6WuMssgj8", - "symbol": "NSX", - "name": "Naseriax", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/naseriax/token-repo/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DEpEgwSmk5EwaezB7tFaGFGtKkj1BoMn4PDV6HS572EZ", - "symbol": "IWMO", - "name": "I Want My Own", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/iwmo/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "G1ypuiZV7zJ6yi95B7YyVjsj91qS6hG9DRTNpchCXKQJ", - "symbol": "GGD", - "name": "GodGold", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/birlan/ggd/main/logo1.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "77SBw7BV35pQTrqCbrHz9UGswhWu7ZYBPYECuJU9JE5B", - "symbol": "F", - "name": "MR F", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ARO-coder/logo/main/2021-11-21_13-54-41_UTC_profile_pic.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DF5duTamJpaiL4Mg2xrgskqxq7PKZ5arMtKExsCLCzdP", - "symbol": "HCk", - "name": "Herculi Koin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ManojGurungPi/herculi-crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "58nQHy4ACJksBm5FfprDrPAR5bu1Rkgm4bwCPs2H2pQp", - "symbol": "Synapse", - "name": "Synapse", - "decimals": 9, - "logoURI": "https://arweave.net/h5NOMoLgFKGBZGOkipic6XFRBdCi7PKWLf5qtm-urzg?ext=png", - "extensions": { - "twitter": "https://twitter.com/plsandtybased" - } - }, - { - "chainId": 101, - "address": "39M2HJPA7jcbtv8vspMtgFhddUsqGje5s8YPG52zCtAR", - "symbol": "NONE", - "name": "NoneToken", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/N0ne0/CryptoToken/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FCWm6BzKMmFUzgPcrdPJNQbm5LqTkgfCNnyMimq8xHJ4", - "symbol": "BNAN", - "name": "BNAN Token", - "decimals": 9, - "logoURI": "https://gateway.pinata.cloud/ipfs/QmUxtp9gwPuUeGTA9fLGWLpJoEhCuWouxKeWnVP1cPmEsP", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/apefoodnft", - "website": "https://apefood.club" - } - }, - { - "chainId": 101, - "address": "BiC36dQPvucFf3Xa7mEPxLGU63Xq7CJ7UBko5HaYEj7B", - "symbol": "DOINT", - "name": "Dwayne Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/TheDankness/crimpto/main/doint.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8Qc1ZtQeR46aq6CEcf16XngA4dASqNHMrejfkmZPXy9z", - "symbol": "WSGS", - "name": "GameStonk", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8Qc1ZtQeR46aq6CEcf16XngA4dASqNHMrejfkmZPXy9z/logo.png", - "tags": ["GameStonk", "WallStreet", "WSGS"], - "extensions": { - "twitter": "https://twitter.com/gamestonksol", - "website": "https://www.gamestonk.fun" - } - }, - { - "chainId": 101, - "address": "8bQzEZJ3EkkYe7m9z12ewYVsMPBaxEVwPe4UnXRQUizi", - "symbol": "FWB", - "name": "FriendsWithBenefits", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8bQzEZJ3EkkYe7m9z12ewYVsMPBaxEVwPe4UnXRQUizi/logo.png", - "tags": ["FWB", "Dating", "MobileApp"], - "extensions": { - "twitter": "https://twitter.com/fwbtoken", - "website": "https://www.fwb.mobi" - } - }, - { - "chainId": 101, - "address": "7SyL8WHkAhGqciL9qrLMRYrsBpiFCF9LEfCwvTWhqNRQ", - "symbol": "LXC", - "name": "LatroX Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MrLatroX/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5Eth7YxeKCKEke37RQvXwBukr1HS6LpJV5Tu99m8Xq7M", - "symbol": "WJF", - "name": "We're Just Friends", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5Eth7YxeKCKEke37RQvXwBukr1HS6LpJV5Tu99m8Xq7M/logo.png", - "tags": ["MEME", "Friends", "community"], - "extensions": { - "twitter": "https://twitter.com/werejustfriend_", - "website": "https://www.werejustfriends.space" - } - }, - { - "chainId": 101, - "address": "7HGJwFyKC5wPLZ9ctgVSgjBARJ4dZrGCjMRQmzWwe277", - "symbol": "Synapses", - "name": "Synapses", - "decimals": 9, - "logoURI": "https://arweave.net/h5NOMoLgFKGBZGOkipic6XFRBdCi7PKWLf5qtm-urzg?ext=png", - "extensions": { - "twitter": "https://twitter.com/plsandtybased" - } - }, - { - "chainId": 103, - "address": "8M6x4qnPPjrevm81h65fE2bQMNYU58NnTUi1BZQh1xUb", - "symbol": "WIZZ", - "name": "WizZ Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8bQzEZJ3EkkYe7m9z12ewYVsMPBaxEVwPe4UnXRQUizi/logo.png", - "tags": ["social-token", "wizzcoin"] - }, - { - "chainId": 101, - "address": "AgnTcc2aWssiFxXDXW78QdS8GkPkYL9LzULxD7bMZ2Rg", - "symbol": "SUS", - "name": "SusCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/matteopassaro/crypto/main/sus.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FCovHdKLr4gzYkE5mVusbv3VvtCoB9AkQve8LsWX4rC8", - "symbol": "KET", - "name": "KE Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/francomalatacca/ke/development/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6jdXya2Bsh4aa1vvT6vYPMRw9MWUJRca5Yy4B7CZXbmB", - "symbol": "Medusa", - "name": "ProjectMedusa", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/Qalander/medusatoken/main/Crypto_red.png", - "tags": ["NFT-token", "Game"], - "extensions": { - "discord": "https://discord.com/invite/8Trp4b6W7S", - "telegram": "https://t.me/project_medusa_NFT", - "twitter": "https://twitter.com/medusa_token", - "website": "https://www.projectmedusa.art/" - } - }, - { - "chainId": 101, - "address": "4o5FbTaPJXbyvso6puKuhM1JARuyK19G67amaGrrPt8c", - "symbol": "CAMM", - "name": "Camm Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/neilcamm/cc/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "356xypTDqfngosF1tf5gtK2mSBAsK8stMqNefHcqSBqX", - "symbol": "FLOOC", - "name": "Floofy Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/dbotero1979/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FBoxdQdkHBMFosU6qwz247FDVdorbvRruUUhkc7Xoyc6", - "symbol": "ENNE", - "name": "ENNE Token", - "decimals": 18, - "logoURI": "https://raw.githubusercontent.com/ENNETOKEN/ENNE/main/ENNE%20TOKEN.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ESW2pUBXadPr1GmWmhoumpyBgGpHfYKQVVxqMPrwtqQ1", - "symbol": "FSLT", - "name": "Falling Star Labs Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/JoseOlivarez/FSLT/main/chip.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5JvWhg6s9wLqeEwQydi3QhXF9x2WxywCTTR8n6MiJus3", - "symbol": "STE", - "name": "Ernst Stelter Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/PeerStudios/crypto/main/ste.png", - "tags": ["social-token", "community-token"], - "extensions": { - "website": "https://peerstudios.net/" - } - }, - { - "chainId": 101, - "address": "3SVXFzve2s5idL8BHp1LD1L2d6zaAv4s6g7ESx5Fwfpr", - "symbol": "MARIER", - "name": "Marier Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jonshadow12/twelvecrypto/main/12logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8jdeZHreUVmAxmdyS5bAvvW5XvJG9XBDiUAiuHGhMMVh", - "symbol": "THRIVE", - "name": "Thrive Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/axw4319/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EbzUDLcqe5BrqmSjFhQ9yEo5hfeAZrkf8sjbq2MRn5kC", - "symbol": "HAWT", - "name": "TrippyFox", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EbzUDLcqe5BrqmSjFhQ9yEo5hfeAZrkf8sjbq2MRn5kC/logo.png" - }, - { - "chainId": 101, - "address": "Gn8qnQQ12sqCCxWb49DKYZgkryDCByBg6R9oREaJaami", - "symbol": "DAYZ", - "name": "Dayz-HK Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/dayz-hk/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Fe43isUjdq96t8Bh1o6UQPU1yKufjGZ3VLwWaH31wRxy", - "symbol": "SUGBABY", - "name": "Sugar-Baby Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Tmindz/crypto1logo/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3GKYR5DG7yzz9L6n2zeK8pXDAp75wcM77P1ikBpde4hD", - "symbol": "PRBL", - "name": "Problem Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/problem-token/problem-token/main/logo.png", - "tags": ["social-token", "community-token"], - "extensions": { - "instagram": "https://www.instagram.com/problem_token/", - "twitter": "https://twitter.com/ProblemToken", - "youtube": "https://www.youtube.com/channel/UC24s-Cdqu-xBKiaxSnhmNnA" - } - }, - { - "chainId": 101, - "address": "Eb9jRXpnYSXeJKudmd4qu1DhdryZQ1cRvWUbEGcKrYA8", - "symbol": "HGLD", - "name": "Heroes Gold", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ebmitcham/cryptologo/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2AufhXLgWXmVjvYZw8jB2Sy4GmquysoSRLUhgVnWQyKm", - "symbol": "SLFA", - "name": "Sulefa Token", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/masterJedi21/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "USRhHFaeV36fsff6J9RRC3nNhuE3o5zvNUwbzYw9S3d", - "symbol": "MYC", - "name": "MinYanCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/dams-rally/Crypto/main/icon.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9VSTThdFzN53eUqMdz5EmfXPjmTf2LHE3aSdX8DqpkyQ", - "symbol": "ASI", - "name": "ASICOIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/NikX23/Crypt/main/ac.PNG", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7hbS1Duxm5CiVaLGZkFaqMZGcrZka5p2zX5ruYxqQgvP", - "symbol": "DOHA", - "name": "Beautiful DOHA", - "decimals": 0, - "logoURI": "https://github.com/samurtuza1/DOHA/blob/main/Doha.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "C523e6ZU4WTjpTmUC82FuPegFTdeYiR9Tv5ZhBAgtMEV", - "symbol": "NSVD", - "name": "Nicksylvanian Dollar", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/nickgabbard/solanacryptotokenlogo/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Gq5iXNG4vLi4iNMDLSmcJ13uxPf6V9bUzQ2QP7CFvzZs", - "symbol": "BODC", - "name": "Bank of Dad Coin", - "decimals": 4, - "logoURI": "https://github.com/newdr003/cryptostuff/blob/main/assets/images_200x200/75e2cfc3473b40bb8b7bfebb59069f5a.png?raw=true", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HnQnC3jyZdCYiTKdswLaQMitC84o3yWfYP5G1BtkHJmw", - "symbol": "NEX", - "name": "NEXTOKEN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/One-Hundred-and-Eight/sol_tokens/main/nex/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EcmKxi48X14Vrb9DHQRWRUAqYTBQLcC6eiZ4soPB3yPJ", - "symbol": "CHILL", - "name": "Just Chillin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Prime3vil/Just-Chillin-token-Solana-/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FzcmRR3wfGXLAcTkKkocmnQLjZKSScb3QhCB8jbUfj9D", - "symbol": "AHDT", - "name": "AHollaDolla Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/LaptopHeaven/aholladolla/main/ahd_logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6vW99phJaQVbvQVUviJT3hm8jumanQSTtFo1iht9AevD", - "symbol": "ET", - "name": "ello_Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/F12364/et/main/ello_token.png", - "tags": ["social-token", "hope", "F12364"] - }, - { - "chainId": 101, - "address": "BjdhCgJcdvvprhY3pQfJgsLfKJCyPFAW6Mt1gB8hExGH", - "symbol": "TALON", - "name": "Sendai Tokens", - "decimals": 6, - "logoURI": "https://toc24s2sbu3nkr65vejwjh2bmer3x3vo4xbhzcacaxr55ant3o2q.arweave.net/m4WuS1INNtVH3akTZJ9BYSO77q7lwnyIAgXj3oGz27U/?ext=png", - "tags": ["utility-token", "community-token"], - "extensions": { - "discord": "https://discord.com/invite/BwvMzPgHpC", - "twitter": "https://twitter.com/SendaiDojo" - } - }, - { - "chainId": 101, - "address": "E5x8hsbRVHvQXE8DcDZJhNzAttvTsymrFeb4CnkmCLLN", - "symbol": "SOYO", - "name": "SOL OYO", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/E5x8hsbRVHvQXE8DcDZJhNzAttvTsymrFeb4CnkmCLLN/soyo.png", - "tags": ["general-token"] - }, - { - "chainId": 101, - "address": "C8vpyWwYzQtAJH6otFkmZm94ydDCo19eGKXvmbXKAFop", - "symbol": "L8S", - "name": "OchosCoin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/agrestic1/OchosCoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EHG9u6AYczWsd6NquX9AwrEZg7zt5mq6VmhHWcDDkyo6", - "symbol": "DKNT", - "name": "Just Darknet", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Prime3vil/Just-Darknet-Token-Solana/main/logo.png", - "tags": ["general-token"] - }, - { - "chainId": 101, - "address": "2aFsiuarZZPLPCYSwETvhZhwb6us7QxmB99RWc2qTCY6", - "symbol": "LRN", - "name": "Lauren Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/LukeNash1/crypto/main/LaurenCoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8PMGVDRYyUzP9ZzC93BQuiETpsRHjVuVuhBkdsJSLrUb", - "symbol": "PORZ", - "name": "Porzios", - "decimals": 0, - "logoURI": "https://github.com/aporzio1/crypto/raw/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AhQJREpdHHpEaBbN6aMw9dZVHaLytCYkCVRZrZuz6tG5", - "symbol": "TAMAL", - "name": "tamalerhino Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AhQJREpdHHpEaBbN6aMw9dZVHaLytCYkCVRZrZuz6tG5/logo.png", - "tags": ["social-token"], - "extensions": { - "twitter": "https://twitter.com/tamalerhino" - } - }, - { - "chainId": 101, - "address": "Hdi94P9m8m6xn4fgQenSqsLg8MAVKumCXrcgzrXqJDvC", - "symbol": "LABR", - "name": "LabRcoin", - "decimals": 0, - "logoURI": "https://github.com/jtomacic/crypto/blob/main/Lab_R-Gold-Coin-Transparent.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "83LEryaa7MGudKvJNg9UrCrxgCFYVEGu8MzUaSnuDwWF", - "symbol": "SHIMA", - "name": "RinCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/bakonpancakz/bakonpancakz/main/crypto/RinCoinLogo.png", - "tags": ["social-token"], - "extensions": { - "description": "Best Coin For Best Girl", - "twitter": "https://twitter.com/bakonpancakz" - } - }, - { - "chainId": 101, - "address": "5SDM99Fp6J3suyLtEFEHPP5hexD7YnEDPeFrvZsMZUWv", - "symbol": "PGCN", - "name": "PigCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/pigc0in/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2Bx7uVFteBDd9jHTadUpaESoUaGjPCTWU61AyVmiG47K", - "symbol": "JUJU", - "name": "JujuCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/DavidJKTofan/juju-crypto-token/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "34XTx66PbbvzpHhVqB5LdoLUY8Vo4KaZSeni5QKUa1C3", - "symbol": "PIXEL", - "name": "Pixel", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/34XTx66PbbvzpHhVqB5LdoLUY8Vo4KaZSeni5QKUa1C3/logo.png", - "tags": ["Community-token"] - }, - { - "chainId": 101, - "address": "BTkgSHMNvAZJsZ42fF38jMk6GhM55shF7PmD59YoDoQh", - "symbol": "KMJ", - "name": "Illuminati", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/KhalilJouaneh/SOL_token/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EtWJZTza5FAv1wsiRVQniozZvsVPB2C4wAbjYK9GJ2kf", - "symbol": "KATM", - "name": "Kat Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/DocWoodward/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "E5ZGMWzA5KeSiVaPMbzfY9nELk2n9A5mPnitwnmUiwR7", - "symbol": "BLESS", - "name": "Blessings Always Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/securestrat/sol/main/logo.png", - "tags": ["social-token"], - "extensions": { - "twitter": "https://twitter.com/tamalerhino" - } - }, - { - "chainId": 101, - "address": "2yFHpcY6wRMHoAAFF2rZV7Lo25dTWe5E8wQ64Y4Ux3mk", - "symbol": "SIDI", - "name": "SIDI Network Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SIDI-github/SIDI-Network-Token/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8kqTT8pcz6cQefzDmmT6MYVcZkvjUB7Yi4fb8ubRtyoh", - "symbol": "DOTS", - "name": "BLUEDOTS", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/gratsal/cryptobluedots/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CPTzy56dVrMFk9T5BxcdAV2yXpyyXbdVwELiZsU6DGoW", - "symbol": "DTS", - "name": "YWAM DTS COIn", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/judeallanhill/crypto/main/unnamed%20(1).jpeg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CZ9tL5UxpSftJMhBXys6vydWb9dZRxoNYF6uvumZWkS", - "symbol": "HYPE", - "name": "Hyperium", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CZ9tL5UxpSftJMhBXys6vydWb9dZRxoNYF6uvumZWkS/logo.png", - "tags": ["utility-token", "game-token", "GameFi"], - "extensions": { - "twitter": "https://twitter.com/frontiergame_io" - } - }, - { - "chainId": 101, - "address": "4FeZKwQ3kHK2JuSZ4QefmwE43j5NRL2zLFGxxLaC1d7J", - "symbol": "PCLR", - "name": "Pancholares", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/cid8/pancholares/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BWcdAQSQZq2BW8jTP9QcTCieXpBddJEXTkZQVL4w7CWM", - "symbol": "HAZ", - "name": "Haris Pervaiz", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/harispervaiz/crypto-token/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GezveZeQUvgqc2jY23weRgKwp1KMfawUx3587e6nGRSQ", - "symbol": "FPGA", - "name": "FPGALover", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Adrizcorp/SolFPGA/main/fpgaloverToken.png", - "tags": ["nft-token", "social-token"], - "extensions": { - "website": "https://fpgalover.com" - } - }, - { - "chainId": 101, - "address": "HwvtHUqURttL79ryyPsCVgScLq9Yxm3VAZNrtE8w5fcF", - "symbol": "JCCC", - "name": "Christian Crypto Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/thebibleunlocked/crypto/main/cryptologo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Hk5yuhhgcuQMSCHuiciDRfk1Y39f1wR1dLAvMxC5Q69p", - "symbol": "HANFU", - "name": "Hanfu", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/semmars/hanfucryto/main/logo6.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4Yeb5am94p8qQBWJzWE5qafoSXUnEUCxAA9RSLYvQ1Ck", - "symbol": "KIRB", - "name": "KirbKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/obaker78/crypto/main/HarrisonKirby.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CC1S3Rxzxt9x4FMyXZ4KbULhuWfhEm6r36H9Cp96pCDB", - "symbol": "PHOTO", - "name": "PhotoCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/the-last-minute/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2rzAPePfebVPGCMnikyh2xvFXK2JFdLe9PqTywo8Aabn", - "symbol": "TYBR", - "name": "Tiny Bear Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/inventiveraptor/crypto/main/tiny_bear.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AXRAgXYUgNai7FPY9RfgWa71UPtEPZP2kjBwH9KhGKBH", - "symbol": "EMGT", - "name": "Emerge Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/EmergeToken/emerge-token/main/logo.png", - "tags": ["utility-token", "emerge-token"] - }, - { - "chainId": 101, - "address": "FHF1TDmPGKTLUi6mjrT7NDMrFXs4SCVvB7QWn3yswdao", - "symbol": "ANAK", - "name": "Anakoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/christianhjohnson/Anakoin/main/Anakoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FAigNii6yJEraz5LX9JQ9NUieUnk3ucY1eHKjXBGmd4d", - "symbol": "CHKRA", - "name": "CHKRA", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FAigNii6yJEraz5LX9JQ9NUieUnk3ucY1eHKjXBGmd4d/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/SoulKombat", - "website": "https://soulkombat.com" - } - }, - { - "chainId": 101, - "address": "AamY54CmEp9CFLKCxy97x2zxhFvqSFbQuZRhLz1mbSjm", - "symbol": "RENNT", - "name": "RENT", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/genties/rennt/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CLswAbXK6GKeLLZX6PXGGuqt8EyifLFC2j5iEgL3BySt", - "symbol": "Cloudz", - "name": "Cloudz Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CLswAbXK6GKeLLZX6PXGGuqt8EyifLFC2j5iEgL3BySt/logo.png", - "extensions": { - "discord": "https://discord.gg/solcloudz", - "twitter": "https://twitter.com/SolCloudz", - "website": "https://www.solcloudz.com" - } - }, - { - "chainId": 101, - "address": "3QE2K4QSHo1Y3rjjuAf9VEhCJxKRdpePD5jLP3NwKMmF", - "symbol": "$DOPE", - "name": "HellaDope", - "decimals": 18, - "logoURI": "https://raw.githubusercontent.com/Texaglo/helladope/main/logo.jpg", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "7bEkdbEXe1tb9tHjMGk5p8Tzm4AuHpMLpptxALTdrGC3", - "symbol": "EMMR", - "name": "Emmer Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/kjzamora/Emmer_Crypto_Logo/main/Crypto_Token_Logo_500x500.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3F6ujkso1NQtvpCDKocpNg8oynPW9TXawkPg5zQcyuAi", - "symbol": "FNKL", - "name": "Funkle", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Zumux/funkle-coin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CjpaJLNdGt4wmcPAT9GKBRVmGb6Q1TtdeJYmahmmrXSL", - "symbol": "BAY", - "name": "BayCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/UnlimitedKnowledge/BayCoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "C7MnWhwB4JyA21bo6wnomQA5jJtd31WoaiCSKbVTHq5n", - "symbol": "$PDSGT", - "name": "-PDS- Golden Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/C7MnWhwB4JyA21bo6wnomQA5jJtd31WoaiCSKbVTHq5n/PDS_TOKEN.png", - "tags": ["Pirates", "Metaverse", "NFT", "Community-Token"], - "extensions": { - "discord": "https://discord.com/invite/qVxYyZwCKS", - "instagram": "https://www.instagram.com/piratesdelsol", - "twitter": "https://twitter.com/PiratesDelSol", - "website": "https://piratesdelsol.com" - } - }, - { - "chainId": 101, - "address": "2txmAT8zzyfU2BSur95UNq8UWvYrb3e38VVZPoi4fmk9", - "symbol": "POLO", - "name": "Polo Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/poloW-NA/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CBKFn5xH2y5b4jEdtUUW8rYJkuYoKEfGzSoQR2GYKP5V", - "symbol": "SHAKEL", - "name": "SHAKEL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/shanginn/shakel/master/logo.png", - "tags": [ - "social-token", - "utility-token", - "community-token", - "meme-token" - ], - "extensions": { - "twitter": "https://twitter.com/shanginn", - "website": "https://shanginn.ru/shakel" - } - }, - { - "chainId": 101, - "address": "BDHAyGwpxaVJ8eDZMHRZMGnu3evRh7XvWj8BaPYCY4QZ", - "symbol": "BRO", - "name": "Bro Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/BroBoi78/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FLWRna1gxehQ9pSyZMzxfp4UhewvLPwuKfdUTgdZuMBY", - "symbol": "FLWR", - "name": "Flower Token", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/Neurologist/brains-token/main/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.com/invite/solflowersnft", - "twitter": "https://twitter.com/solflowers_io", - "website": "https://solflowers.io" - } - }, - { - "chainId": 101, - "address": "8JChbLTDbu9KwNsdyMKZtiYH4Q5hsXntYXrRgpELEgk3", - "symbol": "UNCN", - "name": "Unicoin", - "decimals": 9, - "logoURI": "https://github.com/newdr003/cryptostuff/blob/main/assets/images_200x200/unicoin.png?raw=true", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FG9B9uNWVAhEvAroY7A85QdcoWUsJkKUCm6kkUrcJSVe", - "symbol": "SSC", - "name": "SusoCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ShayanBanerjee/crypto/main/suso.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "F7Up1Gpmf9DfNkDSc7oxgDTH74e5Hic9XeW6nQDR8ggH", - "symbol": "DRAW", - "name": "ReDrawCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/djaydraw/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BKcFbs39yCN49E8DL7PGZLoNSDgxbWZgvLBmM8LSP4eX", - "symbol": "SHCC", - "name": "COMET COIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/STIGGY97/cryp/main/logo.png.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EonLDmjQShcfaZqrjpr68cWEKLUiGDe9LkGSwny5FgM5", - "symbol": "DNIX", - "name": "DOJO Nix", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Adrizcorp/dojonix/main/Dojo.png", - "tags": ["NFT", "Health", "Social", "Community-Token"], - "extensions": { - "instagram": "https://www.instagram.com/kianayazdani_", - "twitter": "https://twitter.com/KianaYazdani", - "website": "https://kianayazdani.com" - } - }, - { - "chainId": 101, - "address": "CfEx76J76ojTeqCq92xETrn8xQRpVHnHCRbyVXd8iC9Y", - "symbol": "SKIB", - "name": "Skibba", - "decimals": 0, - "logoURI": "https://github.com/SkibbaToken/SkibbaToken/blob/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5nDSZD14xD73X5PybvVwD9mZEZTywntCuwRH25xJJ4RL", - "symbol": "IATK", - "name": "IA Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/imananimator/IATK/main/logo.png", - "tags": ["social-token", "community-token"], - "extensions": { - "instagram": "https://www.instagram.com/urbsclimber/" - } - }, - { - "chainId": 101, - "address": "HNapoupAmeAMbWQdQQb879NxLj8qyZa3XLjXapjju2oq", - "symbol": "MDONA", - "name": "Mercadona Coin", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/Swanterra/proj1/main/Mdona1.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3BQCm29nq5TincBd3bGrJGu5GJxyxoi43fMUsKfdmBTX", - "symbol": "SHARKI", - "name": "Sharki Inu", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3BQCm29nq5TincBd3bGrJGu5GJxyxoi43fMUsKfdmBTX/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3nWNZqiTaKj1gkfuUdMeHY46CXwpqKHkEFBKzXtD3t77", - "symbol": "URK", - "name": "Urken Galleon", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ebsmartin/Crypto_token_logo/main/logo.png?token=AQAF6VXMKXFD7RD65OYQRJLBYLKVS", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8QgqUFu3JShwHEQyM8P4eBciziaPSfVMGcbh2yfzAFzA", - "symbol": "DANTE", - "name": "DanteDollar", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/bakonpancakz/bakonpancakz/main/crypto/DanteDollarLogo.png", - "tags": ["social-token"], - "extensions": { - "twitter": "https://twitter.com/bakonpancakz", - "youtube": "https://www.youtube.com/channel/UCN02ZFUIb1qzpAgZPHqJaBw" - } - }, - { - "chainId": 101, - "address": "6xsn4erobfxuYSfoTKKNUS342uprdot5aiD6mGPZH5X6", - "symbol": "MONIKA", - "name": "MonikaCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/bakonpancakz/bakonpancakz/main/crypto/MonikaCoinLogo.png", - "tags": ["social-token"], - "extensions": { - "description": "Only Monika", - "twitter": "https://twitter.com/bakonpancakz" - } - }, - { - "chainId": 101, - "address": "3npEGBS1b52sSAMkWXo9eWraN9VBqqPjgWcJJRWoDxhi", - "symbol": "MAI", - "name": "MaiCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/bakonpancakz/bakonpancakz/main/crypto/MaiCoinLogo.png", - "tags": ["social-token"], - "extensions": { - "description": "The show wasn't even about bunny girls", - "twitter": "https://twitter.com/bakonpancakz" - } - }, - { - "chainId": 101, - "address": "BRET7yshXvwbesBpcWRpG98HFAKq4KaB3Vf2mQhKcA8K", - "symbol": "DRKC", - "name": "DarkCable Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/DarkCable/dccrypto/main/dclogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Bk3bRfj15DoZdhb6efr6QtXmoHhQJ9rAbK3wJKoxPdSa", - "symbol": "DEWC", - "name": "Dewey Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jpdewey1/Crypto/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DxQHfEWnqjmD1pcnSm3RYxdM6uJJrLky7GZY1gdrJVAS", - "symbol": "BRAD", - "name": "BradCoin", - "decimals": 0, - "logoURI": "https://i.imgur.com/pMt9YqZ.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CRkwd2QedqDi5u6W2w6jeAViAUd1pR4AXs2aKvh7GW7M", - "symbol": "SEI", - "name": "Solanium Ecosystem Index", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CRkwd2QedqDi5u6W2w6jeAViAUd1pR4AXs2aKvh7GW7M/logo.png", - "tags": ["utility-token"], - "extensions": { - "telegram": "https://t.me/MatrixETF", - "twitter": "https://twitter.com/MatrixETF", - "website": "https://www.matrixetf.finance/" - } - }, - { - "chainId": 101, - "address": "6mDtfcXkeRhy8Rt5ai6SmeDtpeaAuEvX5vCRcH4BUWL7", - "symbol": "RITA", - "name": "Rita The Mini Pinscher", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Adrizcorp/Rita/main/Pinscher_logo.png", - "tags": ["NFT", "Pets", "Social", "Community-Token"] - }, - { - "chainId": 101, - "address": "2Y5XYB3qjSpod8QmwEr5SCmNESf5F6oB5DBEXVxjQ6nH", - "symbol": "SSTC", - "name": "SST Coin", - "decimals": 0, - "logoURI": "https://i.imgur.com/DAQPnn9.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CuStQeCcs9fmQAziyMETjnmqjMYC3EpY5pxijvi6Q7A8", - "symbol": "CYB", - "name": "Cyber Block", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/dzaja123/cyber-block-token/main/logo.png", - "tags": ["solana-token", "token"] - }, - { - "chainId": 101, - "address": "5DfhZugS25gPf84LF5u6LjRCzW1XCFuRd88PAujoeic5", - "symbol": "MZOO", - "name": "Millionaire ZOO", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/benpazzo/mzoo/main/assets/MZOOp.png", - "tags": ["NFT"], - "extensions": { - "twitter": "https://twitter.com/millionairecroc", - "website": "https://www.millionairecrocodileclub.io/" - } - }, - { - "chainId": 101, - "address": "Ap25HkKz66wLWYPid1DEer598YcJP4zrFuENiWf3PMsc", - "symbol": "BIER", - "name": "Biercoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/xblackbytesx/biercoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FCRMFcfmZTY5qekzVYAmSRcxjSp4dMqSL8Gb3s2JkCAu", - "symbol": "TRKR", - "name": "TruckerCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ZetaWaves/TruckerCoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3k9STfrMqCdCB25TDKhy278KAu8AGrLQscbE9e9zssd2", - "symbol": "STRKS", - "name": "STRIKES", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/LazaBre/strikes/main/logo.png", - "tags": ["community-token", "meme-token"], - "extensions": { - "website": "https://monketoken.xyz/" - } - }, - { - "chainId": 101, - "address": "Bny3hdj4iodageysz6VDnF2pPXw7aW31v5kVtcZHi8aM", - "symbol": "GOPU", - "name": "Gopals Coin", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/gmallapp/gopal-coin/main/gopu-logo.png", - "tags": ["GOPU", "social-token"] - }, - { - "chainId": 101, - "address": "D6jj3SiCwng8oDMZajPFPgw3KiQH5Qfw52Ch5Qpxvnhm", - "symbol": "AMCN", - "name": "Ameer Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/amelli123/Crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EA1b7yP2BPELGu4M8NhiqccVDg5cBueMLq7LEvDsA4fo", - "symbol": "LITC", - "name": "LitCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/asidscript/LitCoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7qaJM6UuC57iouPyeun5vqfJxkV9YiouDrgLMqTmFmFb", - "symbol": "RAINR", - "name": "RainerNFT", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/R4cc/mjuzes78fh3/main/rainer.png", - "tags": ["nft"], - "extensions": { - "address": "9MPyrhUqR9MTpDs9kBsNZCSwtexg9MJSntXvc2vBENZg", - "website": "https://eke.at/" - } - }, - { - "chainId": 101, - "address": "HhWxJzGDCfU7DSzU9ScbpvrXsZW9VLPs8QfnhgYzxU2e", - "symbol": "QUOINS", - "name": "QUOINS", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/gavinfysh/quoins/main/logo.png", - "tags": ["Metaverse", "NFT", "Community-Token"] - }, - { - "chainId": 101, - "address": "DF1CXqAv9SoVjpG318CgyLkAorTDcHraUBwSqoAcervS", - "symbol": "ROAR", - "name": "Royal Bears", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DF1CXqAv9SoVjpG318CgyLkAorTDcHraUBwSqoAcervS/logo.png", - "tags": ["community-token", "meme-token"], - "extensions": { - "website": "https://royalbears.art/" - } - }, - { - "chainId": 101, - "address": "FtuzPJYErhtZnqAo5Q34QEAtvr3YBdhoYHwE1fM9hFue", - "symbol": "RSD", - "name": "RAHUL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FtuzPJYErhtZnqAo5Q34QEAtvr3YBdhoYHwE1fM9hFue/logo.png" - }, - { - "chainId": 101, - "address": "2ZLYEWypSrQhruqsTDqWNWuzFXe5G75dX9PoHQWtKZ31", - "symbol": "PTN", - "name": "Photon", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2ZLYEWypSrQhruqsTDqWNWuzFXe5G75dX9PoHQWtKZ31/logo.png", - "tags": ["DeFi"] - }, - { - "chainId": 101, - "address": "FX1jtt1ebuEufXe4kV1otstnD1cz9J8rhB28U7hssWKY", - "symbol": "LAMRO", - "name": "Lamrium token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FX1jtt1ebuEufXe4kV1otstnD1cz9J8rhB28U7hssWKY/logo.png", - "tags": ["community-token"], - "extensions": { - "twitter": "https://twitter.com/LamroEmperor" - } - }, - { - "chainId": 101, - "address": "FAuXyL1eUw8yQQeMBNnx4WHf5Nd2PXBnRgcntt136ay8", - "symbol": "ISH", - "name": "ISH Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ishnat/ishtoken/main/natishcoin.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "2ivCB3vEfexeYsRtkXrvwFswjPgwnHS6qFCUCLJ3zyPD", - "symbol": "NRC", - "name": "NirCoin", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/gavinfysh/quoins/main/logo.png", - "tags": ["Metaverse"] - }, - { - "chainId": 101, - "address": "DgYmLNy8sdZ4qEsdCibwtpnxYywbmQrFWRpWaSmanu6V", - "symbol": "MGTK", - "name": "MGKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/giannolamichael/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8hUkXDpFYeynBXFCxwJQKSf6x7g5UvBvpXcjnrKpJcyt", - "symbol": "NODY", - "name": "Noddy Badge", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/JeanPant/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9WNFtVYj1dUiF5nUM7zBz644hPbKgEDuxk6iHAohQfii", - "symbol": "SPACE", - "name": "Space Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/NLM-fr/cryptocurrency/main/logo.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "GEFs1a5X6FpEuZKcxk7HSBZQqyjms7XmiAdLXv1wCJqu", - "symbol": "GLG", - "name": "Glenelg Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/FrasSmith/glenelgcoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "C7vBpA5AzK4AqEkEzzruZJvzp8gg1mysgs23yCWvpcoG", - "symbol": "MOECOIN", - "name": "MoeCloud Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/moecloud/moecoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6MsHo9eB1cyvdNurs36KDQ7DBo5Yh7F8C5AB4hNxZX5B", - "symbol": "Amc", - "name": "Amazing Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/puyopuy/AmazingCoin/main/Amazing_logo_b.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3SReAPms587EPBi1VTGRdoXda6ueDpgxpHUqQ87m4S3g", - "symbol": "MAYO", - "name": "MayoCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Melsubbink/mayocrypto/master/mayoLogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7z1eQmEhhM9e1AVCBQc6BzMZWmCZRqHCLJtkDgHxzYnQ", - "symbol": "LFGO", - "name": "MEKKA FROGGO TOKEN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7z1eQmEhhM9e1AVCBQc6BzMZWmCZRqHCLJtkDgHxzYnQ/logo.png", - "tags": ["community-token", "nft-token", "Meme-coin"], - "extensions": { - "website": "https://mekkafroggo.com" - } - }, - { - "chainId": 101, - "address": "DpGbcBZMaWMhG31ZH8ESkXEy7CJAmV4ynq4fEcaZac3d", - "symbol": "GEOT", - "name": "GEOTDev", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/GEOT-Dev/Crypto/main/logo.png", - "tags": ["solana-token", "token"] - }, - { - "chainId": 101, - "address": "FmzLLbK99h3MU5DgWSApKCZh8AgdouPuAsFJUumYQrF3", - "symbol": "CCT", - "name": "Cool Carbon Tonne", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FmzLLbK99h3MU5DgWSApKCZh8AgdouPuAsFJUumYQrF3/logo.png" - }, - { - "chainId": 101, - "address": "FHFsFMxBbV3ExHyph9B6ANEBe8RC9fNjFFCZWZkcXH3t", - "symbol": "OXSC", - "name": "Onyxs Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/OnyxScoin/crypto/main/OnyxScoin-modified12neeee.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DQNdtA2KjZZZpC76BGh9QTtJdaZ8ir5wf7yNafEMzsD", - "symbol": "AKG", - "name": "ArkEnGel", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/st-hannibal/ark/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EtusNf4w3ccfjuMwkVR2tS1HjtGH5bUuQk7xfBTRKUdJ", - "symbol": "NFTCO", - "name": "NFTs Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EtusNf4w3ccfjuMwkVR2tS1HjtGH5bUuQk7xfBTRKUdJ/logo.png", - "tags": ["nfts", "nfts", "nft-token", "social-token"], - "extensions": { - "telegram": "https://t.me/nfts_coin", - "twitter": "https://twitter.com/nfts_coin", - "website": "https://nftsco.in" - } - }, - { - "chainId": 101, - "address": "81yyyURdDTrzVRRvMXec5gvLbCoeskASYWH27JCiW5A9", - "symbol": "HRSS", - "name": "Horses Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/NormanCrypt/Horses-Coin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Dvw9PxT9W7aya1wUQeUGwgVXqL51ar1rJj87SY6yfK1y", - "symbol": "CHOD", - "name": "Tang Chode", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/OshKoskByPosh/TangChode/gh-pages/logo.png", - "tags": [ - "community-token", - "social-token", - "meme-coin", - "solana-token", - "token" - ] - }, - { - "chainId": 101, - "address": "FPivaNb8NnQfH2yF3fXEr1GSnRjMpoP51yNVctn1QG1U", - "symbol": "FOX", - "name": "Fox Fox Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/inghong06/logos/main/foxfox_token.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8PZnzjEUJ1B1sMAU3xhzpfK8T4QzydDrnTZrWdzzcno", - "symbol": "DAI", - "name": "Dark Assassins Inc Coin", - "decimals": 0, - "logoURI": "https://darkassassinsinc.com/img/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6kTxevQU4Kpbs2wtjiRsqFiswqeyEiWiCDys5fNnNA9b", - "symbol": "BAR", - "name": "RugbyFisicas Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Lem0z3n/BAR/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ErgUVcypn2SMYCvLVNkTjosYFLdpwGqW8eNksGXcnjy4", - "symbol": "TREASURE", - "name": "Treasure", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ErgUVcypn2SMYCvLVNkTjosYFLdpwGqW8eNksGXcnjy4/logo.png" - }, - { - "chainId": 101, - "address": "GoiEZgEyGx25uSqNynsS5MGUCKHqtuJgg3hbdrDvc2Dq", - "symbol": "DGTL", - "name": "DGTLVCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/DeenGierke/Crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8uPyFJP5W6hm3RLr7YK8qssrF8zYb7Q2dbVxUmXrbD5k", - "symbol": "TCC", - "name": "Tiny Check", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8uPyFJP5W6hm3RLr7YK8qssrF8zYb7Q2dbVxUmXrbD5k/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CNEZzNnxFHhczchBCh7cst9tDs4Qw3jwhT3hfqe3ZFvZ", - "symbol": "MNTF", - "name": "Mintoff Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/steampunkk3/Mintoff-Coin/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CstznQoPXmePk3yCCGDHqKzhTsGe4KSQ1zVMPWEPhTcX", - "symbol": "RST", - "name": "Ricardo Santana Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/rs-token/rst/main/RST-2.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2oXgY5EfpewjWoMxG9eWqHZUhevjeHEwnPabCwHSiFSM", - "symbol": "ADIC", - "name": "ADDICTED", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mikelc1987/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5QW1HrbmwcYq36XS4VFEzjAezXBqqXBmBYDKgcdDbwu2", - "symbol": "WvzG", - "name": "Wilhelm von zur Gathen 1880", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/wvzg1880/coin/main/1880coin.png", - "tags": ["social-token"], - "extensions": { - "website": "https://gathen1880.de" - } - }, - { - "chainId": 101, - "address": "9Fp1n143x8a2hUExpNRg1e2xQDNLiFHEUmZKfP1Yxxx6", - "symbol": "BBSS", - "name": "BitBarbers Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/NossaCoin/BitBarbers/main/bb.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8xNkMsrj7ZexUhVY5wQCCwicLFnZLurjpKvLLpwhR1Rs", - "symbol": "SASSY", - "name": "Sassy Cat", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/veryDead/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GHjotLX6RCdoNWmM9BLTEX3qBa1zK49T61cyQ1vzTMYe", - "symbol": "SMKC", - "name": "SofeMkd Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/sofe1204/token1/main/test.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8VfCXEQ2bB1K9PXs1tdqgNM7zsNoLii68HaZytQoCg4a", - "symbol": "MSOL", - "name": "MetaSOL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/WebWeaveSimon/crypto/main/METASOL.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6J35JYuNeWsr7T3Dvynfv29EWYaTbu7Te4u9usbZ74rU", - "symbol": "AMY", - "name": "Princess Amy", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/inghong06/logos/main/princess.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "291P3h5J6Zv31xiGhpps8EhidXmv6YUxceHy19uBT3Ue", - "symbol": "SAMS", - "name": "SAMAN'S COIN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/saman1717/test/main/logo.spl.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9ajPmmLNtwFsHjeU289Y1v9MU6WwoBGVcAnRVyPcj5YY", - "symbol": "DRW", - "name": "Dragon War", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9ajPmmLNtwFsHjeU289Y1v9MU6WwoBGVcAnRVyPcj5YY/logo.png", - "tags": ["utility-token"], - "extensions": { - "telegram": "https://t.me/dragonwarann" - } - }, - { - "chainId": 101, - "address": "52qS8ZHUYjnpBf1Gg2hWB1kXdEWRwDmAbqtvgAdmxSxr", - "symbol": "CSOL", - "name": "CyberSolid", - "decimals": 0, - "logoURI": "https://github.com/Cyber-Solid/CryptoCoin/blob/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CPQEAqdBduoY3Q2ZsfWKMR5a33wXgXiVWKvEXBZaBWVP", - "symbol": "PFX", - "name": "PROFIX", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/csco32/crypto/main/logo2.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EPe5HaGZJgnYfSPgJmK4r3AWT3Ly2wMbxyPjuTNedc2J", - "symbol": "STORM", - "name": "Storm Bot", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Keoki-Hapahaole/crypto/main/a1252a1221e6485c9e709a20d2278e27.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6qcdkHKgDWmgronGowmYHDBQkeBfEuer1U1dxFbkknM7", - "symbol": "CPI", - "name": "Capitan SQ", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/cristianfc/crypto/main/logo.png", - "tags": ["community-token"] - }, - { - "chainId": 101, - "address": "7eK3SKjBqgxDFgGJHdsHBbKJd6Mm2tLgjJWcdkkicuD9", - "symbol": "DIC", - "name": "Dialing Innovations Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ron3075/logo/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BtrQt4YugR4nEKEGAmutUY1GqT35RLoNYKZgi3YJFu6b", - "symbol": "BNG", - "name": "BingusCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/PandaLizzy/binguscoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3JPyHnGXWDBbDyfiKYRAY12XXxqrpcm94tTWESZWTroT", - "symbol": "MAHDIROSTAMI", - "name": "mahdi rostami", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/rostamimahdi1997/mysoltoken/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6DaFkcqxznP8EG5XnPFsvUy1sZDsYCR5Yw2jU4nomCDf", - "symbol": "CASINO", - "name": "CryptCasino", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/15Teds/crypto/9a72a55c5572f53df2471961f77fbcc955d9391a/logo.png", - "tags": ["utility-token", "Casino", "Poker", "Blackjack", "Discord"] - }, - { - "chainId": 101, - "address": "3H2pm4JP7nCmsBDexFn1urEu2Kg5AcJVsMq7vBBPueDr", - "symbol": "BRJC", - "name": "BrijCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/brijchavda/crypto/master/unnamed.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2TbxWoEgBvp7eigdpArmaj8XDAZcvCiuzJDUsScYyY2r", - "symbol": "MAD", - "name": "Mad", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/0ctobit/crypto/main/mad.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GMrE4hWjZTwvz8iDCGYuDv7TMUSjUG55RUjicKqKfaA", - "symbol": "RLS", - "name": "Relapse", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/REALSDEALS/relapse/main/relapselogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9z94xQBXxs2j3yQgVse5TWdR22DQPvSt3qRP9adpWqYG", - "symbol": "CMET", - "name": "CME TOKEN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/criptyan/logo/main/logo.png", - "tags": [ - "learning-token", - "training-token", - "meet-to-earn", - "study-to-earn" - ], - "extensions": { - "description": "An incentive economic system.", - "telegram": "https://t.me/cmetacoin", - "twitter": "https://twitter.com/cmetacoin" - } - }, - { - "chainId": 101, - "address": "Hkcr4EnPuMnrhAYpwmcxAHYe36qQ4kd4NxSjFrPZkv9N", - "symbol": "DMPA", - "name": "Dempau Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/DempauO/Crypto/main/Vegvisir.Logo1.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4F4Qm94iF66Q1RdPmxsfirxKSf7hfUGJXUajX2YQDSVh", - "symbol": "MRAY", - "name": "Mantaray", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/callum-riordan/crypto/main/M.png", - "tags": ["fan-token", "altcoin", "youtube", "mantaray"] - }, - { - "chainId": 101, - "address": "4n4Uswf5Ncww6zpqxfba8t6i9EqWs624Gk15APa6H7CW", - "symbol": "PNUT", - "name": "Potternet Utility Token", - "decimals": 0, - "logoURI": "https://github.com/rpotter6298/pnut/raw/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8iE8gXkGUb4eawkymH6sAchQVCgv5r2inwYw51iPQtRo", - "symbol": "NRD", - "name": "Nerd Coin +1", - "decimals": 18, - "logoURI": "https://raw.githubusercontent.com/Jazzlygeyteman/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "D9rXY171xguq2hVG2uqhWLj1GoojwiPXYEwrXtbbAvRt", - "symbol": "FNDT", - "name": "Foundation", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/kaizen56/Willow-Foundation/main/FNDT4.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FWr6PNFQZwgdtiY7WE5jk4qSN3jsNoTzqYBdNJ5M4WyK", - "symbol": "DRIFT", - "name": "Drift Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FWr6PNFQZwgdtiY7WE5jk4qSN3jsNoTzqYBdNJ5M4WyK/logo.png", - "extensions": { - "twitter": "https://twitter.com/DAO_Drift" - } - }, - { - "chainId": 101, - "address": "6zi8GRr9vQ4TrzevkxwEJoYbKegshKNeYD5KhKfEckfa", - "symbol": "FAST", - "name": "Fast Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6zi8GRr9vQ4TrzevkxwEJoYbKegshKNeYD5KhKfEckfa/logo.png", - "extensions": { - "twitter": "https://twitter.com/Faastaaaaa" - } - }, - { - "chainId": 101, - "address": "7ieh2n31v1iycuxkBrnYHP7w9jQZ4dx9hrtsu9gzJG7k", - "symbol": "SQCN", - "name": "Squirrel Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/bmoose0001/crypto/main/coinpng.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "7xLGTSXmqSbbfiwDNUW4kudjHEUBTHXZpfCYLEwUfgDF", - "symbol": "FEES", - "name": "FEES Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/HawkOne/Crypto/main/logo.png", - "tags": ["social-token", "fan-token", "utility-token"] - }, - { - "chainId": 101, - "address": "742eEPp13jqwGRDiTthtQx4BH6XU2K5aC7nkGi1uP9Dr", - "symbol": "PHAKE", - "name": "PHAKE Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/742eEPp13jqwGRDiTthtQx4BH6XU2K5aC7nkGi1uP9Dr/logo.png", - "extensions": { - "twitter": "https://twitter.com/DAO_Drift" - } - }, - { - "chainId": 101, - "address": "HbXGVxjyJe84zApRNmCeoEKFhBg87yxxUFhPnp7d1Czo", - "symbol": "ATOK", - "name": "Alegator Token", - "decimals": 0, - "logoURI": "https://github.com/alegator605/crypto/blob/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8udZmv2RrHpU8rPZhphUGhHpmyAqc9UzV4UihpThKvYh", - "symbol": "SFI", - "name": "SolanaFi", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8udZmv2RrHpU8rPZhphUGhHpmyAqc9UzV4UihpThKvYh/logo.png" - }, - { - "chainId": 101, - "address": "9tpUsGFmj5VHTDPJg7yQmbZe9hWAq5m3fpedcdCdJaRm", - "symbol": "QREZ", - "name": "Qreezcoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/qreez/img/main/logo2.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9X3oTJc6noafdRpuN5QEekNCppYX15GWxkeNo4udF1ui", - "symbol": "GGCHAD", - "name": "GIGA CHAD COIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/l0r5/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9g2C91epN91cJC34gGJ1cV4AjaECLTk4qGsgPMQhmo1R", - "symbol": "CJC", - "name": "Computer Janitor Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/computerjanitor/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "B1vp5NZkZRqyzkndbgnnL6BqXpGnoayQAsnbe6dzrr3F", - "symbol": "NCLR", - "name": "Nuclear Token", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/dmeat27/nclr/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2B49v3kCtwt2AtPMMbwDnB995sob7TTWjkYFFgjQQyMK", - "symbol": "BEAN", - "name": "Bean Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/chris3309/crypto/main/beancoin.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "7NPgzYMiZhf3YJYny7ojmhhbNkuBrnyAJCXeyxBSXo4T", - "symbol": "TEATO", - "name": "TeachToken", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/kobak/TeachToken/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FcS3ikUmmWpUbuabcFG3VE1nmt7NPE9ZnRM3ssPAFGv3", - "symbol": "COOF", - "name": "Coof Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/CptKanooka/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "48AEwauAHsJibyt3WqjQ6EoHnFBcnyHASfo7vB2eCXPS", - "symbol": "DRAW", - "name": "DragonWar", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/48AEwauAHsJibyt3WqjQ6EoHnFBcnyHASfo7vB2eCXPS/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Dragon War Token", - "discord": "https://discord.gg/kFUmzU6nCH", - "facebook": "https://fb.com/dragonwar.io", - "medium": "https://medium.com/@dragonwar", - "telegram": "https://t.me/dragonwarglobal", - "twitter": "https://twitter.com/io_dragonwar", - "website": "https://dragonwar.io", - "youtube": "https://youtube.com/channel/UCzl9Gsl58YR9MyL2650tg8w" - } - }, - { - "chainId": 101, - "address": "6tXyNS8rBiM3DFMniZJwzeJL2BUQPQbnjcu6aN2hdw9N", - "symbol": "SHTK", - "name": "Sh-tKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/boxswapper/sh-tkoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Ary45BZeVNKjTSTs1BWmJ9oYXAPaDoHWpZXMjx6E5GRJ", - "symbol": "DOM", - "name": "Dominium", - "decimals": 9, - "logoURI": "https://user-images.githubusercontent.com/30323789/146248908-3deb9c10-eb88-4dee-a5ab-313d8ea00b07.png", - "tags": ["community-token", "utility-token"], - "extensions": { - "website": "https://domtoken.net" - } - }, - { - "chainId": 101, - "address": "9q2vXTk4zLFMLFri3fyzsHNxMo7MmtsHajcBipaSNhr6", - "symbol": "BLC", - "name": "Blockmec Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9q2vXTk4zLFMLFri3fyzsHNxMo7MmtsHajcBipaSNhr6/logo.png", - "tags": ["blockmec", "blc"], - "extensions": { - "twitter": "https://twitter.com/blockmectechno1" - } - }, - { - "chainId": 101, - "address": "EudmQA7EZLicfxomqHKjj4yEtM1HfMRXb7eik1RByUAq", - "symbol": "LOOTKEY", - "name": "Loot Key", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EudmQA7EZLicfxomqHKjj4yEtM1HfMRXb7eik1RByUAq/logo.png" - }, - { - "chainId": 101, - "address": "8F2AE5AythfwBt864XGExVBiTn7THD9iSWcUP61vjkM3", - "symbol": "UNCR", - "name": "UniCOINs", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/FearfulSquirrel/unicoin/main/Marta'sUniCOIN.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6156vEwBw11hGF6rkr3um5RPNWfBCYBFH7XcbEF47erH", - "symbol": "STEPN", - "name": "STEPN - Run To Earn", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6156vEwBw11hGF6rkr3um5RPNWfBCYBFH7XcbEF47erH/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/Stepnofficial", - "website": "https://stepn.com/" - } - }, - { - "chainId": 101, - "address": "6kerT9GaHmCj4MkVzo4mqBaxmwYDBHY3DddGFaLVuNyx", - "symbol": "MLAND", - "name": "Mineland Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6kerT9GaHmCj4MkVzo4mqBaxmwYDBHY3DddGFaLVuNyx/logo.png", - "tags": ["social-token", "mineland", "ml", "mlt", "mland"], - "extensions": { - "website": "https://mineland.net" - } - }, - { - "chainId": 101, - "address": "7RY638ykd3eU2uxrSe16gjPGQ2u6kyohEoCyFxwWHweN", - "symbol": "MKITSOL", - "name": "MkITSol COIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mkitsol/crypto/main/Logo.png", - "tags": [ - "social-token", - "Community-Token", - "Utility-Token", - "fan-token", - "tech-token", - "currency-token" - ] - }, - { - "chainId": 101, - "address": "Dv2yLQoTpLx4arCZGXiVvp7wyYURsNeoQzUifd2gTKQD", - "symbol": "XAMO", - "name": "XAmore", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/aminamor/logo/main/CryLogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AtiZT72Vk8Qu9kTXE1H5UtjPDJZypBKRye6TfiFWda4B", - "symbol": "POSTER", - "name": "POSTER", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/scotchegg/poster-coin/main/icon-CIRCLE.png", - "tags": ["currency-token", "community-token"] - }, - { - "chainId": 101, - "address": "J3gJvE7WvBZpMZv1krC8Y9DeoZiRqRnCe18mJbXqswgZ", - "symbol": "MIM", - "name": "My ONE token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/J3gJvE7WvBZpMZv1krC8Y9DeoZiRqRnCe18mJbXqswgZ/logo.png", - "tags": ["solana-token", "token"] - }, - { - "chainId": 101, - "address": "FXSrKsQ34jMmMtciuzhr3KSTG5UMZQfXBJKGqYYUTxg1", - "symbol": "ORKA", - "name": "ORKA Climate Solutions", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FXSrKsQ34jMmMtciuzhr3KSTG5UMZQfXBJKGqYYUTxg1/orka-logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://orkacoin.com" - } - }, - { - "chainId": 101, - "address": "H2HQBn2LiFtTWeL2JUHccQsuCsQevSn9dDaL8Ln3wLRp", - "symbol": "TUBN", - "name": "Tuben Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/RubenOussoren/solanatoken/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8aJJvSXsv2VERrTvpJKjBLE6LUhdnYWTWurmBmCiw7si", - "symbol": "POVRY", - "name": "CryptoPovery Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Stephen988/cryptopovery/23e0682c917b3be9a0ff5d454b2225f92f9e6e65/cryptopovery1.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ByQ9MXaamfBD8DraD5BKgXPffboJwfahknj1cmomawAi", - "symbol": "BOOBS", - "name": "Booty Bucks", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ByQ9MXaamfBD8DraD5BKgXPffboJwfahknj1cmomawAi/BB.png", - "tags": ["solana-token", "token", "social-token"] - }, - { - "chainId": 101, - "address": "98kWFBQPLsUYAXTwkuvDfSrWgqdHL9LeP4K7BHDGowot", - "symbol": "TGP", - "name": "Togepi", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/98kWFBQPLsUYAXTwkuvDfSrWgqdHL9LeP4K7BHDGowot/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://www.youtube.com/watch?v=ur26D817lpM" - } - }, - { - "chainId": 101, - "address": "42pr4AkwMzHRspr8VXmP9mfaV8QP21WptmWA3SjNfAxS", - "symbol": "RUHE", - "name": "RuheCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/n3gox/cripto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EuX6qS6skQs9jRJBn7a5nTcAPuveoN7sJJaQgLzPnkd4", - "symbol": "PTNB", - "name": "Photon Bond", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EuX6qS6skQs9jRJBn7a5nTcAPuveoN7sJJaQgLzPnkd4/logo.png", - "tags": ["DeFi"] - }, - { - "chainId": 101, - "address": "3e9pHUxa2nvAqso2Kr2KqJxYvZaz9qZLjoLaG77uQwB1", - "symbol": "BAIL", - "name": "BAIL COIN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/ApeLabsNFT/solpatrol/main/hammer.png", - "tags": ["NFT", "Utility-Token"] - }, - { - "chainId": 101, - "address": "8b66S9rYyD6yspL9VsXrj8tGq2N2eqRvXVuixWYMkGLC", - "symbol": "STWIE", - "name": "Stewie Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/JacobieKenobie12345/Stewie-Coin/main/Stewie.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Hw8SwgELe4YvP2ZfoS3SsGa8eBxka5rRfPSxdFNWK5sV", - "symbol": "PLVO", - "name": "PoruvoCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/poruvo/pulvo-crypto/main/gp_greenstroke600x600.png", - "tags": [ - "social-token", - "gon-pulvo", - "poruvo", - "chiphop", - "musician-token", - "support-musicians" - ], - "extensions": { - "twitter": "https://twitter.com/poruvo", - "website": "https://gonpulvo.com/" - } - }, - { - "chainId": 101, - "address": "E3Rf9zBzQo7NpV8ZpDsqRqvtH64yAJGctmmVJQxmfGeg", - "symbol": "ITQ", - "name": "ITQoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/nsnagg/DarkWinter/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DRvToWQbnPCht3tJJTuWzMfFyHvUtJ4587d6wXCHRC9", - "symbol": "LUSA", - "name": "Luisa-Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/schrismyers/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "84A5n7GsQUQXpkbgWBctouRk8hLwwYuq6KfjSQN5oY6Q", - "symbol": "420", - "name": "Legalize420", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/martynasb11/crypto/main/kisspng-cryptocurrency-otcmkts-cann-bitcoin-market-capital-5afa4fdc833f27.1643313215263538845376.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GY4DvdAo8pXcJRUqNiRfrs5XyYGwkw7g4bvzgXq8yePc", - "symbol": "BFCS", - "name": "Best Friend Cosmo", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GY4DvdAo8pXcJRUqNiRfrs5XyYGwkw7g4bvzgXq8yePc/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2gdSHBhpvEWvFdeKUdYLP2NFAopovfA8qu48Y4EqS7s2", - "symbol": "PEPR", - "name": "Pepper Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ron-github/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6Z98tC8DK3Mp9UTCHVkKdRo5wS5AHL95L15NYRKSVFiV", - "symbol": "ZERX", - "name": "Zerxes", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/thatwkidjohnny/Zerxes/main/zlogo.png", - "tags": ["zerx", "zerxes"], - "extensions": { - "twitter": "https://twitter.com/ZerxesCrypto" - } - }, - { - "chainId": 101, - "address": "3YuUgH2VWJPBsDJmCsczhvTFjp3rryXwHwLFsVXUuZQm", - "symbol": "FAYRIN", - "name": "Fayrbear Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jayala1/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DEApiXXZVmK92qprbzKMXy787NdTeeyT6SueoEMKc8k5", - "symbol": "BTI", - "name": "Betradi", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/kaihacks/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "43ybenGduSsE2CgXtMmfgqA3xmK1xpYq8KWAsJpMimUY", - "symbol": "LYNX", - "name": "Lynxer", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/43ybenGduSsE2CgXtMmfgqA3xmK1xpYq8KWAsJpMimUY/logo.png", - "tags": ["community-token", "social-token", "utility-token"], - "extensions": { - "description": "Copyright Lynxer INC" - } - }, - { - "chainId": 101, - "address": "21TwLx8V8Js538eeT9ARJTa6CpdThgCwj2mkbjKRpv6J", - "symbol": "H63", - "name": "Hyper Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/hyper63/coin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BqQLq22YpMx4tS6Rgrkp9yGiAyucfDuycKMGpszttxyy", - "symbol": "SHAWK", - "name": "Solana HAWK", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Nasino1/logo-/main/logo.png", - "tags": ["community-token", "utility-token"] - }, - { - "chainId": 101, - "address": "FdLycDiJH5se75GZyxEdEdo6c3z7WHkoHZmvbkibUUrS", - "symbol": "SPRING", - "name": "OFFSPRING", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FdLycDiJH5se75GZyxEdEdo6c3z7WHkoHZmvbkibUUrS/logo.png", - "tags": ["social-token", "community-token"], - "extensions": { - "discord": "https://discord.gg/4gRMm6mgHZ", - "twitter": "https://twitter.com/bitcoinisking_", - "website": "http://rational.af" - } - }, - { - "chainId": 101, - "address": "7VsUAYX7fvkGo2sfXCSmoQK8ceEarQYQDDeTBZRrgAw9", - "symbol": "HOLYSHIT", - "name": "HOLY SHIT", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Crypto-Never-Sleeps/ShitToken/main/logo.png", - "tags": ["meme-token", "community-token", "social-token"], - "extensions": { - "discord": "https://discord.gg/xWCqbuMWFx", - "website": "https://www.cryptoneversleeps.org" - } - }, - { - "chainId": 101, - "address": "7Q86RemQhwqAimrxXoEuRfuFFynPVzskeo43b35bCd8H", - "symbol": "OTWG", - "name": "Off The Wall Gaming", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/BlameAcm3/otwg/main/otwg.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7SRmAZg1PfViXW2CHkPYfoR7MTTbT9yy53Q16nZNaysL", - "symbol": "WIENR", - "name": "Wiener Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/doxiecrypto/crypto/main/wiener.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4yG54Gk9ZsdTXk2RNZBELTHYBpy8dK4jcePNzokzKJWS", - "symbol": "GDX9902", - "name": "The Dojo Master", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/Adrizcorp/siu/main/derick.png", - "tags": ["social-token", "GDX9902", "NFT", "Gundam", "SciFi-Modelling"] - }, - { - "chainId": 101, - "address": "77A8ycvZQfwYb3h2Rc4f9masYfug1wKVRRJUPeMA7b6o", - "symbol": "SCHRY", - "name": "SolChrysalis", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/77A8ycvZQfwYb3h2Rc4f9masYfug1wKVRRJUPeMA7b6o/logo.png", - "tags": ["Games", "NFT"], - "extensions": { - "telegram": "https://t.me/Sol_Chrysalis", - "twitter": "https://twitter.com/solchrysalis", - "website": "https://www.solchrysalis.com/" - } - }, - { - "chainId": 101, - "address": "6jUnhKET45gpvLtxkZL75m5K6EmCNTpnCfjhPKXicekm", - "symbol": "PMC", - "name": "PirateCraft", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/johenkel/pmc-crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2YjgjsYjKiAVLWzQj3Z7ZgunE9gWvfxTRXfTTrivxR1L", - "symbol": "H2XLKD", - "name": "H2 XLK Definitive Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/M0RPH10U5/H2XLKD-coin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3Nh9SR2EQ2PVTWL5UzKtRTtbz2v6FjMrFDbd2oKknjtT", - "symbol": "HEIN", - "name": "Heinie Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jeffreyphelan/crypto/main/Heine%20Cypto%20Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "L1edE4UVsmeqdyK5bWpxzhozxw3jgnfcuimVj1SnyCf", - "symbol": "LiDo", - "name": "LiDo Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/L1edE4UVsmeqdyK5bWpxzhozxw3jgnfcuimVj1SnyCf/logo.png" - }, - { - "chainId": 101, - "address": "Htqzmit2pAYcTzWKYnwxM7QeX8nEQXMj8SEjWUuixVcB", - "symbol": "ATHENA", - "name": "ATHENA", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/eliotos/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "B3ac69eFLTt5FvkSUuBvZDm2vCbh98UNeADm58UGvBQR", - "symbol": "GI", - "name": "GI-Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Anoopkrishna2493/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6XJj9vt6yZdCcmCc9yvrsi3Ahk7GExm738WjNTiNniZU", - "symbol": "QQ", - "name": "QQ Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jenochen/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7LwnCotpbzC5adQjFJQbkCRme7Ufiew2FbG4y6KcDN2u", - "symbol": "FREON", - "name": "Freon Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/CptKanooka/Freon/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8H4eH19o9yYWCGFQLe37fQhn9Jkb5TUVw8bwW9cmHNfu", - "symbol": "OWSOM", - "name": "Owsom Token", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/akangaziz/token-list/a0a791f031bb802306916b44797bdc41acdba907/assets/mainnet/8H4eH19o9yYWCGFQLe37fQhn9Jkb5TUVw8bwW9cmHNfu/logo.png", - "tags": ["meme-token"], - "extensions": { - "twitter": "https://twitter.com/owsomtoken" - } - }, - { - "chainId": 101, - "address": "84tUoZWc7EKrU7r8jRW4kBjN1wLwkCxhTc9q3CKVR5Gt", - "symbol": "PET", - "name": "Pet Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/84tUoZWc7EKrU7r8jRW4kBjN1wLwkCxhTc9q3CKVR5Gt/logo.png", - "tags": ["utility-token", "NFT"], - "extensions": { - "website": "https://anotherapp.blogspot.com" - } - }, - { - "chainId": 101, - "address": "5WchjqsYPUkYH4gm9S8YoUDsMMFTejSsVkupRxNbCsJT", - "symbol": "GRDL", - "name": "GR3ND3L", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Grend3lPr1me/crypto/main/gr3nd3l.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6G1Vkyfm43ESu2h7xdcKUReCJSTMjrgL4PkHFR1Mh7zj", - "symbol": "KBLH", - "name": "Kabalah Online", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/h4ck3rtr4d3r/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DNimUPcmzh1VN9oCTHNLTMS1u9nR2rCjjoNTaut1qhue", - "symbol": "BF", - "name": "Brave Finance", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ben92316/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "A2JPQDuPC3f2sv31zxgaXz2HPEEWVTmpPmBPJnMMHLaw", - "symbol": "AMPL", - "name": "AMPOLO Coin", - "decimals": 10, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/A2JPQDuPC3f2sv31zxgaXz2HPEEWVTmpPmBPJnMMHLaw/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "BYxq3JX2ZvXWXw5RWUDJgQcZcyRBjLuH1ggs9RHdbxWp", - "symbol": "HODGE", - "name": "HodgeHeg", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/JonesZoid/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DG2ax7h7gjXfa8KywHoVsxfAqMkmxpQzg8N1PPdNVCmJ", - "symbol": "BLND", - "name": "BlundCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/blundcoin/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "92hFV3mqiCmbVJFwTf8b6uhN4o3GERfPRvLw2ypmjMBC", - "symbol": "CLS", - "name": "Caals Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Pieter-JanCaals/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DHVUoxNqv3D7EgktBxUsxFF2Wx83hVDmD2wBBpUaw3jn", - "symbol": "CHP", - "name": "Crypto Health Plus", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DHVUoxNqv3D7EgktBxUsxFF2Wx83hVDmD2wBBpUaw3jn/logo.png", - "tags": ["health", "utility-token"], - "extensions": { - "facebook": "https://www.facebook.com/Crypto-Health-Plus-226283872703673/", - "twitter": "https://twitter.com/CryptoHealthPls", - "website": "https://cryptohealthplus.com/" - } - }, - { - "chainId": 101, - "address": "GH2rFP4BQAxjsYEceffJvwrh31aD2EfC5rpWsSuBvZ5v", - "symbol": "DIG", - "name": "Dingar Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/infinitydigitalLLC/dingar/main/Dingar%20Logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "71W5aWT3M21MHzirD94DvcfHtGPLu7K8nhgxKAo5QDNr", - "symbol": "JAKE", - "name": "JakeCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/tsaunya/assets/main/logo.jpg", - "tags": ["utility-token"] - }, - { - "chainId": 103, - "address": "A1nQA6t11dUW3JfmzoRf4LAc69UNZMt7eXw1N7imDWjh", - "symbol": "TZD", - "name": "Toonztudio Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/A1nQA6t11dUW3JfmzoRf4LAc69UNZMt7eXw1N7imDWjh/logo.png" - }, - { - "chainId": 101, - "address": "HMtUX7HpQBa8AwfVHiKSQRraWbCjDqx6FhCbJAryt4uq", - "symbol": "FANF", - "name": "FANF team token", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HMtUX7HpQBa8AwfVHiKSQRraWbCjDqx6FhCbJAryt4uq/logo.png", - "tags": ["community-token", "meme-token"] - }, - { - "chainId": 101, - "address": "Dw31GE3Ba4WS9kyy64SHMXSx8GoK2ZfkBks13tGtvjT1", - "symbol": "FRSH", - "name": "Fresh Token by arcavacatalab", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/arcavacatalab/FreshToken/main/fresh.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://github.com/arcavacatalab" - } - }, - { - "chainId": 101, - "address": "GaCM5eHZEQswGDj4Jf4vKZUt7P8Dxdtq3V5friXVtMDF", - "symbol": "FxK", - "name": "SL0W4U", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SL0W4U/FXK/main/LOGO.PNG", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4k6cUJZura395AVNuUazifQwJBdrLD1jp73u9uNuGwGy", - "symbol": "VINY", - "name": "Vinya", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/VinyaCoin/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "mH4741pwqFBAyyQ656mFE2GeojFn3txoY6sYBSw4J9S", - "symbol": "LAMRO", - "name": "LAMRIUM EMPEROR", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FX1jtt1ebuEufXe4kV1otstnD1cz9J8rhB28U7hssWKY/logo.png", - "tags": ["community-token"], - "extensions": { - "twitter": "https://twitter.com/LamriumEmperor" - } - }, - { - "chainId": 101, - "address": "3JSLdQFR87YUqohrvRNiYRuQfkZ8nqPdPH9hXhDfETVw", - "symbol": "LCD", - "name": "LCD", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HMtUX7HpQBa8AwfVHiKSQRraWbCjDqx6FhCbJAryt4uq/logo.png", - "tags": ["community-token", "meme-token"] - }, - { - "chainId": 101, - "address": "3qXsHMCAWU2AkSgp4Gss1gDMk4zrFctwB2fYfsHsVmxf", - "symbol": "STAM", - "name": "Stammizcoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Optisoftab/Stamcoin/main/stammizSlogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7vKX5rx57VPE1ozJesFzojdPjGZ3M89894PT27i6seUF", - "symbol": "PAC", - "name": "PAC Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7vKX5rx57VPE1ozJesFzojdPjGZ3M89894PT27i6seUF/logo.png", - "extensions": { - "discord": "https://discord.gg/QTeFmcnXhg", - "twitter": "https://twitter.com/punkyapesclub", - "website": "https://punkyapesclub.com" - } - }, - { - "chainId": 101, - "address": "HoRavU7C96nCEsC77sVCiQpqCPdwG2DbByjBogmkpFBH", - "symbol": "F", - "name": "Mr_F", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/faizu22/logo/main/f1.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AHUuAcaNyc3QbS4gcdJRBHv1SfHEH9p7Cgfn1bPa4bAn", - "symbol": "OERS", - "name": "Oersie Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/bartificial/oersietoken/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "31VRJXz11dMDBkVUeLgjtLo35xH9U6VyxdXGF5aNAEcz", - "symbol": "TRAIN", - "name": "Thomas The Tank Engine", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/15Teds/tomcrypto/main/logo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "yJCDaoanobYVkxAx4igSmf2xzmwheYiKjvJNgZwWhMw", - "symbol": "SBT", - "name": "SonicBee Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/EdgaratSB/Crypto/main/SBT.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "AhH92P9YL57mJzgDqdc5NcTk8K1QazVHZF5TyvKnnk6V", - "symbol": "KTJS", - "name": "KTJ Solana", - "decimals": 0, - "logoURI": "https://github.com/juustkim/Crypto/blob/main/KTJSolana.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2qfSePaCqvWkYnYUsYSm1VZYKtbzKYHh7gsnKcyrgspp", - "symbol": "ETD", - "name": "EntropyDex", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2qfSePaCqvWkYnYUsYSm1VZYKtbzKYHh7gsnKcyrgspp/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Entropy:The First Decentralized Perpetual Contracts and Derivatives On Solana.", - "twitter": "https://twitter.com/entropydex", - "website": "https://www.entropy.loan/" - } - }, - { - "chainId": 101, - "address": "5Zg5Uxu8XfNfcPwdLv6aZRjW4aLSrYZ3SZDeweuzeS4b", - "symbol": "PINSOL", - "name": "PinaSolana", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/tamkar1982/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6VDVXBNrUb5qa7T7E2g2cXJT6WRLzvNn28JQLCGXE8xN", - "symbol": "BUDC", - "name": "BuddyCoinz", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Davidbenji/buddycoinz/main/buddycoinz.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FgKZcD2YLx3oddaSGSH7WH5eL1Zcu4xAj95jkZwMbQHi", - "symbol": "KITH", - "name": "Kaus In The House", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/levinKaus/KITH/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2gbZNPdCDqbRhaHvGGha2w1bmW8TimGaFxggAeESzoKb", - "symbol": "RCKT", - "name": "Rocket Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/gabegon8910/crypto/main/RCTK.png", - "tags": ["Utility-token", "meme-token"] - }, - { - "chainId": 101, - "address": "GKKtUp6UTubkPTd6x9EG55rN7Svg3Ys76g24reDYFcFX", - "symbol": "ACTN", - "name": "ACTON Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Booostup/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CFf8WsY35fHvCwrFo4gfNBL9xSSPrXM7v41oCzzXECUz", - "symbol": "SKCN", - "name": "SkrekkCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MatsWeckhorst/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HowJ6tCJmQ1qtcNpd76mxX8KaukxHhzWYdvcJYPmFFKr", - "symbol": "ALCE", - "name": "AlchemyCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/alchymi/alchemy_coin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DU9eSs4sHjGUfxmMdQu59TpMAjvxm6Rs8HbWnzJd5KXU", - "symbol": "DEKA", - "name": "Dekadus", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/JayPi89/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EwzpcfgyE3UZsNbpMkKjgQWiXYDmY3LFcvc7DKjtdvWk", - "symbol": "apMATIC", - "name": "Wrapped MATIC (Allbridge from Polygon)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4DHywS5EjUTF5AYisPZiJbWcCV4gfpH98oKxpgyKRnnQ/logo.png" - }, - { - "chainId": 101, - "address": "zdABz6DyNFsH62xAoh1RThk2DH2mDPeEiFnmWcJTHTP", - "symbol": "apWETH", - "name": "Wrapped WETH (Allbridge from Polygon)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FeGn77dhg1KXRRFeSwwMiykZnZPw5JXW6naf2aQgZDQf/logo.png" - }, - { - "chainId": 101, - "address": "AAuuhM6a9TJ6MsoKbSmBGbqBhDQkyuNUgDkH9E9j3Xzm", - "symbol": "apWBTC", - "name": "Wrapped WBTC (Allbridge from Polygon)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/qfnqNqs3nCAHjnyCgLRDbBtq4p2MtHZxw8YjSyYhPoL/logo.png" - }, - { - "chainId": 101, - "address": "3X2UQQkHhbW1mHtS7BQgt7hUALw8pHS334FMpuoBADPt", - "symbol": "apDAI", - "name": "Wrapped DAI (Allbridge from Polygon)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FYpdBuyAHSbdaAyD1sKkxyLWbAP8uUW9h6uvdhK74ij1/logo.png", - "tags": ["stablecoin"] - }, - { - "chainId": 101, - "address": "7eYsZw57mTK3y63R8xv3uehPm3bKTdoyAtAqHUxVxuyP", - "symbol": "abUNI", - "name": "Wrapped UNI (Allbridge from BSC)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DEhAasscXF4kEGxFgJ3bq4PpVGp5wyUxMRvn6TzGVHaw/logo.png" - }, - { - "chainId": 101, - "address": "DoH3AKgMCShGxzpSgHeGyU3AosnHmJbYShgjZwNeFEsm", - "symbol": "abLINK", - "name": "Wrapped LINK (Allbridge from BSC)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CWE8jPTUYhdCTZYWPTe1o5DFqfdjzWKc9WKz6rSjQUdG/logo.png" - }, - { - "chainId": 101, - "address": "4nLJaxZbHMNXPpg6BSEruyU1vh4sAbRxSkjEkmJVJDKy", - "symbol": "abBNB", - "name": "Wrapped BNB (Allbridge from BSC)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4nLJaxZbHMNXPpg6BSEruyU1vh4sAbRxSkjEkmJVJDKy/logo.png" - }, - { - "chainId": 101, - "address": "29r14BEftB1RnSdq2ygVnwmEThbhmwvaaXhkmv5GvyyG", - "symbol": "abDAI", - "name": "Wrapped DAI (Allbridge from BSC)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FYpdBuyAHSbdaAyD1sKkxyLWbAP8uUW9h6uvdhK74ij1/logo.png", - "tags": ["stablecoin"] - }, - { - "chainId": 101, - "address": "E7zDjtDVWRgsdgMDcbtzTMVMkcWcyF35Do6Qmis5nvBZ", - "symbol": "aeUNI", - "name": "Wrapped UNI (Allbridge from Ethereum)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DEhAasscXF4kEGxFgJ3bq4PpVGp5wyUxMRvn6TzGVHaw/logo.png" - }, - { - "chainId": 101, - "address": "GFdVCMBimnf2Dmx2D4DtPhghTkLYh6JG4u5hKB89t9n1", - "symbol": "aeLINK", - "name": "Wrapped LINK (Allbridge from Ethereum)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CWE8jPTUYhdCTZYWPTe1o5DFqfdjzWKc9WKz6rSjQUdG/logo.png" - }, - { - "chainId": 101, - "address": "CChDnBH5UdEPGtYfwrFf7Bdmtvc5WnSKtN77oVsPkHBK", - "symbol": "afLINK", - "name": "Wrapped LINK (Allbridge from Fantom)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CWE8jPTUYhdCTZYWPTe1o5DFqfdjzWKc9WKz6rSjQUdG/logo.png" - }, - { - "chainId": 101, - "address": "A96PoNcxa9LMxcF9HhKAfA1p3M1dGbubPMWf19gHAkgJ", - "symbol": "atUST", - "name": "Wrapped UST (Allbridge from Terra)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CXLBjMMcwkc17GfJtBos6rQCo1ypeH6eDbB82Kby4MRm/logo.png", - "tags": ["stablecoin"] - }, - { - "chainId": 101, - "address": "C58DBQ5gmU1Tt6vtqmKWBVMzNtxmPoRWg9mM1RspDtUZ", - "symbol": "DEX", - "name": "Dexus Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jonathanv05/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8TTV6aVDi8nFGra1tQQUxqKHL6bMX8HrJ13uTb531mfz", - "symbol": "VeDMe", - "name": "Vendome Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Wkryst/vendome/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9dgMFti1ubuybtBMESawfDv87TDUX9atnwRCT3YQFkJ4", - "symbol": "ZETC", - "name": "ZET Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/zaramihnea/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3DWn26BxigsPjUAQCkfQUjFCNQVQratAqt8Yy8MNFXeU", - "symbol": "JIMMY", - "name": "Jimmy", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/soccrates/crypto/main/jimmytoken.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8TytJGVEyYGPCmPbtMwaGNr57gn9qz7YSH9bLf6aBsn9", - "symbol": "BAVS", - "name": "BayernVerseSchoasch", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8TytJGVEyYGPCmPbtMwaGNr57gn9qz7YSH9bLf6aBsn9/logo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DfiPmMAX8AmZqvQAVGYEireCeJBoBC66VTipGs7mfh3v", - "symbol": "MATS", - "name": "MatsCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/MatsWeckhorst/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "JCLyRg1wd9uqigLTd7fFn7wdASXfT5CiN74Ka1zMrjhn", - "symbol": "BEER", - "name": "BeerCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/biercoin/coin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3Az4BeYamV7awLrTWBTVeneLt12QNtXjtW14Jsproruz", - "symbol": "MMC", - "name": "Michael Martial Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/miketheamazin/crypto/main/IMG_5943.JPG", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Fv7msaPiJEaxym7LkY8PcJis6DPLwrbVTrCsmXKT3VG1", - "symbol": "NKT", - "name": "Nik Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/nik110403/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6JEK47yGkULH4ezouZ8X4X4qEiyd3QZn7emaQhAXQuam", - "symbol": "LEON", - "name": "Chemeleon Worlds", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6JEK47yGkULH4ezouZ8X4X4qEiyd3QZn7emaQhAXQuam/logo.png", - "extensions": { - "twitter": "https://twitter.com/chemeleonworlds", - "website": "https://chemeleon.world" - } - }, - { - "chainId": 101, - "address": "7g166TuBmnoHKvS2PEkZx6kREZtbfjUxCHGWjCqoDXZv", - "symbol": "acEUR", - "name": "Wrapped CEUR (Allbridge from Celo)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7g166TuBmnoHKvS2PEkZx6kREZtbfjUxCHGWjCqoDXZv/logo.png", - "tags": ["stablecoin"] - }, - { - "chainId": 101, - "address": "6wKJad8njToVD94SWYEsFUCT7bYYMAq69whJgznk7gax", - "symbol": "SMRT", - "name": "GeniusCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/eugeniusss/crypto/main/brain.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Goe49dFiS8HYQj2epcwo7riCecbCTcU18Ws1ekcXpDYE", - "symbol": "KUNT", - "name": "Kunt Koin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/dlopez079/kuntkoin/master/KuntKoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GvtLA6L6kX1H6dmwkr5GUojJKMtiL6nS9MP4ZSJe8JCT", - "symbol": "SHBC", - "name": "Shadowball Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/haircutfish/crypto/main/smallerhat.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "83VBJQUUJt7VnsBTGYYdJvup6aJxz9ztGYoBEiwPYKbg", - "symbol": "ROSIE", - "name": "Rosie Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Firebros1/crypto/main/Rosie-Cup-jpg-3-png.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DPjQQZvc3ApL1ZzD4WcJnXV6NvuDQDgj6E6WW58cHWMf", - "symbol": "THOR", - "name": "Thor Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ajeema/thorcrypto/main/thor-token-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "74iB18CXkCtNwSn97L4amTYvpTrULj4Rmfeee2BXo8YZ", - "symbol": "DIT", - "name": "Dit Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ditsoftware/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Cgo9SLxUJv4xLniwjoAtpWpCvesruHHaMosFkLfGQZ2e", - "symbol": "WSH", - "name": "Windshield Heroes Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/kodepharm/wshcrypto/main/600_600px1new-01.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Av6n2pfJDAXfuU28226omzxD5yx3PpzqU5UjGYrXUy7b", - "symbol": "ZOSIA", - "name": "Zosia Koin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Pavelosky/Zosia-Coin/main/zosia.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9vZ17jrKfMZj5pH37232mCR3t45EZiVHfauoAECueVWN", - "symbol": "GZZC", - "name": "Grizz Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/LeonSatyr/crypto/main/Bear.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "86UGuBBNSy6QDgYggDVLixCEjrwHAShRu8Vu3Lno7FiP", - "symbol": "LAMRO", - "name": "LAMRIUM", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/86UGuBBNSy6QDgYggDVLixCEjrwHAShRu8Vu3Lno7FiP/logo.png", - "tags": ["community-token"], - "extensions": { - "twitter": "https://twitter.com/LamriumEmperor" - } - }, - { - "chainId": 101, - "address": "BwmQtUizFn5aoTidsAF5afq4Ty4UfWrXK3xxeXZMo6HF", - "symbol": "MAXX", - "name": "Maxx Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/JervanSahd/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BcfM9pAiHx7si3rMGun2iHj3SiwCGv3BJA9EcpJKGgSd", - "symbol": "FINN", - "name": "Finn Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/tsaunya/assets/main/finn.png", - "tags": ["social-token", "meme-token"], - "extensions": { - "website": "https://martens.wtf/" - } - }, - { - "chainId": 101, - "address": "AqnujVzrSrKEEpAxS6hPArZb24vMzrZ7ZsKmdL2rUQE5", - "symbol": "GLIDO", - "name": "Glider Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/tryfon2l/ttcoin/main/glido.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Cnf2SSLgWcQoKiULA4HjK9oD9ahFJzXg7fUdkuYFtDjn", - "symbol": "VGVT", - "name": "VigilantVeterans", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Vigilant6/VigilantVeteransToken/main/Token.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3ZF5irYUyh91Ugv5fzWZUaCGk7bN9DADKnHp8gtV52Nh", - "symbol": "SOAT", - "name": "Simple Online Accountability Token ", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/White-Lycan/FIRM/main/download.png", - "tags": ["social-token", "accountability", "better-internet"] - }, - { - "chainId": 101, - "address": "9tghX1jRyVxXRtVkYi4sqtxVt1UFDr7YNdZA5wM8R436", - "symbol": "CONB", - "name": "Consbeeracy Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/800BOT/crypto/main/Capture.PNG", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6bdNd17gnxxgWRii3r573CBVMHJSG99TkJLcvPpg1x5N", - "symbol": "MDP", - "name": "MDP", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/userDragos/MDP-crypto/main/MDPlogo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7VszmJBkHNLHEXkgrirRkxaC9w3A7RzgpYfKXDJn9h2h", - "symbol": "DTLS", - "name": "Datalys", - "decimals": 0, - "logoURI": "https://github.com/Datalys/crypto/blob/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AsK8hmT5Rcr8iE7v5LnttjPXAjcjawM7qLJgMfruEpeg", - "symbol": "TM", - "name": "TechnoMonkee Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Vinpan1/Vinpan1/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8ydfd9f9tqEKwGky4DUbKkAZkubwdzdWKYF245ZGZ3mC", - "symbol": "PLK", - "name": "Planktonium", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/planktonio/planktonium/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9gA4uYdw33yEJZQ4q53X3scVzFY5T4Ub6SjCzMWo5P6L", - "symbol": "WTFP", - "name": "WTFP Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Bearmun/WTFPCoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5UZZVVfhVexzd7ULCarsmTQ5PQCSBdMBtzXfeham6DPy", - "symbol": "YAKS", - "name": "YakBux", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Ruleryak/YakBux/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4VA2gtQ48gKexxLBabjeXQQKm9YScERD847RTz8R8pui", - "symbol": "PLD", - "name": "PALLADIUM", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4VA2gtQ48gKexxLBabjeXQQKm9YScERD847RTz8R8pui/logo.png", - "tags": ["community-token", "meme-token", "social-token"] - }, - { - "chainId": 101, - "address": "66LZ18mVs12MPQCnpQDZ4g7d8odACJEtKzcyS8eubYHK", - "symbol": "BBB", - "name": "Bitcoin Blockchain and Beyond", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MaceoCalico/BBB/main/BBB3.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5j9T7GNXgHJUPLqnZ4TtRQy3AqW4Jcp4X8G2TXUfJ2QQ", - "symbol": "RXDG", - "name": "Rexollar", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/vladdu/rexollar/main/rexollar.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9ansGKK89WQJobpBQjTzJKUr5cjfQXXmzj81ipLinix5", - "symbol": "IMP", - "name": "Império Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/idrinkpoison/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2mxAyT6KcaWzS2a3gJjE9zZL6VyXWY8Ut1PUtsF5Kp7e", - "symbol": "POS", - "name": "PabloOspinoSanchez", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ospinooo/solana-crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "C2wx351cbs8G7G3Xkg1Q8EwKJwTN1rP14ojs3ak1Y8uT", - "symbol": "TAKE", - "name": "TakeTheSound Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/isaac1972/takethesoundCrypto/main/logo.png", - "tags": [ - "music-token", - "community-token", - "social-token", - "utility-token" - ] - }, - { - "chainId": 101, - "address": "7uS8FP88CTrrtwNpzwcJsH7BfSGorn4L9wsfrb1knzKo", - "symbol": "SKIDDY", - "name": "SKIDDY", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/jaxeaxe/a/main/SKIDDY.png", - "tags": ["social-token", "meme-token"], - "extensions": { - "twitter": "https://twitter.com/SolBoxers", - "website": "https://solboxers.xyz/" - } - }, - { - "chainId": 101, - "address": "2iZmEjsrdJnptKUxPe2xRv4WQzpNDrmdWJcqPMysBhdA", - "symbol": "MLY", - "name": "Masonly", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2iZmEjsrdJnptKUxPe2xRv4WQzpNDrmdWJcqPMysBhdA/logo.png", - "tags": ["game-token"] - }, - { - "chainId": 101, - "address": "52nJbAzwCyyZUc7csLfa26sy4wdJGtSMh8rmfBKc2Zw8", - "symbol": "PTBA", - "name": "Pitbull Advanced Token ", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/White-Lycan/FIRM/main/download.png", - "tags": ["social-token", "accountability", "better-internet"] - }, - { - "chainId": 101, - "address": "6vmmDgU9YNCSUsnEpYekPW8GnG4zFYKH9g8KRQTnSdzo", - "symbol": "BUL", - "name": "BulBul", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/xTaromarux/crypto/main/coin-image.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "F3qjYusDAa4C67GYsfdBFzanGMykYydq2nMfn6E2D1VZ", - "symbol": "MOMMY", - "name": "Matt Coin", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/F3qjYusDAa4C67GYsfdBFzanGMykYydq2nMfn6E2D1VZ/logo.png", - "tags": ["social-token", "meme-token"] - }, - { - "chainId": 101, - "address": "FZ4nBw9dhKRDfUGFoDN4fWpJ6Xm9B6xxBBAVUrmdYTVM", - "symbol": "ERRD", - "name": "404", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/3Banan3/404-token/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9Jgat3yNtqvgeNqoeXud5nwXYtEV6XU8gTXEn56cd36V", - "symbol": "LLEM", - "name": "LaskinLockery Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/plaskin/CryptoLLEM/master/logo_1124.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7tz1ShZD1UbCojUcD4QnqFbwTp7GLNEWNnrXZf85hLDW", - "symbol": "GGT", - "name": "GonisGoldenTicket", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/GoniNataraja/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EURHdYFwnvZRKvggooS8Wgmp34L5L7T16kmN5971da71", - "symbol": "GBYQ", - "name": "GoobyQuest", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/GoobyFRS/GoobyQuest-SolCoin/main/logo.png", - "tags": ["social-token"], - "extensions": { - "description": "GoobyQuest - Matts Mini-Crypto Project", - "website": "https://mattfaulkner.net/" - } - }, - { - "chainId": 101, - "address": "5oYsiw4YvejuKoUDhbR78ZSm6L7dD6UVcV4jER1RDhVs", - "symbol": "TACO", - "name": "Space Tacos", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/withoutink/crypto-spacetacos/main/logo.png", - "tags": ["meme-token", "community-token", "social-token"], - "extensions": { - "description": "Decentralized Tacos from space; In Tacos We Trust.", - "website": "https://withoutink.com" - } - }, - { - "chainId": 101, - "address": "94jcj6rXADoQhMqDSmzBXFeWw94rTBqAcmwepCGRNaZ3", - "symbol": "PSY", - "name": "psychocoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Psychotic3440/crypto/main/logo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DQEQAysEtidrqTgqokbjymsLSSdxcRCiN4T6PN1CLY38", - "symbol": "DDC", - "name": "Droid Dude Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ArberKadriu/CryptoCoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2LYZnwLkqzQGxVU6Ar7PquzAHF9cpQnFX2XsSgVqjXLY", - "symbol": "GALX", - "name": "Galaxi Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/GalaxiToken/galaxi-token/main/logo.png", - "tags": ["utility-token", "galaxi-token"] - }, - { - "chainId": 101, - "address": "DZtptXkwMARkRJzwxcc41vcgrYfi1qiTZVm4584Zh7TD", - "symbol": "ELLA", - "name": "Ella Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/withoutink/crypto-ellacoin/main/logo.png", - "tags": ["meme-token", "community-token", "social-token"], - "extensions": { - "description": "Ella Coin was minted to honor those that are fabulous.", - "website": "https://withoutink.com" - } - }, - { - "chainId": 101, - "address": "E7nDqNmfu1uX6TBdyN8QQE9xkZAocnQTSSsqauvTUWxb", - "symbol": "BNZ", - "name": "BONES", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/sm0keytab00/bones/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "42jcPenNUYhNftUd9WdBtzjxpU7QckkYG8togt7d8YSB", - "symbol": "CHOCG", - "name": "Chocolate Gerbil", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/dpartin/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "77hLq2qDJyY4o4o7QybSPjhRyjoZkVDNpcNwDBCus1fu", - "symbol": "LJDL", - "name": "Liljedahlar", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/devhyperlight/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9zajRKBP94JTnRhkiZ5eRjQiwGFsmF5MfetaGrPC2Ziz", - "symbol": "Char", - "name": "Charizard Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jacoding1/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2JZNgjctcgACs7vMFLuB7Jj5B5rZnYFtApPtLPmLD82D", - "symbol": "MUNIS", - "name": "Munis", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/munistoken/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AihamqQrpdxqHscjAa8nPVXSyNtwzU2ghNXAAX1AptZw", - "symbol": "AIHAM", - "name": "Aiham Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AihamqQrpdxqHscjAa8nPVXSyNtwzU2ghNXAAX1AptZw/logo.png" - }, - { - "chainId": 101, - "address": "BDJwEaEmVHzrWmRsY1A9jB5EqniuQgCFUyJwpA1i7VWr", - "symbol": "MDVCN", - "name": "Mandeville Connection", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Withatee/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7x6BiVDmP5yHBuPrZpZCZwgKJi91k7QQpvfP577ZbdFR", - "symbol": "GDLN", - "name": "Golden Lion", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/don0t/Goldenlion/main/lionhead-min.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4W64SgCQamoV2RVPTa1XNnT3nBXWr1JMWwfetLY1j6Pr", - "symbol": "YEET", - "name": "YEET Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/AtticusCincinnatus/Crypto/main/yeetshaq.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FgLzsaSUKoZzBC4v9oATs9TyATaBKK4ses9gzD8ChRoB", - "symbol": "BLAB", - "name": "Barry Labs", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/BarryLabs/BarryLabs-Library/main/Placehodler.jpg", - "tags": ["community-token", "utility-token"] - }, - { - "chainId": 101, - "address": "6cQhcJ19jiVYb433Jia9cYR9k3YnMcwxUL5jNBjcDCTh", - "symbol": "JBR", - "name": "JBRNET", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jbonanza/logo.png/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5znaTXtBXAD81QqFYKzFR2XvwC7ThCszGbNbQSZPPcCi", - "symbol": "TGNPRO", - "name": "TGN Photography Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/tgnphotography/TGNphotographycoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5SNC5EBD1xrQxxh9LsksKymbnXsAH7p8htF8CMyh93f", - "symbol": "TUIT", - "name": "Round TUIT", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/withoutink/crypto-tuit/main/logo.png", - "tags": ["meme-token", "community-token", "social-token"], - "extensions": { - "description": "For anyone that gets around to it.", - "website": "https://withoutink.com" - } - }, - { - "chainId": 101, - "address": "94LtmZUdKfJWJd9Q2eXhWVpdA92WTteoPJ6arw5HWFjf", - "symbol": "HTOKEN", - "name": "HTOKEN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/94LtmZUdKfJWJd9Q2eXhWVpdA92WTteoPJ6arw5HWFjf/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "CiRMmmN5ytJk2BcVGsKiYwCFCePPRc1AM6KATYoNbA3T", - "symbol": "MITH", - "name": "MithCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/brwest85/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AHVxRdfRec4bYbCDTiUnGn5tv8mzrFqmTcAZV6eoQGFx", - "symbol": "ZFC", - "name": "Zaff Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ZaffyPuck/crypto/main/ZF_coin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4Dunt9WfALctX9qAmsDPEzNjCj8wFfUfQsjsnFtajrSE", - "symbol": "BHCA", - "name": "Bohica Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/gmitch46/crypto/main/logo2.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4BtMhZtx6275kEtR5xPYenhUCURj81Z3tpmvw4ecLBCq", - "symbol": "SCTE", - "name": "Scottie Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/DasJoules/ScottieCoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FQ8sWTnYydqkGYd4yA4aopSVkDqsNyTPnSj5gK73nJT8", - "symbol": "SPND", - "name": "SPend Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/sneh01/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EfiR9rM6QBg8iVh8WHHXnwD8XYviWpnaTZM8txzcwSFX", - "symbol": "TAQA", - "name": "Taqa Coin", - "decimals": 0, - "logoURI": "https://github.com/kawanda/crypto/blob/main/TaqaLogo-03.png", - "tags": ["Energy", "social-token"], - "extensions": { - "description": "The aim of this project is to drive the development in the Arabian Empty Quarter Desert and the North Africa Sahara Desert, using the latest technology in Photovoltaic Solar Panels and Energy storage and distribution.", - "website": "https://www.taqacoin.com" - } - }, - { - "chainId": 101, - "address": "De7MqeCzwbPQxGfGCChgKoHK7dtzH4Hzp4Gdh5qyF2os", - "symbol": "DCANE", - "name": "Don Carletto", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/T0ny-Montana/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FkBRohZpqx2c7zxe5cDhNq3AoFo2nPJus3xtdz9CvQmQ", - "symbol": "$MINERAL", - "name": "Mineral Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FkBRohZpqx2c7zxe5cDhNq3AoFo2nPJus3xtdz9CvQmQ/Mineral.png", - "tags": ["Energy", "social-token"], - "extensions": { - "website": "https://afloat.eco" - } - }, - { - "chainId": 101, - "address": "smbdJcLBrtKPhjrWCpDv5ABdJwz2vYo3mm6ojmePL3t", - "symbol": "SMBD", - "name": "Solana Monkey Business Droplet", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/smbdJcLBrtKPhjrWCpDv5ABdJwz2vYo3mm6ojmePL3t/logo.png", - "tags": ["utility-token", "solvent-droplet"], - "extensions": { - "discord": "https://discord.gg/thK8BCtQbM", - "github": "https://github.com/solventprotocol", - "medium": "https://medium.com/@solventprotocol", - "serumV3Usdc": "6KtErANtAw4oXGhF1LJhKk2f8xomCwo4bwLcntZYJBVt", - "telegram": "https://t.me/solventprotocol", - "twitter": "https://twitter.com/solventprotocol", - "website": "https://solvent.xyz" - } - }, - { - "chainId": 101, - "address": "G2mgq8ve2b6uVvdHtty2KtkDT67ztX7RH9e2Nhctumca", - "symbol": "DICKS", - "name": "NFT COCKS", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Prime3vil/NFT-Cocks-Token/main/logo.png", - "tags": ["general-token"] - }, - { - "chainId": 101, - "address": "43cSR1rmsQGyAebfhYoLyuNBGVtRE2BKaYerBcDYzz4z", - "symbol": "BJ", - "name": "BJ", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/soccrates/crypto/main/bj.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EkbaCuCgwwt19zrL5LKupCy3XaoFBFbB9zuRrWEXhR6N", - "symbol": "DUK", - "name": "DooksTesting", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EkbaCuCgwwt19zrL5LKupCy3XaoFBFbB9zuRrWEXhR6N/logo.png", - "tags": ["social-token", "utility-token"], - "extensions": { - "description": "The goal is simple, to spread love. How we spread it.. well that's where our community comes in.", - "website": "https://sighducks.com/" - } - }, - { - "chainId": 101, - "address": "9Wyt5txGT5Npd5McH1wTVRBeZiWXeQfrzqHCnMprRWD", - "symbol": "SHARKY", - "name": "SharkyCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SharkyCoin/Sharky/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7r9iDa6YMkxPsz5BXSKQo2zGiGoGZbLGWUL84AUwBQMd", - "symbol": "HZI", - "name": "Heinzi", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MrWaffelXD/heinzi/main/Heinzi.png", - "tags": ["social-token"], - "extensions": { - "linkedin": "https://www.linkedin.com/in/jonas-heinze-347879195/", - "website": "https://heinzi.jonas-heinze.de" - } - }, - { - "chainId": 101, - "address": "793ApJzBMCdQrTiRS5eL3GokVzUr9U3YRLp62CrRJaCJ", - "symbol": "DSL", - "name": "DeSol Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/793ApJzBMCdQrTiRS5eL3GokVzUr9U3YRLp62CrRJaCJ/logo.png" - }, - { - "chainId": 101, - "address": "JAYDueSTMuhLYZEHZVXJrbSaYtgMfg78zGMpeiPRhxXA", - "symbol": "ELXR", - "name": "Elixir", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/CryptoMoon8/token-list/main/assets/mainnet/JAYDueSTMuhLYZEHZVXJrbSaYtgMfg78zGMpeiPRhxXA/symbol.png", - "tags": ["general-token", "game-token"] - }, - { - "chainId": 101, - "address": "3ty9oaBfP2LU5BwaHZng1oVCtmLwvn4qWu6RM25mAkcX", - "symbol": "CAST", - "name": "Caviar Store Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/rubensilva09/cscoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4GEcMq4yZM3YvYNJSwkfhtwCZrEt8gtrJKQ3nCGLFD5z", - "symbol": "SLOTH", - "name": "Sloth Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4GEcMq4yZM3YvYNJSwkfhtwCZrEt8gtrJKQ3nCGLFD5z/logo.png", - "tags": ["social-token", "game-token"] - }, - { - "chainId": 101, - "address": "7PWvDdwAieKUSfaDVhF8VD2RyLNk1Na12XoxN7Semegk", - "symbol": "TERM", - "name": "Termoenergetica Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mihnea2kx/crypto-termo/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5hhA9PEToRcQtvSvFuvSQC15kkxHJoqG2yF2SSCs4znM", - "symbol": "LITZ", - "name": "Litz Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/theNetworkChuck/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "59vMocrR3QWa6cLwQBiiYhFdHfDFRodLuUkYkNyyhBJ4", - "symbol": "INRC", - "name": "INR Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/gsingh72/coin/main/inr-coin-inrc-logo.png", - "tags": ["social-token", "general-token", "stable-coin", "stablecoin"], - "extensions": { - "description": "Indian Rupee Coin, Stable Coin" - } - }, - { - "chainId": 101, - "address": "5vUBtmmHjSfpY1h24XhzEjRKjDyK5jNL9gT2BfM3wcnb", - "symbol": "gFIDA", - "name": "Bonfida Governance Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5vUBtmmHjSfpY1h24XhzEjRKjDyK5jNL9gT2BfM3wcnb/logo.svg", - "tags": ["governance-token"], - "extensions": { - "website": "https://bonfida.org/" - } - }, - { - "chainId": 101, - "address": "6wzzefNX8BhyQumboz4y12X1Ys3RwpLdsc7tkvDzMaNk", - "symbol": "QUOKKA", - "name": "Quokka Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6wzzefNX8BhyQumboz4y12X1Ys3RwpLdsc7tkvDzMaNk/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/snft2022", - "website": "https://solana-nft.io/" - } - }, - { - "chainId": 101, - "address": "D9VLqjZqjy5MNPSzSMnoFmUEjmTHmPEsvb3cfzAppiHU", - "symbol": "GHFT", - "name": "Gherghina Family Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mihnea2kx/crypto-family/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2GuQGvfvS7rNiYpysU4iDHbB9nF4aSjJ5c6TL3ALEgjv", - "symbol": "MAP", - "name": "Thirdmap", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solanadevv/token-list/157bf21ad4a5ecdc6103f139c21490060225fd1a/assets/mainnet/2GuQGvfvS7rNiYpysU4iDHbB9nF4aSjJ5c6TL3ALEgjv/logo.svg", - "tags": ["utility-token", "nft"] - }, - { - "chainId": 101, - "address": "CtGhNVXnG28qMAHHRbU5KcCPRmN2DeGKAtgb5e8spPk2", - "symbol": "FOCK", - "name": "Fockn Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CtGhNVXnG28qMAHHRbU5KcCPRmN2DeGKAtgb5e8spPk2/logo.png", - "tags": ["social-token", "FOCK"] - }, - { - "chainId": 101, - "address": "GUAXo4yYqY335t9esybM4wDPcDeAc7m2mW2xQ2svXzy1", - "symbol": "SOUTHPARK", - "name": "South Park Memes", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GUAXo4yYqY335t9esybM4wDPcDeAc7m2mW2xQ2svXzy1/logo.png", - "tags": ["meme-token", "community-token", "southpark"], - "extensions": { - "twitter": "https://twitter.com/southparknfts", - "website": "https://www.southpark.space" - } - }, - { - "chainId": 101, - "address": "GCPHeGhYawX3hUEx2Zxezp3QyLvDCXuC1RuQJYtjh2bp", - "symbol": "DUNK", - "name": "SolJordan", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GCPHeGhYawX3hUEx2Zxezp3QyLvDCXuC1RuQJYtjh2bp/logo.png", - "tags": ["NFT", "utility-token"], - "extensions": { - "twitter": "https://twitter.com/SolJordanLabs" - } - }, - { - "chainId": 101, - "address": "2aUguEhEae4SMTLKBYtf3GLzoSQaASwVnZMgE1vC4cPZ", - "symbol": "FBC", - "name": "Freebies Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/pozitivamatt/crypto/main/cropped-freebiesfavico-NEW-192x192.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "29m33R3FKwdFTLTQUneh8GM2KQCpg3wYViTBwZ7ssJ7Z", - "symbol": "SYD", - "name": "Sydney", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ostersepp/coins/main/sydney.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "E2KVvQKqnymv6dpbML59TDQEuy7GbDKCagpGQuCDYNoJ", - "symbol": "JJC", - "name": "JJC", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/E2KVvQKqnymv6dpbML59TDQEuy7GbDKCagpGQuCDYNoJ/logo.png" - }, - { - "chainId": 101, - "address": "HAErKxnzi2KvbpgDZ4m7D7Drv7nu1kNRtMSLEUSJLVfX", - "symbol": "BELO", - "name": "Beloane", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/beloane/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9niH1tb31znADrhJJTUVBjxN9sf43d2C9W6pMCoxWyat", - "symbol": "JHX", - "name": "Jimmy Hendrix", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/humanpong/avatars/master/jhx.jpeg", - "tags": ["utility-token", "community-token"] - }, - { - "chainId": 101, - "address": "AuJzg9V1XwCjFQvBFVzt1rtpxbCf766KSa4YyfHkBHz7", - "symbol": "CVC", - "name": "CoViD Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/AdrianOverdijk/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EvB2m5VFGoAsVHdCwif1nKiuUwHt8zWdrrtWtJAYxpBt", - "symbol": "NENE", - "name": "Nene Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MatsWeckhorst/crypto/main/nenelogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "RACE5fnTKB9obGtCusArTQ6hhdNXAtf3HarvJM17rxJ", - "symbol": "RACE", - "name": "RAce Game", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/NutsPokerTeam/token-list/main/assets/mainnet/RACE5fnTKB9obGtCusArTQ6hhdNXAtf3HarvJM17rxJ/logo.svg", - "tags": ["utility-token"], - "extensions": { - "website": "https://www.racepoker.app/" - } - }, - { - "chainId": 101, - "address": "F3DDbJQHiDkmgUt33thXPRPp8NmQ3g2AuaqPiiuRGLjz", - "symbol": "DG", - "name": "DG Coin", - "decimals": 9, - "logoURI": "https://github.dev/dangilroy/token-list/blob/ec38aedc5e0c587f7b532717df492f2d1207c77b/assets/mainnet/F3DDbJQHiDkmgUt33thXPRPp8NmQ3g2AuaqPiiuRGLjz/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "4a7GrANFXmUmheGpQAMcwaZnHr39zEwc6joUYHgDpPcF", - "symbol": "VIRGO", - "name": "Virgo Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/virgo-coin/virgo-coin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FskUXF4aK3irwhueuv4psgqJE7PaZ3cM3gZb4rjTYPW8", - "symbol": "SSND", - "name": "SSND Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/TacoNite99/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4pnTkobcmPYTZatmtmTJq3WoqNb3EfR8r8PJLnZYQctU", - "symbol": "POO", - "name": "Chihuahua Poo", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/techroomjohn/chipoo/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FB5aw2j2qPZQiVwZgXFMjZFQrFREpHfy1mXcLGLyHXTk", - "symbol": "LRFT", - "name": "LRFTech Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/lrftech/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "i3WkGyyxhsorMmpxRbe7Z4c1GGHyXWJN6u3RC9YahHL", - "symbol": "FLDY", - "name": "Floody Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Glitchm/floodytoken/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BhD4xWQEyMCmKr88vGHjHoUwwo985QGkwWiQm22Uek9S", - "symbol": "SHRTB", - "name": "Schrute Bucks", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/haircutfish/crypto/main/schrutebucks.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "79AHd9CjwuWYfMXJ4W6SHAVN4gehmHey4VhA1JQJAR8y", - "symbol": "VALY", - "name": "Valley View Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ds2600/crypto_valy/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5J1p27QBPS6pQK8mijYv7HfhhvZnCce72xEUMw2Zm7Jv", - "symbol": "AXSORG", - "name": "Axie Scholar Dot Org", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/geovanigoncalves/goncalves/master/Untitled.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8qNxN7oC2W1Bxq37Bk4uq2ryCLix8jeWty9ZdCMwUAvk", - "symbol": "2KX", - "name": "2kx Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mihnea2kx/crypto-2kx/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4fqGB44HMXtPbxKebXu2PbR2MoSv2f91fqEBkEHG4i5p", - "symbol": "LORMU", - "name": "LoreMure", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/loremure/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "G6giteuUaL63u6jaBr8MNfNvtzUdyud16eUT68sce6AA", - "symbol": "BVC", - "name": "BeaverCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/bobbybeaver/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DCp9Mef5CAbRTuSB4kf1wzemk87dRsdkjhypLBoQmJCK", - "symbol": "SLB", - "name": "SALIBACOIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Krissal1234/Crypto/main/received_358990772277187_217x218.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DJQBoQPPXC2SMvF1t9Kb2YmFEEha7PBSQDgU2LwCRSz3", - "symbol": "SOST", - "name": "Solstallion Token", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/Osawejustice/solstallions@main/solstallion%20logo.jpeg", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/xRKGExcdJu", - "telegram": "https://t.me/solstallion", - "twitter": "https://twitter.com/solstallion", - "website": "https://solstallion.com" - } - }, - { - "chainId": 101, - "address": "BUKPWSqsKcbQLwGBPLpihKTy56nqWJEetDAJMtk6tRzf", - "symbol": "DEX", - "name": "DEX", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/sciencemonk/DEX/main/DEX.png", - "tags": ["utility-token", "education-token", "community-token"] - }, - { - "chainId": 101, - "address": "DbnTECYvQm1ZKssruNYLQLs8qRu4rDvMmvQHoemznkmW", - "symbol": "RKRK", - "name": "RaivoKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/raivolalala/raivocoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DkmdmfVCP8bvAYXGRz8ENjPM2aPkVE51CvBjne1qvxyk", - "symbol": "BTZR", - "name": "BitZera", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/grglzrv/bitzera/main/logo.png", - "tags": ["social-token", "community-token", "utility-token"], - "extensions": { - "description": "BitZera - Decentralized Cryptocurrency Token going to be used in the new generation of internet platforms.", - "discord": "https://discord.gg/bWbCnQfvEW", - "website": "https://bitzera.io/" - } - }, - { - "chainId": 101, - "address": "7gGWV8z5sowGG8RvZvc4bbSDz1jnx5AucUkpueVLhsqx", - "symbol": "LEKE", - "name": "Lefche Kefche", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/paranoya1/chunch_coin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FrREY3stxwMyuqWtS8c7u3j2n2353EVQW5rp1hRnycUc", - "symbol": "ERRT", - "name": "404 ET", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/3Banan3/tokenas/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8JjBJdV73zPPmZvkgC91ni8RsbXWTkhpuSdxeZgaw6hD", - "symbol": "BABYTIGER", - "name": "Baby Tiger", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8JjBJdV73zPPmZvkgC91ni8RsbXWTkhpuSdxeZgaw6hD/logo.png", - "tags": ["meme-token", "community-token", "babytiger"], - "extensions": { - "coingeckoId": "babytigergold", - "twitter": "https://twitter.com/babytigergold", - "website": "https://www.babytiger.gold" - } - }, - { - "chainId": 101, - "address": "FCuFJFTx6cvuK9CV2X8UciVyR7KP5HWBDuwB4WErWrAX", - "symbol": "PXR", - "name": "Precious", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FCuFJFTx6cvuK9CV2X8UciVyR7KP5HWBDuwB4WErWrAX/logo.png", - "tags": ["nft-token", "Precious"] - }, - { - "chainId": 101, - "address": "2eCU7FUA6q5UZTPvCLuw9bLq5T9vy5QJYaxSS9u3AABs", - "symbol": "Lily", - "name": "LilyCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/VladSabra/Crypto/main/lily22-min%20(1).png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9uvPWLQuNZtJXbDu877YG3ZXZrgUdhREh2CJk8cWk1Bj", - "symbol": "DUAL", - "name": "Dual Origin Coin", - "decimals": 7, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9uvPWLQuNZtJXbDu877YG3ZXZrgUdhREh2CJk8cWk1Bj/logo.png", - "tags": ["community-token"] - }, - { - "chainId": 101, - "address": "4BoeDsCbJ9jwoukFtczsXzfevXWZ58RiwXL2ykvVrLvy", - "symbol": "BAMBOO", - "name": "BAMBOO", - "decimals": 9, - "logoURI": "https://cdn.discordapp.com/attachments/507517222772539392/921458551334010960/2cbf72b5a5509d79f2945157f63f743b_1.jpg" - }, - { - "chainId": 101, - "address": "EiJb6S5zo9a5Gfbu5PhteHCCxPRUMG7jVt5NiRdVfd1x", - "symbol": "UES", - "name": "Unreal Bridge", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/UnrealBridge/Unreal-Bridge/main/logo.png", - "tags": ["nft-token", "game-token", "metaverse"] - }, - { - "chainId": 101, - "address": "BtK64nGUZxxpeR2HcV51VrUW3LW9KhogfozLzS68HdYL", - "symbol": "MSTK", - "name": "msris108-token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/msris108/msris108.github.io/master/img/logo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "2doxC6be1paV35FDHwwHhSKgmghW4EqRzRbGLaZvuj85", - "symbol": "O_N_I_O_N", - "name": "ONIONTOKEN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2doxC6be1paV35FDHwwHhSKgmghW4EqRzRbGLaZvuj85/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "e7khjBdGmTPNX6wZ4FjoCW8fzmyTGuX4CRgCuinwwTn", - "symbol": "SKY", - "name": "Sky Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/nicholhai/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5n7qf5U9FFdirZzSYQqZh9L1YS91hESKSB4fJXj8XEu3", - "symbol": "Raymond", - "name": "OMR", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/obimark/crypto/main/image.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GRN4AeoF6jut2ofGpgx8AMdPEuSAZDSXiftV8DULnMRK", - "symbol": "MED", - "name": "Medusa token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Qalander/medusatoken/main/red.png", - "tags": ["NFT-token", "community-token", "Game"], - "extensions": { - "description": "Medusa token - Decentralized Cryptocurrency Token going to be used along with Medusa, Perseus NFT's and blockchain game.", - "discord": "https://discord.gg/bWbCnQfvEW", - "telegram": "https://t.me/project_medusa_NFT", - "twitter": "https://twitter.com/medusa_token", - "website": "https://www.projectmedusa.art/" - } - }, - { - "chainId": 101, - "address": "3G2oiYqzx6r3SAY8zdioQ6v21HvrMJtwGoQ7SywS8AVY", - "symbol": "PIXIE", - "name": "PIXIEDUST", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3G2oiYqzx6r3SAY8zdioQ6v21HvrMJtwGoQ7SywS8AVY/logo.png", - "extensions": { - "discord": "https://discord.gg/y8JCHKSxaQ", - "twitter": "https://twitter.com/PixieDustToken", - "website": "https://pixiedust.network" - } - }, - { - "chainId": 101, - "address": "N1CfKy2UEQmvQeQgELMXuHX9KRGQa6ayTrYUSqsL7TG", - "symbol": "LMAO", - "name": "Solana Alien Business", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/Chiwax/assets/main/logo.png", - "tags": ["NFT", "nft-token"], - "extensions": { - "discord": "https://discord.gg/HWVM99HhNb", - "twitter": "https://twitter.com/SolanaAB" - } - }, - { - "chainId": 101, - "address": "JE1TvFnYcyCFqMDqCokDVX1mtyD9oeB8KGB68EEm3mG2", - "symbol": "R1SK", - "name": "R1skCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/i0r0me/crypto/main/logo.png", - "tags": ["Multipurpose-token"] - }, - { - "chainId": 101, - "address": "6YYzxoYNjjCPUyH6tb2tZJvMP3a2BWMrnocpeDDXS2Qu", - "symbol": "DOJE", - "name": "DeeOOgee", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/deeoogee/crypto/main/cryptologo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Cb7Wf27erQQAyFcE33cQ3pgFtAqeXAiNe75Tev8mckY7", - "symbol": "NIKO", - "name": "NICOIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/iTzNikolovich/crypto/main/NICOIN-FINAL.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3VNoGbvXWXMWjdwM2zTNv731dx2pdxvRWRE9gEDWKWW9", - "symbol": "KFC", - "name": "Kentucky Fried Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/borisgrigorov/kfc/master/kfc.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "D8f4ioijfrxec3exkJvt6GBZJmHcT38TVDamwzzCjEsx", - "symbol": "MSPIR", - "name": "MSProgramming", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/msprogramming/mspcrypto/cf2699102283d2b7fce30acaf044be61ca6fac59/001Logo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3dsqqQcFmW4YUR6C7MQmy25czHNebQt91PWhk2NkDDg3", - "symbol": "LST", - "name": "LUSTKOIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/itnowpb/lust/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3xDhNZt1aTEuwgeLrxmcqbkZBNyDgXoWVzJqUFVtcP2S", - "symbol": "RND", - "name": "Random Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/dandanmygithub/crypto/main/random.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "B1Yqn992SNem2yeEiSKsnWELCq3J8JcprZyf17E3Yfp2", - "symbol": "DMAC", - "name": "DillyMacko", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Dmac500/Crypto-/main/pic.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EP6M2Wt6NNTDHrSS1mQAjvauWFBZGRuaQ3H65nxrv7x5", - "symbol": "JEFF", - "name": "Jeff Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/thevaliantviking/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7T5yrjKEwi1zot4iu4bqzB5wKArHbZJDU99nWBh5T9hN", - "symbol": "B1SH", - "name": "B1tch Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Fnineone/crypto/main/logo.png", - "tags": ["social-token", "fantasy-football"] - }, - { - "chainId": 103, - "address": "7o9SZBfN4Pka4Kbff6ndyr4fWEQ7vktRs7tiZFMG9KTE", - "symbol": "BLLB", - "name": "Bilal Bayrak Test Coin", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7o9SZBfN4Pka4Kbff6ndyr4fWEQ7vktRs7tiZFMG9KTE/logo.png", - "tags": ["test-token"], - "extensions": { - "website": "https://bilalbayrak.com" - } - }, - { - "chainId": 101, - "address": "8QdWAqc2pQwJPP4EvdJGUv7fUCZEYn5JvF24NcpRAR8H", - "symbol": "VOS", - "name": "VossenCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/CubeQuence/solana/main/vos.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Dv7kpiZDrdecYuhsu2oJpBTzxPBmu2w8wmBwwhKP6svD", - "symbol": "BUTZI", - "name": "Butzi Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Dv7kpiZDrdecYuhsu2oJpBTzxPBmu2w8wmBwwhKP6svD/logo.jpg", - "tags": ["social-token", "BUTZI"] - }, - { - "chainId": 101, - "address": "ApToJQDQ9awk5jaUhJd6ZUQ8f5mbwVtkhmHSoJojkpxc", - "symbol": "PAC", - "name": "Pingüino Anarquista Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/martinvox/mvox-solana-token/main/logo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HtwpV19fNwDLzXCA4kbQzmoeVrHdJauw4yt6zAxptnuB", - "symbol": "KETO", - "name": "KetoCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/K5rlx/Crypto-Keto-Coin/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GhkR4r9KknG1VG6pQQckQ1HwgnjmnZHdZwY4kHcxyVwg", - "symbol": "BEP", - "name": "BEP Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/BlakePerrin13/Crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7o1F8Rubumyz9hghzLWuLtmJVTHPL5nTPj3n51QzeTFL", - "symbol": "EMAIL", - "name": "Email 5", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7o1F8Rubumyz9hghzLWuLtmJVTHPL5nTPj3n51QzeTFL/logo.svg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AUL7w7AwMEWRemqUP2Z14aEkPPAT8NDpnRoAPCUS2k5Q", - "symbol": "IOU", - "name": "IOweYou", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/xMaxix/Crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7H5nr8n3xPbgUYXzx1ykZJoyppVcV4E4KN8mCaCrfvSd", - "symbol": "SWA", - "name": "Swami", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Glitch3086/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CeVHjx6EmDSGyet2TrRL3Wo4iSah2aQcstSmeoLLfrno", - "symbol": "SIML", - "name": "Simoleon", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/alex-dp/simoleon/main/simoleon.svg", - "tags": ["utility-token", "community-token"], - "extensions": { - "website": "https://livingfreely.on.fleek.co" - } - }, - { - "chainId": 101, - "address": "FQnWLBsBDPXP9AdAUyLkyhh8e29avRaSGS76w3ubnc6n", - "symbol": "zsyc", - "name": "zsycoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/zsy450/zsycoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EF7mcTH7ZQXzHmdX3QEsumc8pdi2EzAcDrmM86ddUzNq", - "symbol": "AIDS", - "name": "EydanCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/EthanLavi/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "D9ipP4vhuFYUKY8FXijXb76XLBhfjkj2GHWotQTc7CN", - "symbol": "DOODOO", - "name": "DOODOOKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/GoofyDaytrader/doodoo/main/DOODOO.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9Y61XE4TV7J8B8r9N19drrVRftsEdqP89mGzkbUP8Shy", - "symbol": "MRTZ", - "name": "MoritzCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/moritzengineering/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "H9k2cWgLfADao2FMoBCV3KNb4HCTeK7HiybDR7WTVEPK", - "symbol": "KBC", - "name": "Koal Bear Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/BloodRose86/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GrCQkoCQDmh4XGjDohPvDiAndDH5uBpEXPWVGSoAqWa3", - "symbol": "RIZ", - "name": "RIZ coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/OG-RizNaz/crypto/main/rizcoin_logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "52jhieJCcQQPk3L81BxEuG6kyihAvcUvbwMKSVHJEK7r", - "symbol": "ISAAC", - "name": "Isaac Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Firebros1/crypto/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ALTXQKzksWFHrwBR2P2xVNWXCw7uNZCXrSaAo3NLrZCn", - "symbol": "EDD", - "name": "EDDARI Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/EDDARI/MyCrypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9shzY9jupopFajZbKP1sdhzwVwofZRejQgq7Kvw6jQKY", - "symbol": "KAGD", - "name": "KAGED KOIN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9shzY9jupopFajZbKP1sdhzwVwofZRejQgq7Kvw6jQKY/logo.png", - "tags": ["community-token"], - "extensions": { - "website": "https://www.kagedmuscle.com/" - } - }, - { - "chainId": 101, - "address": "EooEcetGTsGCq1EN9ZjHqQDybFFwPP9MZvy4JHqCVf3S", - "symbol": "KMR", - "name": "Comrade Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/hamcreation/crypto/main/logo-main.png", - "tags": [ - "social-token", - "community-token", - "reward-token", - "utility-token", - "nft" - ] - }, - { - "chainId": 101, - "address": "8piC4Rswbd4dkaMokYDVAVpurwCfu4PUWCoSdHUckjzR", - "symbol": "MZC", - "name": "Maunz Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/datamaunz/maunzCoin/main/MaunzCoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5jjao6fQ9v7UcUZW4VjgroVE6k6bCj2HU2vUKrA73rS6", - "symbol": "LIVE", - "name": "LivePlus", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/rodolfo-vargas/live/main/L!.png", - "tags": [ - "payment-protocol", - "Payment", - "Videos", - "OTT", - "utility-token", - "Live-TV", - "LivePlus", - "Live-Plus", - "live-stream" - ], - "extensions": { - "twitter": "https://twitter.com/Isjustlive", - "website": "https://solscan.io/token/5jjao6fQ9v7UcUZW4VjgroVE6k6bCj2HU2vUKrA73rS6" - } - }, - { - "chainId": 101, - "address": "G6FsRAEAzvAZ2Z9fx68kuHWGyzmziJWwNao3gEmJ8Lmy", - "symbol": "ORO", - "name": "FamiLees", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/arain11/crp/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3Wi7fWMzK3Ap9jGTTCtCavzBXZpZriVMo93udwo9ZrEr", - "symbol": "CMCN", - "name": "Comet Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/FlamingComet/crypto/main/Comet.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "B9Ej4ooSjae7xdgMhcUzCGtT6HcCL4cA8LSse3QqaibX", - "symbol": "CGBC", - "name": "CaGaBre Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/felipecadar/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BkQ4y8qNkZENFZojgVFtGig9WTFLk7nkHG1aYfUPUgt9", - "symbol": "CPAY", - "name": "ChorPay", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Tactictoes/Crypto/main/Chor%20Icon.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4VixcNJEegoSMBBZxsey8SFTreA6cWTKADdvRARcJQdu", - "symbol": "RTTY", - "name": "Retty Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/bretterer/crypto/main/RTTY/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8sSLUDCbGABLgRWAqoWnAryG6vQaAbMhWdSmSshaBbp6", - "symbol": "ILVPSSY", - "name": "PussDSTRYER", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/egf-vv/crypto/main/logo%20crypto.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7khbh7NsnKb5NGo6uFCTX4ec3viu2nhxJZ7ZK1fAmTFM", - "symbol": "DRKO", - "name": "DarkoKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ranxxaa/crypto/main/logoo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FryjpgnHCT3zS3jkBJ1Tc1Xrkq9CrtHin6Gxv7HbhQup", - "symbol": "MTVB", - "name": "Magic TV Box", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jemerocay/crypto/main/logo300x300bb.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EUYmNJg561X12YzYHAy8tSpYVo8SHgau48GrqS76vuRb", - "symbol": "LWIZ", - "name": "LwizCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/tomkonikkara/lwiz-crypto/main/LOGO.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8bkuvExu7LPDY8H37SrUaqncLwKKmudjhSFWwD6wfpA9", - "symbol": "NOSS", - "name": "Noss Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ItsNoss/noss-token/main/transparent-128.png?token=ANSJD3YSMXV7IRIZRXTVVPTBY2HB2", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2LG52mHVTjHLZ1xoQjzPk2fvTnmePNWqL5Gx7zWrRV25", - "symbol": "SALTS", - "name": "SALTS", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/SycoSonic/Salts-Coin/e19694d9ae64ea08f9b0670042e06373719eb63a/SALTS.png", - "tags": ["community-token"] - }, - { - "chainId": 101, - "address": "4yNRp5Ap8TfG6oYPSPDHJjy5G3h3LjfWpdPZVBRb3KGT", - "symbol": "TNC", - "name": "TeamNote Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/tonytong830-apptask/token-list/main/assets/mainnet/4yNRp5Ap8TfG6oYPSPDHJjy5G3h3LjfWpdPZVBRb3KGT/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "3cq3zUJd8fJ9GT7NEuB5yvUJy56LySKT3tTyaYKxJ6wu", - "symbol": "RNBN", - "name": "RONIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/kevbot00/crypto/master/ronin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "TaUdunJo5TcdJzt9kyB4cd6HTYUdFXJHCSL2yc3sbg4", - "symbol": "TRUESIGHT", - "name": "TrueSight Governance", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/TaUdunJo5TcdJzt9kyB4cd6HTYUdFXJHCSL2yc3sbg4/logo.png", - "tags": [ - "governance-token", - "community-token", - "utility-token", - "social-token" - ], - "extensions": { - "description": "TrueSight.Me is a decentralized oracle for world sentiments. We believe making decisions under ignorance is to the root cause of human suffering. Our purpose is to build a better world based on fundamental truth. Our mission is to provide individuals with crowd-sourced actionable insights to make critical decisions in their daily lives. This has became imperative in our increasingly chaotic world.", - "facebook": "https://www.facebook.com/TrueSightMe", - "imageUrl": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/TaUdunJo5TcdJzt9kyB4cd6HTYUdFXJHCSL2yc3sbg4/logo.png", - "reddit": "https://www.reddit.com/r/truesightme/", - "website": "https://truesight.me" - } - }, - { - "chainId": 101, - "address": "DK4rfyNuMN4VRnRJq4Ue6pRBvuCADePE9SGUYMVTNZ6k", - "symbol": "NTFT", - "name": "NineTailFox", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/vaatsalya123/Ninetailfox/main/crypto_logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HhDZibDm5QUfU1dWbvuEu4iSfqfWLtvu5hVJFi4bZfJ4", - "symbol": "NOAH", - "name": "NoahCoin", - "decimals": 0, - "logoURI": "https://github.com/nspahn/noahCoin/blob/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5hUanQop7uL6V1S1U7tydn7SBuieRSW6wYsbXWea3Lsi", - "symbol": "XP", - "name": "Elite XP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5hUanQop7uL6V1S1U7tydn7SBuieRSW6wYsbXWea3Lsi/logo.svg", - "tags": ["utility-token"], - "extensions": { - "description": "Elite XP is a new skill-based wagering platform for gamers to play and earn crypto based on their own in-game performance. We’re bringing play-to-earn functionality to existing popular games like Fortnite, Dota 2, and more! Powered by Solana.", - "discord": "https://discord.gg/zAKmq5N279", - "imageUrl": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5hUanQop7uL6V1S1U7tydn7SBuieRSW6wYsbXWea3Lsi/logo.svg", - "twitter": "https://twitter.com/XPcorp", - "website": "https://elite.xpfantasy.com" - } - }, - { - "chainId": 101, - "address": "FkHzJkQudpz9sQf1s75dFhFZXnNvYpFeb41bjAirJmZa", - "symbol": "LNT", - "name": "LentCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Lento47/LentCoin/main/LNT.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "FLoD6AwcJCnbznnWfV6HkBHh5FYtr8wJYj3mBnwNdLLg", - "symbol": "DOOK", - "name": "Dook Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FLoD6AwcJCnbznnWfV6HkBHh5FYtr8wJYj3mBnwNdLLg/logo.png", - "tags": ["social-token", "utility-token"], - "extensions": { - "description": "The goal is simple, to spread love. How we spread it.. well that's where our community comes in.", - "website": "https://sighducks.com/" - } - }, - { - "chainId": 101, - "address": "aGyPX4YeSJcb4Y3GMDNnk8CBhQvq1G6fXmcUbHYJEjD", - "symbol": "MYTH", - "name": "ChainMyth", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/aGyPX4YeSJcb4Y3GMDNnk8CBhQvq1G6fXmcUbHYJEjD/logo.png", - "tags": ["NFT", "community-token", "utility-token"], - "extensions": { - "description": "5v5 FPS game with MOBA mechanics, featuring character NFTs! Tokenised 5K 3D characters!", - "discord": "https://discord.gg/chainmyth", - "twitter": "https://twitter.com/ChainMyth", - "website": "http://chainmyth.io" - } - }, - { - "chainId": 101, - "address": "EiMNcA5UGw9jxCwaH3ncd1yYD8bEtNXCARWuXKTvCP2E", - "symbol": "SPRKL", - "name": "Sparkle", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/PapaBearDoes/SparkleCrypto/main/logo.png", - "tags": ["meme-token", "social-token", "community-token"], - "extensions": { - "description": "The Alphabet Cartel is a community of content creators that have banded together to provide a safe place for LGBTQIA+ members / allies and provide awareness / education on the issues that the Cartel experiences through games, discussion, and community.", - "discord": "https://discord.gg/uxKaw7K4UQ", - "twitter": "https://twitter.com/alphabetcartel" - } - }, - { - "chainId": 101, - "address": "4rA2iVsDroL1AEpK6wQjRr82YujboyFuiPrEUQ9Lt36H", - "symbol": "QUEEN", - "name": "Qoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/QueendomDAO/media/main/logo.svg", - "tags": [ - "Multipurpose-token", - "utility-token", - "community-token", - "metaverse" - ] - }, - { - "chainId": 101, - "address": "8NioZ3twxQnNA9UgxfeGHB8fXpEEVs2v6MgVEU1cNWkM", - "symbol": "STWC", - "name": "Stormwind Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/dubde1/Crypto/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "eG7L3PRqzNZLrrzoei93zHK2oDmq1dtyVwjFu83RBki", - "symbol": "DREAM", - "name": "Dreamland Currency", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/dreamlandmonkeys/assets/main/assets/dream.png", - "tags": ["metaverse-token", "community-token", "Dreamland-token"] - }, - { - "chainId": 101, - "address": "AGRpSFvJiYLu726eyrEQTbT5KRyLtcfAiaDJBLVjp82Q", - "symbol": "BRENDA", - "name": "TJs Lover", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/tjslover/crypto/main/brendaheart%402x.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6Qyt6ULtyXkT8C83mcdi5RA6oJF7K3Kg9HroUz4kHgAL", - "symbol": "PNDA", - "name": "Panpan Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/PandaDevolper/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "67W6AdXTzKxGp1556GF45Wh7sENBxNmXpGFHKCk8mH87", - "symbol": "BRLC", - "name": "Brasil Real", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/silvionetto/crypto/main/tupinamba.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EzaS1S9ziDooyaqLeVU245eeia5dfNpZYNiJuxagA5iy", - "symbol": "PIO", - "name": "PEERSIO", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/peersio/peersiocoin/main/PIO.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8p7fEr1TC12osTi5EdnntYd8hjA6aSL1MfNr37xhiYCi", - "symbol": "FRKS", - "name": "Freakscoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/leocapuzzi/freakscoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "SrkAxNG82cyXmCBDrqLqdZWmeYc7yxymexRKuEeSSYA", - "symbol": "ISCO", - "name": "Andoniar", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Andoniar/insertcoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6cvXk6byhVKKMmVR1hLMjYp4SXVt9RyFHvuVsGRzA3Sy", - "symbol": "TNLI", - "name": "Tonoli Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ricktonoli/cdn/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BQqo6Xwu7NzMvL813DkdWzcShWdbW6EiAnvr2HJVmdjg", - "symbol": "LKEB", - "name": "LukeBux", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/lmcewen9/lukebux/main/logo.PNG", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5pemBJT45oNvBYPvML1svLz6WXfEPHzsiEwHKCt85tSH", - "symbol": "AVLN", - "name": "AvianCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/z3r0-k3lv1n/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2qycUc4D7p24BJz5SijoVmcx8o2kJirQqXGaK51THQso", - "symbol": "AVES", - "name": "A Very Efficient Server Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/garylin/token-images/main/aves.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6oiYnLCtsoyVua2KsJ9um1kdW28rMPPaQzZp95WrpcC5", - "symbol": "RW", - "name": "RACEWARS", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/AftershockNFTs/crypto/main/logo.png", - "tags": ["NFT", "community-token", "gaming", "betting", "metaverse"], - "extensions": { - "description": "In community purchases and bets within 'Aftershock NFT Collection' VR Racing Game", - "discord": "https://discord.gg/S5kBZbCC2c", - "facebook": "https://fb.me/AftershockNFTs", - "telegram": "https://t.me/AftershockNFTs", - "twitter": "https://twitter.com/AftershockNFTs", - "website": "http://AftershockNFTs.com" - } - }, - { - "chainId": 101, - "address": "9RrcgceVyBPGD7cQnS9RFvThLmmwFLGCRNPhd9BdzM51", - "symbol": "EGGY", - "name": "eggyCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/eggyBones/eggyCoin/main/egg.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "21kcPGWam5J8H4Ppa4C9NvbUswrA1SqQ5fWfXimAScay", - "symbol": "EAST", - "name": "EASTSIDE GmbH Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/project-play/crypto/main/logo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HfMVgG3fQr45JtrQD3jpVki6E5H5BSdjN8kCAvDEDKMQ", - "symbol": "INA", - "name": "Inanna", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/781d71f6cb76d2921c7f101fac3aa3010c627cdc/assets/mainnet/HfMVgG3fQr45JtrQD3jpVki6E5H5BSdjN8kCAvDEDKMQ/logo.png", - "extensions": { - "website": "https://www.inannafinance.com" - } - }, - { - "chainId": 101, - "address": "FzHYtu6S1EDr411frWwi1BjFjZC5dBe3cBrwBt7VEerN", - "symbol": "FNC", - "name": "Frannetwerk", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/frannetwerk/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "68yMQnizexkYdCA73PyEKg3Vs1KxWWMceDdp7LUhCTeh", - "symbol": "LUCKY", - "name": "Lucky Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/garylin/token-images/main/lucky.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "81CoQVPb5ugBFicV1UekRjbGk8ZJkdKA2JJ4a1Rj5gb7", - "symbol": "FTDAO", - "name": "Fintech DAO", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/lovelangy/token-list/main/assets/mainnet/81CoQVPb5ugBFicV1UekRjbGk8ZJkdKA2JJ4a1Rj5gb7/logo.PNG", - "tags": ["DAO"] - }, - { - "chainId": 101, - "address": "92bcERNtUmuaJ6mwLSxYHZYSph37jdKxRdoYNxpcYNPp", - "symbol": "BTC-mSOL", - "name": "Raydium LP Token V4 (BTC-mSOL)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/92bcERNtUmuaJ6mwLSxYHZYSph37jdKxRdoYNxpcYNPp/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "5ijRoAHVgd5T5CNtK5KDRUBZ7Bffb69nktMj5n6ks6m4", - "symbol": "SOL-mSOL", - "name": "Raydium LP Token V4 (SOL-mSOL)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5ijRoAHVgd5T5CNtK5KDRUBZ7Bffb69nktMj5n6ks6m4/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io/" - } - }, - { - "chainId": 101, - "address": "FWc7yLYJFZ3hftcHfrFjG7CioFMpiwyy7ahFVpUxEZMh", - "symbol": "ISSA", - "name": "IssaAI", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/marco2meyer/crypto/main/Coin%20logo%20small.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DhrqCm5oG8J6agWVCXzpKJh5UZk4XcWCJ4pyXm2szNXx", - "symbol": "OLIMP", - "name": "OLIMP NFT TOKEN", - "decimals": 9, - "logoURI": "https://i.postimg.cc/MTYxbd0K/1.jpg", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "ArGrm5N6Sv9d79bosoH7jjteRDVLfX1J2HinPFoBFXz6", - "symbol": "MSWS", - "name": "Mighty Sol Wolves", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ArGrm5N6Sv9d79bosoH7jjteRDVLfX1J2HinPFoBFXz6/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3NVEy7VgpRQ2CjdgJPBDDAb1Usvk51b42oC5wmbTHh9x", - "symbol": "VSTC", - "name": "Vilaythong Southavilay", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/vstoto/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3S3a5vVR244mrDZWidChYk1wYM6L2Y1nG58EDP4Hdpbx", - "symbol": "$PETE", - "name": "PETE Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3S3a5vVR244mrDZWidChYk1wYM6L2Y1nG58EDP4Hdpbx/logo.png", - "tags": ["nft-token"], - "extensions": { - "discord": "https://discord.gg/wt3PwDSETz", - "twitter": "https://twitter.com/Pricklyplatoons", - "website": "https://www.pricklypetesplatoon.army/" - } - }, - { - "chainId": 101, - "address": "9L518Y4ReHwEPDaTEVGF9pSdSRx4o1ieUkgxakLafw18", - "symbol": "JFC", - "name": "Solana JFC ", - "decimals": 1, - "logoURI": "https://raw.githubusercontent.com/ziazilliqa/jpl-logo/main/logo.png", - "tags": ["community-token", "utility-token"] - }, - { - "chainId": 101, - "address": "HPsCEGhe9tvrg7XGSqLsXPmwniv4GXP5DxTQy4739sRb", - "symbol": "BEANS", - "name": "Qahwa Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HPsCEGhe9tvrg7XGSqLsXPmwniv4GXP5DxTQy4739sRb/logo.png" - }, - { - "chainId": 101, - "address": "3NDbsGrfzxhuybrWizhLC9QpnFDeHgfYzJ8wc5vGBkSm", - "symbol": "CYBR", - "name": "Cyber Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/cyberpayload/crypto/main/CYBR-Coin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Fx3LGp9Uvut5pB6oCa247SSefbd6MfVYZy9JPBvM3xCk", - "symbol": "NORI", - "name": "NORI Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/maximakesthings/nori-coin/main/NORI.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DHBFPh1MPcDP4gwezgFrANsxbFW5YKwSmpFEyAtnCbq9", - "symbol": "TBF", - "name": "Token Boyfriend", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/victorpng/tokenboyfriend/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "91bsBRfsS8acSvThHXUp1gRHUKaydfJQiU8uixdyqC47", - "symbol": "SOPP", - "name": "Sopp Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/danthedev123/sopp/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CTpBUVdodTVc8W9m8mG3aUgVzGvEqKofsFhwD9rHreZu", - "symbol": "RDC", - "name": "RDC Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CTpBUVdodTVc8W9m8mG3aUgVzGvEqKofsFhwD9rHreZu/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://radu.ursache.ro" - } - }, - { - "chainId": 101, - "address": "2Yuv3BqAUsUeqYfrMRYL6LJZgf3HMKTkDrZM6mEf9R2j", - "symbol": "MCN", - "name": "M-Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Yuv3BqAUsUeqYfrMRYL6LJZgf3HMKTkDrZM6mEf9R2j/logo.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "website": "https://318music.com/mcoin" - } - }, - { - "chainId": 101, - "address": "5guuZW8cNNji4MRhf1T9bkJEiFEVbfKoh3tARe6xZzwt", - "symbol": "CONR", - "name": "Conner", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/AnonymousChicken/solonatoken/main/dsBuffer.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5gak19rmAWusaesE8yqGRhB5thnsisMjYtU5x1RAV3cU", - "symbol": "zia", - "name": "zia zilliqa", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/eerip/zia-logo/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7mKc2BHTogjgCNB6BAVA6rJc2mngF2ZJDu1J9iLrpoJZ", - "symbol": "TPBX", - "name": "TapBox", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/TapBoxTech/token/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4aq9fPv1KqSURGat1bbrUtwFtQfN8xdWDUN1ezxubg5Q", - "symbol": "EOGC", - "name": "Eyes on Gaming Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/karldermarx/eogtoken/main/logo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FQnE6vtekmwXMY2DMQXgmtKH9CvUN8LoFBrW8U8CKUgH", - "symbol": "KSY", - "name": "Kelsey Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/blkrypt/KSY/main/black-Kelsey-removebg-preview.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EE2u4wHdyFZsSe3hdVhTSLCPjRsqG8Uc4SX8iSYEucQk", - "symbol": "JCC", - "name": "JerseyCityCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EE2u4wHdyFZsSe3hdVhTSLCPjRsqG8Uc4SX8iSYEucQk/logo.png", - "tags": ["social-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/JerseyCity", - "website": "https://jerseycitynj.gov" - } - }, - { - "chainId": 101, - "address": "13cbpw6uN6wXVaQk6ngedAErceLLhyo1mgzoDpoUgCJE", - "symbol": "PHISHINGSCAM", - "name": "PHISHING SCAM TOKEN, PLEASE IGNORE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/13cbpw6uN6wXVaQk6ngedAErceLLhyo1mgzoDpoUgCJE/logo.png" - }, - { - "chainId": 101, - "address": "C2zLCAAKBJ94tDNh1kmDir7ddMPZTutKoLtaweddTbLC", - "symbol": "BREEZE", - "name": "Island Breeze", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Prime3vil/Island-Breeze-Token/main/logo.png", - "tags": ["general-token"] - }, - { - "chainId": 101, - "address": "Dg7p7c3AYyPyGvXcntPb1rd8CrbTY3TtfqDkAVtWEG2T", - "symbol": "HEYC", - "name": "Heytens Coin", - "decimals": 0, - "logoURI": "https://github.com/TuxSudoX/crypto/blob/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FqqCbh6zuGJveheZeJwUj4nW1s4PiLFgjkEzCaKhoEkK", - "symbol": "JRSY", - "name": "JerseyCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mjsantos00/sol-project/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "96SAxVXhnL2AVsL1bUGExuuqGojjgUWTAudoZQQPnK8N", - "symbol": "SPELL", - "name": "SPELL", - "decimals": 9, - "logoURI": "https://arweave.net/K1VORgjVa_ZugwgH6lr2YNCBhFT_rw-QyEiIYzOEuMc?ext=png", - "extensions": { - "twitter": "https://twitter.com/solwitches", - "website": "https://sol-witches.com/" - } - }, - { - "chainId": 101, - "address": "6AJAV7o7SYLbmkTWhSAEGPzUKBHbuBtQb2i3ktPgCfRW", - "symbol": "SHC", - "name": "SherlCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Flowdawan/SherlCoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EtgneRQETSDbjpAadZhoZ9uU6XjE8HNmvRgJAzmByQRW", - "symbol": "SOCIAL", - "name": "Social Coin", - "decimals": 7, - "logoURI": "https://raw.githubusercontent.com/OurSocialCoin/SocialCoin/main/logo-socialcoin-256x256.png", - "tags": [ - "Community-token", - "Social-token", - "MetaVerse", - "DeFi", - "Payment" - ], - "extensions": { - "reddit": "https://www.reddit.com/user/Social_Coin", - "telegram": "https://t.me/SocialCoinNews", - "twitter": "https://twitter.com/SocialCoin3", - "website": "https://oursocialcoin.org/" - } - }, - { - "chainId": 101, - "address": "DDpPE1qBRLFfKYnmaGgnimSXNX3cYhRNBe5r8AC9tYRF", - "symbol": "TIDAL", - "name": "TIDAL Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/nicholhai/crypto-tidal/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "At5j3zhbEj8mfFsSy1MPbjVhrX2uNmRMPEDZiyFcETNX", - "symbol": "BRWNDO", - "name": "BRAWNDO", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/At5j3zhbEj8mfFsSy1MPbjVhrX2uNmRMPEDZiyFcETNX/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CvNLK13TUk8WymQgqy2VcLEtpcJYnyAGx1Mt9q3Syt7a", - "symbol": "EMBLA", - "name": "Embla token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Kakkokakko/embla/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8eziEdHtKbc6FPPmuSpRCv1JbaKv7Hi5gLu5yLw49iCz", - "symbol": "LOKI", - "name": "LOKI", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/lokiandshrody/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2K18DgTTRqdGdwLHFgfZabH3FWyoMGeTeS1fdoWMsYBS", - "symbol": "DRL", - "name": "DUARTE Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/LeoDuar/crypto/main/Logo-01.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Guuhj9TgQHV8A78UE4vKYBXN9QdQHHxUi4WxKU5QSAaL", - "symbol": "KENTOKEN", - "name": "Ken Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/hacksider/kentoken/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "qJFde4hmV2cARNyUxvhJN5QxJZU5KA3XSzNzjNUmC8r", - "symbol": "SCTC", - "name": "ScoutCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/frankie2times/crypto/main/555-5552141_easy-to-draw-boxer-dog-hd-png-download.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5aGhhs5umCgzyztWCQQ4KwCHu3g3FhMhTSWH1xuxDByr", - "symbol": "Maff", - "name": "Maff coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/conthegreat/crypto/main/maffcoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EhP5wbt4Ew9N6vnr72KVw2QpARiVkgZHpfazx3ND9V6J", - "symbol": "ucm", - "name": "Cum Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/andevcrpt/crypto/main/a90378c5210b4c7988a8d91dc6ef4396.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "21tkNLD7kMNXmbejHsPwpuVmMfdxM3qgmpvxvHc1P9i2", - "symbol": "BGLEV", - "name": "Bulgarian LEV Crypto", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/hamcreation/crypto/main/BGLEV-logo-big.png", - "tags": [ - "social-token", - "community-token", - "reward-token", - "utility-token", - "nft" - ], - "extensions": { - "description": "Bulgarian LEV Crypto Currency (blockchain, independent from the official BGN currency). IPFS : bglev-crypto.coin", - "website": "https://gateway.pinata.cloud/ipfs/QmVkteQriYAKt46CN7K6paqhQ3q2ECMs3ehGtPhW5jWcaQ/" - } - }, - { - "chainId": 103, - "address": "AGijTbeHy2FKngd42uzBNjb6dM27bvL1yt7YN8gu7eLB", - "symbol": "OLVCD", - "name": "Olives Code", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AGijTbeHy2FKngd42uzBNjb6dM27bvL1yt7YN8gu7eLB/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "652wypzKa3vewqezFy8rai2GRsqJnGGsMn8VnsGjQPCN", - "symbol": "ITAC", - "name": "ItaCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/masaki-itagaki/crypto-itacoin/main/itacoin.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "D7dNESwNwJwR4rGJ1PkdKDzGe4TSe5e3ZphB9Xq6JU6i", - "symbol": "MANSA", - "name": "MANSA MUSA TOKEN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jakin2021/crypto.mansa/main/logo.png", - "tags": [ - "NFTs", - "entertainment-token", - "sports-token", - "social-token", - "networking-token", - "music-token", - "currency-token", - "Multipurpose-token", - "metaverse-token", - "community-token" - ] - }, - { - "chainId": 101, - "address": "DyQSsdD6zEo6LeWYdQPdtNHTCzH1cL4py44BMBfwEkR6", - "symbol": "ALY", - "name": "AleksYarn", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/zaghloulegy/alekyarn-token/main/this.png", - "tags": ["community-token"] - }, - { - "chainId": 101, - "address": "2cQcEUZA3GAQftMYKjPfDfyjwr9wzcNphnFQXn2XXha8", - "symbol": "MNZT", - "name": "Meta NZToken", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/jreMNZT/cryptoken/main/Mk1.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2ueBZoDVju9NwKL9uj1PPz8bT3TJJrDEqwrzRCCHJSAY", - "symbol": "solMNZT", - "name": "sol MNZT TOKEN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/jreMNZT/cryptokeningham/main/doge.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "H1kUP4Duno4pKJJ7bWjvvHo1fcAY6YYXy1WYXcsxVUeB", - "symbol": "ALFA", - "name": "Alpha Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/GoatWick/Crypto/main/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "DSkUNkp3XGHyBELatc13KAqgyQxA83wn6N3tEGQ42s3q", - "symbol": "IZZY", - "name": "IZZYKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/KFARSH/IZZY/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4UpRFwry9tgRnNBTxgRB7zDhGPbuoxgYmy4QAxvz7uBV", - "symbol": "BCTK", - "name": "Black Cat Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/LordKlaus/mytoken/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GfkaneG3grLAYpqrjb2FQnbkRKWGRBL14S9uB33XR9Xj", - "symbol": "QTS", - "name": "Quantasec", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/Terrahasher/crypto-logo/main/crypto%20logo%20quantasec.png", - "tags": ["security-token"] - }, - { - "chainId": 101, - "address": "FVJsaXLQfpHHfn22nzhmCzvbaiCZfXBgTM18yiZ7G9oR", - "symbol": "SWMB", - "name": "Swaimbux", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/doodmeister/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7e4ESDEv6bgXBAv1Qxvfq1gZNbU23f7WAtxcRXCYWgs6", - "symbol": "HRZN", - "name": "Meta Horizons", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mimam8/Crypto/main/Logo.jpg", - "tags": [ - "NFT", - "gaming", - "Community-token", - "Social-token", - "MetaVerse", - "Payment" - ] - }, - { - "chainId": 101, - "address": "13V5LqwdTUBZgJbyUe34nfqPYTwvB5gHigrKpDKyRB3", - "symbol": "XPNS", - "name": "XPNS Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/AidenCrippa/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "D6nfw6WVSRsoMx3SYYdEafHbuHkKaWnGQ6eczenKi7br", - "symbol": "LNMX", - "name": "LinuxFacil Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/linuxfacil-mx/solana-token/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3aA8QbAEyKDg2KJFXrStLZtjyYJzkVXYn8q5rLwosLUT", - "symbol": "OEQMS", - "name": "OmarCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/OmarEQMS/OmarCoin/main/OmarCoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "JBjxHjFKMBvRa45PvYDaEVfecdYaV9pkwjnVjt2uSLxh", - "symbol": "SBE", - "name": "Sombe", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/JBjxHjFKMBvRa45PvYDaEVfecdYaV9pkwjnVjt2uSLxh/logo.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "telegram": "https://t.me/Sombe_channel", - "twitter": "https://twitter.com/Sombefoundation", - "website": "https://sombe.org" - } - }, - { - "chainId": 101, - "address": "5j3xeUA37PRUu5yyXioyauteRRZYS1Xeit4HWEaxbMJ5", - "symbol": "ARKNT", - "name": "ARKNET", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/cyber-arknet/arktoken/main/cropped-arknet-1.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "facebook": "https://www.facebook.com/profile.php?id=100076065577875", - "instagram": "https://www.instagram.com/arknetcyber/", - "telegram": "https://t.me/+_HDz93MEOptkMGI0", - "website": "https://arknet.pro" - } - }, - { - "chainId": 101, - "address": "J2hrSRQsXWpDRDUks3HkC3k5NK1oUdzA2naSNbkp4UoB", - "symbol": "GDGC", - "name": "GDG Cloud Santiago", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/gdgcloudsantiago/gdgc/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6txogwrDcmKEj2mBz5KaSW82ytKPiPYGwcTcuHuEjATh", - "symbol": "SNAX", - "name": "Super Snax", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/karyoclasisfox/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CJitFpQgHVayFFQHh1e59nFVn5Lm27EtmfuAQQbeKQxk", - "symbol": "BOB", - "name": "Bob Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MajorScully/crypto/main/BobCoinIcon.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "TT4Fq7cZYM72So5px8jY9y2F9MER4YyMFCC1R6yDoVn", - "symbol": "SGTBK", - "name": "Burk Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jbburkhalter/crypto/main/Sgt.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "A6JVLMAjR1aeCfz3X2z4vVQ9GafYWVT75tC5V5qefja2", - "symbol": "BULB", - "name": "BULB Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/A6JVLMAjR1aeCfz3X2z4vVQ9GafYWVT75tC5V5qefja2/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/9NMDkGdetE", - "instagram": "https://www.instagram.com/bulbappio/", - "medium": "https://bulbappio.medium.com/", - "reddit": "https://www.reddit.com/r/bulbappio/", - "twitter": "https://twitter.com/bulbappio", - "website": "https://www.bulbapp.io/" - } - }, - { - "chainId": 101, - "address": "JqP79NdF3uqiaceeuYEsNufMy93bTM5zBtiRczjg4b7", - "symbol": "LOW", - "name": "Aqua Zoya", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Emrys1111/Crypto/main/logo.PNG", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2McdqcKvog5mv3VuEB8iGdCqCxVE9SQWrANXbVJMtWbq", - "symbol": "SRSDS", - "name": "Star Seeds", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/moulder29/Crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5sPXiVGaK2Uu2kbEgJ3U4ftpRouhg49ebF6zbsxwBMwC", - "symbol": "BPC", - "name": "BOUSPAM COIN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/bouspamcoin/crypto/main/logo.png", - "tags": ["community-token", "social-token"] - }, - { - "chainId": 101, - "address": "HvB8AK6NaVbLb6AxxCXuK8WrExFhMt3y8f2FbVGR18zW", - "symbol": "AERO", - "name": "Airplane", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/TuznaSova150/Crypto/main/Airplane.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9me5u1aCBzV8VEgE8Rp1NrD9SrRDKYaDwYjgMjEuFjqo", - "symbol": "MICN", - "name": "MihirCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MihirSahu/MihirCoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "A9YU1GzfeN77Z59jaDP51i1ZdXyDUheCGEfLa6tR5coX", - "symbol": "TBUX", - "name": "TruckenBucks", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/A9YU1GzfeN77Z59jaDP51i1ZdXyDUheCGEfLa6tR5coX/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "2uwnrFSF2czXtUgVZVXpAhdHuBCYcawkxdJaTFWXQPFa", - "symbol": "SJN", - "name": "SJN COIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/shenjianan97/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DVQJvpzxNS6sCPa1AAKKV24YkvQtveHKH9uEYDJ2NyPf", - "symbol": "ARVX", - "name": "Arvix Coin", - "decimals": 0, - "logoURI": "https://avatars.githubusercontent.com/u/15823883?s=400\u0026u=01e5237b6ed37d8b2e142c02688ed3c38c6d62ac\u0026v=4", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BebGokMwTrFp2wRV4Z5CftVq7pvgMbj176VND3vTVSKJ", - "symbol": "GAPE", - "name": "Gapes on Sol", - "decimals": 9, - "logoURI": "https://arweave.net/9XlB-rI0RiFtophrUQkw8Rj_H9Gqn3yK0j8NXy7zIyA?ext=png", - "extensions": { - "twitter": "https://twitter.com/0x_apes", - "website": "https://gapesonsol.com/" - } - }, - { - "chainId": 101, - "address": "Cx7gB3yZxhNab6nPwxRcdnEmbV2crkaR5ncuZrUsjaXa", - "symbol": "PNTRc", - "name": "Panter coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ladja73/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "36iKkbRbZcBXrKcpN75X9zrcvgpcGKmGZ8kgq1XnrxaF", - "symbol": "CIR", - "name": "Circuit", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/UNTOCHABLE247/circuit/main/Circuit-Crypto-Logo.png", - "tags": ["social-token", "community-token", "connection-token"] - }, - { - "chainId": 101, - "address": "BkcfKKAFjFET3GW8Ph4WcN84SMwpD2wjNpJbDXrGvHq7", - "symbol": "APES", - "name": "APE Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/evilspray2/cyptomain/main/logo2.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9LmHXaboGRjE4VCxo8uUQFHxG97TfdPn97g48Fi87RvW", - "symbol": "FFOX", - "name": "Flimsy Fox Coin", - "decimals": 7, - "logoURI": "https://raw.githubusercontent.com/Flimsy-Fox/FFOX/main/Flimsy_Fox_Coin275x275.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EBKxGA78dXoUNvihNa5ufajkY7c8gJdPT5nvNBc17SQR", - "symbol": "LUND", - "name": "Lund Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/arkalon76/token-lund/main/assets/logo.png", - "tags": ["community-token"] - }, - { - "chainId": 101, - "address": "CeEgpp7uQmw8S25s1iMLrdv28oC7SGYM5ynNQU8PGbyo", - "symbol": "UNKN", - "name": "UNKNWN SOCIAL TOKEN", - "decimals": 7, - "logoURI": "https://raw.githubusercontent.com/unknwn1993/token/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FFQnGJkWtaSjpUTQVqEWPQwSPBC5EvTBWLR5nyE43rWn", - "symbol": "OKDT", - "name": "Oskadon't Team", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/derysendiry/logo/main/logo.png", - "tags": ["meme-token"] - }, - { - "chainId": 101, - "address": "2bynPcARe3D3FmvdCukCxhrvuAu5EaBwxNC4m5MA5dGF", - "symbol": "MMST", - "name": "MEDIAMARKT SOCIAL TOKEN", - "decimals": 7, - "logoURI": "https://raw.githubusercontent.com/unknwn1993/MMTOKEN/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DPh8nC4TxcJEyTUmTDtvkj4o7rkDg9o9v2x3Yd3DXbCL", - "symbol": "WATER", - "name": "Stingrays Water Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DPh8nC4TxcJEyTUmTDtvkj4o7rkDg9o9v2x3Yd3DXbCL/water.png" - }, - { - "chainId": 101, - "address": "J27HeESs7iFotiCw7jZXx4mtM5iqEwXawTHnEbUGJEC3", - "symbol": "CRNKYB", - "name": "CrankyBird", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/citizendope/crankybird/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "J5zREi94yfDQgkeZXvNANMRvQV6gdGd8UGcmBfnj1nSr", - "symbol": "WOMBAT", - "name": "Wombat Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/J5zREi94yfDQgkeZXvNANMRvQV6gdGd8UGcmBfnj1nSr/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/snft2022", - "website": "https://solana-nft.io/" - } - }, - { - "chainId": 101, - "address": "4K1MYRAoD6X87N6En3u5LVP2n3uHP3arZ6D5aV78nqo1", - "symbol": "SHRIMPO", - "name": "Shrimpo Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/shrimpotoken/logo/main/logo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5Zk9zWQ1VJn19snoJFg3qJqjCHT6VSExqYJvjXMCKVAT", - "symbol": "MAITO", - "name": "Maitoken", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5Zk9zWQ1VJn19snoJFg3qJqjCHT6VSExqYJvjXMCKVAT/logo.png", - "tags": ["meme-token"] - }, - { - "chainId": 101, - "address": "FLUX1wa2GmbtSB6ZGi2pTNbVCw3zEeKnaPCkPtFXxqXe", - "symbol": "FLUX", - "name": "Flux", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FLUX1wa2GmbtSB6ZGi2pTNbVCw3zEeKnaPCkPtFXxqXe/logo.svg", - "tags": [ - "web3", - "decentralized-cloud", - "masternodes", - "mineable", - "proof-of-work" - ], - "extensions": { - "description": "Flux is the cryptocurrency powering the Flux Ecosystem, including decentralized computational network. Flux gives users both institutional and private control over their cloud infrastructure in a decentralized manner.", - "discord": "https://discord.io/runonflux", - "facebook": "https://www.facebook.com/groups/runonflux", - "github": "https://github.com/runonflux", - "instagram": "https://www.instagram.com/flux_runonflux", - "linkedin": "https://www.linkedin.com/company/flux-official/mycompany", - "medium": "https://fluxofficial.medium.com", - "reddit": "https://www.reddit.com/r/RunOnFlux", - "telegram": "https://t.me/zelhub", - "twitch": "https://www.twitch.tv/runonflux", - "twitter": "https://twitter.com/RunOnFlux", - "website": "https://runonflux.io", - "youtube": "https://www.youtube.com/channel/UCphbdfb1MXYgUPsdhQPcnGw" - } - }, - { - "chainId": 101, - "address": "GDenszZiAqmQGFochanKiYHgNcQ6hoi1xEkkgPrGvdvM", - "symbol": "MCR", - "name": "Metacar Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Jasil123/metacarlogo/main/mcr.png" - }, - { - "chainId": 101, - "address": "3YmeCnMWgGM4tyU48ZdhRkw1Ni1hf8t9ykVWFtHmD1Vf", - "symbol": "OSI", - "name": "Osie Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/oosiep/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BsJnmL4fKxVwmX6hGhQ2m22hAzx9EipM1NL4ei5zRvmP", - "symbol": "RJBAGT", - "name": "RJBitcoinAdvisoryGroup Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/RJBAG/crypto/main/logotokentest.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4gcuaQbM9MFJDzKbUBH6oZQTDoCL6WczxAJkvJyGw2Am", - "symbol": "BLUE", - "name": "BlueCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/bluetelecomsjames/Crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6h7hNagVUC9Gsd5TwKaNV3NS7GhQDM7Jp9faASyzpEdt", - "symbol": "ANI", - "name": "AniGattina", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6h7hNagVUC9Gsd5TwKaNV3NS7GhQDM7Jp9faASyzpEdt/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BwcoRTNgsvMP4yWQpCASBaaZ2FLesnEMAQAf944zSNyM", - "symbol": "AH", - "name": "AIRDROP HUNTER", - "decimals": 1, - "logoURI": "https://raw.githubusercontent.com/derysendiry/air/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9UdAwhC6Qx5kStsS5p1C3uvvphj1Nh35MFtpKUswwjDR", - "symbol": "TYC", - "name": "The Yeet Coin", - "decimals": 1, - "logoURI": "https://raw.githubusercontent.com/YeetTeamYT/The-Yeet-Token/main/unnamed.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EzyqGBM4itZN5FG5TC21y9w7WZuxS8zLNAjLZ9cKprHA", - "symbol": "QRS", - "name": "Quercus", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/zaghloulegy/Quercus-logo/main/LOGO.png", - "tags": ["community-token"] - }, - { - "chainId": 101, - "address": "FFBZ7r8Mvk1tSuWRdytmWSo5sJJCVwsAaMbN7m5bD6mR", - "symbol": "BCC", - "name": "BabyChaCha Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FFBZ7r8Mvk1tSuWRdytmWSo5sJJCVwsAaMbN7m5bD6mR/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Yx5J1Y5eawe7DjiysJEp5xWMdx8ukAHLk7f9eCRXGnp", - "symbol": "HELL", - "name": "HellCoin", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Yx5J1Y5eawe7DjiysJEp5xWMdx8ukAHLk7f9eCRXGnp/logo.png", - "tags": ["community-token"] - }, - { - "chainId": 101, - "address": "DYjQEFzLKXdbJ15cTq7qfRtawhWJrJ3osbhkP1CG6egP", - "symbol": "SCT", - "name": "Solcitizens Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/leastgs/SCT/main/logo.png", - "tags": [ - "social-token", - "community-token", - "reward-token", - "utility-token", - "nft" - ] - }, - { - "chainId": 101, - "address": "gWBSgzhHqD1iLNk6MhuuuAvSZNtWzKJNSu8PSwuF2XP", - "symbol": "PCN", - "name": "Pecun", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/janlampert/crypto/main/pecun_logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DwPS8FxXno1roKzqXNPHyphvTZJvFJP2xzAyevdFjZiz", - "symbol": "TUMC", - "name": "The Ultimate Meme Koin", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/nodnoddk/token/main/948189841110.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GtTThgxVhM8bniQ3rgXcrNhuMJTtTmrdPRiYmMUzfKZh", - "symbol": "LAB-R", - "name": "Lab-R Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jtomacic/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HKMyGWVaSmdsYDXTcVYLEnkAN8RF975gRBjNPf2BdtK9", - "symbol": "IGNFTHKM", - "name": "Instagram NFT DANIELLEROBAY 1", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HKMyGWVaSmdsYDXTcVYLEnkAN8RF975gRBjNPf2BdtK9/logo.png", - "tags": ["nft", "instagram"], - "extensions": { - "website": "https://rocketsola.com/nft/instagram/HKMyGWVaSmdsYDXTcVYLEnkAN8RF975gRBjNPf2BdtK9" - } - }, - { - "chainId": 101, - "address": "FXgz4aZtrUYdbqWA2boPzQE4J9hfHTGYB31e7sWf4LmL", - "symbol": "IGNFTFXG", - "name": "Instagram NFT BIGSTRAYWOLF 1", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FXgz4aZtrUYdbqWA2boPzQE4J9hfHTGYB31e7sWf4LmL/logo.jpg", - "tags": ["nft", "instagram"], - "extensions": { - "website": "https://rocketsola.com/nft/instagram/FXgz4aZtrUYdbqWA2boPzQE4J9hfHTGYB31e7sWf4LmL" - } - }, - { - "chainId": 101, - "address": "5oZ4GKDJyCGbrjji1u1Q4UUEgfzC7szVv4S47KTKDVCX", - "symbol": "IGNFT5OZ", - "name": "Instagram NFT SPINZHOODRICH 1", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5oZ4GKDJyCGbrjji1u1Q4UUEgfzC7szVv4S47KTKDVCX/logo.png", - "tags": ["nft", "instagram"], - "extensions": { - "website": "https://rocketsola.com/nft/instagram/5oZ4GKDJyCGbrjji1u1Q4UUEgfzC7szVv4S47KTKDVCX" - } - }, - { - "chainId": 101, - "address": "D3i6WzaYZB7k6DLj9tJPCTyFgj6rWG2ToFQEfGHFbhDv", - "symbol": "FBNFTD3I", - "name": "Facebook NFT VALIANT CREDIT REPAIR SERVICES 1", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/D3i6WzaYZB7k6DLj9tJPCTyFgj6rWG2ToFQEfGHFbhDv/logo.png", - "tags": ["nft", "facebook"], - "extensions": { - "website": "https://rocketsola.com/nft/facebook/D3i6WzaYZB7k6DLj9tJPCTyFgj6rWG2ToFQEfGHFbhDv" - } - }, - { - "chainId": 101, - "address": "5Z52N5N4W9oc3a7kTNN3PBxPSFnRwNR7UfK8f6b5ktfE", - "symbol": "CMN", - "name": "Cloud Managed Networks Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/nicholhai/cmn/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "48BUK3fXHXyhzAMa47J2KMLS8GZ4ZbATTvQvnb96PUyD", - "symbol": "WFC", - "name": "WooF Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/maxwolfen/crypto/main/woof.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AtaL8jRE9J9vAU1MZNb89WsnDewYiFxkK5kAsxx7BAGT", - "symbol": "ZIPY", - "name": "ZIPY COIN", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AtaL8jRE9J9vAU1MZNb89WsnDewYiFxkK5kAsxx7BAGT/logo.png", - "tags": ["community-token"] - }, - { - "chainId": 101, - "address": "CHEMvP3o9ejksqQFwUz5o2HgthTge1bReEW55vRiZbcM", - "symbol": "CHEM", - "name": "Chemistry", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CHEMvP3o9ejksqQFwUz5o2HgthTge1bReEW55vRiZbcM/logo.png", - "tags": ["chemistry-token", "the-chemical-trade", "capped", "deflatory"] - }, - { - "chainId": 101, - "address": "CPRe9qCgVfoSHgNGAzWrJSduv9TBdvaHSmyT5NGqEhjq", - "symbol": "STFGHTR", - "name": "Starfighter", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/bomfricketick/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DwZaJ7y9uJJESB3vtbPo6nkTPwCkxNu2WXNnVCBwCxcp", - "symbol": "RBT", - "name": "Reboot", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DwZaJ7y9uJJESB3vtbPo6nkTPwCkxNu2WXNnVCBwCxcp/RebootLogo.png", - "tags": [ - "utility-token", - "community-token", - "meme-token", - "social-token" - ], - "extensions": { - "description": "Reboot Token is a Community driven token, this token is not structured after a CEO for its future, instead it has a Community Driven development that provides the control for the development process of the token, every update will be voted on and decided by the community.", - "reddit": "https://www.reddit.com/r/RebootToken/", - "twitter": "https://twitter.com/RebootToken" - } - }, - { - "chainId": 101, - "address": "mCaKentpBgRwisk5zUtx6dfRYkCqMyTKDjjqSDp97mk", - "symbol": "MCAKE", - "name": "Meme Cake", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/mCaKentpBgRwisk5zUtx6dfRYkCqMyTKDjjqSDp97mk/logo.png", - "tags": ["utility-token", "memecake", "social-token"], - "extensions": { - "discord": "https://discord.com/invite/WFkRssvNtW", - "twitter": "https://twitter.com/realmemecake", - "website": "https://memecake.io/" - } - }, - { - "chainId": 101, - "address": "EowcKKxuSpJAr863Tgg5HGpA81A51PLHsLsZffDY1Fh3", - "symbol": "POOP", - "name": "POOP Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/LeM0-Dev/crypto/main/logo.png", - "tags": ["social-token", "community-token", "poop"] - }, - { - "chainId": 101, - "address": "AStRo6zTp66EWgpH4SDMUF7F3eeA62sxkE9ukYbfQ1rZ", - "symbol": "ASTRO", - "name": "Astro", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AStRo6zTp66EWgpH4SDMUF7F3eeA62sxkE9ukYbfQ1rZ/logo.png", - "tags": ["space-currency", "solar-system", "and-beyond"] - }, - { - "chainId": 101, - "address": "82dR2RF6DiYgxV4UAN6qrQQnKHtmyGrWfesmomhjNSe5", - "symbol": "ESC", - "name": "Escape", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/82dR2RF6DiYgxV4UAN6qrQQnKHtmyGrWfesmomhjNSe5/logo.png", - "tags": [ - "utility-token", - "social-token", - "metaverse-token", - "game-token", - "nfts" - ], - "extensions": { - "website": "https://escape.bilalbayrak.com" - } - }, - { - "chainId": 101, - "address": "7nwbJ3mPLDp3wGwgRUgnPXHWiy1ATT4XZHGJki6RajHt", - "symbol": "SHPTCL", - "name": "Shpetaclu", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jpe17/crypto_shpetaclu/main/SHPETACLU_1_11zon.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HxSf6BD7j7Xz4tQdeAGnnv84Tcuxfq47ebXvyQVUib7a", - "symbol": "DECT", - "name": "DEC Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mgarofano80/dect/main/dec-color.png", - "tags": ["cybersecurity-token"] - }, - { - "chainId": 101, - "address": "GD4uCKDGDDvUNTioSzgFqPzWiaQ7k1xaypYSoqzNAnDM", - "symbol": "BOC", - "name": "Burnout Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/vitkhab/burnout-coin/main/logo.png", - "tags": ["meme-token", "community-token"] - }, - { - "chainId": 101, - "address": "8thP1tHp4wU81umSVZiM8TcNSh5FVbD1NGDJFxmEUqNb", - "symbol": "STZ", - "name": "SolTropez", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8thP1tHp4wU81umSVZiM8TcNSh5FVbD1NGDJFxmEUqNb/logo.png", - "tags": ["social-token", "SolTropez", "SaintTropez"] - }, - { - "chainId": 101, - "address": "BfjEU4wuNnfoidPfncBBeYSsNBLXGacDiduTv4gTchp8", - "symbol": "N8BUX", - "name": "natebucks", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/bionicnate/crypto/main/n.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HdpzynkmhceixStgZSbeh8p9avpWGJCHRXfTTfyiXQPH", - "symbol": "UBIK", - "name": "UBIK", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HdpzynkmhceixStgZSbeh8p9avpWGJCHRXfTTfyiXQPH/logo.png", - "tags": [ - "utility-token", - "ubik-token", - "social-token", - "community-token" - ], - "extensions": { - "discord": "https://discord.com/invite/zJqKvMRQyZ", - "telegram": "https://t.me/ubikcapital", - "twitter": "https://twitter.com/ubikcapital", - "website": "https://ubik.capital" - } - }, - { - "chainId": 101, - "address": "275Q9ort43hGq3AWf4DNTT2QyyB3Fn3pWK6RGL9ymm1c", - "symbol": "MYT", - "name": "MayoToken", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/coderus909/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7dXEQ4QJMdSD5CUJmMKd4HmPg72dMWmfAC3REicXYqUE", - "symbol": "MIC", - "name": "Mysteries in Colour", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/nicholhai/mysteriesincolour/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "mf7oAhmvRCSkhPsFzaBEZDwTp3wTPssdjTfUVgpxx4V", - "symbol": "NETRA", - "name": "Netra", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/mf7oAhmvRCSkhPsFzaBEZDwTp3wTPssdjTfUVgpxx4V/netra-logo.jpg", - "tags": ["NFT", "De-Mu", "music-token"] - }, - { - "chainId": 101, - "address": "F52S4nbs95qVTzvK37q8skqu6svKvNvwY36NFCWwxEmj", - "symbol": "KRMK", - "name": "KremKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Coffeecan5577/KremCoin_Repo/main/KremCoin_Model.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "24ip6uLT9KmVdVd6DUydG6HMkmHM59Yxt851iCBWvyfQ", - "symbol": "TREE", - "name": "TreeCoin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/ZettaTree/treecrypto/main/tree.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AwyP3rbLxexvpbNRp3Zm7EM7htLDqzHmysCxfMyUk47g", - "symbol": "MIMM", - "name": "Mimma Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mnarvaja/crypto/main/Screen%20Shot%202021-12-19%20at%201.57.19%20PM.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6ADxaYzyghezFcQVxarQ7wYvfiDvxwRRuvpLXbEiNxFm", - "symbol": "Sgrios", - "name": "Sgriosbh Scrivere", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/DeMeoNaise/Sgrios/main/SGRIOS3.png", - "tags": ["literary-token"] - }, - { - "chainId": 101, - "address": "6PBEGe6YaKmDPw1Ebza823SuvQWQgGZ2NTANBgaKdxHq", - "symbol": "GOLEM", - "name": "Golem", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6PBEGe6YaKmDPw1Ebza823SuvQWQgGZ2NTANBgaKdxHq/logo.png", - "tags": ["Community-token"] - }, - { - "chainId": 101, - "address": "BkT8smQpf2dw3V3BVoN4pMp6QEDNWKSqDDpLBj3WtNab", - "symbol": "MXC", - "name": "Max Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/maximilianried/max-coin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6WaJfGoV2C5GsjjzkpsfPzkcadbXL1qVm3LGzS4fSBqs", - "symbol": "CHAZ", - "name": "Charlie Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mr-sc0/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4sG8BMvgY3JwnX4EGUCPjWxpvB8hKASwNaM2z8wcQz8X", - "symbol": "ICN", - "name": "Icona", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/CryptoKnight360/Icona/main/icona_token.png", - "tags": ["utility-token", "icona", "social-token"], - "extensions": { - "website": "https://icona.eth.link" - } - }, - { - "chainId": 101, - "address": "CgHz25LxRxPxQuYYyyfPob8KT6Enqr2k7EA735jA9SNm", - "symbol": "GC", - "name": "Greedy Crocodiles Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/MrHibo/Token/main/Logo.png", - "tags": ["NFT"] - }, - { - "chainId": 101, - "address": "H4aXNzXw3eZxfdKrAzGx9RERf3vbQMgMoRmGtsKtnPbg", - "symbol": "PBRC", - "name": "PobarCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/zlorgoncho1/pobarcoin/main/logo.png", - "tags": [ - "utility-token", - "community-token", - "meme-token", - "social-token" - ], - "extensions": { - "twitter": "https://twitter.com/SmartDevAfrica" - } - }, - { - "chainId": 101, - "address": "FW4wv9f6t112H5Fv4mRioKG4NshjwiXCfmYnVWKL5kpP", - "symbol": "OPHI", - "name": "Ophanim", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MartinSkerli/Crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GiDgqNhRnaKsbUW9KK7YiayobVAEZMnXN8X2NFEXQaJY", - "symbol": "KWSQ", - "name": "KwadSquad", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/x0ff001x0ff001/kwadsquadx0ff/main/kwadsquad.png", - "tags": ["social-token", "KwadSquad"] - }, - { - "chainId": 101, - "address": "8m4kgdkqWooFTtJYvTzw3bZyaaoM4Bjp1Htwdwbqjasb", - "symbol": "SKALA", - "name": "Skala Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/cgsnascar/crypto/main/taco-155812__340.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Cnk1PySkhuS2NBUEbAe3fy8pBsfFzgTHDPmMCUxYq11J", - "symbol": "JEFFZ", - "name": "Jeffrey token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/minip91/jeff/main/logo-min.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7Y7jWR3YMQZDmN6agqKjX4TMbXnQDYtSuVeyukcdi2KR", - "symbol": "DFC", - "name": "Deptford Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/deptfordio/coin/main/logo.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "EXFmJEbsc5CaG5Vz9S5bWP8qWELo3Vu3Bssi9pRFQHjQ", - "symbol": "JOLY", - "name": "JollyCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/2420487/JollyCoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4wkjHY2UnuDGPwwPDwVz6Sux7gW6zhkUT6fVvhsFJ2Ub", - "symbol": "MATC", - "name": "Metarts", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4wkjHY2UnuDGPwwPDwVz6Sux7gW6zhkUT6fVvhsFJ2Ub/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9a7bTQWsGTCA7NE6hz3DSVxTBz9Ag7tdhE2e3Qrqt7E6", - "symbol": "AC", - "name": "Alpaca Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/AlpacaBi/AlpacaCoin/main/logo.png", - "tags": ["social-token", "community-token"], - "extensions": { - "description": "Alpaca Bi's Cryptocurrency" - } - }, - { - "chainId": 101, - "address": "DozWpi3Y3nzwFHmwzdsrzSxUQfN9NCH4BTbh5kJeGku3", - "symbol": "WUN", - "name": "WhaddupNow Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DozWpi3Y3nzwFHmwzdsrzSxUQfN9NCH4BTbh5kJeGku3/logo.png", - "tags": ["social-token", "community-token"], - "extensions": { - "blog": "https://news.whaddupnow.com/", - "website": "https://www.whaddupnow.com/" - } - }, - { - "chainId": 101, - "address": "5d93mEXJP2LTNLtbysbayVdw86JtKGaSHKVb9jGkzDGB", - "symbol": "ATHT", - "name": "atheist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/guterboy67/crypto/main/athiest1.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EuD5L5XSYKzyDC1YyYzmoWC8gmJhpEh2vMj4f8LeRW8r", - "symbol": "NPC", - "name": "NPC DAO", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EuD5L5XSYKzyDC1YyYzmoWC8gmJhpEh2vMj4f8LeRW8r/logo.png", - "tags": ["meme-token", "community-token", "fair-launch", "dao-token"], - "extensions": { - "discord": "https://discord.gg/fDg529hq44", - "telegram": "https://t.me/NPCDAO_official", - "twitter": "https://twitter.com/NPCDAO_", - "website": "https://npcdao.io" - } - }, - { - "chainId": 101, - "address": "EdW4dQkTZ3QRioGDKmFckJyELiPyh8VcwioAJWG7C4X5", - "symbol": "SNDC", - "name": "Special Needs and Disabilities Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/boostmagento/sol-sndc/main/logo.png", - "tags": ["NFTs", "utility-token", "social-token", "community-token"] - }, - { - "chainId": 101, - "address": "39BGw1FfdTz8JmdwUp6m3HhXGZ15mJgjnMfrQHx2Ypx8", - "symbol": "CAT", - "name": "CloudAtlasTech Coin", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/trekk/Cloud-Atlas-Tech-Coin/main/logo.png", - "tags": ["utility-token", "social-token"] - }, - { - "chainId": 101, - "address": "7fnrumHA3xEYx95W14xbtN4RALCkTxCbuGYBkt7QvFyR", - "symbol": "GBC", - "name": "Gud Boi Coin", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/bryarpatch36/GudBoiCoin/main/GudBoiCoin.png?token=AQESZD22TA4SIEVKN74X3FTBX7NU6", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2JSYv4xhjQBHtCr59q7Z6wVqA5miodCwEW5Hb7fb8vEk", - "symbol": "KT", - "name": "KenjiToken", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Kenjisauce/Tokenkenji/main/tokenJI.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "J8exTiSqWM7AMoXYdiEKnz3fk6FybL2voLEE7uaqfFGA", - "symbol": "SHIB2", - "name": "Shiba Inu 2.0", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/shiba2-0/crypto/main/logo.png", - "tags": ["social-token", "community-token"], - "extensions": { - "description": "New projects coming!" - } - }, - { - "chainId": 101, - "address": "FMm7VB4wVBD13NKWZbK4QPiwjhKXyE3VxsHaepHZM9ve", - "symbol": "TFT", - "name": "TF Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/dgon-jd/tf-crypto-token/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8jZUz6DHJMFHM7zoZ9UH2JBqAMKs3YdAXV812aTBk8U", - "symbol": "NMT", - "name": "NetworkingMaurijn Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Maurijn1455/NetworkingMaurijnCrypto/main/Logo-500x500-px2-1.png", - "tags": ["social-token"], - "extensions": { - "website": "https://networkingmaurijn.com" - } - }, - { - "chainId": 101, - "address": "J4tV8qjZyzwsYhGmPREDEyehCusPwa7uYm3UssQ6X4A8", - "symbol": "GRUNT", - "name": "GRUNT Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/derysendiry/orang/main/logo.png", - "tags": ["community-token", "meme-token", "social-token", "DeFi"], - "extensions": { - "discord": "https://discord.gg/xsFxe2XV9z", - "twitter": "https://twitter.com/goonygoblins", - "website": "https://goonygoblins.com" - } - }, - { - "chainId": 101, - "address": "Dzsb9REsrxZ3cG6ucgvE1ATiWMawsRXeaDxDGZcL4gLx", - "symbol": "AURM", - "name": "Aurorium", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Dzsb9REsrxZ3cG6ucgvE1ATiWMawsRXeaDxDGZcL4gLx/logo.png", - "tags": ["Game", "GameFi", "Metaverse"], - "extensions": { - "description": "Questland Metaverse Game Token", - "website": "https://questland.io" - } - }, - { - "chainId": 101, - "address": "9ivAYGAPBZNsTc1Egu8Fdu2R65mvSB2TSKGsfEwYuT6M", - "symbol": "SMGC", - "name": "SMG Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Timothy7555/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DK2ssmuPBrwBBGxcGiLe7uX32SFTQoWN7D8hVueymuV5", - "symbol": "GEMZ", - "name": "Gematria", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/tomsclater/crypto/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7sFUYafvWaGKgDUyKviVKwLbCMxeZijaAiYPP4gB3fX", - "symbol": "TEA", - "name": "HonestTea", - "decimals": 0, - "logoURI": "https://github.com/CloudNomad/HonestTeaToken/blob/main/logo/TeaTokenBitPicMedium.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FSBAfYRaG2ZLch7fbBpNNtZbBRtT417Gb1WrUsHawNay", - "symbol": "TRSH", - "name": "TRASH COIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/TRSH-Coin/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HWkPx2HBVSMCUPzHqf2HqCt4zUbGbauhZCBMzTYsZJ3Q", - "symbol": "MWC", - "name": "Mr Wonderful Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/trevoroleary/SolanaCoins/main/MrWonderfulCoin.png", - "tags": ["social-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/kevinolearytv", - "website": "https://www.kevinoleary.com/" - } - }, - { - "chainId": 101, - "address": "Tjs2thHW1uJXPeBh61iPjZCNeyAwsZFbm9zkbDB4JYZ", - "symbol": "WXPT", - "name": "Wireless Xperts Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ArberKadriu/WXP-Coin/main/WXP%20logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8fJJiHdwnqoVbR8ncALXcPQUwm8HWztDZPjKN4zWL5Wx", - "symbol": "IGNFT8FJ", - "name": "Instagram NFT SOLKITTYNFT 1", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8fJJiHdwnqoVbR8ncALXcPQUwm8HWztDZPjKN4zWL5Wx/logo.png", - "tags": ["nft"], - "extensions": { - "website": "https://rocketsola.com/nft/instagram/8fJJiHdwnqoVbR8ncALXcPQUwm8HWztDZPjKN4zWL5Wx" - } - }, - { - "chainId": 101, - "address": "968saQ92NoC6zJN5eJfPmRQ52i7tt1uPVNKRHtmXU4gF", - "symbol": "GASC", - "name": "GasCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Gasgames/Crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GDspzEDR926EsGvb16Sa1xvgNtfVCEjke8A7MiKHkjXa", - "symbol": "JLLY", - "name": "JellyKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/antmananthony/crypto-/main/jellykoinlogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7CVKEVigLshD8hHtvJeyeg7WkBMDhviao2pombf6wBZ7", - "symbol": "TPIF", - "name": "TPIF Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ako5ta/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CZVZxuCWH7HhyBCzcNRDqFXRmee2S9rsNvWEectqmeHg", - "symbol": "GRAPH", - "name": "Grapheene Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CZVZxuCWH7HhyBCzcNRDqFXRmee2S9rsNvWEectqmeHg/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://grapheene.com" - } - }, - { - "chainId": 101, - "address": "dFJCQkXjY4myq5x3doEz6cGVGrDN2RXTr9LqGm74FyW", - "symbol": "DCZ", - "name": "DigiCoinZ", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/cubanitowolf/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FsmucuvSx62qKMiCHwRGyN9DcAKWdtsnhudsez45nev9", - "symbol": "LZSB", - "name": "Lazy Shiba", - "decimals": 15, - "logoURI": "https://raw.githubusercontent.com/Aniruddhchavda/lazyShiba/master/logo.png", - "tags": ["meme-token"] - }, - { - "chainId": 101, - "address": "2RejwZedYWpNY2GJGqjrbDbwwB63LtsSh3ioZmtUZiMD", - "symbol": "Y13", - "name": "YogsBUX", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Rayisken/Yogsbux/main/YOG%20LOGO.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2ekjfRstw9JDNbXqXF4QeSzFmB55Ho4Y2aLNCjUiqADr", - "symbol": "WISH", - "name": "Genie Tokens", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/The0ne23/coin/main/geniewishtoken.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "7vawu71vc4VeYtcfSGn5K9tGUgBhbRBtx1XHKksn9DiR", - "symbol": "NIMA", - "name": "Nimarena Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7vawu71vc4VeYtcfSGn5K9tGUgBhbRBtx1XHKksn9DiR/logo.png", - "tags": [ - "minable-token", - "game-token", - "metaverse-token", - "social-token", - "utility-token" - ] - }, - { - "chainId": 101, - "address": "2HTmf6SG39Jen3Gi3CThPQntDC1UfvjW4UHtoDE4B3wT", - "symbol": "SOPH", - "name": "SOPHIAP", - "decimals": 0, - "logoURI": "https://github.com/jplscnc/crypto/blob/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CQbjDCxjuZGEBX4KVuX6dhiz8H7Dw1tp65k5o8zDNitB", - "symbol": "FPVSWE", - "name": "FPVSweden Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/x0ff101x0ff101/FPVSwedenToken/main/FPWSWE.png", - "tags": ["social-token", "Facebook-Group"], - "extensions": { - "website": "https://github.com/x0ff101x0ff101/FPVSwedenToken/blob/main/README.md" - } - }, - { - "chainId": 101, - "address": "2YbrpvGMaN9fQJZUKLGfzGsLUmQrEzYQtwa1GNCq5QeL", - "symbol": "EMU", - "name": "Emu Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Scoobydoohbruh/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EkzmEVHw8snd1B8LURvqQ4Pa59WF5eWRw7MyyFDqu8hx", - "symbol": "FRFI", - "name": "Freedom Finance", - "decimals": 0, - "logoURI": "https://user-images.githubusercontent.com/34078361/146739023-ce81f5b6-748c-4bce-9c37-230d79e94108.png", - "tags": ["NFT", "utility-token"], - "extensions": { - "discord": "https://discord.gg/zzdZx5aMfx", - "twitter": "https://twitter.com/FreedomDAO_", - "website": "https://freedom-dao.com/" - } - }, - { - "chainId": 101, - "address": "Fh7PGdaNgbWsHX7KpHaxqh2312fm3kYAiKgz4Jz8UcVA", - "symbol": "SLRM", - "name": "Solarium", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Fh7PGdaNgbWsHX7KpHaxqh2312fm3kYAiKgz4Jz8UcVA/logo.png", - "tags": ["Game", "GameFi", "Metaverse"], - "extensions": { - "description": "Questland Metaverse Game Token", - "website": "https://questland.io" - } - }, - { - "chainId": 101, - "address": "2HTSv3kYtXRxLmSqqUQSXYvhkC4MaX7Kdm52RUKaEt6i", - "symbol": "STRMSKR", - "name": "Storm Seeker", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/sinnx3/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9gmssDpdsg6e5hVSEXg97XBgB8kLDBuT2UAUGL8o2ynt", - "symbol": "ZHBC", - "name": "ZH Belch Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ZakBelchamber31/Crypto/main/ZHBC%20Logo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DSAfgM5VG1g5xhHCUTsS39AHPPGiFkLhy4hV1oTQA2Kc", - "symbol": "YRMUM", - "name": "Your Mum Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ZakBelchamber31/Crypto/main/Logo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8mmtCb7gye6cyKS3GCV63pi9CKi8BdwR3zyUny3nXDQM", - "symbol": "MOBY", - "name": "Moby Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/AlexZeller/Moby-Coin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HhswUjTDq9PNqnPfSP6hqYsfCk8HWRCy4gc7GKXjyUvC", - "symbol": "SORO", - "name": "SORORICO", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/maximilianried/token-resources/main/sororico.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BZwppVhZR7KEVnD5iRvtKNVVEJmjS7yHxkqGyawVn9Jt", - "symbol": "MAX", - "name": "Max Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/maximilianried/token-resources/main/max-token.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DatzLBo5nbKHe5fQmQMRNYEUz3HQsrK1amaHYyFLVgg8", - "symbol": "ZSK", - "name": "ZSK Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Henzelix/lucky-number/master/logo-zsk.png", - "tags": ["social-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/networkchuck", - "website": "https://networkchuck.com", - "youtube": "https://www.youtube.com/channel/UC9x0AN7BWHpCDHSm9NiJFJQ" - } - }, - { - "chainId": 101, - "address": "CxdbyB4y5T2WhrfT11y7N3K2jQAVDLHCFZMrvC8RKhfJ", - "symbol": "BROST", - "name": "BrunOst Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/maxmalmberg/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2ZP7ZAUUfM7mSkqdWNxUyeN1toMv8kE3QvdUkadQUrKZ", - "symbol": "LOST", - "name": "Slowly dying inside", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/nMiyu/Lost/main/Lost.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Bjw6uKN4RKpLJMBh84LfMRq9mTppFchQMCYiQra6crcV", - "symbol": "HLJ", - "name": "Ljevakovic Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/hassman88/hassman88/main/hlj.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Gz3u6eJaKEviYpPC5AwUziz891kNX76PNdsmJrnaNNY4", - "symbol": "SOULO", - "name": "SouloCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Gz3u6eJaKEviYpPC5AwUziz891kNX76PNdsmJrnaNNY4/logo.png", - "tags": ["utility-token", "NFT", "game-token", "GameFi"], - "extensions": { - "discord": "https://discord.gg/soulofox", - "twitter": "https://twitter.com/soulofoxnft", - "website": "https://app.soulofox.com" - } - }, - { - "chainId": 101, - "address": "Bjzj1YnTjENKAmY3pUUaMXSg4aoUHCJToWbz7MoaZsM8", - "symbol": "RUGG", - "name": "Real Ultramodern GPU Gold", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SetoriZen/RUGG/main/%23RUGG.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7ioFQBJeUymYcA77hjBconsiDHLm8dZAKtbRcFinqdfX", - "symbol": "FU", - "name": "Fu Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/skunk-fu/sol-fu-coin/main/logo.png", - "tags": [ - "social-token", - "community-token", - "utility-token", - "meme-token" - ], - "extensions": { - "website": "https://fucoin.me" - } - }, - { - "chainId": 101, - "address": "7NWewc3cxWWWwC1nEfRzbKxUpFjW2TapoCMTHXcpLUXF", - "symbol": "HDTK", - "name": "HeyDoll Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/huangxiaoming6688/crypto/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "217mKMvyGywmxyrurvo4Vt2jGhVXVhX81XaAgwK38cw7", - "symbol": "KMKO", - "name": "Kamiko Koin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ds2600/crypto_valy/kmko/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3a3M5JG4vdbw7L1vWEEWZqssBWZ4DksPiwy95Z6Z5JSr", - "symbol": "GGN", - "name": "Gargantuan", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/gargantuanavatar/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FpXqUpigzx447tDv4iYX7M4aPZrMFTbiMdmuyjbEuUeH", - "symbol": "OFS", - "name": "OnChain FS", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/onchainfs/OFSMain/main/logo.png", - "tags": ["financial-token", "utility-token"] - }, - { - "chainId": 101, - "address": "A5UevXJdphkzXhRtTXj8JyoYYrWnkCLHVS986JHtRLyj", - "symbol": "SOLID", - "name": "Solid Protocol", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/A5UevXJdphkzXhRtTXj8JyoYYrWnkCLHVS986JHtRLyj/logo.png", - "tags": ["utility-token"], - "extensions": { - "coingeckoId": "solid-protocol", - "twitter": "https://twitter.com/ProtocolSolid", - "website": "https://solidprotocol.tech/" - } - }, - { - "chainId": 101, - "address": "3iV5uENJxg5LeuCvbiZy9ZAXBgp8ttqeuqyyqV1t67Ww", - "symbol": "VUTS", - "name": "VoutselasKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ChristosVoutselas/VUTS/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "NanxGmpuKwQvTrT8eKqmdVQgWJq9t1unCPhZb1mcWis", - "symbol": "nanX", - "name": "nanoX", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/NanxGmpuKwQvTrT8eKqmdVQgWJq9t1unCPhZb1mcWis/logo.svg", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/3TwxDEZ2Ss", - "github": "https://github.com/nanoX-finance", - "medium": "https://medium.com/@nano.x", - "reddit": "https://www.reddit.com/r/nanox_finance", - "telegram": "https://t.me/nanoXspace", - "twitter": "https://twitter.com/nanox_finance", - "website": "https://www.nanx.finance", - "youtube": "https://www.youtube.com/channel/UCSJrIzML8sTE3LsdIGKKuxg" - } - }, - { - "chainId": 101, - "address": "BntuckR32sWAziNtDQZg7RbQhHJZhLx5XpZtHkrpeEBx", - "symbol": "SCTK", - "name": "Solana City Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/leastgs/SCT/main/logo.png", - "tags": ["utlity-token"], - "extensions": { - "discord": "https://discord.gg/c2Af3Ywq7a", - "twitter": "https://twitter.com/SolcitizensNfts" - } - }, - { - "chainId": 101, - "address": "9DP4uBEYXYBpUEWdPJ2pGu43wVoAd1Xniok345LkwY49", - "symbol": "GAPP", - "name": "GappiesCoin", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/gavinhartog/gappies/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4NUoCXBsCVUXPyQL3UmMU3dRUZ3WNQgY1USC7eAY8zSG", - "symbol": "$CREDITS", - "name": "Neon Game Credits", - "decimals": 5, - "logoURI": "https://rxvwsth6k2wkjbpgqixi4db3ekvlailhvm2xa4pcmqzl6dtctqwa.arweave.net/jetpTP5WrKSF5oIujgw7IqqwIWerNXBx4mQyvw5inCw", - "tags": ["utility-token"], - "extensions": { - "website": "https://neon.game" - } - }, - { - "chainId": 101, - "address": "ADehsNVsuXwdQ5L6JT4YpZrmLumDQ3f1ar2VxBaR3TaL", - "symbol": "RUM", - "name": "RUM", - "decimals": 6, - "logoURI": "https://github.com/charliebakerr/psy-token/blob/f8d05bf0865582bc9d131cb77ba0e51f953f26ab/RUM.png" - }, - { - "chainId": 101, - "address": "ECz3bSRcnziQ17oXa2ENxiGD76EdZy54kXLfUNWHSb5C", - "symbol": "EPM", - "name": "Easy Pocket Money", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/dcmgcm/EPM-Token/main/epm-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6QXq7LYfHEn8HMB6WpHvnnHE84Tpg6ciJQpe7Xn8sYkT", - "symbol": "COLVO", - "name": "Colibri Voice", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/davidmontoya60/Crypto-Colibri/main/Colibri.png", - "tags": ["social-token", "utility-token", "community-token"] - }, - { - "chainId": 101, - "address": "5B7xf8nrKjyAqrJemjG6ArH2B4ZGN7UbjvW8AuL3dW9d", - "symbol": "BFLP", - "name": "Big Floppa", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/volk-blip/crypto/main/BigFloppaLOGO-min.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FmpqmVcT4hSUfNhach31YUpf6M75bBYaC59JLMyCVNHH", - "symbol": "GOOSE", - "name": "Mongoose", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FmpqmVcT4hSUfNhach31YUpf6M75bBYaC59JLMyCVNHH/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "BeqFvEaBWjKUt7ojbWVEytyDTLcDFzXSk25ndZiTDhi4", - "symbol": "MATCHA", - "name": "Matcha Koin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MayMeow/matcha-koin/main/matcha.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ApUXq6ipGZz3kSqSJJx4Kvp8xikwaT9yu5iAaQ9n7gft", - "symbol": "MUSIC", - "name": "Playmusic", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ApUXq6ipGZz3kSqSJJx4Kvp8xikwaT9yu5iAaQ9n7gft/logo.svg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4Ewg5EvQzrQXnPDQ6Fe8QwWFSBYZCkwXDBkP5vwATZMM", - "symbol": "BAHI.log", - "name": "CGMB", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Sulman2244/logo/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7NJwPgfE1YA1UP5k6mF2tYgLJg65SsRvPz9pxb2sKgLW", - "symbol": "BABYXTAG", - "name": "BABY XTAG", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7NJwPgfE1YA1UP5k6mF2tYgLJg65SsRvPz9pxb2sKgLW/logo.png", - "extensions": { - "twitter": "https://twitter.com/xhashtagio", - "website": "https://www.xhashtag.io/" - } - }, - { - "chainId": 101, - "address": "DPyPuX68Uop66MK9nKT1TsWMA2jayu2vKVoWK2RKPdjp", - "symbol": "VBC", - "name": "VBuck", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/yarak73/crypto/main/vbuck.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Fmw929Yn292BNvy4ZRQctbtv2n6KrynhjGHAvZmhEwM6", - "symbol": "NATH", - "name": "Natoha", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/STH57/cryptoNath/main/Natoha.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GqiHtXj18aaWs82UBz7D72x934EQLZNhpeUpfJwS3Scm", - "symbol": "FLYZ", - "name": "Cyber Flyz", - "decimals": 6, - "logoURI": "https://user-images.githubusercontent.com/93989494/146803309-9886040f-2e3c-46c0-bd57-69e15f088ac5.png" - }, - { - "chainId": 101, - "address": "6iu6uaRvb78P68M3k3kPCh6XPw7h3r7SrPL7ggkBPVM3", - "symbol": "ANGC", - "name": "Angel Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SirSimon04/angel-coin/main/logo.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "HCHs1Kbp4Fn38nLrcnT1VLQ4CuLQPj6jZTGhG75maS9Y", - "symbol": "PMC", - "name": "PRIMARKCOIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Freemefromtheratrace/Primarkcoin/main/FSDFSF.png", - "tags": ["social-token", "Utility-Token"] - }, - { - "chainId": 101, - "address": "2zNzxqstigWAt5iUC51FtX8Ehixx4PgTZ3bXZx1x832r", - "symbol": "GIRAF", - "name": "Giraffe Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2zNzxqstigWAt5iUC51FtX8Ehixx4PgTZ3bXZx1x832r/logo.png", - "tags": ["utility-token", "meme-coin", "meme-token"] - }, - { - "chainId": 101, - "address": "DiemGxqkm284CZVZcvk8wfybmRK4JWmprPtrUamuLndE", - "symbol": "DIEM", - "name": "GOFAR", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DiemGxqkm284CZVZcvk8wfybmRK4JWmprPtrUamuLndE/logo.png", - "tags": ["utility-token", "travel-token"], - "extensions": { - "twitter": "https://twitter.com/thisiscarpedm", - "website": "https://thisiscarpedm.com" - } - }, - { - "chainId": 101, - "address": "Fy2rYwPtbk3hHuzFFCtFaKT2NaRdhrovpytroecF95wL", - "symbol": "PHLEK", - "name": "Phlek", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/raivolalala/phlek/main/phlek.jpg", - "tags": ["nft"] - }, - { - "chainId": 101, - "address": "3pbhmoKkg9c5mokBqpPFdDMDczHL68X1VnxGm185KtBZ", - "symbol": "PNK", - "name": "Pinsky", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/pinmymind/cryptotoken/main/pinsky.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7uNsGMMiLcdsZ7ipfNYPtwpcMrihHRedgBPAfstuGpTE", - "symbol": "RBBK", - "name": "RollingBallButcherKnives", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MasterofNunya/crypto/main/RBBK_logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "36s9cAKFqea4gGFwAjG92Aoo3Zx5L3AbqBB519QeKsZU", - "symbol": "ALF", - "name": "AlfProtocol", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/36s9cAKFqea4gGFwAjG92Aoo3Zx5L3AbqBB519QeKsZU/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.com/invite/alfprotocol", - "telegram": "https://t.me/alfprotocol", - "twitter": "https://twitter.com/AlfProtocol", - "website": "https://alfprotocol.com/" - } - }, - { - "chainId": 101, - "address": "4Wk4qLfLEXFTJqH9zn2LBqccorX2K2rjV9UwyujjUByW", - "symbol": "DHAN", - "name": "Dhancoin", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/dhancoinofficial/token-list/main/assets/mainnet/4Wk4qLfLEXFTJqH9zn2LBqccorX2K2rjV9UwyujjUByW/logo.jpg", - "tags": ["Social-token", "Indian-token", "Desi-coin"], - "extensions": { - "description": "crypto asset for the indian metaverse" - } - }, - { - "chainId": 103, - "address": "4FTVzy4yrfbFy5ootGSU5GfhqUReg5GwGYdCSwwDwFoM", - "symbol": "TSTO", - "name": "Tsaki Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4FTVzy4yrfbFy5ootGSU5GfhqUReg5GwGYdCSwwDwFoM/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "BuqmkJAkjsGNBe9sYa3mmbhTnf7CErE3xiEGZszxttb9", - "symbol": "WEEL", - "name": "Wheel", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/wfmayer/wheel/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "EDPXuih9YfsnSYyiWss4okGGrPCmCLLNTC8hM3yw85Wt", - "symbol": "ART", - "name": "Art Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EDPXuih9YfsnSYyiWss4okGGrPCmCLLNTC8hM3yw85Wt/logo.png", - "tags": ["utility-token", "art-token", "community-token", "meta-verse"] - }, - { - "chainId": 101, - "address": "ZRbe8C4rNPt5g9W9YovyuhpcEQzUcMV2bxy9moLSz7z", - "symbol": "DEGO", - "name": "DiegoCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/pcapazzi/DiegoCoin/main/diego.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "UDLEC7bkec8x6HonzFAAYotJew4EnMVvhqCxL5k6jjf", - "symbol": "EKU", - "name": "EKU Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/UDLEC7bkec8x6HonzFAAYotJew4EnMVvhqCxL5k6jjf/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "meebAU3nZrU5PbUt3dVK6ExgbNWCUAkV7C3DaJKMZZ4", - "symbol": "MEEB", - "name": "Meeb Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/meebAU3nZrU5PbUt3dVK6ExgbNWCUAkV7C3DaJKMZZ4/logo.png", - "tags": ["community-token", "utility-token"], - "extensions": { - "discord": "https://discord.gg/amoebits", - "twitter": "https://twitter.com/Amoebits", - "website": "https://amoebits.io" - } - }, - { - "chainId": 101, - "address": "4DSym9K22MV1b9eAdA5udXAD2hWTpAHGhFNhgXAQRqph", - "symbol": "HDC", - "name": "HeyDoll Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/heavenframe2021/crypto-heydoll/main/LOGO%20HDTK.png", - "tags": ["Social-token"], - "extensions": { - "description": "crypto asset for the indian metaverse" - } - }, - { - "chainId": 101, - "address": "3cqGYMGgpi6DFWvPzNmsqmqS1WNeiPzgEPLKyNqJwJ3R", - "symbol": "BERM", - "name": "BermudaCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/DiamondBar9/BERM/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ANXwRA8fC8o1hsPESYSPtqCwaFduXZXzAWRToy9jG6h3", - "symbol": "KEMP", - "name": "KempKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Dcden89/KempKoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9J3z3GDpzscKJ1evATZdE9qLDwWVqdh6yeYCwqE7cmGH", - "symbol": "BASEC", - "name": "Base Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/marcelbpcloud/basecoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3ceHfJ8aFd5C7GrMkLQ9ht6cGuZECQddSXuGdowK6gdS", - "symbol": "AOVT", - "name": "Age of Vikings", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3ceHfJ8aFd5C7GrMkLQ9ht6cGuZECQddSXuGdowK6gdS/logo.png", - "tags": ["utility-token", "currency-token", "community-token"] - }, - { - "chainId": 101, - "address": "3RgXd92vgDor1Fz8DcFvMqXahz3rj4HQbnkuAyPLqsuT", - "symbol": "MTN", - "name": "Metanium", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3RgXd92vgDor1Fz8DcFvMqXahz3rj4HQbnkuAyPLqsuT/logo.png", - "tags": ["utility-token", "community-token", "social-token"], - "extensions": { - "description": "Metanium is a Token that was created with the aim of helping people in financial difficulty, we are committed to making donations to people in precarious situations." - } - }, - { - "chainId": 101, - "address": "3VjifLwGK9tNqDtnjDe6yF7C7V3BodPuQhk6cJyeQ33u", - "symbol": "RLTY", - "name": "Royalty Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/BatmanSTRMC/crypto/main/rcoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4CwuSUuswvPfgciVrD4GMs1gkxUGfQ9TnscGHY78ugYJ", - "symbol": "SQC", - "name": "Samcoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SamQuailCoin/SQC-logo/main/samcoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HfsvmwJtXVkExnigHzvry42shBvNWk55ndmVHCxdXEbJ", - "symbol": "SIVI", - "name": "Soba Coin", - "decimals": 9, - "logoURI": "https://i.imgur.com/t4xXJCA.png", - "tags": ["social-token"], - "extensions": { - "description": "We can help you turn your content into extra income and pursue more of what you love.", - "website": "https://siva.vip/" - } - }, - { - "chainId": 101, - "address": "9UEHkfF2G3DfBQVBz1DCMbQzVQwpcqnVvtrQHhHhNChR", - "symbol": "SOLMEOW", - "name": "Solana Meow Meow", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solmeowmeow/sol-meow-meow-coin/main/solmeowmeow.png", - "tags": ["meme-token"], - "extensions": { - "description": "Solana Meow Meow coin is dedicated to cats around the world!", - "twitter": "https://twitter.com/solmeowmeow", - "website": "https://github.com/solmeowmeow/sol-meow-meow-coin" - } - }, - { - "chainId": 101, - "address": "EKyEgieKeqssdhQVT3vuzz6uQhX6Q537TMuJgn9W6KVx", - "symbol": "AMTP", - "name": "AM Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/am-3p/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "F1cuHRYZnALDAxJpqPfaZAJheeGuzeFfXk5csK58hh5d", - "symbol": "DRMC", - "name": "Drime Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Itz-Ethan/drmcrypto/main/logo.png", - "tags": [ - "utility-token", - "community-token", - "social-token", - "meme-token" - ], - "extensions": { - "description": "Drime Coin is a community token that makes investing in crypto fun and easy.", - "twitter": "https://twitter.com/Ethan_Itz", - "youtube": "https://www.youtube.com/channel/UCDg-Utvcsp5L05hB7C1_zgA" - } - }, - { - "chainId": 101, - "address": "DtPDh3wGGbs6vdVQV8wGfLuQzCsJUG21cqfmNk3f4ox5", - "symbol": "NU3C", - "name": "NIU3 COIN", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/heavenframe2021/crypto-niu3/main/logo.png", - "tags": ["social-token"], - "extensions": { - "description": "crypto asset of Ken Liu" - } - }, - { - "chainId": 101, - "address": "8sZWFhn8nv5cpzLSCSrCcqwdgCKnf2syhHvJ9SQCEpfd", - "symbol": "CCKN", - "name": "CarusoCraft Koin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Bcaruso22/crypto/main/cccoin_logo-min.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DeNXzrqbCxhi8xMXsnyrPGdWxrgSb2X82Aa2FL2yKmot", - "symbol": "raff", - "name": "RaffBit", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/nasher207/cripto-stuff/main/logo1.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9mnngHc1pAt5x6vHz4JRLexVWjGk9j7eJWs9QkJzh9RH", - "symbol": "jm", - "name": "JackCoin", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/nasher207/cripto-stuff/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DiEZQ5dYjLZnW8ABCna8KoZU8QCL1UMvwgF4BPCKey7t", - "symbol": "EDHK", - "name": "EDHKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/shonen787/crypto/main/logo.png", - "tags": ["social-token", "meme-token"] - }, - { - "chainId": 101, - "address": "6RfRLkMZjW4PhXGezHE43njrEYSpYKEBMRtja4XzyeNp", - "symbol": "PINTO21", - "name": "Pinto 21 Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/npinto21/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4N1nzo4rAFHGHvAm7ioE7dHZarxVNJpKemjSC45KXAxe", - "symbol": "BELL", - "name": "Michelle Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/kerouacwannabe/crypto/main/bell-480-458437.png", - "tags": ["social-token", "meme-token", "community-token"], - "extensions": { - "description": "Michelle, ma belle, These are words that go together well, My Michelle" - } - }, - { - "chainId": 101, - "address": "J95KxdcBUgG7V4ecrtN4GLxZEz9GESbeLsEMyD8N6yX3", - "symbol": "WHAT", - "name": "WHAT Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/J95KxdcBUgG7V4ecrtN4GLxZEz9GESbeLsEMyD8N6yX3/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DA4zFZot5fEcuKSNPbeYEhNQ6xP9jUbK9akXGAfG7FVq", - "symbol": "BLCS", - "name": "Black Lotus Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/obiwonjacoby/Black_Lotus/main/Black_Lotus_Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "85d7BpwfBJNurB6t4S4vN1x4vMaDPjWNiMetWWco2vUe", - "symbol": "VIPR", - "name": "Viper", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/viperguy07/coin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "75w8S3Du1Rd4KphUYiusWavqt1EUoeVKTphhrfgqPCeU", - "symbol": "IGNFTWSD", - "name": "Instagram NFT WSD", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/75w8S3Du1Rd4KphUYiusWavqt1EUoeVKTphhrfgqPCeU/logo.jpg", - "tags": ["nft", "instagram"], - "extensions": { - "website": "https://rocketsola.com/nft/instagram/75w8S3Du1Rd4KphUYiusWavqt1EUoeVKTphhrfgqPCeU" - } - }, - { - "chainId": 101, - "address": "HD2oWUXqnLfXqpR4giDndZisEeqVq7EZbCTBgjAEdDVH", - "symbol": "IGNFTHDO", - "name": "Instagram NFT HDO", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HD2oWUXqnLfXqpR4giDndZisEeqVq7EZbCTBgjAEdDVH/logo.jpg", - "tags": ["nft", "instagram"], - "extensions": { - "website": "https://rocketsola.com/nft/instagram/HD2oWUXqnLfXqpR4giDndZisEeqVq7EZbCTBgjAEdDVH" - } - }, - { - "chainId": 101, - "address": "DzAr46UdBPeEamVRwUb6HR3cKJyzEunMia45cAQv5Pd", - "symbol": "IGNFTDZA", - "name": "Instagram NFT DZA", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DzAr46UdBPeEamVRwUb6HR3cKJyzEunMia45cAQv5Pd/logo.jpg", - "tags": ["nft", "instagram"], - "extensions": { - "website": "https://rocketsola.com/nft/instagram/DzAr46UdBPeEamVRwUb6HR3cKJyzEunMia45cAQv5Pd" - } - }, - { - "chainId": 101, - "address": "CpSYD5rJE8coHfBQyWYAFpE1Rm5YvgGbnF46cvemBLPx", - "symbol": "IGNFTCPS", - "name": "Instagram NFT CPS", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CpSYD5rJE8coHfBQyWYAFpE1Rm5YvgGbnF46cvemBLPx/logo.jpg", - "tags": ["nft", "instagram"], - "extensions": { - "website": "https://rocketsola.com/nft/instagram/CpSYD5rJE8coHfBQyWYAFpE1Rm5YvgGbnF46cvemBLPx" - } - }, - { - "chainId": 101, - "address": "HoU6QHcbNwUEn5emrSrZaM3HcwV6dZaA2vUJoUbAzQkP", - "symbol": "IGNFTHOU", - "name": "Instagram NFT HOU", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HoU6QHcbNwUEn5emrSrZaM3HcwV6dZaA2vUJoUbAzQkP/logo.jpg", - "tags": ["nft", "instagram"], - "extensions": { - "website": "https://rocketsola.com/nft/instagram/HoU6QHcbNwUEn5emrSrZaM3HcwV6dZaA2vUJoUbAzQkP" - } - }, - { - "chainId": 101, - "address": "3eEwnZksgg8mADgSyLzcMQQyVzt2ZCGyQxNet7wcyhBZ", - "symbol": "IGNFTEEW", - "name": "Instagram NFT EEW", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3eEwnZksgg8mADgSyLzcMQQyVzt2ZCGyQxNet7wcyhBZ/logo.jpg", - "tags": ["nft", "instagram"], - "extensions": { - "website": "https://rocketsola.com/nft/instagram/3eEwnZksgg8mADgSyLzcMQQyVzt2ZCGyQxNet7wcyhBZ" - } - }, - { - "chainId": 101, - "address": "E4P45hsc4WJ61EkJkoKg4HRps68WhnfBMqDWvNYBAVZ7", - "symbol": "IGNFTEPH", - "name": "Instagram NFT EPH", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/E4P45hsc4WJ61EkJkoKg4HRps68WhnfBMqDWvNYBAVZ7/logo.jpg", - "tags": ["nft", "instagram"], - "extensions": { - "website": "https://rocketsola.com/nft/instagram/E4P45hsc4WJ61EkJkoKg4HRps68WhnfBMqDWvNYBAVZ7" - } - }, - { - "chainId": 101, - "address": "7WWYJ6xZLDDU8aVw5e8F3Xvp3QxRYJWMFhKLBUsMMx1z", - "symbol": "IGNFTWWY", - "name": "Instagram NFT WWY", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7WWYJ6xZLDDU8aVw5e8F3Xvp3QxRYJWMFhKLBUsMMx1z/logo.jpg", - "tags": ["nft", "instagram"], - "extensions": { - "website": "https://rocketsola.com/nft/instagram/7WWYJ6xZLDDU8aVw5e8F3Xvp3QxRYJWMFhKLBUsMMx1z" - } - }, - { - "chainId": 101, - "address": "8UVQCYwBHGhHWeNZvYwCE8WcGmCpzA8AgxP2FaCUn3H4", - "symbol": "IGNFTUVQ", - "name": "Instagram NFT UVQ", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8UVQCYwBHGhHWeNZvYwCE8WcGmCpzA8AgxP2FaCUn3H4/logo.jpg", - "tags": ["nft", "instagram"], - "extensions": { - "website": "https://rocketsola.com/nft/instagram/8UVQCYwBHGhHWeNZvYwCE8WcGmCpzA8AgxP2FaCUn3H4" - } - }, - { - "chainId": 101, - "address": "Akgos26wxMj1XDoY9uojm4KMsALT87QtgbZEB2GENH8X", - "symbol": "IGNFTAKG", - "name": "Instagram NFT AKG", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Akgos26wxMj1XDoY9uojm4KMsALT87QtgbZEB2GENH8X/logo.jpg", - "tags": ["nft", "instagram"], - "extensions": { - "website": "https://rocketsola.com/nft/instagram/Akgos26wxMj1XDoY9uojm4KMsALT87QtgbZEB2GENH8X" - } - }, - { - "chainId": 101, - "address": "78yaZuBb6qmFec4Jz59MMLtdDu5wBMzKsXaQAWXjpALF", - "symbol": "IGNFTYAZ", - "name": "Instagram NFT YAZ", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/78yaZuBb6qmFec4Jz59MMLtdDu5wBMzKsXaQAWXjpALF/logo.jpg", - "tags": ["nft", "instagram"], - "extensions": { - "website": "https://rocketsola.com/nft/instagram/78yaZuBb6qmFec4Jz59MMLtdDu5wBMzKsXaQAWXjpALF" - } - }, - { - "chainId": 101, - "address": "4iPKfHxmYX29fr5nnXdNifA52GJKokWeRmQ67hApGySJ", - "symbol": "IGNFTIPK", - "name": "Instagram NFT IPK", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4iPKfHxmYX29fr5nnXdNifA52GJKokWeRmQ67hApGySJ/logo.jpg", - "tags": ["nft", "instagram"], - "extensions": { - "website": "https://rocketsola.com/nft/instagram/4iPKfHxmYX29fr5nnXdNifA52GJKokWeRmQ67hApGySJ" - } - }, - { - "chainId": 101, - "address": "DT4omrwKUL4cWRjNoBSkbqAhxyexeJjXnXEGCHJFEPGT", - "symbol": "IGNFTDTO", - "name": "Instagram NFT SOLKITTYNFT 2", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DT4omrwKUL4cWRjNoBSkbqAhxyexeJjXnXEGCHJFEPGT/logo.png", - "tags": ["nft", "instagram"], - "extensions": { - "website": "https://rocketsola.com/nft/instagram/DT4omrwKUL4cWRjNoBSkbqAhxyexeJjXnXEGCHJFEPGT" - } - }, - { - "chainId": 101, - "address": "7dnB3tTmjeS1rAdeVB8CBkcNTDZQeuBoSvg17woVrs6n", - "symbol": "IGNFTDNB", - "name": "Instagram NFT SOLKITTYNFT 3", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7dnB3tTmjeS1rAdeVB8CBkcNTDZQeuBoSvg17woVrs6n/logo.png", - "tags": ["nft", "instagram"], - "extensions": { - "website": "https://rocketsola.com/nft/instagram/7dnB3tTmjeS1rAdeVB8CBkcNTDZQeuBoSvg17woVrs6n" - } - }, - { - "chainId": 101, - "address": "46E32Wnki9A1Labyq8Y2kCE58NWoLVdJhnMh3Cg5pDj3", - "symbol": "KGC", - "name": "Knife Guys Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Tim-Zahler/KnifeGuysCoin/main/logo.png", - "tags": ["meme-token", "community-token"] - }, - { - "chainId": 101, - "address": "55EZVKbY9u9vdouob88QiKQ4g9nfYUoAu7aWQUiuQ8pc", - "symbol": "ZKB", - "name": "KolaZoin", - "decimals": 0, - "logoURI": "https://github.com/Aceboone011/cryptoZKB/blob/9232cad70e918c9f02b46f4d2b287af0dc6dffa3/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Fse2oFDfbwT89CqtuoFaHCBnGTMFLartDYDjPLZyc7e", - "symbol": "TRPY", - "name": "Trippy Leaf", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Fse2oFDfbwT89CqtuoFaHCBnGTMFLartDYDjPLZyc7e/logo.png", - "tags": ["utility-token", "community-token", "general-token"], - "extensions": { - "serumV3Usdc": "3N4UgbUHUkwMU5DKFYRvz3HASbFjs3q9JLAYVRdEQvbp", - "twitter": "https://twitter.com/Real_TrippyLeaf", - "website": "https://trippyleaf.com" - } - }, - { - "chainId": 101, - "address": "3fL38iNdhYHYhN94yX59DVDPqbcXaa7CmHjzbpUUaEG3", - "symbol": "MKJF", - "name": "MKJFamily Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/alfaquad/crypto/main/mkjf-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7myzfdENcWPcbdcMrGcNHjpmnoMrpDp455qJ1imifsm5", - "symbol": "CTCN", - "name": "Curit Coin", - "decimals": 0, - "logoURI": "https://github.com/acurit1/crypto/blob/main/CuritCoinLogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9WJiJAsTy54df2tYhF9eXrrC6L5E8hdV9qDVQ5dCVC7u", - "symbol": "DYNO", - "name": "Dynocoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/lilshoota/token-list/main/assets/mainnet/9WJiJAsTy54df2tYhF9eXrrC6L5E8hdV9qDVQ5dCVC7u/logo.png", - "tags": ["social-token", "meme-token", "community-token"], - "extensions": { - "description": "Dyno is a token I developed for fun. Maybe will be purposed eventually, but invest if you'd like. -Dev" - } - }, - { - "chainId": 101, - "address": "6xQFz3z8paL5Z2a3HscQQWhVPqhGo9ff4kYEsXC7Q2VG", - "symbol": "FUN", - "name": "The Fun Coupon", - "decimals": 9, - "logoURI": "https://github.dev/Keoki-TFC/token-list/blob/2f13b2bca784f12ac2e2525e66759b8b9a617af4/assets/mainnet/6xQFz3z8paL5Z2a3HscQQWhVPqhGo9ff4kYEsXC7Q2VG/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8cgJdvtxKYRJ4xmjGFUmF2jncsvmrjjvcnmFUQRB7Rrd", - "symbol": "MSM", - "name": "SAMCOIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/salik111/crypto/main/Drawing.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "76ijxiMkj4DX8q9QMtqpzTxFnT4KPmWv47sZf2kKoVwk", - "symbol": "QF", - "name": "QuietFire", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/76ijxiMkj4DX8q9QMtqpzTxFnT4KPmWv47sZf2kKoVwk/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/anderlaxe" - } - }, - { - "chainId": 101, - "address": "DySz4HGJnnHeRGzbRR3EBEfJwiZWgdWdCDKnRVuMxbKN", - "symbol": "SVE", - "name": "Eidelstedt Gorillas", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/bumblebeeman85/Gorillas/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9f8tPib2mY7bjoXhxTmpJs3N2weK6tCwmgE9VrhgQF2w", - "symbol": "TFFC", - "name": "TaygaCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Qctsu/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5SBKK5btXjeaS8w96eCCopwCHQd1g4hbckegtV4MkJhR", - "symbol": "Wen", - "name": "Wen Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5SBKK5btXjeaS8w96eCCopwCHQd1g4hbckegtV4MkJhR/logo.png", - "tags": ["community-token", "meme-token", "social-token"], - "extensions": { - "discord": "https://discord.gg/EMWVVXQnMy", - "twitter": "https://twitter.com/notifbutwen", - "website": "https://notifbutwen.io" - } - }, - { - "chainId": 101, - "address": "4FooynMvMtNhowDWP1X2AvTu8LkkTHWhZrsPuV9x2CJ2", - "symbol": "ax0mg", - "name": "ax0mg", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jeff14994/crypto-currency/main/logo.jpg", - "tags": ["social-token", "meme-token", "community-token"] - }, - { - "chainId": 101, - "address": "4c3tzb1JZtgsaYrWTcRcjh8eoDfUPSUCQCH5VoampniQ", - "symbol": "LALAC", - "name": "LaLa Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/frederic-mamath/lala-coin/main/lala-snow.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9kALxjX6MvdaWDzWU5Th1LUJ1QT3iH8TXkuc98oV6R5v", - "symbol": "HOOD", - "name": "Hoodie Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/therobertc/HoodieCoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8KzT4VfvzULfbyAE8PS7qzD3zNv6v2Bb4sKMx2v4Qu8e", - "symbol": "DTC", - "name": "Dintcoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/dintapp/dintcoin/main/dintcoin-logo.png", - "tags": ["utility-token", "community-token", "general-token"], - "extensions": { - "description": "Dintcoin is a decentralized global payments infrastructure that enables greater economic opportunity for everyone, everywhere.", - "instagram": "https://instagram.com/dint", - "twitter": "https://twitter.com/dint", - "website": "https://dint.com" - } - }, - { - "chainId": 101, - "address": "2DKqMEPNGDuooM8ZydBQAJSPK695mNjC8KKUfJdzHe8A", - "symbol": "FNR", - "name": "Fenero", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jrpt201/crypto/main/fenero1.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "43oyjvvQkb6ypgdC28UGg2jrYtXwe7runGn64Vvdy79L", - "symbol": "AGC", - "name": "AGC Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/43oyjvvQkb6ypgdC28UGg2jrYtXwe7runGn64Vvdy79L/logo.png", - "tags": ["AGC-Token"], - "extensions": { - "website": "https://www.agcmeta.com" - } - }, - { - "chainId": 103, - "address": "BcRr96qhSoaKFjGJDKtSWmHDvTrv7ziuq29dRjtUmHuk", - "symbol": "NNI", - "name": "Neonomad Finance", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BcRr96qhSoaKFjGJDKtSWmHDvTrv7ziuq29dRjtUmHuk/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "SoLEsRCGqG8zDKYyMt84xJdsNLJKx7vG5ZmCpKqt3rg", - "symbol": "SOLE", - "name": "Solare", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SoLEsRCGqG8zDKYyMt84xJdsNLJKx7vG5ZmCpKqt3rg/logo.png", - "tags": ["utility-token", "governance-token"], - "extensions": { - "twitter": "https://twitter.com/SolareItalia", - "website": "https://www.solare.digital" - } - }, - { - "chainId": 101, - "address": "8fd5eUPMNHuyKRshFbfmKRAm2gowJ75m8WjT7tLio6J3", - "symbol": "DLN", - "name": "Goekdln", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8fd5eUPMNHuyKRshFbfmKRAm2gowJ75m8WjT7tLio6J3/logo.svg", - "tags": [ - "community-token", - "meme-token", - "social-token", - "utility-token" - ], - "extensions": { - "description": "We are based on a Decentralized community token which aims to make peer-to-peer exchanges thanks to blockchain technology.", - "facebook": "https://facebook.com/goekdln", - "instagram": "https://www.instagram.com/goekdln", - "medium": "https://medium.com/@goekdln", - "reddit": "https://www.reddit.com/user/goekdln", - "telegram": "https://t.me/goekdln", - "twitter": "https://twitter.com/goekdln", - "website": "https://www.goekdln.com" - } - }, - { - "chainId": 101, - "address": "Dh2WZdzcpoGuYgwbRUqt9feBwNiwkE6yg38zNSuV3Kmv", - "symbol": "WAM", - "name": "WAM Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Dh2WZdzcpoGuYgwbRUqt9feBwNiwkE6yg38zNSuV3Kmv/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "LHfna4RxdkPFqCqoQySPuKTxwGuyHNR2jUs3eRWWeL5", - "symbol": "XXX", - "name": "Wet Spot", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/DarkishHero/Crypto/main/Logo-min.png", - "tags": ["social-token", "XXX"] - }, - { - "chainId": 101, - "address": "ApfnGbPxNJz48tC5GYnVL5nabb3yHGunfUwo5ufzpJKS", - "symbol": "BRC", - "name": "BrexCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/DavidPackard/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "LXTW9ngoMgUnW7dbUSqaS9HCwua6CJbkQ3bhJhh6RxV", - "symbol": "LXT", - "name": "Lamport Express Token", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/LXTW9ngoMgUnW7dbUSqaS9HCwua6CJbkQ3bhJhh6RxV/logo.png", - "extensions": { - "serumV3Usdc": "CvSvtVVFywPm6mMA4ZkDT5iMZPSRZTca9LwFLcqqs2FU", - "website": "https://lamportexpress.com" - } - }, - { - "chainId": 101, - "address": "FpPg6FiFJbwXESqW53ynhVWMy5wEZGevyi7mJWYmvwu3", - "symbol": "HERO", - "name": "Hero", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/HERO-TOKEN/HERO/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BUsHHSHFVvqqJ29REdmvgpVqjDrvFwmynoF5z65gD9Z9", - "symbol": "BCBB", - "name": "Batcave", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/bryansbatcave/crypto/main/batmanlogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ANXqXpSkTEuCnR27YK2AoHNH2CCbiSaKYAKcDQVMi6ar", - "symbol": "MTK", - "name": "MetaToken", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ANXqXpSkTEuCnR27YK2AoHNH2CCbiSaKYAKcDQVMi6ar/logo.png" - }, - { - "chainId": 101, - "address": "2U9uvvhhA7z1PQ7wTsdUoXAJZxqaEJBb2B5iL9ydJSTd", - "symbol": "SLTR", - "name": "Saltire", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/nottanudder/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "SQRNmMb9mKjjkihQS7fCmAwo3gVs1FSQBVeDZzA7CP3", - "symbol": "SQR", - "name": "Magic Square Token", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SQRNmMb9mKjjkihQS7fCmAwo3gVs1FSQBVeDZzA7CP3/logo.svg", - "extensions": { - "discord": "https://discord.com/invite/u9SHXU9qNd", - "medium": "https://medium.com/@magicsquare", - "telegram": "https://t.me/Magicsquareio", - "twitter": "https://twitter.com/MagicSquareio", - "website": "https://magicsquare.io/", - "youtube": "https://www.youtube.com/channel/UCJjHbHzZXe0T5gcn97baIbA" - } - }, - { - "chainId": 101, - "address": "HnWboZGwwEmzKtivLtYaFVKytrjuHtSzdZGQQjSTeryg", - "symbol": "VIS", - "name": "Visibility", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/fracchiomon/visibility/main/logo.png", - "tags": ["social-token", "meme-token", "art-token"] - }, - { - "chainId": 101, - "address": "HcFWXPerXxRh779QWPu3CycqsvKTwcQDqgU1kLBZWKj2", - "symbol": "VOON", - "name": "voonCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/esto87/hi/main/logo_voon.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "JEHHZr57hJ7By3dL74HB9G9R77ZrTvDr1P2vSjQCAewF", - "symbol": "SWIM", - "name": "SWIM", - "decimals": 9, - "logoURI": "https://arweave.net/x5q9Se-3YMgTRaZg8tfHRaQVnGnMbAw7Jd6F-I9fplE?ext=png", - "extensions": { - "twitter": "https://twitter.com/SolAquariums" - } - }, - { - "chainId": 101, - "address": "EsZfrs1iWh9CXzbpGUfUkRfs35KkUWXJH2S6Y9D272M", - "symbol": "LDT", - "name": "Land Space Token", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EsZfrs1iWh9CXzbpGUfUkRfs35KkUWXJH2S6Y9D272M/logo.png", - "tags": ["community-token"] - }, - { - "chainId": 101, - "address": "GE119PjMNeRysQhLmdwLj4vgoRUHrYnu9p1VBnM35tiB", - "symbol": "CAPS", - "name": "NukedCaps", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Xcelery/CAPS/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GuZkRNyvp1ghmSK19Yje2z3CyxgfABcNqjjMT2RAFfvp", - "symbol": "GLCK", - "name": "GluckCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/dg1371/crypt1/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "PRSMNsEPqhGVCH1TtWiJqPjJyh2cKrLostPZTNy1o5x", - "symbol": "PRISM", - "name": "PRISM", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/PRSMNsEPqhGVCH1TtWiJqPjJyh2cKrLostPZTNy1o5x/logo.svg", - "tags": ["utility-token", "DeFi", "aggregator", "governance-token"], - "extensions": { - "coingeckoId": "prism", - "description": "Solana's DEX Aggregator", - "discord": "https://discord.gg/prism-ag", - "serumV3Usdc": "2MvXnxngd1gKp6gE8Q63wiPHSpveWcx8x4wf43VpyiA6", - "twitter": "https://twitter.com/prism_ag", - "website": "https://prism.ag" - } - }, - { - "chainId": 101, - "address": "GpGR2QqDf4Yxkuas3rYRHYdDWSmqk8auHiRdmMicQi2a", - "symbol": "NASC", - "name": "Nasc", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GpGR2QqDf4Yxkuas3rYRHYdDWSmqk8auHiRdmMicQi2a/logo.png" - }, - { - "chainId": 101, - "address": "6eNuHDcJrPL8RzSsHiEYJh6QonEPw7NuzoumaCvQYQxa", - "symbol": "SNZY", - "name": "SnazzyCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/p4rk1ns/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GVvC9ejTXECjt9gCBDvVnrc3v2bGGUzAUbPiSKETjYjx", - "symbol": "YLRS", - "name": "YellowRose", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jms2004/crypto/main/LogoS.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8SCr4eoHCeZKA39hq1GwKuXNzm2MERT2aQEKpQpvc3jb", - "symbol": "OXG", - "name": "Oxgrod", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EzHDi6bKVKLqJmNGmrvC4C4gaeaXdexG1zNKNdMnwb56/logo.png", - "tags": ["nft"], - "extensions": { - "twitter": "https://twitter.com/Oxgrod" - } - }, - { - "chainId": 101, - "address": "FskkXb13qMTBUY5cKhcAjD2jGWBHXRS4RDuGpCGUBQi9", - "symbol": "ORC", - "name": "Orance", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/TheJacobHill/ProjectToken/main/ProfileTriangle.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9eRysBGyj2MAsdSGncQewXB5MUA24WNN2wczmkxHSTHL", - "symbol": "AMB", - "name": "AMB", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/xrus05/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DJDQhT1w7Z5bo4QBcVXPJuYeaSJsxhAxUWzYMPVfn7by", - "symbol": "PLTT", - "name": "Pallet Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Alster100/Logo/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "A6NLLo5BJXSfQJdemPqtCukqr1b4rP9XmcPqYwv2651i", - "symbol": "CLUBC", - "name": "ClubCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/nickridpath14/Crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Dm9BVFm6qwuPwPkjN7y2fsTi1VaVcxcrJgenssE5K9SG", - "symbol": "HRS", - "name": "Volunteer Hours Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Dm9BVFm6qwuPwPkjN7y2fsTi1VaVcxcrJgenssE5K9SG/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Volunteer token associated with OneChurch in Sanford, MI." - } - }, - { - "chainId": 101, - "address": "DYUB3MgtXaD5LT9eA1rgBCjFqJMvsBCNhjbg1ewGks7Z", - "symbol": "REV", - "name": "REVIVE Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DYUB3MgtXaD5LT9eA1rgBCjFqJMvsBCNhjbg1ewGks7Z/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "REVIVE token associated with OneChurch in Sanford, MI." - } - }, - { - "chainId": 101, - "address": "B9NomEhZNCCmcaTxYvvV1W9hVwHfHYjpLVjW2XRedCLK", - "symbol": "PUGSESSED", - "name": "Pugsessed", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/sarendipity/pugsessed/main/pugsessed.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3PbZAQbm3NVF8xnstqgnETZP4oDZcGGNYq5CJsNXV6dm", - "symbol": "TRL", - "name": "TrollCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ZrH-Source/crypto/main/troll.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4KwJZpjXKuAdv39eA7zgSA68ALxvJ9X5P2B1FwxQXAV4", - "symbol": "POLAR", - "name": "Polar Lisbon", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/POLARTOKEN/cripto/main/POLARTOKENCOIN.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HKZuiCMDPxFvhyrT5MCXkR3bedBEYbZmYEwbi5RMBKn2", - "symbol": "ARC", - "name": "ARC Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jmartjax21/Crypto/main/ArcReactor6.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3nhqNrUV27goNPNh8Td3UdTdxbcAdJZQKJPCwSDdK1BH", - "symbol": "TROLL", - "name": "TROLL", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3nhqNrUV27goNPNh8Td3UdTdxbcAdJZQKJPCwSDdK1BH/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/solanatrollcamp", - "website": "https://solanatrollcamp.io/" - } - }, - { - "chainId": 101, - "address": "GLzvmdxas2DupbQWuxsSdVxnXwzopdVnoSPgU63fD6zf", - "symbol": "KYP", - "name": "KYP Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/dope4ass/test/main/logo22.PNG", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2VdJqfGzW9JzBZSpDQLAYMBjwD4YoYtMAyBxg6S9AXL5", - "symbol": "MOON", - "name": "MOONSTONE", - "decimals": 2, - "logoURI": "https://i.ibb.co/W6fcMVj/MOON.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2vxNknizwbTvGUP7S6uYr7A7tEa4X14SHRoxFxTa1VqR", - "symbol": "JENN", - "name": "Jennifer Myers Crypto", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/TheRealJenniferMyers/crypto/main/logo.png", - "tags": ["social-token", "nft"] - }, - { - "chainId": 101, - "address": "AsJkh4kbD2UszLxztWQ49AHj6NkK8UMYbpGmnDdpNCf6", - "symbol": "NINE", - "name": "Nin-En", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ninjajoe9/crypto/main/logo.png", - "tags": ["social-token", "ninja", "gold"] - }, - { - "chainId": 101, - "address": "7N7D4FfJuHA1KMMkH6xKEvLehp6rvpdtrpANJgJ9mop7", - "symbol": "PITCOIN", - "name": "PitCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/psugasti/pitcoin/main/pitcoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9PyPhLmY2XUSjoS1KzovKCcZANMyhdDkVbAHCMdHTM9Q", - "symbol": "CHSTR", - "name": "ChesterCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/sirkirby/chester/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AZn7eXpTjF8Gf6ZsqLKA9oT9tB4z5HgurTaH99wFKBMU", - "symbol": "SMBN", - "name": "Symbien Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/War-Admiral-HR/crypto/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9p1yXeFftAopssNeUhTLpkvdsyjyroQFgzLNmUa4g6LD", - "symbol": "BOING", - "name": "BOIIING", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/as3k/crypto/main/logo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AmvYBdYBF9WFy6oprdnzjsJTgNraeAPP9v3cexBTzgb3", - "symbol": "GDC", - "name": "Gold Coin", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/rickregien/gdc-logo/main/gold-coin.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/solanatrollcamp", - "website": "https://solanatrollcamp.io/" - } - }, - { - "chainId": 101, - "address": "BtPMb5Fm21XcS8fNPMZM9FsmZrZQZyWFzLbztvdB1kTE", - "symbol": "MEKA", - "name": "MekaMounts", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BtPMb5Fm21XcS8fNPMZM9FsmZrZQZyWFzLbztvdB1kTE/meka.png", - "tags": ["MekaMounts"], - "extensions": { - "twitter": "https://twitter.com/MEKAMOUNTS", - "website": "https://www.mekamounts.io/" - } - }, - { - "chainId": 101, - "address": "GuthHLjD3KyRNUveh2gS2jwViJYNK9dwcvkF9bgT4m1W", - "symbol": "MLK", - "name": "Moo Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MooCoin74/Crypto/main/logo.png", - "tags": ["social-token"], - "extensions": { - "instagram": "https://instagram.com/notforeating", - "website": "https://notforeating.com.au" - } - }, - { - "chainId": 101, - "address": "8JaicM7TN4rnT5mo4X5SBUiQp5VUz9uddojugtAxrHss", - "symbol": "HOCBE", - "name": "HOC Brussels Coin", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8JaicM7TN4rnT5mo4X5SBUiQp5VUz9uddojugtAxrHss/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "5ujiTZh32mxBGjGcWVtUKUaRqXdomUyeMGZuWgP6hnBb", - "symbol": "WALO", - "name": "Walo Test", - "decimals": 9, - "logoURI": "https://github.com/younes4sami/logos/blob/main/mylogo.png" - }, - { - "chainId": 101, - "address": "9XZaM4nBcVxu5uj1vMwyC8AX1psAaWiHgy3CXKG42cia", - "symbol": "AFT", - "name": "Together", - "decimals": 0, - "logoURI": "https://github.com/tabsoat/solana/blob/main/aftlogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "F6hejSCr6dTA4hsBE4iD18BtpPFPTkGJggLFKnXp1LjP", - "symbol": "OLIRAD", - "name": "OliRad 22 Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/cryptoforironhead/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8kb6rH87WJU5SCx1WDXzK3YXFrUN3Uq9DroCLKzgsKqs", - "symbol": "ARS", - "name": "ARS Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/EuNetwork/Crypto/main/ARS_Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2cZb2MHhhSJGBh8nfxtfYhF1R1V7CBiubiA2uDo5cFLz", - "symbol": "ROXY", - "name": "RoxyCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/pushygeoduck/roxycoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4t6hdasqbriik3svqbhBpZmAbYGiJUPds1bCB6rRbLzN", - "symbol": "$STEALTH", - "name": "STEALTH COIN", - "decimals": 5, - "logoURI": "https://user-images.githubusercontent.com/93989494/146991721-19c34433-72fe-460b-82e5-455e886fb27a.png" - }, - { - "chainId": 101, - "address": "EgMuKRHL7EA3UFRG9kZmn6AdkbbkZSsz3jX9wAqnZo52", - "symbol": "MEOWCR", - "name": "Meow Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MayMeow/crypto/main/cat.png", - "tags": ["social-token"], - "extensions": { - "twitter": "https://twitter.com/TheMayMeow" - } - }, - { - "chainId": 103, - "address": "6DGhVNGpYng4pKWbmuZqVA8hqHXZ6ASdSoEgmHt2N55N", - "symbol": "AGE", - "name": "Medieval Age Coin", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6DGhVNGpYng4pKWbmuZqVA8hqHXZ6ASdSoEgmHt2N55N/logo.png" - }, - { - "chainId": 101, - "address": "8uCsnmP4aFkKTPGrvwaDUAHGTSVsGDkPxfjmWqfff6gS", - "symbol": "NDC", - "name": "QV5D Coin", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/iorivn/ndc-logo/logo.png", - "tags": ["social-token"], - "extensions": { - "description": "Five Heads Monster Coin" - } - }, - { - "chainId": 101, - "address": "21ppv2RNR1AQ9buFw4ZDYiriCqhxaqNmiMDDjcsAtnbz", - "symbol": "PANZ", - "name": "Panzitta Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/thxinfinity/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Ep3Hb1aB4ppNyBy2Vrrqdo4omy1U9isQqkW9Vz81yFQk", - "symbol": "NEBC", - "name": "NebulaCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/JaydenH08/crypto/main/photo-1610296669228-602fa827fc1f.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9RxUYewqPKMesL53jcpMgdguy8rHnREXfLeRfFHA2WuM", - "symbol": "SARAH", - "name": "Sarah Token", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9RxUYewqPKMesL53jcpMgdguy8rHnREXfLeRfFHA2WuM/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/sarahtchoi" - } - }, - { - "chainId": 101, - "address": "DiMnHRPJuFj4Dex2cWMkuJeNMTshN9h9aSNt3R8UiFSg", - "symbol": "AZT", - "name": "Andrew Token", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DiMnHRPJuFj4Dex2cWMkuJeNMTshN9h9aSNt3R8UiFSg/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/andrewztan" - } - }, - { - "chainId": 101, - "address": "6aLjYGJQodEnnYh1etfezbx1jMkV8H3ERsLx5KiDoswH", - "symbol": "CHAWIN", - "name": "ChaWinnie Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/anrob/chawinnie/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "B2gYuigZJNNQDTAnRiaiXVSetYT4uo1t4MXV2CdzdsGx", - "symbol": "BTBOS", - "name": "Btboss123", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/btboss123/BTboss-Crypto/main/LOGO.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9wXdxNiTFF6NBwmv864U9NPSY6RivgGMRkdZr269RLzr", - "symbol": "UICT", - "name": "UncleiT Coin", - "decimals": 0, - "logoURI": "https://github.com/imitone/ucit-coin/blob/main/logo.png?raw=true", - "tags": ["social-token", "community-token"], - "extensions": { - "discord": "https://discord.gg/WM2UwRF7Sk", - "website": "https://uncleitcoin.site" - } - }, - { - "chainId": 101, - "address": "ADrHVtkG7FGzrY8MpP44KC2aimhTsuJx3EjQxt85Wwab", - "symbol": "IGNFTADR", - "name": "Instagram NFT LIONLEGACY7 2", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ADrHVtkG7FGzrY8MpP44KC2aimhTsuJx3EjQxt85Wwab/logo.png", - "tags": ["nft", "instagram"], - "extensions": { - "website": "https://rocketsola.com/nft/instagram/ADrHVtkG7FGzrY8MpP44KC2aimhTsuJx3EjQxt85Wwab" - } - }, - { - "chainId": 101, - "address": "JCBDs3fmrYUVctDfv1o56wN8pr3CAhf4ERHgjyvTrC9C", - "symbol": "IGNFTJCB", - "name": "Instagram NFT LIONLEGACY7 4", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/JCBDs3fmrYUVctDfv1o56wN8pr3CAhf4ERHgjyvTrC9C/logo.png", - "tags": ["nft", "instagram"], - "extensions": { - "website": "https://rocketsola.com/nft/instagram/JCBDs3fmrYUVctDfv1o56wN8pr3CAhf4ERHgjyvTrC9C" - } - }, - { - "chainId": 101, - "address": "9mto3a7pbJpGL69h9xxSNLhr1zeQtUcsH87TYq9zT4nQ", - "symbol": "BETS", - "name": "BETS", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9mto3a7pbJpGL69h9xxSNLhr1zeQtUcsH87TYq9zT4nQ/logo.png", - "tags": ["NFT", "utility-token"], - "extensions": { - "twitter": "https://twitter.com/solbets_io", - "website": "https://www.solbets.io" - } - }, - { - "chainId": 101, - "address": "6vD17diFXjhVdEt3wo68FuHAb4nUuNG8FQSK9xM4MFDy", - "symbol": "GYRC", - "name": "GuyCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/guyroyse/gyrc/main/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://guy.dev" - } - }, - { - "chainId": 101, - "address": "FjDomDGhHqxDSetH7KfMzkKMfks5pVKJZp9tA5ezNFbW", - "symbol": "UNIC", - "name": "UniCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/JaydenH08/crypto2/main/download.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3T7bCxj1ndyCuAzf4GygLyaJ5EsLBCCaVYu18i12TJq3", - "symbol": "IGNFTTBC", - "name": "Instagram NFT LIONLEGACY7 3", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3T7bCxj1ndyCuAzf4GygLyaJ5EsLBCCaVYu18i12TJq3/logo.jpg", - "tags": ["nft", "instagram"], - "extensions": { - "website": "https://rocketsola.com/nft/instagram/3T7bCxj1ndyCuAzf4GygLyaJ5EsLBCCaVYu18i12TJq3" - } - }, - { - "chainId": 101, - "address": "3h3d9BGTVA8SQECgTdntR1DPAVVHTJMJW4ZJhGffcXme", - "symbol": "JAKEN", - "name": "Jaken Meme", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3h3d9BGTVA8SQECgTdntR1DPAVVHTJMJW4ZJhGffcXme/logo.png", - "tags": ["social-token", "meme-token"], - "extensions": { - "website": "https://blog.botbie.io/author/jaken/" - } - }, - { - "chainId": 101, - "address": "ExXBzMJA2udpJbrtpJEQJYVSyNFJCzU717W1SNizW3pS", - "symbol": "ARTA", - "name": "ArtAgent", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/JCraig66/ArtAgent/main/arta_logo_sm.png", - "tags": ["community-token"] - }, - { - "chainId": 101, - "address": "9uAHvTj3U6YZ6tWn5YMzomdnre3kpKZLFyD3nY7thvGR", - "symbol": "BORI", - "name": "Borikoin", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/Leopr1/cryptotoken/main/Taino-sun1-bold.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4SzcBzNhCxXGBRSdvyCyQjbuqAavFzvFEpDYRSKLqA1N", - "symbol": "NELC", - "name": "NelCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/JohanJ21/cypto_1/main/NelcoinLogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FBdRvc9CmHUf8ib2sV8PDv2oiFAmyxoftjid3Uv9e4kK", - "symbol": "XIN", - "name": "XIN Dragon Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FBdRvc9CmHUf8ib2sV8PDv2oiFAmyxoftjid3Uv9e4kK/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://xindragons.com" - } - }, - { - "chainId": 101, - "address": "CcsxvCYB8t8dMnqzR3BHi6aAXWmBWAxRi9b8F5hofqRW", - "symbol": "GREGG", - "name": "Gregg Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/im-old-gregg/crypt/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3TtdsuQQcuXLfPcUS745giYccyWedeSPCNtBcRfkZGuB", - "symbol": "gala", - "name": "gala", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/Nasino1/ga/main/logo.png", - "tags": ["game-token"] - }, - { - "chainId": 101, - "address": "3EzuZHSJZnLvZWMpStNBmNJE9rruyz4u3STARBY4gPL7", - "symbol": "OTO", - "name": "Otometa Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3EzuZHSJZnLvZWMpStNBmNJE9rruyz4u3STARBY4gPL7/logo.png", - "tags": [ - "launchpad", - "metaverse", - "gaming", - "nft", - "collectibles", - "play-to-earn", - "community-token", - "artists", - "earn", - "trade" - ], - "extensions": { - "description": "A blockchain universe for the creative souls. Create, Sell, Earn and Play to the fullest of your creativity", - "discord": "https://discord.gg/mrHVFNV4jq", - "medium": "https://otometa.medium.com/", - "reddit": "https://www.reddit.com/user/OtometaU", - "twitter": "https://twitter.com/OtometaU", - "website": "https://otometa.io" - } - }, - { - "chainId": 101, - "address": "EcFyPDjqpnyMvh1LhACtC6rrCZ41DMez7RZYocjhmUVS", - "symbol": "NOCH", - "name": "NodeBunch", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EcFyPDjqpnyMvh1LhACtC6rrCZ41DMez7RZYocjhmUVS/logo.png", - "tags": [ - "dex", - "farming", - "swap", - "pool", - "nft", - "trade", - "staking", - "nft-staking", - "amm", - "launchpad" - ], - "extensions": { - "description": "Extend the boundaries of earning with nodebunch, a futuristic AMM Dex with the power of DEFi", - "discord": "https://discord.gg/C4dC2grHAj", - "medium": "https://nodebunch.medium.com/", - "reddit": "https://www.reddit.com/user/nodebunch", - "twitter": "https://twitter.com/BunchNode", - "website": "https://nodebunch.finance" - } - }, - { - "chainId": 101, - "address": "5yLd5T4HXmeWTH8sTH9cPxkDJbQyHHVmv9EWwjWpBL4w", - "symbol": "TGRC", - "name": "TigerCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/JaydenH08/crypto3/main/tiger-face-background_23-2148007463.jpg", - "tags": ["token"] - }, - { - "chainId": 101, - "address": "HkNK7BL5pSUUzc6ns1mHW5JnzbSG4S9u2QdR3cUuyzSa", - "symbol": "SPZ", - "name": "Solprize", - "decimals": 5, - "logoURI": "https://www.solprize.io/static/images/logo.png", - "tags": ["social-token", "meme-token", "community-token"], - "extensions": { - "description": "Let's get be rich and happy together!", - "instagram": "https://www.instagram.com/solprize", - "reddit": "https://www.reddit.com/r/solprize", - "telegram": "https://t.me/solprize", - "twitter": "https://twitter.com/solprize", - "website": "https://www.solprize.io" - } - }, - { - "chainId": 101, - "address": "EAdQ1D1Q8Qj6uhif94dEgpf7XKC1LRdEM4BkumxkZbET", - "symbol": "DTC", - "name": "DTCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/DannyBTW/crypto/main/DTCoin%20Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Cvffc7pFnU3bDHfrwCM1NvWzxM8m9t5R82oJubU7TMQX", - "symbol": "RODC", - "name": "Rodders Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/rodhop/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Dm7cDFpovTay4pxFpUYv66ZZtRYdD1YjgvnseaaF6KHh", - "symbol": "BLOOD", - "name": "BLOOD", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Dm7cDFpovTay4pxFpUYv66ZZtRYdD1YjgvnseaaF6KHh/logo.png", - "tags": ["NFT"], - "extensions": { - "discord": "http://discord.gg/gyQ76h29TE", - "twitter": "https://twitter.com/YakuzaRaptorz", - "website": "https://www.yakuzaraptorz.com" - } - }, - { - "chainId": 101, - "address": "76wonxPzsZGAnes97cQBAshy3BwBeR7htCfksfjUJFXE", - "symbol": "JONI", - "name": "Joni Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/captain-joni/jonicoin/main/logo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EjSwAfwi4F6uYtoi2WuCSYSWPVUPJCdemmShZ9tdy65P", - "symbol": "KZN", - "name": "Kartazion", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EjSwAfwi4F6uYtoi2WuCSYSWPVUPJCdemmShZ9tdy65P/logo.png", - "tags": ["kartazion", "kzn", "science", "quantum", "physics"], - "extensions": { - "description": "Universal Theory of Physics and Quantum Mechanics - Research", - "website": "https://www.kartazion.com" - } - }, - { - "chainId": 101, - "address": "FCw1uH4bWnCCjutTSAgyfP1n38tRP76LDDUm4ZWJp3Zf", - "symbol": "BEIR", - "name": "BEIR CHIP", - "decimals": 6, - "logoURI": "https://github.com/XtremeAppz/BEER-TOKEN/blob/main/logo.png", - "tags": ["token", "meme-token", "social-token", "drink-token"] - }, - { - "chainId": 101, - "address": "7c8WQE25zZbadjRWixiy2ARF9ZHrntDowZqYuhtCsPmJ", - "symbol": "APC", - "name": "Among Pirates Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7c8WQE25zZbadjRWixiy2ARF9ZHrntDowZqYuhtCsPmJ/logo.png", - "tags": ["social-token", "gaming", "play-to-earn"], - "extensions": { - "description": "Fun play to earn game among pirates", - "instagram": "https://www.instagram.com/amongpirates", - "website": "https://www.amongpirates.com" - } - }, - { - "chainId": 101, - "address": "5WLNynnq9pVio8Rj8XnqdZLYZSsaKzzAzS4aFvUK1tU2", - "symbol": "SOLMERGE", - "name": "Sol Merge AI", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5WLNynnq9pVio8Rj8XnqdZLYZSsaKzzAzS4aFvUK1tU2/logo.png", - "tags": ["solmergeaicom"], - "extensions": { - "website": "https://solmergeai.com" - } - }, - { - "chainId": 101, - "address": "HwgZxR9bU1DhpGLhbGAgK2QNHKcjJDgs8pkqT2TdVxYV", - "symbol": "DAD", - "name": "DAD COIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/davethecloud/crypto/main/D.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5r7vsbP24VaVzvZ3W2YnwYdGMmdpSsGFHA2mCitPxZev", - "symbol": "VOLT", - "name": "Voltage Solana", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5r7vsbP24VaVzvZ3W2YnwYdGMmdpSsGFHA2mCitPxZev/logo.png", - "tags": ["community-token"], - "extensions": { - "discord": "https://discord.gg/FFkmX5S9As", - "twitter": "https://twitter.com/VoltageSolana" - } - }, - { - "chainId": 101, - "address": "2L8qUkyBzKyqkNqxqPzBhd8HXYyZPZgULuCDNheYdLZv", - "symbol": "ALIEN", - "name": "ALIEN JESUS COIN", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/alienjesusorg/alienjesusorg.github.io/master/images/favicon-alien.png", - "tags": ["nft"], - "extensions": { - "website": "https://alienjesus.org/" - } - }, - { - "chainId": 101, - "address": "72tsMfXLasd8GFya63UZY7w8xDgDLdxJtCJ16trT14gn", - "symbol": "HDPT", - "name": "Headpat", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/zaravi/headpat/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DCGtYZmS6Swj1dPVjMbfa8Ke1ket486SbvGDY9CAZ2Xr", - "symbol": "IVOS", - "name": "Immutable Virtual Original Soul", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/JVQuantum/ivos/main/ivOS%20logo.png", - "tags": [ - "social-token", - "gaming", - "nft", - "meta", - "metaverse", - "metaverse-token", - "immutable", - "virtual", - "original", - "soul" - ], - "extensions": { - "website": "https://ivos.pt" - } - }, - { - "chainId": 101, - "address": "5PR8Fre4gU52dgv5W4nrJkSAW4xonDWD5d84HJF7nDhU", - "symbol": "SLTK", - "name": "Solulab Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Parth2412/solana-token/main/logo.png" - }, - { - "chainId": 101, - "address": "GTyzMMe7SvKeRa35GtXikyc8V198pckG7BEA3W3XnVrN", - "symbol": "BEER", - "name": "BEER CHIP", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/XtremeAppz/BEER-TOKEN/main/logo.png", - "tags": [ - "token", - "meme-token", - "social-token", - "drink-token", - "beer-token" - ] - }, - { - "chainId": 101, - "address": "2e4rvazLT177uqXmDFkXJox9rZKk5LFqmqwpeaPaGkSk", - "symbol": "ZAMO", - "name": "zamo-o coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/zamo-o/crypto/main/day-1-700x.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "EreDcRUuV8pBkpgoJfWmgzpWhwnrnHBNDQqSWzZk5dsa", - "symbol": "CAT", - "name": "CatCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/cometbeetle/token-list/main/assets/mainnet/EreDcRUuV8pBkpgoJfWmgzpWhwnrnHBNDQqSWzZk5dsa/cat.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "F8haj7XPnjiYLTmivGL3UvWZHjP9f1Lt96nxDzDQG3K3", - "symbol": "SHUSHI", - "name": "ShuShi Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/F8haj7XPnjiYLTmivGL3UvWZHjP9f1Lt96nxDzDQG3K3/logo.png", - "tags": ["solmergeaicom"], - "extensions": { - "website": "https://houseoffoodporn.com" - } - }, - { - "chainId": 101, - "address": "77Qps1yYb3cZASEgizao3ZWW4MiXe2buTUzLFCbgtj2Z", - "symbol": "HERGON", - "name": "HERGON", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jota2314/Hergontoken/main/TAG_Hergon-removebg-preview.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BYqJ8nnsj1YqmdreEgxF2QgGV1GEdV5H85rJEhmN98id", - "symbol": "WBC", - "name": "Buffettcoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BYqJ8nnsj1YqmdreEgxF2QgGV1GEdV5H85rJEhmN98id/logo.png", - "tags": ["utility-token", "travel-token"] - }, - { - "chainId": 101, - "address": "BWqYfmB1p159ewVvih7r5rp2KzWuwD3Chxd4SWeYhJT9", - "symbol": "CSE", - "name": "CosmicSphere", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/CosmicSphere/Crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7t8XBfFRUmEcUnXg2q6kk6EfaJAi4VyU43vysDhdtgJS", - "symbol": "HIN", - "name": "Hindle Family Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7t8XBfFRUmEcUnXg2q6kk6EfaJAi4VyU43vysDhdtgJS/logo.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "D98QvhmGn3ucfWnpjvtm3pSktVyrkCMcoABuTSwgzn9c", - "symbol": "WURST", - "name": "wurstcoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mvmet/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BAMT7yASjR7RrP4XsK6azMG3GZxWiGRxf1vDETSUbd5Q", - "symbol": "FRESH", - "name": "FRESH808", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/breezy2472be/crypto2/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3HNyLKZD6EDytCcCpS11TP4A8ChP1jMRZjbe16GLvFHh", - "symbol": "KKC", - "name": "KeksiCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Nicog2005/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8U4wn5EBr1bDSFHeSWLzn4Pia2aNNTGdjcc4uQttqVSB", - "symbol": "BELLS", - "name": "Bells", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8U4wn5EBr1bDSFHeSWLzn4Pia2aNNTGdjcc4uQttqVSB/bells.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "website": "https://livingfreely.on.fleek.co" - } - }, - { - "chainId": 101, - "address": "CDg66cc81TNYXYDdDAe9MpE8n2htQgmNRs3gcFeiZ7xg", - "symbol": "NKLE", - "name": "WOODEN NICKLE", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/XtremeAppz/BEER-TOKEN/main/logo.png", - "tags": [ - "token", - "meme-token", - "social-token", - "drink-token", - "beer-token" - ] - }, - { - "chainId": 101, - "address": "3fGm36NQqHNWz7pNtwaBa6q2a4NAnGGh4n6WHjLtfgHZ", - "symbol": "RET", - "name": "RET Everywhere", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3fGm36NQqHNWz7pNtwaBa6q2a4NAnGGh4n6WHjLtfgHZ/logo.png", - "tags": ["social-token", "loop"] - }, - { - "chainId": 101, - "address": "B6E3Ekd37pDsCSAVnXfoZ1k9bWrKcizmxx3uWgVKGGmD", - "symbol": "TSCT", - "name": "The Social Cafe", - "decimals": 0, - "logoURI": "https://github.com/thesocialcafe/crypto/blob/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5BRgm7MsvhsofftVczvTCsQqH1iaaYQ1xk2ZJ1JQ83nP", - "symbol": "LPS", - "name": "Lempira", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/vhn0912/Lempira/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FNcmhoAsuzeoDwnckSEefuAW1jwGnFCbowVbv2DLMM74", - "symbol": "AMKT", - "name": "AMIKETTICOIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FNcmhoAsuzeoDwnckSEefuAW1jwGnFCbowVbv2DLMM74/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CwP7ggJPVvRGRjvkV4Q5bnFNTECd9GAhoGdjtsvhEHaC", - "symbol": "CUTE", - "name": "CUTE COIN", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CwP7ggJPVvRGRjvkV4Q5bnFNTECd9GAhoGdjtsvhEHaC/logo.png", - "tags": ["solmergeaicom"], - "extensions": { - "website": "https://cargocollective.com/gustifink/" - } - }, - { - "chainId": 101, - "address": "B6aJ3TGfme3SMnLSouHXqWXjVFqYyqj7czzhzr8WJFAi", - "symbol": "RAD", - "name": "RAD", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/NFTBrickLayer/zillaz-assets/main/RAD-logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/zillaz", - "twitter": "https://twitter.com/ZillazNFT" - } - }, - { - "chainId": 101, - "address": "FtZpYentuYo1PRLEvx8qR6Htzv7uGVqotdR7RwfHw4kA", - "symbol": "BYN", - "name": "BAYAN COIN", - "decimals": 0, - "logoURI": "https://github.com/chadananda/bayancoin/blob/main/icon.png?raw=true", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BDE7Rb89NQeoNPyokL5caRg116Khfz1nDbQ5xmpkDR9h", - "symbol": "WEVE", - "name": "weve coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ryanjweaver/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "E8vEUoHrZu3g6o9p7t8iMDecjFPQz4rk3DRdZXZPfY5P", - "symbol": "SGK", - "name": "SugarKoin", - "decimals": 18, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/E8vEUoHrZu3g6o9p7t8iMDecjFPQz4rk3DRdZXZPfY5P/logo.png", - "tags": ["token"] - }, - { - "chainId": 101, - "address": "2we9YEJC7B6rM7YVQZzxX6xigatntVmH5NLarvNUzzYk", - "symbol": "NIC", - "name": "NiCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/techhotspot/NiCoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FPBj9Nq1PmbqzhMwkJLsweDyutoqABnnA6vXD2mWLCQA", - "symbol": "WEND", - "name": "Wendpaaper", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/PsychoMange/WendpaapCoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7HTtfpKSs28sbbESNHMZ48HPgfhfMYoSPTKnqa15MVDR", - "symbol": "NAD", - "name": "NaDcoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/grachenova/crypto/main/coin_pic.jpg", - "tags": ["token"] - }, - { - "chainId": 101, - "address": "BgnLUkTwKMVngMvUjh5mEYPuz4idgpyib731tWaTCZxr", - "symbol": "BNF", - "name": "Beetle and Frog Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/as3k/crypto/main/images/bnf-coin-logo.jpg", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "APNp4mW8kofKc3vwK8oEdHBGksgcZnc3KrWTyCwExt7o", - "symbol": "KTC", - "name": "Kareten Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Wolmi59/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8un38Bn3aWb3hC5xVavGkiPed2qkHPVE4veSf144ST6y", - "symbol": "RAT", - "name": "RAT Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8un38Bn3aWb3hC5xVavGkiPed2qkHPVE4veSf144ST6y/logo.png", - "tags": ["community-token", "meme-token", "nfts"] - }, - { - "chainId": 101, - "address": "ACejrU5GujUeasmQfdJ51zVjZtntyXLpohihut6eHHWT", - "symbol": "NFTCOIN", - "name": "NFT COIN", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ACejrU5GujUeasmQfdJ51zVjZtntyXLpohihut6eHHWT/logo.png", - "tags": ["solmergeaicom"], - "extensions": { - "website": "https://twitter.com/btcnftcoin" - } - }, - { - "chainId": 101, - "address": "7kivceESa3YPmwKaUbkb2QpNPitHABAGfbcaEVFDAKR5", - "symbol": "CRBNT", - "name": "CarbonTAX", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7kivceESa3YPmwKaUbkb2QpNPitHABAGfbcaEVFDAKR5/logo.png", - "tags": ["utility-token", "COMMERCE"], - "extensions": { - "description": "Token used to trade international carbon tax", - "website": "https://cryptometeo.fr/" - } - }, - { - "chainId": 101, - "address": "DnUoZhyXDrPEhFf2fffQFELQ3E5QPfDYuFgVLdrGyye5", - "symbol": "PIG", - "name": "PiggiesCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Iscalled/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "66tvzaQpB44BsZjHi6Kb7bSBLXUVekg4rB2mUzJ9afWf", - "symbol": "DZO", - "name": "Deazo", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/66tvzaQpB44BsZjHi6Kb7bSBLXUVekg4rB2mUzJ9afWf/logo.png", - "tags": ["community-token"] - }, - { - "chainId": 101, - "address": "CtLoGyUPkL8xKkmQ8GH5euM5Bp2JpBTtXvheA68zd2EM", - "symbol": "WINKLE", - "name": "WinklePinkle", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Perryhd/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FJPmrjXYCSffEcTSYnwnBMqZiUvTBUcpNMpCGsDqkA8B", - "symbol": "BITNFT", - "name": "BITNFT", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FJPmrjXYCSffEcTSYnwnBMqZiUvTBUcpNMpCGsDqkA8B/logo.png", - "tags": ["solmergeaicom"], - "extensions": { - "website": "https://twitter.com/btcnftcoin" - } - }, - { - "chainId": 101, - "address": "3jmWzvq6CMsvbCtifJeQ3pt29kud4rXxub6Zt1YW8Zsg", - "symbol": "BNFT", - "name": "BNFT", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3jmWzvq6CMsvbCtifJeQ3pt29kud4rXxub6Zt1YW8Zsg/logo.png", - "tags": ["solmergeaicom"], - "extensions": { - "website": "https://www.reddit.com/r/btcnftcoin/" - } - }, - { - "chainId": 101, - "address": "GhkxBbo6feL4Mxy1bykqnU8m9hpEGQnRfnGz8ZD6czwZ", - "symbol": "GBM", - "name": "Gabi Matatov Network", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/gabimatatov17/gbmTokenOnSolana/main/GBM_Logo.png", - "tags": ["GABI-Matatov-token"] - }, - { - "chainId": 101, - "address": "7cw29me2D5U1FWJDkD4N8tBU5hgXymHWZ13hAmgYUmye", - "symbol": "WHL", - "name": "Whale Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/WhaleCoinToken/WhaleCoin/main/WhaleCoinLogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AK5QXWmFVCj7hNSNtDSBkHAZCQpwQr6Qqq6YoWNMftL6", - "symbol": "Ponzi", - "name": "PonziCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/TheCanadian445/crypto/main/CryptoCoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "75dRekBgDoATRHMtRNjae6d5QdWqjdxTJWEw7b29ECb4", - "symbol": "AST", - "name": "Arjun Singh Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/HyperSlothAST/Coins/main/SolTiger1.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FDKBUXKxCdNQnDrqP7DLe8Kri3hzFRxcXyoskoPa74rk", - "symbol": "$YETI", - "name": "YETI", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/yet777/tokenlogo/main/logo.png", - "tags": ["community-token"], - "extensions": { - "twitter": "https://twitter.com/solyetis", - "website": "https://solyetis.io/" - } - }, - { - "chainId": 101, - "address": "5tAH9UVbthNvx7WRTMFmtwStwYEvRjmT7zVzgL8VXP5p", - "symbol": "CODE", - "name": "CodeCatch Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/codecatchorg/codecatchcoin/main/logo.png", - "tags": ["social-token", "community-token", "utility-token"], - "extensions": { - "discord": "https://codecatch.net/discord", - "website": "https://codecatch.net" - } - }, - { - "chainId": 101, - "address": "67jjUujr8psh8ACcry3M1QmpQU6krUBBt2rQpgbPxa4t", - "symbol": "FSANE", - "name": "F-Sane Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/uestadeus/cyrpto/main/logo.png", - "tags": ["community-token", "drink-token", "nft"] - }, - { - "chainId": 101, - "address": "8q7a4FpN9Di6TtT8RDbyZbwz1qmiKwmhNALRstQCbN4K", - "symbol": "AMKTC", - "name": "AMIKETTI COIN", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8q7a4FpN9Di6TtT8RDbyZbwz1qmiKwmhNALRstQCbN4K/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FRAC35fY5jBzDnERbL39K9awf6o7eAFvXhptUVZE8Grv", - "symbol": "FRAC", - "name": "Fractal", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FRAC35fY5jBzDnERbL39K9awf6o7eAFvXhptUVZE8Grv/logo.png", - "tags": ["Fractal-coin", "fractally-divisible", "deflatory", "capped"] - }, - { - "chainId": 101, - "address": "FKL9NfHNDHLYpFjE8WhPyg9XDDcUtaweDCnJTLmb4TQy", - "symbol": "JJC", - "name": "JaramCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/josejaram/JaramCoin/main/JJLogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EU71mB7Vsk8onvMdZ5wPtWGS2nRt1rEdfxzHW42PFPqb", - "symbol": "BIOCHIP", - "name": "Biochip token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EU71mB7Vsk8onvMdZ5wPtWGS2nRt1rEdfxzHW42PFPqb/logo.png", - "tags": ["dna-microarray", "token", "biochip", "chip"] - }, - { - "chainId": 101, - "address": "7ZjyPmx4JNu6Wu5eXBBbtB63Z9Ga7Psxqax2WBr8fD2a", - "symbol": "MGC", - "name": "Midnight Gremlin Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Midnight-Gremlin/crypto/main/Midnight-Gremlin-Coin.png", - "tags": ["musician-token"] - }, - { - "chainId": 101, - "address": "EuKSYaM8Rgy9x4aaq4Mf9bUMcuBPLSLw5SyV2XR32wY7", - "symbol": "POTR", - "name": "PartyOtter", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/HyRo34/crypto/main/PartyOtter.png", - "tags": ["social-token", "meme-token"] - }, - { - "chainId": 101, - "address": "95P1nEvDCoRQT79zdC13JzkyBUCgaxLAJoJw487Nzhcy", - "symbol": "PTST", - "name": "Palm Tree Square Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/BigAsheHole/Crypto/main/PTST%20logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EwJPQzwjQnVH1hEb7jqUXqpEGf7dBvkahj9BGXXaM4we", - "symbol": "SQKY", - "name": "Squeaky Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/nottanudder/pammytoken/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AyD9X4EGFzfahi1oZLZQDfgRaTZEd2UYHNEZpnVJxz9z", - "symbol": "VELO", - "name": "Velosity", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/inventari/crypto/main/Velosity.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "H7VBf2BrJGh5B66hfjHghrRG1YW4xxnL3ztEGgKTyWJ", - "symbol": "MARK", - "name": "Markley", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/inventari/crypto/main/Markley.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BFhbtoxLKrhG6ZU4R5S32S6DrPRjwxPQQgbpEZZe39ip", - "symbol": "FAVR", - "name": "Favor", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/inventari/crypto/main/Favor.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "yLP4agSHVPv7oxDFQ38fuwJGQA4MV1kJJy4SuNbDEHj", - "symbol": "y-wUSD-4Pool", - "name": "Yield Mercurial LP Token (wUSD-4Pool)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/yLP4agSHVPv7oxDFQ38fuwJGQA4MV1kJJy4SuNbDEHj/logo.svg", - "tags": ["yield-token"], - "extensions": { - "website": "https://bunnyducky.com/" - } - }, - { - "chainId": 101, - "address": "yM3pjpurEuod4TQ3m4KoV2Rj6Jjge4EGexX7NyiRL2P", - "symbol": "y-UST-3Pool", - "name": "Yield Mercurial LP Token (UST-3Pool)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/yM3pjpurEuod4TQ3m4KoV2Rj6Jjge4EGexX7NyiRL2P/logo.svg", - "tags": ["yield-token"], - "extensions": { - "website": "https://bunnyducky.com/" - } - }, - { - "chainId": 101, - "address": "yM4piMddLe45SVccNqbRfZFPCQzNByXERjL3VKxFRWP", - "symbol": "y-wbBUSD-4Pool", - "name": "Yield Mercurial LP Token (wbBUSD-4Pool)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/yM4piMddLe45SVccNqbRfZFPCQzNByXERjL3VKxFRWP/logo.svg", - "tags": ["yield-token"], - "extensions": { - "website": "https://bunnyducky.com/" - } - }, - { - "chainId": 101, - "address": "yMstKuGEW6v34MB4d3wBd4BTEsHhexLzZca6cCg2DPy", - "symbol": "y-stSOL-2Pool", - "name": "Yield Mercurial LP Token (stSOL-2Pool)", - "decimals": 12, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/yMstKuGEW6v34MB4d3wBd4BTEsHhexLzZca6cCg2DPy/logo.svg", - "tags": ["yield-token"], - "extensions": { - "website": "https://bunnyducky.com/" - } - }, - { - "chainId": 101, - "address": "yMmSMGXaLqyMc9Vo9LR6BhX7m789xrVdJmiUYUKk4aB", - "symbol": "y-mSOL-2Pool", - "name": "Yield Mercurial LP Token (mSOL-2Pool)", - "decimals": 12, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/yMmSMGXaLqyMc9Vo9LR6BhX7m789xrVdJmiUYUKk4aB/logo.svg", - "tags": ["yield-token"], - "extensions": { - "website": "https://bunnyducky.com/" - } - }, - { - "chainId": 101, - "address": "y2poavXfuAHWRizzK52vegqzzkHUo5CzooxFzDDX6vp", - "symbol": "y-USDT-USDC", - "name": "Yield Saber LP Token (USDT-USDC)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/y2poavXfuAHWRizzK52vegqzzkHUo5CzooxFzDDX6vp/logo.svg", - "tags": ["yield-token"], - "extensions": { - "website": "https://bunnyducky.com/" - } - }, - { - "chainId": 101, - "address": "9Lhf1327tmJpbKiedjwJrBWp27T6snR2cJwSwjhBZjBW", - "symbol": "DMS", - "name": "DMScoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SalahMessaoud/dms/main/dms.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3cCtnQcc81oUfjufBL6D1yXNqt99TPt8n4HinW9h58wP", - "symbol": "STARTREK", - "name": "StarTrek Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3cCtnQcc81oUfjufBL6D1yXNqt99TPt8n4HinW9h58wP/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/snft2022", - "website": "https://solana-nft.io/" - } - }, - { - "chainId": 101, - "address": "FXKM9Ziz9kTTRbpUxxS2rUipSnJmeyNAkLDbabr5RTpb", - "symbol": "QMC", - "name": "QMC Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FXKM9Ziz9kTTRbpUxxS2rUipSnJmeyNAkLDbabr5RTpb/logo.jpg", - "tags": ["QMC-Token"] - }, - { - "chainId": 101, - "address": "3XmvR9uW1NQhUpdZjFDqZSD8SrRvzThYnS2UETGgqzdG", - "symbol": "RTF", - "name": "Royal Tokens of Raf", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MrRafB/rtof/main/rtof.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Cik9YZ43UQMG1W31N7SJ5KYUTTP6WDqwZMzzYfh8Ezqm", - "symbol": "SOLFLO", - "name": "Solana Flow", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/julz201/SOLFLO/main/logo1.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8kZaHZV981fS4MiXm4QkLDsYXE5rqgcFw9ofPuSswvSV", - "symbol": "MINAWI", - "name": "minawi", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/minawi69/minawi-token/main/logo.png.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "12WvCE1De1VjSRqSGQaity54T8Mvo22gvnxs1Lxc2Vmx", - "symbol": "KBREW", - "name": "Koasbrew Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/dawa82/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "7Xn4mM868daxsGVJmaGrYxg8CZiuqBnDwUse66s5ALmr", - "symbol": "SIMPDEV", - "name": "SimpiansDEV", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7Xn4mM868daxsGVJmaGrYxg8CZiuqBnDwUse66s5ALmr/logo.png", - "tags": [ - "nft", - "utility-token", - "gaming-token", - "gaming", - "play-to-earn", - "breeding-token" - ], - "extensions": { - "description": "Dynamic NFT breeding-trading-legacy making game", - "reddit": "https://www.reddit.com/r/simpians/", - "twitter": "https://twitter.com/SimpiansNFT", - "website": "https://www.simpians.com/" - } - }, - { - "chainId": 101, - "address": "8158KuiGXjjnMbzdAo2jZzRFAs8QwvVzo2v22aZstyTN", - "symbol": "FLOWERS", - "name": "live Flowers", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/AndrianBalanescu/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "H6EqB6rSLEWsVfbhZw2hh7STU5Kd9RNUt24Jn1Vy8H66", - "symbol": "STEVE", - "name": "Steeeeve", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/onedoubleo/cyrpto/main/logo.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "4NGNdLiQ1KG8GgqZimKku4WCLdXbNw6UQJvqax3fE6CJ", - "symbol": "WAV", - "name": "Fractionalized WAVE-999", - "decimals": 2, - "logoURI": "https://www.arweave.net/qV0rFkGG-cTdtgRu7le-k8DstT8_-pzG2MWsceSlXjQ?ext=png", - "tags": ["bridgesplit-fraction", "playground-wave", "wave-999", "fnft"], - "extensions": { - "discord": "https://discord.gg/fjrFpbweAP", - "twitter": "https://twitter.com/bridgesplit", - "vault": "https://app.bridgesplit.com/vault/4NGNdLiQ1KG8GgqZimKku4WCLdXbNw6UQJvqax3fE6CJ" - } - }, - { - "chainId": 101, - "address": "751v6p8xrGdX8pzdZtkgDpNirWmuoQuFnpAJhtXD8cPz", - "symbol": "RaLeMA", - "name": "RafaLeoManny", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Rafinix/Crypto/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4suNmcT5nPgG8rMMS9XwCdFH9e9ZDpZoCXiXUsCJTbsu", - "symbol": "RLM", - "name": "rafaleomanny", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Rafinix/Crypto/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DkKgBEu1KqcKMU8JsVyvRKx8KxoRPDTtLtC8Eg1ocVsL", - "symbol": "CRCN", - "name": "Currie Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/vpourchot/crypto/main/currie_coin1.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GcoAoh8ZAu2oVXm3Ac8Z9WvxGc6kcdDUE3PL19nvs5uJ", - "symbol": "BULK", - "name": "Bullcoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/buffymuscot/crypto/main/logo.png", - "tags": ["social-token", "bull", "NFT", "jari"] - }, - { - "chainId": 103, - "address": "9NAkASxt7EiYDhjskaTiHw9K2j2ac5mGB2WRwLRzKeUA", - "symbol": "AGE", - "name": "Medieval Age Token", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9NAkASxt7EiYDhjskaTiHw9K2j2ac5mGB2WRwLRzKeUA/logo.png" - }, - { - "chainId": 101, - "address": "FCEhKMcpytVdmNXv5pMLX6mAxUkEN9yUGrJw6zsV4PHB", - "symbol": "WLTHN", - "name": "Whalethen", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jimji1005/whalethen/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EKMQbbKzZgTwXbfhNqRHd2m6c1KtZcHf4bJnQHDru8Eh", - "symbol": "EQXT", - "name": "eqx Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/ass77/buildspace-nft-client/main/public/eqx.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BbfVPdU5yuYyDQErmvbm2USqTQt9pH9j3k3tSx8ZxL9Q", - "symbol": "SOLFISH", - "name": "SOLFISH", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BbfVPdU5yuYyDQErmvbm2USqTQt9pH9j3k3tSx8ZxL9Q/logo.png", - "tags": ["social-token"], - "extensions": { - "discord": "https://discord.com/invite/jDr6sCM3jE", - "twitter": "https://twitter.com/SharkSociety_", - "website": "https://billionairesharksociety.com" - } - }, - { - "chainId": 101, - "address": "xZsp3D2JhBvgjdQzd5nobU26CALm916nYwZys3gRPux", - "symbol": "SOLACE", - "name": "Solace Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/xZsp3D2JhBvgjdQzd5nobU26CALm916nYwZys3gRPux/logo.png", - "tags": ["solmergeaicom"], - "extensions": { - "twitter": "https://twitter.com/solacetoken", - "website": "https://www.solacetoken.com/" - } - }, - { - "chainId": 101, - "address": "J6aYvKGLbAJXyjWrwfoo3pUTgWVnmweExwL8iNskkaNm", - "symbol": "VSWAY", - "name": "VOTERSWAY", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/wevote-project/votersway/main/benny.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FFg7BMsmxiwVSrKXrKHrKEwaHTEYSUfdzBBCoJZfQsfo", - "symbol": "GUA", - "name": "Gua Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FFg7BMsmxiwVSrKXrKHrKEwaHTEYSUfdzBBCoJZfQsfo/logo.png", - "tags": ["meme-token"], - "extensions": { - "twitter": "https://twitter.com/snft2022", - "website": "https://solana-nft.io/" - } - }, - { - "chainId": 101, - "address": "EPSivq2E7s6PwqijJpAAqmj3vogxn6yV9ZgnxE3GxbSM", - "symbol": "EPSI", - "name": "Epsilon", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EPSivq2E7s6PwqijJpAAqmj3vogxn6yV9ZgnxE3GxbSM/logo.png", - "tags": ["viral-token", "meme-token", "capped-supply", "defatory-token"] - }, - { - "chainId": 101, - "address": "Hqt7YjTJcZt1QwR7G6P3y8FQarzZSH1kxJ9sW1j4UCpk", - "symbol": "SOLH", - "name": "Sol-Hotels", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SOLHotel/Crypto/main/sol-by-melia-2.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HbCRtAoxfYBVsYHSqHv256sEezRZF23dw8vqneEwHobp", - "symbol": "CLDY", - "name": "Cloudie", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Master-Teddy/crypto.logo/main/crypto.logo.png", - "tags": [ - "social-token", - "viral-token", - "meme-token", - "capped-supply", - "defatory-token" - ] - }, - { - "chainId": 101, - "address": "CBrv9C5isNXcYm5YxouHSw1VKiBZtmFmsgCPscoKhY8i", - "symbol": "ALL", - "name": "Allowance Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/jamroszk/crypto/main/All_Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FNwzqPdAF4rXS8tny3RrdvQemUsZkShouceBK2MnFyPT", - "symbol": "SHIPO", - "name": "Shiba Poker Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/shibasolana/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5DmWkHuc6YwWGSQmAS39BvWqKL7q5k3PfSobPQ6eYjSf", - "symbol": "ALC", - "name": "Alice Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/KyleF0X/crypto/main/AliceCoinNew.png", - "tags": [ - "social-token", - "utility-token", - "campaign-token", - "national-elections", - "future-primeminister" - ] - }, - { - "chainId": 101, - "address": "7Y8TLC4fdQqS4EnBLhhw9ivSZcn2Gs4sJjfk9tu7PChz", - "symbol": "FOXC", - "name": "Fox Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/KyleF0X/crypto/main/FoxCoin.png", - "tags": ["social-token", "Utility-token"] - }, - { - "chainId": 101, - "address": "3TUw5cHyMAwzXU6JqarUwizYdzdfqxvAJBcWeFHcZyiK", - "symbol": "GRNT", - "name": "Grant Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/KyleF0X/crypto/main/GrantCoinNew.png", - "tags": [ - "social-token", - "utility-token", - "philanthropy-token", - "change-the-world" - ] - }, - { - "chainId": 101, - "address": "GYX6vH8CerAGKxikCXGhX4uSFpwqrTP4dRqMZrm5Cn3r", - "symbol": "TTS", - "name": "The Travel Shop", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ollisailing/tts/main/tts.png", - "tags": ["travel-token"] - }, - { - "chainId": 101, - "address": "Dys38dBBBCBzwfP5WuxNb2hcQdzJMMLZEFXeadtxEXCZ", - "symbol": "MCCN", - "name": "mccoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/drx36/mccoin/main/mccoin.png", - "tags": ["mcdonalds"] - }, - { - "chainId": 101, - "address": "ggsgHDoX6tACq25XhQPUmbza8Fzwp9WdAzTU1voTwDi", - "symbol": "GGSG", - "name": "Galactic Geckos Droplet", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ggsgHDoX6tACq25XhQPUmbza8Fzwp9WdAzTU1voTwDi/logo.png", - "tags": ["utility-token", "solvent-droplet"], - "extensions": { - "discord": "https://discord.gg/thK8BCtQbM", - "github": "https://github.com/solventprotocol", - "medium": "https://medium.com/@solventprotocol", - "serumV3Usdc": "2x6dmFevT3MGCZYPE2eagautjyQFVq4YwHsKow5bCVCs", - "telegram": "https://t.me/solventprotocol", - "twitter": "https://twitter.com/solventprotocol", - "website": "https://solvent.xyz" - } - }, - { - "chainId": 101, - "address": "8qeb2aBZtvTXc2oGTTzKSjqrKLVFQXn7WAjGhJzqsBqi", - "symbol": "FWDLA", - "name": "FlowDolla", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/keanuvanderbie/logo/main/download.png", - "tags": ["flowdolla"] - }, - { - "chainId": 101, - "address": "85JRDbTen5BnkeFSzATnwYmGENfCgst1zc2HrTdKF2hy", - "symbol": "THRC", - "name": "3coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/smileyprogrammer/solana-cryptoc-token/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AtBB9xQCFfib9BzXeFPnZAvmuA6dJYsHn3brA9UrPXxr", - "symbol": "QUINN", - "name": "QuinnCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/sbquinn/QuinnCoin/main/qclogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3rxQA46tE9a96WBgFxCntiyyYuprTma6e9hXuDNLBsvV", - "symbol": "Mcb", - "name": "MarrsCoin Beta", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/theNetworkChuck/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "14f1nVCKADXMWXaRpuRzzhSwa9wYMAuuxiN9cETM3eue", - "symbol": "RJOT", - "name": "RJO Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/rjorgan/cryptocurrency/main/RJOT.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9RnsxByFw8RsYHoidmoEL4mupr7VgRk5ozpKPCHDPaBS", - "symbol": "VCTR", - "name": "Vectorium", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/PaulJoych/vectorium/main/logo.png", - "tags": ["social-token", "game-token"] - }, - { - "chainId": 101, - "address": "G1TiV92UmbRj8nYH7HoJXFmnfFJ8aTdyZYvpjnLcMLro", - "symbol": "SOV", - "name": "soviet-token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/eberling/soviet/main/New%20Project.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4yHJZqqV5hPJHt59EwEQ1y2Mh1ESwJBpZcUyU5TMLgJR", - "symbol": "WHP", - "name": "WhiteHen", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/TrishkaV/WhiteHenProject/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7sqrNp7MxNwpXwB72Qp3CWfTF27D7SpV48MCwAteoYDb", - "symbol": "UFCS", - "name": "UF Computer Science Token", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/inventari/crypto/main/UFCS.png", - "tags": ["social-token"], - "extensions": { - "description": "Token created for the department of Computer Science at University of Findlay for staff, students, and advisory board members", - "website": "https://www.findlay.edu/sciences/computer-science/" - } - }, - { - "chainId": 101, - "address": "CZZxxnXY76xv5tebfufZXgH9DTsyYnW4fUV8cuCXUQux", - "symbol": "CZZ", - "name": "Chai Zuzim", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CZZxxnXY76xv5tebfufZXgH9DTsyYnW4fUV8cuCXUQux/logo.png", - "extensions": { - "twitter": "https://twitter.com/chaizuzim", - "website": "https://chaizuzim.com" - } - }, - { - "chainId": 101, - "address": "9Dzex6kbpTBSyPFaCu1QkkALp4tpegmxD1vMgHRQVR7S", - "symbol": "MELCO", - "name": "Melo Coin", - "decimals": 0, - "logoURI": "https://github.com/melodasi/crypto/blob/main/melocoinlogo.PNG", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "uZZ8ptqyGMWBK1WBtpTSmctw5pUj3cgMZAEauk7Wgw2", - "symbol": "NIAR", - "name": "Arsanya", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Templight41/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "F3DShX6CavzqRwVSmDfkoih8xGVeSy3RzzxvUxmszi3D", - "symbol": "LBD", - "name": "Liebde Coin", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/liebde/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Cnptf46Jh1RkjtV27SCd6J45XHVQWcnZ4WfWMAzLHePo", - "symbol": "RKZC", - "name": "Rekzi Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Cnptf46Jh1RkjtV27SCd6J45XHVQWcnZ4WfWMAzLHePo/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EMorf1mG8t3TeJfoE9bNNZkC4Hsif9hC9TU8yziHcPYc", - "symbol": "SHAKUDO", - "name": "ShakudoX", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EMorf1mG8t3TeJfoE9bNNZkC4Hsif9hC9TU8yziHcPYc/logo.png", - "extensions": { - "website": "https://shakudo.io/" - } - }, - { - "chainId": 101, - "address": "AS86ZXVsSrVVh9ZJ4WFJmq1teSvayFfG7qzfc5e8UxvM", - "symbol": "SCAM_053C", - "name": "SCAM TOKEN PLEASE IGNORE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AS86ZXVsSrVVh9ZJ4WFJmq1teSvayFfG7qzfc5e8UxvM/logo.png" - }, - { - "chainId": 101, - "address": "9Cs1JW3uMyzLnCduK8ukDJWUWgVGHV5LiWjvQztxf6uH", - "symbol": "SCAM_0BAE", - "name": "SCAM TOKEN PLEASE IGNORE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9Cs1JW3uMyzLnCduK8ukDJWUWgVGHV5LiWjvQztxf6uH/logo.png" - }, - { - "chainId": 101, - "address": "5LVTQYHeu5jx1oTbwLQF9QEdPqV9KPUgxm1772fArY1p", - "symbol": "SCAM_01E2", - "name": "SCAM TOKEN PLEASE IGNORE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5LVTQYHeu5jx1oTbwLQF9QEdPqV9KPUgxm1772fArY1p/logo.png" - }, - { - "chainId": 101, - "address": "8PYkbcenAWxniMCPKAAuQyxpvnw681nL9nJjwTHA6c7j", - "symbol": "SCAM_6617", - "name": "SCAM TOKEN PLEASE IGNORE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8PYkbcenAWxniMCPKAAuQyxpvnw681nL9nJjwTHA6c7j/logo.png" - }, - { - "chainId": 101, - "address": "Aeg9tGNoa36G59WNZc3EAUN3t1mfFE5c4xFPAjGWweR2", - "symbol": "SCAM_B8CF", - "name": "SCAM TOKEN PLEASE IGNORE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Aeg9tGNoa36G59WNZc3EAUN3t1mfFE5c4xFPAjGWweR2/logo.png" - }, - { - "chainId": 101, - "address": "4vzavYtxLVCKGguiCkKCJ9zbg8z2NoCTDfpaMcdv8yon", - "symbol": "SCAM_D256", - "name": "SCAM TOKEN PLEASE IGNORE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4vzavYtxLVCKGguiCkKCJ9zbg8z2NoCTDfpaMcdv8yon/logo.png" - }, - { - "chainId": 101, - "address": "HEqcDLPDBMNeZwmxqqSAq8xGQB28E5BTgNTDm3oxPvGa", - "symbol": "SCAM_7BB4", - "name": "SCAM TOKEN PLEASE IGNORE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HEqcDLPDBMNeZwmxqqSAq8xGQB28E5BTgNTDm3oxPvGa/logo.png" - }, - { - "chainId": 101, - "address": "6L2y6QBsPq3fFfjSfRx2HS6fAoLETY77oWfuYWUSub67", - "symbol": "SCAM_A296", - "name": "SCAM TOKEN PLEASE IGNORE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6L2y6QBsPq3fFfjSfRx2HS6fAoLETY77oWfuYWUSub67/logo.png" - }, - { - "chainId": 101, - "address": "7ezQ4XB3yqQhvXfnWc8vRGvvfYuF419fJtSFLKrHTGJF", - "symbol": "SCAM_9DCD", - "name": "SCAM TOKEN PLEASE IGNORE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7ezQ4XB3yqQhvXfnWc8vRGvvfYuF419fJtSFLKrHTGJF/logo.png" - }, - { - "chainId": 101, - "address": "Du9SG4NW2q5PDzDcGqVQaXWXLbAGqxKhHgCKUJrwth8n", - "symbol": "SCAM_19FF", - "name": "SCAM TOKEN PLEASE IGNORE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Du9SG4NW2q5PDzDcGqVQaXWXLbAGqxKhHgCKUJrwth8n/logo.png" - }, - { - "chainId": 101, - "address": "7Ne4bR2k1fUxGcH98KwdNYj1HYcHNGkm3EhMsP7p4DdV", - "symbol": "SCAM_B1BE", - "name": "SCAM TOKEN PLEASE IGNORE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7Ne4bR2k1fUxGcH98KwdNYj1HYcHNGkm3EhMsP7p4DdV/logo.png" - }, - { - "chainId": 101, - "address": "EhEnDTgsDr2CSv7xBtgquwnrdScyWQEFgSP7Aycpoz9H", - "symbol": "SCAM_D610", - "name": "SCAM TOKEN PLEASE IGNORE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EhEnDTgsDr2CSv7xBtgquwnrdScyWQEFgSP7Aycpoz9H/logo.png" - }, - { - "chainId": 101, - "address": "7idro6sV7p4TDjqcDGaH9ofQgDy6yBKxCK65NtS7A9AP", - "symbol": "SCAM_DCBD", - "name": "SCAM TOKEN PLEASE IGNORE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7idro6sV7p4TDjqcDGaH9ofQgDy6yBKxCK65NtS7A9AP/logo.png" - }, - { - "chainId": 101, - "address": "Dne2srRF7Nv2sJHAEGgT2NfPCcgX1Qcmm3pqzyPvxJmr", - "symbol": "SCAM_FFFF", - "name": "SCAM TOKEN PLEASE IGNORE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Dne2srRF7Nv2sJHAEGgT2NfPCcgX1Qcmm3pqzyPvxJmr/logo.png" - }, - { - "chainId": 101, - "address": "Hdu7gvU8s48wE9HKRnUkpnjFeWAebNHghCGehUMGJPib", - "symbol": "SCAM_FB20", - "name": "SCAM TOKEN PLEASE IGNORE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Hdu7gvU8s48wE9HKRnUkpnjFeWAebNHghCGehUMGJPib/logo.png" - }, - { - "chainId": 101, - "address": "94KpMsJPfynoGwsuaKePnZgvn3X4D1FYC23p8D8JB3fr", - "symbol": "SCAM_534B", - "name": "SCAM TOKEN PLEASE IGNORE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/94KpMsJPfynoGwsuaKePnZgvn3X4D1FYC23p8D8JB3fr/logo.png" - }, - { - "chainId": 101, - "address": "38ns993xRAXXxbun3PU634SbBsrkQewJjxztZsJLAaJr", - "symbol": "SCAM_BD15", - "name": "SCAM TOKEN PLEASE IGNORE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/38ns993xRAXXxbun3PU634SbBsrkQewJjxztZsJLAaJr/logo.png" - }, - { - "chainId": 101, - "address": "3Qug1jMgAhLvo8A95BVAwtYXfKct3Bz3iw4aMFqGfs9p", - "symbol": "SCAM_9BFF", - "name": "SCAM TOKEN PLEASE IGNORE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3Qug1jMgAhLvo8A95BVAwtYXfKct3Bz3iw4aMFqGfs9p/logo.png" - }, - { - "chainId": 101, - "address": "4nfhEh4K2UY6SWY7HkoSLZLerFJCUsyBiQqiEkxqXn6N", - "symbol": "SCAM_1491", - "name": "SCAM TOKEN PLEASE IGNORE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4nfhEh4K2UY6SWY7HkoSLZLerFJCUsyBiQqiEkxqXn6N/logo.png" - }, - { - "chainId": 101, - "address": "97abH276RFkjuCt5ZoqZJ58fpSoJpEN4oxyBTjXU1DjD", - "symbol": "SCAM_5D91", - "name": "SCAM TOKEN PLEASE IGNORE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/97abH276RFkjuCt5ZoqZJ58fpSoJpEN4oxyBTjXU1DjD/logo.png" - }, - { - "chainId": 101, - "address": "F5ocHboe2BMjW7iUcinQnTtPV2JFbDhWj8dUvb9mEEY6", - "symbol": "SCAM_42B1", - "name": "SCAM TOKEN PLEASE IGNORE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/F5ocHboe2BMjW7iUcinQnTtPV2JFbDhWj8dUvb9mEEY6/logo.png" - }, - { - "chainId": 101, - "address": "BqKAcnMm9tvF3RJvxA6H75XpM9d7VZuNZzYiLW1vaGMo", - "symbol": "SCAM_3A41", - "name": "SCAM TOKEN PLEASE IGNORE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BqKAcnMm9tvF3RJvxA6H75XpM9d7VZuNZzYiLW1vaGMo/logo.png" - }, - { - "chainId": 101, - "address": "J4ciBemqvv8zeWsrWz8sik694KEYEBotxyXZubcu2oQc", - "symbol": "SCAM_0247", - "name": "SCAM TOKEN PLEASE IGNORE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/J4ciBemqvv8zeWsrWz8sik694KEYEBotxyXZubcu2oQc/logo.png" - }, - { - "chainId": 101, - "address": "DqWweYSkTEQLQ2eNoUgF9vAZEdar5jpyTSEaKrxviQw4", - "symbol": "SCAM_2C3B", - "name": "SCAM TOKEN PLEASE IGNORE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DqWweYSkTEQLQ2eNoUgF9vAZEdar5jpyTSEaKrxviQw4/logo.png" - }, - { - "chainId": 101, - "address": "7mJ33816m8RE3Pb34WsHRLCJnYiWsexzoJE4Ss5pWeuf", - "symbol": "SCAM_0DF7", - "name": "SCAM TOKEN PLEASE IGNORE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7mJ33816m8RE3Pb34WsHRLCJnYiWsexzoJE4Ss5pWeuf/logo.png" - }, - { - "chainId": 101, - "address": "Hn6Ev3AYAGt9HDNuKcekELrXu41cyovWzhJCYaZoApMN", - "symbol": "SCAM_4777", - "name": "SCAM TOKEN PLEASE IGNORE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Hn6Ev3AYAGt9HDNuKcekELrXu41cyovWzhJCYaZoApMN/logo.png" - }, - { - "chainId": 101, - "address": "5UNCikpehY6AjK8Ytr5JAEbZZtqonwcucpj6LyyQkz24", - "symbol": "SCAM_A900", - "name": "SCAM TOKEN PLEASE IGNORE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5UNCikpehY6AjK8Ytr5JAEbZZtqonwcucpj6LyyQkz24/logo.png" - }, - { - "chainId": 101, - "address": "8NBhVydpYftG95YMMEcW7rGGMWEcxRRMof3jHyYPzFxw", - "symbol": "SCAM_E9E1", - "name": "SCAM TOKEN PLEASE IGNORE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8NBhVydpYftG95YMMEcW7rGGMWEcxRRMof3jHyYPzFxw/logo.png" - }, - { - "chainId": 101, - "address": "2mJ63AfLKHn7eiqtQNgG2tGW78wBZbaHceouiyww8yEK", - "symbol": "SCAM_4E5A", - "name": "SCAM TOKEN PLEASE IGNORE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2mJ63AfLKHn7eiqtQNgG2tGW78wBZbaHceouiyww8yEK/logo.png" - }, - { - "chainId": 101, - "address": "ARHsGjpku8r5U8m1N3sMbU4xj5kPVuHYBKSaUXocovWa", - "symbol": "SCAM_2BED", - "name": "SCAM TOKEN PLEASE IGNORE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ARHsGjpku8r5U8m1N3sMbU4xj5kPVuHYBKSaUXocovWa/logo.png" - }, - { - "chainId": 101, - "address": "DVtyWhNsgTh3dVh2JeEpRKwB85dtYeF8eGcvtEBYmFjW", - "symbol": "SCAM_B362", - "name": "SCAM TOKEN PLEASE IGNORE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DVtyWhNsgTh3dVh2JeEpRKwB85dtYeF8eGcvtEBYmFjW/logo.png" - }, - { - "chainId": 101, - "address": "62yapYKJW1UrRqGUUKRSrvHJf6pX6oqLUEgG7B9BqYWL", - "symbol": "SCAM_05F3", - "name": "SCAM TOKEN PLEASE IGNORE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/62yapYKJW1UrRqGUUKRSrvHJf6pX6oqLUEgG7B9BqYWL/logo.png" - }, - { - "chainId": 101, - "address": "4TFZPK4ynPE3WeP9jX4MGYWgZcS7g1BTtLqfffg4qZth", - "symbol": "SCAM_7843", - "name": "SCAM TOKEN PLEASE IGNORE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4TFZPK4ynPE3WeP9jX4MGYWgZcS7g1BTtLqfffg4qZth/logo.png" - }, - { - "chainId": 101, - "address": "2BbnhPHBQEx5d292D5fJjhfEMf9v9BC6zbgzxujZnEFP", - "symbol": "SCAM_23B6", - "name": "SCAM TOKEN PLEASE IGNORE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2BbnhPHBQEx5d292D5fJjhfEMf9v9BC6zbgzxujZnEFP/logo.png" - }, - { - "chainId": 101, - "address": "7puLTNvfApp9hYgZC3pSCqL64e5ULjezJN4a6fH86cBS", - "symbol": "SCAM_47F8", - "name": "SCAM TOKEN PLEASE IGNORE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7puLTNvfApp9hYgZC3pSCqL64e5ULjezJN4a6fH86cBS/logo.png" - }, - { - "chainId": 101, - "address": "68ghtDyk3YxAXVtMbvCd2J9j1hD3TLdVfG417zonzV6d", - "symbol": "SCAM_6AFF", - "name": "SCAM TOKEN PLEASE IGNORE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/68ghtDyk3YxAXVtMbvCd2J9j1hD3TLdVfG417zonzV6d/logo.png" - }, - { - "chainId": 101, - "address": "ARHaNjDLfkxrE9SQNHuuUihEt8SsN5yRxjTPuzpgPXH4", - "symbol": "SCAM_18AD", - "name": "SCAM TOKEN PLEASE IGNORE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ARHaNjDLfkxrE9SQNHuuUihEt8SsN5yRxjTPuzpgPXH4/logo.png" - }, - { - "chainId": 101, - "address": "DbgFXFkjA9hpej7fSSivxDRXjFQwimjgWGu5gSVy7yqq", - "symbol": "SCAM_E4E0", - "name": "SCAM TOKEN PLEASE IGNORE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DbgFXFkjA9hpej7fSSivxDRXjFQwimjgWGu5gSVy7yqq/logo.png" - }, - { - "chainId": 101, - "address": "HRbw1bM7pQX98DSVbHXUegDwv6kbMKrUjF9QSCv9tp8F", - "symbol": "SCAM_4A2F", - "name": "SCAM TOKEN PLEASE IGNORE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HRbw1bM7pQX98DSVbHXUegDwv6kbMKrUjF9QSCv9tp8F/logo.png" - }, - { - "chainId": 101, - "address": "EnC3T8r4ghh2Ck6dh9Ry5eXVPFi6WvxBZV7ZCcK8HtKr", - "symbol": "SCAM_FFCB", - "name": "SCAM TOKEN PLEASE IGNORE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EnC3T8r4ghh2Ck6dh9Ry5eXVPFi6WvxBZV7ZCcK8HtKr/logo.png" - }, - { - "chainId": 101, - "address": "4cwKg4T5XM4heJ3XWFBg9ZXxbcnJb2ehqQqoCnewoPk4", - "symbol": "SCAM_5480", - "name": "SCAM TOKEN PLEASE IGNORE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4cwKg4T5XM4heJ3XWFBg9ZXxbcnJb2ehqQqoCnewoPk4/logo.png" - }, - { - "chainId": 101, - "address": "D2ge6U5WiVe9eAcrX85XETuymm4B4FPs4VJdSHb6M53C", - "symbol": "SCAM_A4B4", - "name": "SCAM TOKEN PLEASE IGNORE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/D2ge6U5WiVe9eAcrX85XETuymm4B4FPs4VJdSHb6M53C/logo.png" - }, - { - "chainId": 101, - "address": "GrQaiQFxRSwdCpK9iWF35nJXmfP53UEB4jTSNRfEEpnv", - "symbol": "SCAM_22B1", - "name": "SCAM TOKEN PLEASE IGNORE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GrQaiQFxRSwdCpK9iWF35nJXmfP53UEB4jTSNRfEEpnv/logo.png" - }, - { - "chainId": 101, - "address": "9ZcZ2x94JkCEi863gQwterYkaNFCT266KmMbRV3iaBMC", - "symbol": "SCAM_BE4E", - "name": "SCAM TOKEN PLEASE IGNORE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9ZcZ2x94JkCEi863gQwterYkaNFCT266KmMbRV3iaBMC/logo.png" - }, - { - "chainId": 101, - "address": "CatvdK2bzfREDnFEnydcodB4yaV39qkSiGphzxMwCmzE", - "symbol": "SCAM_62AB", - "name": "SCAM TOKEN PLEASE IGNORE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CatvdK2bzfREDnFEnydcodB4yaV39qkSiGphzxMwCmzE/logo.png" - }, - { - "chainId": 101, - "address": "D2gQhgJz7DM4gUBcuCe7HtCtJtMqvdSSX7LXV2j2hUVJ", - "symbol": "SCAM_963D", - "name": "SCAM TOKEN PLEASE IGNORE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/D2gQhgJz7DM4gUBcuCe7HtCtJtMqvdSSX7LXV2j2hUVJ/logo.png" - }, - { - "chainId": 101, - "address": "ErSwFxb8wJRzpyRr2WSUa9iD9ViS4wnvyTi9AWDWoAPE", - "symbol": "SCAM_55B4", - "name": "SCAM TOKEN PLEASE IGNORE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ErSwFxb8wJRzpyRr2WSUa9iD9ViS4wnvyTi9AWDWoAPE/logo.png" - }, - { - "chainId": 101, - "address": "4tVV3AaapvszL6LrWiHoBVYue9h6Hb9wmQ4DYnTYVWeT", - "symbol": "SCAM_F6FB", - "name": "SCAM TOKEN PLEASE IGNORE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4tVV3AaapvszL6LrWiHoBVYue9h6Hb9wmQ4DYnTYVWeT/logo.png" - }, - { - "chainId": 101, - "address": "4mUpkwjw7Tj5YSwxZHKuE5hb8PLe5gqMvx2mDqAPojWd", - "symbol": "SHIVA", - "name": "Shiva Sharma", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/shivasharma/crypto/main/logo.PNG", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GWgwUUrgai3BFeEJZp7bdsBSYiuDqNmHf9uRusWsf3Yi", - "symbol": "SAFU", - "name": "1SAFU", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GWgwUUrgai3BFeEJZp7bdsBSYiuDqNmHf9uRusWsf3Yi/logo.png", - "tags": ["DeFi"], - "extensions": { - "coingeckoId": "1safu", - "discord": "https://discord.gg/avdNF9s4CF", - "serumV3Usdc": "H8sjxDJWVxC3kP5uZ3p9eZncc4Czn9pTWEA6bH2XX7rM", - "telegram": "https://t.me/sol1safu", - "twitter": "https://twitter.com/1safu_sol", - "website": "https://www.1safu.com/" - } - }, - { - "chainId": 101, - "address": "EvG67NNXyM3yHk13EpjV8JgzdLgAuydR8au1zKpiGmkt", - "symbol": "DAKPLS", - "name": "DakPlus BV", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/DakPlus/dakplus-token/main/DakPlusPNG.png", - "tags": ["anchor-token", "BlockExchange"] - }, - { - "chainId": 101, - "address": "BbrhzVrirDHJhByTHCtHc2YQd9pNfkwKZtjjhNuF6RYS", - "symbol": "SKYC", - "name": "SkyCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BbrhzVrirDHJhByTHCtHc2YQd9pNfkwKZtjjhNuF6RYS/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9oiC3NueSWBAuGPj4ophbdwW9STQFD9AtCgcwhrC4P6M", - "symbol": "GRNLF", - "name": "GreenLeaf", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Malkowiak14/logo/main/greenleafproject1.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EPtUhHru9MNMvgHgdMxzgFY4DSL1gs5Aa47rcPt9mZHM", - "symbol": "Db523", - "name": "Db523 Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Db523/Db523-Coin/main/hahfadfha%3Blh.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4iFrrgC6qZj6AQcMi61KfoGPejUztzENpDH4wSBpTT4W", - "symbol": "BOHEM", - "name": "Gallery Token", - "decimals": 0, - "logoURI": "https://www.arweave.net/5abqgGa3kuMhCdQ09OOtmw7EzQbk-Fsa_tBt000JAg8?ext=gif", - "tags": ["utility-token", "mint-token"], - "extensions": { - "twitter": "https://twitter.com/BohemiaArtFair", - "website": "https://bohemia.gallery" - } - }, - { - "chainId": 101, - "address": "5yipeWXSNQTySJ2sj2Qp21ZTm9HHWwpGqGJx3rBP6PD7", - "symbol": "OLIDO", - "name": "Olido", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/olidomix/crypto/main/logo.png", - "tags": ["fan-token", "music-token"], - "extensions": { - "youtube": "https://www.youtube.com/channel/UCK4gVVPR86YJVjrp2rKGmrg" - } - }, - { - "chainId": 101, - "address": "GY4hLpyh7ZvG5qW7y39LShLiKq2uX4o3zPWMpARaKwvj", - "symbol": "CBGE", - "name": "Cabbage Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/AfterMA7H/crypto/main/Item_Cabbage.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3ZHcr75m41a6quVZ6VHrRMeCpumUTzwuzEfhK65n8eop", - "symbol": "Subt", - "name": "Subtrack", - "decimals": 6, - "logoURI": "https://v-meter.com/images/sub.png", - "tags": ["anchor-token", "BlockExchange"] - }, - { - "chainId": 101, - "address": "5j81MNxc3ru546HtUKq5b3qDg9qmqATZz89MYyKhdwhm", - "symbol": "NPTC", - "name": "Neptun Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/neptuncoin/token-list/main/assets/mainnet/5j81MNxc3ru546HtUKq5b3qDg9qmqATZz89MYyKhdwhm/logo.png", - "tags": ["social-token", "community-token", "utility-token"] - }, - { - "chainId": 101, - "address": "A9nPLZSP48mLYC89sqdBg6jmgnTH6Do1fRCN36SXCRqA", - "symbol": "CAMPTOKEN", - "name": "Camp", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/A9nPLZSP48mLYC89sqdBg6jmgnTH6Do1fRCN36SXCRqA/logo.png" - }, - { - "chainId": 101, - "address": "JDX52hspqXahKheh1dnpZ3wqjWsezjSeiGZdQbYzy7P7", - "symbol": "AIHK", - "name": "IrabalaincHK", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/irabalainch/irabalainchcrypto/main/LOGO.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5XQM5N6zFa8hwWQm3CAMzULytvG4rqnedwTrxA5p8nKH", - "symbol": "RCOIN", - "name": "Rosecoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/fizztune/rosecoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "95qcUshGDmh7dPgKTUn8NwYNR3HxzZr7cJS4nT1XpLmU", - "symbol": "BC", - "name": "BCredit", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/thomas0050/Bcredit/main/BCredit.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ErG1AJ6bgYGkWauJcJ7LMiH4vC6iXThmNwgfmYLW42TZ", - "symbol": "SM", - "name": "SMCOIN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/salik111/crypto/main/Drawing.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HjG8tgUvhrpVoxv184wkZCQxUaB1e6AneoQbwMoZQ1nG", - "symbol": "LEAF", - "name": "Leaf Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HjG8tgUvhrpVoxv184wkZCQxUaB1e6AneoQbwMoZQ1nG/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://perkypikas.com" - } - }, - { - "chainId": 101, - "address": "DcAuapsmRUfvfkxjHUfn9hCw4U7XN3MBt8cWrEwG13FP", - "symbol": "CCCP", - "name": "SovietCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/eberling/soviet/main/New%20Project.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4mRFWeC8G49kpKPSVR49Xk9TDW8oXT8iw93QeaZryY8i", - "symbol": "SMCH", - "name": "Smooch", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/nmaltais/smooch-coin/master/smooch-coin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7KbJfvgSEjcaRHA3VSGnKQQs2bD48PuibLoSpNp4vDWq", - "symbol": "HTKN", - "name": "HoracioCoin", - "decimals": 0, - "logoURI": "https://github.com/hhtokenadmin/htoken/blob/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Cv2QrMYWmN9g6pcPmhAcZDTRDwqzsVQj43yTLnMHdBZa", - "symbol": "TORG", - "name": "TORGCrypto", - "decimals": 0, - "logoURI": "https://github.com/TORGCrypto/crypto/blob/main/TORG.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FGx2QCpL5rJyADEQLj1NuishrhGa3aoxADkDkuQGD14M", - "symbol": "KORR", - "name": "KorrKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/KorrSci/KorrKoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "72gHx36riVSVKoA7a6k1H93CA7yvaUVv5Yg54BSaSsWV", - "symbol": "GLT", - "name": "Green Life Token", - "decimals": 1, - "logoURI": "https://raw.githubusercontent.com/OOSHAGGY/GREENLIFECOIN/main/edit%20png.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Hme4PHAPEXziq3cCYtHKkv4cKdiCE65wwRTaqVhx98sW", - "symbol": "AKOW", - "name": "KingArthurCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/EyasZ/KingArthur/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EWvdioY8AY4btFj1EaK2wug9fc9WZaab52cpHFmoqMV3", - "symbol": "NEUM", - "name": "Starlight", - "decimals": 9, - "logoURI": "https://ipfs.io/ipfs/Qme78a6ciPwSia6znyZzNaoe1NC3e8Cmo7xbSTgVU1Nren", - "tags": ["utility-token"], - "extensions": { - "website": "https://starlight.ooo" - } - }, - { - "chainId": 101, - "address": "3ZhSmk4X1TrjD1obBbN4yW4WiN68QpuD9f2zW1udm1Kt", - "symbol": "MLC", - "name": "Money Laundering Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/youngreezy7/crypto/main/IMG_206.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "BsS6MEq7ZkdcggeAoiafi1XgNbqXDULi44FLLLJ6fGPv", - "symbol": "MWRC", - "name": "MoonWar Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/colinantonell/MWRC/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "E8LYrZeJ1B84PVhyUS58BLgifWgXLvuot2LQsmCR9Wv4", - "symbol": "LEAF", - "name": "Leaf Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/E8LYrZeJ1B84PVhyUS58BLgifWgXLvuot2LQsmCR9Wv4/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://perkypikas.com" - } - }, - { - "chainId": 101, - "address": "AV8C9U2HKUf5kKN1u3Nyr9KTZ8Vc69FCmwFbp4xSFRaD", - "symbol": "SIG", - "name": "Sigmoid", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AV8C9U2HKUf5kKN1u3Nyr9KTZ8Vc69FCmwFbp4xSFRaD/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ZBkNgmPFienXwWVPg5LRSf3nZTKEHc9BQrayWPjJfQ1", - "symbol": "KRL", - "name": "KoralCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/baylonp/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CsckyTZUQK3zWu94TD5i4Uk5SJji8DUQ5npCfF1XKhYa", - "symbol": "THRD", - "name": "ThreeD", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/DoogieMane/Crypto/main/3dcoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CJtomtm2VeozXMsabvD7pB9wkKy5LC8hW3XopqxQDqBu", - "symbol": "PRBLY", - "name": "probably.legal", - "decimals": 7, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CJtomtm2VeozXMsabvD7pB9wkKy5LC8hW3XopqxQDqBu/logo.png", - "tags": ["social-token"], - "extensions": { - "discord": "https://discord.gg/TkJxyyee", - "facebook": "https://www.facebook.com/ProbablyLegalToken/", - "instagram": "https://www.instagram.com/probablylegaltoken/", - "twitter": "https://twitter.com/probablylegal", - "website": "https://probably.legal" - } - }, - { - "chainId": 101, - "address": "3aw2q4WSkHeC8sdFkaePafhUTaU1q3oVxP4rUzLT118U", - "symbol": "VLAD", - "name": "VladCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/benalbrinck/cryptocurrency/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3WP53uLQiHGpsHZ4KwzPyAVuH9zWEfRWunEoNkWLSkA4", - "symbol": "COLT", - "name": "ColtCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/McSlippin/LOG/main/ColtCoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "37KKubWwu7c7fqt9zowdNn2LLatJk84GGpsyaNdBHzoM", - "symbol": "ROLR", - "name": "Roller", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/beltramin/crypto/main/roller-skate.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "MirrKKDC4ehQ2M2rvebJ36rvifBicUNYi8AA72N2sig", - "symbol": "MIR", - "name": "Mirror", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/MirrKKDC4ehQ2M2rvebJ36rvifBicUNYi8AA72N2sig/logo.png", - "tags": [ - "mirror-upon-mirror", - "as-super-cycle", - "capped-supply", - "deflatory" - ] - }, - { - "chainId": 101, - "address": "3RDQ9dBYwb2LxNsEHM6spWYzkL4sgafgBBArtaN5gZ8A", - "symbol": "NCHC", - "name": "NachoCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ellocomoli/crypto/main/moneda10.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "98Jhm2LKMDR1qqTMjqRFqqc9x3sNX3XUveiG5Q63R1dz", - "symbol": "CHRS", - "name": "ChrisCrypto", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/schrismyers/scm-crypto/main/logo.png", - "tags": [ - "social-token", - "community-token", - "family-token", - "friendship-token" - ] - }, - { - "chainId": 101, - "address": "BknVBihY9Dh4ohBpVJ42kLZA5KAtwnScib5GarswevFv", - "symbol": "sglo", - "name": "Sunglo", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/sdenham25/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7NnDGqCUGEzNiZUcFEQGUPPpWrLp5nPSpUXfyd65BH5q", - "symbol": "ZEM", - "name": "ZEMMOUR 2022", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7NnDGqCUGEzNiZUcFEQGUPPpWrLp5nPSpUXfyd65BH5q/logo.png", - "tags": [ - "social-token", - "ZEMMOUR", - "ERIC", - "ERICZEMMOUR", - "ZEMMOUR2022", - "PRESIDENTIELLE", - "FRANCE" - ], - "extensions": { - "telegram": "https://t.me/ericzemmour2022", - "twitter": "https://twitter.com/ZemmourEric", - "website": "https://www.zemmour2022.fr/" - } - }, - { - "chainId": 101, - "address": "SPon2FaeBahJ4ZLugFvnn7vijuMqX3vYbKwZdYYtEaN", - "symbol": "SPO", - "name": "Sponsor", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SPon2FaeBahJ4ZLugFvnn7vijuMqX3vYbKwZdYYtEaN/logo.png", - "tags": [ - "sponsor-token", - "invest-in-talent", - "profit-from-talent", - "receive-support", - "capped-supply", - "deflatory-token" - ] - }, - { - "chainId": 101, - "address": "ELthwAhCKAkNGBqUY4AyaBfZna4yLEQJm3XqTkw4vJJq", - "symbol": "EIRE", - "name": "EireCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/eoinw/EireCoin/main/EireCoin.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6risWR78e4RJrCAcuRfV4uojs7XfqoWsKojELN2DBnFZ", - "symbol": "CHKS", - "name": "ChicKoins", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6risWR78e4RJrCAcuRfV4uojs7XfqoWsKojELN2DBnFZ/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DaMmU96hrW14Yq2Zwf8uP63xrUKSL1u646PH8zsean6e", - "symbol": "FK", - "name": "Fakir coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/faki16/crypto/main/crypto.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4fs5LAN4kpfefkEtuLW8MGY9GD8A34Ey6AMCGkiNGfnH", - "symbol": "CBAS", - "name": "CBas Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/retro-token/CBas-token/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4KkBpohZHE7UXLWbzuub469Xd1TxXRtteRx9B2KygwoG", - "symbol": "PRINA", - "name": "PrIna BBY", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/preda-bogdan/preda-bogdan/master/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "98wjP2Tg1UPticB6TwapY3d8vgajUXUuMSLYA79c7Lqr", - "symbol": "SLTR", - "name": "Solitaire", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/pokersolface/solitairetoken/main/solitairetoken.png", - "extensions": { - "twitter": "https://twitter.com/solitairetoken" - } - }, - { - "chainId": 101, - "address": "3vAs4D1WE6Na4tCgt4BApgFfENbm8WY7q4cSPD1yM4Cg", - "symbol": "AAVE", - "name": "Aave Token (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3vAs4D1WE6Na4tCgt4BApgFfENbm8WY7q4cSPD1yM4Cg/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9", - "assetContract": "https://etherscan.io/address/0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "aave", - "serumV3Usdc": "8WZrmdpLckptiVKd2fPHPjewRVYQGQkjxi9vzRYG1sfs", - "serumV3Usdt": "LghsMERQWQFK3zWMTrUkoyAJARQw2wSmcYZjexeN3zy" - } - }, - { - "chainId": 101, - "address": "12uHjozDVgyGWeLqQ8DMCRbig8amW5VmvZu3FdMMdcaG", - "symbol": "AKRO", - "name": "Akropolis (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/12uHjozDVgyGWeLqQ8DMCRbig8amW5VmvZu3FdMMdcaG/logo.png", - "tags": ["wrapped", "ethereum"], - "extensions": { - "address": "0x8ab7404063ec4dbcfd4598215992dc3f8ec853d7", - "assetContract": "https://etherscan.io/address/0x8ab7404063ec4dbcfd4598215992dc3f8ec853d7", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "akropolis", - "serumV3Usdc": "G3h8NZgJozk9crme2me6sKDJuSQ12mNCtvC9NbSWqGuk", - "serumV3Usdt": "DvbiPxKzuXZPcmUcYDqBz1tvUrXYPsNrRAjSeuwHtmEA" - } - }, - { - "chainId": 101, - "address": "3UCMiSnkcnkPE1pgQ5ggPCBv6dXgVUy16TmMUe1WpG9x", - "symbol": "ALEPH", - "name": "Aleph.im (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3UCMiSnkcnkPE1pgQ5ggPCBv6dXgVUy16TmMUe1WpG9x/logo.png", - "tags": ["wrapped", "ethereum"], - "extensions": { - "address": "0x27702a26126e0B3702af63Ee09aC4d1A084EF628", - "assetContract": "https://etherscan.io/address/0x27702a26126e0B3702af63Ee09aC4d1A084EF628", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "aleph-im", - "serumV3Usdc": "Fw4mvuE7KZmTjQPxP2sRpHwPDfRMWnKBupFZGyW9CAQH", - "serumV3Usdt": "GZeHR8uCTVoHVDZFRVXTgm386DK1EKehy9yMS3BFChcL" - } - }, - { - "chainId": 101, - "address": "AwEauVaTMQRB71WeDnwf1DWSBxaMKjEPuxyLr1uixFom", - "symbol": "COMP", - "name": "Compound (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AwEauVaTMQRB71WeDnwf1DWSBxaMKjEPuxyLr1uixFom/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xc00e94Cb662C3520282E6f5717214004A7f26888", - "assetContract": "https://etherscan.io/address/0xc00e94Cb662C3520282E6f5717214004A7f26888", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "compound-governance-token", - "serumV3Usdc": "CU5L8JC83hyYZdf1phzy6a7X58eTtPjs7mHL3QKCcLfh", - "serumV3Usdt": "9gA6T3HRCMTVTULte5pJsXjMDUGRtygTKLbMny6eRcyM" - } - }, - { - "chainId": 101, - "address": "A9ik2NrpKRRG2snyTjofZQcTuav9yH3mNVHLsLiDQmYt", - "symbol": "FRONT", - "name": "Frontier Token (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/A9ik2NrpKRRG2snyTjofZQcTuav9yH3mNVHLsLiDQmYt/logo.png", - "tags": ["wrapped", "ethereum"], - "extensions": { - "address": "0xf8C3527CC04340b208C854E985240c02F7B7793f", - "assetContract": "https://etherscan.io/address/0xf8C3527CC04340b208C854E985240c02F7B7793f", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "frontier", - "serumV3Usdc": "B95oZN5HCLGmFAhbzReWBA9cuSGPFQAXeuhm2FfpdrML", - "serumV3Usdt": "DZTYyy1L5Pr6DmTtYY5bEuU9g3LQ4XGvuYiN3zS25yG7" - } - }, - { - "chainId": 101, - "address": "HGsLG4PnZ28L8A4R5nPqKgZd86zUUdmfnkTRnuFJ5dAX", - "symbol": "GRT", - "name": "Graph Token (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HGsLG4PnZ28L8A4R5nPqKgZd86zUUdmfnkTRnuFJ5dAX/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xc944E90C64B2c07662A292be6244BDf05Cda44a7", - "assetContract": "https://etherscan.io/address/0xc944E90C64B2c07662A292be6244BDf05Cda44a7", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "the-graph", - "serumV3Usdc": "4PD799gihM2SdM8g7PxfSWgQR8cWGNiuzmNzcL2RgpSu", - "serumV3Usdt": "5bzmeSmiCzeyDQvaSsQhEega7e2jhH39cFCkT4eqSDSx" - } - }, - { - "chainId": 101, - "address": "2ueY1bLcPHfuFzEJq7yN1V2Wrpu8nkun9xG2TVCE1mhD", - "symbol": "HGET", - "name": "Hedget (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2ueY1bLcPHfuFzEJq7yN1V2Wrpu8nkun9xG2TVCE1mhD/logo.png", - "tags": ["wrapped", "ethereum"], - "extensions": { - "address": "0x7968bc6a03017eA2de509AAA816F163Db0f35148", - "assetContract": "https://etherscan.io/address/0x7968bc6a03017eA2de509AAA816F163Db0f35148", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "hedget", - "serumV3Usdc": "27e1mB6UoPohbc3MmwMXu5QM7b2E3k5Mbhwv6JguwyXg", - "serumV3Usdt": "BdRzTEKb7Qdu4tWts5zXjwcpQErZxEzvShKZ5QcthMag" - } - }, - { - "chainId": 101, - "address": "5Wc4U1ZoQRzF4tPdqKQzBwRSjYe8vEf3EvZMuXgtKUW6", - "symbol": "LUA", - "name": "LuaToken (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5Wc4U1ZoQRzF4tPdqKQzBwRSjYe8vEf3EvZMuXgtKUW6/logo.png", - "tags": ["wrapped", "ethereum"], - "extensions": { - "address": "0xb1f66997a5760428d3a87d68b90bfe0ae64121cc", - "assetContract": "https://etherscan.io/address/0xb1f66997a5760428d3a87d68b90bfe0ae64121cc", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "luaswap", - "serumV3Usdc": "J9imTcEeahZqKuaoQaPcCeSGCMWL8qSACpK4B7bC8NN4", - "serumV3Usdt": "BMJ3CvQZ57cNnuc3Lz5Pb6cW6Sr9kZGz3qz2bJQTE24A" - } - }, - { - "chainId": 101, - "address": "CaGa7pddFXS65Gznqwp42kBhkJQdceoFVT7AQYo8Jr8Q", - "symbol": "MATH", - "name": "MATH Token (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CaGa7pddFXS65Gznqwp42kBhkJQdceoFVT7AQYo8Jr8Q/logo.png", - "tags": ["wrapped", "ethereum"], - "extensions": { - "address": "0x08d967bb0134f2d07f7cfb6e246680c53927dd30", - "assetContract": "https://etherscan.io/address/0x08d967bb0134f2d07f7cfb6e246680c53927dd30", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "math", - "serumV3Usdc": "G8L1YLrktaG1t8YBMJs3CwV96nExvJJCSpw3DARPDjE2", - "serumV3Usdt": "CkvNfATB7nky8zPLuwS9bgcFbVRkQdkd5zuKEovyo9rs" - } - }, - { - "chainId": 101, - "address": "9BsnSWDPfbusseZfnXyZ3un14CyPMZYvsKjWY3Y8Gbqn", - "symbol": "PERP", - "name": "Perpetual (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9BsnSWDPfbusseZfnXyZ3un14CyPMZYvsKjWY3Y8Gbqn/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xbC396689893D065F41bc2C6EcbeE5e0085233447", - "assetContract": "https://etherscan.io/address/0xbC396689893D065F41bc2C6EcbeE5e0085233447", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "perpetual-protocol", - "serumV3Usdc": "Ao8HgYFCT2BJHxSusZbpJCPhvFMFXZApqN2uy2trbQRa", - "serumV3Usdt": "5EoZqJZrmKmq1yeRkYAerbJhcs92DZbCtW86EhPYCio2" - } - }, - { - "chainId": 101, - "address": "DkbE8U4gSRuGHcVMA1LwyZPYUjYbfEbjW8DMR3iSXBzr", - "symbol": "RSR", - "name": "Reserve Rights (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DkbE8U4gSRuGHcVMA1LwyZPYUjYbfEbjW8DMR3iSXBzr/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x8762db106B2c2A0bccB3A80d1Ed41273552616E8", - "assetContract": "https://etherscan.io/address/0x8762db106B2c2A0bccB3A80d1Ed41273552616E8", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "reserve-rights-token", - "serumV3Usdc": "GqgkxEswUwHBntmzb5GpUhKrVpJhzreSruZycuJwdNwB", - "serumV3Usdt": "2j2or38X2FUbpkK4gkgvjDtqN3ibkKw3v5yn7o2gHqPc" - } - }, - { - "chainId": 101, - "address": "5hcdG6NjQwiNhVa9bcyaaDsCyA1muPQ6WRzQwHfgeeKo", - "symbol": "SWAG", - "name": "Swag Token (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5hcdG6NjQwiNhVa9bcyaaDsCyA1muPQ6WRzQwHfgeeKo/logo.png", - "tags": ["wrapped", "ethereum"], - "extensions": { - "address": "0x87eDfFDe3E14c7a66c9b9724747a1C5696b742e6", - "assetContract": "https://etherscan.io/address/0x87eDfFDe3E14c7a66c9b9724747a1C5696b742e6", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "swag-finance", - "serumV3Usdc": "wSkeLMv3ktJyLm51bvQWxY2saGKqGxbnUFimPxbgEvQ", - "serumV3Usdt": "6URQ4zFWvPm1fhJCKKWorrh8X3mmTFiDDyXEUmSf8Rb2" - } - }, - { - "chainId": 101, - "address": "FTtXEUosNn6EKG2SQtfbGuYB4rBttreQQcoWn1YDsuTq", - "symbol": "UBXT", - "name": "UpBots (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FTtXEUosNn6EKG2SQtfbGuYB4rBttreQQcoWn1YDsuTq/logo.png", - "tags": ["wrapped", "ethereum"], - "extensions": { - "address": "0x8564653879a18C560E7C0Ea0E084c516C62F5653", - "assetContract": "https://etherscan.io/address/0x8564653879a18C560E7C0Ea0E084c516C62F5653", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "upbots", - "serumV3Usdc": "Hh4p7tJpqkGW6xsHM2LiPPMpJg43fwn5TbmVmfrURdLY", - "serumV3Usdt": "5xhjc3ZtAwnBK3qsaro28VChL7WrxY9N4SG6UZpYxpGc" - } - }, - { - "chainId": 101, - "address": "BXZX2JRJFjvKazM1ibeDFxgAngKExb74MRXzXKvgikxX", - "symbol": "YFI", - "name": "yearn.finance (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BXZX2JRJFjvKazM1ibeDFxgAngKExb74MRXzXKvgikxX/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x0bc529c00C6401aEF6D220BE8C6Ea1667F6Ad93e", - "assetContract": "https://etherscan.io/address/0x0bc529c00C6401aEF6D220BE8C6Ea1667F6Ad93e", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "yearn-finance", - "serumV3Usdc": "BiJXGFc1c4gyPpv9HLRJoKbZewWQrTCHGuxYKjYMQJpC", - "serumV3Usdt": "9sue9TZAeUhNtNAPPGb9dke7rkJeXktGD3u8ZC37GWnQ" - } - }, - { - "chainId": 101, - "address": "HJbNXx2YMRxgfUJ6K4qeWtjatMK5KYQT1QnsCdDWywNv", - "symbol": "ATS", - "name": "Atlas Dex", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HJbNXx2YMRxgfUJ6K4qeWtjatMK5KYQT1QnsCdDWywNv/logo.png", - "tags": ["utility-token", "dex", "swap"], - "extensions": { - "coingeckoId": "atlas-dex", - "coinmarketcap": "https://coinmarketcap.com/currencies/atlas-dex/", - "medium": "https://atlasdex.medium.com/", - "twitter": "https://twitter.com/atlas_dex", - "website": "https://atlasdex.finance/" - } - }, - { - "chainId": 101, - "address": "7gjNiPun3AzEazTZoFEjZgcBMeuaXdpjHq2raZTmTrfs", - "symbol": "CRV", - "name": "Curve DAO Token (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7gjNiPun3AzEazTZoFEjZgcBMeuaXdpjHq2raZTmTrfs/logo.png", - "tags": ["wrapped", "ethereum"], - "extensions": { - "address": "0xd533a949740bb3306d119cc777fa900ba034cd52", - "assetContract": "https://etherscan.io/address/0xd533a949740bb3306d119cc777fa900ba034cd52", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "curve-dao-token" - } - }, - { - "chainId": 101, - "address": "HCTVFTzHL21a1dPzKxAUeWwqbE8QMUyvgChFDL4XYoi1", - "symbol": "LRC", - "name": "LoopringCoin V2 (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HCTVFTzHL21a1dPzKxAUeWwqbE8QMUyvgChFDL4XYoi1/logo.png", - "tags": ["wrapped", "ethereum"], - "extensions": { - "address": "0xbbbbca6a901c926f240b89eacb641d8aec7aeafd", - "assetContract": "https://etherscan.io/address/0xbbbbca6a901c926f240b89eacb641d8aec7aeafd", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "loopring" - } - }, - { - "chainId": 101, - "address": "HRQke5DKdDo3jV7wnomyiM8AA3EzkVnxMDdo2FQ5XUe1", - "symbol": "MIMet", - "name": "Magic Internet Money (Portal from Ethereum)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HRQke5DKdDo3jV7wnomyiM8AA3EzkVnxMDdo2FQ5XUe1/logo.png", - "tags": ["wrapped", "ethereum"], - "extensions": { - "address": "0x99d8a9c45b2eca8864373a26d1459e3dff1e17f3", - "assetContract": "https://etherscan.io/address/0x99d8a9c45b2eca8864373a26d1459e3dff1e17f3", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "magic-internet-money" - } - }, - { - "chainId": 101, - "address": "EzZp7LRN1xwu3QsB2RJRrWwEGjJGsuWzuMCeQDB3NSPK", - "symbol": "YGG", - "name": "Yield Guild Games Token (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EzZp7LRN1xwu3QsB2RJRrWwEGjJGsuWzuMCeQDB3NSPK/logo.png", - "tags": ["wrapped", "ethereum"], - "extensions": { - "address": "0x25f8087ead173b73d6e8b84329989a8eea16cf73", - "assetContract": "https://etherscan.io/address/0x25f8087ead173b73d6e8b84329989a8eea16cf73", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "yield-guild-games" - } - }, - { - "chainId": 101, - "address": "DPgNKZJAG2w1S6vfYHDBT62R4qrWWH5f45CnxtbQduZE", - "symbol": "TRIBE", - "name": "Tribe (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DPgNKZJAG2w1S6vfYHDBT62R4qrWWH5f45CnxtbQduZE/logo.png", - "tags": ["wrapped", "ethereum"], - "extensions": { - "address": "0xc7283b66eb1eb5fb86327f08e1b5816b0720212b", - "assetContract": "https://etherscan.io/address/0xc7283b66eb1eb5fb86327f08e1b5816b0720212b", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "tribe" - } - }, - { - "chainId": 101, - "address": "ASk8bss7PoxfFVJfXnSJepj9KupTX15QaRnhdjs6DdYe", - "symbol": "RGT", - "name": "Rari Governance Token (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ASk8bss7PoxfFVJfXnSJepj9KupTX15QaRnhdjs6DdYe/logo.png", - "tags": ["wrapped", "ethereum"], - "extensions": { - "address": "0xd291e7a03283640fdc51b121ac401383a46cc623", - "assetContract": "https://etherscan.io/address/0xd291e7a03283640fdc51b121ac401383a46cc623", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "rari-governance-token" - } - }, - { - "chainId": 101, - "address": "EHKQvJGu48ydKA4d3RivrkNyTJTkSdoS32UafxSX1yak", - "symbol": "AMPL", - "name": "Ampleforth (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EHKQvJGu48ydKA4d3RivrkNyTJTkSdoS32UafxSX1yak/logo.png", - "tags": ["wrapped", "ethereum"], - "extensions": { - "address": "0xd46ba6d942050d489dbd938a2c909a5d5039a161", - "assetContract": "https://etherscan.io/address/0xd46ba6d942050d489dbd938a2c909a5d5039a161", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "ampleforth" - } - }, - { - "chainId": 101, - "address": "BLvmrccP4g1B6SpiVvmQrLUDya1nZ4B2D1nm9jzKF7sz", - "symbol": "CVX", - "name": "Convex Token (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BLvmrccP4g1B6SpiVvmQrLUDya1nZ4B2D1nm9jzKF7sz/logo.png", - "tags": ["wrapped", "ethereum"], - "extensions": { - "address": "0x4e3fbd56cd56c3e72c1403e103b45db9da5b9d2b", - "assetContract": "https://etherscan.io/address/0x4e3fbd56cd56c3e72c1403e103b45db9da5b9d2b", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "convex-finance" - } - }, - { - "chainId": 101, - "address": "GWdkYFnXnSJAsCBvmsqFLiPPe2tpvXynZcJdxf11Fu3U", - "symbol": "UFO", - "name": "UFO Gaming (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GWdkYFnXnSJAsCBvmsqFLiPPe2tpvXynZcJdxf11Fu3U/logo.png", - "tags": ["wrapped", "ethereum"], - "extensions": { - "address": "0x249e38ea4102d0cf8264d3701f1a0e39c4f2dc3b", - "assetContract": "https://etherscan.io/address/0x249e38ea4102d0cf8264d3701f1a0e39c4f2dc3b", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "ufo-gaming" - } - }, - { - "chainId": 101, - "address": "DvjMYMVeXgKxaixGKpzQThLoG98nc7HSU7eanzsdCboA", - "symbol": "CRO", - "name": "Crypto.com Coin (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DvjMYMVeXgKxaixGKpzQThLoG98nc7HSU7eanzsdCboA/logo.png", - "tags": ["wrapped", "ethereum"], - "extensions": { - "address": "0xa0b73e1ff0b80914ab6fe0444e65848c4c34450b", - "assetContract": "https://etherscan.io/address/0xa0b73e1ff0b80914ab6fe0444e65848c4c34450b", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "crypto-com-coin" - } - }, - { - "chainId": 101, - "address": "4hpngEp1v3CXpeKB81Gw4sv7YvwUVRKvY3SGag9ND8Q4", - "symbol": "SLP", - "name": "Smooth Love Potion (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4hpngEp1v3CXpeKB81Gw4sv7YvwUVRKvY3SGag9ND8Q4/logo.png", - "tags": ["wrapped", "ethereum"], - "extensions": { - "address": "0xcc8fa225d80b9c7d42f96e9570156c65d6caaa25", - "assetContract": "https://etherscan.io/address/0xcc8fa225d80b9c7d42f96e9570156c65d6caaa25", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "smooth-love-potion" - } - }, - { - "chainId": 101, - "address": "EDVVEYW4fPJ6vKw5LZXRGUSPzxoHrv6eWvTqhCr8oShs", - "symbol": "BNT", - "name": "Bancor (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EDVVEYW4fPJ6vKw5LZXRGUSPzxoHrv6eWvTqhCr8oShs/logo.png", - "tags": ["wrapped", "ethereum"], - "extensions": { - "address": "0x1f573d6fb3f13d689ff844b4ce37794d79a7ff1c", - "assetContract": "https://etherscan.io/address/0x1f573d6fb3f13d689ff844b4ce37794d79a7ff1c", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "bancor-network" - } - }, - { - "chainId": 101, - "address": "8UJbtpsEubDVkY53rk7d61hNYKkvouicczB2XmuwiG4g", - "symbol": "ILV", - "name": "Illuvium (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8UJbtpsEubDVkY53rk7d61hNYKkvouicczB2XmuwiG4g/logo.png", - "tags": ["wrapped", "ethereum"], - "extensions": { - "address": "0x767fe9edc9e0df98e07454847909b5e959d7ca0e", - "assetContract": "https://etherscan.io/address/0x767fe9edc9e0df98e07454847909b5e959d7ca0e", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "illuvium" - } - }, - { - "chainId": 101, - "address": "CriXdFS9iRAYbGEQiTcUqbWwG9RBmYt5B6LwTnoJ61Sm", - "symbol": "JOE", - "name": "JoeToken (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CriXdFS9iRAYbGEQiTcUqbWwG9RBmYt5B6LwTnoJ61Sm/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x6e84a6216ea6dacc71ee8e6b0a5b7322eebc0fdd", - "assetContract": "https://snowtrace.io/address/0x6e84a6216ea6dacc71ee8e6b0a5b7322eebc0fdd", - "bridgeContract": "https://snowtrace.io/address/0x0e082f06ff657d94310cb8ce8b0d9a04541d8052", - "coingeckoId": "joe" - } - }, - { - "chainId": 101, - "address": "3a2VW9t5N6p4baMW3M6yLH1UJ9imMt7VsyUk6ouXPVLq", - "symbol": "KP3R", - "name": "Keep3rV1 (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3a2VW9t5N6p4baMW3M6yLH1UJ9imMt7VsyUk6ouXPVLq/logo.png", - "tags": ["wrapped", "ethereum"], - "extensions": { - "address": "0x1ceb5cb57c4d4e2b2433641b95dd330a33185a44", - "assetContract": "https://etherscan.io/address/0x1ceb5cb57c4d4e2b2433641b95dd330a33185a44", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "keep3rv1" - } - }, - { - "chainId": 101, - "address": "3EQ6LqLkiFcoxTeGEsHMFpSLWNVPe9yT7XPX2HYSFyxX", - "symbol": "TOKE", - "name": "Tokemak (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3EQ6LqLkiFcoxTeGEsHMFpSLWNVPe9yT7XPX2HYSFyxX/logo.png", - "tags": ["wrapped", "ethereum"], - "extensions": { - "address": "0x2e9d63788249371f1dfc918a52f8d799f4a38c94", - "assetContract": "https://etherscan.io/address/0x2e9d63788249371f1dfc918a52f8d799f4a38c94", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "tokemak" - } - }, - { - "chainId": 101, - "address": "Aqs5ydqKXEK2cjotDXxHmk8N9PknqQ5q4ZED4ymY1eeh", - "symbol": "NXM", - "name": "Nexus Mutual (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Aqs5ydqKXEK2cjotDXxHmk8N9PknqQ5q4ZED4ymY1eeh/logo.png", - "tags": ["wrapped", "ethereum"], - "extensions": { - "address": "0xd7c49cee7e9188cca6ad8ff264c1da2e69d4cf3b", - "assetContract": "https://etherscan.io/address/0xd7c49cee7e9188cca6ad8ff264c1da2e69d4cf3b", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "nexus-mutual" - } - }, - { - "chainId": 101, - "address": "D559HwgjYGDYsXpmFUKxhFTEwutvS9sya1kXiyCVogCV", - "symbol": "AMP", - "name": "Amp (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/D559HwgjYGDYsXpmFUKxhFTEwutvS9sya1kXiyCVogCV/logo.png", - "tags": ["wrapped", "ethereum"], - "extensions": { - "address": "0xff20817765cb7f73d4bde2e66e067e58d11095c2", - "assetContract": "https://etherscan.io/address/0xff20817765cb7f73d4bde2e66e067e58d11095c2", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "amp" - } - }, - { - "chainId": 101, - "address": "GJa1VeEYLTRoHbaeqcxfzHmjGCGtZGF3CUqxv9znZZAY", - "symbol": "ZRX", - "name": "ZRX (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GJa1VeEYLTRoHbaeqcxfzHmjGCGtZGF3CUqxv9znZZAY/logo.png", - "tags": ["wrapped", "ethereum"], - "extensions": { - "address": "0xe41d2489571d322189246dafa5ebde1f4699f498", - "assetContract": "https://etherscan.io/address/0xe41d2489571d322189246dafa5ebde1f4699f498", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "0x" - } - }, - { - "chainId": 101, - "address": "8gC27rQF4NEDYfyf5aS8ZmQJUum5gufowKGYRRba4ENN", - "symbol": "FTMet", - "name": "Fantom Token (Portal from Ethereum)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8gC27rQF4NEDYfyf5aS8ZmQJUum5gufowKGYRRba4ENN/logo.png", - "tags": ["wrapped", "ethereum"], - "extensions": { - "address": "0x4e15361fd6b4bb609fa63c81a2be19d873717870", - "assetContract": "https://etherscan.io/address/0x4e15361fd6b4bb609fa63c81a2be19d873717870", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "fantom" - } - }, - { - "chainId": 101, - "address": "HUCyuyqESEUV4YWTKFvvB4JiQLqoovscTBpRXfGzW4Wx", - "symbol": "RPL", - "name": "Rocket Pool (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HUCyuyqESEUV4YWTKFvvB4JiQLqoovscTBpRXfGzW4Wx/logo.png", - "tags": ["wrapped", "ethereum"], - "extensions": { - "address": "0xd33526068d116ce69f19a9ee46f0bd304f21a51f", - "assetContract": "https://etherscan.io/address/0xd33526068d116ce69f19a9ee46f0bd304f21a51f", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "rocket-pool" - } - }, - { - "chainId": 101, - "address": "8cTNUtcV2ueC3royJ642uRnvTxorJAWLZc58gxAo7y56", - "symbol": "SNX", - "name": "Synthetix Network Token (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8cTNUtcV2ueC3royJ642uRnvTxorJAWLZc58gxAo7y56/logo.png", - "tags": ["wrapped", "ethereum"], - "extensions": { - "address": "0xc011a73ee8576fb46f5e1c5751ca3b9fe0af2a6f", - "assetContract": "https://etherscan.io/address/0xc011a73ee8576fb46f5e1c5751ca3b9fe0af2a6f", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "synthetix-network-token" - } - }, - { - "chainId": 101, - "address": "AuGz22orMknxQHTVGwAu7e3dJikTJKgcjFwMNDikEKmF", - "symbol": "GALA", - "name": "Gala (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AuGz22orMknxQHTVGwAu7e3dJikTJKgcjFwMNDikEKmF/logo.png", - "tags": ["wrapped", "ethereum"], - "extensions": { - "address": "0x15d4c048f83bd7e37d49ea4c83a07267ec4203da", - "assetContract": "https://etherscan.io/address/0x15d4c048f83bd7e37d49ea4c83a07267ec4203da", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "gala", - "serumV3Usdc": "F7WJsoxTWQRmAwAyFe9APmuVv4HqmhchFtdbR9dvAUDm" - } - }, - { - "chainId": 101, - "address": "Gq2norJ1kBemBp3mPfkgAUMhMMmnFmY4zEyi26tRcxFB", - "symbol": "ANKR", - "name": "Ankr Network (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Gq2norJ1kBemBp3mPfkgAUMhMMmnFmY4zEyi26tRcxFB/logo.png", - "tags": ["wrapped", "ethereum"], - "extensions": { - "address": "0x8290333cef9e6d528dd5618fb97a76f268f3edd4", - "assetContract": "https://etherscan.io/address/0x8290333cef9e6d528dd5618fb97a76f268f3edd4", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "ankr-network" - } - }, - { - "chainId": 101, - "address": "CLQsDGoGibdNPnVCFp8BAsN2unvyvb41Jd5USYwAnzAg", - "symbol": "ENS", - "name": "Ethereum Name Service (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CLQsDGoGibdNPnVCFp8BAsN2unvyvb41Jd5USYwAnzAg/logo.png", - "tags": ["wrapped", "ethereum"], - "extensions": { - "address": "0xc18360217d8f7ab5e7c516566761ea12ce7f9d72", - "assetContract": "https://etherscan.io/address/0xc18360217d8f7ab5e7c516566761ea12ce7f9d72", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "ethereum-name-service" - } - }, - { - "chainId": 101, - "address": "ABAq2R9gSpDDGguQxBk4u13s4ZYW6zbwKVBx15mCMG8", - "symbol": "GT", - "name": "GateChainToken (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ABAq2R9gSpDDGguQxBk4u13s4ZYW6zbwKVBx15mCMG8/logo.png", - "tags": ["wrapped", "ethereum"], - "extensions": { - "address": "0xe66747a101bff2dba3697199dcce5b743b454759", - "assetContract": "https://etherscan.io/address/0xe66747a101bff2dba3697199dcce5b743b454759", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "gatetoken" - } - }, - { - "chainId": 101, - "address": "CobcsUrt3p91FwvULYKorQejgsm5HoQdv5T8RUZ6PnLA", - "symbol": "PEOPLE", - "name": "ConstitutionDAO (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CobcsUrt3p91FwvULYKorQejgsm5HoQdv5T8RUZ6PnLA/logo.png", - "tags": ["wrapped", "ethereum"], - "extensions": { - "address": "0x7a58c0be72be218b41c608b7fe7c5bb630736c71", - "assetContract": "https://etherscan.io/address/0x7a58c0be72be218b41c608b7fe7c5bb630736c71", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "constitutiondao", - "serumV3Usdc": "GsWEL352sYgQC3uAVKgEQz2TtA1RA5cgNwUQahyzwJyz" - } - }, - { - "chainId": 101, - "address": "6Q5fvsJ6kgAFmisgDqqyaFd9FURYzHf8MCUbpAUaGZnE", - "symbol": "SOS", - "name": "SOS (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6Q5fvsJ6kgAFmisgDqqyaFd9FURYzHf8MCUbpAUaGZnE/logo.png", - "tags": ["wrapped", "ethereum"], - "extensions": { - "address": "0x3b484b82567a09e2588a13d54d032153f0c0aee0", - "assetContract": "https://etherscan.io/address/0x3b484b82567a09e2588a13d54d032153f0c0aee0", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "opendao" - } - }, - { - "chainId": 101, - "address": "FUGsN8H74WjRBBMfQWcf9Kk32gebA9VnNaGxqwcVvUW7", - "symbol": "gOHM", - "name": "Governance OHM (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FUGsN8H74WjRBBMfQWcf9Kk32gebA9VnNaGxqwcVvUW7/logo.png", - "tags": ["wrapped", "ethereum"], - "extensions": { - "address": "0x0ab87046fbb341d058f17cbc4c1133f25a20a52f", - "assetContract": "https://etherscan.io/address/0x0ab87046fbb341d058f17cbc4c1133f25a20a52f", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "governance-ohm" - } - }, - { - "chainId": 101, - "address": "6nhvTcjTTWXvy2QHyXN8RuhUdu7jS37tn4TjLNZFKdDq", - "symbol": "MATE", - "name": "Matecoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ellocomoli/matecoin/main/matecoin1.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "J4pnYWmCfmygTN6ufvfKtjoD3sYFK61Z63yNSqnGGaQG", - "symbol": "KWT", - "name": "Kiwi Token (KWT)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/J4pnYWmCfmygTN6ufvfKtjoD3sYFK61Z63yNSqnGGaQG/logo.png" - }, - { - "chainId": 101, - "address": "BMdeBCDq93fDKqhSgNVKv8CSWsnjH1j4tZ3zbz6tP7Er", - "symbol": "UKGP", - "name": "ukg-private-token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Tief-Flieger/Crypto/main/ukg-Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "D7G1c6A2msKSsUyTyDcu5FpLvPKDsrDChJCVZ1iVQWSE", - "symbol": "UnDD", - "name": "Unusual Due Diligence", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/D7G1c6A2msKSsUyTyDcu5FpLvPKDsrDChJCVZ1iVQWSE/logo.jpg", - "tags": ["metaverse", "community-token"], - "extensions": { - "website": "https://www.youtube.com/c/UnusualDueDiligence" - } - }, - { - "chainId": 101, - "address": "FSypHUKULT3MfRbHZHDVxqyv7yCscrs9gw2w3cJVDWFW", - "symbol": "QTP", - "name": "QuestLoop", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FSypHUKULT3MfRbHZHDVxqyv7yCscrs9gw2w3cJVDWFW/logo.png", - "tags": ["social-token", "rewards", "chores", "kudos"] - }, - { - "chainId": 101, - "address": "2ZKpDFT88tER8CHRZcfzXZCerRRJFPRCrMgVNwRoMP6k", - "symbol": "SRO", - "name": "SRO Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Sreerajv799/cryoto_solana/main/logo.PNG", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HYTcR5XJFe6H548R44SCgR5PBzpRXRFx8rxr7M6XQdfJ", - "symbol": "6IX9INE", - "name": "SnitchCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/xX420Gucci69Xx/coin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3hWWVQnwcSW9BUW6jGBrpo2kii4b2DR8K4uQo4jhfxpJ", - "symbol": "ETRT", - "name": "EternalT", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/RaizelT/New/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3D1SjVC4z9WDaq1vdaJcHMNEjWwpEQrVY4eckm65nEJV", - "symbol": "DDPC", - "name": "Double Diamond Possum", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/digitaldog888/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DNKj7KdzWtAGashhNw2EDmXpTzQxJ5R6qtUzuSVeJVhZ", - "symbol": "ORBI", - "name": "ORBI", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/orbi11/token/main/orbi.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8NTbAqX4aQtWjGpR3vLZB5xMgwfiT9eyr1eVd99zaTFa", - "symbol": "RAPP", - "name": "RappToken", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/dara-79/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ENkxkB6m9rKksYZsjmz3LsCdc79Tw2TS5agC4m2674cQ", - "symbol": "BOND", - "name": "Bond Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/dc-bond/crypto/main/Bond-Token-Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Ho9wbHLmYEUNgD6qLReTJnNmMN3G8iZ6D8fa77ktnB1E", - "symbol": "MKM", - "name": "Mikimouche Coin", - "decimals": 0, - "logoURI": "https://github.com/MichaelGomes98/MikimoucheCoin/blob/main/MoucheCoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4wPV5AJiJ6L3fqokdnRAr8k3uiTawKvegUicwfqjMoaF", - "symbol": "BRNC", - "name": "Baron Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/erichjbaron/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "43q34gUCKfgBQcJSNq2M4s8uVGuGtfAFQXES1BzW5UBv", - "symbol": "SHIWO", - "name": "ShibWolf", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/43q34gUCKfgBQcJSNq2M4s8uVGuGtfAFQXES1BzW5UBv/logo.png", - "tags": ["Meme-Token"], - "extensions": { - "twitter": "https://twitter.com/ShibwolfSOL" - } - }, - { - "chainId": 101, - "address": "76pWmCRuVqHKsPSUph5X7xQ6bZho3apXXEdSNvr11Yvx", - "symbol": "CDZ", - "name": "Clendeezy Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/76pWmCRuVqHKsPSUph5X7xQ6bZho3apXXEdSNvr11Yvx/logo.png", - "tags": [ - "meme-coin", - "utility-token", - "community-token", - "education-token", - "teacher", - "finance", - "education" - ], - "extensions": { - "website": "https://www.smyrna.k12.de.us/shs" - } - }, - { - "chainId": 101, - "address": "Dj4aRJDqzCz4Ld6njv9ny6XGeNEx8rJGuhRVzpraXeV8", - "symbol": "RARRI", - "name": "Rarri Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Ericode99/crypto/main/no%20risk%20no%20rarri%20(1).png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FEFcxUnHkWcEakPP6QnDXrYQoLpyRWLpfRA22V4LFML", - "symbol": "DOGR", - "name": "Doggro coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Andreas-The-coder/crypto/main/oie_81DPzc4yJxZy.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9EPXPP7woiTzq8nBFeJDBfDhy1snGVbgFkZkMpdfELiQ", - "symbol": "ZAN", - "name": "Zan Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ZanZubair96/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "34Nd9KXji4YiMBXjgCuCt6XKBPgWPG7qgqF6LnmA4TU1", - "symbol": "SHMY", - "name": "ShinyMoney", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/edwardlamar/shinymoney/main/shinymoney.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AV7oz8VVnZsov1JUBmzVqjUfLkA7vJ21127YcoBXbXzC", - "symbol": "CANNA", - "name": "CannaBit", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AV7oz8VVnZsov1JUBmzVqjUfLkA7vJ21127YcoBXbXzC/logo.png", - "tags": ["community-token", "cannabis-token"], - "extensions": { - "website": "https://cannabit.community" - } - }, - { - "chainId": 101, - "address": "8pJw7fYdYf8QndqsNxBjWKC8K8hBFSfoBMgFjkWPNoiE", - "symbol": "BKP", - "name": "BeekeepingCoin", - "decimals": 0, - "logoURI": "https://github.com/Bees123/crypto/blob/main/logo_beekeeping.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "JdedWzEV7arWRfU9zUomMeig38uEVSEjHVMFGzgtaB3", - "symbol": "OMEGA", - "name": "Black Omega Security", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/unkwntech/OmegaCoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9Ldprm1uy9QNq77JkrmEw5KYUy5P1fqpNPH6bkJJ5gB7", - "symbol": "BONS", - "name": "Bonsai Token", - "decimals": 0, - "logoURI": "https://github.dev/onebonsai/token-list/blob/3ee6c651d9486176bd24e6c3b17751c4e8f024b8/assets/mainnet/9Ldprm1uy9QNq77JkrmEw5KYUy5P1fqpNPH6bkJJ5gB7/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3MsjG23kP91Z9MJ4KccuofnpJogdGZQ2cuaGoWR62pRZ", - "symbol": "BUCK", - "name": "Bucks", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3MsjG23kP91Z9MJ4KccuofnpJogdGZQ2cuaGoWR62pRZ/logo.png", - "tags": ["wrapped", "ethereum"] - }, - { - "chainId": 101, - "address": "4zM2o9CrZUWqe5kHCZFigwBDo3ncUhk6hWSkYQnWBLAG", - "symbol": "HOC", - "name": "House of Communication Brussels Coin", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4zM2o9CrZUWqe5kHCZFigwBDo3ncUhk6hWSkYQnWBLAG/logo.png", - "tags": ["coin"], - "extensions": { - "website": "https://houseofcommunication.brussels/" - } - }, - { - "chainId": 101, - "address": "5FmsZLMdhU26REqY9oacvAYsJu5yDXZML9hCq35RBKJ3", - "symbol": "FLOR", - "name": "[OHC] Flor Coin", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5FmsZLMdhU26REqY9oacvAYsJu5yDXZML9hCq35RBKJ3/logo.png", - "tags": ["meme-token", "social-token", "community-token"] - }, - { - "chainId": 101, - "address": "AQjEJZmVXgF24RkTBcxF4uxkdUyTEmWdDVovjZyzxqbW", - "symbol": "NUYEN", - "name": "Nuyen", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AQjEJZmVXgF24RkTBcxF4uxkdUyTEmWdDVovjZyzxqbW/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BJFdcWFixN8R9oZvV21MTi7DFhYWkagRS4Lqpv4tNqJ4", - "symbol": "CPHP", - "name": "Citizen Philippines", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BJFdcWFixN8R9oZvV21MTi7DFhYWkagRS4Lqpv4tNqJ4/logo.png" - }, - { - "chainId": 101, - "address": "2u11V36HWKb8j9uMab2nWD8z7LP4ZNDjuqrfUUW8BCkQ", - "symbol": "HRB", - "name": "Harish Badseshi", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/harishrb/token-resources/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7adj9wALYZb8Yv2tjGUZd4e6cr9DZxtdYU62mH8Ymwae", - "symbol": "OBM", - "name": "Obamium", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/cliffbars/crypto/main/communityIcon_nk99ys4f2bs31.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9Sfox9RVDwzFxnaSbpcNYWL5pZ4susku5VcVXjwShRJM", - "symbol": "TAURUS", - "name": "SOLTaurus", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/vrishab2112/SOLTAURUS/main/png_20211225_001730_0000.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Cjm9WLytJNkzCEQ1hhv8zk5otZTxrL3dz8DKaMLbT9XB", - "symbol": "WZRD", - "name": "Wizard", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/WZ4RD/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CvyUpzGFvTNUL9fgUKUkzrHGLYZdEbJTMbXx888vKWuQ", - "symbol": "DIPI", - "name": "Dippii Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/dhernz/dippii-token/main/dippii-token-logo.png", - "tags": ["social-token", "nft"] - }, - { - "chainId": 101, - "address": "EjRJQMZmG1RvjoyYovDNKonfpufzHH74G3ofs5b8UUyb", - "symbol": "SIERRA", - "name": "Sierra", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/kantrealb/crypto/main/Crypto.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BH4bFSsGKEpkEeR2ttPXx17K1z2qm6HZKKapKDgUtFNE", - "symbol": "SEPH", - "name": "Sephoria", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/kantrealb/token/main/SEPH.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3RBYvg79eGAvzq3BeC7u4SDqtr82Yb4wDimbVPxmSQwL", - "symbol": "MAHT", - "name": "Mahalo", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/kantrealb/coin/main/Mahalo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "12BGWWdhL564TNpZKi8Bz4bkJYue7KysbrVw4fHYzPUz", - "symbol": "JIJI", - "name": "Jiji Token", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/joelbrendle/jijicoin/main/jijicoin.png", - "tags": [ - "jiji", - "coin", - "token", - "ghibli", - "anime", - "cool", - "joel", - "minecraft", - "cats", - "cat" - ] - }, - { - "chainId": 103, - "address": "7pLqSyNuUjGBbUwarna5coubMnwPQz1WuMz2viLxvq75", - "symbol": "WEETW", - "name": "Weee Twice", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7pLqSyNuUjGBbUwarna5coubMnwPQz1WuMz2viLxvq75/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://cavientdou.com/" - } - }, - { - "chainId": 101, - "address": "8jndFj3Z3B1MgFHTR1hU2VbDjWMbCHES5Lzf3qgc1LVZ", - "symbol": "BBNFT", - "name": "BobaNFTea", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8jndFj3Z3B1MgFHTR1hU2VbDjWMbCHES5Lzf3qgc1LVZ/logo.png", - "tags": ["Boba", "NFT", "utility-token", "utility", "rewards"], - "extensions": { - "website": "https://www.BobaNFTea.com" - } - }, - { - "chainId": 101, - "address": "EWjNC6zeq1N2eDo1TqALhapUS5bhGv153REScHiDnDiY", - "symbol": "N0SR", - "name": "N0SR Amateur Radio", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/FreedomSeeds/logo/main/logo.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "GJWTYpZBWYBwA5HFcUsSQUuh4ZMoGcS9CRcuoi3XWAQ8", - "symbol": "BOBO", - "name": "Bobo Coin", - "decimals": 0, - "logoURI": "https://github.com/mattssi1999/crypto/blob/main/bobo-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GhCKeJzf6T87Z11YBjgXJwjT8tNAmwKcE28sA9z7ebAV", - "symbol": "LID", - "name": "Lidion", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/thelidioncrypto/Lidion-Crypto/main/df94ebf433e7cdd88a8ff3944628b7a1.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "A8xdfTHDvFGib3q64c748KdETnWRTrQRnhzvK9uTocrf", - "symbol": "BOLTS", - "name": "Misunderstood Neighborhood", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/A8xdfTHDvFGib3q64c748KdETnWRTrQRnhzvK9uTocrf/logo.png", - "tags": ["Farming", "NFT"] - }, - { - "chainId": 101, - "address": "EfJSYvrcjRBVBSs92EjKs1yxEkNVePRRYPvhJ6ywCkvb", - "symbol": "SNSH", - "name": "Snowshoe", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ArmandGly/token/main/logo_snowshoe_token.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2QgjeZig7YKCtgCwz7ZFDYZPFdtcbCpYGcMxLMHWiyfq", - "symbol": "PENIS", - "name": "Penis", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2QgjeZig7YKCtgCwz7ZFDYZPFdtcbCpYGcMxLMHWiyfq/logo.png" - }, - { - "chainId": 101, - "address": "FbLYpn6ZxW7fiw9tSot3z8P6WYeZWjgvuNsidwecLr5g", - "symbol": "CHEPS", - "name": "Chepster", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jparedes90/crypto/main/FbLYpn6ZxW7fiw9tSot3z8P6WYeZWjgvuNsidwecLr5g/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9KVMZ6jZLmmsfNXHakXhqbv3ecbNmh7cgWh8XGgfF54e", - "symbol": "RET", - "name": "Retsa", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jparedes90/crypto/main/9KVMZ6jZLmmsfNXHakXhqbv3ecbNmh7cgWh8XGgfF54e/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HhporioRx8hNAMw17m8rnHCN88wor4d3gvqYrHbT8NLd", - "symbol": "YUKA", - "name": "YukaCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ChrisCouweleers/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HJhg1zFy1SnxKD3yyzDkyzL3VMbCCdMStGAvcMJCQkri", - "symbol": "BICN", - "name": "BirdyCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/StaticGuy0/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HjFmTSvsyEVvRQw1hvogRf2gWXTETjZJnvBq25u36vqV", - "symbol": "SIKH", - "name": "SikhCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SikhVQ/crypto/main/png-transparent-golden-temple-khanda-sikhism-ik-onkar-khanda-orange-logo-religious-symbol-thumbnail.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7gudXHNwesV7Sxposo5c2esj7MJ7M5HCaXAkMyYaZipd", - "symbol": "ALP", - "name": "AlpCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/alperenerden/alp/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "VkqrWjbgVM6WG4TUYwcXMQoVwyS6qLojEyieeMyFiUY", - "symbol": "KARL", - "name": "Karl Koin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/VkqrWjbgVM6WG4TUYwcXMQoVwyS6qLojEyieeMyFiUY/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6TYE9KyyEHJtMhznhXHetip55yWpCzBMzMMYAY4zTEfw", - "symbol": "AIF", - "name": "TridentToken", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6TYE9KyyEHJtMhznhXHetip55yWpCzBMzMMYAY4zTEfw/logo.png", - "tags": ["social-token"], - "extensions": { - "description": "The official cryptocurrency of the Alternative Investment Fund at the University of Virginia. Can be used for any bar tab payment at a Trinity Irish Pub near you!", - "website": "https://www.aifatuva.com" - } - }, - { - "chainId": 101, - "address": "APCwmkZSbHXoqGeBb7otC51YZW1vrQJ9rUuTSPByxnM7", - "symbol": "DGBX", - "name": "DGemBox", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/petebdeblois/crypto_dgembox/master/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BzGfXGcZ68UP9YiChe4qeNa4b8fu81ZZyoZG8se4LPuD", - "symbol": "LOLA", - "name": "Lola Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/TheSauceBoss91/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "E7hmHxRTmcsiKz2hC8BMHQnoV8pKhB3ndDsm8t3unx37", - "symbol": "ACDC", - "name": "Another Crypto Decentralized Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/toastofchaos/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "D7M7hTPHRKXUMa8HnBUMEa52DHELvRSRthrTJt5rd48w", - "symbol": "STAR", - "name": "SuperStar", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SuperStarShen/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "25j7MqHNxzLQmYxbhUbmu93PKUqezP2j43rgukjvoB5n", - "symbol": "HUN", - "name": "Hungary", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/vt1/crypto/main/250px-Civil_Ensign_of_Hungary.svg.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GRuPrvBJ95SGn84HfJNyuud7JuyNiLB3EsYYY5Hu9Wxd", - "symbol": "AMT", - "name": "Armenian Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Alexfromidaho/Arm/main/ArmToken.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4jQvJa4zdKLQVULPDWQ2krjr7jUpaYr7x9tFHz57K3ek", - "symbol": "PUNDIT", - "name": "Pundit Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Sync-Pundit/Sync_Pundit-Coin/main/head-cropped.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CxhhgErrdpsxGs11oegaqzkpQMprPHHKKBeVMcZnJKeg", - "symbol": "DDD", - "name": "Dok Dollars", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/DoktorD1212/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AWjiz6kawv72iD8c5EXUSPAjMKfLP2PSUdiZEf5oKDVh", - "symbol": "RGTK", - "name": "RaggaToken", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Raggastan/RaggaTkn/main/raggatoken.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9uQjm4Yptt9ZxCVybQ4oQxSdMwV4UEtLtMKYrWH2f6kp", - "symbol": "TYCN", - "name": "TyCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/samwarlock/tycoin/main/logo.png", - "tags": ["social-token", "Community", "Community-Token", "charity"] - }, - { - "chainId": 101, - "address": "8D8Ft8KDQZh1vWpaTqQmUri5GMq2YaNHpiqGSTaffc5p", - "symbol": "MEXL", - "name": "Mexel Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/samwarlock/mexelio/main/logo.png", - "tags": ["social-token", "Community", "Community-Token", "charity"] - }, - { - "chainId": 101, - "address": "8vQWEAmjYoeTJxw9fe5ys3vvpevVMK5XyLivYP9eYt2j", - "symbol": "PPCN", - "name": "PartyPaul", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/pjbarnett/PartyPaul/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DX6CsUeytH9Tz7FcGMiNQM9AAdDz6E7RbtjQobPRTpqM", - "symbol": "MAVEL", - "name": "Mavel-X", - "decimals": 0, - "logoURI": "https://github.dev/mavel-x/token-list/blob/67072395e7292c9e25a1f0cc9c8e3f8507b8b187/assets/mainnet/DX6CsUeytH9Tz7FcGMiNQM9AAdDz6E7RbtjQobPRTpqM/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DmmzNnnSibSwp3tm1izWzTbdmAVfLhEqHRT382mWvwWw", - "symbol": "NoQt", - "name": "NoQuarter Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/brianridge/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BBuwn3G3eSr73GRez8Wc5zEEc1rqz8J4PxCksU4J38Q9", - "symbol": "AMBAF", - "name": "All My Brothers Are Freaks", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/robeard/Crypto/main/Marty2.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5SeZXRASQraww1wSWEPDxC4bRLL3anZevp3hYpN4m9xF", - "symbol": "MB", - "name": "Monkey Boost", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/monkeyboost/crypto/main/monkey-boost.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9XVR3R8K2qVsyRRuP4Y6edLqmmmGAMHgcqcnoWR7MyCL", - "symbol": "TGR", - "name": "TGR", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9XVR3R8K2qVsyRRuP4Y6edLqmmmGAMHgcqcnoWR7MyCL/logo.png", - "tags": ["fungible-art-token"], - "extensions": { - "serumV3Usdc": "HRgYivDbGrJGGS4Uw8HxQnSKJRAb6EU1wncbsSGXP8M5", - "website": "https://tgrtgr.github.io" - } - }, - { - "chainId": 101, - "address": "3EKEibJLx62pmJy4MW9QCghggyutRQwPmTxLx685vRX7", - "symbol": "SOULUM", - "name": "Soulanium", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3EKEibJLx62pmJy4MW9QCghggyutRQwPmTxLx685vRX7/logo.png", - "tags": [ - "utility-token", - "game-token", - "game-currency", - "GameFi", - "Gaming" - ], - "extensions": { - "discord": "https://discord.gg/HKYbebXtSC", - "facebook": "https://www.facebook.com/dungeoneersrest", - "instagram": "https://www.instagram.com/dungeoneersrest" - } - }, - { - "chainId": 101, - "address": "GkLohmRxTA6CnjWx6CTPWqPS39xXCu3iu1HSy84aF2sc", - "symbol": "SUS", - "name": "AmongSus", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/AmongusSuspect/Crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FnFseXxpfQE5y2uCf3hmB9NutHN6QcLUvfxU2FvSxy4w", - "symbol": "EDI", - "name": "EdiKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/filiped1/crypto/main/edi.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2mHNWVwa9LZKQANaVLEzd2YcK9iHVS5e8JUWYTxgY9ms", - "symbol": "CCUTE", - "name": "Cute", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2mHNWVwa9LZKQANaVLEzd2YcK9iHVS5e8JUWYTxgY9ms/logo.png", - "tags": ["cute"], - "extensions": { - "website": "https://cargocollective.com/gustifink/" - } - }, - { - "chainId": 101, - "address": "5FNqjw7HjJBLtfcA92AABPVNmRJzw3BhGZjrnjUptrc4", - "symbol": "$ZOOT", - "name": "Mutant Penguins Token", - "decimals": 9, - "logoURI": "https://imagedelivery.net/aAmca-Po70V1nH4n9cT-uA/93c507bc-83ac-4905-15ca-f26ca12f1100/public", - "extensions": { - "discord": "http://discord.gg/FKPX3fjXRB", - "twitter": "https://twitter.com/Mutant_Penguins", - "website": "https://mutantpenguins.club/" - } - }, - { - "chainId": 101, - "address": "5vNsWR12b9YjYegh4CmFQ8j6UEftJ2x5kh1QYNWGRevb", - "symbol": "CYBX", - "name": "Cybecure", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/cybermikeg/CYBX/main/cyx.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "G1NiHnY27nf3VKJeGWrktedTUtTU9HpFbGEVwZvhDhx9", - "symbol": "MWC", - "name": "MetaWorld", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/dhabita/metaworld/main/mw.png", - "tags": ["nft", "metaverse", "game"] - }, - { - "chainId": 101, - "address": "3Wb6Dppe1xmcLhfyJJExEsDtmiVGgdCkSuYGkJo5M4ac", - "symbol": "CLBW", - "name": "LabwaCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/msahion/crypto/main/capcoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DmsFwtKy5FQJ6Lm1PLeQM9qeeiLmBZogCbabePrH9FuE", - "symbol": "SPREAD", - "name": "SPREAD", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/spreadability/spread/main/logo.png", - "tags": ["wrapped", "ethereum"] - }, - { - "chainId": 101, - "address": "5kJeu7Pupmrurbxh9btosGdJa9zGPMy4HFRtuSNW1XT4", - "symbol": "DSGG", - "name": "David n Seth 312", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/cgtamburro/davnseth312/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DkvPFsHmfSuai3iafbnV1PMDBJ6EA7mJW4Y8qnDSMvEe", - "symbol": "MONK", - "name": "Monkeyfluff", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Monkey5025/monkeyfluff/main/hunkcoinfixed.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "T7vteNxbPBQnnPyz2qqnbSWsfQMk9yQcmCPLRshwhgR", - "symbol": "CPS", - "name": "CryptoPsychoCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/T7vteNxbPBQnnPyz2qqnbSWsfQMk9yQcmCPLRshwhgR/CPS.png", - "tags": ["community-token", "social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "JCBXkqaNooApjhp7gdSi1vfGaPutYw8gaybnAYWYayqU", - "symbol": "BURK", - "name": "Burkenstock", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/AlekseyGreywolf/Burkenstock/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ATQxBie1H86xJat32xshZURXzW5oJXA6brcBnGveXnjV", - "symbol": "DOGMOES", - "name": "DogmoesCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/kevinxyao/Crypto-dogmoes/main/dogmoes-smalla.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Eb5Gpxxk3Uev4VZ62EPBd5kF64Q9st2GLoz3ZKr37DjL", - "symbol": "BOCO", - "name": "Bo Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/bo-hack/cryptologo/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8dm4suXKFr9CD84L5hQPvXfYzVShwY5ty9gdXME47ZkZ", - "symbol": "CYBS", - "name": "Cybersecurity", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/kpizzo1/coin/main/logo.png", - "tags": ["social-token", "cybersecurity-token"] - }, - { - "chainId": 101, - "address": "56TH45QefFZYBUggparQ4GN1Komo8vg7XfFZfAryJTa2", - "symbol": "INFAPE", - "name": "INFAPE", - "decimals": 9, - "logoURI": "https://arweave.net/zUWlZrU_4ob7zJ5m5Jv39QSZRvoCC9hF_T4NUXkFK-8?ext=png", - "extensions": { - "twitter": "https://twitter.com/InfamousApesNFT" - } - }, - { - "chainId": 101, - "address": "3knhFs1XAzrxv3q9i33qFtjtpSKQTGwovtthLWmpCrno", - "symbol": "SCCA", - "name": "Scouting Careers Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/scoutingcareers/crypto/main/logo-new-1.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "99XDYcC6E7UsnKpuv4n5Hpd9G8GmZGwaNoh7CXP4fQyc", - "symbol": "TCHR", - "name": "ToCharCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/nathanru/crypto/main/token_logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HFq8jesWLdqowPeUWrkFVYpFyMm5zDeZVY8pKEhtKEou", - "symbol": "SHOT", - "name": "On Target", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/jimmjammjarr/flyptoes/main/logo.png", - "tags": ["social-token", "nft"] - }, - { - "chainId": 101, - "address": "9mgCWxChSM5sWkRd9xA6ocNkJ48s5ySo5umQ7gfovHpW", - "symbol": "SMIL", - "name": "Smile", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9mgCWxChSM5sWkRd9xA6ocNkJ48s5ySo5umQ7gfovHpW/logo.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "4hAJzHWns8Y2JMK4cHRrcZFtPizQuvKqgbbQ6GF6V8D8", - "symbol": "neINK", - "name": "NeverEndingINK", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/NEStoreez/HunaKala/main/ink-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8VywduJzwDeXSgBr2LTwyyHsR5r9TFPG6GwwXdhbzVZH", - "symbol": "BLDK", - "name": "Buldak Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/BULDAKCOIN/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DpY4DVuc6qZwJuyu4Z76fBy5hY3yXUtwSk21axW75Zxb", - "symbol": "Shh", - "name": "Shongololo", - "decimals": 0, - "logoURI": "https://github.com/thamsanqabengu/Shongololo/blob/main/Shongololo-Bhengu-min.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7p7pVamRxfLZR9gWQqLZvEbTLyBav2x33kzwZLQdrXzq", - "symbol": "CGRFC", - "name": "Cecils Get Rich Fast Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/cecildesil4/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GV5BnbUvxYtScZWaGngPFNipgZKx3KpRmLaRXPT97ohR", - "symbol": "WHYPHY", - "name": "Sol City", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GV5BnbUvxYtScZWaGngPFNipgZKx3KpRmLaRXPT97ohR/logo.png", - "tags": ["utility-token", "DeFi", "governance-token"], - "extensions": { - "description": "Solana Art Metaverse", - "discord": "https://discord.gg/Sa8EyYKyhU", - "instagram": "https://instagram.com/69solstreet", - "twitter": "https://twitter.com/69solstreet" - } - }, - { - "chainId": 101, - "address": "4PE5J2Yufinhdre67AxfeQQqvKwKTWQe5ZWUMhMK2Kum", - "symbol": "HGV", - "name": "HCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/bernardhackwell/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5msC2VwMTPcu2oK1K19waeTeMW39rUTNx96ifvhqv9cD", - "symbol": "GBP", - "name": "Good Boy Pablo", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/toshalex/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DiiiGzPx7xqpkiP6gT3T27fnqAoGPov6VqMPCkQAPLue", - "symbol": "XINDT", - "name": "Xin Dragons Token", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/MooningSols/assets/main/logo.png" - }, - { - "chainId": 101, - "address": "4p4e7iVvynmLuBgVKFxuxAdFVmGsjYcjqPrGR8SdKGqf", - "symbol": "WV", - "name": "WondraVision", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/WondraVision/SolanaToken/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9cgWfYYvyskChwThYLyUBwPD1ZfwMMjTBWtCXYqXBGpa", - "symbol": "BLT", - "name": "Belette", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9cgWfYYvyskChwThYLyUBwPD1ZfwMMjTBWtCXYqXBGpa/logo.png", - "tags": ["meme-coin"] - }, - { - "chainId": 101, - "address": "4F72CCUWeQFBCTWVG6Cr2yrwosHo3dziFEAzP13rGhbh", - "symbol": "ADMC", - "name": "aDam Coin", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/bhartman21/aDamCoin/main/aDamCoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9odg9Qf2jtScVkjYUH8rVtvZQYKrr1sMTRobRu3zQ9Ms", - "symbol": "FP", - "name": "FancyPants", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FancyPantsToken/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5FMqz4nZeKx5RzDjUSJykrwZS4BmqVMewqLkVRv3SQ8N", - "symbol": "TANK", - "name": "TechnoBoi", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Toop-glitch/crypto/main/motherboard-icon-24.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AaxP96Js68xaPQea2Pt6We3aVoW27CEUkz9CPix3X4WQ", - "symbol": "UMUM", - "name": "urmom", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Toop-glitch/urmom/main/urmom%20(1).png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AoCfbqCKQWuCNvriPTGnAvd69mvKzeP9RSXjbTR8yCk7", - "symbol": "TOOP", - "name": "Toop-Glitch Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Toop-glitch/crypto/main/Glitch%20(1).png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "226A6tzDEVoy4CLoMS89kDjfwmLyqbAYRwzcr2NPtbKB", - "symbol": "CCMT", - "name": "Clay Christmas Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/y2clay/crypto/main/Cmaslogosmall.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HFtWXb3wmc7mMwpcLVpH1QrhxrWdMjcyu6LnTaozHcBH", - "symbol": "GFAL", - "name": "GirlfriendAllowance", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/HenrydeB/img-gfal/main/GFAL.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GjdvxEzd1rJgJyoTxWS9h9tk5bupw2ayoPXSwRYDA462", - "symbol": "GCoin", - "name": "GCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/bill6086/crypto/main/YinYang.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Ag3j2xydAzafmcYTPfpmLNdQ5Bh55uRDwyAGnAz5wpjr", - "symbol": "OMC", - "name": "Omicron", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Ag3j2xydAzafmcYTPfpmLNdQ5Bh55uRDwyAGnAz5wpjr/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BKSrRNHhdJbsuYX4oHCsPa2GwKQD84Tb9a6817T6oCYm", - "symbol": "KEKO", - "name": "KonekoKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/aiden280zx/crypto/main/icon.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3S1bmWCa6o8GDYPJFzRqTzdMpYnUM34LnikYMpoJ7AWd", - "symbol": "DIDI", - "name": "Didi Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3S1bmWCa6o8GDYPJFzRqTzdMpYnUM34LnikYMpoJ7AWd/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9NxVRtwPU64LHj4gDD6kqs622eaZ8VHYG2fbLcWF6ode", - "symbol": "Hacka", - "name": "Hacka Coin", - "decimals": 0, - "logoURI": "https://xzqqawurhhkzdtqrwnsl.supabase.in/storage/v1/object/public/public/Hacka.png", - "tags": ["hacka-coin", "community-coin"], - "extensions": { - "website": "https://hackatalk.dev" - } - }, - { - "chainId": 101, - "address": "4A2us4kJfbMcBfJCmBiec8vMmahivRJQuLkreKEDrnsX", - "symbol": "MAFIA", - "name": "Solana Mafia Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4A2us4kJfbMcBfJCmBiec8vMmahivRJQuLkreKEDrnsX/logo.png", - "tags": ["nft"], - "extensions": { - "discord": "https://discord.gg/jEYq8MK7vy", - "twitter": "https://twitter.com/SolanaMob", - "website": "https://www.solanamafia.com/" - } - }, - { - "chainId": 101, - "address": "2DDyLzN1pxVddhkgZYJdJH6YFUbeSVPFZBMSxcLswwap", - "symbol": "SOUP", - "name": "GoodSoup", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2DDyLzN1pxVddhkgZYJdJH6YFUbeSVPFZBMSxcLswwap/logo.png", - "tags": ["community-token", "governance-token"], - "extensions": { - "twitter": "https://twitter.com/goodsouptoken", - "website": "https://goodsoup.io/" - } - }, - { - "chainId": 101, - "address": "8J8e4bZhwCYRYNG9g9cj7Du91x7D2wrDmCJhRTpgbi2Y", - "symbol": "WALA", - "name": "Wallace Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/LKcrash/Crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CphTaGMUnqyVk2ZwbashhXnimo6oMTRNk9Dv6NNCaxph", - "symbol": "SANTA", - "name": "SANTA FLOKI inu", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/programe95/cryp/main/logofloki.png", - "tags": ["meme-coin"] - }, - { - "chainId": 101, - "address": "7rsd3MoJNSbrsgeLCND3QeCAdx7vMspGJhbCTVH1Sa6n", - "symbol": "LEOTK", - "name": "Leo Token", - "decimals": 2, - "logoURI": "https://github.com/neezer96/crypto/blob/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BYK2CGi9JJRwaQVG6pxKXBR84cMPLbhxHYCHC98drKnN", - "symbol": "CHF", - "name": "Swiss CHF", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/CryptoSwissCHF/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DookudLUwXvbjbYFqNvJB6toPG9V67NTXhfbbCdc4u7T", - "symbol": "DST", - "name": "Dooku Society Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DookudLUwXvbjbYFqNvJB6toPG9V67NTXhfbbCdc4u7T/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://dookusociety.io" - } - }, - { - "chainId": 101, - "address": "23TXQ7EyhsPCTonPYoPpzFnskG1rRkgXrCmtiFFetH1n", - "symbol": "MARTAN", - "name": "Martan Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/martanrauber/token/main/logo.png", - "tags": ["meme-token", "social-token", "community-token"] - }, - { - "chainId": 101, - "address": "6Jdh31HKtk8dm4wxXR4y8ceQFsZN9jVQUiEa4s6693W2", - "symbol": "BDRK12", - "name": "PIEDROLARES", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/BarneyRubble12/crypto-brubbles/main/logo.png", - "tags": ["handball", "cuchi12"] - }, - { - "chainId": 101, - "address": "CPreedQ24EcfMcNWuXrHSgqow6GBLXgqaQSddrUnk4u6", - "symbol": "ALFA", - "name": "ALFA Sport Studio", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Naximus/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Hpi6UNPdTVtHvcJRzgxCcABEcBSoALK56N6KDatfggBZ", - "symbol": "POUET", - "name": "Pouet", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Hpi6UNPdTVtHvcJRzgxCcABEcBSoALK56N6KDatfggBZ/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3ZXc5yNWSVHc9hPY3Vb7jbZJV2xkqCUQvonekRog4oxZ", - "symbol": "JOI", - "name": "Joieria", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3ZXc5yNWSVHc9hPY3Vb7jbZJV2xkqCUQvonekRog4oxZ/logo.png", - "tags": ["Social-token"] - }, - { - "chainId": 101, - "address": "GSTgB6PZ1jUAbj3UoUfZjppxLbkJQZY1iyShQL1VgMpB", - "symbol": "IDIOT", - "name": "IdiotDAO Token", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GSTgB6PZ1jUAbj3UoUfZjppxLbkJQZY1iyShQL1VgMpB/logo.png", - "tags": ["community-token"] - }, - { - "chainId": 101, - "address": "394XeAW9P5FmjQioFZ6SZoT8j34KYHVJK77ZCvhAbpnR", - "symbol": "KATAKLOP", - "name": "Kataklop", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/394XeAW9P5FmjQioFZ6SZoT8j34KYHVJK77ZCvhAbpnR/logo.png", - "tags": ["utility-token", "social-token"], - "extensions": { - "description": "cryptomony specializing in the equestrian world", - "facebook": "https://www.facebook.com/kataklopnetwork", - "website": "https://crypto.kataklop.com" - } - }, - { - "chainId": 101, - "address": "hXhvvXYY8ME777zr74AUX5w5yGjjxud4t1FLsdVFDyU", - "symbol": "TWT", - "name": "Techwell Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MitkoBachvarov/crypto/main/cryptologo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Diox5TrJd4JnHikpVkES749sVdZpCucVURcbeAPgZj11", - "symbol": "ITT", - "name": "Inter Tin Token", - "decimals": 9, - "logoURI": "https://github.com/intertin/solana/blob/main/1x1.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://www.intertin.com" - } - }, - { - "chainId": 101, - "address": "8x778KiyywKwez9ijikxfoMSrEhNHCfBhFmH5cbaPWj", - "symbol": "IT", - "name": "Inter Tin", - "decimals": 0, - "logoURI": "https://github.com/intertin/solana/blob/main/1x1.png", - "tags": ["NFT"], - "extensions": { - "website": "https://www.intertin.com" - } - }, - { - "chainId": 101, - "address": "C6hj3fwvoY2AgRzW26AB47cfPNuWaBHGWsW8YdYp4vuC", - "symbol": "MATK", - "name": "MateoKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mateosat3/crypto/main/cat-cute.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3ZXVxxX6zCf5Yqeq6iwdTuVwC6E8b7bs2q3D1Prg86sv", - "symbol": "DAGE", - "name": "Dark Age", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3ZXVxxX6zCf5Yqeq6iwdTuVwC6E8b7bs2q3D1Prg86sv/logo.png", - "tags": ["gamefi", "game-token"] - }, - { - "chainId": 101, - "address": "QBeV89S6jJeXeJNURFTPTgCan9AW8dPBTUkbFoWHAaK", - "symbol": "SLNM", - "name": "Solanum", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/QBeV89S6jJeXeJNURFTPTgCan9AW8dPBTUkbFoWHAaK/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://solanum.app" - } - }, - { - "chainId": 101, - "address": "2x6kUR2FKiuwkXsG1E3w6sW6jgNcKpGKPcV5mX7cqvkt", - "symbol": "RGK", - "name": "RunGoodKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/adampicker88/crypto/main/logo.PNG", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "MJBzbqF6VSSxMkLq8dpb6KpLhRqGCiKmvQDVJUCnjP3", - "symbol": "QKOR", - "name": "Quarkore", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/agx93/1stoken/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Amori9cHbNiLDeec7WqXSUopheaxLvVxRzuGCNauPshB", - "symbol": "AF", - "name": "Amorfati", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Amori9cHbNiLDeec7WqXSUopheaxLvVxRzuGCNauPshB/logo.png", - "extensions": { - "twitter": "https://twitter.com/amorifati_", - "website": "https://amorifati.com" - } - }, - { - "chainId": 101, - "address": "7KsnxvGxV7kam2eFFnz2PhaSM9RZWrhS2BCKkmNieiCt", - "symbol": "LAK", - "name": "Cyberhakz Chip", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/navin-hariharan/about-me/main/favicon.png", - "tags": ["cyberhakz-token", "cybersecurity-token"] - }, - { - "chainId": 101, - "address": "6j7HmMqvYSYWTzh3mZN71ZJAjrvHJZU6JpB89YCaN7jE", - "symbol": "JDPT", - "name": "JD Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/EkadrishtaITSolutionsLLP/jdtoken/main/logo.png", - "tags": ["social-token", "social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "7zhmxoDpZ2ShC15KYmhBzHmKsgwRAn454iRYRWPJHcVq", - "symbol": "FIZZ", - "name": "FizzCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FizzyWater9/fizzcoin/main/canvas.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5xr9CtnMbYiWA6UTB8Gy9XR4cMv3ARGho8Krrx6drgGG", - "symbol": "VLE", - "name": "Vleeboz", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/APonline/VleeboCoin/main/logo.png", - "tags": ["social-token", "meme-coin"] - }, - { - "chainId": 101, - "address": "BUFSVNvEy8uQkWj1syMQ6JC5nqV3YpjS9v1Q3vbaBqAf", - "symbol": "ERPN", - "name": "EARPAN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BUFSVNvEy8uQkWj1syMQ6JC5nqV3YpjS9v1Q3vbaBqAf/logo.png", - "tags": ["social-token"], - "extensions": { - "twitter": "https://twitter.com/irvansnid", - "website": "https://coin.erpn.us" - } - }, - { - "chainId": 101, - "address": "9g7MFEqPLtoDe3vyJx1JsqCFyKogHXxf6dDkuRxUUd9f", - "symbol": "PACE", - "name": "SPACE MILK", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9g7MFEqPLtoDe3vyJx1JsqCFyKogHXxf6dDkuRxUUd9f/logo.png", - "tags": ["community-token"] - }, - { - "chainId": 101, - "address": "CU6tuHzFroqLozgMzrZ9pa5XvXwjRVCJG6qoREV9BLeg", - "symbol": "MD", - "name": "Madhs", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Templight41/crypto/main/logo%20MD/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EhUMxef77Ya7sdcajcrMjM8tNA32pZFjRtfyTXTnj4P6", - "symbol": "KTRK", - "name": "KiterKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/KiterCode/Kiter-Coin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2iBENeS6FPNtBQrrYRTeM1nmQtcWChFu1M68DwFhc17M", - "symbol": "QCI", - "name": "Lill Qoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ghotato/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "B45eExdHQmYbVsEYzqYgrMwLBGhz6KXQAAPdpQ2DCGFj", - "symbol": "SZC", - "name": "SageZeroCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/B45eExdHQmYbVsEYzqYgrMwLBGhz6KXQAAPdpQ2DCGFj/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "JBgKmQsBcpMGrUofgCwnE53FPSwoGKuBsj9F8sru3LKF", - "symbol": "NUFI", - "name": "Nu-Finance", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/saosaik/cryptos/main/nufi.png", - "tags": ["CEX-DEX", "community-token"], - "extensions": { - "twitter": "https://twitter.com/nufi_official", - "website": "https://nu.fi" - } - }, - { - "chainId": 101, - "address": "FWv9esV3HQKMwMG435bRgfnN3oSbQr3bzszkcCWPKDzy", - "symbol": "BULLIT", - "name": "BULLIT", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/JaySheepdog-N0SR/BLLT/main/BLLT-logo.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 103, - "address": "AKnTTNEzNXB5q5ZoUTi2dX6XwTrCij136z7aoys3qdaL", - "symbol": "BASM", - "name": "Bwood Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AKnTTNEzNXB5q5ZoUTi2dX6XwTrCij136z7aoys3qdaL/logo.png" - }, - { - "chainId": 101, - "address": "8GuZf1aJtGVeqfWJCubiHtdJxqVfowAuwoQ8Ae2uruKT", - "symbol": "DOOKU", - "name": "Dooku World Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8GuZf1aJtGVeqfWJCubiHtdJxqVfowAuwoQ8Ae2uruKT/logo.png" - }, - { - "chainId": 101, - "address": "2RBVJE3tzdrbD8aVzoKGrphycz3azhdip3u7V1JfE84X", - "symbol": "WTC", - "name": "Wolf and Crow", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/moquito64/Howl/master/src/assets/images/logo.png" - }, - { - "chainId": 101, - "address": "FbqTq5JsMAiwDc2V6v84KuitCLNZpQgfnKGuV1bXtfHD", - "symbol": "ATRIOC", - "name": "Sigma Based Unit", - "decimals": 0, - "logoURI": "https://steeeeve.com/img/atrioc.png", - "tags": ["meme-coin"] - }, - { - "chainId": 101, - "address": "GMtU1jRYAdR57t29TqGEm4qmeB22FeFVRNJ9mptwkPmf", - "symbol": "LAFO", - "name": "Lalafofo", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Ricurdhu/crypto/main/UniKlar.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2FgHJJBnaMDTeHnZZ8MPYDrxDFBy8yGG85NxSKZEANyB", - "symbol": "AIHC", - "name": "AIhsanC", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ihsancelik/crypto/main/logo200x200.png", - "tags": ["social-token"], - "extensions": { - "website": "https://aihctoken.com/", - "youtube": "https://www.youtube.com/channel/UCKfcCWNfCcy75l7aJRLnxRg" - } - }, - { - "chainId": 101, - "address": "8TQdiAzdZZEtkWUR8Zj1tqDYGPv9TR1XjPqrew39Vq9V", - "symbol": "HYPE", - "name": "HypeProxy", - "decimals": 7, - "logoURI": "https://raw.githubusercontent.com/hypeproxy/hypeproxy/main/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/HYyGPe7", - "github": "https://github.com/hypeproxy", - "medium": "https://medium.com/@HypeProxy", - "telegram": "https://t.me/hypeproxy_org", - "twitter": "https://twitter.com/hypeproxyio", - "website": "http://hypeproxy.org" - } - }, - { - "chainId": 101, - "address": "BkzgrJVNVUbCxLsRL4ULsrdk2MZaPkbZbpory6uczPCv", - "symbol": "MYCRA", - "name": "Mystery Crabs Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BkzgrJVNVUbCxLsRL4ULsrdk2MZaPkbZbpory6uczPCv/especial3.jpg", - "tags": ["mysterycrabs", "nft-token"], - "extensions": { - "discord": "https://discord.gg/TyeVKNBx", - "twitter": "https://twitter.com/MysteryCrabsNFT" - } - }, - { - "chainId": 101, - "address": "ySumbV2nRTFDpiEyetwpz8Pr3JqUNBi7hK2s7jyyji3", - "symbol": "TIKI", - "name": "HashTiki", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ySumbV2nRTFDpiEyetwpz8Pr3JqUNBi7hK2s7jyyji3/logo.png", - "tags": ["metaverse", "nft", "community-token"], - "extensions": { - "description": "HashTiki is the first NFT portfolio that empowers the metaverse ecology, represents the inheritance of a totem culture, they are 256*256 pixel images, generated through a random combination algorithm, it consists of 8000 NFT totem collections.", - "discord": "https://discord.com/invite/ZJ8hYjNt32", - "medium": "https://medium.com/@hashtiki", - "twitter": "https://twitter.com/hashtiki" - } - }, - { - "chainId": 101, - "address": "9FkY7k2N98enicYZyaJvt9BwGRDinkxakbCWh2yEUuhA", - "symbol": "PRU", - "name": "PRU Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/pruking/PRU-Crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HPC9iw1mao27CXWocVqHPjQgtFr9hZecNV7Q2B4KNm8", - "symbol": "ASHC", - "name": "Ashcoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/GoviCoin/crypto/main/logo.png", - "tags": ["social-token", "community-token", "Play-to-earn"] - }, - { - "chainId": 101, - "address": "8xhdLhtD5Kk4HAHxA67BboYNXPuNHRYvgv9Er1wqPFBD", - "symbol": "EMIX", - "name": "Emixcoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Achraf0407/cryptotokensol/main/logo.png", - "tags": ["social-token", "education-token"] - }, - { - "chainId": 101, - "address": "3K6SeyAYC6E5n39DZ25Jp2EsWSgb4JBjSQYS86jziNMy", - "symbol": "SHRKDAO", - "name": "The Mark of Kamohoalii", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3K6SeyAYC6E5n39DZ25Jp2EsWSgb4JBjSQYS86jziNMy/logo.png", - "tags": ["community-token", "utility-token", "governance-token", "nft"], - "extensions": { - "discord": "https://discord.gg/cDKerzDe9A", - "twitter": "https://twitter.com/shkarysharks", - "website": "https://www.shkarysharks.com/" - } - }, - { - "chainId": 101, - "address": "FGX2PiiMB56Cba4dp7ku7NpGPXNQB9mwyUQd55TAujfB", - "symbol": "JERB", - "name": "Jerboa", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/Driverx2030/Solana-Token-Files/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AFk79udmPoxjc7vk99t7ou48EUv954HUe5tJWvNJBadG", - "symbol": "DAFN", - "name": "Digital Afghani", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/omidalikozay/DAFN3/main/DAFN.png", - "tags": ["Payments"] - }, - { - "chainId": 101, - "address": "8Rs72gjdRNi61TCXq4YuJdxGJL2EyY3igmBXu9PYTCkd", - "symbol": "TMSF", - "name": "TMS Foundation", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/bharatyuva/TMS-Udghatita/main/images/logo.png", - "tags": ["social-token", "utility-token", "community-token"] - }, - { - "chainId": 101, - "address": "DxNj4UJyEHcophxNiTMfdSBFqKxiiEg4BBnJJf3VUVe5", - "symbol": "MGCN", - "name": "MagiCoin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/leonelafonsoe/magicoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DkbPcS3ik99FL2Rxw8PPyXTGjByyU2jyZQTbpDrCwaP8", - "symbol": "SKAR", - "name": "Skylar", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SkylarToken/skylarlogo/main/logo.png", - "tags": ["science-token"] - }, - { - "chainId": 101, - "address": "EaaF9241uBoajKaSScbTzBfBuiJ78zuXJCSW3c9HQEtJ", - "symbol": "EDUC", - "name": "Education Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EaaF9241uBoajKaSScbTzBfBuiJ78zuXJCSW3c9HQEtJ/logo.png", - "tags": [ - "utility-token", - "education-token", - "social-token", - "community-token", - "game-token", - "gaming-token", - "game-currency", - "play2earn", - "play-to-earn" - ], - "extensions": { - "description": "The first coin that allows you and your children to play, learn and earn", - "website": "https://education-coin.com" - } - }, - { - "chainId": 101, - "address": "2nZxXaVox3j3PjEp1xGjDc5RaJY2ggPakdxDvGxaPXEP", - "symbol": "ISPT", - "name": "Internet Service Provider Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/Khikoman/crypto-ISPT/main/logo.png", - "tags": ["social-token", "community-token"], - "extensions": { - "description": "Internet Service Provider Token" - } - }, - { - "chainId": 101, - "address": "BMTjiZ15FqJ3pmGu91uBvhTWqXdh8FpLgFgoQX1BAsHV", - "symbol": "ECOT", - "name": "Eco Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Eco-bikes/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EXs1QTZ7dEpDe2GQa53GdJhSScWDDTgBkLCBT6FKevah", - "symbol": "RDG", - "name": "GUPTA", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/rishabdeogupta/crypto/main/logo.png", - "extensions": { - "instagram": "https://www.instagram.com/rishabdeogupta", - "twitter": "https://twitter.com/rishabdeogupta" - } - }, - { - "chainId": 101, - "address": "DQF4npyBsvoG67STQ7MUGDcTDS49NfS7ngGg8cmLqTJT", - "symbol": "DGNT", - "name": "DogNut", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DQF4npyBsvoG67STQ7MUGDcTDS49NfS7ngGg8cmLqTJT/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CY3VrKMM8mEMQA1XC74LnWDYgR4JYkSrUV8KoDMcXydy", - "symbol": "GIG", - "name": "Glitter in the Grass", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Prime3vil/Glitter-in-the-Grass-Token/main/logo.png", - "tags": ["general-token"] - }, - { - "chainId": 101, - "address": "Brs4S2ehJmxkWsqo6u673ZeNY8HUx2sqnpxAMC4uu2N4", - "symbol": "RUNE", - "name": "RuneCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/runestone74/runecoin/main/R%20grey%20flat%20logo.png", - "tags": ["meme-coin"] - }, - { - "chainId": 101, - "address": "2N79onHLPU2R3s1WGM9n7L2ABCk18CouP83mnbLpBEux", - "symbol": "WINC", - "name": "Wubba Inc Coin", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2N79onHLPU2R3s1WGM9n7L2ABCk18CouP83mnbLpBEux/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8dfxNdAhsmdGt6JE91Hx2y1u3UQdtNwYzaYdVQFugSM6", - "symbol": "ZKC", - "name": "ZaidK Coin", - "decimals": 0, - "logoURI": "https://github.com/ezyhackz/ZaidK/blob/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "A6UHLygu5yZ4t3WPi2A2R4BqP55ybxkXHKzYkzKTsyBf", - "symbol": "SPZO", - "name": "Spizzo Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/pspizzo/solana-spzo/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FCxEBaPxMehE2Qc8QpEF2u1chq9jkBXbEFpJefeYX5fF", - "symbol": "FSEED", - "name": "Freedom Seeds", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/JaySheepdog-N0SR/logo/main/FreedomSeed-logo.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "3HaDnJ2PEt7v7RE8dPaSzSCgBL5dWvWtTkGaEGs5ap3N", - "symbol": "ELONCASH", - "name": "ElonCash", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3HaDnJ2PEt7v7RE8dPaSzSCgBL5dWvWtTkGaEGs5ap3N/logo.png" - }, - { - "chainId": 101, - "address": "Fek4Dy8QCzoSSn8bbznLZhdJHhsukSHQLL38wcwPXYak", - "symbol": "ASTER", - "name": "AsterCoin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/Asterexpansion/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Eit8jtwJygU4pg3ESSXZWsWwP4KuMfGxkDUZhp7o2dYa", - "symbol": "PEZOS", - "name": "pezos", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/lecroquemonsieur/pezos/main/pezos-logo.png", - "tags": ["meme-token"] - }, - { - "chainId": 101, - "address": "GggcHgGuJtckkQPCBif2fVe9D2FXhW19MGSZhcw5Tq1A", - "symbol": "PHI", - "name": "Philoid", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GggcHgGuJtckkQPCBif2fVe9D2FXhW19MGSZhcw5Tq1A/logo.png", - "tags": ["study-Token", "education-token", "social-token"] - }, - { - "chainId": 101, - "address": "8dZkfTisESTx1cAdhDjEYTToKSDgwTUfuWZcMXkFn3uK", - "symbol": "MENMA", - "name": "Menma Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8dZkfTisESTx1cAdhDjEYTToKSDgwTUfuWZcMXkFn3uK/logo.png", - "tags": ["social-token", "utility-token", "community-token"] - }, - { - "chainId": 101, - "address": "sFot4wPtMp5k6ugtJXQGbGy4Sm41Yd6Q5mi7Pq9Zsk4", - "symbol": "GTC", - "name": "Gorito", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/eketiger/goritoCoin/main/goritoCoinLogo.png", - "tags": ["social-token", "family-token"] - }, - { - "chainId": 101, - "address": "BtnUizMTmDdKxP3hZhQhZMUXF9RZZaZJvcNDFLiRbZ5e", - "symbol": "NRV", - "name": "Nerv", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Mr4x3/emoji-cheat-sheet.com/master/logo.jpeg", - "tags": ["utility-token", "DeFi", "governance-token"] - }, - { - "chainId": 101, - "address": "7Um17c1Bo2MEETUcbbFk8oaTXQFUpLcnSwBG2FNLb7AQ", - "symbol": "NSD", - "name": "Nasreddine Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/NasreddineMoe22/crypto/main/logo.png" - }, - { - "chainId": 101, - "address": "DvEChdcDKmKSp8uohR4Mbn2nHgf4kvvoc1a1UVY6dGye", - "symbol": "6SK8", - "name": "6Skates Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DvEChdcDKmKSp8uohR4Mbn2nHgf4kvvoc1a1UVY6dGye/logo.png", - "tags": ["Reward-Token", "Social-token"] - }, - { - "chainId": 101, - "address": "6yfT5iyWzKHH8Bykj3cZ15mCMQkesR7FwnLUWUdxGV89", - "symbol": "BPW", - "name": "Wonder Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/BPWCNRZ/picture/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FuGpEMivuKnTU5KwhCuq9rjfEVX2WekNeSNNqJdThpHk", - "symbol": "AETHER", - "name": "Aether", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/Aether7io/AetherCryptoToken/main/Logos/Aether7ioTokenLogoTransparent.png", - "tags": ["utility-token", "Application", "NFTS"], - "extensions": { - "address": "FuGpEMivuKnTU5KwhCuq9rjfEVX2WekNeSNNqJdThpHk", - "description": "Aether7.io is a cloud platform with applications that utilize blockchain technology to store B2B records and transactions", - "facebook": "https://www.facebook.com/Aether7io", - "website": "https://aether7.io/" - } - }, - { - "chainId": 101, - "address": "7zKR4LWUQmq8E5uC5ZhqPtiV2cM3mR86Mvpw5y6rYayu", - "symbol": "MHF", - "name": "MHF Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/FreedomSeeds/logo/main/MHF-logo.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "4xGGBuyz7r7ps6Kb2Xt8Nh7B6hcGxTaC1pYvcxXJ83YG", - "symbol": "TORO", - "name": "TORO Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/cryptodsyne/toro-token/main/toro.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "41QaQpUGPqLkDVae3cVxesZeZRh82G6ZpSaX86x5w8bk", - "symbol": "AMDA", - "name": "Amanda", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/41QaQpUGPqLkDVae3cVxesZeZRh82G6ZpSaX86x5w8bk/image.jpg", - "tags": ["social-token", "meme-token"] - }, - { - "chainId": 101, - "address": "DFhCgBHdr9VtJvMHzgqrK18vmbhZYtx2MaYfixMTzGPA", - "symbol": "BITHQ", - "name": "bitHQ", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/sutheegt/crypto/main/bithq.png?token=AKRLLC4HNANGYGGKUHXVULLBZIUSO", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Brooke2JJW9aPNQtedHF3pjPQKn9ULQkGLLHL5Pp838a", - "symbol": "BROOKE", - "name": "brookejlacey", - "decimals": 9, - "logoURI": "https://neusoz4twjxun7nsxjyb33ncazmeirheb7ouau6grvizlvbfykaa.arweave.net/aSknZ5Oyb0b9srpwHe2iBlhEROQP3UBTxo1RldQlwoA", - "tags": ["social-token"], - "extensions": { - "facebook": "https://www.facebook.com/brookejlacey.fb", - "instagram": "https://instagram.com/brookejlacey", - "twitter": "https://twitter.com/brookejlacey", - "website": "https://brookejlacey.com" - } - }, - { - "chainId": 101, - "address": "FNAfUZ5NBk8a7JYLfnfChF9DkfEnc2q4mWcoEziemEsZ", - "symbol": "DUBB", - "name": "Dubb Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/systemdan5/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8v67An5A5JsJQABF2tGZqn5MYFyEZnxFfrVdnJxqudvs", - "symbol": "DNC", - "name": "DonutCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/coderkid11/crypto/main/logo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Ao3UnASAD1e76HDz2PSUgop8mPT1QvYrNgJaoSenfbS8", - "symbol": "BOOM", - "name": "BOOM Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Srichand1021/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BjfYF1FN9aLtzZn8oNiLnuxgj9J8b5FECYuZvKWr9JD9", - "symbol": "ghs", - "name": "ghost", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BjfYF1FN9aLtzZn8oNiLnuxgj9J8b5FECYuZvKWr9JD9/logo.png", - "tags": ["community-token", "ghost", "stack", "comerce"] - }, - { - "chainId": 101, - "address": "665t3SYTfoVtaRPP7QRbBG3V7ePVtWVKQXYkSaUfxS7u", - "symbol": "ORNC", - "name": "Orion Coin", - "decimals": 9, - "logoURI": "https://github.com/neptuncoin/orion-coin/raw/main/logo.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "8JxhzRVb2BNdPD9tmobfeqjyEjnic3ZYxyS3NxKAfei2", - "symbol": "OSKR", - "name": "Oskar Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/bremnertech/crypto_oskar/main/IMG_2237.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DBDjTWm6JfmQfypymuxBv9qUvDrqWKjBUWFp1AZB93UX", - "symbol": "BTSI", - "name": "Baertschis Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/k3ruakk/cryptoBTSI/main/BTSI_icon.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "C3uCfCh7A5mp8nh5mb4BVtDdE3unMFx4iFrnNbRD3pP2", - "symbol": "LMFR", - "name": "LimoFahr Token", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/C3uCfCh7A5mp8nh5mb4BVtDdE3unMFx4iFrnNbRD3pP2/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "BJ64zpEsCtTZcCXJ6P3V9J1yukWGQx9QkDqw46jjYqaV", - "symbol": "WEK", - "name": "We Koin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/sermennsker/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AVTcgk5jNvgBcE8qATgGkNFmBLZNBENAGwaF84qjC3HX", - "symbol": "DUMOC", - "name": "DumboOcto", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jeronaut/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Ds644r6pUQZVt6wX4THmey2ejWSeqq2CDpiisiGcUKij", - "symbol": "ZBC", - "name": "Zibbi Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mindmaster7/ZBC/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "wVkrVMERD4eVvTM9CtViLq85bZJFFWmM4UVwL2zuAYR", - "symbol": "JBUX", - "name": "JBUX", - "decimals": 6, - "logoURI": "https://tkuidcbjznavanyp45icotydzw7fhndgecqodr6tmne5oase7w7q.arweave.net/mqiBiCnLQVA3D-dQJ08Dzb5TtGYgoOHH02NJ1wJE_b8" - }, - { - "chainId": 101, - "address": "H6vyVg538NbdvcY25UtnTG2L7fHhvBTL21zNxVR2PBbc", - "symbol": "C2", - "name": "C2 Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/c2devlopement/c2crypto/main/c2-coin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8mkr5nDzEYd6oezcGouM5S34QSn6L5osnHVqdzwB9qx4", - "symbol": "D4CC", - "name": "D4rk Cat Coin ", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/traxxxor/d4rkcat/main/d4rkcat.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "584uDWBE14JqaUTVU4ExKB7KM2onpxvkK5hyUwXGCFBv", - "symbol": "LLPC", - "name": "Lil Pimpy", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Aminek888/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "YLTrJGCqZpwZZbCN2D3KTg4PuGBofto8ciqYdPoQEgd", - "symbol": "YLTR", - "name": "Yolo Otter Token", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/YLTrJGCqZpwZZbCN2D3KTg4PuGBofto8ciqYdPoQEgd/logo.png" - }, - { - "chainId": 101, - "address": "GPNLLeuL15G29XpbnC3oWwf1rgYAvMwhjGvomDQF11iz", - "symbol": "Pure", - "name": "PureParagon Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/PureParagon/crypto/main/5c25b36beafa9880572d690de73545cf.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5fNj49KWgYv5qKrHPb8f5VnGWPUynAuVbWgeLMGLpD1h", - "symbol": "SRNC", - "name": "Seranco Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/somozadev/crpt/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "No2HnCo84QRR75Pv3kE6gMdwT1EjtoZ9SQir7Yq4phE", - "symbol": "YUANBAO", - "name": "Yuanbao Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/joelshu1/frenchclass/main/logo-yuanbao.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "6Gu8zWGNQFwFY6yB4SxRUJMhcUh1Xa1kPB81hFbbyWMT", - "symbol": "BOULE", - "name": "The Bake Shop Boule", - "decimals": 1, - "logoURI": "https://raw.githubusercontent.com/joelshu1/frenchclass/main/logo-boule.png", - "tags": ["bakery-token", "utility-token"] - }, - { - "chainId": 101, - "address": "GbDTNwEQ1hkZtjXjoAeEJ4DUycMfKvxQ94GWFaNT63G8", - "symbol": "BGVG", - "name": "BlogVlogCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ajpaulrh/crypto/main/small2.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6j28waP2NyoCBJrrVNHZuEzLDL25DXdNxMFsMNMxYht7", - "symbol": "BRERO", - "name": "Fraktionalized SMB 3394", - "decimals": 3, - "logoURI": "https://arweave.net/2OINffkTFvUwtPFfNKkNzQ7h8m-1UZsqQkr6bXKIH70", - "tags": ["fractionalized-nft"], - "extensions": { - "vault": "https://fraktion.art/vault/FsGYFGm3mUpUaP4tLAjH3oxnQPT6GYAeWq7mZpZkTGh8", - "vaultPubkey": "FsGYFGm3mUpUaP4tLAjH3oxnQPT6GYAeWq7mZpZkTGh8" - } - }, - { - "chainId": 101, - "address": "GM4CTEsNsU5Kg22JNKkANTannrBU9Ah6SNa3BcyBA6Kj", - "symbol": "BMINUS", - "name": "Fraktionalized Solana White Paper", - "decimals": 3, - "logoURI": "https://www.arweave.net/z6v5oNC5uL9fCPhn-BQEONgBdxXrFNhT3ZP5tF-ZesE?ext=png", - "tags": ["fractionalized-nft"], - "extensions": { - "vault": "https://fraktion.art/vault/FGJJoASbC8g5Mx1JjUKKPDwCJYLnxEMyCmdd7KeJjbe9", - "vaultPubkey": "FGJJoASbC8g5Mx1JjUKKPDwCJYLnxEMyCmdd7KeJjbe9" - } - }, - { - "chainId": 101, - "address": "3o9QgaRRjPKtjbpEtRHPNKUztyPqcdMV5rNwGZjYc8Pe", - "symbol": "DRCO", - "name": "Dracoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/dracoin7/crypto/main/dracoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "988DvTYSr4h4bFfdegiw6pAjHH8wEe5QJ8ZbxczsqSrn", - "symbol": "LGKC", - "name": "LGK-BTS-Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ludma/crypto/main/LGK-BTS-coins.png", - "tags": ["social-token", "LGK", "BTS-CS"] - }, - { - "chainId": 101, - "address": "ASBqrsAiweKQTvZD1E9H6oPNneQra6jutzzfTkAcCUAw", - "symbol": "KaPi", - "name": "Kaboshon Points", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Getronixx/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FwFJMWrSEUViZkGDogdsBZ8HQ2XhjLDTmLd5xMe2AfHr", - "symbol": "EMMA", - "name": "Emmanuel Bruneau Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ImmoSearch/crypto/main/logo.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "CeRYEWdRSNbCqA8rC2s2eiANiqUpbGuhW3kD9uyvz8Kp", - "symbol": "VLCT", - "name": "Velocoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/conanjaywallace/crypto/main/Untitled%20design.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GGFNWQ2oEzYVPu1kGSjXZWfyTibnCGJfqZ7uPx8Jkj7B", - "symbol": "SCTT", - "name": "SOLANA CRYPT TOKEN", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GGFNWQ2oEzYVPu1kGSjXZWfyTibnCGJfqZ7uPx8Jkj7B/logo.png", - "tags": ["meme-token"], - "extensions": { - "discord": "https://discord.gg/cEEy8WweTy", - "serumV3Usdc": "DRSZihtHpPkMqivKdwcdunGC3Z4aSfQFPiUCh3Nb4HPW", - "twitter": "https://twitter.com/SolanaCrypt", - "website": "https://solanacrypt.com/" - } - }, - { - "chainId": 101, - "address": "7i9MWmz7ZQvstAFv43D3e4kmScXgnsN2YXd5NfkgDGd7", - "symbol": "JBLZ", - "name": "Dacoder Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/jaeblaezdacoder/tyro-crypto/main/CSharp.png" - }, - { - "chainId": 101, - "address": "2sxL3Ys8xyfKL1hcSiRP8jW6oAkNDHew9eMeKfvayRUb", - "symbol": "PNET", - "name": "Pendse Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/EkadrishtaITSolutionsLLP/pendsetoken/main/logo.png", - "tags": ["social-token", "social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "9bj7eubfH6PzeSRC34msHevZLRmAPTv74mhay2V278V5", - "symbol": "LSLA", - "name": "Lusela", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/drewufool/Lusela/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "J4pi4maoua63aUfpQR2L9wtUu73FeYayHeWxr4Dmk66h", - "symbol": "HDZ", - "name": "Headies", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/J4pi4maoua63aUfpQR2L9wtUu73FeYayHeWxr4Dmk66h/logo.png", - "tags": ["social-token", "utility-token", "community-token"] - }, - { - "chainId": 101, - "address": "2imMJwQFXAF5mNRcptBz88zA327EVWNssPVF8dE4aTPN", - "symbol": "MOOSE", - "name": "Moose Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/joshmoose/moosecoin/main/logo.png", - "tags": ["social-token", "utility-token", "community-token"] - }, - { - "chainId": 101, - "address": "RoacDJjaskP9mmDBGhbqE3wwZcbEmB5XCRBc12YzVw9", - "symbol": "ROAC", - "name": "Retroactive", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/RoacDJjaskP9mmDBGhbqE3wwZcbEmB5XCRBc12YzVw9/Logo.png", - "tags": ["utility-token", "social-token"], - "extensions": { - "discord": "https://discord.gg/g2swACkaWq", - "telegram": "https://t.me/RetroactiveToken" - } - }, - { - "chainId": 101, - "address": "9n6ydqe6uczUuvydKvVRDTkcTPFJKrcgmTAT21qzjEWj", - "symbol": "Wolfx", - "name": "Wolfy Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/FXCrypto17/WolfGxng/main/Wolfy_768x839.png", - "tags": ["social-token", "meme-coin"] - }, - { - "chainId": 101, - "address": "5LoM1CvGUgv2FAPgt6HLbWtPDvatuLBZVQURn7zqHMzM", - "symbol": "NDCT", - "name": "NandoCarter", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jhosuave/nandocarter/main/logo.png", - "tags": ["utility-token", "social-token"] - }, - { - "chainId": 101, - "address": "HZ3aLWMdriT5RepMWXYTFMQxqLNwTHk5WsnAPn2i6K5A", - "symbol": "SSHIB", - "name": "Solana Shiba Inu", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HZ3aLWMdriT5RepMWXYTFMQxqLNwTHk5WsnAPn2i6K5A/logo.png", - "tags": ["meme-coin"], - "extensions": { - "instagram": "https://instagram.com/solana_shibainu", - "telegram": "https://t.me/solana_shibainu", - "twitter": "https://twitter.com/solana_shibainu", - "website": "https://solanashibainu.com/" - } - }, - { - "chainId": 101, - "address": "DysbQiM8nPdZbBhvHM1EgcSE73EwtFWDanXwY8CDD3Jn", - "symbol": "BOX", - "name": "Solootbox DAO", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DysbQiM8nPdZbBhvHM1EgcSE73EwtFWDanXwY8CDD3Jn/logo.png", - "tags": ["utility-token", "governance-token"], - "extensions": { - "address": "DysbQiM8nPdZbBhvHM1EgcSE73EwtFWDanXwY8CDD3Jn", - "description": "Solootbox is a rewards driven DAO structure built on the Solana blockchain.", - "discord": "https://discord.com/invite/hM78bJHMqx", - "twitter": "https://twitter.com/solootbox", - "website": "https://www.solootbox.xyz/" - } - }, - { - "chainId": 101, - "address": "7YLmEQ3y3r976KKNpwk74pumdj6FmW7nXsDv8YGYfD64", - "symbol": "PI", - "name": "Pi Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Nekardms/crypto/main/PiLogo2.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AhmwsTTEA9kp7D6syGPS6TGXtUmAnENKDLh3CmKZZpni", - "symbol": "FRC", - "name": "FriesCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/FriesCoin/Crypto/main/logo.png", - "tags": ["social-token", "meme-coin"] - }, - { - "chainId": 101, - "address": "5ptALUaFeYixtgX4eUMoouFPXqhZt6sLJJjPDq9hJJy7", - "symbol": "PAP", - "name": "PapaCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Misterakos/Crypto/main/PapaCoin%20logo.png", - "tags": ["social-token"], - "extensions": { - "facebook": "https://www.facebook.com/PapalexiouPavlos", - "instagram": "https://www.instagram.com/pavlospapalexiou/", - "twitter": "https://twitter.com/PapalexiouP", - "website": "https://papalexiou.me" - } - }, - { - "chainId": 101, - "address": "9rrHezomzprX9DKtoV17xcPDPRK6ktdfk9cD4KFe8sxY", - "symbol": "CICD", - "name": "CoIncident", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9rrHezomzprX9DKtoV17xcPDPRK6ktdfk9cD4KFe8sxY/logo.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "h2M41fGRQ95TrNTY1kXFhgC6GBbksPeHqKgmR2BfxVz", - "symbol": "NASI", - "name": "NASI BUNGKUS", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Nasino1/nasi/main/logo.png", - "tags": ["kalebokan"] - }, - { - "chainId": 101, - "address": "612SCMgbrntMy7YTPzKRxL7cUQmjMmQytSNUSVwZySUM", - "symbol": "BODIE", - "name": "Bodie Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/pmcgovern/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HqUbEX8xNDsWYyrrA4JU9RRFfxbDSoKSx8jeiJMBa9ua", - "symbol": "QUBE", - "name": "Homeqube", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HqUbEX8xNDsWYyrrA4JU9RRFfxbDSoKSx8jeiJMBa9ua/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "6RGkgyHiMwdd9p5PthJQD7K98v2nd9XzEeh8rFJzZwzG", - "symbol": "HVACR", - "name": "HeatingVentilationAirConditioningRefrigeration", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/theNetworkChuck/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6HPGGdi3XoxwpW3GZyPgijUdJQiQRMCnPiyxFDyrpfW6", - "symbol": "JAY", - "name": "JayCoin", - "decimals": 0, - "logoURI": "https://github.com/jaycuts/crypto/blob/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HDMVdShFH3h6SH5c4mcff463uiUg7ahhgUK1koQZwTmv", - "symbol": "JVK1", - "name": "Javikito1", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/theNetworkChuck/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7oR9BN3aEq1dm6NCxdbSiQhGrDxcHRvmCRLGXHCUfrEi", - "symbol": "JUJUB", - "name": "JujubaCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/davidveg/jujubacoin/main/logo.png", - "tags": ["social-token", "meme-coin"] - }, - { - "chainId": 101, - "address": "CefqAKPjEBQ856XWJGABpPAf7idJYdfhyAoNWzFGvfLC", - "symbol": "WEISS", - "name": "Weiss token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/0xw01f/weiss-token/main/logo.png", - "tags": ["social-token"], - "extensions": { - "github": "https://github.com/0xw01f", - "twitter": "https://twitter.com/w01f_src", - "website": "https://w01f.xyz/" - } - }, - { - "chainId": 101, - "address": "5R1t9pwjEXVbvzhBCRT2ELiqMuLSf6r6vJ8RYTsXGXW1", - "symbol": "OPSAM", - "name": "Samatoshi", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/OpSam/crypto-/main/octopusLand1%20300x300.png", - "tags": ["meme-token"] - }, - { - "chainId": 101, - "address": "31WizpkSKyhptDcBw9fuSxMwd9Mkjac4rxM28pkcKjM5", - "symbol": "KDMK", - "name": "Kadima Koin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Blue182/Kadima-Koin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Agyt4PGy7sqq6yjEJddtCzYsvRuSJDefwTsMgobV67xo", - "symbol": "ARCN", - "name": "Augmented Relity Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/shashtikar/arcoin-legacy/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BBKSy4KFdcZuWhEEcYTBLf9TGXZ321Yb44VPDdpYAnmY", - "symbol": "NBE", - "name": "Nube Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/thebdsw320/crypto-sol/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AfA8C1cJNaHo2kSw6X353qCAzytmcXw5WWL5QkPmxd7h", - "symbol": "SOCO", - "name": "SoCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/bsepsey/socoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7PbCuPKJVrirRFydAgmTDBoxsysrdd7JjP2pBmrHvAf9", - "symbol": "RMNI", - "name": "Armani Mendrek", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/githubmaster308/crypto/main/Mani.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4BNcUV7Azh1xnWjppzq4exQTxvsL4XKsNbKF4sFtwtNc", - "symbol": "KISSES", - "name": "Kiss Coin", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4BNcUV7Azh1xnWjppzq4exQTxvsL4XKsNbKF4sFtwtNc/logo.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "HvAedw7nTFNgLQjBkTn55LKpCgnTUzzYQ5bRU5M4QTXB", - "symbol": "EURO", - "name": "EURO token", - "decimals": 2, - "logoURI": "https://github.com/ArtTokenFund/solana/blob/main/blockPNG.png", - "tags": ["DeFi-token"] - }, - { - "chainId": 101, - "address": "CvkDiC6FziAnX5e8XufNDjFXCWNyRCSoCfhdEq2e5res", - "symbol": "FluffyDegenerate", - "name": "FluffyDegenerate", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/lofobic/FluffyDegenerate/main/FluffyDegenerate.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5strq6dAS5LGURu2LWtwzzao2QVMtmzNKZwsDZfGYv6T", - "symbol": "GAMBL", - "name": "GAMBL Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/puresamari/gabl-website/main/src/assets/GAMBL.png", - "tags": ["gamble-token", "game-coin"], - "extensions": { - "address": "5strq6dAS5LGURu2LWtwzzao2QVMtmzNKZwsDZfGYv6T", - "description": "gambl.fun is a decentralized platform where you can use GAMBL coins to gamble on deterministic mini-games like roulette.", - "discord": "https://discord.gg/DzCRqg29", - "website": "https://gambl.fun/" - } - }, - { - "chainId": 101, - "address": "FPHLFQxs9VEKetUGNFaQu7LDK6DxckBQ199uxnQPNDzK", - "symbol": "JY", - "name": "Junkyard", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/4lxAnd3r/cryptostuff/main/JYLOGO.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9PsfjNhfvPJEctsuGPFb74RENn4z7obna9zjGcRPuaVa", - "symbol": "dooboo", - "name": "dooboolab coin", - "decimals": 0, - "logoURI": "https://user-images.githubusercontent.com/27461460/147493821-1d95ae21-319a-410d-8a2c-4a69892080ec.png", - "tags": ["dooboo-coin", "community-coin"], - "extensions": { - "website": "https://dooboolab.com" - } - }, - { - "chainId": 101, - "address": "AShCRr7fqsMf7ieM5AkJqNY566HsYmtvpvK8oPUL4Bh8", - "symbol": "MBC", - "name": "MoneyBoy Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AShCRr7fqsMf7ieM5AkJqNY566HsYmtvpvK8oPUL4Bh8/logo.png", - "tags": ["utility-token", "community-token", "meme-token"], - "extensions": { - "twitter": "https://twitter.com/SolanaMoneyBoys", - "website": "https://www.solanamoneyboys.com/" - } - }, - { - "chainId": 101, - "address": "H7r1ZdGStLSNbfTur4b5JadQnBxs3Uxg2SQsMTUus3u7", - "symbol": "AMBER", - "name": "Amber Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/richardmotion/ambertoken/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Aufx78VHew6J1nyLiGZtAJozb9gEh7hWDE9XCib1k3eh", - "symbol": "XEL", - "name": "Sunflower Solar Energy Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Aufx78VHew6J1nyLiGZtAJozb9gEh7hWDE9XCib1k3eh/logo.png", - "tags": ["community-token", "social-token", "utility-token"], - "extensions": { - "website": "https://ntontel.com/" - } - }, - { - "chainId": 101, - "address": "784sQdraSP34ij3nokHomQ1EcB2aU3AzHgXG9gX8BRWe", - "symbol": "DRAGON", - "name": "Dragon Li", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/LeChef/crypto/main/Screenshot_2.png", - "tags": ["meme-token"], - "extensions": { - "address": "784sQdraSP34ij3nokHomQ1EcB2aU3AzHgXG9gX8BRWe", - "description": "Shiba's sister on the Solana network." - } - }, - { - "chainId": 101, - "address": "2zjmVX4KDWtNWQyJhbNXgpMmsAoXwftB7sGV4qvV18xa", - "symbol": "EGO", - "name": "Shear Ego Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jcards26/sol/main/new-new.png", - "tags": ["social-token", "community-token"], - "extensions": { - "website": "https://shearego.com" - } - }, - { - "chainId": 101, - "address": "DY4bQMeGTg57b7EUjkpQk4JyGAAaRam5sggiHtmAvVWn", - "symbol": "ARXCC", - "name": "ArxaiosCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Ckotselis/arxaioscoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5FuVDFV6VRhzsH5K26go93y5FVBTnDtyB2QZruP5uBk8", - "symbol": "RDG", - "name": "Rodger", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/erodger/crypto/main/logo_rdg.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "bSo13r4TkiE4KumL71LsHTPpL2euBYLFx6h9HP3piy1", - "symbol": "bSOL", - "name": "BlazeStake Staked SOL (bSOL)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/bSo13r4TkiE4KumL71LsHTPpL2euBYLFx6h9HP3piy1/logo.png", - "tags": ["utility-token", "stake-pool", "stake-pool-token"], - "extensions": { - "github": "https://github.com/SolBlazeOrg", - "twitter": "https://twitter.com/solblaze_org", - "website": "https://stake.solblaze.org/" - } - }, - { - "chainId": 101, - "address": "CTDQnU7CUtQZis11khk8YADtYVuBt33KRoird8ADo76m", - "symbol": "TECC", - "name": "TechCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Semiprowhistle/crypto/main/9acab35e26de4bbebbc549a364a7a236.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2NURMkJEkLWUXF91kbhBETkZ5E2D674DF2Wi5X2ZTsTH", - "symbol": "GCC", - "name": "GitCompile Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/gitcompile/assets/main/logo.png", - "tags": ["community-token", "social-token", "utility-token"], - "extensions": { - "website": "https://gitcompile.com/" - } - }, - { - "chainId": 101, - "address": "5Re6i2v7iRsFyVqPxMX4gNHpgBxBaRnEBv2mWYp5i79d", - "symbol": "TAYO", - "name": "Tayo Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/samwarlock/TayoCoin/main/logo.png", - "tags": ["community-token", "social-token", "utility-token"], - "extensions": { - "website": "https://mexel.io/" - } - }, - { - "chainId": 101, - "address": "CrzX8DyyV9xLj2pTVB4iohdDRw7CXfNKeA9iksxHjvEz", - "symbol": "TAN", - "name": "Tanda Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CrzX8DyyV9xLj2pTVB4iohdDRw7CXfNKeA9iksxHjvEz/logo.png", - "tags": ["community-token", "utility-token"], - "extensions": { - "website": "https://defitanda.xyz/" - } - }, - { - "chainId": 101, - "address": "C9mNSDBnHbpgRCwrtcpDQGNJJbNZPTLNKDe2d195uBSc", - "symbol": "META$", - "name": "MetaHedge", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/C9mNSDBnHbpgRCwrtcpDQGNJJbNZPTLNKDe2d195uBSc/logo.png", - "tags": ["metahedge"], - "extensions": { - "website": "https://metahedge.site/" - } - }, - { - "chainId": 101, - "address": "8vNC6WZNQA55jv6dsVv7KYtyGUoTCdGDtsNZwVSJLv5L", - "symbol": "IDK", - "name": "IDONKNOW", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/CoachAlpha/IDK/main/Nunito.png?token=AQLSQ24XAXTVK2JXXFQLFVTB2S5B6", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CCatQV1QfPCgLm6PwBMEHF2mMesAgMFwSqx64hvLGHvN", - "symbol": "BORROW", - "name": "BORROW", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/INBBELGIUM/BORROW/main/borrowPNG.png", - "tags": ["BlockExchange"] - }, - { - "chainId": 101, - "address": "65xYYLAGvEH3JFiTAuNAvjyHEN1sYRVtVqbtpYWwQKkt", - "symbol": "SKDB", - "name": "Skanderbegcoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/scanderbegcoin/crypto/main/logo_coin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GKG5EhKMCrwBfGBsT1iCbkRU4eajiXZPrKDJRttMy7M8", - "symbol": "ANSAM", - "name": "Ansam Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/k3ruakk/cryptoBTSI_ANSM/main/Logo_ANSM_C.pngrypto.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CB7QCaCyWW1cW6v2yRQEJMHQqeqSMGqyHgLiQYzPt9q1", - "symbol": "BOSS", - "name": "Bosschester Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jwood91/bosschester-coin/main/bosschester.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7mwv5foKostkWY2uNs7f5BikFyZRYHGtkzqrCWF1d19B", - "symbol": "PWR", - "name": "Power", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/Zacnode/Z/main/coin.png", - "tags": [ - "pwr-token", - "defi-token", - "community-token", - "social-token", - "security-token", - "utility-token", - "tokenized-stock", - "governance-token" - ] - }, - { - "chainId": 101, - "address": "3px4SevZeazd16dM8tFKny2defzXJYPjpyXhbrg7ZnGg", - "symbol": "GRAS", - "name": "GRASSI Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/GRASSI-CRYPTO/crypto/main/grassi_logo.PNG", - "tags": ["community-token", "social-token"] - }, - { - "chainId": 101, - "address": "BBDTWqhhsACYGapK6uuSbFAgxzrdTmgNqG2dWTgL2pyE", - "symbol": "BII", - "name": "Shebii Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/shebiisocial/shebiicrypto/main/logo.png", - "tags": ["social-token", "community-token", "utility-token"], - "extensions": { - "website": "https://shebii.com" - } - }, - { - "chainId": 101, - "address": "CRpfh3FNgeW6c2ennQihYiSFVTMzieeUH47t5SdkzgQ", - "symbol": "CURC", - "name": "CurrieCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/LcCompany/CurrieCoin/main/Logo_CurrieCoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9rA5Kr1CvnuwT5zgkfxMUBxEk2XMVtNGBmYrpVM8QSGp", - "symbol": "WOLF", - "name": "Wolf Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/pspizzo/solana-wolf/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9opSeM2GqYG7Zpzvamr2wV1bYN7xjYMGY9ChbhDt1GE3", - "symbol": "GIC", - "name": "GiobaCoin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/nicogioino/giobacoin/main/gioba-coin-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ugYBhmHuF8sWjpD8NFrnCPAor4zWRkNwYS5qPQa9c2d", - "symbol": "REIT", - "name": "MetaREIT", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/metareit/crypto/main/Logo.png", - "tags": ["community-token", "social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "HjJpn4jRa5uXLKHMqabUtCY7VbxZC3QhBTDqwvYypQ6i", - "symbol": "RLX", - "name": "RALI", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/seanjoneil7/Rali/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CzoZAELx9jhoxZkgqY6Rt2xbvEEzWs2FpM1tQGvKfGd1", - "symbol": "T-SUGER", - "name": "Token SUGER", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CzoZAELx9jhoxZkgqY6Rt2xbvEEzWs2FpM1tQGvKfGd1/cube-logo.png", - "tags": ["asset"] - }, - { - "chainId": 101, - "address": "6gPe2ZHagsEjVJ5EoykKLsQSiqBUrRJJHogEy9WVREjV", - "symbol": "PUKI", - "name": "Puki Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/AimeeKnight/puki-token/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3Qkg5VLCQp1bkGQob6SFGKUZYX3wWz4pVhCtmM319SsB", - "symbol": "HVACR", - "name": "Heating Ventilation Air Conditioning Refrigeration", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MARRS3/Hvac/main/z676z7d%2B6763.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9k7cDLm7DXuNnunoruk25VwodPo8QM3647MRKdk9vbW5", - "symbol": "SBCN", - "name": "Smartbrain Coin Network", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9k7cDLm7DXuNnunoruk25VwodPo8QM3647MRKdk9vbW5/logo.png", - "tags": ["community-token", "social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "Fp7Tn42tBXe2vWbTLqBDcjzz4SaY68uaaD4453GEQC7o", - "symbol": "Nurture", - "name": "Nurture Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Fp7Tn42tBXe2vWbTLqBDcjzz4SaY68uaaD4453GEQC7o/logo.svg", - "tags": ["social-token", "utility-token"], - "extensions": { - "website": "https://molabs.ai/" - } - }, - { - "chainId": 101, - "address": "Dybs1hyBS16jNSBFpQ3hFJdLutw38CWcD3cD1qm75aL6", - "symbol": "RAM", - "name": "RAM Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/robilokos/my_crypto_coin/main/ram-coin-logo.png", - "tags": ["community-token", "ram-coin", "social-token"] - }, - { - "chainId": 101, - "address": "Digi7SnUD9ddiitEqkNfby1c4BfkgokFKWu9KScbizes", - "symbol": "$DIGI", - "name": "Digi Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Digi7SnUD9ddiitEqkNfby1c4BfkgokFKWu9KScbizes/logo.png", - "tags": ["community-token"], - "extensions": { - "twitter": "https://twitter.com/DigiDinoNFT", - "website": "http://pridelands.co.uk" - } - }, - { - "chainId": 101, - "address": "7QkpFkmjizUeFPL5n2zCdQXuktfqDriQJFSMg7FVpwEg", - "symbol": "PTCN", - "name": "Pota Coin", - "decimals": 0, - "logoURI": "https://github.com/mircolik/potacointoken/blob/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2es95eT9Lq4akJcits6m9EuiuxfFG3RXtwmHuPqtrae8", - "symbol": "MOOS", - "name": "Moose Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/bjs3/crypto/main/moose_logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FqFjvxF78gLHDc1E6UCAHEo59xvNJxiugNdQPubG2BFk", - "symbol": "ODN", - "name": "Valhalla Token", - "decimals": 1, - "logoURI": "https://raw.githubusercontent.com/odin-bb/crypto_logos/main/odin_logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6b1FV6YcgQJUdLQHGbZSF2TVyZ63TkmLK8AZQNwvACma", - "symbol": "SNBK", - "name": "SonnyBuck Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/creatorSonny/sonnyBuck/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "G2jD26aaBtHFB3MEn8SUd9StX9NYG3hu4chCM5AdnStq", - "symbol": "PWR", - "name": "Dino Power Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/G2jD26aaBtHFB3MEn8SUd9StX9NYG3hu4chCM5AdnStq/logo.png" - }, - { - "chainId": 101, - "address": "CFyomVLnGjVssjzjtPCG4wC258FQJXaQddrCnC8dRVqB", - "symbol": "NTLC", - "name": "Nightly", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Hariienesh1901/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "883kL8uXDpNdH9W15q2BcnQ5WcQ8dsga2x9SDs2yGNT5", - "symbol": "ROYS", - "name": "RoyalSnakes", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/883kL8uXDpNdH9W15q2BcnQ5WcQ8dsga2x9SDs2yGNT5/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/royalsnake5", - "website": "https://royalsnakes.club/" - } - }, - { - "chainId": 101, - "address": "HBxHiTHpmnps5ALo2jzZbVmUzPPpZsUT8wN8KtqkBU9h", - "symbol": "NAMEK", - "name": "Namek", - "decimals": 9, - "logoURI": "https://github.com/neptuncoin/namek/raw/main/logo.png", - "tags": ["community-token", "social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "CwoGqZVdbhsVB9LyMgYRFoXTEixE8uZKdacXxECgXuQ3", - "symbol": "ZEAL", - "name": "ZEALLIONAIREZ", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/FRESHKINGZ/crypto/main/ZEAL-TOKEN.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8Xc1p7sxbVZnQZ5ZHVSthCo4n2WMSmB5we6s5xu2ztua", - "symbol": "FabL", - "name": "FABULOUS", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/fabienlopes/FABL-Crypto/main/logo.png", - "tags": ["social-token", "community-token", "Metaverse", "NFTs"], - "extensions": { - "description": "Solana Token by Fabulous Fab", - "website": "https://fabienlopes.com/" - } - }, - { - "chainId": 101, - "address": "AZ2wwVXGgwf3CtEi1qAHoQo5o7ERDJfaMaKyxCM3igj5", - "symbol": "AUD", - "name": "STRAYA", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Dmnted/Straya/main/logo.png.png", - "tags": ["Social-token", "Community-Token", "meme-token"] - }, - { - "chainId": 101, - "address": "5Ug5TUBuzdvV1af2SQSqmzxfdC4frFy1oYuaPbgTYWJv", - "symbol": "RDK", - "name": "RIDIKIO COIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/bkornijenko/rdkc/main/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "ENasDAoJpLs5wxpX1djqDUAp1PfwmmU8kCRKESHmV4Y5", - "symbol": "JTX", - "name": "JTX", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ENasDAoJpLs5wxpX1djqDUAp1PfwmmU8kCRKESHmV4Y5/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EhtDrCstJVsbKGLGVHXQFipJBQaV5721ykgBJUwECf7c", - "symbol": "THGC", - "name": "GandiCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Kunapoo88/crypto/main/newlogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FKYuoLZSgZPAc4VuoDJBkXqq6sWDNGLLyxBdTxvXbs3a", - "symbol": "GDST", - "name": "Godeste", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/raggid00/crypto/main/gdst.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EgEybbXBmN9nH61mTa46BNT3H5ShcMTcUCtRQVd7uQ9e", - "symbol": "chr", - "name": "cryptoheroesrevolution", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/BPWCNRZ/picture/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9bza9QfWA8M27CnUezbt2DXrMTcrSLjubqbPQBA7NFSq", - "symbol": "EPA", - "name": "E-Paisa", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/omidalikozay/E-Paisa/main/logo.png", - "tags": ["Payments"] - }, - { - "chainId": 101, - "address": "RDEwBzVqiEBRLwNt3ZNLfQf11N2rCZp2r6iYHkS3yD2", - "symbol": "MTP", - "name": "MetaPrimo", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/RDEwBzVqiEBRLwNt3ZNLfQf11N2rCZp2r6iYHkS3yD2/logo.png", - "tags": ["utility-token"], - "extensions": { - "telegram": "https://t.me/Meta_Primo", - "twitter": "https://twitter.com/Meta_Primoi", - "website": "https://www.metaprimo.io" - } - }, - { - "chainId": 101, - "address": "3HovsMB1JnParzAgaUZLZRxTLAqLWqtc8z4Re8hB2ZUb", - "symbol": "VOLK", - "name": "VolKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/munkyz420/crypto/main/Untitled13_20211227205009~2.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7rYHNNU1Quk56mzxXxGiaTWV6Hb1Dh1QNUyShVEdi2Qp", - "symbol": "PTOC", - "name": "Pluto Coin", - "decimals": 9, - "logoURI": "https://github.com/neptuncoin/pluto-coin/raw/main/logo.png", - "tags": ["community-token", "social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "HG2FnifX1WPY6UvnkXnMx2kAt4E4Ssu6DZ2aiB5RmLHo", - "symbol": "ISLAMI", - "name": "ISLAMICOIN", - "decimals": 7, - "logoURI": "https://raw.githubusercontent.com/ISLAMIBLOCKCHAIN/ISLAMICOIN/main/logo.png", - "tags": ["social-token", "utility-token", "community-token"], - "extensions": { - "description": "ISLAMICOIN is a cryptocurrency for the global Muslim community", - "facebook": "https://facebook.com/islamicoin", - "github": "https://github.com/islamiblockchain", - "telegram": "https://t.me/islamicoin1", - "twitter": "https://twitter.com/islamicoin", - "website": "https://islamicoin.finance/" - } - }, - { - "chainId": 101, - "address": "AMHtKdUgDNDCc46tJpiDCCZNqLVMtvgEKHfnTqttkQ1N", - "symbol": "NWT", - "name": "Newmont Token", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/Newmonttoken/Newmont-token/main/newmont.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "3ZQyX8fkcRQvVmzbgd8GX3TrSXiniJx8KkRrhTRTMZDh", - "symbol": "EODC", - "name": "EOD Coin", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3ZQyX8fkcRQvVmzbgd8GX3TrSXiniJx8KkRrhTRTMZDh/logo.png" - }, - { - "chainId": 101, - "address": "FsxCN4C3dNQF1NtaT1CWf9mfEG2kSfPgUJU6wmAb3ffJ", - "symbol": "TKOIN", - "name": "TIME-KEEPER-KOIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/tkwsc/crypto/main/logo.png", - "tags": ["social-token", "community-token", "utility-token"] - }, - { - "chainId": 101, - "address": "cet4t25o8KbxxphkR2jiS3vqE2HJiy4rZTsKRMYrrnj", - "symbol": "WAGMIX", - "name": "WagmiX", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/cet4t25o8KbxxphkR2jiS3vqE2HJiy4rZTsKRMYrrnj/logo.png", - "tags": ["defi", "community"], - "extensions": { - "discord": "https://discord.com/invite/hxPNxt2dG8", - "medium": "https://wagmi-sol.medium.com", - "twitter": "https://twitter.com/wagmi_sol", - "website": "https://www.wagmionsolana.com" - } - }, - { - "chainId": 101, - "address": "Fp3xmEShsDMLTS7tDV1Wqz4JRLyf3gdpXCz198RFHdTz", - "symbol": "XLS", - "name": "Xelasi", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Fp3xmEShsDMLTS7tDV1Wqz4JRLyf3gdpXCz198RFHdTz/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "F4fgbBca87gDU2nsqcNjhKvVF6JKevsXkuyKhWoHRhQX", - "symbol": "JK", - "name": "Jaafar", - "decimals": 7, - "logoURI": "https://raw.githubusercontent.com/Jaafarkrayem/Jaafar-Token/main/logo.PNG", - "tags": ["family-token"] - }, - { - "chainId": 101, - "address": "BjEn5yfq2uHFtxXqfatvjB5dzhmJaopvpNgxq66ouTSQ", - "symbol": "BECOIN", - "name": "Be Company", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/bledrunn3r/bnut/main/b-logo.png", - "tags": ["community-token", "social-token", "utility-token"], - "extensions": { - "twitter": "https://twitter.com/badoun", - "website": "https://www.intengo.fr" - } - }, - { - "chainId": 101, - "address": "8mspsKgXTYmcQHXiRrt41R3jPkfHCsXXSStg56z7WhD6", - "symbol": "WOOD", - "name": "Wood", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/rageousrsx/logos/main/w_logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4GqXdRroc4tMneqcW6LLT4BvUdARMohFjVcokNfC3yp8", - "symbol": "LYLN", - "name": "Llewellyn Afallon", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Dewey420/crypto/main/LOFGOPNG1.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Dw6u2E7uBnogPiwN4G1Lxg6Pwf5HGbCPGfRpS46D7XHR", - "symbol": "pkc", - "name": "Peace Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/praladkhadka/sun1/main/amg.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CQkTVkohEmyydNPNPH82c6aNPeXE72AatrhZcbntiAfg", - "symbol": "WVIP", - "name": "The WAGMI VIP Club", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CQkTVkohEmyydNPNPH82c6aNPeXE72AatrhZcbntiAfg/logo.png", - "tags": ["utility-token", "Defi-Token"], - "extensions": { - "website": "https://twitter.com/WAGMI_VIP_Club" - } - }, - { - "chainId": 101, - "address": "9zvpRCotU23T9Ykbq5VGGZV6vEcBioLpzUsEZGXjV1Pu", - "symbol": "FRSGN", - "name": "FirsGen Blessings", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/kantrealb2/FirsGen/main/FirsGen.png", - "tags": ["social-token", "family-token"] - }, - { - "chainId": 101, - "address": "HzphDb6FFqM3DWsKoRU8vEsg8hdL7muSdRzAEeE3AdLE", - "symbol": "KRSB", - "name": "Kers Brakers", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/kantrealb2/KersBrakers/main/KB.png", - "tags": ["social-token", "family-token"] - }, - { - "chainId": 101, - "address": "GzpRsvnKXKz586kRLkjdppR4dUCFwHa2qaszKkPUQx6g", - "symbol": "LOOT", - "name": "LOOT", - "decimals": 6, - "logoURI": "https://arttest12312321.s3.us-west-1.amazonaws.com/pics/Bag_Open+(3).png", - "tags": ["community-token", "social-token", "utility-token"], - "extensions": { - "discord": "https://discord.gg/copsgame", - "twitter": "https://twitter.com/copsdotgame", - "website": "https://cops.game/" - } - }, - { - "chainId": 101, - "address": "H7LGXowxxrgukYLUWAYwhnuXbXVugewTzE6dLu2ZnJti", - "symbol": "DT", - "name": "Derek Treonze", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/B33m0-1337/DT-Crypto/main/Derek.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BDQ1ALvrChL4CcjChwYp7C5XsXxbFkUj5hGdPM3AWkyf", - "symbol": "PLC", - "name": "Palastine Coin", - "decimals": 0, - "logoURI": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRnKolKlwpw-Gp_UXWlgyFKWAOlf3LxYHODzw\u0026usqp=CAU", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "F81wP9DYFnyk7JZtsHNks8S2QwG6vMwtmU13RwuU7bHP", - "symbol": "SEAL", - "name": "Seal Inu", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/D3FUZED/sealinu/main/Social_Profile_Mirko.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3WQ53QmDCseyWZopw1EkyhWQKcsYYHr5RWsjLkqj8d2e", - "symbol": "NKBC", - "name": "NetworkKantreal B", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/kantrealb3/NetworkKantrealB/main/Kantreal.png", - "tags": ["social-token", "family-token"] - }, - { - "chainId": 101, - "address": "DP9fXAemWm3SGMZ5hE1qNqRBHaaNhEZ9o3aqHUEMBroN", - "symbol": "CRUM", - "name": "CookieGem", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/akashanova/CookieGem-Logo/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CKtNgCmqTiJi6Dv6MAM487u132goC9boQ2etRk7t2JVU", - "symbol": "EXC", - "name": "Exa Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/schweinder/exeter/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "E3qVrUYYXEgt8HFhCks3Do2Ehxq6C9uqqTxLZwqxgcY7", - "symbol": "AFTT", - "name": "After Token", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/DrakeArcan/LOGO/main/AfterTokenLogo.png", - "tags": ["Dex-token"] - }, - { - "chainId": 101, - "address": "4qw5MNc9oLKS22hiFTK6TNBHCqegDK3qzhMDgawtwnUL", - "symbol": "SSK", - "name": "SolShark", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4qw5MNc9oLKS22hiFTK6TNBHCqegDK3qzhMDgawtwnUL/logo.png", - "tags": ["utility-token", "meme-token", "dex"], - "extensions": { - "discord": "https://discord.io/solshark_sol", - "telegram": "https://t.me/solshark_sol", - "twitter": "https://twitter.com/sol_shark_sol", - "website": "https://sol-shark.com" - } - }, - { - "chainId": 101, - "address": "32trPxNGr47Xp8btb5de2p4jmwmTjeebDxsWEtnAC9R5", - "symbol": "LBC", - "name": "Liberty Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/elenaviolet/crypto1/main/Liberty_Coin.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3Nk6Nzg3AucaYtLoQvDLa8qVTVhVV7jJKYE56reWq5Xz", - "symbol": "GCDOG", - "name": "GeorgesCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/effset/crypto/main/georgescoinless200.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EXg16wru9VEEeTCWwEybTUDoUurvTTtQwapPsmitHsf4", - "symbol": "GREY", - "name": "The Greyson", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Chaosbeast9000/Crypto/main/grey-wolf.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HQJq5m1KxxNLEMfUqQNhxSbGaYGssf4QcHtE3UAVEjo5", - "symbol": "PSYBER", - "name": "psybertech's token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/psybertech/psyber_token/main/psyber_token_2.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5U44iEAG39gysZdTV6gewnemuZHDJtEVdm5mmCMKrHoP", - "symbol": "NTC", - "name": "NetworkTrina", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/kantrealb4/NetworkTrina/main/TN.png", - "tags": ["social-token", "family-token"] - }, - { - "chainId": 101, - "address": "HUUZhbs3hKufU1fApwjEHmxobPaSh7gSrybeeZ2Sh2Hg", - "symbol": "KJR", - "name": "KJ Reward", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/kantrealb4/KJReward/main/KJ.png", - "tags": ["social-token", "family-token"] - }, - { - "chainId": 101, - "address": "G38t3TNTcKTpCVqgqu3WMsG6BALD5GnGRur2eVe2zmzf", - "symbol": "TGC", - "name": "Tray Gaming", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/kantrealb4/TrayGaming/main/TW.png", - "tags": ["social-token", "family-token"] - }, - { - "chainId": 101, - "address": "GjdyXC7cj97NZKBmypcS8ZH6GfL2Rjopj22BXbECfRpf", - "symbol": "JFC", - "name": "JFashion", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/kantrealb4/JFashion/main/JW.png", - "tags": ["social-token", "family-token"] - }, - { - "chainId": 101, - "address": "CUtaQC24jerou53mC5TQMfqa1XqATBNg1Sxnhjvf4JbQ", - "symbol": "MAGA", - "name": "MAGATOKEN", - "decimals": 5, - "logoURI": "https://github.com/hhhogannwo/MAGAToken/blob/main/logo.png", - "tags": ["social-token", "family-token"] - }, - { - "chainId": 103, - "address": "9GyzdYVkfUH1s4MTB3Kv1FGgXTCtucsohukw5wfxmysg", - "symbol": "CSUCSI", - "name": "CSUCSI PUTYI TOKEN", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/csucsiputyi/csucsi/main/csucsi_logo.png", - "tags": ["soical-token", "community-token"] - }, - { - "chainId": 101, - "address": "BgeRyFWWGHeVouqfHfcXUxmvfkgekhrXYVqQWf63kpJB", - "symbol": "BAPE", - "name": "BAPE", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BgeRyFWWGHeVouqfHfcXUxmvfkgekhrXYVqQWf63kpJB/logo.png", - "extensions": { - "coingeckoId": "bored-ape-social-club", - "twitter": "https://twitter.com/BAPESocialClub", - "website": "https://boredapesocial.club" - } - }, - { - "chainId": 101, - "address": "DfLX2gHyT75Y8Buh1tWt6MD3czKirJWKuTSwhPstPJd8", - "symbol": "LFX2M", - "name": "lfx2m", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/lfx2m/crypto/main/lfx2m.png", - "tags": ["social-token", "family-token"] - }, - { - "chainId": 103, - "address": "CFyomVLnGjVssjzjtPCG4wC258FQJXaQddrCnC8dRVqB", - "symbol": "NTLC", - "name": "Nightly", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Hariienesh1901/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5Lfz9YhVb6nrU9jq2RPBtUL5VktGrrbDW1WBPcDzACu2", - "symbol": "RAF", - "name": "EXEMPLO", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Rafinix/Crypto/main/Example.png", - "tags": ["social-token", "family-token"] - }, - { - "chainId": 101, - "address": "BNTY5DaMP9CZhEtmQfMLHfUwwkXropHuCz4m96YqpqKm", - "symbol": "BNTY", - "name": "Bounty", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BNTY5DaMP9CZhEtmQfMLHfUwwkXropHuCz4m96YqpqKm/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://bountyhunterspaceguild.com" - } - }, - { - "chainId": 101, - "address": "7gkM3c4zrHUwbv7BRsi8WiNck2nq2NmdsDguE4ipX46x", - "symbol": "SLNY", - "name": "Solenya Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/IcyOtter/SolenyaCoin/main/logo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8ynFsmZn1GpDreKCdn93ewqoUr5THpdhAo2MWcY4FmEG", - "symbol": "DSPC", - "name": "DSP Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/GenesisDSP/assets/main/DSPC.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "discord": "https://t.co/j1ljROSuoJ", - "twitter": "https://twitter.com/cryptodsps" - } - }, - { - "chainId": 101, - "address": "3ez9nabkdvCjN4itVdyXSUX9dGgSvCTvqsBADa2Sxn9F", - "symbol": "STC", - "name": "Stouna Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/christian1409/stounacoin-1.0/main/coollogo_com-6144280.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Ff5xHwgJDTowJ1x9r3EAoSznmVkWeSKNreRAAbJvzafF", - "symbol": "HAMM", - "name": "HammyCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/nledevil/hammycrypto/master/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7cjvfM6riwYjadQYKJ7BD6CrsUW5douFCDSNAQ275QKZ", - "symbol": "ZEF", - "name": "ZEFcoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/robazefa/ZEFcoin/main/ZEF_tongue6.png", - "tags": ["social-token", "meme-coin"] - }, - { - "chainId": 101, - "address": "5h2opJngX4dYwZbsdjSqmvm9iaCBe8u9eGWfzud9d5Q4", - "symbol": "VRinRL", - "name": "VRinRL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/xMaxix/crypto11/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "cwmkTPCxDkYpBjLQRNhcCKxuxnAQW6ahS7JQLeXrsXt", - "symbol": "CWM", - "name": "Catalina Whale Mixer Droplet", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/cwmkTPCxDkYpBjLQRNhcCKxuxnAQW6ahS7JQLeXrsXt/logo.png", - "tags": ["utility-token", "solvent-droplet"], - "extensions": { - "discord": "https://discord.gg/thK8BCtQbM", - "github": "https://github.com/solventprotocol", - "medium": "https://medium.com/@solventprotocol", - "serumV3Usdc": "E8CLGjBzJD7TPgjfcWm8dvpXhz5pvdjcPxhG7qi7Y5un", - "telegram": "https://t.me/solventprotocol", - "twitter": "https://twitter.com/solventprotocol", - "website": "https://solvent.xyz" - } - }, - { - "chainId": 101, - "address": "8Ea48QsKG4rcQtqGHxLYiJdVg96BUV8KU8VaVCCF6MTp", - "symbol": "MEGABIKE", - "name": "MEGABIKE", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/MegaBike-Simone/MegaBike/main/megabike-logo-PNG.png", - "tags": ["MEGABIKE"] - }, - { - "chainId": 101, - "address": "7Af1biRuBcAQTEU3YkWaGGtQDFoxYmqLMyrBNQKnuogn", - "symbol": "TRAC", - "name": "Terea Coin", - "decimals": 6, - "logoURI": "https://github.com/neptuncoin/Terea-Coin/raw/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7YHfn7QR6uzK1o7ZtSXfLatzTix2En8ResVKDj83VXmP", - "symbol": "HOTEL", - "name": "HOTEL", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/NewHotel-Simone/NewHotel/main/hotelPNG-square.png", - "tags": ["BlockExchange"] - }, - { - "chainId": 101, - "address": "HU8LWRUris9qQbFS78D9VTi3yu97XJpVaDoC7fLsGvPT", - "symbol": "BOOTY", - "name": "Dope Pirates Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Dopepirate/Dopepirate/main/bootycoin.PNG", - "tags": ["social-token", "meme-coin"], - "extensions": { - "discord": "https://discord.gg/dopepirates", - "twitter": "https://twitter.com/dopepirates", - "website": "https://dopepirates.com" - } - }, - { - "chainId": 101, - "address": "Gz8GRWYB6X4BkTqA8AtoZGoHCTk6Dh4yedaA4B1LhCwV", - "symbol": "SCC", - "name": "SzymCiem Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/szymciem8/SzymCiem-Coin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "47gavssnzGQLTUexBZyKqUh9b2iixymoJ9LpT9muGvPD", - "symbol": "SHIBVS", - "name": "Shiba verse", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/sajjadafg2016/crypto/main/logo_shim.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7SZUnH7H9KptyJkUhJ5L4Kee5fFAbqVgCHvt7B6wg4Xc", - "symbol": "SDO", - "name": "TheSolanDAO", - "decimals": 5, - "logoURI": "https://thesolandao.com/logohero.png", - "tags": ["social-token"], - "extensions": { - "coingeckoId": "thesolandao", - "discord": "https://discord.gg/d8z7TAz5WB", - "reddit": "https://www.reddit.com/r/TheSolanDAO", - "twitter": "https://twitter.com/TheSolanDAO", - "website": "https://thesolandao.com" - } - }, - { - "chainId": 101, - "address": "SuperbZyz7TsSdSoFAZ6RYHfAWe9NmjXBLVQpS8hqdx", - "symbol": "SB", - "name": "SuperBonds Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SuperbZyz7TsSdSoFAZ6RYHfAWe9NmjXBLVQpS8hqdx/logo.svg", - "tags": ["defi-token"], - "extensions": { - "website": "https://superbonds.finance" - } - }, - { - "chainId": 101, - "address": "F3nefJBcejYbtdREjui1T9DPh5dBgpkKq7u2GAAMXs5B", - "symbol": "AART", - "name": "ALL ART", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/allartprotocol/token-list/main/assets/mainnet/F3nefJBcejYbtdREjui1T9DPh5dBgpkKq7u2GAAMXs5B/logo.jpg", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/allart", - "github": "https://github.com/allartprotocol", - "medium": "https://allart.medium.com", - "telegram": "https://t.me/allartprotocol", - "twitter": "https://twitter.com/AllArtProtocol", - "website": "https://all.art" - } - }, - { - "chainId": 101, - "address": "3CFNMMSQUeKRxTbVaaVhT3NxBgQ7rMuXauL7cbY8W9Sc", - "symbol": "BARGE", - "name": "BARGE BOND", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Barge-Simone/BARGE/main/bargePNG.png", - "tags": ["BlockExchange"] - }, - { - "chainId": 101, - "address": "63hn7UtKkdePAjbbHsJTZ4qFHWiZBxmTsHRvpTVesAp5", - "symbol": "PiTZ", - "name": "PTZCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/PTZCOIN/crypto/main/logo.png", - "tags": ["social-token", "meme-coin"] - }, - { - "chainId": 101, - "address": "EoNyknzy8waz4MHP6Kue4MHQkDPzEYnCt5UEK9cBcG8c", - "symbol": "SAL", - "name": "Salvor", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EoNyknzy8waz4MHP6Kue4MHQkDPzEYnCt5UEK9cBcG8c/logo.png", - "tags": ["gamefi", "game-token"] - }, - { - "chainId": 101, - "address": "6FPrmmvPvNnW6v3HDa51PoF31veMx1gqui3jJyo3JDB7", - "symbol": "DES", - "name": "The Destiny", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6FPrmmvPvNnW6v3HDa51PoF31veMx1gqui3jJyo3JDB7/logo.png", - "tags": ["gamefi", "game-token"] - }, - { - "chainId": 101, - "address": "GM3pnrL7PcTpZ1F1k4JpEm76W2XF4oCWasoVHZH9Phfc", - "symbol": "AZR", - "name": "Azura", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GM3pnrL7PcTpZ1F1k4JpEm76W2XF4oCWasoVHZH9Phfc/logo.png", - "tags": ["gamefi", "game-token"] - }, - { - "chainId": 101, - "address": "F3vTNbfYz6paDDTNn3suyK2wWBejED8PVY6uAP9jqCFh", - "symbol": "PHAR", - "name": "Pharawin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/F3vTNbfYz6paDDTNn3suyK2wWBejED8PVY6uAP9jqCFh/logo.png", - "tags": ["gamefi", "game-token"] - }, - { - "chainId": 101, - "address": "2D9iaJ5Rgb3R6DJ4v9Wd1CMEFSogBgEuReoEnGrgvquM", - "symbol": "GUE", - "name": "GUERRERO", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2D9iaJ5Rgb3R6DJ4v9Wd1CMEFSogBgEuReoEnGrgvquM/logo.png", - "tags": ["gamefi", "game-token"] - }, - { - "chainId": 101, - "address": "BFXrXHTgQbh4RGzVTfusuiZNADjAdSjWu37tWXJk2WY5", - "symbol": "COFFEE", - "name": "COFFEE", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/Simone-Properties/COFFEE/main/coffeePNG.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2zmWfuURnQQz5ymsvRhhF3FxVJrvpNCGDsKLE5fBnvAG", - "symbol": "MOKI", - "name": "MokiKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/hinchingyuen/MokiKoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "F46kqGKJRYg51PiyLsQhpFmaGCxL7Rz6VHh4TpmLebUQ", - "symbol": "VINNIE", - "name": "VinnieCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/vmangelschots/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CPDMvZpN7TgZRbNfUWw6y5LG3zkiv8ZvHA4ZBHpgYSzm", - "symbol": "CPDM", - "name": "Carpe Diem", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CPDMvZpN7TgZRbNfUWw6y5LG3zkiv8ZvHA4ZBHpgYSzm/logo.png", - "extensions": { - "twitter": "https://twitter.com/CarpeDiemCPDM", - "website": "http://cryptocarpediem.com" - } - }, - { - "chainId": 101, - "address": "ECsusvTb9KvVL3sedd5RsCn6aNDBxqyCSP5eEQGDEtnq", - "symbol": "BASE", - "name": "BSTK", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SilverRuler/Solana_Practice/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "75Brdir35vFLheHSoiEX3oWnTuHfAscYpGSBgfhRbmbk", - "symbol": "BOOP", - "name": "Boopieverse", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/75Brdir35vFLheHSoiEX3oWnTuHfAscYpGSBgfhRbmbk/logo.png", - "tags": ["utility-token", "nft-token"], - "extensions": { - "description": "The official token powering the Boopieverse.", - "discord": "https://discord.gg/u4es8yZrms", - "twitter": "https://twitter.com/boopieverse", - "website": "https://boopieverse.com/" - } - }, - { - "chainId": 101, - "address": "2f9GHFLy82GmYwrcTSVWr2fnPpTigmGdHRz5fpVisAXy", - "symbol": "GNOM", - "name": "Gnome Gnickels", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ThePicaresqueRed/crypto/main/GNOME_GNICKELS_75.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3jbVgUiyYybyou43zqx3qnPiPpbW64foe4Fxbxaer4Px", - "symbol": "MANS", - "name": "Mansour Family Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mansourSaleh/mansCoins/main/logo.png", - "tags": ["social-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/mansour789", - "website": "https://mansour1.sa/", - "youtube": "https://www.youtube.com/channel/UC5JIaJ-RtJGp8wcOmn1ngNA" - } - }, - { - "chainId": 101, - "address": "8E38EebJE5sE3WGUhQquaoBUAEYBWzhyKtPUZqnNLS1Q", - "symbol": "HLTI", - "name": "Halitti Coin", - "decimals": 1, - "logoURI": "https://raw.githubusercontent.com/odin-bb/crypto_logos/main/halitti_logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CUPW2aLsxrCmhyqq2JgJwAYG41AfUwwCumpRf7PjKYFA", - "symbol": "SHOP", - "name": "SHOP Euro", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/SHOP-Simone/SHOP/main/shopPNG.png", - "tags": ["Shopping"] - }, - { - "chainId": 101, - "address": "6qshnWEZth41WfL8Nhzar6yVz7intHcNmGQSFYxTg3DD", - "symbol": "GEBO", - "name": "Futhark Token", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/Erulian/crypto/main/TKN_GEBO.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "8niFXjTqhFsSuZX7Rtryi2cZtJuSCrxj63mX9t8mPrv4", - "symbol": "EURO", - "name": "EURO", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/EUROSHOPPING/EURO/main/shopPNG.png", - "tags": ["Shopping"] - }, - { - "chainId": 101, - "address": "DHxMYFZ6hZYtX4LXLkSHRN2UHFFezE5X6GkRCQNW1un9", - "symbol": "TQE", - "name": "TRI NETWORK COIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/angel999lucifer/tri-network-logo/main/LOGO.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "6R1AG9dFMKdrysuYifUw3Q9kzaWUaMhCBnewoLJ2eGEL", - "symbol": "KOS", - "name": "Kingsolo", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6R1AG9dFMKdrysuYifUw3Q9kzaWUaMhCBnewoLJ2eGEL/logo.png", - "extensions": { - "discord": "https://discord.gg/kingsolo", - "twitter": "https://twitter.com/kingsolo_kos", - "website": "http://kingsolo.io" - } - }, - { - "chainId": 101, - "address": "DCMupejk24xFG1qZdXf1y2DuoFQ19hJysshjxjL4urCg", - "symbol": "BGODS", - "name": "Battle of Gods Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/BOG-Game/Token/main/logo.png", - "tags": [ - "community-token", - "social-token", - "utility-token", - "game-token", - "game-currency" - ], - "extensions": { - "description": "Battle of Gods is an unique and addictive NFT game with full tokenomics, where players Battle with Gods to become a God themselves! The biggest Mythoverse on the block-Chain and the 1st Board(game) 2 Block(chain).", - "twitter": "https://twitter.com/BattleofGods_io" - } - }, - { - "chainId": 101, - "address": "5W1FqGQbbGvw2k6KWULaSnbefYUDjumKvvsMoQYjJ6Ho", - "symbol": "WEAR", - "name": "Anywear", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5W1FqGQbbGvw2k6KWULaSnbefYUDjumKvvsMoQYjJ6Ho/logo.png", - "tags": [ - "metaverse", - "oracle-token", - "cross-platform", - "nft-market", - "cros-chain" - ] - }, - { - "chainId": 101, - "address": "AH4JyGYUTfXJt8F4FuoHQ6FgVNvGNkXE2g2uewNdTk7C", - "symbol": "BITCOIN", - "name": "BITCOIN", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/BitcoinSimone/Bitcoin/main/borrowPNG.png", - "tags": ["Shopping"] - }, - { - "chainId": 101, - "address": "CkMSudX33BeAP7kYRjXkwnixUbPvypSuxcYJbwEPhE1Y", - "symbol": "FONSO", - "name": "Fonso", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/alfonsorua/fonso/main/fonso.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6QYe2Mea4b1cH9dk3C8g29e95Bah9R4CmTGdSpjajumr", - "symbol": "HUDA", - "name": "HugeHuda", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Aradhya-B/huge/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "J6Z6mDhXAxv3xxQVjPDky6hWoGSrmJ8fJ12KzpYYfisk", - "symbol": "SKAL", - "name": "SkalCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Skaldhor/SkalCoin/main/logo.png", - "tags": ["social-token"], - "extensions": { - "github": "https://github.com/Skaldhor/" - } - }, - { - "chainId": 101, - "address": "24WQvWoqJuTS5LoqeBJpa2smqg94V6iqQDWC5cPd8tve", - "symbol": "JINDO", - "name": "Solana Jindo Inu", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/soljindo/main/soljindoinulogo.png", - "tags": ["social-token", "meme-coin"], - "extensions": { - "telegram": "https://t.me/soljindo", - "twitter": "https://twitter.com/soljindo", - "website": "https://www.soljindo.com/" - } - }, - { - "chainId": 101, - "address": "CxdritkAkNqMut7z7kzfcNwYKrH9LH5kyN36rBpVdiBv", - "symbol": "ALC", - "name": "AlPHA Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/CoachAlpha/ALC/main/alc.png?token=AQLSQ242CJWZUT22OXZWNGDB2XLTM", - "tags": ["Community", "AlPHA"], - "extensions": { - "github": "https://github.com/CoachAlpha", - "instagram": "https://www.instagram.com/am1r__8/", - "twitter": "https://twitter.com/Unknown_830", - "website": "https://alpha83.tech/" - } - }, - { - "chainId": 101, - "address": "CmFbEaGxa2Z9mhfnZzwSQS5VqkoiFQTFQ2TxzfnAP338", - "symbol": "PMS", - "name": "Parekkara", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/vivekparekkara/parekkara/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "H69DNtbZZtk92hLLbMrHYqL8HiSHFVGcf6USHU39oRMW", - "symbol": "GUANO", - "name": "Guano", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/H69DNtbZZtk92hLLbMrHYqL8HiSHFVGcf6USHU39oRMW/logo.png", - "tags": ["community-token", "utility-token", "governance-token"], - "extensions": { - "website": "https://newbat.city/" - } - }, - { - "chainId": 101, - "address": "G79qAryn3Urn4pyJyTSiX6XNz3Zk1epwJbsnLA5Yntz5", - "symbol": "SIMONE", - "name": "SolSimone", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/SolSimone/SOL/main/borrowPNG.png", - "tags": ["Shopping"] - }, - { - "chainId": 101, - "address": "DLdAV7fxTQGfj82QpGMLw52EaxRAKGHz6Vp8xYPf2gPY", - "symbol": "CDY", - "name": "CodyCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/m-volans/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6gtgcsCoGCaUa2w2r9vP4rSRshkySYPScBJrQDZ3VZoo", - "symbol": "BAFF", - "name": "BayernVerse", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6gtgcsCoGCaUa2w2r9vP4rSRshkySYPScBJrQDZ3VZoo/logo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7TmmhvjfYzPt16xkNe6KK3u3CRqyRCbcEpiy4KaPD1UN", - "symbol": "TBC", - "name": "Tollie Bonker Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/TollieBonker/Logo/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AxdUT9mVNYa5A8GVyDRTm8m87SrDJPd6RKR8HBvfB82M", - "symbol": "YDF", - "name": "YedekFih", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Lordbelazzou/crypto/main/1w4aib.png", - "tags": ["algerian-token"] - }, - { - "chainId": 101, - "address": "BU33VVNSwUXcD8LXfoQxj4hgUNvKMMm5AEhRZs6EaiEJ", - "symbol": "RR", - "name": "RealizedRhapsody", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BU33VVNSwUXcD8LXfoQxj4hgUNvKMMm5AEhRZs6EaiEJ/logo.png", - "tags": ["access-token", "community-token", "utility-token"], - "extensions": { - "website": "https://realizedrhapsody.com/" - } - }, - { - "chainId": 103, - "address": "ChfDuUG56zAELGyNad7g9ZXAx4vBkvXPntWTKWPtgaNT", - "symbol": "CO2", - "name": "CO2 Coin", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/vitsanukomet/crypto/main/logo.png", - "tags": ["co2-token", "utility-token"], - "extensions": { - "facebook": "https://www.facebook.com/vekin.th/", - "website": "https://www.facebook.com/vekin.th/" - } - }, - { - "chainId": 101, - "address": "14r8dWfzmUUBpw59w5swNRb5F1YWqmUnSPgD6djUs1Jj", - "symbol": "TREATS", - "name": "Solana Puppy Pound Treats", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/14r8dWfzmUUBpw59w5swNRb5F1YWqmUnSPgD6djUs1Jj/logo.png", - "tags": ["community-token", "nfts"] - }, - { - "chainId": 101, - "address": "Hc7tVNLibu4YWHzy4VebGWpisTxnBykemMUbkBkk3yeL", - "symbol": "PAPI", - "name": "Papito", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mmauroness/cryptopapito/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3whnH8NaUKgcFN73tGB1RBxUznz6SoHye78fKw8Mrepq", - "symbol": "TPHT", - "name": "Top Hat", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/akrowczyk/tophat/main/logo_token.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3vCtw56GedaqNhZQniJRoCFFZwnABrtcBqmK8RHVz1kt", - "symbol": "VVC", - "name": "ViaViaCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Aiviator/viaviacoin/main/logo.png", - "tags": ["social-token", "matching"] - }, - { - "chainId": 101, - "address": "GUz4vBLFWyjURSHx5wUVHPphGSG3ztXiv1puyEZeUUA3", - "symbol": "MOQSIS", - "name": "Moqsis Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/scottjones4k/token-list/fa69bc55947c826fd8995a2c43470e7d9d771d9e/assets/mainnet/GUz4vBLFWyjURSHx5wUVHPphGSG3ztXiv1puyEZeUUA3/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GamK6bxGt1RRUAkFnQYgrJgXfNsaQqXv2ivcDxNUzJ5F", - "symbol": "LUCA", - "name": "Lucas Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MRGithubuser2020/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GX7scixLhnEQk3C1LEDKk5eeeUb2RUwyyKEWYRfAV8SA", - "symbol": "DSB", - "name": "Dogstreetbets", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/Terrahasher/dogstreetbets/main/dogstreetbets.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7u6HvxGErHCqU9nr98Xsv8DDFfmuVyvMpknS3uC5kn9B", - "symbol": "MVFC", - "name": "Marvel Fans Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/juanlungo/cryptomvfc/main/marfanslogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5L87fjh5XZWERN4UGbK62TM1funxFvXSRUGmvbHBGqn1", - "symbol": "ILUMA", - "name": "ILUMA COIN", - "decimals": 9, - "logoURI": "https://github.com/neptuncoin/iluma/raw/main/logo.png", - "tags": ["community-token", "nfts"] - }, - { - "chainId": 101, - "address": "FnVPD3fRutXcibEHDYP1gv8kuYJx2SNCi2EizcAsR4wN", - "symbol": "CMP", - "name": "Camp Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FnVPD3fRutXcibEHDYP1gv8kuYJx2SNCi2EizcAsR4wN/logo.png" - }, - { - "chainId": 101, - "address": "GAZ2qHKKvTgXpDyDyCVJ3Eh9hJkVLwjiwj4U6da4XTyk", - "symbol": "2359", - "name": "Midnightcoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SirHackalots/2359/main/23.59.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "METAmTMXwdb8gYzyCPfXXFmZZw4rUsXX58PNsDg7zjL", - "symbol": "SLC", - "name": "Solice", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/METAmTMXwdb8gYzyCPfXXFmZZw4rUsXX58PNsDg7zjL/logo.png", - "extensions": { - "coingeckoId": "solice", - "discord": "https://discord.gg/solice", - "serumV3Usdc": "DvmDTjsdnN77q7SST7gngLydP1ASNNpUVi4cNfU95oCr", - "telegram": "https://t.me/solice_io", - "twitter": "https://twitter.com/solice_io", - "website": "https://www.solice.io/" - } - }, - { - "chainId": 101, - "address": "gen2VK2sZstCfzsbN7rGiMCoe4WuMS9JwLiJNTn4cEy", - "symbol": "SLUGGEN2", - "name": "Generation 2 Slug", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SolSlugs/assets/main/gen2redeem.png", - "tags": ["community-token"], - "extensions": { - "description": "This token lets you mint a generation 2 Sol Slug", - "twitter": "https://twitter.com/SolSlugsNFT" - } - }, - { - "chainId": 101, - "address": "C15c651KE8HGUrbb2YZXYMEPj2iadkng7FgpHMFbHkUj", - "symbol": "phantom-webdge", - "name": "phw", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HfYFjMKNZygfMC8LsQ8LtpPsPxEJoXJx4M6tqi75Hajo/logo.png", - "tags": ["solana", "ghost", "stack"] - }, - { - "chainId": 101, - "address": "DyT12z3tnUokpy18XdKXQNxsGmgUzAA67JUPpj6dBRtd", - "symbol": "RGSC", - "name": "Redmatter Game Studios Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/redmatter20/RGSCoin/main/RGS%20COIN.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8bosbbufBRQeF23tumTQWJVUwmX5PJ2h5vpmzzcs44pL", - "symbol": "URN", - "name": "URunner Coin", - "decimals": 6, - "logoURI": "https://cdn.jsdelivr.net/gh/URunner21/UrunnerApplication@main/IMG_0698.jpg", - "tags": ["social-token", "urunner", "community"], - "extensions": { - "twitter": "https://twitter.com/URunnerApp" - } - }, - { - "chainId": 101, - "address": "boomh1LQnwDnHtKxWTFgxcbdRjPypRSjdwxkAEJkFSH", - "symbol": "BMA", - "name": "Boom Army", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/boomh1LQnwDnHtKxWTFgxcbdRjPypRSjdwxkAEJkFSH/logo.svg", - "tags": ["utility-token", "community-token", "social-token"] - }, - { - "chainId": 101, - "address": "BafovBHSnzFnHdkBHt1Nogkbzxrpn1o5ubACrc7H1Vfz", - "symbol": "8OO8", - "name": "8OO8 Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/mannytatas/sol-8OO8-coin/main/logo.png", - "tags": [ - "social-token", - "community-token", - "utility-token", - "meme-token", - "8008" - ] - }, - { - "chainId": 101, - "address": "3PaXcR4gCNiYPSpibwnBDXmuv3nABA1Uq4J3R8MNWhq2", - "symbol": "TNCC", - "name": "TheNerdClan Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/TheNerdClan/tnc-crypto/main/Logo%20TNC.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "788Pkr27oUB9RwWsQL8nRNVeEPxqvvjnqKnmRKR9ig2M", - "symbol": "YBC", - "name": "YeahBitcoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/PhillipsCryptoNews/YeahbitCoin/main/yeahbitcoin-logo.png", - "tags": ["community-token"], - "extensions": { - "description": "This token is to celbrate the entrepanural spirit", - "instagram": "https://www.instagram.com/yeahbitcoin", - "website": "https://www.yeahbit.io/" - } - }, - { - "chainId": 101, - "address": "3gyTgBZsfyPqs5wcRYnE1uEWDMWd8NR6wuPrnfWEKpKD", - "symbol": "BACA", - "name": "BACA Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/CRK1918/Crypto-logo/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Cp3WZxco28xXebCE8ufua8L8djYxadChc7eZvEkmuajj", - "symbol": "ONT", - "name": "Ontiveros Coin (ONT Coin)", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/seasideslug/crytpo/main/ONTCoinlogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "128U4NbjWptP3GTg1NdgDRdeGVZpiiqvTgdELffYngaR", - "symbol": "FSD", - "name": "FlokiShibaDoggy", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/brawal1/cryptoToken/main/logo.PNG", - "tags": ["social-token", "community-token", "nfts"] - }, - { - "chainId": 101, - "address": "AFK6iA9QWGBc1tgFW2YVn4oztAbwwWLyLW9UoTUcvb2F", - "symbol": "KYC", - "name": "KeunYang Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/dattjc/Crypto/main/crop_image.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8hiGiRQs5ZzjN7XyPyLuxt4dC6hQFiPLNGBCQpaK8Kt7", - "symbol": "BRUS", - "name": "Brus Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Bruselsker/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "838ByxAj4QFwA6mhs7gUzYw8tKjZ5NJSw3XQudAuGZZC", - "symbol": "CGOLDR", - "name": "CryptoGoldRush", - "decimals": 6, - "logoURI": "https://cryptogoldrush.xyz/cgoldr.png", - "tags": [ - "social-token", - "community-token", - "lp-token", - "media", - "utility-token", - "reward-token" - ], - "extensions": { - "twitter": "https://twitter.com/WavemStudios", - "website": "https://cryptogoldrush.xyz" - } - }, - { - "chainId": 101, - "address": "GFdixhJJFRkChQtCMWpHPVwN6tFou6EVNpJoTpBmPVKW", - "symbol": "ARCH", - "name": "Archer Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GFdixhJJFRkChQtCMWpHPVwN6tFou6EVNpJoTpBmPVKW/logo.png", - "tags": ["meme-token"] - }, - { - "chainId": 101, - "address": "BTqAkWiCkkLwyp1ALWj34LcTTD4GcrcA3oTXYsYqLCNo", - "symbol": "RMNT", - "name": "Araminta Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/DenizenK/crypto/main/Araminta-coin-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3NVoDmpdXK3nv1ySixhA1RdNjnVDepGMeRqbyFUY62wu", - "symbol": "LNK", - "name": "LinkCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/coreyman11/cryptologo/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "94jMUy411XNUw1CnkFr2514fq6KRc49W3kAmrjJiuZLx", - "symbol": "SYXT", - "name": "SolanyxToken", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/94jMUy411XNUw1CnkFr2514fq6KRc49W3kAmrjJiuZLx/logo.png", - "tags": ["utility-token"], - "extensions": { - "coingeckoId": "solanyx", - "coinmarketcap": "https://coinmarketcap.com/currencies/solanyx/", - "discord": "https://discord.gg/solanyx", - "telegram": "https://t.me/solanyxofficial", - "twitter": "https://twitter.com/solanyxnft", - "website": "https://solanyx.com" - } - }, - { - "chainId": 101, - "address": "GvJqUai8yCMyxSSzs7mLmQLGueAfjcNszEnD2FmzYwez", - "symbol": "ALGK", - "name": "AlgoKinetics", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/eaparcedo/crypto/main/AlgoKinetics.png", - "tags": [ - "utility-token", - "community-token", - "trading-token", - "algo-token" - ] - }, - { - "chainId": 101, - "address": "DGEU64ztwjPGznzGYRBPx4Fawrnq9kNtmCzzxxfaLdj2", - "symbol": "SAM", - "name": "Sam Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/HyperCactus/samcoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9nhtpC2ZyYWUxzLdgG37Bf1nrbf7tHwHvhfkgW4Bsh83", - "symbol": "KBRC", - "name": "KraeberKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/KittyFunLand/KraeberCoin/main/Cat2.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5UySFQujqcHQPKkHHfUwd61PnMyh9fT8DMbb8jPWacDY", - "symbol": "ENEAS", - "name": "EneasToken", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/NotEneas/eneastoken/main/Eneas.png", - "tags": ["cool-token"] - }, - { - "chainId": 101, - "address": "3edUPhBRqprSVdEPheVsFYb34eYPq4xZrYjN6v9fqUrd", - "symbol": "ELONINU", - "name": "ElonInu", - "decimals": 6, - "logoURI": "https://i.ibb.co/xDpJjDs/eloninu.jpg", - "tags": ["meme-token", "utility-token", "community-token"], - "extensions": { - "discord": "https://discord.gg/MKRhSdSb", - "twitter": "https://twitter.com/eloninu", - "website": "https://eloninu.org" - } - }, - { - "chainId": 101, - "address": "3GfPg6Et57DQrVRqebf4zjzGm1RZU9aLDGJMjuXMQjJW", - "symbol": "MHGH", - "name": "Rocket Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mustuh/token-logo/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Cbeis3cq8bwEseWRpHtx7K1GRjNUNWC27CVYffJyEArb", - "symbol": "DWELL", - "name": "DwellFi", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/dwellfi/docs/de8b0de338158f1bb075e1e2e37b44cc64017cd2/static/img/logo.svg", - "tags": [ - "utility-token", - "community-token", - "real-estate", - "DAO", - "governance", - "DeFi", - "NFT", - "metaverse" - ], - "extensions": { - "description": "DWELL is a community governance token for DwellFi", - "github": "https://github.com/dwellfi", - "website": "https://dwell.fi" - } - }, - { - "chainId": 101, - "address": "7eMoDu4Z7VJPcndDGDgJ1b3H3bXLh5P2bd3AKx75NqkF", - "symbol": "CITZ", - "name": "CitizenCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ggteddy/crypto/main/citizenCoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "332kAJq6n9gB4aCJTyJgg8sC32oKQ8S1d7kWcgbtP2Qy", - "symbol": "MKYN", - "name": "Maikycoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/M1gl0/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5hhjsjajtrRs5WayV6UcghQfiqZ13tjD38MnVDXghYti", - "symbol": "SWEE", - "name": "SweetTalk", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/thomasjsweet/SweetTalkCoin/main/logo.png", - "tags": ["social-token", "meme-token"], - "extensions": { - "website": "https://thomasjsweet.com" - } - }, - { - "chainId": 101, - "address": "FiiCEB1xcWrZBFP1qCpakENvntcwy8SwU9cf4bp5fFjw", - "symbol": "PJC", - "name": "PJcoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/BenjaminK1981/crypto/main/Untitled-1.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "jAi1KmJZrrDVSroQXXAqASpES4qLvZcW5p9s5a5ksG4", - "symbol": "LNFTxDAPE9989", - "name": "LNFT Degen Ape-9989", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/jAi1KmJZrrDVSroQXXAqASpES4qLvZcW5p9s5a5ksG4/logo.png", - "tags": ["liqnft-owner-token"], - "extensions": { - "discord": "https://discord.gg/PYZWRHgVwM", - "twitter": "https://twitter.com/liqnft", - "website": "https://www.liqnft.com/gallery/DAPE9989" - } - }, - { - "chainId": 101, - "address": "FYnX6G8kugZ9T7Kc67jNEskH5sHbxyd8mvUWQLiZupa6", - "symbol": "EDJE", - "name": "EDJE Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FYnX6G8kugZ9T7Kc67jNEskH5sHbxyd8mvUWQLiZupa6/logo.png", - "tags": ["meme-token"] - }, - { - "chainId": 101, - "address": "9PRC5AtsabfYYKQxjja3sdbsm6E1ALQUbou6nJRq9xxn", - "symbol": "VIE", - "name": "Virtual Internet Experience", - "decimals": 4, - "logoURI": "https://pbs.twimg.com/profile_images/1476383121734090755/elIl3dbA_400x400.jpg", - "tags": ["metaverse-token"], - "extensions": { - "telegram": "https://t.me/vieofficial", - "twitter": "https://twitter.com/vie_metaverse", - "website": "https://vie.digital" - } - }, - { - "chainId": 101, - "address": "C9Yy52f4tDaFHUFTCMPXAPq9w1kiZxhWHYTBWPdk2dDe", - "symbol": "LATT", - "name": "Latte Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/xH3ADSH0Tx/crypto/main/logo.png?token=APG2SJHSRZSBSTIWUDYOXH3BZUNFS", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7KGoH1B2h9xdBk9dE5GnA2tRC3L8shgmUBGUmf3B2Ts4", - "symbol": "TERO", - "name": "Pterodactyl Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jprobasco/cryoto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CWGMg4WMTqJGLeNw6RH9qhzF8vysJgZeWqZpueeDqw3W", - "symbol": "EXTRA", - "name": "Extraterrestrial", - "decimals": 3, - "logoURI": "https://cdn.jsdelivr.net/gh/matheusz2/Extraterrestrial@main/logo.png", - "tags": [ - "trading-token", - "utility-token", - "social-token", - "community-token", - "reward-token" - ], - "extensions": { - "twitter": "https://twitter.com/NewExtraterres", - "website": "http://newextraterrestrial.com" - } - }, - { - "chainId": 101, - "address": "7FCy7ESVPSFuio3qYjWKCQU4btYaApXhNGMkcvjxqsxa", - "symbol": "WISP", - "name": "WISP token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/MashmallowWoR/crypto/main/logo.png", - "tags": ["utility-token", "social-token"] - }, - { - "chainId": 101, - "address": "Cu2iuHD3vaiStixgEECDHvA2FaETtJzzt4jK3YmyNpBj", - "symbol": "TOPY", - "name": "TOPY Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Cu2iuHD3vaiStixgEECDHvA2FaETtJzzt4jK3YmyNpBj/topycoinlogo.png", - "tags": ["meme-token", "community-token"], - "extensions": { - "website": "https://topycoin.com/" - } - }, - { - "chainId": 101, - "address": "CFEQJyNnPeGURdi46mW6zouQjFVAw72kB7KLoQq7JLdJ", - "symbol": "A51C", - "name": "Area 51", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/AvenashKumar/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8EdHUfHdWytAcg8iFauRAckqZKRw4nbPf7Qkg4daQFCU", - "symbol": "Zer", - "name": "Zefir", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8EdHUfHdWytAcg8iFauRAckqZKRw4nbPf7Qkg4daQFCU/logo.png", - "tags": ["social-token"], - "extensions": { - "telegram": "https://t.me/Hadiane_one_life" - } - }, - { - "chainId": 101, - "address": "4ws4ZmDmNQwG1boaDmKtmPzEHJ5UUEaeBKtHzeFDwYyo", - "symbol": "JPEDU", - "name": "JPEDU Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4ws4ZmDmNQwG1boaDmKtmPzEHJ5UUEaeBKtHzeFDwYyo/logo.png", - "tags": ["meme-token"], - "extensions": { - "twitter": "https://twitter.com/snft2022", - "website": "https://solana-nft.io/" - } - }, - { - "chainId": 101, - "address": "5cwbtUmBF4njEtq9xs7AGEi9Yxj9RZfuSWSvm58iqG8A", - "symbol": "AATK", - "name": "AIAL", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/SilverRuler/Solana_Practice/main/aial_logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ESrrTHaNKiC9saxaudX2j9iCM9r8qHRcLSrW5ypQ3W64", - "symbol": "DALI", - "name": "Fraktionalized Blockasset Legend Ali", - "decimals": 3, - "logoURI": "https://www.arweave.net/2Y3f2SeoT7HKHTQ_nUPfsLPyc59mPvNYSAsjKZuWNOk?ext=png", - "tags": ["fractionalized-nft"], - "extensions": { - "vault": "https://fraktion.art/vault/3oVLfsh7NdRKMEuX51whGgF594Pc4Tg2ZcWnMoAwZJum", - "vaultPubkey": "3oVLfsh7NdRKMEuX51whGgF594Pc4Tg2ZcWnMoAwZJum" - } - }, - { - "chainId": 101, - "address": "zjB53Pcgj7wrNjXfXUxNmx23pSPZm5j1sR2kj5xVNEQ", - "symbol": "MAC", - "name": "Metaverse Athletic Crypto", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/JoshTchan/DMA-Logo/main/Screen%20Shot%202021-12-29%20at%2010.00.50%20PM.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EqPewmc54Ko5HZHkJwcVFHiCf81R4bMC518gN2WL844T", - "symbol": "LEMN", - "name": "Lemona", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EqPewmc54Ko5HZHkJwcVFHiCf81R4bMC518gN2WL844T/logo.png", - "extensions": { - "twitter": "https://twitter.com/lemonacrypto" - } - }, - { - "chainId": 101, - "address": "9WpxYps83kGVcR4tpWqbVbAA9dWEZAsv9fDAnGc7n9za", - "symbol": "MOLLY", - "name": "Molly Klint", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MollyKlinteback/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9YR9i44W24stoYUTTRAQVbreLTqUoaGyi3EY1StV9oqw", - "symbol": "BM", - "name": "BitMeme", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/haidang128/bitmeme/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DTXYsSaMrkgbnmN3no1XPL5pty57Zobyqyh6PZpKzjid", - "symbol": "zsl", - "name": "ZSL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DTXYsSaMrkgbnmN3no1XPL5pty57Zobyqyh6PZpKzjid/logo.png", - "tags": ["utility-token", "community-token", "meme-token"] - }, - { - "chainId": 101, - "address": "EfbYD8f23BSbMgT3AvZpFeuzwsHvpt14MP8U4xTNsRZn", - "symbol": "FRLP", - "name": "FundRaiseLaunchpad", - "decimals": 18, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EfbYD8f23BSbMgT3AvZpFeuzwsHvpt14MP8U4xTNsRZn/logo.png", - "tags": ["launchpad-token"], - "extensions": { - "discord": "https://discord.com/invite/C3jrUAzm", - "facebook": "https://www.facebook.com/Fundraise-Launchpad-106074095265419", - "instagram": "https://www.instagram.com/fundraise_launchpad/", - "reddit": "https://www.reddit.com/r/fundraise_launchpad/", - "telegram": "https://t.me/fundraiselaunchpad", - "twitter": "https://twitter.com/fundraiseLP", - "website": "https://fundraiselaunchpad.com/" - } - }, - { - "chainId": 101, - "address": "3mRzsmdRhaaGMUJX8fJSdanx8xJ2Q6RjEHd4aHi1b92X", - "symbol": "SANT", - "name": "SANTOSH Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3mRzsmdRhaaGMUJX8fJSdanx8xJ2Q6RjEHd4aHi1b92X/logo.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "6VBMAp9p7Nq1qA2FSMoCgchFvzBeiCEB5vHetTM5FAuB", - "symbol": "ARAL", - "name": "Aral Sea", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Kalimbay/aral/main/aral.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6dSCqdomPGZCG3Vufoo1LLDGNZfa1v4ocjUKR1Tr1n66", - "symbol": "BLCK", - "name": "BLOCK SIGN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/testsystemca/blcksgn/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "C5uQADv4uVw34PtJ4rxYZauCoMFMdEk8jqQCewqJjYjg", - "symbol": "WAYK", - "name": "WaifuKoKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Bitbitti/cripto2/main/logoc.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7t7nsgDAMRWj7TKYNB3YE4aUTdTYCstJfMopa3v647bx", - "symbol": "BRSN", - "name": "Bronson", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ExplosivePig98/Crypto/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4XcHyw4vyPYvRQDKkMLEwXz7xH3tVMWzb6VBt6dEQJu4", - "symbol": "KATAK", - "name": "Kataklop Network", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4XcHyw4vyPYvRQDKkMLEwXz7xH3tVMWzb6VBt6dEQJu4/logoV4.png", - "tags": ["utility-token", "social-token"], - "extensions": { - "description": "Cryptomony specializing in the equestrian world", - "facebook": "https://www.facebook.com/kataklopnetwork", - "website": "https://crypto.kataklop.com" - } - }, - { - "chainId": 101, - "address": "8ceGXJzhzfMqfbczepoGZAgwu74qomwRn6rJzj9dvEMB", - "symbol": "clz", - "name": "clonzer", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/thegamer4003/crypto/main/pro.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EtEUg6MKhaKoxjiXgKpmP6cRywEJA9KuatofAZxN6Dog", - "symbol": "KAIC", - "name": "KaiCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/razmipatel/kaicoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "BH3BxwXgk1PGwM7wKXNaxVEFTATjHaoJqRx4QcETquK3", - "symbol": "OLY", - "name": "Solympic", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BH3BxwXgk1PGwM7wKXNaxVEFTATjHaoJqRx4QcETquK3/logo.png", - "tags": ["sports-token", "social-token", "community-token", "oly"], - "extensions": { - "description": "OLY is a virtual sports gaming cryptocurrency", - "website": "https://github.com/denizTutuncu/SOLympic" - } - }, - { - "chainId": 101, - "address": "GCLRERxnQ4ZsMiyVbVSarP2zgEQvXet8y2nJccE7KL1F", - "symbol": "CYST", - "name": "Cybershady token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/cybershady/cypto/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4pbWFHwDaci7RhJPNjtravxVUNdUiuFUwas2bzB62hBf", - "symbol": "ZSOL", - "name": "ZeNNSol", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Bitbitti/cripto2/main/logoc.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "APDLahB6PxznoWyHpnxj2P99Xnk4weHeYgCtjSxNGvoa", - "symbol": "APDL", - "name": "API Permanent Deposit Liquidity Pool", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/APDLahB6PxznoWyHpnxj2P99Xnk4weHeYgCtjSxNGvoa/logo.png" - }, - { - "chainId": 101, - "address": "EtFE9AA8PxAf3oLgW3HjgQDELo35PMLj3nqQ4367LewG", - "symbol": "OZZY", - "name": "Aussie Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jim-fun/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "84X5KvsCN93XvP8AbRuPPHQiWH18Ktzwk5Eosns2DFha", - "symbol": "LEEG", - "name": "League Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/NFTzTrader/crypto/main/NFT_0.2.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8iU3TznihUmct2Ts1B6avJYSax4MrwHk7RxeKsVz5Q6y", - "symbol": "CPTU", - "name": "CryptoUisco", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/alolore/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "73bdxWnRjmkwjKefy4wNxrgnxeCiKijx5F2an28rtogn", - "symbol": "FAME", - "name": "Famecoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/73bdxWnRjmkwjKefy4wNxrgnxeCiKijx5F2an28rtogn/FAME.png" - }, - { - "chainId": 101, - "address": "F92BeagxUnBa5ZRxFgQopHpVEd3rczMFxjuijWDWaDeL", - "symbol": "marrs", - "name": "MARRS", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MARRS-1/m/main/sjrjhzfy.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5Lah9gQ6McD5bUaCAUZKhQjFHsVmCmTBCAgt1Gk99Ad7", - "symbol": "PAP", - "name": "WhiteList Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5Lah9gQ6McD5bUaCAUZKhQjFHsVmCmTBCAgt1Gk99Ad7/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "HrpVMYXim8endssf6jYXMnDqKAhpd2hWmi9nfWXjeEio", - "symbol": "CYBC", - "name": "Cybster Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/cybster/crypto-cybc/main/logo.png", - "tags": ["social-token", "utility-token", "community-token", "altcoin"] - }, - { - "chainId": 101, - "address": "9tKEVUPrrWpa5vTy5jCBidQ54vC2y2715KyErNAn2E2S", - "symbol": "JKPT", - "name": "JUNKIEPACK Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/quintinmintiens/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Dutt8PNkPfUpD3v54a78pfd56sYvR3a7UtTGzuNF77dp", - "symbol": "DEV0", - "name": "DevZero", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/rmsdev0/coin-logo/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "MiHvRb55ySgxCh3i4ZDqp3xQeJ4wXgXFJXZqveCfjPU", - "symbol": "FZC", - "name": "FreezyCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/arminjaenisch/freezycoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "31F4zwMSLnBt8WBke7Dr7vGq1Miq2VmexmTUKVcrcMuV", - "symbol": "CARIBB", - "name": "CaribbCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/31F4zwMSLnBt8WBke7Dr7vGq1Miq2VmexmTUKVcrcMuV/logo.png", - "tags": ["community-token", "caribbcoin", "utility-token"], - "extensions": { - "website": "https://caribbcoin.com" - } - }, - { - "chainId": 101, - "address": "7azxPX5srz9mpUW6iK8N6pkLu4JfSVZv8LhnNs8QMETG", - "symbol": "ManJ", - "name": "ManualJ", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jon457/ManJ/main/js.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3qwwM6hrhNQJcSSfaa97ib4jmX7sQFejQbBbTBgZVC1s", - "symbol": "FINALB", - "name": "FinalCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Finalb-Studios/FinalCoinLogo/main/CoinThumb.png", - "tags": ["finalcoin"], - "extensions": { - "website": "https://finalb.xyz" - } - }, - { - "chainId": 101, - "address": "9ajpwBFdUkfjaSouR3wjcPGFJwhDJ9fNHTQWcTMAyZeb", - "symbol": "ZACC", - "name": "ZAC-Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jackborst/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GWqiHaYj2W6mtVEykaC3pceMGAN7pzFuVAErvGuFQpyY", - "symbol": "SOWT", - "name": "SowingToken", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GWqiHaYj2W6mtVEykaC3pceMGAN7pzFuVAErvGuFQpyY/logo.png" - }, - { - "chainId": 101, - "address": "Gv7LxA4em9CcVeLGuQgHASco2X32X7RvTP5o7W6nckNX", - "symbol": "JHC", - "name": "Johanna Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jhcoin2022/jhc/main/JH-Coin-v1.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HKfs24UEDQpHS5hUyKYkHd9q7GY5UQ679q2bokeL2whu", - "symbol": "TINY", - "name": "TinyBits", - "decimals": 6, - "logoURI": "https://tinycolony.io/tinycolonytoken.png", - "tags": [ - "NFT", - "social-token", - "utility-token", - "meta-verse", - "Game-Token", - "Game-Fi" - ], - "extensions": { - "coingeckoId": "tiny-colony", - "description": "An expansive pixelated ecosystem on the Solana Blockchain.", - "discord": "https://discord.gg/AT9caAbY", - "github": "https://github.com/TinyColonyGame", - "instagram": "https://www.instagram.com/tinycolonygame", - "medium": "https://medium.com/@TinyColonyGame", - "twitter": "https://twitter.com/TinyColonyGame", - "website": "http://tinycolony.io/" - } - }, - { - "chainId": 101, - "address": "4ZMwr188nAyRiJYsHLL5TBswXTU7aAmVio6SMP1mcdsJ", - "symbol": "CRH", - "name": "crypto revolution HEROES", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4ZMwr188nAyRiJYsHLL5TBswXTU7aAmVio6SMP1mcdsJ/logo.png", - "tags": ["UTILITY", "NFT", "DEFI"], - "extensions": { - "twitter": "https://twitter.com/cryptocomicsnft" - } - }, - { - "chainId": 101, - "address": "2opQDJSzjpjeyHbvGt2rTCWqper36tTnJ3Evj6cRhFAx", - "symbol": "SCI", - "name": "Social Chaining Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/robertseghedi/robertseghedi/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3bPDfM2QBf1a1is1kvjgzDGdwbVLczoa6dfuvGy7NXWT", - "symbol": "DNSM", - "name": "DNSmate Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/cybster/crypto-dnsm/main/logo.png", - "tags": ["social-token", "utility-token", "community-token", "altcoin"], - "extensions": { - "description": "DNSmate token", - "website": "https://coin.dnsmate.net" - } - }, - { - "chainId": 101, - "address": "2RGej1BYyT1MZEwKdjV2FW5fNTAxp43Bpog4jk1zD97r", - "symbol": "BNC", - "name": "Bunsble", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Bunsble/BunsbleCoin/main/logo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2MStv16MMiSTGu917stHLsC1ZTUW83tmrfVjUxfx2Ev1", - "symbol": "NCLR", - "name": "NCLR", - "decimals": 9, - "logoURI": "https://arweave.net/jiZBnPHQCAhdQc-9_9j3OXsw8rWtgIL2ryvR_5fz4p4?ext=png", - "extensions": { - "twitter": "https://twitter.com/Metazillas", - "website": "http://metazillas.io/" - } - }, - { - "chainId": 103, - "address": "EhSrrLdyVnWQ18LXvxAsVePmtLrADrss1UcZ1W98BNjJ", - "symbol": "CHT", - "name": "CRYPTOHYVE Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EhSrrLdyVnWQ18LXvxAsVePmtLrADrss1UcZ1W98BNjJ/logo.png" - }, - { - "chainId": 101, - "address": "Dbaxp7pi3e5upbD7AnucAxqZWYiRHtPRsXH4uSDB4qj6", - "symbol": "WASH", - "name": "Carwash Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/phuxtick/wash-token/main/logo.png.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2hN7tqk7wF9z3J7w2k8Jee9hcaB6gT9Tz9HwhuV6B3vm", - "symbol": "VVS", - "name": "VVS Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2hN7tqk7wF9z3J7w2k8Jee9hcaB6gT9Tz9HwhuV6B3vm/logo.png", - "tags": ["social-token", "utility-token", "community-token", "altcoin"], - "extensions": { - "description": "VVS is an invite- \u0026 mobile-only, engage-to-earn social media platform where content creators can drop exclusive experiences, merchandise, and digital collectibles in exchange for cryptocurrency.", - "twitter": "https://twitter.com/earnVVS", - "website": "https://www.vvs.io" - } - }, - { - "chainId": 101, - "address": "7odYbFhknk1FqHJnQFsFMwjzuM8zq3an6F4jRyoC39ik", - "symbol": "DGS", - "name": "DgS Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/DgS4dd0n/crypto/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "392JVCPEw6YVebX1FArUgjV7uo6e3VYPqrH1R9cZxFse", - "symbol": "WACCOE", - "name": "WACCOIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/iamtheitman/crypto/main/waccoin.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3VVJiTq4B6EjAMQ4R6wot3MEVPEbRL7Fne9qHPTWfcDQ", - "symbol": "EGGC", - "name": "EGG Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ThePharaoOne/eggcoin/main/EggCoin.png", - "tags": [ - "social-token", - "game-currency", - "community-token", - "metaverse-currency" - ] - }, - { - "chainId": 101, - "address": "7fTbHcbPzTQqeRaazaFHqFB5ZevTckwB2jdq2SFRUfds", - "symbol": "CAV", - "name": "Cavcoin", - "decimals": 0, - "logoURI": "https://github.com/cavman76/cavcoin/blob/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9sYn1ARn9wVPPsEy6fJHdjML8rE6Wm9QFixjRDYGwBMC", - "symbol": "WaLe", - "name": "Wallito", - "decimals": 0, - "logoURI": "https://github.com/memesparky/Wallito-Coin/blob/6ce49a410e014ac08b0dff1f9b2d2b5e6b43e9df/Wallito.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FJLWrhGxqz5oMgLyKUa3941R5bA1sgRWXcTxN3wt6QFu", - "symbol": "RGL", - "name": "RageLands", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/RageLands/logo/main/logo.png", - "tags": ["social-token", "ragelands"] - }, - { - "chainId": 101, - "address": "3dFdDhV9cu5SasNs2r1QY4tWSCGvgxEHomGgEW18QN6e", - "symbol": "CRUMB", - "name": "Crumbs", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/phillipq/crypto-crumb/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ACNYcasCaM3NEch6gHFNYhhKtbKM5mPLRG8EuozLHi4j", - "symbol": "HOPIUM", - "name": "Hopium", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/HopiumCurrency/crypo/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Bb6qLeSMXW1p5WJmk29CNzPzsjkFz5UZ2GchcFtTdyEP", - "symbol": "SVEN", - "name": "Svenson Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SvenBu99/Crypto/main/Shield.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7zDSSPrtYtyAFtdSgbJ6jcH92BwMDZPBxcB1jPukwwe9", - "symbol": "GRF", - "name": "Gerald R Ford Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jon1217/Gerald-R-Ford/main/35dz33.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2FEfn3HNqKAAEWpMW46FgTSX1SbZxtLEeCJwzXSEjonS", - "symbol": "RACC", - "name": "Raccoon Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Hasucha/crypto/main/raccoin.png", - "tags": ["raccoons", "raccoon-platoon", "raccoin"] - }, - { - "chainId": 101, - "address": "EeB4EEHRuXtdZ8NvYNvSW18He9XvtnhnTF4TcBe92SCf", - "symbol": "JfnP", - "name": "JfinP", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/JfinP/logo/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6ciiLZXXtCdEzxKPEpqDxeXM5ewKWi7yyJZ6MiMfK5Jt", - "symbol": "SLMC", - "name": "ShesLiam Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/spiesserfreakx3/sm-tokenimage/main/logo.PNG", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4rEYp4rKAHZwiKmaTi8dUNgSZnNtkMAMEjqRFvCeuaT7", - "symbol": "VELORUM", - "name": "Singularity DAO", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4rEYp4rKAHZwiKmaTi8dUNgSZnNtkMAMEjqRFvCeuaT7/logo.png", - "tags": ["utility-token"], - "extensions": { - "blog": "https://blog.singularityonline.app", - "description": "Singularity Online DAO Token", - "twitter": "https://twitter.com/SingularityMeta", - "website": "https://singularityonline.app", - "whitepaper": "https://whitepaper.singularityonline.app" - } - }, - { - "chainId": 103, - "address": "3485gPZHaNvhXC15HqfSUojefN2xPfg5mJCrnY6BNU6T", - "symbol": "VELORUM", - "name": "Singularity DAO", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3485gPZHaNvhXC15HqfSUojefN2xPfg5mJCrnY6BNU6T/logo.png", - "tags": ["utility-token"], - "extensions": { - "blog": "https://blog.singularityonline.app", - "description": "Singularity Online DAO Token", - "twitter": "https://twitter.com/SingularityMeta", - "website": "https://singularityonline.app", - "whitepaper": "https://whitepaper.singularityonline.app" - } - }, - { - "chainId": 101, - "address": "5TQDDZhEBPCdGGX23mFBajwsBhxMdBkpatuhd5GgjybW", - "symbol": "CGPT", - "name": "the Cute Guineapig Token", - "decimals": 0, - "logoURI": "https://github.com/dgloverwork/cuteguineapig/raw/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BCaiBkEkDGoPddGsYH65iSLTZW7tr58QsmQ3Vfs6oCWv", - "symbol": "HC", - "name": "Hosting Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BCaiBkEkDGoPddGsYH65iSLTZW7tr58QsmQ3Vfs6oCWv/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2YRi3W8JQLd55NHWepxxxaRP8vifG9T7iRLfSEEhW3jU", - "symbol": "NFA", - "name": "Niftarna", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/davidgenix/token/main/Niftarna%20Token.png", - "tags": ["utility-token", "meme-token", "community-token", "Niftarna"] - }, - { - "chainId": 101, - "address": "Eoz6d1P9npgKRDSBLaf21L5zFJ7ccYAixkiN6NoBpdEM", - "symbol": "TPG", - "name": "TPG Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/thomasgregg/soltoken/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3cSPs9Zc5STxiDiD9VKfzikLZAaKYHvtnN5Ay32f6nri", - "symbol": "WUBI", - "name": "Wubicoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/porcul/Wubicoins/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EzdViPLRRqrBPQ8zshGeDE3BJCCB7rJu8H1169Byby7U", - "symbol": "BIDA", - "name": "Bid Auction", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Bidauctiontoken/Bidauctiontoken-solana/main/logo.png", - "tags": [ - "social-token", - "metaverse", - "gaming-token", - "gamble-token", - "auction", - "multi-chain" - ] - }, - { - "chainId": 101, - "address": "B2wZun5H5eaf93UEgX9zxLZsGrejjqxhg2PdFAspyN2v", - "symbol": "BODHI", - "name": "Bodhi reward coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/BjMrq/crypto-msl/main/logo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8ghWaAQ2WkYh16ZWfYEEWwFn9a5KNzzJpPJsDqEqRbXX", - "symbol": "TEDC", - "name": "Ted Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/TedEwanchyna/crypto/main/ted.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3WvkimSdxWxs4VLjsfP6o24KzP6dz4DDu7GemA9hhTis", - "symbol": "MOSQ", - "name": "SOLMOSQUITO", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/9inelife/solmoz/main/log1.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GV3MjuGin8aTG6Rhc1vR1QFYp8gq5vW39jnNPLrbzmPi", - "symbol": "creatorpro", - "name": "creatorPRO", - "decimals": 6, - "logoURI": "https://creatorpro.live/simbolo-creator.png", - "tags": ["creator", "creators", "creator-token", "artist"] - }, - { - "chainId": 101, - "address": "H2rMQMa6kPpWwg2GraKyiiPwnayDBoBNg9WNVuafqXKc", - "symbol": "creator", - "name": "creator", - "decimals": 6, - "logoURI": "https://creatorpro.live/simbolo-creator.jpg", - "tags": ["creator", "creators", "creator-token", "artist"] - }, - { - "chainId": 101, - "address": "ArGak2wW1RSyXfcAnn2jdoE1nCAExRF5ex8EBpFK62KZ", - "symbol": "SLAK", - "name": "Slakcoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/R0ADY/slak/main/slakcoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FzJSvLESU8uSiKvbvRj6qbBisXAvRrNRcCQMEN3qJqmZ", - "symbol": "XDOCHE", - "name": "Xenodoche Coin", - "decimals": 0, - "logoURI": "https://github.com/Xenodoche/Crypto/blob/main/XenodochE.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Fsa1N5n3yF3aguZz2cpfPyJ5W1QKmqii5EqSGQSzRAQZ", - "symbol": "GOLF", - "name": "GOLF Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mcobbilo/crypto/main/golfer.png?", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HQHVTrx6BVYupT2FfdoSFK5HmDzQLh2a21aKopnQYLaX", - "symbol": "LWCC", - "name": "LIVINGWATER", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/markkeelan/crypto/main/Lwfs%20icon.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "D1iisc5oAARTFonV2mQ3p7SEV7NdCVkKRgG4v5eF2k8k", - "symbol": "KWL", - "name": "Kiwi Launcher (KWL)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/D1iisc5oAARTFonV2mQ3p7SEV7NdCVkKRgG4v5eF2k8k/logo.png" - }, - { - "chainId": 101, - "address": "2GTmJVSDNyhgvRfw4wP6yJGY3EhTpHm27M8cBMa4noNm", - "symbol": "SKWSBN", - "name": "SKYWEST SBN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/thatdishguy/SBN/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "31Zd6HM1cAjLxWYaUmmnNp35JSvGujgqmwyKZwjdDvHG", - "symbol": "BOBAH", - "name": "Bobah Balls", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/bobah-balls/crypto/main/logo.png", - "tags": ["social-token", "nft-token"], - "extensions": { - "twitter": "https://twitter.com/BobahBalls" - } - }, - { - "chainId": 101, - "address": "4VhkFbAy6zL6yvaJsnArNkM5AabHgDj3yCojMj76HiXD", - "symbol": "CINVI", - "name": "CRYPTOINVITER", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Cryptoinviter/CINVI/main/Cinvi.png", - "tags": [ - "social-token", - "metaverse", - "gaming-token", - "gamble-token", - "auction" - ] - }, - { - "chainId": 103, - "address": "AQxde8jgvxgkTcovbae1CvaRpfVsovB26wTrdgyVkAKA", - "symbol": "BEAN", - "name": "Token of TimeStore", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AQxde8jgvxgkTcovbae1CvaRpfVsovB26wTrdgyVkAKA/logo.svg", - "tags": ["social-token"], - "extensions": { - "website": "https://timebitlaw.com" - } - }, - { - "chainId": 103, - "address": "6Mdq1QmqbWLejtSsvHVXc5HtTkztVTHgdb2EJUtCMRMq", - "symbol": "XMT", - "name": "X-mas Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6Mdq1QmqbWLejtSsvHVXc5HtTkztVTHgdb2EJUtCMRMq/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6kR8XurNwjJZXGrTEBA8WtJtps7TAUjdX1oJhu1tyBVK", - "symbol": "AGLA", - "name": "ANGOLA", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Partner-Angola/token-list/main/assets/mainnet/6kR8XurNwjJZXGrTEBA8WtJtps7TAUjdX1oJhu1tyBVK/logo.png", - "extensions": { - "facebook": "https://www.facebook.com/profile.php?id=100076475235846", - "github": "https://github.com/Partner-Angola", - "instagram": "https://www.instagram.com/angola_partner", - "telegram": "https://t.me/AngolaCS", - "twitter": "https://twitter.com/ANGOLApartner" - } - }, - { - "chainId": 101, - "address": "J2SLK9VNtVFGkhmuXT3Gsi43KP2Ftbmawmj7RsTFoRx6", - "symbol": "1usd1", - "name": "1USD1 COIN", - "decimals": 4, - "logoURI": "https://github.com/1usdguy1/jpegfiles/blob/main/1usd1.png", - "tags": ["social-token", "utility-token", "meme-token", "dex"] - }, - { - "chainId": 101, - "address": "6hYoQQjd54a1qkmhDRSprgrbMKkRKiEH5Z44xw5DZzso", - "symbol": "BOOZ", - "name": "BoozCoin", - "decimals": 9, - "logoURI": "https://avatars.githubusercontent.com/u/95369650", - "extensions": { - "telegram": "https://t.me/boozcoin", - "twitter": "https://twitter.com/boozcoin", - "website": "https://boozcoin.com/" - } - }, - { - "chainId": 101, - "address": "14Av6AozFck2wiRuqiK7zynKTPcKWmijDK3wVEXW5b4k", - "symbol": "BOOGLY", - "name": "Boogly", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/wubsnubz/boogly/main/boogly.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "47WYC41xdUjs1ZghfppBRFGmC3ztzecHhdy51QyBXgLz", - "symbol": "SUNNY", - "name": "Sunny Weintraub Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/b-weintraub/sunny/main/logo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CkqFXm96v68ULpce3fQVEtHNagM2Ur1sZgM4oLSDNdZU", - "symbol": "WECOUNT", - "name": "WeCount Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CkqFXm96v68ULpce3fQVEtHNagM2Ur1sZgM4oLSDNdZU/logo.png", - "tags": ["wecount", "community-coin", "community", "social-token"], - "extensions": { - "website": "https://wecount.dev" - } - }, - { - "chainId": 101, - "address": "68N2LZsUxJRWfNLeo2SMChnAtYwBd83sNarxLMLWUESV", - "symbol": "PTRC", - "name": "PetrakisCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/NickEleftheriadis/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HqJyrnCuzYu14sam378r6ZAHE2pjXA4qQCia6VhPXr7o", - "symbol": "ALHT", - "name": "All Height", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/nrbDev/crypto/main/c28a0aae32a67ab9bb38c3adb49eeaba.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "PSoLjQL5Cd4mwC2p2qeSyHsTtSrifCSmNCUYZK75RFS", - "symbol": "PSOL", - "name": "PUMP SOL", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/PSoLjQL5Cd4mwC2p2qeSyHsTtSrifCSmNCUYZK75RFS/logo.png", - "extensions": { - "website": "http://pumpsoltoken.com" - } - }, - { - "chainId": 101, - "address": "9GSM9uXLTj7aHdwBtipDfaFtGYPgVnca5Bu6hnT5GHJG", - "symbol": "GNB", - "name": "GNBux", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jyanosu/GNBux/main/GNBux.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3nEUJDbbCPEh7ePCwxgEXq8fXXqStjrCrZmJ1rUyCPSB", - "symbol": "SKL", - "name": "SkylrFinance", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/skylrfinance1/skylr/main/assets/mainnet/3nEUJDbbCPEh7ePCwxgEXq8fXXqStjrCrZmJ1rUyCPSB/logo.png", - "tags": ["community"], - "extensions": { - "discord": "https://discord.gg/AHqRRmNg", - "twitter": "https://twitter.com/SkylrFinance" - } - }, - { - "chainId": 101, - "address": "7yia2o7CrQDdAAvGRBtXp6L6mGqToEXjjUFm4VfioVjF", - "symbol": "TrX", - "name": "Travon", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Travon-0/crypto/main/ll.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7AAtpqK78qbc7vx6BVWQ1D4PEjoccDbU293oGh74ovzN", - "symbol": "FLB", - "name": "Floki Baby", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7AAtpqK78qbc7vx6BVWQ1D4PEjoccDbU293oGh74ovzN/logo.png", - "tags": ["utility-token", "meme"], - "extensions": { - "discord": "https://discord.io/flokibaby_sol", - "telegram": "https://t.me/flokibaby_sol", - "twitter": "https://twitter.com/flokibaby_sol", - "website": "https://flokibaby.net" - } - }, - { - "chainId": 101, - "address": "E4ZzSQqz3eFScU1VjcuPwiTMALHdNe7AT4CQt6MLQkqb", - "symbol": "PNGN", - "name": "Pinguin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/p1otek/pinguin/main/pingwin.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "23f5TH1tFkfX6jPVQNy4VQ66Fo32WUc8zrZT1c14LzBM", - "symbol": "HKV", - "name": "HuskyVerse Token", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/23f5TH1tFkfX6jPVQNy4VQ66Fo32WUc8zrZT1c14LzBM/logo.png", - "tags": ["utility-token", "community-token", "meme-token"], - "extensions": { - "discord": "https://discord.gg/TTnKwcdngt", - "twitter": "https://twitter.com/husky_verse", - "website": "https://huskyverse.network" - } - }, - { - "chainId": 101, - "address": "AZDNFxGvp7ueSjJMuGGg4pHfDz9MEaHbH87UYSDeozHh", - "symbol": "MSPC", - "name": "Moose Sports Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/CoachCurvCrypto/CCC/main/1%20time.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EcPcdvrnMPH9VNqdkUYezMCVXKMaiexnop1ScRG9LiNg", - "symbol": "DVTC", - "name": "Deivitcoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/davirami88/davitcoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "31W7XnpNSwB4ioeXK2LoDvZLCdCyBn1NysXcgJvZ4C5o", - "symbol": "TDC", - "name": "The Danish Coin", - "decimals": 0, - "logoURI": "https://github.com/Alexander123st/The-Danish-Coin/blob/main/denmark.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6BX9nw9JhAUVDnBrJHqkXTnUcqpGkLRCe6vvXVGgsjNa", - "symbol": "MGN", - "name": "MUGEN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/kyle123c/MyCryptoToken/main/mugen.png?token=AGNMUIK532R65TGX5WNLL33B3BHVW", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "E3HM6Vdpdomb11y1ZsBDz4ndjkByuDSMH4PEXZtZrGXc", - "symbol": "KRON", - "name": "Kronblad Net", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/CrissZollo/crypto-logo/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "E6nKpgVHevNCVkHn7gqNKGbrsCxjnxagMYME5CYdyUto", - "symbol": "EPIK", - "name": "Epik City Token", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/EpikCityGit/EC/main/EC.png", - "tags": ["game-token"] - }, - { - "chainId": 101, - "address": "2kuTqXS3pxs6k3wVusRrMeP6YEjjDBvwTpqrvajsjg3T", - "symbol": "SCCE", - "name": "Cooney Coin", - "decimals": 0, - "logoURI": "https://github.com/looneyr8/crypto/blob/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CcM2KGSi9XSkbg1mR1szTee2BDazbnW5Qy4prw9zJHFn", - "symbol": "NERON", - "name": "Neron", - "decimals": 9, - "logoURI": "https://github.com/neronproject/token/raw/main/logo.png", - "tags": ["utility-token", "social-token", "nft", "swiss", "stake"], - "extensions": { - "description": "Swiss decentralized Token", - "twitter": "https://twitter.com/NeronProject", - "website": "https://neron-project.com" - } - }, - { - "chainId": 101, - "address": "4drMeMofFD9d319PozEFeqL6KUNuvsV6qtRCPWvpiuVh", - "symbol": "AMAROY", - "name": "AMAROY holding coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/bayramenes/Tokens/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HcXZtuzj4SvJEtB767cM2ywyhbd5Wxbobrc8h5kspc6S", - "symbol": "MEZO", - "name": "Mezo Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Mezoforthepeople/mezo/main/Logo.png", - "tags": ["community-token"] - }, - { - "chainId": 101, - "address": "7srfbys2PS5g7Z4a7VHNV1UquazToN5nhYFgu9Kje3cT", - "symbol": "LUC", - "name": "LUX Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mazsinger/luxcoin/main/luxcoint2.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2XDAUBAoDL44ziNUVLGqYq3mA4QRYo46kaamH7r5Z1gZ", - "symbol": "HAIR", - "name": "Carecas Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/nbcompras/crypto/main/carecas.png", - "tags": ["utility-token", "community-token", "meme-token"] - }, - { - "chainId": 101, - "address": "FJ95xcVK4U1YGjjjDDXpEhHpDrtjtGHK9AusqDavxQdy", - "symbol": "CHOP", - "name": "Choptimu5 Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Choptimu5/crypto/main/ChopTokenLogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HcLkdCCyjzHanERvMJe1u41pXMPdsJzSetHESJQbNRRR", - "symbol": "TANK", - "name": "The Aslan Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/azlan2355/crypto/main/final-lion.png", - "tags": ["social-token", "community-token", "meme-token"] - }, - { - "chainId": 101, - "address": "CgwSqBSeT6HLYmw6EnUp8W7ftsjC4MCShbq1gTwiae53", - "symbol": "BNMTC", - "name": "Benomat Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Benomat/CryptoCurrency/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GfM5rmMJ2fQ55qHtB4whHeunqKMn1ZSnbKiVnanLwMVS", - "symbol": "ASGHAR", - "name": "Asghar Coin", - "decimals": 0, - "logoURI": "https://avatars.githubusercontent.com/u/53191495?s=400\u0026u=3e937145da66f98a3651c3d59a0aac4f6f69a893\u0026v=4", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3oHUwMYdNzsSF7aysvCdKc12ym7baoUVGE1SFum9k4Xm", - "symbol": "CARN", - "name": "Carnifex Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/cjstoddard/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CuK5pT9F3TmZS672gNACDUv2BaY1d44aLfeXMyGgZUoF", - "symbol": "ISAAK", - "name": "Isaak Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Firebros1/crypto/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DK7HA62vZU4MSm7Z3cnoUnRzBcE562FdkYKzMmAS8sK1", - "symbol": "BFRN", - "name": "BitFiorino", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/BitFiorino/BitFiorino/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GJXAvenss7VvmwUi3D8qHjAsdaKDMdWbZp5bPKTqBN7M", - "symbol": "RICE", - "name": "Fun", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/JCF0/RICE/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7FdPzM6dYAvwpwLCH5cNs1ZsqVacPmkiE2qbCsCs8ofw", - "symbol": "DLYS", - "name": "Asterius", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Daetalytica/crypto/main/logo.png", - "tags": ["utility-token", "security-token"], - "extensions": { - "facebook": "https://facebook.com/watson11B", - "twitter": "https://twitter.com/nachteis", - "website": "https://daetalytica.io/" - } - }, - { - "chainId": 101, - "address": "3phF2ZYQwH5qHDNtHQ5wxAspka77ic23enA2tF9qaS4e", - "symbol": "FF", - "name": "FORBE FINANCE", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3phF2ZYQwH5qHDNtHQ5wxAspka77ic23enA2tF9qaS4e/logo.png", - "tags": ["ethereum", "solana", "wormhole"], - "extensions": { - "address": "3phF2ZYQwH5qHDNtHQ5wxAspka77ic23enA2tF9qaS4e", - "discord": "https://discord.gg/U2N9b42C", - "telegram": "https://t.me/ForbeFinance" - } - }, - { - "chainId": 101, - "address": "6Tf1yzhpZ731gRPJBpBk6KsWdEzx4sDXFn6LVSxwgzMW", - "symbol": "FC", - "name": "FamilyCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/IMAXMAXMAX/crypto/main/FamilyCoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7xVANL1h6PnuV7zBCsL9CwKCBwUPjpLp75NtC3i1atmg", - "symbol": "MEMET", - "name": "Meme Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MemeTokenMan/TokenToei/main/pepe.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6eUmZ5NM1C1rgMErByGKhQa2pa8YeuYKEhL2wYNDBu5m", - "symbol": "CHZBLK", - "name": "CheeseBlock", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/maxcheese3/Cheese-Block/main/CheeseBlock256.png", - "tags": ["social-token"], - "extensions": { - "description": "Own your own shreds of the CheeseBlock today!", - "discord": "https://discord.gg/N6wtXcmRnf" - } - }, - { - "chainId": 101, - "address": "6f179XqfQvxn112UHDCTL2VQy5tLb3bCp88XJFMPVJXU", - "symbol": "SLYM", - "name": "Slimey Bois", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6f179XqfQvxn112UHDCTL2VQy5tLb3bCp88XJFMPVJXU/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "HbnwCozh2DKLzaNB1fEf1B4DyZm97g2iSzbjm8vYkJBp", - "symbol": "NYES", - "name": "James Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/nyesjames/jamescoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "68jbAkL4V7e2zXKHxxSrMYiHbGakbmSCbKjGN7MApHJV", - "symbol": "ZONIX", - "name": "Zonix", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/68jbAkL4V7e2zXKHxxSrMYiHbGakbmSCbKjGN7MApHJV/logo.png" - }, - { - "chainId": 101, - "address": "3kJ7goYo5Ezx9Vc2okRyVG8UF9RuAVLXHLKdpjpHuN4b", - "symbol": "CSINI", - "name": "Csini Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/MoTheCo/Csini-coin/main/csini.png", - "tags": ["social-token", "meme-coin"] - }, - { - "chainId": 101, - "address": "nooot44pqeM88dcU8XpbexrmHjK7PapV2qEVnQ9LJ14", - "symbol": "PESKY", - "name": "Pesky Coin", - "decimals": 9, - "logoURI": "https://arweave.net/58GmA531NCbAhLPsW5sOLSyzuS1lrveuzqr6nbHLzRc", - "tags": ["community-token", "social-token", "utility-token"], - "extensions": { - "twitter": "https://twitter.com/peskypenguins", - "website": "https://pesky-penguins.com/" - } - }, - { - "chainId": 101, - "address": "9Ka5LepzQPK6BnhgCEEKPasBZgXdMUrn6NvHdw2B2fUu", - "symbol": "KRK", - "name": "Karkantas Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/pkyria14/karkanto-token/main/logo.png", - "tags": ["utility-token", "social-token", "meme-token"] - }, - { - "chainId": 101, - "address": "8y3LEAzvkcrdRegg93CxnxAHfk7UXB6hPs12EAxQfwJL", - "symbol": "IRLV", - "name": "Irrelevant", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Miliexy/Crypto/main/Logo.png", - "tags": ["utility-token", "social-token"], - "extensions": { - "description": "Just an Irrelevant token Project" - } - }, - { - "chainId": 101, - "address": "YiUu8KST9spXGeKVacjoxfS6gtbu8nKj9nbM2VGqC52", - "symbol": "ALTK", - "name": "The Al Tino Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/albertamoyaw/crypto/main/mycoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "J9H1z1oY1zJKNDBf44MmtvwYW2HvU1GEESAGMvyC7izj", - "symbol": "BRG", - "name": "Burger", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/burgertoken/crypto/main/logo.png", - "tags": ["NFTs", "utility-token", "currency-token", "community-token"] - }, - { - "chainId": 101, - "address": "SGTdtpAiPU1Fg9a3DqUN1852V24sfo92ePEHpyqkrSN", - "symbol": "SGT", - "name": "Solana Ghoest Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SGTdtpAiPU1Fg9a3DqUN1852V24sfo92ePEHpyqkrSN/logo.png", - "extensions": { - "twitter": "https://twitter.com/solanaghoests" - } - }, - { - "chainId": 101, - "address": "5pnwhysNPrzf7NjJzrhrWLMHo2d8zYSFLMKrVdYuAjAd", - "symbol": "LSS", - "name": "LaquiosSs", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/LaquiosDev/token/main/logo.jpg", - "tags": ["utility-token", "social-token", "nft", "great"], - "extensions": { - "description": "Swiss decentralized Token", - "twitter": "https://twitter.com/Laquios1", - "website": "https://www.laquiosss.ga" - } - }, - { - "chainId": 101, - "address": "2rghJ2ypY9CMFf8EMYF9GcgcwDPqV4tTcMQkEREWoRvQ", - "symbol": "COL", - "name": "Colonia Coin", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/Palm1che/assets/main/colonia%20token.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "45BZJKCw4LKYRKJUZBwzsjiBEYWQ3qjsKpbYA66Q9LXP", - "symbol": "VVTCK", - "name": "VV Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/DesSheehy/crypto/main/VvImage.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "C9PDb9PFE33cTgfmipNPTpT8ee97nMYxHASwxhmXUqYo", - "symbol": "FLEA", - "name": "FleaCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Isaac-T-Hill/crypto/main/FleaCoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FQpcRZJb4tnBMcauWw6y4fUudJCYp4QTGUVSSxpmfTLw", - "symbol": "TnTx", - "name": "tedNET TnTx", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jrichard2022/tntx-token/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8Wx1um8egtWAF8bQyJn28vcyY35e8j9j4d7GzJ6oww3R", - "symbol": "Retr0D", - "name": "Retr0 Dough", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Way2Retr0/crypto/main/Test1.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "H2Dcj1d2fwQmovK9f9n9E5rmjyi9dwz6HLX1eSFMDMGN", - "symbol": "VTV", - "name": "VITE-COIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Vitelavita/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "23bzG86BQhzWZ2eYBZs7yGqL1bTYRupmZVc82z2Cz7CG", - "symbol": "AMZY", - "name": "Amaizy", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/lolpimp/cryptos/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "H1LGfirZp73ssFJVWgumZ2GMpy5Bx2GFRuUkbuFNTxn2", - "symbol": "SSHD", - "name": "Super Shidd Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/infiniteDungeons/SuperShidCoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4nGc9AjiBVKiZ8oNw12yEzZdJ7xwxNFQsqHf4gJJVZrF", - "symbol": "GEICO", - "name": "Fractionalized Gecko-2140", - "decimals": 2, - "logoURI": "https://oleoat3dkcqo3ydnw2m5fe2qcw5rhfhhf5ga7kaalnljynee57za.arweave.net/csjgT2NQoO3gbbaZ0pNQFbsTlOcvTA-oAFtWnDSE7_I", - "tags": ["bridgesplit-fraction", "gecko", "fnft"], - "extensions": { - "discord": "https://discord.gg/bridgesplit", - "twitter": "https://twitter.com/bridgesplit", - "vault": "https://app.bridgesplit.com/vault/4nGc9AjiBVKiZ8oNw12yEzZdJ7xwxNFQsqHf4gJJVZrF" - } - }, - { - "chainId": 101, - "address": "H89t4SG6mt8qD4pjZ6DjPPw59aNhuapCZRiyJJYrYFoM", - "symbol": "MickS", - "name": "Mick Savioz", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/micksavioz/crypto/main/sm.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8DxBDBbJz1S7BR5A7a2Y57WMZ5VjZuy3gGRaeuFQ8au8", - "symbol": "MickSavioz", - "name": "Mickk Savioz", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/micksavioz/crypto2/main/smick.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "1SSBwC8hxB4GXzKKU4ENNpST7zgpTmucDe9NoAopWXX", - "symbol": "ISS", - "name": "Irish Setter Sol", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/1SSBwC8hxB4GXzKKU4ENNpST7zgpTmucDe9NoAopWXX/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/f3vZN63gax", - "github": "https://github.com/irishsettersol", - "medium": "https://medium.com/@irishsettersol", - "serumV3Usdc": "VEwPVH2AzoqQb35DP8gvY3B6hj5mwRzGhfee977b27Z", - "twitter": "https://twitter.com/irishsettersol", - "website": "https://irishsetter.io" - } - }, - { - "chainId": 101, - "address": "Fy7mCK5hyR1nRwjabvrNaYijD7Kx4WxawJRG9d5W1NDP", - "symbol": "CAT", - "name": "PufferCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/KZacharski/puffercoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2CBJuwoaD3pb6RnHgqoreRGuoZJJbYUAoafiskYDH4iF", - "symbol": "BLUR", - "name": "Blur", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/KZacharski/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4oAV7zaTgT5YHrjBvYy9SbcNLco9HSvZC1dtEY8vQFBt", - "symbol": "PFRUSD", - "name": "Puffercat USD", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/KZacharski/crypto/main/pfrusd.png", - "tags": ["social-token", "stablecoin"] - }, - { - "chainId": 101, - "address": "2HesFCDdjq4UiX5xkbarmJe5rD7tCnAEjNUUY28QVBrm", - "symbol": "TRC", - "name": "Tora Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/hirotoshimizu/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4TFJVNU7JtWdxGWUUdNbqteh8y2CtyxSg5UTFK69q3NM", - "symbol": "AK", - "name": "Animal Kingdom", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/kcjrcrypto/animalkingdom/main/logo1.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8KsAYCoCmatysW2RpCqsrsNGo9S8WFFQYyCpTbZpQ2JN", - "symbol": "APRT", - "name": "Apparition Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/War-Admiral-HR/crypto/main/GhostPhotoLogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GtcG4RDcojU5sJUQAAUh6zdSJBW8GLquNCMFpBwHyEnD", - "symbol": "MNKY", - "name": "Vitalik Buterin's - Monkey Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jay-silesh/crypto/main/logo.png?token=AAUEJWY5DS5KOUX7EMS4I53B2DQ6U", - "tags": [ - "social-token", - "utility-token", - "community-token", - "meme-token", - "nft", - "ethereum" - ] - }, - { - "chainId": 101, - "address": "5FoabfA5DF15FxMkmEW2qzDm3Q7PLEN1u2yRifhaQMkr", - "symbol": "FITE", - "name": "FightVerse", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/MightyAxStream/assets/main/FITE.png", - "tags": [ - "social-token", - "utility-token", - "game-token", - "NFT-Gaming", - "governance-token" - ], - "extensions": { - "website": "https://thefightverse.com" - } - }, - { - "chainId": 101, - "address": "EFPiWp3apg7mRMDmm7Mv9rrRmzbNkFFkkdpcTSaiEcU7", - "symbol": "PACA", - "name": "Alpacistan Coin", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/enigmaticenigma/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Fcx97kERRKkz5H3qzPB4pc3kRyTpKSaMUdxDnN4Bv9fK", - "symbol": "LEV", - "name": "Levski", - "decimals": 9, - "logoURI": "https://github.com/SimDim8907/crypto/blob/main/Levski.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8ZRwLdDEVJHeVtkcDNBEYvzyGmj2y5p1DtbRhQKTizV6", - "symbol": "DEAD", - "name": "DeadCoin", - "decimals": 0, - "logoURI": "https://github.com/ceponatia/soltoken/blob/main/DeadCoin%20Square.png", - "tags": ["social-token"], - "extensions": { - "description": "DeadChannels", - "website": "https://www.trapdrum.com" - } - }, - { - "chainId": 101, - "address": "AYcohjvG7vuX2KcA87MdG8Ppu4z5pwVEpJXe4ogm9YzP", - "symbol": "CHCH", - "name": "Chump Change", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AYcohjvG7vuX2KcA87MdG8Ppu4z5pwVEpJXe4ogm9YzP/logo.png", - "tags": ["utility-token", "community-token", "meme-token"] - }, - { - "chainId": 101, - "address": "8XBCbEL8zPZzKia3EaTcHYdWLDnTt2thHJMCLP4mhFts", - "symbol": "4TWRS", - "name": "Four Towers", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Ignorantelkski/four-towers/master/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "12mNQPJ2FGytia5Mc3Tz5t7jXGkk46JY9u9PiReBVKLR", - "symbol": "5RAN6", - "name": "5ran6", - "decimals": 18, - "logoURI": "https://raw.githubusercontent.com/5ran6/5ran6_token/main/logo.png.png", - "tags": ["metaverse"] - }, - { - "chainId": 101, - "address": "9N9YiaHuU6a99UNuSMi89UspY1gnd4AaAZxwetKTAUEn", - "symbol": "P2H", - "name": "Play2Help", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Play2Help/global/main/logo.png", - "tags": ["social-token"], - "extensions": { - "description": "Games-based charitable token", - "website": "https://play2help.me" - } - }, - { - "chainId": 101, - "address": "5b6FCghR8TAtELnma4ADLk2Kx1KV1vcJ3jKdk7WJUf72", - "symbol": "JR", - "name": "JuRedstoner Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/JuRedstoner/crypto/main/solana.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DtHEJQgYSjx3HoBqVtCzr4sojbjbSxFrRnKeAWv4qwjR", - "symbol": "PLSM", - "name": "PLASMA - Big Mouth Bastards", - "decimals": 7, - "logoURI": "http://www.choppeduniverse.com/wp-content/uploads/2021/12/PLSM-logox-01-01.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CvNxZwaEuCtQw72sNSxAWfsH2YdR4NP1qZ2YHFuJPtyE", - "symbol": "3DS", - "name": "Dominguez Digital Design", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Dominguezcell661/3Ds-Token/main/3DsLogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8ktq18ZnynKTVV1ZQvbc28Jzj8WfbEP2WCC1im9e4fGK", - "symbol": "PFRY", - "name": "Ponies Fucking Rock Y", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/NOVA-Heftig/PFRY-Crypto/main/20220101_022912_0000.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "F8rFb2mX3V4wARW87pJfdbv2tZfPCbCFcwHypAbdCAkF", - "symbol": "ZBEL", - "name": "Pioneers Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/F8rFb2mX3V4wARW87pJfdbv2tZfPCbCFcwHypAbdCAkF/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HyUqdk5LxGSFyrptQL9JiUgP66H25djVd3mCAedhfCR9", - "symbol": "NIGE", - "name": "Nigels Social Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HyUqdk5LxGSFyrptQL9JiUgP66H25djVd3mCAedhfCR9/logo.png", - "tags": ["social-token", "loop"] - }, - { - "chainId": 101, - "address": "6mA5p31vvS4YMn7XK7hcLx88EC2rYq8a8vz76ofSoR3J", - "symbol": "KND", - "name": "Kindo", - "decimals": 4, - "logoURI": "https://user-images.githubusercontent.com/4694319/147854751-097c9287-365f-4926-b3dd-2db89ca49a9f.png", - "tags": ["token"], - "extensions": { - "website": "https://kindo.finance" - } - }, - { - "chainId": 101, - "address": "E6huQbLpbHAdXbBjXGti4eBnrjqPQzD9VrFKu6UKzqDu", - "symbol": "DODI", - "name": "Dodi", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/DodiMars/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7aCDkQbcoW97B9rYakmbktXHBeoB1L7whWep26P4teW", - "symbol": "GONE", - "name": "Gone Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/GoneFromTheMachine/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Mkm88WrSH7KrMYRfVFfTYsYDpwmSdHYW5HDESaHSjvv", - "symbol": "YCC", - "name": "YouCode Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/el-ouakili/yc-crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3odezrjhUwhNHQYjzzHyJ6hPzuto4BWUEA4iBfLUbr32", - "symbol": "HSC", - "name": "HOT SOUP COIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/GiuseppeGiglio3k/MyFirstTokenProject/main/logo.png", - "tags": ["social-token", "community-coin"], - "extensions": { - "description": "Giuseppe`s Hot Soup Coin", - "twitter": "https://twitter.com/giuseppeagiglio" - } - }, - { - "chainId": 101, - "address": "2coPnLrai1teeZeZdcHwafjkD7hC6tyJavMWy23d7fbg", - "symbol": "MCH", - "name": "Millenial", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/AnthonyRamses/crypto/main/logo_millenial.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/MillenialTigers", - "website": "https://millenialclubhouse.com/" - } - }, - { - "chainId": 101, - "address": "AqERDNX4eKDtMu4voLd6oLEsF7CRknACPye9UWWMLf7g", - "symbol": "TECH", - "name": "TechAdemi Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Ralle001/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BsSqr6gQNtYFaUHH23jW5FQVNVKP6Cd33BqM5FPrP8SL", - "symbol": "KLQ", - "name": "Klinq", - "decimals": 18, - "logoURI": "https://raw.githubusercontent.com/geraldon1997/klinq/main/solana-klinq.png", - "tags": ["social-token"], - "extensions": { - "website": "https://klinq.io" - } - }, - { - "chainId": 101, - "address": "FAL6rDyKGyRrmMHHQD4wvreVDZatVg7rgoiixCSvsaLB", - "symbol": "MRCB", - "name": "MicroClub Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/massinissaboujelouah/Crypto/main/LOGO.png", - "tags": ["utility-token", "community-token"] - }, - { - "chainId": 101, - "address": "9YyBWN3uZf7j8rzEiAHBY7MxNHPvAwCuHUnTnGyMyd2b", - "symbol": "MFTKN", - "name": "My Future Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/myfuturetown/crypto/main/0001-removebg-preview.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BwGLzB8Upv2RxanfgkSVAYNjenuz26mQjHPH6c7ytr1u", - "symbol": "OIL", - "name": "SolBots", - "decimals": 5, - "logoURI": "https://i.imgur.com/imq3ICz.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/SolbotsDAO" - } - }, - { - "chainId": 101, - "address": "41j9uUKgyEJD5EsezyUJQ82ULtkBQ67xqWFu2pfG899d", - "symbol": "SBH", - "name": "ShoeBox Hub", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/shoeboxhub/Crypto/main/1.png", - "tags": ["social-token", "utility-token", "community-token", "meme-token"] - }, - { - "chainId": 101, - "address": "3jdvt3LFfoW28rhj7Z2J5r5The8ULWyfAfDXRVSRoDvh", - "symbol": "ZAMC", - "name": "Zamat Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mattzamat/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "21Dn1UQQvioR6eJb9wznx3Ef56GyPVuGwVc9NGPpzNGa", - "symbol": "TFA", - "name": "Trifecta Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mrcactusjones/trifecta-coin/main/60854458c4d1acdf4e1c2f79c4137142d85d78e379bdafbd69bd34c85f5819ad.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6ZzApb9xf1ZkRqCamvdqCNHhhL7B2g17D95D8ne2LvmD", - "symbol": "KSTR", - "name": "KaiStar", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Kaiozoshin/token/main/star.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Hc2zBm4skodzmM2ZAWgXm8eu6wgDjNaWAA3ZQzc2oU23", - "symbol": "umi", - "name": "Umicom Asset-Backed Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/cf23012418749b944e9319370afbe0702c4dba94/assets/mainnet/Hc2zBm4skodzmM2ZAWgXm8eu6wgDjNaWAA3ZQzc2oU23/logo.png", - "tags": ["utility-token", "community-token", "security-token"] - }, - { - "chainId": 101, - "address": "EathPiCkVhpnEpr87ZSjo9qKoGuXVpCVFo1WWRzMLpYh", - "symbol": "INO", - "name": "Ignotus", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/ignotuspy/ignotuspy/main/IGNOTUS.jpg", - "tags": ["utility-token", "community-token", "meme-token"] - }, - { - "chainId": 101, - "address": "EGZ54c4CWtdDpQ7SWfk69vrjhGjbJ2VRLrDGHKqjpwuc", - "symbol": "GJT", - "name": "Gunajaya Token", - "decimals": 0, - "logoURI": "https://github.com/gunawan89ok/beo2trex_token/blob/main/t-rex.png", - "tags": ["utility-token", "social-token", "nft"] - }, - { - "chainId": 101, - "address": "AsTBgyjSpYiJuqzqLWzzgiMstdYsasfdPFwU5NyDqamx", - "symbol": "BCAT", - "name": "Big Cat Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/johnc99688/bigcat/main/dog8-1.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AZn4LQQfB2RCi5QY7J5gHDQ2FpY6uXmeGCEm5jMJLUvt", - "symbol": "BPPL", - "name": "Bipple", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/benjaminghys/Bipple/main/BIPPLE.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3NqEtv9CpqP6cgFd1bJCUG4Z9jsaGDGASsBbAreFFEwX", - "symbol": "NSL", - "name": "NASCOL", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3NqEtv9CpqP6cgFd1bJCUG4Z9jsaGDGASsBbAreFFEwX/logo.png", - "tags": ["utility-token", "social-token"], - "extensions": { - "description": "NASCOL is a digital currency with an elastic supply mechanism", - "website": "https://www.youtube.com/channel/UCRN1OelsbBSXb0MNYXzG1mQ" - } - }, - { - "chainId": 101, - "address": "57FYTy2H7DzhZX2H8oAyt5XJMird3ujKAFPGtR7qpojQ", - "symbol": "CONA", - "name": "ConaToken", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/bernymelo3/crypto-token/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AwA59FnmqYNREGdCFB7GMtC6x94UGYjLV38PU4jpx7VQ", - "symbol": "sqi", - "name": "Sheng Chi", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AwA59FnmqYNREGdCFB7GMtC6x94UGYjLV38PU4jpx7VQ/logo.png", - "extensions": { - "discord": "https://discord.gg/Us95EnvU7D" - } - }, - { - "chainId": 101, - "address": "2UZ3AnG5xx2vYsfTxDfzHJodfCzbtJ8GVvodAZFVVr8o", - "symbol": "NAMIT", - "name": "NamitCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/XnamitX/Crypto/main/Namit.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9ks9ZkiUEperqVuxXmxx2HL7BdccCVWt5tB9gAHLhXRZ", - "symbol": "SMM", - "name": "Sumomo", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9ks9ZkiUEperqVuxXmxx2HL7BdccCVWt5tB9gAHLhXRZ/logo.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "9Jx5r3LnRtVjUVYnGfedSPg2VsRzXSDyoDX4cLjd4RuQ", - "symbol": "MUN", - "name": "MuneraGames", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/muneragames/munera-public-docs/main/IconOnly.png", - "tags": ["utility-token", "nft"], - "extensions": { - "description": "MunerGames in-game and governance token.", - "twitter": "https://twitter.com/MuneraGames", - "website": "http://muneragames.com" - } - }, - { - "chainId": 101, - "address": "D2dBmc8RB6RQPAnxy4UXA6uyo3dPFNSnr37MftZjVQfs", - "symbol": "MKN", - "name": "MKwanyotaCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/panexorca/crypto/main/mkn.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CSyoRfyxVkyHcXDAzqAQ5x5x2QM1odJv3Yr4CW4zeQ83", - "symbol": "MTKFT", - "name": "MountainKraft", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/CarasanToscan/mtkft/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9q9ZYkkN4AgB1n4egxeZdkrvg6kMeFV3hK45dLqCf6H5", - "symbol": "AGTM", - "name": "Argentum", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/theisaaclloyd/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Cp3Lk4CrZJWoLuFQ3z7dR2ser6jVH4TbLyiUr41YmXDR", - "symbol": "OXRH", - "name": "OxRoush Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/OxRoushCoin/OxRoushCoin/main/OX.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8Yt8pxxgNKz97rs3jW4E6BPe8LBtwtP7MT4TAcddPsCw", - "symbol": "PK", - "name": "Padoru Kindred", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/fubukyx/Crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HEYjv6XKT92BM6Q13roWoXEaePxPcYe9mcU3RbsGSi5h", - "symbol": "FRIEN", - "name": "Friends", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/HellArnt/crypto/main/Friends.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "3XGeHDD8HGTPS2RoAQqwy5d1Wrqh9pTtku6mQvvir3Xr", - "symbol": "ASC", - "name": "Aschonn Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Aschonn/AndrewCrypto/main/My_Coin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7c4WDszqXtSnP8AkzRJQy9cSKDAkxDy5mDgSKpsVf6ce", - "symbol": "SAGAN", - "name": "Sagan", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/kantrealb1/Sagan/main/Sagan.png", - "tags": ["social-token", "family-token", "utility-token", "stablecoin"] - }, - { - "chainId": 101, - "address": "81fjtbZmEqmaRjxoqhK7VirgwFYDRAyv5fryAGqw5A3z", - "symbol": "HUGE", - "name": "DudeHuge", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/DudeHuge1/crypto2/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HyyTfDqTqQZL14x1AABj64TErufRcRGeX9RmQbmqyS8R", - "symbol": "DHTC", - "name": "Hscktoolcrypto", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/hacktoolcrypto/token/main/token%20logo.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "Beemann1VaDTxXwKTRDM3ovrUYXQDyAq4od3yeFUGyBB", - "symbol": "BEEMAN", - "name": "BEEMAN Test Token", - "decimals": 5, - "logoURI": "https://avatars.githubusercontent.com/u/36491", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/beeman_nl" - } - }, - { - "chainId": 101, - "address": "3SVkD1JwJVoHujqLUA8PDjk7YzvqhEaPLjvtJW5B4VkJ", - "symbol": "PCOW", - "name": "Puppy Cow", - "decimals": 0, - "logoURI": "https://github.com/0xjpuff/puppycow/blob/main/puppycow2.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "C4ZUAZkaKRYTxbqqGz6kTgLhimxisBLYhWQvL16mTNdy", - "symbol": "EHT", - "name": "EggHead Token", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/ossiHQ/eggtoken/token_picture.png", - "tags": ["community-token", "utility-token"], - "extensions": { - "discord": "https://discord.com/invite/etUarp4x8y", - "twitter": "https://twitter.com/eggheadnft" - } - }, - { - "chainId": 101, - "address": "84TbR3kru8bRL4dtrZQkjn9csbxY59dWemv1v1nyt4ix", - "symbol": "TRICK", - "name": "TrickCoin", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/TrickCoin/Trick/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "E6s1cJi6Qs8EE14FNkF9pbNu1pwhLWGH2jMRZeStWsAk", - "symbol": "DAYC", - "name": "Dumb Ape Yacht Club Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/E6s1cJi6Qs8EE14FNkF9pbNu1pwhLWGH2jMRZeStWsAk/logo.png", - "tags": ["game-token", "meme-token", "nft", "gaming"], - "extensions": { - "description": "10,000 Seed phrases phished and stored on Solana.", - "discord": "https://discord.gg/8eHfqeyx3T", - "twitter": "https://twitter.com/DAYCNFT69", - "website": "https://dayc.art" - } - }, - { - "chainId": 101, - "address": "DBpegaZtddc9ux5HcRaTz1JRzGpQAYVxuMNrmYfXeMYP", - "symbol": "GSK", - "name": "GSKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mustacheman6000/GSKoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9a1QRtcd2drso6NqP5SSDw33JY4FzKjvPJup5Q5KS1JK", - "symbol": "JIN", - "name": "Jin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jakelovescoding/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FGLe9dhZGUAKJrPeDyCTc5bAEzcf5eTg22uPBktNCCjb", - "symbol": "BMKN", - "name": "Boomer Koin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/fibrou/boomerKoin/main/ouSauna.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "F8jzEHiKCTure7oCQZBfzsB48guwk6REh7dSLbXamBvz", - "symbol": "QBLB", - "name": "CubaLibre Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/QubaLibre/CyrptoCubaLibre/main/cuba-libre-cocktail-can-be-used-as-icon-logo-vector-5024289.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "51Yi21CBG7sejLmV7StpSWDdxdLAAzE8G7vK3r4VbUZh", - "symbol": "DOJAKOIN", - "name": "Doja Koin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/51Yi21CBG7sejLmV7StpSWDdxdLAAzE8G7vK3r4VbUZh/logo.png", - "tags": [ - "utility-token", - "game-token", - "game-currency", - "GameFi", - "Gaming" - ], - "extensions": { - "description": "Doja Koin is the future of gaming economies empowering players to transact across completely separate digital worlds.", - "twitter": "https://twitter.com/DojaKoin" - } - }, - { - "chainId": 101, - "address": "AzNYUQvxghXPMt647GQgJeMbAcdm5Ptujv1pRLsvoRGD", - "symbol": "BMK", - "name": "Biermarke", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AzNYUQvxghXPMt647GQgJeMbAcdm5Ptujv1pRLsvoRGD/logo.png" - }, - { - "chainId": 101, - "address": "GqVJTwFDLqiUzPtL5ZL7pF9i5xVCLixRHKqmg35QV9vK", - "symbol": "BOW", - "name": "BowCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GqVJTwFDLqiUzPtL5ZL7pF9i5xVCLixRHKqmg35QV9vK/logo.png", - "tags": ["BlastOffWaters", "Bow", "BowCoin"], - "extensions": { - "website": "https://blastoffwaters.wixsite.com/bowcoin" - } - }, - { - "chainId": 101, - "address": "E8j6isYBR5M4GZXa7PdwmmDLc2rZZTmf6fg624GhRZR3", - "symbol": "KOBE", - "name": "Kobe Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Giobertox/CryptoKobe/main/KobeLogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DqvZpqvtLWTTHRndKWoVhyzhx2xoJu3oc331Javk3Yhy", - "symbol": "CLCN", - "name": "CloudCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/iWritz/Test/main/logo%20(3).png", - "tags": ["social-token", "breeding-token", "air-drop-token"] - }, - { - "chainId": 101, - "address": "4no17WUTr7tbLgf8JFVf4X9oXAuoyyzdhaJDtjT9t5hs", - "symbol": "ISL", - "name": "Islanders", - "decimals": 8, - "logoURI": "https://cdn.jsdelivr.net/gh/koudydev/crypto/main/icon.png", - "tags": ["game-token", "gaming"] - }, - { - "chainId": 101, - "address": "Ee8pDo9eUaGpAcTm2bsqJryR86rJebGy3fYinNFZ7iqp", - "symbol": "JAVV", - "name": "JAVVDEV", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/zona8dev/Crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8we1VnnKCr769ZH7xiVFboMe3aLn6APYkGshxsm1QoNC", - "symbol": "IRLC", - "name": "IMREAL LIFE Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/cr0atz/IMREAL.LIFE/main/Logo.png", - "tags": ["social-token", "community-token", "air-drop-token"], - "extensions": { - "description": "IMREAL.LIFE the nexus to the Metaverse, where real life meets Virtual Reality.", - "instagram": "https://www.instagram.com/danny.imreal.life/", - "twitter": "https://twitter.com/IMREALLIFE3", - "website": "https://imreal.life", - "youtube": "https://www.youtube.com/channel/UChQy6AwkeyPQurNXD9Vfw_w" - } - }, - { - "chainId": 101, - "address": "DFTu8VAKvHQnYEvFdRq9GT2VDjJMk1pqiYFjw97c5SMZ", - "symbol": "DFT", - "name": "DeFutu", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DFTu8VAKvHQnYEvFdRq9GT2VDjJMk1pqiYFjw97c5SMZ/logo.png", - "tags": ["DeFi"] - }, - { - "chainId": 101, - "address": "G933gsbeophPijATin5bB77etQwJ3W5ZFQHCij5Vh5ST", - "symbol": "TKW", - "name": "tkwonik", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/G933gsbeophPijATin5bB77etQwJ3W5ZFQHCij5Vh5ST/logo.png", - "tags": [ - "utility-token", - "game-token", - "game-currency", - "GameFi", - "Gaming" - ], - "extensions": { - "instagram": "https://www.instagram.com/uzytkownik667/" - } - }, - { - "chainId": 101, - "address": "2NkAsDPWtwzEvjLrKk69fiT4gQEPDRLVEGYFZQTxQodp", - "symbol": "KUBER", - "name": "KuberMoney", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/KuberMoney/assets/main/kuber%20icon.png", - "tags": ["utility-token", "DeFi"] - }, - { - "chainId": 101, - "address": "6eWSFau7EMNYn9zzDQKD5aUYTvB6DVdmBGBuMmbCqNTf", - "symbol": "DU", - "name": "DU Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Dominican-CSSA/DU-Coin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "73mCphqBmBRpWHXS7YVNGnBVDriHEAriFAZzYtGgLk58", - "symbol": "PIP", - "name": "Pip", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/knoxharper/pep/main/noun-seed-418863.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "43zpT8NboRXhvV2v6nB8Qt1gpfrvFYTTbruooN6xP5y8", - "symbol": "ACRON", - "name": "Acron Coin", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/florin-liviu/flaviu/main/ACRONCRYPTO.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3XL4fXxANNvcspBhaLHvPYbfjR9deKyMtT8HP71RwKwu", - "symbol": "WETFISH", - "name": "Wet Fish Aquarium", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3XL4fXxANNvcspBhaLHvPYbfjR9deKyMtT8HP71RwKwu/logo.png" - }, - { - "chainId": 101, - "address": "2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h", - "symbol": "CRP/USDC", - "name": "Cropper LP token (CRP/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "3YbUB2SfgNidBsYr5qEm8xFqyhE8V3k1TkjeFNUYPAjH", - "symbol": "LIQ/CRP", - "name": "Cropper LP token (LIQ/CRP)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "2vW8WkXdDWST6JSAerZTsqRCAJKFsAkGTkYZx1gNDcGD", - "symbol": "ANGRYK", - "name": "AngryKitty", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2vW8WkXdDWST6JSAerZTsqRCAJKFsAkGTkYZx1gNDcGD/logo.png", - "tags": ["meme-token", "game-token", "nft", "gaming"], - "extensions": { - "description": "The funniest decentralized meme token for joy, profits and charity | NFT \u0026 Gaming", - "website": "https://angrykittytoken.com/" - } - }, - { - "chainId": 101, - "address": "3jZDCmmiVcBXv1saJaDag3ECnoBNLgr11LtFuQesgGXQ", - "symbol": "FNF", - "name": "Friends and Family", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/JadenChoi94/crypto/main/tiger.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "C9hyc9gbp39FtBPhSfUmeVQFjh3FT77T83f93yYGnPq3", - "symbol": "BLUEY", - "name": "Bluey", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/blueybagoon/crypto/main/RoseBluey.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3BjcHXvyzMsjmeqE2qFLx45K4XFx3JPiyRnjJiF5MAHt", - "symbol": "fcBTC", - "name": "Friktion BTC (Volt 01 Call)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3BjcHXvyzMsjmeqE2qFLx45K4XFx3JPiyRnjJiF5MAHt/logo.png", - "tags": ["friktion", "friktion-share", "volt-01", "volt-01-call"], - "extensions": { - "discord": "https://discord.com/invite/eSkK9X67Qj", - "github": "https://github.com/Friktion-Labs", - "medium": "https://friktionlabs.medium.com/", - "twitter": "https://twitter.com/friktion_labs", - "website": "https://friktion.fi" - } - }, - { - "chainId": 101, - "address": "4Hnh1UCC6HLzx9NaGKnTVHR2bANcRrhydumdHCnrT3i2", - "symbol": "fcSOL", - "name": "Friktion SOL (Volt 01 Call)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4Hnh1UCC6HLzx9NaGKnTVHR2bANcRrhydumdHCnrT3i2/logo.png", - "tags": ["friktion", "friktion-share", "volt-01", "volt-01-call"], - "extensions": { - "discord": "https://discord.com/invite/eSkK9X67Qj", - "github": "https://github.com/Friktion-Labs", - "medium": "https://friktionlabs.medium.com/", - "twitter": "https://twitter.com/friktion_labs", - "website": "https://friktion.fi" - } - }, - { - "chainId": 101, - "address": "6UA3yn28XecAHLTwoCtjfzy3WcyQj1x13bxnH8urUiKt", - "symbol": "fcmSOL", - "name": "Friktion mSOL (Volt 01 Call)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6UA3yn28XecAHLTwoCtjfzy3WcyQj1x13bxnH8urUiKt/logo.png", - "tags": ["friktion", "friktion-share", "volt-01", "volt-01-call"], - "extensions": { - "discord": "https://discord.com/invite/eSkK9X67Qj", - "github": "https://github.com/Friktion-Labs", - "medium": "https://friktionlabs.medium.com/", - "twitter": "https://twitter.com/friktion_labs", - "website": "https://friktion.fi" - } - }, - { - "chainId": 101, - "address": "GjnoPUjQiEUYWuKAbMax2cM1Eony8Yutc133wuSun9hS", - "symbol": "fcETH", - "name": "Friktion ETH (Volt 01 Call)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GjnoPUjQiEUYWuKAbMax2cM1Eony8Yutc133wuSun9hS/logo.png", - "tags": ["friktion", "friktion-share", "volt-01", "volt-01-call"], - "extensions": { - "discord": "https://discord.com/invite/eSkK9X67Qj", - "github": "https://github.com/Friktion-Labs", - "medium": "https://friktionlabs.medium.com/", - "twitter": "https://twitter.com/friktion_labs", - "website": "https://friktion.fi" - } - }, - { - "chainId": 101, - "address": "7wDh4VCTPwx41kvbLE6fkFgMEjnqw7NpGJvQtNabCm2B", - "symbol": "fcFTT", - "name": "Friktion FTT (Volt 01 Call)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7wDh4VCTPwx41kvbLE6fkFgMEjnqw7NpGJvQtNabCm2B/logo.png", - "tags": ["friktion", "friktion-share", "volt-01", "volt-01-call"], - "extensions": { - "discord": "https://discord.com/invite/eSkK9X67Qj", - "github": "https://github.com/Friktion-Labs", - "medium": "https://friktionlabs.medium.com/", - "twitter": "https://twitter.com/friktion_labs", - "website": "https://friktion.fi" - } - }, - { - "chainId": 101, - "address": "5SLqZSywodLS8ih6U2AAioZrxpgR149hR8SApmCB7r5X", - "symbol": "fcSRM", - "name": "Friktion SRM (Volt 01 Call)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5SLqZSywodLS8ih6U2AAioZrxpgR149hR8SApmCB7r5X/logo.png", - "tags": ["friktion", "friktion-share", "volt-01", "volt-01-call"], - "extensions": { - "discord": "https://discord.com/invite/eSkK9X67Qj", - "github": "https://github.com/Friktion-Labs", - "medium": "https://friktionlabs.medium.com/", - "twitter": "https://twitter.com/friktion_labs", - "website": "https://friktion.fi" - } - }, - { - "chainId": 101, - "address": "4sTuzTYfcE2NF7zy6Sy8XhVcNLa6JQSLrx3roy97n4sD", - "symbol": "fcMNGO", - "name": "Friktion MNGO (Volt 01 Call)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4sTuzTYfcE2NF7zy6Sy8XhVcNLa6JQSLrx3roy97n4sD/logo.png", - "tags": ["friktion", "friktion-share", "volt-01", "volt-01-call"], - "extensions": { - "discord": "https://discord.com/invite/eSkK9X67Qj", - "github": "https://github.com/Friktion-Labs", - "medium": "https://friktionlabs.medium.com/", - "twitter": "https://twitter.com/friktion_labs", - "website": "https://friktion.fi" - } - }, - { - "chainId": 101, - "address": "5VmdHqvRMbXivuC34w4Hux9zb1y9moiBEQmXDrTR1kV", - "symbol": "fcscnSOL", - "name": "Friktion scnSOL (Volt 01 Call)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5VmdHqvRMbXivuC34w4Hux9zb1y9moiBEQmXDrTR1kV/logo.png", - "tags": ["friktion", "friktion-share", "volt-01", "volt-01-call"], - "extensions": { - "discord": "https://discord.com/invite/eSkK9X67Qj", - "github": "https://github.com/Friktion-Labs", - "medium": "https://friktionlabs.medium.com/", - "twitter": "https://twitter.com/friktion_labs", - "website": "https://friktion.fi" - } - }, - { - "chainId": 101, - "address": "DPMCwE9z9jXaDVDti5aKhdgCWGgsvioz6ZvB9eZjH7UE", - "symbol": "fcSBR", - "name": "Friktion SBR (Volt 01 Call)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DPMCwE9z9jXaDVDti5aKhdgCWGgsvioz6ZvB9eZjH7UE/logo.png", - "tags": ["friktion", "friktion-share", "volt-01", "volt-01-call"], - "extensions": { - "discord": "https://discord.com/invite/eSkK9X67Qj", - "github": "https://github.com/Friktion-Labs", - "medium": "https://friktionlabs.medium.com/", - "twitter": "https://twitter.com/friktion_labs", - "website": "https://friktion.fi" - } - }, - { - "chainId": 101, - "address": "95sn4kgeJnnBfRCD8S2quu4HS9Y6vb7JDuXrarnmEjYE", - "symbol": "fcLUNA", - "name": "Friktion LUNA (Volt 01 Call)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/95sn4kgeJnnBfRCD8S2quu4HS9Y6vb7JDuXrarnmEjYE/logo.png", - "tags": ["friktion", "friktion-share", "volt-01", "volt-01-call"], - "extensions": { - "discord": "https://discord.com/invite/eSkK9X67Qj", - "github": "https://github.com/Friktion-Labs", - "medium": "https://friktionlabs.medium.com/", - "twitter": "https://twitter.com/friktion_labs", - "website": "https://friktion.fi" - } - }, - { - "chainId": 101, - "address": "EBPM7fvPN8EuA65Uc7DT9eGyDUZ1sqMLM8Rb8y2YxBYU", - "symbol": "fpSOL", - "name": "Friktion SOL (Volt 02 Put)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EBPM7fvPN8EuA65Uc7DT9eGyDUZ1sqMLM8Rb8y2YxBYU/logo.png", - "tags": ["friktion", "friktion-share", "volt-02", "volt-02-put"], - "extensions": { - "discord": "https://discord.com/invite/eSkK9X67Qj", - "github": "https://github.com/Friktion-Labs", - "medium": "https://friktionlabs.medium.com/", - "twitter": "https://twitter.com/friktion_labs", - "website": "https://friktion.fi" - } - }, - { - "chainId": 101, - "address": "THjfJ7GUeW6aMU6dzYYFVs5LnKNvmPzgk2wbh3bWagC", - "symbol": "fpBTC", - "name": "Friktion BTC (Volt 02 Put)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/THjfJ7GUeW6aMU6dzYYFVs5LnKNvmPzgk2wbh3bWagC/logo.png", - "tags": ["friktion", "friktion-share", "volt-02", "volt-02-put"], - "extensions": { - "discord": "https://discord.com/invite/eSkK9X67Qj", - "github": "https://github.com/Friktion-Labs", - "medium": "https://friktionlabs.medium.com/", - "twitter": "https://twitter.com/friktion_labs", - "website": "https://friktion.fi" - } - }, - { - "chainId": 101, - "address": "CxHG1tPkeEHsAVmPF2UrjZK3W719J5DGFgMaLtUkBoeP", - "symbol": "fpMNGO", - "name": "Friktion MNGO (Volt 02 Put)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CxHG1tPkeEHsAVmPF2UrjZK3W719J5DGFgMaLtUkBoeP/logo.png", - "tags": ["friktion", "friktion-share", "volt-02", "volt-02-put"], - "extensions": { - "discord": "https://discord.com/invite/eSkK9X67Qj", - "github": "https://github.com/Friktion-Labs", - "medium": "https://friktionlabs.medium.com/", - "twitter": "https://twitter.com/friktion_labs", - "website": "https://friktion.fi" - } - }, - { - "chainId": 101, - "address": "SoAnGsHVqSyaN4MjWoPCcftC1V6oSeNxLJjF5TXrtuL", - "symbol": "fcRAY", - "name": "Friktion RAY (Volt 01 Call)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SoAnGsHVqSyaN4MjWoPCcftC1V6oSeNxLJjF5TXrtuL/logo.png", - "tags": ["friktion", "friktion-share", "volt-01", "volt-01-call"], - "extensions": { - "discord": "https://discord.com/invite/eSkK9X67Qj", - "github": "https://github.com/Friktion-Labs", - "medium": "https://friktionlabs.medium.com/", - "twitter": "https://twitter.com/friktion_labs", - "website": "https://friktion.fi" - } - }, - { - "chainId": 101, - "address": "At7RLMbA6ZUjj7riyvFq2j5NHQ19aJabCju2VxLDAqso", - "symbol": "BGS", - "name": "Battle of Guardians Share", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/At7RLMbA6ZUjj7riyvFq2j5NHQ19aJabCju2VxLDAqso/logo.png", - "tags": ["GameFi", "NFT", "Utility-token", "Metaverse", "Governance"], - "extensions": { - "medium": "https://medium.com/@battleofguardians", - "telegram": "https://t.me/battleofguardianschat", - "twitter": "https://twitter.com/BOG_Official_", - "website": "https://battleofguardians.com/" - } - }, - { - "chainId": 101, - "address": "4r5xzwBHZ6gmNQRfwXDwmmDK4T2DBmuVo4PNVqaSucud", - "symbol": "PFRG", - "name": "Project Forge", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4r5xzwBHZ6gmNQRfwXDwmmDK4T2DBmuVo4PNVqaSucud/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "4NmpfHowmyUyZBfw4u8CeTtVUdwYSDXHH7yQnzZuRsZh", - "symbol": "AAA", - "name": "DEV TOKEN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/stakeAAA/token-list/main/assets/mainnet/4NmpfHowmyUyZBfw4u8CeTtVUdwYSDXHH7yQnzZuRsZh/logo.png", - "tags": ["DEV", "DApp"], - "extensions": { - "website": "https://www.soldev.app/" - } - }, - { - "chainId": 101, - "address": "DNJjw6FfDZpLEm3gp58yRsPQVHtikJ9DYjyRymaWxd47", - "symbol": "MTVC", - "name": "Metaverse Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/tgraszl/Metaverse-Coin/main/logo.png", - "tags": ["utility-token", "social-token"] - }, - { - "chainId": 101, - "address": "6terYqZ87xoDQMKfynYZRJ7jCDc6WVZ5RUkoJVFX3jLT", - "symbol": "KARSTSHEPHERD", - "name": "Karst Shepherd Dog", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6terYqZ87xoDQMKfynYZRJ7jCDc6WVZ5RUkoJVFX3jLT/logo.png", - "tags": ["meme-token", "community-token"], - "extensions": { - "website": "http://karstshepherddog.io/" - } - }, - { - "chainId": 101, - "address": "5137Pz5jxBJ5UqABgSFshhEUv5uAz4WLqtg1Bi4WZk1s", - "symbol": "SVBC", - "name": "SVBCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Woslights/svbcoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FenNHfcDqNKqWXsqNm4uKNvkDBYpuhLrRY5TKQT4D7A4", - "symbol": "CBD", - "name": "Carbonado", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/punikus/Carbonado-token/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8ZywPUWBPusFYW9emmhcnjSjCYahEABGmptepbBwGUUQ", - "symbol": "SIMC", - "name": "SIM CRYPTO", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SIMCrypto/crypto/main/Asset%201.png", - "tags": ["social-token"], - "extensions": { - "github": "https://github.com/SIMCrypto" - } - }, - { - "chainId": 101, - "address": "FUd2R5Ha7uZ8KL6Tk9Bi6DJiuMrAkcRoUzN5EaAJhKZ5", - "symbol": "WHZ", - "name": "Wheelz Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MrWheels2/wheelzcoin/main/wheelzcoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GGJTaYGXVqoiVnyweDAEA24NrMYgau9cCkhgDYbxybbE", - "symbol": "INFY", - "name": "Infinity Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Mr-Bazoo/Infinity-Token/main/INFYlogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6LrTDQBxNsFguSAqMRBzApFRg3B77MbTRMGaiCsKUPj8", - "symbol": "CRAZY", - "name": "CRAZY TOKEN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/crazymeta/crazytokens/main/gitlogo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "BAGcAKTb5xooqS1pDkaNBJnD2WYaK7SuLkntyTi7Dbi7", - "symbol": "BRAINY", - "name": "Brainy Ape Gang", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/brainyapegang/token-logo/30e21db93a7a14a8fc0ecb1cf5a7c6c2b51c3b26/brainyapegang/logo.png", - "tags": ["social-token", "utility-token"], - "extensions": { - "twitter": "https://twitter.com/brainyapegang" - } - }, - { - "chainId": 101, - "address": "AuPHBMeTXSHQENQMkvVq1aiSuykvBUrRgvQwByBSzmsV", - "symbol": "BRKS", - "name": "Brookes Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/lucas-brookes/mainnet/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DUcJxBoyB9MP72xT3w3Jc82ycGGuenUCHfT5hGvAL21c", - "symbol": "CAST", - "name": "Bettercast", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/kingfisherfox/bettercast-coin/main/logo.png", - "tags": ["social-token", "community-token", "meta-token"] - }, - { - "chainId": 101, - "address": "D5YJf7nqSp9JtQpMcZCthdEpMghK2gKmkLMLi2RhKSJt", - "symbol": "$KAIDO", - "name": "Kaidos Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/D5YJf7nqSp9JtQpMcZCthdEpMghK2gKmkLMLi2RhKSJt/Kaido.jpg", - "tags": ["utility-token"], - "extensions": { - "website": "https://kaidostempest.com" - } - }, - { - "chainId": 101, - "address": "PHnyhLEnsD9SiP9tk9kHHKiCxCTPFnymzPspDqAicMe", - "symbol": "pHONEY", - "name": "pre-IDO HONEY", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/PHnyhLEnsD9SiP9tk9kHHKiCxCTPFnymzPspDqAicMe/logo.svg", - "tags": ["utility-token", "DeFi", "Governance"], - "extensions": { - "discord": "https://discord.gg/honeydefi", - "website": "https://honey.finance" - } - }, - { - "chainId": 101, - "address": "3LGLAKwV7aK6sr2fsRjr6XcXNPHyMeeqFDzJz6rNJnK7", - "symbol": "DVL", - "name": "DigiVelly", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/digitalyug/data/main/3.png", - "tags": ["social-token", "community-token", "meta-token"], - "extensions": { - "twitter": "https://twitter.com/digivelly", - "website": "https://digivelly.com" - } - }, - { - "chainId": 101, - "address": "BH9mdKEdzjxHgNdUbjo4EsQMq629kbjoVgwLNZNMP74Y", - "symbol": "NPT", - "name": "PolarToken", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Nicolas-Gatien/PolarToken/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CyNssnsGPUK2j4GmdAbahwL6U229YL9nsz2e1gyBf3by", - "symbol": "KUNAL", - "name": "KUNAL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CyNssnsGPUK2j4GmdAbahwL6U229YL9nsz2e1gyBf3by/kunal.png", - "extensions": { - "twitter": "https://twitter.com/kb24x7", - "website": "https://kunalbagaria.com/" - } - }, - { - "chainId": 101, - "address": "WBifqxoQMuYZza6tHiMTaJbU3fAUpNnpzj92mcgyvYs", - "symbol": "GWN", - "name": "GOODWIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/kevgoodwin/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3ycJ4cmmYdxsUra4hnqhAjKDKb1ez4YudbNdRqqTpnJE", - "symbol": "GNKN", - "name": "Green Koin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Greenjuicesystems22/CryptoGreen/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3Xiq2eivd5dXqJvDgzu1pja9gVaF5UUxBK2C5pASk88D", - "symbol": "RXP", - "name": "R3G3xP Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ander1044/crypp2/main/logo.png", - "tags": ["social-token", "community-token", "meta-token", "meme-token"] - }, - { - "chainId": 101, - "address": "4FxPQ8TT8gpsuMSCtSYyYfq5yWpsaScDJ6qmMfunGnHx", - "symbol": "PEEP", - "name": "PEEPCOIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/peppeschizzo/crypto/main/peep.png", - "tags": [ - "social-token", - "community-token", - "meta-token", - "utility-token", - "DeFi", - "Governance" - ] - }, - { - "chainId": 101, - "address": "674PmuiDtgKx3uKuJ1B16f9m5L84eFvNwj3xDMvHcbo7", - "symbol": "$WOOD", - "name": "Mindfolk Wood", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Alfred-builder/Alfred-builder/main/wood.png", - "tags": ["utility-token"], - "extensions": { - "coingeckoId": "mindfolk-wood", - "discord": "https://discord.gg/mindfolk", - "twitter": "https://twitter.com/mindfolkART", - "website": "https://www.mindfolk.art/" - } - }, - { - "chainId": 101, - "address": "HqWzctSNnURY1D64mT7TPNf1GNnkPqssXipYQ5dhnQH1", - "symbol": "GLDX", - "name": "GoldiLox", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/knightscode94/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7mfnYz5BmZJsVZkQCDbtPBmk3dhQAYRJpdKjG2mTJQij", - "symbol": "SIN", - "name": "Sinner Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7mfnYz5BmZJsVZkQCDbtPBmk3dhQAYRJpdKjG2mTJQij/logo.png", - "extensions": { - "discord": "https://discord.gg/NqFkWNPv", - "twitter": "https://twitter.com/SinnerCircle__", - "website": "https://sinnercircle.io" - } - }, - { - "chainId": 101, - "address": "3BdbNjY9F823ZqAD3co5AijGY9pyowtPxr1DswB6EHVx", - "symbol": "MPTN", - "name": "Memphis-Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jon1217/jon/main/unnamed.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "43Kd1P5yC9kBA3w2JEMtUv7CjGexnkKHhhxrqksqEsDW", - "symbol": "PSC", - "name": "Psy Cat Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Samar1221/token-list/main/assets/mainnet/43Kd1P5yC9kBA3w2JEMtUv7CjGexnkKHhhxrqksqEsDW/darckcat.png", - "tags": [ - "NFT", - "dao", - "utility-token", - "meta-verse", - "game", - "play2earn", - "governance" - ] - }, - { - "chainId": 101, - "address": "3B5J4ZW3Yr55iirwP1JzJCrWcm1ACM3dEQAsjpy52rXE", - "symbol": "LUV", - "name": "Love Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/connectgca/cr/main/Pride.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "96tb6h21jQB31C6BZiPAKLJsTKyoiTqVJ6ufbnNbhMbZ", - "symbol": "IRT", - "name": "InJesterr Reward Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/AllClassInvestments/InJesterr-Reward-Token/main/IRT.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8i4P3iuMkXMWycQU7oNVPJo4SnM5R2GXVqcCZvVQJ236", - "symbol": "CNON", - "name": "SKUNTA COIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/teharchitect/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "71Hifmc5ihznRmbbzCDWfLeGbD8eubeYdDFsASGZfHmp", - "symbol": "OC", - "name": "Only Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Jonas-Fxl/crypto/main/coin-icon-png-6.jpg.png", - "tags": ["social-token", "community-token", "meta-token", "meme-token"] - }, - { - "chainId": 101, - "address": "HmZBR5PPsv1i23fHgFFNAYogG3jHhxKix9heM4Rx56t6", - "symbol": "PEACE", - "name": "Peacetache Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/bozga-andrei/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2WWK14D4cdWuc9TtUPwbXMUZGyk1PrQYej1NVsPNsBeS", - "symbol": "ORCS", - "name": "The Orcs", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/TheOrcs/token-list/main/assets/mainnet/2WWK14D4cdWuc9TtUPwbXMUZGyk1PrQYej1NVsPNsBeS/logo.png", - "tags": [ - "NFT", - "dao", - "utility-token", - "meta-verse", - "game", - "play2earn", - "governance" - ], - "extensions": { - "discord": "https://discord.com/invite/theorcs", - "twitter": "https://twitter.com/TheOrcsNFT", - "website": "https://theorcs.io" - } - }, - { - "chainId": 101, - "address": "C7i7JSHC4C3yaiVDREkx14yPSqso4LSFus2jnBD3nGX", - "symbol": "LJG", - "name": "LJG Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/LouisJGleason/LJGCoin/main/logo.jpg", - "tags": ["LJG", "LJG-Coin"], - "extensions": { - "twitter": "https://twitter.com/louisgleason", - "website": "https://www.louisgleason.com" - } - }, - { - "chainId": 101, - "address": "JDkv5fH7K2twbzrFKNGo6uFjWwtHjhRCALoQsHB66X3A", - "symbol": "BOKT", - "name": "bookcointoken", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/bookcointoken/crypto/main/BookLOGO.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "C7gENDPyayjE2iw6p55J5ELtcDYzQbe91JEhLjH2yxAR", - "symbol": "SRD", - "name": "SolRider", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/C7gENDPyayjE2iw6p55J5ELtcDYzQbe91JEhLjH2yxAR/logo.png", - "tags": [ - "game", - "play2earn", - "community-token", - "utility-token", - "governance" - ] - }, - { - "chainId": 101, - "address": "8Cs8n1mVr4nvzYdpwth72nCpWyWsrviapJHFAnUnP8iH", - "symbol": "FLAKE", - "name": "Snowflakes", - "decimals": 6, - "logoURI": "https://cdn.discordapp.com/attachments/902244343174287391/907420388882014218/snowflake_1.png", - "tags": ["community-token", "utility-token", "IcyBearz", "Snowflakes"], - "extensions": { - "twitter": "https://twitter.com/icybearznft", - "website": "https://icybearz.art" - } - }, - { - "chainId": 101, - "address": "E6GB3TZKzEngQyMyMJjX7Gy3UxAQJkBwnZcrzhnnDbZh", - "symbol": "FETT", - "name": "Fett Finance", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ffinance/crypto_fett_finance/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8dwADjpVptdHtyPxRTsyVZJgWSaLLPfNNWeYRY1ZXyjb", - "symbol": "SWBO", - "name": "SweetBoiCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/sweetboicoin/crypto/main/bret-coin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2BoMWBCQhXx6XJyQG1T6SiPb2gMoFdbei4eGoKJLrHb4", - "symbol": "TYL", - "name": "ToYuLi Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2BoMWBCQhXx6XJyQG1T6SiPb2gMoFdbei4eGoKJLrHb4/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://toyuli.shop" - } - }, - { - "chainId": 101, - "address": "3A33g3RFVQ5p3mi71ELYd12XxLTp4EbUN3K1crKNFgE8", - "symbol": "Titan", - "name": "Titan Coin", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3A33g3RFVQ5p3mi71ELYd12XxLTp4EbUN3K1crKNFgE8/logo.png", - "tags": ["social-token", "Titan"] - }, - { - "chainId": 101, - "address": "CP2eDMhsHBoBT28afkPEqSyQkt93TgxdBvG3mFUMA34V", - "symbol": "AIR", - "name": "AIRKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/sachaCOOL/crypto/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3AEouQgf9NMVfdLRmfmjbBfxsYRN9K8aWbC1iu8KKNdU", - "symbol": "ANC", - "name": "Anura Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/sufigueroa/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Cz9rzVfaoPP2rYePDzAnCge7UsEjKBPi5ZXHJfUng4fc", - "symbol": "CAS", - "name": "Cyborg Apes Society", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Cz9rzVfaoPP2rYePDzAnCge7UsEjKBPi5ZXHJfUng4fc/logo.png", - "tags": ["social-token"], - "extensions": { - "discord": "https://discord.com/invite/W8TrcN99", - "twitter": "https://twitter.com/CyborgApesNFT", - "website": "https://www.cyborg-apes.com/" - } - }, - { - "chainId": 101, - "address": "AgK9ehuBo4dUgcztxnGCpFFjZ4jz81Em4sQpxZfUmPdg", - "symbol": "ELHC", - "name": "elhcoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/hamzaelhoub/crypto/main/ELHC.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "B7mrssXBAkgKzodqKAX96t2jxvUmRxYfCVJbRwfXavJu", - "symbol": "PALMICHE", - "name": "Palmiche Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/Palm1che/assets/main/Screenshot%202022-01-02%20at%2001.24.27.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "77Dz5V9MB97KNR1qhdvNg9gAUjE8xBCjvSPRNi9NZu4D", - "symbol": "BICO", - "name": "Big Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jas0nn1/dankcoin/main/monkeyLogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7me1NGyaudu2HQSviF1haqczf7zekudKmZoEmkEkxCfY", - "symbol": "BLC", - "name": "Black Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/onahMo/crypt/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "619Bg4JtPfsZ68qQYHwejq97nn2PQMPziS8dTWeu9ARK", - "symbol": "GNC", - "name": "GnestaCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ratman75/GnestaCoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9fQcucBMK8XghiUj6J4WXWJWuytmrCQFfzA31CYhgWMC", - "symbol": "OKTO", - "name": "Okanagan Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/cmkgamer/okanaganToken/main/LIONHEADONLY.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "J8UCMUQTTjthdRMHsYNoZTSfbVypD8JProEytWep4xMg", - "symbol": "XXY", - "name": "XXY Token", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/bubiblomer/solana-xxy-token/master/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "Fd9ZJHMCyaaFqTsbJMgPX3Cj3953zYW91Qfw8SNdxoaf", - "symbol": "SBDA", - "name": "Subida", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/awedjob/crypto/ce0ef5ce4840996fa8d8f133d98a269a04eba53f/Subida%20Logo03.svg", - "tags": ["social-token"], - "extensions": { - "website": "https://affirmative.org/sbda/" - } - }, - { - "chainId": 101, - "address": "7xHc28rXRwSDq7GotGj6uKbZtYcLyg2cjQSPePBRXeRw", - "symbol": "CF", - "name": "Capital Fusion Pro", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Cyclopsticks007/CapitalFusion/main/CapitalFusion1.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "2BoFNdaESb6NAMBMkycUS37FDc2VgxzdzSuxVvurcn1H", - "symbol": "JACCI", - "name": "Jacci Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/minman1979/spl-token-JACCI/main/logo.png", - "tags": [ - "social-token", - "model-token", - "meme-token", - "solo-token", - "amature-token", - "adult-token" - ], - "extensions": { - "description": "Jacci Coin represents her passion for adult entertainment.", - "website": "https://JacciOnline.com/" - } - }, - { - "chainId": 101, - "address": "5GzDPyjczJgYs6ubZhogNxaMvQwHmLcFrGujZnxP9bhF", - "symbol": "SXE", - "name": "EDGE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/xblackbytesx/edge/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5dVbqgiupbuteiny8u6WJXUGeZwWDEakfgjrBpgHdz28", - "symbol": "Amour", - "name": "Amour", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/micksavioz/crypto/main/amour.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "9UJRqbjuT9BDw4pWQLd2LjVkiDXK7aKB7miLtNkmhVnu", - "symbol": "Merci", - "name": "Merci", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/micksavioz/crypto/main/merci.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "7jfDomrA5DRHxk9fHU7RfyQD4iftEdXkBC4XhvvUEfnS", - "symbol": "NAJ", - "name": "NAJJI KOIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/nathanellevi223/najji/main/logo-1.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AzED5FxiRrY1wd2Kt3epBTRZz2febfD8JGr2KzAvoUQZ", - "symbol": "666", - "name": "LuciCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Sozly/LuciCoin/main/512BjjNrVPSL._AC_.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GFJUGdpei3JWTfQoHMzG1vN1JNbDQ1kfSh5TWDvkoPJQ", - "symbol": "GOLFV", - "name": "Golf Village Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Smith5172/GolfVillageLogo/main/GVlogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EUP79aJSngmFW8nhv7eqU4Beg8mhUfYyh6x2TNNMRT5s", - "symbol": "WECOIN", - "name": "WECoin", - "decimals": 7, - "logoURI": "https://raw.githubusercontent.com/XiJinping19530615/CCP_Flag/main/Flag_of_the_People's_Republic_of_China.png", - "tags": ["peoples-token", "CHN-token", "security-token", "PLA-token"] - }, - { - "chainId": 101, - "address": "FdDEakNRY4k3orJuBXUcm9VkcXd8YXVPjuG5WuRN2tWH", - "symbol": "POOS", - "name": "Legend Of PooShi", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/ba3893b7f7822992a645bc130f78fa433baff2d3/assets/mainnet/FdDEakNRY4k3orJuBXUcm9VkcXd8YXVPjuG5WuRN2tWH/logo.png", - "tags": [ - "community-token", - "meme-token", - "utility-token", - "game-token", - "game-currency", - "GameFi", - "Gaming", - "metaverse", - "play-to-earn", - "play-to-contribute" - ], - "extensions": { - "discord": "https://discord.gg/WgxU6RSakP", - "github": "https://github.com/LegendOfPooShi", - "serumV3Usdc": "GPa4iZhDPJfGUj3RAdpuR1EZ4Xgmstn2CC7E9QVDukKC", - "twitter": "https://twitter.com/legendofpooshi", - "website": "https://LegendOfPooShi.com" - } - }, - { - "chainId": 101, - "address": "35gtGLFoJUaZ4ntd4xNJchw4dSgRBQDPzunbtx3cmSSt", - "symbol": "BDSM", - "name": "BDDSSM", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/micksavioz/crypto/main/bsdm.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2hvey8VphFCoqXJk53uHmVfa9ebKqY4epBGVgSiYyfp2", - "symbol": "Fuck", - "name": "Fuck You", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/micksavioz/crypto/main/fuck.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5G48ogdSHQgFjKZB76RKhyk85zKD5w3ocFMUYeaBVLCd", - "symbol": "NC4WD", - "name": "North Country 4WD", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/NC4WD/Crypto/main/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "BX9FzBoM3nHFARJYAyyBPQZAqASJvu87fJmoes9tmv67", - "symbol": "CRME", - "name": "Crysmode", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MisterManku/crypto/main/crysmodelogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6btpYQf9aRuLs1CrE3UBuxyyatyTVQ1t6dPFJwfzBk2B", - "symbol": "CORP", - "name": "UniMetaCorp", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/sergpelayo/UniMetaCorp/main/ISOTIPO.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "JBFaqJ5JyCD1qw1gXzaiUyAJ6SNHRmnUBEgofAgcfXVf", - "symbol": "PETAL", - "name": "Lotus Petal", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/ThiagoMeneghin/LotusPetal/main/LotusPetal.png", - "tags": ["community-token", "utility-token"], - "extensions": { - "description": "Lotus Petal Coin is a token for the MTG Community." - } - }, - { - "chainId": 101, - "address": "1dHQHYsgcTbhm54kq9oHBuV2Wzx1Da4pQuBNZFjHyDv", - "symbol": "T3X", - "name": "Terminal3 Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/1dHQHYsgcTbhm54kq9oHBuV2Wzx1Da4pQuBNZFjHyDv/logo.svg", - "extensions": { - "website": "https://terminal3.com" - } - }, - { - "chainId": 101, - "address": "9Qy6rKw5GtaEQibYAr9EDBjxL644XN9DXJBXcM9cLk7G", - "symbol": "WALT", - "name": "WalthallCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/AWalthall/Crypto-logo/main/Logo_2.0.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "A2278mqYGxHP26opZuLbbcUj9HWkdctbHHauDwqVsYz9", - "symbol": "MCC", - "name": "Milo Cat Coin", - "decimals": 0, - "logoURI": "https://github.com/bzlxhb/crypto/blob/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8CBaQqTTrt2MQc3EsaZqtm87sivjwJgHX1FqXuHBDWWx", - "symbol": "SQRT", - "name": "Squirt Coin", - "decimals": 9, - "logoURI": "https://i.ibb.co/QNC0j8T/favicon.png", - "tags": [ - "social-token", - "model-token", - "meme-token", - "solo-token", - "adult-token" - ], - "extensions": { - "description": "Squirt token is the utility token for uptimum pleasure.", - "website": "https://pleasure-fi.com/" - } - }, - { - "chainId": 101, - "address": "HPeWNsBtYtfMeYS6Sqwb3uvDvuarekCnrjCq41XqMQdf", - "symbol": "LITTE", - "name": "LitteCoin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/EbenezerLitte/logo_assets/main/assets/litte_logo.png", - "tags": ["general-token", "media-coin", "social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "CiAkzbxkQCyY7hFtNeUHMbqiL8CXtbWaRnUJpJz5sBrE", - "symbol": "PLUT", - "name": "PlutusFi", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CiAkzbxkQCyY7hFtNeUHMbqiL8CXtbWaRnUJpJz5sBrE/logo.png", - "tags": ["social-token", "community-token"], - "extensions": { - "description": "PlutusFi is a SocialFi application for Decentralized Social Trading", - "instagram": "https://www.instagram.com/plutusfi", - "telegram": "https://t.me/plutusfi", - "twitter": "https://twitter.com/plutusfi", - "website": "https://plutusfi.io" - } - }, - { - "chainId": 101, - "address": "Fnh2L7St6meFyNamoKa2axffnbLJgpJkASJMT5k51Dro", - "symbol": "TSRCT", - "name": "Tesseract", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/PapaBearDoes/TesseractCrypto/main/logo.png", - "tags": ["meme-token", "community-token"], - "extensions": { - "description": "Tesseract Comics and Games, Glenwood Springs, CO", - "twitter": "https://twitter.com/tesseractcomics", - "website": "http://tesseractcomicsandgames.com" - } - }, - { - "chainId": 101, - "address": "EVRDAsLpiJ8VYQU34vUfdcyVqhZBMDaEzb6RFKJ4NWqQ", - "symbol": "CRUM", - "name": "Bread Crumbz", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/sirEgghead/breadcrumbz/main/bread_crumbz.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6mCgDJDgVQfM5jdXPxwxXBmkBLafnqsBuyKPmTrwwb6h", - "symbol": "MEIST", - "name": "Meist Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/sayedaman1/meist/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FAxygYQuLWUZNYh18b7ikn4oaeCJB63ATEga4fDxDvpX", - "symbol": "LGB", - "name": "Lets Go Brandon Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/FreedomSeeds/logo/main/LGB-logo.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "8HpZjkbjCTFNP4o1guxMuNC4LqbauAoyKZdTBv9cBnR6", - "symbol": "EAST", - "name": "Easter Inu", - "decimals": 0, - "logoURI": "https://storage.cloud.google.com/solana-crypto/easter-bunny.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4oKouQ3Q97Ns2EjdiGp9NFHvXnXBXZfKaYU22KLpxpjR", - "symbol": "BBC", - "name": "BB Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/madtc/BB_Coin/main/bb.PNG", - "tags": ["social-token", "meme-token", "sol-token", "BB-Coin", "BBC"] - }, - { - "chainId": 101, - "address": "9xST7WVW9m92rojrv7tQk3NDeLmvzTiRzMErJvKBqWTM", - "symbol": "INSC", - "name": "Instant Coin", - "decimals": 0, - "logoURI": "https://github.com/spenserbuck/crypto/blob/main/InstantCoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GfXwysjNzyEVFfE9Mf4y9oAkQkA3g4CFrcpkLA5Zhv6s", - "symbol": "MANTRA", - "name": "Om Mani Peme Hung", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GfXwysjNzyEVFfE9Mf4y9oAkQkA3g4CFrcpkLA5Zhv6s/logo.svg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Bmq9F7F3MzDW55kTJGr4xiEF8Ssiz7Wvdk9E1Vf4rmyE", - "symbol": "SCOUSE", - "name": "Scouse Token", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Bmq9F7F3MzDW55kTJGr4xiEF8Ssiz7Wvdk9E1Vf4rmyE/logo.svg", - "tags": ["meme-token", "social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "FhuY6rZoeQH3WKEXFs1NitsrvHf9axPvzKVcXHrNh94E", - "symbol": "TREAT", - "name": "doggos", - "decimals": 0, - "logoURI": "https://arweave.net/inoGzbyUQa7_9fQzDTSY5f5b4g4XUTGNa-oepqXo9qg", - "tags": ["NFT", "utility-token"], - "extensions": { - "discord": "https://discord.gg/doggos", - "twitter": "https://twitter.com/DoggosNFTs", - "website": "https://doggos.dog/" - } - }, - { - "chainId": 101, - "address": "5tfvSnzrWQKB6yfGT2ATCzpNfsj4oui5fE8oZghejLev", - "symbol": "AUTH", - "name": "Authentic", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/AUTHTeam/crypto/main/Auth_Token.jpg", - "tags": [ - "community-token", - "meme-token", - "utility-token", - "game-token", - "game-currency", - "GameFi", - "Gaming", - "metaverse", - "play-to-earn", - "play-to-contribute" - ], - "extensions": { - "discord": "https://discord.gg/U8sFrVyzPA" - } - }, - { - "chainId": 101, - "address": "81RduLapa86mKSEhCjqSgCoeK69togqNACj7eQZdmEbJ", - "symbol": "TAADE", - "name": "TAADE Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/TeeeJays/Crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BLbJBC1XJqQgRLTumMDnkVm1YeZLzfY8M2Yz5D57J2aK", - "symbol": "CAP", - "name": "DaddyEvans", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BLbJBC1XJqQgRLTumMDnkVm1YeZLzfY8M2Yz5D57J2aK/logo.png" - }, - { - "chainId": 101, - "address": "8sqAsqGA3YwzMDxgxwpugw2N7z3bE8WQaXshJeZkJC1w", - "symbol": "ZADDY", - "name": "Oh Zaddy", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8sqAsqGA3YwzMDxgxwpugw2N7z3bE8WQaXshJeZkJC1w/logo.svg", - "tags": ["meme-token", "social-token"] - }, - { - "chainId": 101, - "address": "8StwRjjYtPQMXYDSEM4amjNfYaxXjUKfHBLUxWBgyypX", - "symbol": "MSARI", - "name": "Msarii Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/a1-msarii/Msarii/master/msarii.png", - "tags": [ - "general-token", - "media-coin", - "community-token", - "fund-management", - "utility-token" - ] - }, - { - "chainId": 101, - "address": "7nHkg14CwobcEj3FyL4E84dDoheES8BnpZhD51D8HXLC", - "symbol": "BRANT", - "name": "BRANT Coin", - "decimals": 0, - "logoURI": "https://github.com/brandon18lawson/CRYPTO/blob/main/147961747-91eababa-a853-4515-bd71-869a44642c31.jpg", - "tags": ["Stake-token"] - }, - { - "chainId": 101, - "address": "3T4zD5zD7wyZKY84tmoZCvscLugyF8RPw28G8cHSf9Hg", - "symbol": "VAN", - "name": "Vannecy", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3T4zD5zD7wyZKY84tmoZCvscLugyF8RPw28G8cHSf9Hg/logo.png", - "tags": ["general-token", "media-coin", "NFT", "Artiste", "utility-token"] - }, - { - "chainId": 101, - "address": "3GrAKSRXAbnNaF2ht4racfB2pHpHD8QS1E5vHdMHJNZG", - "symbol": "BIJLI", - "name": "Bijli Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/iayanpahwa/bijli-coin/main/assets/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HhYP6ff4uRJU19k7RcXHZ2FACCSpNaqVu3zsw5R6dRz4", - "symbol": "WAYNE", - "name": "Wayne Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/WayneChattillon/token-list/488a6b70aba807ab8902477b6ec01fef578aaddc/assets/mainnet/wayne2.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Dj9PmgbVBCpaqmwqrgq8LxFusHJr4QEmUuSRDRh3x4mS", - "symbol": "CADEAU", - "name": "CADEAU for YOU", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/GJJFoundation/cadeau/main/kadoPNG.png", - "tags": ["cadeau-token", "gift-token", "solana", "gift"] - }, - { - "chainId": 101, - "address": "F24swYwis4GW7Th9pkU1GE1JfPDBAbb71FLc6mbfauV6", - "symbol": "BATS", - "name": "Bats Coin", - "decimals": 1, - "logoURI": "https://raw.githubusercontent.com/Jonkolander/batscoin/main/Doge-with-a-Baseball-Bat.jpg", - "tags": ["meme-token", "social-token", "community-token"] - }, - { - "chainId": 101, - "address": "FHDk1XZrp8puHS2CJb8ycSzgos1XoN16t8rKfVA51DoP", - "symbol": "AKH", - "name": "AKHOR", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FHDk1XZrp8puHS2CJb8ycSzgos1XoN16t8rKfVA51DoP/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BELEkfxRkTdNexHtsJ8sk6RBx1ZuNcQmfpkKSNgq8S7N", - "symbol": "BELE", - "name": "Baby Elephant", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BELEkfxRkTdNexHtsJ8sk6RBx1ZuNcQmfpkKSNgq8S7N/logo.png", - "tags": ["NFT", "general-token", "meme-token", "community-token"], - "extensions": { - "discord": "http://discord.gg/JH8jAQ9THa", - "twitter": "https://twitter.com/BabyElephantSol", - "website": "https://www.babyelephantsol.com/" - } - }, - { - "chainId": 101, - "address": "14ChupvJzBeS82ed9n8eymV1AR5U4Z52n2ZsDMjkiFRi", - "symbol": "JBX", - "name": "Juicebox Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/JuiceboxCreative/token/main/logo.png", - "tags": ["social-token"], - "extensions": { - "facebook": "https://www.facebook.com/juiceboxcreative", - "instagram": "https://www.instagram.com/juiceboxcomau/", - "twitter": "https://twitter.com/juiceboxcomau", - "website": "https://www.juicebox.com.au" - } - }, - { - "chainId": 101, - "address": "EeXSXYzFKeaTq7SoKnM4xZ5exJCi6wUkQMS8edzrEPVJ", - "symbol": "HEPG", - "name": "HEPENG", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/andiesanchez/crypto/main/HepengToken.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "84HaZttqci5gy7M3YJkd5fc9ftEoz3Ldm7Cm5WCfoWUe", - "symbol": "HDT", - "name": "HaDaT3ch", - "decimals": 0, - "logoURI": "https://github.com/hadat3ch/crypto/blob/main/logo.png", - "tags": [ - "general-token", - "social-token", - "media-coin", - "NFT", - "gaming-token", - "gambling-token", - "utility-token" - ] - }, - { - "chainId": 101, - "address": "6NPAkmE9u2ChUKUPYkVhdsEPdfdwocKKFdAmLWFqmHcC", - "symbol": "GRF", - "name": "Griffin", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/Griffin88b/crypto-GRF/main/Griffin.png", - "tags": ["social-token", "solana", "utility-token"] - }, - { - "chainId": 101, - "address": "2B6Veb5wYGAiSjrEHeCU3MTeb7arpfJVXXRpqoK8wjUT", - "symbol": "SCSU", - "name": "SCSU MakerBucks", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/kevxred/cryptologo/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Dyk7Dq2JcpeRDacqiaDgoK9SS7Eqb4RYeKLnwGajS5eo", - "symbol": "HIGHMINT", - "name": "High Society Mint Pass", - "decimals": 1, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Dyk7Dq2JcpeRDacqiaDgoK9SS7Eqb4RYeKLnwGajS5eo/logo.png", - "tags": ["NFT", "general-token", "community-token", "mint-token"], - "extensions": { - "discord": "https://discord.gg/a9Btmz4m4c", - "twitter": "https://twitter.com/highsocietynfts", - "website": "https://highsocietynft.io" - } - }, - { - "chainId": 101, - "address": "3jUSc5eVVsgmzfmhJTtoXzRWQjCvhJAnEPtmNmRDhPKX", - "symbol": "SKCC", - "name": "School Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/LukaT11/crypto/main/Hnet.com-image.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "swimnKEr963p7EbCjsSnBCoYwytuZHPm3zbq6fKLHXb", - "symbol": "SWIM", - "name": "Swim Protocol Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/swim-io/token-list/main/assets/mainnet/swimnKEr963p7EbCjsSnBCoYwytuZHPm3zbq6fKLHXb/logo.svg", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/wGrxQ7GAgP", - "medium": "https://medium.com/@swimprotocol", - "telegram": "https://t.me/joinchat/Mnc1WjrKcq8yYTM1", - "twitter": "https://twitter.com/SwimProtocol", - "website": "https://swim.io/", - "whitepaper": "https://swim.io/whitepaper.pdf" - } - }, - { - "chainId": 103, - "address": "HFhsaBch3nGYE4ehef7s2m9f1EMRZDzL7t7cNkW71L3F", - "symbol": "SBG", - "name": "Solana Bear Gang Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HFhsaBch3nGYE4ehef7s2m9f1EMRZDzL7t7cNkW71L3F/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/Xn9WHM2RbN", - "twitter": "https://twitter.com/solanabeargang", - "website": "https://solanabeargang.com" - } - }, - { - "chainId": 101, - "address": "foodQJAztMzX1DKpLaiounNe2BDMds5RNuPC6jsNrDG", - "symbol": "FOOOOOOD", - "name": "AtlasFOOOOD", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/foodQJAztMzX1DKpLaiounNe2BDMds5RNuPC6jsNrDG/logo.jpg", - "tags": ["util-token"], - "extensions": { - "website": "https://shoebillco.in/" - } - }, - { - "chainId": 101, - "address": "tooLsNYLiVqzg8o4m3L2Uetbn62mvMWRqkog6PQeYKL", - "symbol": "TOOOOOOOL", - "name": "AtlasTOOOOOL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/tooLsNYLiVqzg8o4m3L2Uetbn62mvMWRqkog6PQeYKL/logo.jpg", - "tags": ["util-token"], - "extensions": { - "website": "https://youtu.be/dQw4w9WgXcQ" - } - }, - { - "chainId": 101, - "address": "fJGfG6NFM2SGmvXhsNRaN4Ge3UAhqbbmjAkqbR7hn6B", - "symbol": "USDL", - "name": "USD Lagrange", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/cavidk/logousdl/master/Lagrange_logo.png", - "tags": ["stablecoin"], - "extensions": { - "discord": "https://discord.gg/lagrange-fi", - "github": "https://github.com/Lagrange-fi", - "twitter": "https://twitter.com/Lagrange_fi", - "website": "https://lagrange.fi/" - } - }, - { - "chainId": 101, - "address": "AH4KuSSs6D8yUPx7RTeYyGiBeQnnQC9ctncxZ4kvBD4R", - "symbol": "FIFS", - "name": "Solana FIFS", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solanafifs/solanafifs/main/logo.png", - "tags": ["solana"] - }, - { - "chainId": 101, - "address": "9qWA2upqVgWmdsXEAyu5obEPUaE8sNBspU9pb2coqbcX", - "symbol": "QDOG", - "name": "Que Dog Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9qWA2upqVgWmdsXEAyu5obEPUaE8sNBspU9pb2coqbcX/tokenlogo.png", - "tags": ["social-token", "utility-token"], - "extensions": { - "discord": "https://discord.gg/hXq4t9RzA8", - "twitter": "https://twitter.com/cryptoquedogs", - "website": "https://cryptoquedogs.com" - } - }, - { - "chainId": 101, - "address": "5kMBto3Eu1sUKM6h9E5x4Lj6QBqaJcpr9V5GqP44EbU3", - "symbol": "SSCSTK", - "name": "SSC NFT Stake Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5kMBto3Eu1sUKM6h9E5x4Lj6QBqaJcpr9V5GqP44EbU3/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "AknLt433zhYv2mpoHAMqCBBe4fTjWRWEamAkDu6yJJnU", - "symbol": "CLEM", - "name": "SUPERCLEMTOKEN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AknLt433zhYv2mpoHAMqCBBe4fTjWRWEamAkDu6yJJnU/logo.png", - "tags": ["community-token", "meme-token"], - "extensions": { - "website": "http://clementlefevre.com/" - } - }, - { - "chainId": 101, - "address": "APeybLoCHSYMPTnijUNsrMN1jNmJoYP6EAHRD6H91ZXX", - "symbol": "SIGN", - "name": "SIGN token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/calebkow/sign-solana/main/logo.png", - "tags": ["utility-token"], - "extensions": { - "facebook": "https://www.facebook.com/signdotnet/", - "linkedin": "https://www.linkedin.com/company/signdotnet", - "twitter": "https://twitter.com/SignDotNet", - "website": "https://www.sign.net/", - "youtube": "https://www.youtube.com/channel/UCnJ076pE1Cd2kdneAtveKkQ" - } - }, - { - "chainId": 101, - "address": "4LJ3u1972PSqD48aDiYZrhZ2QjaEaHgpChWth7mnMDtC", - "symbol": "WJT", - "name": "Winjit", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4LJ3u1972PSqD48aDiYZrhZ2QjaEaHgpChWth7mnMDtC/logo.png", - "tags": ["social-token", "solana", "utility-token"] - }, - { - "chainId": 101, - "address": "A8mWck4HsvTWt5QkvAPsg3sK5g5b8Aoh1eCydUB5Q6Cc", - "symbol": "BBUX", - "name": "Bill Bucks", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/johnson1776/crypto/main/coin_photo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HUUvafwSaQ4XGyRuwSHfTRjTGMT4fdkZtbBgcXtBcLh7", - "symbol": "SpongeBob", - "name": "BOB", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HUUvafwSaQ4XGyRuwSHfTRjTGMT4fdkZtbBgcXtBcLh7/logo.png", - "tags": ["MEME", "SpongeBob-token", "BOB-token"], - "extensions": { - "twitter": "https://twitter.com/spongebob_sol", - "website": "https://www.sponge-bob.space/" - } - }, - { - "chainId": 101, - "address": "C9t8kDQk2oPRC7awv1wfW9NCPZWY4EoXVZGyPnydWG9G", - "symbol": "RNC", - "name": "Royal Nugget Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/royalnuggetgaming/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3Pmk4qTq3kbXZBchqUNVPtTyYkAJGjerms5E6PyJF7D5", - "symbol": "POR", - "name": "POR Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/KrisztianZagonyiTis/crypto/main/logo.png", - "tags": ["test-token"] - }, - { - "chainId": 101, - "address": "AAEgVwnimraKGcQDqBjtu5qyunAMTWgxGMKpUFME5Zrw", - "symbol": "DAHL", - "name": "Dahlgren", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AAEgVwnimraKGcQDqBjtu5qyunAMTWgxGMKpUFME5Zrw/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9ForWpWwegDcJSMxvR8EtAeaTFGbuJ7zgQV62NsE8vAw", - "symbol": "BERK", - "name": "Berk Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/berk-demirci-bimu/repos/main/com/repos/resources/img/logo.png", - "tags": [ - "social-token", - "util-token", - "utility-token", - "community-token", - "individual-token" - ], - "extensions": { - "github": "https://github.com/berk-demirci-bimu" - } - }, - { - "chainId": 101, - "address": "GUeUKVLusQ22eRJ42LDQSyvEWqAbudNtg34qu6Rhj7jZ", - "symbol": "OMNS", - "name": "OmnisCoin", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GUeUKVLusQ22eRJ42LDQSyvEWqAbudNtg34qu6Rhj7jZ/logo.png", - "tags": ["omniscoin", "solana"] - }, - { - "chainId": 101, - "address": "2oQnVjGZ1Knmbd84aF6RV6Hw4Yexqa78DvGrQg9xzktP", - "symbol": "CTH", - "name": "Catch", - "decimals": 7, - "logoURI": "https://raw.githubusercontent.com/rhinogroup/catch_logos/main/catch_logo.png", - "tags": ["social-token", "utility-token"], - "extensions": { - "website": "https://www.catchcoin.me/" - } - }, - { - "chainId": 101, - "address": "5ngVgVwMsWUKeQXYdrgq78qZU29sbnMr9bC3WngHo2Bd", - "symbol": "CTHU", - "name": "CatchUS", - "decimals": 7, - "logoURI": "https://raw.githubusercontent.com/rhinogroup/catch_logos/main/catch_us_logo.png", - "tags": ["social-token", "utility-token", "stable-coin"], - "extensions": { - "website": "https://www.catchcoin.me/" - } - }, - { - "chainId": 101, - "address": "6dqyQdTKApZiMMiAnJQhV6fkQVYWdoMw1BPBgtJ1hCCG", - "symbol": "CTHE", - "name": "CatchER", - "decimals": 7, - "logoURI": "https://raw.githubusercontent.com/rhinogroup/catch_logos/main/catch_eu_logo.png", - "tags": ["social-token", "utility-token", "stable-coin"], - "extensions": { - "website": "https://www.catchcoin.me/" - } - }, - { - "chainId": 101, - "address": "4QtpUp8RP7MwqgC5uyFEpkHQc11Dy4KARpRnzLtnGP26", - "symbol": "CAMO", - "name": "CaMo", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/camopov/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "RTs8J4B4gJSNjAmxnZw8abY6ACj5oVGVqnn1RJAj1Fb", - "symbol": "RUSD", - "name": "Real USD", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/RTs8J4B4gJSNjAmxnZw8abY6ACj5oVGVqnn1RJAj1Fb/logo.png", - "tags": ["mint-token"] - }, - { - "chainId": 101, - "address": "2EfoEpSDRwax4vC3sV7GQMw5fcdvvzf5owjtLE6fFWG8", - "symbol": "DFI", - "name": "Decentralized Finance Investment", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2EfoEpSDRwax4vC3sV7GQMw5fcdvvzf5owjtLE6fFWG8/logo.png", - "tags": ["mint-token"] - }, - { - "chainId": 101, - "address": "9YHRToRmnPmFx3kaHhMZR66JVNkeYDUC3EgJguGTrL7i", - "symbol": "GGEZ", - "name": "GamersHaven", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SylvySylveon/crypto/main/Crypto.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CbDwU8JrTYv3GzU7msni8qtfFkAGpcyFAzuhuGq5SVqp", - "symbol": "CHUG", - "name": "CHUG Token", - "decimals": 9, - "logoURI": "https://solthirsty.io/images/chug.png", - "extensions": { - "discord": "https://discord.gg/solthirstyapes", - "twitter": "https://twitter.com/solthirstyclub", - "website": "https://solthirsty.io/" - } - }, - { - "chainId": 101, - "address": "EBLbmoGYhRtw5Ds5A35h4SD6q17t97kW62Y2EJyriTBj", - "symbol": "SOLCAC", - "name": "SOLCACTUS", - "decimals": 6, - "logoURI": "https://user-images.githubusercontent.com/97104135/148100693-02cd5ba6-d197-4714-866c-e350b4e56db2.png", - "tags": ["utility-token", "social-token"] - }, - { - "chainId": 101, - "address": "H6MVWo1ypzht36Bc3NqhAtumY7f1Hq25nVBwW5xtJxUG", - "symbol": "LAND", - "name": "Landee Token", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EsZfrs1iWh9CXzbpGUfUkRfs35KkUWXJH2S6Y9D272M/logo.png", - "tags": ["community-token"] - }, - { - "chainId": 101, - "address": "5V2X6p32EZwFNLh48bU7HG14CE9RqsoMFXQNbCmZWLnJ", - "symbol": "ALIEN", - "name": "AlienCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/niospahiu/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "dDTRVvDVJfuELbuEmNqve32pkbc95raxBf2s2wAVjq5", - "symbol": "CREDIT", - "name": "Metaversol Credit", - "decimals": 9, - "logoURI": "https://metaversol.com/coinlogo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Metaversol Credits are the official currency of The Expanse.", - "discord": "https://discord.gg/metaversol", - "twitter": "https://twitter.com/MxMetaversol", - "website": "https://metaversol.com/" - } - }, - { - "chainId": 101, - "address": "27BHoXY6jzeWZRJBawNNCsQRaquvN3kqtxady6nqq4jd", - "symbol": "RSTYX", - "name": "RiverStyx", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/flipsnoop/crypto/main/styx.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HDveJwQE99MbJzNeozSk3Pp45CVmEDyVrGyMuckQg3R1", - "symbol": "BMRC", - "name": "BEAST MODE RC", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/NCBEASTMODERC/NCBEASTMODERC/main/BMRC%20LOGO3.png", - "tags": ["social-token", "community-token", "meta-token", "meme-token"] - }, - { - "chainId": 101, - "address": "DDX3PR1RVeJgP1d5HWZVgUvPJqKpN3PLsqqXaXJfAjN8", - "symbol": "CBC", - "name": "cyberCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/cyberfuturegit/cybercoin/main/logo.png", - "tags": ["solana"] - }, - { - "chainId": 101, - "address": "5DENpiMn7EfJyJT98PaVVPUPJQYbDSCF76D9fX11G1Nw", - "symbol": "NxTB", - "name": "NxToken Beta", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/nexfortisme/asset-store/main/NxTokenBeta.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6jKtpdVu1QSPe88BprZB8rqTXmGuQNiX49mH3ePJZSqF", - "symbol": "LND", - "name": "Lend 2 Us Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/lend2-us/resources/main/images/logo.svg", - "tags": ["utility-token"], - "extensions": { - "github": "https://github.com/lend2-us", - "twitter": "https://twitter.com/Lend2Us", - "website": "https://lend2.us/" - } - }, - { - "chainId": 101, - "address": "4TT62MBAWgE1m9hJ7ABG7VvgGvnth3eXe6N3MB6xKSqt", - "symbol": "ELL", - "name": "Elliel", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4TT62MBAWgE1m9hJ7ABG7VvgGvnth3eXe6N3MB6xKSqt/logo-v1.png", - "tags": [ - "ethereum", - "artists-token", - "awards-token", - "charity-token", - "community-token", - "ott-platform", - "social-token", - "utility-token" - ], - "extensions": { - "website": "https://elliel.io/" - } - }, - { - "chainId": 101, - "address": "5xEbwdxKaB8T2fNatZi8CGg99EjJoTFnnBssJXqEU6SZ", - "symbol": "FBMP", - "name": "ForgeBots Mint Pass", - "decimals": 0, - "logoURI": "https://i.ibb.co/NWYJs2W/forgebots-mintpass.gif", - "extensions": { - "description": "Mint pass for ForgeBots", - "imageUrl": "https://i.ibb.co/NWYJs2W/forgebots-mintpass.gif", - "twitter": "https://twitter.com/forgebots", - "website": "https://forgebots.io" - } - }, - { - "chainId": 101, - "address": "BoAiSzbhzDZb3kXVA3J1pCYNUEaKBKFrGZqvQWMVtB1v", - "symbol": "BOM", - "name": "BOM", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Roastoth/BOM/main/1641341675907.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "J2WWhNzkwgDGY66ztYEiQqNiryR4YCbECzssBKjVGsof", - "symbol": "RIPL", - "name": "RipleyCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/J2WWhNzkwgDGY66ztYEiQqNiryR4YCbECzssBKjVGsof/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GbUPueKeCvsQzVWtmwaAFSf94HALJX2PgSw54DH42ECC", - "symbol": "QuBit", - "name": "Quantum Bit", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/kazyon/Tokens_Images/main/Qubit/QuBit.png", - "tags": [ - "utility-token", - "community-token", - "solana", - "nft", - "nft-marketplace" - ], - "extensions": { - "description": "QuBit Tokens are the official tokens for the Network 3.0 Blockchain", - "discord": "https://discord.com/invite/KVndwCqEHR", - "facebook": "https://www.facebook.com/nettwork3.0/", - "twitter": "https://twitter.com/TheNetwork_30" - } - }, - { - "chainId": 101, - "address": "Acj9A3JP6wYYGvryr1SqNMq3CkHAgXTVWi9xNCTnRA1c", - "symbol": "CHF", - "name": "Chief", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/nicolas-castro97/Crypto/main/chiefLogorecor.jpg", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "z1KPitUQNxHYShTzZqzANR5ZfZeoBdYCad4xTVzbYKa", - "symbol": "ELPH", - "name": "Elephant Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/allsngit/crypto1/main/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "8Z8hzC4TxHAX7PXYUuZeXKrhmYZPsA5VfGZnCwhF6bWc", - "symbol": "EDEDS", - "name": "Eisermann", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8Z8hzC4TxHAX7PXYUuZeXKrhmYZPsA5VfGZnCwhF6bWc/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FNtRDd73woYPPLD8B5fZeqe2HH5CLgGgu65wdMARyJWA", - "symbol": "STUD", - "name": "StudCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/studhause/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DB8bQYHuR1DEBVu8enu4Sg1PQz96R4BeCyWYs47rCm66", - "symbol": "RECORD", - "name": "RECORD Token", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DB8bQYHuR1DEBVu8enu4Sg1PQz96R4BeCyWYs47rCm66/logo.svg", - "tags": ["utility-token"], - "extensions": { - "website": "https://itsthelabel.com" - } - }, - { - "chainId": 101, - "address": "6dPVeks868t8rGmY2WQP1e8GSzJkmb7NWri2qcsDrJr7", - "symbol": "MINI", - "name": "Mini Development", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Ben-Donaldson/minidevtoken/main/logo.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "HfdVMLSmps9kTEJgWrmtNjp9zmJCBTWEZi84Jko2oe8d", - "symbol": "TITS", - "name": "Tig O Bitties", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/tkits22/tits/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2HZoqoV6UscH6CXBtXuycY8qE85YzkLwZnJ8F9HpYGZ9", - "symbol": "IVORY", - "name": "Ivory Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2HZoqoV6UscH6CXBtXuycY8qE85YzkLwZnJ8F9HpYGZ9/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/IvoryInvestors" - } - }, - { - "chainId": 101, - "address": "FTHpT4cXcBgwyR9okHAwMdVuoFjfy5tQiK5698g5vEGy", - "symbol": "NTRL", - "name": "Nocturnal", - "decimals": 9, - "logoURI": "https://user-images.githubusercontent.com/69129797/148165596-c429f2c6-ee19-4f30-a394-13b15503b7e9.png", - "tags": ["meme-token"], - "extensions": { - "description": "Token that fuels your all nighters during end sems." - } - }, - { - "chainId": 101, - "address": "7XLPdw5YEkLPff1MVeu2a3GeaLSDMG7N3wLNipKkU5FB", - "symbol": "GK", - "name": "GabeKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/free-napkins/jacoblogo/main/jacob-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9h4LRfpTAcwoDickGo3EMFxLs6q3Y1LxYtYVfM7nciiu", - "symbol": "TBC", - "name": "Tibcoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Fatfoxmajor/Cryptothelast/main/euro-g5368e2465_640.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "Gw35BDbNkQtnMYezjSsFCZ1qZfgMbfMiHkwwB3UAz2XZ", - "symbol": "MPI", - "name": "Meta Paradise Island", - "decimals": 18, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Gw35BDbNkQtnMYezjSsFCZ1qZfgMbfMiHkwwB3UAz2XZ/logo.png" - }, - { - "chainId": 101, - "address": "9JKrbg7CzSomL3rfwwB3SE2YHkexASf7H3qPY8DQxoSA", - "symbol": "STP", - "name": "Spiato", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Spiato/crypto/main/logo.png", - "tags": ["change-the-world"], - "extensions": { - "discord": "https://discord.gg/jfE4s5xrFR", - "telegram": "https://t.me/spiatotoken", - "website": "https://spiato.com" - } - }, - { - "chainId": 101, - "address": "3gPMG36CWmj4fyj9cWoY6inWxSPU8fVGwUBh2ecJEQkV", - "symbol": "NYQ", - "name": "Nyquist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/anticausal/crypto/main/nyquist/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2FuUXTmUHMPz7ep8gdu5FKjj6LjjKRvXZeu6SBmRzRQ1", - "symbol": "HRMC", - "name": "Hrmmmm Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/lukeeh11/hrmmmm-coin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "819qPK63wWAnSiM6ZPci4sEc6G5EzMk4yTxW97U7iodj", - "symbol": "F0RD", - "name": "F0rdCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/theNetworkChuck/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4w9yH7LbGoQVV41bUzVNcrJ682vibsoLG7fWvkJHwrdS", - "symbol": "ELFL", - "name": "Elemental Fluid", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/ForgedMatrix/Crypto/main/final-elementalFluid-logo.png", - "tags": ["game-token", "nft-token"] - }, - { - "chainId": 101, - "address": "5ymp5wZ4rCB2QJ4wmBLmN6ZbybYEPFsD9HdCLH19mkzm", - "symbol": "AFC", - "name": "Mehdi Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ammari2/crypto2/main/lolo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9tYPNLSEXqK5uxJixk6z1SifTfDAJwQ5JkAyj5dtVQkh", - "symbol": "SLR", - "name": "Selerium", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SeleriumCrypto/Crypto/main/logo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AqTKiVzjX9EZG341Z9FiVAwFFLVx47mJEA9uNC8kBw4F", - "symbol": "NOUT", - "name": "NO Utility Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jurecki0/firstSOLToken/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8RCVnyYGPEpimZrFFBRPzaEsnCzEWZsZ2hPTHZCudrMJ", - "symbol": "EMC", - "name": "EmoriCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/emorilebo/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AXYEG84MRYcJoYhJh7Z9btYXdw4G4pdQGYaCubwMkksg", - "symbol": "DXLSTAKE_V1", - "name": "Dexlab Stake Season 1", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/dexlab-project/assets/master/dexlab/dexlab_symbol_logo.svg", - "tags": ["stake-pool-token"], - "extensions": { - "twitter": "https://twitter.com/dexlab_official", - "website": "https://www.dexlab.space/" - } - }, - { - "chainId": 103, - "address": "Tcc6Xcjuru2jtGMB6bTg7EPMGJrZFXbmKiKHRmEgq9j", - "symbol": "MNTK", - "name": "My New Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Tcc6Xcjuru2jtGMB6bTg7EPMGJrZFXbmKiKHRmEgq9j/logo.png", - "tags": ["social-my-new-token"], - "extensions": { - "website": "https://google.com" - } - }, - { - "chainId": 101, - "address": "CWW1FBQ97EXhXBHqVzw82QawJR5bSaMS2KCwLx1jjwP2", - "symbol": "BFT", - "name": "Blue Fire Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Schindlermc/Bluefire-crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CsiUQQqo6P1MSUS8P93VU2DK94w5Vr2GfDvvgPgq3fRx", - "symbol": "INT", - "name": "Interbiznw Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/interbiznw/crypto/main/interbiznw-coin-logo.png", - "tags": [ - "utility-token", - "MetaVerse", - "social-token", - "community-token", - "payment-token", - "multi-chain" - ], - "extensions": { - "discord": "https://discord.gg/PEvDPV4zyU", - "telegram": "https://t.me/interbiznwcoin", - "website": "https://interbiznw.dev" - } - }, - { - "chainId": 101, - "address": "2NMSLU2cscTzrFK3htiPGop7T1jEiMQ5F82D5ugje3Jo", - "symbol": "MOVS", - "name": "Movs Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/ivangugumartin/movstoken/main/movstoken.png", - "tags": [ - "utility-token", - "MetaVerse", - "social-token", - "community-token", - "payment-token", - "multi-chain" - ], - "extensions": { - "discord": "https://discord.gg/PEvDPV4zyU", - "telegram": "https://t.me/interbiznwcoin", - "website": "https://interbiznw.dev" - } - }, - { - "chainId": 101, - "address": "Gs6vMVNsod4ptgVmse1cdKcX99CDqpiahDAXD9rke7rp", - "symbol": "GZM", - "name": "Gizmo", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Wbez11/Crypto/main/Logo2.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "F2SoB3d83yA6xbSLawPg4ae1tPomAvWYP5LvKozicDH7", - "symbol": "JMP", - "name": "JMP Stonks", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/F2SoB3d83yA6xbSLawPg4ae1tPomAvWYP5LvKozicDH7/logo.png", - "tags": ["social-token"], - "extensions": { - "description": "Yes", - "discord": "https://discord.gg/67jHRMXh5k" - } - }, - { - "chainId": 101, - "address": "Gt5MuV9PkVEAh34ybQ4LMtiuwNMiPkPLCXJkxdD5SFNu", - "symbol": "HRM", - "name": "Hiram", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/niakova/crypto/main/logo.png", - "tags": ["Social-Token"] - }, - { - "chainId": 103, - "address": "8RcoapffJxVRoo523cMC8Q7mCZHT5xUWQfQLSjF5Xzox", - "symbol": "FAB_d", - "name": "FABRIC (devnet)", - "decimals": 9, - "logoURI": "https://dex.fsynth.io/logo.png", - "tags": ["fabric", "synthetics"], - "extensions": { - "github": "https://github.com/fabric-foundation/", - "medium": "https://xfabric.medium.com/", - "twitter": "https://twitter.com/official_fabric", - "website": "https://fsynth.io/" - } - }, - { - "chainId": 103, - "address": "GqGn2LFgZYLhjikiSYW6Q4w26JXxnxBRuNMFmT3MjB6M", - "symbol": "fUSD_d", - "name": "Synthetic USD (devnet)", - "decimals": 9, - "logoURI": "https://imagedelivery.net/9NaZ0y3QBjls8_Ib2N2gQw/ec3521b6-b382-4efb-1d16-7b60c75b9100/public", - "tags": ["fabric", "synthetics"], - "extensions": { - "github": "https://github.com/fabric-foundation/", - "medium": "https://xfabric.medium.com/", - "twitter": "https://twitter.com/official_fabric", - "website": "https://fsynth.io/" - } - }, - { - "chainId": 103, - "address": "Cc9PpPUswF4bHD8KJNijxKUKPzcZz1U9Km1STXEvQU5t", - "symbol": "fURA_d", - "name": "Synthetic Uranium (devnet)", - "decimals": 9, - "logoURI": "https://imagedelivery.net/9NaZ0y3QBjls8_Ib2N2gQw/e6570c13-2421-403c-74d6-eb5654472900/public", - "tags": ["fabric", "synthetics"], - "extensions": { - "github": "https://github.com/fabric-foundation/", - "medium": "https://xfabric.medium.com/", - "twitter": "https://twitter.com/official_fabric", - "website": "https://fsynth.io/" - } - }, - { - "chainId": 103, - "address": "AS9argtvFaBWoW91LpfNMoJRk4ju8ugEVdWfMMmFzapx", - "symbol": "fXAU_d", - "name": "Synthetic Gold (devnet)", - "decimals": 9, - "logoURI": "https://imagedelivery.net/9NaZ0y3QBjls8_Ib2N2gQw/44d5355a-45e3-4c2d-decb-0cf723959900/public", - "tags": ["fabric", "synthetics"], - "extensions": { - "github": "https://github.com/fabric-foundation/", - "medium": "https://xfabric.medium.com/", - "twitter": "https://twitter.com/official_fabric", - "website": "https://fsynth.io/" - } - }, - { - "chainId": 101, - "address": "84mR7LyzT9ZKgkFU9DnTrcFLEi8hyRtruXqtRM3LH1Fz", - "symbol": "IM", - "name": "ImmortalKing token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ayoubchawkiIT/crypto/main/3544116-middle.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "AgDGJHx2nsrnuouQ1p5f5wCy3bgBAppuuxR82ToUVGeg", - "symbol": "VR1", - "name": "VR One", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/AzureVein/VR_One-Token/main/logo.png", - "tags": [ - "utility-token", - "company-token", - "MetaVerse", - "social-token", - "community-token", - "payment-token" - ], - "extensions": { - "facebook": "https://www.facebook.com/VROneKoszalin", - "github": "https://github.com/AzureVein", - "website": "https://vr-one.pro/" - } - }, - { - "chainId": 101, - "address": "FGep99dB8Qo7GyqxrgtKm7DMeJF4SeHVHaz2fqJEP48V", - "symbol": "FANDB", - "name": "FoodAndBeverage", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FGep99dB8Qo7GyqxrgtKm7DMeJF4SeHVHaz2fqJEP48V/logo.png", - "tags": ["social-token", "MetaVerse"] - }, - { - "chainId": 101, - "address": "6c6AH38MGGanE4CrzvUUp7D2k39b4X1kYreLDcRmThtQ", - "symbol": "CIC", - "name": "CiocCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/adriancioc/crypto/main/Untitled-1.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3gUBwtQN7PG86D9Sn25ViM176hypSkHMe6bfgQiE1iqr", - "symbol": "SIR", - "name": "Senior Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/9z8/Seniorcoin-logo/main/SIR.png", - "tags": [ - "social-token", - "company-token", - "utility-token", - "community-token" - ], - "extensions": { - "github": "https://github.com/9z8", - "instagram": "https://www.instagram.com/qy3" - } - }, - { - "chainId": 101, - "address": "EqwvgBJmH8ADLaisdjLVk7oAtCKTqZy8RdKACmfCNNzJ", - "symbol": "EVRN", - "name": "EnviRon", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/hitshiv/Environ/main/HitshivCoin.png", - "tags": [ - "utility-token", - "MetaVerse", - "environment", - "community-token", - "payment-token", - "multi-chain" - ] - }, - { - "chainId": 101, - "address": "3kcPfzzEgD3o82RKio4B8LXoAMuZGXTv1gPiNF8miM3M", - "symbol": "MDLJ", - "name": "Medalje", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Ejectzero/Medalje/main/logo.png", - "tags": ["toekenning"] - }, - { - "chainId": 101, - "address": "5YFaApo5XYgJfyJ72dF5oBtv2d1VNay3ajuPxwbK2jX", - "symbol": "FFT", - "name": "FOREST FINANCE", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/ForestNFT/logo/main/LOGO.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "6HKq7SoHESuDz5ZbjZqgQkhrTiDFTfQdJapavMv7DbFb", - "symbol": "SBD", - "name": "Solana Bird", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6HKq7SoHESuDz5ZbjZqgQkhrTiDFTfQdJapavMv7DbFb/logo.png", - "tags": ["utility-token", "meme-token", "dex"], - "extensions": { - "discord": "https://discord.io/solanabird_sol", - "telegram": "https://t.me/solanabird_sol", - "twitter": "https://twitter.com/solanabird_sol", - "website": "https://solanabird.net" - } - }, - { - "chainId": 101, - "address": "8NRwX8xbxEiTzRkQVK96FysCWMFTzS6xv9u9zF4Ezpdj", - "symbol": "STARX", - "name": "STAR X", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/ArtinMB/OlllO/main/WhatsApp%20Image%202022-01-03%20at%2017.36.24.jpeg", - "tags": [ - "social-token", - "currency-token", - "community-token", - "trading-token" - ] - }, - { - "chainId": 101, - "address": "D2Ho4j5kg5aytwygxF9uNbyxHi4ZP4ywnvhX93kWsRiJ", - "symbol": "SIMP", - "name": "Simple Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Waking-Reality/Simple_Coin/main/Simple_Coin.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9TufFVQ2Z1F2JucPodVfrocXQcM1RwTZ2CrBHysukXJ5", - "symbol": "SBG", - "name": "Solana Bear Gang Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9TufFVQ2Z1F2JucPodVfrocXQcM1RwTZ2CrBHysukXJ5/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/Xn9WHM2RbN", - "twitter": "https://twitter.com/solanabeargang", - "website": "https://solanabeargang.com" - } - }, - { - "chainId": 101, - "address": "EdzVwQnTsdT5tXcAAamWhAUGCDuB8haN4R9W4QLBKFGL", - "symbol": "GMZA", - "name": "GMZREA", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/mohudwan/gmzrea/main/assets/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://gmzrea.com/" - } - }, - { - "chainId": 101, - "address": "5RhzHWv5mMi7a87pktvUiYRRkJHVqTiBTYz11FcY6xtV", - "symbol": "FT123", - "name": "Fatura 123 Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Macbusinesss/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3SqaBCopmZTCBDD6MpbF1Ddg7vhs7yXrUb9MasSsLKXN", - "symbol": "BELC", - "name": "Bella Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/apprentice39/BellaCoin/main/Bella5.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Hwupx4t36zS1EDyvBDo4mUhakKjvSpgPf6gejAndgjJT", - "symbol": "BELL", - "name": "BellIO", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/tedulus/bellio/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Ek4DviTpz5HUUTkkh7uhQtENk8aTNwgaEPnEQTR5Pp8M", - "symbol": "JWB", - "name": "Brandtica", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Bucephalus121/Logo/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "98WBFRufsB4BhoYE44oSgTXyvJZjkiewDTZHM8TTAoxo", - "symbol": "ROCKS", - "name": "MOONROCKS", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/98WBFRufsB4BhoYE44oSgTXyvJZjkiewDTZHM8TTAoxo/logo.png", - "tags": [ - "NFT", - "utility-token", - "meta-verse", - "game", - "play2earn", - "social-token", - "community-token" - ], - "extensions": { - "discord": "https://discord.gg/DHBznR9yvF", - "twitter": "https://twitter.com/MoonRocksCrypto", - "website": "https://moonrockscrypto.com" - } - }, - { - "chainId": 101, - "address": "F2QDS2TaWnfEZVmWs5wRemdWUxtXErHkjDM1yEQF4LJV", - "symbol": "BWS1WL", - "name": "BitWhips S1 Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/F2QDS2TaWnfEZVmWs5wRemdWUxtXErHkjDM1yEQF4LJV/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://bitwhips.io/" - } - }, - { - "chainId": 101, - "address": "FjGPSLLUsZrwRPYhYh2gmHwDjXL8Q8JosdU2Fh63h5Hr", - "symbol": "CSHELL", - "name": "Captain Sea Shells", - "decimals": 0, - "logoURI": "https://cdn.hngr.co/shell.gif", - "tags": ["utility-token"], - "extensions": { - "website": "https://gocaptain.com" - } - }, - { - "chainId": 101, - "address": "4nnHXEUhPcJub41HnDjKUGGZhjUhaxuuvN62KNqnWKs4", - "symbol": "AWCT", - "name": "Awesome CoinT", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/AlexTownsend/crypto/main/grumba.png?token=ADBU4JUGILX4ROHHX4QZJEDB34I4I", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8X5xLPyniuuzLB68mmNVcYwQdbsxr42b9YU73T3SLhu5", - "symbol": "SIMU", - "name": "SIMU Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Memetoken123/SIMU/main/logo.png.JPG", - "tags": ["meme-token"] - }, - { - "chainId": 101, - "address": "6uRJsnT3e1ZPNEuWLD46gyDhHEpppgH69Dx3JSFqJMua", - "symbol": "HUSK", - "name": "Hus-Key Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/huskeycoin/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5d4m4R3vFLCL265rsqxTyTKcEEuVAgqqRyJ12PxNyViR", - "symbol": "BSPZ", - "name": "Bspotz", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Bspotz/crypto/main/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "PiFfYeSabfSPhxnXUdy5GMoG84nbLG1Y4D9ZmHBGjpZ", - "symbol": "PIF", - "name": "Pay It Forward", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/PiFfYeSabfSPhxnXUdy5GMoG84nbLG1Y4D9ZmHBGjpZ/logo.jpg" - }, - { - "chainId": 101, - "address": "7dHWMDQf9TDopoFdaJfg8kREq1u4hFFfLRMvEMrzV17C", - "symbol": "PH", - "name": "Peace Heaven", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Pralad120/amg/main/amg1.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8WngA1uMyH3xxR8UzHmwCsYgBo5v2jENGauAP367tRa", - "symbol": "IGT", - "name": "IgorToken", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/IgorKubisa/IgorToken/main/TOOT.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "BVR7NkZQAGgYac5dpoe3NHKRCfHz3UdA555uagb1MtC4", - "symbol": "RHC", - "name": "RHINO Coin", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BVR7NkZQAGgYac5dpoe3NHKRCfHz3UdA555uagb1MtC4/logo.svg", - "tags": ["rhino", "rhinosoft", "rhinogames"] - }, - { - "chainId": 101, - "address": "AzW11g2JTErTQ8s8x9jvCYyq6YBbJtnkxAeMqueQ7G1S", - "symbol": "GENZ", - "name": "GEN Z TOKEN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/TUTSS2021/cryto/main/Gen%20Z%20Token.png" - }, - { - "chainId": 101, - "address": "HkxfF1sEPbsy1aFf1HUF6qjqLk2GewoQFY5xb2edgt5b", - "symbol": "FF", - "name": "FifteenFighters", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/AntonioRuiz9191/crypto/main/logopulido.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "56ZMDv7VWEhEx2Q1YgH3RNEMnwNqTPPA8rk9KLi6CjX6", - "symbol": "kcETH", - "name": "Katana ETH Covered Call Vault Share", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/Katana-Labs/assets/master/token-list/56ZMDv7VWEhEx2Q1YgH3RNEMnwNqTPPA8rk9KLi6CjX6/logo.png", - "tags": ["Katana", "share-token", "utility-token"], - "extensions": { - "discord": "https://discord.gg/katana-hq", - "github": "https://github.com/Katana-Labs", - "twitter": "https://twitter.com/Katana_HQ", - "website": "https://app.katana.so" - } - }, - { - "chainId": 101, - "address": "J58rNqBQTQQJ7oMftec8bLWKVF6iujcH3Ck81f2a4zCu", - "symbol": "kcSOL", - "name": "Katana SOL Covered Call Vault Share", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Katana-Labs/assets/master/token-list/J58rNqBQTQQJ7oMftec8bLWKVF6iujcH3Ck81f2a4zCu/logo.png", - "tags": ["Katana", "share-token", "utility-token"], - "extensions": { - "discord": "https://discord.gg/katana-hq", - "github": "https://github.com/Katana-Labs", - "twitter": "https://twitter.com/Katana_HQ", - "website": "https://app.katana.so" - } - }, - { - "chainId": 101, - "address": "8cPHdUKcphHMxZcqk5ccNLuqJWt9iutwDWByA9ATqxhB", - "symbol": "kcBTC", - "name": "Katana BTC Covered Call Vault Share", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/Katana-Labs/assets/master/token-list/8cPHdUKcphHMxZcqk5ccNLuqJWt9iutwDWByA9ATqxhB/logo.png", - "tags": ["Katana", "share-token", "utility-token"], - "extensions": { - "discord": "https://discord.gg/katana-hq", - "github": "https://github.com/Katana-Labs", - "twitter": "https://twitter.com/Katana_HQ", - "website": "https://app.katana.so" - } - }, - { - "chainId": 101, - "address": "E2eevzN2TBWAL1LiALAfEYFLRBzSDLugLjiNuZg9ehwT", - "symbol": "kcMSOL", - "name": "Katana MSOL Covered Call Vault Share", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Katana-Labs/assets/master/token-list/E2eevzN2TBWAL1LiALAfEYFLRBzSDLugLjiNuZg9ehwT/logo.png", - "tags": ["Katana", "share-token", "utility-token"], - "extensions": { - "discord": "https://discord.gg/katana-hq", - "github": "https://github.com/Katana-Labs", - "twitter": "https://twitter.com/Katana_HQ", - "website": "https://app.katana.so" - } - }, - { - "chainId": 101, - "address": "3JU8iPVMrrhmct4RP7rTSBFwStv6oksEsSj4C6mkk2Yg", - "symbol": "kcWLUNA", - "name": "Katana WLUNA Covered Call Vault Share", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/Katana-Labs/assets/master/token-list/3JU8iPVMrrhmct4RP7rTSBFwStv6oksEsSj4C6mkk2Yg/logo.png", - "tags": ["Katana", "share-token", "utility-token"], - "extensions": { - "discord": "https://discord.gg/katana-hq", - "github": "https://github.com/Katana-Labs", - "twitter": "https://twitter.com/Katana_HQ", - "website": "https://app.katana.so" - } - }, - { - "chainId": 101, - "address": "JD7y57PY86Fz1JL2rtk1c8jGGsFtkiSU9yDTuy4k2gpU", - "symbol": "kcMNGO", - "name": "Katana MNGO Covered Call Vault Share", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/Katana-Labs/assets/master/token-list/JD7y57PY86Fz1JL2rtk1c8jGGsFtkiSU9yDTuy4k2gpU/logo.png", - "tags": ["Katana", "share-token", "utility-token"], - "extensions": { - "discord": "https://discord.gg/katana-hq", - "github": "https://github.com/Katana-Labs", - "twitter": "https://twitter.com/Katana_HQ", - "website": "https://app.katana.so" - } - }, - { - "chainId": 101, - "address": "CERhXTjfPT8AbERv7arCp6LnKr7jacvU82tDdkWQzzWo", - "symbol": "kcFTT", - "name": "Katana FTT Covered Call Vault Share", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/Katana-Labs/assets/master/token-list/CERhXTjfPT8AbERv7arCp6LnKr7jacvU82tDdkWQzzWo/logo.png", - "tags": ["Katana", "share-token", "utility-token"], - "extensions": { - "discord": "https://discord.gg/katana-hq", - "github": "https://github.com/Katana-Labs", - "twitter": "https://twitter.com/Katana_HQ", - "website": "https://app.katana.so" - } - }, - { - "chainId": 101, - "address": "FkTXB81tVJdcLnsnc72HeXGJq6NXaK2puqbFzd5WS6UU", - "symbol": "kcSRM", - "name": "Katana SRM Covered Call Vault Share", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/Katana-Labs/assets/master/token-list/FkTXB81tVJdcLnsnc72HeXGJq6NXaK2puqbFzd5WS6UU/logo.png", - "tags": ["Katana", "share-token", "utility-token"], - "extensions": { - "discord": "https://discord.gg/katana-hq", - "github": "https://github.com/Katana-Labs", - "twitter": "https://twitter.com/Katana_HQ", - "website": "https://app.katana.so" - } - }, - { - "chainId": 101, - "address": "2wRAEfYsBVfiirgWX7qGkbwnXvKvd8u1kd4D59QM4F8j", - "symbol": "kcRAY", - "name": "Katana RAY Covered Call Vault Share", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/Katana-Labs/assets/master/token-list/2wRAEfYsBVfiirgWX7qGkbwnXvKvd8u1kd4D59QM4F8j/logo.png", - "tags": ["Katana", "share-token", "utility-token"], - "extensions": { - "discord": "https://discord.gg/katana-hq", - "github": "https://github.com/Katana-Labs", - "twitter": "https://twitter.com/Katana_HQ", - "website": "https://app.katana.so" - } - }, - { - "chainId": 101, - "address": "Br4WZq7N5gFK3WX8Ls1U15ePnQ1DnSKwx5k62X51LeLB", - "symbol": "kcSTSOL", - "name": "Katana STSOL Covered Call Vault Share", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Katana-Labs/assets/master/token-list/Br4WZq7N5gFK3WX8Ls1U15ePnQ1DnSKwx5k62X51LeLB/logo.png", - "tags": ["Katana", "share-token", "utility-token"], - "extensions": { - "discord": "https://discord.gg/katana-hq", - "github": "https://github.com/Katana-Labs", - "twitter": "https://twitter.com/Katana_HQ", - "website": "https://app.katana.so" - } - }, - { - "chainId": 101, - "address": "Dcuxb4n4fjXmLZKJwMpB64F1r1THvwktLQM7oVwyKzDS", - "symbol": "XART", - "name": "XART Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/DMW-11/crypto/main/logo.png", - "tags": ["nft-token", "social-token"] - }, - { - "chainId": 101, - "address": "DwMX8BDhCT6siGkE489ZREovqeGWKzAH5LBa5MYmUPoL", - "symbol": "ETZI", - "name": "EtziCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/cetzkorn/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FuC9mEgw9QwjteyCm3kkzGoSXcZAaN8o6rC6sXCaUkvm", - "symbol": "TRST", - "name": "Trinity Stone", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/paulstuartgibbons/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4c9WaR8GXXckgEjZpF6QS6ztzF16HDmNJgvVo91cT3EQ", - "symbol": "$BUCK", - "name": "Buck Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/RobotBuck/token/main/Buck%20logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DQEkgMHfaAU4GwdLar3Q6Qj7mGqrc8mqddcTM2Cndf3V", - "symbol": "KIRA", - "name": "Poochie Pie", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/RobotBuck/token/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HGJ5LQYSaDufQyJZz2QeutKMKdsnatwNsy77zeWyZmFX", - "symbol": "EIC", - "name": "Edane Invest Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jlewko10/crypto/main/Crypto.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CN7YUr2T1mr3zu1ccrYWKJcAUWFSVgFzBUg17p5zRM8B", - "symbol": "OFF", - "name": "OFF-COIN", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/yxslx/assets/main/unnamed.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4mFEgeuxhdQaG9BAfnoiUFdhPiyz72sPnMqr1rMEGm95", - "symbol": "KZC", - "name": "Kelvin Zhang Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/kelvin-wenjie-zhang/kz-coin-crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8s4ddk9tLr8CdrkbzU4zTWAMNCu2HfoS39wNNzLDCdUB", - "symbol": "BBWP", - "name": "BattleBots Watch Party Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/spideyar/BBWP2021/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CCKDRAd4Xwjoovtf2s1duu3d4TPTmFRyh1hfrb3ZUGR2", - "symbol": "MILK", - "name": "Tiddy Juice Coin", - "decimals": 9, - "logoURI": "https://arweave.net/S71DNASA5TYlrK9giRy7QgqFNw1m4mxqY6OdtgY1E7k", - "tags": ["meme-coin"], - "extensions": { - "discord": "https://discord.gg/saPvZHEQm4", - "twitter": "https://twitter.com/tiddyjuicecoin", - "website": "https://tiddyjuice.com" - } - }, - { - "chainId": 101, - "address": "Cy4NRGdUaULYB1CsKXLoB1o2DZMVvBxvexc1JcSQjPoW", - "symbol": "FLOOR", - "name": "Floor Coin", - "decimals": 3, - "logoURI": "https://www.arweave.net/t-hilPreN5lQQjjR3RZC8RfmCCUMb35yNios7oQHAuo?ext=png", - "tags": ["community-token", "meme-token", "fractionalized-nft"], - "extensions": { - "vault": "https://fraktion.art/vault/5ZyJM8iRp3vDTvbGhJkoEZPCeBjcNmTRX6v8KvheNTtw", - "vaultPubkey": "5ZyJM8iRp3vDTvbGhJkoEZPCeBjcNmTRX6v8KvheNTtw" - } - }, - { - "chainId": 101, - "address": "EDgaRzsFVHA2DbvWkf8BZeEAW7SxWZVCC5cpwyNH58vG", - "symbol": "CVN76", - "name": "Reagan CVN 76", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/tkemet/cvn76/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5LnFS3LXtiTPNw6Y7Rak1sEW9bu4a239Xa4gHoeQfJD", - "symbol": "BIRB", - "name": "BirbCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/DaQueeckinDuck/birbimage/main/birbcoin-logo.png", - "tags": ["meme-token", "social-token"] - }, - { - "chainId": 103, - "address": "89fVzH7zgQoGpi8US3LGchvfc4tNP4vksYjW3dQ9Go8H", - "symbol": "ANSD", - "name": "AntoSid", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/gotchhan/AntoSid/main/logo.png", - "tags": ["change-the-world"], - "extensions": { - "website": "https://github.com/gotchhan/AntoSid" - } - }, - { - "chainId": 101, - "address": "GXQvKtucVHsRWfFMmbBEvLGtxkMz2mSzm7H5NXTcbuzs", - "symbol": "MINTY", - "name": "MINTY", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MINTYCOIN/MINTYCOIN/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6xSvfXwcXy6Vbn4dtLkSYHT6K2dctJzfmUKNbq3VPpf5", - "symbol": "CAPA", - "name": "Capital A", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/9471710/capital-A-logo/main/capital-A-logo.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "8Udw2dVYLq9vjieo26znz98GrRb548aqfr35mNwsRwsF", - "symbol": "COINS", - "name": "Coins", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8Udw2dVYLq9vjieo26znz98GrRb548aqfr35mNwsRwsF/logo.svg" - }, - { - "chainId": 101, - "address": "7AVfEQTQGfY34ZGZTin8qbULDNh9eBcC19Ja5C6Y2yyn", - "symbol": "PESO", - "name": "Peso Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7AVfEQTQGfY34ZGZTin8qbULDNh9eBcC19Ja5C6Y2yyn/logo.png" - }, - { - "chainId": 101, - "address": "AZYS2oh7rKaiAkabWMkCfHztKS3y9mNGnPaahHyqVtrK", - "symbol": "PESOS", - "name": "Pesos", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AZYS2oh7rKaiAkabWMkCfHztKS3y9mNGnPaahHyqVtrK/logo.svg", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/pesos_coin", - "website": "https://pesos.store/" - } - }, - { - "chainId": 101, - "address": "4jmMQoEFzEerAzsLvwkk289Zh8Fq2p8noZahcHob3tqW", - "symbol": "SeeD", - "name": "Semillero Online", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/gtietzsch/Crypto/main/SeeD.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "tkKLfFxzDqw7riy2iHfjgjswaR4911dLwtdohXL4dWZ", - "symbol": "BUX", - "name": "Bill Bux", - "decimals": 2, - "logoURI": "https://github.com/johnson1776/crypto/blob/main/coin_photo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DLDvByK6eRvy3KbkBy6xQcqXAqkp8RhCLgEYPBS19ZnA", - "symbol": "SLD", - "name": "SOLDAO", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DLDvByK6eRvy3KbkBy6xQcqXAqkp8RhCLgEYPBS19ZnA/logo.png" - }, - { - "chainId": 101, - "address": "Fh7m8mVDhj2zTdKAHosLLUanLhnFzwQCeKoj2KYaS5gc", - "symbol": "SPCR", - "name": "Superchor", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/pshah260/superchorcoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6wyuqYeRSZ8zC4a6ytz7ZnPkSgFijMiN6WZh3FnLY5fT", - "symbol": "DT", - "name": "Drip 0Ape Club Dao Gov Token", - "decimals": 4, - "logoURI": "https://media.discordapp.net/attachments/916936341995028530/928528112818479124/0.png", - "tags": ["social-token", "dao", "utility-token"] - }, - { - "chainId": 101, - "address": "FeyTwUrGtnqQEVARJY4pThxb7AtvtoLoHbNioPSKAk2U", - "symbol": "UNOX", - "name": "Unoxe", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Oppentec/crypto/main/Unoxe.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BpMdHxq1odLwFsjupWBJdd3M5mXcZTK9DNmgQp2DRV2j", - "symbol": "DGFR", - "name": "Disc Golfer Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/marshallnp/crypto/main/DGFR.jpg", - "tags": ["transactional-token"] - }, - { - "chainId": 101, - "address": "3MFTdLQ7HEEwQFSWqEaH2bek5Dd7tVqRBDPj5k5wuFGJ", - "symbol": "CRONS", - "name": "Cronstedt Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/carlcronstedt/crypto/main/ouroboros_sq2.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DByUkMG4sC17fNmCLGXzQfKxKbTGpuZsBy85ZyoTcydm", - "symbol": "BFC", - "name": "BrillFoodCoin", - "decimals": 0, - "logoURI": "https://gitlab.com/brilltek42-oss/bfc-assets/-/raw/master/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://bfc.brilltek.com.tw" - } - }, - { - "chainId": 101, - "address": "A7sNcaeuoL7e5Lv5o1SKTH9aQhe6eaQaaNFtYnSQHcNt", - "symbol": "GOD", - "name": "GodCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/GodCoin7/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Evup5hpQjUYYCwjVKeMsoyBztq11hgBb75rK4ZXWpvvL", - "symbol": "SRP", - "name": "StarPunk", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/hqphuoc129/SRP_logo/master/logo.svg" - }, - { - "chainId": 101, - "address": "6uJTdV4FuVJ2YJ3Cv2ZdNXNBFsJsxgVJCYSQtFQYr9iA", - "symbol": "YELAINC", - "name": "YELA Incubator Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6uJTdV4FuVJ2YJ3Cv2ZdNXNBFsJsxgVJCYSQtFQYr9iA/logo.png", - "tags": ["incubator", "entrepreneur", "youth", "business"] - }, - { - "chainId": 102, - "address": "C4yTauQS75Dosut6LBLGLfJj7CnFURSVmQRNftf2tUuB", - "symbol": "LTO", - "name": "LOTO", - "decimals": 9, - "logoURI": "https://github.com/sergmai/tempo-jagger/raw/main/loto.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "AEZ638gBqisSvmWbGYVuPB1b19vrD7dBtddqXa77M2x7", - "symbol": "LIZ", - "name": "Theranos Coin (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AEZ638gBqisSvmWbGYVuPB1b19vrD7dBtddqXa77M2x7/logo.png", - "tags": ["ethereum", "wrapped", "wormhole", "meme-token"], - "extensions": { - "address": "0x102e941b77bcaa7e35d368cafe51ef8f79c8d1ef", - "assetContract": "https://etherscan.io/address/0x102e941b77bcaa7e35d368cafe51ef8f79c8d1ef", - "bridgeContract": "https://etherscan.io/address/0x3ee18b2214aff97000d974cf647e7c347e8fa585", - "description": "Theranos Coin (LIZ) is a wrapped ERC-20 token immortalizing a story of revolutionary innovation and fantastic hypergrowth, stunning duplicity and scandalous fraud — the story of Elizabeth Holmes and Theranos.", - "twitter": "https://twitter.com/drinksbydrew", - "website": "https://www.theranosco.in" - } - }, - { - "chainId": 101, - "address": "AAXng5czWLNtTXHdWEn9Ef7kXMXEaraHj2JQKo7ZoLux", - "symbol": "DGE", - "name": "DarleyGo Essence", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/DarleyGo/token-list/main/assets/mainnet/AAXng5czWLNtTXHdWEn9Ef7kXMXEaraHj2JQKo7ZoLux/icon.png", - "tags": ["game-token", "game-currency", "Gaming"], - "extensions": { - "website": "https://darleygo.io" - } - }, - { - "chainId": 101, - "address": "DsVPH4mAppxKrmdzcizGfPtLYEBAkQGK4eUch32wgaHY", - "symbol": "GXE", - "name": "Galaxy Essential", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/DarleyGo/token-list/main/assets/mainnet/DsVPH4mAppxKrmdzcizGfPtLYEBAkQGK4eUch32wgaHY/icon.png", - "tags": ["game-token", "game-currency", "Gaming"], - "extensions": { - "website": "https://darleygo.io" - } - }, - { - "chainId": 101, - "address": "54bivnbkUA6CTw42m8oNaUqxxfDnCmH1NvGnQyeqeNaV", - "symbol": "PLC", - "name": "PlatinePHP Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/54bivnbkUA6CTw42m8oNaUqxxfDnCmH1NvGnQyeqeNaV/logo.png", - "tags": ["meme-token", "social-token", "community-token"], - "extensions": { - "telegram": "https://t.me/platinephptoken", - "website": "https://www.iacademy.cf" - } - }, - { - "chainId": 101, - "address": "GcogbzLCZnbo8SHLFLL1DsD5xBWKoDMvo1Tw4YxcUuaN", - "symbol": "KSK", - "name": "KssCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/dkolesni-prog/ma_baker/main/photo_2022-01-06_12-00-31.png", - "tags": ["beta"] - }, - { - "chainId": 101, - "address": "2vLKynPPYBbPNRzSZoQkrWjT7fvDjLJK5LqEpnEJZg8i", - "symbol": "ATLS", - "name": "Atlas Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/AdityaKG-169/atlas-coin/main/logo.png", - "tags": ["social-token", "utility-token"], - "extensions": { - "twitter": "https://twitter.com/atlasdotgs", - "website": "https://atlas.gs" - } - }, - { - "chainId": 101, - "address": "kATzfFsDBcLjknypjLXSPy6mrzFyNhwA5VmTZEurkgR", - "symbol": "CKATZ", - "name": "CyberKatz Space Ticket", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/kATzfFsDBcLjknypjLXSPy6mrzFyNhwA5VmTZEurkgR/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "http://discord.gg/5m6cBdry6y", - "twitter": "https://twitter.com/cyberkatzsol", - "website": "https://cyberkatz.space" - } - }, - { - "chainId": 101, - "address": "J3iAbtzFedhsKotwPpD4u4hHaHVCuSPLRvjVWBHPZom", - "symbol": "ANOM", - "name": "Anomio", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/anom-io/anomio/main/anomio.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "5wG5c48NvMLoLuzYjZ9ESkTCGh7mEEaBDXgu7WzbizJA", - "symbol": "MOSHI", - "name": "Moshi", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/DuklinDonut/Crypto/main/doggy.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "C676Kc4yTcyw6pZKXvdZdCwAT1niNfZRcKaz61u7cMwG", - "symbol": "PXCL", - "name": "PlexComet", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/plexcomet/assets/main/only-p-logo.png", - "tags": ["community-token"], - "extensions": { - "twitter": "https://twitter.com/plex_comet" - } - }, - { - "chainId": 101, - "address": "CbratEtKyQCxFcEZ86HJXtT9nTK6gHpzC6BMHBkm9Did", - "symbol": "CHC", - "name": "Chief Coin", - "decimals": 9, - "logoURI": "https://github.com/PrommerRichard/crypto/blob/main/logo2.jpg?raw=true", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "ATZERmcPfopS9vGqw9kxqRj9Bmdi3Z268nHXkGsMa3Pf", - "symbol": "FONE", - "name": "Fone", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ATZERmcPfopS9vGqw9kxqRj9Bmdi3Z268nHXkGsMa3Pf/fonelogo.png", - "tags": ["community-token", "utility-token"], - "extensions": { - "website": "https://www.fone.dev/" - } - }, - { - "chainId": 101, - "address": "CdP49FGvVM1qFFq25VJA83dbaw4dzN4V8o9khjyFrH6d", - "symbol": "GIFTY", - "name": "GIFTY - Gift token for everyone", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/giftytoken/solanamerge/main/gifty.png", - "tags": [ - "gifty-token", - "gift-token", - "gift", - "solana", - "social-token", - "utility-token" - ] - }, - { - "chainId": 101, - "address": "FgysiEsRK2toZU1o56EaoyAfDqaKc9EeoFCSaRQyBkCu", - "symbol": "FRD", - "name": "Ferdosia", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/FerdosiaEngine/FRD-Coin/main/favicon.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HzQZrkhxN39E36qL7qa1tgpexTcwTresKCz2w9ff6f5r", - "symbol": "PLCN", - "name": "Pelican", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Medicante/pelican-coin/main/pell.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "G8naNPQvUYHT4r93WjNJAjefPAyQk94FbkPkzucxycE1", - "symbol": "HSMINT", - "name": "High Society WL Mint Pass", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/G8naNPQvUYHT4r93WjNJAjefPAyQk94FbkPkzucxycE1/logo.png", - "tags": ["NFT", "general-token", "community-token", "mint-token"], - "extensions": { - "discord": "https://discord.gg/a9Btmz4m4c", - "twitter": "https://twitter.com/highsocietynfts", - "website": "https://highsocietynft.io" - } - }, - { - "chainId": 101, - "address": "6JTroKNLnJqheMhGwpoENfCDXRN1zosCnmpt2ZpHT3qE", - "symbol": "ALURS", - "name": "Alurser", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6JTroKNLnJqheMhGwpoENfCDXRN1zosCnmpt2ZpHT3qE/logo.png", - "tags": ["community-token", "NFT"] - }, - { - "chainId": 101, - "address": "4nyQWESjEc2TvPWr4UgrfYvLPBRYnjs2LpkCvYWTxkwJ", - "symbol": "MSHRC", - "name": "Mush Room Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/marsch/mushroomcoin/main/mushroomcoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AWWimrYk4qFJ2dVxxpbuKKjFp5PiPGKnbGY74pqXVVPt", - "symbol": "KET", - "name": "KETCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ketwebb/Sol_Tpken/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6SBmEB9MuGBYdmCzsWXdqB1fT68Vdkn2prkRQrAEnASr", - "symbol": "HST", - "name": "Heaven Sevens Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6SBmEB9MuGBYdmCzsWXdqB1fT68Vdkn2prkRQrAEnASr/logo.png", - "tags": ["social-token"], - "extensions": { - "discord": "https://discord.gg/BndsQt7X9X", - "twitter": "https://twitter.com/HeavensLotto" - } - }, - { - "chainId": 101, - "address": "FhGkz2uJRDkTKsFMeGPhreeM8E2yNmVmbyv6ny2zm8YD", - "symbol": "MTVR", - "name": "MetaVersana", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FhGkz2uJRDkTKsFMeGPhreeM8E2yNmVmbyv6ny2zm8YD/logo.jpg", - "tags": [ - "NFT", - "dao", - "utility-token", - "meta-verse", - "game", - "play2earn", - "governance" - ], - "extensions": { - "discord": "https://discord.gg/invite/nBmznwNacT", - "telegram": "https://t.me/MetaVersana", - "twitter": "https://twitter.com/MetaVersana", - "website": "http://metaversana.com" - } - }, - { - "chainId": 101, - "address": "2rPMyBMNkjxgDM3276oURfRnXVSb7Q3sK68mg5dtQebv", - "symbol": "KAT", - "name": "Katto", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/amiralibabic/Katto/main/Kattologo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "D2zS7ntXhQH8WURyDogqnWrrqLK4qmKaLqLLKU9XGRjS", - "symbol": "KOEDOES", - "name": "Reward-Task Tokens", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/D2zS7ntXhQH8WURyDogqnWrrqLK4qmKaLqLLKU9XGRjS/logo.png" - }, - { - "chainId": 101, - "address": "FQuHtR8bXDkHrx3x3To8JkT4fVHMMn9T9q5kk7tndYKv", - "symbol": "THO", - "name": "Tho token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/thomasthehacker/crypto/main/TTH.png", - "tags": ["social-token", "community-token", "currency"] - }, - { - "chainId": 101, - "address": "3NVZ9c5f8SSbR6kbhbhq8JQeJknVoiLJBtAXhF4bUUAM", - "symbol": "UML", - "name": "UML token", - "decimals": 0, - "logoURI": "https://github.com/johnson1776/crypto/blob/main/uml_coin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7bJvXMnUfVKAJPUgESEVE3U8bkUGTBSD72rZ8xUbbE9X", - "symbol": "BLSF", - "name": "Blocksafe Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/alexiuadrian/BlocksafeCoin/main/logo.png", - "tags": ["social-token", "community-token", "currency"] - }, - { - "chainId": 101, - "address": "Adm58Jgzb2qMLnMGMYyT91TM1ueLQvQDdMqAkte5F1Cq", - "symbol": "BLOCK", - "name": "Block", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SergeyDobrinyn/token/master/files/cube.png", - "tags": [ - "social-token", - "currency-token", - "community-token", - "trading-token" - ], - "extensions": { - "discord": "https://discord.gg/8nHcQFbPE3" - } - }, - { - "chainId": 101, - "address": "5ESQrFxPuciHdMTAP3dr2VdwrQ2wczgYq8rigteEGMsk", - "symbol": "CHCHC", - "name": "ChoChoCoin", - "decimals": 0, - "logoURI": "https://github.com/claxpum0n/crypto/blob/main/chochocoin_logo_img.png.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8PZzRtXTFUGmeWboeKbTuWYuALupGAS47dSKDmbxE5K3", - "symbol": "PNGN", - "name": "Penguin token", - "decimals": 0, - "logoURI": "https://github.com/p1otek/pinguin/blob/main/pingwin_solana.jpg", - "tags": ["social-token", "nft-token", "community", "nft"], - "extensions": { - "twitter": "https://twitter.com/p1otek" - } - }, - { - "chainId": 101, - "address": "G6x16VmcKduR9yeSWhzR94mnEDKWgt89PtGW5QncZXvR", - "symbol": "WRBK", - "name": "WarlockBucks", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/WarlockOfWifi/crypto/main/WOW_FACE.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BekJYnrW64iEx8bSrk8LXpFN1UoAiAgmYMvyrgQCbeFM", - "symbol": "BRD", - "name": "Briskd token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BekJYnrW64iEx8bSrk8LXpFN1UoAiAgmYMvyrgQCbeFM/logo.png", - "tags": ["social-token", "community-token"], - "extensions": { - "instagram": "https://www.instagram.com/briskd.cc/" - } - }, - { - "chainId": 103, - "address": "kbWpPDaa7h8ggHpFHbgZy4p4Y26pe4uv1TrkR58GssU", - "symbol": "BRIC", - "name": "BridgemanCoin", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/rubru70/hello-world/master/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "E9AsWRryDRKRo9AVgDx4idGuwUJLSGQB6u4UsZz9s3D6", - "symbol": "SBSI", - "name": "Sebsi", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/kevinianbrady/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "E1s2muWwiLT2n3EQUL27hgviaPRRXWkpXD7ShpfgRvVz", - "symbol": "CAC", - "name": "Cosmic Ape Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/E1s2muWwiLT2n3EQUL27hgviaPRRXWkpXD7ShpfgRvVz/logo.png", - "extensions": { - "coingeckoId": "cosmic-ape-coin", - "twitter": "https://twitter.com/cosmicapesnft", - "website": "https://cosmicapes.xyz" - } - }, - { - "chainId": 101, - "address": "GBDsHu7SMev6Q2DdFyU6YPkjRBiPVqWuFmsJyrsLLrUX", - "symbol": "TOPIA", - "name": "Topia Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/apetopiadev/logo/main/logo.png", - "tags": ["social-token", "utility-token", "currency"] - }, - { - "chainId": 101, - "address": "EuYA8VbAKgMfWuCRTQ4QGVBeBxgtaAwWTE7svhX4tvYN", - "symbol": "HNEC", - "name": "Henen Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/rodricba/logochico/main/logook.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CfarmpcJk5aKW1vqaFwAeTYam7BZx45huLmZ6XtLm7kH", - "symbol": "RFC", - "name": "Rafac", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/rafac-io/crypto/main/logo.png", - "tags": [ - "social-token", - "community-token", - "nft-token", - "trading-token", - "currency-token" - ] - }, - { - "chainId": 101, - "address": "AgDGJHx2nsrnuouQ1p5f5wCy3bgBAppuuxR82ToUVGeg", - "symbol": "VR1", - "name": "VR One", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/AzureVein/VR_One-Token/main/logo.png", - "tags": [ - "utility-token", - "company-token", - "MetaVerse", - "social-token", - "community-token", - "payment-token" - ], - "extensions": { - "facebook": "https://www.facebook.com/VROneKoszalin", - "github": "https://github.com/AzureVein", - "website": "https://vr-one.pro/" - } - }, - { - "chainId": 101, - "address": "D7txa12HUtWk5dVxC2Ybg9QoE7ALZgDcUEKdrh43V8fB", - "symbol": "GRLR", - "name": "Growler Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/D7txa12HUtWk5dVxC2Ybg9QoE7ALZgDcUEKdrh43V8fB/logo.png", - "tags": ["community-token", "social-token", "utility-token"], - "extensions": { - "description": "Receive Growler By Holding your Leopard NFT", - "twitter": "https://twitter.com/LeopardSNFT", - "website": "https://leopardsyndicate.com/" - } - }, - { - "chainId": 101, - "address": "F31ccScAXyf39DzSpRYKdEGyZmPihqGEtKhmvLddYD11", - "symbol": "RRCT", - "name": "RR", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/rrgrow/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EPF1DDVYQFBYJHj66UVx3WztjvAp8V76FiTmCuuAqvyi", - "symbol": "OLC", - "name": "Oli Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/olicoin728/olicoin/main/oli.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "13zQLEjHaj8s4yuSH6yKBcCfKhNaGZiRHpNG2dCZCQsS", - "symbol": "PNGS", - "name": "Penguins", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/p1otek/pinguin/main/pingwin_solana.jpg", - "tags": ["social-token", "nft-token", "community", "nft"], - "extensions": { - "twitter": "https://twitter.com/p1otek" - } - }, - { - "chainId": 101, - "address": "HgWt1oMYfnwYD4ttMBXnyzbZrmNiZheMjWHYzRC5diCL", - "symbol": "DPT", - "name": "Dioptase", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/KatelynKunzmann/crypto/main/NFT_Dioptase.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3CvYgtGwHWRdsVcgWZHXXtiDfpSWWp83kefLCpnpCEq9", - "symbol": "RZR", - "name": "Rickemizer", - "decimals": 9, - "logoURI": "https://avatars.githubusercontent.com/u/8443515?s=96\u0026v=4", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CZtYQvMEQdtFFdF39PtMxGVMditE76AwbXqJYFEhYFvA", - "symbol": "ACN", - "name": "Acorn", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/VortexHowl/Acorn/main/30E9C0AF-8474-4B33-876E-609E2D5E189E.png", - "tags": ["community-token", "meme-token", "social-token"] - }, - { - "chainId": 101, - "address": "6WvTvuxvaxpzpgmumiXuow6fSxELDb3NhecqUaegJWox", - "symbol": "RMT", - "name": "Red Moon Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/AkshayPatel-360/RedMoon/main/RedMoon.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Fjnvzm5iFULHrLGp6FNisrE8ZQvZbKR8d6VcsGkXgxxx", - "symbol": "MOA", - "name": "MoaLetters", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jacob-hanbeen-kim/moa-crypto/main/moa.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5CMusULTFeuRYkwgMnhSthNZ7KjRT55Xj9S56oCbDzBc", - "symbol": "CRW", - "name": "CREWPTO", - "decimals": 0, - "logoURI": "https://github.com/joerojasq/crypto/blob/main/PHOTO-2021-06-11-11-38-33.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9tbt9vQ3oHTtMG1E15fXnvSiGEJFHXx82oN4wwSJmLmt", - "symbol": "MACT", - "name": "MacToken", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/macdogxyz/mactoken/main/logo.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "DX2xEgbu96h3MVHdR6ygoV9gUaXy2z1Pj9mpCSh29TEd", - "symbol": "SCCN", - "name": "Shred Camp Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/gamegenie1/cryptoLo/main/CoinLogo.png", - "tags": [ - "utility-token", - "company-token", - "MetaVerse", - "social-token", - "community-token", - "payment-token" - ] - }, - { - "chainId": 101, - "address": "EmU2juRehuHHn3p2qwMbrPiupXdc3JrZdTD1aP5zyhrW", - "symbol": "GRF", - "name": "Graef Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/segraef/graef.io/main/logo.png", - "tags": [ - "utility-token", - "company-token", - "meta-token", - "social-token", - "fabric-token" - ], - "extensions": { - "github": "https://github.com/segraef", - "website": "https://graef.io/" - } - }, - { - "chainId": 101, - "address": "J7BTo2oJoWhceyKqhNRotHT8YV1T5Zk5jzbBtz5tiD6W", - "symbol": "MEMI", - "name": "Metacraft Mineral", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/J7BTo2oJoWhceyKqhNRotHT8YV1T5Zk5jzbBtz5tiD6W/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://stormgate.io" - } - }, - { - "chainId": 101, - "address": "2ybigq4qCufSSZTkn8bYZUD9nmbVoyx6XMFG8hYZo7FT", - "symbol": "PEPC", - "name": "Pepi Coin", - "decimals": 0, - "logoURI": "https://github.com/cheliviris/pepicoin/blob/main/PepiLogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "812oQWKKDDyY6sFuPQjriMQqGRXtC563pBi7pPDWWSNh", - "symbol": "$ABS", - "name": "Stake Bot", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/812oQWKKDDyY6sFuPQjriMQqGRXtC563pBi7pPDWWSNh/logo.png", - "extensions": { - "twitter": "https://twitter.com/RobotStake", - "website": "https://stakebot.finance/" - } - }, - { - "chainId": 101, - "address": "DpDFmEDVcy1AgZfCZqHq7DBQV6GjT4N1BNJF6kvgVeA5", - "symbol": "CANZ", - "name": "WebCanCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DpDFmEDVcy1AgZfCZqHq7DBQV6GjT4N1BNJF6kvgVeA5/logo.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "7LiQxpMKJzHqwx2dCErLF3v4sqjErgP1WJqRsfu3hK5", - "symbol": "IMAG", - "name": "Imaginary", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/anticausal/crypto/main/imaginary/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 102, - "address": "Evup5hpQjUYYCwjVKeMsoyBztq11hgBb75rK4ZXWpvvL", - "symbol": "SRP", - "name": "StarPunk", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/hqphuoc129/SRP_logo/master/logo.svg" - }, - { - "chainId": 103, - "address": "Evup5hpQjUYYCwjVKeMsoyBztq11hgBb75rK4ZXWpvvL", - "symbol": "SRP", - "name": "StarPunk", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/hqphuoc129/SRP_logo/master/logo.svg" - }, - { - "chainId": 101, - "address": "DaK2nYgbaJgGvGz5R1t9apm3FudTb4pmSJZoJ95CGyxg", - "symbol": "HOWI", - "name": "Howie Coin", - "decimals": 0, - "logoURI": "https://github.com/showarth/hcoin/blob/main/Howi.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FuXCCJrNgrAy5hV6c12o4KHg5pJ6K4MFcZZz5FRHrxt7", - "symbol": "HEARTS", - "name": "Hearts Art", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Hearts-Art/HEARTS/main/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://hearts.art/" - } - }, - { - "chainId": 101, - "address": "7jgwj5z8ZHBKVC2NRsVrvZTpTTgn99PcckUNPTiZFMGH", - "symbol": "TEMT", - "name": "TermiToken", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ItsEge1110/TermiToken/main/logo.png", - "tags": ["social-token"], - "extensions": { - "description": "TermiToken is the one and only token to be paired with your own TheToxicTerminator NFT!", - "discord": "https://bit.ly/thetoxicterminators", - "instagram": "https://www.instagram.com/toxicterminators/", - "twitter": "https://twitter.com/ToXiCtErMiNaTR", - "website": "https://www.thetoxicterminators.com/" - } - }, - { - "chainId": 103, - "address": "DxGGS7cVsmihX8QUcLriWokXih6Kwo7PviVHWEYDhbua", - "symbol": "FTK", - "name": "Flame", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Hariienesh1901/Flame/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3LKZU3iQx9KM94S4uYRdYwAHTm6odDyzGQqTBNj7J27z", - "symbol": "atLUNA", - "name": "Wrapped Luna (Allbridge from Terra)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Xf2yAXJfg82sWwdLUo2x9mZXy6JCdszdMZkcF1Hf4KV/logo.png" - }, - { - "chainId": 101, - "address": "6iFUWMJjaK2C2aRknmp5bYGqpMWUvfc6ySMY91HEJqNc", - "symbol": "THMP", - "name": "Thimp Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Thimp-com/uploads/main/logo.png", - "tags": ["social-token", "util-token", "web3"], - "extensions": { - "github": "https://github.com/Thimp-com" - } - }, - { - "chainId": 101, - "address": "2aFZVztpssp5WjZuucrYVB8gQbR83KH3htsgL8NH4K4s", - "symbol": "WWW", - "name": "Wassie World Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2aFZVztpssp5WjZuucrYVB8gQbR83KH3htsgL8NH4K4s/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://wassieworld.xyz" - } - }, - { - "chainId": 101, - "address": "8NL1sfPUAJeea9hZ8m51Ps7DAtn4K1yJnELBZmdx3Nhv", - "symbol": "GOIN", - "name": "GO-IT School Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/nikolai-sych89/goin/main/coin.png", - "tags": ["social-token", "community-token"], - "extensions": { - "facebook": "https://www.facebook.com/goitschool", - "instagram": "https://www.instagram.com/goitschool/", - "website": "https://go-it.top/", - "youtube": "https://www.youtube.com/channel/UCCtmmzdaQq56zRt2BjJIlpA" - } - }, - { - "chainId": 101, - "address": "GWdwqCFssJANE2a9R3aiD7KbvnHKgaK46d3x85paB58W", - "symbol": "BEER", - "name": "Beer Run", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/tkemet/beerme/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9sdES9rkaTT98vmjpcrBjNg6XouDSKUL853PK6mT2cv4", - "symbol": "DIKK", - "name": "Dikkenek Coin", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9sdES9rkaTT98vmjpcrBjNg6XouDSKUL853PK6mT2cv4/logo.png", - "tags": ["utility-token", "community-token", "meme-token"], - "extensions": { - "twitter": "https://twitter.com/DikkenekCoin" - } - }, - { - "chainId": 101, - "address": "FdV4xsPt95cj3TG4fgRwoJLYDqjNuhLHsqgsNhgtYoLV", - "symbol": "BJ", - "name": "Blowjob Token", - "decimals": 9, - "logoURI": "https://filedn.com/lWipyq8QQlwLMXQXJcXVB90/bj3.png", - "extensions": { - "website": "https://blowjobtoken.art/" - } - }, - { - "chainId": 101, - "address": "Ew42Lk7Lv1hiE2YouLWZypcf2DLDiobdbnFqzRmpy79L", - "symbol": "TRMC", - "name": "TermiCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/ItsEge1110/TermiToken/main/logo.png", - "tags": ["social-token"], - "extensions": { - "description": "TermiToken is the one and only token to be paired with your own TheToxicTerminator NFT!", - "discord": "https://bit.ly/thetoxicterminators", - "instagram": "https://www.instagram.com/toxicterminators/", - "twitter": "https://twitter.com/ToXiCtErMiNaTR", - "website": "https://www.thetoxicterminators.com/" - } - }, - { - "chainId": 101, - "address": "JC6EaHt8qYa6hnLG9ctniu5dZH4XniSRuVQsKnkvJHGB", - "symbol": "PXC", - "name": "Promenix Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/reverdemoi/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "CFkiqiAD1cJDLqGXHh1iLGPVMiwr1ajPW4nWPwsgGWit", - "symbol": "BLCN", - "name": "Balancana NFT", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Lovresqu/crptos/main/eggplant-2924511_640.png", - "tags": ["nft"], - "extensions": { - "description": "One and only Balancana non fungible token.", - "imageUrl": "https://raw.githubusercontent.com/Lovresqu/crptos/main/eggplant-2924511.png" - } - }, - { - "chainId": 101, - "address": "69Aa3N6iegen7AxqhvtnLCWyZ2WbwTjE41SyZ78iFRHv", - "symbol": "GJSMS", - "name": "Green Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Greenjuicesystems01/Greencrypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2wanHD7yyhb6eeXZengZr6AKBwQCXBHFkwkpba6cTr1F", - "symbol": "SPTACO", - "name": "Spectrum One Taco Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ptolemaeusJS/solana-token-sptaco/main/133_The-Power-of-Tacos.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Ft7YHe54mH3J5RM9D5oU6auzhCVt75AjtSvcRB3VTAHC", - "symbol": "JRCN", - "name": "JR Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jrcrayne/jrcoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3MzNXz3jb6yUXAZXf8pPkMnjQo4vtkcuFgWH7k9ShWQQ", - "symbol": "DM", - "name": "DogeMask", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/DogeMask/CRIPTO-MASK/main/Untitled.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HMYxhA2ZeSpFjitzP58K7MMJKbKkBuj4P5PHbsmo3rTF", - "symbol": "TFBK", - "name": "TFBK", - "decimals": 9, - "logoURI": "http://youngtech.fr/wp-content/uploads/2022/01/logofineblock.jpeg", - "extensions": { - "assetContract": "https://explorer.solana.com/address/HMYxhA2ZeSpFjitzP58K7MMJKbKkBuj4P5PHbsmo3rTF/largest", - "description": "TFBK is A token to unlock the loyalty potential of businesses", - "website": "https://fineblock.eu/" - } - }, - { - "chainId": 101, - "address": "5iipcUAdVoX6tyJBRinkhoen4jctGsv4HvdE23VA9QJ1", - "symbol": "FFC", - "name": "Fabulouscoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/traliotube/My-code-snippets/main/image-removebg-preview.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8TBDkT3Gu2HK8dwZ9YREg7yfGdq89rVJfPcpRDRWpF9C", - "symbol": "NRA", - "name": "Nracoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Nraglobal/newcoin2/main/nra_logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BYm7NHv2uyXR4fxaLphNGdie8csW9xbSofCsyZkkyYVF", - "symbol": "BLPY", - "name": "BULL_PYRAMID", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/bipultiwari26/crypto/main/BULL%20PYRAMID.png", - "tags": [ - "social-token", - "community-token", - "family-token", - "friendship-token" - ] - }, - { - "chainId": 101, - "address": "5Wsd311hY8NXQhkt9cWHwTnqafk7BGEbLu8Py3DSnPAr", - "symbol": "CMFI", - "name": "Compendium Finance", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5Wsd311hY8NXQhkt9cWHwTnqafk7BGEbLu8Py3DSnPAr/logo.png", - "tags": [ - "utility-token", - "community-token", - "DeFi", - "Exchange", - "Application" - ], - "extensions": { - "coingeckoId": "compendium-fi", - "discord": "https://discord.gg/64r2xtqczs", - "medium": "https://compendiumfi.medium.com/", - "serumV3Usdc": "3Mf3bxVS2zLW3bbr9BNbqdiizaUwCGwoi3xhrAXfbFnW", - "twitter": "https://twitter.com/CompendiumFi", - "website": "https://compendium.finance/", - "whitepaper": "https://compendium.finance/litepaper" - } - }, - { - "chainId": 103, - "address": "CnSfJEVhiysH7ZcB1AZ7ztUKmMxWvkAmGH1qn68Pq5NK", - "symbol": "OLB", - "name": "SOL BOOL", - "decimals": 10, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CnSfJEVhiysH7ZcB1AZ7ztUKmMxWvkAmGH1qn68Pq5NK/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "A9gSNY2yVTsi8sjYXDDUpUWMCBq9JvJG44ymA3GiKQWH", - "symbol": "BLNK", - "name": "Bliiink Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/A9gSNY2yVTsi8sjYXDDUpUWMCBq9JvJG44ymA3GiKQWH/logo.png", - "tags": ["utility-token", "community-token", "social-token"], - "extensions": { - "description": "Bliiink is a blockchain community-driven music streaming platform connecting artists, influencers, and fans.", - "instagram": "https://instagram.com/bliiinkmusic", - "twitter": "https://twitter.com/bliiinkmusic", - "website": "https://bliiink.co.uk" - } - }, - { - "chainId": 103, - "address": "2zSBuTeYKYyRSyAQ2XW1VkaiqtkAe12Nz6VkqFKZEnKe", - "symbol": "PERKS", - "name": "PERKS", - "decimals": 8, - "logoURI": "https://next.perkhero.com/token.png", - "extensions": { - "website": "https://www.perkhero.com" - } - }, - { - "chainId": 101, - "address": "2rAcQUyAZgxq5hNHVRFRiM4YTzPi9gTcPjjRH16DAtf5", - "symbol": "SAV", - "name": "Harsh Ghodkar", - "decimals": 0, - "logoURI": "https://user-images.githubusercontent.com/71517788/148593300-41bf340f-f20b-4f72-9f86-30587eaaa708.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "AB94vBf7vyPENfUYEhRXxnWBfCr49mYunsXb72mrHh2v", - "symbol": "CAM", - "name": "Caramac", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Scott-Mackey/caramac/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CBsctTyy8o7gqK5RSyj9eDJvN3cUH5bTGB2vpmc4g8dA", - "symbol": "KOBRA", - "name": "Kobra Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ATLTuck/KobraCoin/main/logo.png", - "tags": [ - "utility-token", - "company-token", - "social-token", - "community-token", - "payment-token" - ], - "extensions": { - "github": "https://github.com/ATLTuck" - } - }, - { - "chainId": 101, - "address": "FcJqJBBhfSHtX2tboNjLCpgQCXzJtqD4jkyEWmauFtLs", - "symbol": "ZUL", - "name": "Azul", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/TheHelper2Azul/token-list/main/assets/mainnet/FcJqJBBhfSHtX2tboNjLCpgQCXzJtqD4jkyEWmauFtLs/logo.png", - "tags": [ - "social-token", - "stablecoin", - "community-token", - "lp-token", - "metaverse-token" - ], - "extensions": { - "twitter": "https://twitter.com/eremod" - } - }, - { - "chainId": 101, - "address": "AfGaVaWuGdKcbdzTTFvh1Haatw8DpaHQnouY3fRJEXyz", - "symbol": "XEN", - "name": "Xenium", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/TheXeniumToken/Xenium/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9A6dgXm79ASFyG42tui86F4gQTC56Ydw3mrNL61xhdr", - "symbol": "CRB", - "name": "Cerebro", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9A6dgXm79ASFyG42tui86F4gQTC56Ydw3mrNL61xhdr/logo.png", - "extensions": { - "website": "https://cerebro.finance/" - } - }, - { - "chainId": 101, - "address": "C2WpsuzfcxutC9Eabad2hptVu5AYLbApMDXG8pMTfiZV", - "symbol": "HUZ", - "name": "HUZI", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Lahsini/token/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6gAfvRhDCQ2hq2sBEuuDay2xJR9mTTApc4S4M58TPUGP", - "symbol": "LILU", - "name": "Lilu coin", - "decimals": 0, - "logoURI": "https://github.com/nkloga/crypto/blob/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "KrBBFTDLguJdmaicTqneYmHNbZrmeYBG1RMj5DXhTD2", - "symbol": "BLOP", - "name": "Royal Blop", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/sastrup85/Crypto/main/Blop.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EWpafQPbyz72h1degKhLTozmPZ1LGtMgH3KpQKkuUD7v", - "symbol": "S2COIN", - "name": "SQUAD2 COIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/sc4rn4/crypto/main/coins2.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Cs6mFUDLT5CeHpodueDTZZppqHv9Mz1WWAcKTHU85ruk", - "symbol": "EZNFT", - "name": "EZ NFT", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/ez-nft/token-list/main/assets/mainnet/Cs6mFUDLT5CeHpodueDTZZppqHv9Mz1WWAcKTHU85ruk/logo.png", - "tags": ["utility-token", "social-token"] - }, - { - "chainId": 101, - "address": "cXDYD5SkjTbJ3qeYr8n3pNXSSqa2Ht6UEeEzDhoxYzh", - "symbol": "PCC", - "name": "Pancake Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/godspeed110308/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2upsex3K1RLcsokoUA4CNcerV6aWTTja3LH5bS9626vR", - "symbol": "SPIT", - "name": "Spite Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/bellasar/Spite/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7EnFmDwqvEh6iobuRhj3K7m4WQueeFZfZws8qeFMAzoh", - "symbol": "TRST", - "name": "TrustToken", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/barkour/open/main/BARKOUR%20copy.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9BmPGtFvmm57QgaUEdUhe6DE726XMKM1vh7DpYtV7jiE", - "symbol": "EXP", - "name": "The Expo", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9BmPGtFvmm57QgaUEdUhe6DE726XMKM1vh7DpYtV7jiE/logos.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "HysJKMMQ4G6oEffMhf55ZPRc28zwCmpmZr63vAfUrrBq", - "symbol": "MORPH", - "name": "MORPH", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HysJKMMQ4G6oEffMhf55ZPRc28zwCmpmZr63vAfUrrBq/logo.png" - }, - { - "chainId": 101, - "address": "Ez2aLpUkF9mouaSedYvtaUwE29mpQBDWhVsRk6tD9HuH", - "symbol": "CAPP", - "name": "CapitalistPanda", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/igakubisa/capitalist-panda-/main/sneakycaptalist23.png", - "tags": ["social-token", "family-token"] - }, - { - "chainId": 101, - "address": "AVERsCxn9wr9YZ4WVavPbjm13hrLTPAkdnu1QqK9ZL1y", - "symbol": "AVER", - "name": "Aver", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AVERsCxn9wr9YZ4WVavPbjm13hrLTPAkdnu1QqK9ZL1y/aver.png", - "extensions": { - "discord": "https://discord.gg/KWZuB5E7AP", - "medium": "https://averbet.medium.com/", - "telegram": "https://t.me/OfficialAverBet", - "twitter": "https://twitter.com/AverBet", - "website": "https://aver.bet/" - } - }, - { - "chainId": 101, - "address": "2r59YbkX1Tv8mGSM7D56y2RHpWHTjVj6NSZ9WQu6621R", - "symbol": "SAS", - "name": "SheerazCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/GhostImpact/crypto-Image/main/my-crypto-imge_optimized.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ELEhJznM6WZdR2CVnnkT3Yyj8NUGJpq186tr2MvBKKND", - "symbol": "RCT", - "name": "Real-Gold-Token", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/hhhogannwo/Real-Gold-Coin/main/money.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DJWYzyVsuzfprR5hkmW98nmXgQ8CK6rJWhxswj4CmQEb", - "symbol": "$SQUEAK", - "name": "SQUEAK Token", - "decimals": 6, - "logoURI": "https://imagedelivery.net/aAmca-Po70V1nH4n9cT-uA/8a60559c-fe41-4a52-3210-6685125f1800/public", - "extensions": { - "discord": "https://discord.gg/uXveyZPhvH", - "twitter": "https://twitter.com/FerretFaction", - "website": "https://ferretfaction.io/" - } - }, - { - "chainId": 101, - "address": "8FPa3VSqVTBqdZ6B4CbenKPNWiJB2U6gS5JKMNBZDTiQ", - "symbol": "MIXI", - "name": "Mixis Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8FPa3VSqVTBqdZ6B4CbenKPNWiJB2U6gS5JKMNBZDTiQ/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "22V59o2P9bRwTeMbbLtjrWrkZXy1bMJifuhGW16nA7sX", - "symbol": "BCOIN", - "name": "BartekCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/keirrr/crypto-bartekcoin/main/BartekCoin-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GdfXd3oDwT7eEPpxG136o1WnPgFaYcJbNjZQ4irbwFLo", - "symbol": "PTCN", - "name": "Pete Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Kayyo321/Pete_Coin/main/peteLogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5sqYqqRqs2uTN419mrxQzKmHru6BsChvH1WUHHuxTD1n", - "symbol": "MARC", - "name": "Marce Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/YOPDigital/marcecoin/main/logo.PNG", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "H8bFy62L3ZmUfA3Q4anvneF9nbGjQGce7QTsiXkpCk9y", - "symbol": "SHARK", - "name": "SharkyToken", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/HustlinSharks/crypto/main/logo.png", - "tags": ["utility-token", "nft-token", "community-token", "play-2-earn"] - }, - { - "chainId": 101, - "address": "Dw5SHhyNha87c91Fkf5jDj8g5EDsdTQDxt3UBbuSGQPf", - "symbol": "HYR", - "name": "HyReli", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/TjCicale556/Logo1/main/logo.png", - "tags": ["community-token"] - }, - { - "chainId": 101, - "address": "F9ZsJAyX4SaqMbFqiixDk1RXRUkJ9d9zeC5tYjyn4v5z", - "symbol": "IZU", - "name": "IZUNO Token", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/F9ZsJAyX4SaqMbFqiixDk1RXRUkJ9d9zeC5tYjyn4v5z/logo.png", - "tags": ["NFT", "utility-token", "game-token", "game-currency", "GameFi"], - "extensions": { - "discord": "http://discord.gg/kam1", - "medium": "https://medium.com/@kam1nft", - "twitter": "https://twitter.com/KAM1NFT", - "website": "https://kam1.com/" - } - }, - { - "chainId": 101, - "address": "8oWxMbGkKQhrZHejQ9p1pobrc11Vu9wbUy8ByEC8EPt7", - "symbol": "XAR", - "name": "Xarible DAO", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/juansebsol/xarible_logo/main/xarible_logo.png", - "tags": ["community-token", "social-token"], - "extensions": { - "discord": "https://discord.gg/kPqxFYJUsq", - "instagram": "https://instagram.com/xarible", - "twitter": "https://twitter.com/xarible", - "website": "http://www.xarible.com/" - } - }, - { - "chainId": 101, - "address": "3cCHH2M9KE2jbvidCNJ5GaQCS5u9qTCAwnVyFFpVaKFK", - "symbol": "SPIT", - "name": "SpiteCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/bellasar/Spite/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "NSLWaDb57ah7L4YPjGrx1fpAsF3SmNYh2VeVjTxukz6", - "symbol": "DKCHA", - "name": "DIKCHAA NEBENG TOKEN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/NSLWaDb57ah7L4YPjGrx1fpAsF3SmNYh2VeVjTxukz6/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Dv3w4nZwpujrEW2WeQRco6ZicwzffPw12eRhHV3PUtm8", - "symbol": "CV20", - "name": "Introvert Koin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/PwnedCrystal/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5SGv7LpujDvxiP7hGJMgpA5dt8tow3bQoasRnEa5r81D", - "symbol": "HackA", - "name": "HackA Token", - "decimals": 2, - "logoURI": "https://user-images.githubusercontent.com/27461460/148633297-9b4ee8e7-b1da-46a9-a156-7f13e5b808be.png", - "tags": ["hacka-token", "community-token"], - "extensions": { - "website": "https://website.hackatalk.dev" - } - }, - { - "chainId": 103, - "address": "3jFvJtQnEvpXTZ3rkaP7gFWzxGSpN1hRg2FkHvKX8Qbo", - "symbol": "XESQ", - "name": "Xesque Dele", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3jFvJtQnEvpXTZ3rkaP7gFWzxGSpN1hRg2FkHvKX8Qbo/logo.png", - "tags": ["NFT", "utility-token", "game-token", "game-currency", "GameFi"] - }, - { - "chainId": 101, - "address": "57mDiJXNcrYDoLfwgtKXWSJgGDpP3HUEapTGofwBtM6K", - "symbol": "SCRLA", - "name": "Scrilla", - "decimals": 0, - "logoURI": "https://github.com/upsetk9/Crypto/blob/main/logo.png", - "tags": ["NFT", "utility-token", "game-token", "game-currency"] - }, - { - "chainId": 101, - "address": "HLYUhd8cqWBGDgxaKS8aPN67WZX9nveUHuZqULNEA6zp", - "symbol": "BOZO", - "name": "BozoToken", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/wahclan/BozoToken/main/logo_bozo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9neArAEpohuUcTZCcEfxGgRfVTgBqKqZWwx9QDMRcZTF", - "symbol": "EDC", - "name": "Edvin Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Vrakyax/crypto/main/logo.png", - "tags": ["friendship-token", "family-token", "social-token"] - }, - { - "chainId": 101, - "address": "Cr5CFLdtoKBLKa6LJrvAejn1HbyybuDdJjfeTjwbPjyV", - "symbol": "EBA", - "name": "Emmba", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EsZfrs1iWh9CXzbpGUfUkRfs35KkUWXJH2S6Y9D272M/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4SpfLz9RrF55WKEUBHFcMssFexpmdhymhcDoPSpAEwvi", - "symbol": "DOMOD", - "name": "IDOMODI", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4SpfLz9RrF55WKEUBHFcMssFexpmdhymhcDoPSpAEwvi/logo.png" - }, - { - "chainId": 101, - "address": "2dWWsdsYJ5fPJwm98963XmnknVjKH8cp2k7gGKJTfQC8", - "symbol": "PGM", - "name": "Pergama", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Lucian2001/crypto/main/logo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "51dwnEnpJzQA4Y9b9ZDBeDCYuYBMszW3oNWhF9NmQ2jd", - "symbol": "ZIRC", - "name": "Zircoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Swimmoney/Crypto/main/2.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5NepA4psgviSLWUmFo8VubuERGiRu89E1NS62mdNiFcV", - "symbol": "EVA", - "name": "EvaCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MaskedPsycho/EVA-CRYPTO/main/eva_moneda.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8Lb4YM1yuLg5kBfPe7ejJ9f1SWoS4DYFL2f8LonehBVE", - "symbol": "HACKA", - "name": "HackTalk Token", - "decimals": 2, - "logoURI": "https://user-images.githubusercontent.com/27461460/148633297-9b4ee8e7-b1da-46a9-a156-7f13e5b808be.png", - "tags": ["hacka-token", "community-token", "hackatalk", "dooboolab"], - "extensions": { - "website": "https://website.hackatalk.dev" - } - }, - { - "chainId": 101, - "address": "BjGJDwc4rbqL8XbZv84hfNWjXDVaw4MMekTuLcF79ecg", - "symbol": "PHNC", - "name": "Phoenix Homes Network Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/TradeBuild/PhoenixHomesNetworkCoin/main/StreetLight.png", - "tags": [ - "social-token", - "NFT", - "utility-token", - "community-token", - "meme-token" - ] - }, - { - "chainId": 101, - "address": "CtRndGzvGwqPVVqkdquJvVnTpgg9oUwy1jAb6NMJM3Qu", - "symbol": "EGEC", - "name": "EgeCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/ItsEge1110/EgeCoin/main/logo.png", - "tags": [ - "social-token", - "utility-token", - "community-token", - "meme-token" - ], - "extensions": { - "description": "The one and only EgeCoin! Made by Ege Efes.", - "instagram": "https://egeefes.com/instagram/", - "website": "https://www.egeefes.com/" - } - }, - { - "chainId": 101, - "address": "5ANhsDeAivhohBfJM1mc5UnE9rwsJYAfaQhXDQ3geW3U", - "symbol": "SUPER", - "name": "SuperKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/supercjlee/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Dh4wnMs2RKL3QAR4u2rTNC4n6MDSA57Hc2HRY5R9yMV1", - "symbol": "LCC", - "name": "LCC Elites Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Jxyden34/crypto/main/download%20(7).jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ALR2XbdBAdw7AKibMsTo71kvwUhAXsaxHJCb93dXMDPD", - "symbol": "FERRY", - "name": "The Lost Sheep", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/BarryHaze1/token/main/token.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AtEMmWJkSk1RWBwzXc3hGvzhJjsR95SprEqjiLxjWRnC", - "symbol": "AtEM", - "name": "AtEM COIN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AtEMmWJkSk1RWBwzXc3hGvzhJjsR95SprEqjiLxjWRnC/logo.png", - "extensions": { - "twitter": "https://twitter.com/AtEMWORLD", - "website": "https://atemcoin.art" - } - }, - { - "chainId": 101, - "address": "BhJjySvvXqRr25bmnae3sQBFUTJxvzSwct2JRash4AHa", - "symbol": "WwC", - "name": "Whitecoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/rhorsford/token-list/main/assets/mainnet/BhJjySvvXqRr25bmnae3sQBFUTJxvzSwct2JRash4AHa/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AGi8C53fx6Wh6zMjjW9SmKv8atpWQaQW262GHPzbbP7z", - "symbol": "MXSY", - "name": "MaxisyCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/maxisycode/crypto/main/avarat_m.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "L9rviHfkbjUe2QyGhrfmgbMqDgMJqRjT3AVkrzKR5XD", - "symbol": "CHAR", - "name": "Sol Characters", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/SolCharacters/Main/master/logo192.png", - "tags": ["NFT"] - }, - { - "chainId": 101, - "address": "731jVgZtMo9RJSi9PfrmQT3Dq7vnW7AFVE9d1d8Xh7Qt", - "symbol": "$SMGL", - "name": "Smeagol token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mansziesel/token/main/logo.png", - "tags": ["social-token", "meme-token"], - "extensions": { - "description": "Smeagol token", - "website": "https://smeagoltoken.mziesel.com/" - } - }, - { - "chainId": 101, - "address": "G7ch9ue3G9zNN7odv8W3XhehRTNPMARCiJ6ka76915TK", - "symbol": "CHIPPO", - "name": "Chippo-Coin", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/maikschoerling/crypto/main/Chippo-Coin_logo.jpg", - "tags": ["friendship-token", "social-token"] - }, - { - "chainId": 101, - "address": "EToCnRYxgMkVeLddPEYecwUZs77E6U71YYwTdAzF58Q9", - "symbol": "SOMAR", - "name": "Somar Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/florin-liviu/somar/main/somar.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "S7Rp234e9thKFLL6FyfDNTvzG4VWwecHaDwyfkMtr4u", - "symbol": "PR0V", - "name": "Providers Groupe A1 shares", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Providers1/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CgAJ7HJwntz738DngHUEFHFggHWhfYG6m6a4udHCJnds", - "symbol": "DSNR", - "name": "Designer Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CgAJ7HJwntz738DngHUEFHFggHWhfYG6m6a4udHCJnds/logo.png", - "tags": ["community-token", "social-token", "utility-token"], - "extensions": { - "website": "https://designerpunks.art" - } - }, - { - "chainId": 101, - "address": "W8hTcFbWTQR9gN1DdqYMnjqrAzVgRr9757C3DrgpLuf", - "symbol": "FLD", - "name": "Fieldcoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/sanderveld/coin/main/Fieldcoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8nuRPzEdoJb3wBrnrvVtqEujKfBrfmEUBxaoBz94hqgR", - "symbol": "WALLE", - "name": "Walle Bucks", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Wallace-EXE/Solana/main/MakersMark.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HmwjiTu4rMNXoAsZeX91L6BN6q18era3P4ho9Qsv9KhG", - "symbol": "ECO", - "name": "Edanecoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/svansie/logo/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "H17Nfs2KPgMWjssb7ZwdT7zuocnLpvZvYbMeGwqK3Axd", - "symbol": "GNR", - "name": "Gnarcoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/GNARCOIN/Gnarcoin/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HMxF3WbGSNL37LzD6ecPLWfZJNDwJss46XcRffBLLoAL", - "symbol": "KA7I", - "name": "Ka7ibrator Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Ka7IO/solly/main/Logo.png", - "tags": ["utility-token"], - "extensions": { - "instagram": "https://www.instagram.com/Ka7ibrator/" - } - }, - { - "chainId": 101, - "address": "CkouhZpTakVUPAGkes1EkcoM5G9TTFMikKHQ2UFNFcvM", - "symbol": "BBCN", - "name": "BabaCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MadhavMandala/crypto/main/Baba.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "TRck3zHXCTyoAsiKPn1NyGb3i1mXFbB8JHheh7uFiVL", - "symbol": "TRCK", - "name": "BHSG Stake Tracker", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/TRck3zHXCTyoAsiKPn1NyGb3i1mXFbB8JHheh7uFiVL/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://bountyhunterspaceguild.com" - } - }, - { - "chainId": 101, - "address": "23KNWdtDRhaX14qnzwk3AXiHzuxvwvs9BrQfL3GfKsUh", - "symbol": "AIMW", - "name": "AIM Wealth Coin", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/23KNWdtDRhaX14qnzwk3AXiHzuxvwvs9BrQfL3GfKsUh/logo.jpg", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "3tnvMcuxCEpQ2qkxJC5c1tNpcexaS9RuVk5kUrzqFjER", - "symbol": "MWOW", - "name": "Much Wow Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/venividivici24/muchwow/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "B7S2ipLwnQzx8nDKiynhbhZJwwSbu5cjzUPJhHqPbpLy", - "symbol": "JCC", - "name": "Julius Caesar Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/NinodeVeld/crypto/main/logo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4NDpSc97QF8jHdz37c98CtoubF5FK2rsZb8n4ZG5D4D7", - "symbol": "ALX", - "name": "Alex Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/florin-liviu/alx/main/alx.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ZxH8wMX1fUVLw2gxCADSN19SuzPUkr1jSMNf3f1kfov", - "symbol": "FL", - "name": "Fuel Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ZxH8wMX1fUVLw2gxCADSN19SuzPUkr1jSMNf3f1kfov/logo.png", - "tags": ["gaming-token", "Betting", "Casino", "Gambling"], - "extensions": { - "discord": "https://discord.gg/kongracers", - "twitter": "https://twitter.com/KongRacers" - } - }, - { - "chainId": 101, - "address": "BEpMKK4eCKaLffmNy7hKr9hnRgPieYzV8DPBjXPkNhTQ", - "symbol": "V8MECH", - "name": "V8 Mech", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BEpMKK4eCKaLffmNy7hKr9hnRgPieYzV8DPBjXPkNhTQ/logo.png", - "extensions": { - "website": "https://v8mech.com" - } - }, - { - "chainId": 101, - "address": "GZVS1bbPiiDqfuNymXEDbu9Am34uZx6MCzxBrp1P85K3", - "symbol": "FRWK", - "name": "FOR WORK", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GZVS1bbPiiDqfuNymXEDbu9Am34uZx6MCzxBrp1P85K3/logo.png", - "tags": ["social-token", "utility-token", "community-token"] - }, - { - "chainId": 101, - "address": "81xHMuJEpmJcAoCSUT3YkkffWogCUQT5ymBDcrE99dTj", - "symbol": "SBT", - "name": "Spaarbot Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Spaarbot/sbt/main/SBT.png", - "tags": ["social-token", "utility-token", "community-token"] - }, - { - "chainId": 101, - "address": "8VRoLHA21AgjY4XVFqrhSsMzzc5WQgxW9GSjwBh5EPCq", - "symbol": "JPKC", - "name": "Japko Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/maxisycode/crypto/main/japkocoin.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FQAoqS3fSyxZdNzssezgk7vBBFWweSRNFpCnM7pmFT3M", - "symbol": "WORD", - "name": "Babylon", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/EL-Magnific-o/Token/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AT6c9jrNBcnXDXzJvtCDq1e5Xtj36qQjezoJaxqpBpSh", - "symbol": "KITC", - "name": "Kitten Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/GrumpyWolfpuppy/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "39JM7v8g7FRLphruZrQ38WPhYbGN53iNtkaFnzqvvBaL", - "symbol": "KZM0N", - "name": "KraZyMa50N", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/KraZyMa50N/kzmn/main/logo.kzmon.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BJAeYtbByDcMBRvMSCR82KYJ1mSZBVqDRVE9FrtY6ViX", - "symbol": "TEKI", - "name": "TEKI", - "decimals": 9, - "logoURI": "https://arweave.net/9QUecXE-7AOmLcXLIJIjrTSy-JbTVltV92Y7VhCN8qM?ext=png", - "extensions": { - "twitter": "https://twitter.com/TekikaNFT", - "website": "https://www.tekika.com/" - } - }, - { - "chainId": 101, - "address": "8drbiLyfY2e3nRX8nMxWrBmCB8HK6XcacMJ4tqtThM9n", - "symbol": "IVNC", - "name": "Irvin Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/IrvinDelgado/cryptoLogo/main/CryptoLogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CsuVrSifXUhkBa2dbb7c9FZesqAGg7LZTAZW5vVWJnDa", - "symbol": "EROSA", - "name": "Erosa Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ErosaCoin/crypto/main/ErosaCoin.png", - "tags": [ - "utility-token", - "company-token", - "meta-token", - "social-token", - "nft-token" - ], - "extensions": { - "github": "https://github.com/ErosaCoin", - "website": "https://erosa.io/" - } - }, - { - "chainId": 101, - "address": "9AjGdFLwFZWfPTdopep2BL14HbdcDJAKwNApDp8GDDpv", - "symbol": "TNT", - "name": "Top NFTs Ticket", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9AjGdFLwFZWfPTdopep2BL14HbdcDJAKwNApDp8GDDpv/logo.png", - "tags": ["whitelist-ticket"], - "extensions": { - "description": "Each ticket gives you access to buy one NFT on https://topnfts.cc/", - "discord": "https://discord.gg/topnfts", - "telegram": "https://t.me/topnftscc", - "twitter": "https://twitter.com/topnfts_cc", - "website": "https://topnfts.cc/" - } - }, - { - "chainId": 101, - "address": "5dpkidM6ofFspeqtncqpKvh3DGV3P8EybfNHJsiuD38b", - "symbol": "LPMB", - "name": "BLUUz Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/LesBLUUs/BLUUz_Coin/main/logo.png", - "tags": [ - "social-token", - "community-token", - "utility-token", - "nft-token", - "metaverse-token", - "play-2-learn", - "learn-2-earn", - "growth-token" - ], - "extensions": { - "website": "https://amiangles.com" - } - }, - { - "chainId": 101, - "address": "2AtnukeFFacsHXTTMwj2nA8tY2rVSJuAdEZYi6rjqnke", - "symbol": "RPST", - "name": "REPRESENT", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/AbhishekKale/sol/main/represent_logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CNMvWLKc8r1wRrQ1Xws6v43x5ttTnaf2pccLkUqsfXVf", - "symbol": "$REM", - "name": "Guardian Remnants", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CNMvWLKc8r1wRrQ1Xws6v43x5ttTnaf2pccLkUqsfXVf/logo.png", - "tags": [ - "utility-token", - "company-token", - "meta-token", - "social-token", - "nft-token" - ], - "extensions": { - "description": "Guardian Remnants is the SPL Token you get when staking your Guardian NFTs", - "discord": "https://discord.gg/guardiansnft", - "twitter": "https://twitter.com/guardiansnft", - "website": "https://guardiansproject.com/" - } - }, - { - "chainId": 101, - "address": "DYqx6tLiF4r2J9QFw3uCRjLqWGj6K7TTPjaXmV6zVqmA", - "symbol": "HZBZ", - "name": "HazelBits", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/KzooPackFan/crypto/main/hazelbits_logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5XYRirwUYbeeMNmiBcw1cZYmMKpwofAt77BxaqLaKWPo", - "symbol": "EEZC", - "name": "Samba Coin", - "decimals": 0, - "logoURI": "https://github.com/doyoubelieveit/sol/blob/main/token.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AAixLvr77P8yKkb4d3wSzeCPGBjoAb1tAfTjG7MrxoKt", - "symbol": "FTG", - "name": "Reactium", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AAixLvr77P8yKkb4d3wSzeCPGBjoAb1tAfTjG7MrxoKt/logo.png", - "tags": ["social-token", "community-token", "reactium"], - "extensions": { - "description": "Reactium is a React application framework, and this is its community token.", - "discord": "https://discord.gg/NwtHd4FZvf", - "website": "https://reactium.io" - } - }, - { - "chainId": 101, - "address": "3hUt6kC4iMqVLCvDkq885YVCdqz2juwFu8pwL2VJDNUC", - "symbol": "CRUSH", - "name": "MetaCrush", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/santini23s/MetaCrush/main/logo.png", - "tags": [ - "social-token", - "metaverse-token", - "Dating-token", - "utility-token" - ] - }, - { - "chainId": 101, - "address": "3mX43nH4dgvCLJZXSo1duzkSU6YcKXQGE56MUh3wUsko", - "symbol": "GIAME", - "name": "Giame Fajardo", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/gmfajardo/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7d2L3moARJhMP7uTrYuPW3d43hnSswGpwdGnXxia9kg4", - "symbol": "GCWL", - "name": "Galactikka Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7d2L3moARJhMP7uTrYuPW3d43hnSswGpwdGnXxia9kg4/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "http://dsc.gg/galactikkaclub", - "twitter": "https://twitter.com/galactikkaclub", - "website": "https://galactikkaclub.com/" - } - }, - { - "chainId": 101, - "address": "Eo8sDvxHMzKXvAJRoqHNFqL7LDmcP3ZGJRrrMo2Ku27P", - "symbol": "ORi", - "name": "Orisha Coin Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/OrishaCoin/crypto/main/logoforCoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2maDvG9nXGVstjdnsCZoSsNtjoda1SsZTLrHBVRgLR5F", - "symbol": "CORE", - "name": "CORE", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2x4fH7kWNgSLpBjCuFBKKKiNHMcJb6fHs8ahQZUWJj1p/Core.png", - "tags": ["utility"] - }, - { - "chainId": 101, - "address": "6maqSiQ6MBvrQuPASFJmAM1VqDrQVQ9PcvrtFYhgQbvr", - "symbol": "ASKME", - "name": "ASK ME TOKEN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/sravannerella/askMeCrypto/main/ASKMe.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7DmySPgKTJGFqxyhVN8pivrJFWFKJQPRRvux3UXGZumz", - "symbol": "SKOG", - "name": "Skog Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SkogDev/skogtoken/main/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://skogdev.no/" - } - }, - { - "chainId": 101, - "address": "7G5KeJceruc7Kh6zYiwdXo7QF7kfHBie1anSfx3SA9MA", - "symbol": "EDS", - "name": "Ehecatl Dragon Souls", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Chirryrth/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DexAsMPG1GDrgHbmybp3G1gj84DYxbUnHYsf9g93PsDF", - "symbol": "SEMBIT", - "name": "sembit", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/olinmama/crypto/main/sembit.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Gm6szibJfB1ZzUxNYf85nXwFchugqTqNyE5fDwWfBc7K", - "symbol": "ILU", - "name": "ILoveU Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/rjdrar/crypto/main/symbol-1.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "D81JUj1FwK1iNrXodm6fyQyHnNRaov4zknUjDHW4SYqe", - "symbol": "AXC", - "name": "AxCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/GroovyDrew93/crypto/main/logo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8TNcijJ63HiA7aD2PswJcGDsxiJugkg9LvSFxmVFQ6y7", - "symbol": "RALA", - "name": "Strala", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/stralatoken/strala/main/strala.png", - "tags": ["utility"] - }, - { - "chainId": 101, - "address": "75cSjYPsTi5q1mLyc9wEnqpEJiVHWcy9jj8ce2JQqPvB", - "symbol": "LRDCN", - "name": "Lerd Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/zurcas/LC_Crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9PRwJDVYiMkHU2JatNzS3paZiGV3GHxLqvpRh46VgrN", - "symbol": "STK", - "name": "StatusKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/StathisKap/StatusKoin/main/SK.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2s8hVBfVKdsiUixaacxC2oEUtb8f7ejxyfRw98BTXA12", - "symbol": "VALE", - "name": "Vale Unleashed", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2s8hVBfVKdsiUixaacxC2oEUtb8f7ejxyfRw98BTXA12/logo.png", - "tags": ["game", "utility-token", "gaming"], - "extensions": { - "twitter": "https://twitter.com/valeunleashed" - } - }, - { - "chainId": 101, - "address": "2mM18RXhqXJ7AYWtQ5iBrjyzsCfy14PvFfcde9Rwpw33", - "symbol": "SLID", - "name": "Sol Lizard", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/WAHYU1236/logoorang/main/logo.png", - "tags": ["utility-token", "community-token", "meme-token"], - "extensions": { - "twitter": "https://twitter.com/SolanaLizard" - } - }, - { - "chainId": 101, - "address": "DER1EFvpyDGE3GXwFX467VsxjR5HMwYQsBQdcSBRVZw1", - "symbol": "HX", - "name": "Heliosx", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Jguillen268/heliosx/main/logo-heliosx.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BDpgjGFi1xasBYEFPDxekLTnyU84j8hspMk6E8VBkP2V", - "symbol": "PPC", - "name": "Pinot Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BDpgjGFi1xasBYEFPDxekLTnyU84j8hspMk6E8VBkP2V/logo.png" - }, - { - "chainId": 101, - "address": "W1ZhQHoHnL5Rvt2eHZBzzZQ93Qpx1DpAmysvv7EmJo9", - "symbol": "WIZ", - "name": "Stakewiz", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/W1ZhQHoHnL5Rvt2eHZBzzZQ93Qpx1DpAmysvv7EmJo9/wiz-square.png", - "tags": ["utility-token"], - "extensions": { - "description": "Stakewiz is a Solana stats explorer and validator alerting tool that let's everyday stakers keep track of their validators.", - "discord": "https://discord.gg/3JXdTavv6x", - "twitter": "https://twitter.com/stakewiz", - "website": "https://www.stakewiz.com" - } - }, - { - "chainId": 101, - "address": "9M6ceqS9nfEsrikzykCXVuEKZW9jbmGew7cfy8rFWK3M", - "symbol": "HRT", - "name": "Home Rewards", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/IIorigindesignII/homerewards/main/logo_homerewards.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DJDL8BDftybBkddbvGuVuXsHY7PuTYZjSFgML1FB1miE", - "symbol": "JSC", - "name": "Jaroscoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Itzacartouche/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EKuVjHTHc9g8gvRZvjWLqgwD2bEsfxyaudmFfD9QGqMd", - "symbol": "EMMATK", - "name": "Emmanuel BRUNEAU NFTs", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ImmoSearch/crypto/main/LogoNFT.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4BszBCzskD7T73movPVSm6gWScXZsqmisgVYo5HdCvmC", - "symbol": "BB", - "name": "BostonBionics Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/bostonbionics/bostonbionics/03190f8dff48913d39ca486a60afd42fea990f6a/logo.jpg", - "tags": ["company-token"], - "extensions": { - "website": "https://www.bostonbionics.eu/" - } - }, - { - "chainId": 101, - "address": "nosXBVoaCTtYdLvKY6Csb4AC8JCdQKKAaWYtx2ZMoo7", - "symbol": "NOS", - "name": "Nosana", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/nosXBVoaCTtYdLvKY6Csb4AC8JCdQKKAaWYtx2ZMoo7/logo.png", - "extensions": { - "coingeckoId": "nosana", - "discord": "https://discord.gg/nosana", - "github": "https://github.com/nosana-ci", - "medium": "https://nosana.medium.com/", - "telegram": "https://t.me/NosanaCI", - "twitter": "https://twitter.com/nosana_ci", - "website": "https://nosana.io/" - } - }, - { - "chainId": 101, - "address": "AcRznQeMaFqotVikPYVzkH36yueawGCniMeeFmmmjPnW", - "symbol": "FED", - "name": "FedCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AcRznQeMaFqotVikPYVzkH36yueawGCniMeeFmmmjPnW/logo.png" - }, - { - "chainId": 101, - "address": "4b3mWs4puEvyAmcWcPiZV1Expi9QwVt5jAhxoLnNzMw9", - "symbol": "FITBOX", - "name": "FITBOX Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/fitboxworld/solanacrypto/main/FBW.png", - "tags": [ - "community-token", - "utility-token", - "social-token", - "metaverse-token", - "growth-token", - "learn-2-earn", - "NFTs", - "DeFi" - ], - "extensions": { - "discord": "https://www.discord.com/invite/fitboxworld", - "instagram": "https://www.instagram.com/fitboxworld", - "twitter": "https://twitter.com/fitboxworld", - "website": "https://www.fitboxworld.com" - } - }, - { - "chainId": 101, - "address": "7xfKgh8vtX2RrZn21wFTQSP9jsjh7Fqo8P4igYfmxxD3", - "symbol": "ASDEX", - "name": "AstraDEX", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/ASTRADEX123/crypto/main/Logo.png.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "L7SA5ATrMm5kfLarfD4sJhVkQMhuXpcsprMicAZibk6", - "symbol": "DAM", - "name": "Chonky Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/alexmcculley19/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5XzbcgnzjGByMuCh1hUZnzZvWJ6ekjqsnFs1mRtSyfuX", - "symbol": "REICH", - "name": "ReichCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ReichCorp/Reich/main/REICHCOIN-TRNSP.png", - "tags": ["social-token", "utility-token", "Crypto-Token"] - }, - { - "chainId": 101, - "address": "FuFrEUPoUTJCuTdnQ5sABFM3VaceFqJ7rigbYAG2YALu", - "symbol": "HAC", - "name": "Heroes Arena Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FuFrEUPoUTJCuTdnQ5sABFM3VaceFqJ7rigbYAG2YALu/logo.png", - "tags": ["game", "utility-token", "nft", "gaming"], - "extensions": { - "discord": "https://discord.gg/Qt7n5ha2fy" - } - }, - { - "chainId": 101, - "address": "8VbGtyibxmwax3u3adzcj6YY9TWzYaNi3PPgvtJ23DRP", - "symbol": "ZTNHM", - "name": "ZTNHM Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Zamakhchari10/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CtJtWd9cyM5dM6kpbaPj6QWv4ga9VhnRTAqjD3tjAkCi", - "symbol": "GTRC", - "name": "GTRCoin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/RustyGoatOC/crypto/main/Download.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HoGbvSustgSvZMyjbMKE3iNBbfrcATEYbbsaPwA9xxMp", - "symbol": "$HOGLOT", - "name": "Hog Lottery Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HoGbvSustgSvZMyjbMKE3iNBbfrcATEYbbsaPwA9xxMp/logo.png" - }, - { - "chainId": 101, - "address": "8XRXCe1SasJcsU2EAmcW9yJhK1f2Z2avGCEhyNjPD2SD", - "symbol": "DMTS", - "name": "DMuertos", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Alvindaley/dmuertoscoin/main/DMuertos200.png", - "tags": ["utility-token", "community-token", "social-token", "nft-token"], - "extensions": { - "description": "DMuertos NFT Token", - "twitter": "https://twitter.com/DMuertosNFT", - "website": "https://dmuertos.com" - } - }, - { - "chainId": 101, - "address": "GRYvuPE1zVZHZeJMu6q8UGmC55ej6H9qqymGUaQDcNuq", - "symbol": "WRKT", - "name": "Wracker Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/nexfortisme/asset-store/main/icon.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CbU2bWHoy73HqCm9PQjGcniaxhFkQ65zWTJyUfNU5694", - "symbol": "EURONIN", - "name": "Euronin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CbU2bWHoy73HqCm9PQjGcniaxhFkQ65zWTJyUfNU5694/logo.png", - "tags": ["utility-token"], - "extensions": { - "instagram": "https://www.instagram.com/euronin.io/", - "website": "https://www.euronin.io" - } - }, - { - "chainId": 101, - "address": "CAaTZn6zQYiiuBWGjDDxrbQPZXRbJsZ2NVeX2A8gTFMG", - "symbol": "SPARKY", - "name": "Sparky Papillon Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CAaTZn6zQYiiuBWGjDDxrbQPZXRbJsZ2NVeX2A8gTFMG/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "85o7Co7jurn2Up4uBUhNamhEyp6FN7Tc6fm3XMa883CK", - "symbol": "TMT", - "name": "Tommy Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/detectivevoke/crypto/main/Black%231.png", - "tags": ["social-token", "community-token"], - "extensions": { - "description": "Tommy Token" - } - }, - { - "chainId": 101, - "address": "51BpgNQaFHVZaXorub35SqXFZ8phvRSNpmTZBSwSdzc5", - "symbol": "CFROG", - "name": "Crypto Frog", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/BartKmiecik/CryptoFrog/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5pAprHtXs9k4L3tYPVMGrUkMt24r9GN8Z7AkSbMooGNN", - "symbol": "MLC", - "name": "MallCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/alinftminter/sol.mall/main/logo.pnj.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FhUtknp2SYWNJrbrpHDWr2nF6HpBVCUbehD7VWAy2Nt9", - "symbol": "LDY", - "name": "Lovely DanDy Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FhUtknp2SYWNJrbrpHDWr2nF6HpBVCUbehD7VWAy2Nt9/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "http://lovelydandy.ch" - } - }, - { - "chainId": 101, - "address": "G3Yp8RSzAKbkYyB8cX1RW1uRd8Vm7ZgfGvPxPiqnMXyU", - "symbol": "HSKY", - "name": "HSKY Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/lukapiplica/cryptotoken/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2EKzQjEbEBqygpy7sqBk7E9Bj7NFsFJp9PDqqxTzVA2E", - "symbol": "LILI", - "name": "lilium", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/hamdielhamdi/token-list/main/assets/mainnet/2EKzQjEbEBqygpy7sqBk7E9Bj7NFsFJp9PDqqxTzVA2E/lilium.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "D33w6Fc6m54oEx4h44BYXAWa2LGur1N7twafs9iBSVLj", - "symbol": "GINKGO", - "name": "GinkCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/D33w6Fc6m54oEx4h44BYXAWa2LGur1N7twafs9iBSVLj/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "8U4GvLbQqVbgAQMpkEQKNtF2B37KuxCXiuG6g2mxo6oC", - "symbol": "LION", - "name": "CryptoLions Coin", - "decimals": 7, - "logoURI": "https://raw.githubusercontent.com/jrwesty23/CryptoLions/main/CryptoLionToken.jpg", - "tags": ["social-token"], - "extensions": { - "address": "8U4GvLbQqVbgAQMpkEQKNtF2B37KuxCXiuG6g2mxo6oC", - "description": "CryptoLions Metaverse Coin", - "discord": "https://discord.gg/aUYVJjVzdj", - "facebook": "https://facebook.com/CryptoLIONsCanada", - "medium": "https://medium.com/@CryptoLionsCan", - "twitter": "https://twitter.com/CryptoLionsCan", - "website": "https://cryptolions.ca" - } - }, - { - "chainId": 101, - "address": "78uaHEgTUELYBUbNX2FgijH64FudDJERGZHzrArSV3Le", - "symbol": "PIDT", - "name": "Pixel Drone Ticket", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/78uaHEgTUELYBUbNX2FgijH64FudDJERGZHzrArSV3Le/logo.png", - "tags": [ - "game", - "nft", - "mint", - "mint-ticket", - "ticket", - "pixel", - "pixelinvaderz" - ], - "extensions": { - "discord": "https://discord.gg/ms4ZPsCVvr", - "twitter": "https://twitter.com/pixelinvaderz", - "website": "https://pixelinvaderz.com/" - } - }, - { - "chainId": 101, - "address": "Fm6Fb91iMW48S8cSJVVenMZDm1jS284r1a5z9264fvws", - "symbol": "FRISCO", - "name": "Frisco", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/andyfife/crypto/main/frisco.png", - "tags": ["social-token"], - "extensions": { - "website": "https://milkywayfiasco.com/" - } - }, - { - "chainId": 101, - "address": "2ReJfPzPVGAJQ9vc3Hk2GmWngwmJFLpPr3R3bjhzmKc5", - "symbol": "SPEC", - "name": "Speccoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/hspecca92/crypto/main/scott.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9pkudFiG5qhiSQQ8XatPbxZj8zBQ5m4XzHsKHMAGkkCR", - "symbol": "SERSH", - "name": "Serenity Shield", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9pkudFiG5qhiSQQ8XatPbxZj8zBQ5m4XzHsKHMAGkkCR/logo.png", - "tags": ["token"], - "extensions": { - "twitter": "https://twitter.com/serenityshield_", - "website": "https://serenityshield.io" - } - }, - { - "chainId": 101, - "address": "B87x4tx7dKLxdupRcLxpNA6XafNHsHT5XkKAimj83BVu", - "symbol": "PIP", - "name": "Pippa Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Avran2611/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Hg8Vzzodt1Hx6zM65g5v5p1bfW4NjP5UjqMJnqufa8MC", - "symbol": "JoJo", - "name": "JoJoCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/JoJoModding/crypto/main/crypto.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EYS73RNeyGmx9KR2me9ohZvzY1UhdUjLq3iqKH8vUGeH", - "symbol": "JNC", - "name": "Juni Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/PTS3000/cripto2/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GoLNtewUy5uRxQv8mdMgWQgNemvfuvMZMPWcsHnfkXQc", - "symbol": "SHCT", - "name": "Stajic Hoti Crypto Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/denizconnect/connectingcrypto/main/connecting.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CVhMRvUrskbG59EEpiCBRcYPrd9f9jWyPeBrU89rTBbR", - "symbol": "CCNN", - "name": "Call Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/towardsuffering/Call-Coin/main/Prototype_A_Call_Coin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AJFS2CD5GVB8ohiLY61NSzVAtMKSPYV67YCnXhyc9vXY", - "symbol": "MHK", - "name": "MYHHKEN", - "decimals": 100, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EsZfrs1iWh9CXzbpGUfUkRfs35KkUWXJH2S6Y9D272M/logo.png", - "tags": ["community-token"] - }, - { - "chainId": 101, - "address": "BQmBMhxhAHuvdzPWTjv6Atj1HHLjsXrnwmWrsdYDtBD2", - "symbol": "SURV", - "name": "Under", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BQmBMhxhAHuvdzPWTjv6Atj1HHLjsXrnwmWrsdYDtBD2/logo.png", - "tags": ["social-token", "community-token"], - "extensions": { - "description": "Undersurvival Token", - "website": "https://linktr.ee/tacline_undersurvival" - } - }, - { - "chainId": 101, - "address": "4QBwTbXtvpL4ai9CHmmC7V88gAK2TKYhS5fTLGpVb7Fu", - "symbol": "BMT", - "name": "BumbierToken", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Bumb1eris/BumbieruToken/main/pear2.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "A1nMCFUhHiV39FTaKZkzrQd6Q2UXZpVz9BeVvbddbpBV", - "symbol": "LUNE", - "name": "Lune", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/micksavioz/crypto/main/lune.png", - "tags": ["nft"] - }, - { - "chainId": 101, - "address": "FsSLBLTtCkRLwnEVzdNHiqasDWXkRfHAVqYHDX9gpzwU", - "symbol": "SOLEIL", - "name": "Soleil", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/micksavioz/crypto/main/soleil.png", - "tags": ["nft"] - }, - { - "chainId": 101, - "address": "4dmdcF11iZgj4qYSFV7Zd44jhws5YVApNZptBnsozNJx", - "symbol": "MTMT", - "name": "Moon Theory Mint Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4dmdcF11iZgj4qYSFV7Zd44jhws5YVApNZptBnsozNJx/logo.png" - }, - { - "chainId": 101, - "address": "2BNi8eCPKataycG1qEVj9p3jAZs5t5Wq5Zfkgw9nX41f", - "symbol": "GOOD2", - "name": "GOODCOIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/good2bgood/good/main/goodlogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Ei8cio2iKfBErSCyHuGzvSqPQpDPd9qaxdE8nJYroX1B", - "symbol": "DOPET", - "name": "Dope Token", - "decimals": 9, - "logoURI": "https://user-images.githubusercontent.com/1009138/148701526-1836e263-2628-4264-a572-23b093324bbd.png", - "tags": ["social-token"], - "extensions": { - "discord": "https://discord.com/invite/dope-cats", - "twitter": "https://twitter.com/dope_cats", - "website": "https://www.dopecats.com/" - } - }, - { - "chainId": 101, - "address": "G4ctxjj7dV88HBnQ6Jx2bQeUGbgj9QpU2j4R2GNEWCMx", - "symbol": "BBYTE", - "name": "BinaryByte", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/binarybyte-net/BinaryByteToken/main/BBtokenlogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EE6bUF6wpGCYmKbSTqmQParFa6imXAJiYUN5pA39r2Kz", - "symbol": "DINAR", - "name": "dinar coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/flstok/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2cUiM1QyKoTTMb5xssJ2dBx8jbGaKK8NPNnyVdLdtfCw", - "symbol": "BBP", - "name": "Belgium Beer Project", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2cUiM1QyKoTTMb5xssJ2dBx8jbGaKK8NPNnyVdLdtfCw/logo.png", - "tags": [ - "beer-token", - "webshop-token", - "belgium-token", - "solana", - "social-token", - "utility-token" - ], - "extensions": { - "website": "https://belgiumbeerproject.be/" - } - }, - { - "chainId": 101, - "address": "J7cpg4uXDP4E9EYRLS5cZwJcy12sM86bPjawjNpohTHD", - "symbol": "Good", - "name": "SEMSoft", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/good2bgood/good/main/goodlogo.png", - "tags": ["Social"] - }, - { - "chainId": 101, - "address": "514h2GS6K2vLx4Ru1D22Fj2oxEZ2MyGho2j8gjRbKHeE", - "symbol": "OSNSO", - "name": "osnso fun", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/514h2GS6K2vLx4Ru1D22Fj2oxEZ2MyGho2j8gjRbKHeE/logo.png", - "tags": ["social-token", "osnso"], - "extensions": { - "twitter": "https://twitter.com/goon_rush" - } - }, - { - "chainId": 101, - "address": "253TNECj84WknnpXPSdfb3uR3XxAviH6ZahKXYtVx9Yf", - "symbol": "SOLRAE", - "name": "SolRae", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/KraZyMa50N/solrae/main/logo.sm.png", - "tags": ["social-token", "nft", "utility-token", "community-token"] - }, - { - "chainId": 101, - "address": "8WDJHzLR94ZCiJdkeGHMUY3TdWuryWgTGgWM9XRCbUG4", - "symbol": "EWS", - "name": "Enterprise Web Service", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8WDJHzLR94ZCiJdkeGHMUY3TdWuryWgTGgWM9XRCbUG4/logo.png", - "tags": ["social-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/enterprisewsrvc", - "website": "https://enterprisewebservice.com/", - "youtube": "https://www.youtube.com/channel/UCiOimz60fahnbGEdTkN-fpQ" - } - }, - { - "chainId": 101, - "address": "Ctk8LtetjKQpTRoTfh1Pqgf2kxjdo6npuzRNgbsYgG1h", - "symbol": "CST", - "name": "Coin98 Stock Token", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Ctk8LtetjKQpTRoTfh1Pqgf2kxjdo6npuzRNgbsYgG1h/logo.png", - "tags": ["tokenized-stock", "utility-token", "Coin98"], - "extensions": { - "telegram": "https://t.me/coin98" - } - }, - { - "chainId": 101, - "address": "6wbV1dKvPZZ68mKaF9v93Q2DtKXH71t7LdhNaD6z9Fbb", - "symbol": "FFB", - "name": "FreddyFazCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Peeperwidth/freddy/main/FreddyCoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "A1KWZzcUrsX9MAsL8XtZkuS4RX6fjZazc7K5UoX42M3M", - "symbol": "ARTZ", - "name": "Artozo", - "decimals": 4, - "logoURI": "https://artozo.mypinata.cloud/ipfs/QmdBoJK2HTRc7B71Xo36VqEXpME7JeexZPJkF1tamdQTTy", - "tags": ["utility-token", "payment-token"], - "extensions": { - "website": "https://artozo.com" - } - }, - { - "chainId": 101, - "address": "F14Cp89oAXMrNnaC4mKMNKHPWw2p2R4DRFAZEdJhUBkD", - "symbol": "MOONBURN", - "name": "MOONBURN", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/Joblo197/Crypto/main/Shroom%20Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HtGxBioB1v5vkfSJxkTh52rdYVLg72J1xdsurJS27ZJR", - "symbol": "SOLINX", - "name": "Solinx", - "decimals": 0, - "logoURI": "https://github.com/gdevsuper/sol-token-new/tree/main/assets/mainnet/HtGxBioB1v5vkfSJxkTh52rdYVLg72J1xdsurJS27ZJR/SolinxLogo.png", - "tags": ["social-token"], - "extensions": { - "twitter": "https://twitter.com/AtEMWORLD" - } - }, - { - "chainId": 101, - "address": "Cb2NVafBWfYwecmmJVGUetAVvJaiNahVMHbTEGMpanHi", - "symbol": "PENNY", - "name": "Penny", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Cb2NVafBWfYwecmmJVGUetAVvJaiNahVMHbTEGMpanHi/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://itsthelabel.com" - } - }, - { - "chainId": 101, - "address": "CNTnf6FS8Vi3nPmoKUXxoU6MdoKwDgQnVA85kVxKs1CJ", - "symbol": "PANAM", - "name": "PhoenixPanam", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/phoenixpanam/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2QyXrDw26mq3Pw3C2Fswz22qPMVLSLg9BfqPy6PqmsMt", - "symbol": "GREATLT", - "name": "Great Legendary LT", - "decimals": 6, - "logoURI": "https://github.com/thanathos9558/token-logo/blob/main/logo.PNG", - "tags": ["utility-token", "game-currency"], - "extensions": { - "description": "GREAT LEGENDARY is a PLAY TO EARN game in which participants aspire to create an attractive community with a growing economy, focused on blockchain technology to play and earn rewards while playing.", - "discord": "https://discord.gg/abQQGvUye2", - "twitter": "https://twitter.com/GreatLegendarys", - "website": "https://greatlegendary.com/" - } - }, - { - "chainId": 101, - "address": "D3Z4pdXyf2cXWURq3raLV18e7ZDm8BXCKGD42LuJLVaP", - "symbol": "WDE", - "name": "WDE Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MitchellSP/WDEcoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CTejycdZJhT452dzi9mTfy2NgXwcpGarxtXLbh1D757Q", - "symbol": "MKC", - "name": "Monkey Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/maindotmarcell/Monkey-Coin-Assets/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HS8aF3KJ959yAXxaGf68Ga1mARoQVGZTER4PyiSwmumq", - "symbol": "DKT", - "name": "DKToken", - "decimals": 0, - "logoURI": "https://github.com/gocho2021/crypto/blob/main/DKT%20Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "B3HdvnP91cAZM6sVU1ZnZA1x388ZGQZyRH7hyHoxUuFh", - "symbol": "DANNY", - "name": "Danny", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/B3HdvnP91cAZM6sVU1ZnZA1x388ZGQZyRH7hyHoxUuFh/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://itsthelabel.com" - } - }, - { - "chainId": 101, - "address": "BSyCt8JDqQjXTGvzyaiACyRcQ9fJdvrNbBwaF2QgTS3s", - "symbol": "WCBT", - "name": "War Council Battle Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/thewarcouncil/wcbt-token/main/logo.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "AsDBSQte3gycEbzravDugoRQPxSWFXAm724itdJn3Gnc", - "symbol": "BBWL", - "name": "Brunch Bytes WhitedListed", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AsDBSQte3gycEbzravDugoRQPxSWFXAm724itdJn3Gnc/logo.png" - }, - { - "chainId": 103, - "address": "FPBXFrZ2HEKyc4yMeXJj5fpPbBa8DHzyRqx56sV1Lxno", - "symbol": "INT", - "name": "Inferno", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Hariienesh1901/Inferno/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8yQE3si8A36KJYHWy8yyFPyjKX63abXTToQLPuwsEbnm", - "symbol": "COYN", - "name": "Coyne Coin", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/eckardtlo/crypto/main/NC.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DWnBMN8ec2Nk4koNGzWCAYee7gpWSXp3yTmwBsvRaxud", - "symbol": "DEAN", - "name": "Dean", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DWnBMN8ec2Nk4koNGzWCAYee7gpWSXp3yTmwBsvRaxud/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://itsthelabel.com" - } - }, - { - "chainId": 101, - "address": "8JDsyaAAwpTihZycq8FFSrXWHPbmiXpQXRZWaUnxBV76", - "symbol": "WUCOIN", - "name": "WUCOIN", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/wucoin0/wucoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3FYzcJvLeQubLuAgacV6sDu9Ye8Eg1vFYpCxD3ogp74M", - "symbol": "CCG", - "name": "Collectors Club Governance", - "decimals": 9, - "logoURI": "https://arweave.net/gBhj9k-4TGhwDwsnZxRQKMg_3ZQsvL1oeL0SUcrroPs", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/collectorsclub", - "medium": "https://collectorsclub.medium.com", - "twitter": "https://twitter.com/TheWatchersCC" - } - }, - { - "chainId": 101, - "address": "Czm5ySFYbcxsri15Hss2GYWa13CvbnUaeNm9ngJNkGvM", - "symbol": "SLOT", - "name": "Sloth Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/maindotmarcell/Sloth-Token-Assets/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "883Umg7SBVNWfVE3EzUQFgo6UbEQGf9bj6qyDL4kJrY5", - "symbol": "FNCN", - "name": "Fan Coin", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/eckardtl/crypto/main/fc.PNG", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HCBPNDD9iz683PszPBZzoy7xEub4GQ7rHBJxM57cLQpf", - "symbol": "LNFTxTHUG0160", - "name": "LNFT Thugbirdz-0160", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HCBPNDD9iz683PszPBZzoy7xEub4GQ7rHBJxM57cLQpf/logo.png", - "tags": ["liqnft-owner-token"], - "extensions": { - "discord": "https://discord.gg/PYZWRHgVwM", - "twitter": "https://twitter.com/liqnft", - "website": "https://www.liqnft.com/gallery/THUG0160" - } - }, - { - "chainId": 101, - "address": "Dd7pji6EruuFPuAxuZG5LwZUdPSzYCTN6NsttrkHeedS", - "symbol": "FLUFF", - "name": "SolSamos", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solsamos/token-list/main/assets/mainnet/Dd7pji6EruuFPuAxuZG5LwZUdPSzYCTN6NsttrkHeedS/FluffIcon.png", - "tags": ["social-token", "utility-token", "community-token"] - }, - { - "chainId": 101, - "address": "8JYfcavGunEGPTuLF4DHDeYjBt6gJmS9beQegPnTrhkH", - "symbol": "NRG", - "name": "eNeRGy", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/unlimitedenergynrg/crypto/main/NRG-logo.png", - "tags": ["game", "utility-token", "nft", "gaming"] - }, - { - "chainId": 101, - "address": "8ssNv1qPnN1UAfGzLjT9gDTPed2eqXsJgKq5wMB8ESan", - "symbol": "$WHALES", - "name": "INTERSTELLAR WHALES TOKEN", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8ssNv1qPnN1UAfGzLjT9gDTPed2eqXsJgKq5wMB8ESan/logo.png", - "tags": [ - "community-token", - "utility-token", - "social-token", - "metaverse-token", - "play-2-earn", - "NFTs", - "DeFi" - ], - "extensions": { - "discord": "https://discord.gg/xJjUYsWPN3", - "twitter": "https://twitter.com/STELLAR_WHALES", - "website": "https://interstellarwhalesnft.com" - } - }, - { - "chainId": 101, - "address": "AZTgMrEH7jW2pp2F1qTCJ9gkbJK1MVa5Uy2q4cJpJot1", - "symbol": "BMD", - "name": "BumbierDollar", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/BumbieruInvestments/BumbierDollar/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "64h1SmKJiosJXkokXQwN3dRu92JBnSAGx416q9gdAYZt", - "symbol": "SLG", - "name": "Solido", - "decimals": 9, - "logoURI": "https://app.solido.games/images/logo5.png", - "extensions": { - "telegram": "https://t.me/solidogames", - "twitter": "https://twitter.com/solidogames", - "website": "https://solido.games/" - } - }, - { - "chainId": 101, - "address": "CLjXrTPioQDCLmfqUdyjiwCy7D7FHMs5edWQWXjesCWJ", - "symbol": "MMT", - "name": "Moon Money Token", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/agentspade/MoonMoneyToken/main/logo.png", - "tags": [ - "social-token", - "community-token", - "Utility-token", - "payment-token", - "NFT" - ], - "extensions": { - "website": "http://moonmoneybank.com" - } - }, - { - "chainId": 103, - "address": "2NR6WaaCqmxEwoemqtf1c4sguLVmcaQVzfwhWdhKBoCc", - "symbol": "DVTK", - "name": "DevToken", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2NR6WaaCqmxEwoemqtf1c4sguLVmcaQVzfwhWdhKBoCc/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "svtMpL5eQzdmB3uqK9NXaQkq8prGZoKQFNVJghdWCkV", - "symbol": "SVT", - "name": "Solvent", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/svtMpL5eQzdmB3uqK9NXaQkq8prGZoKQFNVJghdWCkV/logo.png", - "tags": ["utility-token"], - "extensions": { - "coingeckoId": "solvent", - "discord": "https://discord.gg/thK8BCtQbM", - "github": "https://github.com/solventprotocol", - "medium": "https://medium.com/@solventprotocol", - "serumV3Usdc": "HuFKVQNyB177c9DiocQksYzBCtHMRUP5bBXZJzuLvYQm", - "telegram": "https://t.me/solventprotocol", - "twitter": "https://twitter.com/solventprotocol", - "website": "https://solvent.xyz" - } - }, - { - "chainId": 101, - "address": "HL9rCQ185mXnLp7qPJA5nL3iKjTtXk3pfkJ1DMvCQDxz", - "symbol": "CNPI", - "name": "CNPinvest", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/kenviet/CNPI/main/CNPI.png", - "tags": ["MEMES-TOKEN", "NFTS", "DEX"] - }, - { - "chainId": 101, - "address": "GCzUTpii6QSMoAnqY2rKwXUS7EHWCYbA2X4CawNGnVt1", - "symbol": "PEAR", - "name": "Bumbieris", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/BumbieruInvestor/Bumbieri/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5iFz597f2F5hjpA7kAuzB1ndJggs5LJYGg8wwN7nJGQj", - "symbol": "JDX", - "name": "Jaydoux", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/dvxpower/jdx/main/Jdx-logos2.png" - }, - { - "chainId": 101, - "address": "A7UfEJQ89JRhhwkYFsB8VxFj2LBx76k4GT2bywTfLNFu", - "symbol": "YCB", - "name": "Yottabits Crypto Binary", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/A7UfEJQ89JRhhwkYFsB8VxFj2LBx76k4GT2bywTfLNFu/logo.png", - "tags": ["social-crypto", "utility-token"] - }, - { - "chainId": 101, - "address": "FExwLD8oa4JP15G639gQmm6cJPpBUXg73C11Y9Xn9SUb", - "symbol": "LBT", - "name": "Lucas BaTOKEN", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/lbpinheiro/lucasbatoken/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "413vAqjCPcjkGm5JEWNqXDti757PbtXjB2ju6ecMLbWf", - "symbol": "PNIS", - "name": "Elis Gay LMAO", - "decimals": 0, - "logoURI": "https://github.com/AR1Z0NAPN1SMAN/token-list/blob/09e2082a5d2f73b1e6d39aeb3487dce83b725477/assets/mainnet/413vAqjCPcjkGm5JEWNqXDti757PbtXjB2ju6ecMLbWf/cover8.jpg?raw=true", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2hQLnJuLVpa7bRWBv3DKnp8HtbnDmbagWfdZLX7BsvDx", - "symbol": "HEALTH", - "name": "Swiss Health Coin", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2hQLnJuLVpa7bRWBv3DKnp8HtbnDmbagWfdZLX7BsvDx/logo.png", - "tags": ["Health"], - "extensions": { - "website": "http://healthyswiss.ch" - } - }, - { - "chainId": 101, - "address": "LowWCjZx8Yksbuhb7izqEGmhwidS98RwwGcfAeTg7qU", - "symbol": "LOWTOKEN", - "name": "Low Token", - "decimals": 0, - "logoURI": "https://tj55zg4zqmheu27krx52xoeebbzbx4yzy4ef2kmgiaev5llsmdza.arweave.net/mnvcm5mDDkpr6o37q7iECHIb8xnHCF0phkAJXq1yYPI", - "tags": ["social-token"], - "extensions": { - "instagram": "https://www.instagram.com/low_sleazy", - "twitter": "https://twitter.com/lowsleazy", - "website": "https://lowsleazyakalowlife.bandzoogle.com/home" - } - }, - { - "chainId": 101, - "address": "DBGwvKn9tXBbW7WN3JP4X4tLBbP3Et3z3AV7Smu7YAf1", - "symbol": "ANUC", - "name": "Ashonk Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/GajarKaHalva/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "tC3VFr8KHNETCRPkyx9Kwp6reKDsncYXXvUEj2pEmHr", - "symbol": "JCE", - "name": "Juice", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Joebenitus/Juice/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FHaFNXqLYP3tauBR8YG2zX9f5f6TiPjsW4RP2vkvoRM2", - "symbol": "LBLY", - "name": "Liberlandy", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FHaFNXqLYP3tauBR8YG2zX9f5f6TiPjsW4RP2vkvoRM2/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FRemSi7cqQPetjBV2SzBxhgsZoxgNYw3NuqF5Erf8u9u", - "symbol": "VZ", - "name": "VZion", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FRemSi7cqQPetjBV2SzBxhgsZoxgNYw3NuqF5Erf8u9u/logo.png", - "tags": ["metaverse-token"] - }, - { - "chainId": 101, - "address": "6wFD6foDuXV3xMLzHtJTxWpQAhnQ1XR27Zjofs5qWZPf", - "symbol": "FLX", - "name": "Flexcoin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/flexboks/flexcoin/main/Flex-ikon-stor.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://flexboks.com" - } - }, - { - "chainId": 101, - "address": "Ep2HcbGf6KsTfeDhJSjCbsWPcYziMmDnBpDFCYh5nC4m", - "symbol": "PENG", - "name": "Penguin Token", - "decimals": 0, - "logoURI": "https://github.com/Andrekreta/Solana_Token/blob/main/Penguin-Token.png", - "tags": [ - "social-token", - "community-token", - "Utility-token", - "payment-token", - "NFT" - ] - }, - { - "chainId": 101, - "address": "EjcSnvLtAbm6tXVfNKm3YNSfvPC3tdsTQw6jv3K5ZwHV", - "symbol": "NILF", - "name": "NILF Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/NFTMeOfficial/NIFL-logo/main/logo.png", - "tags": [ - "utility-token", - "MetaVerse", - "community-token", - "play-to-earn", - "stake-to-earn", - "multi-chain", - "NFT" - ], - "extensions": { - "discord": "https://discord.gg/nftme", - "telegram": "https://t.me/nilfio", - "twitter": "https://twitter.com/NILFToken", - "website": "https://nilf.io" - } - }, - { - "chainId": 101, - "address": "2cKSkyng5MPYtuxbHnKTJVJ2nNH9hZ4ivovSK7xuBsGW", - "symbol": "dCAPS", - "name": "Decentralized Caps", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/Nakejolen/bit-booze/main/assets/dcaps%20official.png", - "tags": [ - "social-token", - "community-token", - "Utility-token", - "payment-token", - "NFT" - ], - "extensions": { - "discord": "https://discord.gg/4wexHdsSND", - "twitter": "https://twitter.com/bit_booze", - "website": "https://bit-booze.com/" - } - }, - { - "chainId": 101, - "address": "DZyQhqKbdjk4qERM9B6Tk3KMPibXADEejDBx21W8oCnC", - "symbol": "KAMRA", - "name": "Kamracoin", - "decimals": 7, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DZyQhqKbdjk4qERM9B6Tk3KMPibXADEejDBx21W8oCnC/logo.png" - }, - { - "chainId": 101, - "address": "7xDo5775a2PgFuotkqukM1CtKdMx8rxBhgxrhvYt1d7W", - "symbol": "GAD", - "name": "GAD coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MaciejGad/gad_coin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "585772wNa6DMRV3BwAFStS3A45DPTuUbhbwyAZG1kZBX", - "symbol": "SHK", - "name": "Shrek Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/serdafim24/shrek/main/main-qimg-8430e461c28bbfb39ef1806f0b4100f3.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3TrqXqA7Ao5AGpUtFzdt55jDyd7XYHv5rirLuEbsfGGc", - "symbol": "ITG", - "name": "Imperial Throne Gelt", - "decimals": 0, - "logoURI": "https://github.dev/ifranckie/token-list/blob/f498eab83d075a8b9623149bdc0f0625c38276e0/assets/mainnet/3TrqXqA7Ao5AGpUtFzdt55jDyd7XYHv5rirLuEbsfGGc/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6yEwx3WtwupFTpjh3t9esUbq4giTKb8YWHVF8u5sTibD", - "symbol": "CCCT", - "name": "Canopeé Carbon Credit Token", - "decimals": 0, - "logoURI": "https://cdn.jsdelivr.net/gh/agrinix-token/logos/CCCT.jpg", - "extensions": { - "website": "https://canopee.com.br/" - } - }, - { - "chainId": 101, - "address": "CvzmN4HEMt2R9tsLyCV26yV2sT5tgD6nAHd7TNtWvHXq", - "symbol": "WWV", - "name": "Wild West Verse Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Wild-westverse/logo500/main/www_500.png", - "tags": ["utility-token", "social-token", "play-2-earn"], - "extensions": { - "discord": "https://discord.com/invite/EgkyvyrNNT", - "twitter": "https://twitter.com/wildwestverse", - "website": "https://www.wildwestverse.com/" - } - }, - { - "chainId": 101, - "address": "Ch42xPsHVL21rPBnorysg6V9WgbtNWnSjG1fqnq9GYAp", - "symbol": "NST", - "name": "NFTStudioToken", - "decimals": 1, - "logoURI": "https://raw.githubusercontent.com/Zlee12/NFTStudioHu/main/logo.png", - "tags": [ - "social-token", - "community-token", - "Utility-token", - "payment-token", - "NFT" - ] - }, - { - "chainId": 101, - "address": "GtLLiBNXXqmM4pdD4Z3UDb5aZ3wtggkwZ3TsEkTkUi9f", - "symbol": "SNOO", - "name": "SNOO TOKEN", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GtLLiBNXXqmM4pdD4Z3UDb5aZ3wtggkwZ3TsEkTkUi9f/logo.png", - "tags": ["token"], - "extensions": { - "twitter": "https://twitter.com/snootoken" - } - }, - { - "chainId": 101, - "address": "BfkeTseqgoxUn8gF1fGQC4GoqHMaCfzmQUgKF4nKDFhr", - "symbol": "CLN", - "name": "Central Loyalty Network", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BfkeTseqgoxUn8gF1fGQC4GoqHMaCfzmQUgKF4nKDFhr/logoo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/Token_CLN", - "website": "https://www.centralloyalty.com/" - } - }, - { - "chainId": 101, - "address": "9RxfJAtr4T6s7uvj1zdjvwviKRwnDCJdKQqUZmX5FYiC", - "symbol": "SXMAS", - "name": "Sockmas", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9RxfJAtr4T6s7uvj1zdjvwviKRwnDCJdKQqUZmX5FYiC/logo.png", - "tags": ["utility"], - "extensions": { - "twitter": "https://twitter.com/socksonsolana", - "website": "https://www.solsocks.exchange/" - } - }, - { - "chainId": 101, - "address": "9aXC5MphFpoiKtg9bvAKHV12vdKLfvzc1i1fZucFSE8m", - "symbol": "LYFE", - "name": "Lyfe Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/letto4135/solCrypto/main/cr.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9wBNzm54pPGq6T2WK6GecWvPgKcEYb6MYv225dgnuUu6", - "symbol": "KMM", - "name": "KMM Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/kum85/assets1/main/29B185B0-B5D0-4648-93B4-3D028C0B603D.jpeg", - "extensions": { - "website": "https://nouncurrency.wordpress.com/" - } - }, - { - "chainId": 101, - "address": "F6Kv4wJoK8pnNiHvbZPAvWqi5vm7jFAhJJ9DHQYtF498", - "symbol": "SOLUTION", - "name": "ECS", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/crypto/main/solution-logo.png", - "tags": [ - "community-token", - "utility-token", - "social-token", - "metaverse-token" - ] - }, - { - "chainId": 101, - "address": "6MREZaczrxNVph4RF4YFiDejxjcZVjZ1iNZW8NKcTVXa", - "symbol": "KCV", - "name": "Kelly Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Kels48/crypto/main/LogoReal.png.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "B2EYg3WaWeaTczfvWm2dZSXTGXGasC5Wb1wpG5VK2Q4L", - "symbol": "CYS", - "name": "CySecure Cyber Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/CySecure/Token/main/CELogo.png", - "tags": [ - "social-token", - "community-token", - "Utility-token", - "payment-token" - ] - }, - { - "chainId": 101, - "address": "DEV54dojzTED4ekUR4HwgZsWfTh9oouhuvhHUVszrMed", - "symbol": "MWL", - "name": "Munchiez WL Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DEV54dojzTED4ekUR4HwgZsWfTh9oouhuvhHUVszrMed/logo.png" - }, - { - "chainId": 101, - "address": "7GdDvrDJHabXcJ3JrJwtgKtXcT4nb4AujJXT3ZdSzSK6", - "symbol": "WCC", - "name": "Wookie Cookie Credits", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ad6321/crypto/main/wookiecookie_logo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CBiUjXNvwWaMphZAcx2dTeNzCrTCmKhbSm1xydLQARMe", - "symbol": "KRC", - "name": "KayaCoin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/D3ss3rtTV/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "35W3RdZ3pKoqxcHkwSfHkRDRerdVUhHBkAK8MK1NY2ZJ", - "symbol": "HPX", - "name": "HappyX", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/astefanis/HappyX/main/HApexsmall.png", - "tags": ["utility-token", "community-token", "meme-token"], - "extensions": { - "twitter": "https://twitter.com/HappyX_2022" - } - }, - { - "chainId": 101, - "address": "3HJZdqnCdUVW2Lq1oEHa3VbSgFNbSFXfcaZaqtpZLTyW", - "symbol": "GMORPH", - "name": "MORPH GOLD", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3HJZdqnCdUVW2Lq1oEHa3VbSgFNbSFXfcaZaqtpZLTyW/logo.png" - }, - { - "chainId": 101, - "address": "FZjiUmZaUCVxHBgHtcx9bc1qKpeai3hH2zHyYgTnWcps", - "symbol": "ZOTTI", - "name": "ZACHARIOTTI", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/SeagullsFucking/Zotti/main/FUCKADOOS.jpg" - }, - { - "chainId": 101, - "address": "J561hAjQ41Fu7ykuRW1fMBrFZVYv1u8urC13QtZSR5eL", - "symbol": "SQRL", - "name": "SquirrelCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jdconner675/squirrel/main/squirrelcoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "QQe5FMXHnF9cSx9PmYim7fveSsCSivqTut6BbYZGb1b", - "symbol": "CHMP", - "name": "Chump Buck", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/QQe5FMXHnF9cSx9PmYim7fveSsCSivqTut6BbYZGb1b/logo.png", - "tags": ["utility-token", "community-token", "meme-token"] - }, - { - "chainId": 101, - "address": "6YdYuSYprCdTxGGyFfpmZ4YzsgJGVW7k2Wscs6Z7Gbqg", - "symbol": "HYB", - "name": "Hybreed", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/ElHamrouche/Hybreed/main/logo.png", - "tags": [ - "community-token", - "utility-token", - "social-token", - "Gaming-token", - "metaverse-token" - ] - }, - { - "chainId": 101, - "address": "8G9EzHcevdcxNYDwaC89N2FuLRRywCjfbpNt7P6H75A", - "symbol": "ECS", - "name": "EnvironmentalComfortSolutions", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/crypto/main/ecs-logo.png", - "tags": [ - "community-token", - "utility-token", - "social-token", - "metaverse-token" - ] - }, - { - "chainId": 101, - "address": "29nBhWM2qRqSkttsX29pUwcNyDeznVbtN4HqkQjvYqxt", - "symbol": "BOOO", - "name": "BooBooCoin", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/Jacob130000x/booboologo/main/logo2.png", - "tags": ["farming", "payment-token", "NFT-Project"] - }, - { - "chainId": 101, - "address": "EEhosSQvC2yVDRXRGpkonGFF2WNjtUdzb48GV8TSmhfA", - "symbol": "AMMO", - "name": "Ammo", - "decimals": 9, - "logoURI": "https://arweave.net/rjP_BdMqFsXBWoInFYuVNDdqLzW1xo82egb74WRl3Hc", - "tags": ["nft-token", "staking"], - "extensions": { - "discord": "https://discord.com/invite/cryptostraps", - "twitter": "https://twitter.com/CryptoStraps", - "website": "https://cryptostraps.io" - } - }, - { - "chainId": 101, - "address": "iMSoEKeFPsxXe493ouVREU6Aq7aamY2uADqBHtJFhza", - "symbol": "ImSo", - "name": "Intergalactic Monkey Space Odyssey", - "decimals": 6, - "logoURI": "https://pscwbp7c3jss2hzt34p5y2atycb2vopk2x43iapvbr367pezd2nq.arweave.net/fIVgv-LaZS0fM98f3GgTwIOquerV-bQB9Qx377yZHps", - "tags": ["social-token", "community-token"], - "extensions": { - "discord": "https://discord.com/invite/Qsb5xaUK96", - "twitter": "https://twitter.com/rationalnft", - "website": "https://imsonft.art" - } - }, - { - "chainId": 101, - "address": "seedjTZWBtYzLi2eR5RidDKLaaZ5bkqk2ABVoUTMrKK", - "symbol": "GSS", - "name": "Genesis Seed", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/seedjTZWBtYzLi2eR5RidDKLaaZ5bkqk2ABVoUTMrKK/logo.png", - "tags": ["social-token"], - "extensions": { - "description": "Seed Society Genesis Collection", - "discord": "https://discord.gg/tA8J3fM6pq", - "twitter": "https://twitter.com/SeedSocietyNFT", - "website": "https://seedsociety.xyz/" - } - }, - { - "chainId": 101, - "address": "HTYYDuePjjsm2dYwzWpYwkreMwS3KCigp3oZXhdw6fWn", - "symbol": "IVCT", - "name": "Invictus", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Kindja501/CoinIVCT/main/hallows.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5B4UWAFCVdivK6dqte7g5NzUhEnAcWWzEHfVAKiybVoY", - "symbol": "MINE", - "name": "FullMoonMiningCompany", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/crypto/main/mine-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2pLgW8DsTrSgMT7NeXoyKV3avWn5fbaYZyC1kjofgLXU", - "symbol": "QRYES", - "name": "QRYES Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/rjdrar/my-solana-tokens/d4b3c396334b5c9bdaee49d36b8ae0ae4bff7867/qryes-icon.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BSsbGzUvWnsKoenarTd9vuiFmWcb7MFVKn2wuQuJCnFc", - "symbol": "SATL", - "name": "Selanthelas", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MasterDianite/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CKaKtYvz6dKPyMvYq9Rh3UBrnNqYZAyd7iF4hJtjUvks", - "symbol": "GARI", - "name": "Gari", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CKaKtYvz6dKPyMvYq9Rh3UBrnNqYZAyd7iF4hJtjUvks/logo.png", - "tags": ["community-token", "utility-token", "social-token"], - "extensions": { - "discord": "https://discord.gg/garitoken", - "twitter": "https://twitter.com/garitoken", - "website": "https://gari.network" - } - }, - { - "chainId": 101, - "address": "HFVzTS9Fp558HF9cAcGsTY6NR63naDE86RjcjAVM6VYZ", - "symbol": "SGC", - "name": "SushiGarden Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Rkm1999/crypto/main/mobile-85f244bc61af3ebce6e6.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3iVT5eeMT67ywdr3jEQVjZnvwhR5gzQtESLhGcH6pN4u", - "symbol": "KORN", - "name": "Korn Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/crypto/main/korn-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GYyL45cnhDWEcr2iEs5sxWND5SLXa7VMFUmwp1uM92YV", - "symbol": "WURK", - "name": "Wurklo", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GYyL45cnhDWEcr2iEs5sxWND5SLXa7VMFUmwp1uM92YV/logo.png", - "tags": ["utility-token", "community-token", "employment-agency"], - "extensions": { - "description": "Wurklo is improving the service industry by providing wurkers with equal power. We're putting the power of a large business in the palm of your hand, so you can wurk how you want!", - "discord": "https://discord.gg/ZeYjq7m7vN", - "facebook": "https://www.facebook.com/Wurklo", - "instagram": "https://www.instagram.com/wurklo/", - "medium": "https://wurklo.medium.com/", - "reddit": "https://www.reddit.com/user/Wurklo", - "telegram": "https://t.me/wurklo", - "twitter": "https://twitter.com/Wurklo", - "website": "https://www.wurklo.com" - } - }, - { - "chainId": 101, - "address": "8SNnEqCrwEtBh15M6KVqfPgX8zJGfvSioQFaKQ9oEnr4", - "symbol": "TPDC", - "name": "Topodoco", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/rjdrar/my-solana-tokens/master/assets/mainnet/8SNnEqCrwEtBh15M6KVqfPgX8zJGfvSioQFaKQ9oEnr4/heart-128.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EYqLKRmMWwZNx2mcWGYmPrUspH2KEMS1Jvn4hvCpvFPR", - "symbol": "ADT", - "name": "Adapter Digital Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/adapterdigital/adt/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GZLFnwCs9ruFj4iw6HWFySmaQHVaYoLZ6zHrfyq7CoNv", - "symbol": "TRADEN", - "name": "TRADEN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GZLFnwCs9ruFj4iw6HWFySmaQHVaYoLZ6zHrfyq7CoNv/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://traden.pro/" - } - }, - { - "chainId": 101, - "address": "3iFAZSDT54Z1YwCuMemJz2fb64odMbH5Ny9a2a9Anu6T", - "symbol": "SLIP", - "name": "SlipCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Solh4ckm1n/SLIP/main/logo%20S%20v3.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6Nvz4WeJBDszAgFFQg4soHyuQT9XH1gfNNc9d79TgLXh", - "symbol": "BEANZ", - "name": "Beans", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/AMGrind/BNZ/main/BNZ_ICON.png", - "tags": ["payment-token"] - }, - { - "chainId": 101, - "address": "AViCKt8bh3BQ6CnqKQq8DNPZLcyJktKggD9GTiwAntuo", - "symbol": "ABEET", - "name": "ABE Enterprise Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/albertamoyaw/crypto/main/abe_ent_logo.png", - "tags": ["utility-token", "nft", "gaming-token", "auction", "stake"] - }, - { - "chainId": 101, - "address": "6cHHjtGDjTp16zwELGRmdMLeZQsv2m1nSWzQ7RFMPVVv", - "symbol": "ABEFT", - "name": "ABE Family Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/albertamoyaw/crypto/main/abe_fam_logo.png", - "tags": ["utility-token", "social-token", "nft", "auction", "stake"] - }, - { - "chainId": 101, - "address": "2jw1uFmc1hhfJH3EqGhaE2rfZMMC2YBpxkZcdUbPppMn", - "symbol": "VIVAION", - "name": "Vivaion Token", - "decimals": 9, - "logoURI": "https://arweave.net/Xz7ErS3TZYmBnoh3OPkIQM_O6TPotyEJb6H5WFOe_qc", - "tags": [ - "community-token", - "utility-token", - "social-token", - "metaverse-token" - ], - "extensions": { - "coingeckoId": "vivaion", - "discord": "https://discord.gg/vivaion/", - "twitter": "https://twitter.com/vivaion", - "website": "https://vivaion.com" - } - }, - { - "chainId": 101, - "address": "6mPxDQcbagBshYiUMVxywAZaQBpGd2yr5GYvjesjPQg9", - "symbol": "DICKTOX", - "name": "Dicktox Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/necrolingus/DICKTOX_TOKEN/main/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://dicktox.com/" - } - }, - { - "chainId": 101, - "address": "BcRr96qhSoaKFjGJDKtSWmHDvTrv7ziuq29dRjtUmHuk", - "symbol": "NNI", - "name": "Neonomad Finance", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BcRr96qhSoaKFjGJDKtSWmHDvTrv7ziuq29dRjtUmHuk/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/Fj77EYcTNH", - "twitter": "https://twitter.com/neonomadfinance", - "website": "https://neonomad.finance" - } - }, - { - "chainId": 101, - "address": "vMETAjYD7KjC69E7zFCuw1g4PLfa6pcyztww9nSrgsQ", - "symbol": "vMETA", - "name": "vMETA", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/meta-collective/tokens/main/assets/vMETA.svg", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.com/invite/B6sd88UVmD", - "twitter": "https://twitter.com/_metaCollective", - "website": "https://meta-collective.digital/" - } - }, - { - "chainId": 101, - "address": "cMETAGX549J6Z5wLWDVHKxEmBibh8YkWvFftCRyaw2a", - "symbol": "cMETA", - "name": "cMETA", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/meta-collective/tokens/main/assets/cMETA.svg", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.com/invite/B6sd88UVmD", - "twitter": "https://twitter.com/_metaCollective", - "website": "https://meta-collective.digital/" - } - }, - { - "chainId": 101, - "address": "Hg35Vd8K3BS2pLB3xwC2WqQV8pmpCm3oNRGYP1PEpmCM", - "symbol": "eSOL", - "name": "EverSOL staked SOL (eSOL)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Hg35Vd8K3BS2pLB3xwC2WqQV8pmpCm3oNRGYP1PEpmCM/logo.png", - "extensions": { - "medium": "https://medium.com/everstake", - "twitter": "https://twitter.com/everstake_pool", - "website": "https://everstake.one" - } - }, - { - "chainId": 101, - "address": "3ahgNbqXRMS8YM8XCVzC3XrFcZ7y9ffJeqCNuQZXvFr1", - "symbol": "MZN", - "name": "Mutawazan", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/andbandu/mutawazan/main/mutawazan.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GXw4cMzffjshUqcTw7WtdsndVos32hRCEZcYgKsS2XTN", - "symbol": "MTZY", - "name": "Mitzy", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MorrrisK/mitzy/main/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "7WTbeUBKAPW61JBmziqGVKvsaJuQPnkg3rZcqBmieo1e", - "symbol": "NOLO", - "name": "No lo Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/rjdrar/my-solana-tokens/master/assets/mainnet/logo-1.png", - "tags": ["social-token", "nft", "auction", "stake"] - }, - { - "chainId": 101, - "address": "B9MQoo9CwC5tqEvvhkqd3Amj6z5goQ7ANvFooJXrfWdB", - "symbol": "IRC", - "name": "Informatics Research Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/awangga/irctoken/main/logo.png", - "tags": ["reward-token"], - "extensions": { - "website": "https://www.irc.or.id" - } - }, - { - "chainId": 101, - "address": "GDmJJ6ReMBBxXkfGajAfDuwDArLejPoLUAgtWkrfU7tt", - "symbol": "CNGUP", - "name": "CHINGUP TOKEN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/rahathussain01/CNGUP/main/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "5X1qmPGoj9Dbc9T7pncM8DMkLvamDoRSWf4FSu4kjajv", - "symbol": "XPPI", - "name": "XppiCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/xppi/xppicoin/main/logo.png", - "tags": ["utility-token", "social-token", "nft", "stake"], - "extensions": { - "discord": "https://discord.gg/HukFryQmr8", - "twitter": "https://twitter.com/xppipr0" - } - }, - { - "chainId": 101, - "address": "Babr3RH9Cgwmn3GsiAQjv3d9fSPpF2k7vZGP9P8Vxfkp", - "symbol": "MGNT", - "name": "MagnataCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/pcDamasceno/cryptoMagnata/main/Magnata.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3GK36MB6oudPbLaALKwwY1CDxKvsFuR2fdHLHknJ9KCb", - "symbol": "MUDO", - "name": "Mudo", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Pcheckbox/token/main/logo.png", - "tags": ["social-token", "community-token"], - "extensions": { - "website": "https://mudocoin.io" - } - }, - { - "chainId": 101, - "address": "99Q3AfFWX3rdidoQCnAPPoZFjsaXr2AAk65RUgxiwfUi", - "symbol": "GCC", - "name": "Gatsby Club Currency", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/benzsteamNFT/gat/main/logotoken.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "description": "Gatsby Club members earn GCC Tokens to access exclusives advantages : VIP NFT's, Metaverse, P2E. ", - "discord": "https://discord.com/invite/tvaFSXw4uV", - "twitter": "https://twitter.com/gatsbyclubnft", - "website": "https://www.gatsbyclub.net/" - } - }, - { - "chainId": 101, - "address": "9rpbyVWfW8LKutNaoyKGBzELSGhq2qvw1hcHLNmzFW6a", - "symbol": "N4C", - "name": "NFT 4 Cause DAO", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/qrtp/token-list/main/assets/mainnet/9rpbyVWfW8LKutNaoyKGBzELSGhq2qvw1hcHLNmzFW6a/logo.png", - "tags": ["social-token", "nft"], - "extensions": { - "twitter": "https://twitter.com/NFT4cause", - "website": "https://www.nft4cause.app/" - } - }, - { - "chainId": 101, - "address": "2BAsgeW243NuG3qdx31uB5RNeJaXiSwaoA5P9aXTZN8g", - "symbol": "QMT", - "name": "Quantum Mob Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/kdubb1337/assets/main/logo.png", - "tags": ["social-token", "community-token"], - "extensions": { - "linkedin": "https://www.linkedin.com/company/quantum-mob/", - "twitter": "https://twitter.com/quantummob", - "website": "https://qmo.io" - } - }, - { - "chainId": 101, - "address": "36zKufCebdFBbrjak6DUyFwPZs1grv8hkdem4C9HTan3", - "symbol": "STRO", - "name": "AstroCoin", - "decimals": 0, - "logoURI": "https://github.com/tylergaryalbers/tokenstuff/blob/master/logo2.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BQzxq9g7Q71orJsKnmDgerdueMoxDrLUTrqAneRayxQk", - "symbol": "MIKA", - "name": "Mikadoh", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/pinwheelHerman/crypto/main/Mikado.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5nni7VTkEDxZ8XHod9gbuypMv2vpyXw6SNRgwiuDXEQf", - "symbol": "FLZ", - "name": "Flooze", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/cryptodgk/flouze/main/logo.png", - "tags": ["social-token", "fun-token"] - }, - { - "chainId": 101, - "address": "9ReMvGxiJRK7x55qoFCG5tPhjFs3BypELZz1o5yFV933", - "symbol": "MYT", - "name": "MyIceT", - "decimals": 0, - "logoURI": "https://github.com/icebewide/Crypto/raw/main/ice", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "C6weJjW3WzYCyL74u1HtSWXVmnF8nGGx53qUk6FA3NuF", - "symbol": "GZL", - "name": "Gazel", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ozalperen/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AirFPYZVvoaxzn33pwoaHhnRK6XPizhwCMeNqevUZbXC", - "symbol": "AFT", - "name": "AirFly Token", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/Diegomtz9/token-list/main/assets/mainnet/AirFPYZVvoaxzn33pwoaHhnRK6XPizhwCMeNqevUZbXC/logo.png", - "tags": ["social-token", "utility-token"], - "extensions": { - "discord": "https://discord.gg/WKMFhNrxvS", - "twitter": "https://twitter.com/airflyersnft", - "website": "https://airflyersnft.com" - } - }, - { - "chainId": 101, - "address": "Cu1mWsE3JeEzMz1AzHezDJ99a45KheQWxWpLPkHKtsxu", - "symbol": "HCR", - "name": "Hunt Crypto Rewards", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Cu1mWsE3JeEzMz1AzHezDJ99a45KheQWxWpLPkHKtsxu/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CgqmgHx72HHXcd3ZT7221BX4KBjaCs6p15y6Aag73CeG", - "symbol": "NERC", - "name": "NeroCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/anasfredmanjack/crypto/main/nerotoken.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HsUC69czHjEXe1gUYWk3M1ciCQnndC8nxU995JFxZEDZ", - "symbol": "BLOQ", - "name": "Bloqen Puebla 1", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HsUC69czHjEXe1gUYWk3M1ciCQnndC8nxU995JFxZEDZ/logo.png" - }, - { - "chainId": 101, - "address": "7pL1P9kcd6VLBihySqgnc2SHHuFp2w8RwGy8zUdg1H4j", - "symbol": "IBBP", - "name": "Ipa Belgium Beer Project", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2cUiM1QyKoTTMb5xssJ2dBx8jbGaKK8NPNnyVdLdtfCw/logo.png", - "tags": [ - "beer-token", - "webshop-token", - "belgium-token", - "solana", - "social-token", - "utility-token" - ], - "extensions": { - "website": "https://belgiumbeerproject.be/" - } - }, - { - "chainId": 101, - "address": "FSccmrtyj163LKzRDfNiqR364zdJXUpNfEPtsinES13f", - "symbol": "BEZ", - "name": "BezCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/enricobez/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GDKEjdmmuksKBckLvV7Yk68VjgLBEVasZF8WtSriHriv", - "symbol": "WFX", - "name": "WhaleFlex", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/WhaleFlex/octopus/main/whaleflex_logo.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "47MXRyBzL2B8tutvCHNtahd35LdsTKhsVdneozf6mDwU", - "symbol": "CASPER", - "name": "Casper Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/therealghxst/crypto/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "G57GeVQwToCUq9CznjEit97fePFF7gvB2hp2GnjGqGSw", - "symbol": "MHT", - "name": "Miami Hitches Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Lenseov3/token/main/Logo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CHrdWn8btqYh3KKPs8S9Q9QqUD67hkYmk86QecLhh9E9", - "symbol": "BETX", - "name": "Solana Betting EXchange", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CHrdWn8btqYh3KKPs8S9Q9QqUD67hkYmk86QecLhh9E9/logo.png", - "tags": ["utility-token", "community-token", "virtual-currency"], - "extensions": { - "description": "Solana Betting eXchange - bet with SOL, SAMO, SRM, RAY - fantast token leagues and more", - "telegram": "https://t.me/solbetx" - } - }, - { - "chainId": 101, - "address": "9kHy1fxEtRbQPSKUSEBXqMkVnKT9Kc2x5B4YvRNCfa44", - "symbol": "BINX", - "name": "BinxCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/JDevXV/binx/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CL4QTB7RVvipzTufQ1hrXGkLnZ5LxhGQybBUURo7ZUkU", - "symbol": "SAMOCC", - "name": "Samoyed Crosschain", - "decimals": 0, - "logoURI": "https://i.ibb.co/sRTf7C6/723978-AB-B876-49-EA-9010-7-B01349-E945-C.jpg", - "tags": ["social-token", "utility-token", "community-token"] - }, - { - "chainId": 101, - "address": "HcpgxKtiD5MDSu1VK1L4Y7evEedjkkr4yYBMBNgdqRPi", - "symbol": "PIL", - "name": "Pile", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mattpar03/crypto/main/PileLogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3xNTg9uBP1cZox61SRqEMQwFNZxkwvYsbfVbLLJB1Gc7", - "symbol": "POM", - "name": "Pomsky Coin", - "decimals": 0, - "logoURI": "https://github.com/whitehathacks10/crypto/raw/main/image0.png", - "tags": ["social-token", "commodity-token", "meme-token"] - }, - { - "chainId": 101, - "address": "ACUMENkbnxQPAsN8XrNA11sY3NmXDNKVCqS82EiDqMYB", - "symbol": "ACM", - "name": "Acumen Governance Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ACUMENkbnxQPAsN8XrNA11sY3NmXDNKVCqS82EiDqMYB/logo3.svg", - "extensions": { - "coingeckoId": "acumen", - "discord": "https://discord.com/invite/UXDnngxRmn", - "medium": "https://acumenofficial.medium.com/", - "serumV3Usdc": "94CZWJMy7Jmc7gSM288WmFfse596H12KCKgwMARkyvhw", - "twitter": "https://twitter.com/acumenofficial", - "website": "https://acumen.network/" - } - }, - { - "chainId": 101, - "address": "KAshiP9YrrfrXenmtzX9crcePYzbSa6xjwZLAM8etmG", - "symbol": "$KASHI", - "name": "KASHI", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/KAshiP9YrrfrXenmtzX9crcePYzbSa6xjwZLAM8etmG/logo.png", - "extensions": { - "twitter": "https://twitter.com/kashidragons", - "website": "https://kashidragons.com" - } - }, - { - "chainId": 101, - "address": "Gj9GCwBoVwR2wqaKHCkrAYQtTpyPSfwLU4WjsoJMqQ8m", - "symbol": "ACESMINT", - "name": "ACES Mint Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Gj9GCwBoVwR2wqaKHCkrAYQtTpyPSfwLU4WjsoJMqQ8m/logo.png", - "extensions": { - "discord": "https://discord.gg/5gehRmCNem", - "twitter": "https://twitter.com/TheAcesNFT", - "website": "https://theacesnft.com/" - } - }, - { - "chainId": 101, - "address": "BQHdWCL8WTkxBsKKLvFxgThmCX9EK4zorTzpznabMrZY", - "symbol": "ABWT", - "name": "Alpha Blue Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BQHdWCL8WTkxBsKKLvFxgThmCX9EK4zorTzpznabMrZY/logo.png", - "tags": ["Zoolana"], - "extensions": { - "website": "https://www.zoolana.io/" - } - }, - { - "chainId": 101, - "address": "6XUWTnJEJxtK3zD6c6GdXZaHJxugJ7FnBoxtow9MRUoS", - "symbol": "ELM", - "name": "Elite World", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6XUWTnJEJxtK3zD6c6GdXZaHJxugJ7FnBoxtow9MRUoS/logo.png", - "tags": ["social-token"], - "extensions": { - "facebook": "https://www.facebook.com/EliteWorldMetaverse", - "telegram": "https://t.me/EliteWorldMetaverse", - "twitter": "https://twitter.com/EliteWorldMeta" - } - }, - { - "chainId": 101, - "address": "ER7VS5oDqmPCALdxopj7583gzUC49cBuuNUxFrfc4uCd", - "symbol": "BTR", - "name": "BiTrust Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/kum85/assets/main/77D92247-EF90-42A4-A6CC-291701665E8E.jpeg", - "extensions": { - "website": "https://nouncurrency.wordpress.com/" - } - }, - { - "chainId": 101, - "address": "EV1Fz9GycC5Yr19Ye6h6ct1m3NQMwmadrKiWHUDuXdnr", - "symbol": "SCAPESWL", - "name": "Scapes Whitelist", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EV1Fz9GycC5Yr19Ye6h6ct1m3NQMwmadrKiWHUDuXdnr/logo.png", - "tags": ["scapes-whitelist"], - "extensions": { - "discord": "https://discord.gg/scapes", - "medium": "https://scapesnft.medium.com", - "twitter": "https://twitter.com/scapesnft" - } - }, - { - "chainId": 101, - "address": "837zQBUJDs6JvMsVZkWdMaCTXsPkSfUyPEVEnuJZgMQt", - "symbol": "FETTI", - "name": "Fetti", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/837zQBUJDs6JvMsVZkWdMaCTXsPkSfUyPEVEnuJZgMQt/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "http://fetti.life/" - } - }, - { - "chainId": 101, - "address": "CYxGX9YZWdCZgnF4SobJNcE1APgisTh41u2pcqRU2Xov", - "symbol": "KNTO", - "name": "Kéntro", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/samueljpries/Crypto/main/k%C3%A9ntro.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HYM7xQ7Txze9H2oHpeR2MRqucu6jFcYJ7KU1yXVwbu4z", - "symbol": "MyEggs", - "name": "MyEggs", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/BrightTechnologies1/myeggs--logo@master/logo.png", - "tags": ["social-token", "commodity-token", "Utility-Token"], - "extensions": { - "twitter": "https://twitter.com/MyEggsNFT", - "website": "https://myeggs.art" - } - }, - { - "chainId": 101, - "address": "wDyvn5CYbfaEvcRHVs9tsCrjC6dhhiYSfnLy6yJu3Ky", - "symbol": "LFC", - "name": "The Levy Family Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Shinobialt/Crypto/main/logo-imresizer.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "S3SQfD6RheMXQ3EEYn1Z5sJsbtwfXdt7tSAVXPQFtYo", - "symbol": "ROSE", - "name": "ROSE (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/S3SQfD6RheMXQ3EEYn1Z5sJsbtwfXdt7tSAVXPQFtYo/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x21C718C22D52d0F3a789b752D4c2fD5908a8A733", - "assetContract": "https://explorer.oasis.updev.si/address/0x21C718C22D52d0F3a789b752D4c2fD5908a8A733", - "bridgeContract": "https://explorer.oasis.updev.si/address/0x5848C791e09901b40A9Ef749f2a6735b418d7564", - "coingeckoId": "oasis-network", - "serumV3Usdc": "EybAYkmRKCyD4w8AErTG1bqmnvT85LFuPQPMCc8J3yD" - } - }, - { - "chainId": 101, - "address": "ArdsPHY5LsCjvxSxZz8f3vTkv5qoYihmCCPMYvr6aQza", - "symbol": "MPI", - "name": "Meta Paradise Island", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ArdsPHY5LsCjvxSxZz8f3vTkv5qoYihmCCPMYvr6aQza/Mpi-new.png", - "tags": ["social-token", "solana", "utility-token"] - }, - { - "chainId": 101, - "address": "As5t6W78oDg78LuS7LWcNu1FfCtfSkRXiN9yVL77DDn8", - "symbol": "PEECH", - "name": "peach dot fun", - "decimals": 9, - "logoURI": "https://cdn.discordapp.com/attachments/903834329287897109/930672804523835422/Logo_Round.png", - "tags": ["virtual-currency"], - "extensions": { - "twitter": "https://twitter.com/_PeachFun", - "website": "https://peach.fun/" - } - }, - { - "chainId": 101, - "address": "7wHHrkv2NY7jMBHSLvCiQjYTje1x9i7Hq6Ppp6bHL3X", - "symbol": "GCON", - "name": "The G COIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/kok1no/crypto/main/g.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2BsZeLpEusAd7i6qkmCmiHUpocMTRghoBHzMb4suMnoi", - "symbol": "SBP", - "name": "SBT", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2BsZeLpEusAd7i6qkmCmiHUpocMTRghoBHzMb4suMnoi/logo.png", - "tags": ["utility-token", "social-token", "nft-token", "community", "SBP"] - }, - { - "chainId": 101, - "address": "8DWMpVjWCawgurBXWHjfDew1CjkxKGQevGMpGmhAFdTa", - "symbol": "DUST", - "name": "DUST", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/codingbeast/testapp/master/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "sobAUEhmPMrid5WtfXRCTRgASFFJbekKq8aLccC3DaL", - "symbol": "SOB2", - "name": "SolaLambo Version 2", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/sobAUEhmPMrid5WtfXRCTRgASFFJbekKq8aLccC3DaL/logo.png", - "tags": ["community-token"], - "extensions": { - "discord": "https://discord.gg/sy2xymyc7J", - "twitter": "https://twitter.com/SolaLambo", - "website": "https://sob.finance/" - } - }, - { - "chainId": 101, - "address": "BdNwXKmq9NTxLXMc9M35wkcJ4dBE2m3yf5LhKHJQfmE5", - "symbol": "KHLO", - "name": "KahleoKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/RoadRunner440/logo/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CWEX6oPPN4HKa93BVWZsmhxUPPmwk1BMSkZrcnWAT8gq", - "symbol": "VICE", - "name": "Vicegerent", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Longjoe76/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AR5AsX5Wuwi89r1tkftMYXaGwsSzt8f2GcL5ngTsaaTc", - "symbol": "SHAPES", - "name": "Shapes WL token", - "decimals": 0, - "logoURI": "https://metadata.apoyield.com/logo.png", - "tags": ["community-token", "nft"], - "extensions": { - "discord": "https://discord.gg/msB5gFcUZM", - "twitter": "https://twitter.com/shapesofsolana", - "website": "https://shapes.ltd/" - } - }, - { - "chainId": 101, - "address": "EimK4rPobJ6KosVq75pm3jSBB5waUiYATu4L38Up3hmZ", - "symbol": "OCEANTOKEN", - "name": "OCEANTOKEN", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EimK4rPobJ6KosVq75pm3jSBB5waUiYATu4L38Up3hmZ/logo.png", - "tags": ["utility-token", "social-token"], - "extensions": { - "address": "EimK4rPobJ6KosVq75pm3jSBB5waUiYATu4L38Up3hmZ", - "description": "OCEANTOKEN is a tokenized donation asset that supports TEAMSEAS and SeaChain projects", - "instagram": "https://www.instagram.com/oceantokens_founder//", - "website": "https://www.oceantokens.site/" - } - }, - { - "chainId": 101, - "address": "CLoTdqgpqcvCQDipcGDkJxBPJVyZMP8v8e3iCFP5tFfc", - "symbol": "MvrsWL", - "name": "Metaversol WL Token", - "decimals": 0, - "logoURI": "https://metaversol.com/coinlogo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Metaversol WL Tokens for Pass Mint", - "discord": "https://discord.gg/metaversol", - "twitter": "https://twitter.com/MxMetaversol", - "website": "https://metaversol.com/" - } - }, - { - "chainId": 101, - "address": "AWxmmrmnLaQoAvmzKXmjFAsSuAKd6fGox964jvKi9MY", - "symbol": "SPILU", - "name": "Sofie Private", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/ilov-eu/assets/main/SPILU-logo.jpg", - "tags": ["social-token"], - "extensions": { - "website": "https://spilu.ilov.eu/" - } - }, - { - "chainId": 101, - "address": "9idUGSpZkFtqxYTrSd3YsgcaVxVwfSTrDSQ411nckbvb", - "symbol": "ADAM", - "name": "Adam Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/adamliu84/ADAMCrypto/main/ADAM.png" - }, - { - "chainId": 101, - "address": "DtVC9rcYBQozaqorEN6EKpRnSGxVQdds3bQkjN8yQWxg", - "symbol": "DDCN", - "name": "DD Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SkippyG/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2NczZKqiEtv1CCufwBCLVRCh17w8aHAhvyGTU486KMo3", - "symbol": "ST", - "name": "Solana Tiger", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2NczZKqiEtv1CCufwBCLVRCh17w8aHAhvyGTU486KMo3/logo.png", - "tags": ["community-token", "meme"], - "extensions": { - "discord": "https://discord.io/solanatiger_slt", - "telegram": "https://t.me/solanatiger_slt", - "twitter": "https://twitter.com/solanatiger_slt", - "website": "https://solanatiger.com" - } - }, - { - "chainId": 101, - "address": "22WH22zjhczZU5Rc8jjteqNmM2hiv8VnJb8eha1B4eoE", - "symbol": "DFOREST", - "name": "Deer Forest", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/TheDeerNFT/logo/main/logo.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "64pS5rHb5DZD7LE62Yj12HMb85CNNqPXPsescGLZbkFZ", - "symbol": "CLM", - "name": "CentreLineMining", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MBbison83/centrelinemining/main/Black%20and%20Green%20Gaming%20Badge%20Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4WGGn2GwRFaw9EDXeC8Gx7qYsqkNZbpnvaBeMsY1AoSK", - "symbol": "MSM", - "name": "MetaSystem", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/alinftminter2/logo/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "AG7y2rFmjhhzkiKJXwm6nTtXwhWYoqZ1LNFFTKsuAFXG", - "symbol": "MCOIN", - "name": "Moon Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/colinantonell/crypto/main/mcoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6rCSJtHE6N7nzCmtA2tdSq1bcoEfeELUPV9k6REamt3", - "symbol": "ILOVEU", - "name": "ILoveU Platform", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/ilov-eu/assets/main/qr-400.png", - "tags": ["social-token"], - "extensions": { - "website": "https://ilov.eu/" - } - }, - { - "chainId": 101, - "address": "G93cdiAJMyZCzpn1uz8GHRxXHCh2NhcPmFeSAQRrVmxE", - "symbol": "Flint", - "name": "Flint", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/jamalalishov/Flinttoken/main/flintlogo.png", - "tags": ["social-token", "community-token", "game-token"], - "extensions": { - "website": "https://caveman.games/" - } - }, - { - "chainId": 101, - "address": "7MVwEf2Tjfos9axjSJjYLgGECepAiqJsJjH4qvSfMVot", - "symbol": "TIS", - "name": "TIS token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/KrisztianZagonyiTis/TISlogo/main/logo.png", - "tags": ["community-token"], - "extensions": { - "website": "https://theitsolutions.io/" - } - }, - { - "chainId": 101, - "address": "6dBh32Su2MSPFRRxziqchMmGSPZanExndEnC4RrXw2Xx", - "symbol": "WSDM", - "name": "Wisdom Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/slimeyoctopus/WSDM_token/main/logo.png", - "tags": ["social-token", "utility-token"], - "extensions": { - "description": "Laughing Buddha Wisdom Token", - "discord": "https://discord.gg/Hv5fScpArr", - "twitter": "https://twitter.com/BuddhasNFT", - "website": "https://laughingbuddhas.io" - } - }, - { - "chainId": 101, - "address": "7dYvmoEHzw1DKwkUFbnBewxGYce5mqRojgfQKK5dvpE5", - "symbol": "IK", - "name": "IstraKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/istracoin-dev/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GPhCi6EW4frdGHtxC6ddbxCpkEAmB8qec2GmVNYkr8yZ", - "symbol": "Arcade", - "name": "earn acade", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GPhCi6EW4frdGHtxC6ddbxCpkEAmB8qec2GmVNYkr8yZ/logo.png", - "tags": [ - "community-token", - "utility-token", - "metaverse-token", - "play-2-earn" - ] - }, - { - "chainId": 101, - "address": "Buec9o1MZ1nwtvFyLqnB1iAcGP7tcDmasCMiGiwFAaob", - "symbol": "RLUN", - "name": "Role Universe", - "decimals": 0, - "logoURI": "https://i.imgur.com/WrIZBE5.png", - "tags": ["utility-token", "community-token", "nft-token", "gaming-token"], - "extensions": { - "discord": "https://discord.gg/HEWjtkgrcS", - "telegram": "https://t.me/roleuniverse" - } - }, - { - "chainId": 101, - "address": "FNhGuZ25ZZvA8JzK8iVe7ovQV8GTbZkuYrHBivzJ11Sx", - "symbol": "ASHR", - "name": "Solasher Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/asherlagemi/crypto/main/logo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "pH5wWJc3KhdeVQSt86DU31pdcL9c8P88x2FQoKEJVHC", - "symbol": "BXS", - "name": "Bancambios AX", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/pH5wWJc3KhdeVQSt86DU31pdcL9c8P88x2FQoKEJVHC/logo.jpg", - "tags": [ - "impact-defi", - "bancambios-token", - "solana", - "impact-dex", - "defi-for-good", - "multi-chain" - ], - "extensions": { - "discord": "https://discord.com/invite/BXcommunity", - "facebook": "https://www.facebook.com/bancambios", - "imageUrl": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/pH5wWJc3KhdeVQSt86DU31pdcL9c8P88x2FQoKEJVHC/image.png", - "instagram": "https://www.instagram.com/bancambiosx", - "linkedin": "https://www.linkedin.com/company/bancambios", - "medium": "https://medium.com/@bancambios", - "telegram": "https://t.me/bancambiosx", - "twitter": "https://twitter.com/bancambios", - "website": "https://bancambios.exchange/" - } - }, - { - "chainId": 101, - "address": "5yDLN61f3aCu3b4uh7q4BvF9xG9xLe7o2GGVpMsd9uTR", - "symbol": "DUNI", - "name": "DUNNIE COIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/platinumshore/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CkD9GDPqME11zrFt7Lk51jdQSuPmP1nRULUWbBYj2Ngq", - "symbol": "B4C", - "name": "b4c meme coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CkD9GDPqME11zrFt7Lk51jdQSuPmP1nRULUWbBYj2Ngq/logo.png", - "tags": ["meme-token"], - "extensions": { - "twitter": "https://twitter.com/cryptobac", - "website": "https://cryptobac.me" - } - }, - { - "chainId": 103, - "address": "FWMTkCUmxa4xstJ6uP6wHHdtrC7sfCMoQNSg3z7rnbR5", - "symbol": "UST", - "name": "UST", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9vMJfxuKxXBoEa7rM12mYLMwTacLMLDJqHozw96WQL8i/logo.png", - "tags": ["UST"] - }, - { - "chainId": 103, - "address": "EMZseDMf96q9PrUBDpMTJSTagbRXdbpNS6kVjcM96RxW", - "symbol": "LUNA", - "name": "LUNA", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/F6v4wfAdJB8D8p77bMXZgYt8TDKsYxLYxH5AFhUkYx9W/logo.png", - "tags": ["LUNA"] - }, - { - "chainId": 101, - "address": "GQjMtTjjpHmUSc4xsmopBg2vRnhoyLtq2Q3SdbuzXaaC", - "symbol": "LMM", - "name": "Lion's Mane Media", - "decimals": 0, - "logoURI": "https://github.com/kevinianbrady/LMM_Token/blob/main/logo1.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BoEsKPwdGnkXmaav3D29tq3V2Y267JS4neQR8nrVVZSw", - "symbol": "RTD", - "name": "Retirement Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/k3nn8y/Coffee-Token/main/BoEsKPwdGnkXmaav3D29tq3V2Y267JS4neQR8nrVVZSw.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9m9eWSGozbJs56zbEzUw8ycnGQurZAcjE33dwXBttZDb", - "symbol": "OGRE", - "name": "Ogre Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/levoflax/crypto/main/ogre.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6ryi6dMrAtRdB44yLk9DDcoitJLn7LxtPygJAiYetHqM", - "symbol": "$WARX", - "name": "SYBER SPACE WARX", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6ryi6dMrAtRdB44yLk9DDcoitJLn7LxtPygJAiYetHqM/logo.png" - }, - { - "chainId": 101, - "address": "8DjZ7TzGjZhi115ZWzhk5T4ttfe4DihxyvgkSeF4n3BK", - "symbol": "LIH", - "name": "LIHYA Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/metoceto66/crypto/main/pngegg.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3PC4o5eEEKYBZzbYChomH8H5unHaA9YhvDqHpiK41d64", - "symbol": "creators", - "name": "creators", - "decimals": 6, - "logoURI": "https://creatorpro.live/simbolo-creator.jpg", - "tags": ["creator", "creators", "creator-token", "artist"] - }, - { - "chainId": 101, - "address": "3iH4LXRDMicfqb4TPR99QYzz1d6zyDvuuCWsQZxMH2bi", - "symbol": "BPTS", - "name": "Bounty Points", - "decimals": 9, - "logoURI": "https://gateway.pinata.cloud/ipfs/Qmf5gyuFsYg7gsHgaXxTebkMGCMKen7tz4Y6pqKLyfFycK?preview=1", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "6LzFfRewQXPyUPo1vepAUE5hNC95Qu3AwkXZeRG9R4s6", - "symbol": "SRNDM", - "name": "-Serenadium-", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Serenadium/cryptoyeah/main/Serenadium%20Logo.jpeg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "SoLotgMEBV3epFVmbM89ERaAs5srvsEN3cghDVTwcmT", - "symbol": "SOLO", - "name": "SoLoteria Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SoLotgMEBV3epFVmbM89ERaAs5srvsEN3cghDVTwcmT/logo.png", - "tags": ["utility-token", "community-token", "nft-token"], - "extensions": { - "discord": "https://discord.gg/SoLoteria", - "twitter": "https://twitter.com/SoLoteriaNFT", - "website": "https://soloterianft.com/" - } - }, - { - "chainId": 101, - "address": "Ey1Z2N1QPJSCdZfL9ENKaqrsH4c1pXHMeM7XQHh9DQqC", - "symbol": "ONTOS", - "name": "Ontos", - "decimals": 0, - "logoURI": "https://github.com/bartbrinkman/ontos-token/raw/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HvJxGSNz6f5ytZXCnKzH5kHVTwSG3qmgnd1FSeRzVrGH", - "symbol": "AOB", - "name": "Army of Balkan", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MViker/AoB/main/logo.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "CMGQeY9vUS4dh5VELg969BBWSmDfX3gnVjRddttpZErU", - "symbol": "NNNC", - "name": "NananaCoin", - "decimals": 0, - "logoURI": "https://user-images.githubusercontent.com/23483887/149228871-0e1f442f-2492-46a4-a6c9-5d6229c890e9.png", - "tags": ["utility-token", "nanana"] - }, - { - "chainId": 101, - "address": "CnysaXBy5hDdz9ekaQu4DUqSapn7ZheSRFPUjATVGzBN", - "symbol": "LGD", - "name": "Legend", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/theNetworkChuck/crypto/main/logo.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "9s9HnL3HgJegkh8hHBXEsRBU2M8Suu5tTdfXPNDzuKad", - "symbol": "IPCC", - "name": "IPCC Coin", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9s9HnL3HgJegkh8hHBXEsRBU2M8Suu5tTdfXPNDzuKad/logo.png", - "tags": ["utility-token", "community-token"] - }, - { - "chainId": 101, - "address": "CASHedBw9NfhsLBXq1WNVfueVznx255j8LLTScto3S6s", - "symbol": "sCASH-8", - "name": "Saber Wrapped Cashio Dollar (8 decimals)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CASHedBw9NfhsLBXq1WNVfueVznx255j8LLTScto3S6s/icon.png", - "tags": ["stablecoin", "saber-mkt-usd", "saber-dec-wrapped"], - "extensions": { - "coingeckoId": "usd-coin", - "discord": "https://discord.com/invite/GmkRRKJkuh", - "medium": "https://medium.com/@cashioapp", - "twitter": "https://twitter.com/CashioApp", - "website": "https://app.saber.so" - } - }, - { - "chainId": 101, - "address": "EU9aLffrTckFCs16da6CppHy63fAxMPF9ih1erQTuuRt", - "symbol": "sagEUR-9", - "name": "Saber Wrapped agEUR (Portal) (9 decimals)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EU9aLffrTckFCs16da6CppHy63fAxMPF9ih1erQTuuRt/icon.png", - "tags": [ - "ethereum", - "wrapped", - "wormhole", - "saber-mkt-eur", - "wormhole-v2", - "saber-dec-wrapped" - ], - "extensions": { - "address": "0x1a7e4e63778B4f12a199C062f3eFdD288afCBce8", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "ageur", - "description": "Angle is the first decentralized, capital efficient and over-collateralized stablecoin protocol", - "discord": "https://discord.gg/z3kCpTaKMh", - "twitter": "https://twitter.com/AngleProtocol", - "website": "https://app.saber.so" - } - }, - { - "chainId": 101, - "address": "Lirav2gsqs7jL1PFRUBp8uKACT8LYjDBV8c6nzchoer", - "symbol": "TRYB-TRYB", - "name": "Saber TRYB-TRYB LP", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Lirav2gsqs7jL1PFRUBp8uKACT8LYjDBV8c6nzchoer/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-wormhole-v2"], - "extensions": { - "website": "https://app.saber.so/#/pools/bilira" - } - }, - { - "chainId": 101, - "address": "UST8SCn7jrqsq51odVLqcmvnC658HkqrKrPL3w2hHQ7", - "symbol": "sUST-8", - "name": "Saber Wrapped UST (Portal) (8 decimals)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/UST8SCn7jrqsq51odVLqcmvnC658HkqrKrPL3w2hHQ7/icon.png", - "tags": [ - "wrapped", - "wormhole", - "saber-mkt-usd", - "wormhole-v2", - "saber-dec-wrapped" - ], - "extensions": { - "address": "uusd", - "bridgeContract": "https://finder.terra.money/columbus-5/address/terra10nmmwe8r3g99a9newtqa7a75xfgs2e8z87r2sf", - "coingeckoId": "terra-usd", - "website": "https://app.saber.so" - } - }, - { - "chainId": 101, - "address": "WLPGfDvnSsJg888FydDCRKkmKTwu4L3MHjfqBFj5LJD", - "symbol": "FRAX-UST", - "name": "Saber FRAX-UST LP", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WLPGfDvnSsJg888FydDCRKkmKTwu4L3MHjfqBFj5LJD/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-wormhole-v2"], - "extensions": { - "website": "https://app.saber.so/#/pools/frax_ust" - } - }, - { - "chainId": 101, - "address": "WLPJD4jW6gnWKfwfL5jyJwcxEPHKLMbncNfQwMmkzKz", - "symbol": "acEUR-agEUR", - "name": "Saber acEUR-agEUR LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WLPJD4jW6gnWKfwfL5jyJwcxEPHKLMbncNfQwMmkzKz/icon.png", - "tags": [ - "saber-stableswap-lp", - "saber-lp-allbridge", - "saber-lp-wormhole-v2" - ], - "extensions": { - "website": "https://app.saber.so/#/pools/aceur_ageur" - } - }, - { - "chainId": 101, - "address": "WLPv9tHDgkx3ekW8Kyp1TC222oYpr5BMZXTyBTLbk2n", - "symbol": "FRAX-CASH", - "name": "Saber FRAX-CASH LP", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WLPv9tHDgkx3ekW8Kyp1TC222oYpr5BMZXTyBTLbk2n/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-cashio"], - "extensions": { - "website": "https://app.saber.so/#/pools/frax_cash" - } - }, - { - "chainId": 101, - "address": "monKYjV2bHTjbJVWCCcwhxE8C96sdTKR2HUNUHCjh4z", - "symbol": "daoSOL-SOL", - "name": "Saber daoSOL-SOL LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/monKYjV2bHTjbJVWCCcwhxE8C96sdTKR2HUNUHCjh4z/icon.png", - "tags": ["saber-stableswap-lp"], - "extensions": { - "website": "https://app.saber.so/#/pools/monkedao" - } - }, - { - "chainId": 101, - "address": "son4WQ39xri8sqMqNQZAEtEEPTuUcCRHg7t1ZcYdkSw", - "symbol": "JSOL-SOL", - "name": "Saber JSOL-SOL LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/son4WQ39xri8sqMqNQZAEtEEPTuUcCRHg7t1ZcYdkSw/icon.png", - "tags": ["saber-stableswap-lp"], - "extensions": { - "website": "https://app.saber.so/#/pools/jsol" - } - }, - { - "chainId": 101, - "address": "8hc4d6bZrqMNmJykhBRGuZCCiadYKCZhPEg7Zi9Zme1m", - "symbol": "KAL", - "name": "Kalmunity Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8hc4d6bZrqMNmJykhBRGuZCCiadYKCZhPEg7Zi9Zme1m/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5NewpkvmyAtHWayn5nx4ob5rhWBxZXriiYMtwLkqZkmR", - "symbol": "RCC", - "name": "Rabimbi Caravan Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/diogoquaresma/crypto/main/logo2.png", - "tags": ["social-token"] - }, - { - "chainId": 102, - "address": "Saber2gLauYim4Mvftnrasomsv6NvAuncvMEZwcLpD1", - "symbol": "SBR", - "name": "Saber Protocol Token (Devnet)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Saber2gLauYim4Mvftnrasomsv6NvAuncvMEZwcLpD1/logo.svg", - "extensions": { - "coingeckoId": "saber", - "discord": "https://chat.saber.so", - "github": "https://github.com/saber-hq", - "medium": "https://blog.saber.so", - "twitter": "https://twitter.com/saber_hq", - "website": "https://saber.so" - } - }, - { - "chainId": 101, - "address": "iouQcQBAiEXe6cKLS85zmZxUqaCqBdeHFpqKoSz615u", - "symbol": "SBR", - "name": "Saber IOU Token (Liquidity Mining Rewards)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Saber2gLauYim4Mvftnrasomsv6NvAuncvMEZwcLpD1/logo.svg", - "extensions": { - "coingeckoId": "saber", - "discord": "https://chat.saber.so", - "github": "https://github.com/saber-hq", - "medium": "https://blog.saber.so", - "serumV3Usdc": "HXBi8YBwbh4TXF6PjVw81m8Z3Cc4WBofvauj5SBFdgUs", - "twitter": "https://twitter.com/saber_hq", - "website": "https://saber.so" - } - }, - { - "chainId": 101, - "address": "Fa4QEWtRXdjDAZqk3D6RwCCWFYmsx5aozNzpdMH6WEyr", - "symbol": "SIQUTA", - "name": "Siquta", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Fa4QEWtRXdjDAZqk3D6RwCCWFYmsx5aozNzpdMH6WEyr/logo.png", - "tags": ["community-token", "utility-token", "social-token"], - "extensions": { - "github": "https://github.com/defihq", - "website": "https://defihq.org/" - } - }, - { - "chainId": 101, - "address": "653BVmeqX21t8d7RqFRHSnuAjJWZPyhgJ6PdzUNPDcPF", - "symbol": "MAKCN", - "name": "MakerCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/JamesDooley1/crypto/main/MakerCoin%20Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9vSpFqM7Tg1DdqX4jH5xJjF9VHRZHuSHWLFcDSvAqkyX", - "symbol": "CRIS", - "name": "Cris Coin", - "decimals": 0, - "logoURI": "https://github.com/gatekeeperuk/crypto-criscoin/blob/main/CClogo2.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DqHffZXd75rC3zrvpMveMowqerZcQwp5i1PA9orLJvgu", - "symbol": "METT", - "name": "Mettcoin", - "decimals": 0, - "logoURI": "https://i.ibb.co/0qrbGfh/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "sHTmZs1eUp4pbZJbCdDMbBTwDtnPouGR2KT4ysA8s8y", - "symbol": "SBICK", - "name": "SBI CK Token", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/sgniceguy/staticfiles/main/SBI%20DM%20Logo%20Only.png" - }, - { - "chainId": 101, - "address": "DUE8oA4YqJ3UysJWidiFybFKuszxw72kgjeKWrJLtquo", - "symbol": "BPZ", - "name": "BoppZ Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/chouli12/BPZ-Token/main/20hoihgoubrwpiwepoijwf%3Bn.jpg", - "tags": ["utility-token", "nft-token", "nft-token"], - "extensions": { - "twitter": "https://twitter.com/BoppZNft", - "website": "https://boppznft.com/" - } - }, - { - "chainId": 101, - "address": "buckF8MnsB6QikWhBZe4jNLEbyrw4TyPP9XkLZ6QxkJ", - "symbol": "RBUCKS", - "name": "Rbucks", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/buckF8MnsB6QikWhBZe4jNLEbyrw4TyPP9XkLZ6QxkJ/logo.png", - "tags": ["utility-token", "community-token", "social-token"], - "extensions": { - "twitter": "https://twitter.com/rbucks", - "website": "https://rbucks.com/" - } - }, - { - "chainId": 101, - "address": "7Cw9BurQ3gwCNRaUoakZjpFzmmfDh9AH64MrawasktYS", - "symbol": "TKSE", - "name": "Token Seale", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/kseale14/token-seale/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "D3KdBta3p53RV5FoahnJM5tP45h6Fd3AyFYgXTJvGCaK", - "symbol": "usdt", - "name": "usdt", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/D3KdBta3p53RV5FoahnJM5tP45h6Fd3AyFYgXTJvGCaK/logo.svg", - "tags": ["stablecoin"], - "extensions": { - "coingeckoId": "tether", - "serumV3Usdc": "77quYg4MGneUdjgXCunt9GgM1usmrxKY31twEy3WHwcS", - "website": "https://tether.to/" - } - }, - { - "chainId": 101, - "address": "4WhpEbHAxXFuvEiWgY6UdjKFiFddCABXpVeALS6a5MfS", - "symbol": "FROGGIE", - "name": "FROGGIE", - "decimals": 9, - "logoURI": "https://arweave.net/hoTwLS0aeJohF6GoFGQC7ExBHdpaqeIgg0wN711C4Pw?ext=png", - "extensions": { - "twitter": "https://twitter.com/FrogClubb", - "website": "https://frogclub.xyz/" - } - }, - { - "chainId": 101, - "address": "2VFkmFpyFm9DMKch4UdrdyY7WHLGrWgwJLAdKwHd5ekY", - "symbol": "OODA", - "name": "OODA", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/OODA-X/ooda/main/OODA%20Coin%20Logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "6UfZBKm9y9vS7cZ3wj4hXyiVeKNu27rWapu4bAUsPdcx", - "symbol": "NEWT", - "name": "New Transformers", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6UfZBKm9y9vS7cZ3wj4hXyiVeKNu27rWapu4bAUsPdcx/logo.png", - "tags": ["payment-token", "utility-token", "nft", "metaverse-token"] - }, - { - "chainId": 101, - "address": "2V1AVjDVM2gZn72ZufG2HfFHDKXzS5XaCupNeKrdcruT", - "symbol": "ATL", - "name": "Akuma Serpent", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/onuraladi/assets/main/assets/trident.png", - "tags": ["utility-token", "community-token", "nft-token"], - "extensions": { - "discord": "https://discord.gg/wrdcRgdmA5", - "twitter": "https://twitter.com/AkumaSerpents", - "website": "https://www.akumaserpentsnft.com/" - } - }, - { - "chainId": 101, - "address": "75sm2rQ8ZUwMjqSr8e68fFBMKfHpwDNBfZ9aaW2M9E5y", - "symbol": "MBAG", - "name": "Moon Bag", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/officialmoonbag/logo22/main/logo22.png", - "tags": ["MEME-token"] - }, - { - "chainId": 101, - "address": "BikKd7FNs7xdKFZjFUida6KD4uKcH4mTm4DN2HoKqL2D", - "symbol": "INFH", - "name": "Inflation Hedge", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/kiranz38/SolTok/main/InfFlat.ico", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "D6e7QftKXzFuxUZxoBccrcgqbgaSDQyWZFawvQgkbi22", - "symbol": "PAN", - "name": "PanCoin", - "decimals": 0, - "logoURI": "https://github.com/otiszeon/pancoin/blob/main/logo.png?raw=true", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "G4PTvGzukR8HeRRuZ1Covyt6H4uzD1yzuHKvWTFJyX6Y", - "symbol": "KALT", - "name": "Official Kalmunity Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/G4PTvGzukR8HeRRuZ1Covyt6H4uzD1yzuHKvWTFJyX6Y/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FSrVG9VcTJuWr7tw9DV7hEg5NQjFgZ5g53KBG7uLi7NK", - "symbol": "CIN", - "name": "Cinder", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/hockaclu/cindericon/main/logo.png", - "tags": ["payment-token", "social-token", "nft", "metaverse-token"] - }, - { - "chainId": 101, - "address": "GjzmNzFSyLVqvwe3cKWK7SghXQ32hHuEMAfYrPWjHU99", - "symbol": "HOPE", - "name": "H0PIUM", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/NigelSamhain/Crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "H66XBfbJxQfdBRjoatYH2s8uD7gyaNWmVBbujHkj95tU", - "symbol": "DWT", - "name": "Dream World", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/H66XBfbJxQfdBRjoatYH2s8uD7gyaNWmVBbujHkj95tU/logo.png", - "tags": ["utility-token", "DWT"] - }, - { - "chainId": 101, - "address": "BqTiHsoU6J3tfSDa8J6LSiPfmGDAukUEhiPMpBmakT8y", - "symbol": "MNY", - "name": "Muniy", - "decimals": 0, - "logoURI": "https://github.com/londonprojects/muniycoin/blob/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8rgbVTxkx8anUS9Ged9hs5EsHZoC2xMiucc9q54tyV5N", - "symbol": "ENTH", - "name": "Enthusiast DAO", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/Shivam1337/ETHUSIAST/main/ENTH.png", - "tags": ["community-token"] - }, - { - "chainId": 101, - "address": "ankhim7kPXxLKVbW1Tn7vH4mLTuvCAqHjhkKuvwWJ7b", - "symbol": "ANKH", - "name": "ANKH", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ankhim7kPXxLKVbW1Tn7vH4mLTuvCAqHjhkKuvwWJ7b/logo.png", - "extensions": { - "twitter": "https://twitter.com/SecretSphinxes", - "website": "https://secretsphinx.io" - } - }, - { - "chainId": 101, - "address": "58dV5UScqXrroUg5wvwiWQWpnndUM482b1QBRDVycFAT", - "symbol": "CRABS", - "name": "Crabs", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/vsilent/crabs/main/crabs.png", - "tags": ["social-token"], - "extensions": { - "website": "https://www.crabs.cash/" - } - }, - { - "chainId": 101, - "address": "H51zcP4KqEZuR5ZnTSBtuNWaZbGGzL3kZDL6sJg4KpuS", - "symbol": "OPTS", - "name": "OPTIMUM", - "decimals": 0, - "logoURI": "https://q4r2u6z6.stackpathcdn.com/wp-content/uploads/cube_optimum.svg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ACABzWtc21if4KMvCKNDWNQK9h27SZezzuxMLLPT34JJ", - "symbol": "WISE", - "name": "WiseCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/BLA4KM4MBA/wisecoin/main/wisecoin%20(1).png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HUbEX1fVK8SvmKYkNM3DNonrrpxjNzmyEZSjhmjGyqix", - "symbol": "HBX", - "name": "HUBEX", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HUbEX1fVK8SvmKYkNM3DNonrrpxjNzmyEZSjhmjGyqix/logo.png", - "tags": ["utility-token"], - "extensions": { - "telegram": "https://t.me/hubexnetwork", - "website": "https://hubex.org" - } - }, - { - "chainId": 101, - "address": "mZfGzkZ61rjS4UWYwwhPnbJZxfaofUioTAPKvewQHEp", - "symbol": "SOLGAME", - "name": "SOLGAME", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/mZfGzkZ61rjS4UWYwwhPnbJZxfaofUioTAPKvewQHEp/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4tFosJWH3RbuXNxYpPDPL72aP3WVJM8VbrocZ1txkJ44", - "symbol": "AOC", - "name": "AlphaOmega Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/moin-afk/alphaomega/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "BVnXMKfCzbdpqpYwuqgZURvFy2xh9aSu4LMhfihJG78b", - "symbol": "UST", - "name": "UST (devnet)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9vMJfxuKxXBoEa7rM12mYLMwTacLMLDJqHozw96WQL8i/logo.png", - "tags": ["UST"] - }, - { - "chainId": 103, - "address": "CjH3ukAUNpkJCbUK5KwoecHrFWJ9Zpn6p25AHj9gv7xb", - "symbol": "LUNA", - "name": "LUNA (devnet)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/F6v4wfAdJB8D8p77bMXZgYt8TDKsYxLYxH5AFhUkYx9W/logo.png", - "tags": ["LUNA"] - }, - { - "chainId": 101, - "address": "Do9mNqryUMyuCLM2avYcimiMtbND7Gyce4z2MGp4VHQq", - "symbol": "LZRD", - "name": "Lizardz Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Do9mNqryUMyuCLM2avYcimiMtbND7Gyce4z2MGp4VHQq/logo.png", - "tags": ["utility-token", "NFTs", "Boryoku-Lizardz"] - }, - { - "chainId": 101, - "address": "5mcRqyofvBiFm2Dt9AG2DRvJq1BkM6D3VX93u2DWMhsJ", - "symbol": "RP", - "name": "Rogue Panda Token", - "decimals": 4, - "logoURI": "https://c5kh5ocamc7ov5pchbjdj5pikijb7toenkhpy345svfir6d7naoa.arweave.net/F1R-uEBgvur14jhSNPXoUhIfzcRqjvxvnZVKiPh_aBw", - "tags": ["utility-token", "governance-token", "gaming", "NFTs"], - "extensions": { - "twitter": "https://twitter.com/rogue_pandas", - "website": "https://roguepandas.io/" - } - }, - { - "chainId": 101, - "address": "RichA8cRzwUT9RgsPtT1JBek9FqmnSuKuEnzJjMHQ2S", - "symbol": "$RICHES", - "name": "Rich Ostriches", - "decimals": 11, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/RichA8cRzwUT9RgsPtT1JBek9FqmnSuKuEnzJjMHQ2S/logo.png", - "extensions": { - "twitter": "https://twitter.com/OstrichNFT", - "website": "https://ostriches.io" - } - }, - { - "chainId": 103, - "address": "EyUnX5CPs1y1eQTiMHt4GKBVWDc96NyPGnrKL6xrSBmE", - "symbol": "CHERRY", - "name": "CHERRY (devnet)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EyUnX5CPs1y1eQTiMHt4GKBVWDc96NyPGnrKL6xrSBmE/logo.png", - "tags": ["CHERRY"] - }, - { - "chainId": 101, - "address": "6tbRiyDzRDDmhgrsLzAsm13bZ1vpESsT2zrx68mYS5vX", - "symbol": "CRTS", - "name": "Carrots", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/thambusamy/crypto/main/carrot.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "UMpAaqxAVEkkXCnoMu2rbGiP8B3QfX4P9XqDtT9k5G7", - "symbol": "BPS", - "name": "Black Pearl Society Token", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/UMpAaqxAVEkkXCnoMu2rbGiP8B3QfX4P9XqDtT9k5G7/logo.png", - "tags": ["community-token"], - "extensions": { - "twitter": "https://twitter.com/cptblackseazar" - } - }, - { - "chainId": 101, - "address": "GiXP9ZRsXwwDjtUdTB8UJ53Gq1KeHtVzKmwSbJh7URk3", - "symbol": "GRMC", - "name": "Gray Man Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/anfesoft/grm/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "SPD2Ha9rusWCvzKN1NNhbmsFBrQvPQTKGMWL1onmyKJ", - "symbol": "SPD", - "name": "South Park Degens Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SPD2Ha9rusWCvzKN1NNhbmsFBrQvPQTKGMWL1onmyKJ/logo.png", - "extensions": { - "website": "https://twitter.com/southparkdegens" - } - }, - { - "chainId": 101, - "address": "rMMASpNW7YDfNMGjHqGtSjwcEuPygbTDCgdNNxnipNp", - "symbol": "rMMA", - "name": "redeemable MMA", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/rMMASpNW7YDfNMGjHqGtSjwcEuPygbTDCgdNNxnipNp/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Cross-chain Gaming SuperGuild building the tools of the future. Redeemable token to be redeemed for $MMA upon closure of the upcoming IDO", - "discord": "http://discord.gg/mmagaming", - "medium": "https://medium.com/@MMAGaming", - "twitter": "https://twitter.com/MetaverseMining", - "website": "https://mmagaming.io/" - } - }, - { - "chainId": 101, - "address": "Rq2M27fJBNYeLbJqjYwEmMqQAC2UWxdAA83MxgDBVGo", - "symbol": "JOEY", - "name": "Joey's Bits", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/JoeyTatu/crypto/20f86361ba6ccc3e1105d211393eaa2ea08d2456/logo.png", - "tags": ["social-token"], - "extensions": { - "facebook": "https://facebook.com/TattedFaceJoey", - "instagram": "https://www.instagram.com/TattedFaceJoey", - "linkedin": "https://linkedin.com/in/JoeyTatu", - "reddit": "https://www.reddit.com/user/TattedFaceJoey", - "telegram": "https://t.me/TattedFaceJoey", - "twitter": "https://twitter.com/TattedFaceJoey", - "website": "https://linktr.ee/TattedFaceJoey" - } - }, - { - "chainId": 101, - "address": "Heho2JqtUx8jSAti49QshC6qxgWwwrzPWeQrRG4QsR35", - "symbol": "JTC", - "name": "JT Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Turner747/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AJHsQJQ3sJ9T1GKXrRz2ZJKGzRysQwF1xQxUmS6xmdqC", - "symbol": "SLT", - "name": "Solatube", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/CryptoSol1/cryptosol/main/kindpng_34058.png", - "tags": ["multimedia-token"] - }, - { - "chainId": 101, - "address": "HMyu1LU4tzBUVMwgficGQsR2DZqVR6SjqznzpWeVU5R7", - "symbol": "PG7S", - "name": "pg7scorp", - "decimals": 0, - "logoURI": "https://github.com/ArtiePeterson/crypto/blob/main/ArtieJesse__pg7s__logo2.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6Dujewcxn1qCd6rcj448SXQL9YYqTcqZCNQdCn3xJAKS", - "symbol": "ARTE", - "name": "ARTE", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/ArtPunks/ARTE-token/main/assets/token_512.png", - "tags": ["utility-token"], - "extensions": { - "coingeckoId": "arte", - "description": "Utility token which is the fuel of the blockchain-art ARTE ecosystem.", - "discord": "http://discord.gg/artpunks", - "medium": "https://medium.com/@artpunknft", - "serumV3Usdc": "4wqFtfechUSNW1nJ3WK5ogy478GTa66H99RrKnz45fa9", - "twitter": "https://twitter.com/ArtPunksNFT", - "website": "http://artpunks.fun/" - } - }, - { - "chainId": 101, - "address": "7ncPHXL5RMae3c6u59Mq2kgMFL5VHsR9m3Zy8dB91Fqe", - "symbol": "CRYP", - "name": "CryptoCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/weissnichtmehr/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FT4nC3F1Nm2KwNyANcggnuiLSgeBkV7eNoZTmRZrimxJ", - "symbol": "URKK", - "name": "You rock coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/lilypad219/crypto-2/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BLBUQ3w8cDx5ykNNeTuaSvMJ3Sz322hHKbHQAaccdwNv", - "symbol": "CHBIG", - "name": "CHBIG", - "decimals": 0, - "logoURI": "https://github.com/Chbig/chbig-crypto/blob/c0a38352b1f2a8dc4f1525b937bd1ff066a8502b/c.png?raw=true", - "tags": ["social-token"], - "extensions": { - "description": "Token distribué par Chbig pour sa communauté de Chbigonaute" - } - }, - { - "chainId": 101, - "address": "8wfzPPnT2GvRD5Hhf7YG8Ge8xENCGfcoKQXCDx4wkjVi", - "symbol": "MT", - "name": "Munch WhiteList Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8wfzPPnT2GvRD5Hhf7YG8Ge8xENCGfcoKQXCDx4wkjVi/logo.png" - }, - { - "chainId": 101, - "address": "6YxDnUQLMaiMgHFu9yRb2G761FSVjhHjeKaW7qMSApxo", - "symbol": "XNR", - "name": "xynorium", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6YxDnUQLMaiMgHFu9yRb2G761FSVjhHjeKaW7qMSApxo/logo.png", - "extensions": { - "discord": "https://discord.gg/ZYJMefnGTr" - } - }, - { - "chainId": 101, - "address": "3J6hEEQvwspX4sFAhJybAA9ZTkTBFJ838FJEid2ST8bR", - "symbol": "BNDI", - "name": "Bondii", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jorgadan/bondii-crypto/main/logo.png", - "tags": ["social-token"], - "extensions": { - "description": "Social token which is the fuel of the blockchain-market Bondii ecosystem.", - "website": "https://bondii.net/" - } - }, - { - "chainId": 101, - "address": "ALmnNrE4xVdXvRQEJQFBCz7fALFT3vv2m57byB5goXb1", - "symbol": "LDTMPG1", - "name": "LDT Mint Pass G1", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ALmnNrE4xVdXvRQEJQFBCz7fALFT3vv2m57byB5goXb1/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://livingdeadteds.com" - } - }, - { - "chainId": 101, - "address": "GBFnNpraMUqZXuwqvkFPh7eSwcW6nffGjRhUPNw4BJQt", - "symbol": "SOC", - "name": "Society Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/dualitycsgo/societytoken/main/societylogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "938xXsPKhBAXDLUfWNYuZdsnj57oGF6fCz8P6yLom19f", - "symbol": "NURP", - "name": "NURP Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/938xXsPKhBAXDLUfWNYuZdsnj57oGF6fCz8P6yLom19f/logo.png", - "extensions": { - "discord": "https://discord.gg/4fBqbZF7cS", - "twitter": "https://twitter.com/NovaNerdsNFT", - "website": "https://novanerds.art" - } - }, - { - "chainId": 101, - "address": "4dC3xeuqp87kfGBpvviDHt4Fu5efqV7cJzWHmbPZ71zg", - "symbol": "AINA", - "name": "AiNation Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SaigatamaAiNA/AiNation-Coin/main/logo.png", - "tags": [ - "social-token", - "gaming-token", - "NFT-Project", - "multimedia-token" - ] - }, - { - "chainId": 101, - "address": "Eknc379wsuM24aYvsSADP6ZYHjwJVHUm8V2w2Htoj5Zi", - "symbol": "DLC", - "name": "DONTLOOKCOIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Disease5556/Crypto/main/DONTLOOOkMINI.PNG", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "G12t3QQMDm1Rd4msvgfpKuja52tdTu9oRXVwCfx9Y8jW", - "symbol": "SPYX", - "name": "Schnitzel", - "decimals": 69, - "logoURI": "https://raw.githubusercontent.com/Spyx34/sol_token/main/Token_pfp.png", - "tags": ["social-token"], - "extensions": { - "description": "Fun Token for the Schnitzel Server", - "discord": "https://discord.gg/uN8UezwmRd" - } - }, - { - "chainId": 101, - "address": "7KNgRC9LTPoXWUrUnYqQfJdUBFoegfGQzQsT3urYQocx", - "symbol": "IAN", - "name": "IAN Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ianicoin/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4gYtj4tPrHFxK4KSeDFf78RfL2Kr59PueHTgWT4qznvg", - "symbol": "STNC", - "name": "Satan Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/templeofnight/Satan-Coin/main/Satan%20Coin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4XEvxRmF7T61MuA4yik4b8eVbsLChLk82qJQ12mFeAgZ", - "symbol": "IRIS", - "name": "IRIS Token", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4XEvxRmF7T61MuA4yik4b8eVbsLChLk82qJQ12mFeAgZ/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/Iris_Impact" - } - }, - { - "chainId": 101, - "address": "DF6UGWcgLQEtHq1LXrUpLD1VhuZspa7u4aGQi4fCiotR", - "symbol": "HWDC", - "name": "Heidi Wet Dog Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mdmolone/crypto/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HpnQBMHCr6SVm16xp3uiFcKDwQsWykvU8SJPHqRBRD8p", - "symbol": "FUBO", - "name": "Fubo Libs", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/fubolibs/crypto/main/logo.jpeg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8eKJx4oPC1ccV2wH4QHAfmq9nVoHHF8UwVKnPFiZQBDi", - "symbol": "GTFO", - "name": "GTFO Outfitters Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/gcstanley/GTFOCoin/main/GTFOCOIN.png", - "tags": ["social-token"], - "extensions": { - "description": "GTFO Outfitters Coin.", - "instagram": "https://www.instagram.com/gtfocoolers/", - "twitter": "https://twitter.com/gtfocoolers", - "website": "https://www.gtfooutfitters.com" - } - }, - { - "chainId": 101, - "address": "9qDohSsZfimv2indBmyxcdwi26NN3fDznu6tycCjzr5z", - "symbol": "FOTS", - "name": "Fotsbeats", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9qDohSsZfimv2indBmyxcdwi26NN3fDznu6tycCjzr5z/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://www.fotsbeats.org" - } - }, - { - "chainId": 101, - "address": "3ACRcvMCrSDi7qtnCD8yh78CVrR1sTYmtcpMwcqaxMyc", - "symbol": "VAMP", - "name": "Vampire Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/templeofnight/VampireCoin/main/VampireCoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "PJf2Q1XfRnkmjGUPbAstV7erEvSkPwBFkudSfh7jNcE", - "symbol": "3VIL", - "name": "Prime3vil", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Prime3vil/Prime3vil-Token/main/logo.png", - "tags": ["general-token"] - }, - { - "chainId": 101, - "address": "8oJ4nGEJmGCq8RikM3R8wdAN8d8ZxrhMYpbUPYzCMgFq", - "symbol": "RPC", - "name": "RED PANDA COIN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8oJ4nGEJmGCq8RikM3R8wdAN8d8ZxrhMYpbUPYzCMgFq/logo.png", - "tags": ["meme-coin"], - "extensions": { - "discord": "https://discord.gg/7av9SK7nZq", - "twitter": "https://twitter.com/Redpandacoin", - "website": "https://redpandacoin.com" - } - }, - { - "chainId": 101, - "address": "DCTf1hWKWG5qsq66rH95JCm4kYgVM3QB9HGyiGSDnFU9", - "symbol": "TSRB", - "name": "Official TSRB Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/JakovGlavac/TSRB-Coin/main/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://tsrb.shop" - } - }, - { - "chainId": 101, - "address": "GLdGUVd1r36cGNUAbNKXSPUp5jziJqend7ZURsqwmh1c", - "symbol": "JINX", - "name": "Jinx Mainecoon Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/drenieri/crypto/main/Jinx.png", - "tags": ["social-token"], - "extensions": { - "twitter": "https://twitter.com/drenieri" - } - }, - { - "chainId": 101, - "address": "G4UNF8zz3tFe3GELQXevugQrKQS2hMubs2fPZ4AEUKwH", - "symbol": "CEH", - "name": "CEH Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/JKzData/CEH/main/CEHLogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Fu29AZUeQjBm7Qzi22BNpZGGzy3zbgue333V8gLMfVF", - "symbol": "TESLER", - "name": "TESLER", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/TeslerToken/token-list/main/assets/mainnet/Fu29AZUeQjBm7Qzi22BNpZGGzy3zbgue333V8gLMfVF/logo.png", - "tags": ["TESLER", "social-token", "community-token"], - "extensions": { - "website": "https://www.teslertoken.com" - } - }, - { - "chainId": 101, - "address": "BTYw4bw5nZ3zd69ykg1An83ModKjcWJrPCUgDb4qSk9S", - "symbol": "SOLARIS", - "name": "SolarisCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/asherlagemi/crypto/main/logo.jpg", - "tags": ["utility-token", "social-token", "nft-token", "community"] - }, - { - "chainId": 101, - "address": "HD15N33gy4xYycqDA7Fgo4MqveVCvPaXUUCZAXizK1Pc", - "symbol": "ENC", - "name": "Encore Smile", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/fung-jay/crypto/main/SmileUpv3.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7JT45Qyrt9oQ2LtFugGjxKG2ye38R6tpD3TUfh5d1CgM", - "symbol": "CHOMP", - "name": "CHOMP", - "decimals": 9, - "logoURI": "https://arweave.net/74yVivx_qkvZzVM8a42tsEzPJ5rCQ1PRbofvKG3e7aY?ext=png", - "extensions": { - "twitter": "https://twitter.com/ShkarySharks", - "website": "https://shkarysharks.com/" - } - }, - { - "chainId": 101, - "address": "6KrfCrbzHx64PGfp8ZceRnNoV64D9asqbNZxkQraZRkT", - "symbol": "CRGO", - "name": "Cargo Currency", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/CargoCurrency/Cargo-Currency/main/cc.png", - "tags": ["general-token"] - }, - { - "chainId": 101, - "address": "FVVnRj8CXHStXv6LAbWc7y4xp7Cd2LwQVspnmw3uD3LX", - "symbol": "VM13", - "name": "VM13 Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/anko13-vm/crypto/main/vm13koinlogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GToajNpiQeiLhcseDfBHqdPe8A86gs7VNtJ7S6H3rxDb", - "symbol": "BCKP", - "name": "Backprocess", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/flamacore/bckptoken/main/BCKP_Token_Logo_Final.png", - "tags": ["social-token", "general-token"] - }, - { - "chainId": 101, - "address": "fc46FW2p3XZu19ak4mWqi8cXdKgexNZmgBnR5F4uyRv", - "symbol": "NCTI", - "name": "Nacati coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/vincc09/crypto-nacati/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AoZN1Qr9nRZUNF19xAKKdTPhYyDRVNo6vQAgq473AzHB", - "symbol": "TibaDM", - "name": "TibaDM", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Mantalban/CryptoDM/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6fMoTH7Bad61GPzvqfq1XmRGFGv84MrvZfjDKGNuVwBz", - "symbol": "OXSQ", - "name": "Ox Squad Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/juandelia03/logo/main/icon400x400.jpg", - "tags": ["utility-token", "social-token", "nft-token", "community"] - }, - { - "chainId": 101, - "address": "FpxVovi3t3ACw2sDCCXMTy7X5E9ZaA5jLvUHroz48Dtf", - "symbol": "BNTA", - "name": "BNTA coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/nmclaren/crypto-bnta/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FS2xCPvnrRRgXHsyQ3WcjRwUNyWDdY5R9TwTFXThVPoa", - "symbol": "GAMPX", - "name": "Grown Ass Man Points", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/drstreamy/manpoint/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Ao9Grhjn2znhaxXTvTjH7XvktggbDqHqheEojRj6fQ7u", - "symbol": "PIPC", - "name": "Partners In Pleasure", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/rstolwijk/crypto/main/logo-pip.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DzHhUCbv5dzUEJF5qrCt3MCqZgXBoavbJ1BisqB5nVSa", - "symbol": "PATENT", - "name": "PATENT", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/BEN1199/patent/3cf89952f1f82dbe864ec81683aac6e5eebe4e00/rsz_13patent.png", - "tags": ["NFT"], - "extensions": { - "description": "The first NFT-based patent issued on Solana. The patent holds essential guidelines to reconstruct parts of human muscle and bone tissues in laboratory setting. The Dawn of the Decentralized Intellectual Property." - } - }, - { - "chainId": 101, - "address": "3uCj7dSTKHMEgSdn6tPm7pfVS2YpJLZCfRFNcbsn9Uko", - "symbol": "FTCT", - "name": "FatCat", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/cc4020/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3pZgVRafhfoYwwKvu6UVtJ79Jxa2ooyuHFP7Ydt1t1e5", - "symbol": "DPSTK", - "name": "Doops Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/patdoops/crypto/main/logo.png", - "tags": ["utility-token", "social-token", "nft-token", "community"] - }, - { - "chainId": 101, - "address": "7Yox5Rc2B1PnCM8LZXKaHey4M7RzDQe2W9TaUSAuLUuE", - "symbol": "WPT", - "name": "World Population Token", - "decimals": 0, - "logoURI": "https://github.com/Stibra1/crypto_ww/blob/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AuY1RqejPvC5ftzvMRerBaR5ExfqFoq7pve3cmGZ8et1", - "symbol": "SERPENT", - "name": "Serpent", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/serpentnatura/crypto/main/logo.png", - "tags": ["social-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/SerpentAcademy", - "website": "https://serpent.academy" - } - }, - { - "chainId": 101, - "address": "PsyFiqqjiv41G7o5SMRzDJCu4psptThNR2GtfeGHfSq", - "symbol": "PSY", - "name": "PsyOptions", - "decimals": 6, - "logoURI": "https://user-images.githubusercontent.com/32071703/149460918-3694084f-2a37-4c95-93d3-b5aaf078d444.png", - "extensions": { - "coingeckoId": "psyoptions", - "discord": "https://discord.gg/Ew3dq7dKwp", - "serumV3Usdc": "CzuipkNnvG4JaTQPjgAseWLNhLZFYxMcYpd2G8hDLHco", - "twitter": "https://twitter.com/psyoptions", - "website": "https://psyoptions.io/" - } - }, - { - "chainId": 101, - "address": "GoAwpsL4SjGMd7BAMq2QKbHvEjgPcbmAwAjg1wpT7UDv", - "symbol": "NZWT", - "name": "New Zoolana Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GoAwpsL4SjGMd7BAMq2QKbHvEjgPcbmAwAjg1wpT7UDv/logo.png", - "tags": ["Zoolana"], - "extensions": { - "website": "https://www.zoolana.io/" - } - }, - { - "chainId": 101, - "address": "5yVeTqWmb81b7rCDiLfbEAXK3Uc7QUd1UpMB7M6ukDd8", - "symbol": "BKMR", - "name": "BuckMaster Token", - "decimals": 0, - "logoURI": "https://github.com/mat1776/crypto/blob/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2TALdGYM8z3CPtQhSKsJWEYVpPWG1A3jUCha6Y7wtKbT", - "symbol": "SHARE", - "name": "Project Shares", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/col000r/Tokens/main/ProjectShares.png", - "tags": ["general-token"], - "extensions": { - "twitter": "https://twitter.com/projectshares", - "website": "https://www.projectshares.org" - } - }, - { - "chainId": 101, - "address": "HGT2rtUUeWf2ZMVanN6Uipy1Qa7ZTWx2fogBc5WhsX2j", - "symbol": "SHARD", - "name": "Project Shards", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/col000r/Tokens/main/ProjectShards.png", - "tags": ["general-token"], - "extensions": { - "twitter": "https://twitter.com/projectshares", - "website": "https://www.projectshares.org" - } - }, - { - "chainId": 101, - "address": "J7Whk3zvFdWHgnxeiccMiwqdMu8Uv7rVwYPaxjoRGvP", - "symbol": "GSO", - "name": "Get Shit On", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/J7Whk3zvFdWHgnxeiccMiwqdMu8Uv7rVwYPaxjoRGvP/logo.png", - "tags": ["gaming-token"] - }, - { - "chainId": 101, - "address": "BasBheDvnr7HSd8PR6ZDrwXTHTH7e2jB3a7ZymbTHBU8", - "symbol": "BGT", - "name": "Baliarena Global Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Baliarena/baliarena/main/baliarena.png", - "tags": ["hybrid-token", "metaverse-token"], - "extensions": { - "website": "https://www.baliarena.com/" - } - }, - { - "chainId": 101, - "address": "H1HuyAvxPcbT6nGW8o4jENjZgDdNmq6DJSXwTbGHwNaQ", - "symbol": "JUPITER", - "name": "Jupiter", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/SergeyDobrinyn/token/master/files/jupiter.png", - "tags": [ - "social-token", - "currency-token", - "community-token", - "trading-token" - ] - }, - { - "chainId": 101, - "address": "BpatisxZgzsxZy3ioh9Tr2QhuQBpaWHoJRWCyMzpCb6y", - "symbol": "FASI", - "name": "Fondue Sigi", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/adriansigrist/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9eDpvgE2X6ZdczWiFhkL6dRf2tHzqLwovnW72nrNgqst", - "symbol": "KHC", - "name": "kyleharmoncoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/KyleBlakeHarmon/crypto/main/kyleharmoncoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Ct7mbdwLmdFC6zgVRXFidvvgYbtGo2icsntNSSgzxoLs", - "symbol": "SXS", - "name": "SoldierXSolvivor Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Ct7mbdwLmdFC6zgVRXFidvvgYbtGo2icsntNSSgzxoLs/logo.png", - "tags": ["utility-token", "game-token", "game-currency"], - "extensions": { - "discord": "https://discord.gg/solxsol", - "twitter": "https://twitter.com/soldiersolvivor", - "website": "https://soldierxsolvivor.com" - } - }, - { - "chainId": 101, - "address": "Dm5CqmNL7FgYFWU8pM1uMFPZaRezYXYbFHfoTkMjUoch", - "symbol": "DRAGZ", - "name": "DRAGZ", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/parjol13/drags-token/main/logo.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "13R5VZw3wYHYL8fsZYecNBBimKU4rX6heg8s4Lng17S9", - "symbol": "WXT", - "name": "woxobit", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/andbandu/woxobit/main/logo.png", - "tags": ["utility-token", "community-token"] - }, - { - "chainId": 101, - "address": "6hYVVDjYXSZmc4E44QdN2r37gnahGxvbcjJgkrQs5svP", - "symbol": "CHERRY", - "name": "Cherry Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6hYVVDjYXSZmc4E44QdN2r37gnahGxvbcjJgkrQs5svP/logo.png", - "tags": ["charity-token"], - "extensions": { - "website": "https://cherry.charity/" - } - }, - { - "chainId": 101, - "address": "EvDK7FEwacWP9WgyAVXXXpJf5w7ycpZkuacV56dzGyrx", - "symbol": "FAPE$", - "name": "FAPE Token", - "decimals": 9, - "logoURI": "https://imagedelivery.net/aAmca-Po70V1nH4n9cT-uA/7a51a4bf-1fb0-493c-6e9e-0624274cee00/public", - "extensions": { - "discord": "https://discord.gg/swWYcCMvdK", - "twitter": "https://twitter.com/facelessapes444", - "website": "https://www.facelessapes.com/" - } - }, - { - "chainId": 101, - "address": "71wTsTQJS2BPhduyXmZZkSUwpVDGnSr12t7bVfJQ5pZR", - "symbol": "PG", - "name": "PARO GHUB", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/acecard15/LOGO/main/logo.png", - "tags": ["community-token", "solana", "philippines"], - "extensions": { - "facebook": "https://www.facebook.com/Paro-Paro-G-HUB-100917682527562", - "telegram": "https://t.me/+t58ZtvzV7kYwMjg1", - "website": "https://www.paro-ghub.site" - } - }, - { - "chainId": 101, - "address": "CZKnYioKuX2YzA2wnUMVXsSe3j259aaPsz7TfY2xnLmV", - "symbol": "SNK", - "name": "SolSnake", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CZKnYioKuX2YzA2wnUMVXsSe3j259aaPsz7TfY2xnLmV/logo.png", - "tags": ["utility-token", "meme-token", "dex"], - "extensions": { - "discord": "https://discord.io/solsnake_solana", - "telegram": "https://t.me/solsnake_solana", - "twitter": "https://twitter.com/solsnake_solana", - "website": "https://solsnake.net" - } - }, - { - "chainId": 101, - "address": "8M5WyUy6nP225gYeukUPEbUsCAu19wREBQ765umhc3Qh", - "symbol": "EZS", - "name": "EZsmarts Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/EZsmarts/Solana-repo/main/EZsmarts_Token_icon.jpeg", - "tags": ["utility-token"], - "extensions": { - "facebook": "https://www.facebook.com/groups/ezsmarts", - "instagram": "https://www.instagram.com/ezsmarts", - "linkedin": "https://linkedin.com/company/ezsmarts", - "telegram": "https://t.me/ezsmarts", - "website": "https://www.ezsmarts.io" - } - }, - { - "chainId": 101, - "address": "4ZcdzZny4mVrCcF2hhyRhZ6Gp4p2xp6c1mJGK77hcpMn", - "symbol": "RJDR", - "name": "Richard del Rosal", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/ilov-eu/assets/main/rjdr-002.png", - "tags": ["utility-token"], - "extensions": { - "facebook": "https://www.facebook.com/iqrwizard/", - "website": "https://ilov.eu" - } - }, - { - "chainId": 101, - "address": "9k7VK2YpTfaAd6LqL6GdyAKu9oSoXy4CRLZHuwjk6ah4", - "symbol": "NEOT", - "name": "Neo Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/TeoN13/crypto/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "219cYoBAeWj2se9dnaAjQK9Xpy8ivX8835pAweZyMqVb", - "symbol": "DMC", - "name": "DMC Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Ace0nBase/Logo-/main/LogoLogo1png.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GmHjFJoH5WqkKRQY7ZadwnPm2SqnEwG5aL8EddXRkydx", - "symbol": "NAZT", - "name": "Naz Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/nazmulababy/crypto/main/NazT-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2GPWmqQNmaAL8Vj48ETdjeuXd62snKMyZXGyGWjd3Ugw", - "symbol": "RIG", - "name": "Rigel", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Stibra2/rigel/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5rcRMZvSZrNkvwtakUoSU1aLTRkQMmdrZgG7M3vEo4kK", - "symbol": "AA_WL", - "name": "Alpha Alerts Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5rcRMZvSZrNkvwtakUoSU1aLTRkQMmdrZgG7M3vEo4kK/logo.png", - "tags": ["utility"], - "extensions": { - "website": "https://www.viewsolana.com/nft" - } - }, - { - "chainId": 101, - "address": "AxRQL3L4x4nDTbgWz877tUY64xhMwDXG5uY1XFbherY1", - "symbol": "LGB", - "name": "Let's Go Brandon (M1 Money Supply Limit)", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/fubolibs/crypto/main/brandon.jpg", - "tags": ["social-token", "meme-token", "idiot-in-chief-token"] - }, - { - "chainId": 101, - "address": "AJhAVUTqhCwCJm8omxJvJdPPLUzBjVofzeccsLv8chWY", - "symbol": "SHTC", - "name": "ShihTzuCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ecouter/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BUD1144GGYwmMRFs4Whjfkom5UHqC9a8dZHPVvR2vfPx", - "symbol": "BUD", - "name": "BunnyDucky Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BUD1144GGYwmMRFs4Whjfkom5UHqC9a8dZHPVvR2vfPx/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/BunnyDuckyHQ", - "website": "https://bunnyducky.com/" - } - }, - { - "chainId": 101, - "address": "sBUDadt6KLaQErxT9E18fhYDMjBU7tcRZJh2cwtATcc", - "symbol": "sBUD", - "name": "BunnyDucky Stake Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/sBUDadt6KLaQErxT9E18fhYDMjBU7tcRZJh2cwtATcc/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/BunnyDuckyHQ", - "website": "https://bunnyducky.com/" - } - }, - { - "chainId": 101, - "address": "D9bPM4v6M3vn41Mg3Eh9ac2dwiYCM1GGvBLbDvyQdAeh", - "symbol": "NBC", - "name": "Nabecoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/bernardhackwell/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5q1H7UDaGQj98Z3Kx3dnDdWuj8GwnYW9X74kJfFFTFYu", - "symbol": "EKS", - "name": "Eksclusive Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/GKnt/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Dg46mekhjFiKhCEG94wZyV1fsKLTyM98LeGfXPHGta7w", - "symbol": "ERA", - "name": "The Alliance of Eragard", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Dg46mekhjFiKhCEG94wZyV1fsKLTyM98LeGfXPHGta7w/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Eragard Token", - "discord": "https://discord.gg/kFUmzU6nCH", - "facebook": "https://fb.com/dragonwar.io", - "medium": "https://medium.com/@dragonwar", - "telegram": "https://t.me/dragonwarglobal", - "twitter": "https://twitter.com/io_dragonwar", - "website": "https://dragonwar.io", - "youtube": "https://youtube.com/channel/UCzl9Gsl58YR9MyL2650tg8w" - } - }, - { - "chainId": 101, - "address": "AcyTybdT75MhEauw1TJvRnpQjVKx6MMDyiU6FbSNKBec", - "symbol": "SCT", - "name": "Society Token v2", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/societytokenv2/societytokenv2/main/societylogo%20(1).png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "3cN2oUiv3998ieKX8FXRsw7eZ4cQDvKwP5cU8pfnbboF", - "symbol": "BOBC", - "name": "Bobbie Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Bobbie-coin/BOBC/main/BobbieC.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2qt7MkqDEd1dGnMmKsGJwPSMSf88F5CwgndBjBcrsQgD", - "symbol": "OXO", - "name": "OXO", - "decimals": 0, - "logoURI": "https://github.com/zoots-com/oxocoin/blob/main/oxo_coin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9tcnTYf4C6xAkCb1yFoWPrD8NyL1iUdUnLXBXHQntGeJ", - "symbol": "PPRM", - "name": "Pooperium", - "decimals": 9, - "logoURI": "https://www.clipartkey.com/mpngs/m/31-313637_sad-poop-emoji-png.png", - "tags": ["social-token", "meme-token"] - }, - { - "chainId": 101, - "address": "3Rca23WVVN5Vnq4JdfgRq5ou8auD1n5ikVWzSd91s6eG", - "symbol": "FUL", - "name": "Fulbo Stars", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3Rca23WVVN5Vnq4JdfgRq5ou8auD1n5ikVWzSd91s6eG/logo.png", - "tags": ["social-token", "gaming-token", "community-token"] - }, - { - "chainId": 101, - "address": "3LtUEHq7m41i8h7GQDgrKU321daFsk71RVVyXzpU18s7", - "symbol": "HKM", - "name": "Haknem Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Ari1204/token-list/main/assets/mainnet/3LtUEHq7m41i8h7GQDgrKU321daFsk71RVVyXzpU18s7/logo.png", - "tags": ["community-token"], - "extensions": { - "website": "https://haknem.com" - } - }, - { - "chainId": 101, - "address": "4Qd7t3wG1ea5Zm7NSuEocMrc6NfA8GyGp3s3nv4kgvgj", - "symbol": "ARK", - "name": "Metavillage ARK Token", - "decimals": 0, - "logoURI": "https://metavillage.app/icon.png", - "tags": ["utility-token"], - "extensions": { - "description": "Metavillage ARK Token", - "discord": "https://discord.gg/metavillage", - "twitter": "https://twitter.com/metavillageNFT", - "website": "https://metavillage.app" - } - }, - { - "chainId": 101, - "address": "GyzW3CTMi8SdPQP3BMy3TqaZDAvffawNi9FULH8ksdmi", - "symbol": "FEMBOY", - "name": "Femboy Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GyzW3CTMi8SdPQP3BMy3TqaZDAvffawNi9FULH8ksdmi/logo.jpg" - }, - { - "chainId": 101, - "address": "6zDXz7wkKYhs787ZwGGEWhx4PAvsUgorvvtvahPUeNHC", - "symbol": "MMMM", - "name": "Multiversal Metaversal Municipal Monetary Credit", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/genx97/mmmmu/main/MMMM_logo.png", - "tags": ["social-token", "multiverse-token", "metaverse-token"] - }, - { - "chainId": 101, - "address": "GeiwCzW1V4qS4Ye8zEGCcaHFBLY3T9hJir7D4db8Cc8e", - "symbol": "ABUX", - "name": "AlexaBucks", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Fuki17/crypto/main/AlexaBuxLogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Gtj6NZHgMZ7QHg8PDN6izEn4GjVoX8yFLv4ESNKsWb62", - "symbol": "BT", - "name": "Bitmon Presale Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Gtj6NZHgMZ7QHg8PDN6izEn4GjVoX8yFLv4ESNKsWb62/BT-logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/bitmon", - "website": "https://twitter.com/BitmonWorld" - } - }, - { - "chainId": 101, - "address": "83XWg6JbMX16bvPz5y5e8g3Dqej2uowhkJouLecPcCME", - "symbol": "RAW", - "name": "RAW Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/RAWBrand/RAWCoin/main/logo.png", - "tags": ["utility-token", "social-token", "community-token"], - "extensions": { - "description": "We craft Limited Edition Art that you can skate, surf or ride. Road | Air | Water" - } - }, - { - "chainId": 101, - "address": "4jZ14VWYWziTpKreD2Jqn8WC1AC4Y1Lc3MDLypCH1qFp", - "symbol": "NEURO", - "name": "NeuroFi", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Neurologically/CryptoImage/main/Final_logo.png", - "tags": [ - "utility-token", - "social-token", - "nft-token", - "community", - "neurodiverse", - "autism" - ] - }, - { - "chainId": 101, - "address": "8GkFRfSBkJjk55BBiLyYhboYTGDXo5dkerp7N496Zfzo", - "symbol": "VEL", - "name": "VELYRIAN", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/ivanTheHorribble/demo/main/Vale/assets/images/logo.png", - "tags": [ - "social-token", - "community-token", - "money", - "velyria-state", - "velyrian", - "velyria" - ] - }, - { - "chainId": 101, - "address": "2wAUEu7NDQFbT5k2pQ3FHSvgeVtvbt5SehxFnbcsibkM", - "symbol": "PARA", - "name": "Parapente", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/micksavioz/crypto/main/parapente.png", - "tags": ["nft"] - }, - { - "chainId": 101, - "address": "76hX36CjA3JXHwWbK7EZMdNQ9Nz7WVL6yk3dTJNNuWHK", - "symbol": "SNOWBOARD", - "name": "SnowBoard", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/micksavioz/crypto/main/snowboard.png", - "tags": ["nft"] - }, - { - "chainId": 101, - "address": "F6PqCrUpkwBwhzCs21xiA4WzYY4etQoa9vh22Nte3bAW", - "symbol": "SMP", - "name": "Solitaire Mint Pass", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/F6PqCrUpkwBwhzCs21xiA4WzYY4etQoa9vh22Nte3bAW/logo512.png", - "tags": ["whitelist-token", "NFT"] - }, - { - "chainId": 101, - "address": "6FWzrWRBmUQCwRMBanxAWnDn1i2hRGAnSAzNUUowtojd", - "symbol": "SHAMJI", - "name": "Shamji Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/farhadshamji/crypto/main/logo.png", - "tags": ["social-token", "family-token"] - }, - { - "chainId": 101, - "address": "2FKXJBtzCM2CE8MumEzzCKV5EPQ8uvFHTGtZg2ePtVAH", - "symbol": "JIGX", - "name": "Jigx Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2FKXJBtzCM2CE8MumEzzCKV5EPQ8uvFHTGtZg2ePtVAH/logo.png", - "tags": ["utility-token", "nft"], - "extensions": { - "twitter": "https://twitter.com/jigx_official", - "website": "https://jigx.com/" - } - }, - { - "chainId": 101, - "address": "7zAqE4goQfe5pssmW68uxY7TueB5zrvz7KPNiyrR2TJ", - "symbol": "SLUG", - "name": "Slug Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/billybigpotatoes/crypto/main/slug.svg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4fRea2p9hpWEMddLraYAaMr7rcQHAAVkk2cQXxUN4yrh", - "symbol": "CTZWL", - "name": "Crypto Tradiez WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4fRea2p9hpWEMddLraYAaMr7rcQHAAVkk2cQXxUN4yrh/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "E44QppzpSronbUVHADa7p7VQYFRA7UjeXnPAMzXij2zV", - "symbol": "VRSX", - "name": "VRDOLL", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/E44QppzpSronbUVHADa7p7VQYFRA7UjeXnPAMzXij2zV/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "9dR6KNm4EnhfE1ecpJoGUj9x7c9XJz2ZtrSMfkWYhqZT", - "symbol": "KAFD", - "name": "CatBnKatt", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/kafdSol/Sol/main/kafd.png", - "tags": ["utility-token", "social-token", "community-token"] - }, - { - "chainId": 101, - "address": "6RqXpuup98mFmWkYQFhdkTqvXCBf6e85c1kSBGtSKoR8", - "symbol": "LNX", - "name": "Linux", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SquareandCompass/crypto_2/main/logo2.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "9gAxgixBFQYNpApuE6u2AsKALGpVpSDibapY5LdgRQMo", - "symbol": "FHC", - "name": "Fady Hanna Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/fadygithub/crypto-project/main/Logo.png", - "tags": ["social-token", "personal-token"], - "extensions": { - "facebook": "https://www.facebook.com/hanna.fady", - "linkedin": "https://www.linkedin.com/in/fady-hanna/" - } - }, - { - "chainId": 101, - "address": "FgGSSyWTof35tPwZi8CZ7uoH2tD6y1ezWcMiw38Cmoat", - "symbol": "SCARAB", - "name": "SCARAB", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FgGSSyWTof35tPwZi8CZ7uoH2tD6y1ezWcMiw38Cmoat/logo.png", - "extensions": { - "twitter": "https://twitter.com/SecretSphinxes", - "website": "https://secretsphinx.io" - } - }, - { - "chainId": 101, - "address": "AcQetM7ZgsBVPTUvR3TVY2gQeS3GV2KSiR4rLY5dboPM", - "symbol": "KELL", - "name": "Keller Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AcQetM7ZgsBVPTUvR3TVY2gQeS3GV2KSiR4rLY5dboPM/logo.png" - }, - { - "chainId": 101, - "address": "3HLxrDXeukAbVG3x1YcvQ1LWAShSew2NrMVzS6ps217d", - "symbol": "CCLC", - "name": "Cybercrime Lab", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/CybercrimeLabLLC/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BK5MG8QaWnAGnNZ9xpffQdTf5eUqQBbQWW5sqk4GCQMo", - "symbol": "StMP", - "name": "SolitaireMintPass", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BK5MG8QaWnAGnNZ9xpffQdTf5eUqQBbQWW5sqk4GCQMo/logo.png", - "tags": ["whitelist-token", "nfts"] - }, - { - "chainId": 101, - "address": "WLdPvMhouG9sfJvLp6jFhYQoS6ic2Z1DEXujR7GEFwK", - "symbol": "BRAINYMT", - "name": "BAG Mint Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/brainyapegang/token-logo/468c72ce3b0f5714041ef712772199f8c2cf63ee/brainyapegang/mint-token-logo.png", - "tags": ["mint-token"], - "extensions": { - "discord": "https://discord.gg/ptA8qAp7Gf", - "twitter": "https://twitter.com/brainyapegang" - } - }, - { - "chainId": 101, - "address": "E4amqzv6WzGQfPqoNGVWDLdbFs3fXbuvowkYnZ5AE7Cc", - "symbol": "SPUD", - "name": "GrumpySpud", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/grumpyspud/spudtoken/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "75XwHLqgAd2uLsXQEMpAe79EbWSnouwe5LXxEnMW1nCv", - "symbol": "NOSE-WL", - "name": "Nose Age NFT Whitelist Token", - "decimals": 6, - "logoURI": "https://user-images.githubusercontent.com/1735634/149608639-47e27565-c55a-4482-b712-e5ee2c1a2569.png", - "tags": ["whitelist-token", "nfts"], - "extensions": { - "discord": "https://discord.gg/jgTh4tyyAJ", - "twitter": "https://twitter.com/noseagenft" - } - }, - { - "chainId": 101, - "address": "CjzPUx7yLB92EFCKCVnqE9Wa7auTpSGrdzJEzmkAkj8Y", - "symbol": "OSIS", - "name": "Oasis Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/TOSHlO/oasiscoin/main/logo.PNG", - "tags": ["mint-token", "nfts"] - }, - { - "chainId": 101, - "address": "3CgLTvZV8d1oM74ACnH1Te6BDsym3pYuX5YyYkusjGSL", - "symbol": "BMXHUB", - "name": "BMX", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3CgLTvZV8d1oM74ACnH1Te6BDsym3pYuX5YyYkusjGSL/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "14AB7dXTdiNAwqAtWC7NmSW9u74SkCXU1X6DSejxkFEg", - "symbol": "LICKS", - "name": "LICKS Token", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/dirtrunner2020/crypto/main/licks.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6M9uA6fMpYZ8pgAgXsa5ArJJFhiwMGH3gtMe1eM4sDWC", - "symbol": "APCC", - "name": "Appreciation Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/AnataZealot/APCC/main/APCcoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "J5mdJUncYfZ9j8hYstp5aYNZscPFWfpYseMJ4E5ko75X", - "symbol": "CCCN", - "name": "Coin Coin Coin", - "decimals": 0, - "logoURI": "https://github.com/larry19power/J5mdJUncYfZ9j8hYstp5aYNZscPFWfpYseMJ4E5ko75X/blob/main/logo.png", - "tags": ["utility-token", "social-token"] - }, - { - "chainId": 101, - "address": "BkGrcWxBuwZKxnMU8ck3dtAwi8jWoXVxrRguncxuFzQq", - "symbol": "BBNF", - "name": "BlockBoy 'n Friends", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/WeAreMetaverse/BBNF/main/logo.png", - "tags": ["utility-token", "social-token", "community-token"], - "extensions": { - "description": "BlockBoy 'n Friends Universe" - } - }, - { - "chainId": 101, - "address": "7FSG3cy7SjR5mpjoRMbdj8ux5KYh3v8M7n1p7Sb3swE6", - "symbol": "TRTN", - "name": "Triton", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7FSG3cy7SjR5mpjoRMbdj8ux5KYh3v8M7n1p7Sb3swE6/logo.png", - "tags": ["TRTN-token"], - "extensions": { - "website": "https://tritonstation.io" - } - }, - { - "chainId": 101, - "address": "GGyTwdaJCZa5W9cK2bYLuVYXRw5ESFFRddbrLhqGtEax", - "symbol": "BNTLY", - "name": "Bentley", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/crypto-coins-creator/crypto-bentley/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "JDrctysFY7WWfzTp9qKiUXW926Nsgp8qGApzKhCWBbQr", - "symbol": "MANIN", - "name": "MANIN Token", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/yasbgts/crypto/main/mToken.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "H2cTiHHi6cTfrwAudLPVqF1jipbHhNzFcyoUg5yNRKFY", - "symbol": "ARNO", - "name": "Arnaud FM", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/ilov-eu/assets/main/arno-002.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FiRrEmuX1rAhpS4ukzdx5txA4x7w3cQ4NbPm3mCxQEHZ", - "symbol": "PRTV", - "name": "PRTV Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FiRrEmuX1rAhpS4ukzdx5txA4x7w3cQ4NbPm3mCxQEHZ/logo.png", - "tags": ["utility-token", "community-token", "PR"], - "extensions": { - "discord": "https://discord.gg/ztqYqdVxhW", - "medium": "https://medium.com/@PRTV", - "twitter": "https://twitter.com/PRTV_SOL" - } - }, - { - "chainId": 101, - "address": "GyKoRHDEffu4C544h6L1jqNR7fJ8AkuAETMhC2Hj6FDR", - "symbol": "KN", - "name": "Key Nodes", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/thephillipj/Key-Nodes/main/logo.png.png", - "tags": ["utility-token", "community-token"] - }, - { - "chainId": 101, - "address": "ALusFVmfyu2SV6CZurYSt8jj8iF1ZF9XAPNSXe4KciDE", - "symbol": "THM", - "name": "ThalerCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mtha26/thaler-coin/main/LOGO130KB.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GNCjk3FmPPgZTkbQRSxr6nCvLtYMbXKMnRxg8BgJs62e", - "symbol": "CELO", - "name": "CELO (Allbridge from Celo)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GNCjk3FmPPgZTkbQRSxr6nCvLtYMbXKMnRxg8BgJs62e/logo.png", - "extensions": { - "coingeckoId": "celo" - } - }, - { - "chainId": 101, - "address": "EsPKhGTMf3bGoy4Qm7pCv3UCcWqAmbC1UGHBTDxRjjD4", - "symbol": "FTM", - "name": "FTM (Allbridge from Fantom)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EsPKhGTMf3bGoy4Qm7pCv3UCcWqAmbC1UGHBTDxRjjD4/logo.png", - "extensions": { - "coingeckoId": "fantom" - } - }, - { - "chainId": 101, - "address": "9xjPG7Xbzqvatt5ZfbLx2J7WDHBY6uaEq8HkLPpDqC9j", - "symbol": "REMN", - "name": "Remnants Drop 3 Whitelist", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Fulgurus/remn/master/logo.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "description": "Whitelist access to the Remnants drop 3 . Token is tradeable.", - "discord": "https://discord.com/invite/remnantsnft", - "twitter": "https://twitter.com/RemnantsNFT", - "website": "https://www.theremnantsnft.com/" - } - }, - { - "chainId": 101, - "address": "7gkLeJq8xx5qtPCuLaas6qXoJdiFbLc6vg3M5RLMtXW2", - "symbol": "CRONA", - "name": "CRONA", - "decimals": 0, - "logoURI": "https://github.com/Kalinichenkovlad/crona/blob/80a6b8e1d270b4d9749014c6d1ea1fd035c7431f/logo_crona_token.png", - "tags": ["mint-token"] - }, - { - "chainId": 101, - "address": "3Q8GPQfrMcDRknataFe46VYdsGYqwRTCuYxGqPSHGCQo", - "symbol": "TAG", - "name": "totag", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3Q8GPQfrMcDRknataFe46VYdsGYqwRTCuYxGqPSHGCQo/logo.png", - "tags": ["digireal-platform"], - "extensions": { - "description": "TAG Token are used by the world's first digireal Platform, totag.io TAP it, get it!", - "instagram": "https://www.instagram.com/totag.io", - "medium": "https://totag.medium.com", - "telegram": "https://t.me/totag_io", - "twitter": "https://twitter.com/totag_io", - "website": "https://totag.io" - } - }, - { - "chainId": 101, - "address": "64dTMpe6o3nxRm8jnnxwxpKqinH7ioEZoxB7gBe48nnT", - "symbol": "WLSN", - "name": "WL Squirrels Nation", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/64dTMpe6o3nxRm8jnnxwxpKqinH7ioEZoxB7gBe48nnT/logo.png" - }, - { - "chainId": 101, - "address": "6LcERGBPSv7nhoA6Gr8nvke1xcAmbarVsCMHVvQ3NCbt", - "symbol": "$SLAY", - "name": "SLAY", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Don-73/-lay/main/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "ETwvm6FreYGPpCQyV96xnujaonsA8zJdFKFjz2CKGm1", - "symbol": "BOG", - "name": "BandOfGoonies", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/BrightShadowZ/BoG/main/BoG.PNG", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7bWNspkbFLNJbRWqkg9ocSPu7D3Jz2h7GCzHCiPVL8G2", - "symbol": "MYC", - "name": "MoYuCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/x1957/logo/master/myc_logo.png", - "tags": ["mint-token"] - }, - { - "chainId": 101, - "address": "2q39pHwFJUURyfypPaGgW2Y87pmAkj8iC8DV4z3DF19D", - "symbol": "CXC", - "name": "CommonXCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/immacrypt/LOGO/main/LOGO.png", - "tags": [ - "community-token", - "social-token", - "raydium", - "solana-blockchain", - "defi-token" - ], - "extensions": { - "twitter": "https://twitter.com/CommonXCoin" - } - }, - { - "chainId": 101, - "address": "3V1iScAr8N7X2CXPXpLpgjeV3ThpJdwPJftmem6Ab3JH", - "symbol": "VAMP", - "name": "Vamp Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3V1iScAr8N7X2CXPXpLpgjeV3ThpJdwPJftmem6Ab3JH/logo.png", - "tags": ["social-token"], - "extensions": { - "twitter": "https://twitter.com/Vampo__" - } - }, - { - "chainId": 101, - "address": "BriQC6NkjrYRSXpoUqoW8cWJtESrtwUufJbAoLMkkCme", - "symbol": "ECK", - "name": "Eck Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BriQC6NkjrYRSXpoUqoW8cWJtESrtwUufJbAoLMkkCme/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/TomEckMobile", - "website": "https://ok-robot.co/" - } - }, - { - "chainId": 101, - "address": "APiz1MDLLZjhkhuckMDGEGthJU2hwSakpVYwGFgaHfFs", - "symbol": "PWUC", - "name": "PeriwinkleUnicoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/periwinkleunikoin/logo/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8sJ1dLocbsYE76t9SMF85VBBDCNkmAcCAkvCWyuRTa8r", - "symbol": "SOLADA", - "name": "SoLADA Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8sJ1dLocbsYE76t9SMF85VBBDCNkmAcCAkvCWyuRTa8r/ladacoin_large.png", - "tags": ["meme-token"], - "extensions": { - "twitter": "https://twitter.com/SoladaCoin" - } - }, - { - "chainId": 101, - "address": "5hpxDVc2uA3AYA528xkuwAUcRD755tc7X9Lnw8V632yD", - "symbol": "$CAL", - "name": "CalCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/waltercallesen/CalCoin/main/logo.png", - "tags": [ - "meme-token", - "utility-token", - "social-token", - "networking-token" - ], - "extensions": { - "twitter": "https://twitter.com/CalCoins" - } - }, - { - "chainId": 101, - "address": "GUJe4fZA3ky2v2MYCpJMZ27AiNCsXUcxcCc3Qt4qqm8Y", - "symbol": "HART", - "name": "Hart Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GUJe4fZA3ky2v2MYCpJMZ27AiNCsXUcxcCc3Qt4qqm8Y/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8Q8PtA1CcKUwx3hLYUwYcyqgxC6u8rrhydBxB9jrdUvt", - "symbol": "SMGSY", - "name": "Smargasy Coin", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/smargasy/crypto/main/logo.png", - "tags": ["social-token"], - "extensions": { - "twitter": "https://twitter.com/smargasy" - } - }, - { - "chainId": 101, - "address": "6Sz979oyueB1HHuJ7tSM2aQZnXsGqbLf27x4DMnZwMaW", - "symbol": "RHINO", - "name": "Royal Rhino Golf Club token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6Sz979oyueB1HHuJ7tSM2aQZnXsGqbLf27x4DMnZwMaW/logo.png", - "extensions": { - "discord": "https://discord.gg/Vcjzw99A", - "twitter": "https://twitter.com/Royal_rhino_gc", - "website": "https://royalrhinogolfclub.com" - } - }, - { - "chainId": 101, - "address": "DQnCJQfRv6nr9q5gMmuZ1HmvnLeYxun3DtZuDKeNna4X", - "symbol": "RICO", - "name": "Rico Sauvie", - "decimals": 0, - "logoURI": "https://github.com/crypto-coins-creator/crypto-rico/blob/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8rYHMJHSAu4HXtW1xoonVaH1zzDSW5Na83QW7SGQPeV2", - "symbol": "ZBRA", - "name": "Zebra", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/KanashiiNFT/zebra-logo/main/zebra.png", - "tags": ["nft-token"] - }, - { - "chainId": 101, - "address": "AWmJqXroJCZTgQdeoHR3HDsM3xuztym93vqWXg7EdqvR", - "symbol": "FMC", - "name": "FreeMason Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/officialfreemasoncoin/logo/main/fmc%20logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8L5BRgmJ6WhZs3xKgg14YtrENHFUugvY3PUpT6XsLtX1", - "symbol": "sfr", - "name": "sinner zoofer", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/sinnerfilozofiya/crypto/main/logo.png", - "tags": ["social-token"], - "extensions": { - "instagram": "https://www.instagram.com/sinnerfilozofiya" - } - }, - { - "chainId": 101, - "address": "CqNmReav6kiDU4giV3LJGc8Z3DgmbxNQfsN5kUSYKkF4", - "symbol": "BDOO", - "name": "BeeDoo Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/opsydian/beedoo-crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "SFXb4HZkGAZNkD5apUugy2829NQVxqDhms8RKK2JJGR", - "symbol": "SFX", - "name": "SkinFlip Exchange Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SFXb4HZkGAZNkD5apUugy2829NQVxqDhms8RKK2JJGR/logo.png", - "tags": ["nft", "gaming", "marketplace", "gamefi", "defi", "utility"], - "extensions": { - "description": "A hybrid multichain marketplace and wallet platform for video game assets.", - "discord": "https://discord.gg/skinflip", - "instagram": "https://www.instagram.com/skin_flip", - "twitter": "https://twitter.com/skin_flip", - "website": "https://skinflip.net/" - } - }, - { - "chainId": 101, - "address": "64tUZwWhdAtcVBVS1T4m14nH86CZsoeQjwpJtv3A3Uwn", - "symbol": "KFBR", - "name": "I'm Gonna Shoot Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/imgonnashoot/crypto/main/ImGonnaShoot.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EZK41VTdm3j8iuDBigM6kyboBk2wqgAabtmt8CCiVKVt", - "symbol": "OINKS", - "name": "OINK COIN", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/Stankrank/Stankrank/main/Oinks.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "JNcg1YrQ6RQTR41MK6io1LFzHoS3xQzP9FMvQ1kYPBs", - "symbol": "ZIVK", - "name": "ZivaiyahKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ZivaiyahKoin/logo/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CHci94eZt3KX2YZEJZppybMms2nW2wm5JWcdDtYLKujH", - "symbol": "BROWL", - "name": "Browl Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CHci94eZt3KX2YZEJZppybMms2nW2wm5JWcdDtYLKujH/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BKXL2h567SJdobwamjMPb6qWM3SXwTm2wSNiCXRe8a47", - "symbol": "HOM", - "name": "NFT House Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/blackrex7/the-house/main/logo.png", - "tags": [ - "social-token", - "nft-marketplace", - "NFT-Token", - "NFT-Project", - "nft" - ] - }, - { - "chainId": 101, - "address": "F7CCNYeNHeQrcawB1oJk1WSTGQnzD1pEbpKmBHjFLs1d", - "symbol": "AUDRIC", - "name": "AudriCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/audricmarshall/audric/main/master/logo.png", - "tags": ["gaming", "meme-token"] - }, - { - "chainId": 101, - "address": "6L7SrK64z9Cw2nVpEzzUFUJUX5uuQHK3zBzzYkHhvV7i", - "symbol": "DOODAH", - "name": "DooDah", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/afterconsideration/crypto/main/doodah_logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AbY1k3ZAYDKXsBK3UUVPLSh74oZN7eMnY3NDocNUptrG", - "symbol": "PMN", - "name": "Peman Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Pepengas/crypto/main/Peman%20token.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CTty2YQKwkrTbdPVy2pVmEEkckWFwvrxBToBD8DRSTr8", - "symbol": "UTBM", - "name": "Blousards", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EsZfrs1iWh9CXzbpGUfUkRfs35KkUWXJH2S6Y9D272M/logo.png", - "tags": ["friendship-token", "family-token", "social-token"] - }, - { - "chainId": 101, - "address": "2rKmksbnyCtrJemQqYdBjiXP5R2ZGpP6uDmstpGvkaey", - "symbol": "IBSH", - "name": "Iba Shinu", - "decimals": 8, - "logoURI": "https://user-images.githubusercontent.com/81035681/144994154-2c2bcb2f-1976-4df3-8aaa-34a2cbf779a5.png", - "extensions": { - "telegram": "https://t.me/ibashinutoken", - "twitter": "https://twitter.com/ibashinu_token" - } - }, - { - "chainId": 101, - "address": "AcjsLnq9r7adkCe1a1GPyqCErSe4GjGEukbqBP2WJdoo", - "symbol": "HANDLER", - "name": "Working Dog Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AcjsLnq9r7adkCe1a1GPyqCErSe4GjGEukbqBP2WJdoo/ico.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DFBxq9uPjYWMsuoL19ybaZ7eShZ1a6y42gtepEXNXfmd", - "symbol": "PAM", - "name": "Pamelija", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/unknownchapter/PamSol/main/pam.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4zz2esfV7hvyQEiYb8MKkE6cJiTPcg4X9psjcDeYdxG", - "symbol": "NGTC", - "name": "Nugget Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/LordWestcott/nuggetcoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FiV64orExiAJmzh6beVEr8BTpjC4WE6mqf6Tcry6tEhx", - "symbol": "AHMZ", - "name": "Ahmed Z Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/ose15101/AHMZ/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AYKCSsAAeg7zL3QywPUnc2bPmtmvVTV5EnskmnLVRWCH", - "symbol": "DBKS", - "name": "Dollar Bucks", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/TuckerBrady/DollarBucks/main/Dollar-Bucks-Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HTr5SoWycrUdHbbrRQvxe9qhVraP196p8At7LrfPbpmr", - "symbol": "GLORY", - "name": "GLORIOUS GECKOS", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/GloriousXican/ASSETS/main/coin-sglory.png", - "tags": [ - "utility-token", - "game-token", - "game-currency", - "GameFi", - "Gaming" - ], - "extensions": { - "twitter": "https://twitter.com/GeckosNFT", - "website": "https://gloriousgeckos.com/" - } - }, - { - "chainId": 101, - "address": "4RfFCaaAdqeLi16Ci6uQVZkR7EycHJTfBNAG85jGupVN", - "symbol": "XDR", - "name": "XOALDIR", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Ryanjames84/Xoaldir/main/xoaldir.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "zkie8GLAjoVvZkJcA752vhZcYfzfpiiMUfHsBvsQraY", - "symbol": "PGT", - "name": "Purple Goblin Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/zkie8GLAjoVvZkJcA752vhZcYfzfpiiMUfHsBvsQraY/logo.png", - "tags": ["social-token", "pgt"] - }, - { - "chainId": 101, - "address": "DVWbqNnW9btNcYJassHT8a9eon6Mhi7YbaZEdgBDNie7", - "symbol": "CHGE", - "name": "ChumpChange", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DVWbqNnW9btNcYJassHT8a9eon6Mhi7YbaZEdgBDNie7/logo.png", - "tags": ["utility-token", "community-token", "meme-token"] - }, - { - "chainId": 101, - "address": "BMFsFjGKUAPVWX4Y9hfrnvKwPLCEpZAawSuBMfVPhVuG", - "symbol": "MACH", - "name": "Afterburner Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Dypto/CryptoOne/main/Logo.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "9sjzeVEBMaT7jmD3hroYGg6bD6MCyHpUQ9Rps7ocbwbQ", - "symbol": "MDARK", - "name": "Martin Darko Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MartinDarko/MartinDarko-Token/main/MDarkoToken-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ESDPio4QvdJH8KCNZfyv4HVxmg4KQMYXZew17SAz6TKz", - "symbol": "INDC", - "name": "INDCLOUDS COIN", - "decimals": 9, - "logoURI": "https://github.com/Git-Indclouds/cloud-engine/blob/e416de0263be6d9293d3ae01c0bc9d1a2f2c3c3e/Assets/mainnet/logosizedd.png?raw=true", - "tags": ["utility-token", "Hosting-token"] - }, - { - "chainId": 101, - "address": "4F6diM2z8QcugE5boJe9fE3KwSRGP6zPpxr8Hqo4fRoZ", - "symbol": "GRC", - "name": "Golden Retriever Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/TysonGold/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "J2beWpqSSoFXzzotd9uWQe9xSHZkszAntjYD7xCdnu1K", - "symbol": "TENU", - "name": "Tesla Inu", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/J2beWpqSSoFXzzotd9uWQe9xSHZkszAntjYD7xCdnu1K/logo.png", - "tags": ["utility-token", "meme-token"], - "extensions": { - "discord": "https://discord.io/teslainu_coin", - "telegram": "https://t.me/teslainu_coin", - "twitter": "https://twitter.com/teslainu_coin", - "website": "https://teslainu.net" - } - }, - { - "chainId": 101, - "address": "Fb4SGB3CFPWEkyo97ompWgxwHBG4rZHtVn4D3d4E3VDv", - "symbol": "FLYK", - "name": "Flying Koala", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Fb4SGB3CFPWEkyo97ompWgxwHBG4rZHtVn4D3d4E3VDv/logo.png", - "tags": ["utility-token", "community-token", "meme-token"] - }, - { - "chainId": 101, - "address": "3FWisHsh7HqaeFQkuaXGh5gTTMHjvnFvVhtQvxb2hviJ", - "symbol": "BUB", - "name": "Bubble", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/A-Krasniqi/bubble/main/Bubble-Logo.png", - "tags": ["general"] - }, - { - "chainId": 101, - "address": "42kRyPwN634LVoNJNanS4k1BxUTbT6zvyEnSXg1eGyGz", - "symbol": "CURSED", - "name": "Cursed Mike Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/42kRyPwN634LVoNJNanS4k1BxUTbT6zvyEnSXg1eGyGz/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "CbpRDGxDXHZHfEtiprCz2k9raAH12zgKgqJjiCaQh2t7", - "symbol": "BOFH", - "name": "BOFH Tokens", - "decimals": 0, - "logoURI": "https://github.com/itsthebofh/logos/blob/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "D5waTUjXsSRKhvJDsJVk8TQS8JxMKuRy49w9j8XH3QrA", - "symbol": "FFC", - "name": "Frew Family Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Frew250/Crypto/main/Logo3.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "SRYWvj5Xw1UoivpdfJN4hFZU1qbtceMvfM5nBc3PsRC", - "symbol": "SUNNY", - "name": "Sunny IOU Token (Quarry Rewards)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SUNNYWgPQmFxe9wTZzNK7iPnJ3vYDrkgnxJRJm1s3ag/logo.svg", - "extensions": { - "coingeckoId": "sunny-aggregator", - "discord": "https://chat.sunny.ag", - "github": "https://github.com/SunnyAggregator", - "medium": "https://medium.com/sunny-aggregator", - "serumV3Usdc": "Aubv1QBFh4bwB2wbP1DaPW21YyQBLfgjg8L4PHTaPzRc", - "twitter": "https://twitter.com/SunnyAggregator", - "website": "https://sunny.ag/" - } - }, - { - "chainId": 101, - "address": "8H9qSSJnJ32LNkxU9t1BdHmLrWS6mG18XNrF4xUgDff5", - "symbol": "JC", - "name": "JaeCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/itzjae123/logo/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EN9eX36saBK16LRipK5rsSxv58XEmjtNtNA4g6D5QNf5", - "symbol": "LIN", - "name": "Lina Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Ari1204/token-list/main/assets/mainnet/EN9eX36saBK16LRipK5rsSxv58XEmjtNtNA4g6D5QNf5/logo.png", - "tags": ["community-token"] - }, - { - "chainId": 101, - "address": "DJuRxTJwQSFSh3YXT5mxm2ah4kADFMkPpBdDbBW95gZx", - "symbol": "JSC", - "name": "Jesucrypto Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/agustinrossi87/jesucryptologo/main/jesucryptologo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6dRx1xfsJeAkxSmb7NZemWZeBHxGCdd7XZg8SVSU1rwC", - "symbol": "GIG", - "name": "GIGNIOC", - "decimals": 9, - "logoURI": "https://gignioc.com/wp-content/uploads/2021/07/gignioc.png", - "tags": ["currency-token"], - "extensions": { - "website": "https://gignioc.com/" - } - }, - { - "chainId": 101, - "address": "97gfUrLLtLYJGQQVAheqoiAetr5SbNru8bWaioxNCVnJ", - "symbol": "TPY", - "name": "Toppy", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/andrewbayly/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2t3dWi4CKqBUdq3kGXzSLXuym6784x3Bkd7diJgm5P6s", - "symbol": "MTRV", - "name": "MetaRevo", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/MetaRevo/repository/main/metarevo-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "RnYaAAPXp8QYcRs2Qnc36CNL9e2fybahup7UBjc118d", - "symbol": "VNA", - "name": "Vienna token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/tenywa1/vienna-crypto/main/vienna-png.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DeyztTGB1QxdfEYUvSs2t8aRF7UBYvGoNrkTtdPZ8vdC", - "symbol": "DB", - "name": "Devbhoomi Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/dbhari/crypto/main/DB.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "GVkDXg1nQ8HeP19hZSGY5nwTmwJUKTh4eNEiP6ZaAqGn", - "symbol": "EKB", - "name": "Emre Kemal Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/emrebalci7/NftToken/main/coin.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "B7vGF8rBUuQGx4bx9Esmpb9zXhn2mXSfR2t7AHbqarpw", - "symbol": "ROT", - "name": "Reign of Terror", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/B7vGF8rBUuQGx4bx9Esmpb9zXhn2mXSfR2t7AHbqarpw/logo.png", - "tags": ["game-token", "game-currency", "GameFi", "Gaming"], - "extensions": { - "discord": "http://discord.gg/8AwGrpWBKA", - "telegram": "https://t.me/reignofterrornews", - "twitter": "https://twitter.com/RoTTheGame", - "website": "https://www.reignofterror.io/" - } - }, - { - "chainId": 101, - "address": "7vghsjzp2T8eHAGhSGji1qRKmWvuQsTcVKWMyEhdqVhv", - "symbol": "WOR", - "name": "Woorim", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ljubenvassilev/woorim-token/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "12NoHmWHmNtGLBuayCE9ybpT8PZe11wR5xfaAa5Gg4jg", - "symbol": "MFK", - "name": "M4K coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Mantis919/logom4k/main/m4k.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "48KenSyCQME7B1JxNvSNfzH713kdMcw6bHCkLQ4rmDrN", - "symbol": "VNTK", - "name": "Vinoteka Donostia Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Intelsecpieter/Vinoteka-Crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BgmTt9bbo3ecR5vpVNPEwKts3cAmnWN824Qb1wLqewWp", - "symbol": "ROGER", - "name": "Roger", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/rogerthecat/rogercrypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7nkuaNHwDashXjgKn3K3wBcvmWc5ga3MSxUo5vr8UPe8", - "symbol": "TAI", - "name": "Tai Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/yeokianhwee/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4bsY5WUqmLy9qgkpZT9GW7medaZiZC61N4SzJ6XgnuBd", - "symbol": "BRUSPAL", - "name": "Bruspal Copper", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/bruspal/bruscoin/main/ressources/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "http://www.bruspal.net" - } - }, - { - "chainId": 101, - "address": "8V1QEHoWE41YvN99xRVpAJtUuXtPx1Bppi9TKYo26puP", - "symbol": "OKDev", - "name": "OKKAMI Dev Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ant-dev-panda/OKKAMI_dev_crypto/main/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://www.okkami.com/" - } - }, - { - "chainId": 101, - "address": "BbbnfPgU2XbuLEcP765VkLuU8dwwUrmDakDnwFXuod9i", - "symbol": "BUDC", - "name": "BUDCOIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/rogerthecat/rogercrypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CQR1VBAsxfeRA1fxT5brFiXcCecES4tj3MTV3mYY5wuX", - "symbol": "KSHR", - "name": "Kosher", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/earth04190419/token-list/main/assets/mainnet/CQR1VBAsxfeRA1fxT5brFiXcCecES4tj3MTV3mYY5wuX/logo.jpg", - "tags": ["currency-token"], - "extensions": { - "discord": "https://discord.gg/BDe79UNaGq", - "twitter": "https://twitter.com/kosher_token", - "website": "https://koshertoken.com" - } - }, - { - "chainId": 101, - "address": "GVTL9CwHurEhXE4WohoNV3KJKvnMNHivq6Ah9kgz8jiA", - "symbol": "LZX", - "name": "Lazy X", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Lazyxmusic/crypto/main/lazyx.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BEpBgx5xDjg8qqgDRqhyrT32pZs51C5xMddzpykaNbuZ", - "symbol": "WEB", - "name": "Digital Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BEpBgx5xDjg8qqgDRqhyrT32pZs51C5xMddzpykaNbuZ/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HuManQDs2YtrRkQu4www48fFc6mz39gG6u2vUT2U9B9X", - "symbol": "HUMAN", - "name": "HUMAN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HuManQDs2YtrRkQu4www48fFc6mz39gG6u2vUT2U9B9X/logo.png", - "tags": ["utility-token"], - "extensions": { - "coingeckoId": "human", - "coinmarketcap": "https://coinmarketcap.com/currencies/human-coin/", - "discord": "http://discord.gg/5m6cBdry6y", - "twitter": "https://twitter.com/thecyberkatz", - "website": "https://cyberkatz.space" - } - }, - { - "chainId": 101, - "address": "Eg143Ejqt2hNpjK58abz6cdFqfZQ3PMNq453vZh8V93T", - "symbol": "WEB", - "name": "CityWeb", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Eg143Ejqt2hNpjK58abz6cdFqfZQ3PMNq453vZh8V93T/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://cityweb.fr" - } - }, - { - "chainId": 101, - "address": "3wScesVuo8sAb8DwheMBq6amGCKuvWPD54Yg8aGQM4Eq", - "symbol": "Punkz", - "name": "Punkz", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3wScesVuo8sAb8DwheMBq6amGCKuvWPD54Yg8aGQM4Eq/logo.jpg", - "tags": ["utility-token", "community-token", "nft-token"] - }, - { - "chainId": 101, - "address": "6RcMrg2DvLZv5cqZjfrccVm4a76iZ6HRyFcH5yW7LEiq", - "symbol": "BNK", - "name": "Biank Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MattiaBianchini/BiankCoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "vmNr8REkFim7hpYBtLbxuJ6eBVHRj2qPNXeto9hrvVK", - "symbol": "FORK", - "name": "ForkCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/kwask96/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6uQHNRdF9XQtR3azXXzfssk3eDDs3zFmHM5sXmfodDTw", - "symbol": "ASMTW", - "name": "ANONYMOUS SYS MTW0", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Annonymous-MTW/crypto/main/logo.png", - "tags": ["utility-token", "community-token", "nft-token"] - }, - { - "chainId": 101, - "address": "DhVJF1GTbF1PKUBPVUT7N2LgtNR4VAaxRmP4sQcRCgyH", - "symbol": "FUC", - "name": "Fugler Universal Coin", - "decimals": 9, - "logoURI": "https://github.dev/solana-labs/token-list/blob/894565e050bc98a87f91b6d2855259be0ce09b56/assets/mainnet/DhVJF1GTbF1PKUBPVUT7N2LgtNR4VAaxRmP4sQcRCgyH/logo.jpg", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "H7NbVyqLPHWC7Da49F4CLNTgfMfYq8dF9ktJW5wwH3Ck", - "symbol": "RTRO", - "name": "RetroBit", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/H7NbVyqLPHWC7Da49F4CLNTgfMfYq8dF9ktJW5wwH3Ck/logo.png", - "tags": ["utility-token", "retro-token", "retro-trades"], - "extensions": { - "discord": "https://discord.com/invite/qawXWshkQw", - "twitter": "https://twitter.com/retro_trades", - "website": "https://retrotrades.com/" - } - }, - { - "chainId": 101, - "address": "zrUEBKeJU9ekD2cExT6idR9jJw7Y41pfoz6ofm6D4M1", - "symbol": "DAY", - "name": "DEMOCRACY", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/zrUEBKeJU9ekD2cExT6idR9jJw7Y41pfoz6ofm6D4M1/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://youtube.com/channel/UCEmwk5liIg8lxIjGqh8uHaA" - } - }, - { - "chainId": 101, - "address": "3z6ihp33VVctahRfq2MVQ8Rgf3bEmasVkoQKSjb5MuuW", - "symbol": "ADDO", - "name": "ADDO family", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/in3bit/addo/main/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://addo-family.com" - } - }, - { - "chainId": 101, - "address": "BHamA7cqt2ZSTqzGagamALprsmFnzQRPJfgx65VcRyZU", - "symbol": "OPEN", - "name": "Opensource", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BHamA7cqt2ZSTqzGagamALprsmFnzQRPJfgx65VcRyZU/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://youtube.com/channel/UCEmwk5liIg8lxIjGqh8uHaA" - } - }, - { - "chainId": 101, - "address": "4S8fELt7cfNsddncSxGzT5d8SfLeKAn76xj2Q2ZhTrdN", - "symbol": "FANS", - "name": "FANALYST", - "decimals": 9, - "logoURI": "https://arweave.net/yF5NB2MLwBge5pzgF9KPW6b7a6n9RznhQ-LKAJOpAaw", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/fanalystUS", - "website": "https://fanalyst.co/" - } - }, - { - "chainId": 101, - "address": "B9ooQRoiBdcqRdp4E7KqWoxwsPQdeJ6Y2ZWyRUt2o7Rd", - "symbol": "SHIBZ", - "name": "Shibaz NFT Coins", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/B9ooQRoiBdcqRdp4E7KqWoxwsPQdeJ6Y2ZWyRUt2o7Rd/logo.png", - "tags": ["utility-token", "community-token"] - }, - { - "chainId": 101, - "address": "D6DU7eZBq3mnFB1EjvKbaw3xmTMmr4UgK2a7WwtSzSrJ", - "symbol": "ACRE", - "name": "ACRE NFT", - "decimals": 0, - "logoURI": "https://cdn.jsdelivr.net/gh/AbdallaMalik/Acre/logo.png", - "tags": ["nft"], - "extensions": { - "facebook": "https://facebook.com/gumarabictoken", - "telegram": "https://t.me/gumarabictoken", - "twitter": "https://twitter.com/gum_token" - } - }, - { - "chainId": 101, - "address": "EDcg7Vikia4yCikvydWrbc8EdvYiRkL9NW5k8hnKGfbD", - "symbol": "LGND", - "name": "LegendKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/soonerdm/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AyDGcnCpYLRCZygMCLjfioEZxgzH1FbySNLrEoJR27yX", - "symbol": "JPR", - "name": "JupiterCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MineGamer69/JupiterCoin/main/logo.png", - "tags": ["community-token", "utility-token"] - }, - { - "chainId": 101, - "address": "3GxJQETXn3JRbxihndAteRvkZZrU9S7Fp91LC7LRcagj", - "symbol": "WRC", - "name": "Wulfz Reverse Club", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3GxJQETXn3JRbxihndAteRvkZZrU9S7Fp91LC7LRcagj/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5UH5K1sMfG6MszrqGAsWym1Q1q87akGVW9HXjD4SXcgn", - "symbol": "CLK", - "name": "Click Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/ilov-eu/assets/main/click-icon.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://click.ilov.eu" - } - }, - { - "chainId": 101, - "address": "FJd4ZyXGHfKonF3tJKGs2ku2aMSAr4dcwwzGHUZtoH4w", - "symbol": "SUBSI", - "name": "Subsicoin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FJd4ZyXGHfKonF3tJKGs2ku2aMSAr4dcwwzGHUZtoH4w/logo.png", - "tags": [ - "utility-token", - "community-token", - "social-token", - "trading-token" - ] - }, - { - "chainId": 101, - "address": "2muXUaump8kdxheK4MtFNj1W2z6aVrB9mGK6W9eC7tJF", - "symbol": "PENGU", - "name": "PENGU COIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/CrazyLoafofBread/SolanaCryptoProject/main/PengToken.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5Z1xdUeUo92vc6XyFeyQrKv8ix1z1fKoTAENb6RRdmVH", - "symbol": "SAPO", - "name": "Samoyed Puppet Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5Z1xdUeUo92vc6XyFeyQrKv8ix1z1fKoTAENb6RRdmVH/logo.jpg" - }, - { - "chainId": 103, - "address": "f9wr17a5SaJgxN46pYzMVXKj9TkD8KmafhZZn6DpiB2", - "symbol": "AKRG", - "name": "Andrei Koriagin (f9wr)", - "decimals": 4, - "logoURI": "https://devbeta.human.ag/api/profile/2F3szNSUNzRxHwx1arJahbs1XPa7sPUEp8i692mV2kwY/picture?src=token-list", - "tags": ["utility-token", "social-token", "human"], - "extensions": { - "website": "https://devbeta.human.ag/address/2F3szNSUNzRxHwx1arJahbs1XPa7sPUEp8i692mV2kwY?src=token-list" - } - }, - { - "chainId": 103, - "address": "BQRoP3zmwzmk1TvYcNQq4nVP7voJDoX5vX8FWYmGVzqa", - "symbol": "BCHB", - "name": "Yuri (BQRo)", - "decimals": 4, - "logoURI": "https://devbeta.human.ag/api/profile/HtnWUzGEAdi8c77T33wFbyZgw3s7ihr9bZMHD47q2u3j/picture?src=token-list", - "tags": ["utility-token", "social-token", "human"], - "extensions": { - "website": "https://devbeta.human.ag/address/HtnWUzGEAdi8c77T33wFbyZgw3s7ihr9bZMHD47q2u3j?src=token-list" - } - }, - { - "chainId": 103, - "address": "c6qehzp5EdCr1Hve1Pj7uhdW3458gvNW9mqQ7qQWJc5", - "symbol": "CDA", - "name": "David Anderson (c6qe)", - "decimals": 4, - "logoURI": "https://devbeta.human.ag/api/profile/5XYUV5ExAboTuKT3v54nCWRa9m6wddXMB6x4sW2X1vrx/picture?src=token-list", - "tags": ["utility-token", "social-token", "human"], - "extensions": { - "website": "https://devbeta.human.ag/address/5XYUV5ExAboTuKT3v54nCWRa9m6wddXMB6x4sW2X1vrx?src=token-list" - } - }, - { - "chainId": 103, - "address": "HkjmVFQSLcv8jWVy7AadEWRptfxYaKGkLw6TRQdmVPor", - "symbol": "EFEFOX", - "name": "Estefania Foxy (Hkjm)", - "decimals": 4, - "logoURI": "https://devbeta.human.ag/api/profile/8tJ9y6nUbcieE3fa6iSuwQSGkcpU5Bt4AhcBnKwPcBz8/picture?src=token-list", - "tags": ["utility-token", "social-token", "human"], - "extensions": { - "website": "https://devbeta.human.ag/address/8tJ9y6nUbcieE3fa6iSuwQSGkcpU5Bt4AhcBnKwPcBz8?src=token-list" - } - }, - { - "chainId": 103, - "address": "4L3qjwT5pTXHULHUuWBPtqGrjAxRzUXVtbWQ4wHb5HRU", - "symbol": "FFFFA", - "name": "phantom-1641309842190 (4L3q)", - "decimals": 4, - "logoURI": "https://devbeta.human.ag/api/profile/3kDjTHdA8xrUj6ZxEYNJ4sVBPAiD8FKrn2TNqgC4sP9g/picture?src=token-list", - "tags": ["utility-token", "social-token", "human"], - "extensions": { - "website": "https://devbeta.human.ag/address/3kDjTHdA8xrUj6ZxEYNJ4sVBPAiD8FKrn2TNqgC4sP9g?src=token-list" - } - }, - { - "chainId": 103, - "address": "FZSyCookhhSdmrHGMSLJH6rdj6tzCRs1yW4iZamrXZCa", - "symbol": "FNBRD", - "name": "Onboarding 5 (FZSy)", - "decimals": 4, - "logoURI": "https://devbeta.human.ag/api/profile/9g8zNL6gxGfAi8MjkecZAcz3PqeW2q4aH1bVbeLT2YQS/picture?src=token-list", - "tags": ["utility-token", "social-token", "human"], - "extensions": { - "website": "https://devbeta.human.ag/address/9g8zNL6gxGfAi8MjkecZAcz3PqeW2q4aH1bVbeLT2YQS?src=token-list" - } - }, - { - "chainId": 103, - "address": "CJNiEgCqsbpjTfiGaEEmQk62PD1AmWzmSvRoyLMakPWk", - "symbol": "HRY", - "name": "Harry Bro (CJNi)", - "decimals": 4, - "logoURI": "https://devbeta.human.ag/api/profile/4zZd9KUxa8Ndtj23UF7ffMAEbTyPhJLKJyFPhQ43S6Qu/picture?src=token-list", - "tags": ["utility-token", "social-token", "human"], - "extensions": { - "website": "https://devbeta.human.ag/address/4zZd9KUxa8Ndtj23UF7ffMAEbTyPhJLKJyFPhQ43S6Qu?src=token-list" - } - }, - { - "chainId": 103, - "address": "Eh1kYoZhxdf5C6wwwAV7KHnDtNXpLm2fQka8RarnAkNV", - "symbol": "JHX", - "name": "Jimmy Hendrix (Eh1k)", - "decimals": 4, - "logoURI": "https://devbeta.human.ag/api/profile/4UMDqYeUh6AZJ7qVyWptaStJB2ma9CVYKcU639x89YnJ/picture?src=token-list", - "tags": ["utility-token", "social-token", "human"], - "extensions": { - "website": "https://devbeta.human.ag/address/4UMDqYeUh6AZJ7qVyWptaStJB2ma9CVYKcU639x89YnJ?src=token-list" - } - }, - { - "chainId": 103, - "address": "mthPPZnQijssvWuPzZwF9kLFYwrD3jGffDbJshKQruC", - "symbol": "JRSW", - "name": "Jim Raynor (mthP)", - "decimals": 4, - "logoURI": "https://devbeta.human.ag/api/profile/33psYCJC3ESZzhzEpxm8vgAVcsP2BJ6Wp4fQZ19kTrdH/picture?src=token-list", - "tags": ["utility-token", "social-token", "human"], - "extensions": { - "website": "https://devbeta.human.ag/address/33psYCJC3ESZzhzEpxm8vgAVcsP2BJ6Wp4fQZ19kTrdH?src=token-list" - } - }, - { - "chainId": 103, - "address": "AAheokyVcSbu9j84otF8txMHX53xbH2QD7Ws7waHTbZ", - "symbol": "KGG", - "name": "Master of Circles (AAhe)", - "decimals": 4, - "logoURI": "https://devbeta.human.ag/api/profile/FKabzds8w3k7ZQRkPS6duTZJDhCiHiaR64Vq9AkCtsgP/picture?src=token-list", - "tags": ["utility-token", "social-token", "human"], - "extensions": { - "website": "https://devbeta.human.ag/address/FKabzds8w3k7ZQRkPS6duTZJDhCiHiaR64Vq9AkCtsgP?src=token-list" - } - }, - { - "chainId": 103, - "address": "4Sf1tn3W23PGDbbEo3TsHDxLyd36wVDY812fNthX8HqX", - "symbol": "KRG", - "name": "Kirill (4Sf1)", - "decimals": 4, - "logoURI": "https://devbeta.human.ag/api/profile/7su4iG1W2qkQiaLS1MTZJs1SQzhoAM5HuhRrnH4unXHN/picture?src=token-list", - "tags": ["utility-token", "social-token", "human"], - "extensions": { - "website": "https://devbeta.human.ag/address/7su4iG1W2qkQiaLS1MTZJs1SQzhoAM5HuhRrnH4unXHN?src=token-list" - } - }, - { - "chainId": 103, - "address": "BgqDU57Y5xd4NHQZ6stRdsVxW6RcNUDW2zXbZDztNBnq", - "symbol": "PAKRG", - "name": "Phantom Andrei (BgqD)", - "decimals": 4, - "logoURI": "https://devbeta.human.ag/api/profile/GF1gRpCRFFpbafMeSQaFXJk4BNvab9o7nZN4Hntdhzn5/picture?src=token-list", - "tags": ["utility-token", "social-token", "human"], - "extensions": { - "website": "https://devbeta.human.ag/address/GF1gRpCRFFpbafMeSQaFXJk4BNvab9o7nZN4Hntdhzn5?src=token-list" - } - }, - { - "chainId": 103, - "address": "rHPjzFU3dJ4zuYMhKXkbF1kKdrDtrc3ys3jZHWBuVHF", - "symbol": "PTWO", - "name": "I am human (rHPj)", - "decimals": 4, - "logoURI": "https://devbeta.human.ag/api/profile/Fzmkp2zp3kN4BqAkExhqBgngQKX7ix3vYxp8im9dPh6t/picture?src=token-list", - "tags": ["utility-token", "social-token", "human"], - "extensions": { - "website": "https://devbeta.human.ag/address/Fzmkp2zp3kN4BqAkExhqBgngQKX7ix3vYxp8im9dPh6t?src=token-list" - } - }, - { - "chainId": 103, - "address": "9bZJdav86hkQSqFNnuPg3gQ6GcHLKaW2xFDAsZ7cjbHU", - "symbol": "SMN", - "name": "Simon Shchedrin (9bZJ)", - "decimals": 4, - "logoURI": "https://devbeta.human.ag/api/profile/7piaSvW7udTHu9buGh1h4fQnYZ2aj4zLYMWM8de1XY8z/picture?src=token-list", - "tags": ["utility-token", "social-token", "human"], - "extensions": { - "website": "https://devbeta.human.ag/address/7piaSvW7udTHu9buGh1h4fQnYZ2aj4zLYMWM8de1XY8z?src=token-list" - } - }, - { - "chainId": 103, - "address": "BsJ5yyh63pzAoV32Wr3SLkbPwntRwWVUWrHEKtYxdtJV", - "symbol": "TESTT", - "name": "Phantom Phantomovich (BsJ5)", - "decimals": 4, - "logoURI": "https://devbeta.human.ag/api/profile/y3xTFb1EPZqrUp4EKzUuinJn1Fa5ywJAgG5xyiZLqQj/picture?src=token-list", - "tags": ["utility-token", "social-token", "human"], - "extensions": { - "website": "https://devbeta.human.ag/address/y3xTFb1EPZqrUp4EKzUuinJn1Fa5ywJAgG5xyiZLqQj?src=token-list" - } - }, - { - "chainId": 103, - "address": "9BmtYXeTnmdWiyhkSpVQ4rt2T5YsAUepyJuoQpKbaJAB", - "symbol": "TIRED", - "name": "Phantom Phantomovich (9Bmt)", - "decimals": 4, - "logoURI": "https://devbeta.human.ag/api/profile/89ZBi4ejzTs2oZS2YqnRRdYKxdzPxTLvy9XqfbzCrZmz/picture?src=token-list", - "tags": ["utility-token", "social-token", "human"], - "extensions": { - "website": "https://devbeta.human.ag/address/89ZBi4ejzTs2oZS2YqnRRdYKxdzPxTLvy9XqfbzCrZmz?src=token-list" - } - }, - { - "chainId": 103, - "address": "E68is3KKzHGXr9aDijKPHPtYXpHTK4u5pq6auqPViNpa", - "symbol": "TMAC", - "name": "Timofey from macbook (E68i)", - "decimals": 4, - "logoURI": "https://devbeta.human.ag/api/profile/F9xvUGCZa5oSxXDvzyDHp2r3ZqrBQMg8GYF5uDxBMbbB/picture?src=token-list", - "tags": ["utility-token", "social-token", "human"], - "extensions": { - "website": "https://devbeta.human.ag/address/F9xvUGCZa5oSxXDvzyDHp2r3ZqrBQMg8GYF5uDxBMbbB?src=token-list" - } - }, - { - "chainId": 103, - "address": "ANqjKBxkJz2KSeCspw6zBRHA7LtA8SHgQHxnHWsCdH5T", - "symbol": "TTT", - "name": "Lord of the rings (ANqj)", - "decimals": 4, - "logoURI": "https://devbeta.human.ag/api/profile/4fHZRvZ3U672GZH2dQz7wsGxTHdAZ6H2Rx52pxNtYxab/picture?src=token-list", - "tags": ["utility-token", "social-token", "human"], - "extensions": { - "website": "https://devbeta.human.ag/address/4fHZRvZ3U672GZH2dQz7wsGxTHdAZ6H2Rx52pxNtYxab?src=token-list" - } - }, - { - "chainId": 103, - "address": "3boYXtxRvmEkBtLBSNP1sfporopRpV71HkqXp9fAaAf3", - "symbol": "ZZZ", - "name": "Eugene Trofimov (3boY)", - "decimals": 4, - "logoURI": "https://devbeta.human.ag/api/profile/2MeA5pogprKa1Jyx3k1caTyZgHbBwsvb1w5mq6z4Ht3L/picture?src=token-list", - "tags": ["utility-token", "social-token", "human"], - "extensions": { - "website": "https://devbeta.human.ag/address/2MeA5pogprKa1Jyx3k1caTyZgHbBwsvb1w5mq6z4Ht3L?src=token-list" - } - }, - { - "chainId": 103, - "address": "D6zZNh4u7NLT3CWh8pv8XGpEr3yfjqiNs5myvyvEWPhm", - "symbol": "ZZZZ", - "name": "Wallet 6 (D6zZ)", - "decimals": 4, - "logoURI": "https://devbeta.human.ag/api/profile/2kZYqyAGZ8c9Ud1cdhoEqPipnmd8BS6pBZ8oEem3oPae/picture?src=token-list", - "tags": ["utility-token", "social-token", "human"], - "extensions": { - "website": "https://devbeta.human.ag/address/2kZYqyAGZ8c9Ud1cdhoEqPipnmd8BS6pBZ8oEem3oPae?src=token-list" - } - }, - { - "chainId": 101, - "address": "7Q4Tfdxn5Cj2rEeeewogaYr3yi94T8tAzDS4PBv48KXN", - "symbol": "SPRO", - "name": "Espresso Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/cryptocode1/cryptotoken/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "977QUBGpynbm8s8v5WCRjCvE7QTbF9xU3yu74a7tB8cn", - "symbol": "SQWD", - "name": "SquidwardKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/PGFsquidward/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BX9Qbqjuj7pg8ecNbvEDk1J4RYwjzACN2rdjsX4Sa6kL", - "symbol": "FEZ", - "name": "zemmour", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BX9Qbqjuj7pg8ecNbvEDk1J4RYwjzACN2rdjsX4Sa6kL/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://youtu.be/JAiTOK16Xfk" - } - }, - { - "chainId": 101, - "address": "Em88wnxQo952FBQhJcBS1bRZR4PC7UVaPozQ9EC5PsHE", - "symbol": "AFNF", - "name": "All Family No Friends ", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/AFNF93/Crypto/main/AFNFLogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3NPCYLdMWF4x4vDtgzmbCqqt6n8sc2r4skQTYUu4NWxY", - "symbol": "MTR", - "name": "Meteor", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/gugunaga/meteor_token/main/assets/MTR_SYMB.png", - "tags": ["nft", "game"] - }, - { - "chainId": 101, - "address": "98Hora73y7MALFLCfcBZpUPbdW8TmADJKBV5Foo4wicv", - "symbol": "ROAR", - "name": "ROAR Token", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/98Hora73y7MALFLCfcBZpUPbdW8TmADJKBV5Foo4wicv/logo.png", - "tags": ["nft"], - "extensions": { - "discord": "https://discord.gg/cuYdr7F33g", - "twitter": "https://twitter.com/CubsClubNFT", - "website": "https://cubsclub.io" - } - }, - { - "chainId": 101, - "address": "3xsHAxDCADDi2Wo1VgAnrpGjBfQRpBrdWXakJKzLNn1W", - "symbol": "OCCC", - "name": "Cute Cat Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Samthebest999/crypto-real/main/logo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6CJDKPcvWcMu5mGoBHMuBvZTHfkzne73bSXNnxwkX6tH", - "symbol": "Des", - "name": "Design", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/owens33/crypto/main/designn.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/design_tokensol" - } - }, - { - "chainId": 103, - "address": "GUBswusbccMEuLFeTECT3EyLRgo8Vn5di9FjpC5vCfuT", - "symbol": "OGL", - "name": "OGL Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BHamA7cqt2ZSTqzGagamALprsmFnzQRPJfgx65VcRyZU/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://youtube.com/channel/UCEmwk5liIg8lxIjGqh8uHaA" - } - }, - { - "chainId": 101, - "address": "5smauDYN5njuCSKiAAxz3qgPpCyYHFWqYzBpEq7F7gjS", - "symbol": "GKC", - "name": "GypsyKingCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/GypsyKingCoin/cryptography/main/b563066513f0448baefd0254e69dcfc7.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2jKfiEJWC4wdyq6LnJUPtur2vjEH2VGQUoZThgCDry4J", - "symbol": "MIG", - "name": "Migrant", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2jKfiEJWC4wdyq6LnJUPtur2vjEH2VGQUoZThgCDry4J/logo.jpg", - "tags": ["utility-token"], - "extensions": { - "website": "https://agora-asile.ch" - } - }, - { - "chainId": 101, - "address": "8vMt2wuphVbehxhCiGsDZYn7Dw4sPFdw4jHq6JuYbZvy", - "symbol": "ALE", - "name": "Beer token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/roblound/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8Wf4RCoeBsnjaWuSP8Z2uNKyBjjCVumLhAkpzDcTw175", - "symbol": "KLA", - "name": "Kalia", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/nickrawlings2012/logo/main/logo.png", - "tags": ["social-token", "utility-token", "community-token"], - "extensions": { - "website": "https://josephikhalia.com/kalia" - } - }, - { - "chainId": 101, - "address": "AuniAuHUDDXasDZ3v6h4M2oJhZERXzSZFixqED2Etywy", - "symbol": "MAGD", - "name": "MagnumDong)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AuniAuHUDDXasDZ3v6h4M2oJhZERXzSZFixqED2Etywy/logo.png", - "tags": ["MAGD", "magnum-dong"] - }, - { - "chainId": 101, - "address": "ETF3jwfXE5qSF9iDbwnzjUwZoi6YL6DvRRz2M8d6HDrV", - "symbol": "TYLR", - "name": "Tyler", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SolPAce/crypto/main/logo.png", - "tags": ["utility-token", "community-token", "payment-token"] - }, - { - "chainId": 101, - "address": "52TaFzNdtQzCQw7msp3f2sFP5eiNZVs64KXTRsG9M35y", - "symbol": "LAND", - "name": "CommonLand", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/Swaeyzi/CommonLand/main/CommonLand_22.01.13.png", - "tags": ["financial-token", "real-estate"] - }, - { - "chainId": 101, - "address": "BmG6k6aNvTtZeGnywQqohtK3imPCK5CaNgs5WvddN3j1", - "symbol": "KK", - "name": "KidsKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/dfergusoncle/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "H7SuDJBGwzRJyoyjpkfkEUtwUS6ywk7LmL8dU3TuZUTB", - "symbol": "SUS", - "name": "Sus coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/devil182007/crypto/main/logo.jpg", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "BDdPxywjLGwecVxe7Ucge8QwYBFbev5TH3V8rTviUcGg", - "symbol": "WAR", - "name": "GameOfWar", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/moonwalk103/crypto/main/war.png", - "tags": ["game-token"] - }, - { - "chainId": 101, - "address": "AWx5xbxedmeDkkgM37K2z7jSiLYVViDiqJGja8dMeMAj", - "symbol": "BHFC", - "name": "Buck Hill Falls Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/dc215007/bhfc/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GQVAdB2mYSNG1amewdSmTheoFGggy99Hjv6fDjTZrnFo", - "symbol": "VENOM", - "name": "Subayai Snakes VENOM", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/abrarmusa/files/master/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://subayaisnakes.com" - } - }, - { - "chainId": 101, - "address": "7Q7cGSYsitFxFavCf1GZ87rQUSfGS8sUxEwHXEM63YBC", - "symbol": "IRC", - "name": "IRC Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/irc-token/crypto/main/logo.png", - "tags": ["social-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/IRC_Coin", - "website": "https://irc-chat.io" - } - }, - { - "chainId": 101, - "address": "Aq8jBSDyAqaHv8DYr8SbBRarJEQmtYhpGi3R7FsYZsug", - "symbol": "CURSEDMIKE", - "name": "Cursed Mikes Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Aq8jBSDyAqaHv8DYr8SbBRarJEQmtYhpGi3R7FsYZsug/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "Cm3tGABuZYQuiKQVzuPEF2kUW141ZU1ejvqr4gSDtoXj", - "symbol": "DNKE", - "name": "Donkee Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/EthanLavi/crypto2/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HQnv1p1U3hHX4KHcALoDpE7qH2LHTErVqjattdr5kDTZ", - "symbol": "SHUSHI$", - "name": "ShuShi", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HQnv1p1U3hHX4KHcALoDpE7qH2LHTErVqjattdr5kDTZ/logo.jpg", - "tags": ["utility-token", "community-token"], - "extensions": { - "website": "http://houseoffoodporn.com" - } - }, - { - "chainId": 101, - "address": "96nnEKSfcNCUBjkN7hbDh2dXYRDyZ81JXGBdYAxsf3MP", - "symbol": "HIEP", - "name": "Hiep Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/HiepToken/Hiep/main/20220116_031649_0000.png", - "tags": ["social-token", "Vietnam", "USA"] - }, - { - "chainId": 101, - "address": "4PJAhtmtcwrrkxpxJcXbCCJU6jMVPqCHh3zBQZEhCrrB", - "symbol": "PRSZ", - "name": "PersonaZim", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/zimlander/crypto/main/PSRZ.png", - "tags": ["social-token", "community-token", "USA"] - }, - { - "chainId": 101, - "address": "8FaSGvqYWhBoqgSuVrKQSr2AquCSKyh7ufLEtrPAYJZF", - "symbol": "ACID", - "name": "Acid Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/DeceptiveGmR/crypto/main/logo.png", - "tags": ["social-token", "community-token", "utility-token"] - }, - { - "chainId": 101, - "address": "A2xHq9wgpiEhzEKvRTXiKSspUFf51cyRhhAKcG9hXeF8", - "symbol": "FTH", - "name": "Feather", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/A2xHq9wgpiEhzEKvRTXiKSspUFf51cyRhhAKcG9hXeF8/logo.png", - "tags": ["game-token"], - "extensions": { - "website": "https://nestarcade.io" - } - }, - { - "chainId": 101, - "address": "FKMtCmFwdovbGELve1Z3x2trid9HGkAzwDdcRHu9jqtc", - "symbol": "ASH", - "name": "AshishVZ", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ashishvz/ASH_Crypto_Data/main/Group%201.png", - "tags": [ - "social-token", - "community-token", - "utility-token", - "Indian-token" - ] - }, - { - "chainId": 101, - "address": "5cC4ESz1a6zwQXREUZGgYyPZxmx7yEJJ3F9mBZe9qp9G", - "symbol": "COMN", - "name": "CommonCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/cjwolff/comncoin/main/logo.png", - "tags": [ - "social-token", - "community-token", - "payment-token", - "financial-token" - ] - }, - { - "chainId": 101, - "address": "7GhUW2mcC9kZYbDxbcBEhYzvDxwk2etaH6nfY9GLnHSH", - "symbol": "UFOGs", - "name": "UFOgs WL token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7GhUW2mcC9kZYbDxbcBEhYzvDxwk2etaH6nfY9GLnHSH/logo.png", - "extensions": { - "twitter": "https://twitter.com/UFOGs" - } - }, - { - "chainId": 101, - "address": "2YJH1Y5NbdwJGEUAMY6hoTycKWrRCP6kLKs62xiSKWHM", - "symbol": "SGEM", - "name": "Sol Gems", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2YJH1Y5NbdwJGEUAMY6hoTycKWrRCP6kLKs62xiSKWHM/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://dazedducks.com" - } - }, - { - "chainId": 101, - "address": "Ht1w3UzKmjZrDaEpyzNjs5YfZqiC9oPR1bHKxp8yCkuT", - "symbol": "CSxA", - "name": "Code Sydney test A", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/codesydney/assets/main/logo/test/hexagon.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Er21kTfW9yHsL5xRGMPPPATuyDNzizMAk3pUtMyFAPrt", - "symbol": "MP", - "name": "MINT PASS", - "decimals": 0, - "logoURI": "https://chiiepdxwskdrdtt3mqrnde3xh7hib4go22qacb5myxdj34xwwqq.arweave.net/EdCCPHe0lDiOc9shFoybuf50B4Z2tQAIPWYuNO-XtaE", - "tags": ["mint-token"], - "extensions": { - "discord": "https://discord.gg/CtqSaXsY64", - "twitter": "https://twitter.com/BohemiaArtFair", - "website": "https://bohemia.gallery" - } - }, - { - "chainId": 101, - "address": "HovGjrBGTfna4dvg6exkMxXuexB3tUfEZKcut8AWowXj", - "symbol": "FCON", - "name": "Space Falcon", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/spacefalcon-io/crypto/main/logo.svg", - "tags": ["game-token", "utility-token", "trading-token"], - "extensions": { - "coingeckoId": "spacefalcon", - "telegram": "https://t.me/spacefalconIO", - "twitter": "https://twitter.com/SpaceFalconIO", - "website": "https://spacefalcon.io/" - } - }, - { - "chainId": 101, - "address": "8QN5VvpadszVqGkjzwUZs5saV85K8662hang7aWbpmfE", - "symbol": "DEGN", - "name": "Degenerate Ape Trader", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/nvaider/solana/main/Untitled%20design.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5ZEf3d3cq2ExzV1X3srpM6Rfs4Hid1nvHJSvmWWsNcad", - "symbol": "FANS", - "name": "Fans I Love U", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/ilov-eu/assets/main/fans-token.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FzkCv5ow9UPWh8HZ6VF8y6mrpxeCyyroSYgXo6WqLwBj", - "symbol": "MEG", - "name": "MEG Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FzkCv5ow9UPWh8HZ6VF8y6mrpxeCyyroSYgXo6WqLwBj/logo.png", - "tags": ["nft", "game", "utility-token"] - }, - { - "chainId": 101, - "address": "5WuCtNrZ6TnrrZFEojsMGubTJ3rfabdj9wYhMAMS4key", - "symbol": "CNCL", - "name": "Council Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5WuCtNrZ6TnrrZFEojsMGubTJ3rfabdj9wYhMAMS4key/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "D2FEb1hFrvyVP1XGsesSbnUCxuAiCqrVnHh8eM63ZwAa", - "symbol": "VALENTINE", - "name": "Valentine's Day", - "decimals": 0, - "logoURI": "https://krrdzdguglgnlkkisgwktrk3pvlst2vttfevzzcjddauwvnb63cq.arweave.net/VGI8jNQyzNWpSJGsqcVbfVcp6rOZSVzkSRjBS1Wh9sU", - "tags": ["nft"], - "extensions": { - "animationUrl": "https://sm53k54naknzyhdbensb3r7lyfr33pmonxkes2rawxzhlr4srlkq.arweave.net/kzu1d40Cm5wcYSNkHcfrwWO9vY5t1ElqILXydceSitU", - "description": "Valentine's Day is upon us and I'm far away from the one I'm in love with (Gh-Gh). On the Valentine's Day, my love will receive this token, containing this message; I'm in Love with you and I'm going to love you for as long as this token lives on this blockchain. Happy Valentine's Day", - "imageUrl": "https://sm53k54naknzyhdbensb3r7lyfr33pmonxkes2rawxzhlr4srlkq.arweave.net/kzu1d40Cm5wcYSNkHcfrwWO9vY5t1ElqILXydceSitU", - "instagram": "https://www.instagram.com/nftsolanagallery", - "twitter": "https://twitter.com/nftgalleryshop" - } - }, - { - "chainId": 101, - "address": "B1kARrd8hS9LK683okxY8pwmEW212LbfrGSyup8USLC3", - "symbol": "TREX", - "name": "Tyrannosaurus", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/trex-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AdUi6aRZMDCXGXcJDVGv2ttBnkkAhjkH7WgurJQCtJQc", - "symbol": "KZM", - "name": "KZMTV Social Club", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/KZMTV/panda/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9EyZ6CECTHTZ5Tn2xJ4p1sciafwWsLAK7dBqAXGVqAj3", - "symbol": "ARF", - "name": "Arf Coin", - "decimals": 6, - "logoURI": "https://user-images.githubusercontent.com/93989494/148758013-4f2325b6-6b4b-40ce-a635-fbd777d65c67.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DkYtowSvwrkp9G3PBKDwtfLbTxCJhuj92XcrnzxNhp3G", - "symbol": "BLZ", - "name": "BALLZ", - "decimals": 6, - "logoURI": "https://user-images.githubusercontent.com/93989494/149791451-1b1c77bc-bf0e-4942-90a5-a2793f365034.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "E5G9DEbWiyDwgSh9tBLjhYU3JJpMBbPPnWLhShj2uLVx", - "symbol": "OCTOWL", - "name": "Octoverses Club WL", - "decimals": 0, - "logoURI": "https://static.wixstatic.com/media/ccf368_d2d56235725d4f21afa76e4e33229f0a~mv2.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/OctoversesClub", - "website": "https://www.octoverses.com" - } - }, - { - "chainId": 101, - "address": "HmLehVYpehp22zQRs1fvtrgY1qR539LZGwXG3Qba3T76", - "symbol": "RYDER", - "name": "RYDER COIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/LouJoseph888/Crypto/main/ryderlogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "57FSXkhL191HvuDeCgzczcx1RGWZaQJrmUESvicnXQN4", - "symbol": "SKATECO", - "name": "Skate Collective", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/RAWBrand/SkateCollective/main/logo.png", - "tags": ["utility-token", "social-token", "community-token"], - "extensions": { - "description": "The Skate Collective Represents the Global Skateboarding Movement" - } - }, - { - "chainId": 101, - "address": "3Hi27r9kUtSmiPYtpRJNYCCGTGosnqC5Dhz812TrjpaY", - "symbol": "DJIB", - "name": "Djib", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3Hi27r9kUtSmiPYtpRJNYCCGTGosnqC5Dhz812TrjpaY/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Universal Data Storage Parachain", - "discord": "https://discord.gg/PpZgKJkKpb", - "github": "https://github.com/Djib-io", - "imageUrl": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3Hi27r9kUtSmiPYtpRJNYCCGTGosnqC5Dhz812TrjpaY/logo.png", - "telegram": "https://t.me/DjibTech", - "twitter": "https://twitter.com/Djibchain", - "website": "https://djib.io" - } - }, - { - "chainId": 101, - "address": "2sbusqQv9kp6DoW23cCnRdRgHt4cDdB2Je8qddJtmKGT", - "symbol": "XRIZ", - "name": "XriZ Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ChrisX33/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ChvNm6CWcUgjSMXwCjhC8eYLjZircvnsV9HT3iJkV9oa", - "symbol": "OZ", - "name": "Ozzy Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ChrisX33/crypto-ozzy/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "G4iSJWW63sU8yRWtV4AkcQ5JJmEdbUHEG68aDyHbaqr3", - "symbol": "LNFTxK2SOLAND", - "name": "Key 2 SolanaLand", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/G4iSJWW63sU8yRWtV4AkcQ5JJmEdbUHEG68aDyHbaqr3/logo.png", - "tags": ["liqnft-wl-token"], - "extensions": { - "discord": "https://discord.gg/PYZWRHgVwM", - "twitter": "https://twitter.com/liqnft", - "website": "https://www.liqnft.com/gallery/SOLAND" - } - }, - { - "chainId": 101, - "address": "3VDMeDMgXK4RFGtQ6Sr4PwPHG7T8aDeuUctKLEav317p", - "symbol": "MILEI", - "name": "Milei Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/ilov-eu/assets/main/milei-001.png", - "tags": ["social-token"], - "extensions": { - "website": "https://milei.ilov.eu" - } - }, - { - "chainId": 103, - "address": "8mAXWJXfz7v3zuBoPEvumadN4CTXciggGbGxsA2gEH78", - "symbol": "SFT", - "name": "Scorpion Fit Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8mAXWJXfz7v3zuBoPEvumadN4CTXciggGbGxsA2gEH78/logo.png", - "tags": ["SFT"] - }, - { - "chainId": 103, - "address": "7nHUGFRz5En7obQUD39xfZgHNJdKq5GUfGe6oT4XVxDy", - "symbol": "SMW", - "name": "Scorpion Metaverse World", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7nHUGFRz5En7obQUD39xfZgHNJdKq5GUfGe6oT4XVxDy/logo.png", - "tags": ["SMW"] - }, - { - "chainId": 101, - "address": "DTj795ZfgnJtvyARmzse7YimF1PjBVsJQFWL5RAk6hop", - "symbol": "HAPE", - "name": "HAPEBEAST Coin", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/HelloCryptoHub/HAPEBEAST_coin/main/HAPE_Coin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3ghhbwWSs4CCBY5hwDe37LG4GRyF1p1puZGFpqgZumzh", - "symbol": "BIGM", - "name": "Bigmos", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/BIGMOS/crypto/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "a45A2uc6XCPpRsqFbZEjUSf7eUqGCqDMbcw7UwWwqd9", - "symbol": "LC", - "name": "Ladinien Coins", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/LadineinCoins/Crypto/main/ladinien.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3aeoREZ34Nm1QkwJctwkKVJ5cB9NMdj6JpHHGTp7b5D7", - "symbol": "ARK", - "name": "Aryan Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Aryan20/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FLiPR1BvcJCvR94NqKrmmQ2tngLeYXPu4UXGA1i7cNR3", - "symbol": "FLIPR", - "name": "Flipper Therapy", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FLiPR1BvcJCvR94NqKrmmQ2tngLeYXPu4UXGA1i7cNR3/logo.png" - }, - { - "chainId": 101, - "address": "BRg8CLYEStYAFQad3CVMCYy1cgeuvUnarAZLV8K8Hyfv", - "symbol": "SHELL", - "name": "MetaShells", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/metashells/main/metashellslogo.png", - "tags": ["social-token", "metaverse"], - "extensions": { - "telegram": "https://t.me/metashells", - "twitter": "https://twitter.com/metashells", - "website": "https://metashells.io" - } - }, - { - "chainId": 101, - "address": "2x7bhhL3GHDCFmQhTvnT4xYdyRXYvAL9UFjCyAv5e8gv", - "symbol": "GHOLE", - "name": "Glory Hole Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/cosus/Crypto/main/g1142.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BGmbEEPGnWKesoVZRQX3Ti42VBDWTUzDmCkWF1jtwTDd", - "symbol": "Val", - "name": "Val", - "decimals": 0, - "logoURI": "https://arweave.net/VGI8jNQyzNWpSJGsqcVbfVcp6rOZSVzkSRjBS1Wh9sU", - "tags": ["nft"], - "extensions": { - "animationUrl": "https://arweave.net/kzu1d40Cm5wcYSNkHcfrwWO9vY5t1ElqILXydceSitU", - "description": "Valentine's Day is upon us and I'm far away from the one I'm in love with (Gh-Gh). On the Valentine's Day, my love will receive this token, containing this message; I'm in Love with you and I'm going to love you for as long as this token lives on this blockchain. Happy Valentine's Day", - "imageUrl": "https://arweave.net/kzu1d40Cm5wcYSNkHcfrwWO9vY5t1ElqILXydceSitU" - } - }, - { - "chainId": 101, - "address": "HbzDzxmdcpQ7mik2q6Wp4KQ7haK4skuE8uziLd4Kyi7", - "symbol": "POLY", - "name": "Solana Poly", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/metalandplace/token_icons/main/solpoly.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/6J2RZb63By", - "website": "https://www.metaland.place" - } - }, - { - "chainId": 101, - "address": "TGRS4uJTH9osFV7Ku2XZURzVuKNA8g3EhSNiDjQqFsu", - "symbol": "TGRS", - "name": "TGRS COIN", - "decimals": 10, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/TGRS4uJTH9osFV7Ku2XZURzVuKNA8g3EhSNiDjQqFsu/logo.png", - "extensions": { - "twitter": "https://twitter.com/TigersClub_NFT", - "website": "https://tigerclubsol.com" - } - }, - { - "chainId": 101, - "address": "CH7XnCLxxr3fE8qa7Tt7jU7fXEo3hBjN7V3VeQBc855T", - "symbol": "M6", - "name": "Mission 6", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/powertronglobal/token-list/main/assets/mainnet/CH7XnCLxxr3fE8qa7Tt7jU7fXEo3hBjN7V3VeQBc855T/logo.png", - "extensions": { - "website": "https://mission6.io/" - } - }, - { - "chainId": 101, - "address": "HPiNockqnxvZcQ3cyPzyboqv5vN6ypYaJNzB1k5m3hLH", - "symbol": "WDIF", - "name": "Whiskey Different", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/DWPaks/Crypto/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8irnqU1bs5K5kWuS94oanpy2aSxwYJMAmYYKFywkbH1J", - "symbol": "AWD_WL", - "name": "AWD Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8irnqU1bs5K5kWuS94oanpy2aSxwYJMAmYYKFywkbH1J/logo.png", - "extensions": { - "discord": "https://discord.gg/sFvnGB84Fq", - "twitter": "https://twitter.com/a_wandering_dog", - "website": "https://awanderingdog.art" - } - }, - { - "chainId": 101, - "address": "6RuHq7T4z4cCQ5MJ1VTwvDZg2n6mPCCriGgcAY6DREZL", - "symbol": "GNGC", - "name": "GangulyCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ramanganguly/crypto/main/ganguly_coin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "56rYxFVCb4EfQNdRYrBtG8ENT9x3pRSHKuSCuAG9NfFs", - "symbol": "SKREEE", - "name": "SKREEE", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/56rYxFVCb4EfQNdRYrBtG8ENT9x3pRSHKuSCuAG9NfFs/logo.png", - "tags": [ - "community-token", - "utility-token", - "social-token", - "NFTs", - "DeFi" - ], - "extensions": { - "discord": "https://discord.gg/7uRF7Bfv", - "twitter": "https://twitter.com/GodzillazNFT" - } - }, - { - "chainId": 101, - "address": "s1ams7bwzHCG2qQf2yMF5CWASV37YotDQsjRppVkX9n", - "symbol": "SLAM", - "name": "Slambert Coupons", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/s1ams7bwzHCG2qQf2yMF5CWASV37YotDQsjRppVkX9n/logo.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/sneakyslamberts", - "website": "https://www.sneakyslamberts.com/" - } - }, - { - "chainId": 101, - "address": "54CPSwxTvPNtqoPc9Q5pmE9tC6nTM7FNAZvSUCe7sYG7", - "symbol": "MEKAPRESALE", - "name": "MekaPresale", - "decimals": 0, - "logoURI": "https://cdn.jsdelivr.net/gh/rxrxrxrx/Meka-Presale/meka-presale.png", - "tags": ["community-token"], - "extensions": { - "twitter": "https://twitter.com/MEKAMOUNT", - "website": "https://mekamounts.io/" - } - }, - { - "chainId": 101, - "address": "APRrwB56R2VswHQPaANm3uMtYuPJGmZ4HBZWAePtz6F3", - "symbol": "MSSC", - "name": "M17SilverCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/manifest33/crypto/main/IMG_5871.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "27nqFZqb2iPBeVA7bbE4KPZrJgi3dJdKV9VzhCguSy6Y", - "symbol": "POZZ", - "name": "PozzCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/dc215007/pozz1/main/logo1.png", - "tags": ["social-token", "meme-token"], - "extensions": { - "twitter": "https://twitter.com/pozzcoin", - "website": "https://pozzco.in" - } - }, - { - "chainId": 103, - "address": "6C6EH14drHyiMVxeseqS2mUxcjEpSXQSV2vpikiMRjCE", - "symbol": "AVIANI", - "name": "AVIANI_Test", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6C6EH14drHyiMVxeseqS2mUxcjEpSXQSV2vpikiMRjCE/logo.png", - "tags": ["test-token"], - "extensions": { - "website": "https://www.aviani.com/" - } - }, - { - "chainId": 101, - "address": "rAnxenuKpiVq3zHmuykGQ2XE1buyMVEqr8DcbpmmQnr", - "symbol": "KDZKOYN", - "name": "KorudazKoyn", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/KorudazCrypto/Crypto/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "nBesAPqZwC6Jcf8SD3iMjLPNTbJuBjG9C2KqEWMKGZy", - "symbol": "Kult", - "name": "KulturaArt", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/nBesAPqZwC6Jcf8SD3iMjLPNTbJuBjG9C2KqEWMKGZy/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HwtUnDXaNdJtMFBHw361KuqqHsufgLodbdJc2CqSywg9", - "symbol": "MASON", - "name": "FreeMason", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/iusryn98y/free/adf7192fe1bd197624e136447b35f803e7a96c24/free.png", - "tags": ["nft", "fractionalized-nft"], - "extensions": { - "animationUrl": "https://arweave.net/wRu0cjCmUJCbV3CSJ6WtjnJM3DSGHIsEx9soWFobvkw", - "description": "The real tragedy of life is when men are afraid of the light", - "imageUrl": "https://arweave.net/Dpw_1MBQFEXJCefQZLhaBfyHm4aLEfD3GRhKzJzZOMc" - } - }, - { - "chainId": 101, - "address": "8rDACnycUMGFvndX74ZM9sxjEbR3gUpVHDjDbL4qW6Zf", - "symbol": "TRTN", - "name": "Shill City Triton", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8rDACnycUMGFvndX74ZM9sxjEbR3gUpVHDjDbL4qW6Zf/logo.png" - }, - { - "chainId": 101, - "address": "B8on8NTurSRDZym6xCtaBoXjzbvMF4heVzYkbqG36Na5", - "symbol": "NWL", - "name": "Neo Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/B8on8NTurSRDZym6xCtaBoXjzbvMF4heVzYkbqG36Na5/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "AhCXd1j49oSvMrVmAdu45zC75QxHQbjqLQsnHrjZoXjh", - "symbol": "WOLFE", - "name": "APEX WOLFE", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/jpburns82/token-list/088bb692748f95fd4df1dc55c432af1940613f8a/assets/mainnet/AhCXd1j49oSvMrVmAdu45zC75QxHQbjqLQsnHrjZoXjh/logo.jpg", - "tags": ["utility-token"], - "extensions": { - "website": "https://apexwolfe.com" - } - }, - { - "chainId": 101, - "address": "73aCdgDPtGvkq7iaUUp2FZxnnSrUsH7x2FBFhdDHk7rs", - "symbol": "DSPL", - "name": "DAZHUCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/A2xHq9wgpiEhzEKvRTXiKSspUFf51cyRhhAKcG9hXeF8/logo.png", - "tags": ["game-token"], - "extensions": { - "website": "https://nestarcade.io" - } - }, - { - "chainId": 101, - "address": "AVnpmfTmvxK6NtvgF3X9c4khVDX9Jgf2CHG2yWSxXy7L", - "symbol": "Nuke", - "name": "NuclearCrypto", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mdmolone/crypto/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HtaG62kWs3pYhLTJFW5G9CE6a8AEy8zzY3rwqXQtgQc4", - "symbol": "CRYON", - "name": "Metacryonic token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/Metacryonic/Cryon/main/CryonLogo.png", - "tags": ["Game-token"] - }, - { - "chainId": 101, - "address": "BNm3YkFsVq4VJHscBXANKL4w3qJjF1pxPNd7fsXCSW6o", - "symbol": "DELA", - "name": "Dela", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/nosoyeldela/CRYPTO/main/DELA%20COIN.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BHzj5oaBZTjUU9JzwmQBeLP3EttCMsTn4f4JXLd6ASrJ", - "symbol": "MYSTIC", - "name": "Mystic Token for MysticVerse", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EcrV3zpPhN1adDk91XTTVaCaZnbag2kqziTnwFfPvNNa/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://www.mysticgirlsclub.com" - } - }, - { - "chainId": 101, - "address": "DSkmKvFBPy9ZQvGzWJXcDujHrAbXEc2nFnXuYQoQYCyC", - "symbol": "SHINU", - "name": "Shiba Infinity Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DSkmKvFBPy9ZQvGzWJXcDujHrAbXEc2nFnXuYQoQYCyC/logo.png", - "tags": ["utility-token", "Shiba-Infinity-token"], - "extensions": { - "telegram": "https://t.me/shibainfinitygroup", - "twitter": "https://twitter.com/shibainfinity_", - "website": "https://shibainfinity.org" - } - }, - { - "chainId": 101, - "address": "GFMQn1KitWxEZeFAZ8jSfRg69TRAJGdwPoao89Jme5nR", - "symbol": "CARD", - "name": "Cardinalcoin", - "decimals": 0, - "logoURI": "https://github.com/KnoxEstes/CardinalLogo/blob/main/cardlogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AxDiQTWTC1mY9UE5G6fXyUZU9ngof4vqnf1GhVHW6BSi", - "symbol": "K", - "name": "K COIN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AxDiQTWTC1mY9UE5G6fXyUZU9ngof4vqnf1GhVHW6BSi/logo.png" - }, - { - "chainId": 101, - "address": "Cv1mECp8qVo2bFvdJRUAhiuParGhUGPPLuYLmBMU5sA8", - "symbol": "SCOW", - "name": "Smart Cow Token", - "decimals": 8, - "logoURI": "https://cdn.jsdelivr.net/gh/KingsFourze/SmartCowToken@main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "sf4iQbtGY7curML7LHdzZ1R7zs5Dxxm1QEHPdm7BqBB", - "symbol": "LMBD", - "name": "Lambda", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/imfazed/Test/main/Lambda.png", - "tags": ["community-token"], - "extensions": { - "discord": "https://discord.gg/ERJEUNsTwx", - "twitter": "https://twitter.com/lambda_sol" - } - }, - { - "chainId": 101, - "address": "BYJ8ZRTZZAHuZsqAiz83eyCGDNuirbucUfNDj2Th6GFm", - "symbol": "MESSI", - "name": "Messi Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/ilov-eu/assets/main/messi-001.png", - "tags": ["social-token"], - "extensions": { - "website": "https://messi.ilov.eu/" - } - }, - { - "chainId": 101, - "address": "9jssxmtXAGVPG8YbvAkC4sFYoYhYV9JeEHA3ro4zsUmq", - "symbol": "AOLT", - "name": "Alpha Ohlinger Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/dandykrions/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DzhFAZyUjZd3YnKHPfgN77oC9TcCf6BhCXMNQXKgMvD4", - "symbol": "AGT", - "name": "AnimeGirlsToken", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Twistedjay1988/CroAnimegirls/main/Screenshot_20220117-212021_Pinterest.jpg", - "tags": ["social-token"] - }, - { - "chainId": 102, - "address": "93ubxUgXyzk4U245MEJrVv6fM5S25o72TUSUpmbg6e97", - "symbol": "SINGULARITY", - "name": "Singularity", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3sJWs1uNphtHMVrqqP6foFxNTi1XLa6BZiyftq41y6kQ/logo.png", - "tags": ["utility-token"], - "extensions": { - "blog": "https://blog.singularityonline.app", - "description": "Singularity Online in-game currency Token", - "twitter": "https://twitter.com/SingularityMeta", - "website": "https://singularityonline.app", - "whitepaper": "https://whitepaper.singularityonline.app" - } - }, - { - "chainId": 102, - "address": "J6epRUJv4ZL5Zp8J9EDM2XGTCqZ2FEknBwwerMG6TuPY", - "symbol": "VELORUM", - "name": "Singularity DAO", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3485gPZHaNvhXC15HqfSUojefN2xPfg5mJCrnY6BNU6T/logo.png", - "tags": ["utility-token"], - "extensions": { - "blog": "https://blog.singularityonline.app", - "description": "Singularity Online DAO Token", - "twitter": "https://twitter.com/SingularityMeta", - "website": "https://singularityonline.app", - "whitepaper": "https://whitepaper.singularityonline.app" - } - }, - { - "chainId": 101, - "address": "8Hs4BfGZCZiJSs4ZWzTm4nYHtLHupYdStTcmvshHn5Mv", - "symbol": "Au", - "name": "GOLD", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/fadfsdf/gold/62daab88722607643c980fb13deb80e4a9cb296a/AU.png", - "tags": ["nft", "fractionalized-nft", "collectible-token"], - "extensions": { - "animationUrl": "https://arweave.net/MLYqWT7VqoDsUeRB8rjBC-lwvqH5BER0fM1F-pHaoVM", - "description": "The earliest recorded metal employed by humans", - "imageUrl": "https://arweave.net/MLYqWT7VqoDsUeRB8rjBC-lwvqH5BER0fM1F-pHaoVM", - "instagram": "https://www.instagram.com/nftsolanagallery", - "twitter": "https://twitter.com/nftgalleryshop" - } - }, - { - "chainId": 101, - "address": "2vW4TWGJoQHqwspbw7TgP14bAZnuwW7DvXPEGd2295yT", - "symbol": "SUCT", - "name": "StandUpClubToken", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2vW4TWGJoQHqwspbw7TgP14bAZnuwW7DvXPEGd2295yT/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "website": "https://standupclubnft.ru/" - } - }, - { - "chainId": 101, - "address": "HDRkJTx6f2yiUBAuqCPE3JXgNx4WJm7RzydH5j6ctb4o", - "symbol": "IMIX", - "name": "IMIX", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/imixtoken/crypto/main/logo.png", - "tags": ["metaverse", "social"], - "extensions": { - "description": "IMIX is a Solana token that can be used to pay for virtual lands and properties as well as in-world goods and services" - } - }, - { - "chainId": 101, - "address": "F6ZyzgtCU37NgFGTKYfdBy7BKwzxNZVBDkB68v9Qp1ch", - "symbol": "Crazy", - "name": "CrazyCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Ob1iviou5/CrazyCoin-Token/main/CrazyCoin%20Logo.png", - "tags": [ - "utility-token", - "social-token", - "nft-token", - "community", - "Crypto" - ], - "extensions": { - "description": "CrazyCOin is a Solana Token that can be used to pay for CrazyBabyNFT sales and Tech Sales on the CrazyCoin Website", - "facebook": "https://www.facebook.com/The-Crazy-Baby-NFT-111999381365589/", - "instagram": "https://instagram.com/crazybabynft", - "twitter": "https://twitter.com/crazybabynft", - "website": "https://www.crazycoin.co.uk" - } - }, - { - "chainId": 101, - "address": "2SBJdmcd9H6A8ori4QfzmXdFyQbKCUbAq7ZGhKAn2nru", - "symbol": "non", - "name": "nondos", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/nondoscom/token/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GYCVdmDthkf3jSz5ns6fkzCmHub7FSZxjVCfbfGqkH7P", - "symbol": "GYC", - "name": "GameYoo Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/gameyoo/materials/main/gyc.png", - "tags": [ - "social-token", - "community-token", - "utility-token", - "game-token", - "game-currency", - "GameFi", - "Gaming", - "metaverse", - "play-to-earn", - "play-to-contribute" - ], - "extensions": { - "github": "https://github.com/gameyoo", - "twitter": "https://twitter.com/GameYooOfficial", - "website": "https://gameyoo.io" - } - }, - { - "chainId": 101, - "address": "BtxmGUJHu8iqLu8rqECHhwDzbX3J4EHjA8NbtjiRXUoJ", - "symbol": "TIGERW3", - "name": "Web3Tiger", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BtxmGUJHu8iqLu8rqECHhwDzbX3J4EHjA8NbtjiRXUoJ/logo.png", - "tags": ["TIGER", "Meme-token", "Web3"], - "extensions": { - "twitter": "https://twitter.com/web3tigers", - "website": "https://www.web3tiger.org/" - } - }, - { - "chainId": 101, - "address": "5TdW2Tag4VxiRRa8w3aKYLzSgt4supPQwDvPpSpQBoBb", - "symbol": "NBY", - "name": "NEBLY", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/NEBLY1/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HonyeYAaTPgKUgQpayL914P6VAqbQZPrbkGMETZvW4iN", - "symbol": "$HONEY", - "name": "HONEY", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HonyeYAaTPgKUgQpayL914P6VAqbQZPrbkGMETZvW4iN/logo.svg", - "tags": ["utility-token", "DeFi", "Governance"], - "extensions": { - "discord": "https://discord.gg/honeydefi", - "website": "https://honey.finance" - } - }, - { - "chainId": 101, - "address": "CFbdjaKonbBQTYG2GC6CmB7exofgDYGCDR8tp8KVGS7T", - "symbol": "BORG", - "name": "Cyborg Apes BORG", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CFbdjaKonbBQTYG2GC6CmB7exofgDYGCDR8tp8KVGS7T/logo.png", - "tags": ["social-token"], - "extensions": { - "discord": "https://discord.gg/wunVdsjwZT", - "twitter": "https://twitter.com/CyborgApesNFT", - "website": "https://www.cyborg-apes.com/" - } - }, - { - "chainId": 101, - "address": "ThS1b5XmyRsfiXeBUnyo9LaYEsFJh44FdGucP8hx4UB", - "symbol": "TherosWL", - "name": "Yukan Theros WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ThS1b5XmyRsfiXeBUnyo9LaYEsFJh44FdGucP8hx4UB/logo.png", - "tags": ["NFT"], - "extensions": { - "twitter": "https://twitter.com/YakuzaRaptorz", - "website": "https://www.yakuzaraptorz.com/" - } - }, - { - "chainId": 101, - "address": "5upTHBTcup7vzCyhFL1dU3CoGRyc8CSBA9RZeZKhySs2", - "symbol": "LEM", - "name": "Lemon", - "decimals": 10, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5upTHBTcup7vzCyhFL1dU3CoGRyc8CSBA9RZeZKhySs2/logo.png", - "tags": ["utility-token"], - "extensions": { - "telegram": "https://t.me/lemonspl" - } - }, - { - "chainId": 101, - "address": "HsVxKa5TyLcqSEk1T2hBNMoikguEp19Wcuar9419q8CE", - "symbol": "DARK", - "name": "Darkness", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/yekmil/DARK/main/darkness.jpg", - "tags": ["Meme-token"] - }, - { - "chainId": 103, - "address": "5XXoLweEFQKheSnxj4d3AqLq3Nm8mr2DAvxCT8mRHUAd", - "symbol": "VICKI", - "name": "Vicki Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5XXoLweEFQKheSnxj4d3AqLq3Nm8mr2DAvxCT8mRHUAd/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "FeHBcCk3HGESCYyrzMCvc6CrnpyhhLXVJkextDvgLNbj", - "symbol": "NHLT", - "name": "NorthLight", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FeHBcCk3HGESCYyrzMCvc6CrnpyhhLXVJkextDvgLNbj/logo.png", - "tags": ["social-token", "community-token"], - "extensions": { - "description": "A completely new experience!", - "website": "https://www.bfgs.net" - } - }, - { - "chainId": 101, - "address": "Fviqd6ttQnCHbrBsHNfdCgYarWa2wCjv214SKHbMM512", - "symbol": "$RLC", - "name": "RockCycleNFT", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/mannupvt1/rockcyclenft/main/Rzp9lJSROl56K1ON17zTgtExw448SIPUeS6LOM1IYqlRpPdp.png", - "tags": ["utility-token", "NFT", "Gaming"], - "extensions": { - "twitter": "https://twitter.com/rock_cycle_nft" - } - }, - { - "chainId": 101, - "address": "G6sDiZ4aeNAVnht1kKxorVEdjA67u4ExXVcX3K3xWChy", - "symbol": "Pi", - "name": "Pi", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/hjuhyiu/pi/f23510ccc93cdbf437f32b926d5ba7cf56f0f92c/unnamed.png", - "tags": ["nft", "fractionalized-nft", "collectible-token"], - "extensions": { - "animationUrl": "https://arweave.net/mReUKbHGXoLXlxfp_DOjrUqvbOigFw2rmw-u3XdnrAU", - "description": "Pi= 3.1415926535897932384626433", - "imageUrl": "https://raw.githubusercontent.com/hjuhyiu/pi/b4822caa552a5ea0ab80e6eb016cf1902172c813/picirt.png", - "instagram": "https://www.instagram.com/nftsolanagallery", - "twitter": "https://twitter.com/nftgalleryshop" - } - }, - { - "chainId": 101, - "address": "FQ8Qp15y64J1JaggpmsYQoVff2pGJ758kypUt3napgGq", - "symbol": "BEAST", - "name": "The Beast Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/TheBeastCoin/assets/main/Inverted_Pentagram_200x200.png", - "tags": ["soul", "soul-token", "soul-trade", "imunity"] - }, - { - "chainId": 101, - "address": "Ce4ZyHGeVtNtULo7u1cgD1Sc6q4GS5UZbSP3Yf4i6R5g", - "symbol": "DIN", - "name": "E-Dinar", - "decimals": 9, - "logoURI": "https://github.com/edinarorg/solana/blob/main/1x1.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://edinar.org" - } - }, - { - "chainId": 101, - "address": "4JJKbNqaoKmCXKdh4Nj7eqdPXGqBjZtae2jQqZDqDinM", - "symbol": "SUI", - "name": "SUI Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/colinchen4/SUICrypto/main/logo.png", - "tags": ["NFT-token"] - }, - { - "chainId": 101, - "address": "DbNYgaX2Q1mMkSQvu6c9PzMAvAkGQxc6KR3MMhePE6un", - "symbol": "ARTB", - "name": "Artbank Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DbNYgaX2Q1mMkSQvu6c9PzMAvAkGQxc6KR3MMhePE6un/logo.png", - "extensions": { - "website": "https://artbank.ai/" - } - }, - { - "chainId": 101, - "address": "9sENJYFAJVqZ1kMo9R3rJ5LdhNkFgDAbYbPDdiCWVAbK", - "symbol": "DMP", - "name": "DMP coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9sENJYFAJVqZ1kMo9R3rJ5LdhNkFgDAbYbPDdiCWVAbK/logo.png", - "tags": ["master-token"] - }, - { - "chainId": 101, - "address": "8mEwLo9B32uGdq5sY4bGzbuXKVdWfXm6unzbwkDpXGDJ", - "symbol": "FUC", - "name": "FuCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8mEwLo9B32uGdq5sY4bGzbuXKVdWfXm6unzbwkDpXGDJ/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 102, - "address": "6CYxiyUo2pgMHkCWpWf4TU47f3Q1rMUWP1R4WtFmVLLA", - "symbol": "PC", - "name": "Pin Club", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6CYxiyUo2pgMHkCWpWf4TU47f3Q1rMUWP1R4WtFmVLLA/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://pinclub.io/" - } - }, - { - "chainId": 101, - "address": "7wSZ3mbpii2XPzedKht9sFQdocRk3GF3XgwNK9zzazq8", - "symbol": "WIZC", - "name": "WizardCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/paytenj10/crypto/main/PurpleWizard.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "CkXDtsa1zrpw8ebvrnkp8ombWwx8iybLoNG8PQNF32uu", - "symbol": "BSD", - "name": "Based Department", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CkXDtsa1zrpw8ebvrnkp8ombWwx8iybLoNG8PQNF32uu/download.jpg", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "RLYv2ubRMDLcGG2UyvPmnPmkfuQTsMbg4Jtygc7dmnq", - "symbol": "sRLY", - "name": "Rally (Solana)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/RLYv2ubRMDLcGG2UyvPmnPmkfuQTsMbg4Jtygc7dmnq/logo.png", - "extensions": { - "coingeckoId": "rally-solana", - "website": "https://rly.network" - } - }, - { - "chainId": 101, - "address": "8Ggd9FGkA8q6YJaAMFL3PrBcFipKbU3HBtpUAGtd6EQP", - "symbol": "SVEN", - "name": "7Realms", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8Ggd9FGkA8q6YJaAMFL3PrBcFipKbU3HBtpUAGtd6EQP/logo.png", - "tags": [ - "game-token", - "community-token", - "utility-token", - "governance-token" - ], - "extensions": { - "website": "https://www.sevenrealms.io" - } - }, - { - "chainId": 101, - "address": "2zzC22UBgJGCYPdFyo7GDwz7YHq5SozJc1nnBqLU8oZb", - "symbol": "1SP", - "name": "1SPACE", - "decimals": 9, - "logoURI": "https://1space.me/images/1SP_logo.png", - "tags": ["social-token", "utility-token", "community-token"], - "extensions": { - "telegram": "https://t.me/+jDm8ioFvec5iNzFk", - "website": "https://1space.me/" - } - }, - { - "chainId": 101, - "address": "EpNByUUwEp6GDKWAhfuwZmm9jQN7PbvmQ4zgg57CDqRF", - "symbol": "BassC", - "name": "BassCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/noeljbass/basscoin/main/basscoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3YLfFYzpqcXnvWyErkFz8WRK4jvfNrC3eLqpXKCvzxa6", - "symbol": "SPIT", - "name": "SpitCoin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/larsBYN/TokenV1/main/Untitled%20design.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DANE1SmS2ahPkFNER6tfTPGLcJKK67z8zVjMj4PKoS79", - "symbol": "DANE", - "name": "Danerob Puppy Redeem Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DANE1SmS2ahPkFNER6tfTPGLcJKK67z8zVjMj4PKoS79/logo.png" - }, - { - "chainId": 101, - "address": "CMa2oZ98xdsDFVdQpKKzgAJLJUq2HBiUCMi9y3u5S3uo", - "symbol": "Nashorn", - "name": "Nashorn Access", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CMa2oZ98xdsDFVdQpKKzgAJLJUq2HBiUCMi9y3u5S3uo/nash.png" - }, - { - "chainId": 101, - "address": "GYHscURsqEm7HCnQK4UMfSNom9Vf3ihmwuV5suUGc2v9", - "symbol": "RCA", - "name": "RCA Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/rca2001/token/main/LOGO.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "9RdHu9BZx4fjVjoptaSMYe3NGkt1UGjMTpt54f44tAWF", - "symbol": "OliveBranch", - "name": "PEACE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/rwererfwe/peace/f8fb9422752cdb25ef7c12d58261530ed176fde9/PEACE.png", - "tags": ["nft", "fractionalized-nft", "collectible-token"], - "extensions": { - "animationUrl": "https://arweave.net/v9E2asrABVKbj7c7iHvuycU9uNRCEeOn3oA4rGI6VuU", - "description": "Human beings are members of a whole, in creation of one essence and soul", - "imageUrl": "https://raw.githubusercontent.com/hjuhyiu/pi/f2c534f82e33e614a2befc9e70cae093b1ca86c6/peacecirt.png", - "instagram": "https://www.instagram.com/nftsolanagallery", - "twitter": "https://twitter.com/nftgalleryshop" - } - }, - { - "chainId": 101, - "address": "7uu5QFWfFaNHAYMtXqiShwg4oCqkMhFqUVZmkySj8LZD", - "symbol": "NYLCN", - "name": "Nylon Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Shortcutgamez/crypto/main/logo.png", - "tags": ["social-token", "nft", "collectible-token", "rare-token"] - }, - { - "chainId": 101, - "address": "8HQAcKYzowK7R2rXhcx3zqTAJ2WtDsFhRvrYZQNck6jq", - "symbol": "NSL", - "name": "NftSOl", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/NFTSOL/assets/main/assets/nftsol500.png", - "tags": ["nft-token"], - "extensions": { - "twitter": "https://twitter.com/nftsoltoken", - "website": "https://nftsol.club" - } - }, - { - "chainId": 101, - "address": "FZ3gSK53564jaFbwVsUYmmPXboLaMSW9xibRoreQVtYq", - "symbol": "GECO", - "name": "Gecco Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/curthulbert/crypto/main/logo-main.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8ufxXyARKodhb9T9gEQKSTLE99vSADphjHGpxkivQcvN", - "symbol": "QURAN", - "name": "HOLY QURAN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/xerterbt/quran/5c2f0b7456c62b53149a10c2746d68069a7f4ece/quran1.png", - "tags": [ - "nft", - "fractionalized-nft", - "collectible-token", - "gift-token", - "social-token" - ], - "extensions": { - "animationUrl": "https://github.com/xerterbt/quran/raw/5c2f0b7456c62b53149a10c2746d68069a7f4ece/Holy_Quran_Full.pdf", - "description": "Recite in the name of your Lord who created man from a clinging substance", - "imageUrl": "https://arweave.net/d9XqIxPGi_cTvMihuSYGjABXe54gzvsTkeQHkrTB5Yg", - "instagram": "https://www.instagram.com/nftsolanagallery", - "twitter": "https://twitter.com/nftgalleryshop" - } - }, - { - "chainId": 101, - "address": "AXjJ1PSuDs79xokX5qx6jTi2pRY8TK665YRwFjwyfg5R", - "symbol": "SGBR", - "name": "SolGrabber", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/slimeyoctopus/SOLG_Token/main/logo.png", - "tags": ["nft-token", "collectible-token", "rare-token", "social-token"], - "extensions": { - "discord": "https://discord.gg/X6R4WgAW8n", - "twitter": "https://twitter.com/SOLgrabbers", - "website": "https://solgrabbers.io" - } - }, - { - "chainId": 101, - "address": "SLNTvrwEnq9tYevoyvXmRksRUAEVWCWPsyngJghVNqX", - "symbol": "SLNT", - "name": "Solanite", - "decimals": 18, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SLNTvrwEnq9tYevoyvXmRksRUAEVWCWPsyngJghVNqX/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Solantasy Token", - "website": "https://solantasy.com" - } - }, - { - "chainId": 101, - "address": "GrovT4mo1XXTQcGt96rrUMYtwAkmDY6AYY3axeTb7GRv", - "symbol": "SPORK", - "name": "Spraken Pork", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/WendonScott/Spraken-Pork/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9UXbgaxC83SSvkQUEkN9ai1MoSyUivREsJSGj43Vqgap", - "symbol": "JFK", - "name": "John F Kennedy", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ynbgjjgj/lady/8312f9cad00747cda2c8734d3512111a11c1e465/JFK.png", - "tags": [ - "nft", - "fractionalized-nft", - "collectible-token", - "gift-token", - "social-token" - ], - "extensions": { - "animationUrl": "https://arweave.net/pOJ7pYdSUhvyDIXSXXXbJgkQGTPBsh4fQvyt6jHb7Uk", - "description": "Change is the law of life", - "imageUrl": "https://raw.githubusercontent.com/ynbgjjgj/lady/5d1f8d8382bb466d3ebbec97655d7dd60fbd298b/JFKcirt.png" - } - }, - { - "chainId": 101, - "address": "3dcSdwTsZxFdYGoWAbFPD75GNnAEkkuiV5BZmueejUXX", - "symbol": "MSTO", - "name": "MySoTo", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/mysoto/soltoken/main/mysoto_logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9hFgPJBTz8rwsUy7fDoNAa3zFaWNhNRatNRnU4KFHabQ", - "symbol": "RHNO", - "name": "Rhino Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/RagingRhino564/rhinoCoin/main/rhinoCoin.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "SLFYmFvVShjT3783aDbtKzwjMZ9tAcC6YJa7VN5ou1s", - "symbol": "SLFY", - "name": "Solify", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SLFYmFvVShjT3783aDbtKzwjMZ9tAcC6YJa7VN5ou1s/logo.svg" - }, - { - "chainId": 101, - "address": "8f3iD4Gz4RrXNggEaJtrV587s6RWFaSqeFXyF2Pd7Nhe", - "symbol": "KMFJ", - "name": "Kristi Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/LePedant/crypto/main/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://kristij.com" - } - }, - { - "chainId": 101, - "address": "DRDJyPK1JdgrEsvqsjeNey7NfWEVzhTs8xNjtq6tfTLN", - "symbol": "CRONEP", - "name": "Nepokoreni Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/p1nkhr/test/main/logo.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "Dy66WHU3DqSKZeCMt3S7645oyP1D3mkJzB2CevjPmm1F", - "symbol": "REX", - "name": "Ryok Haka Rex coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Dy66WHU3DqSKZeCMt3S7645oyP1D3mkJzB2CevjPmm1F/logo.png", - "extensions": { - "twitter": "https://twitter.com/RyokHakaREX", - "website": "https://www.ryokhakarex.com/" - } - }, - { - "chainId": 101, - "address": "9gkgThnU59MixF7SzWuCxG7zqsWYazeUAKwmrCVfYMFu", - "symbol": "FUNC", - "name": "Fun Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9gkgThnU59MixF7SzWuCxG7zqsWYazeUAKwmrCVfYMFu/logo.svg", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "4o67Pazc9fNqEfQM66xqWngw7WdAUzsccdpPmKsANDg1", - "symbol": "LAVA", - "name": "LAVA Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4o67Pazc9fNqEfQM66xqWngw7WdAUzsccdpPmKsANDg1/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Phenom Phoenixes Utility Token", - "discord": "https://discord.gg/nkR4RcPSqJ", - "twitter": "https://twitter.com/phenomphoenixes", - "website": "https://phenomphoenixes.com/" - } - }, - { - "chainId": 101, - "address": "DJUVYb1zayUq2UpoQnk1VUU4qh7C6RJyz1rWqKa92FpW", - "symbol": "12bar", - "name": "12bar", - "decimals": 0, - "logoURI": "https://github.com/dbuster/12bar/blob/main/12barlogo200200.jpg", - "tags": ["social-token"], - "extensions": { - "instagram": "https://www.instagram.com/dbuster16/" - } - }, - { - "chainId": 101, - "address": "J9XkQyTdVpHWqxv9accWCZ8KS8QjkXLinGc9jenareJi", - "symbol": "FULL", - "name": "FullToken", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/J9XkQyTdVpHWqxv9accWCZ8KS8QjkXLinGc9jenareJi/logo.png", - "tags": ["utility-token", "carbon-offset", "energy-token", "game-token"] - }, - { - "chainId": 101, - "address": "76DThuyLHagfkm2ssYw6Lv7k3MYHx6tXcwPBLU9tXm4D", - "symbol": "BASIC", - "name": "Basic Tokens", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/76DThuyLHagfkm2ssYw6Lv7k3MYHx6tXcwPBLU9tXm4D/logo.png", - "extensions": { - "twitter": "https://twitter.com/basicapesociety", - "website": "https://www.basicapesociety.com/" - } - }, - { - "chainId": 101, - "address": "BfRHTQVGjLvGyENSyBUW1i1hifS4RAzxupFs6dhx4Uy2", - "symbol": "FAK", - "name": "Freaky Apez Klub", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/sethtdev/FAKtoken/main/FAK_1.png", - "tags": [ - "nft-token", - "collectible-token", - "rare-token", - "social-token", - "utility-token" - ], - "extensions": { - "twitter": "https://twitter.com/freakyapez" - } - }, - { - "chainId": 101, - "address": "AXgKEpV7tHUo8SEkb4pHvedc8TSw6xhcJ7sPUDfnVAQt", - "symbol": "LUCK", - "name": "Luck Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/adriangl98/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9GnYb1ukBUKHobqpmNdzBE7VkYn7wWqianpKaYFPBChk", - "symbol": "XAL", - "name": "XAL Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9GnYb1ukBUKHobqpmNdzBE7VkYn7wWqianpKaYFPBChk/logo.png", - "extensions": { - "discord": "https://discord.gg/TeTk4GZfgh", - "twitter": "https://twitter.com/xapeslab", - "website": "https://xapeslab.com" - } - }, - { - "chainId": 101, - "address": "ByKDq6iMUgYFHAyQxm53FNgyYtaxnakA3ZRJQd4ZQSoG", - "symbol": "PBT", - "name": "PiggyBank Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/PMEinc/tmlogo/main/logo.png?token=GHSAT0AAAAAABQJ32OH5VNMPZTFCXB6VOGYYPQ4M7Q" - }, - { - "chainId": 102, - "address": "vkG3Qrz6vCWjzDt5yCLEKYMYZ8hFZ27dmKe92btaZE3", - "symbol": "FYFY", - "name": "FYFY Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/vkG3Qrz6vCWjzDt5yCLEKYMYZ8hFZ27dmKe92btaZE3/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/6jEMcEVU", - "facebook": "https://www.facebook.com/fyfy.io", - "github": "https://github.com/fyfylabs", - "instagram": "https://www.instagram.com/fyfy.official", - "linkedin": "https://www.linkedin.com/company/fyfy", - "medium": "https://fyfy-io.medium.com", - "twitter": "https://twitter.com/fyfyio", - "website": "https://fyfy.io", - "whitepaper": "https://fyfy-labs-ltd.gitbook.io/fyfy-documentation/" - } - }, - { - "chainId": 101, - "address": "RoKFpgGfAbMSrEBeapdNYuaohGwMeMeYfjs1Xyu8GtD", - "symbol": "DISRPT", - "name": "MoonRocks Whitelist", - "decimals": 0, - "logoURI": "https://arweave.net/57wgjEUQwNn9rwGMzCRYwlbv3QBmI_wueJ-riGzYHZs", - "tags": ["utility-token"], - "extensions": { - "description": "Mint your base moonrocks at https://get.basemoonrock.store", - "discord": "https://discord.gg/WF5XWfJQ", - "twitter": "https://twitter.com/MoonrocksMeta", - "website": "https://moonrocksofficial.io/" - } - }, - { - "chainId": 101, - "address": "SGMJ3vvrRHABjSosXyJiW82LvCSJdBjpT7w6KgBD3xT", - "symbol": "KKJ", - "name": "KuKuJiao", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jsky85/KKJ/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "14FcmwytuWNoVF62vNbV7cJuuGGu3pGR7a9P8BboWiS7", - "symbol": "AIGA", - "name": "AI Generative Artistry", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/grabrail/aiga/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "C6qep3y7tCZUJYDXHiwuK46Gt6FsoxLi8qV1bTCRYaY1", - "symbol": "LSTAR", - "name": "Learning Star", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/D3yigvdWq6qobhAwQL6UiSide5W9W7zcJbuVvKa3T231/logo.png", - "tags": ["play2earn", "learn2earn"], - "extensions": { - "discord": "https://discord.gg/letmespeak", - "instagram": "https://www.instagram.com/letmespeak_org", - "telegram": "https://t.me/letmespeak_org", - "twitter": "https://twitter.com/Letmespeak_org", - "website": "https://www.letmespeak.org" - } - }, - { - "chainId": 101, - "address": "J5WamY8KrmfdaEPipMpdUxkxWjcMAhRU3pY5gJ9xL1v7", - "symbol": "$CG", - "name": "Code Giant", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/The-code-giant/crypto-logo/main/thecodegiantlogo.png", - "tags": ["LearnToCode", "Blockchain", "Software", "WebDesign"], - "extensions": { - "website": "https://www.thecodegiant.ca" - } - }, - { - "chainId": 101, - "address": "5mxRAJFyKfY5sCqcJngi7i3dBs1FkWsqimpaKj1vtjea", - "symbol": "ANSRI", - "name": "AnsariCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mohamedansari/ansari-coin/main/Ansari-coin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BZ1DeqbMzf3RKkAJdG2CuY27CgXqC35qca48dfUCf27T", - "symbol": "COINK", - "name": "Oink Coin", - "decimals": 0, - "logoURI": "https://cdn.jsdelivr.net/gh/kakazgg/solswineslogo/SolSwines-OINK-Token_gold.png" - }, - { - "chainId": 101, - "address": "7mrosadXD4c3fWo2MqCXiWYPtNmWdwcFZ9R9bEZyCQ6C", - "symbol": "CAFFMACH", - "name": "Caffeine Machine Coin", - "decimals": 9, - "logoURI": "https://github.com/sql2kguy/crypto/blob/main/logo-caffeine-machine-planet.230x230.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GytU95ZDVzsD5AF6QHzjWQwyVZsseRBe9iLt1KA8VsLb", - "symbol": "ANSB", - "name": "Ansibler", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/theansibler/theansibler-token/main/ansibler-token.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FCsftdadoqw8Sue37V66BgmRZjMg9YUr8vK3DtXj7cxV", - "symbol": "ACC", - "name": "Anudeep Crypto Coin", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/anudeeptadikamalla/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BB33fYoeBVA2uv119be9tKvmXeuwtcx1W25N9KFNd2ca", - "symbol": "GODZ", - "name": "Godz Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BB33fYoeBVA2uv119be9tKvmXeuwtcx1W25N9KFNd2ca/logo.jpg", - "tags": ["utility-token", "nft-token"], - "extensions": { - "discord": "https://discord.com/invite/BGnCshGWgk", - "twitter": "https://twitter.com/pocketgodz", - "website": "https://www.pocketgodz.xyz/" - } - }, - { - "chainId": 101, - "address": "J1jeXxVPnViAusu9qCBdPf219YSGAXk5MSK94cecympa", - "symbol": "DBZi", - "name": "DBZi Game Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/J1jeXxVPnViAusu9qCBdPf219YSGAXk5MSK94cecympa/logo.png", - "tags": ["nft", "game", "utility-token"] - }, - { - "chainId": 101, - "address": "ACN87zYFEaRqnvd9VmmDZejxzUL6xRJBUPwM3GzmdhcP", - "symbol": "SPIKE", - "name": "Spikes", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ReinhardvdBerg/crypto/main/Spikes-min.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6XWWxwh9mmy2LLdWfdqVUcdT2mVq2fng5dS13S7b8McZ", - "symbol": "INUINU", - "name": "Inu Inu", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6XWWxwh9mmy2LLdWfdqVUcdT2mVq2fng5dS13S7b8McZ/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EQZMHTLVbQmk9jUJc8mTGGczMwe7ZYA7o1iefnRhDWUj", - "symbol": "ULBN", - "name": "Uleborn", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Freisherv/uleborn/main/uleborn.png", - "tags": ["social-token", "community-token", "game-token"], - "extensions": { - "telegram": "https://t.me/uleborn" - } - }, - { - "chainId": 101, - "address": "CVsL7JFa2BHfckDcc4PTxX7ARCUGuFYav5zRDVK2JFRe", - "symbol": "AHWL", - "name": "Astral House Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CVsL7JFa2BHfckDcc4PTxX7ARCUGuFYav5zRDVK2JFRe/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "description": "Welcome Our Amazing House!", - "website": "https://www.astralapes.com" - } - }, - { - "chainId": 101, - "address": "ADZnqUz3xcGE5mVWPxLneCUKg1mTMaTdsNYp9t7nFwCg", - "symbol": "AUTOR", - "name": "Bridge media", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/BMTVlt/AUTOR/main/logo.png", - "tags": ["social-token", "community-token", "copyright-token"] - }, - { - "chainId": 101, - "address": "F1Ury8TwYWwqyEvqBME4smBc2TYszyZWp2Xd4ZCrntQ8", - "symbol": "$SAKITA", - "name": "Solakita Inu", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solakitainu/solakitainu-logo/main/logo.png", - "extensions": { - "website": "https://solakitainu.com" - } - }, - { - "chainId": 101, - "address": "3WpfuV4zYFXZmUzbkRKWtSQwbieVni5VotKKpj4NpYgx", - "symbol": "IWT", - "name": "iwaiter Tokens", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/mansourSaleh/iwaiter/main/logo.png", - "tags": ["social-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/iwaiterMENA", - "website": "https://iwaiter.net" - } - }, - { - "chainId": 101, - "address": "CjwaoVnLG9xb2M9sSCp9g8r4jhV4FnMGufRXiUVnVND1", - "symbol": "KAMA", - "name": "Karma Koin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/anthonybakx/crypto/main/Karma.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "8AZE7sB9h76ERo6y2kopyg82njCqCXz55R1D8WidAekF", - "symbol": "DBwT", - "name": "Dead Bros Whitelist Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/c792a3c9a4a9966c297afd9d81135b0481fa9d7a/assets/mainnet/8AZE7sB9h76ERo6y2kopyg82njCqCXz55R1D8WidAekF/logo.jpg", - "tags": ["DeadBros", "DBT", "NFT", "Whitelist", "Zombie", "Undead"], - "extensions": { - "twitter": "https://twitter.com/DeadBros666" - } - }, - { - "chainId": 101, - "address": "6zZJ6LbpJJtN7SRYujyS5RRxJzvRVxPfwwfunMkh8Vbp", - "symbol": "NARA", - "name": "Nara Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/zectro/crypto/main/nara.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5n94vqEA5yNNnMvEunANoHnrDwKkcHcc6BAKNc8CZh21", - "symbol": "ATT", - "name": "ATT RentalCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/eightbit6510/crypto/main/attcoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BiFAEWzRg5smZuYbkExWCejYLMJThqd7t2HewvLcsmJT", - "symbol": "CCY", - "name": "Cryptic Currency", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/CrypticToken/Crypto/main/Coin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "sBUDzitkrHNZAR2gAoRorwSo6nqBEsHfRmdybHCsw8o", - "symbol": "sBUD", - "name": "BunnyDucky Staking Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/sBUDzitkrHNZAR2gAoRorwSo6nqBEsHfRmdybHCsw8o/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/BunnyDuckyHQ", - "website": "https://bunnyducky.com/" - } - }, - { - "chainId": 101, - "address": "EWL2aMkx1j7XcjdKniVMKmuK7Vds3CgMXJv28HohVBUx", - "symbol": "$GOOD", - "name": "Commit Good", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EWL2aMkx1j7XcjdKniVMKmuK7Vds3CgMXJv28HohVBUx/logo.png", - "tags": ["NFT", "Philanthropic", "Charity", "Volunteer-Reward"], - "extensions": { - "description": "Commit GOOD is an NFT philanthropic ecosystem built on the Solana Blockchain", - "facebook": "https://www.facebook.com/CommitGood/", - "twitter": "https://twitter.com/commitgdoffical", - "website": "https://commitgood.com/" - } - }, - { - "chainId": 103, - "address": "EmT8DDai6qoiVrvUaFRLAu3pVoqChkYyWS8WexQVjt8m", - "symbol": "ALBINO", - "name": "ApesAgainst WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EmT8DDai6qoiVrvUaFRLAu3pVoqChkYyWS8WexQVjt8m/logo.png", - "extensions": { - "website": "http://apesagainst.io/" - } - }, - { - "chainId": 101, - "address": "48A1pXHvottXTf954CMhZyoG7MdFjngLJCDKJS6iJUth", - "symbol": "$Yakuza", - "name": "Yakuza Wars", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/D77wfRvxzFgdAHd1C1gE5JuwuSq4QLSTxc3huB52WBXH/logo.png", - "extensions": { - "discord": "https://discord.gg/YUHDjmcssG", - "twitter": "https://twitter.com/yakuzawarsnft", - "website": "https://yakuzawars.com/" - } - }, - { - "chainId": 101, - "address": "EcDWaqgfWre56VhCCjHbtqeVoPVWGtRkyWSA4H4GCXRD", - "symbol": "BITC", - "name": "BitondCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Elod044/BitondCoin/main/bitondcoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3Mtinr77fvdW3jBUkimTHmm4DsTUcm6YyhPRmijwrqa6", - "symbol": "HML", - "name": "HamalCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/florianHamal/coin/main/pic.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CYnW72dNBZcjv2rVH7QEChdynPWU6AwhWnLfCyVjAFBX", - "symbol": "CMV", - "name": "CINEMetAverse's", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Izsook/Cinemetaverses/main/Logo3.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5fTwKZP2AK39LtFN9Ayppu6hdCVKfMGVm79F2EgHCtsi", - "symbol": "WHEY", - "name": "WHEY", - "decimals": 6, - "logoURI": "https://secureservercdn.net/160.153.138.53/cjm.06a.myftpupload.com/wp-content/uploads/2021/12/whey-coin-2048x2048.png", - "tags": ["utility-token"], - "extensions": { - "coingeckoId": "whey-token", - "twitter": "https://twitter.com/shreddedapes", - "website": "https://shreddedapes.io/" - } - }, - { - "chainId": 101, - "address": "9w56YQTqukyTDckwvX1q3otDDqoHZKvZRfyxRs66714Q", - "symbol": "PKLWFM", - "name": "Pickle Law Firm Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SpyicyDev/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "G4ZgnP3AuaLZBeKghrf8wGaLtkPiZEZZ7mnJ2rMYRKnR", - "symbol": "SUDO", - "name": "Sudo Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/redneki/Sudo-Coin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3yfKWgVECDBJMUbxEXEMbFpR3GfHK688v7yqaX6eHYVH", - "symbol": "CPA", - "name": "Cute Pixel Ape Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3yfKWgVECDBJMUbxEXEMbFpR3GfHK688v7yqaX6eHYVH/logo.png", - "extensions": { - "twitter": "https://twitter.com/CutePixelApe", - "website": "https://www.cutepixelape.com/" - } - }, - { - "chainId": 101, - "address": "3EX6ZMvGJQHmPxp21YZooDd4fWa7FQM5ANPbvR56FBeo", - "symbol": "SWMP", - "name": "Swamp Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/papacroc/swamp/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4qMrzbUFmuVnNSb1Q1LyaW2hDzQJ2iJ9W3BT173tAa1a", - "symbol": "KK", - "name": "Krabby Kooks", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ELmo1589/Logo/main/Logo.png", - "tags": ["social-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/krabbykooks", - "website": "https://krabbykooks.com/", - "youtube": "https://www.youtube.com/c/KrabbyKooks/featured" - } - }, - { - "chainId": 101, - "address": "dnqqARmAuYFAuGwJDoCtqiG1r596UevadbWFLN53RUJ", - "symbol": "MYLO", - "name": "My Low Carbon", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/AllyByers/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "TVPjsECdZdgHqdBAbo2WBve5Qnon5WhWE7pGrkRNYkr", - "symbol": "BWRGO", - "name": "BWRGO Chips", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/swampcoin/solana-bwrgo/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "2tWC4JAdL4AxEFJySziYJfsAnW2MHKRo98vbAPiRDSk8", - "symbol": "USDC", - "name": "USD Coin (Saber Devnet)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v/logo.png", - "tags": ["stablecoin"], - "extensions": { - "coingeckoId": "usd-coin", - "website": "https://saber.so/" - } - }, - { - "chainId": 103, - "address": "EJwZgeZrdC8TXTQbQBoL6bfuAnFUUy1PVCMB4DYPzVaS", - "symbol": "USDT", - "name": "USDT (Saber Devnet)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB/logo.svg", - "tags": ["stablecoin"], - "extensions": { - "coingeckoId": "tether", - "website": "https://saber.so/" - } - }, - { - "chainId": 101, - "address": "DgHF6XLh1qgiyCQMadT9nqXub2XjzmTbbrUYeYXctyDV", - "symbol": "PPF", - "name": "PepperFire", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/pent65/crypto/main/logo.png", - "tags": ["multi-purpose"] - }, - { - "chainId": 101, - "address": "5k4WxhSFFVxMoKnmwfwbVpHSgr72WjTcXepebpkBEP7m", - "symbol": "JJCS", - "name": "Jijie Croissant", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5k4WxhSFFVxMoKnmwfwbVpHSgr72WjTcXepebpkBEP7m/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "82eWuyUHrn1Fr7w35T7hEwVXq24fZjkUQCsMbc2uQ5m8", - "symbol": "BIS", - "name": "CryptoWeed", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/82eWuyUHrn1Fr7w35T7hEwVXq24fZjkUQCsMbc2uQ5m8/logo.png", - "tags": ["community-token", "cannabis-fun-club"], - "extensions": { - "website": "https://cryptoweed.fun/" - } - }, - { - "chainId": 101, - "address": "JAAXk29ewkr8HFC8oCgPRtwdEi9HjqFJpwNp5oRiG6H2", - "symbol": "CIMG", - "name": "Cool Images", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/JAAXk29ewkr8HFC8oCgPRtwdEi9HjqFJpwNp5oRiG6H2/logo.png" - }, - { - "chainId": 101, - "address": "AoHTk47aAaxpXHCVBzixXg7i6KjgeFufXkiNEqNvnPXD", - "symbol": "$BRUSH", - "name": "BrushToken", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AoHTk47aAaxpXHCVBzixXg7i6KjgeFufXkiNEqNvnPXD/logo.png", - "tags": ["nft-token", "community-token", "game-token", "utility-token"], - "extensions": { - "description": "NFT token ecosystem built on the Solana Blockchain", - "discord": "https://discord.gg/JJpt9rseMn", - "twitter": "https://twitter.com/brushtoken", - "website": "https://brushtoken.com/" - } - }, - { - "chainId": 101, - "address": "3wJJ5L9tDvtNQL5HLD5jpBNDsSqcph6jA2FEqusTPkXc", - "symbol": "VeVe", - "name": "VeVeSnipers", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3wJJ5L9tDvtNQL5HLD5jpBNDsSqcph6jA2FEqusTPkXc/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "36gQwnZKLb5u2gbSKM4EMnZFp7KpGU74ZKA2wPBcNYdB", - "symbol": "ZEB", - "name": "Makhfi", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/ghazanfarperdakh/TokenIcon/main/279434_383480151741653_1719567806_o.jpg", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU", - "symbol": "USDC", - "name": "USD Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU/logo.png", - "tags": ["stablecoin"], - "extensions": { - "coingeckoId": "usd-coin", - "website": "https://www.centre.io/" - } - }, - { - "chainId": 101, - "address": "EsatfHAn6VTAerHtCRVKieGkGxzmcnBcPMfULy3o6s8W", - "symbol": "PLYR", - "name": "Playrz Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Playrz/PlayrzLogo/main/PlayrzLogo_NoBackground-removebg-preview.png", - "tags": ["social-token", "play-2-earn", "game-token"], - "extensions": { - "twitter": "https://twitter.com/Playrz1", - "website": "https://www.playrz.co.uk" - } - }, - { - "chainId": 101, - "address": "6yoR64HCHLsQXoNVYq75fKNUzh6zZFbTYrEpUcRRuRm8", - "symbol": "DAY0", - "name": "DayZero", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/OFFSETSYNT4X/Krypto/main/logo.png", - "tags": ["social-token"], - "extensions": { - "discord": "https://discord.gg/9dvJQxpRv8", - "facebook": "https://www.facebook.com/STR8KILAFOREALA", - "twitter": "https://twitter.com/OffsetSynt4x", - "youtube": "https://www.youtube.com/c/OFFSETSYNT4X" - } - }, - { - "chainId": 101, - "address": "HrGoF1XHG13uqkEm3TvxZtAS6uh5z848zic3VMKdBtus", - "symbol": "REEF", - "name": "ReefToken", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/evenmorecowbell/Crypto/main/ReefTokenLogo-bluenewsquare.png" - }, - { - "chainId": 101, - "address": "HdYCTHTSRidRJK8pvnCd6un1kFYAMai85xryhpjmNrz6", - "symbol": "SHIP", - "name": "SHIP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HdYCTHTSRidRJK8pvnCd6un1kFYAMai85xryhpjmNrz6/logo.png", - "tags": ["NFT", "utility-token", "game", "play2earn", "meta-verse"], - "extensions": { - "discord": "https://discord.gg/cryptoshipsco", - "serumV3Usdc": "3tnNsMhZH5DVnY8bA95H1mQdSJpaA8spHBhsixnDsH2g", - "twitter": "https://twitter.com/cryptoships_co", - "website": "https://www.cryptoships.co/" - } - }, - { - "chainId": 101, - "address": "RokhzuyP2UGZQvBsEhrvjjiW9DkTn2obJiyPxNHBRa8", - "symbol": "DSRUPT", - "name": "MoonRocks Mint Token", - "decimals": 0, - "logoURI": "https://arweave.net/57wgjEUQwNn9rwGMzCRYwlbv3QBmI_wueJ-riGzYHZs", - "tags": ["utility-token"], - "extensions": { - "description": "Mint your base moonrocks at https://get.basemoonrock.store", - "discord": "https://discord.gg/WF5XWfJQ", - "twitter": "https://twitter.com/MoonrocksMeta", - "website": "https://moonrocksofficial.io" - } - }, - { - "chainId": 101, - "address": "DiWunPY8GfsFthdDAwiRRtCgKCB5AEcFx9edDpxZoTyo", - "symbol": "GMORNN", - "name": "gmornn", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DiWunPY8GfsFthdDAwiRRtCgKCB5AEcFx9edDpxZoTyo/logo.png", - "extensions": { - "twitter": "https://twitter.com/g_mornn", - "website": "https://twitter.com/g_mornn" - } - }, - { - "chainId": 101, - "address": "DMCUFm2ZAnSU7UgsdVq23gRogMU3MEBjPgQF1gK53rEn", - "symbol": "UM", - "name": "UncleMine", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DMCUFm2ZAnSU7UgsdVq23gRogMU3MEBjPgQF1gK53rEn/logo.png", - "tags": ["utility-token", "community-token", "Defi", "NFT"], - "extensions": { - "discord": "https://discord.gg/ScuJCZtDHs", - "medium": "https://medium.com/@UncleMine", - "telegram": "https://t.me/unclemineEN", - "twitter": "https://twitter.com/uncleminenews", - "website": "https://unclemine.org", - "whitepaper": "https://wiki.unclemine.org" - } - }, - { - "chainId": 101, - "address": "Cxwxa8g5y5kr9XEDyNeTtfvnFpQ3rGoUqiWsG6ywrjWU", - "symbol": "PYDY", - "name": "Poopydoody", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SpyicyDev/crypto/main/logo2.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "D35toePAVBFxyMYxJcny8jiBT4u3jnhCYZkEV218W8R3", - "symbol": "SHEP", - "name": "ShepherdCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/debug-jay/crypto/main/13-8-CM-font-b-German-b-font-font-b-Shepherd-b-font-Alsation-Dog-Car.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7gDoUkqmkjX8BEVrkYQs6cawFB4ronky8AfkCEyHbzB2", - "symbol": "PLASMA", - "name": "Metaballix", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7gDoUkqmkjX8BEVrkYQs6cawFB4ronky8AfkCEyHbzB2/logo.png", - "tags": [ - "gamification-token", - "metaverse-token", - "nft-token", - "metaverse-currency", - "metaballs" - ], - "extensions": { - "discord": "https://discord.gg/AG2Y93emkf", - "twitter": "https://twitter.com/metaballix", - "website": "https://www.metaballix.com" - } - }, - { - "chainId": 101, - "address": "FUHQncZtt1HxsvNyrXvm1scsadHHCYiuhUg7xx2AW8wA", - "symbol": "SHD", - "name": "SolHead", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FUHQncZtt1HxsvNyrXvm1scsadHHCYiuhUg7xx2AW8wA/logo.png", - "tags": ["community-token"] - }, - { - "chainId": 101, - "address": "GKNr1Gwf7AMvEMEyMzBoEALVBvCpKJue9Lzn9HfrYYhg", - "symbol": "SIXY", - "name": "611Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/dc215007/611/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FSkPuxZEy1RcxqfXMp6rosuueE6hh45agD5xKW16am74", - "symbol": "FIASCO", - "name": "Fiasco", - "decimals": 7, - "logoURI": "https://raw.githubusercontent.com/fiasco68/crypto/main/fiasco.svg", - "tags": ["utility-token"], - "extensions": { - "description": "Fiasco is as Fiasco does", - "website": "https://milkywayfiasco.com" - } - }, - { - "chainId": 101, - "address": "2Hei1NUr23AyyG4rszQQysRkuQyvr2Z2EjHWVf8ZqjAS", - "symbol": "OLIVEBRANCH", - "name": "PEACE COIN ", - "decimals": 0, - "logoURI": "https://arweave.net/2X3Xh19ThGDQbQ6F9OULg5uO35N1dNI3rvxDFtCFWTc", - "tags": ["NFT", "fractionalized-nft", "collectible-token"], - "extensions": { - "description": "PEACE" - } - }, - { - "chainId": 101, - "address": "4AgfahtdgCbxcTRmkHhbZGZa63MrY9Qy8abW9jowEhEP", - "symbol": "ICRN", - "name": "ICR0WN5", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/iEDD13/crypto/main/LOGO.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3QJCTmFAfCj3LJU8ERhqHrdvt3A4X1whsWoX6L3dCv7C", - "symbol": "DLP", - "name": "Delepe", - "decimals": 8, - "logoURI": "https://cdn.discordapp.com/attachments/933563659198820443/933564515503714304/logo_delepe.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9zME6wTFbbwNxE1okwjLNG9eSqDRdkoZB86HP18y5F1s", - "symbol": "MULLI", - "name": "Mulligan Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/dc215007/mulligan/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BRoNkvRkKvJqbRPhA31DpZLyPkf8AnKBVf5dGd9VmWEQ", - "symbol": "BRONK", - "name": "BronkDAO", - "decimals": 0, - "logoURI": "https://arweave.net/eoS0O6eMHbHHAtqxR4y7wv-XQcaA6IOYo4erKILZKnU", - "tags": ["NFT", "utility-token"], - "extensions": { - "twitter": "https://twitter.com/Brink_Brinker", - "website": "https://pornhub.com/pornstar/haley-reed" - } - }, - { - "chainId": 101, - "address": "7KHPgzBmot6jD8CKW3KLT9SmVFDPQUzJeXDY3yCku1j7", - "symbol": "GHS", - "name": "Gold Hands SolGnome", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7KHPgzBmot6jD8CKW3KLT9SmVFDPQUzJeXDY3yCku1j7/logo.png" - }, - { - "chainId": 101, - "address": "DPkphDcgGjJ3YUH6a1Q6vJHg1J9oWbW7Nd5itZKNLi8U", - "symbol": "DHS", - "name": "Diamond Hands SolGnome", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DPkphDcgGjJ3YUH6a1Q6vJHg1J9oWbW7Nd5itZKNLi8U/logo.png" - }, - { - "chainId": 101, - "address": "SPtq8aKb6wnEVaMcB3J8Caec4mS2mzhATArpwcQ3hhm", - "symbol": "TOMATO", - "name": "Tomato I Love U", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ilov-eu/assets/main/tomato-logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://tomato.ilov.eu" - } - }, - { - "chainId": 101, - "address": "ADPEoQKG1xbiwYro4ecUfLQgXkkTVqQousxSCDsRKh9H", - "symbol": "BREA", - "name": "Baliarena", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Baliarena/baliarena/main/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://baliarena.com" - } - }, - { - "chainId": 101, - "address": "9N96sgWT7ryELfKiReJLHRsDF1JZ2vD2YrBfyL2LdHuZ", - "symbol": "Huz", - "name": "Huz", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9N96sgWT7ryELfKiReJLHRsDF1JZ2vD2YrBfyL2LdHuZ/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://baliarena.com" - } - }, - { - "chainId": 101, - "address": "ET3q5Vzr1mTKWmUJKdxkUNf29RmmcvjybvT1dtQdHU9S", - "symbol": "TAL", - "name": "Talent", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/tal-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Ei6KkjuVTBi1WePpt6CFQBfAxqrK8tXyTXq3GDHx3Tr4", - "symbol": "WRK", - "name": "Work", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/wrk-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "J3CtkN2VjGkp1Y4phd89o54FpCSB2jgF41dzZd7q92Pu", - "symbol": "1HRS", - "name": "Hronos", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/bsn999/crypto/main/logo.png", - "tags": ["social-token", "trading-token"], - "extensions": { - "website": "https://www.hronos.io/" - } - }, - { - "chainId": 101, - "address": "HXERJEhyoTPkcseiyjVMyAFooPACJG72dfabqDB5dZJD", - "symbol": "SWN", - "name": "SolWon", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HXERJEhyoTPkcseiyjVMyAFooPACJG72dfabqDB5dZJD/logo.png", - "tags": ["community-token"] - }, - { - "chainId": 101, - "address": "FUNHP94B46a486h5RSv46aeWUkeM5goTUuM5mVh4L6Qr", - "symbol": "Dino", - "name": "Dino DAO", - "decimals": 3, - "logoURI": "https://hv4gxzchk24cqfezebn3ujjz6oy2kbtztv5vghn6kpbkjc3vg4rq.arweave.net/tVA2tvv9z8z5Si0aggHFXBmoNWBFupfn5Jjv7Faq8cs", - "tags": ["fractionalized-nft"], - "extensions": { - "vault": "https://fraktion.art/vault/Uzp4nRWuZozb36PbjepYJGM5Q44Bqiw1nYrDfQC1Hd1", - "vaultPubkey": "Uzp4nRWuZozb36PbjepYJGM5Q44Bqiw1nYrDfQC1Hd1" - } - }, - { - "chainId": 101, - "address": "6b5cSDUCu2YiLJaeEX8JMTN3KF9UHywD7QTKvPuoB1eD", - "symbol": "SCRGNT", - "name": "Scraigounet", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Lordnewe/scraigounet/main/logo.png", - "tags": ["scraigounet-token"] - }, - { - "chainId": 101, - "address": "FAViRHfwREAcuM476rJUfNvdB3EQ7mG519Lfnd5Xwabb", - "symbol": "FAV", - "name": "Faviont Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/faviont/marketplace/main/logo.jpg", - "tags": ["utility-token", "community-token"], - "extensions": { - "description": "Faviont is an NFT based marketplace for you to buy, sell, explorer and curated a Fashion including Digital Fashion \u0026 Metaverse Fashion on Solana Blockchain.", - "discord": "https://discord.gg/T6mVYKeVYc", - "twitter": "https://twitter.com/FaviontOfficial", - "website": "https://faviont.io/" - } - }, - { - "chainId": 102, - "address": "GtpmHimJ3oyVPyZg7iZ4edxEE9ejTEikUAQLhoRPw1fR", - "symbol": "BIGT", - "name": "BiG Coin Test", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GtpmHimJ3oyVPyZg7iZ4edxEE9ejTEikUAQLhoRPw1fR/logo.png", - "tags": ["Community-token"], - "extensions": { - "description": "The BiG Deal - is a decentralized blockchain-based platform that churns out amazing deals (BiG Deals) to its community members via auctioning and other engagement models. Each engagement has elements of luck, skill, gamification and is amazing fun.", - "github": "https://github.com/thebigdeals", - "instagram": "https://www.instagram.com/thebigdeal_official", - "linkedin": "https://www.linkedin.com/company/the-big-deals", - "medium": "https://medium.com/@thebigdealofficial", - "telegram": "https://t.me/+sWdEDZzdkSVlY2I1", - "twitter": "https://twitter.com/thebigdeal_play", - "website": "https://thebig.deals/" - } - }, - { - "chainId": 101, - "address": "9QCTc8SEomtoYPBAZ5uU5G42buLBZKr8ic54jPMSZ8U8", - "symbol": "LNFTxPP5445", - "name": "LNFT Pudgy Penguin-5445", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9QCTc8SEomtoYPBAZ5uU5G42buLBZKr8ic54jPMSZ8U8/logo.png", - "tags": ["liqnft-owner-token"], - "extensions": { - "discord": "https://discord.gg/PYZWRHgVwM", - "twitter": "https://twitter.com/liqnft", - "website": "https://www.liqnft.com/gallery/PP5445" - } - }, - { - "chainId": 101, - "address": "26fxx6VCssNFQ5iTDmvNzMJW7t9MA7Nuk8L726fnU4BX", - "symbol": "Rein", - "name": "Rein", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/reindoodles/images/main/token.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/fDaVy3TMjY", - "twitter": "https://twitter.com/reindoodles", - "website": "https://www.reindoodles.art" - } - }, - { - "chainId": 101, - "address": "2CUMPKb9jNn9EphYjknqgrbf1WBmUxNQkQWtatSep1cP", - "symbol": "NTSH", - "name": "Nootshi", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/net47/ntsh/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CC3wKk19sfwBHNeQaEU8SkHu9K2YK2opzXZX85g83Vev", - "symbol": "TOKLM", - "name": "TOKLM Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/laurentmartinpro/toklm-crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2nxv4ZQK1dnbP1kLZpEaswXPq6e51Bs5qmgKv8dkKKeR", - "symbol": "CONACoin", - "name": "Cona Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/cd400/conacoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6w3nTYuLeAZ1VW2A8cKCNwakEEbQDhggELgijrAbHMiz", - "symbol": "HMC", - "name": "HummusCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/hummuscoin/HummusCoin/main/Hummuscoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9vN4ETmRGzsh4XcohTB9LDb4hTRPEiijoHM5P17isTRG", - "symbol": "MONSTY", - "name": "MonstyNFTs", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/JoleKarjole/crypto/main/Screenshot_3.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6iULHaFtqpNdUpdqspD6A3t25LfvbxCoyZ42LgjAQ3ME", - "symbol": "GM", - "name": "Grey Matter", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/serhiykravets/grey_matter/main/logo.png", - "tags": ["community-token", "social-token", "trading-token"] - }, - { - "chainId": 101, - "address": "B48MZkfDVRTwtoMHSZJQp5R2dE1Y2oz6bPbtR8L9JUmn", - "symbol": "CEST", - "name": "Canopée Environmental Services Token", - "decimals": 0, - "logoURI": "https://cdn.jsdelivr.net/gh/agrinix-token/logos/CEST.png", - "extensions": { - "website": "https://canopee.com.br/" - } - }, - { - "chainId": 101, - "address": "9wopbEg2DgZveUcdLAB4iVp7uhcV6cVyYwpRxPeZfBWC", - "symbol": "YUK", - "name": "YUKON", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/madkins69/crypto/main/yuklogo.png" - }, - { - "chainId": 101, - "address": "CertotHfUtq85jnHPFjUWUgkQDWi4442Zjr3ikmknvah", - "symbol": "HXDTest", - "name": "HXD Test Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CertotHfUtq85jnHPFjUWUgkQDWi4442Zjr3ikmknvah/logo.png" - }, - { - "chainId": 101, - "address": "ThorLXgsF3KZ9zUgx5kRG83Ai1tyvmUiFqnTGJry1cy", - "symbol": "ThLight", - "name": "Thor's Lightning Token", - "decimals": 0, - "logoURI": "https://cdn.discordapp.com/attachments/915400341992923246/933715407141998642/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/LightningsThors" - } - }, - { - "chainId": 101, - "address": "9MmJ5qE7gNBNfPgPPAqNTUGKQ8ABXCaeJkfZvmojd5i5", - "symbol": "OBSD", - "name": "Bit Rocket", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/kooroshjo/logo.p/main/logo.jpg", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "DMvWyuGPCWzAHCiQ1cq6NcGGyAC1Rne1RPiCaz4fDQMy", - "symbol": "AP", - "name": "Ape Power", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DMvWyuGPCWzAHCiQ1cq6NcGGyAC1Rne1RPiCaz4fDQMy/logo.png", - "tags": ["social-token", "utility-token", "gaming-token"], - "extensions": { - "discord": "http://discord.gg/degenapesociety", - "twitter": "https://twitter.com/DegenApeSociety", - "website": "https://degenapesociety.com/" - } - }, - { - "chainId": 101, - "address": "5H9Kmyewa2caQMpwsfQYMgt6UEzobSBwJsFUE8ioZXjp", - "symbol": "JNGL", - "name": "JungleSoulsToken", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/Raph990/Jungle/main/Token.jpeg" - }, - { - "chainId": 101, - "address": "5cKFNtooCQSkLhdFukk8R3PTdT4Rvm9cJr8Et49TxchR", - "symbol": "TSI", - "name": "Tesla Shiba Inu", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5cKFNtooCQSkLhdFukk8R3PTdT4Rvm9cJr8Et49TxchR/logo.png", - "tags": ["utility-token", "meme"], - "extensions": { - "discord": "https://discord.io/tesla_shibainu", - "telegram": "https://t.me/tesla_shibainu", - "twitter": "https://twitter.com/tesla_shibainu", - "website": "https://teslashibainu.dog" - } - }, - { - "chainId": 101, - "address": "4XSCR35F1z39PmumAMG6C1ZeBrezanmCJehjZdLqaGwX", - "symbol": "UXS", - "name": "United XS", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/UjjwalGupta49/UXS/main/UXS.png", - "tags": [ - "social-token", - "trading-token", - "utility-token", - "community-token" - ] - }, - { - "chainId": 101, - "address": "4HDPJgU4TfJroZJq2MmXJey7LPFBvr4iw11MfQVeQehp", - "symbol": "BRCN", - "name": "Beer Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/beercoin2022/pic/main/lobo%20beerc.jpg" - }, - { - "chainId": 101, - "address": "GTuDe5yneFKaWSsPqqKgu413KTk8WyDnUZcZUGxuNYsT", - "symbol": "DASCH", - "name": "Dasch Coin", - "decimals": 0, - "logoURI": "https://github.com/kennethoqs/dasch/blob/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9XZR8Y5ZbRAvbCMMzeoSPzj8haAaUBaa9XoFBDHJAy2Z", - "symbol": "SVBL", - "name": "Sievable", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9XZR8Y5ZbRAvbCMMzeoSPzj8haAaUBaa9XoFBDHJAy2Z/logo.png", - "tags": ["utility-token", "svbl", "sievable"], - "extensions": { - "description": "Sievable is a universal filter-based search engine powered by machine learning.", - "discord": "https://discord.gg/x9rmRNvdnS", - "twitter": "https://twitter.com/Sievable", - "website": "https://www.sievable.com" - } - }, - { - "chainId": 101, - "address": "3EH9uuM4T1Zyh27g2QBwA2f5mJyKbjtGc8e8Gurrg7v7", - "symbol": "MUFI", - "name": "Music Finance", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/hedde22/crypto2/main/large2.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HBB111SCo9jkCejsZfz8Ec8nH7T6THF8KEKSnvwT6XK6", - "symbol": "HBB", - "name": "Hubble Protocol Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HBB111SCo9jkCejsZfz8Ec8nH7T6THF8KEKSnvwT6XK6/logo.svg", - "tags": ["stake-pool-token", "utility-token", "community-token"], - "extensions": { - "coingeckoId": "hubble", - "coinmarketcap": "https://coinmarketcap.com/currencies/hubble-protocol/", - "discord": "https://discord.gg/d44A8WvK", - "twitter": "https://twitter.com/hubbleprotocol", - "website": "https://hubbleprotocol.io/" - } - }, - { - "chainId": 101, - "address": "6uZmhU7YfKzKaV9kkv73oXgjiDKnnKriB1gQYPxjce3H", - "symbol": "DEER", - "name": "Bruces Deer Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Floridanative60/crytologo/main/deer.PNG", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 103, - "address": "7Xcoao3X8Jfn3PupeahgNAwYuuAFZ3PLyjxjWQ1a7HGY", - "symbol": "RCT", - "name": "RB Dev Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7Xcoao3X8Jfn3PupeahgNAwYuuAFZ3PLyjxjWQ1a7HGY/logo.png", - "tags": ["RCT"], - "extensions": { - "website": "https://robocock.io" - } - }, - { - "chainId": 101, - "address": "HX7SXjc2D1FDY9pxk2AUaePWp54hkUnyyCLpHYe9CV78", - "symbol": "BETX", - "name": "BetDEX", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HX7SXjc2D1FDY9pxk2AUaePWp54hkUnyyCLpHYe9CV78/logo.png", - "extensions": { - "twitter": "https://twitter.com/BetDEXLabs" - } - }, - { - "chainId": 101, - "address": "GU63hof6cScEZTMdmgZjKzVwAEsUjTQwE6bNCLVA5Yb6", - "symbol": "SSHTLT", - "name": "Solaniverse Shuttle Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GU63hof6cScEZTMdmgZjKzVwAEsUjTQwE6bNCLVA5Yb6/logo.png", - "tags": ["community-token", "social-token", "utility-token"], - "extensions": { - "discord": "https://discord.com/invite/AWnP7ZkaYk", - "twitter": "https://twitter.com/solaniverse", - "website": "https://solaniverse.online" - } - }, - { - "chainId": 101, - "address": "8nG72hGMBSBMnrAxgNN2V2nt4HoZWEAF7VcdpdUchMVU", - "symbol": "BRICE", - "name": "Brice", - "decimals": 7, - "logoURI": "https://cdn.jsdelivr.net/gh/checkbrice/BriceToken/Brice%20logo.png", - "extensions": { - "twitter": "https://twitter.com/BriceToken" - } - }, - { - "chainId": 101, - "address": "BjTAx2xS8Z5CyoKGJNm1hWnZciuBSmo2o5WWFouVBAQC", - "symbol": "URSU", - "name": "UrsuCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/UrsuCoin/Crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "46QuZ6aBbevAFzQsA1zxwHnZaT8FDcZKorBT3muQ4oqh", - "symbol": "SHUSHIS", - "name": "ShuShi Koin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/46QuZ6aBbevAFzQsA1zxwHnZaT8FDcZKorBT3muQ4oqh/logo.png", - "tags": ["Gr3yH00d13"], - "extensions": { - "website": "https://houseoffoodporn.com" - } - }, - { - "chainId": 101, - "address": "Hz9qtPG8FmtasM9BzxLvQ784UCG4i5s2TemL2VuuPyr4", - "symbol": "RHC", - "name": "RhigeR Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jakobdk02/Crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BnMsMNnurwNigkPCt45RPRQPqoKJaZbMiiN3E2Md7KJi", - "symbol": "RBC", - "name": "Royal Blood Token", - "decimals": 9, - "logoURI": "https://github.com/Remedies84/crypto/blob/main/Royal%20Blood%20Token%20Logo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ChtWQCsxVL2x8HLqjPkoypL3JTUeFkbyMwcvma1B2Jzv", - "symbol": "XAI", - "name": "XanthAkita Inu", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/xanthakita/XanthAkita-Inu-Coin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "42oYDbvU7wogVhaGjL2FgEyCJpoVvooeMpPb9RtAXWkM", - "symbol": "LDTLDMP", - "name": "LDT Limited Drop Mint Pass", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/42oYDbvU7wogVhaGjL2FgEyCJpoVvooeMpPb9RtAXWkM/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://livingdeadteds.com" - } - }, - { - "chainId": 101, - "address": "55qjPkZhCnhE6zNwaoxvfHh8bTbpGadmXi6RpR8svLCg", - "symbol": "CTUBE", - "name": "Carbon Tube Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/carbontube/ctube/80eda6cdc5f4af2fdd5cdb43622850a9edbe0bd5/logo.png", - "tags": ["carbon", "carbon-tube", "share-token", "utility-token"], - "extensions": { - "github": "https://github.com/carbontube/ctube", - "reddit": "https://www.reddit.com/u/carbontube_io", - "twitter": "https://twitter.com/Carbontube_io", - "website": "https://carbontube.io" - } - }, - { - "chainId": 101, - "address": "DAuB5FLvmAveFdtsUoyHJcX3e3sJouy7gtcygh2XUwMM", - "symbol": "ILACN", - "name": "ILA Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Shortcutgamez-alt/crypto/main/logo.png", - "tags": ["social-token", "nft", "collectible-token", "rare-token"] - }, - { - "chainId": 101, - "address": "4vG8fmpqRHUuYDttLc4ADRN4jM7kTB12u4TB3Uokgs96", - "symbol": "CUMM", - "name": "Can You Make Money", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ZeXEVO/crypto/main/Semen-Male-Comic-Happy-Sperm-Cartoon-Green-311801.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "4KZ2KMyar3NK8uXHE8G5vXskD5Zr4PgE5g9XztCJEpFT", - "symbol": "MOM", - "name": "TEST_TOKEN_METADATA", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/humanpong/avatars/master/jhx.jpeg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4vWjyzaG7M9AouRfKneCC412spLhP1vtx1SHE2hy9m8b", - "symbol": "N4CC", - "name": "NFT 4 Cause Council", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/qrtp/token-list/main/assets/mainnet/4vWjyzaG7M9AouRfKneCC412spLhP1vtx1SHE2hy9m8b/logo.png", - "tags": ["social-token", "nft"], - "extensions": { - "twitter": "https://twitter.com/NFT4cause", - "website": "https://www.nft4cause.app/" - } - }, - { - "chainId": 101, - "address": "7xZgeMkxKocj8wBBKdEFTaF25j4kUHVJbUZjvRqkdrsE", - "symbol": "TIT", - "name": "Tiki Tix", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7xZgeMkxKocj8wBBKdEFTaF25j4kUHVJbUZjvRqkdrsE/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "84t1H7MDJokUY6X2M9oMTudHB6LABzUPMhhnPegxs8QC", - "symbol": "HRFT", - "name": "Highlands Ranch Falcon Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/84t1H7MDJokUY6X2M9oMTudHB6LABzUPMhhnPegxs8QC/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BXoCoeqSCC16X7L9dSykw5FQFD9peYbQqywyHuxMFomN", - "symbol": "CCOIN", - "name": "Course Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/aGurysh/courseCoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DsNADnfdnbCyuxE2mWxVu3GmAAiqVfaw9xgMMfFGRG5r", - "symbol": "MAGIC", - "name": "ShinLim", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/dc215007/shinlim/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Fbz6tgGFMgeDZdJeGdJ3iC19SjjY8hQPDh51ymXZWYzZ", - "symbol": "GES", - "name": "Generic Efficient Salary", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/noweffekt/ges/main/solana-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "An4iSjm5RtWMAeUGrbbkZ7EJNCaQutmkoSKjXNMKZSyE", - "symbol": "ARTC", - "name": "Artchive Coin", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/An4iSjm5RtWMAeUGrbbkZ7EJNCaQutmkoSKjXNMKZSyE/logo.png", - "tags": ["utility-token", "community-token", "governance-token"], - "extensions": { - "description": "The Artchive premier token to be used with the Artchive NFT.", - "discord": "https://discord.com/invite/S6NZ4FeqtY", - "facebook": "https://www.facebook.com/ARTchive.nft", - "instagram": "https://www.instagram.com/artchive.nft", - "twitter": "https://twitter.com/ARTchive_nft", - "website": "https://artchivecoins.com" - } - }, - { - "chainId": 101, - "address": "2k6nV8pvUVUb2GEBu6jewp3V4j16SnbEwAUBADJBGFXp", - "symbol": "LUMB", - "name": "LUMB COIN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/MrKnots/New-Logo/main/LOGO.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9YZ7cegX2nXdEC162mWa5xec4UTgwX8P61XYvsDMvt74", - "symbol": "KP", - "name": "KP Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/kpgroup1979/cryptobetong/main/kpgroup.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "97oBkXkZQRJd9kxptQiYoDQCmGtVMjb3NBg5xN66kWKS", - "symbol": "PMWL", - "name": "Pixelmon WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/97oBkXkZQRJd9kxptQiYoDQCmGtVMjb3NBg5xN66kWKS/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "discord": "https://discord.com/invite/pixelmonnft", - "twitter": "https://twitter.com/PixelmonTM", - "website": "https://www.pixelmonnft.com/" - } - }, - { - "chainId": 101, - "address": "AGksrUShiRfRAeGNwdMSXr19RRifeZcNzA9567EhUYB8", - "symbol": "COG", - "name": "COG", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/NoxianHobo/cog/main/cog-icon-final.png", - "tags": ["social-token", "NFT-Token"] - }, - { - "chainId": 101, - "address": "GKid2eL5bswPDvV4udcYpmuhBpE76a8AezniQV1HZ8CS", - "symbol": "RAWR", - "name": "Rawr Coin", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GKid2eL5bswPDvV4udcYpmuhBpE76a8AezniQV1HZ8CS/logo.png", - "tags": ["social-token"], - "extensions": { - "description": "A crowdfunding token for potential startups.", - "website": "https://cybertekk.com" - } - }, - { - "chainId": 101, - "address": "47iWsWXdiR6QR2mcNsBy3BskoqmKVaweYSt1LrrzGDbz", - "symbol": "ORI", - "name": "ORION", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Qualitytoken/OrionToken/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EPcAkxWPTJd8sShhoWemtro3jWCgBdYFT7VyRX6bscn3", - "symbol": "BRAVE", - "name": "SolFaces Arena Brave Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EPcAkxWPTJd8sShhoWemtro3jWCgBdYFT7VyRX6bscn3/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "2zYvwePFJwrUWxQd6QUxpxJcE8ZFazYYWCjBsdcQBwwb", - "symbol": "JfK", - "name": "JOHN F KENNEDY", - "decimals": 0, - "logoURI": "https://arweave.net/HbeCTMPGnk7Vtl1oZ7Sf2nM6bpkv6-XMtRMrePuPDJc", - "tags": [ - "nft", - "fractionalized-nft", - "collectible-token", - "digital-collection" - ], - "extensions": { - "description": "Change is the law of life", - "twitter": "https://twitter.com/nftgalleryshop", - "website": "https://www.nftsolanagallery.com/" - } - }, - { - "chainId": 101, - "address": "6CYxiyUo2pgMHkCWpWf4TU47f3Q1rMUWP1R4WtFmVLLA", - "symbol": "PINS", - "name": "Pin Club Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6CYxiyUo2pgMHkCWpWf4TU47f3Q1rMUWP1R4WtFmVLLA/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/pinclub", - "twitter": "https://twitter.com/PinClubFamily", - "website": "https://pinclub.io/" - } - }, - { - "chainId": 101, - "address": "86erHPHmYKXxkQSKVuRUazUrG62tZg1FdYr5oJPaS4tQ", - "symbol": "BLSHMNT", - "name": "FBCMINT", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/NFTBrickLayer/assets/main/FBC-logo.png", - "tags": ["whitelist-token"], - "extensions": { - "discord": "https://discord.com/invite/xbVtrqjZcc", - "twitter": "https://twitter.com/Fearless_Bulls" - } - }, - { - "chainId": 101, - "address": "14k9uii4GKXVcD3XrAYiYF15ZKuzziVydKgttDxoyGPM", - "symbol": "CREATE", - "name": "Create Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/14k9uii4GKXVcD3XrAYiYF15ZKuzziVydKgttDxoyGPM/logo.svg", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/fellowshipdao", - "twitter": "https://twitter.com/FellowshipDAO", - "website": "https://fellowshipdao.com/" - } - }, - { - "chainId": 101, - "address": "85nfo4Na3q8nXSzHM4bLgRsn2CmbeLMsLYGKmQs46Wzm", - "symbol": "FSWL", - "name": "Fellowship Whitelist Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/85nfo4Na3q8nXSzHM4bLgRsn2CmbeLMsLYGKmQs46Wzm/logo.svg", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/fellowshipdao", - "twitter": "https://twitter.com/FellowshipDAO", - "website": "https://fellowshipdao.com/" - } - }, - { - "chainId": 101, - "address": "HQAttcHCUJNUUTFfJzp7ng14LBz29A4GCUMedkvg77Uf", - "symbol": "MGC", - "name": "Mi Gente Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/botapierna/crypto/main/MGC_logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5fTYZKkawRZswGZnzKeKzcnhYd2WNC8N5JdTf2pTYbax", - "symbol": "BTTL", - "name": "Battle Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Battleram/BattleTokenBTTL/main/BattleTokenPNG.png", - "tags": ["DAO-Token"] - }, - { - "chainId": 101, - "address": "BxpgexfjfrQrM59ZRGB4ZLVs7sEuHi6ry6QWZ273sD3P", - "symbol": "SKC", - "name": "SweetKoffi Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Zec0de/SweetKoffi_crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "J4gd9c6trVYkrUESngq362FrReWtpyyzbUYWAvqmtjBv", - "symbol": "CSH", - "name": "Cash", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/csh-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GbXAsJjLgtqnwi8RMhZnmCcwY95puKWyMr8WWn95ywKG", - "symbol": "NOT", - "name": "Nothing", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/not-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HV4YBnsPCvQK76jQvMp4rkKf8oFEyQoeGVNYFX9Mqf8r", - "symbol": "GRAT", - "name": "Gratitude", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/grat-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7CKmxmZcgzKjfDZPvKo7WxWRKQv3NfiK7utzyZUrtMHR", - "symbol": "DMCN", - "name": "DUNCION", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/duncmcclunc/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ErTvb8p9Vfh7Pp87DSY6LNE3KGmgu4ZiHW3Qv6qpDNbe", - "symbol": "IPAS", - "name": "Internet Protocol as NFT token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/IPasNFT/assets/main/ipasnft-logo-2735x2735.png", - "tags": ["utility-token"], - "extensions": { - "description": "Internet Protocol as NFT. We are bringing the ability of IP ownership as NFT.", - "discord": "https://discord.gg/WsaXKQQNVR", - "telegram": "https://t.me/ipasnft", - "twitter": "https://twitter.com/ipasnft", - "website": "https://www.ipasnft.com" - } - }, - { - "chainId": 101, - "address": "9UFreZXDqxJR95nMJfe3KTSPPuXtTd9WTZa1UVM7p4Bn", - "symbol": "SURAH", - "name": "THE HOLY QURAN", - "decimals": 0, - "logoURI": "https://arweave.net/phkjn6ROYiXFoj21ORPARPjGd-81vR9CAMkbms5I0-Y", - "tags": [ - "nft", - "fractionalized-nft", - "collectible-token", - "digital-collection" - ], - "extensions": { - "description": "This is the Book about which there is no doubt, a guidance for those conscious of Allah", - "twitter": "https://twitter.com/nftgalleryshop", - "website": "https://www.nftsolanagallery.com/" - } - }, - { - "chainId": 101, - "address": "1USD6bWynacpTnSy2xHpSNPEDh59TYGx2VztNVzy9pZ", - "symbol": "1USD", - "name": "OneUSD", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/1USD6bWynacpTnSy2xHpSNPEDh59TYGx2VztNVzy9pZ/logo.svg", - "tags": ["stablecoin", "DeFi"], - "extensions": { - "discord": "https://discord.com/invite/oneringfinance", - "github": "https://github.com/OneRingUSD", - "medium": "https://medium.com/oneringfinance", - "telegram": "https://t.me/OneRing_Finance", - "twitter": "https://twitter.com/onering_finance", - "website": "https://www.onering.finance" - } - }, - { - "chainId": 101, - "address": "A5t8hZNLcB9eja4bi2LhfYvbw4Upa9rpdCXsKskNxBXA", - "symbol": "LINCOLN", - "name": "ABRAHAM LINCOLN", - "decimals": 0, - "logoURI": "https://arweave.net/g0tw2-WNXctJXRowkpJEgsuGMFfJdA7uym3kMIFdZjA", - "tags": [ - "nft", - "fractionalized-nft", - "collectible-token", - "digital-collection" - ], - "extensions": { - "description": "Those who deny freedom to others, deserve it not for themselves", - "twitter": "https://twitter.com/nftgalleryshop", - "website": "https://www.nftsolanagallery.com/" - } - }, - { - "chainId": 101, - "address": "8iey5bqBcqejJWcS7Two1ZffeJcxx28rfBMeSAqCF9nf", - "symbol": "LIT", - "name": "LIT", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/LIT-token/uploads/main/logo.png", - "tags": ["social-token", "utility-token", "web3"], - "extensions": { - "discord": "https://discord.gg/slacc", - "twitter": "https://twitter.com/SlaccSol", - "website": "https://slacc.io" - } - }, - { - "chainId": 101, - "address": "HivQLtgvg8rgovmBv6UC54dmDV3QSFjEbZxDQRAEMdBS", - "symbol": "LVXY", - "name": "LIVAXY COIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/leafyus/crypto/main/LivaxyLogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "41beW9K9CRDVjUN7yCZKRWkiDPxjkAkhZ7Q6ny4vZ7Ny", - "symbol": "DSOL", - "name": "Defi Solution", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/41beW9K9CRDVjUN7yCZKRWkiDPxjkAkhZ7Q6ny4vZ7Ny/logo.png", - "tags": ["DeFi"], - "extensions": { - "twitter": "https://twitter.com/defi_solution" - } - }, - { - "chainId": 101, - "address": "A5t8hZNLcB9eja4bi2LhfYvbw4Upa9rpdCXsKskNxBXZ", - "symbol": "LION1", - "name": "LION1", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/A5t8hZNLcB9eja4bi2LhfYvbw4Upa9rpdCXsKskNxBXZ/logo.svg" - }, - { - "chainId": 101, - "address": "A5t8hZNLcB9eja4bi2LhfYvbw4Upa9rpdCXsKskNxBXX", - "symbol": "LION2", - "name": "LION2", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/A5t8hZNLcB9eja4bi2LhfYvbw4Upa9rpdCXsKskNxBXX/logo.svg" - }, - { - "chainId": 101, - "address": "27w7fcX3Ak13Bb6aSJrvxp8SFfearoVxqbtowypTd9it", - "symbol": "RETIBI", - "name": "RetibiCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/aymenretibi/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6eKoh5DvnGYoeQoLnQ6H7TXo1A4VWrKUQoKsQrcxDcz9", - "symbol": "scepter", - "name": "Majesty", - "decimals": 1, - "logoURI": "https://raw.githubusercontent.com/PeepGainz/crypto/main/Majesty.png", - "tags": ["nft-token"] - }, - { - "chainId": 101, - "address": "y1YpyeeYVseiTMsRL2jJc7NYd2FcWn5PKfiWRF1S4g3", - "symbol": "BBW", - "name": "Brunch Bytes Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/y1YpyeeYVseiTMsRL2jJc7NYd2FcWn5PKfiWRF1S4g3/logo.png", - "extensions": { - "discord": "https://discord.com/invite/j7rPyNb6T6", - "twitter": "https://twitter.com/brunchbytesNFT", - "website": "https://www.brunchbytes.com" - } - }, - { - "chainId": 101, - "address": "6yX3oaYCcAor2ooFk8vFuwef6tAtwqeBiiQmV1zCHVaw", - "symbol": "SWANY", - "name": "SWANY", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/davidaswan/swany/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "bPKvK1c8pT5u3Pz7ou9pBA3YMCmpZgweuixqPzFhZDb", - "symbol": "YLM", - "name": "Yarden", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/bPKvK1c8pT5u3Pz7ou9pBA3YMCmpZgweuixqPzFhZDb/logo.png", - "tags": ["nft", "game"] - }, - { - "chainId": 101, - "address": "63STzHqymgmUcZzFiGPVU11XiAf5tn3N8UuVtyYBSDjQ", - "symbol": "gulu", - "name": "gulu", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/63STzHqymgmUcZzFiGPVU11XiAf5tn3N8UuVtyYBSDjQ/logo.png" - }, - { - "chainId": 101, - "address": "AyPkunNZ7g8acsXUZ3ruB17EKSf8Q2JJPsWu4AWBT3yB", - "symbol": "G", - "name": "Gulp", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AyPkunNZ7g8acsXUZ3ruB17EKSf8Q2JJPsWu4AWBT3yB/logo.png" - }, - { - "chainId": 101, - "address": "BC1QPt3SMAni1mNDbeXLGmUL1ie6n2L6GX943UACwu3R", - "symbol": "WL", - "name": "WLGulp", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BC1QPt3SMAni1mNDbeXLGmUL1ie6n2L6GX943UACwu3R/logo.png" - }, - { - "chainId": 101, - "address": "A4K1NiurCDitDMLBiuDV6oVMftoHJzUMeX5pQcFW7k9S", - "symbol": "BND", - "name": "Bender", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/a4373694e907dc8749bdd7a07731257db8f5a39b/assets/mainnet/Bender.JPG", - "tags": ["meme-token", "game-token", "community-token"] - }, - { - "chainId": 101, - "address": "9B7Wpo7LXhgDZ4QT4e1bpjBXC9g6h52rH9UwLb3UAyeR", - "symbol": "$", - "name": "GULP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/farhan067/Gulp/main/logo.png" - }, - { - "chainId": 101, - "address": "32YDp4MSNso5J1usYcuUGLPRXrHstzVnFnoyiFBfHdJQ", - "symbol": "GEST", - "name": "Gesticoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/dussam/gesticom/main/gesticoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6x7SAmGfMANGHG4CsLPcYZ9UX2QhAS6f8WGMovB3P7RE", - "symbol": "RBIT", - "name": "RichBit", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6x7SAmGfMANGHG4CsLPcYZ9UX2QhAS6f8WGMovB3P7RE/logo.jpg", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "J5zncv7PeN3Km2BTC6hcRrZevGQX7avM9EErZtFrdTrh", - "symbol": "SOLLINX", - "name": "Sollinx", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/Jones9238/sollinx/main/sollinxLogo.png", - "tags": ["social-token"], - "extensions": { - "twitter": "https://twitter.com/AtEMWORLD" - } - }, - { - "chainId": 101, - "address": "3WiHeUJksPE2nhHVVwPfE9F4Eepv2QtmgNPoTc4PL1X8", - "symbol": "PSFI", - "name": "Pug Shot Finance", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3WiHeUJksPE2nhHVVwPfE9F4Eepv2QtmgNPoTc4PL1X8/logo.png", - "tags": ["meme", "utility"], - "extensions": { - "discord": "https://discord.gg/mF7mexhaE2", - "twitter": "https://twitter.com/pugshotfinance", - "website": "https://www.pugshotfinance.com/" - } - }, - { - "chainId": 102, - "address": "DotdtxnoYiTELUjGnjXorv5Xy2kngLRiaydYrBzUxHNL", - "symbol": "TBIG", - "name": "BiG Coin (Testnet)", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DotdtxnoYiTELUjGnjXorv5Xy2kngLRiaydYrBzUxHNL/logo.png", - "tags": ["stablecoin"], - "extensions": { - "coingeckoId": "usd-coin", - "description": "The BiG Deal - is a decentralized blockchain-based platform that churns out amazing deals (BiG Deals) to its community members via auctioning and other engagement models. Each engagement has elements of luck, skill, gamification and is amazing fun.", - "github": "https://github.com/thebigdeals", - "instagram": "https://www.instagram.com/thebigdeal_official", - "linkedin": "https://www.linkedin.com/company/the-big-deals", - "medium": "https://medium.com/@thebigdealofficial", - "telegram": "https://t.me/+sWdEDZzdkSVlY2I1", - "twitter": "https://twitter.com/thebigdeal_play", - "website": "https://thebig.deals/" - } - }, - { - "chainId": 101, - "address": "4ZoMoYLFjEmZjTUG4ZvKya5AEYXRGZETDFKR28Zd3wEw", - "symbol": "BLDTPE", - "name": "BoldType", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/franckmandon/BoldType/main/LOGO-BOLDTYPE.png", - "tags": ["social-token"], - "extensions": { - "discord": "https://discord.gg/9gdreAgW", - "twitter": "https://twitter.com/BoldTypeArt", - "website": "https://www.boldtype.art/" - } - }, - { - "chainId": 101, - "address": "FoxHUbcgZGU4ozFG8iH9tpivGPaHkxusvxSSuWTDNPEZ", - "symbol": "SOLALAND", - "name": "SOLALAND", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FoxHUbcgZGU4ozFG8iH9tpivGPaHkxusvxSSuWTDNPEZ/logo.png", - "tags": ["NFT", "utility-token"], - "extensions": { - "discord": "https://discord.com/invite/GybWAj3bSF", - "serumV3Usdc": "5eFBFqATo93NZd1FGVFv59ewDPEqeGoEgFipB2kGmJVP", - "twitter": "https://twitter.com/solalandhq", - "website": "https://www.solalandhq.com/" - } - }, - { - "chainId": 101, - "address": "E2GaLU27RU5MLeQcrGmvkQeZhSZhA62YiaXk31j3d7wH", - "symbol": "BSTC", - "name": "BeastCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/toastedflames/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6RfidFC3diqqF3fYGFTtTV9CsxxA2gsVUFN3RJ5gCyT1", - "symbol": "PUPS", - "name": "PupsPleasure", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/thypups/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EbTHasvCpSU1GYTFE5hNEzNNUbiui9CV9DWHWKP9CvgQ", - "symbol": "FSH", - "name": "Fish Token", - "decimals": 0, - "logoURI": "https://media.discordapp.net/attachments/926535226820276264/934150203496337428/fish_token.png?width=675\u0026height=675", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/MoanaWhalesNFT" - } - }, - { - "chainId": 101, - "address": "2S3hhwCnDkFN2zHYc7SBzhLuHUevMwmgUCzq3ShDsUb5", - "symbol": "CWB", - "name": "Chiwa Bones", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2S3hhwCnDkFN2zHYc7SBzhLuHUevMwmgUCzq3ShDsUb5/logo.png" - }, - { - "chainId": 101, - "address": "SLTSRS7irCC1LgeCdnKZDaaUXRDHB4TQRm1dd5GNLPS", - "symbol": "SLTS", - "name": "Soltus Pass", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SLTSRS7irCC1LgeCdnKZDaaUXRDHB4TQRm1dd5GNLPS/logo.png", - "tags": ["NFT", "utility-token"], - "extensions": { - "discord": "https://discord.gg/eUPwQuvEX9", - "twitter": "https://twitter.com/SoltusNFT", - "website": "https://soltus.io/" - } - }, - { - "chainId": 101, - "address": "JDdU9XAry5FNKFKxrrFbFiK6yAHKoWqbYSTJdUQfrjua", - "symbol": "PSY", - "name": "PSILOCYBE", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/stardouce/annunaki/main/thumbnail_IMG_4221%20(1).png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/nacho_dacal" - } - }, - { - "chainId": 101, - "address": "DEFjrmzpXuaPg5cqNi4PzPCdrdqjngc8cF6KqesLAUrP", - "symbol": "CHNG", - "name": "ChangeCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jimerson001/crypto/main/changelogo.png", - "tags": ["social-token", "stablecoin"] - }, - { - "chainId": 101, - "address": "BYbfgn491deiSTApQnXmV4DpkiDHUXJYYoc11U6fB1By", - "symbol": "DOOB", - "name": "Doobie Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/xxmafiaxxx/doobietokens/main/doobiecoin.png", - "extensions": { - "description": " The doobie transaction coin", - "website": "https://doobie.me/" - } - }, - { - "chainId": 101, - "address": "823dnFBD7dUCbBr9tvD6oT3JHo286dx93opVLgqKT21u", - "symbol": "SMCK", - "name": "Smacked Exprience Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/xxmafiaxxx/doobietokens/main/smackedlogo.png", - "extensions": { - "description": "The Smacked Experience coin", - "website": "https://www.smackeddobbie.com" - } - }, - { - "chainId": 101, - "address": "GUM5TSSLThjHD9brZLQtFwHP2ci9GBLmak1maUcGbLPm", - "symbol": "TRT", - "name": "Tortillas", - "decimals": 0, - "logoURI": "https://github.dev/martindebo/token-list/blob/fb32057248d78926ebb9afe5234987f34a88b15d/assets/mainnet/GUM5TSSLThjHD9brZLQtFwHP2ci9GBLmak1maUcGbLPm/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Ef8U4a9MJUPPmaUeHMvcnZoLsVw3QwTeEyZgWKvn7Mnj", - "symbol": "CM4K", - "name": "ChasingMidnight Koin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Chasing-Midnight-Dev/CMToken/main/logo.png", - "tags": ["social-token"], - "extensions": { - "instagram": "https://www.instagram.com/ChasingMidnight_/" - } - }, - { - "chainId": 101, - "address": "rPMfHAnourZnyjo99raz9n9SfezmwCQCuiyweMse5sM", - "symbol": "ILYL", - "name": "Lily Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/clnKnight/lilycoin/main/lilycoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8XYyLiTfVkDWbAdRHkkzqg5TtswyGgKQjzPg9wrQRupA", - "symbol": "WHDT", - "name": "Weedheads Discount Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8XYyLiTfVkDWbAdRHkkzqg5TtswyGgKQjzPg9wrQRupA/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Weedheads Discount Token", - "twitter": "https://twitter.com/weedheadsNFT", - "website": "https://weedheads.art" - } - }, - { - "chainId": 101, - "address": "472qrvfcCdNhWKnAMU8fkujnRfs6M1vqV92aetS1Fzg5", - "symbol": "MTVK", - "name": "Metaversita Kids", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/metaversita/cryptokids/main/metaversitakidslogo.png", - "tags": [ - "social-token", - "educational-token", - "kids-token", - "utility-token" - ] - }, - { - "chainId": 101, - "address": "6qdpLDezQgJJGbNqNPwN8WMDgyUWtrw7vkTKnxpHe18U", - "symbol": "KMT", - "name": "Kemet", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/kemetcoin/kemet/main/kemet.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BsfjJdm3oBmJsLx59M9hoCD9PUncbJuKRymMEYwqgS86", - "symbol": "EER", - "name": "ElEuro", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/rlealg7/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "F6mDXoirNX8gwcM5uM88BboaHWbVdkkfxt5b9nS7Wiot", - "symbol": "DARKNESS", - "name": "BLACKHOLE", - "decimals": 0, - "logoURI": "https://arweave.net/ig2baWinYJXYT2sD6oi5QDL-mxd11xB3giJwInT7mIg", - "tags": [ - "nft", - "fractionalized-nft", - "collectible-token", - "digital-collection" - ], - "extensions": { - "description": "Black holes are where God divided by zero", - "twitter": "https://twitter.com/nftgalleryshop", - "website": "https://www.nftsolanagallery.com/" - } - }, - { - "chainId": 101, - "address": "FANGZa14uU2oLHczgyDqE9sYQtbD3VLzdWntQwLujWs6", - "symbol": "FANGZ", - "name": "Fangz WL Token - The First Clan", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FANGZa14uU2oLHczgyDqE9sYQtbD3VLzdWntQwLujWs6/logo.png" - }, - { - "chainId": 101, - "address": "DH8H67JVbmiYnE6HiCFXe1JMckdLrGtopUYTNKdqyKcY", - "symbol": "ORB", - "name": "Ouroboros", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/kshabahang/crypto/main/logo.png" - }, - { - "chainId": 101, - "address": "2Tnc6ngSfJS4QNXzDU5daR2G7JH5uox2C6Z6B3y1SZ6i", - "symbol": "AHMT", - "name": "Astral House Mint Ticket", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Tnc6ngSfJS4QNXzDU5daR2G7JH5uox2C6Z6B3y1SZ6i/logo.png", - "tags": ["whitelist-ticket"], - "extensions": { - "description": "Welcome Our Amazing House!", - "website": "https://www.astralapes.com" - } - }, - { - "chainId": 101, - "address": "5cPc4dx8D61JrbHqVZ8Ywsf2L6FeBMRmgstg1mWc65Ti", - "symbol": "RAINBOW", - "name": "LGBTQ COMMUNITY", - "decimals": 0, - "logoURI": "https://arweave.net/zK7Epeb7WOnqzE6ZZtCxTO8x4rMZq9u0Bn3tcueAtRM", - "tags": [ - "nft", - "fractionalized-nft", - "collectible-token", - "digital-collection" - ], - "extensions": { - "description": "Hope will never be silent", - "twitter": "https://twitter.com/nftgalleryshop", - "website": "https://www.nftsolanagallery.com/" - } - }, - { - "chainId": 101, - "address": "F9BKWDRMopfWxf5rbU1FA1LPADahy9U3Z9ByvM4MX3p6", - "symbol": "FTRLS", - "name": "Future Travelers", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/maddurup/futuretravelers/main/futuretravelers_logo.png", - "tags": [ - "social-token", - "collectible-token", - "digital-collection", - "educational-token", - "kids-token", - "utility-token" - ] - }, - { - "chainId": 101, - "address": "ErKdodyZV6heNvjmthdycjDoEdXris7Ej2xgMCA5UxPP", - "symbol": "DIANA", - "name": "PRINCESS DIANA", - "decimals": 0, - "logoURI": "https://arweave.net/9NoKsOxpDXt4zbMQ5lncbz07JcCONN7lMUhz-A8IVD8", - "tags": [ - "nft", - "fractionalized-nft", - "collectible-token", - "digital-collection" - ], - "extensions": { - "description": "I would like to be a queen in people hearts, but I dont see myself being queen of this country", - "twitter": "https://twitter.com/nftgalleryshop", - "website": "https://www.nftsolanagallery.com/" - } - }, - { - "chainId": 101, - "address": "FGtAoCT3Lpy7eecLSQhQ9oFnb9rRJtL5bjpmbbDaQwg7", - "symbol": "VCC", - "name": "Vic Chaos Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/waxjock/Vic-Chaos-Coin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8tM8eC6JVKvck2qB35ungkJfRrM4nyessv3ZK7USQRWh", - "symbol": "DQ", - "name": "DQ Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/daanishaqureshi/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5TPoLh9drzQsgvPqVZ3hhjG2LV4mBCy7uC2JY7fcZwDR", - "symbol": "FTO", - "name": "Fake Taxi Official", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FakeTaxiCoinOfficial/FakeTaxiCoinOfficialLogo/main/fake-taxi-crypto-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AG1wkgfXJNkS2xWsbDePVsVDsdiZofcm2JpYiMfvPnHg", - "symbol": "TUSK", - "name": "TUSK (WATW)", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AG1wkgfXJNkS2xWsbDePVsVDsdiZofcm2JpYiMfvPnHg/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Utility token for use by the We Are The Walrus community", - "discord": "https://discord.gg/wearethewalrus", - "instagram": "https://instagram.com/watwalrus", - "twitter": "https://twitter.com/WATwalrus", - "website": "https://wearethewalrus.io", - "youtube": "https://www.youtube.com/channel/UCT3g3uBSCnqnT3KfJ85221w" - } - }, - { - "chainId": 101, - "address": "8qX7w2eQWG3iLFzAe7gWRrjf7LGiodq8e4NoY7ALk14y", - "symbol": "KNRS", - "name": "Kinrys", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/rainfallthejoker/Logo/main/Kinrys.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3dU3xJjjPCJHvJwmqhmK4nqETfPpEGKRaWSquffAvZ5C", - "symbol": "88A", - "name": "Arcade '88 Token", - "decimals": 0, - "logoURI": "https://www.arcade88nft.com/permanent/token-a88.png", - "tags": ["social-token", "NFT", "utility-token", "meta-verse", "game"], - "extensions": { - "discord": "https://discord.com/invite/fMaSFjtfcT", - "twitter": "https://twitter.com/arcade88nft", - "website": "https://www.arcade88nft.com" - } - }, - { - "chainId": 101, - "address": "aPwnnqozXpdnQ3M5spxcoWRBxF7WWTfADwuLYaeUyUh", - "symbol": "SWK", - "name": "Sarawak", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/kevjacob/sarawak/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5P1WVkzP41CCnFSxRdskRXCbVWfkr5c2pNm8CpixBCem", - "symbol": "LIXI", - "name": "Lixi Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/phannyjohn/crypto/main/logo.png", - "tags": ["social-token", "meme-token"] - }, - { - "chainId": 101, - "address": "G2WBYifnQMX4dB3eUpFLpSZV8UzBztUHsLzdo3ow2swf", - "symbol": "BSC", - "name": "BoseCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/CNADHUSHAN/COIN/main/Bose.png.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FuJSEGsyheXAhjptNpLrcdSDNSb94b6wQ5qWLMBYnWqD", - "symbol": "BGP", - "name": "Bedri Coin Patron", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/sonfero/crypto/main/BGP_coin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "A1wBAV4hJbiaY9LgEZ4g98WNFah66wAtH7h5b3PXCxku", - "symbol": "LAB", - "name": "Labrador coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/The-Tech-Dog1/crypto-img/main/logo.png", - "tags": ["social-token", "meme-token"] - }, - { - "chainId": 101, - "address": "HFWz47uq1mrzMGuCmMmZDrCqrQpmQcAkTVhBxZDFY7RS", - "symbol": "KND", - "name": "Kendi Token", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/ilzamafif/logo/KDN.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DAhyNwD9bsMkcgXHzCvVCVimkpeRwc6bv9i47UuuQAo3", - "symbol": "AUT", - "name": "Airdrop Utility Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DAhyNwD9bsMkcgXHzCvVCVimkpeRwc6bv9i47UuuQAo3/logo.png" - }, - { - "chainId": 101, - "address": "2BJ3bfEcxtSqgrKVYE25emYqA51m5tmQfXcZsGxUAyNL", - "symbol": "AAO", - "name": "Against All Odds", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/andbandu/spl-tokens-logo/main/logo.png", - "tags": ["technology"], - "extensions": { - "instagram": "https://www.instagram.com/aao_blocktech/", - "website": "https://aaoblocktech.com" - } - }, - { - "chainId": 101, - "address": "3Qv5SAkB3pNMNicFf3RQqPr6dWpCh3hywZxkTRNbuBZa", - "symbol": "BT50M", - "name": "BTM UTILITY", - "decimals": 6, - "logoURI": "https://cdn.jsdelivr.net/gh/guru1animo/BT5/BTM_REG_TRANS.png", - "tags": ["UTILITY-TOKEN"] - }, - { - "chainId": 101, - "address": "BT5gcf7stQ1M7veC7cFUpZHiLa5577GhGkkvCsoY4jiC", - "symbol": "BT5", - "name": "BT5 WHITELIST", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/guru1animo/BT5/BT5_TRANSPARENT_LOGO.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8wPQwg1v5BK5KNmmV2pjKBLarftfR24iQrNeZb7vQAbo", - "symbol": "KRABS", - "name": "KrabsKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SleepyKeebler/KKLogo/main/KKLogoFinal.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EKe7rakfHZGhjPc7xtJ5RbjdPrydjxKrsoWZoEGatUvD", - "symbol": "SFWL", - "name": "Sol Force Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EKe7rakfHZGhjPc7xtJ5RbjdPrydjxKrsoWZoEGatUvD/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "FxDawrtC2VStAKcw8SrgTQjtyE7T2yYH4SsVLhDJm9Sa", - "symbol": "UET", - "name": "Uetos Token", - "decimals": 6, - "logoURI": "https://user-images.githubusercontent.com/7600092/150626036-007c284d-0921-4c79-93fd-3e156f29cc98.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Ai9ToH4zWxHv9YUgAXd7stxMQkC97Qg2Vj73V38W4N29", - "symbol": "mTOR", - "name": "mTOR", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Stephanhero/Hero/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "RAWRgsFuMD8U38ATP6uDg2A3c1HSXAyrnK13mrXqv6T", - "symbol": "$RAWR", - "name": "RAWR", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/RAWRgsFuMD8U38ATP6uDg2A3c1HSXAyrnK13mrXqv6T/logo.png", - "extensions": { - "twitter": "https://twitter.com/TigerLegacyNFT", - "website": "https://www.tigerlegacynft.com" - } - }, - { - "chainId": 101, - "address": "F33Pi2HYRFi2HvyvDezbZj7NmskBU9FWmTj4ZgAp5qE", - "symbol": "KASH", - "name": "KKoppa Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/kopparam/solana-token-assets/main/kkoppa.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5pGWuTbSbapu9qxpFTcNLQx4ydj9tJsw6okN6mErWw6q", - "symbol": "DT", - "name": "Dev Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/The-Bifrost/BADC-Assets/main/devToken.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "discord": "https://discord.gg/Z2vY77ejH6", - "twitter": "https://twitter.com/BoredDevClub" - } - }, - { - "chainId": 101, - "address": "6fDeCCoZLWRZporJtRBZ8toMs7BBn2wWQapdaKsTigpF", - "symbol": "HHWL", - "name": "Hockey Heroes Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6fDeCCoZLWRZporJtRBZ8toMs7BBn2wWQapdaKsTigpF/logo.png", - "tags": [ - "social-token", - "nft", - "whitelist-token", - "utility-token", - "HockeyHeroes", - "HHWL" - ], - "extensions": { - "discord": "https://discord.gg/tfcYjW59gH", - "instagram": "https://www.instagram.com/hockeyheroes.io/", - "twitter": "https://twitter.com/hockeyheroes_io", - "website": "https://hockeyheroes.io" - } - }, - { - "chainId": 101, - "address": "7tmJntLEkQ8NUCMyXz8Yti77pqX7aB3NHLLL7i6q121G", - "symbol": "KAI", - "name": "Kai Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/UDUT/Logo/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GkJdRCiKg9oJK4ZJjsQAUQiTtFT7BzRtMCPms4neShVP", - "symbol": "DOODLEBUNNYWL", - "name": "Doodle Bunny Whitelist", - "decimals": 0, - "logoURI": "https://nova-host.nyc3.cdn.digitaloceanspaces.com/doodlebunny/doodlebunny-icon.png", - "tags": ["community-token"], - "extensions": { - "website": "https://doodlebunny.io/" - } - }, - { - "chainId": 101, - "address": "invYVY53mcmBtf2RbVudoqKDyAgZGofkLYodvnQwQep", - "symbol": "INV", - "name": "Invoke", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/invYVY53mcmBtf2RbVudoqKDyAgZGofkLYodvnQwQep/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/invokers", - "twitter": "https://twitter.com/invokersnft", - "website": "https://www.invokersnft.com" - } - }, - { - "chainId": 101, - "address": "DpiEAFAYhNG5sVg2x54yPrjcPnWcFwG6oaU41ryabzSV", - "symbol": "BUS", - "name": "Orobus Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/venture64/orobus/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EX1Zh43eHStRRaN6CMxAvK5yRNodrsXFzzsgW417vaBM", - "symbol": "MRFAN", - "name": "FanCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Shortcutgamezalt/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9J2MudjVzuYF6EAnQBswTpTxo6qqhVJ56PqDLo6LXrLq", - "symbol": "Amp", - "name": "AmpK", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/stefasav/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Bhh5WwdL9HPCgEZxLYWNKnwjtP8kCUMa8bEhz9KFTxSP", - "symbol": "AWC-D", - "name": "Awake Coin - Dev", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Bhh5WwdL9HPCgEZxLYWNKnwjtP8kCUMa8bEhz9KFTxSP/logo.png", - "tags": ["community-token"] - }, - { - "chainId": 101, - "address": "EyxaYzqCBB5zxRFH4fvW1JtXupeaz6YKcWaJq2AVeeVT", - "symbol": "Merov", - "name": "Merov Fan Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EyxaYzqCBB5zxRFH4fvW1JtXupeaz6YKcWaJq2AVeeVT/Merov.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GLfMsvQiKxvAhf8h5vM3EUurjdvvgfXSYnEWe6UydoiR", - "symbol": "MADOG", - "name": "Mad Dog", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/upsetk9/Crypto-MadDog/main/logo.png", - "tags": ["Utility-Token", "Crypto-Token", "Game-Token"] - }, - { - "chainId": 101, - "address": "GBMJGHgYK3XmhSJMGkeqvN97sUTpc7dpEHJENMn7SAjV", - "symbol": "3D", - "name": "3DIMENSION", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GBMJGHgYK3XmhSJMGkeqvN97sUTpc7dpEHJENMn7SAjV/logo.png", - "tags": ["Imprimante3D-token", "3D-token", "meta-verse", "social-token"] - }, - { - "chainId": 101, - "address": "2XmVJ6XfJzwdY69QzbBq7Do9tkzumcTFdg6BPyBd9uc2", - "symbol": "TITOR", - "name": "TITOR KEY", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2XmVJ6XfJzwdY69QzbBq7Do9tkzumcTFdg6BPyBd9uc2/insignia.png", - "tags": ["social-token", "NFT", "08-11-2022"] - }, - { - "chainId": 103, - "address": "moN9cUBW8K2zCQi6xsBjx5QqNG3rprjSUtdHgTHRTRK", - "symbol": "ZIZ", - "name": "ZIZZY", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/moN9cUBW8K2zCQi6xsBjx5QqNG3rprjSUtdHgTHRTRK/logo.png", - "tags": ["utility-token", "Startup-token"] - }, - { - "chainId": 101, - "address": "4Knjw5dG7UszrbdftqoXwiMvSLkT999eNWNKzwdRR96i", - "symbol": "DNGN", - "name": "DungeonCoin", - "decimals": 18, - "logoURI": "https://raw.githubusercontent.com/MrThomp308/crypto/main/logo.png", - "tags": ["social-token", "game"], - "extensions": { - "description": "What are ya buyin'?" - } - }, - { - "chainId": 101, - "address": "GhJTPNR8yiwA84imWaQytWK7mDf884JBKSkxehTnY7RN", - "symbol": "SDW", - "name": "Shadows", - "decimals": 0, - "logoURI": "https://cdn.jsdelivr.net/gh/celesticalrain/shadow/logo.jpeg", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.com/invite/abitofashadow", - "twitter": "https://twitter.com/abitofashadow", - "website": "https://www.abitofashadow.com/" - } - }, - { - "chainId": 101, - "address": "E4yBLdJX8bJLejwn8raT1msMnFP2UKyuj3EWx9X92gAy", - "symbol": "SPICY", - "name": "Spicy Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/manihck/spicy/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ciAKvQShrEdMf6d4GctueSTnakiF8V4QjrYdRrZQngY", - "symbol": "IMP", - "name": "Iguana Mint Pass", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ciAKvQShrEdMf6d4GctueSTnakiF8V4QjrYdRrZQngY/IguanaPass.png", - "tags": ["utility"] - }, - { - "chainId": 101, - "address": "7DrFiGCsimt4c8fMy1yzvkBuwaicG6MemXM9Nfcj2xsC", - "symbol": "BBRY", - "name": "Blueberry Social", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/BlueberrySocial/blueberry/main/blueberry.png", - "tags": ["social-token"], - "extensions": { - "twitter": "https://twitter.com/blueberrycoin" - } - }, - { - "chainId": 101, - "address": "FQhv1hNXqKymA1C1irdgHgLHhUBpJRLz8a22ZKLBQqaX", - "symbol": "SKUG", - "name": "SuK Social Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ckoys/crypto/main/logo.PNG", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HXiCWdAouMTC1rngKWTPWUpRftPut9fZtbWcGyazKmqq", - "symbol": "WWGT", - "name": "We Want Green Token", - "decimals": 9, - "logoURI": "https://scontent-iad3-1.xx.fbcdn.net/v/t39.30808-6/271996191_137942348645759_6859222909034109708_n.jpg?_nc_cat=111\u0026ccb=1-5\u0026_nc_sid=09cbfe\u0026_nc_ohc=k2HG4ZGkHsMAX96YtDP\u0026_nc_ht=scontent-iad3-1.xx\u0026oh=00_AT_KCZncS8TJAgade6-_NtFkZzJeXWe4VtIX_KaRY9Po3Q\u0026oe=61F21F1E" - }, - { - "chainId": 101, - "address": "F2CcdH4uXVL6vwutkFMtHWFaj87dYSh9WMWNqzsMmTUG", - "symbol": "ENC", - "name": "crypt", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/encryptedsolana/crypt/main/logo.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "2UHrXB1HPt3Law7PghjTR7nLwZwHxSfYwcxXEi6ZkEid", - "symbol": "SNOW", - "name": "SNOW", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2UHrXB1HPt3Law7PghjTR7nLwZwHxSfYwcxXEi6ZkEid/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "86mtV2nWTrheDGKjPnyomczehBLsLZrGjSMkTu4VWGqi", - "symbol": "SWPT", - "name": "softWEB Production Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Moerbius/SWPT/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4bgZ8g4cb4suy6NvCskZRrLRoTESzriVBZwuQBJirGVn", - "symbol": "FWT", - "name": "FACE WALLET TOKEN", - "decimals": 8, - "logoURI": "https://solana-bucket.fra1.digitaloceanspaces.com/4bgZ8g4cb4suy6NvCskZRrLRoTESzriVBZwuQBJirGVn.png", - "tags": ["community-token"], - "extensions": { - "website": "https://www.facewallet.com" - } - }, - { - "chainId": 101, - "address": "HniRa4Ho4GqCGpfK74fdBWJX5EQqDy5cwChJPds4E9pD", - "symbol": "KAT", - "name": "Kron Token", - "decimals": 0, - "logoURI": "https://user-images.githubusercontent.com/36153766/150657557-f93d2539-ab4f-4fb5-924a-ae5bb8979b7c.png", - "tags": ["stablecoin"] - }, - { - "chainId": 101, - "address": "3uqsNQk5ZmvakBviu5VaWB5SogtaJK8WwnpZ7B1XXafi", - "symbol": "KTD", - "name": "Kanye the Doyen", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/haroonmoh/doyentokenimages/main/Ye.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "BmpBH8Lks2eX8Mqmn9azpCjVHKFGDLg8PYUKMJReNVtA", - "symbol": "WSPY", - "name": "Wrapped SPY ETF", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/gitcompile/assets/main/logo.png", - "tags": ["tokenized-stock"], - "extensions": { - "website": "https://www.gitcompile.com" - } - }, - { - "chainId": 101, - "address": "E8eKZucB5DH8QaRAo36STQG2MnLSDkXroYeNYB6TaJAi", - "symbol": "MERF", - "name": "Merth Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jdmerth/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "53ArqdYtoNPGLiuNKPc3GxjAtnjun2VJXrcRT3azr4mX", - "symbol": "TTD", - "name": "Travis the Doyen", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/haroonmoh/doyentokenimages/main/travis.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "GPneEd9G1xunrPPicdRGfh8qmx7HPbVjqB7FfKHTC5CC", - "symbol": "BILL", - "name": "One Billion Club", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Cyborg360/Bill/master/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AB48g9PuY9CxLhrFVpTKG7hTR49rWAdbqxL6mQ7pQUTs", - "symbol": "HERRERA", - "name": "Herrera Family Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ElPiUpilas/crypto/main/HERRERA.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7h27ASEDcKfhSFqGCsS3VEhw33Ea7k9dBTSDWqpg72a7", - "symbol": "TaCO", - "name": "Tacoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/byzantinezer0/crypto/main/logo.PNG", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9orxGYrDdQzuNQdUGfHTVS2xWyGC6snFDf13eezaZCbv", - "symbol": "SHELL", - "name": "Shill City Shell", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9orxGYrDdQzuNQdUGfHTVS2xWyGC6snFDf13eezaZCbv/logo.png" - }, - { - "chainId": 103, - "address": "3LN9JTYGoxXZMuKvEke1ygcWGLvFksjfQJ35zBAZoKFA", - "symbol": "SHMRD", - "name": "Shmurda Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/marcus-kielman/SHMRD-Logo/main/Shmurda_Coin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "31Uicx93Wes8tXKH5hzaUXYAGUY9pFbHyAiatoNEaoaj", - "symbol": "JAXX", - "name": "Ruby Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/josephantoine85/rubytoken/main/Jaxyn%20Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DooD5TvzkhRJoKdQ6AMTUC2DmXYW27jouyALWfN7g5x3", - "symbol": "D00D00", - "name": "DOODOO BANK", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/guru1animo/doodoo/doodoo_trans.png", - "tags": ["UTILITY-TOKEN"] - }, - { - "chainId": 101, - "address": "CrwZumj357tPeBZeQFDtVeoJHFWQ75G17SXkwUQWwqY7", - "symbol": "BUCH", - "name": "Kombucha Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ca1ebd/kombucha/master/buch-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "A4MgR6ANAh79AE1csJjXiRV2vYDqP8wgSUUp28HpDEyo", - "symbol": "GIS", - "name": "GeoBit", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/benjaminschleider/crypto/main/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "ToeF3rovM5R7wMomNc8CZ2Pw78VyioUtrTrJs88MFh9", - "symbol": "SM", - "name": "SolMaps Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ToeF3rovM5R7wMomNc8CZ2Pw78VyioUtrTrJs88MFh9/logo.png", - "tags": ["social-token"], - "extensions": { - "discord": "https://discord.gg/gaBQAD2kHW", - "twitter": "https://twitter.com/SolMapsNFT" - } - }, - { - "chainId": 101, - "address": "58GVUcJtzaWHdnnJpyfP4YjfXhJpQuNtVpWDeU1H3ND9", - "symbol": "FLLW", - "name": "Fellowship Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/A-Ebel/Crypto/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GdCb8jMB6mhsoiQsSoSbt7YDQzxjx4whdPvzM131jFCC", - "symbol": "IBC", - "name": "IsaacBurgerCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GdCb8jMB6mhsoiQsSoSbt7YDQzxjx4whdPvzM131jFCC/logo.png" - }, - { - "chainId": 101, - "address": "HTdyVb5LsFCJjua8wypkp6eZb9KiG1oT1bnTn8WweouR", - "symbol": "BAM", - "name": "BAM Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HTdyVb5LsFCJjua8wypkp6eZb9KiG1oT1bnTn8WweouR/logo.png", - "tags": [ - "game-coin", - "game-fi-token", - "community-token", - "game-fi", - "games-token" - ] - }, - { - "chainId": 101, - "address": "6KwhtEzhZRLvpXFT1fYJ2f7gtUHLXYDFkKfp5Lza6nEq", - "symbol": "nFTS", - "name": "Not For That Stuff", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/uneektyreek/crypto/main/NFT_LOGO_1.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Hg3WNUcCqDaTUBGrJKihSoG8C6rckV4LHEGXQFCeEdwz", - "symbol": "SYLV", - "name": "Sylvestor Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/JimmyDangerGit/crypto/main/Sylvestor.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ToYSMpnt1VQ49sKFzyyL9zYfR9YR1VV1HyesynCii8i", - "symbol": "TOYS", - "name": "Mekatoys", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Mekatoys/Logo/main/%24TOYS.png", - "tags": ["utility-token", "NFT"], - "extensions": { - "discord": "https://discord.com/invite/Mekatoys", - "twitter": "https://twitter.com/mekatoysnft", - "website": "https://www.mekatoys.io/" - } - }, - { - "chainId": 101, - "address": "AEAXBnLErByhViskwaZWjzd8jVFj3S2ypNdURPHdYohx", - "symbol": "SOUL", - "name": "Soulless Citizen", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/AidanLau/crypto/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AGJT11SGhzckdJMVvELJWgYTNuczS4hAK3m1R1aCEj8A", - "symbol": "BIZZ", - "name": "Bizznaz", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/BlockchainWizard/Crypto/main/Bizz.png", - "tags": [ - "utility-token", - "social-token", - "nft-token", - "community", - "bizznaz" - ] - }, - { - "chainId": 101, - "address": "GJQ2X6f7DZDVDp8LvduoPjb3VTp5sbosDwjzkiFRDuJR", - "symbol": "HEMP", - "name": "Weed", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/BlockchainWizard/Crypto/main/Weed.png", - "tags": [ - "utility-token", - "social-token", - "nft-token", - "community", - "marijuana", - "weed", - "420", - "Cannabis" - ] - }, - { - "chainId": 101, - "address": "44YFuQRhwT2qTeZtG8YtLD4LVgZbwhmT4uWtetgA5jPx", - "symbol": "TGCN", - "name": "The Good Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/aberezovsky/TheGoodCoin/main/TGC_Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2Z6tPs57qvFgu9Nppbx3TbzKZyiyazt6j4N8tDqmvuu2", - "symbol": "SMR", - "name": "Sol Monke Rejects Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Z6tPs57qvFgu9Nppbx3TbzKZyiyazt6j4N8tDqmvuu2/whitelistmonke.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.com/invite/MonkeRejects", - "twitter": "https://twitter.com/MonkeRejects", - "website": "https://solmonkerejects.com" - } - }, - { - "chainId": 101, - "address": "3QvErzht4mtqGRzU3iDUYNdAKq8w2A2yGZWk6t9HS1DE", - "symbol": "STMK", - "name": "Star Monke Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/milorue/token-assets/master/starmonke.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.com/invite/MonkeRejects", - "twitter": "https://twitter.com/MonkeRejects", - "website": "https://solmonkerejects.com" - } - }, - { - "chainId": 101, - "address": "BwaXCdG2hsW2PTieBc14Ys92yKVGWSQSATY9juwkBEZo", - "symbol": "NGNC", - "name": "Nairacoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/spaco67/nairacoin/main/Screenshot_2022-01-15%20Logo%20Maker%20Used%20By%202%203%20Million%20Startups(4).png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EBJNRwAJGeiinx15QW3wYXkqDcr1tPnH8Cx7CgsQHUV8", - "symbol": "CLNX", - "name": "Linux Centos)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SquareandCompass/images/main/EBJNRwAJGeiinx15QW3wYXkqDcr1tPnH8Cx7CgsQHUV8.png", - "tags": [ - "wrapped", - "ethereum", - "stablecoin", - "development", - "social-token", - "utility-token", - "wrapped-sollet", - "community-token", - "Non-fungible-token" - ], - "extensions": { - "description": "Tokens that are designed to be spent within a certain blockchain ecosystem e.g. most of the SPL-Tokens, bridged from etherium,non-fungable tokens,asset wrapped tokens and for linux os community tokens.", - "telegram": "https://t.me/linuxtokens", - "twitter": "https://twitter.com/linuxtokens" - } - }, - { - "chainId": 101, - "address": "Bm5BpgMitt7AHiqBRrgxP2jzkz5g6WfgjS6CmpJ9hzC6", - "symbol": "REM", - "name": "Remy Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/cavacas/rembrandt-coin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "F94cGudbrJN3cfZH5EZ59zb1W29dtjYNuG8UkyNy98ur", - "symbol": "SNWL", - "name": "The Sneaky Devils White List Token", - "decimals": 0, - "logoURI": "https://cdn.discordapp.com/attachments/531224495676063764/934592775024959548/WLTOKENIMAGE.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "3qLZnBYKVv5vgsrTfofvgQN5Skn8cFoTfcBFsbx6WPbH", - "symbol": "GIZMO", - "name": "GizmoCoin", - "decimals": 0, - "logoURI": "https://github.com/jrhampton/crypto/blob/main/gizmo1.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GxGKMQmEL3PyU6cXgDYcoTYkRYx8aEwutU4GHhRMtADS", - "symbol": "WCGC", - "name": "Darryl Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Darryl-Shi/cryptologo/main/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "9dWPVXMGyNAssJXEVXs8CwRTCrb1bTxw2Dd6Y3fbkoCQ", - "symbol": "DMON", - "name": "Demon Time Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/abrarmusa/files/master/dmon.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/AD3wmAsT9g", - "twitter": "https://twitter.com/DemonTimeNFT", - "website": "https://demontime.co" - } - }, - { - "chainId": 101, - "address": "DsMXpQQo71K7iVmvDANz18NSWf1i2PCHqtmaksxLa228", - "symbol": "SVC", - "name": "Vikecoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Henrymarks1/vikecoin/main/Group_1.png", - "tags": ["utility-token", "SAMOHI"] - }, - { - "chainId": 101, - "address": "DexkjiHEdyA5wLJeKVNztnms1BFKKiEKFJQo2YmcUoEd", - "symbol": "CWSEED", - "name": "Cactus Seed Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DexkjiHEdyA5wLJeKVNztnms1BFKKiEKFJQo2YmcUoEd/logo.png", - "tags": ["CactusWorldNFT"], - "extensions": { - "twitter": "https://twitter.com/CactusWorldNFT" - } - }, - { - "chainId": 101, - "address": "GRg8MeUDZe9j7ZoAZRduMhpySfX3eb3crPdJ2s25hxn4", - "symbol": "LEOLO", - "name": "Leolo Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/proker84/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "WLWbeAUsTfvTvQf2iAVmagGxbzNMMS6pzXNiYGdnrj7", - "symbol": "PAWS", - "name": "Grampaw", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WLWbeAUsTfvTvQf2iAVmagGxbzNMMS6pzXNiYGdnrj7/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "discord": "https://discord.gg/FtyxbfmSMv", - "twitter": "https://twitter.com/GrampawNFT", - "website": "https://grampaw.art" - } - }, - { - "chainId": 101, - "address": "F4kwDkWDrybHpYUabQMntrM7Ejbo2aYNZqrWsHFvNrbv", - "symbol": "MPWL", - "name": "MP Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/F4kwDkWDrybHpYUabQMntrM7Ejbo2aYNZqrWsHFvNrbv/logo.png", - "tags": ["whitelist-token", "nfts"] - }, - { - "chainId": 101, - "address": "CQqo3KXd3HPLxvkTojCN6a4yhUKnHyVeY36iFKgv7Hug", - "symbol": "One", - "name": "OneCoin Joke", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/onecoin2022/Onecoin/main/one.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BrdJfqFi5UWKmKnwKp83Je7tygA3YEntLZZjeNY7qKgL", - "symbol": "TCB", - "name": "TecBeat Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SamuelMichaAssmann/TecBeat-Coin/master/tecbeat_blue.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GsBJWMp5UDJqBiaAvgQRoC5RyJhm125jZVo3oFV6zoa5", - "symbol": "DTAC", - "name": "Dark Terminal Access Coin", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GsBJWMp5UDJqBiaAvgQRoC5RyJhm125jZVo3oFV6zoa5/dtac-logo.png", - "tags": [ - "social-token", - "NFT", - "dark-terminal", - "DTAC", - "hacking", - "game", - "P2E", - "play-to-earn" - ], - "extensions": { - "discord": "https://discord.gg/8BTMHYXdVj", - "twitter": "https://twitter.com/DarkTerminalSol", - "website": "https://darkterminal.io" - } - }, - { - "chainId": 101, - "address": "8SsTzpQHNijvMPb5jv1ho9kTR2tqTrxHffXMc2jc9qhu", - "symbol": "DIGOU", - "name": "Digoucoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8SsTzpQHNijvMPb5jv1ho9kTR2tqTrxHffXMc2jc9qhu/logo.png", - "tags": ["social-token", "digouraye-token", "leroux"], - "extensions": { - "twitter": "https://twitter.com/Ezeit_" - } - }, - { - "chainId": 101, - "address": "8BryHGGaNCCR7MWa9JoX7mRU3ZyChHMabNFVNw5Dy52x", - "symbol": "PLNX", - "name": "Linux Parot)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SquareandCompass/images/main/8BryHGGaNCCR7MWa9JoX7mRU3ZyChHMabNFVNw5Dy52x.png", - "tags": [ - "wrapped", - "ethereum", - "stablecoin", - "development", - "social-token", - "utility-token", - "wrapped-sollet", - "community-token", - "Non-fungible-token" - ], - "extensions": { - "description": "Tokens that are designed to be spent within a certain blockchain ecosystem e.g. most of the SPL-Tokens, bridged from etherium,non-fungable tokens,asset wrapped tokens and for linux os community tokens.", - "telegram": "https://t.me/linuxtokens", - "twitter": "https://twitter.com/linuxtokens" - } - }, - { - "chainId": 101, - "address": "4GiJwhhdfR2h84bHnjikVM1e2qbpwVUiatFrc6YaZ2Qt", - "symbol": "FRENz", - "name": "Non-Fungi Frens Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/NFTzTrader/FRENz/main/FRENzlogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GGDi8o8suLZ5GxGesejhjKuA91hcGsh1rtaH38JigGr7", - "symbol": "JTNM", - "name": "Jotonama", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/JonTron23/Jotonama/main/icon.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DAPhv2RQyVHTaPXXUnjJNyDyEiikiJ7wumhYwT4tCrdX", - "symbol": "Altay", - "name": "Altay Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/AltayIbrhm/Crypto/main/logo%20(2).png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "33j6cnQUmef2tSbSvxn2U4uSBdKYSbRvzmJcPAvDEHoW", - "symbol": "LOCO", - "name": "ANYBODIES Fashion Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/33j6cnQUmef2tSbSvxn2U4uSBdKYSbRvzmJcPAvDEHoW/loco.png", - "tags": ["utility-token", "fashion", "wte", "wear-to-earn"], - "extensions": { - "discord": "https://discord.gg/anybodies", - "twitter": "https://twitter.com/anybodiesNFT", - "website": "https://anybodies.io/" - } - }, - { - "chainId": 101, - "address": "75A5D1VncynKoNDHmj8t2dHKM1RY66n3ouRU4uQzeVdZ", - "symbol": "BBT", - "name": "Baobab Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Bananut/Baobab-token/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2ykRbDPDjbgPSULbqpnj66H5uC2jKBVcCcqNrYsHCSHa", - "symbol": "SPAETI", - "name": "SPAETI Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/ArgoXNFT/spaeti_coin/main/SPAETI_COIN.png", - "tags": ["social-token", "utility-token", "NFT"] - }, - { - "chainId": 101, - "address": "GCBQDCUdAJLytVpdXFpG8snME7aPG8wFiBnruDuCvr52", - "symbol": "ALN", - "name": "Allan Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GCBQDCUdAJLytVpdXFpG8snME7aPG8wFiBnruDuCvr52/logo.png", - "tags": ["Testtoken"], - "extensions": { - "instagram": "https://www.instagram.com/allanv.26/" - } - }, - { - "chainId": 101, - "address": "GHn4S6s2PQAWs41MoQ4Zi3AZgdyUgV5JJvw3MWCKZCKR", - "symbol": "TJ", - "name": "TOM AND JERRY", - "decimals": 0, - "logoURI": "https://arweave.net/vUE9CepRJXgxSrP9BLsR48oDldqfg277ia7L4y1ELPM", - "tags": [ - "nft", - "fractionalized-nft", - "collectible-token", - "digital-collection" - ], - "extensions": { - "description": "I am your Tom and you are my Jerry...Let's get ready to fight" - } - }, - { - "chainId": 101, - "address": "6pHBFoc1nM9Jm6qQC8oFHZdq1wQD2vsjSJJkAzSTgKAt", - "symbol": "$VCTN", - "name": "Viccy Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ViccyCoin/viccycoin-logo/main/viccycoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EfwqTnpLrrRfLyTy6tNt95HjbDwJTxgqHx6x1vEBrMKK", - "symbol": "SEX", - "name": "Solexx", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/cripplemetimbrs/SPL-Tolken/main/Snapshot.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BoEFB6sNwUZCFbKNt279rAJrfzsy16YhX2X4wUKuecZe", - "symbol": "PEK", - "name": "PEK", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BoEFB6sNwUZCFbKNt279rAJrfzsy16YhX2X4wUKuecZe/logo.jpg", - "tags": ["social-token", "community-token"], - "extensions": { - "discord": "https://discord.gg/edFdkcG", - "twitter": "https://twitter.com/Likuello" - } - }, - { - "chainId": 101, - "address": "3HJDjYmKVnYSeX1ziFRC5jHD8TdEZeTQtuGeJE3Td58e", - "symbol": "OSAI", - "name": "OneScreenAI Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/onescreenai/osai-token/main/onescreen_logo_box.png", - "extensions": { - "website": "https://www.onescreen.ai/" - } - }, - { - "chainId": 101, - "address": "2xbWx7eSoxvtKq1fjikPx9kbLi3VX8DkUec7iwj3LEyW", - "symbol": "IS", - "name": "Inustart", - "decimals": 9, - "logoURI": "https://inustart.com/logo.png", - "tags": ["IDO", "ICO", "Protocol", "Presale", "Platform"], - "extensions": { - "telegram": "https://t.me/shibainusolana", - "twitter": "https://twitter.com/inu_solana", - "website": "https://inustart.com" - } - }, - { - "chainId": 101, - "address": "8mxTuo1SrCvGqyvCMyzuRmtReXsxbsRu446nsjDtCA4h", - "symbol": "Bldr", - "name": "Buildr", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/paxanon/buildr-logo/main/buildr/logo.png", - "tags": ["Buildr-token"] - }, - { - "chainId": 101, - "address": "4g2CUtwyvLZhxha38CpgGFiHMnSeQdKsLvQBLUtUf54S", - "symbol": "GUNT", - "name": "Gunterverse", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/Gunterverse/-Gunt-Token@main/tokenlogo.png", - "tags": ["utility-token", "Metaverse"], - "extensions": { - "discord": "https://discord.com/invite/pYsvQNWyxR", - "telegram": "https://t.me/gunterverse", - "twitter": "https://twitter.com/gunterverse", - "website": "https://gunterverse.io/" - } - }, - { - "chainId": 101, - "address": "3x4DKbtWYkw9SigBp7LbeT96MLw68wpWVC4ZUtCp1Gvz", - "symbol": "COF", - "name": "Codefin Coin", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3x4DKbtWYkw9SigBp7LbeT96MLw68wpWVC4ZUtCp1Gvz/logo.png", - "tags": ["utility-token", "incentive-token", "community-token"] - }, - { - "chainId": 101, - "address": "9pPoKimqEa5PSnnNU9GK5kC3ExQV4LxbbHER949yCU7F", - "symbol": "KYFX", - "name": "KyroGliFX", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/KyroGliFX/Crypto/main/Logo.png", - "tags": [ - "community-token", - "Gaming-token", - "Mu-Kingdom", - "nfts", - "Mu-Eternal", - "PlaytoEarn", - "Facebook" - ] - }, - { - "chainId": 101, - "address": "2e6SpNYYkYuqwYSnriuPfjyLC2shZ1LGn63F1xgE4Ros", - "symbol": "LSC", - "name": "Lucas Currency", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/96Lucas96/Lucas-Currency/main/Lucas_Currency.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8X8iBFCBD7wfo8YeGckoQyGN7pN6qtwivxKFqdfJsRie", - "symbol": "MTVT", - "name": "Metaversita", - "decimals": 10, - "logoURI": "https://raw.githubusercontent.com/metaversita/metaversitatoken/main/metaversitacoinlogo.png", - "tags": [ - "social-token", - "educational-token", - "exchange-token", - "utility-token", - "metaverse", - "NFT", - "Play2earn" - ] - }, - { - "chainId": 101, - "address": "4VqPtrkc3v78VFTyKm6V99HeTg5ixBqMhzMwP2rDVZgL", - "symbol": "AXOL", - "name": "AXOLOTL-CLUB", - "decimals": 0, - "logoURI": "https://cdn.jsdelivr.net/gh/david-nunes/axololt_logo@main/buff.png", - "tags": [ - "nft", - "fractionalized-nft", - "collectible-token", - "digital-collection" - ], - "extensions": { - "description": "For our loyal White-listers. Axolotl Club -- 3,333 Axolotls building a world on Solana." - } - }, - { - "chainId": 101, - "address": "53bKoYpdk83bVyR2tu9U7FguBAwoP7EQGfzBQwnmkRtG", - "symbol": "FX", - "name": "FaconX Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/cooltech90/crypto-faconx/main/faconx-coin.jpg", - "tags": ["social-token"], - "extensions": { - "instagram": "https://instagram.com/faconx_", - "linkedin": "https://linkedin.com/company/faconx", - "twitter": "https://twitter.com/faconxofficial", - "website": "https://faconx.com" - } - }, - { - "chainId": 101, - "address": "6CQuweCcPRWAaQNvnkvwWjrbxRe6MuVh5eFFVk8DVyM7", - "symbol": "RUMT", - "name": "Rum Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SeaRovers/rum_icon/main/Rum_Token.png", - "extensions": { - "twitter": "https://twitter.com/SeaRoversNFT", - "website": "https://searoversnft.com/" - } - }, - { - "chainId": 101, - "address": "2knGXmo5piJGC4oPfnsaPnKis4KgepmeiC8osFxQfTse", - "symbol": "RHLNX", - "name": "Linux Red Hat)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SquareandCompass/images/main/2knGXmo5piJGC4oPfnsaPnKis4KgepmeiC8osFxQfTse.png", - "tags": [ - "wrapped", - "ethereum", - "stablecoin", - "development", - "social-token", - "utility-token", - "wrapped-sollet", - "community-token", - "Non-fungible-token" - ], - "extensions": { - "description": "Tokens that are designed to be spent within a certain blockchain ecosystem e.g. most of the SPL-Tokens, bridged from etherium,non-fungable tokens,asset wrapped tokens and for linux os community tokens.", - "telegram": "https://t.me/linuxtokens", - "twitter": "https://twitter.com/linuxtokens" - } - }, - { - "chainId": 101, - "address": "37NPZJBQVSTXcyorSYoR537jQGmQ4svSpfBCJdMjUrV9", - "symbol": "DLNX", - "name": "Linux Debian)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SquareandCompass/images/main/37NPZJBQVSTXcyorSYoR537jQGmQ4svSpfBCJdMjUrV9.png", - "tags": [ - "wrapped", - "ethereum", - "stablecoin", - "development", - "social-token", - "utility-token", - "wrapped-sollet", - "community-token", - "Non-fungible-token" - ], - "extensions": { - "description": "Tokens that are designed to be spent within a certain blockchain ecosystem e.g. most of the SPL-Tokens, bridged from etherium,non-fungable tokens,asset wrapped tokens and for linux os community tokens.", - "telegram": "https://t.me/linuxtokens", - "twitter": "https://twitter.com/linuxtokens" - } - }, - { - "chainId": 101, - "address": "A2ngwBq2jFLziAGXS5aQgbBGrZvG5weGGJWeBaaVhfxu", - "symbol": "FLNX", - "name": "Linux FX)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SquareandCompass/images/main/A2ngwBq2jFLziAGXS5aQgbBGrZvG5weGGJWeBaaVhfxu.png", - "tags": [ - "wrapped", - "ethereum", - "stablecoin", - "development", - "social-token", - "utility-token", - "wrapped-sollet", - "community-token", - "Non-fungible-token" - ], - "extensions": { - "description": "Tokens that are designed to be spent within a certain blockchain ecosystem e.g. most of the SPL-Tokens, bridged from etherium,non-fungable tokens,asset wrapped tokens and for linux os community tokens.", - "telegram": "https://t.me/linuxtokens", - "twitter": "https://twitter.com/linuxtokens" - } - }, - { - "chainId": 101, - "address": "AQ542ndgurN8Dnef8JVQ6G3SAjQJjxAshS2n2fKXz6Tx", - "symbol": "OLNX", - "name": "Linux Oracle)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SquareandCompass/images/main/AQ542ndgurN8Dnef8JVQ6G3SAjQJjxAshS2n2fKXz6Tx.png", - "tags": [ - "wrapped", - "ethereum", - "stablecoin", - "development", - "social-token", - "utility-token", - "wrapped-sollet", - "community-token", - "Non-fungible-token" - ], - "extensions": { - "description": "Tokens that are designed to be spent within a certain blockchain ecosystem e.g. most of the SPL-Tokens, bridged from etherium,non-fungable tokens,asset wrapped tokens and for linux os community tokens.", - "telegram": "https://t.me/linuxtokens", - "twitter": "https://twitter.com/linuxtokens" - } - }, - { - "chainId": 101, - "address": "Bo4ZraLUGdtpf65cuLoJaMQVoUBThmaqtEnnHXHsajh7", - "symbol": "DADPT", - "name": "DadPoint", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/DadMasterFlex/DadPoint/main/Logopit_1642966961778.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6RUV3rfx3q4n7UEJcARs9gCibB3TD5pgrxha1LmQwptV", - "symbol": "WLZVC", - "name": "Zombieverse Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Cvzwk5dvHu67n2b4BDMNQ7VTQ4G2XRQ6hN3uDBPmD9vt/logo.png", - "tags": ["WriteToEarn", "Zombieverse", "Whitelist", "MintPass"], - "extensions": { - "discord": "https://discord.com/invite/Fu5zxU6Y8X", - "instagram": "https://www.instagram.com/zombieversecomics/", - "twitter": "https://twitter.com/ZombVerseNFT", - "website": "https://www.zombieversecomics.com/" - } - }, - { - "chainId": 101, - "address": "7Cs28oipyufQqvGNVpiJLT8CoUsWKw4gHxpaCGcLBQn8", - "symbol": "CONC", - "name": "CONCOIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/pr0con/CONCOIN/main/eight-ball.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "E8bT8g4so2zPnEoragg1wLCz29VXddqjf1acoG5YwTJA", - "symbol": "BIBLE", - "name": "THE HOLY BIBLE", - "decimals": 0, - "logoURI": "https://arweave.net/99YuLHYGxRGxLHLsX_z8WuzXRAPHZ0YAY_3B3MqesqE", - "tags": [ - "nft", - "fractionalized-nft", - "collectible-token", - "digital-collection", - "bible-on-blockchain" - ], - "extensions": { - "animationUrl": "https://arweave.net/V6BCeZcME8rVPXkCVSzad0lJKvWf7Az8gV4cwE-3AhE", - "description": "World's first Bible launched on Solana's blockchain. Own a copy of the Bible on blockchain and keep it alive forever" - } - }, - { - "chainId": 101, - "address": "4rii94eJ9oh2rPNQY4y11gz4g7CtTfH9pULqFoCHFeCC", - "symbol": "REO", - "name": "REO", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/REO-TOKEN/REO/a5ad68159e7b6c29ccfa5c460a075b0f7aa02382/REO_TOKEN_LOGO.png", - "tags": ["energy-token", "community-token", "recycling-token"], - "extensions": { - "instagram": "https://www.instagram.com/reo_token", - "twitter": "https://twitter.com/reotoken", - "website": "https://reotoken.com/" - } - }, - { - "chainId": 101, - "address": "4bFiA3N5VUFRYXr66MPozDRYfvBJzoyAmMNYqYMuFZJw", - "symbol": "WTL", - "name": "WHTLST", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4bFiA3N5VUFRYXr66MPozDRYfvBJzoyAmMNYqYMuFZJw/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3jtXs6MeP2jes5WWcBPgD5W4iV9ieVnrfHW7tCCpY36j", - "symbol": "BUBS", - "name": "Bubbers", - "decimals": 0, - "logoURI": "https://github.com/Bubbers-boi/Crypto-Token/blob/main/bubberToken-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6zeVZMot1At2fBBSta4yfyHVX1FCS6ZHBFZzRY25A9wJ", - "symbol": "RKTC", - "name": "Rocket Chips", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Rocket-chips/crypto/main/goldrocketchip_55.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AhiH3QkPCZY3VJZjgwheTUTTvyHCDedYRumbg6Jdnw5R", - "symbol": "NIGHT", - "name": "Nightlife Coin", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AhiH3QkPCZY3VJZjgwheTUTTvyHCDedYRumbg6Jdnw5R/logo.png", - "tags": [ - "utility-token", - "community-token", - "meme-token", - "governance-token" - ], - "extensions": { - "description": "The NightLife premier token to be used with the Nightlife NFT platform.", - "website": "http://www.nightlifecoins.com" - } - }, - { - "chainId": 101, - "address": "9krdcPB9gzGZk3QxqJi6AEAdyVt1RiDmQKin3im29DCJ", - "symbol": "CHILL", - "name": "Chilled Apes Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9krdcPB9gzGZk3QxqJi6AEAdyVt1RiDmQKin3im29DCJ/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/ChilledApes", - "website": "https://www.chilledapes.com/" - } - }, - { - "chainId": 101, - "address": "D9WeU6xNgvcitUBD2X7Uuv3SQnDmXihWvieqwicU7YFf", - "symbol": "SOLM", - "name": "SOLAMA", - "decimals": 8, - "logoURI": "https://cdn.jsdelivr.net/gh/viniciuskloppel/solama-token/SOLAMA-TOKEN.png", - "tags": ["Solama", "Token", "Degen"] - }, - { - "chainId": 101, - "address": "USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX", - "symbol": "USDH", - "name": "USDH Hubble Stablecoin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX/usdh.svg", - "tags": ["stablecoin"], - "extensions": { - "coingeckoId": "usdh", - "discord": "https://discord.gg/d44A8WvK", - "twitter": "https://twitter.com/hubbleprotocol", - "website": "https://hubbleprotocol.io/" - } - }, - { - "chainId": 101, - "address": "3AvE8DJ9ErbxeRfx8dfL5if3iFpTi11FugarWzqmybwn", - "symbol": "LADY", - "name": "LADY VALENTINE", - "decimals": 0, - "logoURI": "https://arweave.net/TdW4_c2Q7nIqkofKqULS94zVSEyd1B9V5GHs06s3JPA", - "tags": [ - "nft", - "fractionalized-nft", - "collectible-token", - "digital-collection", - "Lady-Valentine" - ], - "extensions": { - "description": "You are the miracle of my life, my Lady Valentine", - "website": "https://www.nftsolanagallery.com/" - } - }, - { - "chainId": 101, - "address": "8WUriNxrgMJMKWrbrKiP8DkKUgoduR2fswBgAcJo9Uag", - "symbol": "YET", - "name": "SolaYeti", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8WUriNxrgMJMKWrbrKiP8DkKUgoduR2fswBgAcJo9Uag/Icon.png", - "tags": ["nfts"], - "extensions": { - "website": "https://solayeti.com/" - } - }, - { - "chainId": 101, - "address": "G63oH5BhHFe4sGLuUmGge9K1p6Fonc5UkP4oyRqMdEaP", - "symbol": "CLC", - "name": "Clutch Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Nordstrm/Crypto/main/LOGOCOIN.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "J4zNZR8Qzo6tuNm82oUKvq3FPTpKXEQxPh3EK3xDpmEZ", - "symbol": "DUKE", - "name": "DukePe", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/smmdsa/dukep/main/dukep.jpeg", - "tags": ["game-token"] - }, - { - "chainId": 101, - "address": "7N4c1HY6iYFo6Z5eAQUzBK3TpAJMRa5nNBvL5Mg6Zpb8", - "symbol": "OHHH", - "name": "Distract", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/SMHCrypto/Crypto/main/Distract.png", - "tags": ["meme-token"] - }, - { - "chainId": 101, - "address": "XK6KzWPZJ4u8gYWmZrqdb3yYj8HocPLxctU5T7ptKTk", - "symbol": "TMLELM", - "name": "Tamil Eelam", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/v2sxn/crypto/main/5E585811-7181-454F-AE04-AE40A1A28BFA.JPG", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EGiWZhNk3vUNJr35MbL2tY5YD6D81VVZghR2LgEFyXZh", - "symbol": "BIT", - "name": "BIT Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Gtj6NZHgMZ7QHg8PDN6izEn4GjVoX8yFLv4ESNKsWb62/BT-logo.png", - "tags": ["utility-token", "Game-Token"], - "extensions": { - "discord": "https://discord.gg/bitmon", - "twitter": "https://twitter.com/BitmonWorld", - "website": "https://bitmon.io/" - } - }, - { - "chainId": 101, - "address": "DzrMBR2XTedpZShMUjkgfTvc9Vm4qd6JqaRFraAokWYN", - "symbol": "BWT", - "name": "Balloonsville Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DzrMBR2XTedpZShMUjkgfTvc9Vm4qd6JqaRFraAokWYN/Logo.png", - "tags": ["whitelist-token"], - "extensions": { - "description": "This token gives you the accessibility to mint 1 guaranteed Balloonsville NFT via the whitelisted presale.", - "twitter": "https://twitter.com/blloonsville", - "website": "https://balloonsville.io/" - } - }, - { - "chainId": 101, - "address": "asoxKG6KdRq8nqQ9ADJsYmBNyFYFwB9zp9TXPfgkVhn", - "symbol": "ASO", - "name": "artmuseo", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/asoxKG6KdRq8nqQ9ADJsYmBNyFYFwB9zp9TXPfgkVhn/logo.svg", - "extensions": { - "twitter": "https://twitter.com/artmuseo", - "website": "https://artmuseo.com" - } - }, - { - "chainId": 101, - "address": "9djyMuBtdUSo5xW7exfjwsuob5WknqJgf2muvGHuLxee", - "symbol": "PTN-USDC", - "name": "PTN-USDC LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9djyMuBtdUSo5xW7exfjwsuob5WknqJgf2muvGHuLxee/logo.png", - "tags": ["lp-token"] - }, - { - "chainId": 101, - "address": "7Xh9ZFcDkKLqW28WgsFmEJ8mxqjzEKEArqftakC3gMUU", - "symbol": "METOO", - "name": "ME TOO COMMUNITY", - "decimals": 0, - "logoURI": "https://arweave.net/-MYQEJnrWu0t1MGd5qjWOzFU_zWqBvtOO3V8BKWJtXs", - "tags": [ - "nft", - "fractionalized-nft", - "collectible-token", - "digital-collection", - "Me-too" - ], - "extensions": { - "description": "Uprising is the only way out of gross inequality" - } - }, - { - "chainId": 101, - "address": "jWq7FELvM46QY7QPC1DDdjx1fmjgfga5v3YkYDpiavb", - "symbol": "SWLA", - "name": "SwalaCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jholmes1209/CryptoShark/main/SWLACOIN.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8Vke7fkMukNpBB12mvgbwzwmsx6USpd5UMt5uQjhGQJ3", - "symbol": "NJOS", - "name": "JOSLIN COIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Josser02/Josser02/main/crypto.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CesPoby8NEUXy2tzx5feb2Fp7jHnimyDcfHStDt1pLDb", - "symbol": "MARIO", - "name": "SUPER MARIO", - "decimals": 0, - "logoURI": "https://arweave.net/XbS4N_rj0rv7vyWtWZxgHMylIfpxqxZ0QQkPlusPO3U", - "tags": [ - "nft", - "fractionalized-nft", - "collectible-token", - "digital-collection", - "super-mario" - ], - "extensions": { - "description": "Life is a game, kid! It all depends on how you play!" - } - }, - { - "chainId": 101, - "address": "Fc5AWmJtCx7ktmyr8UneM9LrDTtazG7SqixYFBhFdf9X", - "symbol": "SFGT", - "name": "Second Foundation Graphics Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SegFun01/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EKH1TkPAnbGsDuGAy6yUJdqUcHRjCbbEjgp5KBVDVj8e", - "symbol": "BUTTERS", - "name": "BUTTERS STOTCH", - "decimals": 0, - "logoURI": "https://arweave.net/A7GWqGxhsi4U0MgVrBbaNBOO3GVXEqeFfvWastqxRGg", - "tags": [ - "nft", - "fractionalized-nft", - "collectible-token", - "digital-collection", - "butters-stotch" - ], - "extensions": { - "description": "Lu-lu-lu, I've got some apples", - "twitter": "https://twitter.com/nftgalleryshop" - } - }, - { - "chainId": 101, - "address": "BcY62xPtPgVLo7vLpxkZPmYM9sGZZRAjo2hmJYSXZJ2u", - "symbol": "IMPI", - "name": "Impi Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BcY62xPtPgVLo7vLpxkZPmYM9sGZZRAjo2hmJYSXZJ2u/logo.png", - "tags": [ - "social-token", - "utility-token", - "nft", - "meme-token", - "community-token", - "trading-token" - ], - "extensions": { - "discord": "https://discord.gg/YDY3brHm", - "facebook": "https://www.facebook.com/impikisogloo", - "instagram": "https://www.instagram.com/impi_token", - "telegram": "https://t.me/traderstoolboxtm", - "twitter": "https://twitter.com/impitoken", - "website": "https://impi-nft.traderstoolbox.uk" - } - }, - { - "chainId": 101, - "address": "EGHRD8VSdRVo9akHSxJT7f6S1tdskNSwQ39HEN4k17yg", - "symbol": "KIS", - "name": "Kisogloo Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EGHRD8VSdRVo9akHSxJT7f6S1tdskNSwQ39HEN4k17yg/logo.png", - "tags": [ - "social-token", - "utility-token", - "nft", - "meme-token", - "community-token", - "trading-token" - ], - "extensions": { - "discord": "https://discord.gg/JrErsKuc", - "facebook": "https://www.facebook.com/latinexplosivepage", - "instagram": "https://www.instagram.com/jason.kisogloo", - "twitter": "https://twitter.com/jasonkisogloo", - "website": "https://linktr.ee/LordJason" - } - }, - { - "chainId": 101, - "address": "JDcR8BL5F4vmERKMQ8oyqAME8BpktgJM9BmCkiber3Qa", - "symbol": "XDI", - "name": "Xplosive Dance Inc Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/JDcR8BL5F4vmERKMQ8oyqAME8BpktgJM9BmCkiber3Qa/logo.png", - "tags": [ - "social-token", - "utility-token", - "nft", - "meme-token", - "community-token", - "trading-token" - ], - "extensions": { - "discord": "https://discord.gg/FEQTy75U", - "facebook": "https://www.facebook.com/xplosivedanceincpage", - "instagram": "https://www.instagram.com/xplosivedanceinc", - "twitter": "https://twitter.com/xplosivedance", - "website": "https://www.xplosivedanceinc.com/" - } - }, - { - "chainId": 101, - "address": "8VmgCo3wzX32bCYm1oc14bVTcAXLhcTSBBLkF9BRs172", - "symbol": "TTTM", - "name": "Traders Toolbox Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8VmgCo3wzX32bCYm1oc14bVTcAXLhcTSBBLkF9BRs172/logo.png", - "tags": [ - "social-token", - "utility-token", - "nft", - "meme-token", - "community-token", - "trading-token" - ], - "extensions": { - "discord": "https://discord.gg/C2hBncba", - "facebook": "https://www.facebook.com/traderstoolboxMT5", - "instagram": "https://www.instagram.com/traderstoolboxmt5", - "telegram": "https://t.me/traderstoolboxtm", - "twitter": "https://twitter.com/traders_toolbox", - "website": "https://traderstoolbox.uk/" - } - }, - { - "chainId": 101, - "address": "FYfbMps5wjKfxWmQivyp3Ws79SRrxpgqEvfdEQzxnDhr", - "symbol": "DDT", - "name": "Dancer Dates Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FYfbMps5wjKfxWmQivyp3Ws79SRrxpgqEvfdEQzxnDhr/logo.png", - "tags": [ - "social-token", - "utility-token", - "nft", - "meme-token", - "community-token" - ], - "extensions": { - "facebook": "https://www.facebook.com/dancerdatespage", - "instagram": "https://www.instagram.com/dancerdates", - "twitter": "https://twitter.com/dancerdates", - "website": "https://www.dancerdates.net/" - } - }, - { - "chainId": 101, - "address": "BQ89saYHbWrtURbgaWJpsXXctRQXX1DeC7FsYmejiUNF", - "symbol": "LIFE", - "name": "Life Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BQ89saYHbWrtURbgaWJpsXXctRQXX1DeC7FsYmejiUNF/logo.png", - "tags": [ - "social-token", - "utility-token", - "nft", - "meme-token", - "community-token" - ], - "extensions": { - "facebook": "https://www.facebook.com/splashoflifetm", - "instagram": "https://www.instagram.com/splashof.life", - "twitter": "https://twitter.com/splashoflifetm", - "website": "https://www.splashof.life/" - } - }, - { - "chainId": 101, - "address": "Ab274upSKBwBLUWnE2BHZrhcu8ErpuSbJNe38YEVBbom", - "symbol": "JCHR", - "name": "J_CHAR_ Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/j-devx/crypto/main/logo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "F2NV9QNwQVTb16uRn2691bECUUFFATdyV3gTGcRPSNf1", - "symbol": "PINKPANTY", - "name": "Katie Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/katieandlaura/solana/main/katiecoinpink.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "93QRj9CQyMKjFSiC4UoQ2opt8A2JAUSD99eNuMgG1bg5", - "symbol": "LVN", - "name": "Lovin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/lvn-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3EyBARkMEPiCTkmGtKshgcyrk4K5owbaxSj3v9K8CJp9", - "symbol": "CNFD", - "name": "Confidence", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/cnfd-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "96ydjV6qPSZvrF5vVFYDh66md8XzY6kmbtCY66cYdLQX", - "symbol": "MOT", - "name": "Motivation", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/mot-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8z9gGpU5nUxvDpRDBMX7WfP2nTgLLA61gK8Yo1mUdN3W", - "symbol": "SOM", - "name": "Something", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/som-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3SeAK1jJ2TfBSg8wGVjy3bLeYPiKgTrK84sLKrMRcfGY", - "symbol": "GNS", - "name": "Good News", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/gns-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "A3G1w2mBTFhWXvVXin72UR8Q3MqJ4PqkSX3bVgq92ZGQ", - "symbol": "LCK", - "name": "Luck", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/lck-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3TkFJvaZKSTQUFSFqDym8Eoq7oTqPPus66StZV8nLJsn", - "symbol": "RELX", - "name": "Relaxation", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/relx-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "J67EndxpfUkTh1uxh9vtzn4CBQFS7L6YjznpFK7Gv8XA", - "symbol": "FOOD", - "name": "Food", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/food-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GRXC2wfayPY3X5zHvfe6DNwYcg2HTqGDaGQoNLZ5nQL5", - "symbol": "PROM", - "name": "Promise", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/prom-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5NXxnQJxJqCwc4u7qZKK2uq1SKWRVkvXgSo49h7wnaSp", - "symbol": "TRVL", - "name": "Travel", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/trvl-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3A4DLGNZN4W2KxMYXhswjSsvNDQJ2sfbn5aTBP8sc1n2", - "symbol": "DREM", - "name": "Dream", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/drem-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6MtBCmYesdsyUGyJ2Xe6sDYjTMNWdAEMWdnzioN2enov", - "symbol": "ANSR", - "name": "Answer", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/ansr-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "VcfTkfUYBeFeTQ7NGbdWxcy1whTTM8RG1m85p24RQ1P", - "symbol": "FRND", - "name": "Friend", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/frnd-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CszE2EabvyV3aLSKC9vcqabqAu4cVTMNjbAGMiK8qRmh", - "symbol": "THX", - "name": "Thank", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/thx-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5dovqGWg1bA7A44q48Rho3cUgt5JBUj9yFdKo6RggQN9", - "symbol": "SLTN", - "name": "Solution", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/sltn-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FymoFdxDxoByBDjHSsBcKaaBpcKPLZJG1wnddEhnP6sX", - "symbol": "IDEA", - "name": "Idea", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/idea-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5W5YhE2XAyUdt5o96gDTDbwe3LfsezmmrevXsUXGCJyo", - "symbol": "XCITE", - "name": "Excitement", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/xcite-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Ein7MYuyEsMC2e9SPk3TnBPxjT96F62wD7wFWPd7f6cp", - "symbol": "HELP", - "name": "Help", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/help-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DEdQULP5oXC11GD3XXEYz4sbrjs7kUN2RdoMoswiuGQo", - "symbol": "LIF", - "name": "Life", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/lif-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2TwVRWEtBEb5hqGE6n4xCLojsYbdxrGkdjBKABGbCkDq", - "symbol": "CCNZ", - "name": "Creative Coinz", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/ccnz-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EoqJXTxCc67i18B7nwWs59RBkTe8rStTreRhCCq1eVTH", - "symbol": "DAU", - "name": "dauqu", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/dauqu/dauqu/main/dauqu.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HmLbfdwGdbdtKaVC43G8oYJM8c5VLm7KwRZUKxFLx5v", - "symbol": "PJCT", - "name": "Project", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/projectjewels/projectcrypto/main/Unknown.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HASXzXvKKoZE1rSMn3dr78uATgLEZoJQ7NHMKfaivDrm", - "symbol": "MEOWT", - "name": "MEOW Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/LinuxMeow/meow-token/master/meowtoken.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "E7vVVWcdUFxGJ494C2W1AnbcYLzf5GJTWJzetCjzA7A7", - "symbol": "DAGO-WL", - "name": "DagoDAO Whitelist Token", - "decimals": 0, - "logoURI": "https://arweave.net/juXE_DoTwZng2BK9QN6XdypWq5RscNKoxcKFUEQQ2Ho", - "tags": ["whitelist-token", "nfts"], - "extensions": { - "website": "https://www.kekaisarandago.com/" - } - }, - { - "chainId": 101, - "address": "goonVPLC3DARhntpoE56nrsybwMnP76St5JoywzCmMw", - "symbol": "GOON", - "name": "Gooney Toons Droplet", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/goonVPLC3DARhntpoE56nrsybwMnP76St5JoywzCmMw/logo.png", - "tags": ["utility-token", "solvent-droplet"], - "extensions": { - "discord": "https://discord.gg/thK8BCtQbM", - "github": "https://github.com/solventprotocol", - "medium": "https://medium.com/@solventprotocol", - "serumV3Usdc": "B8L7mjHL3xm6iYo8n7r7SigvFYqg6pwQdJdeGSuPQTfD", - "telegram": "https://t.me/solventprotocol", - "twitter": "https://twitter.com/solventprotocol", - "website": "https://solvent.xyz" - } - }, - { - "chainId": 101, - "address": "AX5A1pVHMq12uFFhAPmsyLXw4KDiPRULxrejjeoX9CSp", - "symbol": "DBWT", - "name": "Dead Bros WL Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/sungminkim01/token-list/main/assets/mainnet/AX5A1pVHMq12uFFhAPmsyLXw4KDiPRULxrejjeoX9CSp/logo.jpg", - "tags": ["DeadBros", "DBT", "NFT", "Whitelist", "Zombie", "Undead"], - "extensions": { - "twitter": "https://twitter.com/DeadBros666" - } - }, - { - "chainId": 101, - "address": "J8MmCBGGC2X5YAzjE4Md778d3zAAxmcJBrX8FqMmeqkh", - "symbol": "WOCH", - "name": "Whoochie Token", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/xxmafiaxxx/doobietokens/main/whoochie.png", - "extensions": { - "description": "The Whoochie Token", - "twitter": "https://twitter.com/woochiewobbler", - "website": "https://onlyfans.com/missusblu" - } - }, - { - "chainId": 101, - "address": "8htWTajB8ZeDfSuC6r3YLottcyfSE3cQqXsrd4V8CZMQ", - "symbol": "Bldr360", - "name": "Buildr 360", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/paxanon/buildr-logo/main/buildr360/logo.png", - "tags": ["buildr360-token"] - }, - { - "chainId": 101, - "address": "BsjdZPmJn4ywzPYMeeWPMf7ZzfDUnC4iKbsRmo1Ub4Cp", - "symbol": "NRQ", - "name": "Norqoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/cryptodog912/crypto/main/logo.png", - "tags": ["utility-token", "community-token"] - }, - { - "chainId": 101, - "address": "2pyuMiUqRrBSXvg8wRxNkuhaV4iJa4i8aGp5t6FLHGQh", - "symbol": "HKSM", - "name": "HKSM Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/pvella/HKSM-Token/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8qhJSbyy3akGKoPdnX6TRiWZn2b8ysF5XbcUmzxDPZrv", - "symbol": "LXG", - "name": "LINUXGOLD", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/linuxgold78/logo/main/linux_PNG42%20(1).png", - "tags": ["linux-token", "gold-token", "info-token"] - }, - { - "chainId": 101, - "address": "GzMYkPvEccCxn7bvZh8Jhz87GhrASKhVadn9LHE4zVDy", - "symbol": "CAPRA", - "name": "CAPRA Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GzMYkPvEccCxn7bvZh8Jhz87GhrASKhVadn9LHE4zVDy/logo.png", - "tags": ["whitelist-token", "governance-token", "community-token"], - "extensions": { - "website": "https://spacegoatsonacid.com/" - } - }, - { - "chainId": 101, - "address": "9ndWJZRvFN36rJPd6Xe4HzWjFrEKUG4RFVFyyaCttuaX", - "symbol": "DASH", - "name": "Dashsnipe WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9ndWJZRvFN36rJPd6Xe4HzWjFrEKUG4RFVFyyaCttuaX/logo.jpg", - "tags": ["whitelist-token", "governance-token", "community-token"], - "extensions": { - "website": "https://twitter.com/DashsnipeSOL" - } - }, - { - "chainId": 102, - "address": "e33pRtp3gj8q47yKYbUPYWCh6CibNSq5Q5VqrNv2Umo", - "symbol": "MALL", - "name": "MetaMalls (Testnet)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/c-spider/Solana-TestToken/main/icon.png", - "tags": ["social-token"], - "extensions": { - "telegram": "https://t.me/aiLikeSpider", - "website": "https://metamalls.io" - } - }, - { - "chainId": 101, - "address": "DrhQmuUWbAmszSVagzUcJfQhLMgL3gWtineYbQ6drzRM", - "symbol": "DON", - "name": "Don Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/game09488/crypto/main/logo.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "2xZzszs2FeTffckT5WhvHXzuXbM94bvp31vC7BRdXWhE", - "symbol": "aeTRYB", - "name": "Wrapped TRYB (Allbridge from Ethereum)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2xZzszs2FeTffckT5WhvHXzuXbM94bvp31vC7BRdXWhE/logo.png" - }, - { - "chainId": 101, - "address": "5NfKc4tVAWn94qg35SU5XcZAT7dt7n4YLLwKB1kWmEf8", - "symbol": "SMC", - "name": "SmolCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Bugzum/Crypto/main/ree.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8dPFrSN4oVnMFZoAYnoTvufz6cFerJAw32aiWCtBvXWy", - "symbol": "SMT", - "name": "Smart Money Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/darek4you/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "hapiymAn1QKih3vHmqRQyUWLSCbMjRukuRobAQ66Qj6", - "symbol": "HAPI", - "name": "HAPI", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/hapiymAn1QKih3vHmqRQyUWLSCbMjRukuRobAQ66Qj6/logo.png", - "tags": ["utility-token"], - "extensions": { - "coingeckoId": "hapi", - "github": "https://github.com/HAPIprotocol/HAPI/", - "medium": "https://medium.com/i-am-hapi", - "telegram": "https://t.me/hapiHF", - "twitter": "https://twitter.com/i_am_hapi_one", - "website": "https://hapi.one" - } - }, - { - "chainId": 101, - "address": "GUHRLLpnD6eCh7PFf6xH55ZX4c3T7WA5psjww5h6uneH", - "symbol": "SMELL", - "name": "SmellingFart", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/al3x2508/SmellingFart/main/logo.png", - "tags": ["social-token"], - "extensions": { - "discord": "https://discord.link/SmellingFart", - "twitter": "https://twitter.com/SmellingFart", - "youtube": "https://www.youtube.com/channel/UCjwpAfoBXQdE4CW3LzYcwmQ" - } - }, - { - "chainId": 101, - "address": "H4Nsy2sUHBXVhTRSjn2Jvy3cfZ64YJUa2HxjfJUgZHNg", - "symbol": "DNB", - "name": "dNb Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Dani-Brasoveanu/crypto/main/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://bigbrothers.ro" - } - }, - { - "chainId": 101, - "address": "61xuVm4bAG9SjR7ADE5eR1oAYyQffFeRJi26F4EKfe7R", - "symbol": "CHC", - "name": "Choose Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/lthull/choose-coin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6wvzrS9LdKTCF5vb3VMA96c8s5syDR16nWD3d5MDjBQr", - "symbol": "NETOFF", - "name": "netOFF Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mef123/netoff-token/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CxV98Qj1mtS1Et9arBmbPC1wamtxe8kU9qGEfd16BqDt", - "symbol": "YTT", - "name": "YattaCoinCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/gerpdev/yatta-coin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DfcZGTPbPsrauFXzRnnCjc3B8u2ZDQCSFvKRKDDdAvt4", - "symbol": "STAN", - "name": "STAN MARSH", - "decimals": 0, - "logoURI": "https://arweave.net/U1XpUwL3Awpbq9EKpEHd1bzAP1t80LE7ul164jW-MtQ", - "tags": [ - "nft", - "fractionalized-nft", - "collectible-token", - "digital-collection", - "stan-marsh" - ], - "extensions": { - "description": "I think it is the nicest hat I've ever known" - } - }, - { - "chainId": 101, - "address": "5jK8Vdu4pB6Fv7WNXfzgoCZnyBUa58KHNjik6K4ovMbL", - "symbol": "KCOIN", - "name": "KAVALAN COIN", - "decimals": 0, - "logoURI": "https://github.com/yang9515181/Crypto/blob/main/logo_Kavalan-2.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7cEfTi1cwRUTZeqqZAYhLKFLktMJv81YtfFRxaUitpvd", - "symbol": "OLV", - "name": "Olvency", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Olvency/Olvency/main/lovency-circle-2.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BhWj9CvMqWJxoCcYV9P66u7aPB4aZ9WTWEDfEAt62hJ9", - "symbol": "BDC", - "name": "Bangla Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/shuvoGit50/Bangla-Coin-BDC-/main/logo.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "7xFkazheBr5DXAPnsCxX1TnyuDYhXjHrvf9aEgdJnY8X", - "symbol": "WOSFT", - "name": "WOS Free Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/deadzer0/wos-logo/main/logo.png" - }, - { - "chainId": 101, - "address": "9By8YbnSZc2xNhSy6SE2mDpb9X9vF7qArp1jshawvd3d", - "symbol": "ZNT", - "name": "ZerberusNetworkToken", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Luapix/ZerberusNetwork/main/bbe13b80b4804217801a654a158980b7.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "F52RcGHrdGiSfKSXmoWd5YBAYsmkftmBWhbjSD5DDq6o", - "symbol": "STONKIS", - "name": "Stonkis coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/saltvatten/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9WR2z4LSgWtr7nyfzmGaH5T8dBqJtCJbea62m6ynQ5zL", - "symbol": "NILAISH", - "name": "Nilan Aish Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9WR2z4LSgWtr7nyfzmGaH5T8dBqJtCJbea62m6ynQ5zL/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Bk7BtQVbzh3aqHS8XntmA6xXZZYwBemqscYbWLD4VbXU", - "symbol": "GHSTX", - "name": "GHOST OPTIONS", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Bk7BtQVbzh3aqHS8XntmA6xXZZYwBemqscYbWLD4VbXU/logo.png", - "extensions": { - "website": "https://ghostoptions.io/" - } - }, - { - "chainId": 101, - "address": "CwpXvAZDNK8n6FVqHxdATvgvSLBfwkm5AJqdDTCT4L38", - "symbol": "SM", - "name": "Solana Miners WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CwpXvAZDNK8n6FVqHxdATvgvSLBfwkm5AJqdDTCT4L38/logo.png", - "extensions": { - "discord": "https://discord.com/invite/JDTqAGFnNd", - "twitter": "https://twitter.com/SolanaMiners", - "website": "https://solanaminers.com" - } - }, - { - "chainId": 101, - "address": "FwwxaPRAEBx7Bp98goCYknGK4NLmZSJfQR16vJzJVrr7", - "symbol": "DBT", - "name": "DatBug", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/azaek/DatBugToken/7679d6daa5272585b57352a084b85dd05d151799/DBT.png" - }, - { - "chainId": 101, - "address": "iV4DSeDNjWasKVywvu8Mp4mMc2Te7uioGEWrfTnAQxF", - "symbol": "SOULS", - "name": "HornsvsHalos", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/hornsvshalos/token/main/soulstoken.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DumWh3LbSTP7iE9oRSLeptfjK3NoJLkWXTgHGDqybunZ", - "symbol": "CRAP", - "name": "Crap", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/crap-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DpbsGSHBZQrKkvxkFU8snmx6KzFK7RRUCiRksN7ojEqx", - "symbol": "SYMPATHY", - "name": "Sympathy", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/sympathy-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HNMjpQYNdY3xjFt91X2Rg4sbNi3WKySJsPMJHq2yKNiQ", - "symbol": "CHOICE", - "name": "Choice", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/choice-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3P7TBkAZjRQdEQgLj2y8cSCPpjhsmyvWHNgc4G9VYn2n", - "symbol": "ATTN", - "name": "Attention", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/attn-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "65ih6bwSeUeLdDyB8BggwVwrRaMofvLvthubv4Spu9MC", - "symbol": "GRNDGT", - "name": "GRANGD's Global Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/joelshu1/frenchclass/main/logo-yuanbao.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "8Q2z5MAAHxmquedtmnFJ5zXf8FDrpq2DH4bBodHYuG3w", - "symbol": "VTC", - "name": "VerdeCoin", - "decimals": 7, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8Q2z5MAAHxmquedtmnFJ5zXf8FDrpq2DH4bBodHYuG3w/logo.png" - }, - { - "chainId": 101, - "address": "FowCNsVNypPgQqSGu8ZQ4GLxMMsZTsciSFYbSURHcBdz", - "symbol": "ATOS", - "name": "Atom Solana Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/Mickyfly/assets/f54a2c841882bce3cb4839166d47ef087bae8f22/logo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FgGo7MsjQDxaTcWSMRasm6Dj2pi9S9wTu2YAdSdBwfwi", - "symbol": "RED", - "name": "RedCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/thebigred1/crypto/main/redcoinlogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Du9uRpTT7HuHuKvFZXiS2LEboEVLdhxL5ScLYPU88K9Q", - "symbol": "FCoin", - "name": "Firecup Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Du9uRpTT7HuHuKvFZXiS2LEboEVLdhxL5ScLYPU88K9Q/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CVoDGyg8cUebjpHUb7N7r32sg2gawXRG7JNQNqJFTAGR", - "symbol": "LAZY", - "name": "Lazy", - "decimals": 9, - "logoURI": "https://arweave.net/-eAPfd93Q3-JeZ5dLyr5PfXo0TgC5n0ufI-LuFwxpcQ", - "tags": ["social-token", "utility-token"], - "extensions": { - "twitter": "https://twitter.com/LazyHeroesNFT", - "website": "https://lazyheroes.io/" - } - }, - { - "chainId": 101, - "address": "DF4tgv1gDDdciLZe3HvhuVm8LL9ZqvZxiZ5mUzMg6eSs", - "symbol": "$DOGEVR", - "name": "Doge Very Rocket", - "decimals": 9, - "logoURI": "https://m.media-amazon.com/images/I/41TMEvEbCGS._AC_UL320_.jpg" - }, - { - "chainId": 101, - "address": "Ghj7ib4VJC592ybwpMK75vaX3fRu1SqtkXYMd2pNywtK", - "symbol": "PRMD", - "name": "Primordials Token", - "decimals": 9, - "logoURI": "https://user-images.githubusercontent.com/84945202/152918221-72a0d9a4-374b-4b30-b686-e371502b0978.png", - "tags": ["social-token", "gaming-token"], - "extensions": { - "discord": "https://discord.gg/zFDBEKSq", - "medium": "https://medium.com/@primordialsgame", - "serumV3Usdc": "9wmsybKvBWKatj7FxkYhauna6z4mcMDXQrjNvdy2kdgE", - "twitter": "https://twitter.com/Primordialsgame", - "website": "https://primordialsgame.com/" - } - }, - { - "chainId": 101, - "address": "778ourFLRMCceitp8QXowkrcu4sDhn141Bhm1FuWeoCy", - "symbol": "KROM", - "name": "Krom Powered", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/lminor/blockbusters/main/krom/logo.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "3nGtw9cDwi8Nj81p2t53KxCQ8jjAdRScEX1yPSkwmcY6", - "symbol": "RAY", - "name": "THE SUN", - "decimals": 0, - "logoURI": "https://arweave.net/7mhSk9OMb57Yuuc0pGbBY1rfcnw5Ft3SmaFtuoR5GLo", - "tags": [ - "nft", - "fractionalized-nft", - "collectible-token", - "digital-collection", - "the-sun" - ], - "extensions": { - "description": "The Sun, the hearth of affection and life, pours burning love on the delighted earth", - "imageUrl": "https://arweave.net/7mhSk9OMb57Yuuc0pGbBY1rfcnw5Ft3SmaFtuoR5GLo", - "twitter": "https://twitter.com/nftgalleryshop", - "website": "https://www.nftsolanagallery.com/" - } - }, - { - "chainId": 101, - "address": "DJLhSzxoVm1NhNvd38kwpdP896Jwmr2jSw6aFKqahyiA", - "symbol": "KDN", - "name": "Kid Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/TechyKid/KDN/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6FKVXC2BGCQ18sSyPRp5UDGfPi4LXWLCJxDFkfQjFk5n", - "symbol": "GAC", - "name": "Grand Ape Club", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6FKVXC2BGCQ18sSyPRp5UDGfPi4LXWLCJxDFkfQjFk5n/GAC.png", - "tags": ["social-token", "Utility-token", "NFTs"], - "extensions": { - "discord": "https://discord.gg/zZedFkuybR" - } - }, - { - "chainId": 101, - "address": "B2ZNLe3zPzo6suMQNkFDdHy3PhsoUExCuxGx4bzZrzeP", - "symbol": "SENSHI", - "name": "Senshi WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/tund1/images/main/Death-Back5%20(1).png?token=GHSAT0AAAAAABQRVZZUR3K3OD7BM7IEY4W2YPPIV2A" - }, - { - "chainId": 101, - "address": "CLd797uarSBWHmD7rFiypQQNsTZZMmRjgxTbEV15k4g6", - "symbol": "HYPR", - "name": "HYPRCOIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/kmpunk/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ADNUG4Y8LW9jTticE9VaPs8xfSVXg1j8UKC8VzcEKXHe", - "symbol": "THS", - "name": "Thesis", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/DekreedStudios/varkalai/main/thesis.png", - "tags": ["utility-token"], - "extensions": { - "description": "Varkalai Token", - "website": "https://www.varkalai.com" - } - }, - { - "chainId": 101, - "address": "FhFUCR3ftJojyymv99iPiqoENAgFvHJYrQCAZDMZU71P", - "symbol": "EWIR", - "name": "eWire Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/clearviewsys/ewire-coin/main/assets/logo.png?token=GHSAT0AAAAAABQUJF6NFEUYBWDNSPXF4P4KYPYTZWA", - "tags": ["social-token", "security-token"] - }, - { - "chainId": 101, - "address": "BkPs1XvVkFbwuYhNKCaNubH86dK5o57CuQz4GfunJhHw", - "symbol": "WUSDT", - "name": "Wrapped USDT", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/andbandu/wrapped-usdt/main/logo.png", - "tags": ["Payment-token"], - "extensions": { - "website": "https://wrappedtether.to" - } - }, - { - "chainId": 101, - "address": "76JQoQBum4A9KD7b6CKRJ2eWMRkjFNVEzA4mJ9VxVv9K", - "symbol": "SENWL", - "name": "Senshi Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/tund1/images/main/Death-Back5%20(1).png", - "extensions": { - "discord": "https://discord.gg/E7yWZrzvXj", - "twitter": "https://twitter.com/SenshiNFT", - "website": "https://senshisamurai.com/" - } - }, - { - "chainId": 101, - "address": "5hwowy6cu7XxkA2NNXtA3YxeFP5hZeXp2qt9nfhSEaAL", - "symbol": "GROUND", - "name": "CommonGround", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/CommonGroundHoldings/CommonGround/main/Logo.png", - "tags": ["financial-token", "real-estate"], - "extensions": { - "description": "CommonGround is democratizing physical land ownership by providing fractional shares in a portfolio of real land parcels around the world in a tokenized form. Land is the purest and oldest store of value. CommonGround is the first and easiest way to buy, sell and trade pure land assets through tokenized liquidity.", - "telegram": "https://t.me/+4GgFHbWiUWVhNzJh", - "twitter": "https://twitter.com/CommonGroundSOV" - } - }, - { - "chainId": 101, - "address": "AfXqwtEAMNxiPGfWLVzc2Tda2fYU68G1zMV1kjsbCdia", - "symbol": "BTCSEA", - "name": "Bitcoin NFT Sea", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AfXqwtEAMNxiPGfWLVzc2Tda2fYU68G1zMV1kjsbCdia/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://btcnftsea.io/" - } - }, - { - "chainId": 101, - "address": "Ajnx5aVELiDbir3du6c9pbuJPJNmpqoEJBhND2oswmKz", - "symbol": "KMC", - "name": "KMC FINANCE", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/mum33n/kmc/main/logo.eac9db95.jpg", - "tags": ["utility-token", "community-token", "nft-token"], - "extensions": { - "discord": "https://discord.gg/cGaTmkCf", - "twitter": "https://twitter.com/KMC_FINANCE", - "website": "https://kmc.finance/" - } - }, - { - "chainId": 101, - "address": "77pjWry8wE767r3sS9xfvRNt87gKmcgVu71Nk8seX2UK", - "symbol": "SPCE", - "name": "Space", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/spce-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "D6H5nvUMMTtUaKBdaQHQmmFJ1epZWRM8YjqmRfdVp8Yy", - "symbol": "LBRA", - "name": "LIBRA Experience", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/asadat81/crypto/main/LibraBlackLogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EoMgMnWvkkqAFKRRktf4XRYuCvXykH6hW3DYv793HrG1", - "symbol": "WETH", - "name": "Wrapped Ethereum Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EoMgMnWvkkqAFKRRktf4XRYuCvXykH6hW3DYv793HrG1/logo.png" - }, - { - "chainId": 101, - "address": "DTWaeJx4Q3dbZdLZshU8Lr8k3ewfQss9rhjd2zBaiwSV", - "symbol": "DTD", - "name": "Drake the Doyen", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/haroonmoh/doyentokenimages/main/Drake.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "LdEPJM6vTgBUjzvDaTMEr3jZ2PKsQuMkbDFD3xuvmJd", - "symbol": "TWTD", - "name": "The Weeknd the Doyen", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/haroonmoh/doyentokenimages/main/weeknd.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "Ai56GYeXjMjuoSV9WEktKPiT1cKM644MaGTrf6qXSogW", - "symbol": "DBTD", - "name": "DaBaby the Doyen", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/haroonmoh/doyentokenimages/main/dababy.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "2ak42CFiNNZZJtfNUwoH7MwQcNkFtmfMWi1F7RWhshPz", - "symbol": "PGTD", - "name": "Polo G the Doyen", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/haroonmoh/doyentokenimages/main/Polo%20G.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "EiEayfxQnBVw8qVgtX4FVNyZMA1J2eCMg7QuDrjUSpcj", - "symbol": "22TD", - "name": "22Gz the Doyen", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/haroonmoh/doyentokenimages/main/22gz.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "7Y3QxSkUCk2mf2ZCXqKzhiXc2hQbed2ec1Tjpp1o5GZ3", - "symbol": "42TD", - "name": "42 Dugg the Doyen", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/haroonmoh/doyentokenimages/main/42dugg.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "Bq7npCEUPLrpFaYxeCB9SEuZ9z8xEwEFJ75wVW3BppYC", - "symbol": "JBTD", - "name": "Justin the Doyen", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/haroonmoh/doyentokenimages/main/Justin.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "6vRax67T1oaRgQEG12E1GWAcbMUYZhjFgQCGCUA3Mr5N", - "symbol": "ATD", - "name": "Ariana the Doyen", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/haroonmoh/doyentokenimages/main/ariana.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "3i8Z2eXAUzsovJUapJhBWYjRWDSkS6a6aRNJxxFtL6go", - "symbol": "ARTD", - "name": "ASAP Rocky the Doyen", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/haroonmoh/doyentokenimages/main/asap.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "6b5CMmrMfycoBPakTb1D9ZF4QHdQYVFLfjrMdKpm9ycE", - "symbol": "BKTD", - "name": "Baby Keem the Doyen", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/haroonmoh/doyentokenimages/main/babykeem.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "96tk9QyWua8Aykd5K5kc85wr58ZC7J9KxvCMMT7UpBdK", - "symbol": "BTD", - "name": "Beyonce the Doyen", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/haroonmoh/doyentokenimages/main/beyonce.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "2Wo2tB9zMLy7zRFxN4rURRocMg5NBtnKcV5dDTWt8bPd", - "symbol": "BETD", - "name": "Billie Eilish the Doyen", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/haroonmoh/doyentokenimages/main/billie.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "9kiNXWvgA3mT9EomcNbMWkdCTTn2JNSWSBJiSvXJpQkE", - "symbol": "BPTD", - "name": "Black Pink the Doyen", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/haroonmoh/doyentokenimages/main/blackpink.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "4tQdSnBsQ2cLnohbBi4T7SqR3UtDoQkE7eTGTFnz4wqK", - "symbol": "BFTD", - "name": "Brent Faiyaz the Doyen", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/haroonmoh/doyentokenimages/main/brentfaiyaz.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "D7nEWnYFN6xeJPHn31PS8tL3oZJ1cx2CJii2o1F7R6uA", - "symbol": "BTTD", - "name": "Bryson Tiller the Doyen", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/haroonmoh/doyentokenimages/main/brysontiller.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "4fknN6hnL5GtzSmfM9mYycphVB58HPxkxmBAAeTAwuCD", - "symbol": "BTSTD", - "name": "BTS the Doyen", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/haroonmoh/doyentokenimages/main/bts.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "F5JpUAqTbCE3JovCJLnpUmz3aKBmi4ZebbLxw4SAdMop", - "symbol": "CBTD", - "name": "Cardi B the Doyen", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/haroonmoh/doyentokenimages/main/cardib.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "3Kcv947kwhDJjHntdG5Bx13yStuMaLCZ9NUryDyptFrK", - "symbol": "PCTD", - "name": "Playboi Carti the Doyen", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/haroonmoh/doyentokenimages/main/carti.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "Fn1Y7HvU7UQTDEjiAGac7pPGmow5aZwfZFPnqXRd3oQ8", - "symbol": "CBTD2", - "name": "Chris Brown the Doyen", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/haroonmoh/doyentokenimages/main/chrisbrown.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "3Ht7dyr9oLBApfFxsYaHxSccpqNmBNFFZb4kuhP54g9f", - "symbol": "DJTD", - "name": "Doja the Doyen", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/haroonmoh/doyentokenimages/main/doja.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "HdVG3bxxyStRf8qawt67z9JrQ9jMDjQySHCohamYbuCG", - "symbol": "DLTD", - "name": "Dua Lipa the Doyen", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/haroonmoh/doyentokenimages/main/dualipa.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "C1KjuTtpi6wTeMDTU1EShb7wYk7Rt7gmuA8a8huQ8foH", - "symbol": "FFTD", - "name": "Fivio Foreign the Doyen", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/haroonmoh/doyentokenimages/main/fivio.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "51SPUdQvnPtaAH3HW6x1XFx7wdPAdGX2PATvH1f7hCx", - "symbol": "GVTD", - "name": "Giveon the Doyen", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/haroonmoh/doyentokenimages/main/giveon.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "HbRMsfSaoSdpK6YJSHg4WidyrgigbcG6aEKCaE4j7rLN", - "symbol": "GUTD", - "name": "Gunna the Doyen", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/haroonmoh/doyentokenimages/main/gunna.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "FsX2G6cgtHyvKsGLQfyVzYmVZquQAyxCf9vaw2RtMoxX", - "symbol": "IDTD", - "name": "Iann Dior the Doyen", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/haroonmoh/doyentokenimages/main/ianndior.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "5L6uiM3uvcGc1xC6HYBmzPJ8V7F98STL6mWLfJhLsZBB", - "symbol": "JHTD", - "name": "Jack Harlow the Doyen", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/haroonmoh/doyentokenimages/main/jackharlow.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "DR4fbXfiY1Sh7obps2WBAne7iLmCqWfcSMq1C1iJhyMw", - "symbol": "JCTD", - "name": "J Cole the Doyen", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/haroonmoh/doyentokenimages/main/jcole.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "9Vc531wSxFcCTTMFyBW1sgJzamHZUBLYBJMpufcQy5Rj", - "symbol": "KLTD", - "name": "Kendrick Lamar the Doyen", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/haroonmoh/doyentokenimages/main/kendrick.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "Cs6mUEfAbd8NtCCGqy2JkzzpjcATMYP9E3kmDeLeT5UE", - "symbol": "KLTD2", - "name": "Kid Laroi the Doyen", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/haroonmoh/doyentokenimages/main/kidlaroi.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "7X8ia4jHmvgSHZDvdDtVRUZR3g5f5J1YVZyvkLfg2c8c", - "symbol": "LBTD", - "name": "Lil Baby the Doyen", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/haroonmoh/doyentokenimages/main/lilbaby.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "8izhNY8Ex3wA4rEP4VWTX4XhpWag7c7x9DCdVpb5mdCK", - "symbol": "LNXTD", - "name": "Lil Nas X the Doyen", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/haroonmoh/doyentokenimages/main/lilnasx.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "7qrjNSNqXQFWYLtM2x5o8RUv9eVwQo3B9pFyVmuEMZ1Y", - "symbol": "LUVTD", - "name": "Lil Uzi Vert the Doyen", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/haroonmoh/doyentokenimages/main/liluzi.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "BUDQJmx6eq7fw4jBsoYgPv33Q4bcoFXN4onP89rAEPsz", - "symbol": "LWTD", - "name": "Lil Wayne the Doyen", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/haroonmoh/doyentokenimages/main/lilwayne.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "87KwpBxNnHNNiT2656XsSCrkCwk5DGzqeiJN9wFKgeYc", - "symbol": "MMTD", - "name": "Meek Mill the Doyen", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/haroonmoh/doyentokenimages/main/meekmill.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "Cxuimbvjj7R7GpzTKjimi7FSanJw6KffmfCmCdpTcxhi", - "symbol": "MTSTD", - "name": "Megan the Stallion the Doyen", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/haroonmoh/doyentokenimages/main/megan.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "AaHN2BhgxmqjSGWxAJLKfT8kxA5P2ye9MxZjveRrUj63", - "symbol": "MFTD", - "name": "Montell Fish the Doyen", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/haroonmoh/doyentokenimages/main/montellfish.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "CZ9CymSKQh9c3J4kTgHt5e5CHhtXXw7BoBV6K1ugU56m", - "symbol": "NMTD", - "name": "Nicki Minaj the Doyen", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/haroonmoh/doyentokenimages/main/nickiminaj.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "iBdafMoCKZ8Zc1r329QtrEUe3n6ykq3UEUtn8GVCtx9", - "symbol": "NRTD", - "name": "Normani the Doyen", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/haroonmoh/doyentokenimages/main/normani.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "8zZsaGWfMPnWQtxh9Qwo9YdNoEHS6PtHxmdisKYS8QHh", - "symbol": "NYBTD", - "name": "NBA Youngboy the Doyen", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/haroonmoh/doyentokenimages/main/nyb.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "7dXcQeKRfPHyEy7bwcNPGA8CyoGtdEUzui61NhgNyPUd", - "symbol": "ORTD", - "name": "Olivia Rodrigo the Doyen", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/haroonmoh/doyentokenimages/main/olivia.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "DiP31pzu8gaBDCthqVi7ec2kJr4EDU5N8GDv8ymCuGBH", - "symbol": "RHTD", - "name": "Rihanna the Doyen", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/haroonmoh/doyentokenimages/main/rihanna.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "ANnik3298mNcS8ex7dpyh3rYi3NF7Wv4f8sEen8VJWQF", - "symbol": "TSTD", - "name": "Taylor Swift the Doyen", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/haroonmoh/doyentokenimages/main/taylor.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "Bga8vuZyVzK5PnLitJM1yiUDfBjEtpRaxDqdGdxDZEYZ", - "symbol": "YDTD", - "name": "Young Dolph the Doyen", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/haroonmoh/doyentokenimages/main/youngdolph.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "BgBUxRsEgXur2iyhhJnWwbBMiSNiMWz1Ka5TTgVRt2Ft", - "symbol": "BUFF", - "name": "Buffaloe", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/buff5953/crypto/main/Screen%20Shot%202022-01-24%20at%2011.49.34%20PM.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6R98EWBJALzZxtN4iUQwCifuXK9jB7CeX4wRC7d6RBbK", - "symbol": "TSD", - "name": "TrueSight DAO", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/TaUdunJo5TcdJzt9kyB4cd6HTYUdFXJHCSL2yc3sbg4/logo.png", - "tags": [ - "governance-token", - "community-token", - "utility-token", - "social-token" - ], - "extensions": { - "description": "TSD is a governance and utility token for our universal credibility protocol. We believe making decisions under ignorance is to the root cause of human suffering. Our purpose is to build a better world based on fundamental truth. Our mission is fight information pollution by providing individuals with actionable insights to make critical decisions. This has became imperative in our increasingly chaotic world.", - "discord": "https://discord.gg/gEfypKdCEW", - "facebook": "https://www.facebook.com/TrueSightMe", - "imageUrl": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/TaUdunJo5TcdJzt9kyB4cd6HTYUdFXJHCSL2yc3sbg4/logo.png", - "reddit": "https://www.reddit.com/r/truesightme/", - "website": "https://truesight.me" - } - }, - { - "chainId": 101, - "address": "EcTLhBgyBSRgAPH8FPpRQXajZarzW2tFRqeban1WoWiE", - "symbol": "YACHT", - "name": "YachtCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Citizen72/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9XAmWFSJA1WGWJXnaMgGHEErqeS2N1hf9N3Lwpfjehiq", - "symbol": "HPC", - "name": "HoodiePrint Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/HP-hoodieprint/crypto/main/logo.jpg", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "CaEAvWF1EFNrgddjhtzC1vtiUf1CRmap3Bw8J2usjaya", - "symbol": "Shakti", - "name": "Shakti Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Shakti105/Crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7vTJvSEJY8Ww4zDmphb2rWy6qatd2wduAfQX9HMZQnqJ", - "symbol": "NIHC", - "name": "Nihal Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/realnihal/crypto/main/token.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BdtBaw3u9bBiBLjF9unbPDhXTWaWqz6ngSDXo16yXcT9", - "symbol": "CHERRY", - "name": "Cherry", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BdtBaw3u9bBiBLjF9unbPDhXTWaWqz6ngSDXo16yXcT9/logo.png", - "tags": ["charity-token", "community-token", "utility-token"], - "extensions": { - "blog": "https://blog.naver.com/prologue/PrologueList.nhn?blogId=cherry_official", - "description": "Cherry is a donation token that is used to beautify the world through donations.", - "facebook": "https://www.facebook.com/cherry.e4net/", - "instagram": "https://www.instagram.com/cherry.e4net/", - "website": "https://cherry.charity/" - } - }, - { - "chainId": 103, - "address": "BdtBaw3u9bBiBLjF9unbPDhXTWaWqz6ngSDXo16yXcT9", - "symbol": "CHERRY", - "name": "Cherry", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BdtBaw3u9bBiBLjF9unbPDhXTWaWqz6ngSDXo16yXcT9/logo.png", - "tags": ["charity-token", "community-token", "utility-token"], - "extensions": { - "blog": "https://blog.naver.com/prologue/PrologueList.nhn?blogId=cherry_official", - "description": "Cherry is a donation token that is used to beautify the world through donations.", - "facebook": "https://www.facebook.com/cherry.e4net/", - "instagram": "https://www.instagram.com/cherry.e4net/", - "website": "https://cherry.charity/" - } - }, - { - "chainId": 101, - "address": "9CpTqKJp297cjUSpfd15akDnRhHD5hVertuKSZNL3u8x", - "symbol": "WOSG", - "name": "WOLF GANG TOKEN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9CpTqKJp297cjUSpfd15akDnRhHD5hVertuKSZNL3u8x/logo.png", - "tags": ["nfts"], - "extensions": { - "discord": "https://discord.gg/vhjPC4xzSE", - "instagram": "https://www.instagram.com/wolfofsol/", - "twitter": "https://twitter.com/WolfOfSol", - "website": "https://www.wolfofsol.com/" - } - }, - { - "chainId": 101, - "address": "9AT5QZhKgzfikxLPTTtvEtkSFJjm8td6poRGzLVZecS2", - "symbol": "SOO", - "name": "SooKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/LennyKato/SOOK/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5oXYc3xX9CEdCL3wV1HjXgfVQkaMDpEYgj7B7TKifPWc", - "symbol": "LZ", - "name": "The Lazy Token", - "decimals": 9, - "logoURI": "https://arweave.net/-eAPfd93Q3-JeZ5dLyr5PfXo0TgC5n0ufI-LuFwxpcQ", - "tags": ["social-token", "utility-token"], - "extensions": { - "twitter": "https://twitter.com/LazyHeroesNFT", - "website": "https://lazyheroes.io/" - } - }, - { - "chainId": 101, - "address": "AUWaJQkaLGFGFBe5xoEjUqr13vGgPDUFjFTvEfP5VoMG", - "symbol": "KTY", - "name": "Katy", - "decimals": 2, - "logoURI": "https://solana-bucket.fra1.digitaloceanspaces.com/AUWaJQkaLGFGFBe5xoEjUqr13vGgPDUFjFTvEfP5VoMG.png", - "tags": ["community-token"] - }, - { - "chainId": 101, - "address": "FKygZZn2xVUKBrseYJH5hnmwJGVhMgoanMooA7nPU17K", - "symbol": "NGCT", - "name": "NairaCoin Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/samwarlock/nairatoken/main/icon.PNG", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "5oc5fSjG1xfz6UtXvAyJTW6Ai7q6tbLWddTmw9DH2Qej", - "symbol": "SRCT", - "name": "Solana Rabbits Club Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5oc5fSjG1xfz6UtXvAyJTW6Ai7q6tbLWddTmw9DH2Qej/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GoLdAj6PZFhKp9QmtFgqvSZfAMPnZjQVxwVi4YbGxmq2", - "symbol": "AotMGold", - "name": "AotM - Gold WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GoLdAj6PZFhKp9QmtFgqvSZfAMPnZjQVxwVi4YbGxmq2/gold.png" - }, - { - "chainId": 101, - "address": "sLvrnnFy6M8iPTQ9Gy4Zx251QkewH4YzcpFLh3ezVyJ", - "symbol": "AotMSilver", - "name": "AotM - Silver WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/sLvrnnFy6M8iPTQ9Gy4Zx251QkewH4YzcpFLh3ezVyJ/silver.png" - }, - { - "chainId": 101, - "address": "brnzEEdWQ5pBd2Qfec4Tquw5xL1tLkL85qFuBsMGjfm", - "symbol": "AotMBronze", - "name": "AotM - Bronze WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/brnzEEdWQ5pBd2Qfec4Tquw5xL1tLkL85qFuBsMGjfm/bronze.png" - }, - { - "chainId": 101, - "address": "4Z9UMELGy3tU4pD4PvnQCiTVGPDpNK6e25XYSWYH9MrG", - "symbol": "ALBINO", - "name": "ApesAgainst WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4Z9UMELGy3tU4pD4PvnQCiTVGPDpNK6e25XYSWYH9MrG/logo.png", - "extensions": { - "website": "https://apesagainst.io/" - } - }, - { - "chainId": 101, - "address": "zwDxiFD5CJ8nKUtzzKWJ9YAp8Y5NbHkSCMjBesxv7j5", - "symbol": "GOD", - "name": "Godly Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/CryptoGodd/crypto/main/CryptoGod.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2ufvPBDBMTT3tj5xzxxKsTqjHArWYPpLMv715KbWtNDi", - "symbol": "DILAC", - "name": "DiLa Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ImBillyon/crypto/main/DiLaTv_NEW_LOGO.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "C28joqNtMTFHBNbPFZyJx62WH1uW8hWhhAUJRyH5XGfb", - "symbol": "JTC", - "name": "Justtravelcoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/BestGitUser1/crypto/main/bessereslogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "76aYNHbDfHemxSS7vmh6eJGfjodK8m7srCxiYCrKxzY1", - "symbol": "ROLL", - "name": "HRHC Token", - "decimals": 6, - "logoURI": "https://hrhc.io/images/logo.png", - "tags": ["community-token", "utility-token"], - "extensions": { - "discord": "https://discord.gg/rJjFqcJf", - "twitter": "https://twitter.com/HighRollerHC", - "website": "https://hrhc.io" - } - }, - { - "chainId": 101, - "address": "vAR6K3QdoC9TFkcgda9v2etCVYSYWXcap2xn8p8x8qW", - "symbol": "AOTWL", - "name": "Apes on Tigers WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/vAR6K3QdoC9TFkcgda9v2etCVYSYWXcap2xn8p8x8qW/logo.png", - "extensions": { - "twitter": "https://twitter.com/ApesonTigers" - } - }, - { - "chainId": 101, - "address": "4DQzkwRCpvTZxdodNw86wLwxAzu5y2EFB9KEwxboEPCG", - "symbol": "DBC", - "name": "DBCrypto", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/darioe54/dbcrypto/main/logo.png", - "tags": ["idc"] - }, - { - "chainId": 101, - "address": "8x4nE4MNzw3zhpiAB4MBWhXz4iGxNt9Q6Mm3dTdPSRyC", - "symbol": "BIOB", - "name": "Bionic Beaver", - "decimals": 9, - "logoURI": "https://github.com/starcodez/bionicbeavertoken/raw/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7jyT964jZSEMkPy5itfEh8Jt447zmfo7C1Dsz7oPoMy5", - "symbol": "KWC", - "name": "Keep Walking Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/hhstanchev/Crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5pSJDkzXm8iqBGmT2mB1wYuxtzhjuxqdtKRLUx2rfU9H", - "symbol": "AJC", - "name": "AJC", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/JYOOrepository/ajcoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4RQzhjy4nDRzLrN71TxQ5KwoYURds5yjt5Fbin1cJ2xk", - "symbol": "LVCM", - "name": "Crescent Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Zabb116/CrescentCoin/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AA6LkBM7m5wmhrrTopNfEeMrLupsRDZVQzFSfL2rr5iQ", - "symbol": "DRIP", - "name": "0xDRIP Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AA6LkBM7m5wmhrrTopNfEeMrLupsRDZVQzFSfL2rr5iQ/logo.png", - "tags": ["NFT", "utility-token", "community-token", "altcoin"], - "extensions": { - "discord": "https://discord.gg/0xdrip", - "twitter": "https://twitter.com/0x_DRIP" - } - }, - { - "chainId": 101, - "address": "G3qD5uCnhv9mGjvRLduCDGXRvrH6fi8nJn2Wk9ijXhGZ", - "symbol": "PAIN", - "name": "LordPain", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/rahulchy960/crypto-/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FbUzTvXeHxPXKpZQHWMvoVXXW6aEhitfoakRttUBBzVx", - "symbol": "BBX", - "name": "BlockBux", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/WeAreMetaverse/BBX/main/logo.png", - "tags": [ - "social-token", - "utility-token", - "community-token", - "metaverse", - "culture-coin" - ] - }, - { - "chainId": 101, - "address": "9861az8m8LiuEeSgsmUaNVzVcq6XGDG6YCj3Jq7MRKHq", - "symbol": "ASSET", - "name": "ASSET", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9861az8m8LiuEeSgsmUaNVzVcq6XGDG6YCj3Jq7MRKHq/logo.png", - "extensions": { - "discord": "https://discord.com/invite/mynn9p6uNw", - "telegram": "https://t.me/blockassetupdates", - "twitter": "https://twitter.com/Blockassetco", - "website": "https://blockasset.co" - } - }, - { - "chainId": 101, - "address": "5J6C29Rz2m3MfRk4CEwnVTAAiAoii8Vbrvecc6aKRJYv", - "symbol": "PIKA", - "name": "Pika Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5J6C29Rz2m3MfRk4CEwnVTAAiAoii8Vbrvecc6aKRJYv/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://perkypikas.com" - } - }, - { - "chainId": 103, - "address": "CG9mVnKksTV6C1NNGH8Qnz2GZKJN4KAKsMrrN1qdwEhL", - "symbol": "LHMINT", - "name": "Loot Heroes' Mint Token", - "decimals": 0, - "logoURI": "https://lootheroes.io/lhminttoken.png", - "extensions": { - "twitter": "https://twitter.com/lootheroesnft", - "website": "https://lootheroes.io" - } - }, - { - "chainId": 101, - "address": "BJP255e79kNzeBkDPJx8Dkgep32hwF56e1UCWKdBCvie", - "symbol": "H3LL", - "name": "HELLC0IN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/rangersmyth74/hellfire/main/logo.png", - "tags": ["community-token", "social-token"], - "extensions": { - "discord": "https://discord.gg/yR8YbDWeMf" - } - }, - { - "chainId": 101, - "address": "AB7nnTXuSzje7HxjPsZJmq5HAFA64dCQiorT7R5P7kvS", - "symbol": "SPI", - "name": "Spinner", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/willkilla9/sol/main/logo.png", - "tags": ["NFT", "community-token"], - "extensions": { - "instagram": "https://instagram.com/nftspinner", - "twitter": "https://twitter.com/nftspinner", - "website": "https://nftspinner.io" - } - }, - { - "chainId": 101, - "address": "ExxPZ3m5VGre7oy9HLDBmAmzRjtG8nUzptsxB8uTYBRF", - "symbol": "ALB11", - "name": "ALBILEVEN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/TherealXmeD/Token/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "22ViCwd3WGBCjAWBV6tuAvMN22GYJ5X1fpkNNaWfTKUq", - "symbol": "QCKH", - "name": "Quickhaven", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Mizzamir/Quickhaven-Conquest/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9h8hPsY6YhWK1JQbUJ35xXAkcRTE11YvcPxHKwn24di1", - "symbol": "MFN", - "name": "Mindfulness", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/migueloliveros/crypto/main/MFN.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HcD6eTvEAGy2E5ZmDm2zwywXWUkaJvjwarLf7rPuG8Mm", - "symbol": "BREATH", - "name": "GEORGE FLOYD", - "decimals": 0, - "logoURI": "https://arweave.net/39Ctk1TBG-EA5nNuaOG59uy3WBN9MM_S_FgpRkEiSv0", - "tags": [ - "nft", - "fractionalized-nft", - "collectible-token", - "digital-collection", - "george-floyd", - "black-lives-matter" - ], - "extensions": { - "description": "On May 25, 2020, George Floyd, a 46-year-old black man, was murdered in the U.S city of Minneapolis by Derek Chauvin, a 44-year-old white police officer.Floyd's last words were; Please, the knee in my neck, I can't breathe", - "imageUrl": "https://arweave.net/9lbB1r5kCNrqRMn3SPtt-_m6fy3MRG0fmlyLt0_NO2U" - } - }, - { - "chainId": 101, - "address": "BeCPRbP5AxZ9sc46FvPeJVcNpKLKwuMnc3tsJXnMYBTs", - "symbol": "WYOS", - "name": "WyoSol", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BeCPRbP5AxZ9sc46FvPeJVcNpKLKwuMnc3tsJXnMYBTs/logo.png", - "tags": ["solana-blockchain", "wyoming"] - }, - { - "chainId": 101, - "address": "6z8GUKgcPBMg9P2pZkLtCw3nLnoXm2pyAavcRWEnKRM7", - "symbol": "TSTTOKEN", - "name": "TSTTOKEN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6z8GUKgcPBMg9P2pZkLtCw3nLnoXm2pyAavcRWEnKRM7/logo.png" - }, - { - "chainId": 101, - "address": "9z7ZEwCFc4fSYbrZ1JTAPdwLH7pd3h94RhyHFS6SP4c2", - "symbol": "TGS", - "name": "The Global Special", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9z7ZEwCFc4fSYbrZ1JTAPdwLH7pd3h94RhyHFS6SP4c2/logo.png", - "extensions": { - "website": "http://tgstgs.com", - "whitepaper": "http://tgstgs.com/_template/s_dooogn_com/web_skin/web_skin_tgstgs/data/The_Global_Special_WP_EN.pdf" - } - }, - { - "chainId": 101, - "address": "7rkZKH3gF41dj7xNER7Bny2uTFZF3V4hNfM8c6MJVd2V", - "symbol": "LUGB", - "name": "LucasGrowsBuck", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MattM7/logo/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CpFE715P5DnDoJj9FbCRcuyHHeTXNdRnvzNkHvq1o23U", - "symbol": "DARC", - "name": "DARC Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Konstellation/DARC_token/main/256darctoken.png", - "tags": ["utility-token", "wrapped"], - "extensions": { - "coingeckoId": "darcmatter-coin", - "description": "Konstellation is a decentralized cross-chain capital markets protocol built on Cosmos. It is aimed to efficiently connect funds and the various components of the asset management industry with investors. Konstellation intends to be the financial services industry hub for Cosmos and other blockchain ecosystems through strategic inter-blockchain communications. The network is powered by DARC tokens, which are required for the Konstellation network’s governance and transactions.", - "facebook": "https://www.facebook.com/Konstellation.tech/", - "imageUrl": "https://raw.githubusercontent.com/Konstellation/DARC_token/main/256darctoken.png", - "linkedin": "https://www.linkedin.com/company/konstellation-tech/", - "medium": "https://konstellation.medium.com/", - "telegram": "https://t.me/Konstellation", - "website": "https://konstellation.tech/" - } - }, - { - "chainId": 101, - "address": "Fi5NUmnZeKDPS4YDfy6DNL3Y6Pp9drtmzrjyAkDHN1nX", - "symbol": "PPC", - "name": "Pherret Private Club", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Fi5NUmnZeKDPS4YDfy6DNL3Y6Pp9drtmzrjyAkDHN1nX/logo.png", - "extensions": { - "twitter": "https://twitter.com/ClubPherret", - "website": "https://pherretclub.com" - } - }, - { - "chainId": 101, - "address": "BVUd7RNHcLbAt6p98XyY39XEGrjrnWuikbMsdPjddjuH", - "symbol": "EMPT", - "name": "Emily Pillow Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Kotoraku/crypto/main/emtLogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CHUWRaNN62HRSkxDh6woJjnzZfQNCm49kd91MQfKYkjC", - "symbol": "CHRIST", - "name": "JESUS CHRIST", - "decimals": 0, - "logoURI": "https://arweave.net/7QpRGUZ7KDMvzJ3ZtRbbXus714OErFSlLTN0FbSTY2Y", - "tags": [ - "nft", - "fractionalized-nft", - "collectible-token", - "digital-collection", - "jesus-christ", - "bible-on-blockchain" - ], - "extensions": { - "description": "This Non-Fungible Token is made to keep the word of jesus alive and accessible to everyone around the world. EACH NFT is associated with a full copy of the New Testament archived on blockchain - https://arweave.net/Ov5sBcSgKOL0AASs4TyOnwz6ReIJ3MyIX9j90zvfOd8", - "imageUrl": "https://arweave.net/gD0M3bryfWOUudcTeat924dKTf45nt1PrQwNWOT_xq8" - } - }, - { - "chainId": 101, - "address": "4MeqAe5QhfHzJGtXiatdUjr5mUrA2NFdeC3xLDQu9WkJ", - "symbol": "TMCT", - "name": "Middle Class", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/TheMiddleClassToken/crypto/main/12345%20token.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3jts9kgX29ANZGKHK4Hsj4EyLjQJzLeU7MFg5HNnXJ2A", - "symbol": "SUPA", - "name": "SUPADROP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3jts9kgX29ANZGKHK4Hsj4EyLjQJzLeU7MFg5HNnXJ2A/logo.svg" - }, - { - "chainId": 101, - "address": "HNgs8kX46NDveA4HU3n8RLNuKBzUkX13cEHE86rN4v6E", - "symbol": "GTMO", - "name": "GetMo Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Ctorgy/crypto/main/yuh.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CU8sKLJRcp7v7hP75t1bmZmdFGCQNdEoX6ZnSjm7i3X", - "symbol": "UMUC", - "name": "UMU Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/nmill22/UMUCoin/main/UMUCoinLogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9HybgFrEwawhAEECY52djqf7MHd5BtpJAVn923Nf5Qd2", - "symbol": "LSCG", - "name": "Los Chingones", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/TheGamerCoder121/crypto/main/logo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HV8D4F4XYiTTn7P9TJ9SaPHqht8qKQxPUAXDRFSdayNw", - "symbol": "PIOUS", - "name": "Pious Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/PiousCoins/PiousCrypto/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8NP4GmmPrFFbBC7Hrimjw9cLSx5Vw7i3bGo5RFpt8o8R", - "symbol": "GMC", - "name": "Grimeace", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/nktshrd1234/Grimeacecoin/main/8RCI9aEe_400x400.png" - }, - { - "chainId": 101, - "address": "FEiVPB67mabyoMsNhvQuww2YCid7Lwo6c6aKJBfQ7oet", - "symbol": "BDHK", - "name": "POTRESS CREW", - "decimals": 9, - "logoURI": "https://github.com/gGeorgiev1/crypto/blob/main/Potres-logo-2019.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CBWuZDJad2ueB3br5YHkpwksfAxiKXrwRAqdjasqsyYj", - "symbol": "GNOM", - "name": "GnomCoin", - "decimals": 6, - "logoURI": "https://github.com/onuraladi/assetsgnom/blob/main/gnom.png", - "tags": ["utility-token", "community-token", "nft-token"], - "extensions": { - "discord": "https://discord.com/invite/CFgTvwDEHf", - "twitter": "https://twitter.com/GnarlyGnomies", - "website": "https://gnomiezgen2.fun/" - } - }, - { - "chainId": 103, - "address": "6z8GUKgcPBMg9P2pZkLtCw3nLnoXm2pyAavcRWEnKRM7", - "symbol": "TSTTOKEN", - "name": "TSTTOKEN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6z8GUKgcPBMg9P2pZkLtCw3nLnoXm2pyAavcRWEnKRM7/logo.png" - }, - { - "chainId": 101, - "address": "EJtTcFxg7kQmBkHzp64kpGU5f6J7taoTB2jVpkCDMzUA", - "symbol": "NNC", - "name": "Nicenerds Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/squatchydev9000/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7YGyq8FLVWxAi1rF8DpynaSB7BsJs23wYMACuTzR2TdP", - "symbol": "STK", - "name": "Sortek", - "decimals": 0, - "logoURI": "https://github.com/sskelton21/SortekLogo/blob/main/IMG_0687.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4xZUVXUpcKNQXsnCoTSWXrc8PGjtjqxQHF3EcJDXXcjw", - "symbol": "STGC", - "name": "Spotthegeek Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/spotthegeek/crypto-stgc/main/stgc-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2qGCk3HEH8uEcHkQMNfoFjX1MnxDqjCUSqtB4C9KZ2BD", - "symbol": "SOLAK", - "name": "Solavik", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Aviksaikat/Solavic-token-SOLAK-/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "E5xCoBy9pCNjtZHGjD57j498YidLh41sihnu6rSghJkr", - "symbol": "TTCL", - "name": "TTCL Token", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/tongtongchain/token-list/main/assets/mainnet/E5xCoBy9pCNjtZHGjD57j498YidLh41sihnu6rSghJkr/ttcllogo.png", - "tags": ["tongtongcoin", "tongtongchain", "dex", "finance"] - }, - { - "chainId": 101, - "address": "Toamuce7zPGWhf8dYgMG92QDtCRxXWqGrvmFfZPiEjE", - "symbol": "CSMT", - "name": "CS Mint Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jonathanemorales/logo/main/logo.png" - }, - { - "chainId": 101, - "address": "5pnEnSsky1L2xrd4Nqj4oiKgsDLqPHstnkVP4XwKicmX", - "symbol": "Zues", - "name": "Carlos Verbelen", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Atrahasis369/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EKDaZbPnJRc1ujbFFiQEZoBikXLyx1TFBBRnED98KxC1", - "symbol": "CRG", - "name": "CraigCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/McGowanC/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7e7RaP8so1xme93Lb45smVCaXT6yyEh6Sp4QFn3ecbjv", - "symbol": "MIT", - "name": "MITcoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/thompsonkylaw/crypto/main/MITcoinLogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EP5vvzVMKRygpzHouyKuEXRKrJAeYXs7rgr98LoUAbBC", - "symbol": "YAOI", - "name": "Yaoi Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/RicktaScale/crypto/main/ukeLogo.PNG", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6vG3dVdreJDXATexCDxJcT7yFyjhZiafzBWTZx6BL965", - "symbol": "SRC0", - "name": "SRC Demo", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solanaraffleclub/src-token/main/0001%20demo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "To1az33ZSY6GUueytiXUysBputPeU6zQdz6zc9HsCLE", - "symbol": "LCWL", - "name": "LoadedCrates WLs1", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/setaf007/lc-token-cli/main/logo.png" - }, - { - "chainId": 101, - "address": "Yoku8bNBWX6riJpsztLWjmyxAwCEs8ytKxoQAEsZNkA", - "symbol": "YOKU", - "name": "Yoku Folks", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Yoku8bNBWX6riJpsztLWjmyxAwCEs8ytKxoQAEsZNkA/logo.png", - "extensions": { - "twitter": "https://twitter.com/yokufolk" - } - }, - { - "chainId": 101, - "address": "35PTcAHcQYrRS5QW8fgHx163rWV9ffXU9Y66Hio853P3", - "symbol": "VMNT", - "name": "Syndicate Mint Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/benpazzo/VMNT/main/assets/VMNT.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BXN6pAK7BM7hXQJqyLPeGF8q5aohy92gV3G62BKRBjZX", - "symbol": "CC", - "name": "CamCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Ctorgy/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3XBgEzdisbD9ypcRFE1UNS5AeSHbzS2qXb9Ta6aM1pFZ", - "symbol": "SOOP", - "name": "Sooper", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/LennySOOP/Token/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5irqyvD7Cc6vAVvUhUYn7WXVJtdJ1YSEknjPBob2TMM4", - "symbol": "SUPAD", - "name": "SUPADROPD", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3jts9kgX29ANZGKHK4Hsj4EyLjQJzLeU7MFg5HNnXJ2A/logo.svg" - }, - { - "chainId": 101, - "address": "Enz9Gcr32fZJ7ZaZ2NpQL9o3eNG2aiUKtrJ1iuX2Agqp", - "symbol": "CVAL", - "name": "Carnival Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/rylaizy/token-img/main/logo_coin.png" - }, - { - "chainId": 101, - "address": "CaV7NzXykiMwUfDk7JQFYE4VK6RtethJin8my2Rh7Qfc", - "symbol": "LOC", - "name": "Lion Rocker", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/lionrocker/crypto/main/LionRockerlogo-B.png", - "tags": ["NFT"] - }, - { - "chainId": 101, - "address": "D8wmkqGKpJvai2kScsFvK1n6uZMDicHKW6Zk6S53MRqU", - "symbol": "FLRP", - "name": "Moons", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/StarboyB/cryptologos/main/moons.png", - "tags": [ - "utility-token", - "metaverse", - "NFT-Gaming", - "game-token", - "game-currency", - "Gaming" - ], - "extensions": { - "description": "FlatlineRP is a Stylized GTA V roleplay server where players can play in a community based city with their own virtual characters.", - "discord": "https://www.discord.io/flatlinerp", - "facebook": "https://www.facebook.com/Flatline-RP-102075495648442", - "instagram": "https://www.instagram.com/flatlinerp/", - "reddit": "https://www.reddit.com/r/flatline_rp/", - "twitter": "https://twitter.com/flatlinerp" - } - }, - { - "chainId": 101, - "address": "4AWoo3NXpdepcxjBSMya4YQmK28fFzYebQTBEC3aB69m", - "symbol": "MUNJAL", - "name": "Munjal Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/munjalchetan/logo-solana/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4Pti79GJaprhqqkhSWxdyhE6MHKTLTEKfcyfMXiZFp5M", - "symbol": "GRAFO", - "name": "Graphic Design", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SegFun01/EIC/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AHM5dtyMJZzTs8ZscL17VWtKRdvt9YKC1sM75cCDUcJe", - "symbol": "BDHK", - "name": "POTRESS CREW FREERIDERS", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/geshecaMTB/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7dSy7gPTJcV1YECvpE8Zu8eJkY4ENCVwvjnsPtXwMHce", - "symbol": "ADVENTURE", - "name": "Adventure", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/adventure-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HZnDaTEyKnZozKR1JFro3bZFuqJ4tEqJxoxCBTNoHDMu", - "symbol": "A", - "name": "A", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/a-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "o1Ec6bs7kF3ps9SaChwzAR74GHgmPpHmdEAyXFCBS9w", - "symbol": "HEAL", - "name": "Health", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/heal-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "885utG7mvmNbSADdFNoMteB1RMvvHrkiRBLbdr6ShyGi", - "symbol": "BOOB", - "name": "Boob", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/boob-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "421tFhs4tL4ohU3wf2cmi51kcpfXD1ZQKK73buLXbi3b", - "symbol": "SLEEP", - "name": "Sleep", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/sleep-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "NaFJTgvemQFfTTGAq2PR1uBny3NENWMur5k6eBsG5ii", - "symbol": "NAGA", - "name": "Naga Kingdom", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/NaFJTgvemQFfTTGAq2PR1uBny3NENWMur5k6eBsG5ii/logo.png", - "tags": ["utility-token", "game-token", "io-game", "GameFi", "Gaming"], - "extensions": { - "description": "The most entertaining .io game on Solana", - "discord": "https://discord.gg/nagakingdom", - "facebook": "https://www.facebook.com/NagaKingdomGame", - "medium": "https://medium.com/@NagaKingdom", - "reddit": "https://www.reddit.com/r/nagakingdom", - "telegram": "https://t.me/nagakingdom", - "twitter": "https://twitter.com/NagaKingdom", - "website": "https://naga.gg/" - } - }, - { - "chainId": 101, - "address": "Ma4dse7fmzXLQYymNsDDjq6VgRXtEFTJw1CvmRrBoKN", - "symbol": "MAGA", - "name": "Magic Eggs", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Ma4dse7fmzXLQYymNsDDjq6VgRXtEFTJw1CvmRrBoKN/logo.png", - "tags": ["utility-token", "game-token", "io-game", "GameFi", "Gaming"], - "extensions": { - "description": "The most entertaining .io game on Solana", - "discord": "https://discord.gg/nagakingdom", - "facebook": "https://www.facebook.com/NagaKingdomGame", - "medium": "https://medium.com/@NagaKingdom", - "reddit": "https://www.reddit.com/r/nagakingdom", - "telegram": "https://t.me/nagakingdom", - "twitter": "https://twitter.com/NagaKingdom", - "website": "https://naga.gg/" - } - }, - { - "chainId": 101, - "address": "8yHB4Y8caxRvpKhpDSbvFGMca2ZH2nzqtwEs86b6fryy", - "symbol": "PCI", - "name": "Poly Capital Investment", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/PolyPusCrypto/crypto/main/logo.png", - "tags": ["investing-token"] - }, - { - "chainId": 101, - "address": "Cd8nLV1oTVsnnk6iJZ5dASTCJQZF4B52SgaE6NJKt6aB", - "symbol": "MFT", - "name": "MetaFruits", - "decimals": 0, - "logoURI": "https://github.com/MetaFruitsCoin/crypto/blob/main/Metafruits_Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CShm4EA7oi15pYYiP2XpCdsqMKZFqqZpQ645CgL3AdLV", - "symbol": "CHE", - "name": "cheProsts", - "decimals": 0, - "logoURI": "https://github.com/bogdanvoicu72/logoche/blob/main/logo-che-good.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CRn4h1ocNiu3kJAkgGievWvMPzDRXftqimiTVrkTpPxt", - "symbol": "BGPA", - "name": "Bedia Coin Patron", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/sonfero/crypto/main/BGPA_logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "xsvtzXdo6tMD59k6NnYmRTi4ZduEoUSvSb6Keny73sr", - "symbol": "xSVT", - "name": "Staked Solvent", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/xsvtzXdo6tMD59k6NnYmRTi4ZduEoUSvSb6Keny73sr/logo.png", - "tags": ["utility-token", "solvent-droplet"], - "extensions": { - "discord": "https://discord.gg/thK8BCtQbM", - "github": "https://github.com/solventprotocol", - "medium": "https://medium.com/@solventprotocol", - "telegram": "https://t.me/solventprotocol", - "twitter": "https://twitter.com/solventprotocol", - "website": "https://solvent.xyz" - } - }, - { - "chainId": 101, - "address": "iEWFfqPmrLKcYh8kTigpNRVpqKMCqFq7AxpLDPyRSZN", - "symbol": "AOSMT", - "name": "Apes on Space Mint Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/zenturing/token-list/42c9ce3f689571dcb1136ec13183c0f2e06b1c23/assets/mainnet/iEWFfqPmrLKcYh8kTigpNRVpqKMCqFq7AxpLDPyRSZN/aos.png", - "tags": ["mint-token"] - }, - { - "chainId": 101, - "address": "4QUGN7JBDHbxZdV9EAwQCcfEHLAoybv572y8mLSozi9G", - "symbol": "STO", - "name": "Consentium", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/consentium-finance/assets/main/logo.png", - "tags": ["utility-token"], - "extensions": { - "github": "https://github.com/consentium-finance", - "telegram": "https://t.me/consentium_fi", - "twitter": "https://twitter.com/consentium_fi", - "website": "https://consentium.fi" - } - }, - { - "chainId": 101, - "address": "HyYztE5BiLWoiWca1YFeTaoGfHJ1eWdnCca1B3oaJP1J", - "symbol": "DFS", - "name": "Doggy Fun Space", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/abrahamsmit/assets/1c455cbc3f6b7137335db048c4bf0b288b7fc0c4/logo.png", - "tags": ["meme-token", "game-token"] - }, - { - "chainId": 101, - "address": "DHre8EVZ37hpwdiR1Dmnm5LN3VGeQZbD6DMbDDUpZ8xD", - "symbol": "PCFL", - "name": "Peacefulness", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/pcfl-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4p2H86arHQLQ2pzVCksXBpUBtn4iWnkcH6kd4Xva9SFn", - "symbol": "COMPASSION", - "name": "Compassion", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/compassion-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CQ9M3t3pYaf34iZ5V4suUPP7R6YEvdykowdxQzEmibce", - "symbol": "TRUST", - "name": "Trust", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/trust-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7aAQDS1p6cKDe5W7MJwHAaDQTec2FETbWj87P4jK6xik", - "symbol": "LCVIP", - "name": "Lost Cat FUD Club VIP List", - "decimals": 0, - "logoURI": "https://gateway.pinata.cloud/ipfs/QmQkFU34BMBVXU5ZTxfXKGgjuyW9PGLhiDjjf2iVTgNz2S", - "tags": ["nft-presale"], - "extensions": { - "twitter": "https://twitter.com/lostcatfc", - "website": "https://lostcatfc.com" - } - }, - { - "chainId": 101, - "address": "CB543LMSL99Z6yMz6o1YWdp9CF8HMkfXPoKHvchjoc8", - "symbol": "WTB", - "name": "webeMutt", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CB543LMSL99Z6yMz6o1YWdp9CF8HMkfXPoKHvchjoc8/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://webeteer.com" - } - }, - { - "chainId": 101, - "address": "ELFvPMFCTeHy2gGfnxhHjeRBBCfKZs7zaFjaF7vDZPrT", - "symbol": "JMT", - "name": "Just Monitoring", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Prime3vil/Just-Monitoring-Token/main/logo.png", - "tags": ["general-token"] - }, - { - "chainId": 101, - "address": "imbaVQ5BUwJ1yo3RJYVorHE7aXh4UFWAicb6yX6XBEA", - "symbol": "IMBA", - "name": "The Lion Cats", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/nf0x/the-lion-cats-logo/main/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.com/invite/thelioncats", - "twitter": "https://twitter.com/TheLionCatsNFT", - "website": "https://thelioncats.com/" - } - }, - { - "chainId": 101, - "address": "GUvq7jCQq7arzs3aQHNHoFkAxQwPY8gsn2D5pfsJ7vPN", - "symbol": "CorsairCoin", - "name": "CRCNTKN", - "decimals": 0, - "logoURI": "https://terrestrial.cards/CorsairCoinToken.png", - "tags": [ - "social-token", - "investing-token", - "game-token", - "io-game", - "GameFi", - "Gaming" - ] - }, - { - "chainId": 101, - "address": "DAumagnEA3co6SG6NH7Fsh9CgvppLP98viE43ECNPv9m", - "symbol": "JDC", - "name": "Just Duct Cleaning", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Prime3vil/Just-Duct-Cleaning-Token/main/logo.png", - "tags": ["general-token"] - }, - { - "chainId": 101, - "address": "9UyfZHMQy87TbRexvdKi3kvJdCerWfENEz1x3jyf5D6Z", - "symbol": "DUMB", - "name": "Dumb Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/dumbtokenorg/dumbtoken/main/logo.png", - "tags": ["social-token", "utility-token", "community-token"], - "extensions": { - "discord": "https://dumb.digital/discord", - "website": "https://dumb.digital" - } - }, - { - "chainId": 101, - "address": "PartumKFrDhAkoGaQw3o1eLs1MXmpBjKfU5eMpzwyxW", - "symbol": "PAR", - "name": "Partum", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/PartumKFrDhAkoGaQw3o1eLs1MXmpBjKfU5eMpzwyxW/logo.png", - "tags": ["utility-token", "nfts", "governance-token"], - "extensions": { - "discord": "https://discord.gg/ynCfkSMfwK", - "facebook": "https://www.facebook.com/PartumNFT/", - "github": "https://github.com/PartumNFT/", - "instagram": "https://www.instagram.com/partumnft/", - "telegramAnnouncements": "https://t.me/PartumRiseOfAGladiator", - "twitter": "https://twitter.com/PartumNFT", - "website": "https://riseofagladiator.com/", - "whitepaper": "https://whitepaper.riseofagladiator.com/" - } - }, - { - "chainId": 101, - "address": "51rGXakBCcBoti5TSjKZ5kYtaiFfu8wnxjfEgPZRsdMD", - "symbol": "FFSH", - "name": "Fire FISH", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Breacker/token-list/main/assets/mainnet/51rGXakBCcBoti5TSjKZ5kYtaiFfu8wnxjfEgPZRsdMD/Fire_FISH.png", - "tags": ["meme", "Discret_project", "fish_token"], - "extensions": { - "facebook": "https://www.facebook.com/Fire-FISH-103087682288324" - } - }, - { - "chainId": 101, - "address": "FF41MLzeQnqr7zQzgWVev9VoSLvVYC2UxvYeKiqKCfrv", - "symbol": "WAGG", - "name": "WaggCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jw4gg/Crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "B97yZiSWsRGsbYGa1tCPZzL3K6ggM36pQjzCHg1STsym", - "symbol": "XMB", - "name": "XMBCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/XMBCreator/crypto/main/xmbcoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CRmFZnjVrKgNESqxKLpBmuuakZzYqWKR2cwTQCDkvQbS", - "symbol": "LENS", - "name": "Lens Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/fpetru104/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BDNRJZ6MA3YRhHcewYMjRDEc7oWQCxHknXU98wwTsSxu", - "symbol": "OOO", - "name": "Particles", - "decimals": 2, - "logoURI": "https://i.imgur.com/mCP5vxP.jpg", - "tags": [ - "particles", - "one-of-ones", - "bridgesplit-fraction", - "curated-index" - ] - }, - { - "chainId": 101, - "address": "95ZWS7g7qTTbgkvuxuj54NK5hJ4pRz94CCgURAhJanEy", - "symbol": "SEC", - "name": "Security", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/sec-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "38UngbbBnGnxB2ZaYJw5yRD8axh9XNjWPWuU6UjrCjjJ", - "symbol": "CLASS", - "name": "Class", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/class-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7cL2XirnaDyeb5aDNZSsxQdV3cmUDyRrw1JfqHLMf1fJ", - "symbol": "PSHNP", - "name": "Pushin P", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/simpgawd/token/main/letter_p_PNG37.png", - "tags": ["meme", "Discret_project", "fish_token"], - "extensions": { - "facebook": "https://www.facebook.com/Fire-FISH-103087682288324" - } - }, - { - "chainId": 101, - "address": "2gbUoS6obaqer6waiYpJQL8QQFnoqx9k8iaJexVprKwQ", - "symbol": "LUVV", - "name": "Luvv Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/coachjacob1111/crypto/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8aE9jJVosvUxNMev7GHg8zCXEtd4sSVC7ZCc4sjrc68e", - "symbol": "VCC", - "name": "Vice City Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8aE9jJVosvUxNMev7GHg8zCXEtd4sSVC7ZCc4sjrc68e/logo.png" - }, - { - "chainId": 101, - "address": "9xo19RejvwWRPAfGDJ93EoNGxEwmUtZNoMfcSjfKqouq", - "symbol": "KnC", - "name": "KunaiCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/alfredodirksen130/Crypto/main/Final.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CY2E69dSG9vBsMoaXDvYmMDSMEP4SZtRY1rqVQ9tkNDu", - "symbol": "NFD", - "name": "Feisty Doge NFT", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CY2E69dSG9vBsMoaXDvYmMDSMEP4SZtRY1rqVQ9tkNDu/logo.svg", - "tags": ["ethereum", "wrapped", "wormhole", "fractionalized-nft"], - "extensions": { - "address": "0xdfdb7f72c1f195c5951a234e8db9806eb0635346", - "assetContract": "https://etherscan.io/address/0xdfdb7f72c1f195c5951a234e8db9806eb0635346", - "bridgeContract": "https://etherscan.io/address/0x3ee18B2214AFF97000D974cf647E7C347E8fa585", - "coingeckoId": "feisty-doge-nft", - "description": "The first fractionalized doge NFT, backed by one of the most culturally significant digital assets in all of crypto", - "discord": "https://discord.gg/JNKbZur9gd", - "twitter": "https://twitter.com/feistydogenfd", - "website": "https://www.feistydoge.art/" - } - }, - { - "chainId": 101, - "address": "CX3h9eBD9fjaS1TNF51BgsdCNeS8daxbk4c9rF5GHtjj", - "symbol": "SPDLT", - "name": "Speedalot Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/sirspeedalot/soltokenREAL/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FQuUpEgGHMwCLk7gT9B3mSSZQB5Bc3xG8QAdREwxxsmn", - "symbol": "GGC", - "name": "GangGangCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/WombatOverlord/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "STRMPHakTLMzvWoyWiQW4HxLa3eqUVhLWMbVX9GTc11", - "symbol": "STRM", - "name": "Streamflow", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/STRMPHakTLMzvWoyWiQW4HxLa3eqUVhLWMbVX9GTc11/logo.png", - "extensions": { - "discord": "https://discord.gg/SDZpryKsgd", - "medium": "https://streamflow.medium.com", - "telegram": "https://t.me/streamflow_fi", - "twitter": "https://twitter.com/streamflow_fi", - "website": "https://streamflow.finance" - } - }, - { - "chainId": 101, - "address": "DP7rDueWUTYAjeP9cs7o4XfBBL9WZYCDbeA6Y9UUaG99", - "symbol": "YAMA", - "name": "YAMA", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/casmith109/yama/main/logo.png", - "tags": ["social-token", "community-token", "utility-token"] - }, - { - "chainId": 101, - "address": "9dACzqUP3V8FSpn818MLhvu3j7KgzjSTmstGEH53ezLm", - "symbol": "SUCO", - "name": "SUCOIN", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9dACzqUP3V8FSpn818MLhvu3j7KgzjSTmstGEH53ezLm/logo.png", - "tags": [ - "utility-token", - "game-token", - "game-currency", - "GameFi", - "Gaming", - "Play-to-earn", - "Metaverse" - ], - "extensions": { - "description": "SUCOIN is a unique tradable crypto token which serves as perfect medium for easy exchange, purchase, and sale of virtual assets in a rapidly growing digital Sol Unicorns ecosystem. It can be earned by staking NFTs and through rewards by performing various tasks in an upcoming metaverse game.", - "discord": "https://discord.gg/solunicorns", - "instagram": "https://www.instagram.com/solunicorns3d/", - "telegram": "https://t.me/solunicorns", - "twitter": "https://twitter.com/solunicorns3d", - "website": "https://solunicorns.io" - } - }, - { - "chainId": 101, - "address": "6Fw9B7EAyET1ohFsutoU72mUpENvCMBCbHJQRdpJ8jcY", - "symbol": "GPC", - "name": "GaplaCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6Fw9B7EAyET1ohFsutoU72mUpENvCMBCbHJQRdpJ8jcY/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://my.gaplagov.org/" - } - }, - { - "chainId": 101, - "address": "6LtdceheUFnTm7AKPLuLopvn2UCwpy722qFFi7soE2oK", - "symbol": "CSPA", - "name": "Cat Spirit Animal", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/stephenjiang12714/Solana-Token/main/Cat%20Spirit%20Animal.PNG", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "87hhyGRqUET8ptS4KLFucCSZyQeUNpEY9TgLA32VZJRs", - "symbol": "MELO", - "name": "MILANO", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/kambobo/crypto/main/milanooo2.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DdLynXMq4hURnMMNNVt2CRi1WbnbV2NmuEb8skhWZUAh", - "symbol": "DRYGN", - "name": "Draygon Guarantee Mint Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/benpazzo/draygontoken/main/assets/guaranteemint.png", - "tags": ["social-token", "community-token", "utility-token"] - }, - { - "chainId": 101, - "address": "sYQeqp87wBhQyZMo2TfCVNrFiX4HrLAWUkr2rmqbRoN", - "symbol": "DRYGNWL", - "name": "Draygon WL FCFS Mint Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/benpazzo/draygontoken/main/assets/wlfcfs.png", - "tags": ["social-token", "community-token", "utility-token"] - }, - { - "chainId": 101, - "address": "CGBxTQNXMmmCXAPm4dC9MQJ1q8JDDxApwFwW188SdtBu", - "symbol": "TiP", - "name": "CREATiP", - "decimals": 2, - "logoURI": "https://arweave.net/bZGwLPTI6aay84W9TF3R190dezSGf8jpC7VBTXljd2g", - "tags": ["community-token", "fund-your-creator", "tip-token"], - "extensions": { - "description": "CREATiP is a decentralaized funding platform, designed to support independent creators worldwide", - "serumV3Usdc": "4kAzx9Raaw4ZThyN7PTVnc82YP2gLu6xNmH4jHWWSR7N", - "website": "https://www.creatip.online/" - } - }, - { - "chainId": 103, - "address": "8GTpf5LVVY8WZZfm9EnPzS2NrnJFqhzJGALDf71dpwFy", - "symbol": "WORKS", - "name": "WorksToken", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8GTpf5LVVY8WZZfm9EnPzS2NrnJFqhzJGALDf71dpwFy/logo.png" - }, - { - "chainId": 101, - "address": "E7FusqnjCWvTK2TQhqkwHPYEyg3zah5mSzz4DHHhk7RA", - "symbol": "SWL", - "name": "Solitarian WL Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/E7FusqnjCWvTK2TQhqkwHPYEyg3zah5mSzz4DHHhk7RA/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "6pT6udhxrj3WbwZNVcV88r49eAQDzGB2KvGqxLVdi6U8", - "symbol": "RHE", - "name": "RICHE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/RicheCorp/CryptoToken/main/Logo22.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DkFiLryp7uj4SqB6HvXGRMGguZEC1p3yXTuo7TtrofqF", - "symbol": "TABC", - "name": "True Aid Bangladesh Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/tmtns/TABC/main/TrueAidBangladesh%20Coin%20logo.png", - "tags": ["social-token", "bangladesh"], - "extensions": { - "description": "True Aid Bangladesh Coin", - "twitter": "https://twitter.com/TrueAidBD" - } - }, - { - "chainId": 101, - "address": "4fPdQ19Y3UxnvWyAXAdhCpsseSjQ3RmyPqG6d2HqPxtg", - "symbol": "MOR", - "name": "More", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/mor-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9hgs7innQNcqD7TVvRt74i4r3vX7zhs7gm3V121CfZsx", - "symbol": "LES", - "name": "Less", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/les-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AYbqRoZz7J5q6vKbF8WgiphrszpCNdQW2t8gtGkqGzeb", - "symbol": "CHRM", - "name": "Charm", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/chrm-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4nYLgH7QhJNWVMXbcjyECD8ThhyXT98zDCcvPmJPjjeM", - "symbol": "POOF", - "name": "Magic", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/poof-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AHRuDpG1yHcyJN6XeJ8s2izzGM9eVcvkz8cVWcfy1sm1", - "symbol": "LGNC", - "name": "Elegance", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/lgnc-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AYFy612QPJ3C5GjTd142XnNFTve8HmDTy9Ps9x4g1X2Y", - "symbol": "VLTN", - "name": "Valentine", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/vltn-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GAxouwwpiB1BYi6uBhpowBhGhxvcyDmy8iQFCCSCivS7", - "symbol": "GFT", - "name": "Gift", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/gft-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BKPJsy2uSiJTimAKwpTiKGMr1JxH2b9ZPQbJNSmE9NR8", - "symbol": "AWD", - "name": "Award", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/awd-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BNjUKCGNdjVcD69d8FN3UyYbJZTSLYhce1RAkk1zbePA", - "symbol": "MLOR", - "name": "Mazalore", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Madara25M/Crypto/main/logo.png", - "tags": [ - "ultility-token", - "game-token", - "community-token", - "metaverse-token", - "nft-token" - ] - }, - { - "chainId": 101, - "address": "fjWssw19SJvBzkRk8r5RRik6ZTkMTgg4YSpYp3MKEDw", - "symbol": "SEX", - "name": "Sex", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/BlockchainWizard/Crypto/main/Sex.png", - "tags": [ - "utility-token", - "social-token", - "nft-token", - "community", - "sex", - "xxx" - ] - }, - { - "chainId": 101, - "address": "7TX7GAJEZ2DG46cRRvZLgXhmAow4ojDEcg3SPCQCqFiG", - "symbol": "SHADOWFAX", - "name": "Shadowfax", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/shadowfax92/token-list/fc7dc0b8a7a575af838cfce9a72003756bf7efde/assets/mainnet/7TX7GAJEZ2DG46cRRvZLgXhmAow4ojDEcg3SPCQCqFiG/logo.png", - "tags": ["social-token"], - "extensions": { - "description": "Shadowfax", - "website": "https://shadowfax.app" - } - }, - { - "chainId": 101, - "address": "6btA3WkxvPsw7H8R1LF5c7W9BDrHubBE6FL8nprMFRT3", - "symbol": "RKTK", - "name": "Rick Rick Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/RicktaScale89/crypto/main/rickLogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BJUH9GJLaMSLV1E7B3SQLCy9eCfyr6zsrwGcpS2MkqR1", - "symbol": "swimUSD", - "name": "Swim Hexapool LP", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BJUH9GJLaMSLV1E7B3SQLCy9eCfyr6zsrwGcpS2MkqR1/logo.svg", - "tags": ["lp-token"], - "extensions": { - "discord": "https://discord.gg/wGrxQ7GAgP", - "medium": "https://medium.com/@swimprotocol", - "telegram": "https://t.me/joinchat/Mnc1WjrKcq8yYTM1", - "twitter": "https://twitter.com/SwimProtocol", - "website": "https://swim.io/", - "whitepaper": "https://swim.io/whitepaper.pdf" - } - }, - { - "chainId": 101, - "address": "ErbJzzRAEM8cVRMXHTftVDFbUVM7TiFWSfaZx4zQRJhS", - "symbol": "NFTABSWL", - "name": "NFTABS Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jenvillaganas/crypto/main/assets/ErbJzzRAEM8cVRMXHTftVDFbUVM7TiFWSfaZx4zQRJhS/logo.jpg", - "tags": ["whitelist-token"], - "extensions": { - "discord": "https://discord.com/invite/nftabs", - "twitter": "https://twitter.com/nonfungibletabs", - "website": "https://www.nftabs.io" - } - }, - { - "chainId": 101, - "address": "765R1rpPGVZKKJZPevTp5b2dTAHJZNX4feTiHDEqj7JV", - "symbol": "$wheat", - "name": "BCBY wheat", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/765R1rpPGVZKKJZPevTp5b2dTAHJZNX4feTiHDEqj7JV/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://www.bcbarnyard.info/" - } - }, - { - "chainId": 101, - "address": "QLtZHvXyk2cUTT4DPKazTjMZ5DLJhQj8zjCSJWqNH4q", - "symbol": "ZFRC", - "name": "ZefranCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/GabrielFRANCEZ/crypto-ZFRN/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5J2LCgFwz74sC9cwxYMjZDXSL7VDnXU9rUA8NE7pdkhy", - "symbol": "VIN", - "name": "VIN Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/vineelsai26/crypto/main/5J2LCgFwz74sC9cwxYMjZDXSL7VDnXU9rUA8NE7pdkhy/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "9D3dzDFYSpaqgVRCUcnWYjj3apJCAPBY4QEB1Wk78BkL", - "symbol": "AMT", - "name": "Amethyst", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Hariienesh1901/Amethyst/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9xYuVh6h2WPNorGiMP6AfYfewVbvm4fgGDj4bywKRoss", - "symbol": "TKS", - "name": "TOKIO", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9xYuVh6h2WPNorGiMP6AfYfewVbvm4fgGDj4bywKRoss/logo.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "6Kmb13yPMEfeg8DMPJAsxcuGNJZG7KLK2uL5vPamLMPj", - "symbol": "Cypher", - "name": "CYPH", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6Kmb13yPMEfeg8DMPJAsxcuGNJZG7KLK2uL5vPamLMPj/logo.png", - "tags": ["community-token", "utility-token"] - }, - { - "chainId": 101, - "address": "9cjgHXpgMhYHQ4oU2gKiWzVtKsj4xtv7zf8LN8qZrTzC", - "symbol": "LIO", - "name": "Lio Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/erik-la/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9C7ipMbr5b2YhgGzFy1cxUotnCHcPhbp6wdQWD4EeggA", - "symbol": "HIST", - "name": "Historians WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9C7ipMbr5b2YhgGzFy1cxUotnCHcPhbp6wdQWD4EeggA/logo.png", - "tags": ["mint-token"], - "extensions": { - "description": "WL Mint Token for Boopieveres: Historians", - "discord": "https://discord.gg/boopie", - "twitter": "https://twitter.com/boopieverse", - "website": "https://boopieverse.com/boopie-historians" - } - }, - { - "chainId": 101, - "address": "FtzDsgh8enWNBr1RaLngS7FoCVg8y2eM8dtHpp6L3E82", - "symbol": "YOL", - "name": "WAYSON", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/yol61/cyrpto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BUMxQPidV5oAyU2qbGHn7n5efG5GT3zCBRZ626wQqhAV", - "symbol": "BUM", - "name": "Space Bums Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BUMxQPidV5oAyU2qbGHn7n5efG5GT3zCBRZ626wQqhAV/bum-token.png", - "tags": [ - "social-token", - "utility-token", - "community-token", - "game-token", - "meme-token", - "metaverse-token", - "nft-token", - "nfts" - ], - "extensions": { - "discord": "https://discord.gg/Qe59g3Vun2", - "twitter": "https://twitter.com/space_bums", - "website": "https://spacebums.io" - } - }, - { - "chainId": 101, - "address": "GASxcJbxFkhQA7WAhvCodwB9GxZRujpPUwpyp7KqbZog", - "symbol": "BUMGAS", - "name": "Space Bums Fuel", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GASxcJbxFkhQA7WAhvCodwB9GxZRujpPUwpyp7KqbZog/bum-gas-token.png", - "tags": [ - "social-token", - "utility-token", - "community-token", - "game-token", - "meme-token", - "metaverse-token", - "nft-token", - "nfts" - ], - "extensions": { - "discord": "https://discord.gg/Qe59g3Vun2", - "twitter": "https://twitter.com/space_bums", - "website": "https://spacebums.io" - } - }, - { - "chainId": 101, - "address": "HARDxYqxDCdj8sPr5fFtuCtAw1GHUWXKkLsKnSzJAPfv", - "symbol": "HARDBUM", - "name": "Space Bums Metal", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HARDxYqxDCdj8sPr5fFtuCtAw1GHUWXKkLsKnSzJAPfv/hard-bum-token.png", - "tags": [ - "social-token", - "utility-token", - "community-token", - "game-token", - "meme-token", - "metaverse-token", - "nft-token", - "nfts" - ], - "extensions": { - "discord": "https://discord.gg/Qe59g3Vun2", - "twitter": "https://twitter.com/space_bums", - "website": "https://spacebums.io" - } - }, - { - "chainId": 101, - "address": "AV4uKFZXqkqe15CaksCPQsndeVjydAyBYvv2qLvWjMhy", - "symbol": "KGG", - "name": "Knowledge Gamers Guild", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AV4uKFZXqkqe15CaksCPQsndeVjydAyBYvv2qLvWjMhy/logo.png" - }, - { - "chainId": 101, - "address": "5Trek8ULqkerReUEKJ6h9SAwQtzrq4qcvfM9gUdgHubs", - "symbol": "CAR", - "name": "Car", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/BlockchainWizard/Crypto/main/Car.png", - "tags": [ - "utility-token", - "social-token", - "nft-token", - "community", - "cars", - "car" - ] - }, - { - "chainId": 101, - "address": "AjWiUP3kFrShTTrQejvxxBaToB3GZdtvsmxxTvCz6xFM", - "symbol": "CARS", - "name": "Cars", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/BlockchainWizard/Crypto/main/Cars.png", - "tags": [ - "utility-token", - "social-token", - "nft-token", - "community", - "cars" - ] - }, - { - "chainId": 101, - "address": "6yNgVg6G9JPZWtDMCtHSQb1g26q2VRP8LBG93dUXouGa", - "symbol": "JWC", - "name": "JWcraft", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/TheRealSmartiesG/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EaW33x381UER8ea72aaETaZRP3TQuPheAqoEnazgvkVS", - "symbol": "BEST", - "name": "BestOfSol", - "decimals": 2, - "logoURI": "https://arweave.net/QGMtPDCZB3X2S-2m8x_DZi3q6BMIGxvYdyUhrmRSM10", - "tags": [ - "bestofsol", - "curatorsol", - "bridgesplit-fraction", - "curated-index" - ] - }, - { - "chainId": 101, - "address": "GP4NH4i11nPktMsZPPPA2QDnfmdTUqEDzGzGTdY3WFHF", - "symbol": "MFC", - "name": "MetaFruit", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MetaFruit-Token/crypto/main/logo.png", - "tags": ["social-token", "metafruit", "utility-token", "community"] - }, - { - "chainId": 101, - "address": "6dbgnU1Ua3Tf6L4CdxGzq1gxPdH2iB23jVfhQXFUBLCN", - "symbol": "$USELESS", - "name": "USELESS", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/setoKaibalol/pictures/main/pic/NGMI.png", - "tags": ["meme-token"] - }, - { - "chainId": 101, - "address": "jPdS9RQGtS2MsieiiwNoZmGjP4REZmvy1PxEatBjTSk", - "symbol": "ERC", - "name": "ERC", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/GeorgeGento/ERC/main/logo.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "EuVQy8s21rBgp6yWPAu1qJBksB3WLdtGjLv1qPA6Pk9W", - "symbol": "WOSV", - "name": "WOS VIP CLUB", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EuVQy8s21rBgp6yWPAu1qJBksB3WLdtGjLv1qPA6Pk9W/logo.png", - "tags": ["nfts"], - "extensions": { - "discord": "https://discord.gg/vhjPC4xzSE", - "instagram": "https://www.instagram.com/wolfofsol/", - "twitter": "https://twitter.com/WolfOfSol", - "website": "https://www.wolfofsol.com/" - } - }, - { - "chainId": 101, - "address": "4m2Gi4BwwGqAtGh2zr6xNZTSSJ5hEGVdNedJ7D3B4UQN", - "symbol": "RZT", - "name": "Rizzotti Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/rizzottididier/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8NyHGgEyf5djAFeMhTukwLYEBKEWkrzJ742QmtNLiUmq", - "symbol": "CHRLI", - "name": "CharlieCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/CharlesKlug/Crypto-Image-3/main/CharlieCoin5.png", - "tags": ["social-token"] - }, - { - "chainId": 102, - "address": "5Ns2m2oBWyj7Kz4VgGgenHZA5dUTJ224AbtjUjaDB651", - "symbol": "WOOD", - "name": "WOOD - Metaversium", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/dwrx/token-list/main/assets/mainnet/5Ns2m2oBWyj7Kz4VgGgenHZA5dUTJ224AbtjUjaDB651/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/metaversiumgame", - "website": "https://metaversium.io/" - } - }, - { - "chainId": 102, - "address": "2NzAWwLj8GcW3wT9LHSdsyeMTMPCdNp23EAg2YwrLjCz", - "symbol": "STONE", - "name": "STONE - Metaversium", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/dwrx/token-list/main/assets/mainnet/2NzAWwLj8GcW3wT9LHSdsyeMTMPCdNp23EAg2YwrLjCz/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/metaversiumgame", - "website": "https://metaversium.io/" - } - }, - { - "chainId": 102, - "address": "ExKEMV2Z9dSHdRg6AkcFMXLPUqzta7zcyK2UQk3a4soy", - "symbol": "IRON", - "name": "IRON - Metaversium", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/dwrx/token-list/main/assets/mainnet/ExKEMV2Z9dSHdRg6AkcFMXLPUqzta7zcyK2UQk3a4soy/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/metaversiumgame", - "website": "https://metaversium.io/" - } - }, - { - "chainId": 101, - "address": "2BG5Db61mF6MLpT5YEuJZSfeMkqBaMRGHygzriT5cPam", - "symbol": "BBP", - "name": "Blueberry Pi", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Luis-Gehrmann/blueberry_pi/main/donut-g466161830_1280.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HAfTjdSjZiquZiAkmsYBmcFR5NM7cP8HtMqjQRk8eVTX", - "symbol": "ICON", - "name": "ICON", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HAfTjdSjZiquZiAkmsYBmcFR5NM7cP8HtMqjQRk8eVTX/logo.png", - "extensions": { - "twitter": "https://twitter.com/IconicApeClub", - "website": "https://iconicapeclub.com" - } - }, - { - "chainId": 101, - "address": "DBamvBGp7KNkp7MXyUEzN6cG71X6XxQamjBnQz6zUTTF", - "symbol": "TOBY", - "name": "TobyCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/DanielKDevine/CryptoToby/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "SGWxXHYJuQmx2123zbUj3uA3Qi9Ehf56Jr69hbAJGsc", - "symbol": "SGW", - "name": "Solana Ghoests Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SGWxXHYJuQmx2123zbUj3uA3Qi9Ehf56Jr69hbAJGsc/logo.png", - "extensions": { - "twitter": "https://twitter.com/solanaghoests" - } - }, - { - "chainId": 101, - "address": "CpyfVs4mkJyqRrkrbo2W7htRunnh41WSNiBSBU8HNwTG", - "symbol": "WEX", - "name": "WexCoin", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/coreycullen00/WexCoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "WLKyvhnYTrgHKawvjMdQQCzh3Q1rDqDV5bqiCJKLwqP", - "symbol": "KART", - "name": "Kart WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WLKyvhnYTrgHKawvjMdQQCzh3Q1rDqDV5bqiCJKLwqP/logo.png" - }, - { - "chainId": 101, - "address": "AiUQabNKfJtpnyk7u3FbaDzqLFy4Ay3gAF784aPELJyc", - "symbol": "Llamas", - "name": "LlamasEmpire", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AiUQabNKfJtpnyk7u3FbaDzqLFy4Ay3gAF784aPELJyc/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "74P3Dt5FY1Mg1ypmaAeGcrxMpTxERmkJhQsmcYG38Uj8", - "symbol": "Crocs", - "name": "ChosenCroc", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/74P3Dt5FY1Mg1ypmaAeGcrxMpTxERmkJhQsmcYG38Uj8/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "85LBfFboXNmmNzkEAUhfytTEPD31qiddtjepPPywyix4", - "symbol": "ADSL2EF", - "name": "Adsl2ef Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/85LBfFboXNmmNzkEAUhfytTEPD31qiddtjepPPywyix4/logo.png", - "tags": ["utility-token"], - "extensions": { - "facebook": "https://www.facebook.com/adsl.formation.tg", - "instagram": "https://www.instagram.com/adsl2ef", - "website": "https://www.adsl2ef.com/", - "youtube": "https://www.youtube.com/channel/UCJnZdPgPwI2rd8_-dfGWOng" - } - }, - { - "chainId": 101, - "address": "FFBNNQZ6ynKXEdqUi9PnLxmkgzJc7Qf43KRcBTzbJVu5", - "symbol": "PATTY", - "name": "PATTY TOKEN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FFBNNQZ6ynKXEdqUi9PnLxmkgzJc7Qf43KRcBTzbJVu5/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4u3LdFiY2JoSc7znP9ZrgKkmTAtVB9Qo254A2nH2nXGU", - "symbol": "VCT", - "name": "Vibing Cat", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/fpetruololo/cat2/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9iz45n44TQUPyoRymdZXEunqvZUksZyhzS6zQ7sLMadj", - "symbol": "POT", - "name": "Positron", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9iz45n44TQUPyoRymdZXEunqvZUksZyhzS6zQ7sLMadj/logo.png", - "tags": ["utility-token", "social-token", "governance-token"], - "extensions": { - "description": "POT is a utility token for Ubik LoFi metaverse." - } - }, - { - "chainId": 101, - "address": "AsiP4tPh6tWfgKMjTibhA5H6ge3EnHSyh3iPPDEFSqSu", - "symbol": "NET", - "name": "Negatron", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AsiP4tPh6tWfgKMjTibhA5H6ge3EnHSyh3iPPDEFSqSu/logo.png", - "tags": ["utility-token", "social-token", "governance-token"], - "extensions": { - "description": "NET is a governance and utility token for Ubik LoFi metaverse." - } - }, - { - "chainId": 101, - "address": "HyuRGvanUr6kxs7MHNA9c3CzxwJtBLe1BxDZPcB7Akkq", - "symbol": "CKIV", - "name": "CharlieKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ceklug/CharlieCoin2/main/CharlieCoin5.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CEUQNkt3tXqakiXurUbCMVVq9RRaPFsaw8fUKfTNgpup", - "symbol": "BUDS", - "name": "BUDS - PotHeads", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/PotHeadsNFT/marketing-assets/main/9YjkcXTNKn3f2NmgO67w8P2kFC_LfCNvPdyG3OaSy24%207.57.15%20AM.png", - "tags": ["utility-token", "nft-token"], - "extensions": { - "twitter": "https://twitter.com/Pot_Heads_NFT", - "website": "https://potheads-nft.com/" - } - }, - { - "chainId": 101, - "address": "CPiJMJPcYemoo8dW1LfrVE39JyS3CmHkr2gwewjzihxd", - "symbol": "THC", - "name": "The Holy Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/TinyHarvester/crypto/main/logo.png", - "tags": ["social-token", "utility-token", "Game-Token", "community-token"] - }, - { - "chainId": 101, - "address": "CnscHgCcmzFEntdZoAjvLmZWN4cZL1Fy2pKF4NUJiFeb", - "symbol": "STNE", - "name": "Stone Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/AlanBeez/Stone_Coin/main/Logo.png.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BVtZbAcUNYg8SD4UL9YWvibRtHK11Gu3pERjR2X2dhPE", - "symbol": "TEK", - "name": "TEKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/lakshgandikota/tekonsolana/main/logo.png", - "tags": ["social-token", "meme-token"] - }, - { - "chainId": 101, - "address": "T1AJW2EJLkDeEFEurHCJH9vBde23tVKD4pgDHEFCGUK", - "symbol": "AOSM", - "name": "AOS Mint Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/zenturing/token-list/aos_t/assets/mainnet/T1AJW2EJLkDeEFEurHCJH9vBde23tVKD4pgDHEFCGUK/aos.png", - "tags": ["mint-token"] - }, - { - "chainId": 101, - "address": "9tdCBZd9ZtpAS4KjBhfx4VsA9svC7ZQD8UR7FXHyLPaP", - "symbol": "TBMP", - "name": "ToadBoys Mint Pass", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9tdCBZd9ZtpAS4KjBhfx4VsA9svC7ZQD8UR7FXHyLPaP/toad_logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://www.toadboys.io/" - } - }, - { - "chainId": 101, - "address": "Ek1wxugWrFimo8NExqzYaGDnikEibuUrkEaWEs3z2aTU", - "symbol": "DAVE", - "name": "DAVE COIN", - "decimals": 6, - "logoURI": "https://github.com/DAVECOIN1/Crypto/blob/main/DAVECOINLOGO.png", - "tags": ["social-token", "meme-token"] - }, - { - "chainId": 101, - "address": "6XCZB7vqgmcNazYJRgQaQqYrig49SbeE18oBb6CpLRwc", - "symbol": "DRUNK", - "name": "CryptoDistillation", - "decimals": 0, - "logoURI": "https://github.com/rynoroot/crypto/blob/main/DrunkPug.png", - "tags": ["utility-token", "community-token", "social-token"] - }, - { - "chainId": 103, - "address": "56eg63pjkbYB3XYBWu23scue61W6emtNEuYNEBtsCWDy", - "symbol": "ARK", - "name": "arkayde-monkey", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/yoavshmariahu/token-list/main/assets/mainnet/56eg63pjkbYB3XYBWu23scue61W6emtNEuYNEBtsCWDy/logo.png", - "tags": ["nft"], - "extensions": { - "website": "https://www.arkayde.io/" - } - }, - { - "chainId": 101, - "address": "HT5cCnN9kugN7V3D3CLiskkREfKxBcJnAPdoxCz4Ciju", - "symbol": "NWFP", - "name": "New World Federation Pound", - "decimals": 12, - "logoURI": "https://raw.githubusercontent.com/newworldfederation/nwfp/main/logo.png", - "tags": ["community-token"], - "extensions": { - "website": "https://nwf.earth/" - } - }, - { - "chainId": 101, - "address": "5HEu2bEscWLvYUwSof3wAzLciqUXLLzaa7e6WWPfZzxh", - "symbol": "VOID", - "name": "VoidCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/fpetruololo/void/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2qKKBY3P6n2e2kFQdMmkvBvDKc5wRbtjTCbaNy2TGHeU", - "symbol": "ZIGI", - "name": "ZigiCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/DaviZigiJones/ZigiCoin/main/ZigiCoin.png", - "tags": ["social-token"], - "extensions": { - "twitter": "https://twitter.com/DavidZigiJones" - } - }, - { - "chainId": 101, - "address": "CNgARsLNnudL5UqbqkwA2mQ1aah2U9kfHFyoppZTeTKx", - "symbol": "MINTTUSKER", - "name": "Mint Discount Team Tuskers", - "decimals": 0, - "logoURI": "https://www.teamtuskers.com/wp-content/uploads/2021/12/tuskers-logo-circle-01.png", - "tags": ["discount-token"], - "extensions": { - "website": "https://www.teamtuskers.com/" - } - }, - { - "chainId": 101, - "address": "3CXVYitUaSMxifZKyiBRDT1TMcGrL1nJ2WfwdgnnvrKS", - "symbol": "STC", - "name": "Shortcoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3CXVYitUaSMxifZKyiBRDT1TMcGrL1nJ2WfwdgnnvrKS/logo.png", - "extensions": { - "website": "http://shortgun.in/shortcoin/" - } - }, - { - "chainId": 101, - "address": "8Ntf39cB3qXKC1wZ1pXDPpaR2gWGqMXfsffsRqC3DZNa", - "symbol": "GSTR", - "name": "G Street Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MEENcoin/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CPDkFwaWuGF56taYCJrGdqrbMcV28s2EuZhs2vPMDU95", - "symbol": "TREES", - "name": "TREES Token", - "decimals": 9, - "logoURI": "https://github.com/RaymondBillyRay/TREES/blob/main/logo.png", - "tags": [ - "social-token", - "utility-token", - "Game-Token", - "community-token", - "Colorado", - "Metaverse", - "climate-token" - ] - }, - { - "chainId": 101, - "address": "9EWr2TsGKwAQSL2R7sQex6TACxXu6wUQJktEsogtexCN", - "symbol": "JST", - "name": "Justice", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/jst-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2CnnqGkniLnYG2idYCr7gGWyvvnwEKAaqX3mKiSGELLh", - "symbol": "HAPX", - "name": "Happiness", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/hapx-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3zD9zassLocyH6Tdj2NYXw6ym1jtgaM3QDkmeJNwNjer", - "symbol": "ULTRON", - "name": "Ultron", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3zD9zassLocyH6Tdj2NYXw6ym1jtgaM3QDkmeJNwNjer/logo.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "description": "Ultron is a utility token for the Ultron Apes community", - "discord": "https://discord.gg/ultronapes", - "twitter": "https://twitter.com/ultronapes" - } - }, - { - "chainId": 101, - "address": "Foxy7Df6VEc1dUCr1ExZfRAqqHaifNFDd8ccvAs59DNr", - "symbol": "FOXY", - "name": "Foxy", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/foxytoken/foxytoken/main/foxy.png", - "extensions": { - "discord": "https://discord.gg/9Yph9njFNF", - "github": "https://github.com/foxytoken", - "telegram": "https://t.me/foxyarmy", - "twitter": "https://twitter.com/joinfoxyarmy", - "website": "https://foxy.army" - } - }, - { - "chainId": 101, - "address": "FnmSHBjt45RAWhcKCTPgbmJbNcBGu1KXXFbEYd5HxGoc", - "symbol": "CWC", - "name": "cwCoin", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/Copyrightsworld/cwcoin/main/cwcoin-logo.png", - "tags": ["community-token"] - }, - { - "chainId": 101, - "address": "5P1ZqF9UspfEA3foGywTbjm5UxCjLLu7hfaPh5gSCgDM", - "symbol": "THESIS", - "name": "Thesis Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/DekreedStudios/varkalai/main/thesis.png", - "tags": ["utility-token"], - "extensions": { - "description": "Varkalai Official Token", - "website": "https://www.varkalai.com" - } - }, - { - "chainId": 101, - "address": "GAERrdnan7rsVyqcFxHFWoPcNdMEfwinHCGGGSyhzkQu", - "symbol": "VRK", - "name": "Varkalai Founder", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/DekreedStudios/varkalai/main/varkalai-founder.png", - "tags": ["utility-token"], - "extensions": { - "description": "Varkalai Official DAO Token", - "website": "https://www.varkalai.com" - } - }, - { - "chainId": 101, - "address": "CHzPHnY84VZdgzEnpPJZBTCXiSSsiMEah1qeLGQgD2q8", - "symbol": "HAPPY", - "name": "HAPPY", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CHzPHnY84VZdgzEnpPJZBTCXiSSsiMEah1qeLGQgD2q8/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "vYDNTpXUjidPNewzHxcCC7NRT2i97J82LeFkZyEZ3HM", - "symbol": "$DNWL", - "name": "DNMM WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/vYDNTpXUjidPNewzHxcCC7NRT2i97J82LeFkZyEZ3HM/logo.png", - "extensions": { - "discord": "https://discord.gg/DegenNation69", - "twitter": "https://twitter.com/DegenNation69", - "website": "https://degen-nation69.com/" - } - }, - { - "chainId": 101, - "address": "4SVyZ9e8EJFLiHeoys7Bsm4EH8bkfCRMcL4TzEEfsyXE", - "symbol": "MASK", - "name": "Please don't tell Mask token", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4SVyZ9e8EJFLiHeoys7Bsm4EH8bkfCRMcL4TzEEfsyXE/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://www.pleasedonttell.art/" - } - }, - { - "chainId": 101, - "address": "7yg1kQGz89FzmjbdUppFZCSWAQsjn7zYGJ4o8wtb7gju", - "symbol": "ENFT", - "name": "ENOFEL", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7yg1kQGz89FzmjbdUppFZCSWAQsjn7zYGJ4o8wtb7gju/logo.png", - "tags": ["community-token", "nfts", "ENOFEL"], - "extensions": { - "website": "http://enofel.com/" - } - }, - { - "chainId": 103, - "address": "EMTaakqZJn2AfXjWX5Y6avjssBgsqDVijQebL7frmEh5", - "symbol": "RUNI", - "name": "Runi Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EMTaakqZJn2AfXjWX5Y6avjssBgsqDVijQebL7frmEh5/logo.png" - }, - { - "chainId": 103, - "address": "7Wh4ALdTGJkSwCPrP9vFfywMxjDjgFPF4JmyJPLp7kSJ", - "symbol": "WORKS", - "name": "WORKS", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7Wh4ALdTGJkSwCPrP9vFfywMxjDjgFPF4JmyJPLp7kSJ/logo.png" - }, - { - "chainId": 101, - "address": "Ddc3Rd6dbXysGcFHB2jyEXtpSZ2KFGsJ1wNiG76GUuk3", - "symbol": "BHN", - "name": "Bhuna", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/hotdogtown/logopng/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BHvUQ1igzBbeoZBjfuYw5Eax25nMH2C6qDrGyLH5kt48", - "symbol": "SNPC", - "name": "SnipeCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/steve12345585/snipecoin/main/SNIPECOIN.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Hero6s7zJXsw9hfCXLVR5stLqgCok3E7CCkpQEoLAk2g", - "symbol": "HERO", - "name": "Solhero Finance", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Hero6s7zJXsw9hfCXLVR5stLqgCok3E7CCkpQEoLAk2g/logo.png", - "tags": ["utility-token", "game-currency", "GameFi"], - "extensions": { - "discord": "https://discord.io/solhero-finance", - "telegram": "https://t.me/SolheroFinance", - "twitter": "https://twitter.com/SolheroFi", - "website": "https://solhero.finance/" - } - }, - { - "chainId": 103, - "address": "CuxuCrT6FCAc5SUoGDoMVuf7UCLwAvzUmseq4a9VBNqw", - "symbol": "DRT", - "name": "Digital Ranger Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CuxuCrT6FCAc5SUoGDoMVuf7UCLwAvzUmseq4a9VBNqw/logo.png" - }, - { - "chainId": 101, - "address": "7gjTvVbg1R62yo2iAwusg1zSH5Zp1FhP1zF7hFNrrHPT", - "symbol": "BOK", - "name": "BokBok", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7gjTvVbg1R62yo2iAwusg1zSH5Zp1FhP1zF7hFNrrHPT/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Mechabots live to fight, and they fight to earn BokBoks in MechaFightClub, the biggest fight club in the metaverse! BokBok!", - "discord": "https://discord.gg/mechafightclub", - "instagram": "https://www.instagram.com/mechafightclub/", - "linkedin": "https://www.linkedin.com/company/irreverentlabs/", - "twitter": "https://twitter.com/MechaFightClub", - "website": "https://mechafightclub.com" - } - }, - { - "chainId": 101, - "address": "38FmKLADxGDhdjJqSm6o6ahkdabZDBwkxXcu4qSyruZ4", - "symbol": "ROBOT", - "name": "ROBOT COIN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/38FmKLADxGDhdjJqSm6o6ahkdabZDBwkxXcu4qSyruZ4/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://developrobots.com/" - } - }, - { - "chainId": 101, - "address": "HF1Y7w9dzFaodMrZYATEKTgySUeLek8SUhW36Gye4x8Q", - "symbol": "LOCO", - "name": "ElonCoin", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/eloncoin2022/logo/main/logo.jpg", - "tags": [ - "social-token", - "meme-token", - "payment", - "solana-ecosystem", - "media", - "web3" - ] - }, - { - "chainId": 101, - "address": "GZwi7xwAkdqXXntybrCJ4e16faQjG57K17WuDg2copFj", - "symbol": "PZAH", - "name": "ThePzahParty", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ThePzahParty/The-Pzah-Party/main/PIXELZAH1.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GRfw4aEVY12C7vFjs1u1GQ1eLEsaEiUjrfMNfmjrD1W", - "symbol": "$GODz", - "name": "GODz Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GRfw4aEVY12C7vFjs1u1GQ1eLEsaEiUjrfMNfmjrD1W/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/C4WG3YZCbN", - "twitter": "https://twitter.com/nft_godz", - "website": "https://godznft.com/" - } - }, - { - "chainId": 101, - "address": "HM9mt39fiUqeYnnV1FzHeW421Uq61t3t6Qyp7PzWFfHN", - "symbol": "GODzWL", - "name": "GODz WL Seed Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HM9mt39fiUqeYnnV1FzHeW421Uq61t3t6Qyp7PzWFfHN/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/C4WG3YZCbN", - "twitter": "https://twitter.com/nft_godz", - "website": "https://godznft.com/" - } - }, - { - "chainId": 101, - "address": "32Eh585dMTSAPHF28DEG8i8vNcS9iwoVRdaJkBucfqG1", - "symbol": "GIN", - "name": "Green Impact NFT Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/32Eh585dMTSAPHF28DEG8i8vNcS9iwoVRdaJkBucfqG1/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "ondaUvsoXMcakKuPUyaJ4kyzpzasiLA7CP5oycuU66z", - "symbol": "ONDA", - "name": "ONDA", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/ondaverse/assets/main/xx.png", - "extensions": { - "discord": "https://discord.gg/fkeGTBt5KH", - "twitter": "https://twitter.com/Onda_lab", - "website": "https://ondalab.io/" - } - }, - { - "chainId": 101, - "address": "DeNjdkaXz7wnzEirgSTz1Yyzp2qSb84qYM9pRQzoKW1o", - "symbol": "DAUS", - "name": "Dauswap", - "decimals": 9, - "logoURI": "https://dauswap.com/dauswap.png", - "tags": [ - "exchange", - "social", - "nft", - "swap", - "finance", - "gift", - "decentralized", - "eCommerce", - "education" - ], - "extensions": { - "website": "https://dauswap.com/" - } - }, - { - "chainId": 101, - "address": "BjFceVzhHSADeV9udJnS73sxdGFQ2VcFdi1meXhS1EzF", - "symbol": "ChimpWL", - "name": "Chimpanions WL Token", - "decimals": 0, - "logoURI": "https://cdn.discordapp.com/attachments/935006072266162177/936269290955485214/unknown.png", - "extensions": { - "discord": "https://discord.gg/chimpanions", - "twitter": "https://twitter.com/thechimpanions", - "website": "https://ondalab.io/" - } - }, - { - "chainId": 103, - "address": "5PKB6ySL244r2CnRSDPBqe3yLYW72kY8DsWc82MufAtg", - "symbol": "SNKC", - "name": "SnakeChain Coin", - "decimals": 8, - "logoURI": "https://cdn.jsdelivr.net/gh/gowtham-k147/snkctoken/logo.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "69HKWsA5AuX1hc5MSyAF9N9iZP59BpNsUSPCB3XPKRrZ", - "symbol": "WMBO", - "name": "Wumbo", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/WEVR33/Crypto/main/IMG_7043.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "Fx8JwEA9B7YxJrKpjoMt6Cxxnukqj4TQPTkniGcB4WsA", - "symbol": "LNR", - "name": "Lunar", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Hariienesh1901/Lunar/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9cyEStsrZF7LzqLzbNcuUeuat1NM4eHrBVApvkPBCQk4", - "symbol": "ATA", - "name": "ATA", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/puppetmonkester/img-repo/main/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/_atadia_", - "website": "https://www.atadia.io/" - } - }, - { - "chainId": 101, - "address": "J42yFLJgCSU1GcUoiCTXwdmEGgZp7tEmAWbzDkgCu93w", - "symbol": "RADIO", - "name": "Radio Token", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/J42yFLJgCSU1GcUoiCTXwdmEGgZp7tEmAWbzDkgCu93w/logo.png", - "tags": ["utility-token", "community-token", "nft-token"], - "extensions": { - "description": "Radio is the official token of Radio Lazy Club", - "discord": "https://discord.com/invite/5jxtVqaG", - "twitter": "https://twitter.com/radiolazyclub1", - "website": "https://www.radiolazyclub.com" - } - }, - { - "chainId": 101, - "address": "KARTdF5K68Q2nGppizG3DeCzp7AhHy6YXf2uTQjBSQx", - "symbol": "VROOM", - "name": "Mushroom Racers Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/KARTdF5K68Q2nGppizG3DeCzp7AhHy6YXf2uTQjBSQx/logo.png" - }, - { - "chainId": 101, - "address": "MUSH7gnYdrr9PHrfSq8VyfehwUX9v9tqGqLNdKYRUrv", - "symbol": "MUSH", - "name": "Mushroom Racers WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/MUSH7gnYdrr9PHrfSq8VyfehwUX9v9tqGqLNdKYRUrv/logo.png" - }, - { - "chainId": 101, - "address": "Eo5YeDSgnH1qa4tL5iWhyk7iKdohWWpv9iDtym3Kgb7t", - "symbol": "cPANZR", - "name": "PANZR Credits Token", - "decimals": 5, - "logoURI": "https://www.panzerdogs.io/img/cPANZR.gif", - "tags": ["utility-token", "game-token", "staking"], - "extensions": { - "discord": "https://discord.gg/dSbEq6fBA2", - "twitter": "https://twitter.com/panzerdogs", - "website": "https://www.panzerdogs.io/" - } - }, - { - "chainId": 101, - "address": "H1X2quMc8ZesCE4afDQhWAmFssENprmmz9a6SXvHWPoN", - "symbol": "$AMMO", - "name": "Solarmy AMMO", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/UniversolSoldier/UniversolSoldier/main/ammo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/solarmy", - "twitter": "https://twitter.com/thesolarmy", - "website": "https://solarmy.io/" - } - }, - { - "chainId": 101, - "address": "8m3x8wZNacWZyonJNqfZmHjQFG8sC8YqV68q3A9JFRfE", - "symbol": "SIPA", - "name": "SIPA", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/arushagroup/SIPA/main/logo.png", - "tags": ["foreign-exchange", "payment-token"], - "extensions": { - "description": "Integrated foreign exchange payment system.", - "facebook": "https://facebook.com/sipa_social", - "instagram": "https://www.instagram.com/sipa_social/", - "telegram": "https://t.me/sipa_social", - "twitter": "https://twitter.com/sipa_social" - } - }, - { - "chainId": 101, - "address": "AtS8bVho4K3kcufDCiqtE4GoC3WhSpLAM4KsEou5oh1j", - "symbol": "PENNY", - "name": "PENNYWISE", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AtS8bVho4K3kcufDCiqtE4GoC3WhSpLAM4KsEou5oh1j/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DUSTcnwRpZjhds1tLY2NpcvVTmKL6JJERD9T274LcqCr", - "symbol": "DUST", - "name": "Dust Protocol", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DUSTcnwRpZjhds1tLY2NpcvVTmKL6JJERD9T274LcqCr/logo.png", - "tags": ["NFT", "utility-token"], - "extensions": { - "discord": "https://discord.com/invite/degods", - "twitter": "https://twitter.com/degodsnft", - "website": "https://www.dustprotocol.com/" - } - }, - { - "chainId": 101, - "address": "AM1bCNMMPA4kVYHkYakBYSWeyMEsvjknjwhfmMxJunBc", - "symbol": "KAI", - "name": "KAITO", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AM1bCNMMPA4kVYHkYakBYSWeyMEsvjknjwhfmMxJunBc/logo.png", - "extensions": { - "discord": "https://discord.gg/wQcTyYMQRk" - } - }, - { - "chainId": 101, - "address": "12HddxSoYCL5SYekxabqVVxaBtcJc2Wi3eEwZrLoQ1nx", - "symbol": "LVL", - "name": "levlups", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/levlups/levlupsToken/main/logo.png", - "tags": [ - "social-token", - "game-token", - "game-currency", - "GameFi", - "Gaming" - ], - "extensions": { - "discord": "https://discord.gg/egwUcdfqrv", - "twitter": "https://twitter.com/levlups", - "website": "https://galacticau.fun/", - "youtube": "https://www.youtube.com/channel/UCmBbOgb66HChuHNDXCEEELQ" - } - }, - { - "chainId": 101, - "address": "JCigygFgEEKoRpixRFQibhHLyvSXrQM5AJjkE7xQdxDA", - "symbol": "DAF", - "name": "DA Futuristics Token", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/deepak-aditya/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ToQaYfKWvHtHpmPsCo4awxavoEQJjguBZzGiZBM2vYT", - "symbol": "PBT", - "name": "'Plan B' Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ToQaYfKWvHtHpmPsCo4awxavoEQJjguBZzGiZBM2vYT/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "4o8JKVCpaV3Rp2GtXcJNaa7DSomeuVks8UJS4nNcNUuS", - "symbol": "CIRCLE", - "name": "Mr Circle", - "decimals": 4, - "logoURI": "https://human.ag/api/profile/7H1HKjLxJbYnbK78AtDEXoXWPB464afXcskoMnk8GHu6/picture?src=token-list", - "tags": ["utility-token", "social-token", "human"], - "extensions": { - "website": "https://human.ag/coin/CIRCLE" - } - }, - { - "chainId": 101, - "address": "PSMndFwnJpMRo9c6aWU2V4ev3hq6SYgE2AwpJ7CuweB", - "symbol": "PSM", - "name": "Phantom Simon", - "decimals": 4, - "logoURI": "https://human.ag/api/profile/FUQ3VUB5pvUnwCBZXLNr8iVAjrKvStvgTA5ewkMwHSPG/picture?src=token-list", - "tags": ["utility-token", "social-token", "human"], - "extensions": { - "website": "https://human.ag/coin/PSM" - } - }, - { - "chainId": 101, - "address": "E638GBkp3CA82bTu6J5DptGiAELLu61vvfW1bPDsxCq1", - "symbol": "TKNI", - "name": "Tooknie", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/pongoe/tooknie/main/logo-small.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GD2T4gzUu6JyvejqaTXAzLPtkLa6T1JvczsnAeCJyrFf", - "symbol": "MAQE", - "name": "MAQE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/amnajpotipak/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FBx3B3RrLTdeNhUPinZZGXQrBibb2N3rx9N2YwkuSjD9", - "symbol": "GAFA", - "name": "Gafa", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/GafaCoin/gafa/main/gafacoin.png", - "tags": ["Gaming", "metaverse", "lands"] - }, - { - "chainId": 101, - "address": "6G6v5rEh1hHzySQLQQyZisf773kMbNPk5Ay5QM6kriUa", - "symbol": "ADSL", - "name": "ADSL-2EF coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6G6v5rEh1hHzySQLQQyZisf773kMbNPk5Ay5QM6kriUa/logo.png", - "tags": ["utility-token", "social-token"], - "extensions": { - "facebook": "https://www.facebook.com/adsl.formation.tg", - "instagram": "https://www.instagram.com/adsl2ef", - "website": "https://www.adsl2ef.com/", - "youtube": "https://www.youtube.com/channel/UCJnZdPgPwI2rd8_-dfGWOng" - } - }, - { - "chainId": 101, - "address": "3gb3iUAgTCtXq7cFiDZTi2GFPgQdg1zFVUubYAtLJfWU", - "symbol": "LUX", - "name": "LUX Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3gb3iUAgTCtXq7cFiDZTi2GFPgQdg1zFVUubYAtLJfWU/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://wearelux.space/" - } - }, - { - "chainId": 101, - "address": "9yzc7kudPMJGGDjsmaCkHUPtZtjBfUCWKVgUeC2ytMKC", - "symbol": "US", - "name": "Update Settings Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9yzc7kudPMJGGDjsmaCkHUPtZtjBfUCWKVgUeC2ytMKC/logo.svg", - "tags": ["utility-token", "community-token"], - "extensions": { - "instagram": "https://www.instagram.com/update_settings/", - "twitter": "https://twitter.com/update_settings", - "website": "https://updatesettings.com/" - } - }, - { - "chainId": 101, - "address": "GFWPMQNMdoqvBYV4yFhBgbQSDikaRin8pfrdxPocXvNU", - "symbol": "LHGT", - "name": "LightCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/fpetruololo/light/main/logo.png", - "tags": ["social-token"], - "extensions": { - "twitter": "https://twitter.com/FrantisekPetru" - } - }, - { - "chainId": 101, - "address": "Ghh9TRwCMjjGXFexdjqscqrcfwHsETRcxgvFi4puMftx", - "symbol": "WIN", - "name": "Gamble", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/BlockchainWizard/Crypto/main/Gamble.png", - "tags": [ - "utility-token", - "social-token", - "nft-token", - "community", - "gamble", - "gambling" - ] - }, - { - "chainId": 101, - "address": "BxYiGctREpknXPhFszGt7xzL6kgF6B3QgrEnybnvSLao", - "symbol": "HTTP", - "name": "Internet", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/BlockchainWizard/Crypto/main/Internet.png", - "tags": [ - "utility-token", - "social-token", - "nft-token", - "community", - "internet", - "www" - ] - }, - { - "chainId": 101, - "address": "DDvVKCK9Aw61BQUbiL5m7Co8eeaPZGhHeynaocfk1d5X", - "symbol": "VACA", - "name": "Vacation", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/BlockchainWizard/Crypto/main/Vacation.png", - "tags": [ - "utility-token", - "social-token", - "nft-token", - "community", - "vacation", - "rental" - ] - }, - { - "chainId": 101, - "address": "GHKCb1b2YgLDhEYUXGyHLCVJyi3MjVqbERZgESvPoH8a", - "symbol": "NG", - "name": "Nex Gen", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/rakeshreddy7979/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FRt8DDNFaE6wH9CcJ9eEQxv8B2NM9v3jkdq7FHRobksH", - "symbol": "QNT", - "name": "Quantanium", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/QuantaniumCrypto/Quantanium/main/logo.png", - "tags": ["foreign-exchange", "payment-token"] - }, - { - "chainId": 101, - "address": "77jUqHLiMJDH2oTrcVTafMCUCNpv3M5A1BixjwqRwiku", - "symbol": "MTC", - "name": "Mountain Top Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Cryptlofi/MTC/main/MTaB.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "282Weh31UZ1yw99dYV8JqxPLtFBNbN1UfZhjBiKNk9Zb", - "symbol": "UGA", - "name": "BAPC Native Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7aENbEssDsZZ7T1HP7LLgoHJF8q4JDKfxArkmdLReUZc/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/XwQ5AtvsBU", - "twitter": "https://twitter.com/BAPC_Solana", - "website": "https://bapepixel.club/" - } - }, - { - "chainId": 101, - "address": "7rGXsGSHdSyN4vPtxfw7ZzopzoUp223fY2t34KVcUv2c", - "symbol": "VNFT", - "name": "Viking NFT", - "decimals": 0, - "logoURI": "https://github.com/Mrhydrate/crypto/blob/main/Clogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8KVJypeFhCG2CPAsmxPWtByFmKGSgfwAXkP5NafQCD3B", - "symbol": "SDP", - "name": "San Diego Padres Token", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/SanDiegoPadresToken/SDP_Token/main/SDPadre.png", - "tags": ["social-token", "sports-token"], - "extensions": { - "twitter": "https://twitter.com/SDP_Token" - } - }, - { - "chainId": 101, - "address": "BK2GUqUMryV2GVo3TwBZmPxWREx9fcHsT881DJGVLQrf", - "symbol": "R", - "name": "Romeao coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/Romeao/crypto/main/logo.png", - "tags": [ - "social-token", - "utility-token", - "meme-token", - "community-token", - "payment-token", - "nft-token" - ] - }, - { - "chainId": 101, - "address": "H7tkCCb4BsAr14Dz7BWqnf69J8cBjnLZsj8QzaaNm7vA", - "symbol": "ORLC", - "name": "Orel Crypto Gulden", - "decimals": 9, - "logoURI": "https://orelcrypto.ru/images/logo.png", - "tags": ["city-token", "social-token", "local-token"], - "extensions": { - "facebook": "https://www.facebook.com/%D0%9E%D1%80%D0%BB%D0%BE%D0%B2%D1%81%D0%BA%D0%B8%D0%B9-%D0%B3%D1%83%D0%BB%D1%8C%D0%B4%D0%B5%D0%BD-108073031603453/about", - "telegram": "https://t.me/otelcrypto", - "website": "https://orelcrypto.ru/" - } - }, - { - "chainId": 101, - "address": "FFSYStZVbrsHZVLDvkXWxqRbygPuCTJVMRTSqXmDd8M9", - "symbol": "FFS", - "name": "Future Finance Systems Token - FFSYST", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/codefuturance/ffsyst/main/logo.png", - "tags": [ - "governance-token", - "utility-token", - "exchange-token", - "DAO", - "DeFi", - "Fexobit" - ], - "extensions": { - "description": "FFS is a governance and utility token for an ethical financial protocol, supporting non-derivative, trade-based financial instruments.", - "facebook": "https://www.facebook.com/fexobit", - "imageUrl": "https://raw.githubusercontent.com/codefuturance/ffsyst/main/logo.png", - "reddit": "https://www.reddit.com/u/fexobit", - "twitter": "https://twitter.com/fexobit", - "website": "https://www.fexobit.com" - } - }, - { - "chainId": 101, - "address": "3WPMJe4od94V12zJoY1D7s3b7HdRb17eNryUZd1nJ6ey", - "symbol": "CP", - "name": "Copen", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/DrNapNap/Copen-Token/main/logo.png", - "tags": [ - "social-token", - "utility-token", - "community-token", - "payment-token" - ] - }, - { - "chainId": 101, - "address": "Kqk68qjE8zVNhtjeKioSHY1EhSdyym33TDX6PhbrBn5", - "symbol": "FAM", - "name": "Family Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solodevo/family/main/logo.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/SolSavages", - "website": "https://www.solsavages.com" - } - }, - { - "chainId": 101, - "address": "6thgyjUZ5Vfsy1CpDPGuyJkJxMVyzUY4mNvE797S3Eey", - "symbol": "PUGs", - "name": "Pugs Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/crinkylips/Token/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2JqUDmTAGdebvbvjWXgSVq1bj1mDhjhX2q531AmPB9Vk", - "symbol": "SMR", - "name": "Solana Monke Rejects Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/milorue/token-assets/master/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.com/invite/MonkeRejects", - "twitter": "https://twitter.com/MonkeRejects", - "website": "https://solmonkerejects.com" - } - }, - { - "chainId": 101, - "address": "9mWRABuz2x6koTPCWiCPM49WUbcrNqGTHBV9T9k7y1o7", - "symbol": "MAI", - "name": "MAI Stablecoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/0xlaozi/qidao/main/images/mimatic-red.png", - "tags": ["stablecoin"], - "extensions": { - "discord": "https://discord.com/invite/mQq55j65xJ", - "twitter": "https://twitter.com/QiDaoProtocol", - "website": "https://mai.finance/" - } - }, - { - "chainId": 101, - "address": "4vBXowxbnpKWQJQ4SNiQHiCcyimk5qvFqono1VtbNj25", - "symbol": "INF", - "name": "InfectedCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/infectedw/infectoin/main/wp3014779-radioactive-wallpapers-modified.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4JWTvCNMLXZx69W2ri9ecFxuXLnPsNAWyv38Q7fMxcwE", - "symbol": "CBDOIL", - "name": "CBD Oil", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/BlockchainWizard/Crypto/main/CBD.png", - "tags": [ - "utility-token", - "social-token", - "nft-token", - "community", - "cbd", - "cannabis" - ] - }, - { - "chainId": 101, - "address": "Bf79kggD3C5T3NMQQBshqsKjLhxNrzZufYdtX6EjLsmQ", - "symbol": "GIVE", - "name": "Give", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/BlockchainWizard/Crypto/main/Give.png", - "tags": [ - "utility-token", - "social-token", - "nft-token", - "community", - "Give", - "cannabis" - ] - }, - { - "chainId": 101, - "address": "7tKzHt87Np924w5Gpi2CwFqpaP5jwtzcuKXRFExvHm5N", - "symbol": "CASH", - "name": "Loans", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/BlockchainWizard/Crypto/main/Loan.png", - "tags": [ - "utility-token", - "social-token", - "nft-token", - "community", - "loans", - "cash" - ] - }, - { - "chainId": 101, - "address": "BdYJ116zSMCcpYDQsoKeLHF7ivoyy6eTodS8hRfa9nuf", - "symbol": "PETS", - "name": "Pets", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/BlockchainWizard/Crypto/main/Pets.png", - "tags": [ - "utility-token", - "social-token", - "nft-token", - "community", - "Pets", - "dog", - "cat", - "pet" - ] - }, - { - "chainId": 101, - "address": "7hdrzjRXA8NP6sZExxSfPQjTQhre6mxF39bhUa9ccre9", - "symbol": "AI", - "name": "AI COIN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7hdrzjRXA8NP6sZExxSfPQjTQhre6mxF39bhUa9ccre9/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://itradeai.com/" - } - }, - { - "chainId": 101, - "address": "3o6PheMkJP68da6JF9Fmgr1wEF8r43JLREdvrnWacyA3", - "symbol": "TAR", - "name": "Tarras Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/bakri993/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EqibTGnqC88AvQAyK3jaDY2rbM13mysARCXJ587q4SFA", - "symbol": "HLTC", - "name": "HaleTown Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/j0hnboy75067/Cryptocoin/main/Haletowncoinlogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6MCvPS1LdWqZbiNkcqCxYHeS8wY29AyxGMFwaNtTC8GK", - "symbol": "NRVK", - "name": "Nirvik Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/nirvikBasnet/nrvk-logo/main/NRVK-LOGO.png", - "tags": ["social-token", "Nepal", "nft", "metaverse"] - }, - { - "chainId": 101, - "address": "DHwKYcFF3nZvgHDm2TpHaiSRKXnAZRWw1CvDkgNSQNuo", - "symbol": "GMWL", - "name": "GenMakers Whitelist Pass", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DHwKYcFF3nZvgHDm2TpHaiSRKXnAZRWw1CvDkgNSQNuo/logo.png", - "tags": ["social-token", "nft-token"], - "extensions": { - "website": "https://www.genmakers.com" - } - }, - { - "chainId": 101, - "address": "24fKHtN7ySkhcvZjg9aVirhbkuSVufsm3AdMkwF2rVu8", - "symbol": "BDW", - "name": "BoizDemWe Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/baileyfiscus/boizdemwe-crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "TYxUwkB1Yxw7xyB6uezLNhj5cmgGFvgBw3wRRnfTj5Z", - "symbol": "METAPX", - "name": "Meta Pixel", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/metapixelsolana/meta_pixel/main/logo.png", - "tags": [ - "utility-token", - "meta-verse", - "NFT", - "soical-token", - "game", - "community-token" - ], - "extensions": { - "facebook": "https://www.facebook.com/MetaPixelUniverse/", - "website": "https://metapixel.money/" - } - }, - { - "chainId": 101, - "address": "7bFfvNZqJr2KFDjdP58MVud7kM9AMbXvoFcfAmgBHtfx", - "symbol": "MTSC", - "name": "Sami Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/MTSami/sami_coin/main/Sami_Coin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CUabWw8Q3o8AN8MxA9WFG5MjwDU9Gq29aLxbr3z5kGi2", - "symbol": "TKH", - "name": "TkhKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/tkhadir/tkhcrypto/main/tkh-token.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6bTcyMbXcRuvBgukkUDNK8xxLrviAGVmDs8vTcs4Rodj", - "symbol": "GTOK", - "name": "GTOK", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/yoavshmariahu/token-list/main/assets/mainnet/6bTcyMbXcRuvBgukkUDNK8xxLrviAGVmDs8vTcs4Rodj/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://www.arkayde.io/" - } - }, - { - "chainId": 101, - "address": "AEVtX9tDibQaYB5S5YPsce1917fVZgtqJx8pvkW4hM8g", - "symbol": "TIX", - "name": "TIX", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/yoavshmariahu/token-list/main/assets/mainnet/AEVtX9tDibQaYB5S5YPsce1917fVZgtqJx8pvkW4hM8g/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://www.arkayde.io/" - } - }, - { - "chainId": 101, - "address": "GUdX84edZH14HfnDuD3AYjKxQdm52ztJnXpzoHdTwMSt", - "symbol": "GEM", - "name": "Gemstone", - "decimals": 6, - "logoURI": "https://user-images.githubusercontent.com/23665754/150893304-f9391d19-a332-45d6-be74-fdab73cbd422.png", - "tags": ["social-token"], - "extensions": { - "website": "https://www.gemtoken.online" - } - }, - { - "chainId": 101, - "address": "6cMZs2PRafVnMHkXiDu5SLvomqLHCS11bxwi9KBJTtzZ", - "symbol": "STOMP", - "name": "STOMP", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6cMZs2PRafVnMHkXiDu5SLvomqLHCS11bxwi9KBJTtzZ/logo.jpg", - "extensions": { - "instagram": "https://www.instagram.com/dopedinopc/", - "twitter": "https://twitter.com/DopeDinoPC" - } - }, - { - "chainId": 101, - "address": "SFVNDppzq2ME2YvEnuRcnC3mNListsPpQqKTLbAMe86", - "symbol": "SFVN", - "name": "Sofven", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SFVNDppzq2ME2YvEnuRcnC3mNListsPpQqKTLbAMe86/logo.png", - "extensions": { - "website": "https://www.sofven.com" - } - }, - { - "chainId": 101, - "address": "4axW5EJCMJp5AwMAQA8ZiAULG6Hj6FEwqFnug9zd17ZJ", - "symbol": "Boog", - "name": "VBoog", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/VFinona/crypto/main/boog.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "imbaePRPNVxBhTLdSWpdjYbXiPWc9spNTz4xKVkZfBJ", - "symbol": "IMBA", - "name": "The Lion Cats Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/nf0x/the-lion-cats-logo/main/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.com/invite/thelioncats", - "twitter": "https://twitter.com/TheLionCatsNFT", - "website": "https://thelioncats.com/" - } - }, - { - "chainId": 101, - "address": "55sgz1DPXFfzFVNd9irzGJ2Xgn5B7iiEM651Yz67e5jB", - "symbol": "HOUSE", - "name": "High Roller", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/55sgz1DPXFfzFVNd9irzGJ2Xgn5B7iiEM651Yz67e5jB/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://nftscratchoff.io/" - } - }, - { - "chainId": 101, - "address": "GuuiDrRLAfacFFcjfe5WkvtsA3hZ4PUipVibR5yzk6Te", - "symbol": "KOSM", - "name": "KosmiKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/AbeerRao/crypto-token/main/logo.png?token=GHSAT0AAAAAABPUKCTG3XIU4VEGU5RERUJSYP6ANEA", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2xaPstY4XqJ2gUA1mpph3XmvmPZGuTuJ658AeqX3gJ6F", - "symbol": "QUP", - "name": "QUP Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ske5074/qup-coin/main/logo.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "GSFMXUz1ZSdVke47kKxiC7cdxUmxpjZD3NustUT5Nf8R", - "symbol": "CHEER", - "name": "Spirit Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/rynoroot/Cheer-Coin/main/SpiritToken.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "PAWoJfAqpJ6jVjgt9KGvA45c8X6W1i9TmicTSBZ3xaq", - "symbol": "PAWS", - "name": "Grampaw Treats", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/PAWoJfAqpJ6jVjgt9KGvA45c8X6W1i9TmicTSBZ3xaq/logo.png", - "tags": ["whitelist-token", "nft"], - "extensions": { - "discord": "https://discord.gg/FtyxbfmSMv", - "twitter": "https://twitter.com/GrampawNFT", - "website": "https://grampaw.art" - } - }, - { - "chainId": 101, - "address": "5qjVXkTL5mG9TLqWyYjW4ZQ7usD941Ri5n2WeWCK3XP", - "symbol": "CHEST", - "name": "Chest", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SeaRovers/icon/84acea6e31d759265ed96e9ecd9b5a36b725e971/Doub.png", - "extensions": { - "twitter": "https://twitter.com/SeaRoversNFT", - "website": "https://searoversnft.com/" - } - }, - { - "chainId": 101, - "address": "44xgPw81essPayagreDhbR81KuCk9if2kHyAFDchSGjv", - "symbol": "MKCT", - "name": "MilkCraft Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/milk015/Crypto-token-fun/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7rMHRy955QCSqzpDPDYczeRxxd21wVPdx2WPBQ6YPEwM", - "symbol": "MG", - "name": "Merc Gamora", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/rakeshreddy79799/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8bLoJVemmSqBAi6wuGmRcygrYjhD8yf8Wc2cKPXwC4Vg", - "symbol": "BANK", - "name": "Bank", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/BlockchainWizard/Crypto/main/Bank.png", - "tags": [ - "utility-token", - "social-token", - "nft-token", - "community", - "Bank" - ] - }, - { - "chainId": 101, - "address": "65jgTrU2ES6vXZacUTifntsgew7a5kydJYreyB4WMxSu", - "symbol": "CA", - "name": "California", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/BlockchainWizard/Crypto/main/California.png", - "tags": [ - "utility-token", - "social-token", - "nft-token", - "community", - "California" - ] - }, - { - "chainId": 101, - "address": "2C17XBoSToZupV55df4nmNqhAQMCUy7b63aRg3FB6zaB", - "symbol": "SMART", - "name": "College", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/BlockchainWizard/Crypto/main/College.png", - "tags": [ - "utility-token", - "social-token", - "nft-token", - "community", - "College" - ] - }, - { - "chainId": 101, - "address": "GwaaY77dAxjgNLR3PF1Dh11oq3nAvJ6pFaATmv5s8m9H", - "symbol": "GAS", - "name": "Gas", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/BlockchainWizard/Crypto/main/GAS.png", - "tags": ["utility-token", "social-token", "nft-token", "community", "Gas"] - }, - { - "chainId": 101, - "address": "HfNP2gAWcXxHQCPH8bRMtE5wPHodxcdAx2swKqaZpV2D", - "symbol": "INS", - "name": "Insurance", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/BlockchainWizard/Crypto/main/Insurance.png", - "tags": [ - "utility-token", - "social-token", - "nft-token", - "community", - "Insurance" - ] - }, - { - "chainId": 101, - "address": "CmiqaFLzE6AAbjvBNcKWaCrwiZu2UGN2rewLRHw1LX1", - "symbol": "KID", - "name": "Kid", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/BlockchainWizard/Crypto/main/Kid.png", - "tags": ["utility-token", "social-token", "nft-token", "community", "Kid"] - }, - { - "chainId": 101, - "address": "45ja9VNcsQjEvCBTDR5zF84ymrJP5JbDhPwQ8knP8ciZ", - "symbol": "KIDS", - "name": "Kids", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/BlockchainWizard/Crypto/main/Kids.png", - "tags": [ - "utility-token", - "social-token", - "nft-token", - "community", - "Kids" - ] - }, - { - "chainId": 101, - "address": "CUG4DWPXQv3dL7Bod5kbdqY2Gza4wtW3LupQaJGtXPe2", - "symbol": "MEDI", - "name": "Medical", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/BlockchainWizard/Crypto/main/Medical.png", - "tags": [ - "utility-token", - "social-token", - "nft-token", - "community", - "Medical" - ] - }, - { - "chainId": 101, - "address": "HMN9kWpebvvoym4kpocMMxsHZTkcmPetui2Qyx15Z7V2", - "symbol": "MORT", - "name": "Mortgage", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/BlockchainWizard/Crypto/main/Mortgage.png", - "tags": [ - "utility-token", - "social-token", - "nft-token", - "community", - "Mortgage" - ] - }, - { - "chainId": 101, - "address": "2L47qxKaZN9ZbZjjC35Mius4drvJ8np5FSkXrU3Hzw1w", - "symbol": "PNMA", - "name": "Panama", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/BlockchainWizard/Crypto/main/Panama.png", - "tags": [ - "utility-token", - "social-token", - "nft-token", - "community", - "Panama" - ] - }, - { - "chainId": 101, - "address": "96LtWTyyBJsyc85ooKFHujFQQyTgwRpZcee7Tacichdq", - "symbol": "SELL", - "name": "Real Estate", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/BlockchainWizard/Crypto/main/RealEstate.png", - "tags": [ - "utility-token", - "social-token", - "nft-token", - "community", - "RealEstate" - ] - }, - { - "chainId": 101, - "address": "53Cp2PMxyZnCyPZXoJqYug2ycUPehhPS8r2G1v2QusHs", - "symbol": "TX", - "name": "Texas", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/BlockchainWizard/Crypto/main/Texas.png", - "tags": [ - "utility-token", - "social-token", - "nft-token", - "community", - "Texas" - ] - }, - { - "chainId": 101, - "address": "3Dp7LtyFanuAxdCPjgq1kD7vHQ9pbp3YbDARpFyKUqtp", - "symbol": "USA", - "name": "USA", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/BlockchainWizard/Crypto/main/USA.png", - "tags": ["utility-token", "social-token", "nft-token", "community", "USA"] - }, - { - "chainId": 101, - "address": "HhaXWNUNmDMReaCDkXaoKKEJyZHiLHgEFcyoZmCHHXZ1", - "symbol": "MBX", - "name": "MetaBlocks", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/WeAreMetaverse/MetaBlocks/main/logo.png", - "tags": [ - "social-token", - "utility-token", - "metaverse-blocks", - "Community-Token" - ] - }, - { - "chainId": 101, - "address": "2XsFvbkZYX8Z2Y8C4kQJXQ1RwQVpqXAZ28SqqxdrGdgK", - "symbol": "WAD", - "name": "Watchad Token", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2XsFvbkZYX8Z2Y8C4kQJXQ1RwQVpqXAZ28SqqxdrGdgK/logo.png", - "tags": ["payment-token"], - "extensions": { - "website": "https://www.watchad.org/" - } - }, - { - "chainId": 101, - "address": "9P1Z58FjsW5mn9kkdYkSN58ePakQJY9NK2GNDPunhqzB", - "symbol": "JAMI", - "name": "JAMIE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/poshier/crypto/main/jamie.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "73rd6Ekp1bTYzV3oBAUeL4vMDAnHTdiXhCS5pbnh9quj", - "symbol": "QTX", - "name": "Quantex Coin (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/cryptiswap-admin/token-list/main/assets/mainnet/73rd6Ekp1bTYzV3oBAUeL4vMDAnHTdiXhCS5pbnh9quj/logo.png", - "tags": [ - "exchange-token", - "utility-token", - "DeFi", - "Wrapped", - "Wormhole" - ], - "extensions": { - "blog": "https://blog.myquantex.com", - "description": "QTX is the native exchange token on the Quantex (formerly Cryptiswap), which is a global crypto exchange featuring an instant swap platform \u0026 an advanced trading platform. Customers choose between taking custody of their own funds on the non-custodial swap platform, or allow us to take custody on the trading platform.", - "reddit": "https://www.reddit.com/user/CryptiSwap", - "twitter": "https://twitter.com/Quantex_Global", - "website": "https://myquantex.com", - "whitepaper": "https://1drv.ms/w/s!Al2HWrZhIdn3hL0AW2D-LkLo4X9-eA?e=NKN7CT" - } - }, - { - "chainId": 101, - "address": "EX84m74hxaHQDwasohSQt3NwMxfiU7Tzr65HY91X8BAi", - "symbol": "RetroWolvesWL", - "name": "RWOLFWL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EX84m74hxaHQDwasohSQt3NwMxfiU7Tzr65HY91X8BAi/Logo.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/RetroWolvesNFT" - } - }, - { - "chainId": 101, - "address": "9Pa4FS6ZmZa8ajgUY9F8SJsdVUaD9F1R8q6qeFKf1yC1", - "symbol": "SKY", - "name": "Skyrocket", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/skyrocket55/skyrocket-token/main/skyrocket.png", - "tags": [ - "social-token", - "commodity-token", - "gaming-token", - "payment-token", - "utility-token" - ] - }, - { - "chainId": 101, - "address": "DjwnsaxiggAUZHDT82ELepNSjJfmVDNGtSubTF9VJKk7", - "symbol": "XBX", - "name": "xBlocks", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/WeAreMetaverse/XBlocks/main/xlogo.png", - "tags": [ - "social-token", - "utility-token", - "metaverse-blocks", - "Community-Token" - ] - }, - { - "chainId": 101, - "address": "7jZzdF79oWYN5UBezaZAexrys74wRkZr7ksr5QJ5Zim3", - "symbol": "BLT", - "name": "BLIGHT", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7jZzdF79oWYN5UBezaZAexrys74wRkZr7ksr5QJ5Zim3/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/catalysts", - "twitter": "https://twitter.com/CatalystsNFT", - "website": "https://catalysts.world/" - } - }, - { - "chainId": 101, - "address": "CCzGS5cm84rhMqSxy5cxCoV6QphdDFKjqQYf1dbFSRL7", - "symbol": "RCT", - "name": "Roccetta Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/r0rsch4ch96/Roccetta_Coin/4fc83aefc099a000379b4e9d5af8c65d19c9ddda/logo.png", - "tags": ["social-token", "community-token"], - "extensions": { - "instagram": "https://www.instagram.com/ale_brd_" - } - }, - { - "chainId": 101, - "address": "BCuMMwWwYEe83fVAe96bYNChiMLXYXYx3T126MzGYnv1", - "symbol": "MNTYTKN", - "name": "Minty Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MintyAutomation/Minty-Logo/main/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "discord": "https://discord.gg/RfShDcAuwU", - "twitter": "https://twitter.com/MintyAutomation" - } - }, - { - "chainId": 101, - "address": "41K8ttkLGK6cGLGe8iQ7RgMqYdXc2fkY7vBquviaz4Ag", - "symbol": "MyEgg", - "name": "MyEgg", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/BrightTechnologies1/myeggs--logo@master/logo.png", - "tags": ["social-token", "commodity-token", "Utility-Token"], - "extensions": { - "twitter": "https://twitter.com/MyEggsNFT", - "website": "https://myeggs.art" - } - }, - { - "chainId": 101, - "address": "FZiaBRWwhJEdEb6sLv9Eep1Sef1HzdsTCYwTJfRK4kJx", - "symbol": "DUST", - "name": "Moondust", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/JaeckelArtist/Lovestruck/5d362906ade17ff4d5b78750fa5b68a664418fb3/DUST.jpeg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "NtB93PXAeibmt96UEynaiAtpLKbPA5xAQgwMXXCzNiW", - "symbol": "CLG", - "name": "CloggCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/RunFastMcChunky1/CloggCoin/main/Clogg%20Coin.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6PXSWh8oGzReC5w7KGX7n4wQQ8ZBxAzHMCBtXBwQZXLq", - "symbol": "ROMI", - "name": "RomCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6PXSWh8oGzReC5w7KGX7n4wQQ8ZBxAzHMCBtXBwQZXLq/logo.jpg", - "tags": ["meme-token"] - }, - { - "chainId": 101, - "address": "FE7ZpFUeHrWdcxga7yKV2WnGvGNRKv63EDzkLzMbgyRT", - "symbol": "LUVE", - "name": "Luve Factory", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/LuveFactory/assets/main/LUVE-520x520.png", - "tags": ["nft-token", "finance-token"] - }, - { - "chainId": 101, - "address": "CBGDvixzTq5FwNQN5jQvJHLsDv8cJJ7SUWuQPdDG5yi2", - "symbol": "SCLA", - "name": "ScottLaiCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ScottLL/Crypto/main/logo.png", - "tags": ["meme-token"] - }, - { - "chainId": 101, - "address": "W3UAFTu4DmzR5B5ku9LXB78e4YPAPPYE2msqZ8Po4sT", - "symbol": "DABS", - "name": "Dab Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MrMatrixMaster/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5tFbKtYB1pisDApKZVz7eMr7d5BYJxb6NRwN618pJZ6M", - "symbol": "TEXAS", - "name": "LoneStar", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/BitRacer/LoneStar/main/LoneStar.png", - "tags": [ - "social-token", - "commodity-token", - "gaming-token", - "payment-token", - "utility-token", - "meme-token" - ], - "extensions": { - "discord": "https://discord.gg/mZJ8XZFjTs", - "twitter": "https://twitter.com/LoneStarToken" - } - }, - { - "chainId": 101, - "address": "9aeoLdUngRCRKpWaJR8gBi2oL7UzQ44EiuryG32LGWT9", - "symbol": "FEL", - "name": "Felektro Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Felektro/crypto/main/logoFinal.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4k4q4JRuD4FoMSAXocuDyz1L9JDPK7BDWYszEHutQ1kZ", - "symbol": "TTR", - "name": "TITOR GATE", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4k4q4JRuD4FoMSAXocuDyz1L9JDPK7BDWYszEHutQ1kZ/insignia36.png", - "tags": ["social-token", "NFT", "09-16-2022"] - }, - { - "chainId": 101, - "address": "A4Fpxz1RZGmscTxbF2Hhwywi1mGPVNaucc5gVwuM5Q5b", - "symbol": "KITCHEN", - "name": "Kitchen Token", - "decimals": 9, - "logoURI": "https://seth.kitchen/images/kitchentokentrans.png", - "tags": ["social-token", "metaverse", "game-token", "payment-token"], - "extensions": { - "website": "https://seth.kitchen" - } - }, - { - "chainId": 101, - "address": "5RCdLcdRvenFVcApfARpppCJ2boko2Vwm4aBLLQMkjsG", - "symbol": "HOOF", - "name": "HOOF project", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5RCdLcdRvenFVcApfARpppCJ2boko2Vwm4aBLLQMkjsG/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "71p8QK8qhujs2PcLiYM55tcdGLXZ1G2SKCLVL955MuJV", - "symbol": "APLOSA", - "name": "Appaloosa", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/akash2169/crypto/main/appaloosa-horse-window-sticker-decal-2-modified.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BpDxe3NXRGbdrWKYxfz9Dmy4N2kzMAN1q66qqiAXxKPJ", - "symbol": "IEJB", - "name": "IctorVay EchoJay", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ChuckleeKlown/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "D7U5xsvLBsBzZj2mmkoa7Pa1kKDiKGQHWuWknEgB9y4h", - "symbol": "CHEERS", - "name": "Cheers", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/sanys17/crypto/main/crypto.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9f1E3bskXPb1oXrkefF7mLDtFVqojkrSnoEUYZKQR6wv", - "symbol": "ASTR", - "name": "Aster Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/AlanBeez/AsterCoin/main/Aster_Logo.png", - "tags": [ - "social-token", - "community-token", - "utility-token", - "reward-token" - ], - "extensions": { - "facebook": "https://www.facebook.com/aster.contemporary.jewellery/", - "instagram": "https://www.instagram.com/aster.contemporary.jewellery/", - "website": "https://asterjewellery.com/" - } - }, - { - "chainId": 101, - "address": "9sSA9Fi9bXS934mKHBHmxKcuLoZBML8w4F5fPUaNCkyZ", - "symbol": "IGCN", - "name": "Igicoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9sSA9Fi9bXS934mKHBHmxKcuLoZBML8w4F5fPUaNCkyZ/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CWUUV3ym4Uphw4CVgkpNxrR7FsttF7h7mLggEUJ1J1aV", - "symbol": "GIF", - "name": "Giraffe", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CWUUV3ym4Uphw4CVgkpNxrR7FsttF7h7mLggEUJ1J1aV/logo.jpg", - "tags": ["social-token", "community-token", "meme-token"], - "extensions": { - "telegram": "https://t.me/+a2Cw4O8SrotiNDRk" - } - }, - { - "chainId": 103, - "address": "37JC3gPPfXJme7JNtgxyWQ6J76iZQu9V86E6uZG1Se9k", - "symbol": "EGGS", - "name": "Egg Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/37JC3gPPfXJme7JNtgxyWQ6J76iZQu9V86E6uZG1Se9k/logo.png" - }, - { - "chainId": 101, - "address": "EF6Pjrjf28VKsTiYmmNosbRcH91NyQRnFoBqAaUWqqXq", - "symbol": "FYST", - "name": "FUNKY SANTAS T", - "decimals": 0, - "logoURI": "https://wk767iv23kqj675aavuyesscxa3rq4ipwglwtehqmuhowrolfhhq.arweave.net/sr_vorraoJ9_oAVpgkpCuDcYcQ-xl2mQ8GUO60XLKc8", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.com/invite/pr3yWdGZYx", - "instagram": "https://www.instagram.com/funkysantasnft/", - "twitter": "https://twitter.com/FunkySantas", - "website": "https://funkysantas.com/" - } - }, - { - "chainId": 101, - "address": "ATYRrGJqUzJtvPwUcxpBxFN5d2UKcwc8X9dsKdERySzD", - "symbol": "IBBT", - "name": "Internal BB Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ibgouvea/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BA89u4vfmpRiCwuFjWiyWXGb67LQawbvdKMFqoiB5iF5", - "symbol": "FUAT", - "name": "FuatCoin", - "decimals": 0, - "logoURI": "https://github.com/ByteLock/ImageHost/blob/main/fuat-coin.png?raw=true", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8VCBkwY5WU7L5dWyrJAtF1XWbGxaYT1PTPEMeMhPoGQH", - "symbol": "42", - "name": "42-School Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/AlanBeez/42-School_Coin/3eb2b8c6485b2a64abc2393ad47921c4898b0fd3/42_Logo.png", - "tags": [ - "social-token", - "community-token", - "utility-token", - "reward-token" - ], - "extensions": { - "facebook": "https://www.facebook.com/42born2code/", - "github": "https://github.com/42School", - "instagram": "https://www.instagram.com/42.born2code/", - "twitter": "https://twitter.com/42born2code", - "website": "https://42.fr/en/homepage/" - } - }, - { - "chainId": 101, - "address": "AVNA86e6yJKD1QfdYhQuzqsSanpqUtMP1mX9KXRXehJ8", - "symbol": "SWTR", - "name": "Swell Travel Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ScottSwell/token/main/swell_logo_token.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Ew162TdjnvYPhjhZAwcg1zMtn7MGz4tNs9kayyFfhhf", - "symbol": "KOFI", - "name": "Coffee Coin", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/sebulino/crypto/main/Logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://sebastianalscher.de/coffee-coin/" - } - }, - { - "chainId": 101, - "address": "GJ6v9KhX8knyjSAdy9e6SnHwYX3ajuyAdNy4Uvc6AgBS", - "symbol": "WAT", - "name": "Watson Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/CelticRogue/Crypto/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9U4B5oQMXBkVcUvYp9c9CTRLAgFcbF3NeopuaxvVCW7y", - "symbol": "MYB", - "name": "Mindyourbiz", - "decimals": 6, - "logoURI": "https://github.com/Mindyourbiz9000/MYB/blob/main/MYB.jpg" - }, - { - "chainId": 101, - "address": "CmAgr6XtAZsR1BGrxTrbVKXsVvvC4Y69GXR2zP8XxK3X", - "symbol": "CHALK", - "name": "CHALK", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CmAgr6XtAZsR1BGrxTrbVKXsVvvC4Y69GXR2zP8XxK3X/logo.png", - "extensions": { - "twitter": "https://twitter.com/ChalkBoredNFT", - "website": "https://chalkbored.xyz/" - } - }, - { - "chainId": 101, - "address": "D1MQUD2QKg4HaMbasBq4gk8LWjaogBiGV2vdLkrodBkx", - "symbol": "FWL", - "name": "Fellowship WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/D1MQUD2QKg4HaMbasBq4gk8LWjaogBiGV2vdLkrodBkx/logo.svg", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/fellowshipdao", - "twitter": "https://twitter.com/FellowshipDAO", - "website": "https://fellowshipdao.com/" - } - }, - { - "chainId": 101, - "address": "8SGPkY7qCiYpodQLHNjuG2doBkbhDpTqwaLFnDJvS3Bk", - "symbol": "GLC", - "name": "GoodLuckCharm", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Jbigga/verbose-octo-pancake/main/good-luck.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BsaTqsqD9JKM7mRzZ7U2MCLrXtfg2CuwbrFYVoTrYvHx", - "symbol": "LBC", - "name": "LaBella Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Nicolalalalala/LaBellaCoin/main/StarLogo.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "2sZyMV6LdAD8v5rEVDWyYKFXWXY1PkVid9smCtsF4qog", - "symbol": "PMP", - "name": "PimpCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/PimpCoinboys/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BV2AJmBUFnEXqAjXxhds5st6hoHnCfbCLzqnGY87ciWQ", - "symbol": "SSP", - "name": "Secret Syren Pass", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BV2AJmBUFnEXqAjXxhds5st6hoHnCfbCLzqnGY87ciWQ/logo.png" - }, - { - "chainId": 101, - "address": "mofLoWHKWess7F63We227zfDcXD3YkgoR79BWX7DDSA", - "symbol": "MOFBOT", - "name": "MOF BOT token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/mofLoWHKWess7F63We227zfDcXD3YkgoR79BWX7DDSA/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "5ZaBjSwzhSr5vG35CDENqmkfvrHSnTwhm1dFLeBYmVxS", - "symbol": "JAYDN", - "name": "Jaydn Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jaydnchiert/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3z6Rry7DNjvcqbHZJgKv7gpa1XpMDuvxN66pLDfaLh8p", - "symbol": "SQF", - "name": "Squarefish", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/ryanoff/squarefish-token/main/icon.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "56eg63pjkbYB3XYBWu23scue61W6emtNEuYNEBtsCWDy", - "symbol": "ARK", - "name": "arkayde-monkey", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/yoavshmariahu/token-list/main/assets/mainnet/56eg63pjkbYB3XYBWu23scue61W6emtNEuYNEBtsCWDy/logo.png", - "tags": ["nft"], - "extensions": { - "website": "https://www.arkayde.io/" - } - }, - { - "chainId": 101, - "address": "2pLrCRnbYBGbhANbUvkFXDYuuRNZNkesbvc8WSMQ9unX", - "symbol": "DEVX", - "name": "developer experience", - "decimals": 9, - "logoURI": "https://user-images.githubusercontent.com/35096265/151653614-7271949c-5d16-4b0e-b06f-af5b5983fb8d.png", - "tags": ["utility-token", "Community-Token"] - }, - { - "chainId": 101, - "address": "61m2xv1m6zTEAS86VfjFmNKG1ZGemNu19hzMmgstowLZ", - "symbol": "SAMI", - "name": "SAMI", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/tund1/images/main/SAMI.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/E7yWZrzvXj", - "twitter": "https://twitter.com/SenshiNFT", - "website": "https://senshisamurai.com/" - } - }, - { - "chainId": 101, - "address": "5oegZC9FYh5dtvRGm8qVF8mBm6Haw83PCHmUjW5pF2h3", - "symbol": "DOK", - "name": "Dokdo Coin", - "decimals": 5, - "logoURI": "https://github.com/johnnyconto/Symbol/blob/main/symbol.png", - "tags": ["charity-token"] - }, - { - "chainId": 101, - "address": "4PDQFjLhWowgfCVJY4qmXtX3VDGirgCCs6vcByx63HMm", - "symbol": "JUSTO", - "name": "Justo", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/justinvallely/justo/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "yUT3Dqe2Nz46iy9urmqEdntQSBywvSC1KoiktkEycvN", - "symbol": "y-UST-USDC", - "name": "Yield Saber LP Token (UST-USDC)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/yUT3Dqe2Nz46iy9urmqEdntQSBywvSC1KoiktkEycvN/logo.svg", - "tags": ["yield-token"], - "extensions": { - "website": "https://bunnyducky.com/" - } - }, - { - "chainId": 101, - "address": "3Ymo9BYodmFXkQLxQwCLWdp9PYBgn8Zu6sVkP4ZNi1u9", - "symbol": "BMXGH", - "name": "alaskabmx", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/alaskagh/ALASKAGH/main/pngwing.com.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4n91Cp8ufhotnvvNj7zMZemYhCdfaJhSAQifGMGrDXNR", - "symbol": "SCMK", - "name": "Citizens Mint Key", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4n91Cp8ufhotnvvNj7zMZemYhCdfaJhSAQifGMGrDXNR/logo.svg", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/wS932Vndrc", - "twitter": "https://twitter.com/SolsteadsNFT", - "website": "https://citizens.solsteads.com/" - } - }, - { - "chainId": 101, - "address": "6hUBekzJqUybbKuBWKirjQuSvWTAb3LxxuAQVNVVnXJi", - "symbol": "BRIAN", - "name": "Brian Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/brianmahlstedt/bmahlstedt.com/master/frontend/public/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2XR2o7RXgrtDU2E4QspqirqZRXHRkVTZSaXhCR2WUjc8", - "symbol": "NBPL", - "name": "NewberrySolToken", - "decimals": 0, - "logoURI": "https://github.com/iNewberry/soltoken/blob/main/newberry_white_225_250.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9AkMBNwwFXsMugHitdXdWTavJHuhtjU8d4n9fzXE2RAr", - "symbol": "PERC", - "name": "Crypto Nine 3D", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Monzingo89/CryptoNine3DCoin/main/logo.png", - "tags": ["social-token"], - "extensions": { - "discord": "https://discord.gg/UwBmvmjnqJ", - "twitter": "https://twitter.com/CryptoNine3D", - "website": "https://cryptonine3d.com/" - } - }, - { - "chainId": 101, - "address": "8J7yrjW4JsZYiLUMWxyHu5V1bStvFQ7yD3jHrkTk88wk", - "symbol": "DINO", - "name": "Dino Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/vinceeverton/everton/main/daring%20dinos%20%23111131.jpg" - }, - { - "chainId": 101, - "address": "gem1g5yUhMHr2hLcPVQJHK96XZGvZgvgrXLyoDaavZy", - "symbol": "TyTokn", - "name": "Token of Bone", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/gem1g5yUhMHr2hLcPVQJHK96XZGvZgvgrXLyoDaavZy/logo.png" - }, - { - "chainId": 101, - "address": "gem2bWYeGnwFLqif2LVejMos5HFMGpvCVT4oNDWAD22", - "symbol": "TyTokn", - "name": "Token of Amethyst", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/gem2bWYeGnwFLqif2LVejMos5HFMGpvCVT4oNDWAD22/logo.png" - }, - { - "chainId": 101, - "address": "gem3tNL3oLdJiuZ4WucMXbFqrgoUiSjqcxEqjFP4ex2", - "symbol": "TyTokn", - "name": "Token of Ruby", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/gem3tNL3oLdJiuZ4WucMXbFqrgoUiSjqcxEqjFP4ex2/logo.png" - }, - { - "chainId": 101, - "address": "gem4KsX8iPGmRcydTX7CjiSWWV2Ewp8Bk2d2xkjQErd", - "symbol": "TyTokn", - "name": "Token of Yellow Diamond", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/gem4KsX8iPGmRcydTX7CjiSWWV2Ewp8Bk2d2xkjQErd/logo.png" - }, - { - "chainId": 101, - "address": "gem5PzSyAVNRStfDxmeEtQ3hwJuxBFTtkhod7ky4yoE", - "symbol": "TyTokn", - "name": "Token of Citrine", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/gem5PzSyAVNRStfDxmeEtQ3hwJuxBFTtkhod7ky4yoE/logo.png" - }, - { - "chainId": 101, - "address": "gem6MmeKGHZswKKsj5nj7cVuRdUvgQmz15RvH1mGoM5", - "symbol": "TyTokn", - "name": "Token of Aquamarine", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/gem6MmeKGHZswKKsj5nj7cVuRdUvgQmz15RvH1mGoM5/logo.png" - }, - { - "chainId": 101, - "address": "gem7SRHvDPDNEiUgzCgkjsSpTTuWZwSvCTNjSocDBVh", - "symbol": "TyTokn", - "name": "Token of Emerald", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/gem7SRHvDPDNEiUgzCgkjsSpTTuWZwSvCTNjSocDBVh/logo.png" - }, - { - "chainId": 101, - "address": "gem8crKAucbrYSv6LoPQC7nsk8gD9Xegrf2cXQaM6Vv", - "symbol": "TyTokn", - "name": "Token of Sapphire", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/gem8crKAucbrYSv6LoPQC7nsk8gD9Xegrf2cXQaM6Vv/logo.png" - }, - { - "chainId": 101, - "address": "gem9c2awvvwqmmc2JzfvDi9NffTEupzGUbnNHbVVbtU", - "symbol": "TyTokn", - "name": "Token of Peridot", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/gem9c2awvvwqmmc2JzfvDi9NffTEupzGUbnNHbVVbtU/logo.png" - }, - { - "chainId": 101, - "address": "gem1oHFv3SkPSC5E2jkaSLgMeK35MnE9JGPYabHWfwn", - "symbol": "TyTokn", - "name": "Token of Pink Tourmaline", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/gem1oHFv3SkPSC5E2jkaSLgMeK35MnE9JGPYabHWfwn/logo.png" - }, - { - "chainId": 101, - "address": "gem117wcyhYdU4247o3nmCQ3cPZL4DpJWBkTgX8ZvZN", - "symbol": "TyTokn", - "name": "Token of Diamond", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/gem117wcyhYdU4247o3nmCQ3cPZL4DpJWBkTgX8ZvZN/logo.png" - }, - { - "chainId": 101, - "address": "Ct8kkYmeNZqofEcv3VibzoZPm75kiabs3VAdwdHFy4B4", - "symbol": "DNK", - "name": "Danaka", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/honeybkk/crypto/main/coin.PNG", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9Y46b1AZFgoAbPq9oddoaDSahCaZWTh7AmdvgPZa9nN7", - "symbol": "TASH", - "name": "Magara Tash", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/viol3/magara-solana/main/logo.png" - }, - { - "chainId": 101, - "address": "6vVD6QjoFjghKhXQtSc2yTSQaGTBxcUGnWfjnzbeeENK", - "symbol": "CHIPS", - "name": "Universe Chips", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6vVD6QjoFjghKhXQtSc2yTSQaGTBxcUGnWfjnzbeeENK/logo.png", - "tags": ["utiliy-token", "social-token", "community-token"], - "extensions": { - "discord": "https://discord.gg/cxmgnKtZBF", - "twitter": "https://twitter.com/u_niverseNFT", - "website": "https://twitter.com/u_niverseNFT" - } - }, - { - "chainId": 101, - "address": "5Wddj4FevPALWn655YTC5wGktWM7vViQTzLJLr2dhGFF", - "symbol": "UPASS", - "name": "Universe Pass", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5Wddj4FevPALWn655YTC5wGktWM7vViQTzLJLr2dhGFF/logo.png", - "tags": ["utiliy-token"], - "extensions": { - "discord": "https://discord.gg/cxmgnKtZBF", - "twitter": "https://twitter.com/u_niverseNFT", - "website": "https://twitter.com/u_niverseNFT" - } - }, - { - "chainId": 101, - "address": "6MxMHdu9xfnMC8ruHv3x4TdxR8W3S9J2hKBWBMyxtkTY", - "symbol": "CUBR", - "name": "Cubric", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/crypterix/cubr-token/main/logo.png", - "tags": ["metaverse", "game-token", "payment-token"] - }, - { - "chainId": 101, - "address": "3ju4tKmMrJUX981gWg6icbB7DWMFAmo8MFwKHZReZYpp", - "symbol": "FPA", - "name": "OFS-FPA-COIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/wedd2626/roncrypto/main/OFSICON.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "CTQBjyrX8pYyqbNa8vAhQfnRXfu9cUxnvrxj5PvbzTmf", - "symbol": "BACH", - "name": "BACH Token", - "decimals": 12, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/badd1dbe8c2d1e38c4f77b77f1d5fd5c60d3cccb/assets/mainnet/CTQBjyrX8pYyqbNa8vAhQfnRXfu9cUxnvrxj5PvbzTmf/bach-token-logo-Est.2022.png", - "tags": ["music-token", "social-token", "utility-token"], - "extensions": { - "website": "https://musik88.com/BACH" - } - }, - { - "chainId": 101, - "address": "9LwVPhjXZ2vc4yGmZu9buifRJvf6enWowzFRouAwAedj", - "symbol": "AQLA", - "name": "Aqualibre Project", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/Aqualibre/AQLAlogo/main/AQLA.png", - "tags": ["utility-token", "offset-token"], - "extensions": { - "twitter": "https://twitter.com/LibreAqua", - "website": "https://www.aqualibreproject.com" - } - }, - { - "chainId": 101, - "address": "3mybJECUrNVJoqf8K84AzoLQHzpjBRtn1uTnY8gbiDrv", - "symbol": "BUNI", - "name": "Happy Bunnies Gold Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/HappyBunniesNFT/Happy-Bunnies/main/Happy-Bunnies-Gold-Token.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "96TaRFYTJceZSm5Y5m4wkdRjRS8NTUf8DzrcVGqL85F8", - "symbol": "HBWT", - "name": "Happy Bunnies Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/HappyBunniesNFT/Happy-Bunnies/main/Happy-Bunnies-Silver-Token.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "37yAJGaaqP5dPwTyVdTCWKr7YeiH9U8maCtGNEDky3si", - "symbol": "ALIEN", - "name": "Alien Universe Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/alien-universe/assets/main/logo.png", - "tags": ["game-token", "community-token"] - }, - { - "chainId": 101, - "address": "8o6wCFnz4H3tNQf3P3jwc5Q38QksZmGi3WyiKsEDWpWF", - "symbol": "ROTC", - "name": "Rotar Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/potatos12333/Crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "B5g4fUcVox9q6dowqAxm2EXNLuz45jiW2iFZcmvP2KvK", - "symbol": "PQT", - "name": "Pixel Quest Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/B5g4fUcVox9q6dowqAxm2EXNLuz45jiW2iFZcmvP2KvK/logo.png", - "tags": ["social-token", "utility-token", "community-token"], - "extensions": { - "description": "The Solana Pixel Quest token", - "twitter": "https://twitter.com/SolPixelQuest", - "website": "https://solanapixelquest.xyz" - } - }, - { - "chainId": 101, - "address": "ErPsVLjNj8sFWFui5JnaavLh4ZtpLq2rffJR1f1GNQAq", - "symbol": "MFT", - "name": "MetaFootwear Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SilverBM/logo/main/logo.png.png", - "tags": ["NFT-Token"] - }, - { - "chainId": 101, - "address": "2y7wUCJdtqTbjnKBNEB3DpAYCuwA1atCtdfkGt9VR4sM", - "symbol": "$PSYn", - "name": "PSYn", - "decimals": 5, - "logoURI": "https://github.com/charliebakerr/psy-token/blob/main/photo_2022-01-30%2012.23.01.jpeg", - "tags": ["social-token"], - "extensions": { - "website": "https://psynetwork.io" - } - }, - { - "chainId": 101, - "address": "AXSJtZsAw4SCrJwt9vAVeNycKDKTUrEQ6rxzoimNUVoo", - "symbol": "HPC", - "name": "HpaCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MasterC0derr/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8AY9mo8fTDdeuhCC3fAxV313gVKxko8SGWuPFuPFyrAF", - "symbol": "MEIO", - "name": "Meio Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/evzonic/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EXAzCuUPFRgq2vG5naJYJVW6Z68j45RfequsmYfwPfQy", - "symbol": "FORS", - "name": "Fors Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Thunberg087/ForsCoin/master/ForsCoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "D4F6Qkn6DYpCQFnuFmABSuKRPzdMGTvqVU4NovYJo8JD", - "symbol": "DEFI", - "name": "Crypto", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/BlockchainWizard/Crypto/main/CryptoCoin.png", - "tags": [ - "utility-token", - "social-token", - "nft-token", - "community", - "Crypto", - "DEFI" - ] - }, - { - "chainId": 101, - "address": "4mJ6N65rD9w6sFPQ17UDWot2H64UtzR31biVLaKpZT6J", - "symbol": "ALIEN", - "name": "AlienUniverse Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/alien-universe/assets/main/logo.png", - "tags": ["game-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/AlienUniversNFT", - "website": "https://alienuniverse.io/" - } - }, - { - "chainId": 101, - "address": "4AhAphjiE9M81KyHBJNHCHrYTzScm2wrxLSu5zCYKvWq", - "symbol": "HUMAN-SOL", - "name": "HUMAN-SOL LP Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4AhAphjiE9M81KyHBJNHCHrYTzScm2wrxLSu5zCYKvWq/humanlp.png", - "tags": ["lp-token"], - "extensions": { - "coingeckoId": "human", - "coinmarketcap": "https://coinmarketcap.com/currencies/human-coin/", - "discord": "http://discord.gg/5m6cBdry6y", - "twitter": "https://twitter.com/thecyberkatz", - "website": "https://cyberkatz.space" - } - }, - { - "chainId": 101, - "address": "GPiMHSiMsX94dGXYGaA4CkMNF74KXbqJk9y31tqMUhE8", - "symbol": "Cultivate", - "name": "Compassionate Care Cultivators Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/theworkathomeacademy/cccultivate/main/cccultivate_logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CooPeTCb9FBRUgVsptj8r13Nai1o3Sgd8rMhWi9Fcbs3", - "symbol": "COOP", - "name": "CoopBits", - "decimals": 6, - "logoURI": "https://arweave.net/-HbRJjyYpfVLILnWOhut7PtIt6UR5jjW44HLLBbDlEg", - "tags": ["social-token"], - "extensions": { - "facebook": "https://facebook.com/Coopbit", - "instagram": "https://www.instagram.com/CoopBits", - "twitter": "https://twitter.com/Coopbitss", - "website": "https://coopcrowd.com" - } - }, - { - "chainId": 101, - "address": "2BZ8NMmnwbaxseLwQVmwb1N4vjYhF3KXi5iqnGmbDdWV", - "symbol": "CAROL", - "name": "CarolCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/reihtw/carolcoin/main/carolcoin_logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8Esq5cPGK4ifsm8sHLvnWJUEhupKXyyg8SqoE4B79wos", - "symbol": "MNM", - "name": "Mark \u0026 Myia C0in", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/darkjumper5/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "rk1n9BraH65rd8bgFW8YEVmhq4dmvAcETFrYdUdjLfa", - "symbol": "Baap", - "name": "Universe Baap", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/manassikri/token-list/ded03f5e31a5b45865821586c006ce2c822dbe63/assets/mainnet/rk1n9BraH65rd8bgFW8YEVmhq4dmvAcETFrYdUdjLfa/baap_icon.PNG", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "C63abTB86tqri3LtuCyyK7ti1fC1RamovBUqYs94Fqcj", - "symbol": "JULI", - "name": "Juliette", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/poush/ipiyush.com/master/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GBjETEdSvrtuxQx3rywQTR9FJm6VJugJJ9Gxi9wrMiKg", - "symbol": "OSSE", - "name": "Ossecoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GBjETEdSvrtuxQx3rywQTR9FJm6VJugJJ9Gxi9wrMiKg/logo.png" - }, - { - "chainId": 101, - "address": "2Zz3HKQdHM1p4cUE714wkBs7VegVAfJH48Ww7AEV2oKu", - "symbol": "CHCK", - "name": "Checkoin", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/outstandaedu/outstanda/main/logo.png", - "tags": ["education-token", "education"], - "extensions": { - "twitter": "https://twitter.com/outstandaedu", - "website": "http://www.checkoin.com" - } - }, - { - "chainId": 101, - "address": "4BfXSiVYZ2RT4dCcfTSjyhBWks2KyZoJL5gTUBpG4wQa", - "symbol": "MSKM", - "name": "MaskMan Token", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/realradical/crypto-sol/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4Uebzt5ngRCx44JSakZWjPmBJjmvYkfDtYotCZFRyKLb", - "symbol": "INKW", - "name": "Inkwe Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mrdawgza/inkwecoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "nU3vPxb6gVYZNuxXW3DuB77KViFh3iV8AXMcmpq7xjx", - "symbol": "Khls", - "name": "Khalsa", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/sukhbal/crypto/main/Khanda2.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HXr5yRmXkA2qYQzkKXJ2yZS5f9QYDjPvTPT9PmApEY4J", - "symbol": "SLIME", - "name": "Slime Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HXr5yRmXkA2qYQzkKXJ2yZS5f9QYDjPvTPT9PmApEY4J/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://www.weareslimes.com" - } - }, - { - "chainId": 101, - "address": "2knG14icDCxtvCW5NC43CjgkgKxmnuPGv94GUj7bGp3s", - "symbol": "AHOL", - "name": "Alcohol", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/ahol-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DAwtdBT9MvZsRjQnajKka8R6SApTXU3smpHNjWrQizxq", - "symbol": "OWE", - "name": "IOU", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/owe-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GXkh6qkKB16oJqLXgi8i7Q4bEESBYQYsZejZPb68KTRd", - "symbol": "TNG", - "name": "Thing", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/tng-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "29LTkpS6y3Uz1UtpSCCf44N586gsfmdF2mr5tCM1vBb2", - "symbol": "WINE", - "name": "Wine", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/wine-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6zcdFNBup26LDU8s1VyeRTTeQgWCGhfv7CMnLnUT8jYH", - "symbol": "INSIGHT", - "name": "Insight", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/insight-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Dhx1gTCqVdpZV99EkoroxQfQ1r3eQyBxJFBNXuvviNJC", - "symbol": "AUTO", - "name": "Automation", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/auto-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5JQm4bPcHZMYVX4kwRgfbJbGWwSNf7LcHoC2JQCGTaMF", - "symbol": "EXPR", - "name": "Experience", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/expr-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8BxfVMgCxZG8Yx13AgtoewwLX7x5HHQaM7cLFJ2zKr3n", - "symbol": "FOCUS", - "name": "Focus", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/focus-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DNvXGyCwk7MeUKPLEvLL8zThYapPUfqkY4GyGsLDZMdM", - "symbol": "IOT", - "name": "IOT", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/iot-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BYHKZqqUVgFj82jKMmAcnuK3SPmQRvnjiSa3xtVzej4J", - "symbol": "CHRG", - "name": "Charge", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/chrg-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "G9sFdhjgpvpRzCNjbi5KHbSJiCLXQjb72sSnDNA2252B", - "symbol": "STF", - "name": "Stuff", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/stf-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2JuAFubeEdpjGhRzLqXTxHKYDrCt1ZAswSk1Yo6xf8A3", - "symbol": "DRNK", - "name": "Beer", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/drnk-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2CocrLUBKadDChAR7weK2vo6GE72zgWgBV3xXRcrHgG1", - "symbol": "O", - "name": "Orgasm", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/o-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9mzeQQGLvsrFCWw8VmN42sNioEUF8Y8isxWmQ7sATVzY", - "symbol": "FTNS", - "name": "Fitness", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/ftns-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5DGt9RyzKKEBhpTndsdKSepcanHthQ3V88zimZAUrXTE", - "symbol": "NATR", - "name": "Nature", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/natr-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5Rsjs7DJrYBqcLWSBNtbQTGzdv9qQyUPcEXb6mjAhKgp", - "symbol": "ADVC", - "name": "Advice", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/advc-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AxjXRvhCGregr4hJGz3MizYk7a7Dk68hpyZ4iSgpVABi", - "symbol": "DRCN", - "name": "Direction", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/drcn-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2DUPqJ4p2ebFbayM6npoTab8AZP2tvkVLgVff5tnBUBn", - "symbol": "WSKY", - "name": "Whiskey", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/wsky-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BhEfh2YiRtWySpMukfayF6jDzVaxQSY7pjNVEqing99c", - "symbol": "QUIET", - "name": "Quiet", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/quiet-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AMBsnZoeiWhsfk2RATCXSbG5KyGkqN9nNGwH9Db3RWR6", - "symbol": "TIME", - "name": "Time", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/time-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EMAqnp7coDmGRMtBGBv2NBtuu28ZUopzo9uH5ngBdS4T", - "symbol": "INFO", - "name": "Info", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/info-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6uybw8dfojtb71HNYvJkj2r7Ue1oGSGwNnHFXDJtGhCZ", - "symbol": "RIOT", - "name": "Riot C01N", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6uybw8dfojtb71HNYvJkj2r7Ue1oGSGwNnHFXDJtGhCZ/logo.png", - "tags": ["social-token"], - "extensions": { - "description": "Riot C01N - first Riot Token/Coin", - "twitter": "https://twitter.com/MrRoryRiot" - } - }, - { - "chainId": 101, - "address": "7n9ovGfYCwMwWS5PvZ6jJe9NgSTDhGCR9SSRfBaB9iJm", - "symbol": "VNTS", - "name": "Vintus", - "decimals": 0, - "logoURI": "https://github.com/VintusGH/crypto2/blob/main/vintus_official2.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CPR34yNtEecfCNU86DhmAGMcTo2KNMuEpCDJL81hcPgr", - "symbol": "CP", - "name": "CornPop Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CPR34yNtEecfCNU86DhmAGMcTo2KNMuEpCDJL81hcPgr/logo.png", - "tags": ["meme-token", "social-token"], - "extensions": { - "twitter": "https://twitter.com/dopetweetsbrah" - } - }, - { - "chainId": 101, - "address": "3qX21t9nLt4AJ1NqdiVAikRdM6QfjJuPp3pz9cZyBM2a", - "symbol": "SNM", - "name": "SayNoMore", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Lange1990/SNM-Coin/main/snm-logo.png", - "tags": [ - "utility-token", - "social-token", - "nft-token", - "community", - "Crypto", - "DEFI" - ] - }, - { - "chainId": 101, - "address": "8bxHnjDrhW4488XMwZih6aYEiHRCSySNy3DMfn43dbiC", - "symbol": "MVZY", - "name": "Mavzayo", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Mavrag/logos/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CXdmsYdhqFR6o8YC81mV9SVhhuooSeRFy2B7mi9eFnvW", - "symbol": "RATTY", - "name": "Rattie Koin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jonwretlind/rattie-token/main/token-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "E74tNWRjKvYnULLoVdsniCfTvh6znSci1V9fkyyhNU3e", - "symbol": "RMA", - "name": "RMA Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/rom2282/RMA-coin/main/coin_m.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Gxc4XkzAK6ykL15NR9c8SrwWSJCwPb3fqHsZeJKaB4xv", - "symbol": "FCHC", - "name": "HansaCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/dsinnig/hansaCoin/main/hansaCoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ATZaUphhN7mrcwMdoY1hTRprwV1rxGPuWr1YkGNP8Axr", - "symbol": "ALFAC", - "name": "AlfaCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/alfatokens/crypto/main/alfa.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "KDXvqikvXxc49SzLaLRa4uK7LbB9rrqDASvL4xJajqN", - "symbol": "KDX", - "name": "KDX", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/KDXvqikvXxc49SzLaLRa4uK7LbB9rrqDASvL4xJajqN/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://kdx.cl/" - } - }, - { - "chainId": 101, - "address": "5gXAJQJ8ms9pKBaJtceoQ1yh8fjZLdvSicFCQKxqXaGK", - "symbol": "IRPR", - "name": "iRepairCLT Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Ialzouby/iRepairCLT-Coin/main/2002.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EcSXCrLsB6nZ3ccr2VR6mrXXsXsCAWtG2a9cWMKn4CJt", - "symbol": "ARTIFAKT", - "name": "ARTIFAKT Mint Pass", - "decimals": 0, - "logoURI": "https://arweave.net/1lU3cQ15_5Wq3khZO_d_Jr9_xIlLhDTh_vbJrMtug0k", - "extensions": { - "description": "Mint Pass for ARTIFAKTS", - "imageUrl": "https://arweave.net/1lU3cQ15_5Wq3khZO_d_Jr9_xIlLhDTh_vbJrMtug0k", - "twitter": "https://twitter.com/ARTIFAKTS_sol", - "website": "https://www.artifakts.xyz/" - } - }, - { - "chainId": 101, - "address": "6xUECSMxSjPGPMzauuCjJGkYgyLYC5UJWpv5en8twhPN", - "symbol": "SKOL", - "name": "SKOL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6xUECSMxSjPGPMzauuCjJGkYgyLYC5UJWpv5en8twhPN/logo.png", - "extensions": { - "twitter": "https://twitter.com/SolSkullsNFT", - "website": "https://skolsnft.com/" - } - }, - { - "chainId": 101, - "address": "Hdrim63jd7Woa1u5MvME5GeaYysXCuKqdzQs3qFbDJNk", - "symbol": "GROW", - "name": "Growth", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/grow-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3smZZpSgFMFVkECTWMjwVTK89WzpJy8M77VDrzeAZ8Qi", - "symbol": "PLA", - "name": "Play", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/pla-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FFtpF7GuXB5Pjmug3wWwx9HpvXzCm5QmYEUjXUyxtVUB", - "symbol": "CHANGE", - "name": "Change", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/change-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "MonYu4GQb1dpoMs4DG1FpJt5F9nXtUy6JRyvANZFxZu", - "symbol": "MONY", - "name": "Mooney Token", - "decimals": 6, - "logoURI": "https://arweave.net/b-zptDkkRt3xz9dNflpUxRMJMqFq40tPVS5wjuicDd4", - "tags": ["social-token"], - "extensions": { - "discord": "https://discord.com/invite/moondusa", - "telegram": "https://t.me/MoondusaTheNFT", - "twitter": "https://twitter.com/Moondusa", - "website": "https://moondusanft.io" - } - }, - { - "chainId": 101, - "address": "HG2UzJS8rbgsd16tZorT1mNiPJBjE7Xq4ifqsfZNK6h6", - "symbol": "UXD-3Pool", - "name": "Mercurial LP Token (UXD-3Pool)", - "decimals": 12, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HG2UzJS8rbgsd16tZorT1mNiPJBjE7Xq4ifqsfZNK6h6/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://www.mercurial.finance/" - } - }, - { - "chainId": 101, - "address": "BezE74cco4xB2pw8bjo1aUgPPDrvs3iD2N3mWSxNPQ3a", - "symbol": "GEPG", - "name": "Grow East Point Germination", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/cpatt2015/Crypto/main/Germ.png", - "extensions": { - "twitter": "https://twitter.com/SolSkullsNFT", - "website": "https://skolsnft.com/" - } - }, - { - "chainId": 101, - "address": "6n9VoqhzkNZzZxfoFhCvFNFVYPetzxD9qBvoUPE3Z9XF", - "symbol": "SML", - "name": "Smiley", - "decimals": 0, - "logoURI": "https://github.com/kekhongdau01/crypto/blob/main/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "87qRcHFYN4w6VWcSiiWNFCH62EhNjUpb5sHP3ww5kPn5", - "symbol": "NED", - "name": "Ned Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/nimanezhadi/web3/main/logo.png", - "extensions": { - "website": "https://nimanezhadi.com/" - } - }, - { - "chainId": 101, - "address": "vCKbdx7ShGcyRvTiex76SLj3YqcgR3oBwQeDhEa6YSw", - "symbol": "SHL", - "name": "sarhanilabs", - "decimals": 7, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/vCKbdx7ShGcyRvTiex76SLj3YqcgR3oBwQeDhEa6YSw/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/sarhanilabs" - } - }, - { - "chainId": 101, - "address": "RAVA1GsKtUXyciThQMxssm15tB9hF8NFQjZM6kincqD", - "symbol": "RAVA", - "name": "RAVAverse", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/RAVA1GsKtUXyciThQMxssm15tB9hF8NFQjZM6kincqD/logo.png", - "tags": ["Governance-token", "Gaming", "NFT", "Exchange", "Metaverse"], - "extensions": { - "discord": "https://discord.gg/Sr9epbgEW4", - "telegram": "https://t.me/Ravaverse", - "twitter": "https://twitter.com/Ravaverse" - } - }, - { - "chainId": 101, - "address": "3xbqJgCsf2PjKQsjACGUvH2Eo8ZyGxW2hWGY9TZW2q8D", - "symbol": "ALPHA", - "name": "Alpha", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3xbqJgCsf2PjKQsjACGUvH2Eo8ZyGxW2hWGY9TZW2q8D/logo.jpg", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "5iTsXxzEm2msviveLGCXJpQYDqaCJHJfUvKDUMQiS2QF", - "symbol": "911", - "name": "911Academy", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5iTsXxzEm2msviveLGCXJpQYDqaCJHJfUvKDUMQiS2QF/logo.png", - "tags": ["social-token", "util-token"], - "extensions": { - "website": "https://policeacademynft.com" - } - }, - { - "chainId": 101, - "address": "GdK4LNeHCMnBgWJewgeJ11usnd59UHQ7avUmVmFomUz3", - "symbol": "SolanaIdols", - "name": "Solana Idols Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GdK4LNeHCMnBgWJewgeJ11usnd59UHQ7avUmVmFomUz3/logo.png", - "tags": [ - "utility-token", - "community-token", - "meme-token", - "Anime", - "NFT", - "nfts" - ], - "extensions": { - "discord": "https://discord.gg/k2mAEUKhcs", - "twitter": "https://twitter.com/SolanaIdols", - "website": "https://www.solanaidols.com/" - } - }, - { - "chainId": 101, - "address": "HX8kZQDV5oqyM1md8Z6nxEhfPdM4GFfPEYdyhehM8vBY", - "symbol": "ISCC", - "name": "Iskald Cola", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/IskaldBrus/8FAF47FE52A4DAAC2CEEE7E46EBC7/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8gCUGpSFcruuAGGCy1rMnhr3CSna95thNte6uCAbdWgv", - "symbol": "CRPSV", - "name": "Corpusville Membership Pass", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/osy93/token-list/8fc5460c667d817645f26e7b8a732ef3a25138d8/assets/mainnet/8gCUGpSFcruuAGGCy1rMnhr3CSna95thNte6uCAbdWgv/logo.png", - "tags": ["mint-token"], - "extensions": { - "description": "Token to Mint Corpusville Membership Pass", - "discord": "http://discord.gg/3fH3cVVFfg", - "twitter": "https://twitter.com/CorpusvilleNFT", - "website": "https://corpusville.com" - } - }, - { - "chainId": 101, - "address": "6YeTi7npbcyMZRqjVwY7zxW53iE39rMAzLErn3mTftAc", - "symbol": "Eros", - "name": "Eros Project", - "decimals": 9, - "logoURI": "https://github.com/starcodez/erosproject/raw/main/logo.png", - "tags": ["utility-token", "community-token", "NFT", "nfts"], - "extensions": { - "twitter": "https://twitter.com/ErosToken", - "website": "https://eros-project.com/" - } - }, - { - "chainId": 101, - "address": "2xkgFzA7DSRodWAFXfgSyAgKJh9Js2TnPS2DcGGSks9e", - "symbol": "hash", - "name": "Hash Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/harsh16kh/solana_quests/main/hash.jpg", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "5F8AtyhSt325X27eGAZTQmfyqQwfs7J2yAWc32WN1goP", - "symbol": "ANH", - "name": "Anahera", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5F8AtyhSt325X27eGAZTQmfyqQwfs7J2yAWc32WN1goP/logo.png", - "tags": ["utility-token", "community-token", "meme-token"] - }, - { - "chainId": 101, - "address": "ENA76HKkDfDbAaeosGvfFXB6NPFY8L8V2KkBAwnT6JXF", - "symbol": "rayTICKET-USDC", - "name": "rayTICKET-USDC LP TOken", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ENA76HKkDfDbAaeosGvfFXB6NPFY8L8V2KkBAwnT6JXF/logo.jpg", - "tags": ["lp-token"], - "extensions": { - "telegram": "https://t.me/theticketfinance", - "twitter": "https://twitter.com/TheTicketSol", - "website": "https://theticket.finance" - } - }, - { - "chainId": 101, - "address": "82xYSLKQ5xBca6rkQSG3Vjt7T6bGhbiwkUeYwk6NSt4", - "symbol": "SORTED", - "name": "Sorted", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/minopop/sorted/master/sortedicon.png", - "tags": ["social-token", "utility-token", "community", "Crypto", "DEFI"], - "extensions": { - "description": "Sorted is Australia’s first all-in-one home services marketplace – allowing you to connect everything you need for your home, all in one place.", - "website": "https://www.sortedservices.com/" - } - }, - { - "chainId": 101, - "address": "8trdTr5Qz964dpCMZzWwmz9XeN1JDUGPxmVeYZHEhEsp", - "symbol": "GBLE", - "name": "G-able Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Chiewchi/crypto/main/gable.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "J21YDEoGj4FwDsHUHRYky5eHYGpgBN5BEq9kfNefxcqt", - "symbol": "BONES", - "name": "GoldboneMusic", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/KatrellTurner/crypto/main/BONES%20LOGO.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7cuxRG3fkYzegvUzQarhG3UdVDbu7RoLi3ua4YXDTfeo", - "symbol": "TIGC", - "name": "tiger year coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/zihichuang/tigercoin/main/2022-tigc-w.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "TXdGde6R2WFF8WWbaEFiPQsa7vxY7Scqu1L4e3djScw", - "symbol": "FAPEIS$", - "name": "FAPEIS Token WL", - "decimals": 0, - "logoURI": "https://imagedelivery.net/aAmca-Po70V1nH4n9cT-uA/9c6903db-114f-4d46-db76-b3fc6f88f700/public", - "extensions": { - "discord": "https://discord.gg/swWYcCMvdK", - "twitter": "https://twitter.com/facelessapes444", - "website": "https://facelessapeis.com" - } - }, - { - "chainId": 101, - "address": "DRT5F5jJN9NWrz3gURDrGWCvs8GR41KddYQ78vdxchGM", - "symbol": "SK8TL", - "name": "SK8-T-L", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/TariqMBooker/assets/main/download2.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9JxDDwnCYAmEznRLeMYrjT8GiGBFM7VzRgsqkiLqjhas", - "symbol": "YOLO", - "name": "YoloCoin", - "decimals": 9, - "logoURI": "https://github.com/YoloBoyz446/Yolo-Coin", - "tags": ["Party-Asset", "Yolo"] - }, - { - "chainId": 101, - "address": "H3rZJzvMWrLp6u5ED2FCSeYeAxih9tJEQTxae8obisjT", - "symbol": "MASS", - "name": "SolPlanets MASS Token", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/vts666/masslogo/main/masslogo.png", - "extensions": { - "discord": "http://discord.gg/RNAgPeZXnV", - "twitter": "https://twitter.com/solplanets_nft", - "website": "https://solplanets.xyz" - } - }, - { - "chainId": 101, - "address": "9YoiEstQbAgQscqN4xeSsWk1S5yENwRHP74kgvAMGVjQ", - "symbol": "ROUX", - "name": "Flying Carpet KE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9YoiEstQbAgQscqN4xeSsWk1S5yENwRHP74kgvAMGVjQ/FC.KE.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "A8KtBhjWn5P4JLrsNvW1ANPuQnqe3aZyvo5QcECrQPd9", - "symbol": "DROP", - "name": "DROP", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/A8KtBhjWn5P4JLrsNvW1ANPuQnqe3aZyvo5QcECrQPd9/logo.svg", - "extensions": { - "twitter": "https://twitter.com/supadropnft", - "website": "https://www.supadrop.com/" - } - }, - { - "chainId": 101, - "address": "7q3P7FmKW9ChvzNe81yfeuNGn8XsvwwfVNJS7S5WzXap", - "symbol": "FRISCOS", - "name": "Friscocoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/fiasco67/friscocoin/main/logo.svg", - "tags": ["social-token"], - "extensions": { - "website": "https://crypto.milkywayfiasco.com/" - } - }, - { - "chainId": 101, - "address": "9T3Rjp9KajQARj4Fje91HJ7HTMB4fQfyAPaUzaM7M9yP", - "symbol": "PUSH", - "name": "P", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/BrandonClem/Crypto/main/P.png", - "tags": ["social-token"], - "extensions": { - "twitter": "https://twitter.com/PUSHpresident" - } - }, - { - "chainId": 101, - "address": "4W1KbtB5tqZBkKaSqZpEc8387GJ8v2xbcMgXub6SVVRX", - "symbol": "ECT", - "name": "ECLIPTIC", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4W1KbtB5tqZBkKaSqZpEc8387GJ8v2xbcMgXub6SVVRX/logo.png", - "tags": ["social-token", "community", "Crypto"], - "extensions": { - "instagram": "https://www.instagram.com/ecliptic.crypto", - "twitter": "https://twitter.com/eclipticcrypto" - } - }, - { - "chainId": 101, - "address": "6AMG3z14ia54ThCCAB84fduRAJ2DxwAdMyj5LRrtmsQB", - "symbol": "CHI", - "name": "Freemason Chisel Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/chiseltoken/Crypto/main/logo.png", - "tags": ["social-token", "community-token", "nft-token"], - "extensions": { - "discord": "https://discord.gg/STU3w2XtYN", - "facebook": "https://www.facebook.com/chiseltoken", - "instagram": "https://www.instagram.com/chiseltoken/", - "reddit": "https://www.reddit.com/r/chiseltoken/", - "twitter": "https://twitter.com/chiseltoken" - } - }, - { - "chainId": 101, - "address": "8ixdtoh5uLvYsScHDfkEKHU1WZhqEYM3YcCva3qn1Kpu", - "symbol": "HD", - "name": "HD Crypto Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/k3nn8y/Coffee-Token/main/8ixdtoh5uLvYsScHDfkEKHU1WZhqEYM3YcCva3qn1Kpu.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "C14M2mnzdQf5v4vqN9PGnWCasS3oRi2YpAneUmW7XBV4", - "symbol": "MKFI", - "name": "MEIKAFI", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/natenation8977/cryptonate/main/meikafi.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BZAyVG8WQPXt98qqopmFVEMH7dn5k4yDzVZG9XuXcgF3", - "symbol": "STZR", - "name": "SolSeltzer", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SolSeltzer/Crypto/main/logo.png.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "A63H4R1nNSZMxFjn9D3AejKL6KXfuY5H75T8zqwj7ryU", - "symbol": "GAMBLE", - "name": "Casino", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/BlockchainWizard/Crypto/main/Casino.png", - "tags": [ - "utility-token", - "social-token", - "nft-token", - "community", - "Casino", - "Gambling", - "Betting" - ] - }, - { - "chainId": 101, - "address": "6kfKCfN6FKuGEEPrLXR5nYavM8MVj59VymNN1CpAfSw3", - "symbol": "HOOT", - "name": "Owlcoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/owlcoin-sol/owlcoin/main/300px.png", - "tags": ["social-token", "utility-token"], - "extensions": { - "discord": "https://discord.gg/ATRfazNAYY", - "twitter": "https://twitter.com/0wlcoin", - "website": "http://owlhoot.club/" - } - }, - { - "chainId": 101, - "address": "61KT9S6byGpq5FmYDKkg1N36Cj4KXDtH1gjsuJTYd24L", - "symbol": "CIO", - "name": "Opincur", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/road12runner/opincur/main/opincur_logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://opincur.com" - } - }, - { - "chainId": 101, - "address": "7Vv2bCbK3geqiVgGcTnDM29qyEWpnJzTUbS5LDWpniuH", - "symbol": "CHAIN", - "name": "Blockchain", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/BlockchainWizard/Crypto/main/Blockchain.png", - "tags": [ - "utility-token", - "social-token", - "nft-token", - "community", - "Blockchain" - ] - }, - { - "chainId": 101, - "address": "Taki7fi3Zicv7Du1xNAWLaf6mRK7ikdn77HeGzgwvo4", - "symbol": "TAKI", - "name": "Taki", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Taki7fi3Zicv7Du1xNAWLaf6mRK7ikdn77HeGzgwvo4/logo.png", - "extensions": { - "website": "https://gettaki.com" - } - }, - { - "chainId": 101, - "address": "CkRtyP2dNZeCTXrZPc1kJngKYQVq5E2YJtPUQs9UxUYE", - "symbol": "COASE", - "name": "CoaseCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/MarkovExp/CoaseCoin/main/coaselogo.png", - "tags": [ - "utility-token", - "meta-verse", - "social-token", - "community-token" - ], - "extensions": { - "website": "http://exp.trading/coase" - } - }, - { - "chainId": 101, - "address": "HiukEL37kKv9fhTYsq8Re8osTSJmeCjEK2AjaTUE7mdF", - "symbol": "GCCR", - "name": "Gulf Cooperation Council Riyal", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/theashin197/logo/main/gccr%20Small.png" - }, - { - "chainId": 101, - "address": "FA49FHHB1DUCL9WPykw9yf58voRk92WwYNDjMa5Gq7tc", - "symbol": "HYPE", - "name": "ByteHype", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FA49FHHB1DUCL9WPykw9yf58voRk92WwYNDjMa5Gq7tc/logo.png", - "tags": ["social-token", "utility-token", "community-token"], - "extensions": { - "website": "https://ByteHype.io" - } - }, - { - "chainId": 101, - "address": "CEXwCLooS5Bf2qrzf18QoePYESD1JrzErGSdeaBd6Uwj", - "symbol": "SKET", - "name": "Sketch Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/kekhongdau01/crypto1/main/istockphoto-535498384-612x612.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AuxoBFAsVZ6Ez5TKK8cmnQ8cktCpYmE1bjp98M4Zeuju", - "symbol": "AK$", - "name": "AlienKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Melsatan/Crypto/main/aliencoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DUSTawucrTsGU8hcqRdHDCbuYhCPADMLM2VcCb8VnFnQ", - "symbol": "DUST", - "name": "DUST Protocol", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DUSTawucrTsGU8hcqRdHDCbuYhCPADMLM2VcCb8VnFnQ/logo.jpg", - "tags": ["NFT", "utility-token"], - "extensions": { - "discord": "https://discord.com/invite/dedao", - "twitter": "https://twitter.com/degodsnft", - "website": "https://docs.dustprotocol.com/" - } - }, - { - "chainId": 101, - "address": "3bBzthYLDgF58nE5khLJ88Ub7MAehsZPAD5V1uxS17Tg", - "symbol": "VIK", - "name": "Vikriyah", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/vikriyah/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "SLBwAxvWSfYqh2ZmPpNQ3Lo2Qxu8nn5D5mjbpNap5Yr", - "symbol": "SLB", - "name": "Benfica Fan Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SLBwAxvWSfYqh2ZmPpNQ3Lo2Qxu8nn5D5mjbpNap5Yr/logo.png", - "tags": ["social-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/BenficaToken", - "website": "https://www.slbenfica.pt" - } - }, - { - "chainId": 101, - "address": "SCP22eJcC3eSXxG51BQqfxsf3S2nQnGjXpnT3KT72Tu", - "symbol": "SCP", - "name": "Sporting CP Fan Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SCP22eJcC3eSXxG51BQqfxsf3S2nQnGjXpnT3KT72Tu/logo.png", - "tags": ["social-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/SportingToken", - "website": "https://www.sporting.pt" - } - }, - { - "chainId": 101, - "address": "62Unc9Dm8buA2iY35tTUCJ4ERoUp5Q7K8EWFiRTDfBp2", - "symbol": "OOMintTicket", - "name": "OO Golden Ticket", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/matlirman/token-list/main/assets/mainnet/62Unc9Dm8buA2iY35tTUCJ4ERoUp5Q7K8EWFiRTDfBp2/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FCPtL4RqWGLjstUxWpniCkHHNYuYFnVY7po2hoWgFEhT", - "symbol": "FCP", - "name": "FC Porto Fan Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FCPtL4RqWGLjstUxWpniCkHHNYuYFnVY7po2hoWgFEhT/logo.png", - "tags": ["social-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/PortoToken", - "website": "https://www.fcporto.pt" - } - }, - { - "chainId": 101, - "address": "To6BjpcUwXXP2XGUe8KeFFXjJos8wayUmHuM9ePkGWj", - "symbol": "IHRV", - "name": "IHrTeam NFT Valentine", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/valentinenft/token/main/IHR-ihrteam.png" - }, - { - "chainId": 101, - "address": "H5euuuZXAuFak2NVTMu53fckdkHFWuJzXXb3TfKTrLWK", - "symbol": "DEV", - "name": "DevCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/thedevdojo/devcoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "aWXP3vpT9MhFWDoMEYG5ssYG72dZN5Cb8cLWDLLThpB", - "symbol": "CIGO", - "name": "Crypto IGO", - "decimals": 9, - "logoURI": "https://github.com/starcodez/cryptoigo/raw/main/logo.png", - "tags": ["social-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/CryptoIGO1", - "website": "https://crypto-igo.com" - } - }, - { - "chainId": 101, - "address": "7SNxNjT82XpoBmkHJnEMyCxssrbTrvt3F386N7RknXBS", - "symbol": "GRR", - "name": "GorillaCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/K-code-k/ctypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8DxYVnEoLyuTs6Mgz4XbwXckZvwHryMxyLFGKqvY3C3c", - "symbol": "VSEN", - "name": "Vibudha Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/LordQuantum/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7mhmh7qNVWkUUcdyoY5r17NwDHz9Lq5hxwPFX59hycq1", - "symbol": "GEPS", - "name": "Grow East Point Seeding", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/cpatt2015/Crypto/main/Seeding.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Fknt5RuY2Zd2GwKbHCzRTYCQBL8Ry9ugNHCcicvVKmQB", - "symbol": "WSBI", - "name": "WasabiCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/luke911able/Crypto/main/WasabiCoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2dsWvsHBE5biqZtNDYDUfxGVWKC7xSfwTArwic8MJAWy", - "symbol": "BLCWL", - "name": "Bluechip Mint", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/NFTBrickLayer/assets/main/BLC-logo.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "MR4LmLsWNyWZXzo3jHq1abv1ZwPwjGewrPoHsNSHVJk", - "symbol": "BCBY", - "name": "BCBY: Land WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SupCa/token-list/main/assets/mainnet/MR4LmLsWNyWZXzo3jHq1abv1ZwPwjGewrPoHsNSHVJk/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "discord": "https://discord.com/invite/bcby", - "twitter": "https://twitter.com/BarnyardNft", - "website": "https://www.bcbarnyard.info/" - } - }, - { - "chainId": 101, - "address": "9N1hNVjr74nDMp6RZbGR8bwjbbrHpVZnu8B3cZiqaPoX", - "symbol": "CABRAL", - "name": "Amilcar Cabral", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/mikusher/cabral/main/logo.png", - "tags": ["social-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/mikusher", - "website": "https://www.mikusher.com" - } - }, - { - "chainId": 101, - "address": "2sc6jWgvjMdFpofZMB6Vsrsih58mp1jJoQss4chLSgxQ", - "symbol": "ACER", - "name": "Acer Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Maho2021/Crypto/main/Logo.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "8t2JQrLWDN8HJ5jTNKzVYgJasmxpaqQW6yo6dx9M3BTK", - "symbol": "$MYTH", - "name": "Myth", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8t2JQrLWDN8HJ5jTNKzVYgJasmxpaqQW6yo6dx9M3BTK/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/C4WG3YZCbN", - "twitter": "https://twitter.com/nft_godz", - "website": "https://godznft.com/" - } - }, - { - "chainId": 101, - "address": "5LjLH9C6HBGh5qWBFDyhpreK9RSru2PAGmzAGVZBDbzM", - "symbol": "PEERS", - "name": "Peers Token", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/aprilkeely12/logo-image/main/final_big_test_coin-removebg-preview.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "G766VkCHqBZDTYYvu7ntnfjZbqRKtjrTgsLWcxUiHxjx", - "symbol": "ZAH", - "name": "ZAH", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ZAH-Token/Adding-ZAH-Token/main/PIXELMONEY.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9pV7YvmrvW74WTBPpK7WK8FYyuLGo5aLBL2ewSxMGutz", - "symbol": "LONCH", - "name": "Lonch Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/lonchus/lonchcoin/main/logo.png", - "tags": ["social-token", "utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/lonchnow", - "website": "https://lonch.io" - } - }, - { - "chainId": 101, - "address": "5BEpcYXeJcMfwPmiZjQmpWKb4DXJfEKiQCLtQ3qEjQGD", - "symbol": "LCUBE", - "name": "LCube Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/lcubestudios/token/main/Lcube-logo.png", - "tags": ["social-token", "utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/lcubestudios", - "website": "https://lcubestudios.io" - } - }, - { - "chainId": 101, - "address": "Ajz6Gc9H4efEfHXCpzNJwcg1dacUn6numfFoUHJcAUT1", - "symbol": "MTTA", - "name": "Crazy Mitta Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/VerheijenWebdevelopment/CrazyMittaCoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "APEbcwKE1yriVQVtmkgFKdyr7pn7Bj8q1KDgc1nMdXaA", - "symbol": "RAMT", - "name": "Rich Apes Mint Token", - "decimals": 0, - "logoURI": "https://imgur.com/4mlZg5G.png", - "tags": ["social-token"], - "extensions": { - "twitter": "https://twitter.com/TheRichApes", - "website": "https://therichapes.com" - } - }, - { - "chainId": 101, - "address": "6eaYoP2rXxGfPbRxnQPrsp9Hh26FaUBsbBXeYdyzQon7", - "symbol": "FALC", - "name": "FALCOIN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6eaYoP2rXxGfPbRxnQPrsp9Hh26FaUBsbBXeYdyzQon7/logo.png", - "tags": ["NFT"], - "extensions": { - "twitter": "https://twitter.com/FAJL_sol", - "website": "https://furiousapeleague.com" - } - }, - { - "chainId": 101, - "address": "Dgfbbkzs8eg48HoQGjuzPzqUDyoZhsXs47cYB7MB335o", - "symbol": "SORP", - "name": "Solana Orietnal Rug", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SolSeltzer/Solana-Oriental-Rug/main/Untitled-3.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ASVHLM6aY3dcfXfQrdcxfUMPdZkjWQfcVx7fB8SbYo89", - "symbol": "BTMC", - "name": "Bit Mania Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Bit-illa/pfiles/main/BitMania-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3J58Ax7KPxLKr5BDoYFVnVjmugyQFi1hq4z4F5ji8yLH", - "symbol": "Rasta", - "name": "Rasta Rabbits", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/proninkirill/Rastar/main/rastar.png" - }, - { - "chainId": 101, - "address": "7iV5gpBxv5kerSmu6qwPym2eHKiBrURS4RL3sHaq7vUq", - "symbol": "DPN", - "name": "Dolphin", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/zia999/logo1/main/logo.png", - "tags": ["utility-token", "community-token", "meme-token"], - "extensions": { - "twitter": "https://twitter.com/SolDolphinn" - } - }, - { - "chainId": 102, - "address": "7FzVSAJVxpgC7WkXdypLfdAhBfc1ZmkEoW49cxpAaw8T", - "symbol": "FAT", - "name": "FYFY Airdrop Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7FzVSAJVxpgC7WkXdypLfdAhBfc1ZmkEoW49cxpAaw8T/logo.png", - "tags": ["airdrop-token", "reward-token"], - "extensions": { - "discord": "https://discord.gg/6jEMcEVU", - "facebook": "https://www.facebook.com/fyfy.io", - "github": "https://github.com/fyfylabs", - "instagram": "https://www.instagram.com/fyfy.official", - "linkedin": "https://www.linkedin.com/company/fyfy", - "medium": "https://fyfy-io.medium.com", - "twitter": "https://twitter.com/fyfyio", - "website": "https://fyfy.io", - "whitepaper": "https://fyfy-labs-ltd.gitbook.io/fyfy-documentation/" - } - }, - { - "chainId": 102, - "address": "7rdCoFnW6kvzr3fEinFUw51CJKQBsuLQSQ2boBiqqPkC", - "symbol": "FGT", - "name": "FYFY Governance Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7rdCoFnW6kvzr3fEinFUw51CJKQBsuLQSQ2boBiqqPkC/logo.png", - "tags": ["governance-token", "utility-token", "liguidity-pool-token"], - "extensions": { - "discord": "https://discord.gg/6jEMcEVU", - "facebook": "https://www.facebook.com/fyfy.io", - "github": "https://github.com/fyfylabs", - "instagram": "https://www.instagram.com/fyfy.official", - "linkedin": "https://www.linkedin.com/company/fyfy", - "medium": "https://fyfy-io.medium.com", - "twitter": "https://twitter.com/fyfyio", - "website": "https://fyfy.io", - "whitepaper": "https://fyfy-labs-ltd.gitbook.io/fyfy-documentation/" - } - }, - { - "chainId": 101, - "address": "UUGAAWxhG2TXnyZHA4jDUaSJQQi2nf6UymtsBspRihz", - "symbol": "UUGAA", - "name": "UUGAA", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/gorillazmaster/UUGAA/main/logo.png", - "tags": ["social-token", "game-token", "utility-token"], - "extensions": { - "discord": "https://discord.com/invite/fHbsnvSraj", - "twitter": "https://twitter.com/GorillazReborn", - "website": "https://gorillazreborn.xyz" - } - }, - { - "chainId": 101, - "address": "9usSKpVhb4PXthq5RuLc87JvFaCTobiMTNsCqWVwcPz1", - "symbol": "FNT", - "name": "FYFY NFT Token", - "decimals": 7, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9usSKpVhb4PXthq5RuLc87JvFaCTobiMTNsCqWVwcPz1/logo.png", - "tags": ["nft", "social-token", "marketplace"], - "extensions": { - "discord": "https://discord.gg/6jEMcEVU", - "facebook": "https://www.facebook.com/fyfy.io", - "github": "https://github.com/fyfylabs", - "instagram": "https://www.instagram.com/fyfy.official", - "linkedin": "https://www.linkedin.com/company/fyfy", - "medium": "https://fyfy-io.medium.com", - "twitter": "https://twitter.com/fyfyio", - "website": "https://fyfy.io", - "whitepaper": "https://fyfy-labs-ltd.gitbook.io/fyfy-documentation/" - } - }, - { - "chainId": 101, - "address": "DY6VRL9LNYfAMQhhjfEjoHK3hE9esmapvrHsVzxYNMmJ", - "symbol": "VRTY", - "name": "VRTY Coin", - "decimals": 0, - "logoURI": "https://vrtymedia.blob.core.windows.net/mprd/l/7AdWWIrHn6ZkpftdN7JIUo", - "tags": ["social-token", "utility-token", "reward-token"] - }, - { - "chainId": 101, - "address": "Q3nSH2htJ1jZBbBmMpFDFuZAGK3QwNUN3uHDosQiW9n", - "symbol": "mickies", - "name": "Mickey Rose", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mrninjastyle/mickeyrosecoin/main/heartlogoo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FKQX91BgH633Ww72Jpeq2g11MC3MTP97k4Nd2bk2W2Vn", - "symbol": "rinTICKET-USDC", - "name": "Aldrin TICKET-USDC LP Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FKQX91BgH633Ww72Jpeq2g11MC3MTP97k4Nd2bk2W2Vn/logo.jpg", - "tags": ["lp-token"], - "extensions": { - "telegram": "https://t.me/theticketfinance", - "twitter": "https://twitter.com/TheTicketSol", - "website": "https://theticket.finance" - } - }, - { - "chainId": 101, - "address": "717xKUm4FVLeHb5F2PDYNAsbzhi8wo4ZpNFyaHr2KLK2", - "symbol": "MNTYC", - "name": "Minty Crypto Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/717xKUm4FVLeHb5F2PDYNAsbzhi8wo4ZpNFyaHr2KLK2/github300-300.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "AfnXwfaZiLPz7aEFwDFoy3TgXSngfzCo9WrpDg4HXCFJ", - "symbol": "MILK1", - "name": "MILKTOKEN", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/hynfort/hynimg/main/D8vJNIscy8y5xr7jxiRsH3rB9g17NW9byRaTgVTLWuo.png", - "tags": ["nft", "milk-test", "marketplace"], - "extensions": { - "discord": "https://discord.gg/test", - "twitter": "https://twitter.com/test" - } - }, - { - "chainId": 101, - "address": "rBsH9ME52axhqSjAVXY3t1xcCrmntVNvP3X16pRjVdM", - "symbol": "rBASIS", - "name": "rBasis", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/rBsH9ME52axhqSjAVXY3t1xcCrmntVNvP3X16pRjVdM/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Redeemable BASIS token.", - "discord": "https://discord.gg/basismarkets", - "medium": "https://basismarkets.medium.com/", - "twitter": "https://twitter.com/basismarkets", - "website": "https://staking.basis.markets" - } - }, - { - "chainId": 101, - "address": "DD69a6abqhsjFsg4TAX98YFggUsuFCzLVBNRpqoudycK", - "symbol": "GCHARM", - "name": "G-CHARM", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DD69a6abqhsjFsg4TAX98YFggUsuFCzLVBNRpqoudycK/Logo.png", - "tags": ["general-token", "gaming-token"], - "extensions": { - "twitter": "https://twitter.com/GlyphBound", - "website": "https://www.kayac.io/" - } - }, - { - "chainId": 101, - "address": "2Z21GPCZSyrieTN3tYtPHUmuLWBffW9L86wqyZBj84Fv", - "symbol": "BROCCOLI", - "name": "BROCCOLI", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Z21GPCZSyrieTN3tYtPHUmuLWBffW9L86wqyZBj84Fv/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/cybervillainz" - } - }, - { - "chainId": 101, - "address": "AJPR96dTbGBH8jxzX85Ux9D1HyNe9NfNhKABm9t7gG6Z", - "symbol": "PSM", - "name": "Pasame Shares", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jdaniel96/PasameSharesLogo/main/LogoPasame.png", - "tags": ["Pasame-shares"] - }, - { - "chainId": 101, - "address": "AWLDWua47fVu5f8uxiCCLJPXBJAdsyRM11fESt8jRceo", - "symbol": "Arcryptian", - "name": "Arcryptian WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AWLDWua47fVu5f8uxiCCLJPXBJAdsyRM11fESt8jRceo/logo.png" - }, - { - "chainId": 101, - "address": "FRrNp3cT1TPFVesRYi3gChz8j1hQepnEo6PDkxWcbp4D", - "symbol": "DOCO", - "name": "DoCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/docoin2022/crypto/main/docoin_logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DAEhUmgrWxSjw3YgCsgkRXg5A2w3wN2juGdsgLV7Ughn", - "symbol": "LIV", - "name": "OLIVIACOIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Mistrnomad/crypto/main/logo.fw.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DiVtPXzfKQcBy9nyHxfTxXQjLG6XjCF5inExCGSQ8zVa", - "symbol": "DIV", - "name": "DIVERGENTI", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DiVtPXzfKQcBy9nyHxfTxXQjLG6XjCF5inExCGSQ8zVa/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://divergenti.cl/" - } - }, - { - "chainId": 101, - "address": "DwgiPBuMVcV84hGUtSzSiiPy5RYwA1PjDnXa2cnhskaw", - "symbol": "PAZO", - "name": "Harpazo", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/baymonex/token/main/Harpazo_logo.png", - "tags": ["gaming-token", "NFT"] - }, - { - "chainId": 101, - "address": "ToTYKUcdnb2pt16b2TzPRoKJirPx4zQQjcawDQVTLUX", - "symbol": "SPW", - "name": "SPW Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ToTYKUcdnb2pt16b2TzPRoKJirPx4zQQjcawDQVTLUX/logo.png", - "tags": ["utility-token", "whitelist-token"], - "extensions": { - "discord": "https://discord.gg/ssj", - "twitter": "https://twitter.com/SolanaJourney", - "website": "https://solpetwar.io/" - } - }, - { - "chainId": 101, - "address": "HCW4kbsPuZiRSSnuyFf896WHtsVvnVkDWtbBi46vkEaM", - "symbol": "UNIM", - "name": "UniMint", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/unimintco/token-logos/main/Unimint.png", - "tags": ["general-token", "social-token"] - }, - { - "chainId": 101, - "address": "EfGAveovMu59SpE5gNzoB4NtXmFiTw3EyQjikDBrvznb", - "symbol": "KISS", - "name": "KISSES and ROSES", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/sonfero/crypto/main/KISS_logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "webCtmAsLtNszwVRdi1AzQrGLRLhHQy4boxxxjT4ypZ", - "symbol": "SIMI", - "name": "DR SIMI COIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/JorgeLoredo-1852/DrSimi/main/logo.png" - }, - { - "chainId": 101, - "address": "8tyHzSLPonrknXft8UfVRVWyVSFo12Cq9xoB12rCfWFk", - "symbol": "OIRA", - "name": "oikeaRahe", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Atzuni/cryptoRahe/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "38G9b9JjjkYsGHV5QYD35oeAVvnAjVoBpSD31u1RDeXu", - "symbol": "HYPE", - "name": "HYPER", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/HYPERWARRI0R/hypercoin/main/logo.png", - "tags": ["gaming-token", "NFT"] - }, - { - "chainId": 101, - "address": "GACtwBgE4T6SrwDk9Va8PShVR7Q9ZYfrJShygz8D2dJr", - "symbol": "MSA", - "name": "Muscida", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Rutcraft2/Crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Fr9Ze1rnhC6djPuRQEW1aSsVCLR1iRqWweg5gbgFjECm", - "symbol": "SCHOOL", - "name": "School Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/YoungMonksNFT/YoungMonksToken/main/School.png", - "tags": ["social-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/youngmonksnft", - "website": "https://youngmonksnft.com/" - } - }, - { - "chainId": 101, - "address": "5bwwZ41kzLWAZy1MqKttc5GW2vrE42hZ49EbJg6dpxSV", - "symbol": "MINTYWL", - "name": "Minty Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MintyAutomation/minty-logo/main/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/MintyAutomation" - } - }, - { - "chainId": 101, - "address": "GkPeYwnggoxmUx7bSRKL8UmgUHhkENAdGVgWVpT5T6nY", - "symbol": "HOGS", - "name": "Hoglympics", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GkPeYwnggoxmUx7bSRKL8UmgUHhkENAdGVgWVpT5T6nY/logo.png", - "tags": ["gaming-token", "NFT"], - "extensions": { - "description": "The Hoglympics is a next-gen crypto metaverse project incorporating esports with blockchain, NFTs, and DeFi to produce immersive, P2E Olympic Games.", - "discord": "https://discord.com/invite/6kVjb99aqx", - "telegram": "https://t.me/hoglympics", - "twitter": "https://twitter.com/hoglympics", - "website": "https://hoglympics.com" - } - }, - { - "chainId": 101, - "address": "4Y75QsYX8fayufQD2ottjgc1jAbaFpoA4Z8QcSFk63wi", - "symbol": "HOWL", - "name": "HOWL", - "decimals": 9, - "logoURI": "https://arweave.net/9WBYgIcpJNldRxozBXSmZ7Mm-Wt8ug2y0A6TXy2XZd4?ext=png", - "extensions": { - "twitter": "https://twitter.com/HonshuWolves" - } - }, - { - "chainId": 101, - "address": "CboZhKpk2VCFKXhHWqNWregP5t5vxTcpcgw5agQaCFdQ", - "symbol": "$DSOULS", - "name": "DragonSouls", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Soulsdragon/SoulsIcon-v2/main/%24DSOUL.png", - "tags": ["general-token", "social-token"] - }, - { - "chainId": 101, - "address": "9e6nnqbsTjWx3ss6a3x7Q9ZvpupLNYLb8cTbVmm6UD2K", - "symbol": "SHUT", - "name": "Shuttlecoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Mikkel76543/crypto9/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DKrjaRTyhRozuKS1euhsmdLNc2K1fTYrrRXBjFdeec1o", - "symbol": "KINY", - "name": "KinnyCoin", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/kinnycoin/kinnycoin/main/logo.jpg", - "tags": ["media", "social-token", "payments", "solana-ecosystem", "web3"], - "extensions": { - "twitter": "https://twitter.com/kinnycoin" - } - }, - { - "chainId": 101, - "address": "9AtZcfJn1xVHukAnw3LPmveDYiDjMK4vBcQ4ajkf8U9q", - "symbol": "MCOP", - "name": "Metacop Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9AtZcfJn1xVHukAnw3LPmveDYiDjMK4vBcQ4ajkf8U9q/logo.png", - "tags": [ - "nft", - "nft-token", - "utility-token", - "dao-token", - "governance-token", - "liquidity-pool-token" - ], - "extensions": { - "discord": "https://discord.gg/fucn68GYbH", - "github": "https://github.com/whiterabbit-hub", - "twitter": "https://twitter.com/cops_nft", - "website": "https://metacopsnft.io" - } - }, - { - "chainId": 101, - "address": "CnHURDBf35hWkyXjHrVUQBiBx1kXKsVggk24wUKzNufL", - "symbol": "PWOO", - "name": "Pirates of the Woo DAO", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CnHURDBf35hWkyXjHrVUQBiBx1kXKsVggk24wUKzNufL/logo.png" - }, - { - "chainId": 101, - "address": "GW799gGPTbARkg4WpuMx5Qe8fW1H3ocQfjKGo5z73ETP", - "symbol": "PAPER", - "name": "Printer", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GW799gGPTbARkg4WpuMx5Qe8fW1H3ocQfjKGo5z73ETP/logo.png", - "tags": ["community-token", "NFT"], - "extensions": { - "description": "Passive Income is everyones goal!" - } - }, - { - "chainId": 101, - "address": "77zKXdvwqC3H9v84GPpQfnJ3EsRbjWESLe9bh5z7oQct", - "symbol": "FRUIT", - "name": "fruit Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/77zKXdvwqC3H9v84GPpQfnJ3EsRbjWESLe9bh5z7oQct/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DHZVKrkCRXVDp8U8Tn9KEgvSPoKTuLW5L7NwA7jUinve", - "symbol": "SISC", - "name": "StepInsight Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/thomasstas/sis-token/main/sis-round-icon.png", - "tags": ["social-token", "community-token"], - "extensions": { - "website": "https://stepinsight.com.au" - } - }, - { - "chainId": 101, - "address": "5TPYH5sMvFMitzsjzM9xrxq5igpVuGugVu8CLzCrFdFW", - "symbol": "Ras", - "name": "Ras", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/proninkirill/Rastar/main/rastar.png" - }, - { - "chainId": 101, - "address": "By6s91ubScp1b3SnboQvZrHkGvek3VR6CgUfk53PpZBH", - "symbol": "TDCS", - "name": "Tu Dices", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ayiking/TuDicesCrypto/main/TuDiceLogo-min.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "Ccq1heMs7LN173FU5rpzv1Ajhf2Bqbm4fr2Eg6ZoYsnS", - "symbol": "ROK", - "name": "Rosko", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Roxirious/ROK-Crypto/main/ROK_Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9vyYNbfFKDQ4uraNuLRWuAzyTPe9myjEzEYV71j7Jr7f", - "symbol": "JNX", - "name": "Captain JiNX Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/CaptainJiNX/ctjinx-coins/main/logo.png", - "tags": ["social-token"], - "extensions": { - "github": "https://github.com/CaptainJiNX", - "twitter": "https://twitter.com/captain_jinx" - } - }, - { - "chainId": 101, - "address": "9vCQncWkt5iUP5oYFQF6o4SD4zhiScd4SdrYNp2Rid61", - "symbol": "ROB", - "name": "Rob", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9vCQncWkt5iUP5oYFQF6o4SD4zhiScd4SdrYNp2Rid61/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AZwhZChzhdfbnEZJ2gLuda4p2ib19GpN5k28tevyk8KL", - "symbol": "KNKO", - "name": "Koneko Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AZwhZChzhdfbnEZJ2gLuda4p2ib19GpN5k28tevyk8KL/logo.png", - "tags": ["social-token", "meme-token", "community-token"], - "extensions": { - "discord": "https://discord.gg/5bDQmVRUgS", - "twitter": "https://twitter.com/KonekoCoin", - "website": "https://konekocoin.com" - } - }, - { - "chainId": 101, - "address": "8yQuj5v4s72UqZi3sYZL5rAD4NPV4ueUwBKzChBDWMVf", - "symbol": "MRX", - "name": "Maars", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/maarstoken/crypto/main/maars-800x800.png", - "tags": [ - "social-token", - "community-token", - "nft-token", - "gaming-token", - "web3-token" - ] - }, - { - "chainId": 101, - "address": "PaPa6D4Rys4Lcj1d5csabmDv3QdUE2T1QQ6sWNgoeTa", - "symbol": "PAPPA", - "name": "Psychic Warriors of Pappataz", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/PaPa6D4Rys4Lcj1d5csabmDv3QdUE2T1QQ6sWNgoeTa/logo.png", - "tags": ["NFT", "utility-token"], - "extensions": { - "discord": "https://discord.gg/zJWZyRjcMJ", - "twitter": "https://twitter.com/PappatazWarrior", - "website": "https://www.pappataz.com/" - } - }, - { - "chainId": 101, - "address": "CCoin6VDphET1YsAgTGsXwThEUWetGNo4WiTPhGgR6US", - "symbol": "CatchCoin", - "name": "CatchCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CCoin6VDphET1YsAgTGsXwThEUWetGNo4WiTPhGgR6US/icon.png", - "tags": ["CatchCoin", "game-token", "utility-token"], - "extensions": { - "discord": "https://discord.gg/catchking", - "twitter": "https://twitter.com/catch_king", - "website": "https://www.catchking.io/" - } - }, - { - "chainId": 101, - "address": "8KiHGb2hvWGJoW2Ges8ZcdebWLtXKPjbF2VAjDYLrjxg", - "symbol": "MORG", - "name": "MorganMillionsRYAN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ryanhurt99/cryptopic/main/Slide1.PNG", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6d5Sz3eEXXTvqGXye3XjFzhPT6ozzBoMDYdJd9sLCQSq", - "symbol": "KRK", - "name": "KRK FINANCE", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6d5Sz3eEXXTvqGXye3XjFzhPT6ozzBoMDYdJd9sLCQSq/logo.png", - "tags": ["social-token", "utility-token", "community-token"], - "extensions": { - "discord": "https://discord.gg/jpWc7A6dcf", - "twitter": "https://twitter.com/krkfinance", - "website": "https://krk.finance" - } - }, - { - "chainId": 101, - "address": "8zVkHZVb9tsJFQrj75FTa23qFGv5payVz9uaGmGwytD9", - "symbol": "FLAC", - "name": "FLATAM COIN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/33b083e2fd4a906d227b4051b53ccfd07c160037/assets/mainnet/8zVkHZVb9tsJFQrj75FTa23qFGv5payVz9uaGmGwytD9/logo.png", - "tags": ["community-token"] - }, - { - "chainId": 101, - "address": "CvRjLqr3fwtQEe3RETTQCqX2CJAvMzKf613yC6DfyBDM", - "symbol": "PRTS", - "name": "PARTS", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CvRjLqr3fwtQEe3RETTQCqX2CJAvMzKf613yC6DfyBDM/logo.png", - "tags": ["community-token", "nft-token"] - }, - { - "chainId": 101, - "address": "HZJCKAqZhdKx1vK3nSEQyN59YKypJ5p6m5U2WbJzdvvJ", - "symbol": "KSPR", - "name": "Ghost Hallmon", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HZJCKAqZhdKx1vK3nSEQyN59YKypJ5p6m5U2WbJzdvvJ/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://ghosthallmon.com" - } - }, - { - "chainId": 101, - "address": "ZrmxFkEed9ofNDn3upBittTUqiFgQiQYiZVRvrcNqt5", - "symbol": "DOTORI", - "name": "Dotori Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/dotoritoken/dotori/master/logo.png", - "tags": ["community-token", "social-token"] - }, - { - "chainId": 101, - "address": "4eYYeaFqjscucKTUBHfgQe5zf8xF8YXqTA55EfXFYxB6", - "symbol": "AF", - "name": "Amoeba Friends", - "decimals": 1, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4eYYeaFqjscucKTUBHfgQe5zf8xF8YXqTA55EfXFYxB6/logo.png", - "extensions": { - "discord": "https://discord.gg/amoebafriends", - "twitter": "https://twitter.com/AmoebaFriends", - "website": "https://amoebafriends.com/" - } - }, - { - "chainId": 101, - "address": "C2APzN3zNXsW3Mfufp2EYpwGPwGU1MXjrFo7A2csiAza", - "symbol": "DSi", - "name": "Digital Silicon", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/hinchingyuen/Digital-Silicon/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Gn4C5DBFotntR2FQQoYNjzfZNiu4TB2A3rvtdiLwDiJ9", - "symbol": "YUM", - "name": "Candy", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/BlockchainWizard/Crypto/main/Candy.png", - "tags": [ - "utility-token", - "social-token", - "nft-token", - "community", - "Candy" - ] - }, - { - "chainId": 101, - "address": "DMEF1wi1nWquM4QaKZYwDX5qcRY67mD8zCn5DwsWM9V2", - "symbol": "TEAM", - "name": "Sports", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/BlockchainWizard/Crypto/main/Sports.png", - "tags": [ - "utility-token", - "social-token", - "nft-token", - "community", - "Sports" - ] - }, - { - "chainId": 103, - "address": "8zVkHZVb9tsJFQrj75FTa23qFGv5payVz9uaGmGwytD9", - "symbol": "FLAC", - "name": "FLATAM COIN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8zVkHZVb9tsJFQrj75FTa23qFGv5payVz9uaGmGwytD9/logo.png", - "tags": ["community-token"] - }, - { - "chainId": 101, - "address": "g5wiWvADNDYvC2csLE4PDJDQqiRndmjSCedd3LVWrUa", - "symbol": "FAM", - "name": "Family Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/tpadilla/CryptoL/main/FamilyCoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "75W3RAgbH4HNRPFxhus7Xhsvrcujv3j5xTk56M5v18p2", - "symbol": "STRK", - "name": "StrikeForce", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/spacepriest/StrikeForce/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3DswPbTaZ3S8AvQdGSGKbksMsLCVcK72jo1z16ysyxBx", - "symbol": "PSTD", - "name": "PIZZA SHARK", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/tobytuuby/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8P4SaLw2hqrqPzAEX5MhhnQ4xMAMDbnV9YB1q4WmVKDK", - "symbol": "MVDC", - "name": "MVP Test TOken", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/rahulsrs/crypto/main/logo.png", - "tags": ["social-token", "test-token"] - }, - { - "chainId": 101, - "address": "2WRrEvBHdyR95BYwtGgRt5GzcL4JTS6PDtkP8v7bLzi2", - "symbol": "SFIM", - "name": "StrikeForce Initiate Medal", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/spacepriest/StrikeForce/main/medal/strikeforce%20initiate/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "MywLpWzJ9AxM1psuDNJmSTiLhYnuGtChUXc4WEfGvAB", - "symbol": "MONYWL", - "name": "WL Moondusa", - "decimals": 0, - "logoURI": "https://arweave.net/HZlX45BxqQqJ5KHwpMsz9Kg0EsjzjmNOGjWxqUzMyGs", - "tags": ["whitelist-ticket"], - "extensions": { - "discord": "https://discord.com/invite/moondusa", - "telegram": "https://t.me/MoondusaTheNFT", - "twitter": "https://twitter.com/Moondusa", - "website": "https://moondusanft.io" - } - }, - { - "chainId": 101, - "address": "4s4EAQY68kJGvuUrcGqyj2mt2YTxkbxLUniJfE9KxSoJ", - "symbol": "OVCN", - "name": "Ovecon Token", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/mstation/ovecon_token/main/ms-icon-310x310.png", - "tags": ["social-token", "community-token"], - "extensions": { - "website": "http://ovecon.com" - } - }, - { - "chainId": 101, - "address": "AdU884KcTWz9yR6MJ4V2ZHUxDFhMoSuCr6VfRgvh4rxM", - "symbol": "APSR", - "name": "Apsara Token", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AdU884KcTWz9yR6MJ4V2ZHUxDFhMoSuCr6VfRgvh4rxM/APSR.jpg", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "A18dvmCWZLQQZrTZhjea6XsNqBmNhrcmiyi1cUMmFAth", - "symbol": "FIN", - "name": "FINUP", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/taboglevi/Finup/main/logo.png", - "tags": [ - "utility-token", - "community-token", - "security-token", - "payment-token" - ], - "extensions": { - "description": "Finup is online investment platform", - "facebook": "https://www.facebook.com/24finup/", - "instagram": "https://www.instagram.com/finup24/", - "linkedin": "https://www.linkedin.com/company/finup24/", - "telegram": "https://t.me/finup_24", - "website": "https://www.finup24.com" - } - }, - { - "chainId": 101, - "address": "4quErP8SY5HFiAvmV5g5atATnSbhgj9z2c3yW74ea5wA", - "symbol": "FAT", - "name": "Fatura Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/faturame/crypto/main/Fatura_LOGO.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FpM1DKUxX9Z2rZwT9iwBWTniTpxmdLQ3RYTaGLVLej3Z", - "symbol": "DON", - "name": "DON coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Raunakj90/DONcrypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Dp118fyErWC8mrexAVwweDqBc5MtV7FprQffKSmFvzkY", - "symbol": "FST", - "name": "FUNKY SANTAS TOKEN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Dp118fyErWC8mrexAVwweDqBc5MtV7FprQffKSmFvzkY/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.com/invite/pr3yWdGZYx", - "instagram": "https://www.instagram.com/funkysantasnft/", - "twitter": "https://twitter.com/FunkySantas", - "website": "https://funkysantas.com/" - } - }, - { - "chainId": 101, - "address": "Y8Je5kBiTj2kN4T8gFMwSfcQLDfUVdYaUWeR2LvkRsA", - "symbol": "BURN", - "name": "Absolut Burning Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Y8Je5kBiTj2kN4T8gFMwSfcQLDfUVdYaUWeR2LvkRsA/logo.jpg", - "tags": ["memes-token"], - "extensions": { - "twitter": "https://twitter.com/Benji_in_Crypto" - } - }, - { - "chainId": 101, - "address": "AF3BcDnqaJhdpKQ9jskZjohnTYRwqrv8H6Yyv4zUvA5g", - "symbol": "HORDE", - "name": "HORDE", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/ORCNFT/horde/main/logo.png", - "tags": ["social-token", "Orc-Racing-Club"] - }, - { - "chainId": 101, - "address": "aosppr4qSxirqUx9QW8bMXZQbqYCJ5dPgJTBjhLTHNr", - "symbol": "AOS", - "name": "Apes On Space Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/aosppr4qSxirqUx9QW8bMXZQbqYCJ5dPgJTBjhLTHNr/token48_48.png", - "tags": ["nft-token", "community-token"], - "extensions": { - "discord": "https://discord.gg/cmUJSVqK", - "twitter": "https://twitter.com/aos_NFT", - "website": "https://apeson.space" - } - }, - { - "chainId": 101, - "address": "93RhkFuXYDsJcm1EEgGEd9XVndR1rAsUQ4GDZbD5maGd", - "symbol": "BND", - "name": "BannerDesk", - "decimals": 6, - "logoURI": "https://www.bannerdesk.com/logos/logo256.png", - "tags": ["utility-token", "payment-token"], - "extensions": { - "website": "https://www.bannerdesk.com" - } - }, - { - "chainId": 101, - "address": "AuJ451gN7buxyJ33iMsCZoUyUnxx1KUkQuHVGWBJRrqt", - "symbol": "IDO", - "name": "Wedding", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/BlockchainWizard/Crypto/main/Wedding.png", - "tags": [ - "utility-token", - "social-token", - "nft-token", - "community", - "Weddings", - "Wedding" - ] - }, - { - "chainId": 101, - "address": "7DU6krT61iVHs2pGyJiG2DDVtfxiCFH7kHTKUPShao2R", - "symbol": "XOXO", - "name": "HUGS and KISSES", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/sonfero/crypto/main/HUGS_logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2nMMKu8Z9E1WkaeU2GkyY7txPGPgHk8aWVDKwcb4HeSw", - "symbol": "SOOCY", - "name": "SOOCY Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/soocyme/coin/main/Logo_Final.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://soocy.me/" - } - }, - { - "chainId": 101, - "address": "WLLnZwAKJcN7aMXUFhfejSPj56D48e6DiNuMa6Qud8C", - "symbol": "TPACWL", - "name": "The Pension Apes Club WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WLLnZwAKJcN7aMXUFhfejSPj56D48e6DiNuMa6Qud8C/logo.png" - }, - { - "chainId": 101, - "address": "CRjfXCXkGr3x8awncuj54XuPhgtFyFc7zasYigLdiZuX", - "symbol": "DDCTK", - "name": "DopeDolphinCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mbc241/DopeDolphinToken/main/dolphin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4MUy23aeZTPZJvU4dePb4QnWEd85jgvMKm82y6vWTX6g", - "symbol": "DDSOL", - "name": "DAO GSOL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Brazil11/cryptoPNG/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DKu822yyAYFXn5XZo7J1aUNPaGxLNhrLEvGK6qw1ex8L", - "symbol": "XENOMINT", - "name": "Xenobots Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DKu822yyAYFXn5XZo7J1aUNPaGxLNhrLEvGK6qw1ex8L/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "discord": "https://discord.gg/xenobotsnft", - "twitter": "https://twitter.com/XenobotsNFT", - "website": "https://thexenobotsproject.com/" - } - }, - { - "chainId": 101, - "address": "7xDuMPzWoHL9xDXtM141y38sBFmjDKEuQfh2BuHQ7Mjh", - "symbol": "JD00G", - "name": "JD00G", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/nicarr/JD00G/e1e9f48d25c0df4593e29497766e445e6c468489/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3Krw1NNq1KzofMe8a5qVqkmvuERveVXHh1bqNqmBXs9f", - "symbol": "OUTC", - "name": "Outcast Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/JoelAakko/OUTC/main/logo.png" - }, - { - "chainId": 101, - "address": "9buJYEsVDkSi1BeAUQZaA34ATvU8WqLFvqGFLCY6RHGy", - "symbol": "DD", - "name": "DUDE", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9buJYEsVDkSi1BeAUQZaA34ATvU8WqLFvqGFLCY6RHGy/dd.svg" - }, - { - "chainId": 101, - "address": "2qiwtngAgHsrz6biuGgqEictAtbHxjZkqoGH4RLBWgJ5", - "symbol": "NAC", - "name": "Nadi Coin", - "decimals": 6, - "logoURI": "https://github.com/Effendi-lab/NadiCrypto/blob/main/NAC_logo.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "telegram": "https://t.me/+x9YbzrNSda5iMGVk", - "website": "https://github.com/Effendi-lab" - } - }, - { - "chainId": 101, - "address": "f4PugEJmvcf4VEVG4PzCZcfmjJzRwYDzgMtKZ5BhBc9", - "symbol": "DSOUL", - "name": "Dragon Souls", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Soulsdragon/icon/main/logo.png" - }, - { - "chainId": 101, - "address": "6cCQc1BZk6Y8ZrKRf8odLQn7Zb5cTnTFFme5UZgEPZJe", - "symbol": "BALI", - "name": "babyLI", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6cCQc1BZk6Y8ZrKRf8odLQn7Zb5cTnTFFme5UZgEPZJe/logo.png", - "tags": [ - "utility-token", - "social-token", - "nft-token", - "community", - "Blockchain" - ], - "extensions": { - "telegram": "https://t.me/babylitoken", - "website": "https://babyLI.at" - } - }, - { - "chainId": 101, - "address": "8CQHGtSjgyVGeXARWSwei89GJ8bumWRPhCAFY2XYqJnL", - "symbol": "USDS", - "name": "USD Stable", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/unimintco/token-logos/main/USDS/logo.png", - "tags": ["stablecoin"] - }, - { - "chainId": 101, - "address": "32NkWgx6KaLpTEYb9ape4XNWff1n6Bt9rsmwepiJzxop", - "symbol": "GIGALAND", - "name": "Gigaland", - "decimals": 9, - "logoURI": "https://github.com/starcodez/gigaland/raw/main/logo.png", - "tags": [ - "utility-token", - "social-token", - "nft-token", - "community", - "Blockchain" - ], - "extensions": { - "twitter": "https://twitter.com/GigalandWallet", - "website": "https://gigaland.art" - } - }, - { - "chainId": 101, - "address": "3TVUHQgnmW1xqS5fTuDoNDay95DTRRbizbo962UN1KzX", - "symbol": "CFP", - "name": "ColdFusion Protocol", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/DanteLogan/cfp-token/main/newlogo.png", - "tags": ["social-token", "utility-token", "community-token"] - }, - { - "chainId": 101, - "address": "EDKGGSFR34h1QcQg42uo5V9iQn7VkNy8ETziXzNg6Fkd", - "symbol": "SFM1", - "name": "Cobro StrikeForce Initiate Medal", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/spacepriest/StrikeForce/main/medal/strikeforce%20initiate/logo.png", - "tags": ["nft"], - "extensions": { - "description": "Awarded for successfully completing the StrikeForce Initiation Training", - "imageUrl": "https://raw.githubusercontent.com/spacepriest/StrikeForce/main/medal/strikeforce%20initiate/logo.png", - "website": "https://strikeforce-cobra.com/" - } - }, - { - "chainId": 101, - "address": "6tLPcYzdq4RizeFq7AK4mfR4uSqXncFse3uAiAQ72VGr", - "symbol": "REIN", - "name": "Reinbow", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/reinbowapp/token/main/logoclear.png", - "tags": ["social-token", "social-media", "social-media-token"] - }, - { - "chainId": 101, - "address": "4nxUY1jjtKZR27XcqJCW36kvAZi1iaceBTmgMK1i95gB", - "symbol": "TOAST", - "name": "Toast Crumbs", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4nxUY1jjtKZR27XcqJCW36kvAZi1iaceBTmgMK1i95gB/logo.png" - }, - { - "chainId": 101, - "address": "ATC6C1AL4X51FXNFbPG5pxfjSgDQCNECtfsnyMUnk9X1", - "symbol": "NVGD", - "name": "NEOVANGUARD", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ATC6C1AL4X51FXNFbPG5pxfjSgDQCNECtfsnyMUnk9X1/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://neovanguard.com" - } - }, - { - "chainId": 101, - "address": "HLccaGrQyyfiDddCGmE5h3sysNE7gYFbcDb4KS68fvM9", - "symbol": "FUBAR", - "name": "Fubar Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/gruntlabs/fubar-coin/main/assets/FUBAR_icon.png", - "tags": ["social-token", "community-token"], - "extensions": { - "description": "The most F!@#'d up beyond all recognition crypto", - "website": "https://coin.fubar.icu/" - } - }, - { - "chainId": 101, - "address": "GtBwdtJvjyh3f7auZpABP7gswsiimw8D7geWZc8rzH9Q", - "symbol": "GEEXO", - "name": "GEEXO Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GtBwdtJvjyh3f7auZpABP7gswsiimw8D7geWZc8rzH9Q/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.com/invite/NAvfaa3vJg", - "instagram": "https://www.instagram.com/geexolotls/", - "twitter": "https://twitter.com/geexolotls", - "website": "https://www.geexolotls.com/" - } - }, - { - "chainId": 101, - "address": "AEZNG2XxvjBumWsuKmZDUcF7qcA54d1WDssGcYzyDcww", - "symbol": "PAUS", - "name": "PAUS crypto", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/jorge-teixeira/token-list/708b475844860fc9c4de27518cdaca0810cf03c9/assets/mainnet/AEZNG2XxvjBumWsuKmZDUcF7qcA54d1WDssGcYzyDcww/logo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "255RFt4MZ4nXQ8qQzKzpSvSipnqcUMPQEJKzvy4fHk8x", - "symbol": "PPL", - "name": "PPL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/emavalerio441/token/main/pp-token-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CRdyak46KB6tFw7cACHqufKkg9QNmrQvhwrJiKJRd1gs", - "symbol": "SICO", - "name": "SI COIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/johnnysp90/crypto/main/Crypto.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3XVr2zjhnd7gNeroKXqaTBa7pLLvZ6jBzDfzLWTMehua", - "symbol": "CONE", - "name": "Cone Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3XVr2zjhnd7gNeroKXqaTBa7pLLvZ6jBzDfzLWTMehua/logo.png" - }, - { - "chainId": 101, - "address": "LiVirTXDeLzv7d8xAz6oWvGzjYPQ3kuSmxd8FPPtpye", - "symbol": "LIVI", - "name": "Livi Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/LiVirTXDeLzv7d8xAz6oWvGzjYPQ3kuSmxd8FPPtpye/logo.png" - }, - { - "chainId": 101, - "address": "Raa82Hb2GwCgb2uL2UsWc4C6UBMA282ondDCzaiYJJh", - "symbol": "GOYELLA", - "name": "GoyellaCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/PipSqueak7/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "JBonCvaUNnxA6etyp2pivccTCjyGdEetZDzksrfTNzeQ", - "symbol": "BBIT", - "name": "BABYBOI Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/breslaiv/token-list/main/assets/mainnet/JBonCvaUNnxA6etyp2pivccTCjyGdEetZDzksrfTNzeQ/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7eJCLyW5KkvzdzkVXs1ukA1WfFjCcocXjVit64tYcown", - "symbol": "SLITE", - "name": "SolanaLite", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SolanaLite/SolanaLite-Brand-Kit/main/SolanaLite%20(SLITE)%20Logo%20Solana%20Blockchain.svg", - "tags": ["SolanaLite"], - "extensions": { - "discord": "https://discord.com/invite/GbQAgQKxdN", - "reddit": "https://www.reddit.com/r/SolanaLite", - "telegram": "https://t.me/SolanaLite", - "twitter": "https://twitter.com/SolanaLite", - "website": "https://www.solanalite.io" - } - }, - { - "chainId": 101, - "address": "Ee8tkCzVse1ch95AfavmHE8yJamJrCg78SoVhSzYJhbu", - "symbol": "PZL", - "name": "Puzzle Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/AlanBeez/Puzzle-Token/main/logo.png", - "tags": ["social-token", "utility-token", "community-token", "game-token"] - }, - { - "chainId": 101, - "address": "5HF5GxkFT8QcurPAygeTejS7Mikut7JuxLpwmP7uTXX7", - "symbol": "rayTICKET-SOL", - "name": "rayTICKET-SOL LP Token", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5HF5GxkFT8QcurPAygeTejS7Mikut7JuxLpwmP7uTXX7/logo.jpg", - "tags": ["lp-token"], - "extensions": { - "telegram": "https://t.me/theticketfinance", - "twitter": "https://twitter.com/TheTicketSol", - "website": "https://theticket.finance" - } - }, - { - "chainId": 101, - "address": "2sf6MtQgAwthVrXZmTUKH1myuP8z1N7vXT87t34bw3Gj", - "symbol": "MNSTR", - "name": "Monsterz Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2sf6MtQgAwthVrXZmTUKH1myuP8z1N7vXT87t34bw3Gj/logo.png", - "tags": [ - "NFT", - "art-token", - "artists-token", - "community-token", - "utility-token" - ], - "extensions": { - "discord": "https://discord.gg/monsterzdao", - "twitter": "https://twitter.com/MonsterzDao", - "website": "https://monsterzdao.com/" - } - }, - { - "chainId": 101, - "address": "Gv5dNeSwtkLfD3sX1KVo13LWcv6u3mWSSKtRcGWS6XaP", - "symbol": "FLTL", - "name": "Flametail Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Pyromorphite/crypto/main/Logo.png", - "tags": ["social-token", "trading-token"] - }, - { - "chainId": 101, - "address": "3mxhqjhdQD6fveJqfeXuxpiVhH4aVzwSqmbouRMCbuWW", - "symbol": "SSWL", - "name": "Sp00ky Sk0Ls Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3mxhqjhdQD6fveJqfeXuxpiVhH4aVzwSqmbouRMCbuWW/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://spookyskols.com/" - } - }, - { - "chainId": 101, - "address": "7osDiPy41gwDddxH7Lh6Fdq3LHss97wYqfE5M6bXsNyi", - "symbol": "SSGA", - "name": "Sp00ky Sk0Ls Giveaway", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7osDiPy41gwDddxH7Lh6Fdq3LHss97wYqfE5M6bXsNyi/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://spookyskols.com/" - } - }, - { - "chainId": 101, - "address": "AHAZhu8c1yk6wzgYxVgwyZCromhWu2358qc3jDMavHMV", - "symbol": "DSMKT", - "name": "Dusty Market Coin", - "decimals": 0, - "logoURI": "https://github.com/cenisa/cryptologo/blob/main/dustylogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EmBDSpQb3hJ6dNYShJy9wxu1g7xjFovA943wYLzQLyNy", - "symbol": "TWRA", - "name": "TWRA Deer Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/floridanative1956/crypto/main/TWRA1.PNG", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2pJt6MSNJisSwaoqHC1yHbZsU42reJLpGowt7M6Yf3fX", - "symbol": "ALCP", - "name": "Alice Pizza Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/AlanBeez/Alice-Pizza-Coin/main/logo.png", - "tags": [ - "social-token", - "utility-token", - "community-token", - "game-token", - "pizza-token", - "meme-token" - ], - "extensions": { - "twitter": "https://twitter.com/alice_pizza", - "website": "https://www.alicepizza.it/" - } - }, - { - "chainId": 101, - "address": "Fa8GFAcQmoipwkacVFPiPh3MvN9EWRksGNdHBk2eLppU", - "symbol": "KFT", - "name": "Krofft Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Christian33333/crypto/main/crypto-logo-6.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8wCTFEhu3Yihx2BB5i2tt5v8JwBzi1JQsvwS82QEbCKg", - "symbol": "SECTACOIN", - "name": "SECTACOIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mrhili/SECTACOIN/main/secta.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8wwQf6gjqxdamBj2MQ64Rat3kRJ7VxGkuLMETzdTfGhm", - "symbol": "CHIP", - "name": "Poker", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/BlockchainWizard/Crypto/main/Poker.png", - "tags": [ - "utility-token", - "social-token", - "nft-token", - "community", - "Poker", - "Gamble" - ] - }, - { - "chainId": 101, - "address": "JCKkaqMLstBgJffRLhbRvPnv8Wkdm4pgfCnBZq64CuRL", - "symbol": "BOGD", - "name": "Bog Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mibadvanced/BogCoin/main/logo.PNG", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "B2PKbRKPT5HFv71vzu5z86NqCTPmAB6n8xQkBQRADe5z", - "symbol": "AL1", - "name": "Aluz One", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/B2PKbRKPT5HFv71vzu5z86NqCTPmAB6n8xQkBQRADe5z/logo.png" - }, - { - "chainId": 101, - "address": "7sWMHQaJJPn1rkeizq41iPiW5gG7Ry7PXYAVHaUwY4qu", - "symbol": "EDO", - "name": "EDO", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7sWMHQaJJPn1rkeizq41iPiW5gG7Ry7PXYAVHaUwY4qu/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/E7yWZrzvXj", - "twitter": "https://twitter.com/SenshiNFT", - "website": "https://senshisamurai.com/" - } - }, - { - "chainId": 101, - "address": "EmPxJRmDU9y3kh1XcrzDXYRUpHh875eSWKEA529eCGDN", - "symbol": "DKZ", - "name": "DarkZed Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/darzed/DarkZed-coin/main/logo.png", - "extensions": { - "twitter": "https://twitter.com/darvaszoltan", - "website": "https://darvaszoltan.com/" - } - }, - { - "chainId": 101, - "address": "4F4NLLPjeLo7KLCEynQNHvQos4DyuTSbgAPmPULFsyrQ", - "symbol": "MJ", - "name": "Megajoule", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4F4NLLPjeLo7KLCEynQNHvQos4DyuTSbgAPmPULFsyrQ/logo.png", - "tags": ["utility-token", "stablecoin"] - }, - { - "chainId": 101, - "address": "9X298b5Ypa64iCstzn7cQmND2kdgEFftUKTQSANmpbnw", - "symbol": "BWS2WL", - "name": "BitWhips S2 Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9X298b5Ypa64iCstzn7cQmND2kdgEFftUKTQSANmpbnw/logo2.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://bitwhips.io/" - } - }, - { - "chainId": 101, - "address": "H4uy24qcfPjp3aUfFKub9ZPUqCa1isZSn11NWTbGu6ys", - "symbol": "SANZ", - "name": "SANZ", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jablinjables/cryptosol/main/SanaNewLogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "B4ZVvb3H6nHXrxWXVC4dKt5Wv2QAwWM9CmhFVVPxCYEh", - "symbol": "JETC", - "name": "Jetcoin", - "decimals": 0, - "logoURI": "https://user-images.githubusercontent.com/25322469/152279588-8f92996a-2b48-4b75-9354-099a056879dd.png", - "tags": ["social-token", "utility-token", "community"], - "extensions": { - "facebook": "https://facebook.com/jetdevs", - "linkedin": "https://linkedin.com/company/jet-devs", - "website": "https://jetdevs.com" - } - }, - { - "chainId": 101, - "address": "2vCyKnkPjBrnRVRQBMiunJLUpFMPjp6mwD8jLb5KKYPZ", - "symbol": "NWZ", - "name": "Nftwinz", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2vCyKnkPjBrnRVRQBMiunJLUpFMPjp6mwD8jLb5KKYPZ/logo.png", - "tags": ["social-token", "community-token"], - "extensions": { - "website": "https://crypto.nftwinz.com/" - } - }, - { - "chainId": 101, - "address": "EXQgN2S5baFSqBR9XijnGvtunemdhhj2f9p4K9NW4Y9F", - "symbol": "CRE8R", - "name": "CRE8RCOIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/iamcre8r/cre8rtoken/main/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "7CeDq7g178wgQeDPQea5Mvh3i1ACy9AMjrLBqogw8yG3", - "symbol": "CHECKRED", - "name": "CHECKRED Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7CeDq7g178wgQeDPQea5Mvh3i1ACy9AMjrLBqogw8yG3/logo.png", - "tags": ["utily-token"], - "extensions": { - "website": "https://checkred.com" - } - }, - { - "chainId": 101, - "address": "Sona6KvuQjFxy7y8CPN45qXGLh8QHTerxaGMqPBo55B", - "symbol": "SONA", - "name": "SONA", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Sona6KvuQjFxy7y8CPN45qXGLh8QHTerxaGMqPBo55B/logo.png", - "extensions": { - "twitter": "https://twitter.com/aapoonofficial", - "website": "https://aapoon.com" - } - }, - { - "chainId": 101, - "address": "D7psBLw3LeUbb1bDZKkV8yRE7VhxC3A4HwfZkcGqGQpS", - "symbol": "XKR", - "name": "Kori", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/D7psBLw3LeUbb1bDZKkV8yRE7VhxC3A4HwfZkcGqGQpS/logo.png", - "tags": ["social-token"], - "extensions": { - "description": "Kori Coin", - "twitter": "https://twitter.com/KoriPay" - } - }, - { - "chainId": 101, - "address": "3Hh4mWgN2F2PBzmqeWxZmYYjA6Jxir5RNV5gwspRECev", - "symbol": "MULA", - "name": "Mula Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MULACOIN/mulalogo/main/mulalogo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "WNZzxM1WqWFH8DpDZSqr6EoHKWXeMx9NLLd2R5RzGPA", - "symbol": "$WNZ", - "name": "Winerz", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WNZzxM1WqWFH8DpDZSqr6EoHKWXeMx9NLLd2R5RzGPA/logo.png", - "tags": [ - "utility-token", - "community-token", - "payment-token", - "game-token" - ], - "extensions": { - "facebook": "https://www.facebook.com/winerz.official", - "instagram": "https://www.instagram.com/winerz.official/", - "medium": "https://medium.com/@winerz", - "twitter": "https://twitter.com/Winerz_official", - "website": "https://winerz.com/", - "whitepaper": "https://ico.winerz.com/assets/docs/Winerz-Token-Economics.pdf" - } - }, - { - "chainId": 101, - "address": "2DuUuHBZzvnJEByVt4qerUfEoHStNj8fFoJxwVpWDy1a", - "symbol": "GMASK", - "name": "Gas Mask Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2DuUuHBZzvnJEByVt4qerUfEoHStNj8fFoJxwVpWDy1a/logo.jpg", - "tags": ["utility-token", "NFT-token", "Metaverse"] - }, - { - "chainId": 101, - "address": "DDtaBrpMAGG1phmHd79Cxd3AjA89ZtsbA9Pz6GSp8hQz", - "symbol": "SEDS", - "name": "SEDS KANCHANABURI", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SEDS-kanchanaburi/Crypto/main/logo_png.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Mix4UnSBefX8ym3mHndLyTgvqUq2kt7QsYQ4pCL4jr3", - "symbol": "MIX", - "name": "MATRIX", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Mix4UnSBefX8ym3mHndLyTgvqUq2kt7QsYQ4pCL4jr3/logo.png", - "extensions": { - "twitter": "https://twitter.com/matrixmix", - "website": "https://matrixx.site" - } - }, - { - "chainId": 101, - "address": "ALEXVSS7YCQUMiJfTCCmQcHBu1ApcLwe1FN4irMXK5ig", - "symbol": "ALEXV", - "name": "AlexV Special Series 7", - "decimals": 9, - "logoURI": "https://github.com/alexvaldezlectures/alexvaldezlectures/raw/3126e37677e5a0857f5be58483b0331da9a5e006/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/ALEXVSS7", - "website": "https://alexvss7.medium.com/" - } - }, - { - "chainId": 101, - "address": "MGM57zGF6ghF9Aax7FfoPHfxuoLKuEGM6twJALyCFqx", - "symbol": "MGM", - "name": "Maho Genies", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/MGM57zGF6ghF9Aax7FfoPHfxuoLKuEGM6twJALyCFqx/logo.png", - "tags": ["Utility-token"], - "extensions": { - "twitter": "https://twitter.com/mahogenies", - "website": "https://www.mahogenies.io/" - } - }, - { - "chainId": 101, - "address": "KAT2oYwjN2uVj9gubM9VutCFMoX1Wq9eLiwJJEpBEX3", - "symbol": "9LIVES", - "name": "9LIVES", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/KAT2oYwjN2uVj9gubM9VutCFMoX1Wq9eLiwJJEpBEX3/9lives.png", - "tags": ["utility-token", "community"], - "extensions": { - "discord": "http://discord.gg/cyberkatz", - "twitter": "https://twitter.com/thecyberkatz", - "website": "https://cyberkatz.space" - } - }, - { - "chainId": 101, - "address": "GUSRLRYJfyX5Dy5jMZhSv1SysYazoiUZheBhzpZwaqGk", - "symbol": "FISH", - "name": "Fish Coin", - "decimals": 5, - "logoURI": "https://cdn.jsdelivr.net/gh/gowtham-k147/fishtoken/logo.jpg", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "7yHF9pyjs2V14kat6W7guwSvTrFpkdG8jWKyMwY8MuKZ", - "symbol": "DEWEY", - "name": "Dewey Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7yHF9pyjs2V14kat6W7guwSvTrFpkdG8jWKyMwY8MuKZ/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "6sy3PgbjxNtTJuujA8Ppwxz7JLQDdpt5m1y3iuv9gnG6", - "symbol": "GCC-PRESALE", - "name": "Galactic Chimp Club Pre-Sale", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/spore-engineering/GIMP/main/logo.png", - "tags": ["social-token", "utility-token", "community-token"], - "extensions": { - "discord": "https://discord.com/invite/zutk4yKJ5J", - "twitter": "https://twitter.com/galacticchimps", - "website": "https://galacticchimps.com" - } - }, - { - "chainId": 101, - "address": "8jLKpoyen9zngmzMXsSXH9GijN7dk3NBM4wvEqraecTM", - "symbol": "WWT", - "name": "Wizard World Token", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/AngelOfWindFon/testgits/wwtokensquare.png", - "tags": ["utility-token", "community"], - "extensions": { - "discord": "http://discord.gg/wizardworld", - "twitter": "https://twitter.com/WizardWorldTH", - "website": "https://wizardworld.online" - } - }, - { - "chainId": 101, - "address": "t4WVhM5uz9Ux2v4QQCxP3Rx7Yw1o1iB5HdY8ruUYYwk", - "symbol": "SEFU", - "name": "SEFU", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/drumbun/sefu/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GkDX7TmmEeKB3puMYtK9P9JEEozBB2gCKnBwePvFtJxs", - "symbol": "CMFT", - "name": "Comfort", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/cmft-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "kDpB4LcBvjSG4BFHEsgWoUK9v6wVmQT7ZheqBRQtL39", - "symbol": "CELEBRATE", - "name": "Celebration", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/celebrate-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AxzUoqjHN8X9GrW7ap28HDmWk4m98PK42Qt81vUmmwwL", - "symbol": "TWRK", - "name": "Teamwork", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/twrk-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9MN8frXDaNqvSW8Q6gNAsXJxVrJ9ZVTS96RtgoJfmmFq", - "symbol": "PRTY", - "name": "Party", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/prty-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6uhPsJZSkRbhStteALQVtRQoxya1ygZSBG2tEhLsv6jS", - "symbol": "W", - "name": "Win", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/w-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5gX3JoSm6BRWCoiLHUYEZP938uKuXYTjayT9VHpR7Eq5", - "symbol": "CHANCE", - "name": "Chance", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/chance-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3ePCNJtsTZqsQ2WZmhbS3UpxdxYwdPX61e6imYmSi4Ef", - "symbol": "Q", - "name": "Quality", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/q-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DsxQTYvzN5HAAu4wU3zrRNtWdSim9m26qUdqSWecuYUG", - "symbol": "GAM", - "name": "Game", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/gam-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FNsr9VZTJh1Wj5wqDvFNrBu37nDgQ4nnrnt1cHNsvcvc", - "symbol": "TOY", - "name": "Toy", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/toy-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7tivzLp6w1kTS2pZFf175F4GrZw1U3X1G3wuWneE4FEP", - "symbol": "EDU", - "name": "Education", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/edu-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2ugSUeRJzQNqVNvGMs9x7znEq77eaFz6JeY4hC4cvqEg", - "symbol": "CHOC", - "name": "Chocolate", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/choc-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AMHxYLuRoe6z1dwUtCK3Qd1GqsgXfGyHy3DFmukKqkeN", - "symbol": "DNUT", - "name": "Donut", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/dnut-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "wcpSdkgbU7C5RG5tZ6uR4igPzXDrfmbcHm49Q3khWCn", - "symbol": "MAZE", - "name": "Amazement", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/maze-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AMHrqDPAkij1tj3sBBMScmb67mEg1BS63yrfcSUjS48B", - "symbol": "SQUEEZE", - "name": "Hugs", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/squeeze-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "B1k73ppGnKNrs2t18pDYwE2xmw2CWNFX6AFnnCdJV9yj", - "symbol": "FAMILY", - "name": "Family", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/family-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BBafuR4yCVj2fRfGQjQ18C71DhNB6MVGhYaSVw8dxCmU", - "symbol": "SONG", - "name": "Tune", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/song-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7xKwS4saJJ1RstUYUF6iBW5LcqGtjN6WwSD3Ypn11Nve", - "symbol": "GEEK", - "name": "Technology", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/geek-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "56kdsPBQi3fWgmMtMWe3c21uDZaeuyEyKFfQUUK2Xjf9", - "symbol": "IIOT", - "name": "IIoT", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/iiot-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DuNQutK9pTyqYsENuZKQ2gmeo6eRT83J84muyKankZvB", - "symbol": "CANDY", - "name": "Sweet", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/candy-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "G3ap56qwNvA6BBffsXkF1SsWg4VWrC4AR2fyWnikEKR5", - "symbol": "ATEL", - "name": "AI", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/atel-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DQXAncyjFiELmGuXuH7t8t2CsyEoJCddyZzmCuQTKBzr", - "symbol": "PUCKER", - "name": "Kisses", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/pucker-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FXsW1VcB2E4Gwqz47JaFLLTtYYvZ5tb5PA2JcNtX1LQ", - "symbol": "HIILI", - "name": "Hiili Coin", - "decimals": 9, - "logoURI": "https://github.com/HiiliCoin/HiiliCoin/blob/main/logo1.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GTs5Eg57FPxymuakS4kUVXfMkFVcQZAjBg3QURQfTMae", - "symbol": "GSPARK", - "name": "GlowingSpark Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GTs5Eg57FPxymuakS4kUVXfMkFVcQZAjBg3QURQfTMae/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7Yc2ab2FXjmiXgXzQaQDKHMMXmzRs1RgYDcech9pfg8R", - "symbol": "UAHC", - "name": "UAH Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7Yc2ab2FXjmiXgXzQaQDKHMMXmzRs1RgYDcech9pfg8R/logo.png", - "tags": ["stablecoin"] - }, - { - "chainId": 101, - "address": "CJpxdKneyDfxJsw5qioLPQX8iqhbMvxafuz4Jh1gyiA2", - "symbol": "LFC", - "name": "Ledger Figure Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/AsahiTashi05/crypto/main/logo.png", - "tags": ["community-token", "social-token"], - "extensions": { - "description": "Ledger Figure Token was created with the aim of helping people in financial difficulty, we are committed to making donations to people in precarious situations.", - "website": "https://ledgerfigurecoin.com/" - } - }, - { - "chainId": 101, - "address": "4goT5SLzfoeFx3YwbPF3g6j8whtqnwDJ7BdKC6YVDeKc", - "symbol": "CHI", - "name": "Laohu Chi", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/GaitanaruAndrei/assets/main/logo.png", - "tags": ["community-token", "social-token"], - "extensions": { - "description": "888 Tigers ROARing around the #Solana ecosystem on a mission to save their Kingdom from Evil", - "website": "https://www.laohukingdom.com/" - } - }, - { - "chainId": 101, - "address": "CTkhysavqhi9wFCZbFKew9AburtGVrjRkpE8NEHk7YF2", - "symbol": "MTN", - "name": "MTN Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/TuckerBrady/MTNoutlaw/master/images/mtn-coin-logo.png", - "tags": ["social-token", "utility-token"], - "extensions": { - "description": "The official currency of the MTN Outlaws.", - "discord": "https://discord.gg/mnuca9F6", - "facebook": "https://www.facebook.com/mtnoutlaw", - "instagram": "https://www.instagram.com/mtnoutlaw", - "twitter": "https://twitter.com/MTNoutlaws", - "website": "https://www.mtnoutlaw.com" - } - }, - { - "chainId": 101, - "address": "7yUFhJy4R2b3RLGqbB9JAHuN3kFw4DZyHLagSyRGEc71", - "symbol": "DY", - "name": "DYNAMIC", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7yUFhJy4R2b3RLGqbB9JAHuN3kFw4DZyHLagSyRGEc71/logo.jpg", - "extensions": { - "website": "https://www.dynamic-warriors.com/" - } - }, - { - "chainId": 101, - "address": "CooPDdGLnUbj8sGgFb8ZDtr2y9tTezJRJ76nj1TwP9B3", - "symbol": "CoopD", - "name": "CoopDollar", - "decimals": 0, - "logoURI": "https://arweave.net/sJNlqRf7G9wegjc_EwTFknN-hjj2WFqYAf1pJ5CJmMk", - "tags": ["community-token", "social-token", "utility-token"], - "extensions": { - "facebook": "https://facebook.com/Coopbit", - "instagram": "https://www.instagram.com/CoopBits", - "twitter": "https://twitter.com/Coopbitss", - "website": "https://coopcrowd.com" - } - }, - { - "chainId": 101, - "address": "H1QvHLhmk4rL36FBphnFUaQszf6RHGU8RLptPSuPcQwX", - "symbol": "BUGS", - "name": "BUGS", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/H1QvHLhmk4rL36FBphnFUaQszf6RHGU8RLptPSuPcQwX/logo.png", - "tags": ["social-token", "utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/FroggosNFT", - "website": "http://froggosnft.com/" - } - }, - { - "chainId": 101, - "address": "27r7EqbY3g8TKAhneAWaFeiyGjg6P8XUgmA7goZnyWG3", - "symbol": "WRZTR", - "name": "Thug Roozter Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/0xthug/logo/main/thug-roozter-wl-token.png", - "tags": ["whitelist-token"], - "extensions": { - "website": "https://twitter.com/thugroozter" - } - }, - { - "chainId": 101, - "address": "C6RdoUNJf91xAH3n9385u3hJysgKBzMfPRBKcLq2NMEs", - "symbol": "RZTR", - "name": "Thug Roozter Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/0xthug/logo/main/thug-roozter-token.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/thugroozter", - "website": "https://thugroozter.com" - } - }, - { - "chainId": 101, - "address": "GH9urVNhVzEvQFAz4NGWrjc3raGMKSmU96GV7s3QwSfq", - "symbol": "SD", - "name": "DoughDAO Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GH9urVNhVzEvQFAz4NGWrjc3raGMKSmU96GV7s3QwSfq/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "DoughDAO Token", - "discord": "https://discord.gg/soldough", - "twitter": "https://twitter.com/SolDough", - "website": "https://soldough.com" - } - }, - { - "chainId": 101, - "address": "2zsvXn4BJykA6zrmDr8LCnEmF7oC4uGxvYMbE47wct85", - "symbol": "SHIBZWL", - "name": "Shibaz NFT MINT PASS", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2zsvXn4BJykA6zrmDr8LCnEmF7oC4uGxvYMbE47wct85/logo.png", - "tags": ["utility-token", "community-token"] - }, - { - "chainId": 101, - "address": "DqEbjduwWLmLFTuXDmJZ51P4HLBYE2PQ2AKPuQLRWcw9", - "symbol": "BLLOON", - "name": "BALLOONCOIN", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/tylerj147/balloonsvillee/main/balloon.png" - }, - { - "chainId": 101, - "address": "DydAumm7jWxhYqfGguLFCCPAgJxkLENGortKGPMeBcnH", - "symbol": "SKRYL", - "name": "SkrylniCoin", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DydAumm7jWxhYqfGguLFCCPAgJxkLENGortKGPMeBcnH/logo.png", - "tags": ["utility-token", "community-token", "meme-token"] - }, - { - "chainId": 101, - "address": "HVMZXKX8EAUdEa1hNbAzUzeFqbcm1w9AKFeVoEKkADF6", - "symbol": "SPATCH", - "name": "SpatchCockKings", - "decimals": 0, - "logoURI": "https://github.com/Stickmanlamont/crypto/blob/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4hF98FggXoEcrZmE8JGdMGSXrRCRid3j99rutyMKh1oF", - "symbol": "GDT", - "name": "Gangster Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/gangsterducks/gangstertoken/main/logogangstertoken.png", - "tags": ["utility-token", "social-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/gangsterducks", - "website": "https://gangsterducks.com/" - } - }, - { - "chainId": 101, - "address": "8i4r3uJTw7zfJp2BYjM6PVLCWaTLK4CgakaBFwpcEXZp", - "symbol": "FGC", - "name": "FUGGA COIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Keshav-py/Fugga_Coin/main/png1.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "35HAnnLpne8Kppd7JtpDJ9dWwgrW8f8yUmHwymjGZth4", - "symbol": "P", - "name": "P-Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/FloorPricePusher/P-Token/main/P-%20Coin%20Symbol.png", - "tags": ["utility-token", "community-token"] - }, - { - "chainId": 101, - "address": "2oF21EoZdpJHXP1VeroAFbd2tCBtprQzwJvNRRr5iKnq", - "symbol": "DUKLOCK", - "name": "DUKLOCOIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/LeM0-Dev/crypto/main/logo.jpg", - "tags": ["social-token", "community-token"], - "extensions": { - "website": "https://www.alecau.com/", - "youtube": "https://www.youtube.com/c/Duklock" - } - }, - { - "chainId": 101, - "address": "FbdnyBXYePogUMT6JbnpPBxk7gJpkMy4HjdCYynxYdjb", - "symbol": "NSOLA", - "name": "Negativesolana", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Negativesolana/logo/main/imageedit_2_2485355732.png", - "tags": ["negative", "meme-token"], - "extensions": { - "twitter": "https://twitter.com/negative_solana", - "website": "http://negativesolana.42web.io/" - } - }, - { - "chainId": 101, - "address": "29wTrVK2kyBCE3AKvQzEAzKAZo8bndthuM3b7nmr2G7y", - "symbol": "ZMMD", - "name": "Zoo Magic Maker DAO", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/DavidTick/Crypto/main/Token.png", - "tags": ["social-token", "meme-token"] - }, - { - "chainId": 101, - "address": "9yNG97Asj59bkz1UggyxKBrM2bLqCgZugydCwHDrqkQJ", - "symbol": "STck", - "name": "StockbridgeCoin", - "decimals": 0, - "logoURI": "https://github.com/wstockbridge/StockbridgeCoin/blob/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AWD7Rkh72ENAZUeHGP5mnubFPk8AeSN1ogosExdF4G2X", - "symbol": "LIME", - "name": "Tequila", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/BlockchainWizard/Crypto/main/Tequila.png", - "tags": [ - "utility-token", - "social-token", - "nft-token", - "community", - "Tequila" - ] - }, - { - "chainId": 101, - "address": "9pF8ARAEZUBwAJEHbviWnpNz9Ewho8y4ggCT452nhBuQ", - "symbol": "FLWRS", - "name": "Flowers", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/flwrs-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9fKV886v4MmnWBUnDWoxsyeYFqyG6WTRzTYfbcMXia7E", - "symbol": "CRSH", - "name": "Crush", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/crsh-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EvsUWXMWnErtaBJPpqVMhhX3uWrJq51yMPwdnGaiBJUf", - "symbol": "NOVT", - "name": "Innovation", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/novt-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Cy839k8eJf3pzXUhrJ89kexxcEDEzexCfD2P1wB3LtAa", - "symbol": "PUP", - "name": "Dog", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/pup-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FZJYgGhQGJggRuSBjkhYx44o2CLuAR1WbihBq6TdCMj9", - "symbol": "KILO", - "name": "KILO", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/lpbcmain/kilo/main/kilotoken.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2LkFmYFS9jXirHEBUwZFR1LTZRnsLHoeyS3QjYpXW4cC", - "symbol": "TKAE", - "name": "Tokkea", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/tokkeass/cryptos/main/logo.png", - "tags": [ - "social-token", - "utility-token", - "nft", - "meme-token", - "community-token", - "trading-token" - ] - }, - { - "chainId": 101, - "address": "4BzQc4659DGHLNye2kFFYFh2SsPvaiH3yEVcVBiUdjXb", - "symbol": "STRW", - "name": "StirWave", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SunCrypto/stirwave/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FxKngPeyV2mM4oZPiF5EQ7xPBBAj5WtrzpBcf7n8HHaH", - "symbol": "FXKNG", - "name": "Fox King Whitelist", - "decimals": 0, - "logoURI": "https://arweave.net/V0fJBa_DsUCxCBta_8WPxWAtK8h30qvPxLCnD7cj2Hs", - "tags": ["whitelist-token"], - "extensions": { - "discord": "https://discord.gg/W8fra6bABu", - "twitter": "https://twitter.com/rationalasf", - "website": "https://linktr.ee/rationalasfuck", - "youtube": "https://www.youtube.com/c/RationalAF" - } - }, - { - "chainId": 101, - "address": "3ZYsJZ7wb4hNEkfaDnR4JKT6Rok4hEfbxjGqDA3cRxGS", - "symbol": "TTCS", - "name": "TTCS Token", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/tongtongchain/token-list/main/assets/mainnet/3ZYsJZ7wb4hNEkfaDnR4JKT6Rok4hEfbxjGqDA3cRxGS/TTCS.png", - "tags": ["tongtongcoin", "tongtongchain", "dex", "finance"] - }, - { - "chainId": 101, - "address": "CaNiNGW7fasuC6Z3zGGuVt1j9WYX94KG7UN1SMY7gQqP", - "symbol": "CANIN", - "name": "DFLDAO", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/cultureclap/cultureclap/main/CANIN.logo.png", - "tags": ["social-token", "utility-token", "community-token"], - "extensions": { - "address": "CaNiNGW7fasuC6Z3zGGuVt1j9WYX94KG7UN1SMY7gQqP", - "assetContract": "https://solscan.io/token/CaNiNGW7fasuC6Z3zGGuVt1j9WYX94KG7UN1SMY7gQqP", - "description": "CANIN is the initial currency for DreamFreely Labs, as orchestrated by Culture Clap.", - "discord": "https://discord.gg/bwMRRbs", - "twitter": "https://twitter.com/CultureClap", - "website": "https://www.cultureclap.com" - } - }, - { - "chainId": 101, - "address": "DkNihsQs1hqEwf9TgKP8FmGv7dmMQ7hnKjS2ZSmMZZBE", - "symbol": "QTCON-SOL", - "name": "QUIZTOK", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DkNihsQs1hqEwf9TgKP8FmGv7dmMQ7hnKjS2ZSmMZZBE/logo.png", - "extensions": { - "coingeckoId": "quiztok", - "facebook": "https://www.facebook.com/quiztok.kr", - "github": "https://github.com/quiztok", - "instagram": "https://www.instagram.com/quiztok_kr/", - "telegram": "https://t.me/QuiztokCS", - "twitter": "https://twitter.com/quiztokkr", - "website": "https://quiztok.com/", - "youtube": "https://www.youtube.com/channel/UCtl9jTbXMa43F17zrnr1AeQ" - } - }, - { - "chainId": 101, - "address": "RVMgn3H2x5EjZsQ5Z561Kvx6tRDxkkFsXEtH1hMuJ7k", - "symbol": "RVM", - "name": "RAVIUM", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/RVMgn3H2x5EjZsQ5Z561Kvx6tRDxkkFsXEtH1hMuJ7k/logo.png", - "tags": ["Utility-token", "Gaming", "NFT", "Metaverse"], - "extensions": { - "discord": "https://discord.gg/Sr9epbgEW4", - "telegram": "https://t.me/Ravaverse", - "twitter": "https://twitter.com/Ravaverse" - } - }, - { - "chainId": 101, - "address": "6k6R1nRupoVjvJJ6QGnJysBqyEyvgUAhWsx8QJujcPuF", - "symbol": "ISGT", - "name": "ISG Token", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6k6R1nRupoVjvJJ6QGnJysBqyEyvgUAhWsx8QJujcPuF/logo.png", - "tags": ["utility-token", "community-token"] - }, - { - "chainId": 101, - "address": "Fm8zMkQmry3CzKDhSSx1xZm7QEv5JKU9okaEkmuD53CV", - "symbol": "LNR", - "name": "Lunar Token", - "decimals": 0, - "logoURI": "https://cdn.discordapp.com/attachments/926535226820276264/938814249009029150/Untitled_Artwork.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "34q5p3pbzg7a3KHugynsaMDYNHqobb12A1Q9XzEfuJgb", - "symbol": "FIRST", - "name": "1", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/first-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3M9SwGNxejzTUyKUwc9iFF4ionmBRguciVVoLCb2waBS", - "symbol": "SECOND", - "name": "2", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/second-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4eYiTBBxWxM9G1acw1jjXwLY6JziccKEGNPhQw2Dtrhd", - "symbol": "THIRD", - "name": "3", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/third-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4T2ytRMHfLtmSeFfzErEQ53x4MhVhFSGaY33dV2AXgLw", - "symbol": "PARTICIPANT", - "name": "Participant", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/participant-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5CKTpsfkiLtgvS7pUUg6jjjiF6yagUuDgzVwRHEyFYVa", - "symbol": "B", - "name": "B", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/b-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5FtKWmzt856FmSqiCwpBGpwv2gjAfFoa4N5Zc8fN3sah", - "symbol": "C", - "name": "C", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/c-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DRx4PGJSofkSKy8hHefMpkbQTyAMoX9aw9bcrdBteVzJ", - "symbol": "EGLP", - "name": "Eagle Paws", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/410playa/crypto/main/eaglepaws.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CtEYJ44W7PctR1Bc7tHJxfEX4vvzc8aAxZYzGwGWscT9", - "symbol": "EVO", - "name": "Ernest Voyagers Orb", - "decimals": 9, - "logoURI": "https://i.ibb.co/swnrvpg/Orb-02-main-transparent.png", - "tags": ["social-token", "community-token"], - "extensions": { - "description": "A collectors token, used in the Ernest Metaverse", - "discord": "https://discord.com/invite/ernestindisguise", - "twitter": "https://twitter.com/ErnestDisguise", - "website": "https://ernestindisguise.com/" - } - }, - { - "chainId": 101, - "address": "rRdJNw8cPdJ7UVoBeFyaQ3vrauCzXxN3ecBwmLPYf3C", - "symbol": "RENTA", - "name": "Renta", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/admin8855/crypto/main/logo.png", - "tags": ["Utility-token"], - "extensions": { - "website": "https://renta.world/" - } - }, - { - "chainId": 101, - "address": "6B5KXnS9pYr7Sb9ksa6YTng7mLkv7sz8nfG7a55fh2d1", - "symbol": "ALGOS", - "name": "Algo Stone", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Pubathed0g/AlgoStone/main/logo1.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8JnNWJ46yfdq8sKgT1Lk4G7VWkAA8Rhh7LhqgJ6WY41G", - "symbol": "SOLI", - "name": "Solana Ecosystem Index", - "decimals": 6, - "logoURI": "https://cdn.lima.amun.com/solana/8jnnwj46yfdq8skgt1lk4g7vwkaa8rhh7lhqgj6wy41g.png", - "tags": [ - "index-token", - "index", - "defi-index", - "defi", - "solana-ecosystem" - ], - "extensions": { - "description": "SOLI is an index of the Solana ecosystem. It delivers easy, low-cost, diversified exposure to top Solana-native projects. By using staked SOL (mSOL), the index also captures Solana's 6% staking yield. SOLI rebalances monthly to catch trends in the ecosystem.", - "discord": "https://discord.gg/amun", - "medium": "https://medium.com/amun-tokens", - "telegram": "https://t.me/AmunTokens", - "twitter": "https://twitter.com/amun", - "website": "https://amun.com/" - } - }, - { - "chainId": 101, - "address": "3dUP24FewyxEpT6qY1f6pMhPsZ1yqJEw2XWqStSxqCCV", - "symbol": "9LIVES-SOL", - "name": "9LIVES-SOL LP Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3dUP24FewyxEpT6qY1f6pMhPsZ1yqJEw2XWqStSxqCCV/9livesLP.png", - "tags": ["lp-token"], - "extensions": { - "discord": "http://discord.gg/cyberkatz", - "twitter": "https://twitter.com/thecyberkatz", - "website": "https://cyberkatz.space" - } - }, - { - "chainId": 101, - "address": "2GpfALCv9rNhkyWTwCNwtC3BNa5PSQ7Jf1xSmnnkJQWv", - "symbol": "ARVLA", - "name": "The Arvella Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/CISSPInstructor/crypto/main/arvella_logo.jpg", - "tags": ["social-token", "utility-token", "NFT-token", "Metaverse"] - }, - { - "chainId": 101, - "address": "FGseEvVtXnbx5M9M2w4s67wKArVL4CUM48xMaoGxtaGi", - "symbol": "CTWL", - "name": "Cyber Tribe Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FGseEvVtXnbx5M9M2w4s67wKArVL4CUM48xMaoGxtaGi/logo.png", - "tags": ["community"], - "extensions": { - "discord": "http://discord.gg/cybertribe", - "twitter": "https://twitter.com/CyberTribeNFT", - "website": "https://cybertribe.gg" - } - }, - { - "chainId": 101, - "address": "9CUy37Vsg2DsjkLmWx2AXix7oSogTRjDn2JBMLPQ4mfY", - "symbol": "LCT", - "name": "LoutreCoin Tuto", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9CUy37Vsg2DsjkLmWx2AXix7oSogTRjDn2JBMLPQ4mfY/logo.png", - "tags": ["social-token"], - "extensions": { - "twitter": "https://twitter.com/laloutre", - "website": "https://laloutre.gitbook.io/" - } - }, - { - "chainId": 103, - "address": "8FDETjLAtqcnvq8KyPuKSRBPxZQ9yEx9Qs3QFxzDqcE2", - "symbol": "G", - "name": "TEST G Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8FDETjLAtqcnvq8KyPuKSRBPxZQ9yEx9Qs3QFxzDqcE2/logo.png" - }, - { - "chainId": 101, - "address": "Hio6C8chHfSAjxokuyB7KiYQwP6GduekrPh5pXwEmL36", - "symbol": "CODP", - "name": "CodPoints Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/elishaakyaw/cod/main/p.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Fwy8aK7m1TF9cr3DhAEaBfqG6W7jX4vfCK2UuQE3qi21", - "symbol": "KICA", - "name": "KICA", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Fwy8aK7m1TF9cr3DhAEaBfqG6W7jX4vfCK2UuQE3qi21/logo.png", - "tags": ["carbon-offset", "climate"], - "extensions": { - "twitter": "https://twitter.com/EarthKica" - } - }, - { - "chainId": 101, - "address": "D6xt2imesfZ1zL57o72BBzjaDs91Q72kgoSGC6qpXY9T", - "symbol": "FUDAI", - "name": "FUDAI Token", - "decimals": 6, - "logoURI": "https://fortunenekos.io/images/fudai.png", - "extensions": { - "discord": "https://discord.gg/fortunenekos", - "twitter": "https://twitter.com/fortunenekosnft", - "website": "https://fortunenekos.io/" - } - }, - { - "chainId": 101, - "address": "8gsccGREpFttkH813odWMfHGtDRu8MjjyKvTN782WFaP", - "symbol": "$", - "name": "gulp", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/farhan067/Gulp/main/gulpLogo.png" - }, - { - "chainId": 101, - "address": "HVVQoWkpEGiZ1ASk8KMdmJTCD16ap1cxYqnupVPcPme7", - "symbol": "SKA", - "name": "Dedska", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ShogDev/Dedska/main/Dedska2.png", - "tags": ["utility-token"], - "extensions": { - "telegram": "https://t.me/+x9YbzrNSda5iMGVk", - "website": "https://github.com/ShogDev" - } - }, - { - "chainId": 101, - "address": "EasTB1F65QLPwMMpyESgCVy4wrkfbCwLzG6Epf1Lq4Rv", - "symbol": "GDXC", - "name": "GDX Token", - "decimals": 2, - "logoURI": "https://gdxc.greydotx.network/gdxc.png", - "tags": ["community", "utility-token"], - "extensions": { - "website": "https://gdxc.greydotx.network" - } - }, - { - "chainId": 101, - "address": "FTvYdHBYKoAfqZzFWPH14zLQAyrm1xbvVKE69Xo6Wpps", - "symbol": "BRCN", - "name": "Brain Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/dskupinski8/crypto/main/logo.png", - "tags": ["community"], - "extensions": { - "website": "https://bit.ly/3unsVny" - } - }, - { - "chainId": 101, - "address": "DBnyE7AKca1avuBtfh9jnHrm6Qe1gt2q5LMt5umxR8wN", - "symbol": "LZ", - "name": "Leanza Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/leanza/crypto/main/logo.png", - "tags": ["social-token"], - "extensions": { - "discord": "https://discord.gg/GmDSMR8E", - "twitter": "https://twitter.com/leanzadario", - "website": "https://www.leanza.nl/" - } - }, - { - "chainId": 101, - "address": "7UqRuj5w6SUmXwWvDPiefr9rdS4XCDM86dKHv2Bps4Sq", - "symbol": "BRIZ", - "name": "Bristol Coin", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7UqRuj5w6SUmXwWvDPiefr9rdS4XCDM86dKHv2Bps4Sq/BristolCoinLogo.jpg" - }, - { - "chainId": 101, - "address": "Gdt362HgV2pVdZk1hm8JuQxJGbCuJfzFWP6GCxcMj81H", - "symbol": "LOS", - "name": "ThaiSol", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Lingnooy/crypto/main/thaisol-los.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DLUB7cPdvuwV1gCYHHzVweHEav11FxkMCTX6TwS1iee8", - "symbol": "FPV", - "name": "FPV Pilot Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/gadominas/fpvcoin/main/fpv-token.png", - "tags": ["community", "fpv", "drone"] - }, - { - "chainId": 101, - "address": "2FZjqh8BQTqB9aT2usEXw2hsykZGaTfgQ32oEuGd35Tu", - "symbol": "SATO", - "name": "Satoseries", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/satowind/satoseries-token/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HiNb1ABjQG4xeuv1Bee6j5wRhiyagcygDAQkJU9ULbRM", - "symbol": "CHEEBZ", - "name": "Shiba Cheeba Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/eazucker/token-list/main/assets/mainnet/HiNb1ABjQG4xeuv1Bee6j5wRhiyagcygDAQkJU9ULbRM/logo.png", - "tags": ["social-token", "meme-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/Billz_Gluckman" - } - }, - { - "chainId": 101, - "address": "E7Ykw7mxzoRVrfmzoE951ASQLhj24PDJaWN3vDu6LNpq", - "symbol": "santi", - "name": "santi coin V2", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/E7Ykw7mxzoRVrfmzoE951ASQLhj24PDJaWN3vDu6LNpq/logo.png" - }, - { - "chainId": 101, - "address": "4XJXbVFXu8MrHGKXDGnnUmC2TNuuXoE3R5711uJbf6Tn", - "symbol": "SVG", - "name": "Sauvage", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/dudgrayman/crypto/main/lps234px.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2ikET9vxPYEf28XwpqRewFKizij1f1KqgyLqet8TMUsa", - "symbol": "MZB", - "name": "MnZorBashm", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/RahelHamarash/mazeCoin/main/MnZorBashm.png", - "tags": ["community"] - }, - { - "chainId": 101, - "address": "5XiE2JApnDwGc24PSY7y7stD4JxStkYPAH5tFVKAcrow", - "symbol": "ORIA", - "name": "Memoria", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5XiE2JApnDwGc24PSY7y7stD4JxStkYPAH5tFVKAcrow/Logo.png", - "tags": ["Gaming-token", "NFT-token", "Metaverse"] - }, - { - "chainId": 101, - "address": "FmVCMUr2HygkdfKyJK7EMyFxKyME27vsMeByreV4rdPg", - "symbol": "STDT-S", - "name": "Steadd S Token", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/SteaddCoin/STDT-S/main/logo.png", - "tags": ["Invesimet", "Currency"], - "extensions": { - "description": "A project for people that want a reliable Invesimet alternative", - "discord": "https://discord.com/channels/@steaddproject", - "facebook": "https://www.facebook.com/Steadd-Project-101204732361826", - "instagram": "https://www.instagram.com/steaddcoin/", - "linkedin": "https://www.linkedin.com/in/steadd-coin-692b0a228/", - "reddit": "https://www.reddit.com/user/steaddcoin", - "telegram": "https://t.me/monkeyball_official", - "twitter": "https://twitter.com/SteaddC", - "website": "https://steadd.com/", - "whitepaper": "https://steadd.com/assets/pdfs/whitepaperWeb.pdf", - "youtube": "https://www.youtube.com/channel/UCKhU0YnQHs2-Hovjs2cLWmw" - } - }, - { - "chainId": 101, - "address": "51AA7ktYcb8yb98Tfrhs6TaDjr7cMtJVo6sEMNe87mNs", - "symbol": "$GLUE", - "name": "Glue Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/51AA7ktYcb8yb98Tfrhs6TaDjr7cMtJVo6sEMNe87mNs/logo.png" - }, - { - "chainId": 101, - "address": "21AdqMAKHuvbFVs4qvrSWz47fDnCPjZ1tc36kD6yoixz", - "symbol": "MLTX", - "name": "MylaToken", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/stoneiness/crypto/main/mylatokenlogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7pDCeQ7PmB98GKuNeobrhF7mnVteLEWTxWjikZxVg7h6", - "symbol": "RYO", - "name": "Ryo", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7pDCeQ7PmB98GKuNeobrhF7mnVteLEWTxWjikZxVg7h6/logo.png", - "tags": ["utlity-token"], - "extensions": { - "discord": "https://discord.gg/n8yF8Qq7vM", - "twitter": "https://twitter.com/Jetpack_Samurai" - } - }, - { - "chainId": 101, - "address": "3pv2LWtt2vSkysGBCt1QKp4VYaYqkJPqB8cWSXxHMxDB", - "symbol": "CYPA", - "name": "Candy Panda", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3pv2LWtt2vSkysGBCt1QKp4VYaYqkJPqB8cWSXxHMxDB/logo.png", - "tags": ["game-token", "nft-token", "utility-token", "trading-token"], - "extensions": { - "telegram": "https://t.me/MiguelA_crypto", - "twitter": "https://twitter.com/MiguelA_crypto" - } - }, - { - "chainId": 101, - "address": "CDAoigSD1gAU1R5nYA16ycMsp3hBjqXFM4za9GzedwpU", - "symbol": "CoopDAO", - "name": "CoopDAO", - "decimals": 6, - "logoURI": "https://arweave.net/sJNlqRf7G9wegjc_EwTFknN-hjj2WFqYAf1pJ5CJmMk", - "tags": ["governance-token"], - "extensions": { - "facebook": "https://facebook.com/Coopbit", - "instagram": "https://www.instagram.com/CoopBits", - "twitter": "https://twitter.com/Coopbitss", - "website": "https://coopcrowd.com" - } - }, - { - "chainId": 101, - "address": "fujiCeCeP9AFDVCv27P5JRcKLoH7wfs2C9xmDECs24m", - "symbol": "FUJI", - "name": "FUJI", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/MarkSackerberg/token-list/main/assets/mainnet/fujiCeCeP9AFDVCv27P5JRcKLoH7wfs2C9xmDECs24m/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://fujilions.io/" - } - }, - { - "chainId": 101, - "address": "CY7meunShZiLEdD9RgXYoMampEj6DZbD87EMLNKrBzAe", - "symbol": "CFT", - "name": "ColdFusion Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/DanteLogan/cfp-token/main/newlogo.png", - "tags": ["social-token", "utility-token", "community-token", "NFT-Token"] - }, - { - "chainId": 103, - "address": "KAFjxURNxSrayrceJx4W4oijSohZ5Rp25Jut2FdWtaZ", - "symbol": "CAFE", - "name": "Cafe", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/KAFjxURNxSrayrceJx4W4oijSohZ5Rp25Jut2FdWtaZ/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "CAFE Token", - "discord": "https://discord.gg/r4vNRUTXY9", - "twitter": "https://twitter.com/TheBuilderDAO", - "website": "https://learn.figment.io/" - } - }, - { - "chainId": 101, - "address": "D8tpoPhS3GVAY5g5ZxDpUVoRj6SHhbSWzEw2z5sptAsf", - "symbol": "PCF", - "name": "Pecker Face", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jankillerslatki/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GLNJrLLLUNeZcbUmQJuTsCAweniSgrjV4jVhPwWxM7Sy", - "symbol": "PUIG", - "name": "DianneCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/dashort/shortcoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4gEDaARBim1yBrx3GKYsJyFaH8AWB8acMds1hRLgMYUJ", - "symbol": "HTC", - "name": "HaleTownCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/j0hnboy75067/crypto2/main/Haletowncoinlogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5t1Jbazv95uUSQDCQ7idrjYfd6wqaieGhikcQRM8S6SA", - "symbol": "HRC", - "name": "Hog Rider Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/LeonBidner/cryptologo1/main/CoinLogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HuzR2FWsAJFtMFWu5XfiTaxPZBAqKcv8sNMjqZXcf572", - "symbol": "FBT", - "name": "Fullbull Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/fullbull96/fullbull/main/fbt_token.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "CBSTwQzAXeGiNvM5aDdkMD6wkSyuVXqsu8u3ZQmQLFa1", - "symbol": "CUBIST", - "name": "Cubist Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CBSTwQzAXeGiNvM5aDdkMD6wkSyuVXqsu8u3ZQmQLFa1/CC.png", - "tags": ["social-token", "utility-token", "community-token"], - "extensions": { - "discord": "https://discord.gg/cubistcollective", - "twitter": "https://twitter.com/CubistNFT", - "website": "https://cubistcollective.com/" - } - }, - { - "chainId": 101, - "address": "97MukwGXTtvEumoedekChs8WEZp3NHWoRABm7RUaTqfj", - "symbol": "BATK", - "name": "BATK Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/FlorianMTRC/Token/master/logo.png", - "tags": ["social-token", "meme-token"] - }, - { - "chainId": 101, - "address": "4Lij1agaWiK8sXAon5AGLwYT8a6bRfo8i6PtQfFjFQcD", - "symbol": "NOAT", - "name": "No Attraction", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/joshtasman/cSolana/main/noattractionNOAT.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HsGvAPFxsEGjc5Tee7eHRZrfvWb4ddvLo7DhA2tKNM3H", - "symbol": "XFR", - "name": "XFR", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Bogdwynny/XFR-TOKEN/main/0XH9Dgw.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "TokeZFFFFmeWFEEGiXy9DYszxKz5yYT2WqBSc4uVrgw", - "symbol": "TOK", - "name": "Tok Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/melekperest/token-list-1/main/assets/mainnet/TokeZFFFFmeWFEEGiXy9DYszxKz5yYT2WqBSc4uVrgw/logo.png", - "tags": ["social-token"], - "extensions": { - "description": "This is TOK Coin" - } - }, - { - "chainId": 101, - "address": "Aaiw5kZjZcKXRLezY8PonRMfTZ84jgovh51WYSVrSHXG", - "symbol": "SOLV2", - "name": "Solana V2", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Aaiw5kZjZcKXRLezY8PonRMfTZ84jgovh51WYSVrSHXG/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "GraTisEXuByrh5GyBckbuC1xgz1FSXBF5pTbyMKK8xfp", - "symbol": "PAYCHECK", - "name": "PAYCHECK", - "decimals": 0, - "logoURI": "https://github.com/MarkSackerberg/token-list/blob/main/assets/mainnet/GraTisEXuByrh5GyBckbuC1xgz1FSXBF5pTbyMKK8xfp/logo.png", - "tags": ["social-token", "meme-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/MarkSackerberg" - } - }, - { - "chainId": 101, - "address": "FwKfC9833sWPEmq7T46dbJpnL5pcjGLPxBTuZYm5uD9X", - "symbol": "CYOST", - "name": "CYOST Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Corefax/crypto/main/cyostlogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CHYiXPvPRrvN5eCGHkpfPExdBy4GerGewyuoK2BRyDiC", - "symbol": "NOOFT", - "name": "Nooft Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/noofttoken/nooft/main/logo.png", - "tags": ["utility-token"], - "extensions": { - "coingeckoId": "nooft", - "description": "NOOFT Project develops a Search Engine \u0026 Analytics platform for NFTs ", - "facebook": "https://www.facebook.com/nooftproject", - "twitter": "https://twitter.com/NooftProject", - "website": "https://nooft.io/" - } - }, - { - "chainId": 101, - "address": "J6ijHrBaje6XNCaPH4KwWYPHeG5LkcAqGdGQGZeVJ9xX", - "symbol": "CIBRA", - "name": "Cibra Monterrey Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/J6ijHrBaje6XNCaPH4KwWYPHeG5LkcAqGdGQGZeVJ9xX/logo.png" - }, - { - "chainId": 101, - "address": "75XracgnqjPeuexHKWQU3bBcXMZG6XLDF867tKB1T9e6", - "symbol": "ISL", - "name": "The Islanders", - "decimals": 8, - "logoURI": "https://cdn.jsdelivr.net/gh/koudydev/crypto/main/islIcon.png", - "tags": ["game-token", "gaming"], - "extensions": { - "description": "The Islanders Game coin", - "discord": "https://discord.com/channels/937754422270885889/937754422270885892", - "facebook": "https://www.facebook.com/ISLGame", - "instagram": "https://www.instagram.com/theislandersgame/", - "twitter": "https://twitter.com/ISLGame", - "website": "https://theislandersgame.com/" - } - }, - { - "chainId": 101, - "address": "65SjJYuWxK6Lihg2KXKu6Byxjz7488eUMLjXxSqzeZU9", - "symbol": "DiZ", - "name": "DiZSol Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/IK2050/Crypto/main/DiZ.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BKtfw5T85QcrDsT5u4Jeks8jQauaaKUfyqJjzAti2uAf", - "symbol": "GMRM", - "name": "GameRoom Coin", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BKtfw5T85QcrDsT5u4Jeks8jQauaaKUfyqJjzAti2uAf/Logo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Cvvh8nsKZet59nsDDo3orMa3rZnPWQhpgrMCVcRDRgip", - "symbol": "tsUSDC", - "name": "tsUSDC", - "decimals": 6, - "logoURI": "https://user-images.githubusercontent.com/8619106/152620671-249ada62-ced7-4959-bc92-f16837ca83b1.png", - "tags": ["solfarm", "tulip", "lending", "strategy"] - }, - { - "chainId": 101, - "address": "78ZnfsncDVyhE2HVPe5LscUrgKsJpwP3wJDHRF2TuC1v", - "symbol": "SLNT", - "name": "SLNT", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/78ZnfsncDVyhE2HVPe5LscUrgKsJpwP3wJDHRF2TuC1v/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/TheSolitarians" - } - }, - { - "chainId": 101, - "address": "F2Wvo3sDsTN4okhcSCh4ttAieJmesJiD2HhHcfrgdNRU", - "symbol": "PXLC", - "name": "Pixel Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Pixel-Coin/cypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GuwfcBtgvxpzyb11ucAbjH5hwALPQNqQ4By5AF12BBLu", - "symbol": "CWC", - "name": "Crypto Wealth Capital", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/nicholas104/assets/main/CWC.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "E1vVoJmfr3Jyvwd8iFB7F1u9uwAeFNqkNxfzybHNyHuD", - "symbol": "Met4", - "name": "Meta 4", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/E1vVoJmfr3Jyvwd8iFB7F1u9uwAeFNqkNxfzybHNyHuD/logo.png", - "tags": ["utility-token", "metaverse"], - "extensions": { - "twitter": "https://twitter.com/Meta4labs1", - "website": "https://meta4labs.org" - } - }, - { - "chainId": 101, - "address": "GUrngDJstwofUvg6mbKLy886XEqk3bG2uEtmgdHbWn9o", - "symbol": "BBSC", - "name": "Booth Boys StableCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Vo1dedParad0x/BoothBoys/main/BBS1.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BJmWW8tqHosfAGobPMxjnuWrkjUoH88ZPQozxcm2pWcm", - "symbol": "N8Z", - "name": "N8Z Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/n8zcoin/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3zUfBAhvLY3JER8CiWTdFnKfdQyqNW5cgaBZBZp1fzSF", - "symbol": "GMW", - "name": "Giants Metawar", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/GIANTSMETAWAR/Assets/main/logo.png", - "tags": ["game-token", "gaming"], - "extensions": { - "description": "The Giants Metawar Game coin", - "twitter": "https://twitter.com/giantsmetawar" - } - }, - { - "chainId": 101, - "address": "6yHNeyd7a14VD2PBedaXqFacoVAJfD5mAAYbvwBnvC7t", - "symbol": "MTM", - "name": "MTM", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6yHNeyd7a14VD2PBedaXqFacoVAJfD5mAAYbvwBnvC7t/logo.png", - "tags": ["Utility-token", "NFT"], - "extensions": { - "twitter": "https://twitter.com/metamounts", - "website": "https://metamounts.io/" - } - }, - { - "chainId": 101, - "address": "V221RXxi1u2Utk64vmddRXHKAUawG2u5qiZ2KvK9rm9", - "symbol": "V22WT", - "name": "Valley22 white token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Justin-hw-Tseng/assets/main/logo.png", - "tags": ["member-token"] - }, - { - "chainId": 101, - "address": "DCmg9yjadWKoVY1kJgni3emACVojdZ7K1fxch2whUoZM", - "symbol": "DSMB", - "name": "Doodled SMB", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/doodledsmb/doodled-smb/master/img/doodled-smb-pfp.png", - "tags": ["NFT", "social-token", "community-token", "utility-token"] - }, - { - "chainId": 101, - "address": "6tY672aRW5MLU5EetBEsYLMHe9BhssRMcthsix3byVSV", - "symbol": "SGT/USDC", - "name": "Cropper LP token (SGT/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "CLA2WB7Sm7Pc5f6FKcsdS6YewHXqAxYT4dDRqepYyPxL", - "symbol": "SHROOMZ/USDC", - "name": "Cropper LP token (SHROOMZ/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "5HVZhTGSebGoLS2Auaarv5zeY92vEgxbxhSdbkA54cLL", - "symbol": "GIF/USDC", - "name": "Cropper LP token (GIF/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "FbKZLsPuEeLHW49KCsXSw1ATWs4HvgZHUVpo5YKj2p1F", - "symbol": "SD/SOL", - "name": "Cropper LP token (SD/SOL)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "A7Fzax3TigXLinwQa2hRydsuiJo14d73i2Gob7WDvNTa", - "symbol": "HIPPO/USDC", - "name": "Cropper LP token (HIPPO/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "HYmgeRXiNmje6Cc2zP221jX18bdaj8PvvHm2JSqhgBeY", - "symbol": "SVT/USDC", - "name": "Cropper LP token (SVT/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "4YUWAnFjsrAQawUgnxG1v3boKRLpssZx294LoDki67K6", - "symbol": "SOB/USDC", - "name": "Cropper LP token (SOB/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "GnZmzcApAfDfZZ1VyuaqKCT5JgepGbqe5kP189jeGMPk", - "symbol": "DXL/USDC", - "name": "Cropper LP token (DXL/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "8X81vuXa8yYS1k242e7CpVgaShk5cxwx8gwgc2RDS8Jh", - "symbol": "PSOL/USDC", - "name": "Cropper LP token (PSOL/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "EKGM73Femgd7Nm6u7pMP6U7C5aZAQrp1txLjS4kFYUtG", - "symbol": "CONDOMS/USDC", - "name": "Cropper LP token (CONDOMS/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "8Ncps4M6Le7U3cxxvAwsE7LfVmLArBdFpwg3byx2YXKz", - "symbol": "CHICKS/USDC", - "name": "Cropper LP token (CHICKS/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "AorFnse73z1SXWCQpbfdWJMeHGL6HYJfXjAQFmFRLkhu", - "symbol": "sBTC/USDC", - "name": "Cropper LP token (sBTC/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "EnuUKoFnc9ewnLCv6oRcMbqc6hCLKE5Y95WZeyT36mcZ", - "symbol": "XVC/USDC", - "name": "Cropper LP token (XVC/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "8ydpYCUcgLKLKbzAwHTfGj5fZR7yjXPBi4C81mFjnCZy", - "symbol": "GUMA/USDT", - "name": "Cropper LP token (GUMA/USDT)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "FwgSkLJjfpmVNGJDidmzmU5ainm8k5ZA1f6y6st9Fywp", - "symbol": "GRUNT/USDC", - "name": "Cropper LP token (GRUNT/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "ABFNhdJ1Te2VK7XTK3cLxkMhN2yyJG3CbhqrvgVQ5Uxq", - "symbol": "BOX/USDC", - "name": "Cropper LP token (BOX/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "DeNBqXqbmD7sagf2z7zGbwxFpkuwKMczRVgshZVh46Nf", - "symbol": "sBull/USDC", - "name": "Cropper LP token (sBull/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "CYptGYMQbjbm9RX6zD1frHShFdkG3z9mpr2Njcg5exZv", - "symbol": "CRP/ETH", - "name": "Cropper LP token (CRP/ETH)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "AqUDC2yd1wWyzZa4ERjhjChuwg7SmRxuwfdiSRi6ZHqN", - "symbol": "SLIM/CRP", - "name": "Cropper LP token (SLIM/CRP)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "4GspeaC15u8Zd6aDwhYpYZYrzMcAF1jroDH2Y8T4gmg9", - "symbol": "WIPE/USDC", - "name": "Cropper LP token (WIPE/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "AVDrUiPiC74NjEK78C6U5aPwRjHjnTgCDCS9dZtio7uZ", - "symbol": "LIZARD/USDC", - "name": "Cropper LP token (LIZARD/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "2osnrtveVu9eueAabM8GAnzndZTe8jsfPv58NU2jF8Ax", - "symbol": "COBAN/CRP", - "name": "Cropper LP token (COBAN/CRP)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "APTaiNJxUtAZMnhoZCVXdxR5kf7ExYWuET3sfnub59z2", - "symbol": "SOL/USDC", - "name": "Cropper LP token (SOL/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "BpF7815mKZ4UGvsLoGfYbkDidiGb4ikd5J7fn7s3cB9M", - "symbol": "WBRZ/USDC", - "name": "Cropper LP token (WBRZ/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "Hdv4pBjB54LLzihUcC6CMTN8uwH63ACq1itkESXHkiSh", - "symbol": "DEGN/USDC", - "name": "Cropper LP token (DEGN/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "5AHYsFrBTHZdHGgC8zh4UM1JnwEBeEd9Pp5awqxwgjH2", - "symbol": "LEONIDAS/USDC", - "name": "Cropper LP token (LEONIDAS/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "3DN98FXELwME1sr6pz9on6pW3vrB8rX3kqkZBHuf3ppy", - "symbol": "OOGI/CRP", - "name": "Cropper LP token (OOGI/CRP)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "4FyRYzSfduFzBJPkF8ikQ3FDkSg5H7TrGRfhitzNSNeN", - "symbol": "PART/USDC", - "name": "Cropper LP token (PART/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "7FpihYivmiL5AhcCUgKuxxKSj4GCsr8tWsr2gfRekW45", - "symbol": "HAMS/USDC", - "name": "Cropper LP token (HAMS/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "9dBKkgCaNxXxe95zPHvotYJcuf9UAQDNko1hQ6M6H7AV", - "symbol": "SWOLE/USDC", - "name": "Cropper LP token (SWOLE/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "A4UuGvfHD51UiXrTFvC7irxh4NqSyfYZite25WDSQW6k", - "symbol": "SCIFI/USDC", - "name": "Cropper LP token (SCIFI/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "691CkaRvYyPJSRFgomyBymiVDfuw8c7VcceNC2kecRgx", - "symbol": "SQUIDGAME/USDC", - "name": "Cropper LP token (SQUIDGAME/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "G6KxgxFZB6qWstFA3oU3ByN4EfQmy4H2d52P7hyh5LaS", - "symbol": "OOGI/USDC", - "name": "Cropper LP token (OOGI/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "E7QXvYyoe9D5jVKrzkyuhhXvPtZE8tugZAjLacvujKBc", - "symbol": "LIQ/USDC", - "name": "Cropper LP token (LIQ/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "CCMzC7xHHJ6XVEK3Ee5PenNQecbD48KywkrUwZFYYTsX", - "symbol": "CRP/BTC", - "name": "Cropper LP token (CRP/BTC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "389WSabPTk1hZ6hC5uG3MEKsindmwCuNhdcHNdhCwXrG", - "symbol": "WOOF/USDC", - "name": "Cropper LP token (WOOF/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "9TrnN1nRvPetRJgwtdbRrf7MX5eeCDbUyXk2aKw83mQK", - "symbol": "FUM/USDC", - "name": "Cropper LP token (FUM/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "rQ3TuSc95MJ44SvuqGiFtHEhL1gCXS2CafhaZXaziAd", - "symbol": "UNIVERSE/USDC", - "name": "Cropper LP token (UNIVERSE/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "CqZ8r4PshEUXH87wbNLbeHXkZY1NZm1AoF5x1VwAN1Ce", - "symbol": "LGBR/USDC", - "name": "Cropper LP token (LGBR/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "jb388Fw59QgHTYDUwK47AHsV8iLiS1tEyFk1kyXk5So", - "symbol": "BST/USDC", - "name": "Cropper LP token (BST/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "4ig1SUo6e39QsWzzyvsDEXCDrx9yMyjFg2UUgfpsMwkc", - "symbol": "FLOOF/USDC", - "name": "Cropper LP token (FLOOF/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "5nMqTPw8ABz8R1jj9ATHNrAJSZD6ZBCBheKKVnX9oLai", - "symbol": "SHBL/SOL", - "name": "Cropper LP token (SHBL/SOL)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "7LaVBQKnQQ63govY6dYziiPxJ3KVN9TiS577JTFoFVgv", - "symbol": "MARIO/USDC", - "name": "Cropper LP token (MARIO/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "7XECrQw5N9avacB5H72shuUiiMf3P3ykubcu8oPKiGb7", - "symbol": "SLT/USDC", - "name": "Cropper LP token (SLT/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "9PNEDBczsEJL9bVdvF9PzgCNCyNKt2gwHMo3XUCxsKHZ", - "symbol": "LINU/USDC", - "name": "Cropper LP token (LINU/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "ATNhobTTsidXWAAEp1HNedSAwfCEBSsL8kVaV6Bco1vx", - "symbol": "HIMA/USDC", - "name": "Cropper LP token (HIMA/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "H4byHXBhL6nqJc6egqcdeAMpjxG7233Ksg3yQQ4hXwq1", - "symbol": "WAG/USDC", - "name": "Cropper LP token (WAG/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "DCvHY1Do3gdCttENXxZbg5KeKF76LpYSjwCWp4WjbM6r", - "symbol": "GAMESHIB/USDC", - "name": "Cropper LP token (GAMESHIB/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "DbgDEG9L9wEYsnDtpzrm8Kyw5RkiU8EGexJFUCSL6McV", - "symbol": "CYS/USDC", - "name": "Cropper LP token (CYS/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "7ccPQfef52gPPueiaGKVE2qFBrS2DbAEPjrdpHvsvY8J", - "symbol": "SRM/CRP", - "name": "Cropper LP token (SRM/CRP)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "Hh7a2wEboNx4NiGh3DWbGGUiChdTJ5bc8Sb4dU5YNznb", - "symbol": "LSP", - "name": "Lightspeed", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/nerdgod21/Lightspeed/main/Zbaz8Fx-2.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ZLCHcUKgkbqzx4SzcxGgGdDuUneyAma2mEWvNvXTYCA", - "symbol": "ZILCH", - "name": "The Nothing", - "decimals": 6, - "logoURI": "https://arweave.net/Vn_m92f54lR932GL3sZDcsp17j5TqtJMfrlVJApQMxo", - "tags": ["social-token"], - "extensions": { - "description": "This token is about nothing" - } - }, - { - "chainId": 101, - "address": "42Y3CgJQLnHjdScYMu8VS4TbeZMUNVdBMKYbf7hz7aum", - "symbol": "GMFC", - "name": "Gamify Club", - "decimals": 6, - "logoURI": "https://pbs.twimg.com/profile_images/1444964749897175046/wdz26CzM_400x400.jpg", - "tags": ["gamefi", "utility-token"] - }, - { - "chainId": 101, - "address": "3H3AeG7BRmCmCJuQ21Am24SYcgFBkgpX6miSSDM7YmW7", - "symbol": "METAIN", - "name": "Meta Infinity", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/MetaInfinity1/assets/main/logo.png" - }, - { - "chainId": 101, - "address": "8Sc16a55YzSKpPTUN4VJEfcKU5aXSk22WyCEsr1MfdCf", - "symbol": "TREE", - "name": "Tree Token", - "decimals": 0, - "logoURI": "https://cdn.discordapp.com/attachments/926535226820276264/939484372397080606/tree_token.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "aosvsUetSY7h7hSYXPR3oCoVMpo9GeL3Gtz2aqnua7p", - "symbol": "AOST", - "name": "AOS Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/aosvsUetSY7h7hSYXPR3oCoVMpo9GeL3Gtz2aqnua7p/token48_48.png", - "tags": ["nft-token", "community-token"], - "extensions": { - "discord": "https://discord.gg/cmUJSVqK", - "twitter": "https://twitter.com/aos_NFT", - "website": "https://apeson.space" - } - }, - { - "chainId": 101, - "address": "CyYQrscVAmhzfg2rSC8HAEQvSgkTKq9hBurop3CMoULm", - "symbol": "FORCA", - "name": "Forca", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/forcapunks/Forca/main/forca.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "GVcJpThQvSXNDyVZ4yvXGL5YXT7mtoHwyGDnQbq88SHY", - "symbol": "WGA", - "name": "GoldAnimation whitelisting Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GVcJpThQvSXNDyVZ4yvXGL5YXT7mtoHwyGDnQbq88SHY/gold-logo.png", - "tags": ["whitelist-token", "GoldAnimation"] - }, - { - "chainId": 101, - "address": "G9cPkaqupvJu4qm4JEcTVnTnChyhEuLNNBJbEdqe6h7R", - "symbol": "WLTH", - "name": "Wealthy", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/unimintco/token-logos/main/WLTH/logo-larger.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GG3gVKEb9K48aSYkYvMmBLU9HaCUkLKxeC4c8oZuJG2W", - "symbol": "SCP", - "name": "SCP FanClub", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SCPUk/SportingToken/main/SCP.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "DTdAVHK68Gm6v1TQz9kaV4xGmAgZCZ8inqjUrvcPzxXh", - "symbol": "IMO", - "name": "Imoogi", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DTdAVHK68Gm6v1TQz9kaV4xGmAgZCZ8inqjUrvcPzxXh/logo.png", - "tags": [ - "utility-token", - "security-token", - "game-currency", - "DeFi", - "launchpad", - "tokenization" - ], - "extensions": { - "description": "IMO is a token of Imoogi Kingdom platforms that offer simplified real-world investments on Metaverse Game.", - "telegram": "https://t.me/imoogi_kingdom", - "twitter": "https://twitter.com/imoogi_kingdom", - "website": "https://imoogi.finance" - } - }, - { - "chainId": 101, - "address": "F3BR3EeyuNNANLDyW9R359KXKDtXVBrL4yQSBjeC5Riz", - "symbol": "Comb", - "name": "Comb Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/afrossss/crypto/main/comb-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6ZXACEZYMaWr1D9U8eBXqDsdzBfVH4NGhWun7bhRB8L5", - "symbol": "TUSKER", - "name": "Mister Tusker", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/sadun001/mistertusker/main/logo.png", - "tags": ["NFT-token"] - }, - { - "chainId": 101, - "address": "9CRG3HKLrbqmmGhPtgodyCdt2iUmSmBtbzuUHMhyn9G6", - "symbol": "JNK", - "name": "JANOSKOIN", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9CRG3HKLrbqmmGhPtgodyCdt2iUmSmBtbzuUHMhyn9G6/logo.png", - "tags": ["social-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/_JNSKR" - } - }, - { - "chainId": 101, - "address": "CUKkELwvhgGQqezNE3vBwcrKqAXRyqW92WUpD9tEXBf4", - "symbol": "PRGRM", - "name": "Pro Program Token", - "decimals": 0, - "logoURI": "https://github.com/Pro-Program/crypto/blob/main/proprogram.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EZphDuwLyp7kh36Xe19vnfh6F8jC9fGUWNrTULnGd4E4", - "symbol": "LLNG", - "name": "Little Nugget", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/LouisDeSimone/lilnugget/main/Untitleddesign.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5pwyQZnX8GkabzowWtFHNeKER1J1omrAdJSYqjtffaQZ", - "symbol": "LOOP", - "name": "Solana Loop", - "decimals": 9, - "logoURI": "https://i.ibb.co/vQX1smT/logo-loop.png", - "tags": ["DeFi", "Utility-token"], - "extensions": { - "twitter": "https://twitter.com/SolanaLoops" - } - }, - { - "chainId": 101, - "address": "FsPwar1GMAdvdURobNedMyrkdY6tUum63xfRukgkCe5Q", - "symbol": "TTO", - "name": "Totofsen Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Tof37/Totofsen-crypto/main/logo.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "totCSh2TfEPTRovc4rMGz1ezukAdPxYWzh9jnXppeqY", - "symbol": "GMT", - "name": "Greenman Token", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/totCSh2TfEPTRovc4rMGz1ezukAdPxYWzh9jnXppeqY/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/TheGreenmanShow", - "website": "https://greenmanhouseparty.io" - } - }, - { - "chainId": 101, - "address": "5B7vJfjKYTzxMphzZ7GQYzdnpLhRRudcKRmiDoUezMc2", - "symbol": "BARC", - "name": "Barcoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Barcoin-io/Barcoin/main/No%20Slogan/Transparent.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BkbqZY7Bhg4TV1fjL9zBLs1xLUpjXj16mmPT6MAMfpQH", - "symbol": "$POT", - "name": "Simians Potion", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BkbqZY7Bhg4TV1fjL9zBLs1xLUpjXj16mmPT6MAMfpQH/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/cmUJSVqK", - "twitter": "https://twitter.com/SimiansNFT", - "website": "https://simiansuniverse.com" - } - }, - { - "chainId": 101, - "address": "5zL1cRf34b35Bwx8GAdqquvyBe2K3JXLhCEPQN7DGah", - "symbol": "SB", - "name": "Skreetbird Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5zL1cRf34b35Bwx8GAdqquvyBe2K3JXLhCEPQN7DGah/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "description": "Skreetbird Token", - "discord": "https://discord.com/invite/9FYjjHsBWh", - "instagram": "https://www.instagram.com/skreetbirds_nft", - "twitter": "https://twitter.com/SkreetBirds_NFT", - "website": "https://skreetbirds.io" - } - }, - { - "chainId": 101, - "address": "6kgN1e2DBDekXeaED2QLrhXpAEuxFK24hfC9ZQ2JS3Sg", - "symbol": "ABI", - "name": "AbiCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/gere-lajos/AbiCoin/main/abicoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BEDCa1roohJon5y2GrH84R9mV6XqdgSurrCcP6wHLfDS", - "symbol": "SOY", - "name": "Soy Free", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ErranMorad/soyfree_crypto/main/soya.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8F7PWq2XnQCdXqbPgBvXfsjPRC33a5NWr2j5sFPwbMrU", - "symbol": "Tiger", - "name": "White Tiger", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/shanghaitigersceo/shanghai-tiger/master/img/white-tiger-token.png", - "tags": ["social-token", "meme-token", "community-token", "game-token"] - }, - { - "chainId": 101, - "address": "DTokw7gqbgWENWptx59gnXsyz3EDiio73K9WasY5qvX4", - "symbol": "BETYAR", - "name": "Betyár Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DTokw7gqbgWENWptx59gnXsyz3EDiio73K9WasY5qvX4/logo.png" - }, - { - "chainId": 101, - "address": "9ZLBKPCzkvDv85hojKofsogsESkJMN164QCVUtxvBxEQ", - "symbol": "SLDR", - "name": "Solderland", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9ZLBKPCzkvDv85hojKofsogsESkJMN164QCVUtxvBxEQ/logo.jpg", - "extensions": { - "twitter": "https://twitter.com/solderland", - "website": "https://solderland.com/" - } - }, - { - "chainId": 101, - "address": "HWABAcTnRbFZV5T2J3rA8twXbPPVQaTbNnzM74YzcYUq", - "symbol": "SPEV", - "name": "SpeveCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SpeveCoin/crypto/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9XuFGK8Yq2t97Ae8tDXDtkheEXN1ZDZq9pSPXDdXoBKN", - "symbol": "LTR", - "name": "Lontar", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9XuFGK8Yq2t97Ae8tDXDtkheEXN1ZDZq9pSPXDdXoBKN/logo.png", - "tags": ["utility-token", "community-token", "nft-token", "launchpad"], - "extensions": { - "website": "https://lontar.io" - } - }, - { - "chainId": 101, - "address": "4KFkWBNu4Ts3DgGRQHBsSEzVE2txQYZ38wS2nJM43M2w", - "symbol": "FTL", - "name": "FasterthanLite", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mikemilli818/Fasterthanlight/main/OFFEO-offeo-video-15.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GCcf1qi8zpZ96eqmT9BbPxkS2jytX4K8xzNB2kyYi1nb", - "symbol": "MCZ", - "name": "MCZ Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/mcz73/mcztest/main/glaube-an-dich.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EC5XTvPE8YV3rkpdRTLP7ATDURaLj9GLJ1mbGCQnVHYW", - "symbol": "BLDK", - "name": "Blue Duck", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/LouisDeSimone/BlueDuck/main/blueDuck.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "kLChrqoqRECAp4VVX9i7KqL2sfcHHwX3UbXLcgk8r6q", - "symbol": "CUB3", - "name": "CUB3 Demo Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/kLChrqoqRECAp4VVX9i7KqL2sfcHHwX3UbXLcgk8r6q/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "SouN3GpzerkB9tkmybjktAm17Pt4ynrdgU64B4mv8Ye", - "symbol": "Souls", - "name": "Souls Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SouN3GpzerkB9tkmybjktAm17Pt4ynrdgU64B4mv8Ye/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://www.hornsvshalosnft.com/" - } - }, - { - "chainId": 101, - "address": "426zJLfE2sV6UkQsYJXQrLkJTZo995ZVZodq1LTMfo7Y", - "symbol": "NEWTON", - "name": "NeftWorld", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/neftworld/assets/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "E2XR53KDCGffnvsEADiRvTshh6SQCokepX3CKnffV2LL", - "symbol": "YC", - "name": "YagyaCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/YagyaMittal-CDC/MySolToken-YagyaCoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4C833zd4QW62PSEAooeaeEeKQg3hbocUJ9wimxLSXUcU", - "symbol": "CC", - "name": "Cloud Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/cloud-corp/cloucroin-resources/main/CloudCoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3LDDeRpEW45HAyUUiyCysDKsYRQanXnEXd9Yjfr5mxZ5", - "symbol": "ODSY", - "name": "Odyssey Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/soutrikdeylive/odyssey_logo_solchain/main/new_logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 103, - "address": "DTokw7gqbgWENWptx59gnXsyz3EDiio73K9WasY5qvX4", - "symbol": "BETYAR", - "name": "Betyár Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DTokw7gqbgWENWptx59gnXsyz3EDiio73K9WasY5qvX4/logo.png" - }, - { - "chainId": 101, - "address": "7AWYMvHBxHifjxMAMcGz3SKncXKwSNHPzmei9ZoYTg93", - "symbol": "BOON", - "name": "BoonCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/BoonBaboon/boon-coin/main/small-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "iRoCxFdj5ZpaGZv5zfbme6CkMtRYc6rLTWbxzuxdMGQ", - "symbol": "IROC", - "name": "SolRockers", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/iRoCxFdj5ZpaGZv5zfbme6CkMtRYc6rLTWbxzuxdMGQ/logo.png", - "tags": [ - "utility-token", - "game-token", - "game-currency", - "GameFi", - "Gaming" - ], - "extensions": { - "description": "SolRockers Battle of the Bands is a next-gen PVE/PVP play to earn rhythm game built on the Solana blockchain.", - "discord": "https://discord.gg/solrockers", - "facebook": "https://facebook.com//solrockersnft", - "instagram": "https://instagram.com/solrockersnft", - "medium": "https://medium.com/@solrockersnft", - "telegram": "https://t.me/solrockersnft", - "twitter": "https://twitter.com/solrockersnft", - "website": "https://solrockers.io/" - } - }, - { - "chainId": 101, - "address": "E359HKTV192s4kpg4QXTmj7eQ6fzvsL2KbU9QJGDrM3e", - "symbol": "MBALL", - "name": "Metaballs", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/E359HKTV192s4kpg4QXTmj7eQ6fzvsL2KbU9QJGDrM3e/logo.png", - "tags": [ - "metaballix", - "metaballs", - "whitelist-token", - "nft-token", - "metaverse-currency", - "metaball-nft", - "solana-nft", - "nft-collection" - ], - "extensions": { - "discord": "https://discord.gg/AG2Y93emkf", - "twitter": "https://twitter.com/metaballix", - "website": "https://www.metaballix.com" - } - }, - { - "chainId": 101, - "address": "a4dLZ6Zki1AFWJTfMYC5vGP4YwreNS5uPJG9ZsoMzq9", - "symbol": "STH", - "name": "SethCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/seth123321123321/crypto/main/sethcoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "P7DHtdeoHF6dKTPaguymDoZTmHETBnULWBnoSUYrqkp", - "symbol": "PRPh", - "name": "PRPH Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/P7DHtdeoHF6dKTPaguymDoZTmHETBnULWBnoSUYrqkp/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AuBFooi7wKZNr4kD25sW2YDHGyyc9uRDKBggC21i9WQe", - "symbol": "OSMT", - "name": "Osammot Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SolanaTokenMerger/Osammot-Coin/main/Logo.png", - "tags": [ - "social-token", - "community-token", - "utility-token", - "game-token", - "meme-token" - ] - }, - { - "chainId": 101, - "address": "8eFhb4EeCBfb6FPrU9rDRW8LZVeva8zAz3yvtVxxmdqM", - "symbol": "HIK", - "name": "Ponhiki", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/omadi2/token/main/HouseofPonhikiLogo.png", - "tags": [ - "utility-token", - "capital-token", - "DApp", - "Application", - "payment-protocol", - "Payment" - ], - "extensions": { - "twitter": "https://twitter.com/realwatertv", - "youtube": "https://www.youtube.com/channel/UCf-kciaFvGJ2_pB0WK6hfvQ" - } - }, - { - "chainId": 101, - "address": "8fRZVFFBkCVc2NSSxHBufsCWCbXhPt478fbgAjW1cRLX", - "symbol": "FV", - "name": "Future Value", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/FV85/Crypto/main/FVlogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "12ZKf2tcsYtgUiB6wtVHmVZGAckDzkyYRy1iwcieJQdQ", - "symbol": "SLSM", - "name": "Solisium", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solisium/solisium/main/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "4aJiwFd8bscKH6tBfvK9j3vFD4YnKSQGJfhttYismubf", - "symbol": "NERTIA", - "name": "Nertia", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Kadeaus/CC/main/logo.png", - "tags": ["social-token", "utility-token", "community-token", "NFT-Token"] - }, - { - "chainId": 101, - "address": "Et3k45YA6ZMur4GcjuYJiiZSdnr78Jt2AhMbWs4cs3B", - "symbol": "GNOM", - "name": "GnomToken", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/onuraladi/CoinGnom/main/gnomcoin.png", - "tags": ["utility-token", "community-token", "nft-token"], - "extensions": { - "discord": "https://discord.com/invite/CFgTvwDEHf", - "twitter": "https://twitter.com/GnarlyGnomies", - "website": "https://gnomiezgen2.fun/" - } - }, - { - "chainId": 101, - "address": "H7KGAGLpfKnPUcLUR521R13gKys5vVnjTrD5tyGgKP1D", - "symbol": "KKOIN", - "name": "KristenKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/klauducci/klauducci/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6U9zAUz4gGANpwMuXKFYzfWZp6VVd3BWromTKabMLFL5", - "symbol": "HUMA", - "name": "Huma Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/HumaCoin/icon/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "E6HdfEAvaY8Fz9avWHvP9iJLWhVrdvmRjvXNc2v3vzb7", - "symbol": "GNANA", - "name": "Golden Banana", - "decimals": 9, - "logoURI": "https://github.com/2beyondWRLD/token-list/blob/main/assets/mainnet/E6HdfEAvaY8Fz9avWHvP9iJLWhVrdvmRjvXNc2v3vzb7/logo.png?raw=true", - "tags": ["social-token"], - "extensions": { - "discord": "https://discord.gg/awFhms4VYx", - "twitter": "https://twitter.com/riseofsolapes" - } - }, - { - "chainId": 101, - "address": "AGqKX7F4mqJ8x2mUQVangJb5pWQJApaKoUfe5gXM53CV", - "symbol": "USDCav", - "name": "USDCav (Portal from Avalanche)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AGqKX7F4mqJ8x2mUQVangJb5pWQJApaKoUfe5gXM53CV/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xa7d7079b0fead91f3e65f86e8915cb59c1a4c664", - "assetContract": "https://snowtrace.io/address/0xa7d7079b0fead91f3e65f86e8915cb59c1a4c664", - "bridgeContract": "https://snowtrace.io/address/0x0e082f06ff657d94310cb8ce8b0d9a04541d8052", - "coingeckoId": "usd-coin" - } - }, - { - "chainId": 101, - "address": "B2wfeYz5VtBnQVrX4M8F6FeDrprVrzKPws5qg1in8bzR", - "symbol": "USDTav", - "name": "USDTav (Portal from Avalanche)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/B2wfeYz5VtBnQVrX4M8F6FeDrprVrzKPws5qg1in8bzR/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0xc7198437980c041c805a1edcba50c1ce5db95118", - "assetContract": "https://snowtrace.io/address/0xc7198437980c041c805a1edcba50c1ce5db95118", - "bridgeContract": "https://snowtrace.io/address/0x0e082f06ff657d94310cb8ce8b0d9a04541d8052", - "coingeckoId": "tether" - } - }, - { - "chainId": 101, - "address": "CrDKsTDUursFNeTu5neSg4x8MGM6UkDbmmXYfe7xk4Qa", - "symbol": "SPEVE", - "name": "Speve Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SpeveCoin/crypto/main/Logo2.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EP628RFby7V2Cx4MYbQthQeP4PaW4rVV6kRAxAj6f6C1", - "symbol": "OpenP", - "name": "Open Practica", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EP628RFby7V2Cx4MYbQthQeP4PaW4rVV6kRAxAj6f6C1/Logo.jpg", - "tags": [ - "learning-token", - "training-token", - "meet-to-earn", - "study-to-earn" - ] - }, - { - "chainId": 101, - "address": "CbQk9JHBZLsYECbDnvDeKDDHx5WiRXUqs9QMDfvuk1oZ", - "symbol": "BMC", - "name": "Blue Marble Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/uljisoft/assets/main/icons/blueGem.png", - "tags": ["utility-token", "game"] - }, - { - "chainId": 101, - "address": "FmJeYBupgRuHiZrjUyVu1vLmj4fudrDaMQPx9A15SoZt", - "symbol": "BQCN", - "name": "BonaireCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/BonaireCoin/CNCN/main/logo.png", - "tags": ["social-token", "community-token", "utility-token"] - }, - { - "chainId": 101, - "address": "GL9bUD7qqLDSEvRUZjvyBs7zMVh589sNydizviLz9PW", - "symbol": "EHSC", - "name": "EHS Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/evanset/EHSC/main/EHSC.png", - "tags": ["social-token", "community-token", "utility-token"] - }, - { - "chainId": 101, - "address": "8zKYrMbJJVCSypbmxmtknjtf1GtmmYdmJSoBmpz6aH4z", - "symbol": "CMPT", - "name": "Campetta Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mcampetta/Campetta/main/Campetta_Logo.png", - "tags": [ - "social-token", - "learning-token", - "training-token", - "family-token" - ], - "extensions": { - "description": "Token for the Campetta family, to be dispensed as a reward for successful completion of games and tasks.", - "github": "https://github.com/mcampetta" - } - }, - { - "chainId": 101, - "address": "8Dv7BrugUUSXbcVRJr39fJV31m5AmbxunLADFWS26Suk", - "symbol": "RHLM", - "name": "Refined Land Metaverse Homes", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8Dv7BrugUUSXbcVRJr39fJV31m5AmbxunLADFWS26Suk/logo.jpg" - }, - { - "chainId": 101, - "address": "CBV12y1pehFbhdnDpUfgPe88SbUZ5G2s1kLA449Yu3Ad", - "symbol": "GUARD", - "name": "VANGUARD", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CBV12y1pehFbhdnDpUfgPe88SbUZ5G2s1kLA449Yu3Ad/logo.png", - "tags": ["VANGUARD"], - "extensions": { - "discord": "https://discord.gg/thevanguards", - "twitter": "https://twitter.com/Vanguards_SOL", - "website": "https://vanguards.world/" - } - }, - { - "chainId": 101, - "address": "EK1rBdnucX4yf8JDCFQEC7rTejXEUqsjazDxHZaHSKT7", - "symbol": "DRAY", - "name": "Draygon Investment", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/benpazzo/dray/main/assets/draylogo.png", - "tags": ["community-token"], - "extensions": { - "description": "Draygon Invesment Co is Invesment DAO NFT project. ", - "discord": "http://discord.gg/draygonco", - "twitter": "https://twitter.com/DraygonCo", - "website": "https://draygoninvestment.co/" - } - }, - { - "chainId": 101, - "address": "BwyQD7Kvn5ciu7D6B1S382vhfXmsneVZnuiH7LfjtFA6", - "symbol": "BMP", - "name": "Bohemian Mint Pass", - "decimals": 0, - "logoURI": "https://chiiepdxwskdrdtt3mqrnde3xh7hib4go22qacb5myxdj34xwwqq.arweave.net/EdCCPHe0lDiOc9shFoybuf50B4Z2tQAIPWYuNO-XtaE", - "tags": ["mint-token"], - "extensions": { - "twitter": "https://twitter.com/BohemiaArtFair" - } - }, - { - "chainId": 101, - "address": "FZGvzidSPbJXozPdNhFDCnxkwpD54GNvpHxGPGLf9EBQ", - "symbol": "LIGHT", - "name": "Celestial Light Token", - "decimals": 6, - "logoURI": "https://github.com/kozhi-dreams/Light-token-logo/raw/main/Light-token-logo.png", - "tags": ["utility-token", "social-token", "nft-token", "community"], - "extensions": { - "website": "https://celestialhoosters.com" - } - }, - { - "chainId": 101, - "address": "7sgs35BJHUQAsVBFat2f3M8dRggTZAPcstc3mRHoEmq1", - "symbol": "COSMIC", - "name": "Cosmic Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7sgs35BJHUQAsVBFat2f3M8dRggTZAPcstc3mRHoEmq1/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "AQ1ZVHTKZBoWbd8qf3CUzymnLTFvGngU84zNjV11EFHs", - "symbol": "MCHP", - "name": "Mint Chip Token", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AQ1ZVHTKZBoWbd8qf3CUzymnLTFvGngU84zNjV11EFHs/logo.png", - "tags": ["social-token"], - "extensions": { - "twitter": "https://twitter.com/MintChipToken" - } - }, - { - "chainId": 101, - "address": "H9qEvSM7FCJUXSG13yss8vT7f82fHySypLqBMrhrfytb", - "symbol": "SB", - "name": "Santa Barberia Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SolanaTokenMerger/Santa-Barberia-Coin/main/logo.png", - "tags": ["social-token", "community-token", "utility-token"] - }, - { - "chainId": 101, - "address": "HighHmwDW4o5QXGXt4n3HsimjLEKnTG4V1DjBwbhyP1i", - "symbol": "SOCIETY", - "name": "High Society Protocol", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HighHmwDW4o5QXGXt4n3HsimjLEKnTG4V1DjBwbhyP1i/logo.png", - "tags": ["community-token", "utility-token", "nft-token"], - "extensions": { - "discord": "http://discord.gg/highsociety", - "twitter": "https://twitter.com/highsocietynfts", - "website": "https://highsocietynft.io/high-society-protocol" - } - }, - { - "chainId": 101, - "address": "TosnWGnUeRM7D6TfVarLNAkFYsKoCUHKnjjd6Bim4jn", - "symbol": "KF", - "name": "Kurama Foxes", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/TosnWGnUeRM7D6TfVarLNAkFYsKoCUHKnjjd6Bim4jn/logo.png" - }, - { - "chainId": 101, - "address": "DN1NuymJZwZWTrLQy4nvS3SC41tJLuPxFy1wNMPemztE", - "symbol": "P-MERC", - "name": "Pre-Sale Mercanti NFT", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DN1NuymJZwZWTrLQy4nvS3SC41tJLuPxFy1wNMPemztE/logo.png", - "tags": ["whitelist-token", "mercanti", "pre-sale"] - }, - { - "chainId": 101, - "address": "Bc24bCVJLC1ugySyRoH9MNExW8VWxN1MZ3XJLsNgzjCe", - "symbol": "DUALITY", - "name": "Duality Dogs", - "decimals": 18, - "logoURI": "https://raw.githubusercontent.com/g0dpain/crypto/main/DDC.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BUzZpkLc97TGJH2oTzixkbRA5KFMUyWaon7iQAqgiQYP", - "symbol": "twn", - "name": "twin coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/smitte10/crypto2/main/twncoin2png.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "KAFE5ivWfDPP3dek2m36xvdU2NearVsnU5ryfCSAdAW", - "symbol": "KAFE", - "name": "Kafe", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/KAFE5ivWfDPP3dek2m36xvdU2NearVsnU5ryfCSAdAW/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "KAFE Token", - "discord": "https://discord.gg/r4vNRUTXY9", - "twitter": "https://twitter.com/TheBuilderDAO", - "website": "https://learn.figment.io/" - } - }, - { - "chainId": 103, - "address": "BDR3oUcZLRQtufDahJskbsxwTvfWt9jiZkJPVr4kUQg2", - "symbol": "BDR", - "name": "Builder", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BDR3oUcZLRQtufDahJskbsxwTvfWt9jiZkJPVr4kUQg2/logo.png", - "tags": ["community-token", "governance-token"], - "extensions": { - "description": "BDR Token", - "discord": "https://discord.gg/r4vNRUTXY9", - "twitter": "https://twitter.com/TheBuilderDAO", - "website": "https://learn.figment.io/" - } - }, - { - "chainId": 101, - "address": "22poAsb2M8gfh7oYEGTBiFFheSzf5tQTsrLKTA2jtbLT", - "symbol": "$GBT", - "name": "GoodBoyToken", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/JakeElder/token-list/main/assets/mainnet/22poAsb2M8gfh7oYEGTBiFFheSzf5tQTsrLKTA2jtbLT/logo.png", - "tags": ["utility-token", "social-token", "nft-token", "community"] - }, - { - "chainId": 101, - "address": "GpkU9GZXznnPwoCttnXFLTq4P9UVzocCUJT8Jsn3MzcC", - "symbol": "DGG", - "name": "Digital Gorilla Genesis", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GpkU9GZXznnPwoCttnXFLTq4P9UVzocCUJT8Jsn3MzcC/logo.png", - "tags": ["community-token", "utility-token", "nft-token"], - "extensions": { - "discord": "https://discord.gg/Yw6TQnVGD8", - "twitter": "https://twitter.com/DigiGorillaNFT" - } - }, - { - "chainId": 101, - "address": "36pVTMos1K66AHSk8N3R27dPCzvMMziUpU8bHBHn2Qky", - "symbol": "RHLM", - "name": "Refined Land Metaverse HOMES", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/36pVTMos1K66AHSk8N3R27dPCzvMMziUpU8bHBHn2Qky/logo.jpg" - }, - { - "chainId": 101, - "address": "5SdcK6tKKemj1fmq447mxpkFd3H33K96ZmACY9TbbZdR", - "symbol": "LZRD", - "name": "Lizard Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5SdcK6tKKemj1fmq447mxpkFd3H33K96ZmACY9TbbZdR/logo.png", - "tags": ["utility-token", "community"], - "extensions": { - "discord": "https://discord.gg/x8XmhEJxbg", - "twitter": "https://twitter.com/MasonicLizards", - "website": "https://www.masoniclizards.com/" - } - }, - { - "chainId": 101, - "address": "epchejN2prm44RwMfWetBkbMr4wnEXHmMN9nmKyx2TQ", - "symbol": "EPOCH", - "name": "Playground Epoch Droplet", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/epchejN2prm44RwMfWetBkbMr4wnEXHmMN9nmKyx2TQ/logo.png", - "tags": ["utility-token", "solvent-droplet"], - "extensions": { - "discord": "https://discord.gg/thK8BCtQbM", - "github": "https://github.com/solventprotocol", - "medium": "https://medium.com/@solventprotocol", - "serumV3Usdc": "2QxNtz8xeSZeY5kmFsGUbsqwqE5zQXdMfeHYUac1KvuT", - "telegram": "https://t.me/solventprotocol", - "twitter": "https://twitter.com/solventprotocol", - "website": "https://solvent.xyz" - } - }, - { - "chainId": 101, - "address": "7k5WRFxyHveTDVJiNj69r8pboregzRSTdoRvmBaETe3w", - "symbol": "4x4NFC", - "name": "RANGER", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7k5WRFxyHveTDVJiNj69r8pboregzRSTdoRvmBaETe3w/logo.png", - "tags": ["4x4-Fan-Club", "4x4FC", "utility-token", "virtual-currency"], - "extensions": { - "website": "https://gateway.pinata.cloud/ipfs/Qmb8pC2899CwCT4bywgP2Tjs61aP5csa9nHcmLfQzhHJWH" - } - }, - { - "chainId": 101, - "address": "8aAgMxie1DizqcYhxoSz2CMPMaDCpfe7ty3kLK9nWigN", - "symbol": "Exg", - "name": "Exchg", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8aAgMxie1DizqcYhxoSz2CMPMaDCpfe7ty3kLK9nWigN/logo.png", - "tags": ["social-token", "community-token", "utility-token"] - }, - { - "chainId": 101, - "address": "qs37APvkooUwjD2R6kKjdULUERFDp3hvJqykUq6g3b9", - "symbol": "KRKO", - "name": "Kersh Koin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/nkorte1/crypto/5541c8935777e71eefb60fa53000a5452c302fb3/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2TsiN3BxBYUqGfckjRdXLC47FEtihddcLub45kc5sEVK", - "symbol": "KOT", - "name": "Kotlet Koin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/teohz/crypto/master/kotlet.png", - "tags": ["social-token", "community-token", "utility-token"] - }, - { - "chainId": 101, - "address": "HTFSPU2KwKh7nhBPUraTjd8jbhU2VA6Vm5XcdTSrHmfu", - "symbol": "RBIT", - "name": "Ribbit", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HTFSPU2KwKh7nhBPUraTjd8jbhU2VA6Vm5XcdTSrHmfu/logo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CcVSZpJQcViLSA6q7oVnFeLpvTwznhhKKfkNFw7TF2Ew", - "symbol": "SNDMN", - "name": "Sandman", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/sndmn-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CF9uE7Z4FfJz71zkVpJMeCSME2D5mBgbSy2gtWeaWyTH", - "symbol": "WAGON", - "name": "Wagon", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/wagon-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3rUgGMf8xBiJ9mcd3rS772iuU96nuE7JwGcxZGkeGDti", - "symbol": "YUMMY", - "name": "Treat", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/yummy-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HnU8xRe94VeRo2gGSKvo8PeFfzEioDXhK9mb7N6YGTXD", - "symbol": "HAHA", - "name": "Trick", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/haha-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5pWwUABvbh7v6ofwxJLanexojbgPP9YEo2fS1haJQF8M", - "symbol": "D", - "name": "D", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/d-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7LFXbvJbWBEBXzW4TqBd2jRSvyXx7q8W8ZTqnfQ6bmRa", - "symbol": "EFF", - "name": "F", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/eff-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7TzPNjubR4JjmEskAj7HuRETqJkiYbbbFHuZAoo42Sx3", - "symbol": "HVAC", - "name": "HVAC", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/hvac-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8Kb1iFskhn2qUtBXjtq2kyDd1MWZXjRSDhQW5haw6uJu", - "symbol": "PRRR", - "name": "Cat", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/prrr-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "37FZ5LNTdMTD7Sy3HVHsbbmPnauUmKPdsxuJyx4wQVzd", - "symbol": "COINAGE", - "name": "Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/coinage-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ToqN59DwBwzxfXD6v7EFUAbNLXpZHdzRfAJc1hqpP5V", - "symbol": "CNFT", - "name": "Cool TokenNFT", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Yash094/Testing-App/main/logo512.png", - "tags": ["cools"] - }, - { - "chainId": 101, - "address": "WEbtb1LUhR8h44nvze1fLNeWXXSM4M9dtWxXT3r61ft", - "symbol": "MRCS", - "name": "Merces Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WEbtb1LUhR8h44nvze1fLNeWXXSM4M9dtWxXT3r61ft/logo.png", - "tags": ["community-token", "story-token"], - "extensions": { - "instagram": "https://www.instagram.com/mercestoken", - "twitter": "https://twitter.com/mercestoken", - "website": "https://mercestoken.com" - } - }, - { - "chainId": 101, - "address": "8jNL59bysGpwcBLcdUY3mHUe3i5tKX8mimeQZDBqYXzs", - "symbol": "iTHING", - "name": "IoT", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/ithing-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "AqETemBd52MRXi1e26rV7yasVtP4F6wWGUvdUcBkE5TB", - "symbol": "LIT", - "name": "Lion Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AqETemBd52MRXi1e26rV7yasVtP4F6wWGUvdUcBkE5TB/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "C5quBbSnDjLpdVuCQnJF38Uw3arfmHUNCPGPDR2L8cyh", - "symbol": "Janus", - "name": "Janus Finance", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/0e419de885631f7331e395e0acf5a1cac6d6ea4d/assets/mainnet/C5quBbSnDjLpdVuCQnJF38Uw3arfmHUNCPGPDR2L8cyh/janis.png", - "tags": ["DeFi", "Utility-token"], - "extensions": { - "twitter": "https://twitter.com/FinanceJanus" - } - }, - { - "chainId": 101, - "address": "8sxPUxRSRQD6vdvNLC65VMdLrjkbyyEtRfw4aMasvjUR", - "symbol": "Umi", - "name": "Umi", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8sxPUxRSRQD6vdvNLC65VMdLrjkbyyEtRfw4aMasvjUR/umi.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "6FfKvzcHxo2no9MwLs8FHXDxBhQj1Sg7Q4H3WnyhmHDw", - "symbol": "Hikari", - "name": "Hikari", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6FfKvzcHxo2no9MwLs8FHXDxBhQj1Sg7Q4H3WnyhmHDw/hikari.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "AbD4ZqLj1xXwRWnnEGfuLK5KRfynSuNXRHLkQ9ntNcjg", - "symbol": "Kaze", - "name": "Kaze", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AbD4ZqLj1xXwRWnnEGfuLK5KRfynSuNXRHLkQ9ntNcjg/kaze.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "7xGviwPk9Fj2YFLLoZdXZzj64TwQe9ysVS7JawHKaePD", - "symbol": "Konoha", - "name": "Konoha", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7xGviwPk9Fj2YFLLoZdXZzj64TwQe9ysVS7JawHKaePD/konoha.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "E1XbcaMheKrvRbaM8rMVnJkHJ9EYpHZCX6xctsDQ73Pp", - "symbol": "Zio", - "name": "Zio", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/E1XbcaMheKrvRbaM8rMVnJkHJ9EYpHZCX6xctsDQ73Pp/zio.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "GbGg3uoYBjbY7PKbKsFi1vHE36PRVk8ycu5k5Ay9ojuN", - "symbol": "CHRIS", - "name": "Chris Token", - "decimals": 9, - "logoURI": "https://github.com/chris400p/crypto/blob/main/chrisb.png", - "tags": ["community-token", "story-token"] - }, - { - "chainId": 101, - "address": "DwmaUsVcYy9NoynnhwH1YfXKPwotjTKQgVW9bwZW4z7E", - "symbol": "MEEN", - "name": "MEENcoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MEENcoin/MEEN/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "24iJjSNbD3nZdjBi3UPcgwxDLZhAGd1GQozSy8JRpvaW", - "symbol": "ISHA", - "name": "Isashii Coin", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/MIpito/isashii/main/logo.png", - "tags": [ - "natural", - "technology", - "economy", - "mining", - "ecology", - "electricity" - ] - }, - { - "chainId": 101, - "address": "5Emw7mifMM86nfHhyMC12p8pAW5DvWTFJeFtsP7DBHn2", - "symbol": "WATR", - "name": "Metajuana", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/XAGBack/MCSTOKEN/main/WATR.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Gq5xdBxA39rRN5GsnJtodAnkqvFDQ4YxkEG3N7rS8XHw", - "symbol": "KTR", - "name": "Kotaru", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Gq5xdBxA39rRN5GsnJtodAnkqvFDQ4YxkEG3N7rS8XHw/logo.png", - "tags": ["NFT", "GAMEFI", "Staking"], - "extensions": { - "description": "Kotaru is an SPL token of Kotaru Sharks, an NFT collection of sharks living on the Solana blockchain that love to play poker and vibe with friends.", - "discord": "http://discord.gg/kotarosharks", - "twitter": "https://twitter.com/KotaroSharks" - } - }, - { - "chainId": 101, - "address": "6pyFwtq8wZPumC2owaACuo4XS8qSWnKbWaw5rW4omuLh", - "symbol": "DOODLE", - "name": "Doodle Loot", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6pyFwtq8wZPumC2owaACuo4XS8qSWnKbWaw5rW4omuLh/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CwLtCWJn5ppiTn9iheykBVTVD92JouBCjjL4bHt1xP7w", - "symbol": "SHINI", - "name": "Shinigami Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/hackvice/Crypto/main/logo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "J2qkpFsE1P8E12hyqEBcGrMumLQEnzkfTaADW49PXZy1", - "symbol": "CBDB", - "name": "CBDB WL Token", - "decimals": 0, - "logoURI": "https://arweave.net/DGcHG6Cqx6pm58JIlUsERiSbAXyobwnML3d5DZfF1ig", - "tags": ["whitelist-token", "utility-token"], - "extensions": { - "twitter": "https://twitter.com/ChibiDBs", - "website": "https://www.chibidbs.com/" - } - }, - { - "chainId": 101, - "address": "BrYZZjDTGzZXLsL3ABCYNa5ArQd48kJbhTyhbTp2fgq", - "symbol": "CRF", - "name": "CryptoFinn", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/FinnInBinn/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Bpx6rPot4m7nhxEEnagokTbRqnaMeZXPnKsTEurNcgQR", - "symbol": "DOOX", - "name": "DOOX Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/rce171/crypto/main/doox_coin_logo.png", - "tags": ["tech-token", "technology", "social-token"] - }, - { - "chainId": 101, - "address": "7DpRoxt4gzQnbtBavWi6VyBY75fBPuoRNsBmr7KxeBDm", - "symbol": "MHL", - "name": "Mahalo Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7DpRoxt4gzQnbtBavWi6VyBY75fBPuoRNsBmr7KxeBDm/logo.png", - "tags": ["social-token", "tech-token"], - "extensions": { - "website": "https://github.com/blagoon" - } - }, - { - "chainId": 101, - "address": "8G1SG7q8VyqCrjH7VjG9fouDDmHYJaYBMzBomdcUZ1qX", - "symbol": "CACTI", - "name": "CACTI", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8G1SG7q8VyqCrjH7VjG9fouDDmHYJaYBMzBomdcUZ1qX/logo.png", - "tags": ["social-token", "utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/stranded_cactus" - } - }, - { - "chainId": 101, - "address": "73cnggNzqCd6PSdFVjJ2ohzvGYyrJhygKfj2Sjqi9zhx", - "symbol": "AK", - "name": "King Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/King4715/Crypto/main/King.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6sZdGff2HusNB4M4yqQxmfZicdwSMzjTF8axXeW4nQ2N", - "symbol": "CATZ", - "name": "Cat Cash", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6sZdGff2HusNB4M4yqQxmfZicdwSMzjTF8axXeW4nQ2N/logo.png", - "tags": ["community-token"], - "extensions": { - "website": "https://www.catsonmats.com" - } - }, - { - "chainId": 101, - "address": "5KmzqxNmxEz7mdhckVNb36BKztVWNdggeMfa71H9RfX4", - "symbol": "Solnex", - "name": "Solnex", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5KmzqxNmxEz7mdhckVNb36BKztVWNdggeMfa71H9RfX4/logo.jpg" - }, - { - "chainId": 101, - "address": "8vrcRzHfVCnW4EkGdoYFYzwYhN7GdUYjED2nL7BbcGQx", - "symbol": "JLFC", - "name": "Joseph Fermin Inc", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/JLFC2644/JFLC/main/JLFC.png", - "tags": ["community-token", "meme-token", "social-token"], - "extensions": { - "twitter": "https://twitter.com/josephFermin0", - "website": "http://josephfermin.com//" - } - }, - { - "chainId": 101, - "address": "CuZt4XCzqpPNLSqNeocNhZDBkDTgUwGFiURmkfuWiASw", - "symbol": "HEYRST", - "name": "Ankkurikeula", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Heyrst/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6KC8AU1Tm39sVvmwBkXBzW82XtHaRgSZqufQET9YipHY", - "symbol": "NEAR", - "name": "Near Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6KC8AU1Tm39sVvmwBkXBzW82XtHaRgSZqufQET9YipHY/logo.png", - "extensions": { - "facebook": "https://www.facebook.com/NearcastHQ", - "instagram": "https://www.instagram.com/NearcastHQ/", - "linkedin": "https://www.linkedin.com/company/nearcast", - "twitter": "https://twitter.com/NearcastHQ", - "website": "https://www.nearcoin.com/", - "youtube": "https://www.youtube.com/channel/UCqvbKHoV0xaReGts8oedmnQ" - } - }, - { - "chainId": 102, - "address": "HEixDWPG1cTMdCDimN67oGc5SjbbVMMSDGJSX3G2Fyez", - "symbol": "WORKS", - "name": "WorksToken", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HEixDWPG1cTMdCDimN67oGc5SjbbVMMSDGJSX3G2Fyez/logo.png" - }, - { - "chainId": 101, - "address": "3hWBSqyHrJMDkSuAQtBYHwgKmMbJ666we5xegfDmMzGd", - "symbol": "CURSE", - "name": "Cursed Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3hWBSqyHrJMDkSuAQtBYHwgKmMbJ666we5xegfDmMzGd/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "ToSPoMNzvaZquVYDVdapSYcyM7rJcHykpjFPFz7BYSR", - "symbol": "ColorShape", - "name": "ColSha token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ToSPoMNzvaZquVYDVdapSYcyM7rJcHykpjFPFz7BYSR/logo.png", - "tags": ["utility-token", "community-token", "meme-token"], - "extensions": { - "twitter": "https://twitter.com/berczi17" - } - }, - { - "chainId": 101, - "address": "4XSvxSJBmsWzw63QMYQRf5WxfC4b2hLNNeoYp9Fbugkb", - "symbol": "CSxB", - "name": "Code Sydney test B", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/codesydney/assets/main/logo/test/hexagon.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EiyHq2uL3AYCq7VREs69RbbMC6Ccj5vfYGpqFptb2Zie", - "symbol": "NZT", - "name": "NineZulu Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EiyHq2uL3AYCq7VREs69RbbMC6Ccj5vfYGpqFptb2Zie/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Ed5nxXh2TT1Ry7MuX4Hi5YuCAnjmXEcpJ9LhdmDbCFQS", - "symbol": "FUM", - "name": "FUM", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Ed5nxXh2TT1Ry7MuX4Hi5YuCAnjmXEcpJ9LhdmDbCFQS/logo.png", - "tags": ["social-token", "utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/SolSquatchNFT", - "website": "https://solsquatch.io/" - } - }, - { - "chainId": 101, - "address": "CeRbm5araoFjmW7UGc5D85vHjD1gTUBMHuVynyqLLHa7", - "symbol": "BFND", - "name": "Boyfriend", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/bfnd-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CbvgsXZfdfSbPn7crh34oYAvLfBbTZDSLcrxbgZsiVBk", - "symbol": "GFND", - "name": "Girlfriend", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/gfnd-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BZScomZJmrJs5DUjyPUH24Sz2srPFdqTcbEzk4WknLhW", - "symbol": "BFF", - "name": "Best Friend", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/bff-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CnLsjg3xZ8rtNg41DA9cXUTtF6VWL78UKr2RygjqcGo5", - "symbol": "HUS", - "name": "Husband", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/hus-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Coq3LbB52jzCxk5W8SJTyK3SB83sYTKEjs2JmHaoSGxS", - "symbol": "WIF", - "name": "Wife", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/wif-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HXgUrXgfVEmjpt1oaNjogj2XxL5QzbrgN1Sqjyv7o184", - "symbol": "HDO", - "name": "Honey-Do", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/hdo-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DMHjU5u3X9ZLRsoxufWa53WjfT84TXKH15ePANskj6UL", - "symbol": "DTNT", - "name": "Date", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/dtnt-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2qNQBY77aeTWK141weqvSpeQ84DdHM3AvujffpWVSQXS", - "symbol": "LOL", - "name": "Laugh", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/lol-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "58D4h2DhKq3256NEK5geK4S6DzYDXxm9nNAhW5FAJ5gq", - "symbol": "DINE", - "name": "Dinner", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/dine-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "69eLQE1AvjBpjskJrDSVbkNKY4Z6J61A9BjGfxqEuH6x", - "symbol": "TAIN", - "name": "Entertainment", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/tain-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9vbTWQTmdKZed35iC14Q1XiQp7syUWwfwQZLXVrjnkxt", - "symbol": "BUY", - "name": "Shop", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/buy-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "mxhhKrBKjb8jzJYYoe6pYGMA4Qgr7ZD4wirHM3cHLdm", - "symbol": "NCM", - "name": "Income", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/ncm-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ocPTPpMQZVMuTNxraMNyqxsAzHoxagA1RrP68HZvyHm", - "symbol": "XPS", - "name": "Expense", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/xps-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "T2uNWp4uzFkVHei6qkqVywvzxR2Rde9Zgt8pfC4G8nJ", - "symbol": "SET", - "name": "Wealth", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/set-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GooetU7meKL6HbnGj6ZiNAGC41nHX8a8P8jyyGWppnpY", - "symbol": "FRDM", - "name": "Freedom", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/frdm-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4UZzWmagD4QKRnmp94cM5BXQdVbspDXmKR57efcwkpWX", - "symbol": "HT", - "name": "Heat", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/ht-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4V3g5mrjZeExqLMpJfmtHXmJsaxGpCW2hn6uj4FG54XL", - "symbol": "CL", - "name": "Cool", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/cl-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "46KYqqwbiuMipGidYos9LaMZNNteobscuqxP9jo3Taes", - "symbol": "BRIGHT", - "name": "Light", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/bright-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "96f3LWFcQo8amNTekr1wAUMRWQ99bV53D6xn2nbmgU2w", - "symbol": "SNCK", - "name": "Snack", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/snck-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DE3qpVWZuomEkXgBWD9r1u4EtkVDAFvQzrsxg6DnTzF1", - "symbol": "DIET", - "name": "Diet", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/diet-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5cdoDqerd9AbmouZQrFnRVMSimo7G4kVXTKQf98WiKkv", - "symbol": "Gummi", - "name": "Gummi Bear Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5cdoDqerd9AbmouZQrFnRVMSimo7G4kVXTKQf98WiKkv/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/GummiBears_NFT" - } - }, - { - "chainId": 101, - "address": "86BrHAcZijW11wXTP4MqWYJoLZc8HL1egp8XuG8LfDCt", - "symbol": "JOSE", - "name": "JoseCoin", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/JoseCoin/Crypto/main/JoseCoin.png", - "tags": ["jose-knows-token"] - }, - { - "chainId": 101, - "address": "4uoMXiEP1thMEsFjT9kQ8HyM1wYgx7CN6gV8waeEvqMy", - "symbol": "UBU", - "name": "UBU Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/UBUcares/UBUcrypto/main/UBUcares-crypto-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2S6vF5KfLUCBoBahC3QkWzTG4XSnJ7RbpM1hf3dmiEUp", - "symbol": "Zim", - "name": "Zim", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/danwdgc/Zim/main/logo.png", - "tags": ["currency-token", "financial-token"] - }, - { - "chainId": 101, - "address": "8KA12axBKQK5FG3SqTR1WU7ybvw5M3YDQEAHmk8eop8P", - "symbol": "MMJ", - "name": "MeetingMaryjane", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Neojunkerr/crypto/main/MMJ.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "G2apZqTaccBmBipn9NLTXo4MJ6XbJ4z2EZmDGrtrZfam", - "symbol": "ROOTER", - "name": "Rooter Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/G2apZqTaccBmBipn9NLTXo4MJ6XbJ4z2EZmDGrtrZfam/logo.png", - "tags": ["nft-token"], - "extensions": { - "website": "https://www.rooter.gg/" - } - }, - { - "chainId": 101, - "address": "H1CHW4k7e8PMrhT4DuaEQSaXMvhtkLtuuBFY24JfbzZ3", - "symbol": "SNC", - "name": "SnowCoin", - "decimals": 0, - "logoURI": "https://github.com/ri3m4nn/crypto/blob/main/Polish_20220207_030852210.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3vXYrqQkKpebReDPUaD1CseA3cWiqfxgPuKTe5aGL17U", - "symbol": "SOUL", - "name": "Lost Souls", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/9635375b050718ed272108309818f1d4347e0ca2/assets/mainnet/soul.png", - "extensions": { - "twitter": "https://twitter.com/solanalostsouls", - "website": "https://discord.com/invite/efkrna3jbs" - } - }, - { - "chainId": 101, - "address": "5d7twcViTUiQVLdbKBYSv9Je1DeKkTsTyfEhx6vVvLpL", - "symbol": "MUSK", - "name": "Musk Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/haydenzeller/MUSK/main/musk.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "tABbYiZsg2msMsPx9wZeJVJpBdCBdGBKDMTuy3XnH2V", - "symbol": "TABBY", - "name": "TABBY", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/tABbYiZsg2msMsPx9wZeJVJpBdCBdGBKDMTuy3XnH2V/logo.png", - "extensions": { - "twitter": "https://twitter.com/tabbycoinmeow", - "website": "https://tabbylaunch.io" - } - }, - { - "chainId": 101, - "address": "5qjK1py1gFa1XSEpBjgXZtUE2JKYxNLNm3MvQqMAuCN3", - "symbol": "SOVG", - "name": "Sovana - Guard", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5qjK1py1gFa1XSEpBjgXZtUE2JKYxNLNm3MvQqMAuCN3/logo.png", - "extensions": { - "website": "https://www.sovana.world" - } - }, - { - "chainId": 101, - "address": "Gqu3e6x4iN5rGJwAEeCwQFsuuYP5dpvmB9ise2sufrcs", - "symbol": "SOVO", - "name": "Sovana - Oracle", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Gqu3e6x4iN5rGJwAEeCwQFsuuYP5dpvmB9ise2sufrcs/logo.png", - "extensions": { - "website": "https://www.sovana.world" - } - }, - { - "chainId": 101, - "address": "D63gfFT3YE7GXUShznPXEVPJwoKhdWw2psHmrxjBTt1M", - "symbol": "SOVD", - "name": "Sovana - Degen", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/D63gfFT3YE7GXUShznPXEVPJwoKhdWw2psHmrxjBTt1M/logo.png", - "extensions": { - "website": "https://www.sovana.world" - } - }, - { - "chainId": 102, - "address": "CmGD1rbJoEDE2vtGfeJx9Uje8ijYJSiSQV76WwmxHpXy", - "symbol": "WORKS", - "name": "WORKS", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CmGD1rbJoEDE2vtGfeJx9Uje8ijYJSiSQV76WwmxHpXy/logo.png" - }, - { - "chainId": 101, - "address": "G4Kigjc2hAs4UaeaAsUvWF4Pcsjuv8VQqJLtZpoF37sB", - "symbol": "MRLN", - "name": "Merlin Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/lewixlabs/merlin-solana-token/main/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://github.com/lewixlabs/merlin-solana-token" - } - }, - { - "chainId": 101, - "address": "NQV11Y41dpwJjXA7BwUVNJh3uf9fFChLgdn97dqPCNp", - "symbol": "VENE", - "name": "VenehKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/hartoken/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9hNfQggmq5QaWtf2HjjSvSSM18iCW4qF4kPUu4kZkMJS", - "symbol": "NMTM", - "name": "Naughty_Token", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/zung1/logo/main/logo.png", - "tags": ["Test-token"] - }, - { - "chainId": 101, - "address": "9Jum2noBrYYT8Mt6VFJ9kPcGc4mXS7vDJzuAUAkBgmXP", - "symbol": "ARTJ", - "name": "ArtCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/unimintco/token-logos/main/ARTJ/logo.png", - "tags": ["corporate"], - "extensions": { - "facebook": "https://facebook.com/artjoker.ua", - "instagram": "https://instagram.com/artjoker_official", - "linkedin": "https://linkedin.com/company/artjoker-software", - "telegram": "https://t.me/hello_artjoker", - "website": "https://artjoker.net", - "youtube": "https://www.youtube.com/user/artjokerua" - } - }, - { - "chainId": 101, - "address": "DgCZDUPm5PapUMZ3F9jbB62zDqzgpuBKgdANz34u7KL8", - "symbol": "GOSHT", - "name": "Gosht Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/GoshNFT/uploads/main/logo.png", - "tags": ["social-token"], - "extensions": { - "facebook": "https://www.facebook.com/goshnft", - "instagram": "https://www.instagram.com/goshnft/", - "linkedin": "https://www.linkedin.com/company/goshnft", - "telegram": "https://t.me/GoshNFT", - "twitter": "https://twitter.com/GoshNft", - "website": "https://www.goshnft.com/" - } - }, - { - "chainId": 101, - "address": "2CyctHvyb8ioWM35doYQHaGk6UpYX5jo24oL3mgGKwe6", - "symbol": "WBT", - "name": "Webbeat", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2CyctHvyb8ioWM35doYQHaGk6UpYX5jo24oL3mgGKwe6/logo.png" - }, - { - "chainId": 101, - "address": "Cf31XKvBYx287TL8C1XBmDuLPDL8BKzozwkFC58RTqC6", - "symbol": "NEU", - "name": "Neuron", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Cf31XKvBYx287TL8C1XBmDuLPDL8BKzozwkFC58RTqC6/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/SolanaBrains", - "website": "https://solbrains.com" - } - }, - { - "chainId": 101, - "address": "CnzCjrBQNzcwG1XEfBtP6kfvsbkLmXmSsHxR6UwgfXYQ", - "symbol": "$INV", - "name": "Invokers Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CnzCjrBQNzcwG1XEfBtP6kfvsbkLmXmSsHxR6UwgfXYQ/logo-iv.png", - "tags": ["social-token", "nft", "game"] - }, - { - "chainId": 101, - "address": "MoscKLpTs9EV4ADTCGYATt1cHLdmybZ7215gKTdWAq7", - "symbol": "MOSC", - "name": "Moscovium", - "decimals": 9, - "logoURI": "https://arweave.net/i1bb-mYGWpJyDivUpnyExbYfvefgH-NcsLhsCMGeAjc", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/Metazillas", - "website": "http://metazillas.io/" - } - }, - { - "chainId": 101, - "address": "2mXvNjEjY4QaQaWEAcaxojCHP7m8iujD97hZ3KEx13k6", - "symbol": "OGN", - "name": "Okegani", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/slaveofcode/okegani-assets/master/images/ogn.png", - "tags": ["social-token", "community-token", "nfts"] - }, - { - "chainId": 101, - "address": "HDzAraAsi2WaxmyAby7W4xQHx6Z5VgfweAcPxRHwnefE", - "symbol": "MDL", - "name": "MDL Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mihbo75/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6crJB6HHyAdiuMYjW9W8p6i4QSfBmRPTw1xbrG8zXfHy", - "symbol": "FRC", - "name": "Frederikk Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/LorenzoMann/crypto/main/FC.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CjxPDfH3EX2gp3qypLbwmePyehwpsvU3Qc7GmxP3LQQG", - "symbol": "HOOTS", - "name": "SolOwl Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CjxPDfH3EX2gp3qypLbwmePyehwpsvU3Qc7GmxP3LQQG/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://t.co/iOUr4IKfcm", - "twitter": "https://twitter.com/owlsofsol", - "website": "https://solowl.io" - } - }, - { - "chainId": 101, - "address": "4HU3YPmYuejnEXhG24dUmFuVwvtkYqebdanqqubRsiFP", - "symbol": "BEAC", - "name": "Beatcoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/asdrubalchirinos/beatcoin/main/Beatcoin.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "HjChwVRT1WjbdDx6ikyKp4qXWLowXfneQZ6MXJd5Zw6p", - "symbol": "PoSB", - "name": "PoSB Doubloon", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HjChwVRT1WjbdDx6ikyKp4qXWLowXfneQZ6MXJd5Zw6p/logo.png", - "tags": ["posb-token", "doubloon", "test"] - }, - { - "chainId": 101, - "address": "GePFQaZKHcWE5vpxHfviQtH5jgxokSs51Y5Q4zgBiMDs", - "symbol": "JFI", - "name": "Jungle DeFi", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GePFQaZKHcWE5vpxHfviQtH5jgxokSs51Y5Q4zgBiMDs/logo.png", - "tags": ["governance-token"], - "extensions": { - "description": "The Jungle Finance governance token.", - "discord": "https://discord.gg/2DWjx5NywE", - "medium": "https://medium.com/@JungleDeFi", - "twitter": "https://twitter.com/JungleDeFi", - "website": "https://jungledefi.io/" - } - }, - { - "chainId": 101, - "address": "TosKhWRKkaf3Bc6c5j3BYRx8EQn8w17xVRx1HAvv2zV", - "symbol": "PD", - "name": "Pixel Drugs Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solodevo/pixeldrugs/main/token.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "discord": "https://discord.gg/Hd97U9z3eg", - "twitter": "https://twitter.com/PixelDrugs", - "website": "https://www.pixeldrugs.com" - } - }, - { - "chainId": 101, - "address": "D3Cu5urZJhkKyNZQQq2ne6xSfzbXLU4RrywVErMA2vf8", - "symbol": "cSLND", - "name": "Solend SLND", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/D3Cu5urZJhkKyNZQQq2ne6xSfzbXLU4RrywVErMA2vf8/logo.png", - "tags": ["solend", "lending", "collateral-tokens"], - "extensions": { - "website": "https://solend.fi" - } - }, - { - "chainId": 101, - "address": "6XrbsKScacEwpEW5DVNko9t5vW3cim9wktAeT9mmiYHS", - "symbol": "cUSDT-USDC", - "name": "Solend USDT-USDC", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6XrbsKScacEwpEW5DVNko9t5vW3cim9wktAeT9mmiYHS/logo.png", - "tags": ["solend", "lending", "collateral-tokens"], - "extensions": { - "website": "https://solend.fi" - } - }, - { - "chainId": 101, - "address": "4icXEpFVMrcqob6fnd3jZ6KjKrc6cqre6do1f8kKAC1u", - "symbol": "cmSOL-SOL", - "name": "Solend mSOL-SOL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4icXEpFVMrcqob6fnd3jZ6KjKrc6cqre6do1f8kKAC1u/logo.png", - "tags": ["solend", "lending", "collateral-tokens"], - "extensions": { - "website": "https://solend.fi" - } - }, - { - "chainId": 101, - "address": "QQ6WK86aUCBvNPkGeYBKikk15sUg6aMUEi5PTL6eB4i", - "symbol": "cstSOL", - "name": "Solend stSOL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/QQ6WK86aUCBvNPkGeYBKikk15sUg6aMUEi5PTL6eB4i/logo.png", - "tags": ["solend", "lending", "collateral-tokens"], - "extensions": { - "website": "https://solend.fi" - } - }, - { - "chainId": 101, - "address": "AFq1sSdevxfqWGcmcz7XpPbfjHevcJY7baZf9RkyrzoR", - "symbol": "cscnSOL", - "name": "Solend scnSOL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AFq1sSdevxfqWGcmcz7XpPbfjHevcJY7baZf9RkyrzoR/logo.png", - "tags": ["solend", "lending", "collateral-tokens"], - "extensions": { - "website": "https://solend.fi" - } - }, - { - "chainId": 101, - "address": "3JFC4cB56Er45nWVe29Bhnn5GnwQzSmHVf6eUq9ac91h", - "symbol": "cmSOL", - "name": "Solend mSOL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3JFC4cB56Er45nWVe29Bhnn5GnwQzSmHVf6eUq9ac91h/logo.png", - "tags": ["solend", "lending", "collateral-tokens"], - "extensions": { - "website": "https://solend.fi" - } - }, - { - "chainId": 101, - "address": "E9LAZYxBVhJr9Cdfi9Tn4GSiJHDWSZDsew5tfgJja6Cu", - "symbol": "cORCA", - "name": "Solend ORCA", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/E9LAZYxBVhJr9Cdfi9Tn4GSiJHDWSZDsew5tfgJja6Cu/logo.png", - "tags": ["solend", "lending", "collateral-tokens"], - "extensions": { - "website": "https://solend.fi" - } - }, - { - "chainId": 101, - "address": "AZci9R148CU6hfnnE8ffm2K5mkxagbnTAZNQF5fLbvHb", - "symbol": "CUSE", - "name": "CuseTheJuice", - "decimals": 9, - "logoURI": "https://github.com/CuseTheJuice/token-list/blob/main/assets/mainnet/AZci9R148CU6hfnnE8ffm2K5mkxagbnTAZNQF5fLbvHb/logo.png?raw=true", - "tags": ["social-token"], - "extensions": { - "discord": "https://discord.gg/xHpRcRKG", - "twitter": "https://twitter.com/CuseTheJuice" - } - }, - { - "chainId": 101, - "address": "AR1AwFBUTQ2QNrKaY1vAMmHqqwQWGfX3bzxSaqJ76uPd", - "symbol": "CLIP", - "name": "Clip Finance", - "decimals": 9, - "logoURI": "https://i.ibb.co/M19crq9/gallery-1.png", - "tags": ["Lending-Protocol", "DeFi"], - "extensions": { - "twitter": "https://twitter.com/ClipFinance", - "website": "https://www.clip.finance" - } - }, - { - "chainId": 101, - "address": "6jeSdTbLzrgSpnATG38zQJLfEVwbrP8WXxzzgmsVpRFW", - "symbol": "PRMD-USDC", - "name": "PRMD-USDC LP", - "decimals": 9, - "logoURI": "https://user-images.githubusercontent.com/84945202/152856372-8691eef7-6eb4-40b3-a307-0e033104fa9f.png", - "tags": ["PRMD", "primordials-coin"], - "extensions": { - "twitter": "https://twitter.com/Primordialsgame", - "website": "https://primordialsgame.com/" - } - }, - { - "chainId": 101, - "address": "B9LtfDZWWRrihYu8jDN57thcqqi7xfWAvj8yq4o2YJxw", - "symbol": "UPB", - "name": "Upbring Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SOLreaper88/Upbring-Logo/main/UpbringLogo.PNG", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "e66ioN3eaRDSnKfHZrB72Nr6eBUZxxq1ZDHxnHdnFmo", - "symbol": "BLDRA", - "name": "Balandra", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/AKDEVFD/btit/main/logo.png", - "tags": ["social-token", "nft", "game"] - }, - { - "chainId": 101, - "address": "3UmGKDt2wvwaU3C5L711ikNMtM2fwrB5qpyCm1DDPC71", - "symbol": "YADA", - "name": "DAVSHALONA", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/yanivberg/tiktoken/main/yada.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AnQdNTJKgU5TY9YYnFMBaL6Hfc7uUGZzSkZVduPVCfMx", - "symbol": "BAOP", - "name": "PromiseCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/justcallmetk/cryptotokenexperiment/main/logo.png", - "tags": ["utility-token", "social-token", "educational-token"] - }, - { - "chainId": 101, - "address": "8yiekaUUidqA8bQ5QuWGNgrSDCnZVf5te6ZykGeY8roa", - "symbol": "MANIAK", - "name": "Maniak NFT", - "decimals": 9, - "logoURI": "https://github.com/OmiCodez/maniaktoken/raw/main/logo.png", - "tags": ["utility-token", "NFT"], - "extensions": { - "twitter": "https://twitter.com/ManiakNFT1", - "website": "https://maniak-nft.space" - } - }, - { - "chainId": 101, - "address": "xinvJyYM2DK7gZrntebb23sJfZWYhbCArsVaWZtepjN", - "symbol": "XINV", - "name": "XInvoke", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/xinvJyYM2DK7gZrntebb23sJfZWYhbCArsVaWZtepjN/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "8CuXwnLm71jRLRNJ4Lv92JWCiE9SSmwKSyG6Xg812kVY", - "symbol": "FKA", - "name": "FRANKA", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SolanaTokenMerger/FRANKA-COIN/main/logo.png", - "tags": ["social-token", "community-token", "utility-token"] - }, - { - "chainId": 101, - "address": "HBSPEVBvSJbRXmeyf7gYSZbPeLjZQTBeNotjsSrtqHTe", - "symbol": "HBWT", - "name": "Happy Bunnies Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HBSPEVBvSJbRXmeyf7gYSZbPeLjZQTBeNotjsSrtqHTe/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HzPdErnvgJCUVHYJ78o4HvpdErcGCkd75fBQYabbp6uR", - "symbol": "GBL", - "name": "GLOBAL COIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Marianngg/crypto/main/GLOBALcripto.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EVA7k8PYK3VkSXvV29uUjS3VXzfUN89Vc8etkW4quxKc", - "symbol": "TIPS", - "name": "Mystic Money", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/CMHayden/crypto/master/MysticLogo.png?token=GHSAT0AAAAAABPUDPL3K4KVVCNUVAPF6YMOYQKYTGQ", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2RUXbnyJHkVMuKXW1shAjKVPxgSmi1LQRuYcHUe7NeUW", - "symbol": "ENFENDI", - "name": "ENFENDI", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/hoops773/enfendi/main/IMG_8759.PNG", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AVPutJiUTzcDEpekrZ1G3CDr1K9b51VbmhbtaKpjJeJh", - "symbol": "AKHI", - "name": "AKHI", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SolanaTokenMerger/Akhi-Coin/main/logo.png", - "tags": [ - "social-token", - "community-token", - "utility-token", - "social-token", - "meme-token", - "akhi-token" - ] - }, - { - "chainId": 101, - "address": "GWLT3Dh8MvXPD2iCCMCvxrbmVp2zNmyFBpyDpTZBq4Fi", - "symbol": "MGWL", - "name": "Maho Genies Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GWLT3Dh8MvXPD2iCCMCvxrbmVp2zNmyFBpyDpTZBq4Fi/logo.png", - "tags": ["Utility-token"], - "extensions": { - "twitter": "https://twitter.com/mahogenies", - "website": "https://www.mahogenies.io/" - } - }, - { - "chainId": 101, - "address": "3n2bNUxAm9S3y6sP6ovsbC21x7anWs4YP8czAkzVBnej", - "symbol": "LYIT", - "name": "LYIToken", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/JoeTheGilbert/crypto/main/logo.jpg", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "C3jJ1FMaKXa5r7u36zuoqnqmcriscNAgTh94CwAJqaZV", - "symbol": "MOL", - "name": "Molecula", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/C3jJ1FMaKXa5r7u36zuoqnqmcriscNAgTh94CwAJqaZV/logo.svg", - "extensions": { - "website": "https://moleculanum.com/" - } - }, - { - "chainId": 101, - "address": "47QLe2y3Ao7r8A2K75XGBjXotrnvUp79arYvf5zNzzmV", - "symbol": "BLUB", - "name": "Bluebeary", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/an7ana5/crypto/main/BlooBearySmall.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BH6pgMckUTvpyh9iK6ocW5iqv9g4k8iL8zXwuMphsfeS", - "symbol": "RAC", - "name": "Rage Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BH6pgMckUTvpyh9iK6ocW5iqv9g4k8iL8zXwuMphsfeS/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HHW3Bjf3PnufTZnnm1LV8e8cfcrs3k8QvTBJ9uuDKyo8", - "symbol": "HHWL", - "name": "Hamsa Hands Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HHW3Bjf3PnufTZnnm1LV8e8cfcrs3k8QvTBJ9uuDKyo8/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7nKjEQVc5tNG3KU1fkhBFqpFy4e6z4QY74HDATWcBbez", - "symbol": "BROC", - "name": "BROCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/echo5even/crypto/main/bro.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ArGtDgKVbu2hKX9HHUzgknuKgx2PFHCg2HfPL96XvpBk", - "symbol": "SHAD", - "name": "Shad Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Shad01111000/crypto/main/logo.PNG", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DvqzmxRatXsdWLeZ6zQnkQdXNGnNqE6n227TkHbRSCTF", - "symbol": "HOMY", - "name": "HOMELESSARMY", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Homelessarmy/crypto/main/logo.png", - "tags": ["social-token", "trading-token", "nft-token", "community-token"], - "extensions": { - "description": "HomelessArmy (HOMY) is Eco-System Perspective for Homeless", - "telegram": "https://t.me/homelessarmy", - "twitter": "https://twitter.com/homelessarmy_", - "website": "https://homelessarmy.com/" - } - }, - { - "chainId": 101, - "address": "FQgPLqhrErJQ85wmxRggvUnqmvVoMzWYzGQSxQ8MYxSL", - "symbol": "SLRZ", - "name": "SolRockets", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/PadureanRazvan/crypto/main/SolRockets.png", - "tags": ["gaming-token", "social-token"] - }, - { - "chainId": 101, - "address": "FNMLmBPkhh7nBFyGHsdrmCuvgEf6ygpaVqFejimHEx9V", - "symbol": "vBLSH", - "name": "vBLSH", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FNMLmBPkhh7nBFyGHsdrmCuvgEf6ygpaVqFejimHEx9V/logo.png", - "tags": ["social-token", "utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/Fearless_Bulls", - "website": "https://fearlessbulls.club/" - } - }, - { - "chainId": 101, - "address": "FH9zPGDCw4TfhJCJmYd7EnJ9E5wtjHTynM6m128Eh5LA", - "symbol": "ELK", - "name": "Wapiti Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/gruntlabs/wapiti/2380612a92f617f6bf869490b94fae94c98ef9a9/assets/ELK_Icon.png", - "tags": ["meme-token", "community-token"], - "extensions": { - "discord": "https://discord.com/invite/2AAEaYmQaV", - "reddit": "https://www.reddit.com/r/WapitiToken/", - "website": "https://token.wapiti.app/" - } - }, - { - "chainId": 101, - "address": "Gmn6oi8jSbncob1UZYVQeKqc5JY1w471ADgDDmqG8uHN", - "symbol": "DORAw", - "name": "Doragon Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/pixelateddoragon/brand/main/wl-token.png", - "tags": ["whitelist-token"], - "extensions": { - "website": "https://twitter.com/PixelDoragon" - } - }, - { - "chainId": 101, - "address": "DoP9jJrLVLUrG6NaAjJoHKTnhQq59AFXRzmjc677UCSm", - "symbol": "CAPE", - "name": "Citizen Apes", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/citizenape/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DqsgNL9KnjSNbCvzuKdfT18N5VQDzhL1EuNC3CTFHrGy", - "symbol": "HLX", - "name": "Helix", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/KiranPothana/Helix/main/Helix.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "E4DwhpJWCGSLY1K6LjWjB94pMnLQszhS9yRz5LkuLGL3", - "symbol": "DUCK", - "name": "Duck Patrol", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/E4DwhpJWCGSLY1K6LjWjB94pMnLQszhS9yRz5LkuLGL3/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "LsinpBtQH68hzHqrvWw4PYbH7wMoAobQAzcvxVHwTLv", - "symbol": "lsIN", - "name": "Locked Staked Sol Invictus", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/LsinpBtQH68hzHqrvWw4PYbH7wMoAobQAzcvxVHwTLv/logo.png", - "tags": [ - "decentralizedreserve", - "utility-token", - "DeFi", - "community-token" - ], - "extensions": { - "discord": "https://discord.gg/invictusdao", - "twitter": "https://twitter.com/InvictusDAO", - "website": "https://invictusdao.fi/" - } - }, - { - "chainId": 101, - "address": "Bqr6xVZ9mTMuiTgvZC4tkMC7kH1WdP4r5CZjy2fV3GQe", - "symbol": "JTS", - "name": "Josh Tasman Coin", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/joshtasman/cSolana/main/JTS_logo_small.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "B4pZJFQm9VDdscJzoR4TTuj8YwexY4kYMfmRCxbZwbcV", - "symbol": "HERD", - "name": "Herd Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/TheChillElephantsClub/assets/main/HERD_COIN_LOGO.png", - "tags": ["social-token", "nft"], - "extensions": { - "discord": "https://discord.gg/qMb6Evqe2b", - "twitter": "https://twitter.com/ChillElephants", - "website": "https://thechillelephantsnft.site/" - } - }, - { - "chainId": 101, - "address": "WLvnutUvmM44YrqHN7y7ow5EJWW9GGmeijLubQbyy3J", - "symbol": "DCOMPWL", - "name": "Degen Competitions Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WLvnutUvmM44YrqHN7y7ow5EJWW9GGmeijLubQbyy3J/icon.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/DegenComp" - } - }, - { - "chainId": 103, - "address": "Ga8zd84edy8Jn7t8hjKU1sGNUfb3eeqpfeAYC9hKDpgM", - "symbol": "EMD", - "name": "Emerald", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Hariienesh1901/Emerald/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3tkmSMhACRrFFUSVfq8C43mHXjyCWkfShe6gEtZi292t", - "symbol": "CUPS", - "name": "Coffee", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/haydenzeller/CoffeeProtocol/main/img/Coffee.png", - "tags": ["social-token", "payment-protocol"], - "extensions": { - "twitter": "https://twitter.com/HaydenDevs" - } - }, - { - "chainId": 101, - "address": "77Aw7fW4dMQLV1tzJdtepQQsrZddMPwjskWTqv7qdv17", - "symbol": "NAU", - "name": "NaughtyFingers", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/naughtyfingers/naughtyfingers/main/logo.png", - "tags": ["social-token", "community-token", "game-token"], - "extensions": { - "twitter": "https://twitter.com/NaughtyFingerss", - "website": "https://naughtyfingers.io/" - } - }, - { - "chainId": 101, - "address": "BdZPG9xWrG3uFrx2KrUW1jT4tZ9VKPDWknYihzoPRJS3", - "symbol": "prtSOL", - "name": "prtSOL (Parrot Staked SOL)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BdZPG9xWrG3uFrx2KrUW1jT4tZ9VKPDWknYihzoPRJS3/logo.svg", - "extensions": { - "discord": "https://discord.gg/gopartyparrot", - "medium": "https://gopartyparrot.medium.com/", - "telegram": "https://t.me/gopartyparrot", - "twitter": "https://twitter.com/gopartyparrot", - "website": "https://parrot.fi" - } - }, - { - "chainId": 101, - "address": "68eWsAzjiskQVcQ6qj9Tn6AK3ss532asTckFT5c3i5Yj", - "symbol": "JFC", - "name": "Jelly Fish Crypto", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/68eWsAzjiskQVcQ6qj9Tn6AK3ss532asTckFT5c3i5Yj/logo.png", - "tags": ["community-token", "videogame"], - "extensions": { - "website": "https://jellyfishcrypto.com" - } - }, - { - "chainId": 101, - "address": "GZ1BzNsCkV7kd1cYuWHQRHmVSTLqGm71uJiPWep9nh7r", - "symbol": "pMOON", - "name": "Moonland WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GZ1BzNsCkV7kd1cYuWHQRHmVSTLqGm71uJiPWep9nh7r/logo.png", - "tags": ["community-token", "utility-token"], - "extensions": { - "discord": "https://discord.gg/wxTc2t68J8", - "twitter": "https://twitter.com/MoonlandVerse", - "website": "https://www.moonland.world" - } - }, - { - "chainId": 101, - "address": "4ckMuvhiqeLAmVh9cCP8M8M3sNomv9MAzTZxAD4ZNARJ", - "symbol": "$SPWX", - "name": "SPWX", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4ckMuvhiqeLAmVh9cCP8M8M3sNomv9MAzTZxAD4ZNARJ/logo.png", - "tags": ["MANAGEMENT"] - }, - { - "chainId": 101, - "address": "6A1uWJRgUVmJYSVYxACXjsvxcy3EzzPdMxHt12j9J1dx", - "symbol": "BENJI", - "name": "BENJI", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/stefanylaforest/benji/main/BENJI.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5Kts7TQFVrBseq9GokZ71o2gBiAmQNQc1ykdVZtH1JhS", - "symbol": "TON", - "name": "The Open Network", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/unimintco/token-logos/main/TON/logo.png", - "tags": ["general-token", "wrapped"], - "extensions": { - "coingeckoId": "the-open-network", - "description": "TON is a third-generation proof-of-stake blockchain designed in 2018 by the Durov brothers, the founders of Telegram Messenger. Later, it was handed over to our open TON Community, which has been supporting and developing it ever since.", - "github": "https://github.com/newton-blockchain", - "telegram": "https://t.me/tonblockchain", - "website": "https://ton.org" - } - }, - { - "chainId": 101, - "address": "8U72UUryrh6xtHyAsHbyEvESj8X5ARQtNAu3XY7ZtkJd", - "symbol": "ZENY", - "name": "ZenCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/badeafrost/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3jJiWeL1i1p5z2Vrev3Ybcb13eBjSuTYEpY9uUPgwRDf", - "symbol": "RSCU", - "name": "Rescue Coin", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3jJiWeL1i1p5z2Vrev3Ybcb13eBjSuTYEpY9uUPgwRDf/RSCU_logo.png", - "extensions": { - "discord": "https://discord.gg/Mkrz63aMFr", - "twitter": "https://twitter.com/Rescue_DAO", - "website": "https://rescuedao.io/" - } - }, - { - "chainId": 101, - "address": "Fb1RdmtEdhyYWATEGMrLC27DmYdszpGfzg4aGoduzkb6", - "symbol": "CASTLE", - "name": "Beverweerd Castle", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Fb1RdmtEdhyYWATEGMrLC27DmYdszpGfzg4aGoduzkb6/castle1PNG.png", - "tags": ["Beverweerd", "asset-token"], - "extensions": { - "website": "https://www.blocksto.ne/castle" - } - }, - { - "chainId": 101, - "address": "7GsajQSLyh4vsgsRLZVXgptr3pPdxidkYpzeKZ2YYkhg", - "symbol": "MTY", - "name": "MTYGROUP", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/krazyesko/cryptojpg/main/logo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ZsvnTcJgUncYcPx6gZZeeEN79SNr2f57ys9sLDDVAK7", - "symbol": "$OBL", - "name": "OBL (Oblivion City Token)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ZsvnTcJgUncYcPx6gZZeeEN79SNr2f57ys9sLDDVAK7/logo.png", - "tags": ["community-token", "utility-token", "game", "nft"], - "extensions": { - "discord": "https://discord.gg/PCxN8rNXCx", - "twitter": "https://twitter.com/OblivionCityNFT", - "website": "https://oblivion.city" - } - }, - { - "chainId": 101, - "address": "21jZ1ESEFYh9SBwjT5gqE3jHv3JnaGhgvypLTR96QXW9", - "symbol": "sUSD", - "name": "Solcasino USD", - "decimals": 6, - "logoURI": "https://files.solcasino.io/susd.png", - "tags": ["stablecoin", "web3", "lottery", "casino", "bet"], - "extensions": { - "twitter": "https://twitter.com/Solcasinoio", - "website": "https://www.solcasino.io/" - } - }, - { - "chainId": 101, - "address": "HHsUHFuSuXYoJiEkfqxFpVArhUfkxs7d6peNWQMuVLQw", - "symbol": "HHWL", - "name": "Hamsa Hands WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HHW3Bjf3PnufTZnnm1LV8e8cfcrs3k8QvTBJ9uuDKyo8/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2NwuBrDSvbBvH8WVKyhVJvyakPSuLH8P2cceApgVQZWv", - "symbol": "FAU", - "name": "FAU-Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Adrian2541/Crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FZxanxcLw2d5a7bBRcQsRpC5KD5LZWpRLMMo4YAvu4eW", - "symbol": "GRWLR", - "name": "Growler", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/D7txa12HUtWk5dVxC2Ybg9QoE7ALZgDcUEKdrh43V8fB/logo.png", - "tags": ["community-token", "social-token", "utility-token"], - "extensions": { - "twitter": "https://twitter.com/LeopardSNFT", - "website": "https://leopardsyndicate.com/" - } - }, - { - "chainId": 101, - "address": "4EPoEU6Yjpv3fiZ9awuUv8rCQzBFRjPhMmaM4L1uQVHm", - "symbol": "KAPH", - "name": "karima_phoenix", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/KarimaPhoenix/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DHNQXwHSKsNu9NPBiWb86mWDQTRj27diPJu55BC73KW2", - "symbol": "DOHWL", - "name": "Demons on Holiday Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/DNKENNFT/logo/main/logo.png", - "tags": ["whitelist-token", "NFT", "community-token"], - "extensions": { - "discord": "https://discord.gg/nTq4dgbSpc", - "instagram": "https://www.instagram.com/demonsonholidaynft/", - "twitter": "https://twitter.com/DemonsOnholiday", - "website": "https://demonsonholiday.com/" - } - }, - { - "chainId": 101, - "address": "E1CRrNYTykhsJLUEkDEzJJexzCaoJ18fVSfvrHqRYecw", - "symbol": "DALM", - "name": "Dalmatian Coin", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/E1CRrNYTykhsJLUEkDEzJJexzCaoJ18fVSfvrHqRYecw/logo.png", - "tags": ["meme-token"], - "extensions": { - "website": "https://www.dalmatianfoundation.org" - } - }, - { - "chainId": 101, - "address": "5Cw2VrDPpDpujNK79uXUxSy2pXfc9XKQxbzKx65VpYEn", - "symbol": "BKN", - "name": "Bôkaynou", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5Cw2VrDPpDpujNK79uXUxSy2pXfc9XKQxbzKx65VpYEn/logo.png", - "tags": ["currency-token"] - }, - { - "chainId": 101, - "address": "3JkhC6yTBgupgicVwtUDTNsiUGxj2WsupemdrSFgApfY", - "symbol": "MANDR", - "name": "MathewAndRedsell", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/bushido-lee/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7kWBhuqxf6tX1GUgAQAh9fgEHqBoizuQX7vvHTfhysiL", - "symbol": "LMINT", - "name": "Laohu Mint Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/GaitanaruAndrei/assets/main/laohu.png", - "tags": ["community-token", "social-token"], - "extensions": { - "description": "Gen0 Laohu Kingdom Mint Token", - "website": "https://www.laohukingdom.com/" - } - }, - { - "chainId": 101, - "address": "32iV3tk9bDgf2nBHVMbD2HgZnv4vccDZhrDrK2eUkmJd", - "symbol": "MAGIK", - "name": "Magik Finance", - "decimals": 9, - "logoURI": "https://i.ibb.co/6J5p50N/logo-magik-1.png", - "tags": ["Lending-Protocol", "DeFi"], - "extensions": { - "twitter": "https://twitter.com/Magik_Finance", - "website": "https://magikfinance.xyz" - } - }, - { - "chainId": 101, - "address": "HaZjxfrB7pirwCaw73uz7n3Gn1q5NaFwNjXpEMrTspto", - "symbol": "CITK", - "name": "Cinnamon Meme Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/emb8767/assets/main/cinnamon.png", - "tags": ["meme-token", "community-token"] - }, - { - "chainId": 101, - "address": "aaCcokDefDnFFRkVrpxFicubsAaMSHpnXiXNCuPab4z", - "symbol": "GRBL", - "name": "Greeble Coin", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/joshtasman/cSolana/main/grbl_logo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9WPM6pYALpcRzLs4qYafvm8chfRYLrtVBQe3aDTDBTuz", - "symbol": "GMBC", - "name": "Gamers Bet Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/JohnCodePie/GamersBetCoin/main/GamersBetCoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DjcCbwFLCW16MMEtiH5Bk3DZ1Ggy2oYdB1FQy7hRK8dj", - "symbol": "TLSC", - "name": "The Living Stone Church coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Shad01111000/crypto/main/TLSC_logo.png", - "tags": ["community-token"], - "extensions": { - "facebook": "https://www.facebook.com/livingstonefam/", - "website": "https://thelivingstone.church/" - } - }, - { - "chainId": 101, - "address": "7SNynmqBGZsrxtUCz8wCF3LoH7KJbA4KPv6N5dnbU9yM", - "symbol": "$SMLY", - "name": "SmileyToken", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/TSKsmiley/Smiley.sol/master/logo.png", - "tags": ["social-token", "dev-token"] - }, - { - "chainId": 101, - "address": "WLDjeuGksQC5wiha7zpmq1RaHhmHiE7gvE4Qkxnyyda", - "symbol": "DOHWLT", - "name": "Demons on Holiday Whitelist Token S1", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/DNKENNFT/logo/main/logo.png", - "tags": ["whitelist-token", "NFT", "community-token"], - "extensions": { - "discord": "https://discord.gg/nTq4dgbSpc", - "instagram": "https://www.instagram.com/demonsonholidaynft/", - "twitter": "https://twitter.com/DemonsOnholiday", - "website": "https://demonsonholiday.com/" - } - }, - { - "chainId": 101, - "address": "2KhhdkFcLe8ZW5e7r93KbkAeDnfxHcfYH4GmXjCuEVwC", - "symbol": "321", - "name": "troisdeuxun coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2KhhdkFcLe8ZW5e7r93KbkAeDnfxHcfYH4GmXjCuEVwC/logo.png", - "tags": ["community-token"], - "extensions": { - "website": "https://troisdeuxun.ch/" - } - }, - { - "chainId": 101, - "address": "7yejJw7D5khrhETFZjahaD3LfKpi1XDSLYSCb5jYVkuN", - "symbol": "CCT", - "name": "Coin98 Community Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/abbas-bachari/logo/main/src/cct.png", - "tags": ["CCT", "Coin98", "Community", "Token"], - "extensions": { - "description": "This token is used to reward active members of the @COIN98 Telegram channel.", - "telegram": "https://t.me/coin98" - } - }, - { - "chainId": 101, - "address": "GCEm8HRdz61TSUHch21GbdyKtU3jUt9bjyeixv1M7HWu", - "symbol": "YTCK", - "name": "YuticK", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/yutick/crypto/main/ytck.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5XUSf9cjuX3NmMs3GNY4ASf8nhD12PcZ31vJiTWJNMTR", - "symbol": "CE5C", - "name": "CE-5 GALACTIC COIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/StarLord36/Crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "F9ShtW8SG3rypRSUKFogwPPMUPN38EJ77KkxkUQ3degr", - "symbol": "DRIVE", - "name": "DRIVE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Vo1dedParad0x/Drive/main/Drive1.png", - "tags": ["social-token", "utility-token", "community-token"] - }, - { - "chainId": 101, - "address": "WoLFWyFspu68aHQeKRbgYPma6H16cHPXErJK8o3sczb", - "symbol": "DIRE", - "name": "DireWolf", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WoLFWyFspu68aHQeKRbgYPma6H16cHPXErJK8o3sczb/Direlogo.png", - "tags": ["community-token", "utility-token", "stake-pool-token"], - "extensions": { - "twitter": "https://twitter.com/direwolfsol" - } - }, - { - "chainId": 101, - "address": "3NpdRoGtohjoJD5cwXJxU3g3y4UsY1GVcMohGfS32LoQ", - "symbol": "TKC", - "name": "KnightCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/JopdeRidder-hub/KnightCoin/main/0-5415_fortnite-black-knight-png-transparent-png%20(1).png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8xvbRKnmRWbsS8hpsADvaXS7EtjSFoyWGsteqQwuWwyp", - "symbol": "TLAWL", - "name": "The Lost Aliens WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8xvbRKnmRWbsS8hpsADvaXS7EtjSFoyWGsteqQwuWwyp/logo.png", - "tags": ["utility-token", "community-token"] - }, - { - "chainId": 101, - "address": "sou1ELxm3XpLWpnjP81KaoigPPCwbNUFAZ4dhqifq13", - "symbol": "SS", - "name": "Souls", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/sou1ELxm3XpLWpnjP81KaoigPPCwbNUFAZ4dhqifq13/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://www.hornsvshalosnft.com/" - } - }, - { - "chainId": 101, - "address": "CCWhF5ST5AH6VZ9qQKbMvKZD9DrX2SkhTNG6Nr67m5jA", - "symbol": "WAKT", - "name": "Whack Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Faceless87/whacktoken/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FZTfdpD9DzgqMDjgNrmShDsyd5MYkwQ4k1jLq1ecrmnd", - "symbol": "RZC", - "name": "Razzlecoin", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FZTfdpD9DzgqMDjgNrmShDsyd5MYkwQ4k1jLq1ecrmnd/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://www.razzlecoin.xyz/" - } - }, - { - "chainId": 101, - "address": "9mXZ54YnJJRmUN2MaMEtWCfFyoncP4ZhKz7U9DZ4JY2X", - "symbol": "SPACEGOLD", - "name": "SPACEGOLD", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/cosmic-condos/SPACEGOLD/main/logo-icon.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/CosmicCondos", - "website": "https://cosmiccondos.io/" - } - }, - { - "chainId": 101, - "address": "Gic1MQRVSqpY4pT8to55CtMammzpthQwDgij7wZEvyo2", - "symbol": "ITCOIN", - "name": "IT SOL COIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Gic1MQRVSqpY4pT8to55CtMammzpthQwDgij7wZEvyo2/Coinlogo.png", - "tags": ["software-developer", "coin"], - "extensions": { - "website": "https://www.blocksto.ne/it-sol" - } - }, - { - "chainId": 101, - "address": "33EWTxBQdQdLnubsKyZ1Gyf97F7SSYBdi65YkUehgm58", - "symbol": "IDEA", - "name": "IDEA", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/admin9955/crypto/main/logo.png", - "tags": ["Utility-token"], - "extensions": { - "website": "https://ideacoin.info/" - } - }, - { - "chainId": 101, - "address": "pbVqUjNWhL6YNt8gtMJCD5Ntevnh4Wy59CEp3jZAU69", - "symbol": "OoD", - "name": "Orb of Divinity", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/pbVqUjNWhL6YNt8gtMJCD5Ntevnh4Wy59CEp3jZAU69/icon.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/catalysts", - "twitter": "https://twitter.com/CatalystsNFT", - "website": "https://catalysts.world/" - } - }, - { - "chainId": 101, - "address": "Grti5hpNF5kQt7kV2YvEaWVJ2CwPy2KapXUXvZzbCTgJ", - "symbol": "OoP", - "name": "Orb of Protection", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Grti5hpNF5kQt7kV2YvEaWVJ2CwPy2KapXUXvZzbCTgJ/icon.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/catalysts", - "twitter": "https://twitter.com/CatalystsNFT", - "website": "https://catalysts.world/" - } - }, - { - "chainId": 101, - "address": "EXi2m6TtDpFU63penR2d4DGtirw58GPB3Zkj9Bco2jqM", - "symbol": "OoC", - "name": "Orb of Chaos", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EXi2m6TtDpFU63penR2d4DGtirw58GPB3Zkj9Bco2jqM/icon.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/catalysts", - "twitter": "https://twitter.com/CatalystsNFT", - "website": "https://catalysts.world/" - } - }, - { - "chainId": 101, - "address": "Eth5Tw3ZveSv8t8scEJ9VGx99wVJTkQCrAgDAjKY6pNr", - "symbol": "OoW", - "name": "Orb of Wither", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Eth5Tw3ZveSv8t8scEJ9VGx99wVJTkQCrAgDAjKY6pNr/icon.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/catalysts", - "twitter": "https://twitter.com/CatalystsNFT", - "website": "https://catalysts.world/" - } - }, - { - "chainId": 101, - "address": "7foFetNr9ktWZp95hppg19v6wMSJhoWAjCdceLk89EBy", - "symbol": "OoA", - "name": "Orb of Ascension", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7foFetNr9ktWZp95hppg19v6wMSJhoWAjCdceLk89EBy/icon.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/catalysts", - "twitter": "https://twitter.com/CatalystsNFT", - "website": "https://catalysts.world/" - } - }, - { - "chainId": 101, - "address": "8uhGf3XCJkBQoRxBycsEFWao3TPPajcTEbdXeJk1mFS7", - "symbol": "RIL", - "name": "Rilum", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/abbas-bachari/logo/main/src/RIL.png", - "tags": ["wallet", "payment", "Token"], - "extensions": { - "description": "Rilum is SPL telegram wallet for buy and sell products and currencies.", - "telegram": "https://t.me/Rilum" - } - }, - { - "chainId": 101, - "address": "691FMUwMY8paaEJjow4BNBnKe3rdS3KH1bnu6hsFudZG", - "symbol": "LEIB", - "name": "LeibCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/leibmunz/leibt/main/logo.png", - "tags": ["social-token", "community-token", "web3-token"] - }, - { - "chainId": 101, - "address": "F6rgHNX17nF5KMC4AWw7Nj9CdBcQZtUz3deunyyRC962", - "symbol": "METAP", - "name": "Meta Parlor Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MetaParlor/MetaParlorToken/main/logo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4TEHiDjsFsW6SvqafW2jhsSDuPbU4ESXT1GujtodUrDc", - "symbol": "DAN", - "name": "Dan Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/joshtasman/cSolana/main/dan_logo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3Daw6ysXkpYQ3v6ZgwbDwukdsRsZD4HEmQwafUPbApA2", - "symbol": "NMC", - "name": "New Media Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Scrump/newmediacoin/main/logo.png", - "tags": ["community-token", "social-token"], - "extensions": { - "website": "https://newmediacoin.com" - } - }, - { - "chainId": 101, - "address": "A3T8bCAVd91xgzuU56Zz9hUEhVriPeVcgDyjrnzaiV1H", - "symbol": "SCHL", - "name": "Schulmoney", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/FeliksIsABoss/Cryptocurrency/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "45eBLJUCQf1acXdBG8daBfUudy8T7V5gDTBpiE1iezsN", - "symbol": "SOLP", - "name": "SOL Playground Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/45eBLJUCQf1acXdBG8daBfUudy8T7V5gDTBpiE1iezsN/logo.png", - "tags": ["utility-token", "blockchain-developer", "social-token"], - "extensions": { - "twitter": "https://twitter.com/solplayground", - "website": "https://solana-playground.com/" - } - }, - { - "chainId": 101, - "address": "ErVUYVyKw41FKh6fjYZSVzjCKZonBfz21qsLtxz3pUba", - "symbol": "CMPR", - "name": "Camper", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/cmpr-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5K1mKvSdpGtAeuz2bbgCzRD77qcwsrNKANjfwbfQUCwM", - "symbol": "LAW", - "name": "Law", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/law-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ETRs7r7yuBAnoJgbf68YnX9gnWVAvpRpipxD5EwkU8Xn", - "symbol": "ZET", - "name": "Zettle", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/zet-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6vXX83QA2vSR1LMVbBKCoezqQyW8yma25WFujQwhc1gn", - "symbol": "BAL", - "name": "Balance", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/bal-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HHjz2EB6XZCNwPtncutxKgJdzwnTB5ejDhmYuXoFVx97", - "symbol": "BUTT", - "name": "Butt", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/butt-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4YvQifoQTgACgogadp6qy4YYUUFt9HF1EX4a8oZdiLJu", - "symbol": "iTECH", - "name": "IT", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/itech-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5oSS1JcvUgYgFsrEhWQkN4hxJ6oUJXmSiKDK7n66aUKn", - "symbol": "S0S", - "name": "Sam", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/s0s-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "31jGurR1grhqPw5wphpqf6SNQMJCAPpEz2pvSdMnH1UX", - "symbol": "DMND", - "name": "Diamond", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/dmnd-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Q8RRoJ8bWAPuTH4qjJ8An6qYX3Yigzod5WUWMWTdUXp", - "symbol": "OST", - "name": "Ostrich", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/ost-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FJAbrPsfZuap6txnJpvpVLMtfDqec51JxMELagyQaxDX", - "symbol": "SASS", - "name": "Sass", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/sass-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "JJSRBDYPtreV1mBfBgsmSpsVbXit1hQSBpspNGSQENw", - "symbol": "LOR", - "name": "Lore", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/lor-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9TAcqfx1NZ2y5VJDg2q8sGYMrKa5J626DTghhG6i1pjW", - "symbol": "WDY", - "name": "Woody", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/wdy-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HxtAGwgWb7AGEnJPLQkygsQkcnvfMgAUL8XvN8encgwf", - "symbol": "DAISY", - "name": "Daisy", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/daisy-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "sL6CBFRUD2xHUbzvsYCvrVguJrWpV8XFvKP7hso3C1b", - "symbol": "RAYS", - "name": "Sunshine", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/rays-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Ah1yv8NEKjDirynjwopjLxZh7KhhW59Z6tqsFAjj6GyZ", - "symbol": "PLY", - "name": "Pliability", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/ply-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AUWiGXvZyrgB9KB5DLTNeyu3wENJU99basenhKZeaPZn", - "symbol": "SHINE", - "name": "Moonshine", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/shine-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5cAcAGQVxJmJCKAHTnDTCwXPsGbiDf8St9WwVQTLiSBu", - "symbol": "UNCRN", - "name": "Unicorn", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/goingfortheether/crypto/main/logo.png", - "tags": [ - "social-token", - "whitelist-token", - "NFT", - "community-token", - "game" - ] - }, - { - "chainId": 102, - "address": "7KFASybd48bRqcBEUXoAWHwwbwJqYoyLMSjZwMkUigiR", - "symbol": "APEs", - "name": "APEs", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7KFASybd48bRqcBEUXoAWHwwbwJqYoyLMSjZwMkUigiR/logo.png" - }, - { - "chainId": 101, - "address": "4hFExpecK2WyGGxpEVSzwYw7SUmrCSgyoAmFg88cyzVZ", - "symbol": "PRM", - "name": "Prime", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/maava89/crypto/main/prime.png", - "tags": ["social-token", "web3-token"] - }, - { - "chainId": 101, - "address": "Czt7Fc4dz6BpLh2vKiSYyotNK2uPPDhvbWrrLeD9QxhV", - "symbol": "NESTA", - "name": "Nest Arcade", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Czt7Fc4dz6BpLh2vKiSYyotNK2uPPDhvbWrrLeD9QxhV/logo.png", - "tags": ["game-token"], - "extensions": { - "website": "https://nestarcade.io" - } - }, - { - "chainId": 101, - "address": "GF1Y8ZqtJ37ek6YzjmU3p14SX4qCHK7B7ozXgiLcmbS4", - "symbol": "GAMO", - "name": "GAMO", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GF1Y8ZqtJ37ek6YzjmU3p14SX4qCHK7B7ozXgiLcmbS4/logo.png", - "tags": ["MANAGEMENT"] - }, - { - "chainId": 101, - "address": "Ca4CppSk1dSyneHw6Kn1x588yny4DeXGe7mAVZ7eyyuG", - "symbol": "TICKET", - "name": "Crypneyland Tickets", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Ca4CppSk1dSyneHw6Kn1x588yny4DeXGe7mAVZ7eyyuG/logo.png", - "tags": ["Currency"], - "extensions": { - "twitter": "https://twitter.com/crypneyland" - } - }, - { - "chainId": 101, - "address": "C8pcsGXL21Hq8XCPMA2RAwfLAMn2UVKX1FqNeFgwgSLK", - "symbol": "TGIF", - "name": "TGIF", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/skmotochan/crypto/main/tgif-icon.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4Hke4tmbBsXSpj269VkwMXo8sTr6oFhCUsiJepUxatHz", - "symbol": "SHIBBURN", - "name": "ShibaBurn", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/tradermq/crypto/main/logo.png", - "tags": ["social-token", "community-token", "game"] - }, - { - "chainId": 101, - "address": "HKCHNuB9t18zKgjSvDdfADbXyxCFyHU1Gac74WnRdAPt", - "symbol": "ITSNM", - "name": "No Money", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/nomoneyface/nomoney/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "49PGdswRzWT3yUP13r6oysMv1B1WeQ4w87H4M8zxWrTN", - "symbol": "LNA", - "name": "Lania", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/lania22/crypto/main/logo.png", - "tags": ["Defi", "NFT"] - }, - { - "chainId": 101, - "address": "LbtGm5toYeEk1U5K63UvNQKKhPJoVW11w6BHzwckqZr", - "symbol": "XCPT", - "name": "Acceptance", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/xcpt-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5oCf3mGGykAoMKf9CK7NvD1St2obf5Cnr5CLEpT33JxG", - "symbol": "Y", - "name": "Yes", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/y-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7yQ3eujpoHEZEcLE4YRHA3En4nMK3k2bPUWiXXxRdh9e", - "symbol": "N", - "name": "No", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/n-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "QN2HkkBaWHfYSU5bybyups9z1UHu8Eu7QeeyMbjD2JA", - "symbol": "pBTC", - "name": "Port Finance BTC", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/QN2HkkBaWHfYSU5bybyups9z1UHu8Eu7QeeyMbjD2JA/BTC.svg", - "tags": ["port", "lending", "collateral-tokens"], - "extensions": { - "website": "https://port.finance" - } - }, - { - "chainId": 101, - "address": "6UgGnLA3Lfe8NBLAESctsUXWdP3zjMFzSLEZxS3tiaKh", - "symbol": "pMER", - "name": "Port Finance Mercurial", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6UgGnLA3Lfe8NBLAESctsUXWdP3zjMFzSLEZxS3tiaKh/MER.svg", - "tags": ["port", "lending", "collateral-tokens"], - "extensions": { - "website": "https://port.finance" - } - }, - { - "chainId": 101, - "address": "FhraFicS7fGxHn8jfzuZ6TeTpCu8PAnQNZiT2tqM5xvv", - "symbol": "pSBR", - "name": "Port Finance Saber", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FhraFicS7fGxHn8jfzuZ6TeTpCu8PAnQNZiT2tqM5xvv/SBR.svg", - "tags": ["port", "lending", "collateral-tokens"], - "extensions": { - "website": "https://port.finance" - } - }, - { - "chainId": 101, - "address": "77TBgKmTNtMdGrt1ewNRb56F2Xw6fNLZZj33JZ3oGwXh", - "symbol": "pSRM", - "name": "Port Finance Serum", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/77TBgKmTNtMdGrt1ewNRb56F2Xw6fNLZZj33JZ3oGwXh/SRM.svg", - "tags": ["port", "lending", "collateral-tokens"], - "extensions": { - "website": "https://port.finance" - } - }, - { - "chainId": 101, - "address": "GLLZY8xRU1dvV117DwEki2hVdfzQwB1D3xeBcQ7JEvCf", - "symbol": "DOO", - "name": "Twinkycoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Deliriant3/token/main/logo.png", - "tags": ["community-token"] - }, - { - "chainId": 101, - "address": "75tQsrumoU3xb98J1wZgPJXK3ZsrDxomaK4WEzrR5kEr", - "symbol": "CSYD", - "name": "CodeSydney", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/codesydney/assets/main/logo/csyd/hexagon.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EzpSBrAdTU1AYdY6UWghFJRiq2WF39CUy3Tncrh82XiB", - "symbol": "FAKE", - "name": "Fake Crypto Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/faketrillionaire/fakecryptocoin/main/fake_crypto_coin.png" - }, - { - "chainId": 101, - "address": "85dqKwPUVgEgH1LRTCDYc4Pym2hiQFHU7vfQRJQx6pAg", - "symbol": "HCHC", - "name": "Highland Cow Herd Coin", - "decimals": 0, - "logoURI": "https://github.com/Frew250/Crypto/blob/main/HCH.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AoTKABCgrfjMXDo7Rtbcgcphi3XCJRjJ74Vpyc3ENMor", - "symbol": "TUSD", - "name": "TOP USD", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AoTKABCgrfjMXDo7Rtbcgcphi3XCJRjJ74Vpyc3ENMor/logo.png", - "tags": ["stablecoin", "payment"], - "extensions": { - "description": "Digital coin for making payments on https://topnfts.cc/" - } - }, - { - "chainId": 101, - "address": "BCMqKuey7zLuxfErEo1at1ui4BjC69752MCy2WU1mhmo", - "symbol": "SHEEP", - "name": "SheepCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Andreas711/crypto/main/sheeptoken.png", - "tags": ["social-token", "meme-token", "private-token"] - }, - { - "chainId": 101, - "address": "6BnVgighj8VKqCS2ymUmcvLUguHrPHjZfDZ9oZqqFp7j", - "symbol": "Momobear", - "name": "Momobear Taro Pot", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/wei1769/nft_storage/main/art/momoyaTaroPot.png", - "tags": ["meme-token", "community-token"], - "extensions": { - "telegram": "https://t.me/momobeardao", - "twitter": "https://twitter.com/momobearya" - } - }, - { - "chainId": 101, - "address": "G49gd8dLmqedK3DNdgUkd2chVMZieRgqZVMnnrsnsF5V", - "symbol": "P-MERC", - "name": "Pre-Sale Mercanti NFT 1", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/G49gd8dLmqedK3DNdgUkd2chVMZieRgqZVMnnrsnsF5V/logo.png", - "tags": ["whitelist-token", "mercanti", "pre-sale"], - "extensions": { - "twitter": "https://twitter.com/tradewithmarco" - } - }, - { - "chainId": 101, - "address": "JBveYSPQ5sGSPBMi8UdSYcFH25pCEQiU6PymVFqkzm3b", - "symbol": "P-MERC", - "name": "Pre-Sale Mercanti NFT 2", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/JBveYSPQ5sGSPBMi8UdSYcFH25pCEQiU6PymVFqkzm3b/logo.png", - "tags": ["whitelist-token", "mercanti", "pre-sale"], - "extensions": { - "twitter": "https://twitter.com/tradewithmarco" - } - }, - { - "chainId": 101, - "address": "CdQseFmnPh2JBiz5747dJ6oYXK9NKnbdFRfiXTcZuaXT", - "symbol": "$PACES", - "name": "PACES Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CdQseFmnPh2JBiz5747dJ6oYXK9NKnbdFRfiXTcZuaXT/logo.png", - "extensions": { - "discord": "https://discord.gg/5gehRmCNem", - "twitter": "https://twitter.com/TheAcesNFT", - "website": "https://theacesnft.com/" - } - }, - { - "chainId": 101, - "address": "5kdUFnjEERxhCzTDQrmxoh5nSkp4xkDSJaUGquNkar5a", - "symbol": "LILIT", - "name": "Lilith Project", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5kdUFnjEERxhCzTDQrmxoh5nSkp4xkDSJaUGquNkar5a/logo.png", - "tags": ["meme"] - }, - { - "chainId": 101, - "address": "AvxN7UPdmJpqB9guCGtrC77svYzmupouL3d7v6J4xEPw", - "symbol": "OYT", - "name": "OYT Apparels", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/rulhaq/OYT/main/logo.png", - "tags": [ - "social-token", - "apparel-token", - "ecommerce-token", - "fashion-token" - ] - }, - { - "chainId": 101, - "address": "GWYzdeiAr1MhAckNn2Sn8D3XhUHSCMcmf3YoAGZAM7C7", - "symbol": "MILL", - "name": "Millitoken", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GWYzdeiAr1MhAckNn2Sn8D3XhUHSCMcmf3YoAGZAM7C7/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/aW7MRd5zYA", - "twitter": "https://twitter.com/MillennialsNFT", - "website": "https://themillennials.io/" - } - }, - { - "chainId": 101, - "address": "D56dMWuvAEGq4WmbWxNKBJREkXYVfER98Tb5RNCmF84o", - "symbol": "DOGE", - "name": "Dogecoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/unimintco/token-logos/main/DOGE/logo.png", - "tags": ["meme-token", "wrapped"], - "extensions": { - "coingeckoId": "dogecoin", - "description": "Dogecoin is an open source peer-to-peer digital currency, favored by Shiba Inus worldwide.", - "discord": "https://discord.com/invite/dogecoin", - "facebook": "https://facebook.com/OfficialDogecoin", - "github": "https://github.com/dogecoin/dogecoin", - "reddit": "https://reddit.com/r/dogecoin", - "twitter": "https://twitter.com/dogecoin", - "website": "https://dogecoin.com/" - } - }, - { - "chainId": 101, - "address": "3b2G8Fe8vawLMfRHvKh1cxtxuRWQyeRknr7xVzPVTcYn", - "symbol": "MIND", - "name": "MindMining", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3b2G8Fe8vawLMfRHvKh1cxtxuRWQyeRknr7xVzPVTcYn/logo.svg", - "extensions": { - "website": "https://mindmining.org/" - } - }, - { - "chainId": 101, - "address": "2DH1PxfM8d8bkrQM3WFX1HySohcv1rvMLU9KmycmzLp1", - "symbol": "GRILLAZ", - "name": "GRILLAZ", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2DH1PxfM8d8bkrQM3WFX1HySohcv1rvMLU9KmycmzLp1/logo.png", - "extensions": { - "website": "https://mekagorillaz.live/" - } - }, - { - "chainId": 101, - "address": "549BXihQSZGrog7mJpBLjaBcetUoovh72wVmHJf5icmV", - "symbol": "DORA", - "name": "Doragon Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/pixelateddoragon/brand/main/token.png", - "tags": ["utility-token", "nft"], - "extensions": { - "twitter": "https://twitter.com/PixelDoragon", - "website": "https://pixelateddoragon.com" - } - }, - { - "chainId": 101, - "address": "AQGncY1hA22JATnj8aEuCAaPQsoe9wwmn4QBKzvV96yS", - "symbol": "BACK", - "name": "Backistan BACK", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/backdao/backdao/f64c256ffb811018d88e18c804a60a6127f991d3/SPL-image.png", - "tags": [ - "social-token", - "community-token", - "nft-backed-currency", - "nft-basket" - ], - "extensions": { - "twitter": "https://twitter.com/backDAO", - "vault": "https://www.fraktion.art/vault/DLRCcdmBJvoR6nHTpKRKvRBE9n8TN1443rN3VrtiXzqp", - "vaultPubkey": "DLRCcdmBJvoR6nHTpKRKvRBE9n8TN1443rN3VrtiXzqp", - "website": "https://back2back.io/" - } - }, - { - "chainId": 101, - "address": "HtKKipqmgxMQJUob9XCgZBG6zSCZx4nA433ZfDuLyUTg", - "symbol": "ALGO", - "name": "Algorand", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/unimintco/token-logos/main/ALGO/logo.png", - "tags": ["utility-token", "wrapped"], - "extensions": { - "coingeckoId": "algorand", - "description": "Algorand is a scalable, secure and decentralized digital currency and transactions platform.", - "discord": "https://discord.com/invite/QBYp7Y2", - "github": "https://github.com/algorand", - "reddit": "https://reddit.com/r/AlgorandOfficial", - "telegram": "https://t.me/algorand", - "twitter": "https://twitter.com/algorand", - "website": "https://www.algorand.com/" - } - }, - { - "chainId": 101, - "address": "5v2kfUPs51kMbHh57E81rPMRvFD5KGPU83Ft7dvDtwvP", - "symbol": "KN", - "name": "Kuna", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/donDominik0/cryptokuna/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3sMKt96ayAftnsGrjsymTzxanHPWGZiGgdfcZQ7Pfe8K", - "symbol": "P-MERC", - "name": "Mercanti Pre-Sale NFT", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3sMKt96ayAftnsGrjsymTzxanHPWGZiGgdfcZQ7Pfe8K/logo.png", - "tags": ["whitelist-token", "mercanti", "pre-sale"], - "extensions": { - "twitter": "https://twitter.com/tradewithmarco" - } - }, - { - "chainId": 101, - "address": "AH1KE4h9nnKfqYRDynDsB3nFwT8ohXvw9rX81uaxrhAg", - "symbol": "MERC", - "name": "Mercanti NFT Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AH1KE4h9nnKfqYRDynDsB3nFwT8ohXvw9rX81uaxrhAg/logo.png", - "tags": ["whitelist-token", "mercanti", "sale"], - "extensions": { - "twitter": "https://twitter.com/tradewithmarco" - } - }, - { - "chainId": 101, - "address": "9p8d6WABqK9dDTS2rCcyAbGjZbS4AtXCuqpdMMfcGXat", - "symbol": "BRLS", - "name": "Brails Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/brailsford/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AhDt1FnEt759Tmxwa61E9FQhFnerPwMDTTt7CJjvog7L", - "symbol": "EC", - "name": "EliteCoin", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AhDt1FnEt759Tmxwa61E9FQhFnerPwMDTTt7CJjvog7L/logo.png", - "extensions": { - "discord": "https://discord.gg/MetaApeEC", - "instagram": "https://instagram.com/MetaApeEC", - "twitch": "https://www.twitch.tv/MetaApeEC", - "twitter": "https://twitter.com/MetaApeEC", - "website": "https://metaapeeliteclub.com/" - } - }, - { - "chainId": 101, - "address": "GssKDr54mrME81AUnmSBKBc3Bcb4F3M8ugsYVQDE2r9F", - "symbol": "POGR", - "name": "PoggersCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ConfusedCatBongo/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HUGZgz5stMv2SuSDCV6WifPea1MsuBWNd4nVfea71oiT", - "symbol": "CBG", - "name": "BeneCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/EigeneDateien/CBG/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DFzykeGoEa359d7RS99bFwG95i6ojKcEMibqNtF7JC2c", - "symbol": "EINC", - "name": "EinCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/einmanjr/Crypto/main/DCBB9804-C1D5-4903-8461-8CE1CA66A187_1_201_a.jpeg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Fxkabr3Qjc7HnraxgvtHxf7HCrrzqLzvhFUJuonFcoW3", - "symbol": "ETL", - "name": "eTolar", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/admin9955/eTolar/main/logo.png", - "extensions": { - "website": "https://etolar.org/" - } - }, - { - "chainId": 101, - "address": "GVuwAompUahjSWLKS5NZDu1yPnRRsJV5mZa3wvgzzmuH", - "symbol": "SMW73", - "name": "Local 73 COIN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GVuwAompUahjSWLKS5NZDu1yPnRRsJV5mZa3wvgzzmuH/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3DEbcjbcCXwzhx75FHTWs3TiyLLXcwhvnbyAxciDojRY", - "symbol": "BAAG", - "name": "Banded Agate Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/rightywastaken/logo/main/logo5.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "WLG8Q4Woh6Usb4AVtC2vi7AMU2GVtcCrjp3SEpskUDz", - "symbol": "SxDWL", - "name": "SXD Whitelist token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SaintxDmon/WL-sxd/main/logo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8sxavS8ky125Axf7h1Zi2nEb2MvVZc6WY8pjPnY9aoKR", - "symbol": "SEC", - "name": "SECCO", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SolanaTokenMerger/SECCO-COIN/main/logo.png", - "tags": [ - "social-token", - "community-token", - "utility-token", - "secco-token", - "art-token" - ] - }, - { - "chainId": 102, - "address": "3VkCNsok1V8Y65utG7LchxURHh7nAhFR7ScVyTLLG1jJ", - "symbol": "HGEN", - "name": "HGEN", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3VkCNsok1V8Y65utG7LchxURHh7nAhFR7ScVyTLLG1jJ/logo.png", - "tags": ["utility-token", "community-token", "governance-token"] - }, - { - "chainId": 102, - "address": "7d3U17g4WEZkVGjRVVQchrgEaoFAuuui2xmEGCzmtUGt", - "symbol": "GENS", - "name": "GENS", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7d3U17g4WEZkVGjRVVQchrgEaoFAuuui2xmEGCzmtUGt/logo.png", - "tags": ["stablecoin"] - }, - { - "chainId": 101, - "address": "4xU44oSF32sFXzTG2PRNhsxJidLegyGTGV8Fmu5grLFy", - "symbol": "BRIDGE", - "name": "Bridge Network", - "decimals": 9, - "logoURI": "https://i.ibb.co/LhQSzyh/unknown-3.png", - "tags": ["Bridge", "Cross-Chain", "NFT"], - "extensions": { - "twitter": "https://twitter.com/bridgenetwork0x", - "website": "https://www.bridgenetwork.com" - } - }, - { - "chainId": 101, - "address": "8fF8hajCaotRDZ39HRJhQCAUA6aFMabvz6eV8518pDkB", - "symbol": "GREMM", - "name": "GremlinCoin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/Bucksmatt/Gremlin-coin/main/Gremlin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "14AnHZYk1CvtTCq5jvYMX7Fx7pnWDmgQJvADxP9Q4jYN", - "symbol": "KZOO", - "name": "Kawaii Zoo", - "decimals": 6, - "logoURI": "https://user-images.githubusercontent.com/97711508/152678665-9e923dbd-8190-40a8-a910-634881fe3530.png", - "tags": ["utility-token", "community-token", "nft-token"], - "extensions": { - "discord": "https://discord.gg/6SF9wrmXxB", - "twitter": "https://twitter.com/Kawaii__Zoo", - "website": "https://kawaii-zoo.com/" - } - }, - { - "chainId": 101, - "address": "GuJWiZBox3tZZwiV9NCJsRUaULv8tmNcK9UWNV25msND", - "symbol": "FROGZ", - "name": "FROGZ", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GuJWiZBox3tZZwiV9NCJsRUaULv8tmNcK9UWNV25msND/logo.png", - "tags": ["social-token", "utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/HokkaidoFrogz", - "website": "https://www.hokkaidofrogz.com/" - } - }, - { - "chainId": 101, - "address": "Dc5LzwzYLtSMhquxvXSAuhiDqjjbPLrBF1ZajNQyFuXM", - "symbol": "WTLBC", - "name": "TLBC Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Dc5LzwzYLtSMhquxvXSAuhiDqjjbPLrBF1ZajNQyFuXM/logo.png", - "tags": ["utility-token", "NFT"], - "extensions": { - "discord": "https://discord.gg/theloftbusinessclub", - "instagram": "https://www.instagram.com/the_lofts_business_club/", - "twitter": "https://twitter.com/lofts_club", - "website": "https://loftsclub.com/" - } - }, - { - "chainId": 101, - "address": "8TeyhNzVnJkYMQg6byGGwuszV2C3miNashj8HNUzgRU7", - "symbol": "GMGWH", - "name": "gm Groundhog Whitelist", - "decimals": 0, - "logoURI": "https://github.com/imentus-rahul/whitelist-token-registry/blob/main/logo.png", - "tags": ["whitelist-token", "presale-token"], - "extensions": { - "description": "gmgwh is a whitelist token for preminting the gmg nft collection" - } - }, - { - "chainId": 101, - "address": "KuTHacd5KQF9F7akJY3LSUhuACdPhfRLyCm8AWTkYrE", - "symbol": "KWT", - "name": "Kuroda Whitelist Tokens", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/tessareskuroda/kurodatoken/master/logo.png", - "tags": ["kuroda-tokens", "whitelist"], - "extensions": { - "description": "KWT is a whitelist token for preminting the Kuroda genisys collection", - "website": "https://kurodaclub.com/" - } - }, - { - "chainId": 101, - "address": "7hsXTesZFNdjkD4v78n18GqLKx3gZzxA1G8n8DH186FH", - "symbol": "AMORE", - "name": "Amore", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/admin9955/amore/main/logo.png", - "extensions": { - "website": "https://amore.bar/" - } - }, - { - "chainId": 101, - "address": "SPCxcJbCHdsPNd9PMpMYoXwNN2Dvj4GHMAk23bdCgC7", - "symbol": "SPC", - "name": "Sea Peach", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SPCxcJbCHdsPNd9PMpMYoXwNN2Dvj4GHMAk23bdCgC7/logo.png", - "extensions": { - "website": "https://seapeach.pro" - } - }, - { - "chainId": 101, - "address": "7kBQ5dnNg1StV58LzPF9B1BXWioSEPmEnuAPEHJ8qu5G", - "symbol": "MATIC", - "name": "Polygon", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7kBQ5dnNg1StV58LzPF9B1BXWioSEPmEnuAPEHJ8qu5G/logo.png", - "tags": ["utility-token", "wrapped"], - "extensions": { - "coingeckoId": "polygon", - "description": "Polygon believes in Web3 for all. Polygon is a decentralised Ethereum scaling platform that enables developers to build scalable user-friendly dApps with low transaction fees without ever sacrificing on security.", - "discord": "https://discord.com/invite/polygon", - "facebook": "https://facebook.com/0xPolygon.Technology", - "github": "https://github.com/maticnetwork", - "instagram": "https://instagram.com/0xpolygon", - "linkedin": "https://linkedin.com/company/0xpolygon", - "reddit": "https://reddit.com/r/0xPolygon", - "telegram": "https://t.me/maticnetwork", - "twitter": "https://twitter.com/0xPolygon", - "website": "https://polygon.technology/", - "youtube": "https://youtube.com/c/PolygonTV" - } - }, - { - "chainId": 101, - "address": "9DSDuJxgQouaYBLComUfGTGyaGLjVKktTYuojUs7o3r3", - "symbol": "VOID", - "name": "THE VOID GENESIS", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9DSDuJxgQouaYBLComUfGTGyaGLjVKktTYuojUs7o3r3/genesis.jpg", - "tags": ["game-token", "game-currency", "GameFi", "Gaming", "NFT"], - "extensions": { - "description": "This one is for the Fans! Holding the Black Orb with the Golden V comes with amazing Benefits: future Airdrops, access to NFT Pre-Sales, exclusive in-game Characters and many more.", - "discord": "https://discord.gg/rzfe6k39aU", - "facebook": "https://facebook.com/monkeyballgames", - "instagram": "https://www.instagram.com/void_dot_games", - "medium": "https://void-dot-games.medium.com", - "telegram": "https://t.me/voidcommunitychat", - "twitter": "https://twitter.com/void_dot_games", - "website": "https://www.void.games" - } - }, - { - "chainId": 101, - "address": "Be8zNPTmyMnVqj2z7ZNSL1oYjWw6fLC5YGhmipqzbBpC", - "symbol": "ZFE", - "name": "ZeroFees Exchange", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/admin8808/zfe/main/logo.png", - "extensions": { - "website": "https://zerofees.exchange/" - } - }, - { - "chainId": 101, - "address": "A3g1zcXKxE3sZP9chg79zWKc62pRbtpJcTtosujBHgVN", - "symbol": "NFLX", - "name": "Netflix Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SolanaTokenMerger/Netflix-Coin/030295bdec4cf208294a54e155c06fac2cc964db/logo.svg", - "tags": [ - "social-token", - "community-token", - "utility-token", - "netflix-token", - "meme-token" - ], - "extensions": { - "twitter": "https://twitter.com/netflix" - } - }, - { - "chainId": 101, - "address": "CmYzaiBpAxLFkXAfePgUJ4D99hvtZKpMvbbftYotjWgk", - "symbol": "NYAO", - "name": "NYAO COIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/kln037/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Azw7nHFCUrY3i2RpRLxJja1mooiZkAai3ipsmQTeMqNQ", - "symbol": "JUNK", - "name": "Zankoku JUNK", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/XAGBack/junktoken/main/Junk.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "CDYJ5se32rbcLCo4nSS7EsMJ7FJyn7xHyz7LP9mynyHC", - "symbol": "HFWL", - "name": "HAWTFOX WL TOKEN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/UMGD/images/main/firefoxxx.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HqXHEpvDAM9WntedjzxSx5MUpDRtxGyTZXGTUohSgLtb", - "symbol": "BUG", - "name": "BugCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/BugzumDevAlt/CoinLogo/main/logo.png", - "tags": ["social-token", "community-token", "Crypto-Token", "crypto"], - "extensions": { - "youtube": "https://www.youtube.com/channel/UCi5K-ZcuNbBW6svtT1gvlwA/" - } - }, - { - "chainId": 101, - "address": "9ph2ZAwzigVRrrXvHoGxMU7YuW59zMDtNX6WJjh927tF", - "symbol": "CUSELP", - "name": "CuseTheJuice Liquidity Pool", - "decimals": 9, - "logoURI": "https://github.com/CuseTheJuice/token-list/blob/main/assets/mainnet/9ph2ZAwzigVRrrXvHoGxMU7YuW59zMDtNX6WJjh927tF/logo.png?raw=true", - "tags": ["social-token"], - "extensions": { - "discord": "https://discord.gg/xHpRcRKG", - "twitter": "https://twitter.com/CuseTheJuice", - "website": "https://linktr.ee/CuseTheJuice" - } - }, - { - "chainId": 101, - "address": "8t3fB5pmvgYpYnxqvVSbJCf5rEtgNNcsGs3exgWqdvoT", - "symbol": "SOLBASE", - "name": "SolBase", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8t3fB5pmvgYpYnxqvVSbJCf5rEtgNNcsGs3exgWqdvoT/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Easily build apps on Solana.", - "website": "https://solbase.io" - } - }, - { - "chainId": 101, - "address": "WLiHGZSFg3E17ZBymfQG3NzhUjgQPKeLzTdYW3PhchQ", - "symbol": "WLPRT", - "name": "WLPrototype", - "decimals": 0, - "logoURI": "https://bafybeie4ijaerva5fjqa4ojdy356jzf4xhhggybpwxf2ekn5tyg7xiedzu.ipfs.infura-ipfs.io/", - "tags": ["utility-token"], - "extensions": { - "description": "Whitelist token for PrototypeNFT.", - "discord": "https://discord.com/invite/prototypenft", - "twitter": "https://twitter.com/prototype5656", - "website": "https://prototype-nft.com/" - } - }, - { - "chainId": 101, - "address": "GLrfLkhCBv7w3LPW8YZJxXcNnXnzic8nQ7nTefPRaSMR", - "symbol": "GLPRT", - "name": "GLPrototype", - "decimals": 0, - "logoURI": "https://bafybeieax25iipx7k67ul3l5eeuzoisx5gohsxddrltuftuogktnrpbzgy.ipfs.infura-ipfs.io/", - "tags": ["utility-token"], - "extensions": { - "description": "Goldlist token for PrototypeNFT.", - "discord": "https://discord.com/invite/prototypenft", - "twitter": "https://twitter.com/prototype5656", - "website": "https://prototype-nft.com/" - } - }, - { - "chainId": 101, - "address": "8ZWRyq1gQMJjt1kgmRRT7zNKCsLz8HCuGmt13jf7iUPo", - "symbol": "DRAP", - "name": "Drap Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SolanaTokenMerger/Drap-Coin/main/logo.png", - "tags": ["social-token", "community-token", "utility-token", "drap-token"] - }, - { - "chainId": 101, - "address": "HjPHNMugJsC9tQHp2zMhQ7EB6YjsH4DMsR81hM1PjmmM", - "symbol": "BCFT", - "name": "BoreasCF Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/besnikbelegu/crypto/main/logo.png", - "tags": ["social-token", "fitness-token", "family-token"], - "extensions": { - "description": "BoreasCF Token is a token that is given to our friends when they do something good.", - "discord": "https://discord.gg/PyGry28k5Z", - "instagram": "https://www.instagram.com/besnikbelegu", - "linkedin": "https://www.linkedin.com/in/besnikbelegu" - } - }, - { - "chainId": 101, - "address": "GYwYv1NcPuQozaqedrfivksbPfGEpuhwiWJg33rChQrq", - "symbol": "GLD", - "name": "Global Dollar", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/admin8808/GLD/main/logo.png", - "extensions": { - "website": "https://globaldollar.world/" - } - }, - { - "chainId": 101, - "address": "NYNKnLDu1WRacDTmqvMburqc31reUWQSSmoh4MxE3FB", - "symbol": "NYN", - "name": "NYN Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/NYNKnLDu1WRacDTmqvMburqc31reUWQSSmoh4MxE3FB/logo.png", - "tags": ["utility-token"], - "extensions": { - "coinmarketcap": "https://coinmarketcap.com/currencies/nyan-heroes/", - "discord": "https://discord.gg/nyanheroes", - "medium": "https://nyanheroes.medium.com/", - "telegram": "https://t.me/nyanheroes", - "twitter": "https://twitter.com/nyanheroes", - "website": "https://nyanheroes.com/" - } - }, - { - "chainId": 101, - "address": "42869t2uZcntyvNhJyVU7X83AKxcWqeikvGsxsJwG3NF", - "symbol": "HMN", - "name": "Hasif Malaysia Node Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/hasifMahazir/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ZAzphjkZwSYnPgdaiaUqYpZajhkz9hC5aYkRyzEVc4G", - "symbol": "DPPD", - "name": "Duck Patrol WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ZAzphjkZwSYnPgdaiaUqYpZajhkz9hC5aYkRyzEVc4G/logo.png", - "tags": ["nft-token"], - "extensions": { - "twitter": "https://twitter.com/DuckPatrolNFT" - } - }, - { - "chainId": 101, - "address": "Ab28EPE28GFubPM47DN5xxp8Edm5fpeN24FkdWnRGND9", - "symbol": "VEGE", - "name": "VeggieCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/transaide/vege/main/logo.png", - "tags": ["utility-token", "governance-token", "game-token", "NFT"], - "extensions": { - "description": "Use VeggieCoin to participate in the Vegetarians ecosystem; NFT's, Gaming, Governance and more! Earn VeggieCoin by owning a Vegetarian NFT. Eat your Veggies!", - "discord": "https://discord.gg/QddPWdg4vg", - "twitter": "https://twitter.com/VegetariansNFT" - } - }, - { - "chainId": 101, - "address": "GrhiwuCNR953krtxPu4F7YGqYhhfQH2QDfaE1ktNurrT", - "symbol": "SKLT", - "name": "Eskeleton", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GrhiwuCNR953krtxPu4F7YGqYhhfQH2QDfaE1ktNurrT/logo.png", - "tags": ["meme-token", "social-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/miguela_crypto" - } - }, - { - "chainId": 101, - "address": "G4nr5KV4Yd7JJi94GsRjPUukVGghaUJxgz4qVgXyLg7K", - "symbol": "HAPE", - "name": "Hungry Apes", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/G4nr5KV4Yd7JJi94GsRjPUukVGghaUJxgz4qVgXyLg7K/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/Dh4GsSrJ", - "twitter": "https://twitter.com/HungryApesNFT" - } - }, - { - "chainId": 101, - "address": "H8M6nvzsKt6L7DLt2pGd7yXLLfJNaYvciS3XbvQecEu6", - "symbol": "NEO", - "name": "Urban Coin", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/SecioreanuStefanita/crypto/main/UAC_logo.png", - "tags": ["social-token", "community-token", "mobility-token"], - "extensions": { - "twitter": "https://twitter.com/neobiIity", - "website": "https://www.rideurbanair.com/" - } - }, - { - "chainId": 101, - "address": "4E1G6fPbbWqCwipnNNbNtiUfHn8yXBZESjtqU7ZQPacy", - "symbol": "KOALAS", - "name": "Saving Australian Koalas Token", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4E1G6fPbbWqCwipnNNbNtiUfHn8yXBZESjtqU7ZQPacy/logo.png", - "tags": [ - "social-token", - "community-token", - "utility-token", - "wildlife", - "koalas-token", - "Crypto" - ], - "extensions": { - "website": "https://www.savingaustraliankoalas.com/" - } - }, - { - "chainId": 101, - "address": "EW5ZzkiUr1y8snnYmtd4RoK2twnseYXc9YtEVvfFYeVx", - "symbol": "PAM", - "name": "Pamela Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SolanaTokenMerger/Pamela-Coin/main/logo.png", - "tags": ["social-token", "community-token", "utility-token", "pam-token"], - "extensions": { - "twitter": "https://twitter.com/pamela_rf", - "website": "https://pamelareif.com" - } - }, - { - "chainId": 101, - "address": "F5SjYkNBNF29iKsLf5r665n58qRsw4PjEwtVTLBZzGh", - "symbol": "NUO", - "name": "Nuobility", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/F5SjYkNBNF29iKsLf5r665n58qRsw4PjEwtVTLBZzGh/logo.png" - }, - { - "chainId": 101, - "address": "FronkXnfBgzfhsEV2bjwoJ5VgYhpEVCSN3pzpJkvZGUf", - "symbol": "FRONK", - "name": "Fronk", - "decimals": 9, - "logoURI": "https://arweave.net/g_pwKEk6RAc2ZQ_-DYIrvwchekBRHLvoxGKEDE4S6hc", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/friendlyfrogs", - "twitter": "https://twitter.com/FriendlyFrogSC", - "website": "https://ffsc.io/" - } - }, - { - "chainId": 101, - "address": "2iDc5dHpVKq5WsNEdWFoaMiAjtKz7zrRKi8WHyRW7z8x", - "symbol": "NOYZ", - "name": "Noyz Narcos Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SolanaTokenMerger/Noyz-Coin/main/logo.png", - "tags": [ - "social-token", - "community-token", - "utility-token", - "noyz-token" - ], - "extensions": { - "twitter": "https://twitter.com/noyzofficial", - "website": "https://www.propagandaclothing.it" - } - }, - { - "chainId": 101, - "address": "CJze5X3G3V6nqqrfeALTpb1HbkKvspjiUGR12rVchL3T", - "symbol": "SOC", - "name": "Solcrystol", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CJze5X3G3V6nqqrfeALTpb1HbkKvspjiUGR12rVchL3T/SOC.png", - "tags": ["social-token", "Metaverses", "community-token", "game"] - }, - { - "chainId": 101, - "address": "CwPp4q7C23oXNh12Z8ZGx1vTL7gnqT4iWtLjg7Ta2vBF", - "symbol": "PPPWL", - "name": "Peppy Platypus Posse Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CwPp4q7C23oXNh12Z8ZGx1vTL7gnqT4iWtLjg7Ta2vBF/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://peppyplatypus.com/" - } - }, - { - "chainId": 101, - "address": "63cL4hHbkRStqMvhAudXkPsydRASp3yr7iPQemqmAcD2", - "symbol": "ART", - "name": "Aiko ART", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/63cL4hHbkRStqMvhAudXkPsydRASp3yr7iPQemqmAcD2/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.com/invite/Y72V9wn3Yw", - "reddit": "https://www.reddit.com/r/AikoNFT/", - "twitter": "https://twitter.com/aikonft", - "website": "https://aiko.io/" - } - }, - { - "chainId": 103, - "address": "AZ1mS4yHVYLTXb2Z8AQmec2o18i15REEYGWtnRcuWohu", - "symbol": "ART", - "name": "ART", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/63cL4hHbkRStqMvhAudXkPsydRASp3yr7iPQemqmAcD2/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.com/invite/Y72V9wn3Yw", - "reddit": "https://www.reddit.com/r/AikoNFT/", - "twitter": "https://twitter.com/aikonft", - "website": "https://aiko.io/" - } - }, - { - "chainId": 101, - "address": "BS9HQKdgY6DUq6HCgNz8xpDyoERJD4GnwGRHebFasjZS", - "symbol": "RRAM", - "name": "RRAM", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BS9HQKdgY6DUq6HCgNz8xpDyoERJD4GnwGRHebFasjZS/logo.png", - "tags": ["social-token", "utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/rowdyramsnft" - } - }, - { - "chainId": 101, - "address": "GQ9Ym6HrE3C5NvugEMLwBXTyWjXrwoHZD6Nvv5Laosvu", - "symbol": "LAUR", - "name": "Achille Lauro Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SolanaTokenMerger/Achille-Lauro-Coin/main/logo.png", - "tags": [ - "social-token", - "community-token", - "utility-token", - "lauro-token" - ], - "extensions": { - "twitter": "https://twitter.com/frasidilauro" - } - }, - { - "chainId": 101, - "address": "51Cd5WF7cW6CWqkYn1WZHikqkjMGeyKRjsEW2ULrVvSa", - "symbol": "GEM", - "name": "Gemitaiz Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SolanaTokenMerger/Gemitaiz-Coin/main/logo.png", - "tags": [ - "social-token", - "community-token", - "utility-token", - "gemitaiz-token" - ], - "extensions": { - "twitter": "https://twitter.com/thetruegemitaiz", - "website": "https://tantarobastore.com" - } - }, - { - "chainId": 101, - "address": "GXxff8vm2MB6FvA79tmGHs3VNUEwevvpdxwiaqRfaZkr", - "symbol": "BEL", - "name": "Belial", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/DozaLabz/crypto/main/BelialCoinLogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8c8J3bHqWRkJFhGZ9XLinYjgD69fRsxfQMinZtGbnGr5", - "symbol": "DFSC", - "name": "Dogfin Studios Coin", - "decimals": 0, - "logoURI": "https://github.com/guardianjon/crypto/blob/main/dogfinstudios-logo200x200.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "CSf5iuscN8A5FKdMyq7FSai1DxzTUhMvKSitp5tzMUQD", - "symbol": "HOTC", - "name": "Hot Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Spidle/crypto/main/HOTLogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8TjgDMv2Esb7YRKu1ESZv5vtgD1WqFKmzhPBgsLqwEGG", - "symbol": "NARWHAL", - "name": "Narwhal Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8TjgDMv2Esb7YRKu1ESZv5vtgD1WqFKmzhPBgsLqwEGG/logo.png", - "tags": ["NFTs", "DeFi"], - "extensions": { - "serumV3Usdc": "3qXkLj4vAT4B2dMJQgtKSrNxLfrSQawMZtAzKVEsMyYT", - "twitter": "https://twitter.com/narwhalcoin", - "website": "https://www.narwhalcoin.net" - } - }, - { - "chainId": 101, - "address": "8mTe216SBwdfdXLPxrNCo1fxXTt7NVTUF9PqCwv4Wuzz", - "symbol": "BLVE", - "name": "Blave Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/arkashka/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3echLX8Qyz4hB694BFsSNWj6ytdStVQKVKFiFCJ1McpQ", - "symbol": "TOME", - "name": "TOME", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/onuraladi/AlderToken/main/tome.png", - "tags": ["utility-token", "community-token", "nft-token"], - "extensions": { - "discord": "https://discord.gg/qRcCATnZ", - "twitter": "https://twitter.com/AlderMages", - "website": "https://aldermages.com/" - } - }, - { - "chainId": 101, - "address": "9HqmwYxGnZctqasFu4MoFmC2EpkgezNvrm3TPS25M6xM", - "symbol": "ST8", - "name": "StaticToken", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/staticgroup/statictoken/main/logo.png?token=GHSAT0AAAAAABRMVGH2HVN65YFKZUT4JHHOYQNVVBA", - "tags": ["tech-token"], - "extensions": { - "discord": "https://discord.gg/DXDfk4zV", - "reddit": "https://www.reddit.com/r/statictoken", - "twitter": "https://twitter.com/staticcomputers" - } - }, - { - "chainId": 101, - "address": "DQVQEAaE8zx2e2ea6sWvW3MAoxXv9R1t5yN85kGaU5Xk", - "symbol": "DEMU", - "name": "Decent Muzic Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/geccosol/demu/main/token.png", - "tags": ["music-token", "listner-token", "utility-token", "demu-token"], - "extensions": { - "description": "Decent Muzic Token is a token that is for both the listner and the musician.", - "facebook": "https://www.facebook.com/decentmuzic", - "website": "https://decentmuzic.com" - } - }, - { - "chainId": 101, - "address": "3NfqXM9i7NvxxRD23FJoF6sX1q8jRLRJU2b8BLsUrUDu", - "symbol": "JRGC", - "name": "JACKED", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/ThomasClous/CryptoUpdate/main/logo.png", - "tags": ["NFT"] - }, - { - "chainId": 101, - "address": "8fi6wnM4A1eRfur7fC7TD5DG1cmi4UxcW3rshpB9wEwm", - "symbol": "SNAKE", - "name": "SnakeChain", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/SnakeRush/SnakeRush/master/SnakeChainLogo.png", - "tags": [ - "utility-token", - "gaming", - "metaverse", - "play-to-earn", - "solana-ecosystem", - "user-experience", - "multiplayer" - ], - "extensions": { - "description": "SnakeChain (SNAKE) are earned by playing SnakeRush, and minting your coins at the SnakeBank. They can be used to play more and exchange in any market where available.", - "instagram": "https://www.instagram.com/snakerushgame/", - "twitter": "https://twitter.com/snakerushgame", - "website": "https://www.snakechain.org" - } - }, - { - "chainId": 101, - "address": "C7P3cWGAhEY9A4BsBXiQNZ7ycavPUcuQcaH99ppQdfwe", - "symbol": "HNYC", - "name": "Honey Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/C7P3cWGAhEY9A4BsBXiQNZ7ycavPUcuQcaH99ppQdfwe/logo.png", - "tags": ["community-token"], - "extensions": { - "telegram": "https://t.me/+a5XKRkBSz3xkOTQ9" - } - }, - { - "chainId": 101, - "address": "5XoCeZjdZUsQoe9ahtjdH3EEPed3bQiKo96erRi556X5", - "symbol": "USDE", - "name": "USD Equivalent", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/admin8808/USDE/main/logo.png", - "extensions": { - "website": "https://usde.world/" - } - }, - { - "chainId": 101, - "address": "JApyjFvMard5g1WmgSGC6vF61ZsofSEHHQMYk6hNVUXk", - "symbol": "SXD", - "name": "SXD Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SaintxDmon/WL-sxd/main/logo.jpg", - "tags": ["social-token", "mint-token"] - }, - { - "chainId": 101, - "address": "wLYsBuL6HH5Pxzh5sxdzHfQHmWTJMRMyP8WCUvnoKte", - "symbol": "VWT", - "name": "Vivendell Whitelist Token", - "decimals": 0, - "logoURI": "https://www.vivendell.com/images/icon-whitelist.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/vivendell", - "website": "https://www.vivendell.com/" - } - }, - { - "chainId": 101, - "address": "6sPqMNWhQPK8X23F6mQAabhKFfJ943fHPDZMaBYuJHgZ", - "symbol": "GDLKD", - "name": "GDLK Dev Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6sPqMNWhQPK8X23F6mQAabhKFfJ943fHPDZMaBYuJHgZ/logo.png", - "tags": ["NFT"] - }, - { - "chainId": 101, - "address": "WLTDpT8E9TY6jCQQhdamjs7SieUza68JpmCzaayWY6D", - "symbol": "SPWL", - "name": "SOLive Pass Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WLTDpT8E9TY6jCQQhdamjs7SieUza68JpmCzaayWY6D/logo.png" - }, - { - "chainId": 102, - "address": "8C96hGmwzfHznPPiviPxExuKc3MkZ3sNNZcKB9qXUDLg", - "symbol": "BCAT", - "name": "Bouncing Cat Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8C96hGmwzfHznPPiviPxExuKc3MkZ3sNNZcKB9qXUDLg/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "bubis9dcbs6dVrzWkybcLsFPc8wuw8q7vNEnG3eoRPJ", - "symbol": "BuBi", - "name": "BuBi Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/bubis9dcbs6dVrzWkybcLsFPc8wuw8q7vNEnG3eoRPJ/logo.png" - }, - { - "chainId": 101, - "address": "ED2o7vhsJH67NUkYpLMZL5Y97SLRfJzTDb27ECy1ZJDe", - "symbol": "TREC", - "name": "Treeco", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ED2o7vhsJH67NUkYpLMZL5Y97SLRfJzTDb27ECy1ZJDe/logo.png", - "tags": ["environment", "technology"] - }, - { - "chainId": 101, - "address": "6o2Aqq1VtovuwGYBegAvka3RXM3rxM5gTYUuGkXq4GEV", - "symbol": "REYK", - "name": "Reyka", - "decimals": 1, - "logoURI": "https://raw.githubusercontent.com/web3ckster/reika/main/assets/logo.png", - "tags": ["general-token"] - }, - { - "chainId": 101, - "address": "cT9TDUAxi6aw8uG3hfoU6eczXwTHenkQ2pxwRmx1uop", - "symbol": "ECAT", - "name": "E-Cat Energy", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/admin8808/ecat/main/logo.png", - "extensions": { - "website": "https://e-cat.energy/" - } - }, - { - "chainId": 101, - "address": "EKPr2TWypHoCV2zSPfYsfkt8mK8RjxRNNb9B6HH7CBci", - "symbol": "CRS", - "name": "Crypto Squirre", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/ramoncrs/assets/main/logo.jpg", - "tags": ["social-token", "meme-token", "defi-token", "utility-token"] - }, - { - "chainId": 101, - "address": "D1KcDpJGxDj57qcnhGNucEDikjarZPJ6gjraj8b7hJL", - "symbol": "VICE", - "name": "Vice Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/D1KcDpJGxDj57qcnhGNucEDikjarZPJ6gjraj8b7hJL/logo.png", - "tags": ["vice", "sports"], - "extensions": { - "twitter": "https://twitter.com/Vicehood" - } - }, - { - "chainId": 101, - "address": "JAotw1dfgFRt3wUgkHrEXaHmMxXUQGMfZF176TNnMLFE", - "symbol": "TLR", - "name": "Tolar", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/admin8855/tlr/main/logo.png", - "extensions": { - "website": "https://tolar.exchange/" - } - }, - { - "chainId": 101, - "address": "FviScByi7Pbg1myqqHjfT6xxMVYUaF8wP3DGxgEov8tM", - "symbol": "XIU", - "name": "Xiuder Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SolanaTokenMerger/Xiuder-Coin/main/logo.png", - "tags": [ - "social-token", - "community-token", - "utility-token", - "game-token", - "xiuder-token" - ], - "extensions": { - "twitch": "https://www.twitch.tv/xiuder_", - "twitter": "https://twitter.com/Xiuder_", - "website": "https://www.smart-gfx.com/merch-xiuder", - "youtube": "https://www.youtube.com/c/Xiuder" - } - }, - { - "chainId": 101, - "address": "CbpaPcL86iPJC8okGJbbH852tUFJrr18agBgz6j9uu4g", - "symbol": "IZCO", - "name": "IZGI Technologies", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/hammerbox/crypto/main/logo.png", - "tags": ["NFTs", "utility-token", "currency-token", "community-token"] - }, - { - "chainId": 101, - "address": "StiMWryqUXqFfQUBX51bbxhMJqS9RqJqsAvrsuh2aYi", - "symbol": "SER", - "name": "SER", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/StiMWryqUXqFfQUBX51bbxhMJqS9RqJqsAvrsuh2aYi/logo.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "discord": "https://discord.gg/IRS", - "twitter": "https://twitter.com/irsnft", - "website": "https://sers.io/" - } - }, - { - "chainId": 101, - "address": "4tfNrjsyMR35Jbvua7RM2n2zsrvWBfPsuqovGxcL2DHB", - "symbol": "DOT", - "name": "Polkadot", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4tfNrjsyMR35Jbvua7RM2n2zsrvWBfPsuqovGxcL2DHB/logo.png", - "tags": ["utility-token", "wrapped"], - "extensions": { - "coingeckoId": "polkadot", - "description": "Polkadot makes it easier than ever to create and connect decentralized applications, services, and institutions.", - "discord": "https://discord.com/invite/wGUDt2p", - "github": "https://github.com/paritytech/polkadot", - "reddit": "https://reddit.com/r/dot", - "telegram": "https://t.me/PolkadotOfficial", - "twitter": "https://twitter.com/Polkadot", - "website": "https://polkadot.network/", - "youtube": "https://www.youtube.com/channel/UCB7PbjuZLEba_znc7mEGNgw" - } - }, - { - "chainId": 101, - "address": "ADn8cY1hhzFiB7bSFzR1oxLJdqc7Dhmj8UXhpdkNVtGj", - "symbol": "KIKS", - "name": "Kristijan Svihran", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/kiks2401/crypto/main/logo.png", - "tags": ["social-token"], - "extensions": { - "twitter": "https://twitter.com/Vicehood" - } - }, - { - "chainId": 101, - "address": "Bhjc5ezhrKnZrLbMGahuY5rBYJ3ViKNFMsa7kNBnpacw", - "symbol": "ENUM", - "name": "Enum Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/chrismengle/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5RnsebX6ZamLv8YAXDNhgv513SNFbUto9Yz1a9LC4tBZ", - "symbol": "DSOUL-WL", - "name": "Dragon Souls Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Soulsdragon/icon/main/token-wl.png", - "extensions": { - "website": "https://dragonsoulsnft.com/" - } - }, - { - "chainId": 101, - "address": "4p3fqvcKR4kvyKC7mmDFebsJg7D9ywzxskgXahG2AMo5", - "symbol": "CHRV", - "name": "ChorvaCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/denvee32/chorvacrypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8EnhbBFkxykmzGvJwZ55MgRRiLEVykn5iUNY9QmGy81A", - "symbol": "STR", - "name": "Stratos Energy", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/admin5505/str/main/logo.png", - "extensions": { - "website": "https://stratos.energy/" - } - }, - { - "chainId": 101, - "address": "GoQjhy3tBcXRWdNfvyh6MPhiQAkNdrAyCJdqWJ3WuUpW", - "symbol": "LTC", - "name": "Litecoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GoQjhy3tBcXRWdNfvyh6MPhiQAkNdrAyCJdqWJ3WuUpW/logo.png", - "tags": ["utility-token", "wrapped"], - "extensions": { - "coingeckoId": "litecoin", - "description": "The cryptocurrency for payments", - "github": "https://github.com/litecoin-project", - "reddit": "https://www.reddit.com/r/litecoin", - "telegram": "https://t.me/Litecoin", - "twitter": "https://twitter.com/LitecoinProject", - "website": "https://litecoin.org/" - } - }, - { - "chainId": 101, - "address": "AuNVtaGYtjeBL44nrSMHJMJsyZdbebrm5qQdrswqkZUD", - "symbol": "VECO", - "name": "VenloCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/DromedarisCoi/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GmEvUrfkmWzJSqua5UkK3KZMUWjLieDK6iatBd7QzEAN", - "symbol": "Leo", - "name": "Solleo", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GmEvUrfkmWzJSqua5UkK3KZMUWjLieDK6iatBd7QzEAN/logo.png" - }, - { - "chainId": 101, - "address": "BsnpN8xvDpY7uKo4gnk5B3Z6pHnyL8RXgmMTQFpEETLa", - "symbol": "NRC", - "name": "Nearcoin", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BsnpN8xvDpY7uKo4gnk5B3Z6pHnyL8RXgmMTQFpEETLa/logo.png", - "tags": ["social-token", "utility-token", "currency-token"], - "extensions": { - "facebook": "https://www.facebook.com/NearcastHQ", - "instagram": "https://www.instagram.com/NearcastHQ/", - "linkedin": "https://www.linkedin.com/company/nearcast", - "twitter": "https://twitter.com/NearcastHQ", - "website": "https://www.nearcoin.com/", - "youtube": "https://www.youtube.com/channel/UCqvbKHoV0xaReGts8oedmnQ" - } - }, - { - "chainId": 101, - "address": "Kir4NUgYeLoHN7aBjNTfiyn3vHwZVKiyhBqN5RYBqnA", - "symbol": "KIRIN", - "name": "Kirin Kingdom", - "decimals": 9, - "logoURI": "https://i.ibb.co/CtjdKgQ/unknown.png", - "tags": ["NFT", "Staking", "Passive-income", "Breeding"], - "extensions": { - "twitter": "https://twitter.com/Kirin_Kingdom", - "website": "https://kirin-kingdom.com" - } - }, - { - "chainId": 101, - "address": "7XmXhKmngJJvK3k1dSbCNDB9pfMyGtgm8QUcczUY1c4R", - "symbol": "GAL", - "name": "Galapagos", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/galapagos-coin/crypto/main/logo.png", - "tags": ["utility-token", "community-token", "NFTs", "Metaverse"], - "extensions": { - "discord": "https://discord.gg/bVvZWvFRAT", - "telegram": "https://t.me/GalapagosNFTs", - "twitter": "https://twitter.com/GalapagosNFTs", - "website": "https://GalapagosNFT.com" - } - }, - { - "chainId": 101, - "address": "38vopEvoU5cdKX33noN793669JweG2KA5afW18BrLBFZ", - "symbol": "GJJ-LDV", - "name": "Lady with an Ermine", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/38vopEvoU5cdKX33noN793669JweG2KA5afW18BrLBFZ/hermelijn.png", - "tags": [ - "Geert-Jan-Jansen", - "in-the-style-of", - "Leonardo-da-Vinci", - "NFT" - ], - "extensions": { - "website": "https://blocksto.ne/leonardo-da-vinci/" - } - }, - { - "chainId": 101, - "address": "ViCeSQqiKWD3LGZv6W9tjLLwgXed3iPZpSLhurYZkXY", - "symbol": "VICE", - "name": "Vice", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ViCeSQqiKWD3LGZv6W9tjLLwgXed3iPZpSLhurYZkXY/logo.png", - "tags": ["vice", "sports"], - "extensions": { - "twitter": "https://twitter.com/Vicehood" - } - }, - { - "chainId": 101, - "address": "9wB5JMdWYGtzygwo8GygrJFg6PY6QhtWK5HdK3PwJraV", - "symbol": "CRTK", - "name": "CRYTOK", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mamoamo/cryotok/main/crytok_logo.png", - "tags": ["promo-token"] - }, - { - "chainId": 101, - "address": "3zjBUUJEvJHAUB6K4hX9j5HVcfJxXmC3iSREjsvDqT4C", - "symbol": "CRPN", - "name": "cryptonators", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ibby255/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GVsdtSe3E2fQoP3TzNT2M1VUchJ7sBmDBuvBZmGDGvmB", - "symbol": "PEEL", - "name": "PEEL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GVsdtSe3E2fQoP3TzNT2M1VUchJ7sBmDBuvBZmGDGvmB/logo.png", - "tags": ["social-token", "utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/SolKongz", - "website": "https://www.solkongz.net/" - } - }, - { - "chainId": 101, - "address": "4vXidyArpT8fyQTmfXfMNHitj5ay1Fjcnbw9fJLL2zBa", - "symbol": "HONSHU", - "name": "HONSHU", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4vXidyArpT8fyQTmfXfMNHitj5ay1Fjcnbw9fJLL2zBa/logo.png", - "tags": ["social-token", "utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/HonshuWolves" - } - }, - { - "chainId": 101, - "address": "29dvN2ABzyyKFJs7ZiqPEoFuv5cRKhtkCxjfeaDVEjwe", - "symbol": "TERPS", - "name": "TERPS TOKEN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/29dvN2ABzyyKFJs7ZiqPEoFuv5cRKhtkCxjfeaDVEjwe/logo.png", - "extensions": { - "twitter": "https://twitter.com/KryptoKronicNFT", - "website": "https://kryptokronic.io/" - } - }, - { - "chainId": 101, - "address": "ucJLDcy5K7aHm8LVAwpnjWxMAn1MPZ3Wdq5hg9PXjsH", - "symbol": "FLOYD", - "name": "Floyd Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/AlexMGalvez/George-Floyd-Awareness-Token/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HuWgMSopqLv2uriuvsAMZnSE8DyQCXyfHD6C2NJUHFPX", - "symbol": "PARTWL", - "name": "Particles Pre-sale", - "decimals": 0, - "logoURI": "https://i.imgur.com/xVznBiJ.jpg", - "tags": ["particles-nft"], - "extensions": { - "description": "Pre-sale Date Feb 11 at 9pm UTC", - "discord": "https://dsc.gg/particles" - } - }, - { - "chainId": 101, - "address": "BPgZHN1YTZ5YGi1AkNSjAA3bKz1mi3VuvaHuWg5eCsQh", - "symbol": "SNDR", - "name": "Sinder Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ddhoch/cryptoSNDR/main/SinderCoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DvamBgpr7JxvcCdpUud7UvESjjZC2Sp1jqautepgtqFf", - "symbol": "FRIX", - "name": "Frickin Frix", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/thevaliantviking/FrickingFrix/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EnirFMFgqKebUHSsKt1Z9CKZCddUMS3DZ9iL3uLsbeJo", - "symbol": "$0LEG", - "name": "Olegario Arbelaez", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/drivengroup/0legario.github.io/main/images/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "35v9KktjoyRWbACbtVcEFjGbmhAN2QFb4hJvB2MnSyTd", - "symbol": "PWL", - "name": "Particles Presale", - "decimals": 9, - "logoURI": "https://i.imgur.com/xVznBiJ.jpg", - "tags": ["particles-nft", "feb11-9pm-utc"], - "extensions": { - "discord": "https://dsc.gg/particles" - } - }, - { - "chainId": 101, - "address": "9qEKV8LZuZWiqBPLh7zFszBvBBE85q7Rgo6iDjurDAqZ", - "symbol": "TESLON", - "name": "Teslon Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/vaibhavgupta28/teslon/main/TESLON.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Abym7kC68rnC5BRk1gsuTX19Yv2RGysQVDBoAUkr7NwK", - "symbol": "MCOIN", - "name": "Mcoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/nn9uy3n0326/m-coin/main/Mcoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "B3YqABfC8T8MTdPeDEof469zJiUWjy4CwM94dMaeMpxG", - "symbol": "$PoSB", - "name": "PoSB Doubloon", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/B3YqABfC8T8MTdPeDEof469zJiUWjy4CwM94dMaeMpxG/logo.png", - "tags": ["posb-token", "doubloon"], - "extensions": { - "description": "Pirates of Sol Bay Crew Token", - "discord": "https://discord.gg/wEXT6vFKBM", - "twitter": "https://twitter.com/PiratesOfSolBay", - "website": "https://www.piratesofsolbay.com/" - } - }, - { - "chainId": 101, - "address": "6o9N9o2axcm3kCcvjSmMHhR9MatuKdVTBsZsH3T5cFRb", - "symbol": "DOUG", - "name": "Doug Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/AnEpicTurtle/DougCoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Bwq2FJjmtkiTEFGRGpQE3QyeUFBcbZBLKMWy8fmcD8T9", - "symbol": "GDLKa", - "name": "GDLK Access Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Bwq2FJjmtkiTEFGRGpQE3QyeUFBcbZBLKMWy8fmcD8T9/logo.png", - "tags": ["NFT"] - }, - { - "chainId": 101, - "address": "Fy6cyRqB4SATf4kRAgXEL9Cze9gz468Mk1fNL5mY3msU", - "symbol": "$Steak", - "name": "Steak token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Fy6cyRqB4SATf4kRAgXEL9Cze9gz468Mk1fNL5mY3msU/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/ekF24e5JEe", - "instagram": "https://instagram.com/royallionclub", - "telegram": "https://t.me/royallionclub", - "twitter": "https://twitter.com/royallionclub", - "website": "https://royallionpartyclub.com" - } - }, - { - "chainId": 101, - "address": "7okxAUuyxQLsgkoSBNkhSGQoUkYdXMaL8KWuxNDLpkoZ", - "symbol": "MSEK", - "name": "Metasek", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7okxAUuyxQLsgkoSBNkhSGQoUkYdXMaL8KWuxNDLpkoZ/logo.png", - "extensions": { - "medium": "https://metasek.medium.com", - "telegram": "https://t.me/metasek", - "twitter": "https://twitter.com/MetaSek_", - "website": "https://www.metasek.finance/" - } - }, - { - "chainId": 101, - "address": "4Nj9HtQ7W18Wuyka3bkm7sQngnJB6Rj8oLyjLs6cKZH6", - "symbol": "ATLX", - "name": "Atleron", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/atleron/atleron/main/atlxlogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "G2PQTxEooYBG6TcrJ97tFrBzyYoFiRQwwTwiAkTycpwd", - "symbol": "BUM", - "name": "Beach Bum Billionaire", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/bumbeach/crypto/main/logo.png", - "tags": ["Defi-token"] - }, - { - "chainId": 101, - "address": "5ScrqeNncPHfiCtiHfg6KVtxJoYp4sWdp3bnWtddr1gY", - "symbol": "RPTR", - "name": "RaptorKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/xAlphaRaptor/New-crypto/main/Token.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Fr44SZqRCxUQ3GcK9yrHcEW8aQqKYW9wmsavdGYWfdHd", - "symbol": "JLSP", - "name": "JAMIE PEANUT", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/BleuBacon/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "netGLdgjzwsr3zfX1YH59yMGNjX4nK8VtZGJvq7G35Z", - "symbol": "NETG", - "name": "Net Gala", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/netGLdgjzwsr3zfX1YH59yMGNjX4nK8VtZGJvq7G35Z/logo.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "discord": "https://discord.gg/NetGala", - "twitter": "https://twitter.com/NetGalaNFT", - "website": "https://netga.la/" - } - }, - { - "chainId": 103, - "address": "4hSYCK4fbjzDUKxQPJUjAqa9rpdd8r5QjVrsxVP83dCx", - "symbol": "PET", - "name": "SEED PET TOKEN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4hSYCK4fbjzDUKxQPJUjAqa9rpdd8r5QjVrsxVP83dCx/logo.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 103, - "address": "EhdRK8hKjeNr6R3WStmh7LeiHDtZNdFLru6Mva1t8DZ1", - "symbol": "ZED", - "name": "SEED Weapon Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EhdRK8hKjeNr6R3WStmh7LeiHDtZNdFLru6Mva1t8DZ1/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DiZZVBNDEpCDLJceFAqwR1DrtGtyHk9ymCHfzxYJP2KX", - "symbol": "WDC", - "name": "White Devil Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/wdevil404/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "frtnaScfGPuo56uyPGmij1QTc64SBdjnXC3RXmcVmxw", - "symbol": "FRTN", - "name": "Fortune", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/cesar128/token-list/3b60aecbb7e2565151a9dc3c2e4dab1a96acb520/assets/mainnet/frtnaScfGPuo56uyPGmij1QTc64SBdjnXC3RXmcVmxw/logo.png", - "extensions": { - "coingeckoId": "fortune-finance", - "discord": "https://discord.gg/fortunefinance", - "twitter": "https://twitter.com/fortunefinance_", - "website": "https://fortune.finance/" - } - }, - { - "chainId": 101, - "address": "Fy3ZMyNFPiA4xZfpiFCrWYRwXSfmRHbvoBvxRVYBnPWN", - "symbol": "DDC", - "name": "Doodle Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Fy3ZMyNFPiA4xZfpiFCrWYRwXSfmRHbvoBvxRVYBnPWN/logo.png", - "tags": ["game-token"] - }, - { - "chainId": 101, - "address": "6P6tND7xPMnGh1Xcc4YrD61SWs5zqe4KqW35jGQywhEu", - "symbol": "TSW", - "name": "TokenStore World", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/admin5505/tsw/main/logo.png", - "extensions": { - "website": "https://tokenstore.world/" - } - }, - { - "chainId": 101, - "address": "67QGaWsVKCPU3XeWNomsmVcE34Y1TM5gRF2PH5pMvFL7", - "symbol": "ZYHON", - "name": "Zyhon Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/M0rphe0us/ZhyonCoin/main/zhyonlogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "m4Js9gR4SqX8QL66TU31NT3zCKSotbB2PiVv9wA7BuJ", - "symbol": "M4JS", - "name": "Memes4JS", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/m4Js9gR4SqX8QL66TU31NT3zCKSotbB2PiVv9wA7BuJ/logo.png", - "extensions": { - "telegram": "https://t.me/memes4js" - } - }, - { - "chainId": 101, - "address": "63txudD2TqtVTyke1os4iUhzbcU34ykMvnhWVDcyRgxL", - "symbol": "BLA", - "name": "BLADE", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/63txudD2TqtVTyke1os4iUhzbcU34ykMvnhWVDcyRgxL/logo.png", - "tags": ["EarnToPlay"] - }, - { - "chainId": 101, - "address": "43ynN6Y2mG7k3cU9EQveo5KJmzQKenzx2VGu6yVc2yfz", - "symbol": "SGOD", - "name": "SolanaGold", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/sgolld/crypto/main/logo.png", - "tags": ["Defi", "NFT", "GAME"] - }, - { - "chainId": 101, - "address": "9qCSRCRg8nKk6g78bvNNhqm3wfrDAgKfyvnfCcCmoU6t", - "symbol": "KRMA", - "name": "Kuruma", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/alexhunterzs7/crypto/main/logo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Hys3b2ED2Wc5pZnZx6Yd7Fcc6zNtPCVk8NcQaKzNx2Md", - "symbol": "LATIN", - "name": "Latinos", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Hys3b2ED2Wc5pZnZx6Yd7Fcc6zNtPCVk8NcQaKzNx2Md/logo.png", - "tags": ["NFT", "utility-token", "community-token", "social-token"], - "extensions": { - "discord": "https://discord.gg/DfTFVgwyvN", - "instagram": "https://instagram.com/latinostoken", - "twitter": "https://twitter.com/latinostoken", - "website": "https://medium.com/@latinostoken/latinos-al-poder-27315aed41d3" - } - }, - { - "chainId": 101, - "address": "htoHLBJV1err8xP5oxyQdV2PLQhtVjxLXpKB7FsgJQD", - "symbol": "HTO", - "name": "HTO", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/htoHLBJV1err8xP5oxyQdV2PLQhtVjxLXpKB7FsgJQD/logo.png", - "tags": ["utility-token", "governance-token", "metaverse"], - "extensions": { - "twitter": "https://twitter.com/heavenland_io", - "website": "https://heavenland.io/" - } - }, - { - "chainId": 101, - "address": "9vezmSLnbUc2aeuLEubVWHdqwhTbnEhCuesRa3kR5SpK", - "symbol": "BEER", - "name": "BEER Token", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9vezmSLnbUc2aeuLEubVWHdqwhTbnEhCuesRa3kR5SpK/logo.png", - "tags": ["meme-token", "utility-token", "fun-token"], - "extensions": { - "discord": "https://discord.gg/Tn2CzcuD", - "twitter": "https://twitter.com/thebeertoken", - "website": "https://beertoken.com/" - } - }, - { - "chainId": 101, - "address": "E8erdK9QjBZEMmkXisFRFrWA3kes7kRLhWcaT1VE7tWg", - "symbol": "CLAND", - "name": "Zeeland Homes", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/E8erdK9QjBZEMmkXisFRFrWA3kes7kRLhWcaT1VE7tWg/Coinlogo.png", - "tags": ["De-Fi", "real-estate", "community-token"], - "extensions": { - "website": "https://blocksto.ne/zeeland-homes/" - } - }, - { - "chainId": 101, - "address": "52GzcLDMfBveMRnWXKX7U3Pa5Lf7QLkWWvsJRDjWDBSk", - "symbol": "NGNC", - "name": "NGN Coin", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/52GzcLDMfBveMRnWXKX7U3Pa5Lf7QLkWWvsJRDjWDBSk/logo.png", - "tags": ["stablecoin"], - "extensions": { - "website": "https://www.linkio.africa/" - } - }, - { - "chainId": 103, - "address": "BnT724Zd3WTFnYmpTMe1a4NqkWCJSjxf13iGyKEXHRiS", - "symbol": "TFT", - "name": "Techforce Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BnT724Zd3WTFnYmpTMe1a4NqkWCJSjxf13iGyKEXHRiS/logo.png", - "tags": ["utility-token", "community-token", "social-token"], - "extensions": { - "website": "https://techforceglobal.com/" - } - }, - { - "chainId": 101, - "address": "39oHe7Aw7XNpc23KKzJJZrPYNBnheobuGhJZoqJUknTW", - "symbol": "HIQ", - "name": "HiQoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mpnox/HiQoins/main/HiQoin.png", - "tags": ["social-token", "HiQ"], - "extensions": { - "website": "https://hiq.se/" - } - }, - { - "chainId": 101, - "address": "96NEqUTsdQZ3aQvs3ci67pAuGptRN3spgHTeC4PXxHRP", - "symbol": "CCDAO", - "name": "Cyber City DAO", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/96NEqUTsdQZ3aQvs3ci67pAuGptRN3spgHTeC4PXxHRP/logo.png", - "extensions": { - "discord": "https://discord.gg/cybercitydao", - "twitter": "https://twitter.com/CyberCityDAO", - "website": "https://cybercitydao.io/" - } - }, - { - "chainId": 101, - "address": "GMkKEutqt8Rr4pa2Fh9XZ4ZiQ54DoA64qxmKJXNX7s65", - "symbol": "BARTER", - "name": "Barter Coin", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GMkKEutqt8Rr4pa2Fh9XZ4ZiQ54DoA64qxmKJXNX7s65/Coinlogo.png", - "tags": ["community-token", "Barter-trade"], - "extensions": { - "website": "https://blocksto.ne/barter/" - } - }, - { - "chainId": 101, - "address": "GXnRgq7q9uunrTmaCGL98Riugv88dv7uKiBqoxzmKwXE", - "symbol": "BRG", - "name": "Baby Rapper Gank", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GXnRgq7q9uunrTmaCGL98Riugv88dv7uKiBqoxzmKwXE/logo.png" - }, - { - "chainId": 101, - "address": "485JRT9ejhCmZK6rQj9kNBQK6DfzRerRefRWPxkmbtA3", - "symbol": "TRASH", - "name": "Trash Token", - "decimals": 9, - "logoURI": "https://raw.githack.com/solbumfights/tokenlogo/main/trash.png", - "tags": ["community-token"] - }, - { - "chainId": 101, - "address": "GZdhs47e6BkHyisqbGe8FKZNHbQVqm1bq9uYciSCkvdH", - "symbol": "JANJAAP-WALLET", - "name": "Wallet of Jan Jaap Geusebroek", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GZdhs47e6BkHyisqbGe8FKZNHbQVqm1bq9uYciSCkvdH/jjPNG.png", - "tags": ["Solana-wallet", "JanJaap-Geusebroek", "Blockstone-Founder"], - "extensions": { - "linkedin": "https://www.linkedin.com/in/janjaap-geusebroek/", - "website": "https://blocksto.ne/" - } - }, - { - "chainId": 101, - "address": "T1NYHYDyTYqft3UHvYKq3SzTBhSPWVcouVA1bp2fDE9", - "symbol": "TINY", - "name": "TINY", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/danvernon/tiny-dogz-logo/main/coin.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/K3rqQVxDdX", - "twitter": "https://twitter.com/TinyDogzNFT", - "website": "https://tinydogz.com/" - } - }, - { - "chainId": 101, - "address": "WLt4YzchWBFCa62cottuJniCGUpVQxy9uEmtwws6iiK", - "symbol": "MVBWL", - "name": "MinerVerse Brews Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WLt4YzchWBFCa62cottuJniCGUpVQxy9uEmtwws6iiK/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FXTaYTiqvXChz1ASom1ngEqt7LTjr5hfdwHoRkfjJfkd", - "symbol": "MDR", - "name": "Madori", - "decimals": 7, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FXTaYTiqvXChz1ASom1ngEqt7LTjr5hfdwHoRkfjJfkd/logo.svg", - "tags": ["utility-token"], - "extensions": { - "website": "https://www.madori.tech/" - } - }, - { - "chainId": 101, - "address": "ARApgmD9DyUo72TcfDpRomb13YZkqZKoLroRdeez8UeQ", - "symbol": "ARTEM", - "name": "ARTEM Coin", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ARApgmD9DyUo72TcfDpRomb13YZkqZKoLroRdeez8UeQ/logo.png", - "tags": ["ARTEM", "ART", "NFT"], - "extensions": { - "description": "ARTEM is a fungible cross-chain digital token created by Simonida Pavicevic and Elio D'Anna (founders of The House of Fine Art, Kreation, House of Luxury, and Artcels) made especially for the fine art, digital art, and luxury collectables marketplace and global artist communities.", - "medium": "https://medium.com/@ArtemCoin", - "telegram": "https://t.me/ARTEMCoinOfficial", - "twitter": "https://twitter.com/Artem_Coin", - "website": "https://artemcoin.com" - } - }, - { - "chainId": 101, - "address": "6z484cGkS5Nxg1XvZR2wkivCHYXvTwMp5intiA59kWCP", - "symbol": "LSTN", - "name": "Listen Token", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/izetrom/token/master/logo.png" - }, - { - "chainId": 101, - "address": "4exqZikhVp8XEToXekwYLw5YqXwzH7wUmwF76pHvubN2", - "symbol": "GBL", - "name": "GLOBAL INV CORP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4exqZikhVp8XEToXekwYLw5YqXwzH7wUmwF76pHvubN2/GINV.png", - "tags": ["utility-token"], - "extensions": { - "telegram": "https://t.me/GLOBALINVC", - "twitter": "https://twitter.com/globalinvcorp", - "website": "https://en.globalinvcorp.com/ginvtoken" - } - }, - { - "chainId": 101, - "address": "D4niwCVzNKtt7dGw5X6TAJrLNBLvv8fZveh3bnNK7dcu", - "symbol": "WPWD", - "name": "Prison Worlds Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/prisonworlds/brands/main/whitelist.png", - "tags": ["whitelist-token", "NFT"], - "extensions": { - "website": "https://twitter.com/Prison_Worlds" - } - }, - { - "chainId": 101, - "address": "7KyxUX8H4bMi5PS5NERzEDTcLnM5JYt7wqEcG22ZLrAf", - "symbol": "PWD", - "name": "Prison Worlds", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/prisonworlds/brands/main/token.png", - "tags": ["utility-token", "NFT"], - "extensions": { - "twitter": "https://twitter.com/Prison_Worlds", - "website": "https://prisonworlds.com/" - } - }, - { - "chainId": 101, - "address": "31MbbgAyf2WJEzaG9Ck8WRvs2sq9UuDw7gr7cQ1PH3Xs", - "symbol": "SUN", - "name": "Sun Token", - "decimals": 0, - "logoURI": "https://cdn.discordapp.com/attachments/936507261264724008/940702342586728538/THE_SUN.png" - }, - { - "chainId": 103, - "address": "GGkyk1KNs6kbnEgYwqYaPtuSwTXVhXPYBqododhGfw3T", - "symbol": "UNITOK", - "name": "Bugsy Token", - "decimals": 6, - "logoURI": "https://bugsy.world/logo.png", - "tags": ["DeFi", "Gaming", "Gambling"] - }, - { - "chainId": 101, - "address": "BnV3XcZUbNsuonNKqkQrZSvCN8tVYTJtDgfUx6DJ9riy", - "symbol": "NOIA", - "name": "NOIA", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BnV3XcZUbNsuonNKqkQrZSvCN8tVYTJtDgfUx6DJ9riy/logo.png", - "tags": ["social-token", "utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/eunoianfts", - "website": "https://eunoianfts.com/" - } - }, - { - "chainId": 101, - "address": "DPuGqV7jq9PEbcRU7bWzuaJx5bGiaVj4cNWhWjTdWAKi", - "symbol": "DOPIES", - "name": "DOPE", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DPuGqV7jq9PEbcRU7bWzuaJx5bGiaVj4cNWhWjTdWAKi/logo.png", - "tags": ["social-token", "utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/DopeApes" - } - }, - { - "chainId": 101, - "address": "4onzDs1X6ubktirorHB8iYbve3K4bBtkGpYehqzGm9So", - "symbol": "BIJU", - "name": "BIJU", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4onzDs1X6ubktirorHB8iYbve3K4bBtkGpYehqzGm9So/logo.png", - "tags": ["social-token", "utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/KuramaFoxes", - "website": "https://kuramafoxes.io/" - } - }, - { - "chainId": 101, - "address": "3EBLgqhs6CPff7DZMmQRoVFAy7Y9CpTZeKyEw8eryZj2", - "symbol": "BUZZ", - "name": "BUZZ", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3EBLgqhs6CPff7DZMmQRoVFAy7Y9CpTZeKyEw8eryZj2/logo.png", - "tags": ["social-token", "utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/buzzapegang", - "website": "https://buzz-ape.com/" - } - }, - { - "chainId": 101, - "address": "DHbGBhZc1yLLgpPqAzr7KGs47oCMfbg2q6Fmg5NCSM1C", - "symbol": "BAMB", - "name": "BAMB", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DHbGBhZc1yLLgpPqAzr7KGs47oCMfbg2q6Fmg5NCSM1C/logo.png", - "tags": ["social-token", "utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/patrol_panda", - "website": "https://panda-patrol.com/" - } - }, - { - "chainId": 101, - "address": "DhYTJPmUa5kQZfLgHb1soubgaK4VLZMxb8CTNY1vZ93S", - "symbol": "MEK", - "name": "MEK", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DhYTJPmUa5kQZfLgHb1soubgaK4VLZMxb8CTNY1vZ93S/logo.png", - "tags": ["social-token", "utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/MekaGorillaz" - } - }, - { - "chainId": 101, - "address": "8YQiVihv9DRqpcE6W1NF7wjGzUvheV15Cn577wVDsL39", - "symbol": "SHAEBA", - "name": "Shaeba Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/nazmulababy/crypto/main/shaeba-coin-logo.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "5mhEaWHh81FF2aJoTV7GuTgt4fiBvj3HGzoJ26eFka1a", - "symbol": "FERC", - "name": "FerretCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mpnox/HiQoins/main/FERC.png", - "tags": ["social-token", "fun-token", "meme-token"] - }, - { - "chainId": 101, - "address": "TocKJBU6yproKbFJCDcM8KHFzuWLzVEi5LXLMG6EoDw", - "symbol": "SLTT", - "name": "Solotto WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/TocKJBU6yproKbFJCDcM8KHFzuWLzVEi5LXLMG6EoDw/logo.png" - }, - { - "chainId": 101, - "address": "Y71XaLmJPvuPY4h4LnTZfFgSR6vP3qCxGLpCx25JTMA", - "symbol": "STEAK", - "name": "STEAK", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Y71XaLmJPvuPY4h4LnTZfFgSR6vP3qCxGLpCx25JTMA/logo.png", - "tags": ["social-token", "utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/RoyalLionParty", - "website": "https://royallionpartyclub.com/" - } - }, - { - "chainId": 101, - "address": "2zRiTfY2mmkUcDtj7Rp8pZuB15D5fupxoTaNEDewomTj", - "symbol": "HEYESWL", - "name": "Hollow Eyes WL", - "decimals": 0, - "logoURI": "https://cdn.jsdelivr.net/gh/viniciuskloppel/hollow-eyes-token-image/hollow-eyes.jpg", - "tags": ["Whitelist", "NFT"] - }, - { - "chainId": 101, - "address": "C6n8Cb7kVjbXGPLybfgHNM783mQS1Jhs9RCx1ewiYXw", - "symbol": "ZHC", - "name": "ZashcheCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/ft-1408/ZashcheCoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "XenomnZ7kLQxfENcKKpfC8tov3GoZiW4XrDmPc8HRxd", - "symbol": "XENO", - "name": "Xenobots Fuel", - "decimals": 9, - "logoURI": "https://i.ibb.co/KbkmW7D/unknown-5-Copie.png", - "tags": ["NFT", "Staking", "fusion", "Passive-income", "Breeding"], - "extensions": { - "twitter": "https://twitter.com/XenobotsNFT", - "website": "https://thexenobotsproject.com" - } - }, - { - "chainId": 101, - "address": "8aMSnqggXTFEn4PSfB5gpzJja8ZuCLMjNV2VadPomhxx", - "symbol": "YOG", - "name": "Yoga Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/VibhorOne8/YOGA/main/logo.png.jpg", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "ANevJMDLF8Z2tJawwtmqqTENU38k6hHqgMyHgffMLdR7", - "symbol": "GUIN", - "name": "GuinCoin", - "decimals": 0, - "logoURI": "https://github.com/Ai4503/Guin/blob/main/GuinCoin.png", - "tags": ["social-token", "NFT", "utility-token", "community-token"] - }, - { - "chainId": 101, - "address": "dUjHL6zHaZtQjL6UKy1NBLZSbD4CCH3TAW4mDafLCzU", - "symbol": "CONW", - "name": "Construction World", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/conworldtoken/conwimage/main/CONWI.png", - "tags": ["metaverse-token", "social-token"], - "extensions": { - "twitter": "https://twitter.com/Constructionwrl", - "website": "https://conworld.org/" - } - }, - { - "chainId": 101, - "address": "CSDTxoTLT1aniyoJSZ8uvHMe9GoLno1jpTSGNAbYfiwr", - "symbol": "CSDT", - "name": "CryptoShards Discount Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CSDTxoTLT1aniyoJSZ8uvHMe9GoLno1jpTSGNAbYfiwr/logo.png", - "tags": ["discount-token", "sweepstakes"], - "extensions": { - "discord": "https://discord.gg/VJUtHVJWyv", - "twitter": "https://twitter.com/CryptoShardsNFT", - "website": "https://cryptoshards.art/" - } - }, - { - "chainId": 101, - "address": "68RRPuZQrrw3whXHm9LSyC4y8iLrjkTm5Brc2tUMLNPw", - "symbol": "CLAN", - "name": "Clan Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SolPatrol/SolPatrol/main/%24CLAN_Token.png", - "tags": ["NFT"] - }, - { - "chainId": 101, - "address": "EKmeuVtJRMsXek53ohh33BG3QLxBAiCh4SqGCvS2Eq4W", - "symbol": "CREATURE", - "name": "Creature Scroll", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SolPatrol/SolPatrol/main/CREATURE_Token.png", - "tags": ["NFT"] - }, - { - "chainId": 101, - "address": "6wJYjYRtEMVsGXKzTuhLmWt6hfHX8qCa6VXn4E4nGoyj", - "symbol": "GORE", - "name": "GORE COIN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SolPatrol/SolPatrol/main/gore-coin.png", - "tags": ["NFT"] - }, - { - "chainId": 101, - "address": "DnYLfTsnLMYVdDhnZuzekdGf8AMQ3crDR2qRfpHRe47i", - "symbol": "FIN", - "name": "FIN COIN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SolPatrol/SolPatrol/main/malibu-coin.png", - "tags": ["NFT"] - }, - { - "chainId": 101, - "address": "32CHtMAuGaCAZx8Rgp54jSFG3ihbpN5brSvRAWpwEHPv", - "symbol": "DAB", - "name": "DAB COIN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SolPatrol/SolPatrol/main/basc-coin.png", - "tags": ["NFT"] - }, - { - "chainId": 101, - "address": "bATSLdvufuY3vQYv18HAEN3sJTLPodtiq2FtUismJd1", - "symbol": "bATS", - "name": "Bonded ATS", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HJbNXx2YMRxgfUJ6K4qeWtjatMK5KYQT1QnsCdDWywNv/logo.png", - "tags": ["utility-token", "dex", "swap"], - "extensions": { - "coingeckoId": "atlas-dex", - "coinmarketcap": "https://coinmarketcap.com/currencies/atlas-dex/", - "medium": "https://atlasdex.medium.com/", - "twitter": "https://twitter.com/atlas_dex", - "website": "https://atlasdex.finance/" - } - }, - { - "chainId": 101, - "address": "6cWXLiJQSaMX1446s6yfU9cj44xA7cRVjAy8pzuya5dz", - "symbol": "DODA", - "name": "SAAD token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/alinet84/DODA/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "G9DvVA9XhoTd4GnaBbM4oNWGreM1y75qd12E39PLRjdE", - "symbol": "GMNFT", - "name": "GreenMan", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/G9DvVA9XhoTd4GnaBbM4oNWGreM1y75qd12E39PLRjdE/test1.png", - "tags": ["NFT"], - "extensions": { - "website": "http://MyMetaHedge.com" - } - }, - { - "chainId": 101, - "address": "GUdpDLrmJYiXCPmw7U65jz9acHy1z9b1CKnYJxf8kZns", - "symbol": "GRUMPY", - "name": "GRUMPY TOKEN", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GUdpDLrmJYiXCPmw7U65jz9acHy1z9b1CKnYJxf8kZns/logo.png", - "extensions": { - "twitter": "https://twitter.com/grumpysolnft", - "website": "https://grumpysolnft.com" - } - }, - { - "chainId": 101, - "address": "BtndwmZJ6QSJpb2dQFm9VyuaQPfKGFB9NrLXeY7rHvT8", - "symbol": "CUSEGOVERNANCE", - "name": "CuseTheJuice Governance Token", - "decimals": 9, - "logoURI": "https://github.com/CuseTheJuice/token-list/blob/main/assets/mainnet/BtndwmZJ6QSJpb2dQFm9VyuaQPfKGFB9NrLXeY7rHvT8/logo.png?raw=true", - "tags": ["social-token"], - "extensions": { - "discord": "https://discord.gg/xHpRcRKG", - "twitter": "https://twitter.com/CuseTheJuice", - "website": "https://linktr.ee/CuseTheJuice" - } - }, - { - "chainId": 101, - "address": "ToTxDbCvSKrTozuTLyTpiUMPMuyNtSohiXxcxbGv5wL", - "symbol": "HODLWhales", - "name": "HODL Whales White List Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solanahodlwhales/whitelist/main/whitelistToken.png", - "tags": ["NFT"], - "extensions": { - "twitter": "https://twitter.com/SolanaWhalesNFT", - "website": "https://solanahodlwhales.io" - } - }, - { - "chainId": 101, - "address": "HRVSkf3Vp5CLCA3a53qQawyPj8LXWNTVcF9zkLxHLnYt", - "symbol": "HMTT", - "name": "HMATT Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SolanaTokenMerger/HMATT-Coin/main/logo.png", - "tags": [ - "social-token", - "community-token", - "utlity-token", - "game-token", - "hmatt-token" - ], - "extensions": { - "instagram": "https://www.instagram.com/hmattofficial", - "twitter": "https://twitter.com/_hmatt", - "website": "https://hmatt.forstar.shop/", - "youtube": "https://www.youtube.com/channel/UC89WhLz7cetBparM1hrIrFQ" - } - }, - { - "chainId": 101, - "address": "2dafTgJTtwDUx6RRYEv7Bxjp7nr1G6cyTP6cWQqXGjQ3", - "symbol": "GOI", - "name": "Gems Of The Internet", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MrRobotop/gemsoftheineternet/main/logo.png", - "tags": ["social-token", "community-token", "utility-token"] - }, - { - "chainId": 101, - "address": "4t4Jq2LPFbePVe11HJJQByWhZgQWDkmRNhYtTo6rZa63", - "symbol": "CREDITCARD", - "name": "CREDIT CARD SOL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4t4Jq2LPFbePVe11HJJQByWhZgQWDkmRNhYtTo6rZa63/Coinlogo.png", - "tags": ["credit-card", "solana"], - "extensions": { - "website": "https://blocksto.ne/credit-card/" - } - }, - { - "chainId": 101, - "address": "7WSbzRYnisqGcYxG8yeCwViUbs3zGjpABAs7EAkMbj2y", - "symbol": "CSC", - "name": "Cipherspace Credits", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/Cipherspace-Credits/CSC/main/logo.png", - "tags": [ - "social-token", - "utility-token", - "community-token", - "gaming", - "NFT" - ], - "extensions": { - "description": "Credits to be used in Cipherspace", - "discord": "https://discord.gg/3UJRJfeMmk", - "twitter": "https://twitter.com/Cipherspace_Cr", - "website": "https://www.cipherspace.credit" - } - }, - { - "chainId": 101, - "address": "mHzSiPEFjydrQoDb2e5JimTVR7kpz9PLMWYCaaSqM3U", - "symbol": "DXTR", - "name": "DaxterCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/apexslug/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6c1QMK2LCCojQ59uaormMLvDj3K8Vpfk7Br4fMAqgpqE", - "symbol": "DPBLS", - "name": "DeploraBills", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6c1QMK2LCCojQ59uaormMLvDj3K8Vpfk7Br4fMAqgpqE/logo.png", - "tags": ["deplorable", "free-speech", "deplorabills"], - "extensions": { - "website": "https://deplorabills.com/" - } - }, - { - "chainId": 101, - "address": "2L1CKRS2NzJPGB22m2CpMtFcEvujk4ehDHWJW8nTpxdA", - "symbol": "UZB", - "name": "Uzbek Coin", - "decimals": 0, - "logoURI": "https://github.com/sanjarbek1807/Uzbekcrypto/blob/main/msg453275494-436158.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3xpb7ZioKc88PWJhrYMZioBp8SWP9DYejuwVBy4uCBj5", - "symbol": "TJCN", - "name": "TechJosieCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/techjosie/crypto/main/mainlogoICON.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "H1fZRaLJdiUMkPzuWQTDhG6ToYP7BNDsEMcDoJj7PPA", - "symbol": "GGWL", - "name": "GLOOMY GECKO WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/H1fZRaLJdiUMkPzuWQTDhG6ToYP7BNDsEMcDoJj7PPA/logo.png", - "tags": ["NFT", "mint-token", "whitelist"], - "extensions": { - "twitter": "https://twitter.com/GloomyGeckos", - "website": "https://www.gloomygeckonft.com/" - } - }, - { - "chainId": 101, - "address": "BXDAzbZVi6USE3GLcTqc5d78vbU7T6KeDJwKgBzPNF5r", - "symbol": "GGNFT", - "name": "GreenGuy", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BXDAzbZVi6USE3GLcTqc5d78vbU7T6KeDJwKgBzPNF5r/test1.png", - "tags": ["NFT"], - "extensions": { - "website": "http://MyMetaHedge.com" - } - }, - { - "chainId": 101, - "address": "E9q7G44vMQSKTfxXGUppKyRzWpZAAp5rQoFBcjehyTNY", - "symbol": "AAKA", - "name": "Aaka", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ayan4157/crypto-aaka/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7CYJuwZmvhzQptaruSoH34xEPyZVKxk5dzq3vHsHYQeS", - "symbol": "FROG", - "name": "FROG Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/FRoGricH18/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7jSfgVyxrCW5D9C7S5XHu32y8aeQgGFgjh6vzrGVW6oV", - "symbol": "3MUT", - "name": "Freedom Cash", - "decimals": 6, - "logoURI": "https://user-images.githubusercontent.com/34078361/153697539-c5dd51c4-73fd-43bc-bb5e-f6ac1acebfd6.png", - "tags": ["stablecoin", "utility-token"], - "extensions": { - "discord": "https://discord.gg/zzdZx5aMfx", - "twitter": "https://twitter.com/FreedomDAO_", - "website": "https://freedom-dao.com/" - } - }, - { - "chainId": 101, - "address": "Gh1jKzmxf95cT5PQabNbfJskkQU8kQ5UugfpbHSnPq9z", - "symbol": "NRC", - "name": "Neon Rocket Coin", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/neontechanoah/neon_rocket_coin/main/asset/NRC_Logo_100px.png", - "tags": ["social-token"], - "extensions": { - "twitter": "https://twitter.com/NeonRocketCoin" - } - }, - { - "chainId": 101, - "address": "DWXDRm1TbZBxy4Gtyg746Ms2moW7HtNT6j8dYtKs8u8y", - "symbol": "CUSEGOVERNANCELP", - "name": "CuseTheJuice Governance Token Liquidity Pool", - "decimals": 9, - "logoURI": "https://github.com/CuseTheJuice/token-list/blob/main/assets/mainnet/DWXDRm1TbZBxy4Gtyg746Ms2moW7HtNT6j8dYtKs8u8y/logo.png?raw=true", - "tags": ["social-token"], - "extensions": { - "discord": "https://discord.gg/xHpRcRKG", - "twitter": "https://twitter.com/CuseTheJuice", - "website": "https://linktr.ee/CuseTheJuice" - } - }, - { - "chainId": 101, - "address": "YuGiLp6mrZwQXVDr8xHMDiadp2og3QTKKyUqM3Fr2Yu", - "symbol": "YUGI", - "name": "Millenium", - "decimals": 0, - "logoURI": "https://github.com/KKQanT/token-list/blob/main/assets/mainnet/YuGiLp6mrZwQXVDr8xHMDiadp2og3QTKKyUqM3Fr2Yu/logo.png", - "tags": ["testing-token"] - }, - { - "chainId": 101, - "address": "HWhcvxobFohwVaDD1DGh2nKnenB7dytCpxi5EVL2DJst", - "symbol": "PUTIN", - "name": "Putin Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HWhcvxobFohwVaDD1DGh2nKnenB7dytCpxi5EVL2DJst/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AzRN9BgQFVbcvVn34pvi5h1GqBUg7zXtV6RZNfeobfoX", - "symbol": "TRBE", - "name": "Tribe Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/TribeLeaderNFT/TribeTokenImage/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ELADrKrvyv7mtQ5DbCvPDGogn4fcApH3jDeTy2qpfhsA", - "symbol": "VIDI", - "name": "VIDI", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ELADrKrvyv7mtQ5DbCvPDGogn4fcApH3jDeTy2qpfhsA/logo.png", - "extensions": { - "discord": "http://discord.gg/vidiart", - "medium": "https://medium.com/@vidiart", - "serumV3Usdc": "Crxw1bdPQ549BfZs6iwZScmN2zZmuCA7wPvMqWWGihUM", - "twitter": "https://twitter.com/Vidi_Art", - "website": "https://vidi.art/" - } - }, - { - "chainId": 101, - "address": "29GVG3FUGaUxkZSvFQyYy23UWWk77vVRvMZRZysY2YXB", - "symbol": "PLEB", - "name": "Bittywood BittyBucks", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Luckyshotthegreat/Crypto-Bitty/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EwFQ8DHyc3Z2k7HWyABh4ZNBnjr9aGfvFLmdWe5ehepu", - "symbol": "KRM", - "name": "Keramos financial", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EwFQ8DHyc3Z2k7HWyABh4ZNBnjr9aGfvFLmdWe5ehepu/logo.png", - "tags": ["financial-token", "financial", "ai-cryptocurrency", "solana"], - "extensions": { - "description": "AI-POWERED CRYPTOCURRENCY FINANCIAL SERVICES", - "website": "https://www.keramos.tech" - } - }, - { - "chainId": 101, - "address": "2mUsVwk8Hy3cxa7AchVUA2kVwre4S3Sj5JpnafVqyQTE", - "symbol": "CLAIM", - "name": "CLAIM Coin", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2mUsVwk8Hy3cxa7AchVUA2kVwre4S3Sj5JpnafVqyQTE/Coinlogo.png", - "tags": ["claims", "invest"], - "extensions": { - "website": "https://blocksto.ne/claim-coin/" - } - }, - { - "chainId": 101, - "address": "36BCpE3T2M5mCAaudBKcR21oT4zcas88wwqBeHb1KKUC", - "symbol": "BLAK", - "name": "Blackbeard", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/BlackBeardToken/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "B3YvXxW7hrtPrg8z2ctwS8iTaJpqaWZKgLU2GyJbB5iB", - "symbol": "ShroomApes", - "name": "ShroomApes Token WL", - "decimals": 0, - "logoURI": "https://imagedelivery.net/aAmca-Po70V1nH4n9cT-uA/fd5a4f97-2ac0-4712-a721-e5ea6c5e4700/public", - "extensions": { - "discord": "https://discord.gg/D8X8wmfUaJ", - "twitter": "https://twitter.com/ApesShroom", - "website": "https://shroomapes.com" - } - }, - { - "chainId": 101, - "address": "7tX8bqmNyWMi9X32mFvxR2ZJh4hTjohd5Lc5WmCLxX8e", - "symbol": "MMC", - "name": "Millionaire Mafia Club WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/agammc/MMCTOKEN/main/MMClogo.png", - "tags": ["NFT"], - "extensions": { - "description": "Credits to Millionaire Mafia Club", - "twitter": "https://twitter.com/nftmmc" - } - }, - { - "chainId": 101, - "address": "4GJZyEZhqsHpKbWUtMGSsLYCpgDB3izrEcU61UJxBfMY", - "symbol": "KUA", - "name": "KOC\u0026U Awards", - "decimals": 4, - "logoURI": "https://i.ibb.co/CQRTSHk/KUA-Logo.png", - "tags": ["community-token"] - }, - { - "chainId": 101, - "address": "WCGXaSoSWgwBwpFzCq42eFpLFemLTCNPrAYEQt2eVmm", - "symbol": "CRYPTO", - "name": "Cryptocurrency Coin", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WCGXaSoSWgwBwpFzCq42eFpLFemLTCNPrAYEQt2eVmm/logo.png", - "extensions": { - "twitter": "https://twitter.com/cryptocoinio", - "website": "http://cryptocurrencycoin.io" - } - }, - { - "chainId": 101, - "address": "2DKaAP95JRUh5enBc81DTWCrY1enovZjZGFA6BLF8myC", - "symbol": "MILK", - "name": "Baby Rapper Gank Milk Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2DKaAP95JRUh5enBc81DTWCrY1enovZjZGFA6BLF8myC/MILKLOGO.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/babyrappergank" - } - }, - { - "chainId": 101, - "address": "BCUJboQTMHY38YFpgY1ZjnnjVfRpFoZZuEw49w8Ab6p7", - "symbol": "GJJ", - "name": "Wallet Geert Jan Jansen", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BCUJboQTMHY38YFpgY1ZjnnjVfRpFoZZuEw49w8Ab6p7/gjjPNG.png", - "tags": ["Masterpainter"], - "extensions": { - "facebook": "https://www.facebook.com/geertjanjansenmeesterschilder/", - "website": "https://geertjanjansen.nl/contact/" - } - }, - { - "chainId": 101, - "address": "GNoatrXVjt7fGV7ysjBuarLaGMg5xLYwNegu18Kn7ycJ", - "symbol": "2SET", - "name": "2SET Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SolanaTokenMerger/2SET-Coin/main/logo.png", - "tags": [ - "social-token", - "community-token", - "utility-token", - "2set-token" - ], - "extensions": { - "twitter": "https://twitter.com/twosetviolin", - "website": "https://www.twosetviolin.com/", - "youtube": "https://www.youtube.com/c/twosetviolin" - } - }, - { - "chainId": 101, - "address": "2WUdQzKMFK1BvNu55TP1jH7LaDwfrzj2zPxAdTcVMC3p", - "symbol": "FAVR", - "name": "Favor Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Panda393/Crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4nwWXS6UD8yUtJiYUvGcBxnTP8cWrCVGixiMryjrQXmT", - "symbol": "IT", - "name": "IT SOL Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4nwWXS6UD8yUtJiYUvGcBxnTP8cWrCVGixiMryjrQXmT/Coinlogo.png", - "tags": ["software-developers", "guarantee-payments"], - "extensions": { - "website": "https://blocksto.ne/itcoin/" - } - }, - { - "chainId": 101, - "address": "FqwseU5ScQrvDH6hCVkbNTXn2B9ZyxfxcTBuDoyHNPRT", - "symbol": "$DNGL", - "name": "Degen Nation Green List", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/setoKaibalol/pictures/main/pic/DN_sol_gradient_black_bg_600x600.png", - "tags": ["Utility-Token"], - "extensions": { - "discord": "https://discord.gg/DegenNation69", - "twitter": "https://twitter.com/DegenNation69", - "website": "https://degen-nation69.com/" - } - }, - { - "chainId": 101, - "address": "DH9L2E49cBKC9BEbt4q262WDp6E7FnH7QBkyES7AQbSx", - "symbol": "CLASS", - "name": "CLASS", - "decimals": 3, - "logoURI": "https://github.com/Boogdy/Boogdy/blob/main/C%20(1).jpg?raw=true", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/Classoids" - } - }, - { - "chainId": 101, - "address": "7ePMLZDsyV6y3BhiSwiewzsTvbh5XkUDiEXVtvB2wGP4", - "symbol": "VM", - "name": "Versus Mode", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7ePMLZDsyV6y3BhiSwiewzsTvbh5XkUDiEXVtvB2wGP4/logo.png", - "tags": ["nft-token", "card-game"], - "extensions": { - "website": "https://www.versusmode.net/" - } - }, - { - "chainId": 101, - "address": "6FLsSkF4AqQeDuqEmGPyBZvVebc4WWWntnZP2QZyBzG8", - "symbol": "JJJJC", - "name": "JJC", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6FLsSkF4AqQeDuqEmGPyBZvVebc4WWWntnZP2QZyBzG8/logo.png", - "tags": ["social-token", "nft-token", "game-token", "jjcverse"] - }, - { - "chainId": 101, - "address": "GDQBFKyQKJhMTM53NbF64FaVECv7aooffUJU1MXiixo1", - "symbol": "MWLT", - "name": "Mutant WL", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/HFaour/token-list/main/assets/mainnet/GDQBFKyQKJhMTM53NbF64FaVECv7aooffUJU1MXiixo1/logo.png", - "tags": ["social-token", "community-token"], - "extensions": { - "discord": "http://discord.gg/catcartel", - "twitter": "https://twitter.com/SolanaCatCartel", - "website": "https://catcartel.io/" - } - }, - { - "chainId": 101, - "address": "4Mekk6DCgmFZpDCz4FGDPq1T1W43YPUakiRsoY89uKXM", - "symbol": "BSIR", - "name": "BlocSocIITR", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4Mekk6DCgmFZpDCz4FGDPq1T1W43YPUakiRsoY89uKXM/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://blocsoc.netlify.app/" - } - }, - { - "chainId": 101, - "address": "8fpus58kYH9rxuG9hodgcZLcsw4Uj4L9G1ZvGFqX7fyF", - "symbol": "QD", - "name": "QDukan", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/qdukan/QD/main/logo.png", - "tags": [ - "accessories-token", - "ecommerce-token", - "fashion-token", - "shopping-token" - ], - "extensions": { - "twitter": "https://twitter.com/Qdukan1", - "website": "https://qdukan.com" - } - }, - { - "chainId": 101, - "address": "6xreK49Nq2VEvcQNpddKWqWwQXBDMgZoNqfz2NiG75Wp", - "symbol": "BONG", - "name": "MCS Farmer's Pass", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/DefiTokens/assets/main/pass.png", - "extensions": { - "twitter": "https://twitter.com/metajuananft", - "website": "https://metajuanacs.com/" - } - }, - { - "chainId": 101, - "address": "2pQSbiyNgj7oVG3oZAeWG1HjmLZW3XwerHFdaptvJErA", - "symbol": "DUB", - "name": "Dubloon", - "decimals": 12, - "logoURI": "https://storage.googleapis.com/random-stuff-do-not-delete/crypto-coins/dubloon.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "5wHSMHVicDbR9NwnCZfvZqLwHTv2iS2mQxp3kdsJGTzD", - "symbol": "REHA", - "name": "Rehab", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/XRPAviator/Rehab/main/Photo_1644669256494.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6LaJKhZts2cJJPdo9v7XR4kHiLk9ERh16VLKjBUS8DxD", - "symbol": "$LILY", - "name": "Lilypad Token", - "decimals": 18, - "logoURI": "https://raw.githubusercontent.com/FrogPartyNFT/Lilypad/main/logo.png", - "tags": [ - "game", - "coin", - "game-coin", - "game-currency", - "game-token", - "videogame", - "frogparty", - "frog" - ], - "extensions": { - "website": "https://frog.party/" - } - }, - { - "chainId": 101, - "address": "CA3zFzBXyVt4tDfAvKWMDxtWogtoGYao5ANvg7Feo8u5", - "symbol": "WEED", - "name": "Weed Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CA3zFzBXyVt4tDfAvKWMDxtWogtoGYao5ANvg7Feo8u5/pot.jpg", - "tags": ["social-token"], - "extensions": { - "website": "http://weedcoin.store" - } - }, - { - "chainId": 101, - "address": "8ZepSXp47WFyDK21QbvMiiKVWRHnGrAegiwDr71PfGi3", - "symbol": "$ROBO", - "name": "ROBO Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/CMHayden/crypto/master/robocoin.png", - "tags": ["social-token"], - "extensions": { - "discord": "https://discord.gg/cN4qECwt68", - "twitter": "https://twitter.com/robotmafiaclub" - } - }, - { - "chainId": 101, - "address": "FrNEoFBDfz62eZQoucquKTHA87XCuPL5GyatQafXbxK1", - "symbol": "HGY", - "name": "High Hungry", - "decimals": 1, - "logoURI": "https://raw.githubusercontent.com/Shateizi/highhungry/main/random_apes_1.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/HighHungry_Sol" - } - }, - { - "chainId": 101, - "address": "karwVyyQYvdZzR6MvCm5QbbmYxzJ7DqQNa44gD8Rpi8", - "symbol": "KV", - "name": "Karma V22", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Justin-hw-Tseng/assets/main/karma.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "r82YqkLkNBWexTLBfzCMUVmCvCVcy5vnv73wB3orXyN", - "symbol": "BLOCKSTONE", - "name": "BlockStone wallet", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/r82YqkLkNBWexTLBfzCMUVmCvCVcy5vnv73wB3orXyN/blockstonePNG.png", - "tags": ["Solana-wallet", "Blockstone"], - "extensions": { - "facebook": "https://www.facebook.com/Blockstone-103327348899538/", - "linkedin": "https://www.linkedin.com/company/blockstone-online/", - "twitter": "https://twitter.com/TheBlockstone", - "website": "https://blocksto.ne/solana-wallet/" - } - }, - { - "chainId": 101, - "address": "B3J1npmtEst1zQtbgaUTNgyjV4BHiVLydbcXSmuz3onw", - "symbol": "$PACHA", - "name": "Pacha DAO Token", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/bridgitbrowser/bridge-assets/master/tokens/pacha.svg", - "tags": ["p2e", "dao", "coin", "game-token", "animation", "nft"], - "extensions": { - "website": "https://pachaverse.io/" - } - }, - { - "chainId": 101, - "address": "HHXKU5sTRCsrJqGk19XCkX8gHXk4XsfGSBrBZBr2N1QE", - "symbol": "LMHF", - "name": "Lemonhead Felons", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/leojack12/files/main/2.png", - "tags": ["social-token"], - "extensions": { - "website": "https://twitter.com/LemonHeadFelons" - } - }, - { - "chainId": 101, - "address": "5GcstXTDa6EvauGhSPFi6TokfJhNT1nQTqVGvVDGtV5", - "symbol": "SHZ", - "name": "SHOOZCOIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/shoozpc/shoozcoin/main/SHOOZCOIN.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "ABxMcyrcR17mzeksKkGbLVq24qXJtHM8zTEfxCo6JpfG", - "symbol": "CUTIE", - "name": "Guarantee SOL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ABxMcyrcR17mzeksKkGbLVq24qXJtHM8zTEfxCo6JpfG/Coinlogo.png", - "tags": ["guarantee-token", "Blockstone"], - "extensions": { - "website": "https://blocksto.ne/cutee-sol/" - } - }, - { - "chainId": 101, - "address": "EjTVkGzAR9kYLb6guB3G1mophcqJbJ8BdNZ32GdkKhuA", - "symbol": "RELO", - "name": "Rello Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/NicholasGLambert/Rello/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Hv5mZYNXfnapjB4f1opJVipu7wNVv7RWfDPsRrAWXkWo", - "symbol": "DPS", - "name": "Dhanush P Sukruth", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/dsukruth/dps_token/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Ck7DzPFmKVUDJ7VUKFpesgPATYDcD25sK2KPjP61T98r", - "symbol": "QT-AMSTERDAM", - "name": "Guarantee Amsterdam Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Ck7DzPFmKVUDJ7VUKFpesgPATYDcD25sK2KPjP61T98r/amsterdamcoin.png", - "tags": ["SOL-guarantee", "Amsterdam-Coin"], - "extensions": { - "website": "https://blocksto.ne/guarantee-amsterdam-coin/" - } - }, - { - "chainId": 101, - "address": "5ic9vUza5tqrmMX3d2P3zZ78yDbxy2AzYiGA7SUYUQtK", - "symbol": "FSHL", - "name": "FishelCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/nfishel/fishelcoincrypto/main/fishelcoinlogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AtPaih7G75f7LKQzc1CNCPv6crc9T5iwCaan629gLTRq", - "symbol": "DMK", - "name": "DimorneKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/JDBeast200/crypo/main/token_img.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GmBwNscpLsjctXS4yEt43b1sBzeboUJythhAXw23deg1", - "symbol": "SNIFF", - "name": "SNIFF", - "decimals": 9, - "logoURI": "https://user-images.githubusercontent.com/1735634/153721371-69bd5db6-1b6e-433d-a682-5cae6a00e517.png", - "tags": ["social-token", "nfts"], - "extensions": { - "discord": "https://discord.gg/jgTh4tyyAJ", - "twitter": "https://twitter.com/noseagenft" - } - }, - { - "chainId": 101, - "address": "Dj5vr8fVTkt2DQMMoDL5cnva7fdBAgrPe2pcGkECCQ6t", - "symbol": "MAYA", - "name": "MAYA Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/iwillbemicrosoftceo/profile-repo/main/om.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2KGYYcwXfxzZ8QsfHwett92Dwz6mpptjtHmLW8WQU2NM", - "symbol": "NFTBTC", - "name": "BTCNFT Trademark", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2KGYYcwXfxzZ8QsfHwett92Dwz6mpptjtHmLW8WQU2NM/logo.png", - "tags": ["btcnftcoin-com", "trademark"], - "extensions": { - "website": "https://btcnftcoin.com/" - } - }, - { - "chainId": 101, - "address": "1Kz2ZBJpMDeH9bJxqH7oGMZAn8PZ35ZeMSm7RVY12J1", - "symbol": "AYQC", - "name": "Andrelana", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/andreyaniv/cryptolana/main/crypto.png", - "tags": ["social-token"], - "extensions": { - "website": "https://andreyaniv.com/" - } - }, - { - "chainId": 101, - "address": "TX2FnsJkWvAyjSRoEZsCkDu4ViwZDEYMehiT6U6PXKj", - "symbol": "TIEXO", - "name": "Tiexo", - "decimals": 9, - "logoURI": "https://i.ibb.co/GvTPdwc/unknown-6.png", - "tags": ["Marketplace", "NFT", "Cross-Chain"], - "extensions": { - "twitter": "https://twitter.com/tiexohq", - "website": "https://pages.tiexo.com" - } - }, - { - "chainId": 101, - "address": "FaTPs4RdGnSpEcyNEDwnVbHxM3Mu2PUmv2UftKNSNuHU", - "symbol": "FRP", - "name": "Freppi Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SolanaTokenMerger/Freppi-Coin/main/logo.png", - "tags": [ - "social-token", - "community-token", - "utility-token", - "freppi-token" - ], - "extensions": { - "instagram": "https://www.instagram.com/francescocastagnae/", - "twitter": "https://twitter.com/castagnafrance2", - "website": "https://linktr.ee/Francesco03" - } - }, - { - "chainId": 101, - "address": "9DYLi7scxtyTGUbQEwNSuSoiVUvnxUHrY6mYRGdTu87C", - "symbol": "ACIDBOMBWL", - "name": "Acid Bombs Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9DYLi7scxtyTGUbQEwNSuSoiVUvnxUHrY6mYRGdTu87C/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "4PunrmGdVN5ZCora83RSRSsFYJBTervxHe7KCxFKYQV9", - "symbol": "YIPS", - "name": "Yipperson", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/tokermaker/yippers/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6Yi69Ac2D1Qa5WGXn7pGw7h4tE5jC74V3TANhiqQaX9b", - "symbol": "MTDF", - "name": "Matilda Ferragni Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SolanaTokenMerger/MatildaFerragni-Coin/main/logo.png", - "tags": ["social-token", "community-token", "utility-token", "meme-token"] - }, - { - "chainId": 101, - "address": "BANNrQ9CAjnT4ar5rtA3J5Yv67j1Y8CXLmSg1t6atYQq", - "symbol": "MRVL", - "name": "Marvel Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SolanaTokenMerger/Marvel-Coin/main/logo.png", - "tags": ["social-token", "community-token", "game-token", "meme-token"], - "extensions": { - "twitter": "https://twitter.com/marvel", - "website": "https://www.marvel.com/" - } - }, - { - "chainId": 101, - "address": "BATz51cYUfdw8S5HD6ambiJLzDhogQq2Ne3NQu8RREk2", - "symbol": "KHB", - "name": "Khabi Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SolanaTokenMerger/Khabi-Coin/main/logo.png", - "tags": [ - "social-token", - "community-token", - "utility-token", - "meme-token", - "khabi-token" - ], - "extensions": { - "twitter": "https://twitter.com/KhabyLame", - "website": "https://khabyshop.com" - } - }, - { - "chainId": 101, - "address": "eSk6wPv1ZCEaqRshKNjYvwH9jyYdFR2pJWZyTeEBm2G", - "symbol": "$NFTBTC", - "name": "BTCNFT Trademark Ticker", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/eSk6wPv1ZCEaqRshKNjYvwH9jyYdFR2pJWZyTeEBm2G/logo.png", - "tags": ["btcnftcoin-com", "trademark"], - "extensions": { - "website": "https://btcnftcoin.com/" - } - }, - { - "chainId": 101, - "address": "E9aUfnpyoWwq9GMXD2QsT98v8fyZCaXwoyn3tmHY724w", - "symbol": "$BTCNFT", - "name": "BTCNFT Trademark USDC", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/E9aUfnpyoWwq9GMXD2QsT98v8fyZCaXwoyn3tmHY724w/logo.png", - "tags": ["btcnftcoin-com", "trademark"], - "extensions": { - "website": "https://btcnftcoin.com/" - } - }, - { - "chainId": 101, - "address": "GF8xQkj8EsdB19grGhRYzTFV766NtNBakz6GZg6a9Msr", - "symbol": "DUCK", - "name": "Duck Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FriendlyDuckNFT/nft-project/main/ducktokennew.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "Gfc5CxvWtoAnHgHD4uJPeHwa69CwnGzDcU2jhNBmwJFu", - "symbol": "PTC", - "name": "PatronumCoin", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/Cryptomaker1212/PatronumCoin/main/patronumlogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9AKfTcjQ5yVKbrySSgU1GKtRJrMCz5RY9DtA5wdnDMcE", - "symbol": "AMSTERDAMCOIN", - "name": "Amsterdam Coin", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9AKfTcjQ5yVKbrySSgU1GKtRJrMCz5RY9DtA5wdnDMcE/amsterdamcoin.png", - "tags": ["Blockstone", "Amsterdam-Coin"], - "extensions": { - "facebook": "https://www.facebook.com/Blockstone-103327348899538/", - "linkedin": "https://www.linkedin.com/company/blockstone-online/", - "twitter": "https://twitter.com/coinamsterdam", - "website": "https://blocksto.ne/amsterdam-coin/" - } - }, - { - "chainId": 101, - "address": "Emn9MBFDuHTTa5Vrde8ComqeCAeFZPuNEA3Tm7XTMfUg", - "symbol": "BISCUITS", - "name": "BISCUITS", - "decimals": 3, - "logoURI": "https://user-images.githubusercontent.com/95661911/153719099-b2300769-20d8-46bb-8f4c-c9d4d4f335c7.jpeg", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/bbsolana", - "website": "https://www.bulldogbillionaires.club/" - } - }, - { - "chainId": 101, - "address": "6rgrgN6hugDqP9xivu8gEYDGoXmSuDzMxe7QcNRonAYc", - "symbol": "THGZ", - "name": "Thugbirdz Loyalty Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6rgrgN6hugDqP9xivu8gEYDGoXmSuDzMxe7QcNRonAYc/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/soldit_" - } - }, - { - "chainId": 103, - "address": "BMbc3JA435uuigvEtwDvcicXJcozXsLDziVuB7JktMgb", - "symbol": "Test", - "name": "Test listing", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BMbc3JA435uuigvEtwDvcicXJcozXsLDziVuB7JktMgb/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://aiko.io/" - } - }, - { - "chainId": 101, - "address": "G9BetcZDyXS2kwhAsxrbirg8ujkE1GePxaTXefZMsVz8", - "symbol": "VEIN", - "name": "CRYPTO VEIN", - "decimals": 6, - "logoURI": "https://github.com/VEINTOKEN/images/blob/ccad4a6caea3ab9b373dbe283b5da3b56436be5d/CRYPTO_VEIN_LOGO_SIMPLE.png", - "tags": ["general", "mining"], - "extensions": { - "website": "https://www.cryptovein.net/" - } - }, - { - "chainId": 101, - "address": "Cgp9Hb59rzv8WYm6bkkq6q55KJ47Eqgo9R1S9dCPcjJw", - "symbol": "MM", - "name": "MadMan Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SolanaTokenMerger/Madman-Coin/main/logo.png", - "tags": [ - "social-token", - "community-token", - "utility-token", - "madman-token" - ], - "extensions": { - "twitter": "https://twitter.com/orangemadman", - "website": "https://tantarobastore.com/madman" - } - }, - { - "chainId": 101, - "address": "9mCmBexpg4v21NVJbZXPwMLTPDvdAz91d52yzZgFVr62", - "symbol": "STN", - "name": "Stone Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SolanaTokenMerger/Stone-Coin/main/logo.png", - "tags": [ - "social-token", - "community-token", - "game-token", - "meme-token", - "stone-token" - ] - }, - { - "chainId": 101, - "address": "6tpi16FnQq9Jtra6FDiYS1j6bXiz4bnk5FCXuT7v21sj", - "symbol": "SNDR2", - "name": "Sinder Coin 2", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Sinder-exe/Crypto/main/SINDERCOIN2.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Hji6T3VMDqAv21KzX1RfPPvBYn3C7VcnN4YZoCUd3Yhd", - "symbol": "MOVE", - "name": "MoveCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/vipurkumar/move89-coin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3PjhmWT4ZbTkaWNPfQ6zwyDVhhuxM28T66UfZDCvt65F", - "symbol": "ET", - "name": "Everest Token", - "decimals": 0, - "logoURI": "https://github.com/EverestToken/EverestCrypto/blob/main/Everest.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "HJLTaDvwcyHvLbvme81E2BtyxsURfazo34anUwTZDc3W", - "symbol": "MORTGAGE", - "name": "Mortgage Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HJLTaDvwcyHvLbvme81E2BtyxsURfazo34anUwTZDc3W/Coinlogo.png", - "tags": ["mortgage-coin", "DeFi"], - "extensions": { - "website": "https://blocksto.ne/mortgage-coin/" - } - }, - { - "chainId": 101, - "address": "A6RaMVULGMZhKyFjiqchvonNBYbGEz3hAYvJZb2Zh5v7", - "symbol": "TIME", - "name": "TIME Coin", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/A6RaMVULGMZhKyFjiqchvonNBYbGEz3hAYvJZb2Zh5v7/watch.png", - "tags": ["Investment", "Time"], - "extensions": { - "website": "https://blocksto.ne/time-coin/" - } - }, - { - "chainId": 101, - "address": "DYXYVkCk4Xk7RpWdsnqZEkt2S1UBYHsSbj5ZWTWAHvHM", - "symbol": "SOSA", - "name": "Social Sauna Club", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DYXYVkCk4Xk7RpWdsnqZEkt2S1UBYHsSbj5ZWTWAHvHM/logo.png", - "tags": ["NFT"], - "extensions": { - "twitter": "https://twitter.com/SocialSaunaClub" - } - }, - { - "chainId": 101, - "address": "6VAqGYWWiPbBMsKY2LpdE21ECNeoMooobTdtSsw7LGUX", - "symbol": "SMBX20", - "name": "SmashCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6VAqGYWWiPbBMsKY2LpdE21ECNeoMooobTdtSsw7LGUX/logo3.png", - "tags": ["social-token"], - "extensions": { - "website": "http://smashbox20.com" - } - }, - { - "chainId": 101, - "address": "GVzo3Asp4LgJ4wdFLBg2fv4XZXai5cGniZNyb32KeTkb", - "symbol": "WNK", - "name": "WINKIE KOIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Fishbone5150/Solana_Crypto/main/Wink_Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "59d9er76s7xUzTxwJx797crEBDC5vsKZdemQvJ5Z4HGJ", - "symbol": "VELS", - "name": "The VELS Home", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Ljssoares/Mycripto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "J1T2yjgZLWWrZEQ5J4Mmo2NrXmZJGN8XrQcsi6T7hzRn", - "symbol": "MANIJABZ", - "name": "ImaniJabaliKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jambazi1/MANIJABZ/main/MANIJABZ.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "F9cQnniHJWEx7uinpjR5J3enVHcCW5kQPcKh2MBmegDH", - "symbol": "GROK", - "name": "Grok Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Mbarnott/GLogo/main/grok.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HmKMP6mEfbdLDKSL7bpV41QTe4ECNJWNCXbpYUavAauh", - "symbol": "OUT", - "name": "OUTDOORSMAN COIN", - "decimals": 9, - "logoURI": "https://github.dev/mfhunt/token-list-1/blob/fe4bb38263edce5801507623aa77ca8aa7f4857c/assets/mainnet/HmKMP6mEfbdLDKSL7bpV41QTe4ECNJWNCXbpYUavAauh/logo.png", - "tags": ["Utility-Token", "Community-Token", "social-token"], - "extensions": { - "discord": "https://discord.gg/uBUDut4T", - "website": "https://solscan.io/token/HmKMP6mEfbdLDKSL7bpV41QTe4ECNJWNCXbpYUavAauh" - } - }, - { - "chainId": 101, - "address": "AXgZjDfLxYqr8Sxix5vztYie6PVwKB5miYNnR5YR6ANX", - "symbol": "PMCOIN", - "name": "Perky Mint Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AXgZjDfLxYqr8Sxix5vztYie6PVwKB5miYNnR5YR6ANX/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://perkypikas.com" - } - }, - { - "chainId": 101, - "address": "5xNfxFAesUqRQnG4Y4VGBdBR3jCaxEHGztoxQxruN8Hb", - "symbol": "TRIBU", - "name": "Tribu Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5xNfxFAesUqRQnG4Y4VGBdBR3jCaxEHGztoxQxruN8Hb/tribu.png", - "tags": ["tribu-coin", "community-token"], - "extensions": { - "website": "https://tribuapp.tech" - } - }, - { - "chainId": 101, - "address": "66aj3Zrpoaze3CXnfp4D2D345TYTS7HeCexLP8xznAtG", - "symbol": "TFNFT", - "name": "TheFrenchies", - "decimals": 6, - "logoURI": "https://github.com/The-Frenchies/assets/blob/main/logo.png", - "tags": ["NFT"] - }, - { - "chainId": 101, - "address": "RoLLn5qBN4juQ1D2KFpJyAcC7Deo3cYotXi4qDooHLU", - "symbol": "ROL", - "name": "ROL", - "decimals": 6, - "logoURI": "https://assets.blockstars.gg/static/ROL.svg", - "tags": ["utility-token", "game-token"], - "extensions": { - "description": "$ROL is the core gameplay token used in Blockstars, Solana's first management simulation game.", - "discord": "https://discord.gg/blockstars", - "facebook": "https://www.facebook.com/blockstarsgame", - "instagram": "https://instagram.com/blockstarsgame", - "medium": "https://blog.blockstars.gg", - "reddit": "https://www.reddit.com/r/blockstarsgame", - "twitter": "https://twitter.com/blockstarsgame", - "website": "https://blockstars.gg" - } - }, - { - "chainId": 101, - "address": "RoCK9ocDq7Ga8s2VGAgJxNjAgByYd2dyps5WCwVLDMm", - "symbol": "ROC", - "name": "ROC", - "decimals": 6, - "logoURI": "https://assets.blockstars.gg/static/ROC.svg", - "tags": ["utility-token", "game-token"], - "extensions": { - "description": "$ROC is the governance token used in Blockstars, Solana's first management simulation game.", - "discord": "https://discord.gg/blockstars", - "facebook": "https://www.facebook.com/blockstarsgame", - "instagram": "https://instagram.com/blockstarsgame", - "medium": "https://blog.blockstars.gg", - "reddit": "https://www.reddit.com/r/blockstarsgame", - "twitter": "https://twitter.com/blockstarsgame", - "website": "https://blockstars.gg" - } - }, - { - "chainId": 101, - "address": "YNnTDhbhseADo4q8QX8Kfy6FWDrCV3PLVG4wcuDWh4G", - "symbol": "BOLT", - "name": "BOLT", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/YNnTDhbhseADo4q8QX8Kfy6FWDrCV3PLVG4wcuDWh4G/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/skullbots", - "twitter": "https://twitter.com/SKULLBOTS", - "website": "https://www.skullbots.io/" - } - }, - { - "chainId": 101, - "address": "72NBPHtsUkLvk4KpPcDCiDnaHPoP8XvBGZsjcsSSkyi9", - "symbol": "ARF", - "name": "Sealz", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/72NBPHtsUkLvk4KpPcDCiDnaHPoP8XvBGZsjcsSSkyi9/logo.png", - "extensions": { - "website": "https://sealzdao.com" - } - }, - { - "chainId": 101, - "address": "7BjGUzsCJBXuT21QS4tkEdWf4DyFbJz4wAZRbkoCVizm", - "symbol": "XSGD", - "name": "Wormhole wrapped XSGD(eth)", - "decimals": 8, - "logoURI": "https://i.imgur.com/iXKK4YQ.png", - "extensions": { - "serumV3Usdc": "9mJLgcpgwQtSSFixeUAbqw6JGiP8Px1CpbMzhuG6NCdk", - "website": "https://straitsx.com" - } - }, - { - "chainId": 101, - "address": "54vCmCdKk3hkT76CJKmhJq7G1FWL3CTuGNkAa2sRVzAv", - "symbol": "$REG", - "name": "REG Tokens", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/54vCmCdKk3hkT76CJKmhJq7G1FWL3CTuGNkAa2sRVzAv/logo.png", - "tags": ["NFT"] - }, - { - "chainId": 101, - "address": "EuijzUe5SDQjg4Gpia8Jt8EsVdGmR8sA16FCH9SpmeHW", - "symbol": "SCKC", - "name": "Sucker Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EuijzUe5SDQjg4Gpia8Jt8EsVdGmR8sA16FCH9SpmeHW/logo.png", - "tags": ["Sucker-coin"] - }, - { - "chainId": 101, - "address": "GDePUpH7aFkxYx6ufPseSJEdLphxsSF58cFVqoUxv9Nt", - "symbol": "BRM", - "name": "BRG Milk Token", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GDePUpH7aFkxYx6ufPseSJEdLphxsSF58cFVqoUxv9Nt/brmlogo.png" - }, - { - "chainId": 101, - "address": "Ak6ZqnuToBysp4Em8S5VH4TL7BBKL8cyGNHUz1vY1Vry", - "symbol": "$Hedgie", - "name": "The SOL Hedgehog", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/danny8252/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6kqr5FDAEPAPfHZJDSrZV5qaZm9xWbYNbVVois3Qd5fs", - "symbol": "AIVN", - "name": "AIVEN COIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/DeVReV27/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HqR91GXLmMjWYWJCBnBLUd6ahnddQJR2zSb3bqw5B4Hw", - "symbol": "COMPANY", - "name": "Blockstone Company Fund", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HqR91GXLmMjWYWJCBnBLUd6ahnddQJR2zSb3bqw5B4Hw/blockstonePNG.png", - "tags": ["Fund", "Companies", "Blockstone"], - "extensions": { - "website": "https://blocksto.ne/blockstone-company-fund/" - } - }, - { - "chainId": 101, - "address": "AVAayYjzz8FuGGwu1g37F5im1T5foYgjnmC87cdAtFhk", - "symbol": "FUND", - "name": "SOLFUND", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AVAayYjzz8FuGGwu1g37F5im1T5foYgjnmC87cdAtFhk/Coinlogo.png", - "tags": ["Fund", "Investments", "Blockstone"], - "extensions": { - "website": "https://blocksto.ne/solfund/" - } - }, - { - "chainId": 101, - "address": "Dn7UyZBD99Jw2NuDXmij5Ao34LmxNhLaPDAzayasaCjB", - "symbol": "ART", - "name": "ART Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Dn7UyZBD99Jw2NuDXmij5Ao34LmxNhLaPDAzayasaCjB/Coinlogo.png", - "tags": ["Art", "Investments", "Blockstone"], - "extensions": { - "website": "https://blocksto.ne/art-coin/" - } - }, - { - "chainId": 101, - "address": "7KUe1wcih2dnDi9q5QrrWAFzJLNKL19tpcNqBy5EbpCh", - "symbol": "SULK", - "name": "SulKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/boijoely/sulc/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FcepxdeiBJHzRGSd3Xs6V2WZyRa1HkunonLfK8rSAAAj", - "symbol": "CCIRCLE", - "name": "Champions Circle", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/cv1s1on/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5Pnvt8qDiMP96x5GHAQPYizgJzgfLJ2TPyTrhYfks6ZK", - "symbol": "CWE", - "name": "Cleanworld Energy", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/WayTo1Million/CWE/main/CW-Energy.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Hm1Q9s9gakYp3c6Jh3YqxGaxHJcUc7tCQH9jw6C2Mu5e", - "symbol": "CREDIT", - "name": "EURO CREDIT", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Hm1Q9s9gakYp3c6Jh3YqxGaxHJcUc7tCQH9jw6C2Mu5e/Coinlogo.png", - "tags": ["EURO", "guaranteed", "Blockstone"], - "extensions": { - "website": "https://blocksto.ne/euro-credit/" - } - }, - { - "chainId": 101, - "address": "EbmZ9fE3XxMUr1vEcjvrRqLJv3p9Zjs5fXeZBUGFgC7y", - "symbol": "BOTX", - "name": "botXcoin", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EbmZ9fE3XxMUr1vEcjvrRqLJv3p9Zjs5fXeZBUGFgC7y/logo.png", - "tags": ["wrapped", "ethereum", "wormhole-v2"], - "extensions": { - "coingeckoId": "botxcoin", - "coinmarketcap": "https://coinmarketcap.com/currencies/botxcoin/", - "instagram": "https://www.instagram.com/botxofficial/", - "website": "https://www.botx.network" - } - }, - { - "chainId": 101, - "address": "GdeT55oxg67xcVB3CjkAZveDQo1rfz6XQD7icv8N1JKs", - "symbol": "SOMT", - "name": "Spirits of the Mountain Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/donaldlee725/som-pfp/main/logo.png" - }, - { - "chainId": 101, - "address": "6EwSsFYZFjfab1gMcinyqvZn5N19ByWaTWjRSUdkxemN", - "symbol": "CREDIT", - "name": "CREDIT SOL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6EwSsFYZFjfab1gMcinyqvZn5N19ByWaTWjRSUdkxemN/Coinlogo.png", - "tags": ["Credit", "Guarantee", "Blockstone"], - "extensions": { - "website": "https://blocksto.ne/credit-sol/" - } - }, - { - "chainId": 101, - "address": "MAoMixaSaG7TkXNKQLaqfcK2VKxigePnEU7Vm89ezN5", - "symbol": "MAO", - "name": "MAO Tokendong", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/KKQanT/token-list/main/assets/mainnet/MAoMixaSaG7TkXNKQLaqfcK2VKxigePnEU7Vm89ezN5/logo.png", - "tags": ["test-run-token"], - "extensions": { - "twitter": "https://twitter.com/KKQanTT" - } - }, - { - "chainId": 101, - "address": "25CNQuwBrHNkCHUMbLUjfUcfGBrepGB6gw53LNsTGGZ9", - "symbol": "STB", - "name": "SolTee Balls", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/25CNQuwBrHNkCHUMbLUjfUcfGBrepGB6gw53LNsTGGZ9/logo.png" - }, - { - "chainId": 101, - "address": "46ssKdgiiYZLy8d8m7gbKtpgo1q2D1jea9b2fniEzoWF", - "symbol": "LABY", - "name": "LabyCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Dqnns/LabyCoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Bwfe7DwmEDvjEBZGbQnDU8CrwZsuvYaed1VuQ8KDTGsS", - "symbol": "XENO", - "name": "The Xenobots Project", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Bwfe7DwmEDvjEBZGbQnDU8CrwZsuvYaed1VuQ8KDTGsS/logo.png", - "tags": ["XENO", "nft", "gaming"], - "extensions": { - "discord": "https://discord.gg/xenobotsnft", - "twitter": "https://twitter.com/XenobotsNFT", - "website": "https://thexenobotsproject.com/" - } - }, - { - "chainId": 101, - "address": "7GNyprqrpvJHNwzWSj4KVkqw9cKyV5aR3ehM2HeE5pw", - "symbol": "Miku", - "name": "Mikuko Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7GNyprqrpvJHNwzWSj4KVkqw9cKyV5aR3ehM2HeE5pw/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.com/invite/kirinkingdom", - "twitter": "https://twitter.com/Kirin_Kingdom" - } - }, - { - "chainId": 101, - "address": "GD2QbNQPqr36RvXV8bWrhE18mdMLXiYY5438PH3wv6Yz", - "symbol": "CWE", - "name": "CleanworldEnergy", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/WayTo1Million/CWE/main/CW-Energy.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Da1B9dCFi8im1KL9Gf3Uwmnq67SjgLdxtmZ8wpMVTwb3", - "symbol": "VSN", - "name": "Vesna", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/pavelbrn/LinkData/main/IMGs/VesnaIconLogoPNG.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5DKNgVCJyq5VeKQgqKoTh17ARFUCeFQVmrSFXH3mTpYS", - "symbol": "SLACC", - "name": "SLACC Whitelist", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SlaccWhitelist/uploads/main/logo.png", - "tags": ["social-token", "utility-token"], - "extensions": { - "discord": "https://discord.gg/slacc", - "twitter": "https://twitter.com/SlaccSol", - "website": "https://slacc.io" - } - }, - { - "chainId": 101, - "address": "CsbF4RjoWzKgMnQQRBqn5RgruLJt9DbgjBBsVTBEmtZg", - "symbol": "TIX", - "name": "Tickets", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/T3Toxic/Tickets/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GALLEZFD9GsKv7yqbqwavwuv2hqq34xqAsbPJUL8EsRC", - "symbol": "Galleon", - "name": "Galleon Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GALLEZFD9GsKv7yqbqwavwuv2hqq34xqAsbPJUL8EsRC/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://mint.solanalysis.com/wiz" - } - }, - { - "chainId": 101, - "address": "Cnz4KS5VEogp9SCkZfXMYhBX6GUaeGBxZw5Lks3BMPY9", - "symbol": "BANZ", - "name": "Banz Bucks", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Cnz4KS5VEogp9SCkZfXMYhBX6GUaeGBxZw5Lks3BMPY9/logo.png", - "tags": ["community-token", "social-token"], - "extensions": { - "description": "Banz Carewear for Kids. Sensitive care. Sensible choice.", - "facebook": "https://www.facebook.com/BANZCarewear", - "instagram": "https://www.instagram.com/banzaustralia/", - "twitter": "https://twitter.com/banzcarewear", - "website": "https://www.banzworld.com" - } - }, - { - "chainId": 101, - "address": "GTgfkNU1jbSaHFLHdijzJ75s6TjLRZt5FsA1J7aQgJHS", - "symbol": "DGCWL", - "name": "Demigod Cats WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GTgfkNU1jbSaHFLHdijzJ75s6TjLRZt5FsA1J7aQgJHS/logo.png", - "tags": ["dgc-wl-token"], - "extensions": { - "website": "https://demigodcats.com" - } - }, - { - "chainId": 101, - "address": "7tHKMb727bjpjWS6xVU59aj8KCcsoBjiUVsZbgkrkGvv", - "symbol": "NCR", - "name": "Necro Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SolanaTokenMerger/Necro-Coin/main/logo.png", - "tags": [ - "social-token", - "community-token", - "utility-token", - "necro-token" - ], - "extensions": { - "twitter": "https://twitter.com/necro_is_god", - "website": "https://www.necrohiphop.com/" - } - }, - { - "chainId": 101, - "address": "2dDpeiquywrXutiFJUduYTEkF9oorXFBdcUDWZ5HpxE7", - "symbol": "ILLB", - "name": "Ill Bill Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SolanaTokenMerger/Ill-Bill-Coin/main/logo.png", - "tags": [ - "social-token", - "community-token", - "game-token", - "meme-token", - "ilbill-token" - ], - "extensions": { - "twitter": "https://twitter.com/illb1ll", - "website": "https://store.shopbenchmark.net/collections/ill-bill" - } - }, - { - "chainId": 101, - "address": "GCn5mmHAdas3QjW38GmXVL8BnEDjuytRRhQLxBGqghjr", - "symbol": "SPDR", - "name": "SpiderMan Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SolanaTokenMerger/SpiderMan-Coin/main/logo.png", - "tags": [ - "social-token", - "community-token", - "utility-token", - "spiderman-token" - ], - "extensions": { - "twitter": "https://twitter.com/spiderman", - "website": "https://www.marvel.com/characters/spider-man-peter-parker" - } - }, - { - "chainId": 101, - "address": "CL1khybavkZhyKY1zQvMYGRqyxGxjATT5VxGg7wGENDn", - "symbol": "ERTH", - "name": "Earth Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MrEmeraldSlime/crypto/main/palette.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CtgocDbemGswwGezYT37aj3hax5VDVCzWcbMNgsHExB6", - "symbol": "SDT", - "name": "STARDUST", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ScarceProject/crypto/main/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/polypursue", - "website": "https://polypursue.com/" - } - }, - { - "chainId": 101, - "address": "5WypLazEE66ARzDjAQrndirRoneWgTFDtKzoCvfHu5N8", - "symbol": "DRAH", - "name": "Drachma", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/bouloutas/crypto/main/Drachma.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DsAc94BXEs9H4BKSE4CrApEBZ3faLDnGwjV7NYKgxiWg", - "symbol": "SILN", - "name": "Silent Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/joseraeiro/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BnJp2dd5zEQJKMd48Ac84Evd8ocPa2KpCfVmCG9PrFwi", - "symbol": "SFD", - "name": "SolFounder token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BnJp2dd5zEQJKMd48Ac84Evd8ocPa2KpCfVmCG9PrFwi/logo.png", - "tags": ["social-token", "loop"] - }, - { - "chainId": 101, - "address": "C5xtJBKm24WTt3JiXrvguv7vHCe7CknDB7PNabp4eYX6", - "symbol": "T1NY", - "name": "Tiny Bonez", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/danvernon/tiny-dogz-logo/main/coin.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/K3rqQVxDdX", - "twitter": "https://twitter.com/TinyDogzNFT", - "website": "https://www.tinydogz.com" - } - }, - { - "chainId": 101, - "address": "3x7qXFaXtgjzwuvPwHrjE7W6JYj2XvjNqi28eWvJec2D", - "symbol": "LVT", - "name": "Leviat Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3x7qXFaXtgjzwuvPwHrjE7W6JYj2XvjNqi28eWvJec2D/logo.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "website": "https://leviatlegal.com/" - } - }, - { - "chainId": 101, - "address": "AuGVGA7zu8AnMnedB28gnxJXkNvzPZS6u2GMDtbRJ5HM", - "symbol": "DUMPS", - "name": "Dumps Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/DumpsandPumps/dumpstoken/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6naP1Ajk5qpnxtK43aPEpJLJvawZ8TuVgnoBnCiLqa4C", - "symbol": "TOOLS", - "name": "Tools Token", - "decimals": 3, - "logoURI": "https://arweave.net/qeTFDPRfbxC1bTYczjMSYMOunAUbDN5CE4KBf2cY9bA", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/SolRobos", - "website": "https://solrobos.com/" - } - }, - { - "chainId": 101, - "address": "yxTU2PghnfPgcLiUSamfiKWufLtRyQAEUsqoG45kMjm", - "symbol": "GLIDE", - "name": "Glide", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/tsbsoltn/soltn/main/logo.png", - "tags": ["social-token", "community-token"], - "extensions": { - "website": "https://glidecoin.com/" - } - }, - { - "chainId": 101, - "address": "9NcHuQFt8AyW4ryPMwDsufZxeL4kPHDAaMPwwZRgXKP3", - "symbol": "MCLAU", - "name": "MCLAU Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mclau79/logo/main/crypto2.png", - "tags": ["social-token", "community-token", "utility-token", "game-token"] - }, - { - "chainId": 101, - "address": "DVXXemgYhnsXkoXnXCMPoEesSys2AgE6qvT2xzzLWAAP", - "symbol": "TOTO", - "name": "TotoCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/tomcastigl/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9XczSh86n8XKkDuL4yK93afRHgSifui9j9sFPHQLfFUT", - "symbol": "EGGZ", - "name": "Dapper Ducks Eggs", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9XczSh86n8XKkDuL4yK93afRHgSifui9j9sFPHQLfFUT/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "$EGGZ are the utility token for the Dapper Ducks Universe use to purchase a multitude of items from The Pond.", - "discord": "https://discord.gg/DapperDucks", - "website": "https://www.thedapperducks.com" - } - }, - { - "chainId": 101, - "address": "9R6a6XQjY8U7j8ae1Gd5GVcrrjtPDRSbgeEYmmHVdVpQ", - "symbol": "BBTC", - "name": "BuBasTeamCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/AntMar23/BubasTeamCoin/main/BBTC.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "14oGis8Lv2y8FEX8MdmUz9g48hpLY7cEKR4BRYxHbUAQ", - "symbol": "$BNN", - "name": "Bananas", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/14oGis8Lv2y8FEX8MdmUz9g48hpLY7cEKR4BRYxHbUAQ/logo.png" - }, - { - "chainId": 101, - "address": "ANtz84NtpCmMtr2smcXw1YUKtPGhgUrvLdb5cF2pN64D", - "symbol": "BAT", - "name": "Batman Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SolanaTokenMerger/Batman-Coin/main/logo.png", - "tags": [ - "social-token", - "community-token", - "utility-token", - "meme-token", - "batman-token" - ], - "extensions": { - "twitter": "https://twitter.com/dcbatman", - "website": "https://www.thebatman.com" - } - }, - { - "chainId": 101, - "address": "9kU82wzvUn4uLXxRW2rd2MwqJcZRrBEtotatx81t9GJd", - "symbol": "CTE", - "name": "Cabbage To Earth Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SGB1986/Cabbage/main/273467447_654316445879810_8753904468743291567_n.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DxEmFstA2MDKsSpDngDG1AbJpAc4gPXXcXMZ81tKCBoj", - "symbol": "DrP", - "name": "DoctorP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/iddoc2022/crypto/main/DrP.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6WP1cizTmefsGBhKu2Fyb2XLS7G29h1ktNp6NWD628FB", - "symbol": "INTRODUCTION", - "name": "Gezondheid Adviseur", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6WP1cizTmefsGBhKu2Fyb2XLS7G29h1ktNp6NWD628FB/gezond.png", - "tags": ["gezondheid-adviseur", "Blockstone"], - "extensions": { - "website": "https://blocksto.ne/gezondheid-adviseur/" - } - }, - { - "chainId": 101, - "address": "WNhMkZGcWM9WbzkLqWGJb6DdfCcCW2JwEHbPRPjTHfq", - "symbol": "COMPANY", - "name": "Zeeland Homes BV", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WNhMkZGcWM9WbzkLqWGJb6DdfCcCW2JwEHbPRPjTHfq/blockstonePNG.png", - "tags": ["Company", "Zeeland-Homes-BV", "Blockstone"], - "extensions": { - "website": "https://blocksto.ne/zeeland-homes/" - } - }, - { - "chainId": 101, - "address": "3tp5LKhVc6ZaQ9aXNA4ufxNMnoz7aWK7NRRn4cxThY3e", - "symbol": "SlyAF", - "name": "SlyFox Governance Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ProCoreNFT/token-list/main/assets/mainnet/3tp5LKhVc6ZaQ9aXNA4ufxNMnoz7aWK7NRRn4cxThY3e/logo.png", - "tags": [ - "Utility-Token", - "Community-Token", - "social-token", - "Governance-Token" - ], - "extensions": { - "discord": "https://discord.gg/g9QaNkk6HW", - "website": "https://www.sly-fox.io" - } - }, - { - "chainId": 101, - "address": "F3cnJDxJyVoZVB3RY6bGvHo3vPnzeupCjKK3jTBRigd", - "symbol": "GDC", - "name": "GourdeCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/carleintech/GourdeCoin/main/GourdeCoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "H5iiBHeCGKkzucX5PwEn2cf2uWHyVnAg3aq5RRsWF5P8", - "symbol": "TIKI", - "name": "Tiki Coin", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/H5iiBHeCGKkzucX5PwEn2cf2uWHyVnAg3aq5RRsWF5P8/logo.png", - "tags": ["social-token", "community-token", "utility-token"], - "extensions": { - "description": "$TIKI is utility token that powers Tiki DAO, a sub community of The Chimpions.", - "discord": "https://discord.gg/thechimpions", - "twitter": "https://twitter.com/TikiDAO_" - } - }, - { - "chainId": 101, - "address": "wyM6zDsEjuNrKmLHQtxfXADgwwDxbyxUKG2zd3ch7GN", - "symbol": "SHARES", - "name": "Zeeland Homes shares", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/wyM6zDsEjuNrKmLHQtxfXADgwwDxbyxUKG2zd3ch7GN/blockstonePNG.png", - "tags": ["Zeeland-Homes-BV", "shares"], - "extensions": { - "website": "https://explorer.solana.com/address/WNhMkZGcWM9WbzkLqWGJb6DdfCcCW2JwEHbPRPjTHfq" - } - }, - { - "chainId": 101, - "address": "GP9zY2D8CgMreoUdYQjyn7Fo7XCq9ubVnX3u4ot1wpgt", - "symbol": "DPD", - "name": "DPD", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GP9zY2D8CgMreoUdYQjyn7Fo7XCq9ubVnX3u4ot1wpgt/logo.png", - "tags": ["social-token", "utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/DuckPatrolNFT", - "website": "https://duckpatrol.io/" - } - }, - { - "chainId": 101, - "address": "H1bwyQiWQL7wWkcVKbp7NMQtXH2RaxABf1WgswYuKvVk", - "symbol": "DTT", - "name": "Dust Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/TheReaperQc/crypto/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DxCEtxi7dkTnGhypntokEuAAHdSn7n1oqtUMMYAAgfhb", - "symbol": "HJAL", - "name": "HJALTUN", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DxCEtxi7dkTnGhypntokEuAAHdSn7n1oqtUMMYAAgfhb/logo.png", - "tags": ["utility-token", "community-token", "social-token"], - "extensions": { - "description": "HJAL is the token supporting Hjaltun's initiatives and its community. Hjaltun is one of the most innovative luxury stationery brands in Europe", - "instagram": "https://www.instagram.com/hjaltunlondon", - "twitter": "https://twitter.com/HjaltunLondon", - "website": "https://hjaltun.com" - } - }, - { - "chainId": 101, - "address": "CyC1zVPGm9ARZYyxiv26Q5vm4vLQBv9n358gW4PB6oCW", - "symbol": "NEFT", - "name": "NeftWorld Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/neftworld/assets/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "JAfdyspue7J3GxWg9Gc1UWDJBqvMFDpfS2KMKWNW6dGh", - "symbol": "NASA", - "name": "Nasa Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SolanaTokenMerger/NASA-Coin/main/logo.png", - "tags": [ - "social-token", - "community-token", - "utility-token", - "meme-token", - "nasa-token" - ], - "extensions": { - "twitter": "https://twitter.com/nasa" - } - }, - { - "chainId": 101, - "address": "6imwhega2b1AcDhbuY1mgQnJdoGdKoqfmX4tUTr6F8t9", - "symbol": "NIKE", - "name": "Nike Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SolanaTokenMerger/Nike-Coin/main/logo.png", - "tags": [ - "social-token", - "community-token", - "utility-token", - "meme-token", - "nike-token" - ], - "extensions": { - "twitter": "https://twitter.com/nike", - "website": "https://nike.com" - } - }, - { - "chainId": 101, - "address": "2HyFkH3hvpj5PCGwYAaBVXGkgD1s2bCnkiGBv2ksVm4E", - "symbol": "IG", - "name": "Instagram Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SolanaTokenMerger/Instagram-Coin/main/logo.png", - "tags": [ - "social-token", - "community-token", - "utility-token", - "meme-token", - "instagram-token" - ], - "extensions": { - "twitter": "https://twitter.com/instagram", - "website": "https://about.instagram.com" - } - }, - { - "chainId": 101, - "address": "92G96KqHG898Mr3nnW9ZCgnRkQComxq3RNPXyvRWrzcb", - "symbol": "BSCH", - "name": "Bosich", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/EigeneDateien/BSCH/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8V6EsUxArHkt37LphQ4iPVtn4zie5xomeLPAqYbysryy", - "symbol": "BLOCKSTONE", - "name": "Lawyers", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8V6EsUxArHkt37LphQ4iPVtn4zie5xomeLPAqYbysryy/blockstonePNG.png", - "tags": ["Blockstone-lawyers", "Solana"], - "extensions": { - "website": "https://blocksto.ne/lawyers/" - } - }, - { - "chainId": 101, - "address": "4SksTiX5Qh33FaoKp9AhjzpVH68dEobL18GGb44M6DJ6", - "symbol": "BLOCKSTONE", - "name": "Lawyer", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4SksTiX5Qh33FaoKp9AhjzpVH68dEobL18GGb44M6DJ6/blockstonePNG.png", - "tags": ["Blockstone-lawyers", "Solana"], - "extensions": { - "website": "https://blocksto.ne/lawyers/" - } - }, - { - "chainId": 101, - "address": "2GsktBGZtWC5tU2wHH5RaBvPZhVXRWrGC5Qe5sEKnBzs", - "symbol": "BEEF", - "name": "CobacCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Abbyigor/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FAHES5y9chrtEvAFt6Ma1RJJgnfXjF3Toy2vThxLZHUN", - "symbol": "OCA", - "name": "CluckCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/12inchT/Crypto/main/PunkyLogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "D3TbFDiwkLrMKvkEADaN43BV2otE8oMQU6G1n9UdD9m2", - "symbol": "TAUSS", - "name": "Tauss Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/scsezgin/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5GofNCpdDpz2wNEaSYYB8rf6m4CaNRvfHLAxd3PKmnt9", - "symbol": "BULLY", - "name": "Bully", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/viaadler/crypto/main/logo.png", - "tags": ["meme-token", "utility-token", "stake-pool-token"], - "extensions": { - "discord": "https://discord.gg/bullytoken", - "twitter": "https://twitter.com/bullytokennnnn" - } - }, - { - "chainId": 101, - "address": "GSBCr3LLkfMu99iJhiwERFdWzuFArqoV93og13pWc9mX", - "symbol": "LXCD", - "name": "LEX CLOUD DATA", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/lexthoms411/Lex-cloud-Data/main/logo.png", - "tags": ["social-token", "community-token", "utility-token"], - "extensions": { - "description": "LXCD is utility token used by members of Lex Cloud Data at www.homenetlink.com. This is still a work in progress" - } - }, - { - "chainId": 101, - "address": "AmK2B4obE93TmqMgHCmmnYUXm3gbtEiu3EMxPttVcwk6", - "symbol": "WLTLA", - "name": "TLA Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AmK2B4obE93TmqMgHCmmnYUXm3gbtEiu3EMxPttVcwk6/logo.png", - "tags": ["community-token"] - }, - { - "chainId": 101, - "address": "GqVKfEuAyiehrSTCg5fcsNpAcsFxUNb1AYCnRwn88NPL", - "symbol": "TLA", - "name": "TLA Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GqVKfEuAyiehrSTCg5fcsNpAcsFxUNb1AYCnRwn88NPL/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "CcAdUqAzCiAQYAGkD4jveD31uKm9g6csQUFiRHuAbwNu", - "symbol": "RKONGZ", - "name": "Reversed Kongz", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/klaydevelop/reversed-kongz-metadata/main/logo/logo.png", - "tags": ["social-token", "meme-token", "community-token"] - }, - { - "chainId": 101, - "address": "49mNzFzMh2i7kApyeQiVdLYjt5jasc9Umjj2An49EtV9", - "symbol": "PLAGUE", - "name": "Plague Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/49mNzFzMh2i7kApyeQiVdLYjt5jasc9Umjj2An49EtV9/logo.png", - "tags": ["social-token", "community-token", "utility-token"] - }, - { - "chainId": 101, - "address": "D3eyBjfgJMPHZyYDRtbf1cSxeLiNwKumwHzQK3h3TRRq", - "symbol": "BONE", - "name": "BONE", - "decimals": 6, - "logoURI": "https://user-images.githubusercontent.com/95661911/153796714-8061210f-ebef-4db9-a646-ab8dc6b57e0f.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/bulldogbillionaires", - "twitter": "https://twitter.com/bbsolana", - "website": "https://www.bulldogbillionaires.club/" - } - }, - { - "chainId": 101, - "address": "5C9gnZEjaDVpaQjJcRSf54pJv3g1JVACo32jBRvNxpm4", - "symbol": "ANGELS", - "name": "Solana Angels", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5C9gnZEjaDVpaQjJcRSf54pJv3g1JVACo32jBRvNxpm4/logo.png", - "tags": ["community-token"], - "extensions": { - "twitter": "https://twitter.com/AngelsOnSolana" - } - }, - { - "chainId": 101, - "address": "4xDPH7DVtDXA2eU6wp9BjhryfXEdxBuhe4hnEc9yz1pJ", - "symbol": "BOLT", - "name": "Bolt Token", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4xDPH7DVtDXA2eU6wp9BjhryfXEdxBuhe4hnEc9yz1pJ/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/skullbots", - "twitter": "https://twitter.com/SKULLBOTS", - "website": "https://www.skullbots.io/" - } - }, - { - "chainId": 101, - "address": "LbrZyD19NVCKQo2C7M6Nq2pfck1spMwE5FUxThcwDWt", - "symbol": "HNZ", - "name": "HONEYZ", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/LbrZyD19NVCKQo2C7M6Nq2pfck1spMwE5FUxThcwDWt/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/saDmFdp6ar", - "twitter": "https://twitter.com/LazyBearZNFT", - "website": "https://lazybearz.io/" - } - }, - { - "chainId": 101, - "address": "3MAy18swqBKioU1GRThqixeVi6K6YEK4fBeZiK66fLs6", - "symbol": "TTKN", - "name": "TonyToken", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/bone-meal/tonytokens/main/tony.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5EbpXhW7t8ypBF3Q1X7odFaHjuh7XJfCohXR3VYAW32i", - "symbol": "MALL", - "name": "MetaMall", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5EbpXhW7t8ypBF3Q1X7odFaHjuh7XJfCohXR3VYAW32i/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://metamalls.io" - } - }, - { - "chainId": 101, - "address": "8bPoL3n7BemSatpnTZPq24anychqcB8uw6omdDPYQAvd", - "symbol": "TSTRN", - "name": "Test Run Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/chatkilla/CRYPTO/main/O.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "32gaR4rn9JyzoDVwMzZ5j3NgcHc5RQhMSJby55FFKnq3", - "symbol": "RIBBET", - "name": "RIBBET", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/32gaR4rn9JyzoDVwMzZ5j3NgcHc5RQhMSJby55FFKnq3/logo.png", - "tags": ["social-token", "meme-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/metafrogbizclub", - "website": "https://www.metafrogbusinessclub.com/" - } - }, - { - "chainId": 101, - "address": "BaSkmM2e6dY8aC4oe8Rh4B7L4bNG4tjtKSinVfjfoCRK", - "symbol": "BOTOX", - "name": "BOTOX Wellnes and Healthcare", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/rockyrocksrocky/BOTOX/main/Artboard%201%20copy%2027small.png", - "tags": ["Healthcare"] - }, - { - "chainId": 101, - "address": "FWRP3RHMYHNL5jQa1dpecYdrT8PkpJr8fsq2WsFvDUyr", - "symbol": "DVRV", - "name": "DevRev Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/DevReV11/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "stKrFPSwdR36jvsxLWsFVVKXABXaWUSFFFxNri4gPmH", - "symbol": "SPGJR", - "name": "Offspring Junior", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FdLycDiJH5se75GZyxEdEdo6c3z7WHkoHZmvbkibUUrS/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DpxMKwKMrM9mBExbttc9SrCAqy9Nx9MAX3Ha8kWkHtBr", - "symbol": "TFNFT", - "name": "The Frenchies", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DpxMKwKMrM9mBExbttc9SrCAqy9Nx9MAX3Ha8kWkHtBr/logo.png", - "tags": ["NFT"] - }, - { - "chainId": 101, - "address": "5yw793FZPCaPcuUN4F61VJh2ehsFX87zvHbCA4oRebfn", - "symbol": "RICE", - "name": "RICE", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/kakasonz112/robocock-token/main/assets/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/robococknft", - "twitter": "https://twitter.com/RoboCockNFT", - "website": "https://robocock.io/" - } - }, - { - "chainId": 101, - "address": "5ZDkTmkX7z1VEufQHrkY3M4k1w1H8iEc7MvyePNSotZ8", - "symbol": "TCFT", - "name": "CFT Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5ZDkTmkX7z1VEufQHrkY3M4k1w1H8iEc7MvyePNSotZ8/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://www.codesfortomorrow.com" - } - }, - { - "chainId": 101, - "address": "BYDCPWeACSG9XaDDPqqxSC1pLnKjTwxXcSva3UYs8zJP", - "symbol": "GG", - "name": "Simo GG Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SolanaTokenMerger/Simo-Gigi-Coin/main/logo.png", - "tags": ["social-token", "community-token", "utility-coin"] - }, - { - "chainId": 101, - "address": "8XGRbcc3mXQ9Pe2bhjoRRuDypA5JcyMpBNtmQoyTeeJd", - "symbol": "KHB", - "name": "khaby Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SolanaTokenMerger/Khaby-Coin/main/logo.png", - "tags": [ - "social-token", - "community-token", - "utility-token", - "meme-token", - "khaby-token" - ], - "extensions": { - "twitter": "https://twitter.com/khabylame", - "website": "https://khabyshop.com/" - } - }, - { - "chainId": 101, - "address": "7gsvY4yjAVrP7fwBBMjyVCJNBRMRHgotjFfqrNPDKJec", - "symbol": "MC", - "name": "Magic Carrot", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7gsvY4yjAVrP7fwBBMjyVCJNBRMRHgotjFfqrNPDKJec/logo.jpg", - "extensions": { - "twitter": "https://twitter.com/solderland", - "website": "https://solderland.com/" - } - }, - { - "chainId": 103, - "address": "6rJSjCEVxovip8GBUw6P7tsQprzFPET3uTohCXXQqkBh", - "symbol": "wtUST-USDT", - "name": "wtUST-USDT LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6rJSjCEVxovip8GBUw6P7tsQprzFPET3uTohCXXQqkBh/logo.png", - "tags": ["ratio-token"], - "extensions": { - "website": "https://dev.ratio.finance/" - } - }, - { - "chainId": 103, - "address": "BkpqyoDe5mwN6DiH1MYSJ1G4AbhPuiZsycjjYfQcWK9P", - "symbol": "USDC-USDT", - "name": "USDC-USDT LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BkpqyoDe5mwN6DiH1MYSJ1G4AbhPuiZsycjjYfQcWK9P/logo.png", - "tags": ["ratio-token"], - "extensions": { - "website": "https://dev.ratio.finance/" - } - }, - { - "chainId": 103, - "address": "ASnVcQxNRosGw8crN8E4ScnDncBfnR1eJPyzucKsM4Vm", - "symbol": "wUST-USDC-USDT", - "name": "wUST_v1-USDC-USDT LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ASnVcQxNRosGw8crN8E4ScnDncBfnR1eJPyzucKsM4Vm/logo.png", - "tags": ["ratio-token"], - "extensions": { - "website": "https://dev.ratio.finance/" - } - }, - { - "chainId": 103, - "address": "2gsojBCyZUgqXEj5vR41sKat3JyG11nXSsgzMErY9EVL", - "symbol": "USDC-CASH", - "name": "USDC-CASH LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2gsojBCyZUgqXEj5vR41sKat3JyG11nXSsgzMErY9EVL/logo.png", - "tags": ["ratio-token"], - "extensions": { - "website": "https://dev.ratio.finance/" - } - }, - { - "chainId": 101, - "address": "38tKCEuuLfUzCoZZFgsiGTq9wi8Dq3YykrSDvKjx7caE", - "symbol": "SGEM", - "name": "GemsLab", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/38tKCEuuLfUzCoZZFgsiGTq9wi8Dq3YykrSDvKjx7caE/sgem.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/gemslab_space", - "website": "https://gemslab.space" - } - }, - { - "chainId": 101, - "address": "BNpHCaRDPepoUPyXrTMvjTkrcfnwFmuRaXHgqbdjauyE", - "symbol": "CUX", - "name": "BestBluiAlways", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/hemanthgade/CuxCrypto/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9QPeHFjjyw4jy9GDzs3RvWxWJuwpKBj6RzQpEnwBuAnR", - "symbol": "BITS", - "name": "Bits", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9QPeHFjjyw4jy9GDzs3RvWxWJuwpKBj6RzQpEnwBuAnR/logo.png", - "tags": ["social-token", "gaming-token", "utility-token"], - "extensions": { - "discord": "https://discord.gg/XbzMd9uXR4", - "twitter": "https://twitter.com/ParleySolana", - "website": "https://gameplex.live/" - } - }, - { - "chainId": 101, - "address": "FNqmjdUXyXGjAnKj9Kwi61qp6nVBXCFAm46cU4pP14aN", - "symbol": "MMACWL", - "name": "MMAC Whitelist token", - "decimals": 0, - "logoURI": "https://arweave.net/aU0UWqYpoQx9o3tWxqAdNdvZUa1_THlUDSUwDQuACyA", - "tags": ["whitelist-token"], - "extensions": { - "website": "https://www.miniapenft.com/" - } - }, - { - "chainId": 101, - "address": "2NRKkmiqktNt6c3wdFEdzQMZDQ8KpbR4HU7MFk1Jaw7x", - "symbol": "$BOIS", - "name": "Bois Coin", - "decimals": 0, - "logoURI": "https://cdn.discordapp.com/attachments/679118561649623070/942573815513354300/logo.png", - "tags": ["social-token"], - "extensions": { - "twitch": "https://twitch.tv/gckluke" - } - }, - { - "chainId": 101, - "address": "EZZogRzGFPLZYQBoetqeQpsCqFvYYE4DyRsF1rxJwey1", - "symbol": "VNM", - "name": "Venom", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EZZogRzGFPLZYQBoetqeQpsCqFvYYE4DyRsF1rxJwey1/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/y42pXAFFVH", - "instagram": "https://www.instagram.com/SlimeySnakeClub", - "twitter": "https://twitter.com/SlimeySnakeClub", - "website": "https://slimeysnake.club" - } - }, - { - "chainId": 101, - "address": "CSdwvtbfVw9VD3qjMC8EbWWyximyHUdL2enj836pvvFK", - "symbol": "GEPV", - "name": "Grow East Point Vegging", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/cpatt2015/Crypto/main/vegging.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2bMdoyyxDeFx6H6cN2gvUStVP2NLqgU1Z2zpa3dFcxNt", - "symbol": "TREX", - "name": "Sexual Tyrannosaur Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SGB1986/TREX/main/Polish_20210218_030212109.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "MetaDxGDwtNZwsbwrfERzBwhRdUhRVVjGU7HYuCTk8r", - "symbol": "MetaD", - "name": "Meta D Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/MetaDxGDwtNZwsbwrfERzBwhRdUhRVVjGU7HYuCTk8r/logo.png", - "tags": ["social-token"], - "extensions": { - "description": "The Meta D token is a social token used to promote digital technologies in modern BAS", - "website": "https://www.johnsoncontrols.com/building-automation-and-controls/building-management/building-automation-systems-bas" - } - }, - { - "chainId": 101, - "address": "SRwhxeZEKPR66i6RyTqMLQHhAxBpfNdFkXcEd1q4dUz", - "symbol": "SRPRESALE", - "name": "SolRockers PreSale", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SRwhxeZEKPR66i6RyTqMLQHhAxBpfNdFkXcEd1q4dUz/logo.png", - "tags": [ - "utility-token", - "game-token", - "game-currency", - "GameFi", - "Gaming" - ], - "extensions": { - "description": "SolRockers Battle of the Bands is a next-gen PVE/PVP play to earn rhythm game built on the Solana blockchain.", - "discord": "https://discord.gg/solrockers", - "facebook": "https://facebook.com//solrockersnft", - "instagram": "https://instagram.com/solrockersnft", - "medium": "https://medium.com/@solrockersnft", - "telegram": "https://t.me/solrockersnft", - "twitter": "https://twitter.com/solrockersnft", - "website": "https://solrockers.io/" - } - }, - { - "chainId": 101, - "address": "8o4FYKQMarEG9JP5hzbWF16pDjNahVyubz25bYDZCfMq", - "symbol": "SAFESOUL", - "name": "Safe Soul", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8o4FYKQMarEG9JP5hzbWF16pDjNahVyubz25bYDZCfMq/safesoul.png", - "tags": ["community-token", "meme-token", "utility-token"], - "extensions": { - "twitter": "https://twitter.com/SafeSoulMeme", - "website": "https://safesoul.info/" - } - }, - { - "chainId": 101, - "address": "4cSZkVz2S9qZqng58zd3gcMKmSZ864GAzcR8ezH1SHhw", - "symbol": "COT", - "name": "Colibri Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4cSZkVz2S9qZqng58zd3gcMKmSZ864GAzcR8ezH1SHhw/logo.png", - "extensions": { - "twitter": "https://twitter.com/colibritoken" - } - }, - { - "chainId": 101, - "address": "3cUGVa1wVg9XiCSi4dhwjLR8A5T8FYnEyhNPBPkMbYDq", - "symbol": "OOWL", - "name": "Otaku Origins WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/matlirman/token-list/main/assets/mainnet/3CXVYitUaSMxifZKyiBRDT1TMcGrL1nJ2WfwdgnnvrKS/logo.png", - "tags": ["mint-token"], - "extensions": { - "website": "https://otakuorigins.io/" - } - }, - { - "chainId": 101, - "address": "BWnE6wM3DYyVCMHxsiSxKfNwrJy4G6kcKpSYESGxZWKf", - "symbol": "SWAG", - "name": "Swag Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/heybevis01/crypto/main/swagcoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AsU8cuPxynNeDoGetZ2HscoNkVmhz169f87tAWNb1LNN", - "symbol": "TECH", - "name": "Technology Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SolanaTokenMerger/Technology-Coin/main/logo.png", - "tags": ["social-token", "community-token", "utility-token"], - "extensions": { - "website": "https://www.1dsmedia.com" - } - }, - { - "chainId": 101, - "address": "5an1UMFKA5gXGyhKJoqGawEiLao9Z3ymn1SBoXuNmFP", - "symbol": "LING", - "name": "LingLing Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SolanaTokenMerger/Lingling-Coin/main/logo.png", - "tags": [ - "social-token", - "community-token", - "utility-token", - "meme-token", - "lingling-token" - ] - }, - { - "chainId": 101, - "address": "6Jnew8Gxbt6cWXA4s3HRqET228SLcHYHdDqAEbSchMnL", - "symbol": "BASED", - "name": "Based Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Scrump/basedcoin/main/logo.png", - "tags": ["community-token", "social-token"], - "extensions": { - "website": "https://thebasedcoin.com" - } - }, - { - "chainId": 101, - "address": "8bbQugNuT8hoUnaJ7xja5hCWgQsVgHK1hc74oXREC1Hq", - "symbol": "A$", - "name": "ACOIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/alro1991/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HhoEAbSPui6EncKntxdToz8cPPLtacgshfKXUjzRYBUr", - "symbol": "ARX", - "name": "Arx Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HhoEAbSPui6EncKntxdToz8cPPLtacgshfKXUjzRYBUr/logo.png", - "tags": ["Arxolotl"], - "extensions": { - "twitter": "https://twitter.com/ARxolotl" - } - }, - { - "chainId": 101, - "address": "3HYVcsFMDWSyvoUQthCTJX2MW96ciVMkFEnoHhheNqL7", - "symbol": "ODNR", - "name": "ODNR Deer Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/RealKevin1960/Crypto/main/ohioDNR3.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "hone3CJTYjczb5nJh45KCNMkjrKMt7SCnHkWGWsVfVu", - "symbol": "HONE", - "name": "Yokoito Crew Hone", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/hone3CJTYjczb5nJh45KCNMkjrKMt7SCnHkWGWsVfVu/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/kcYuqWu9Qr", - "twitter": "https://twitter.com/yokoitocrew", - "website": "https://yokoitocrew.org/" - } - }, - { - "chainId": 101, - "address": "56bFarytGNPXnA34WbghfHoHQJ7NqKSKyTSnfmACdYtk", - "symbol": "KCRWN", - "name": "Kingdom Crown", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/56bFarytGNPXnA34WbghfHoHQJ7NqKSKyTSnfmACdYtk/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://www.kingdomofdwarves.io/" - } - }, - { - "chainId": 101, - "address": "Ge59QW4WJMgi4esSWr6fy8nndhLhp9u9CtF8fBqcZjv5", - "symbol": "USPC", - "name": "United States Patriot Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Artenen/USPCoin/main/Patriot-Coin-Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DmR3GfYASk4nvLtm3SJrXZChS7cq7opvMnfvrXwik1z4", - "symbol": "BUIDL", - "name": "BUIDL Token", - "decimals": 9, - "logoURI": "https://gateway.pinata.cloud/ipfs/QmbqSmG9As6kvyzFZUQNAB3jGvzKaxYNz8uggJjR8F1LGe", - "tags": ["community-token"] - }, - { - "chainId": 101, - "address": "FxpkAfCjjYzRn5fL5JSYBmzAG73m9EgJpyv4FojMficF", - "symbol": "USSR", - "name": "La cosa nostra project", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/kartashowRoman/src/main/asset.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3rL1r2wp7B63fwFzMQuYCQUZgWWKXS576UNnpBZZxRqt", - "symbol": "ATPK", - "name": "AmeriKen", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ekledzik/atpx/main/icon.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "YaUTyaugMnz5qxoJmL8s8kQYiVRHa7PBRLoU9tw4Nxg", - "symbol": "EXO", - "name": "EXOTIC", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/ShichibukaiMatt/Crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FjmhkS8tD9LzqU7nNNZKEjbZjQJFi8GuK3zSj7xBkTRE", - "symbol": "BLOCKSTONE", - "name": "FUND", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FjmhkS8tD9LzqU7nNNZKEjbZjQJFi8GuK3zSj7xBkTRE/blockstonePNG.png", - "tags": ["DeFi", "Blockstone-fund"], - "extensions": { - "website": "https://blocksto.ne/fund/" - } - }, - { - "chainId": 101, - "address": "GQ26R2DVjWPYZTeUCBZV7Hs9V1DBsVhCNunvP2MWLQgP", - "symbol": "LOBO", - "name": "Lobo Coin", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GQ26R2DVjWPYZTeUCBZV7Hs9V1DBsVhCNunvP2MWLQgP/logo.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/lostaliensnft" - } - }, - { - "chainId": 101, - "address": "FB3UPHEXLGzf2CrnUENJ1iVdV7Jf8MN2Kzk9xTaojwNk", - "symbol": "MMRB", - "name": "Karatishan Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SGB1986/mmrb/main/273881030_5268999106472407_2126765086870700326_n.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2YjFA4xNN3qaxpnVAciF7VvnzuF4GzbiNziu2uxRY9Wm", - "symbol": "BLOCKSTONE", - "name": "Ahome", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2YjFA4xNN3qaxpnVAciF7VvnzuF4GzbiNziu2uxRY9Wm/blockstonePNG.png", - "tags": ["Real-estate", "Blockstone-fund"], - "extensions": { - "website": "https://blocksto.ne/ahome/" - } - }, - { - "chainId": 101, - "address": "BiNGum7bxnvXVjQchN8g1mYzt1U1jzMB3Ym7PiWKU1h8", - "symbol": "BLOCKSTONE", - "name": "BARGE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BiNGum7bxnvXVjQchN8g1mYzt1U1jzMB3Ym7PiWKU1h8/blockstonePNG.png", - "tags": ["DeFi", "Blockstone-fund"], - "extensions": { - "website": "https://blocksto.ne/barge/" - } - }, - { - "chainId": 101, - "address": "DpP9baPNx9gaVDR9ez4Dc6Ty4UnCbtChrfw5WAyc7ei6", - "symbol": "NCCoin", - "name": "Night Club Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/Night-Club/Coins/main/nigtclub.png", - "tags": ["game", "coin", "game-coin", "game-currency", "nft-token"], - "extensions": { - "twitter": "https://twitter.com/_Night_Club_", - "website": "https://www.NightClub.nu" - } - }, - { - "chainId": 101, - "address": "ExZMffxDyrchC17bj4QLLHcAtnWwWSW5T8YJxi8ACBPv", - "symbol": "BANG", - "name": "Bang Energy Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SolanaTokenMerger/Bang-Energy-Coin/main/logo.png", - "tags": [ - "social-token", - "community-token", - "utility-token", - "meme-token" - ], - "extensions": { - "twitter": "https://twitter.com/bangenergy", - "website": "https://bangenergy.com" - } - }, - { - "chainId": 101, - "address": "AXaLS9CR2Xc16w7PuZFckqGcYmMuNdxyuDpDjYQVq8Z1", - "symbol": "OZY", - "name": "Ozymandias Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SolanaTokenMerger/Ozymandias-Coin/main/logo.png", - "tags": [ - "social-token", - "community-token", - "utility-token", - "Ozymandias-token" - ] - }, - { - "chainId": 101, - "address": "7bJMr1AtyCewq5QKRPJHVKTQZVKoSRN6ekiuJTe93cdN", - "symbol": "LANA", - "name": "LANA", - "decimals": 6, - "logoURI": "https://i.imgur.com/KVmQyyK.png", - "extensions": { - "medium": "https://moonlana.medium.com/", - "serumV3Usdc": "AcnAbXbc5YqEyYUksPbGuHR21SGFNDUdRm3xEvWHFN1Y", - "twitter": "https://twitter.com/xMoonLana", - "website": "https://moonlana.com/" - } - }, - { - "chainId": 101, - "address": "EJXx9KWMbUB8dNEaGLNJBkoMdrEgjfUAQ7ChzgkGFbxS", - "symbol": "BLOCKSTONE", - "name": "Art Fund", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EJXx9KWMbUB8dNEaGLNJBkoMdrEgjfUAQ7ChzgkGFbxS/blockstonePNG.png", - "tags": ["Art", "AAA-Blockstone-token"], - "extensions": { - "website": "https://blocksto.ne/art-fund/" - } - }, - { - "chainId": 101, - "address": "kai6Dt6612rNn9MaW1eXHAWngwfoqYKFEMyniuWmoWv", - "symbol": "KAIJU", - "name": "KaijuVerse", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/kai6Dt6612rNn9MaW1eXHAWngwfoqYKFEMyniuWmoWv/logo.png", - "tags": ["utility-token", "community-token", "NFT"], - "extensions": { - "description": "1313 Kaijus Wreaking Havoc On Solana", - "discord": "https://discord.gg/kaijuverse", - "twitter": "https://twitter.com/KaijuVerseNFT", - "website": "https://kaijuversenft.com" - } - }, - { - "chainId": 101, - "address": "Hi4WKXqmeoNVz8Nf7pxCCQrdFfxdLDLGFudHXmV95oU9", - "symbol": "ACRE", - "name": "ACRE", - "decimals": 9, - "logoURI": "https://i.imgur.com/2f7q7UN.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/ractopia", - "website": "https://www.ractopia.com/" - } - }, - { - "chainId": 101, - "address": "5RyFNDFE6tadfNU7ftSSyXB1PCBQVbLf9EdY1WecHt2b", - "symbol": "YAPS", - "name": "Yapperson", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/tokermaker/yippers/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DFdgWSHxSmhv8rvMkzaiZR7x5m83LFY9Pe2NP2vVEDDX", - "symbol": "CGS", - "name": "CryptoGas", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/rcorales/cryptogas/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "83XVHzMWXfoMJt9aBuS4mWAUk5FPYkkMZWYMe7mQPc7o", - "symbol": "OMEN", - "name": "Omens of Olympus WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/83XVHzMWXfoMJt9aBuS4mWAUk5FPYkkMZWYMe7mQPc7o/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Whitelist token for a single Omen of Olympus.", - "discord": "https://discord.gg/omensofolympus", - "twitter": "https://twitter.com/omensofolympus", - "website": "https://omensofolympus.com" - } - }, - { - "chainId": 101, - "address": "9Db4WyPxBGAj3V62Y2KGo757PYhq6QYxG2BZPkU8hDzV", - "symbol": "MVT", - "name": "Megaverse", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/MegaverseProject/Assets/main/MVT%20Logo.png", - "tags": ["ethereum", "wrapped", "wormhole"], - "extensions": { - "description": "Megaverse is a cross platform gaming project built on solana, where NFTs and GameFi meets the metaverse, enhancing P2E blockchain technology.", - "discord": "https://discord.com/invite/2kveFZwnBU", - "twitter": "https://twitter.com/MegaverseProj", - "website": "https://www.megaverseproject.io" - } - }, - { - "chainId": 101, - "address": "EXDv3VAeWUYgkuoBPuZvfq4k5xdEJSfyzSNKoc9rkceF", - "symbol": "CMCN", - "name": "CamToken", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/greenapple1234/Crypto/main/C.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "399N5NddQ2rpRyUHku1UAmZzqUdanDhxe1kN9MnUBhQW", - "symbol": "FWF", - "name": "Framework Fortune Coin", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/frameworkfortune/FWF-Graphics/main/logo.png.png", - "tags": ["social-token", "utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/FramewkFortune", - "website": "https://www.frameworkfortune.com/" - } - }, - { - "chainId": 101, - "address": "7TFkZszsBijKKdxhLn2PkTJsbBv8a9CfsB61LsSFQmnZ", - "symbol": "PHORK", - "name": "Phork Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7TFkZszsBijKKdxhLn2PkTJsbBv8a9CfsB61LsSFQmnZ/logo.svg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7JgZmhsfxVyV2Xgmgb34dx8kB3EDUSnBt9rSGdiaiiaD", - "symbol": "BFCN", - "name": "Billyfrog Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/benb80/crypto/main/frogcoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8qEvmjgVub3fEaxaEr6YkyPnWv5ZT2XQkFQTXaYSvJzN", - "symbol": "JOWL", - "name": "Juvot Mint Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/juvenileotters/juvotlogo/main/juvot.png", - "tags": ["stake-pool-token"], - "extensions": { - "discord": "https://discord.gg/sCSPajmTZu", - "twitter": "https://twitter.com/JuvenileOtters" - } - }, - { - "chainId": 101, - "address": "9v8HmhZi7y4cwbe7uHKkRP2eGMaf5m2u8FuzuNqo9JwZ", - "symbol": "EKAM", - "name": "Ekam Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ekamtoor/crypto/main/Ekam.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "TopKewsMBtY6kM7SDJtWaW9SfmowqqPH2peEpsdMf3D", - "symbol": "WKT", - "name": "Witch Kingdom Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/TopKewsMBtY6kM7SDJtWaW9SfmowqqPH2peEpsdMf3D/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5vfLU3vxRQj6v474imwFvoeWxqo4gKmXmRpQ5N1Qgpcy", - "symbol": "SLACCMINT", - "name": "SLACC Mint Tokens", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SlaccMint/uploads/main/logo.png", - "tags": ["social-token", "utility-token"], - "extensions": { - "discord": "https://discord.gg/slacc", - "twitter": "https://twitter.com/SlaccSol", - "website": "https://slacc.io" - } - }, - { - "chainId": 101, - "address": "8uvbcdvzVV8TMtmY5DGd7PrJT2bCKgWYYtQJ9iKnU8m8", - "symbol": "SPC", - "name": "Space Cash", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/spacecash-solana/spacecash/main/spacecash.png" - }, - { - "chainId": 101, - "address": "BgjhevUKQDZ28usZMEairXPctoFA3nqKM8A1j5YhHv7w", - "symbol": "ANGRY", - "name": "ANGRY", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/matthewrx/token/main/angry_token_logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/angryroyale", - "website": "https://angrybattleroyale.com/" - } - }, - { - "chainId": 101, - "address": "h4XNYWyefydaNiEZmECeutJtxQbyopZUSeWPFDJZtaL", - "symbol": "PURR", - "name": "Alleycats Collective Token", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/h4XNYWyefydaNiEZmECeutJtxQbyopZUSeWPFDJZtaL/purr_coin.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/v6wJMQhArX", - "twitter": "https://twitter.com/accsolana" - } - }, - { - "chainId": 101, - "address": "DbiLGsmv5FbgzipdpvEMFS1Zv7cHpVFZj7QEYvzRVAyq", - "symbol": "COLORCUBES", - "name": "Random Color Cubes", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DbiLGsmv5FbgzipdpvEMFS1Zv7cHpVFZj7QEYvzRVAyq/logo.png", - "tags": ["random-color-cubes", "one-of-a-kind"], - "extensions": { - "website": "http://randomcolorcubes.xyz" - } - }, - { - "chainId": 101, - "address": "pBGDfRAWPo15JaTXQVQ8dTYKgaLkG8ywzbgrueGMu7L", - "symbol": "LFC", - "name": "LongFlexCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/longflex/crypto-logo/main/cryptologo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CvPpTR27jiLS6zqKxRyxnyjgjmeUA3xrfWokhMZs5EaE", - "symbol": "DUBS", - "name": "DUB Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Bagheadfan/dub/main/logo.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "AwdLhnYKHsA53KYVXFhsRAfnrPbAgPMjUKPoMQ2L6VM", - "symbol": "GBLN", - "name": "Goblin Metaverse", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AwdLhnYKHsA53KYVXFhsRAfnrPbAgPMjUKPoMQ2L6VM/logo.png", - "tags": [ - "utility-token", - "governance-token", - "metaverse", - "community-token", - "game-token", - "game-currency", - "GameFi", - "Gaming", - "NFT" - ], - "extensions": { - "discord": "https://discord.gg/goblinarmy", - "instagram": "https://instagram.com/goblinmetaverse", - "twitter": "https://twitter.com/GoblinArmyNFT", - "website": "https://goblinmetaverse.io" - } - }, - { - "chainId": 101, - "address": "3E3mksyXdcAtCY2zmoniGxgowhWPjn3B93MVbqbgsyLE", - "symbol": "BRHM", - "name": "BRAMHA", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/vivekdnaik/bramha/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6VgdRyC2ft9MTKzhWBpxy1aemyucdjKtu7a4cxDui29y", - "symbol": "Yabu12344", - "name": "TestYabu12344", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/WayTo1Million/test/main/Yabu12344.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6kcXW5DZjF31jNZKpJ6XLYwqVsn7HdkoVLSJUnogma9U", - "symbol": "MWLT2", - "name": "Mutant WL2", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/HFaour/token-list/main/assets/mainnet/6kcXW5DZjF31jNZKpJ6XLYwqVsn7HdkoVLSJUnogma9U/new.png", - "tags": ["social-token", "community-token"], - "extensions": { - "discord": "http://discord.gg/catcartel", - "twitter": "https://twitter.com/SolanaCatCartel", - "website": "https://catcartel.io/" - } - }, - { - "chainId": 101, - "address": "2xcDAxtrSJ9hv2qaS4dDWGTv78NHuu8FWV6j6ZdwQJmW", - "symbol": "LAD", - "name": "LAD", - "decimals": 4, - "logoURI": "https://user-images.githubusercontent.com/95661911/154075037-3f7946d4-8b73-42be-9ee9-08c21095d99e.png", - "tags": [ - "utility-token", - "game-token", - "game-currency", - "GameFi", - "Gaming", - "Play-to-earn", - "Metaverse" - ] - }, - { - "chainId": 101, - "address": "GaSt1Lqv7oept4bfBipgPnY7T5f1rG6tu8sgpWYxVtFT", - "symbol": "GJJ", - "name": "Vrouw met waaier", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GaSt1Lqv7oept4bfBipgPnY7T5f1rG6tu8sgpWYxVtFT/waaier.png", - "tags": ["Geert-Jan-Jansen", "stijl-van-Klimt"], - "extensions": { - "website": "https://blocksto.ne/nft-gustav-klimt-by-geert-jan-jansen/" - } - }, - { - "chainId": 101, - "address": "WLPkasQaeBjePs6uED7MQsQiES41aANWfqqAxc5Y8CP", - "symbol": "PPWL", - "name": "Plague WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/PlaguePixel/icon/main/WL%20Plague.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "7JHZiCNojnGedEV9E7nyvJBuaqnGhX8U4iw2o3K6kia", - "symbol": "XLO", - "name": "XLO Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Link125/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GHjgZH9oVEoDyyRGXGRmALdhAVh3Bz9fhvdaVea2BiK2", - "symbol": "LBH", - "name": "LOSBRANLOSHERMANOS Token", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/izetrom/token/master/logo.png" - }, - { - "chainId": 101, - "address": "GD3rXfcnCf8CNpFcqwG67cXa3ree9KrfGBZMV5gjutpu", - "symbol": "KOIN", - "name": "Koin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Itschotsch/koin/main/Koin.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "549vG4KMhxe3cMVMJ7YRPNC2nj9HTBv8CZhBw85wdJgj", - "symbol": "UBMS", - "name": "Unplugged BMS Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/unplugged-bms/crypto/main/logo.png", - "tags": ["utility-token", "social-token", "community-token"] - }, - { - "chainId": 101, - "address": "6GK4nhV3h2RDKmjY4u43N3HJWNs6nYSB1qSBnsj6a2px", - "symbol": "SFC-BATTERY", - "name": "Solana Faction Cards Battery Pack", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/faction-cards/assets/main/images/coins/SFC-BATTERY/logo.png", - "tags": ["social-token", "utility-token", "community-token"], - "extensions": { - "description": "Solana Faction Cards enables staking, governance and cross-chain multiverse.", - "discord": "https://discord.com/invite/Wkjp3DhJuZ", - "github": "https://github.com/faction-cards", - "serumV3Usdc": "7uHeXXknyws9iazNGh5JZjfqFFCKeihAYcgzSW3AfqkN", - "twitter": "https://twitter.com/faction_cards", - "website": "https://faction.cards" - } - }, - { - "chainId": 101, - "address": "AoYS2EzUPNKWSm4BH4bvzL16hA76XSmCkxgftxojVgLA", - "symbol": "SFC-PRESALE", - "name": "Solana Faction Cards Pre-Sale Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/faction-cards/assets/main/images/coins/SFC-PRESALE/logo.png", - "tags": ["social-token", "utility-token", "community-token"], - "extensions": { - "description": "Solana Faction Cards enables staking, governance and cross-chain multiverse.", - "discord": "https://discord.com/invite/Wkjp3DhJuZ", - "github": "https://github.com/faction-cards", - "twitter": "https://twitter.com/faction_cards", - "website": "https://faction.cards" - } - }, - { - "chainId": 101, - "address": "9yL9k6WivrPkwjbVQ8e4PiSM9SqzJfB8H1GKif7ZkXLJ", - "symbol": "FLOCKA", - "name": "Flocka Coin", - "decimals": 0, - "logoURI": "https://cdn.jsdelivr.net/gh//averyschwarz/myrepo/FlockasLogo.png", - "tags": ["community-token", "social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "DycVsKpUdxEkWgN6YhPGNJTpNdT2BoTwbVLkfYWZe4cz", - "symbol": "WAVE", - "name": "The WAVE Forumla", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/karlmalik/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "34KUJBBZ1Xbud6NYcbyX25pw7TpkeUG2PJS8Paq3fcsM", - "symbol": "BENZ", - "name": "benz", - "decimals": 8, - "logoURI": "https://gateway.pinata.cloud/ipfs/QmR5FQVrGg7ySX3BXxPsMzPrBR2j2RWnDKVavReKbKV79W", - "tags": ["utility-token", "community-token"] - }, - { - "chainId": 101, - "address": "3qFnHUwFnEiheKXJwKwSNnZdFK5bsCmSEUUzPtc8q1hT", - "symbol": "BB", - "name": "Bagbucks", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/EthanProvostMcCallie/Bagbucks/main/unknown.png", - "tags": ["utility-token", "social-token"] - }, - { - "chainId": 101, - "address": "9E1pBgmP2UeNyCyQuxTPaBAmxb4nU62BQRDuwZeRQJCF", - "symbol": "UAHS", - "name": "UAH Stable", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9E1pBgmP2UeNyCyQuxTPaBAmxb4nU62BQRDuwZeRQJCF/logo.png", - "tags": ["stablecoin"] - }, - { - "chainId": 101, - "address": "8qkzk7WQHj7M6poVbQtbgwyhM9qLTE2zXaJNaycsngF3", - "symbol": "ETTM", - "name": "Entertainment Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/nn9uy3n0326/cypto-logo/main/ETTM1.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EZq9JtPQDRJ54Vyp1T8rnbwXU9CDBcjJeZE6jLCjbn1D", - "symbol": "BUILD", - "name": "BUILD Token", - "decimals": 9, - "logoURI": "https://gateway.pinata.cloud/ipfs/QmbqSmG9As6kvyzFZUQNAB3jGvzKaxYNz8uggJjR8F1LGe", - "tags": ["community-token"] - }, - { - "chainId": 101, - "address": "BuzXJtMchXztGFHMpVtPCBrmRYHMS83TQ7sVCqXJKgvL", - "symbol": "DBOC", - "name": "Donnie Barko", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/JMtechdev/crypto_token_test/main/donnie-barko.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "TobhYvEGedQnGWvr1Hge75mepe55xZ9vpKde885HsRV", - "symbol": "CSCWL", - "name": "CSC WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/TobhYvEGedQnGWvr1Hge75mepe55xZ9vpKde885HsRV/logo.png", - "tags": ["community-token"] - }, - { - "chainId": 101, - "address": "ToDFFVGdRGnxBXpiDX3sjouiQCUpgyKQcSzoHskDX27", - "symbol": "SE", - "name": "Solana Express WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/krikkkk/setokenlogo/main/rsz_1logo.png", - "tags": ["wl-token"] - }, - { - "chainId": 101, - "address": "HnbycWsUBp4sVS8D8NrBxDiMxPT3wu9ndoNCyTEiG5TP", - "symbol": "LTR", - "name": "Letter", - "decimals": 4, - "logoURI": "https://github.com/letter/brand/raw/main/Normal.jpg", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/letterbanking", - "website": "https://letter.co" - } - }, - { - "chainId": 101, - "address": "H6Jz41jUjNV7kNDBQuvJqNnpEYhGF6wJ5DR8bMLZDqvR", - "symbol": "PALM", - "name": "Palm Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/Alsabbagh16/PALM/main/2%20colors%20512px.png", - "extensions": { - "twitter": "https://twitter.com/palmtok" - } - }, - { - "chainId": 101, - "address": "DkGCSjkUHKDPM1hjcMM8dGNDPnf5nrQU8fvsqvQkVixx", - "symbol": "BRZL", - "name": "Brezel", - "decimals": 6, - "logoURI": "https://brezel.io/img/brezel.svg" - }, - { - "chainId": 101, - "address": "53jjZtfmvFDKpWaHj1Z9u53d45eAVk29xrwG2s89r57E", - "symbol": "EGL", - "name": "Egl Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/14-8811-1/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DbV44ix6fnBsR7Uf7uinmHqkMcEG81PjxP2ofCbBrUPa", - "symbol": "SWAMP", - "name": "The Swamp Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/papacroc/swamptokenofficial/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "C6Kc3aLCTugfPcH1twxGAdiyWf9DsVjHdyABjXugufhL", - "symbol": "PTS", - "name": "Sol-e Tech Points", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/C6Kc3aLCTugfPcH1twxGAdiyWf9DsVjHdyABjXugufhL/logo.png", - "tags": ["utility-token", "community-token", "social-token"], - "extensions": { - "instagram": "https://www.instagram.com/sole_nft" - } - }, - { - "chainId": 101, - "address": "D3jtAcY9u9EGRiJ7j9FA6Wa6pJNZzmDe29iKrXtWUkJh", - "symbol": "NTRON", - "name": "Neotron", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/gvossos/crypto/main/neotron-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HDnX2LC1bnP88VefMh3rZxdAEFvK1jEPVovb2CBQsbbs", - "symbol": "PEW", - "name": "Moose and cub currency system", - "decimals": 9, - "logoURI": "https://i.ibb.co/fkDWTtg/us.jpg", - "tags": ["social-token"], - "extensions": { - "discord": "https://discord.gg/n26UwdVy", - "twitter": "https://twitter.com/solgats", - "website": "https://solgats.io" - } - }, - { - "chainId": 101, - "address": "7TMc9ogd3woQHVNe6y49PyNcqZNtQkrjjNwLtcrKD1Nm", - "symbol": "BBQ", - "name": "BBQ Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/gzparker/BBQCoin/main/logo.png", - "tags": ["social-token", "utility-token", "community-token"], - "extensions": { - "website": "https://www.americanbbq.org" - } - }, - { - "chainId": 101, - "address": "Neofzr2yA4zKv7zs9DgANA332nD3tAsDBUuk7s2ab2n", - "symbol": "NEO", - "name": "NEO Governance Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/UnlockDeFi/NEONEXUS/master/assets/tokens/neo/neo.svg", - "tags": ["governance-token", "neonexus"], - "extensions": { - "discord": "https://discord.gg/y76VcXQrZq", - "twitter": "https://twitter.com/neonexus_world", - "website": "https://neonexus.io" - } - }, - { - "chainId": 101, - "address": "8YNpPhbPabeZqHTdZsh5miXNqj4WFGPL1DwZbmb7AaxK", - "symbol": "RGT", - "name": "Royal Goats", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8YNpPhbPabeZqHTdZsh5miXNqj4WFGPL1DwZbmb7AaxK/logo.png", - "tags": ["nft-token"], - "extensions": { - "discord": "https://discord.gg/MaB6hjhfzt", - "twitter": "https://twitter.com/RoyalGoatsNFT", - "website": "https://www.royalgoats.com/" - } - }, - { - "chainId": 101, - "address": "5S2uwGaiCYX4tXq9wfSH44SbXTQUF2n2sanJJ2o1djXr", - "symbol": "KROBA", - "name": "KROBA", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/RonxBrush/KROBA-TOKEN/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2Vjitrf9ZF7mmPKiyocSigH8HqWWSCAPYXAGPdzjvZGg", - "symbol": "MFWL", - "name": "Motor Flippers WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Vjitrf9ZF7mmPKiyocSigH8HqWWSCAPYXAGPdzjvZGg/motor-flippers.png", - "tags": ["whitelist"] - }, - { - "chainId": 101, - "address": "ENGUzXs1xoYxHm3NtvZL26NLwAWr2zkswnTNevfEUYqp", - "symbol": "KLNW", - "name": "KALA NETWORK", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ENGUzXs1xoYxHm3NtvZL26NLwAWr2zkswnTNevfEUYqp/logo.png", - "tags": ["utility-token"], - "extensions": { - "instagram": "https://www.instagram.com/kala_network/", - "telegram": "https://t.me/kala_network", - "twitter": "https://twitter.com/kala_network", - "website": "https://kala.network/" - } - }, - { - "chainId": 101, - "address": "8iKYLJseSsybWXEzVXSrZ8weSfYEwu7uFrWDbdsWgXYV", - "symbol": "TNKR", - "name": "TinkerKoin", - "decimals": 0, - "logoURI": "https://github.com/smian1/tinkerKoin/blob/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4ja4BvHok5ANPDM5Z922Yb1XUx77T96JYFyWbFczhydP", - "symbol": "YGL", - "name": "Yagolnitzer Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4ja4BvHok5ANPDM5Z922Yb1XUx77T96JYFyWbFczhydP/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HVtfDhSpbuUQwXxEL6RmVEfEeWbpmfUt6Tbh8iRrosZP", - "symbol": "OtakuOriginsWL", - "name": "Otaku Origins WL 2", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/matlirman/token-list/main/assets/mainnet/HVtfDhSpbuUQwXxEL6RmVEfEeWbpmfUt6Tbh8iRrosZP/logo.png", - "tags": ["mint-token"], - "extensions": { - "website": "https://otakuorigins.io" - } - }, - { - "chainId": 101, - "address": "3LjPgBRjMXXdbhaK9t3qDS8yPHRnNeLfiRLNFqW9Awxz", - "symbol": "$BNFT", - "name": "BTCNFT Trademark BNFT", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3LjPgBRjMXXdbhaK9t3qDS8yPHRnNeLfiRLNFqW9Awxz/logo.png", - "tags": ["btcnftcoin-com", "trademark"], - "extensions": { - "website": "https://btcnftcoin.com/" - } - }, - { - "chainId": 101, - "address": "J5ikTGiq3SZm8HbVCC2srYRKsmSaoUYiPDcivP5W3uwg", - "symbol": "BTNFT", - "name": "BTCNFT Trademark BTNFT", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/J5ikTGiq3SZm8HbVCC2srYRKsmSaoUYiPDcivP5W3uwg/logo.png", - "tags": ["btcnftcoin-com", "trademark"], - "extensions": { - "website": "https://btcnftcoin.com/" - } - }, - { - "chainId": 101, - "address": "3t3UYQKWu3c2c3jUSnQ2PkRxD1PTkdrkWrBFhvmrr1ST", - "symbol": "$BTNFT", - "name": "BTCNFT Trademark BTNFT 2", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3t3UYQKWu3c2c3jUSnQ2PkRxD1PTkdrkWrBFhvmrr1ST/logo.png", - "tags": ["btcnftcoin-com", "trademark"], - "extensions": { - "website": "https://btcnftcoin.com/" - } - }, - { - "chainId": 101, - "address": "2Bup23Wjs9Y8x51HbFNa2ChEAPTVz3SiEtSBdtCPKgne", - "symbol": "BTCNF", - "name": "BTCNFT Trademark BTCNF", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Bup23Wjs9Y8x51HbFNa2ChEAPTVz3SiEtSBdtCPKgne/logo.png", - "tags": ["btcnftcoin-com", "trademark"], - "extensions": { - "website": "https://btcnftcoin.com/" - } - }, - { - "chainId": 101, - "address": "EnagYUpV6BUhyAqkCggw3dbyqTo4aqctKMPK2FdSXNAq", - "symbol": "$BTCNF", - "name": "BTCNFT Trademark BTCNF 2", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EnagYUpV6BUhyAqkCggw3dbyqTo4aqctKMPK2FdSXNAq/logo.png", - "tags": ["btcnftcoin-com", "trademark"], - "extensions": { - "website": "https://btcnftcoin.com/" - } - }, - { - "chainId": 101, - "address": "BTu5SVrUyuaZUywEi7yY7W8XtSDFyV42Joy3321aps2H", - "symbol": "$BTCN", - "name": "BTCNFT Trademark BTCN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BTu5SVrUyuaZUywEi7yY7W8XtSDFyV42Joy3321aps2H/logo.png", - "tags": ["btcnftcoin-com", "trademark"], - "extensions": { - "website": "https://btcnftcoin.com/" - } - }, - { - "chainId": 101, - "address": "8EnATyTT58dpqTbVEETzjrPvjHhZwUHugXhPbDQuDBuJ", - "symbol": "NFTBT", - "name": "BTCNFT Trademark NFTBT", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8EnATyTT58dpqTbVEETzjrPvjHhZwUHugXhPbDQuDBuJ/logo.png", - "tags": ["btcnftcoin-com", "trademark"], - "extensions": { - "website": "https://btcnftcoin.com/" - } - }, - { - "chainId": 101, - "address": "7TYKDZ2TTkRmXbRyCqQvPCPCwPALv8me2xnH87U8vxr6", - "symbol": "$NFTBT", - "name": "BTCNFT Trademark NFTBT 2", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7TYKDZ2TTkRmXbRyCqQvPCPCwPALv8me2xnH87U8vxr6/logo.png", - "tags": ["btcnftcoin-com", "trademark"], - "extensions": { - "website": "https://btcnftcoin.com/" - } - }, - { - "chainId": 101, - "address": "8Z61yvRm9ADG3PScFP5UtCqZ1oJpy7iUDGDyddP1ZD9i", - "symbol": "NFTB", - "name": "BTCNFT Trademark NFTB", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8Z61yvRm9ADG3PScFP5UtCqZ1oJpy7iUDGDyddP1ZD9i/logo.png", - "tags": ["btcnftcoin-com", "trademark"], - "extensions": { - "website": "https://btcnftcoin.com/" - } - }, - { - "chainId": 101, - "address": "9gWzac1i2wUfKrQbrY8RrwEqQU5QuUn7brr6w17gxeQ3", - "symbol": "$NFTB", - "name": "BTCNFT Trademark NFTB 2", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9gWzac1i2wUfKrQbrY8RrwEqQU5QuUn7brr6w17gxeQ3/logo.png", - "tags": ["btcnftcoin-com", "trademark"], - "extensions": { - "website": "https://btcnftcoin.com/" - } - }, - { - "chainId": 101, - "address": "DeviL3EJ6hU4abi7WqQKv3KfXRCqDhcn4GxkCMAWCAFf", - "symbol": "SOULZ", - "name": "Devil Games SOULZ", - "decimals": 13, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DeviL3EJ6hU4abi7WqQKv3KfXRCqDhcn4GxkCMAWCAFf/logo.png", - "extensions": { - "twitter": "https://twitter.com/DevilsGameNFT", - "website": "https://devilsgame.net" - } - }, - { - "chainId": 101, - "address": "NexuswHziJRTQ6WbmFaxLSMDZo3w7FYpMFViwAcEW3p", - "symbol": "NEXUS", - "name": "NEXUS Utility Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/UnlockDeFi/NEONEXUS/master/assets/tokens/nexus/nexus.svg", - "tags": ["utility-token", "neonexus"], - "extensions": { - "discord": "https://discord.gg/y76VcXQrZq", - "twitter": "https://twitter.com/neonexus_world", - "website": "https://neonexus.io" - } - }, - { - "chainId": 101, - "address": "DviJfSdN55meHWdyvxKTP4eFhbV9pFsrkxq6jkqEipk9", - "symbol": "TGS", - "name": "Tech Guy Station", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DviJfSdN55meHWdyvxKTP4eFhbV9pFsrkxq6jkqEipk9/logo.png", - "tags": ["whitelist", "tech-guy-station"] - }, - { - "chainId": 103, - "address": "Hqk42zkSoxhKGZtnj8HpuxYroysRmMkEDUvC9TvQbzNu", - "symbol": "AIR", - "name": "Air", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Hariienesh1901/Air/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CMeBHBuvWby47zKN8iUyW8mam7tCqet5aLAoshva3fYQ", - "symbol": "FTC", - "name": "FourTwentyCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/draganfourtwenty/crypto/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "G1jPNVrjF6beKE88pDBmMZM72xsphw8x8n94xcPTG18R", - "symbol": "CBETS", - "name": "CSEBets", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/CSEBets/crypto/main/csebetslogo.jpg", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "GdB5KVvYbmRR3qrxG1sjRMpBLKHb2rg1hzcRR3a3wMmv", - "symbol": "CTMS", - "name": "Cryptomos Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/cryptomos000com/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3RXTenk2bvx5cTYY8JrN94EFi3AkYCz9tzJzE7oRhSgf", - "symbol": "CHICK", - "name": "TheChickenz", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MarioProjects/chick-coin/main/coin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8xCKSf2ba7HP2EwahXmeYqABcFTt6eyYkJZM9hcBZLdf", - "symbol": "$BITNFT", - "name": "BTCNFT Trademark BITNFT", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8xCKSf2ba7HP2EwahXmeYqABcFTt6eyYkJZM9hcBZLdf/logo.png", - "tags": ["btcnftcoin-com", "trademark"], - "extensions": { - "website": "https://btcnftcoin.com/" - } - }, - { - "chainId": 101, - "address": "D7nr4D5MSLGnyYLoKKe5GfujkcfLoHk6ksDi6FtrfxVs", - "symbol": "BITNF", - "name": "BTCNFT Trademark BITNF", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/D7nr4D5MSLGnyYLoKKe5GfujkcfLoHk6ksDi6FtrfxVs/logo.png", - "tags": ["btcnftcoin-com", "trademark"], - "extensions": { - "website": "https://btcnftcoin.com/" - } - }, - { - "chainId": 101, - "address": "D5GNycJ6kbppKcxsN3FV8ve7crTzAKioaFCh9hEEbVfc", - "symbol": "$BITNF", - "name": "BTCNFT Trademark BITNF 2", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/D5GNycJ6kbppKcxsN3FV8ve7crTzAKioaFCh9hEEbVfc/logo.png", - "tags": ["btcnftcoin-com", "trademark"], - "extensions": { - "website": "https://btcnftcoin.com/" - } - }, - { - "chainId": 101, - "address": "F8hWTmvFrXFK8V6HRS5CEvrHa5rMLbahTBsfnLqr2FRc", - "symbol": "BITN", - "name": "BTCNFT Trademark BITN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/F8hWTmvFrXFK8V6HRS5CEvrHa5rMLbahTBsfnLqr2FRc/logo.png", - "tags": ["btcnftcoin-com", "trademark"], - "extensions": { - "website": "https://btcnftcoin.com/" - } - }, - { - "chainId": 101, - "address": "527RUQgWm9wjuZqENJ1RTbNmsJ44vLQnZcxMoKKAtXet", - "symbol": "$BITN", - "name": "BTCNFT Trademark BITN 2", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/527RUQgWm9wjuZqENJ1RTbNmsJ44vLQnZcxMoKKAtXet/logo.png", - "tags": ["btcnftcoin-com", "trademark"], - "extensions": { - "website": "https://btcnftcoin.com/" - } - }, - { - "chainId": 101, - "address": "5vXyUx7fGqpo1NJo2GNqaJuyFWQVU96nr8E2r7467Dhb", - "symbol": "BCNFT", - "name": "BTCNFT Trademark BCNFT", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5vXyUx7fGqpo1NJo2GNqaJuyFWQVU96nr8E2r7467Dhb/logo.png", - "tags": ["btcnftcoin-com", "trademark"], - "extensions": { - "website": "https://btcnftcoin.com/" - } - }, - { - "chainId": 101, - "address": "7gevHSfhLtBj5tZ5iw8113J8Aft1A6aNzy2jKqkPJ2UR", - "symbol": "$BCNFT", - "name": "BTCNFT Trademark BCNFT 2", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7gevHSfhLtBj5tZ5iw8113J8Aft1A6aNzy2jKqkPJ2UR/logo.png", - "tags": ["btcnftcoin-com", "trademark"], - "extensions": { - "website": "https://btcnftcoin.com/" - } - }, - { - "chainId": 101, - "address": "FLZGQMEH3eUHhDrwtnDLmw48XqSovLsucgDY5mWuCctG", - "symbol": "BCNF", - "name": "BTCNFT Trademark BCNF", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FLZGQMEH3eUHhDrwtnDLmw48XqSovLsucgDY5mWuCctG/logo.png", - "tags": ["btcnftcoin-com", "trademark"], - "extensions": { - "website": "https://btcnftcoin.com/" - } - }, - { - "chainId": 101, - "address": "9sBpeAnECieAgstSG2hqrKYMF66LzFAajBGpj2hbbPMy", - "symbol": "$BCNF", - "name": "BTCNFT Trademark BCNF 2", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9sBpeAnECieAgstSG2hqrKYMF66LzFAajBGpj2hbbPMy/logo.png", - "tags": ["btcnftcoin-com", "trademark"], - "extensions": { - "website": "https://btcnftcoin.com/" - } - }, - { - "chainId": 101, - "address": "55mkfwuUyuN6VScNMay4g3KSN2xVsbVuJ9mqb9puARzp", - "symbol": "BCN", - "name": "BTCNFT Trademark BCN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/55mkfwuUyuN6VScNMay4g3KSN2xVsbVuJ9mqb9puARzp/logo.png", - "tags": ["btcnftcoin-com", "trademark"], - "extensions": { - "website": "https://btcnftcoin.com/" - } - }, - { - "chainId": 101, - "address": "3GfdtDnQC6mjkdr9cEaSr9mjS2VnSYoVypQiT2PPRBch", - "symbol": "ORO", - "name": "Shizen Orochi - ORO", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3GfdtDnQC6mjkdr9cEaSr9mjS2VnSYoVypQiT2PPRBch/logo.png", - "extensions": { - "website": "https://www.shizenorochi.com" - } - }, - { - "chainId": 101, - "address": "FrFwnzVRLWics6WEixMupRC5GiPg7YaQuY4m5DWKCqEy", - "symbol": "BEEF", - "name": "Beefcoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FrFwnzVRLWics6WEixMupRC5GiPg7YaQuY4m5DWKCqEy/logo.png", - "tags": [ - "utility-token", - "community-token", - "social-token", - "meme-token", - "food-token", - "nft-token" - ], - "extensions": { - "website": "https://www.beefcoin.info/" - } - }, - { - "chainId": 101, - "address": "6dGAtKBFYNB34ABHDHQV5jc3PXGD36eaxxgVMRakwgeY", - "symbol": "TRNT", - "name": "Trunte Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/CosmosKrypto/trunte/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Dmd4sH3U35Uy3rLGnkx4zVa7EnJAherqSbm9K7aHbfpc", - "symbol": "SOLERA", - "name": "Solera", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Dmd4sH3U35Uy3rLGnkx4zVa7EnJAherqSbm9K7aHbfpc/icon.png", - "extensions": { - "website": "https://www.savagestotsys.com" - } - }, - { - "chainId": 101, - "address": "CS5tMuXYGR1cd2XnVQjoZ42Z1jWoW1Bu8ySdRBT99PDc", - "symbol": "GEMS", - "name": "SAINTxDMON - GEMS", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CS5tMuXYGR1cd2XnVQjoZ42Z1jWoW1Bu8ySdRBT99PDc/logo.png", - "extensions": { - "website": "https://saintxdmon.io" - } - }, - { - "chainId": 101, - "address": "Bsms72AVaPVPByPUky9Jmh1UCFDwMYBZNMs9Mx55EipG", - "symbol": "FOF", - "name": "Future of France", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/FutureFrance/fof-/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BCZZL8hK41QvuR2pg5WHp7JmQtPUsE7m3vNCm3LfQoti", - "symbol": "KKC", - "name": "Kkcina", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/bumir258/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Egnk28ph1b8s8DQJHnunSin6BbGoLptufb1po5vbmsPn", - "symbol": "ROVE", - "name": "Rove Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Egnk28ph1b8s8DQJHnunSin6BbGoLptufb1po5vbmsPn/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://rove.live" - } - }, - { - "chainId": 101, - "address": "9BZffa5zs4K41GRDm7a8EfM4y1rw6SoXV6eysruDCjPT", - "symbol": "STELI", - "name": "Stelinium", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SteliosMappouras/Stelinium/main/stelinium1.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7VnDcdeDG2PdysDHSeceackLupXNrUo9nmhzKt7kqAMQ", - "symbol": "NTR", - "name": "Nitro Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SolanaTokenMerger/Nitro-Coin/main/logo.png", - "tags": [ - "social-token", - "community-token", - "utility-token", - "nitro-token" - ], - "extensions": { - "instagram": "https://www.instagram.com/robertdenitro", - "twitter": "https://twitter.com/nitroakawilson", - "youtube": "https://www.youtube.com/channel/UCh-RZKbzquLB8oMsNiFZo5A" - } - }, - { - "chainId": 101, - "address": "C9kdkSkppUh9zAfGZVbyTKR3bR5G972XpyVpBfYVXpVh", - "symbol": "GJJ", - "name": "Gietwerk gouden lijst", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/C9kdkSkppUh9zAfGZVbyTKR3bR5G972XpyVpBfYVXpVh/goudenlijst.png", - "tags": ["Geert-Jan-Jansen", "Gietwerken"], - "extensions": { - "website": "https://blocksto.ne/nft-geert-jan-jansen-gietwerk-gouden-lijst/" - } - }, - { - "chainId": 101, - "address": "FFDyss8ZNKDoptctFbem76j5idS5yqWVc3kLsNhgFSpV", - "symbol": "BAC", - "name": "BakkaCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ludvig03/Bakkacoin_logo/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FZa3VAVuk2u2CbzHrLChxc8qDm9oGG9vaPvyeQ1FgKgx", - "symbol": "SKT", - "name": "SanKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/badulakepuntocom/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "75PDZoxj9K9o97eg71SBNpvJWSKmeq3HtSUoHZAWMbBk", - "symbol": "GKoz", - "name": "G Koinz", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/GKoinz/logo/main/logoo.png", - "tags": ["utility-token", "social-token", "nft-token", "community"] - }, - { - "chainId": 101, - "address": "CfzXjG5VCQqZ7H7hxnoZZpA1MdcGSThcm6aaipU3M46K", - "symbol": "DR", - "name": "SOUL Coin", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/GokhanCerk/asset/main/Daku.png", - "tags": ["community-token"], - "extensions": { - "twitter": "https://twitter.com/dakureapers", - "website": "https://dakureapers.com/" - } - }, - { - "chainId": 101, - "address": "bonegFPgrpZ4bfVn3kQK1aMbGYddWtfMAywNt5LsuVE", - "symbol": "BONES", - "name": "BONES Token", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/bonegFPgrpZ4bfVn3kQK1aMbGYddWtfMAywNt5LsuVE/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/souldogs", - "instagram": "https://www.instagram.com/souldogscity/", - "medium": "https://medium.com/@souldogscity", - "twitter": "https://twitter.com/SoulDogsNFT", - "website": "https://souldogs.city/" - } - }, - { - "chainId": 101, - "address": "5nBVVMJrG8NXNTgUV8NbydLGxF1G6HATAzYRXBfuinLL", - "symbol": "CUPCAKE", - "name": "CupcakeSwap", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/Njoni/CupcakeSwapLogo-1/main/CupcakeSwap-png-24-1.png" - }, - { - "chainId": 101, - "address": "BKydRTNdaMJ8B4zPva3YhwUQcpvAsyZaGJnKA6F44fX7", - "symbol": "FBZ", - "name": "FakeBiz", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BKydRTNdaMJ8B4zPva3YhwUQcpvAsyZaGJnKA6F44fX7/logo.png", - "tags": ["social-token", "util-token", "web3"], - "extensions": { - "instagram": "https://www.instagram.com/timjdillon", - "twitter": "https://twitter.com/FakeBiz_FBZ", - "website": "https://www.fakebiz.io/" - } - }, - { - "chainId": 101, - "address": "7q69NKLpaD9uA6DrFcatKKmLY1Aop1jRe39wSF5MK4AV", - "symbol": "MCCL", - "name": "McCoolCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/spj1932/cryp/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Pre5GMkB2MYsdTg2QLzM4XD3xawQ9UQiKzp9iuoGVcA", - "symbol": "NFTW", - "name": "NFTraders WhiteList", - "decimals": 0, - "logoURI": "https://github.dev/solana-labs/token-list/blob/89a0071ebd9424b3600cb44719eb73edda6d38ca/assets/mainnet/Pre5GMkB2MYsdTg2QLzM4XD3xawQ9UQiKzp9iuoGVcA/logo.png" - }, - { - "chainId": 101, - "address": "4nDRYZAhu1frRzeRx4rh3pbbcWgFWx5oSPvtnGDRp4DM", - "symbol": "FLSH", - "name": "Flash Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/alexisonsmith/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "B8wCsjSv3TDZcaLuhPZNDvpk2vuBtRgpgmTuvoDAJZZ7", - "symbol": "CHIMP", - "name": "Chimp", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/tsbsoltn/soltn/main/chimp/logo.png", - "tags": ["community-token", "social-token", "meme-token"], - "extensions": { - "description": "The #1 Decentralized meme token in Solana ecosystem.", - "telegram": "https://t.me/TokenChimp", - "twitter": "https://twitter.com/tokenchimp", - "website": "https://chimpd.com" - } - }, - { - "chainId": 101, - "address": "GZV6zHR9Byi1iBqQobiUW51WPcu5xYHXUXt8JyCS9W92", - "symbol": "VOID", - "name": "TheVoidCoin", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/dev-red07/solanavoid/void.png", - "tags": ["social-token", "web3"] - }, - { - "chainId": 101, - "address": "J4ieoMxEng99xHVD3KMvyZ2zYz1ZmkwqmQhRSeqjoMqV", - "symbol": "SBS", - "name": "soulbondsoul", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/soulbondsoul/SBS-soulbondsoul-CRYPTO/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7mNpq2YV3hcQ9PqaqmxheTjyDZEVRuYHkK2TAoth66u7", - "symbol": "TSTAKE", - "name": "Test Stake", - "decimals": 9, - "logoURI": "https://media.discordapp.net/attachments/922295207062564885/938054794394894396/turquiose.png", - "extensions": { - "twitter": "https://twitter.com/undeadsols", - "website": "https://undeadsols.com/" - } - }, - { - "chainId": 101, - "address": "5aHpMNhALJsfBkogF63SqMxxYvfzBmcbAdjjTc5e8t3v", - "symbol": "FSTC", - "name": "FastCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/lgsalles/fastcoin/main/token-logo.png", - "tags": ["stablecoin", "asset"] - }, - { - "chainId": 101, - "address": "E6oCGvmSYW7qhy7oeDfiNZLX6hEmPCVxBC8AknwAj82B", - "symbol": "PLAYA", - "name": "Playground", - "decimals": 2, - "logoURI": "https://i.imgur.com/ZkjtZNt.jpg", - "tags": [ - "bridgesplit-fraction", - "playground-dao", - "curated-index", - "fnft", - "curated-index" - ], - "extensions": { - "discord": "https://discord.gg/bridgesplit", - "twitter": "https://twitter.com/bridgesplit", - "vault": "https://app.bridgesplit.com/pool/E6oCGvmSYW7qhy7oeDfiNZLX6hEmPCVxBC8AknwAj82B" - } - }, - { - "chainId": 101, - "address": "22CgxvP9YdhmoC7Pnhp7PQDMr9LvDefVHEvWWW7Rtvuv", - "symbol": "EVILM", - "name": "Evil Laohu Mint", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/GaitanaruAndrei/assets/main/emint.png", - "tags": ["community-token", "social-token"], - "extensions": { - "description": "Evil Laohu Mint", - "website": "https://www.laohukingdom.com/" - } - }, - { - "chainId": 101, - "address": "F173iuJpRaxWdHWc9hFbzrGZykCDyQqqcD11YQ1aiqX7", - "symbol": "AST", - "name": "Sudereum", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Aomaf/astlogo/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8Bihqw9aQETYVH7kitDtk4PwWN5XMCCZJTRDJGUwDkNp", - "symbol": "HOZ", - "name": "HOZ", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8Bihqw9aQETYVH7kitDtk4PwWN5XMCCZJTRDJGUwDkNp/logo.png", - "tags": ["social-token", "utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/HoundsOfZeusNFT", - "website": "https://www.houndsofzeus.io/" - } - }, - { - "chainId": 101, - "address": "CdcRwbFuj3YNJYdfUqh3hnxFz1fuF6he1Wgz7JvZMHda", - "symbol": "HONEYBEAR", - "name": "HONEYBEAR", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CdcRwbFuj3YNJYdfUqh3hnxFz1fuF6he1Wgz7JvZMHda/logo.png", - "tags": ["social-token", "utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/LazyBearsNFT", - "website": "http://lazybearsnft.com/" - } - }, - { - "chainId": 101, - "address": "8Bmwd23NKHoGGaZbWDvngbG2GQ2vstso1WX3283RSQkC", - "symbol": "BLING", - "name": "Billionaire Bling Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/gzparker/BlingCoin/main/logo.png", - "tags": ["social-token", "utility-token", "meme-token", "community-token"] - }, - { - "chainId": 101, - "address": "3E6naW6kBaMetuKZD7a17AtPVDVzQr2gnTGdcGn7ud17", - "symbol": "SORTI", - "name": "Sortitio", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SortitioToken/uploads/main/logo.png", - "tags": ["social-token", "utility-token"], - "extensions": { - "facebook": "https://www.facebook.com/sortitioworld/", - "instagram": "https://www.instagram.com/sortitioworld/", - "telegram": "https://t.me/sortitio", - "twitter": "https://twitter.com/sortitioworld", - "website": "https://sortitio.com/", - "youtube": "https://www.youtube.com/channel/UCxpZ8j5HEC7Pjy5bM8GAiog" - } - }, - { - "chainId": 101, - "address": "6FTNWZF5bDNrepD32sA6LSBbPZA13ktjujxTYXtZ9Bde", - "symbol": "PNPL", - "name": "Pineapple Express Coin", - "decimals": 10, - "logoURI": "https://raw.githubusercontent.com/PineappleExpressCoin/token/main/logo.png", - "tags": ["social-token", "pineapple-token", "pineapple-express", "web3"], - "extensions": { - "website": "https://pineappleinc.com/coin/" - } - }, - { - "chainId": 101, - "address": "6cio8bo7ab6jENJPxaxQMqBgniPtdHGkLtvmrDk9KS8u", - "symbol": "OMENS", - "name": "Omens of Olympus WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6cio8bo7ab6jENJPxaxQMqBgniPtdHGkLtvmrDk9KS8u/logo-gold.png", - "tags": ["utility-token"], - "extensions": { - "description": "Exchange this with Charon for an Omen of Olympus.", - "discord": "https://discord.gg/omensofolympus", - "twitter": "https://twitter.com/omensofolympus", - "website": "https://omensofolympus.com" - } - }, - { - "chainId": 101, - "address": "CRNcN3kpTNiJ9Bb1jfR4MzAavP9tU2vsBJFRHcHPtSzm", - "symbol": "GMSC", - "name": "GMSC Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CRNcN3kpTNiJ9Bb1jfR4MzAavP9tU2vsBJFRHcHPtSzm/logo.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "discord": "https://discord.com/invite/ehRVxFxmwq", - "twitter": "https://twitter.com/GMSCNFT" - } - }, - { - "chainId": 101, - "address": "B6WQE14ZvajXFyVFPi1Eik92dKNMu3g3UsDnMc7xNH22", - "symbol": "JBCNB", - "name": "JoeCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/StecksMate/crypto/main/joecoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6RzDb8kG2EVnhxuGUQte1bt51JuoEhuZxpnsDbUF2fwg", - "symbol": "BPWL", - "name": "Blash Pass Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6RzDb8kG2EVnhxuGUQte1bt51JuoEhuZxpnsDbUF2fwg/logo.jpg", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/kmpNEkYMrD", - "twitter": "https://twitter.com/BlashPass", - "website": "https://www.blashpass.com" - } - }, - { - "chainId": 101, - "address": "GAoUf49B5wYDeXtXagS1kJXf8VV9baZqhkte8mw7dZMx", - "symbol": "ARCHPARCH", - "name": "Archie Parchy", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/rapid12367/Crypto/main/Parchy.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BpGRsBqgSNbGHb73cPL4SGqJTyr2zXomjFu3tX9LP9Vo", - "symbol": "CARROT", - "name": "CARROT TOKEN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/cmgonsalves/token/main/carrot-logo.png", - "tags": ["community-token", "utility-token"], - "extensions": { - "twitter": "https://twitter.com/begrudgeddao", - "website": "http://begrudgedbunnies.com/" - } - }, - { - "chainId": 101, - "address": "7SEsxCsiNiYqCpYG16wx4c9u2YGLZphnEFTAU9ENAizD", - "symbol": "RING", - "name": "RING", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7SEsxCsiNiYqCpYG16wx4c9u2YGLZphnEFTAU9ENAizD/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/TheBullHerdNFT", - "website": "https://thebullherd.com/ring" - } - }, - { - "chainId": 101, - "address": "5k4is2LEY9qBNi4s4zf5hFuSkEooMTCKKrVRvvn4RF99", - "symbol": "DUST", - "name": "StarDust", - "decimals": 8, - "logoURI": "https://user-images.githubusercontent.com/99850934/154388020-11a96575-d433-4e98-b6e8-dc4e9bd348cd.png", - "tags": ["community-token", "utility-token"], - "extensions": { - "facebook": "https://www.facebook.com/StarDust-Pay-102818109003525", - "instagram": "https://www.instagram.com/stardustpay", - "linkedin": "https://www.linkedin.com/company/82468083", - "twitter": "https://twitter.com/stardustpay", - "website": "http://stardustpay.com" - } - }, - { - "chainId": 101, - "address": "HMiZ2LEidcb1wDm8KsYJMk8udxVTchn39wyCJwA9dbAn", - "symbol": "YOBRO", - "name": "You Only Become Rich Once", - "decimals": 0, - "logoURI": "https://github.com/crptpj/yobro/blob/main/Untitled.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "G7MR39wexBZcKfQvPwPqbZRNEUMH3UojpBhvobNyyhAF", - "symbol": "BFIC", - "name": "BigFishCoin", - "decimals": 0, - "logoURI": "https://github.com/GioNakamoto/CryptoFish/blob/main/FCPngsasaas2321321321.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FDrvNJHhLPMCrRe3oPzkXi3ug3S5dQ84hYAGUTjyjrqQ", - "symbol": "MILEZ", - "name": "MHAC MILEZ", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FDrvNJHhLPMCrRe3oPzkXi3ug3S5dQ84hYAGUTjyjrqQ/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/milehighapeclub", - "website": "https://www.milehighapeclub.com/" - } - }, - { - "chainId": 101, - "address": "GwevK6tX7zwpVsardwtCG2SZEMMnSiFQuQfeLcsNuaBR", - "symbol": "PUF", - "name": "PoofyCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/bogdanix99/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2yA5b7MQRFyVr3GtdTDav6zV2BnSBiN5zD5uqms1BqaW", - "symbol": "METAPRO", - "name": "META PRO Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/ctomark/token-list-metapro/main/assets/mainnet/2yA5b7MQRFyVr3GtdTDav6zV2BnSBiN5zD5uqms1BqaW/logo.png", - "extensions": { - "website": "https://www.metaprotoken.com/" - } - }, - { - "chainId": 103, - "address": "AKzti1oAdft1XqtoJWoqvP5cqUKYWCNCECstELbgLu2x", - "symbol": "SPH", - "name": "Sapphire", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Hariienesh1901/Sapphire/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "hKnVPhEEWBbge4vuNZxFe8dVstpsXVUv6wJDwfTLvhW", - "symbol": "SKWL1", - "name": "SolKongz WL 1", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/hKnVPhEEWBbge4vuNZxFe8dVstpsXVUv6wJDwfTLvhW/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/SolKongz", - "website": "https://www.solkongz.net/" - } - }, - { - "chainId": 101, - "address": "B2GcHcXR4Na3ry38dSKXpybacaW4xYmt4TZvCoXHmqki", - "symbol": "SKW2L", - "name": "SolKongz WL 2", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/B2GcHcXR4Na3ry38dSKXpybacaW4xYmt4TZvCoXHmqki/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/SolKongz", - "website": "https://www.solkongz.net/" - } - }, - { - "chainId": 101, - "address": "EXChb5DMN7aPHgwXGVRgyxeTbfRuSXU73qL7EVfu4iDg", - "symbol": "MV", - "name": "MetaVerse", - "decimals": 8, - "logoURI": "https://user-images.githubusercontent.com/99852730/154405909-7002a30e-c2a4-4bbd-a4a8-91d6c903090e.jpg", - "tags": ["community-token"] - }, - { - "chainId": 101, - "address": "CcbVj95AVQZttpPUGrDRzdb59tmdV1jEN4UrQhZE2tcG", - "symbol": "OSIN", - "name": "OSINT", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/therealaleph/OSIN/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6yLLVgoJFyQh6xsKjeFEPL1AKPymJEratCsEXuDHEpq4", - "symbol": "FVJ", - "name": "Favij Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SolanaTokenMerger/Favij-Coin/main/logo.png", - "tags": [ - "social-token", - "community-token", - "utility-token", - "favij-token" - ], - "extensions": { - "twitter": "https://twitter.com/FavijTV" - } - }, - { - "chainId": 101, - "address": "GKsGCWJ5Z1cwL8hr92DDqkfy3aaZ77A9Zy3cyQragt6a", - "symbol": "TSHW", - "name": "theShow Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SolanaTokenMerger/theShow-Coin/main/logo.png", - "tags": [ - "social-token", - "community-token", - "utility-token", - "theShow-token" - ], - "extensions": { - "twitter": "https://twitter.com/theshowisyou" - } - }, - { - "chainId": 101, - "address": "B5qmUyPzehsTkK5NsJYD7jrsNwGuXivZ6CAZQJ1gJrvh", - "symbol": "MMNN", - "name": "Moonie Moon", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/seng1218/token/main/moon-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Hj92ziQbpRuAX5BAm73m8zjd43YY1nCNa3kGjP5g4hyR", - "symbol": "SHIBZ", - "name": "SHIBZ Coin", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Hj92ziQbpRuAX5BAm73m8zjd43YY1nCNa3kGjP5g4hyR/logo.png", - "tags": ["meme-coin"] - }, - { - "chainId": 101, - "address": "EP2aYBDD4WvdhnwWLUMyqU69g1ePtEjgYK6qyEAFCHTx", - "symbol": "KRILL", - "name": "KRILL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solanahodlwhales/whitelist/main/Krill_towen.png", - "tags": ["NFT"], - "extensions": { - "twitter": "https://twitter.com/SolanaWhalesNFT", - "website": "https://solanahodlwhales.io" - } - }, - { - "chainId": 101, - "address": "5XtsBTUaYbBVZjYQBYQcky1gRCbhj6bf9riVVLSdLJ1h", - "symbol": "PURS", - "name": "PURS Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/konradre/purslogo/main/purslogo.png", - "tags": ["social-token", "community-token", "utility-token", "web3-token"] - }, - { - "chainId": 101, - "address": "7akcGwiDMFmMY8NTtGPzH9QPXat2wQ7CMmbDjzGu5fYg", - "symbol": "PURR", - "name": "PURR Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7akcGwiDMFmMY8NTtGPzH9QPXat2wQ7CMmbDjzGu5fYg/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://demigodcats.com" - } - }, - { - "chainId": 101, - "address": "3uNAevHamuZKKQdtdLzmHNvqD8r14tXUUXx5PN48UbYC", - "symbol": "NLTK", - "name": "Nasi Lemak", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/avaelon/nltk/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4q6ag4sYBdQfAWRt7miq3sbbuTRBQRFHcZAc8oL5ETpS", - "symbol": "UNICOF", - "name": "UnitedKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/letungbach/crypto-/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2pVkjwPJHXopCknbdsHgXQnhptEWWWkfiw6pDcnNnBPC", - "symbol": "TOPSS", - "name": "The original payment system solution", - "decimals": 6, - "logoURI": "https://topss.io/assets/images/favicon_dark.jpg", - "extensions": { - "twitter": "https://twitter.com/TOPSSTOPSS1", - "website": "https://topss.io/" - } - }, - { - "chainId": 101, - "address": "EkRFmiruaziaUAafqYm5vXwEXH9dQBSyHT7RLczjnmQS", - "symbol": "ERNE", - "name": "ERIC NERON", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/pattron/first-crypto/main/t%C3%A9l%C3%A9chargement.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4PJ8yD2hPXVGxnYcmjBoDyDHKAMEAKjGgAfvEqmZUaAw", - "symbol": "WL1", - "name": "Whitelist token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Deghf666g/gggg/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CykTLNbzwmb3c4D3aWteLPAzR9Zga52gm3RJLDebz4Cz", - "symbol": "GRAV3", - "name": "Grav3Coin", - "decimals": 0, - "logoURI": "https://github.com/boijoely/grav3/blob/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AEAxXsKeg8xdoSDMyKtFM1TbbGjXbRpBP3eZGDNEaLGQ", - "symbol": "CARP-A", - "name": "CARP-A", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AEAxXsKeg8xdoSDMyKtFM1TbbGjXbRpBP3eZGDNEaLGQ/logo.png", - "tags": ["social-token", "utility-token", "community-token"] - }, - { - "chainId": 101, - "address": "3LFdGFgEpqXNcuLNXKgpcK7fKq5jUYdCfDmcFDVyUqCN", - "symbol": "DAIK", - "name": "Daiki Token", - "decimals": 1, - "logoURI": "https://cdn.discordapp.com/attachments/926535226820276264/943860197351387146/daikitoken.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ToiHvgfcWD6CcHryjAFNaHZfZ1jQkKuEiELVmjqfWH9", - "symbol": "PandG", - "name": "Purple and Green token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ToiHvgfcWD6CcHryjAFNaHZfZ1jQkKuEiELVmjqfWH9/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/kzPBdWtbrK", - "twitter": "https://twitter.com/Ghost_Beat_", - "website": "https://www.ghost-beat.com/" - } - }, - { - "chainId": 101, - "address": "HgM7hCyoibJQggtrKAJiaNwpG2usxriFLiVskTgNNEDT", - "symbol": "COMPANY", - "name": "Wallet Dimidium BV", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HgM7hCyoibJQggtrKAJiaNwpG2usxriFLiVskTgNNEDT/dimidium.png", - "tags": ["Dimidium", "Wallet"], - "extensions": { - "website": "https://dimidium.eu/contact-us/" - } - }, - { - "chainId": 101, - "address": "B87r1e6PsztnS5fHFCHhQP86dtd9ASfKWCUytLBpudLi", - "symbol": "ITI", - "name": "Innovation Technology Information-Meta Learn", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/WayTo1Million/ITI/main/ITI.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "G3dCVUwdVZpYhoUbwzv9DbUoCq1kp72HoXwH1GqyxXxe", - "symbol": "TSTPPL", - "name": "TestPPL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/T3tsu0/testDeploy1/main/logo.png", - "tags": ["community-token"], - "extensions": { - "website": "http://peoplewilldieof.fun/" - } - }, - { - "chainId": 101, - "address": "CFT3tLPjaTvGnRMqFyBwz7dja6EL47qxzHaFQJEoMQ12", - "symbol": "PLZ", - "name": "The Playaz", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CFT3tLPjaTvGnRMqFyBwz7dja6EL47qxzHaFQJEoMQ12/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.com/invite/JDQgrWMRJV", - "twitter": "https://twitter.com/playaznft", - "website": "https://playaznft.club/" - } - }, - { - "chainId": 101, - "address": "WhorAZ8rXmD1iAh2hGTJrSdwnY9w75GJpeugBd8w5gR", - "symbol": "HORNII", - "name": "HorniIDAO WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WhorAZ8rXmD1iAh2hGTJrSdwnY9w75GJpeugBd8w5gR/logo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "52WyZe1pfobyq6v1t7KAKZWePcq9Aj2Aa5kJHuF2KHDM", - "symbol": "SHEEP", - "name": "SolWolf Game Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/8sunyuan/token-list/main/assets/mainnet/52WyZe1pfobyq6v1t7KAKZWePcq9Aj2Aa5kJHuF2KHDM/wolflogo.jpg" - }, - { - "chainId": 101, - "address": "CVzNDckT4riUsVj5zfVCLA5ABZdXFqtW4KiZTRviYRGJ", - "symbol": "NWT", - "name": "Nether World Tales Token", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/Nether-World-Tales/token/main/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/nwtales", - "website": "https://netherworldtales.com/" - } - }, - { - "chainId": 101, - "address": "5TLuCMNFLFie6vuTEpiUNHEPjTANYvbooUzdc4Pe1pb6", - "symbol": "JRDN", - "name": "Jordan Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SolanaTokenMerger/Jordan-Coin/main/logo.png", - "tags": [ - "social-token", - "community-token", - "utility-token", - "meme-token", - "Jordan-Token" - ], - "extensions": { - "twitter": "https://twitter.com/jumpman23" - } - }, - { - "chainId": 101, - "address": "7rnHtsEv2pbYevWkbYZVhFujHsJu16UK9RDurUptbMap", - "symbol": "MSR", - "name": "MetaSnooker", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7rnHtsEv2pbYevWkbYZVhFujHsJu16UK9RDurUptbMap/logo.svg", - "tags": ["utility-token", "nft"], - "extensions": { - "instagram": "https://www.instagram.com/meta.snooker/", - "medium": "https://metasnooker.medium.com/", - "telegram": "https://t.me/MetaSnooker", - "twitter": "https://twitter.com/Snooker_Meta", - "website": "https://metasnooker.io/" - } - }, - { - "chainId": 101, - "address": "2pqRgpTLSJRgqBaBAQBBAqfLsdjqWic5bi6S9UJazyaT", - "symbol": "FEAR", - "name": "The Fearless", - "decimals": 3, - "logoURI": "https://arweave.net/QTbFKiBGSYIJJna0QafYgAxNyAtuhwssEJliiJa0eyE?ext=png", - "tags": ["fractionalized-nft"], - "extensions": { - "vault": "https://fraktion.art/vault/5yTUs6NXd9S9fsny9r5PHZvTtcXN3zLj7SDxLrn2z1Kr", - "vaultPubkey": "5yTUs6NXd9S9fsny9r5PHZvTtcXN3zLj7SDxLrn2z1Kr" - } - }, - { - "chainId": 101, - "address": "Z41dTzcv4S7CoykWpnj1GYDk7N5yreunYruGrSuFvj8", - "symbol": "GIO", - "name": "Andrew Andy Goram Giovanni van Bronkhorst Boyd", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SGB1986/GIO/main/273874760_693098681684592_4257136878581332139_n.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6yjKYzdDuyf2qjoTY5n5V5s6hjFcbVfnod9ze94Frv3g", - "symbol": "GTHWL", - "name": "Gentie Home WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/matthewrx/wl/main/tokenwl.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "B5xan1Zvc8gv2x8qsrG4VgzcCt2vWkLXxQjf5aoYHv17", - "symbol": "THN", - "name": "Throne", - "decimals": 18, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/B5xan1Zvc8gv2x8qsrG4VgzcCt2vWkLXxQjf5aoYHv17/logo.png", - "tags": ["Metaverse", "NFT"], - "extensions": { - "instagram": "https://www.instagram.com/thronenft/", - "telegram": "https://t.me/thronecommunity", - "twitter": "https://twitter.com/thronenft", - "website": "https://www.thr.one" - } - }, - { - "chainId": 101, - "address": "FkPw5G7Ffek5URaYjyFQucQeS9XwA7EWqcoYFTtD9XZz", - "symbol": "CAY", - "name": "CAYMAN", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FkPw5G7Ffek5URaYjyFQucQeS9XwA7EWqcoYFTtD9XZz/cay520x520.png", - "tags": ["game-token"] - }, - { - "chainId": 101, - "address": "2D4fAKkwAXGdMFo57SFw2YvL2WwPu2Egg3J7d1ovC4rH", - "symbol": "SOXS", - "name": "Socsky", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2D4fAKkwAXGdMFo57SFw2YvL2WwPu2Egg3J7d1ovC4rH/soxs520x520.png", - "tags": ["NFTs-token"] - }, - { - "chainId": 101, - "address": "Gorizmp5uZz2VC8dg6L58Hhf9L1onCfBH8SoDBHnyJ2C", - "symbol": "GMACHA", - "name": "GorillaeMACHA", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Gorizmp5uZz2VC8dg6L58Hhf9L1onCfBH8SoDBHnyJ2C/logo.png", - "tags": ["NFT", "mint-token", "whitelist"], - "extensions": { - "twitter": "https://twitter.com/GorillaeNFT", - "website": "https://gorillaenft.io" - } - }, - { - "chainId": 101, - "address": "GiT3osEFEqahWoUmoHiE2GLoVTTjAEsSYawipuNqQzpv", - "symbol": "SMD", - "name": "SolMaxDex", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GiT3osEFEqahWoUmoHiE2GLoVTTjAEsSYawipuNqQzpv/logo.png", - "tags": ["DEX"], - "extensions": { - "twitter": "https://twitter.com/SolMaxDex" - } - }, - { - "chainId": 101, - "address": "2cW8Yosn4tSYJYjfUkcpKnYBSMYDqXfJmQXVu4RJzBTw", - "symbol": "WAS", - "name": "Wasder", - "decimals": 18, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2cW8Yosn4tSYJYjfUkcpKnYBSMYDqXfJmQXVu4RJzBTw/logo.png", - "tags": ["gaming", "metaverse", "microverse", "gamefi"], - "extensions": { - "address": "0x0c572544a4ee47904d54aaa6a970af96b6f00e1b", - "assetContract": "https://etherscan.io/address/0x0c572544a4ee47904d54aaa6a970af96b6f00e1b", - "bridgeContract": "https://etherscan.io/address/0x3ee18b2214aff97000d974cf647e7c347e8fa585", - "coingeckoId": "wasder", - "twitter": "https://twitter.com/WasderGG", - "website": "https://www.wasder.gg/" - } - }, - { - "chainId": 101, - "address": "MMAx26JtJgSWv6yH48nEHCGZcVvRbf9Lt9ALa7jSipe", - "symbol": "MMA", - "name": "mma", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/MMAx26JtJgSWv6yH48nEHCGZcVvRbf9Lt9ALa7jSipe/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "WE PLAY, YOU EARN, By helping gamers generate an income for themselves, they create an income for you.", - "discord": "https://discord.gg/mmagaming", - "medium": "https://medium.com/@MMAGaming", - "twitter": "https://twitter.com/mmagaming_io", - "website": "https://mmagaming.io/" - } - }, - { - "chainId": 101, - "address": "5oPqqnah6ci5FNU6M24fRtuRQ56eH8hKrLzBw185D13i", - "symbol": "SHNY", - "name": "SHINY", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5oPqqnah6ci5FNU6M24fRtuRQ56eH8hKrLzBw185D13i/logo.png", - "tags": ["social-token", "community-coin", "community-token"] - }, - { - "chainId": 101, - "address": "EEcTHtygK1agDKMKrXgaznbjUNPM67KvnmsqKmPkCTvn", - "symbol": "LNFTxMOON1", - "name": "Cube WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EEcTHtygK1agDKMKrXgaznbjUNPM67KvnmsqKmPkCTvn/logo.png", - "tags": ["liqnft-wl-token"], - "extensions": { - "discord": "https://discord.gg/PYZWRHgVwM", - "twitter": "https://twitter.com/liqnft", - "website": "https://www.liqnft.com/gallery/collection/MOON" - } - }, - { - "chainId": 101, - "address": "FUVpXU15YFGh8PyBgqQfj59NmwiRMDe53uqm6sreaj2D", - "symbol": "LNFTxMOON2", - "name": "Nautilus WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FUVpXU15YFGh8PyBgqQfj59NmwiRMDe53uqm6sreaj2D/logo.png", - "tags": ["liqnft-wl-token"], - "extensions": { - "discord": "https://discord.gg/PYZWRHgVwM", - "twitter": "https://twitter.com/liqnft", - "website": "https://www.liqnft.com/gallery/collection/MOON" - } - }, - { - "chainId": 101, - "address": "AUNHT5DSvHqgaQCeB7bs9XQMjyx2gfVv8nzmUf5jX3Et", - "symbol": "LNFTxMOON345", - "name": "Moon WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AUNHT5DSvHqgaQCeB7bs9XQMjyx2gfVv8nzmUf5jX3Et/logo.png", - "tags": ["liqnft-wl-token"], - "extensions": { - "discord": "https://discord.gg/PYZWRHgVwM", - "twitter": "https://twitter.com/liqnft", - "website": "https://www.liqnft.com/gallery/collection/MOON" - } - }, - { - "chainId": 101, - "address": "DqSUNuXdASnqQ5MR5mRytNZW6NkF9akEA14hEFqmcr94", - "symbol": "OKTA", - "name": "Octanity", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Oktavian25/Octanity/main/unknown.png", - "tags": ["nft", "stake", "utility-token"] - }, - { - "chainId": 101, - "address": "PJ683jbxAjjtSh8HWuqq79Kd5HGaSQeNpYXZt6tWSD5", - "symbol": "TROS", - "name": "The Republic of Satoshi", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/TROSATOSHI/crypto/main/logo.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "83R8854RXX3h4fow7bgJ7w1MarVDpnXGKbjLMDyetu54", - "symbol": "GPET", - "name": "Galaxy Pets", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/83R8854RXX3h4fow7bgJ7w1MarVDpnXGKbjLMDyetu54/logo.png", - "tags": ["metaverse", "utility-token"], - "extensions": { - "twitter": "https://twitter.com/glxypets", - "website": "https://www.galaxypets.xyz/" - } - }, - { - "chainId": 101, - "address": "CMTiRQKXFbK7eW8GM4svmjVJ8DEBbwjubrQgqkybmC2P", - "symbol": "CMT", - "name": "CryptoMural", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CMTiRQKXFbK7eW8GM4svmjVJ8DEBbwjubrQgqkybmC2P/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://cryptomural.io/" - } - }, - { - "chainId": 101, - "address": "7j1G47gSNhavCy5r4UsvDU2Qtw4U5M7JVWzZEXYSGcma", - "symbol": "RVRB", - "name": "Reverb", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Andy2988c/logo/main/Reverb.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "6skDrUSXtrGWCMgaUbGzDkSTw2TtHwfhcFre397mcedP", - "symbol": "YAR", - "name": "Yara", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Keizerstad/Yara/main/Yara-Coin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "WLjDmpFkBe2eUunAit8h4pohYNQ243xYS1bv4wHz9Hi", - "symbol": "BBCA", - "name": "Big Brain Clique Alpha Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WLjDmpFkBe2eUunAit8h4pohYNQ243xYS1bv4wHz9Hi/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "E8763URMT8FSo2Hg9WrQZfVbUKMrK8EVTNt3jXzr2dzY", - "symbol": "LIFT", - "name": "Lucifer", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/diontr101/Lucifer/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "prwjbiQ3EQf8WqTqheZwr4Fa7gHfnFYYgPJJuC3CB7B", - "symbol": "PL-FE-WL", - "name": "ProLeague FE Whitelist Token", - "decimals": 0, - "logoURI": "https://proleague.gg/wp-content/uploads/2020/12/cropped-favicon-512px.png", - "extensions": { - "website": "https://proleague-mint.prolaunch.gg/" - } - }, - { - "chainId": 101, - "address": "6ahac3aYrkq5kvUdDaJquBXbcR1xH58GkTBchcgHWkh7", - "symbol": "AWOO", - "name": "Retro Wolves Token", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/rxrxrxrx/RetroWolves/logo.png", - "tags": ["retro-coin"], - "extensions": { - "twitter": "https://twitter.com/RetroWolvesNFT", - "website": "https://discord.gg/Dm4tQEwERh" - } - }, - { - "chainId": 101, - "address": "3adAUq2Z7sNfcmxSvgjXmxcgKF8bsQfUL76UpLMj8CqG", - "symbol": "PEPE$", - "name": "Pepe Coin", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/virdagreat147/Pepe-army-Logo/main/Pepe%20Coin%20Logo%20small.png", - "tags": [ - "currency", - "NFT", - "staking", - "access-token", - "gamble", - "utility" - ], - "extensions": { - "discord": "https://discord.gg/ySkaUa2rpy", - "twitter": "https://twitter.com/pepearmynft" - } - }, - { - "chainId": 101, - "address": "FfpMkqyZS1EpvdjamVUY14Em988wEqBEZxMvKLZ2WE1m", - "symbol": "CF", - "name": "CLERGY666", - "decimals": 0, - "logoURI": "https://user-images.githubusercontent.com/98871398/153300652-6905b72c-1cfb-4972-9b92-f9a00d81626d.png", - "tags": ["social-token", "utility-token", "clergy", "666", "clowst"], - "extensions": { - "description": "Clowst, the ghost clown is set to build a new civilization by collecting his monstrous friends we've left behind and build a new clergy. CLERGY666.", - "discord": "https://discord.gg/CWmjPqxfuZ", - "instagram": "https://www.instagram.com/clowst666", - "twitter": "https://twitter.com/clowst666", - "website": "https://www.clowst666.io" - } - }, - { - "chainId": 101, - "address": "8s1FdbTFy6RozVcrtydnJ8KkAd5XdpXqcLmAk3BixybK", - "symbol": "BIGK", - "name": "BiggieKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/bkmdchw7/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GA1a332k3RjL1MsYyqBsRyK1n9ssvEEXTk4DTAybva11", - "symbol": "KAUHL", - "name": "PanditCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Gitlycool/Crtyo/main/diy-silk-screen-print-design-stencil-om-mantra-symbol-hindu-buddhist2.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FXSLj3g5u9SEm62bErBs8895YgrfJPyn5q36V4KpZQFc", - "symbol": "$BURGER", - "name": "BRBB - Burger Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FXSLj3g5u9SEm62bErBs8895YgrfJPyn5q36V4KpZQFc/logo.png", - "tags": ["social-token"], - "extensions": { - "discord": "https://discord.gg/zKfTy88rvx", - "twitter": "https://twitter.com/BrokenRobotNFT" - } - }, - { - "chainId": 101, - "address": "BiHmfj5eEj2DTFbfKStr2fqKXTqNkFWxHBqv8C4ofKAA", - "symbol": "STKD", - "name": "Stoked Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jstokesok/stoked/main/logo-stkd.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5sxyEXsCjZcuz4R7SpHxgb6Cx7SV2sLBA4Fm7EKwCDZw", - "symbol": "LTS", - "name": "Logiq Test", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/andreiprivate/token-list/main/assets/mainnet/5sxyEXsCjZcuz4R7SpHxgb6Cx7SV2sLBA4Fm7EKwCDZw/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "88YUXaaUhybTxYmupRNiSz2TfuU7Zpk37DLwAr6ZyuwN", - "symbol": "HCC", - "name": "Hell City Coin", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/n123al/HCC/main/logo.png", - "tags": ["social-token", "community-token", "utility-token"] - }, - { - "chainId": 101, - "address": "C5EefTmWXHJWFkN3Dh7QyFUnBG3UXSu8h6qVs6xtaLxy", - "symbol": "SDUST", - "name": "Solien DAO", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/C5EefTmWXHJWFkN3Dh7QyFUnBG3UXSu8h6qVs6xtaLxy/daologo.png", - "tags": ["nft"], - "extensions": { - "discord": "https://discord.gg/ZVQNNtbw3u", - "twitter": "https://twitter.com/soliensnft", - "website": "https://soliens.super.site/" - } - }, - { - "chainId": 101, - "address": "C4KYZ9EPYU2EYvTVkt4R5NG5AwCpCb6VG4QZd7LVMfua", - "symbol": "JEEV", - "name": "CLTSM Social Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/C4KYZ9EPYU2EYvTVkt4R5NG5AwCpCb6VG4QZd7LVMfua/logo.png", - "tags": ["social-token", "cltsm"] - }, - { - "chainId": 101, - "address": "EcQCUYv57C4V6RoPxkVUiDwtX1SP8y8FP5AEToYL8Az", - "symbol": "WLKN", - "name": "Walken", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EcQCUYv57C4V6RoPxkVUiDwtX1SP8y8FP5AEToYL8Az/logo.svg", - "tags": ["walken", "utility-token"], - "extensions": { - "website": "https://walken.io" - } - }, - { - "chainId": 101, - "address": "AWGrr6HmmhJwnMdDLoxxDMpKo2KN99Bx47Rbhfo3NM3V", - "symbol": "BWLKN", - "name": "BETA Wlkn", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AWGrr6HmmhJwnMdDLoxxDMpKo2KN99Bx47Rbhfo3NM3V/logo.svg", - "tags": ["walken", "utility-token"], - "extensions": { - "website": "https://walken.io" - } - }, - { - "chainId": 101, - "address": "HAndCoG9GWS4TPaBFhbbtVMDevpUkvRti6TweV7d4q1L", - "symbol": "PoHS", - "name": "Proof-of-Handshake", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/KKQanT/token-list/main/assets/mainnet/HAndCoG9GWS4TPaBFhbbtVMDevpUkvRti6TweV7d4q1L/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://www.atadia.io/" - } - }, - { - "chainId": 101, - "address": "reZNfhu7z32WzecdjjswvZQMFrkXyUX4mbMh4NZwPNt", - "symbol": "xATS", - "name": "Staked Atlas Dex", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HJbNXx2YMRxgfUJ6K4qeWtjatMK5KYQT1QnsCdDWywNv/logo.png", - "tags": ["utility-token", "dex", "swap"], - "extensions": { - "medium": "https://atlasdex.medium.com/", - "twitter": "https://twitter.com/atlas_dex", - "website": "https://atlasdex.finance/" - } - }, - { - "chainId": 101, - "address": "AihWtSwR46XmrYycYJkvyzPeCDbBGL4YJB9ob3WWcNUd", - "symbol": "XFER", - "name": "Transfer Coins", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Web3portfolio/token-list/main/assets/mainnet/AihWtSwR46XmrYycYJkvyzPeCDbBGL4YJB9ob3WWcNUd/logo.PNG", - "tags": ["utility-token"], - "extensions": { - "website": "https://www.web3portfolio.sale/" - } - }, - { - "chainId": 101, - "address": "C6sSRHuvnHph3wLefvwUY3bq1edVbATWbT46PWDovEd", - "symbol": "PAM", - "name": "Pampkin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Pampkin128/Crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "WLBSARMCJkVktbnjcB9n4WcVyBEkphgSnfZegPergL6", - "symbol": "WLB", - "name": "TTT WLB", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/C5EefTmWXHJWFkN3Dh7QyFUnBG3UXSu8h6qVs6xtaLxy/daologo.png", - "tags": ["whitelist-token", "NFT"] - }, - { - "chainId": 101, - "address": "4KGbtg9AqnstxDfJBMjiZiPZFUAWQrz573gnz5zg7JSE", - "symbol": "OOT", - "name": "OneofThem", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/global01/token/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "J9VccnH3iS4qBnCCJqnrLAUk8inBhqNj82E2QyFzUD25", - "symbol": "CHER", - "name": "Cheriola", - "decimals": 9, - "logoURI": "https://arweave.net/OLGbQ8YmXyjGX1XF6Mt861mkLI8kOZ9U1xnHZlwdqJ4", - "tags": ["General"], - "extensions": { - "twitter": "https://twitter.com/cheriolatoken" - } - }, - { - "chainId": 101, - "address": "derekokMW1a3MLm6guMBKaWUFQLSMJ3C5MoEkZZeBrt", - "symbol": "BBDD", - "name": "BuBiDD Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/derekokMW1a3MLm6guMBKaWUFQLSMJ3C5MoEkZZeBrt/logo.png" - }, - { - "chainId": 101, - "address": "CompzLC6kig1XRMsErkvB69JnxYfyAW9pZ8EyaytW43o", - "symbol": "COMPANION", - "name": "Companion", - "decimals": 9, - "logoURI": "https://yt3.ggpht.com/6xyHbMau92t-6MDTYGEEqCtzquvCrIlRK_TkfYk_dmq0WM824Gtzo6dP9tp3mwEWRlEnb8_ahzY=s88-c-k-c0x00ffffff-no-rj", - "tags": ["Defi", "utility-token", "educational"], - "extensions": { - "twitter": "https://twitter.com/Companion_sol", - "website": "https://app.companion.to" - } - }, - { - "chainId": 101, - "address": "4JEBYVA3Yny9E46CjoK3V9TKayqbkCGcvwkmYXYu1Uoe", - "symbol": "NICO", - "name": "NICO Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ralli-5/crypto/main/NICO.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "FgX5vS4ueGUuSSZ48tJcYd9cNm8nYexheC3YS9FR9aTJ", - "symbol": "GNGR", - "name": "GingerKoin Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/shines69/GingerKoin---Token/main/Ginger-Crypto%20Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6mbESoTpqy3z6BuTY4CVLMJJ1cYuS4s29R5vdUAP5EU", - "symbol": "ARBX", - "name": "Arqo Beta", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6mbESoTpqy3z6BuTY4CVLMJJ1cYuS4s29R5vdUAP5EU/logo.PNG", - "tags": ["utility-token", "community-token"], - "extensions": { - "website": "https://arqox.com" - } - }, - { - "chainId": 103, - "address": "FZE52MWasDcwNeQfBL6PUHjvYgQMthvHNX5e7xUDN56T", - "symbol": "USDC-CASH", - "name": "USDC-CASH Saber LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FZE52MWasDcwNeQfBL6PUHjvYgQMthvHNX5e7xUDN56T/logo.png", - "tags": ["ratio-token"], - "extensions": { - "website": "https://dev.ratio.finance/" - } - }, - { - "chainId": 103, - "address": "7gJWEW3vGDgUNbg3agG9DSSkb271tpk82K4ixAGXeuoh", - "symbol": "USDC-PAI", - "name": "USDC-PAI Saber LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7gJWEW3vGDgUNbg3agG9DSSkb271tpk82K4ixAGXeuoh/logo.png", - "tags": ["ratio-token"], - "extensions": { - "website": "https://dev.ratio.finance/" - } - }, - { - "chainId": 103, - "address": "HXb1AM83cRUbGegTivuSanvLP1W8A4pyTGMveNWR1pyg", - "symbol": "USDC-USDT", - "name": "USDC-USDT Saber LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HXb1AM83cRUbGegTivuSanvLP1W8A4pyTGMveNWR1pyg/logo.png", - "tags": ["ratio-token"], - "extensions": { - "website": "https://dev.ratio.finance/" - } - }, - { - "chainId": 103, - "address": "9RBrjJLKK7xm5275iNHPDdtMEN3nZFhPDiUkZGmkTUrd", - "symbol": "USDT-CASH", - "name": "USDT-CASH Saber LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9RBrjJLKK7xm5275iNHPDdtMEN3nZFhPDiUkZGmkTUrd/logo.png", - "tags": ["ratio-token"], - "extensions": { - "website": "https://dev.ratio.finance/" - } - }, - { - "chainId": 101, - "address": "2SzPyNtr9taHniunNJVgunTkXQqpJjaTuKTB9ztTchh3", - "symbol": "NPACA", - "name": "Nessalpaca", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/n0rwegianblue/npaca/main/nessalpaca.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "WLcpHjuqSZQjxmPhnF5fEkfC1MKqZ5voHNops9EGCS7", - "symbol": "HMWL", - "name": "Haughty Monkee WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WLcpHjuqSZQjxmPhnF5fEkfC1MKqZ5voHNops9EGCS7/logo.png" - }, - { - "chainId": 101, - "address": "4pzWuLXG8uwXjTCbverinCzeGf7ktAnZ2eL1eAJf8LV3", - "symbol": "LBRE", - "name": "Librecoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ghostlywhitetail/crypt0/main/LBRE.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ChTE6TCqoY16dvqPjgK6Ji7zHcKricB2DHLoqWzx5v9A", - "symbol": "MTP", - "name": "Metapoo", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/metapoo/token-list/main/assets/mainnet/ChTE6TCqoY16dvqPjgK6Ji7zHcKricB2DHLoqWzx5v9A/logo.png", - "tags": ["NFT", "fair-launch", "farming"], - "extensions": { - "twitter": "https://twitter.com/Metapoo_Solana", - "website": "https://app.metapoo.cash" - } - }, - { - "chainId": 101, - "address": "UXRj3sUsJsQ6mkDz8xmXQxnY7DHoyZzX1UtEZriqbmC", - "symbol": "CHEERS", - "name": "Secret Kongz Cheers", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/UXRj3sUsJsQ6mkDz8xmXQxnY7DHoyZzX1UtEZriqbmC/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/SecretKongzSC", - "website": "https://secretkongz.com/" - } - }, - { - "chainId": 101, - "address": "H6jvgU491zP4uXZEb16DtX9U7ZdbrD2K2FLbbTq9uiVY", - "symbol": "TMF", - "name": "Truly Marvelous Falcons", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/H6jvgU491zP4uXZEb16DtX9U7ZdbrD2K2FLbbTq9uiVY/logo.png", - "tags": [ - "utility-token", - "community-token", - "game-token", - "game-currency", - "GameFi", - "Gaming" - ], - "extensions": { - "description": "MarvelousFalcons is a UAE-based p2e NFT game." - } - }, - { - "chainId": 103, - "address": "4XQxzNWwgqU1YDaAvUSjJHZKy4mJZUfcKG7pKurvXLLf", - "symbol": "HUNT", - "name": "Treasure Hunt", - "decimals": 9, - "logoURI": "https://github.com/vulcanrowley/Solana/blob/main/Logo.png" - }, - { - "chainId": 101, - "address": "GvRPncmFzJ7pAb3y2PjnKR6zuNkZSxdqS2cgZ6R9TeBd", - "symbol": "BPWM", - "name": "Bizarre Platypus Mint Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GvRPncmFzJ7pAb3y2PjnKR6zuNkZSxdqS2cgZ6R9TeBd/logo.png", - "tags": ["utility-token", "mint-token", "whitelist"], - "extensions": { - "description": "The Coin for Bizarre Platypus NFT for Whitelist.", - "twitter": "https://twitter.com/bizarreplatypus", - "website": "https://bizarreplatypus.io/" - } - }, - { - "chainId": 101, - "address": "GMSC6kHzxHmw43KKYJMH91HZVZBSuRNTDYb3Et4sxvWZ", - "symbol": "GMSC", - "name": "GM Social Club Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GMSC6kHzxHmw43KKYJMH91HZVZBSuRNTDYb3Et4sxvWZ/logo.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "discord": "https://discord.com/invite/ehRVxFxmwq", - "twitter": "https://twitter.com/GMSCNFT" - } - }, - { - "chainId": 101, - "address": "3zgjd8uWEjZS2tjNnrbB5PATzWXCYmuLckk9B46eQqN8", - "symbol": "PLANET", - "name": "Ninth Planet", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3zgjd8uWEjZS2tjNnrbB5PATzWXCYmuLckk9B46eQqN8/logo.png", - "tags": ["nft-token", "game-token", "utility-token"], - "extensions": { - "coingeckoId": "planet", - "discord": "https://discord.com/invite/9SRMNRTWc6", - "twitter": "https://twitter.com/NinthPlanetNFT", - "website": "https://ninthplanet.io/" - } - }, - { - "chainId": 101, - "address": "GpQLC7KnNgAvEpamfWi1AWFdXECZ1eQetvFYTuETLZC7", - "symbol": "SPM", - "name": "SchimmelPeter Monster", - "decimals": 9, - "logoURI": "https://www.schimmelpeter.de/spm_solana.png", - "extensions": { - "facebook": "https://facebook.com/SchimmelPeterGmbH", - "instagram": "https://www.instagram.com/schimmelpetergmbh", - "website": "https://www.schimmelpeter.de/" - } - }, - { - "chainId": 101, - "address": "B7s5eT2SG6RBroG9cxVb18J5mEUp71UTeTRYLzCPra36", - "symbol": "RISE", - "name": "RISE Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/B7s5eT2SG6RBroG9cxVb18J5mEUp71UTeTRYLzCPra36/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.com/invite/qNtp75xZuN", - "twitter": "https://twitter.com/ECORISEDAO", - "website": "https://ecorise.finance/" - } - }, - { - "chainId": 101, - "address": "9beVwyZMYRNg2UQaHa8153bouEPDufcGNqL7VfGWn9dc", - "symbol": "GAC", - "name": "GAC PROJECT", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SolanaTokenMerger/GAC-Coin/main/logo.png", - "tags": ["utility-token", "social-token", "community-token", "gac-token"], - "extensions": { - "instagram": "https://www.instagram.com/gac.project" - } - }, - { - "chainId": 101, - "address": "ToTuLunrMF2eQtvj7p6UtU7Jc38mbZZ8do21fg61Qg6", - "symbol": "MRTS", - "name": "MERITS", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ToTuLunrMF2eQtvj7p6UtU7Jc38mbZZ8do21fg61Qg6/logo.png" - }, - { - "chainId": 101, - "address": "FFhRNx1RVn5UnujcEved9aRaQtEUazgmQMbmdFHJXe5K", - "symbol": "PLMR", - "name": "Palmer Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/rydder92/crypto/main/coinlogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BW2CtuLxPzvVcV1DEomHfmL8zWiDD4fvk11F2SxqEaUB", - "symbol": "SSFM", - "name": "Sol Stone Free Mint Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BW2CtuLxPzvVcV1DEomHfmL8zWiDD4fvk11F2SxqEaUB/logo.jpg", - "extensions": { - "website": "https://solstone.contrastive.ai/" - } - }, - { - "chainId": 101, - "address": "FDxEJx156tbp7ukF4B89QisMg3EpMtFqAZ94TQk2ZwRV", - "symbol": "BT-WL", - "name": "Blue Terra Whitelist Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FDxEJx156tbp7ukF4B89QisMg3EpMtFqAZ94TQk2ZwRV/logo.png", - "extensions": { - "website": "https://blueterra.land/" - } - }, - { - "chainId": 101, - "address": "HMWLJtkb5U1evEJvXassg2MHaStY6aeE9CmVvr2o6pVE", - "symbol": "HMKS", - "name": "HMKs Whitelist Token ", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HMWLJtkb5U1evEJvXassg2MHaStY6aeE9CmVvr2o6pVE/logo.png" - }, - { - "chainId": 101, - "address": "7iy4ybiXSvcGVN83gcCVjtfZasu8B9CRV5fULMmbLb7k", - "symbol": "SPYBCK", - "name": "Spy Bucks", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7iy4ybiXSvcGVN83gcCVjtfZasu8B9CRV5fULMmbLb7k/logo.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "website": "https://doxologypress.org/spybucks" - } - }, - { - "chainId": 101, - "address": "2Tp4hCJ24aRnsLShz9U96VtTSDHuaKL7eD7vj8Stvxhn", - "symbol": "HENDX", - "name": "Hendrix Token", - "decimals": 6, - "logoURI": "https://github.com/thejoshuahendrix/hennyscript/blob/main/IMG_20180803_100044.jpg?raw=true", - "tags": [ - "utility-token", - "social-token", - "community-token", - "game-token" - ], - "extensions": { - "website": "https://hennyscript.netlify.app/" - } - }, - { - "chainId": 101, - "address": "Am2QTz1KrLs2VP8BU4vUjRxTynxBEfNMGsAdNB5Sy8Np", - "symbol": "WCOIN", - "name": "WatchCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Am2QTz1KrLs2VP8BU4vUjRxTynxBEfNMGsAdNB5Sy8Np/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "5R8Ai4pQuzteR1Y5HxpscQH4Es2JNWcQZbMmu9RpZwoR", - "symbol": "NCT", - "name": "Encanto", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jdaniel96/EncantoLogo/main/EncantoLogo.png", - "tags": ["Encanto"] - }, - { - "chainId": 101, - "address": "FVTBPs5HwM6McfZv7xJjfxGwb3A4zPMJ9JGuphKrADfx", - "symbol": "BPBI", - "name": "Bipbi Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FVTBPs5HwM6McfZv7xJjfxGwb3A4zPMJ9JGuphKrADfx/logo.png", - "tags": ["utility-token", "community-token"] - }, - { - "chainId": 101, - "address": "DGZqPd5VmgcfrvSe93o2oMMGP5toK3zzoBLuSUjNzqCd", - "symbol": "TICR", - "name": "Tyr International Crisis Research Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/JFischer03/crypto2/main/TICRLOGO.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "G6xzfFFnsUcX62kThT3ecaBsor2YBeYAsqHANBjNjXE1", - "symbol": "GUILD", - "name": "GuildCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/thedevdojo/guild-coin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "WLT8odEsvbXvdmZ7be6vfXpXgYL8BNR83wiuT5nLz9E", - "symbol": "TMDCWL", - "name": "The Monkey Design Club Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WLT8odEsvbXvdmZ7be6vfXpXgYL8BNR83wiuT5nLz9E/logo.png", - "tags": ["whitelist-token", "NFT"] - }, - { - "chainId": 101, - "address": "Df7cTkD6BwAjRRogfLFiodePfwFZ4btxwkhTmHG6inEg", - "symbol": "JRZYcoin", - "name": "JRZYcoin", - "decimals": 9, - "logoURI": "https://jrzycoin.com/images/logo.png", - "tags": [ - "utility-token", - "community-token", - "payment-token", - "game-token" - ], - "extensions": { - "facebook": "https://www.facebook.com/jrzycoin", - "instagram": "https://www.instagram.com/jrzycoin", - "twitter": "https://twitter.com/jrzycoin", - "website": "https://jrzycoin.com" - } - }, - { - "chainId": 101, - "address": "AGwrWpN9dthHxvwfhtrUPJrdT1yQJizwd1KsE2gLaAkr", - "symbol": "METAI", - "name": "Meta Infra", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/sachinbhoi29/metainfralogo/main/logo.png", - "tags": [ - "utility-token", - "community-token", - "payment-token", - "game-token" - ], - "extensions": { - "instagram": "https://www.instagram.com/metainfra/", - "twitter": "https://twitter.com/meta_infracoin", - "website": "https://metainfracoin.com/" - } - }, - { - "chainId": 101, - "address": "EZkW8HcjwkSSdGdjW4R2pkkLrc58W5mBbditxdj7XG2N", - "symbol": "CHAN", - "name": "CHAN Token", - "decimals": 9, - "logoURI": "https://solchan.io/chan-token-logo.png", - "tags": ["utility-token", "social-token", "community-token"], - "extensions": { - "discord": "https://discord.gg/Mjv4JFw8pQ", - "twitter": "https://twitter.com/Solchan_NFT", - "website": "https://solchan.io" - } - }, - { - "chainId": 101, - "address": "DJC5ouG5JwrWzdwrEUhrGwB3Sd7oEqCbUJpxJy2v9RVf", - "symbol": "B24", - "name": "Liberator", - "decimals": 0, - "logoURI": "https://github.com/mdtdnb/Liberator/blob/main/Lib.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4Pb6o2pJBvdqYJwXpsJnn3JfT3V1XgEq7zQBYH4djbf4", - "symbol": "GRV3", - "name": "Grav3Koin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/boijoely/grav3/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4LwFLmS7MUBxoqRPDgmMSDjyA63gbZ1e317JmAqiuzbS", - "symbol": "N2NK", - "name": "N2Network", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/nn9uy3n0326/cypto-logo/main/n2networkcoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5AUZ4YM9LieuSiRV9QkSGQ9McvCbs8Dma8YpzhphDD93", - "symbol": "DGZ", - "name": "IditaCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Bitibles/token-logos/master/DGZ/logo.jpg", - "tags": ["social-token", "community-token"], - "extensions": { - "website": "https://iditarod.com" - } - }, - { - "chainId": 101, - "address": "BqWTiSenPeBrxSZZhRhuBpTq4kZrnJso9wmby9CSQTh3", - "symbol": "AHZGLD", - "name": "AHZUGOLD", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Ahzu-Direct-Tech/crypto/main/Ahzu-Sol-Token.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "1E7ipicsn5zAi5P9rYXwYToJV1EVXfDHuYndQ1ctzDR", - "symbol": "RDD", - "name": "R1D2 Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/maplion/token-logos/master/RDD/logo.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "5yULE5Fq8Zfeg74sYqkieuMD9bdzdZz8Mcb1T6gYzneA", - "symbol": "Chimaek", - "name": "Chimaek", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Chimaek-token/logo/main/chimaek_logo.png", - "tags": ["community-token", "K-Pop", "K-Drama"], - "extensions": { - "description": "Community token for those who love k-pop, k-dramas, Chicken \u0026 Beer, etc...", - "discord": "https://discord.gg/Q7PgF2S3W5", - "twitter": "https://twitter.com/Chimaek_Token", - "website": "https://chi-maek.com" - } - }, - { - "chainId": 101, - "address": "E5TT39UcytqDkHy4xq24JjjWhQrWjhT8yf4XeCfz1v2F", - "symbol": "FLPZ", - "name": "Flappyzcoin", - "decimals": 4, - "logoURI": "https://solnetwebapistorage.blob.core.windows.net/images/flappyzcoin.png", - "tags": ["utility-token", "community-token", "game-token", "gaming"], - "extensions": { - "twitter": "https://twitter.com/FlappyzApp", - "website": "https://www.flappyz.io" - } - }, - { - "chainId": 101, - "address": "ssdmMTQJ2e8G5EbPabaQ9X7p1ZwwHSw3n8fQnuJ55b1", - "symbol": "SS-COUPON", - "name": "Sol Stone Coupon", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ssdmMTQJ2e8G5EbPabaQ9X7p1ZwwHSw3n8fQnuJ55b1/logo.jpg", - "extensions": { - "website": "https://solstone.contrastive.ai/" - } - }, - { - "chainId": 101, - "address": "7RivgLYo6Shp1p4GWUGf5hVV6ZnuK5i7F1xThNev4em6", - "symbol": "SAD", - "name": "Sad Boi Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/tobaccoblonde/sadboicoin/main/sadbois.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BZy8LAqypYdQLYyyDnDqhebK1FjEfrNqQYt6motchaCo", - "symbol": "LOKI", - "name": "Lokesh Sathiyamoorthi", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Lokesh-Sathiyamoorthi/My_Cryptocurrency/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DHKL3aXvhhK4dDu12wWfc5kQgdpqyJJwbS4PqrPL5Fg", - "symbol": "HANI", - "name": "Hanikey Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/hanikey01/hani/main/HANI.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "3E4YuX7XdEVCF54KtimWVBhBpeN5P2dehGnCff65q559", - "symbol": "STRAYAPE-WL", - "name": "Stray Ape WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3E4YuX7XdEVCF54KtimWVBhBpeN5P2dehGnCff65q559/Logo.png", - "tags": ["whitelist-token"], - "extensions": { - "discord": "https://discord.gg/strayapes", - "twitter": "https://twitter.com/StrayApesNFT", - "website": "https://strayapesnft.com" - } - }, - { - "chainId": 101, - "address": "GGQmwvoYRUbRs1p8azv7goikFJAJThjm7oW4tDTYCsdR", - "symbol": "KONGWL1", - "name": "Sol Kongz Remint 1", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GGQmwvoYRUbRs1p8azv7goikFJAJThjm7oW4tDTYCsdR/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/SolKongz", - "website": "https://www.solkongz.net/" - } - }, - { - "chainId": 101, - "address": "YLB6H9s99Y9HMARGM5zYpBv59fr1qtooZY1Qo7vpf4n", - "symbol": "KONGWL2", - "name": "Sol Kongz Remint 2", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/YLB6H9s99Y9HMARGM5zYpBv59fr1qtooZY1Qo7vpf4n/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/SolKongz", - "website": "https://www.solkongz.net/" - } - }, - { - "chainId": 101, - "address": "ayVMWBtmzPM48HAP1f5BSyvVWnqJWs4y2TEDbKNUGMo", - "symbol": "$NOW", - "name": "SNOW Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ayVMWBtmzPM48HAP1f5BSyvVWnqJWs4y2TEDbKNUGMo/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/PolariansNFT", - "website": "http://polarians.io/" - } - }, - { - "chainId": 101, - "address": "X2m83B2T6y92qcq1am2z3FKXCzzmKNVxUGXxFWa7x8c", - "symbol": "MRB", - "name": "MetaRoyalBank", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/JORJE-LOCO/logo.png/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DjtQv62kUfsZC7n7ejfeRwkjWmhaLnCDwNuDpQLLFNKH", - "symbol": "LONG", - "name": "Longcoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mutulong/crypto-test/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "D9hidBDDauvAYWY9jkNt6YfPxtcC7HgWm5sNNHAobC3A", - "symbol": "NAC-WL", - "name": "NAC WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/D9hidBDDauvAYWY9jkNt6YfPxtcC7HgWm5sNNHAobC3A/logo.jpg", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "EptKq9tJwRjhg4MLZc9TMdyngNnLqpSkc5cDbeX7PX1f", - "symbol": "QTOC", - "name": "Quito Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MSAdair/Quito_Coin/main/condor3.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4Fn19ad6suzpBHbfRNXGRbrUT1jTwEcJMR4R21vPL7e3", - "symbol": "SATAHACK", - "name": "Hacklab Pori", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Satakunnan-Tietojenkasittely-yhdistys/crypto/main/logo.png", - "tags": ["social-token"], - "extensions": { - "twitter": "https://twitter.com/porihacklab", - "website": "https://www.satkynet.fi/tag/satahack/" - } - }, - { - "chainId": 101, - "address": "HYUo89nCzFqyhefsimzBTnX9puAbQ9vMZqdvYrbsrinr", - "symbol": "AD2", - "name": "Asian Dragon", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/asiandragoncoin/official-logo/main/AD2-SOLANA/logo.png", - "tags": [ - "utility-token", - "social-token", - "community-token", - "game-token" - ], - "extensions": { - "discord": "https://discord.gg/hHgvv9JB8e", - "facebook": "https://www.facebook.com/asiandragoncoin", - "twitter": "https://twitter.com/CoinAsian", - "website": "https://www.asiandragoncoin.com" - } - }, - { - "chainId": 101, - "address": "Dv3LwwDe6QgVCuZ2nYvj29MZsNgDpwMFLhQiVPpjAFqk", - "symbol": "BT", - "name": "Bell Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Dv3LwwDe6QgVCuZ2nYvj29MZsNgDpwMFLhQiVPpjAFqk/logo.png" - }, - { - "chainId": 101, - "address": "6kPEua21Vhs41cPkEFieQ8cdyL9ugYicSzgAxu21kfDx", - "symbol": "$monkeland", - "name": "Monkeland Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6kPEua21Vhs41cPkEFieQ8cdyL9ugYicSzgAxu21kfDx/logo.png", - "extensions": { - "website": "https://apesagainst.io/" - } - }, - { - "chainId": 101, - "address": "2dbSAv86RN3qh2tcfUPkh8iaYNYu917xjxwKbb2oVdG9", - "symbol": "WAW", - "name": "wafuWafu Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Viata0/Cryto/main/mango.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "78rgT17v4G3XNoyo7tDWoV6Bwr1Jq6tdCtuK4nUcj5oZ", - "symbol": "GG", - "name": "GILBERT'S GARDENS", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/78rgT17v4G3XNoyo7tDWoV6Bwr1Jq6tdCtuK4nUcj5oZ/gg520x520.png", - "tags": ["reward-token"] - }, - { - "chainId": 101, - "address": "Hjibp1cn2bSk1dkTdpbxez3YAiBGTLjzc8xZ8LbCCUHS", - "symbol": "FRANCIUM-CP", - "name": "Francium Contribution Point", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Hjibp1cn2bSk1dkTdpbxez3YAiBGTLjzc8xZ8LbCCUHS/logo.png", - "tags": ["community-token"], - "extensions": { - "description": "Community token for those who contribute to Francium", - "discord": "https://discord.gg/francium", - "twitter": "https://twitter.com/Francium_Defi", - "website": "https://francium.io/" - } - }, - { - "chainId": 101, - "address": "CARoTGvYPajELZsoLQSovLY8fZmBkrrUoyJVJN3zGwQT", - "symbol": "$CAROT", - "name": "CAROT COIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CARoTGvYPajELZsoLQSovLY8fZmBkrrUoyJVJN3zGwQT/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/bobbyrabbits", - "instagram": "https://www.instagram.com/bobbyrabbits/", - "twitter": "https://twitter.com/bobbyrabbits", - "website": "https://bobbyrabbits.com" - } - }, - { - "chainId": 101, - "address": "WL9XzGRaUwrZmPQD7ank5KM2z9U87WcWQEYo6Xk4bnZ", - "symbol": "TMDCWL", - "name": "TMDC Whitelist Token (TMDCWL)", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WLT8odEsvbXvdmZ7be6vfXpXgYL8BNR83wiuT5nLz9E/logo.png", - "tags": ["whitelist-token", "NFT"] - }, - { - "chainId": 101, - "address": "wpcxhh4VTi16TkYMZx7ApM6ZKiejkZd7kW7PengKNLi", - "symbol": "ARWL", - "name": "Alien Rappers Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/wpcxhh4VTi16TkYMZx7ApM6ZKiejkZd7kW7PengKNLi/logo.png", - "tags": ["utility-token", "mint-token", "whitelist"], - "extensions": { - "description": "The Coin for Alien Rappers NFT for Whitelist.", - "discord": "https://discord.com/invite/alienrappersclub", - "instagram": "https://www.instagram.com/alienrappersclub/", - "twitter": "https://twitter.com/AlienRappers", - "website": "https://alienrappers.com/" - } - }, - { - "chainId": 101, - "address": "6Q3WxTssbpM7yQjAxZ9XKfJnoLXAa5xw6Rcd6FVpRkc", - "symbol": "CNPC", - "name": "Cannapuff Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/rthomas98/cannacoin/main/cannapuff-coin.png", - "tags": ["cannabis-token"] - }, - { - "chainId": 101, - "address": "AG4NpZGm8WXHTcxC9sdhWQMFGRxgsrG4sPaAHHcwFxvH", - "symbol": "SPWL", - "name": "Solapoly NFT Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AG4NpZGm8WXHTcxC9sdhWQMFGRxgsrG4sPaAHHcwFxvH/logo.png", - "tags": ["currency"], - "extensions": { - "twitter": "https://twitter.com/solapolygame", - "website": "https://www.solapoly.com/" - } - }, - { - "chainId": 101, - "address": "G2zmqsR1V1HdccEFG1EZp6XidbArqDYUf9o5QZeHwkjt", - "symbol": "VGC", - "name": "VICION GROUP COIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/gabgarluc/viciongroup/main/VicionGroupCoin.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "4n5mFx5kQAeZpi786B44yLWMfCNUNZ8us6UeRbuZoyc6", - "symbol": "RcCHIP", - "name": "RC CHIP", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/kakasonz112/robocock-token/main/assets/whitelist_token.png", - "tags": ["SPL-token"], - "extensions": { - "discord": "https://discord.gg/robococknft", - "twitter": "https://twitter.com/RoboCockNFT", - "website": "https://robocock.io/" - } - }, - { - "chainId": 101, - "address": "5io93Fx24MDPMybCUYxjLmfK1WaW33bWRqfvBnNgX6Ug", - "symbol": "RNDIEWL", - "name": "The Roundies Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5io93Fx24MDPMybCUYxjLmfK1WaW33bWRqfvBnNgX6Ug/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://www.theroundies.co" - } - }, - { - "chainId": 101, - "address": "6zZ3Eu3VeHcqCPJhDTGoJrufV6xrSVBCBTp8izgXNJHF", - "symbol": "BLACK1", - "name": "BLACK ONE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/danncti/crypto--black-one/master/logo.png", - "tags": ["currency", "game-token"] - }, - { - "chainId": 101, - "address": "HpPJW5kyYaHomubNnF7coBNZSGrpMkZeBke3aj62i23n", - "symbol": "OME", - "name": "OneMeta", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/OneMetaLand/crypto/main/ome_logo.png", - "tags": [ - "social-token", - "community-token", - "currency-token", - "utility-token", - "Metaverse-Token" - ], - "extensions": { - "website": "http://onemeta.land" - } - }, - { - "chainId": 101, - "address": "EQLUZF1Cx2NgBSqNTBbBQ6CRgrUQ6NUYzwiRDV5GQ6no", - "symbol": "PIGFLY", - "name": "PIGS FLY", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/dtmaiale/crypto/main/pig.png", - "tags": ["currency", "game-token"] - }, - { - "chainId": 101, - "address": "CPvPSJbnZE1VHXtHHpEEM6qMSMgqph5cGycinu1pNczX", - "symbol": "GNET", - "name": "GameNET Token", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/Gnetds/Crypto/main/logo.png", - "tags": [ - "social-token", - "community-token", - "currency-token", - "utility-token", - "Metaverse-Token" - ], - "extensions": { - "website": "http://gamenet.mx" - } - }, - { - "chainId": 101, - "address": "3wSBMG1CpUDFAQDfUcEkTCbhMZhbznWwzzcWThPNEwJj", - "symbol": "PxLo", - "name": "PeaceLove Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/PeloKoin/Pelo/main/PXL.png", - "tags": ["Faith-token"] - }, - { - "chainId": 101, - "address": "6dqaoHQNsmbTd11JGqDKhyoNQ36rnRTRmWtxaAqA9fBV", - "symbol": "OOAA", - "name": "OOAA", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6dqaoHQNsmbTd11JGqDKhyoNQ36rnRTRmWtxaAqA9fBV/logo.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "2kFqn5SH9Ecpv9mQo2WduUoZhARetELy3WNM4iUacjDT", - "symbol": "TOXIC", - "name": "TOKENX", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2kFqn5SH9Ecpv9mQo2WduUoZhARetELy3WNM4iUacjDT/logo.png", - "tags": ["tokenx"] - }, - { - "chainId": 101, - "address": "3Py5nZKoNuotXBcYTiDrLVQeWJzgryHWyiED4JRckEEs", - "symbol": "MICROCOCK", - "name": "MICROCOCK", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/kakasonz112/robocock-token/main/assets/wl_logo.png", - "tags": ["whitelist-token"], - "extensions": { - "discord": "https://discord.gg/robococknft", - "twitter": "https://twitter.com/RoboCockNFT", - "website": "https://robocock.io/" - } - }, - { - "chainId": 101, - "address": "GkSjBhh6G5BZ6zwp22Re33j2i6wbzZUANSoA7rbru8cu", - "symbol": "MIGHTY", - "name": "BamBam Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/FreddyMart/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DcYfKgKsGtZ6YKXLRBDSn6qxc8Us4VYZDsqsU8EiDEeD", - "symbol": "YNWL", - "name": "Yukan Neko Whitelist Token", - "decimals": 0, - "logoURI": "https://cdn.discordapp.com/attachments/926535226820276264/944843273275584552/Untitled_Artwork.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/YukanNekoNFT" - } - }, - { - "chainId": 101, - "address": "H5K7BAvYMtkA6yw2ceQ9uhVNcSg821oYoiYZGiKWkWDT", - "symbol": "OXY", - "name": "Oxy Family WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/H5K7BAvYMtkA6yw2ceQ9uhVNcSg821oYoiYZGiKWkWDT/logo.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "21myCu8fLtojSwjNvZnQWFCB3ZjL2bKM6z5axgp4KnAU", - "symbol": "PDX", - "name": "PDX Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/PDX-Coin/PDX-Coin/main/logo.png", - "tags": [ - "social-token", - "community-token", - "currency-token", - "utility-token" - ], - "extensions": { - "website": "https://www.pdxcoin.info" - } - }, - { - "chainId": 101, - "address": "BMgrcLbpmRxTyj6b3FsCrpJB2XRftKewm5YBBu7tK11w", - "symbol": "SCR", - "name": "SCAR", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BMgrcLbpmRxTyj6b3FsCrpJB2XRftKewm5YBBu7tK11w/logo.png", - "tags": ["investments", "reward"], - "extensions": { - "twitter": "https://twitter.com/scarcoins", - "website": "http://www.scarco.in/" - } - }, - { - "chainId": 101, - "address": "H45osYSkBiWiDr75JzzGjXzfHdwQAQ1rK1Ymb3k6srbn", - "symbol": "FRDKN", - "name": "fredfiftythreeKoin-Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/shines69/Fred53Koin-Token-2/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "E7XfsVVwVJMounVHJuW6U2uHK3mHc3eNQrW5nmjHoZYw", - "symbol": "$NEXT", - "name": "Next Chapter Community Token", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/E7XfsVVwVJMounVHJuW6U2uHK3mHc3eNQrW5nmjHoZYw/logo.png", - "tags": ["community-token"], - "extensions": { - "website": "https://nextchapter.to/" - } - }, - { - "chainId": 101, - "address": "FYmiFBiUTkmFoY7duWgGE21VHxyUazZN15HJLaHBKEKq", - "symbol": "MarsWL", - "name": "MARS WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FYmiFBiUTkmFoY7duWgGE21VHxyUazZN15HJLaHBKEKq/logo.png", - "tags": ["currency", "game-token", "social-token", "community-token"], - "extensions": { - "discord": "https://discord.com/channels/932827372464513085/943416696964780132", - "website": "https://www.martianarmy.space/" - } - }, - { - "chainId": 101, - "address": "ssr1CpV54AngxBAeeTpPNgmAACf3VpdTQJtCdgMRFSC", - "symbol": "BRCRS", - "name": "Brickers WL Token", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ssr1CpV54AngxBAeeTpPNgmAACf3VpdTQJtCdgMRFSC/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "website": "https://www.brickers.io/" - } - }, - { - "chainId": 101, - "address": "7LFgbAxGkVsFNWsDrFTU2itczmaSeAdbCjWxcco7nKB3", - "symbol": "MTV", - "name": "Mysterious Vegan Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7LFgbAxGkVsFNWsDrFTU2itczmaSeAdbCjWxcco7nKB3/logo.png", - "tags": ["Mysterious-Vegan", "Wallet", "MV-TOKEN", "utility-token"], - "extensions": { - "website": "https://mysteriousvegan.com" - } - }, - { - "chainId": 101, - "address": "4KTss3DuyjwuvsZF9RAGr2huYDsktHPwmznZRaQWm7kc", - "symbol": "CLNS", - "name": "Clenos", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/hotmaildhiraj/clenos/main/clenos.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BvJuCsGXoN1UcuUrsNNjJ76MxWq1PSQmbvvermKEfzZ6", - "symbol": "KNTRN", - "name": "KentronKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ChristosVoutselas/KentronKoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Code7hV6DaK5Werof8c7vPwBxLvhmEWVUbU2AfhBZArB", - "symbol": "CODE", - "name": "Code", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Code7hV6DaK5Werof8c7vPwBxLvhmEWVUbU2AfhBZArB/logo.png", - "tags": ["defi", "currency", "social-token", "community-token"], - "extensions": { - "discord": "https://discord.com/invite/pSCsYD5x", - "telegram": "https://t.me/codenjobsgroup", - "twitter": "https://twitter.com/codenjobs", - "website": "https://www.codenjobs.com" - } - }, - { - "chainId": 101, - "address": "FJauoY5QAHqdQwkpyqSeUu75ZNQUJieEtqC5oqkFkwTD", - "symbol": "YSol", - "name": "YSol Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Y-Token/Ytoken-Logo/main/Ysol%20logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "4TYSPUxq4U8q4rokZ7M3mo6RQRRYZDexhvZ6bm8Kh4GW", - "symbol": "MYLO", - "name": "Mylo Angels", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/iiizzzyyy/mylo-token/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FsPncBfeDV3Uv9g6yyx1NnKidvUeCaAiT2NtBAPy17xg", - "symbol": "XGLI", - "name": "Glitter Finance", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FsPncBfeDV3Uv9g6yyx1NnKidvUeCaAiT2NtBAPy17xg/logo.svg", - "tags": [ - "community-token", - "social-token", - "utility-token", - "security-token", - "governance-token" - ], - "extensions": { - "coingeckoId": "glitter-finance", - "discord": "https://discord.gg/P3mZkjsQMM", - "linkedin": "https://www.linkedin.com/company/glitter-finance", - "medium": "https://medium.com/@Glitter-Finance", - "telegram": "https://t.me/GlitterFinanceGlobal", - "twitter": "https://twitter.com/GlitterFinance", - "website": "https://glitter.finance" - } - }, - { - "chainId": 101, - "address": "6jh8X7EAdUhTN5LhPNwPZFNLmDt21Z3n1WdKTCS1vHCn", - "symbol": "BRAWN", - "name": "Brawny Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Mikesquad/token-list/main/assets/mainnet/6jh8X7EAdUhTN5LhPNwPZFNLmDt21Z3n1WdKTCS1vHCn/CoinLogo2.png", - "tags": ["social-token", "meme-token", "community-token"] - }, - { - "chainId": 101, - "address": "JetNnLZpbECCfyeZSvJdgg5gf37QfCkPrp2X8XfmNWn", - "symbol": "JET", - "name": "BHSG Jetpack Claim Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/JetNnLZpbECCfyeZSvJdgg5gf37QfCkPrp2X8XfmNWn/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://bountyhunterspaceguild.com" - } - }, - { - "chainId": 101, - "address": "9y5nCppbmKvdErJ6GwVVzqEcn3zSwEpsdakNSmQqKJ9y", - "symbol": "MONY", - "name": "Monies", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/brokenstein/monies/main/Monies.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "WLTzkAbFCUonfz9h4eF6nUcWncYckAjd94urxvnEFd8", - "symbol": "TW", - "name": "Toon Worlds", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/micku92/token-list/main/assets/mainnet/WLTzkAbFCUonfz9h4eF6nUcWncYckAjd94urxvnEFd8/logo.png", - "tags": ["SPL-token"], - "extensions": { - "discord": "https://discord.gg/Vz59hBBK", - "twitter": "https://twitter.com/ToonWorlds_NFT", - "website": "https://toonworldsnft.com/" - } - }, - { - "chainId": 101, - "address": "H3pWoh5Te12nHYVSQm1vQC6aAn2EbADj8zit23jP2jX3", - "symbol": "FAC", - "name": "FAC FUD Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MundoFacu/stuff/038660d9336d647a9d4ede0e3107de9c9481724d/FAC_logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CoCrfJfccDLXxdd4HSVynLGKavvBPPHjJEGphwXZTFyn", - "symbol": "OG", - "name": "CoC OG token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CoCrfJfccDLXxdd4HSVynLGKavvBPPHjJEGphwXZTFyn/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://catsoncrack.xyz" - } - }, - { - "chainId": 101, - "address": "CoCrDWPkZwDtNuoVticQWhrdUVoBKEgJN1c6pYihB2vD", - "symbol": "PBL", - "name": "CoC public token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CoCrDWPkZwDtNuoVticQWhrdUVoBKEgJN1c6pYihB2vD/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://catsoncrack.xyz" - } - }, - { - "chainId": 101, - "address": "5ahu5wPznx1VFp696Fcw3y1sLeFL7evy8UvYwWmWxTbQ", - "symbol": "PINE", - "name": "PineCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/eheaivilin/images/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "84eyzKVHsE3gbPU9Wknkr4AGxdrSkfQfvmCLc5bH9XWD", - "symbol": "HUNT", - "name": "Treasure Hunt", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/84eyzKVHsE3gbPU9Wknkr4AGxdrSkfQfvmCLc5bH9XWD/logo.png" - }, - { - "chainId": 101, - "address": "FQv1XRDxPGKJqG5jj7qhQ1PzhW4xnZNPf2yRyVH4BaLZ", - "symbol": "ANS", - "name": "Ananas Coin", - "decimals": 0, - "logoURI": "https://github.com/ananas-coin/Ananas-Coin/blob/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HfBA9FHCvndVj7DVCfSvAHRZuR5JnT2EKwnsoL6jTwXG", - "symbol": "JBB", - "name": "BeckCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HfBA9FHCvndVj7DVCfSvAHRZuR5JnT2EKwnsoL6jTwXG/logo.png", - "extensions": { - "linkedin": "https://linkedin.com/in/jeanbaptistebeck", - "twitter": "https://twitter.com/_jbbeck" - } - }, - { - "chainId": 101, - "address": "HExEqx48oPsvoDcS88vDyj7X9JW3tiy5kzLTHan9iYJE", - "symbol": "EST", - "name": "ESTRA", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/vedranlo/estra/main/estra_logo.png", - "tags": ["community-token", "utility-token", "travel-token"], - "extensions": { - "website": "https://estra.world" - } - }, - { - "chainId": 101, - "address": "unVasmPouDQNVvyvoGRyHMnNafhqLX23dUpbxrJnZvV", - "symbol": "UNVAL-WL", - "name": "Outlet Ticket - unValuables", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/unVasmPouDQNVvyvoGRyHMnNafhqLX23dUpbxrJnZvV/logo.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/sneakyslamberts", - "website": "https://www.sneakyslamberts.com/" - } - }, - { - "chainId": 101, - "address": "de1QJkP1qDCk5JYCCXCeq27bQQUdCaiv7xVKFrhPSzF", - "symbol": "DELFI", - "name": "DeltaFi Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/de1QJkP1qDCk5JYCCXCeq27bQQUdCaiv7xVKFrhPSzF/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/deltafi", - "github": "https://github.com/delta-fi", - "medium": "https://medium.com/deltafi", - "telegram": "https://t.me/deltafi_labs", - "twitter": "https://twitter.com/deltafi_ai", - "whitepaper": "https://deltafi-s3.s3.us-east-2.amazonaws.com/DeltaFi_whitepaper.pdf" - } - }, - { - "chainId": 101, - "address": "WLDu1fuZ2dswJAizQg5BrN26oAKeCUiJ42x7uaep5WV", - "symbol": "WLD", - "name": "Whitelist Drogo", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WLDu1fuZ2dswJAizQg5BrN26oAKeCUiJ42x7uaep5WV/logo.png", - "extensions": { - "discord": "https://discord.com/invite/VFJVFXGxR8", - "twitter": "https://twitter.com/Komododragonnft", - "website": "https://solkomodo.io/" - } - }, - { - "chainId": 101, - "address": "XkQoahtKbVC15hTczRFLRfZPtM1AFFjWs3uFE9sxDb4", - "symbol": "ITA", - "name": "ItalyCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/nemitoken/ItalyCoin/main/ita.png", - "tags": ["management"] - }, - { - "chainId": 101, - "address": "4SSTwFJzRFNBLZBrNcieWYxyJ19bPSPZVZBy2eJKFURS", - "symbol": "HUNT", - "name": "Real Treasure Hunt ", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4SSTwFJzRFNBLZBrNcieWYxyJ19bPSPZVZBy2eJKFURS/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DPJr1ErxEuHF2hT73DsJ4aVAv49SRsjpYiV8hRGTYQXa", - "symbol": "FWOGGY", - "name": "FwoggyCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/PineconeChamp/FwogyCoin/main/FwogyCoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3Qksbc7NWAXigX5r37LDehRVy92yYV28PJ1nkcCj58wo", - "symbol": "XMT", - "name": "Xovalien Mint Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Edis27/XovaliensMintToken/main/coin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FJKYciBS5CbskT7BdPnUmMJQz1rWQZocxw7F4UdP9XuF", - "symbol": "PNC", - "name": "PioneerCoin", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/KingxRamos51/PioneerCoins53k/main/pioneerpetecoins53k.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BJv2UCtM48qKqmkcTegLg696vXwhBoqfkNjueys4TN8X", - "symbol": "DC", - "name": "Dreamcity", - "decimals": 0, - "logoURI": "https://dreamcitynft.com/apple-touch-icon.png" - }, - { - "chainId": 101, - "address": "4n6bk2d8yxY3NeuimCHhRr1ywP24o7Hcg8dqZWK9mZT2", - "symbol": "KANISEK", - "name": "KaniCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/adifinek/crypto/main/logo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FqYPZmwUTCpGgNvLanhe6P7pcQr2mnKMLVjpWmZbV8B9", - "symbol": "PINT", - "name": "PINTO", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/wedd26/ryanpinto/main/RYAN3.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3wx61Zfz7j5gtvTQCKistr2hsWNYMNKfJKqKfyAdK4fG", - "symbol": "LBCN", - "name": "LiberCoins", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/LiberCoins/Token-LiberCoin/main/libercoins.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AumBLHWYFrPsJn1yPj12XmTq19v4W8573zQ3Ja9zNm5v", - "symbol": "PRAY", - "name": "Prayer Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/loktar00/prayertoken/master/praytoken.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GLapb5CUwQ5pbDy9RLuEctFEjZuoNKsRvc95MGpKimCf", - "symbol": "SLGT", - "name": "Sundays Lab Golden Token", - "decimals": 9, - "logoURI": "https://arweave.net/pHrzP-Q4FhYr-nZRLnNLl0v1fUTbwnsIhxAERvoNf7Y", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/sundayslab" - } - }, - { - "chainId": 101, - "address": "GmY2Rp9t5S4yD5jhgJrc47VSAa6hQiikkYi3sr9HLNZr", - "symbol": "BLEEP", - "name": "BLEEP", - "decimals": 0, - "logoURI": "https://gateway.pinata.cloud/ipfs/QmYjaWwcDx8gaf5rnkzGYLy8qhjjvuuvQXK8RttvXFWUWd?preview=1", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3HLeyffHyFKsLPJgoSL1Jq1u6tzuhgU2tAgbDBu9uFyb", - "symbol": "NINJA/USDC", - "name": "Raydium Fusion Pool Token (NINJA/USDC)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3HLeyffHyFKsLPJgoSL1Jq1u6tzuhgU2tAgbDBu9uFyb/ninja-lp.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://ninjaprotocol.io/" - } - }, - { - "chainId": 101, - "address": "5PUL5pfqnHqa3mb88txLhGSRadvYboBFQGEbEjCBkHQ8", - "symbol": "MANA", - "name": "MANA Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Hotel-Six/Mana-Token/main/Logo.png", - "tags": ["community-token", "social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "DoKnmLSCe81mkvga7Vxn82F8NtvBdW3Qas4Rk22Wd3UG", - "symbol": "DAWL", - "name": "Dokan Apes WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/NFTBrickLayer/assets/main/dokan-logo.png", - "tags": ["whitelist-token"], - "extensions": { - "discord": "https://discord.com/invite/YcthEaHXBs", - "twitter": "https://twitter.com/DokanApesNFT" - } - }, - { - "chainId": 101, - "address": "9jk4bVurWNPnVqPAN6jqP8UEvtzAxHtZ5ysSd3Npz9Mh", - "symbol": "JCKY", - "name": "Jocky Koin", - "decimals": 0, - "logoURI": "https://github.com/czcr/cozicoins/blob/main/JLogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AHp6mR4Jm6UoogsY1aNYM1JgfpCvDhUvWBAQDnmVcxDw", - "symbol": "LABNT", - "name": "LA BONITA", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/LuckyLuis888/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GkppDJvtDJfE2SENMg9i6EvSTTgvmrcmnNJrNXSoZcbJ", - "symbol": "UTS", - "name": "UTSCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/utscoin/utscoin/main/logo.png" - }, - { - "chainId": 101, - "address": "8RhBF3P2TZn58f9ossvuqMC48DR2LJre1aMLazyMX79d", - "symbol": "LDTMG1", - "name": "LDT MG1 Mint Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8RhBF3P2TZn58f9ossvuqMC48DR2LJre1aMLazyMX79d/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://livingdeadteds.com" - } - }, - { - "chainId": 101, - "address": "CDvWh6Dt7zfbEgQz5CHyxrrFFnJkzGHPoFkeYRzG6CNH", - "symbol": "GRVT", - "name": "Graviton Studio", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/dgrig1/GravitonCrypto/main/Graviton.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "AQZRVC5xEg1PhTrstwTENkkJUEzJLDxN5nd57RbRtqC6", - "symbol": "WLKN", - "name": "Walken", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EcQCUYv57C4V6RoPxkVUiDwtX1SP8y8FP5AEToYL8Az/logo.svg", - "tags": ["walken", "utility-token"], - "extensions": { - "website": "https://walken.io" - } - }, - { - "chainId": 101, - "address": "DPTchYSEMEDSjDyk81xyBeWaon7oLtFtkQ2FptPGyCAe", - "symbol": "TWL", - "name": "TigerBeing WL", - "decimals": 0, - "logoURI": "https://arweave.net/dtrMgdRPaWXCmfKHRB87aSvYDwGt3GAB3HC1cYWa7rk", - "tags": ["community-token"], - "extensions": { - "discord": "https://discord.com/invite/jXfANfzkFb", - "instagram": "http://instagram.com/tigerbeing_io", - "twitter": "https://twitter.com/tigerbeing_io", - "website": "https://tigerbeing.io/" - } - }, - { - "chainId": 101, - "address": "GwYERALLKMycyksMAYVNvuv58bN5Z4yZfTNhPsRMm9aX", - "symbol": "PHB", - "name": "PornHub Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SolanaTokenMerger/PornHub-Coin/main/Logo.png.png", - "extensions": { - "twitter": "https://twitter.com/pornhub", - "website": "https://pornhub.com" - } - }, - { - "chainId": 101, - "address": "GNVwLCbUhpHxqYgtjbq1fa5KViYtdhsN7Cw11cKhPNe9", - "symbol": "WTF", - "name": "WelcomeToFavelas Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SolanaTokenMerger/WelcomeToFavelas-Coin/main/Logo.png" - }, - { - "chainId": 101, - "address": "6Mt8jADDUPckFf3hQfsxrrZGyov7sdfLAiD9oeLVcBkk", - "symbol": "DTH", - "name": "DTH WLTicket", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6Mt8jADDUPckFf3hQfsxrrZGyov7sdfLAiD9oeLVcBkk/logo.png", - "extensions": { - "twitter": "https://twitter.com/soldiamondheads", - "website": "https://diamondtownheads.io" - } - }, - { - "chainId": 101, - "address": "FBiVu8g69ghfnrU58ouVqh3dfZAiqGLWNUop7gXwv4Ce", - "symbol": "BLOCKSTONE", - "name": "Trust Wallet", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FBiVu8g69ghfnrU58ouVqh3dfZAiqGLWNUop7gXwv4Ce/trustwalletcards.png", - "tags": ["trust-wallet", "Blockstone"], - "extensions": { - "website": "https://blocksto.ne/trust-wallet/" - } - }, - { - "chainId": 101, - "address": "9zwqWdo8hyQS3Zjx87AtviD9ooD38XWKtd5FTaLAK9Js", - "symbol": "PIT", - "name": "The Pit Bosses", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/GaitanaruAndrei/assets/main/pitbuli.png", - "tags": ["community-token", "social-token"], - "extensions": { - "description": "Currency for the Pit Casino", - "website": "http://www.pitbosses.vip/" - } - }, - { - "chainId": 101, - "address": "C76wG8mcoJEg8zSXn35ZP4r5wczXGhSjzBhSXva9y7g", - "symbol": "RF", - "name": "Robot Factory", - "decimals": 2, - "logoURI": "https://github.com/iam314/RF/blob/main/RF-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Bfz47crqn1GbobhcXPN8TNCz7sibLCQsrimeoJAewq3W", - "symbol": "BGSC", - "name": "Bingo Star Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/changman/bingostarcoin/main/logo.png" - }, - { - "chainId": 101, - "address": "7vgM43XjNMgdWecddTcpwYNmk8tK4EdfGvyThisb99FR", - "symbol": "SOL-GUARANTEE", - "name": "Golden SOL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7vgM43XjNMgdWecddTcpwYNmk8tK4EdfGvyThisb99FR/gold.png", - "tags": ["guarantee-payment", "Golden-SOL"], - "extensions": { - "website": "https://blocksto.ne/golden-sol/" - } - }, - { - "chainId": 101, - "address": "2Bgp5rK6XjfFZKo4Tm7TfErg8iDmHWJspXhnD4tWaVez", - "symbol": "TYO", - "name": "Tokyo Coin", - "decimals": 0, - "logoURI": "https://github.com/t0ky0nerd/crypto/blob/main/TokyoCoinIcon.png", - "tags": ["community-token"] - }, - { - "chainId": 101, - "address": "Fqg9BrFR6d2WD1FmpBfNxotM6woqeizFK7m5URpDSxuz", - "symbol": "Corrupt", - "name": "Corrupt Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Fqg9BrFR6d2WD1FmpBfNxotM6woqeizFK7m5URpDSxuz/Logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://twitter.com/CorruptedSkulls" - } - }, - { - "chainId": 101, - "address": "AtrBRuv63i83AwzTrnuh9HTeN5K3UGUveRTniiwrdyYb", - "symbol": "CZCR", - "name": "Cozi Coin", - "decimals": 0, - "logoURI": "https://github.dev/andy-dey/token-list/blob/3ff94f8f0def5d0fc4acb4568c65a71b4aac612d/assets/mainnet/AtrBRuv63i83AwzTrnuh9HTeN5K3UGUveRTniiwrdyYb/CC-Logo.png" - }, - { - "chainId": 101, - "address": "LUaAb8dKBd3oye8PdSZtCmr3wQJbcXop4P3bCm434xc", - "symbol": "LUT", - "name": "Launchlabs Unlimited", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/LUaAb8dKBd3oye8PdSZtCmr3wQJbcXop4P3bCm434xc/logo.png", - "tags": ["NFT", "utility-token"], - "extensions": { - "website": "https://launchlabs.app/" - } - }, - { - "chainId": 101, - "address": "LHTZ1E5tcZRK786zwrpcUsGivU6vemQaKBeXuiVD6tP", - "symbol": "LHT", - "name": "Launchlabs Holder Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/LHTZ1E5tcZRK786zwrpcUsGivU6vemQaKBeXuiVD6tP/logo.png", - "tags": ["NFT", "utility-token"], - "extensions": { - "website": "https://launchlabs.app/" - } - }, - { - "chainId": 101, - "address": "ECRJG22BfVD5wmGZeCNy6f74zdmzGR5DQFczqMypkpfe", - "symbol": "EURO-GUARANTEE", - "name": "Golden EURO", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ECRJG22BfVD5wmGZeCNy6f74zdmzGR5DQFczqMypkpfe/gold.png", - "tags": ["Golden-euro", "Guarantee"], - "extensions": { - "website": "https://blocksto.ne/golden-euro/" - } - }, - { - "chainId": 101, - "address": "7LCo9Kv3rP6F2uHtSbh1ze6K1eDV47S8phMwr8mA9Dne", - "symbol": "GTHK", - "name": "GhostTown", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CdcRwbFuj3YNJYdfUqh3hnxFz1fuF6he1Wgz7JvZMHda/logo.png", - "tags": ["game-token", "social-token"], - "extensions": { - "description": "Token for the P2E game", - "website": "https://ghosttown.fun/" - } - }, - { - "chainId": 101, - "address": "ByvbXb847KX2MpYraz7daZyS7yv8k2ZyckdTTgDscNuf", - "symbol": "GUARANTEE", - "name": "BLOCKED SOL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ByvbXb847KX2MpYraz7daZyS7yv8k2ZyckdTTgDscNuf/gold.png", - "tags": ["Blocked-SOL", "Guarantee"], - "extensions": { - "website": "https://blocksto.ne/blocked-sol/" - } - }, - { - "chainId": 101, - "address": "3Kxcywq58u49CnsF3n1nQt7viZ3ALXxfduc8jfmFPNai", - "symbol": "CYBERS", - "name": "CyberStorm", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/CyberStorm-Game/CyberStorm-Crypto/main/CyberStorm.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HuMShjViKhcfihmHkgvctcFAyeyxAk8hK5K58zWpuRKf", - "symbol": "DREAM", - "name": "DREAM TOKEN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HuMShjViKhcfihmHkgvctcFAyeyxAk8hK5K58zWpuRKf/logo.png", - "tags": ["Dreamapes"], - "extensions": { - "twitter": "https://twitter.com/DreamapesNFT", - "website": "https://dreamapes.intersect.art/" - } - }, - { - "chainId": 101, - "address": "DYu4rwdqSRmeastBxQVrsRYzM6bZMGUMSB6cDfWNarw9", - "symbol": "POS", - "name": "Worthless", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/tommyl1258/crypto/main/cyptoImage.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "64mrJr7bZa85ZtNjDWySUAnA66Dd7jNJNqu7MugsKKyz", - "symbol": "VZX", - "name": "VerZioX", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/64mrJr7bZa85ZtNjDWySUAnA66Dd7jNJNqu7MugsKKyz/logo.png", - "tags": ["gaming-token", "metaverse"], - "extensions": { - "description": "VerZioX is a FPP TPP Blockchain Metaverse That Allows Players To Earn With Distinctive Virtual Adventures.", - "github": "https://github.com/VerZioX", - "medium": "https://verzio-x.medium.com/", - "telegram": "https://t.me/VerZioX", - "telegramAnnouncements": "https://t.me/VerZioX_Announcements", - "twitter": "https://twitter.com/VerZio_X", - "youtube": "https://www.youtube.com/channel/UCxKQl1vt59EwvGRYuuJz30w" - } - }, - { - "chainId": 101, - "address": "6GyUtgM5ux2fa5kjnieQKgk1R1cwkLQ3SZ6c8MwiYLSs", - "symbol": "SS", - "name": "Smith Strong", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mattsmith4/crypto/main/smithstronglogo.jpg", - "tags": ["social-token", "smith-strong"] - }, - { - "chainId": 101, - "address": "B469ASyzvGkUPCoi3n7cKnXkDiYbhR3Kg7hb1MJjZYfk", - "symbol": "CoGC", - "name": "CashOutCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/CashOutGang1337/CashOutGangCoin/main/free-money-bag-icon-6384-thumb-removebg-preview.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FGr4QMQBWju7tA373pLdH8q8kRpA4uSzwE4f63NGryqH", - "symbol": "PLEBCOIN", - "name": "PlebCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FGr4QMQBWju7tA373pLdH8q8kRpA4uSzwE4f63NGryqH/PlebCoin.png", - "tags": ["social-token"], - "extensions": { - "description": "A coin that Plebs can spend" - } - }, - { - "chainId": 101, - "address": "5M1gA4nCkK6vHQvh2oGhMwFSCE3TgJNTZ1rhZR1a3o5o", - "symbol": "KAWL", - "name": "Kawaii Animal Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5M1gA4nCkK6vHQvh2oGhMwFSCE3TgJNTZ1rhZR1a3o5o/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BLSTrhpP73RnVocgRu3te1Z5bBy6kL78Cpg2WuACqFkS", - "symbol": "BLAST", - "name": "BHSG Blaster Claim Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BLSTrhpP73RnVocgRu3te1Z5bBy6kL78Cpg2WuACqFkS/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://bountyhunterspaceguild.com" - } - }, - { - "chainId": 101, - "address": "9FvJe9t8E771DJuQmJQcqygsUHgYUnXMEbEoYqiNj9ky", - "symbol": "ZEBRA", - "name": "Zebra Barcelona Design", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9FvJe9t8E771DJuQmJQcqygsUHgYUnXMEbEoYqiNj9ky/logo.png" - }, - { - "chainId": 101, - "address": "3QxMtHFY6x35Rmuh7SPSiP6EPNpFT1AEPz268KF3JH1V", - "symbol": "GHC", - "name": "GigaHub", - "decimals": 9, - "logoURI": "https://arweave.net/uHznKxrFiAG1QC2LgRhGf08ySUHLmRT3Yne4yAndXmg", - "tags": ["utility-token"], - "extensions": { - "instagram": "https://www.instagram.com/GigaHubOfficial", - "twitter": "https://twitter.com/GigaHubOfficial", - "website": "https://www.gigahub.gg/", - "youtube": "https://www.youtube.com/gigahub" - } - }, - { - "chainId": 101, - "address": "FBbYSQqfLGdJwiUyyhH3BnXaXzZdGLLaoAaihdqBhAoK", - "symbol": "KRENIUM", - "name": "Krenium", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/playsoulstone/logos/main/krenium.png", - "tags": [ - "utility-token", - "game-token", - "game-currency", - "GameFi", - "Gaming" - ], - "extensions": { - "description": "Currency for Soulstone", - "discord": "https://discord.gg/playsoulstone", - "twitter": "https://twitter.com/playsoulstone", - "website": "https://playsoulstone.com/" - } - }, - { - "chainId": 101, - "address": "QVHEgfYuDB6hrFQwzTQZ3RsBxGX3yz2b7L1sa5S1xeV", - "symbol": "SOULWL", - "name": "Soulstone WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/playsoulstone/logos/main/wltoken.png", - "tags": ["utility-token"], - "extensions": { - "description": "Soulstone WL Token for Pass Mint", - "discord": "https://discord.gg/playsoulstone", - "twitter": "https://twitter.com/playsoulstone", - "website": "https://playsoulstone.com/" - } - }, - { - "chainId": 101, - "address": "AeFr98GrcpiK4jr6gNg5V4nBQsBbo7bxUg6LrCTgRhY5", - "symbol": "AERE", - "name": "AlexCrypto", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/A1234760/logos/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FvkVzKWPWMJRuP3XjSk2aKSmf5z7W9gWAtB2HAXoZaRi", - "symbol": "LBRT", - "name": "AlbertCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/lbrtcoin/lbrt/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3aq3eikS1x7oMYWFNYXiQyhQ5KfL7khBmoaBC3Vist4X", - "symbol": "OWY", - "name": "Ownify", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3aq3eikS1x7oMYWFNYXiQyhQ5KfL7khBmoaBC3Vist4X/logo.png" - }, - { - "chainId": 101, - "address": "Fp1ZyU4NTDvrPfBUtKFPMmSCS3Yp4KvPsTX2RscMCD5g", - "symbol": "DDZ", - "name": "Doryudragonz", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Fp1ZyU4NTDvrPfBUtKFPMmSCS3Yp4KvPsTX2RscMCD5g/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "MMTXhAEoj23QQ22gYYTLfLzRhRTW58NNG5aTBXExjeE", - "symbol": "MMWL", - "name": "Miner Moose Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/MMTXhAEoj23QQ22gYYTLfLzRhRTW58NNG5aTBXExjeE/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "kdmxBtSBBodcNXLvBXcYxYREpYaMCYLKcRiRFcjuc1v", - "symbol": "KDM", - "name": "Knightdom coin", - "decimals": 9, - "logoURI": "https://www.knightdomservers.com/logo/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Knightdom", - "discord": "https://discord.gg/hfaSQ4FY3k", - "twitter": "https://twitter.com/Knightdomsol1", - "website": "https://knightdom-evolved.com" - } - }, - { - "chainId": 101, - "address": "8ZGDbxp6iRYEsLajghuALAq25sEaXcaVepH9zQXGHinN", - "symbol": "GALI", - "name": "GalipeauCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ajgalipeau/galipeau-coin/main/galipeau_coin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DrogoV6nuMsCGfhqcVMCVxGZASajgXoxN7ytUcRCQgQs", - "symbol": "DRG", - "name": "Drogo", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DrogoV6nuMsCGfhqcVMCVxGZASajgXoxN7ytUcRCQgQs/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.com/invite/VFJVFXGxR8", - "twitter": "https://twitter.com/Komododragonnft", - "website": "https://solkomodo.io/" - } - }, - { - "chainId": 101, - "address": "8d22HrxhgditkRAtjhcQLKB7gwT94L3NuKQukEuRU5ax", - "symbol": "NTC", - "name": "NTC crypto MP20", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8d22HrxhgditkRAtjhcQLKB7gwT94L3NuKQukEuRU5ax/logo.png", - "tags": ["security-token"], - "extensions": { - "website": "https://thenationaltradecenter.io/" - } - }, - { - "chainId": 101, - "address": "AEDrQREPVWLFnymPCrxDrgv4mP58CjBXDsc9YRaYbnfx", - "symbol": "FMXC", - "name": "Family Exchange Coin", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AEDrQREPVWLFnymPCrxDrgv4mP58CjBXDsc9YRaYbnfx/logo.png", - "tags": ["utility-token", "social-token", "game-token"] - }, - { - "chainId": 101, - "address": "26KSs4cds9P3p2K5q6j8xGD2yzB1Wa2pzms7AHSMhG3s", - "symbol": "ECO", - "name": "EcoToken", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/26KSs4cds9P3p2K5q6j8xGD2yzB1Wa2pzms7AHSMhG3s/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/MfBAZ6eQcW", - "twitter": "https://twitter.com/THEecoToken", - "website": "http://eco-token.io" - } - }, - { - "chainId": 101, - "address": "9PYyJoGv5WVht6X7i4znDnPjRKinRhFdiA27yFRRxXqB", - "symbol": "BD", - "name": "BlueDiamonds", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9PYyJoGv5WVht6X7i4znDnPjRKinRhFdiA27yFRRxXqB/logo.png", - "tags": ["community-token", "social-token", "utility-token"], - "extensions": { - "description": "Native token of the BlueDiamonds marketplace", - "twitter": "https://twitter.com/BlueDiamondsNFT", - "website": "https://www.bluediamonds.app/" - } - }, - { - "chainId": 101, - "address": "TjvBEgrhTeCgoSV2TY9QkpFHv3VVcirHSuoT9Zya8uM", - "symbol": "THE", - "name": "The", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/the-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HhyziMR2vkGCVddCMM2AUw3D2pjXCoo7qrNkuQKoYBF5", - "symbol": "WHY", - "name": "Y", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/why-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FZ4kX4dDwhF8HSaczN8TkvcRNUZrtt4uyMDwCiHQye34", - "symbol": "ZE", - "name": "Z", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/ze-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8DYP1ciF5mXCWFsbFfq7mPL15fXbFHcUUE7rnAY7Adbh", - "symbol": "M", - "name": "M", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/m-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3qnhg34K5A38NtQXrj3yxQhY3Gc1pMKSd32hAHkKNbKi", - "symbol": "WIS", - "name": "Wisdom", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/wis-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "77P22CtARq4rPGBW7suWJnWDhqJPHN85ZP6x9rXmK2n2", - "symbol": "J", - "name": "J", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/j-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GLVapw9LW3ekMfFFNwgt1GepnCAJUJATVadUZMi5Vm8d", - "symbol": "GIDDI", - "name": "Giddiness", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/giddi-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FbDc92eS9HzcMhWZb3nEtMH9nMLDxAnWnBG2fACENPCR", - "symbol": "LIK", - "name": "Like", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/lik-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DdRGrcVXQ2t5ma2eDhmvKrXcCYWyTop2TxtrXCrT1c3e", - "symbol": "AND", - "name": "And", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/and-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "C4fxCuEcvvN1AL19tVtxdGc9GkChho1TB3zSF1QwsATQ", - "symbol": "KRHN", - "name": "Krahn", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/krhn-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7e1mJRetJSAj3nZDmjZFKoBGoRHSbbVogTsWSzTVdf5", - "symbol": "KA", - "name": "K", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/ka-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "37c3ecpSo9zXu8SaUWKRLPEGAfR24gwxcEMMjpD9rPrj", - "symbol": "REST", - "name": "Rest", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/rest-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9NQGZmX19HkLFSvzT6X1BVmrSX1WtwxWbxHTfyDAdcty", - "symbol": "JAM", - "name": "Jam", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/jam-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6poRXXpCjk5UfLw4tz7vVHiK7MHHxQrjaUStmy65YtFq", - "symbol": "MON", - "name": "Monday", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/mon-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CfM5L3bx9Qp5KWoyjBZ67p2d6RFbzgUTrm865KKC9yPZ", - "symbol": "APRV", - "name": "Approval", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/aprv-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FNuzzAmiz8Mqspggzyt3fmm3CtjMw1175P2Bubfys8p1", - "symbol": "X", - "name": "X", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/x-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "59iYkEjvKmHUyNDBjVyVLV9PQViAeMi2rjxRuw4ZuUhv", - "symbol": "S", - "name": "S", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/s-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6E2wrGGFudaapNmmxE5BoQc3pNr3xJwe2zoNPw5VkjpB", - "symbol": "FRI", - "name": "Friday", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/fri-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "jWWi8vp5q8hcNdxQpqbJNMJ2aDpz5t8SoB1dkzYS7CL", - "symbol": "BD$", - "name": "Businessdogs Token", - "decimals": 6, - "logoURI": "https://i.redd.it/pap3i9ua8g421.png", - "tags": ["utility-token"], - "extensions": { - "description": "Businessdogs Token is used in Businessdogs P2E game on Solana", - "twitter": "https://twitter.com/BusinessdogsP2E", - "website": "https://businessdogs.eu/" - } - }, - { - "chainId": 101, - "address": "4fTHuf78kxMJQXXZbuMknYpLLsDAWPxtghPMJ4NiGh1e", - "symbol": "LEOJ", - "name": "Leocoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/leoj9099/cripto/8f26001f0c5169d5546d81c241f3880c856336ce/leeocoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EJuWBuoFjnrjKcgcgmegimSqS6RCyAh99EwMFfT2oo5", - "symbol": "AMZ3", - "name": "Amazon Tree Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EJuWBuoFjnrjKcgcgmegimSqS6RCyAh99EwMFfT2oo5/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "BqT6xtDKXewmNFhf7E2bT6uzJvdwXJupgSurrnj2zt2z", - "symbol": "KBT", - "name": "KARBAR TOKEN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Karbar97/crypto/main/logo-min.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "C4ug39iNuqRPzN6SWvbmwi8frSfbVdhmXLagJUic8akZ", - "symbol": "SOLP", - "name": "SolPensions", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solpensions/token-list/main/assets/mainnet/C4ug39iNuqRPzN6SWvbmwi8frSfbVdhmXLagJUic8akZ/logo.png" - }, - { - "chainId": 101, - "address": "8ezfbtjtkHZPCqiLiSUbAr1eyVfRreNGwWFfXJRuhAu1", - "symbol": "LBTC", - "name": "LibertCoin", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8ezfbtjtkHZPCqiLiSUbAr1eyVfRreNGwWFfXJRuhAu1/logo.png", - "tags": ["security-token"] - }, - { - "chainId": 101, - "address": "44wwZtdrnm2PsEYAQWUwFVQQMjTSkNouLU2o2jXJYxid", - "symbol": "WG59", - "name": "Wiseguy59", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/ksyzman/wg59/main/3-2.png", - "tags": ["community-token", "social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "3HVG8MLMAsu1Rd7gEkQ2K7HrsjpzV6Em3hp5Ug1V3ds1", - "symbol": "FRP", - "name": "Filthy Rich Pups Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/Filthy-Rich-Pups-NFT/assets/main/assets/frp_token.png", - "tags": ["NFT", "utility-token"] - }, - { - "chainId": 101, - "address": "3EW2p6Dy6a3zNTfcetFFopzvv253xQzMHstBJv7wCgSt", - "symbol": "ARPT", - "name": "Alien Rappers Prize Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3EW2p6Dy6a3zNTfcetFFopzvv253xQzMHstBJv7wCgSt/logo.png", - "tags": ["utility-token", "mint-token", "whitelist"], - "extensions": { - "description": "The Coin for Alien Rappers NFT free mint.", - "discord": "https://discord.com/invite/alienrappersclub", - "instagram": "https://www.instagram.com/alienrappersclub/", - "twitter": "https://twitter.com/AlienRappers", - "website": "https://alienrappers.com/" - } - }, - { - "chainId": 101, - "address": "A8fP2qLT1Min6pwP52LgV8j2UmuskwDUgSmVUGGyQ6o7", - "symbol": "LILV", - "name": "Lily Love", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Kcam9908/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Bxui1LezmVUhS5P7oo8YcLx11E1EgLk4CUbkFDTSXKTm", - "symbol": "$BTCSEA", - "name": "BTCSEA Trademark 2", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Bxui1LezmVUhS5P7oo8YcLx11E1EgLk4CUbkFDTSXKTm/logo.png", - "tags": ["btcnftsea-io", "trademark"], - "extensions": { - "website": "https://btcnftsea.io/" - } - }, - { - "chainId": 101, - "address": "4uUzZtoVvpdbq4yKSTcEZbu3LxohNhnoYBBksfFtqUcu", - "symbol": "SEABTC", - "name": "BTCSEA Trademark SEABTC", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4uUzZtoVvpdbq4yKSTcEZbu3LxohNhnoYBBksfFtqUcu/logo.png", - "tags": ["btcnftsea-io", "trademark"], - "extensions": { - "website": "https://btcnftsea.io/" - } - }, - { - "chainId": 101, - "address": "7XjqFj9B7NuTmnVqMtWb1fFg62bMTVAosnHuvavYotgs", - "symbol": "$SEABTC", - "name": "BTCSEA Trademark SEABTC 2", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7XjqFj9B7NuTmnVqMtWb1fFg62bMTVAosnHuvavYotgs/logo.png", - "tags": ["btcnftsea-io", "trademark"], - "extensions": { - "website": "https://btcnftsea.io/" - } - }, - { - "chainId": 101, - "address": "8rnKM5ZHYtNRym2GKSnA7rgm9fUddDY4RZQtKus9h5Vc", - "symbol": "BTSEA", - "name": "BTCSEA Trademark BTSEA", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8rnKM5ZHYtNRym2GKSnA7rgm9fUddDY4RZQtKus9h5Vc/logo.png", - "tags": ["btcnftsea-io", "trademark"], - "extensions": { - "website": "https://btcnftsea.io/" - } - }, - { - "chainId": 101, - "address": "FBUfMhucixFJEFUh4CrDH5h5RwzCZP6Cs5CD8XZcuioC", - "symbol": "$BTSEA", - "name": "BTCSEA Trademark BTSEA 2", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FBUfMhucixFJEFUh4CrDH5h5RwzCZP6Cs5CD8XZcuioC/logo.png", - "tags": ["btcnftsea-io", "trademark"], - "extensions": { - "website": "https://btcnftsea.io/" - } - }, - { - "chainId": 101, - "address": "38GtEzk73ic2YNX9eaoZk7CTmMF2jFcAjptRLoYkeFQf", - "symbol": "BSEA", - "name": "BTCSEA Trademark BSEA", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/38GtEzk73ic2YNX9eaoZk7CTmMF2jFcAjptRLoYkeFQf/logo.png", - "tags": ["btcnftsea-io", "trademark"], - "extensions": { - "website": "https://btcnftsea.io/" - } - }, - { - "chainId": 101, - "address": "BBfGFC4Wu5wsPqeWxYZoA3M22ChcnVCvoTYCfHT7EYBK", - "symbol": "$BSEA", - "name": "BTCSEA Trademark BSEA 2", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BBfGFC4Wu5wsPqeWxYZoA3M22ChcnVCvoTYCfHT7EYBK/logo.png", - "tags": ["btcnftsea-io", "trademark"], - "extensions": { - "website": "https://btcnftsea.io/" - } - }, - { - "chainId": 101, - "address": "6wu9hyd6gEvAzfEE8r6gf3NMRPrZYQQ7tfgccbZRmWxX", - "symbol": "BITSEA", - "name": "BTCSEA Trademark BITSEA", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6wu9hyd6gEvAzfEE8r6gf3NMRPrZYQQ7tfgccbZRmWxX/logo.png", - "tags": ["btcnftsea-io", "trademark"], - "extensions": { - "website": "https://btcnftsea.io/" - } - }, - { - "chainId": 101, - "address": "7GphmB52nxymz5aoUKk6MascqpoCoJLyPKCH9Dfbti4h", - "symbol": "$BITSEA", - "name": "BTCSEA Trademark BITSEA 2", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7GphmB52nxymz5aoUKk6MascqpoCoJLyPKCH9Dfbti4h/logo.png", - "tags": ["btcnftsea-io", "trademark"], - "extensions": { - "website": "https://btcnftsea.io/" - } - }, - { - "chainId": 101, - "address": "G2PYNu3XS3XQndSof5DffP4QPCzcJ35SAB6a3WuYEgvL", - "symbol": "BCSEA", - "name": "BTCSEA Trademark BCSEA", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/G2PYNu3XS3XQndSof5DffP4QPCzcJ35SAB6a3WuYEgvL/logo.png", - "tags": ["btcnftsea-io", "trademark"], - "extensions": { - "website": "https://btcnftsea.io/" - } - }, - { - "chainId": 101, - "address": "AhE4DhAUVtqHEFhMp8oRdRgcyCg6Qk3G45QbaQ4vyshB", - "symbol": "HOLLO", - "name": "Hollo Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/lddcoding/crypto/main/download.jpg?token=GHSAT0AAAAAABR2FOB7KI2KXGMO6PBLGSEWYQUIKAQ", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "24GFfEuzkowwZTZubpATywEhNYBqvPyAwmgRjBesEM4q", - "symbol": "BEACON", - "name": "Sol Visitors Beacon", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/gserafini/solvisitors/main/coin.png", - "tags": ["utility-token"], - "extensions": { - "description": "Beacon is a utility token used in the Sol Visitors universe.", - "discord": "https://discord.gg/TF7zW5q9Ur", - "instagram": "https://www.instagram.com/solvisitors/", - "twitter": "https://twitter.com/SolVisitors", - "website": "https://solvisitors.com/" - } - }, - { - "chainId": 101, - "address": "G6F2CBnm4zWb4QieAZkgw83Y19bMv3sBGMQjxt3Z62Qs", - "symbol": "$BCSEA", - "name": "BTCSEA Trademark BCSEA 2", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/G6F2CBnm4zWb4QieAZkgw83Y19bMv3sBGMQjxt3Z62Qs/logo.png", - "tags": ["btcnftsea-io", "trademark"], - "extensions": { - "website": "https://btcnftsea.io/" - } - }, - { - "chainId": 101, - "address": "En5yRm9njDZBVZn1mHdRrWv9UgxrHmF53MwgaF28eEe6", - "symbol": "SEABT", - "name": "BTCSEA Trademark SEABT", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/En5yRm9njDZBVZn1mHdRrWv9UgxrHmF53MwgaF28eEe6/logo.png", - "tags": ["btcnftsea-io", "trademark"], - "extensions": { - "website": "https://btcnftsea.io/" - } - }, - { - "chainId": 101, - "address": "5wH8pmmyfFXJ95gWHC7MZpbJ4WjigKM2g2hiny6ckkCo", - "symbol": "$SEABT", - "name": "BTCSEA Trademark SEABT 2", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5wH8pmmyfFXJ95gWHC7MZpbJ4WjigKM2g2hiny6ckkCo/logo.png", - "tags": ["btcnftsea-io", "trademark"], - "extensions": { - "website": "https://btcnftsea.io/" - } - }, - { - "chainId": 101, - "address": "4g2V1EznZfv87Hip8XYGmtT59CKZEvwJUnde8HXAGL9z", - "symbol": "SEAB", - "name": "BTCSEA Trademark SEAB", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4g2V1EznZfv87Hip8XYGmtT59CKZEvwJUnde8HXAGL9z/logo.png", - "tags": ["btcnftsea-io", "trademark"], - "extensions": { - "website": "https://btcnftsea.io/" - } - }, - { - "chainId": 101, - "address": "mgJgz62i7d1iXK8ugT6a8XewrWo4s3QxcZt8pnzFtpr", - "symbol": "$SEAB", - "name": "BTCSEA Trademark SEAB 2", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/mgJgz62i7d1iXK8ugT6a8XewrWo4s3QxcZt8pnzFtpr/logo.png", - "tags": ["btcnftsea-io", "trademark"], - "extensions": { - "website": "https://btcnftsea.io/" - } - }, - { - "chainId": 101, - "address": "HMJKrgLEsQKy4usVDWQRBABReBf9e9YLyxEk3TJEi6XJ", - "symbol": "SEABC", - "name": "BTCSEA Trademark SEABC", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HMJKrgLEsQKy4usVDWQRBABReBf9e9YLyxEk3TJEi6XJ/logo.png", - "tags": ["btcnftsea-io", "trademark"], - "extensions": { - "website": "https://btcnftsea.io/" - } - }, - { - "chainId": 101, - "address": "BEq1jCvCUNETAEhhz2txCVKzRXzKPwCK1GmbnoSxbCNq", - "symbol": "$SEABC", - "name": "BTCSEA Trademark SEABC 2", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BEq1jCvCUNETAEhhz2txCVKzRXzKPwCK1GmbnoSxbCNq/logo.png", - "tags": ["btcnftsea-io", "trademark"], - "extensions": { - "website": "https://btcnftsea.io/" - } - }, - { - "chainId": 101, - "address": "BezfkxAoSXhTpdx2nuU5CoPVmVgmjNKAL4YThpY92VGw", - "symbol": "AHA", - "name": "SunnySideUp Event Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BezfkxAoSXhTpdx2nuU5CoPVmVgmjNKAL4YThpY92VGw/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "HMnKqbxrfeBy4HV7yVrETefRoTwxKTe9uwCnTQCyqjxf", - "symbol": "SAT", - "name": "Samosa Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/hacking-life/samosa-solana-crypto-token-data/main/logo.PNG", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FoeJwGaHvudz1bB64Y5XJbrGSx1CTZV7SmPesn2zGDdk", - "symbol": "JOR", - "name": "Jorbtoken", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/LouisDeSimone/fiverrImagestokens/main/jorbtoken.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2jnRj78ouLDPMoerggzojuz8HHYHH7h9rq6G8SbVpcq7", - "symbol": "TOPIA", - "name": "Topia", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2jnRj78ouLDPMoerggzojuz8HHYHH7h9rq6G8SbVpcq7/logo.png", - "tags": ["topia"], - "extensions": { - "twitter": "https://twitter.com/TopiaCryptoCoin", - "website": "http://topiacrypto.com/" - } - }, - { - "chainId": 101, - "address": "3JBbgfLJdp5NYjpQ5CdKYqCA9LCwimF7AMZsUyPoQ4Hk", - "symbol": "TOOT", - "name": "Toot", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3JBbgfLJdp5NYjpQ5CdKYqCA9LCwimF7AMZsUyPoQ4Hk/tootcoin.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "6wrpsKQ7bHWRqg9paHfcWjepxVCajWvHwWNozoaQ4QqR", - "symbol": "BMBA", - "name": "Bomba Anarchica Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SolanaTokenMerger/Bomba-Anarchica-Coin/main/logo.png", - "tags": [ - "utility-token", - "social-token", - "community-token", - "meme-token", - "bombaAnarchica-token" - ] - }, - { - "chainId": 101, - "address": "8C3CwsUB1ePoWrgxJ2wd76D9byGWviYuK1gcfSTNUbnV", - "symbol": "CRP/SOL", - "name": "Cropper LP token (CRP/SOL)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "7M1E2H2nYZRnFApXmqJiX2hXYBnXh4PEFaUvcnrTgQ3J", - "symbol": "ARAUC", - "name": "Araucaria", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/ffurtuoso/tree/main/token/araucaria2.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "EmaXkycuar2Ve2uXx6o1Gq5PVM3uPDuxaotW892VHxr4", - "symbol": "GDJ", - "name": "Good Job Token", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/biogwen/goodjob/main/Done.png", - "tags": ["Community-token", "utility-token"] - }, - { - "chainId": 101, - "address": "FKckG972VE5yGEsHLwL9MfGEXTaYTvEn9KZ4Qf22dTgc", - "symbol": "SOI", - "name": "SOI Finance", - "decimals": 9, - "logoURI": "https://soi.ink/soi-token-logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://soi.ink" - } - }, - { - "chainId": 103, - "address": "2Q1WAAgnpEox5Y4b6Y8YyXVwFNhDdGot467XfvdBJaPf", - "symbol": "tUSDC", - "name": "Test USD Coin (LP Finance Devnet)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/LP-Finance-Inc/token-image/main/USDC.png", - "tags": ["stablecoin", "LP-Finance"], - "extensions": { - "telegram": "https://t.me/LP_Defi_Official_group", - "twitter": "https://twitter.com/LPFinance_", - "website": "https://www.lp.finance" - } - }, - { - "chainId": 103, - "address": "Hv96pk4HkhGcbNxkBvb7evTU88KzedvgVy2oddBB1ySB", - "symbol": "tBTC", - "name": "Test Bitcoin (LP Finance Devnet)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/LP-Finance-Inc/token-image/47faa0410931bbdee2164773bffa906060c45c82/BTC.svg", - "tags": ["wrapped"], - "extensions": { - "telegram": "https://t.me/LP_Defi_Official_group", - "twitter": "https://twitter.com/LPFinance_", - "website": "https://www.lp.finance" - } - }, - { - "chainId": 101, - "address": "7TEcMnoVJtZgpWCdnLu8X15bTtnt4J2zZyBxfV7i2uw7", - "symbol": "xDOGE", - "name": "Synthetic DOGE", - "decimals": 9, - "logoURI": "https://www.synthetify.io/icons/xdoge.svg", - "extensions": { - "coingeckoId": "dogecoin", - "twitter": "https://twitter.com/synthetify", - "website": "https://synthetify.io/" - } - }, - { - "chainId": 101, - "address": "PkwrevuR6k3QHAdPUHWWhdqMmjgnHUvdSun9GJmsRvk", - "symbol": "EDIN", - "name": "Edinar", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mrreith/edinar/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3jb1kbPZjhFx9hdGE9CPs838B5UZDmrirbhw6aKMJmEA", - "symbol": "HNYDRP", - "name": "Honeydrop", - "decimals": 0, - "logoURI": "https://github.com/kipland-m/Honeydrop/blob/master/logo.png?raw=true", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GKbCjKB7jLjUiSHPReXA6c7VkSRRt4iMeGqTqrSBMkPA", - "symbol": "FROST", - "name": "Frost", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/nooballday8/tatocrypto/main/Frost.PNG", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GurTvmWDmaZmUTqMFsctZaKGVPocbDXyrT6UJiT5YR9X", - "symbol": "STY", - "name": "STRAY", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GurTvmWDmaZmUTqMFsctZaKGVPocbDXyrT6UJiT5YR9X/Logo.png", - "tags": ["gaming-token", "utility-token", "social-token"], - "extensions": { - "discord": "https://discord.gg/strayapes", - "twitter": "https://twitter.com/StrayApesNFT", - "website": "https://strayapesnft.com" - } - }, - { - "chainId": 101, - "address": "6VnsFohk6CQbaXoPTiQr5bHruEnuCqg94iwmnwrUj72M", - "symbol": "IMMORTAL", - "name": "IMMORTAL Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/DemonKingdomNFT/DemonKingdomN/main/DemonKingdomPFP.jpg", - "tags": ["Community-token", "utility-token"], - "extensions": { - "twitter": "https://twitter.com/demonkingdomnft", - "website": "https://demonkingdomnft.com/" - } - }, - { - "chainId": 101, - "address": "WLmzvH6aA31vA8hZ1bptVemSoiBc8fm6J4LRXzHZmCF", - "symbol": "matE", - "name": "MateysDAO 2/22 Whitelist token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WLmzvH6aA31vA8hZ1bptVemSoiBc8fm6J4LRXzHZmCF/icon.png", - "tags": ["social-token", "whitelist"] - }, - { - "chainId": 101, - "address": "3mnScz1CPoHdtRxsakdT8LH7b4VC3AUBeUh1GyGZUqq1", - "symbol": "NXA", - "name": "NXA Bra", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/cryptopher17/crypto/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "SYDetWjb2SZ4G2PsEkdk1xX9Hmu4WV3Dn2CyGG2sKq9", - "symbol": "ANYM", - "name": "anymous3", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/anymouse20/crypto/main/logo_size_invert.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "F2YCY4WQqZY6qAiSfmwM9bjdnVhRsZ4oYA5fk6vVNLQv", - "symbol": "CHELA", - "name": "Chela Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/metadanx/chela/main/logo.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "5AHzHDUiamGAwiVs8pXJuJmigqJWopwtcp2voieL1oWP", - "symbol": "CRPT", - "name": "Corrupted Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/thefalseshad0w/crpt-token-/main/5AHzHDUiamGAwiVs8pXJuJmigqJWopwtcp2voieL1oWP/crpt.png", - "tags": ["Community-token", "utility-token"], - "extensions": { - "twitter": "https://twitter.com/Babychimps_nft", - "website": "https://babychimps.xyz/" - } - }, - { - "chainId": 101, - "address": "DarFue7o1rT1vGwSjkJ9MpYKVMtyAQNUfR4dyUDvCRk9", - "symbol": "VCOIN", - "name": "Viking's coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/iLaD08/crypto/main/logo.jpg" - }, - { - "chainId": 101, - "address": "2MpDzukPY4UEhrPVQFXWXKw5UMJZvhYjmsEqeNLkTxzQ", - "symbol": "MT", - "name": "M-test", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2MpDzukPY4UEhrPVQFXWXKw5UMJZvhYjmsEqeNLkTxzQ/MT.png" - }, - { - "chainId": 101, - "address": "4qr4rD2w47LC2aYj1Dd1sjmEcf4r9VXLB3jvZYvu225i", - "symbol": "A1C", - "name": "Fenix Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Jacobb0319/cryptologo/main/A1CLogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CkTT6bUw9DWtnrkhJmUPTgWB9TvVy4sHgX3mmFNw1v1C", - "symbol": "NNTICKET", - "name": "NEO-NINJA MINT TICKET", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CkTT6bUw9DWtnrkhJmUPTgWB9TvVy4sHgX3mmFNw1v1C/logo.png", - "tags": [ - "community-token", - "utility-token", - "social-token", - "NFTs", - "DeFi" - ], - "extensions": { - "website": "https://neo.ninjaprotocol.io/" - } - }, - { - "chainId": 101, - "address": "6HzndwRRT1Eamf8pFZxikuFPHcRkp6457fUcxFACZK7H", - "symbol": "YDWK", - "name": "YardCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/d-smith/notes/master/solana/shovels.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HmXgJwUzWfuvCZzUkbzVKYGggjjbq6qy1meKpPitj7Xu", - "symbol": "GLORY", - "name": "GLORIOUS TOKEN", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/GloriousXican/ASSETS/main/coin-sglory.png", - "tags": [ - "utility-token", - "game-token", - "game-currency", - "GameFi", - "Gaming" - ], - "extensions": { - "twitter": "https://twitter.com/GeckosNFT", - "website": "https://gloriousgeckos.com/" - } - }, - { - "chainId": 103, - "address": "CWWjhM7bKQQGTJNbPGTfMYBdM8WkKgrePufgUKXzHqne", - "symbol": "GAGO", - "name": "GaGoats NFT Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CWWjhM7bKQQGTJNbPGTfMYBdM8WkKgrePufgUKXzHqne/logo.png", - "tags": ["gagoats-nft", "whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/GaGoatsNFT" - } - }, - { - "chainId": 101, - "address": "etCPUaMghWobVwxug5Vgxb6r3A7DEBdLKUywrnDrJeZ", - "symbol": "JFICALL", - "name": "May 1 JFI Call", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/etCPUaMghWobVwxug5Vgxb6r3A7DEBdLKUywrnDrJeZ/logo.png", - "tags": ["option-contract"], - "extensions": { - "description": "Psyoptions call option on the Jungle Finance token.", - "website": "https://psyoptions.io/" - } - }, - { - "chainId": 101, - "address": "SKu11EypaFU3gvr8VSAbi13zEC2CPvqbz9s83N3tWHM", - "symbol": "SKULL", - "name": "Skeleton Crew", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SKu11EypaFU3gvr8VSAbi13zEC2CPvqbz9s83N3tWHM/logo.png", - "tags": ["NFT", "utility-token"], - "extensions": { - "discord": "https://discord.gg/skeletoncrewrip", - "twitter": "https://twitter.com/skeletoncrewrip", - "website": "https://skeletoncrew.rip/" - } - }, - { - "chainId": 101, - "address": "Cfafd52FfHRA5FRkTXmMNyHZfhNkbaHpZ12ggmeTVEMw", - "symbol": "cFAF", - "name": "Friends and Family Council Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Cfafd52FfHRA5FRkTXmMNyHZfhNkbaHpZ12ggmeTVEMw/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://find-and-update.company-information.service.gov.uk/company/13753949" - } - }, - { - "chainId": 101, - "address": "FAFDfoUkaxoMqiNur9F1iigdBNrXFf4uNmS5XrhMewvf", - "symbol": "FAF", - "name": "Friends and Family Community Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FAFDfoUkaxoMqiNur9F1iigdBNrXFf4uNmS5XrhMewvf/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://find-and-update.company-information.service.gov.uk/company/13753949" - } - }, - { - "chainId": 101, - "address": "rQKXfgBtTZTpywvZQdPGspUDvx2navMx2gmm3CXNsEN", - "symbol": "POLY", - "name": "Apolycapse Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Polycapse/assets/main/Poly%20log.png", - "tags": ["gaming-token", "utility-token", "social-token"], - "extensions": { - "discord": "https://discord.gg/3NtrDUC9", - "telegram": "https://t.me/apolycapsegame", - "twitter": "https://twitter.com/ApolycapseGame", - "website": "https://apolycapse.com/" - } - }, - { - "chainId": 101, - "address": "Bcuzen8nWgPQH2wCKiZbB3R8HS5CCEN3hxVwTVPEATPg", - "symbol": "ARMYWL", - "name": "Bears Army Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Bcuzen8nWgPQH2wCKiZbB3R8HS5CCEN3hxVwTVPEATPg/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/beararmy_" - } - }, - { - "chainId": 101, - "address": "AwrdDfbE7CP69kpiEctdtE2YJvr42kKw3rXiCYgFJp85", - "symbol": "HOBO", - "name": "Drifting Hobo Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/DriftingHobo/Crypto/main/DriftingHoboCoTokenImage.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8TZa4rcPSY5yFw3wLHDpVL6ASjrVbuBmQV5p18tmUcfW", - "symbol": "FUNCO", - "name": "Family Fun Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/anymouse20/crypto/main/FUNC.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DjSiNBBFraAmd2mUHn6ScQaJgovNB6HxPUqSpherE77D", - "symbol": "UPAY", - "name": "UniPay", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/UniPayToken/coinlogo/main/pixil-frame-0%20(1).png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "BzwERW2s5brUYtt3jvobVQn64uxXYRrz81Yx6vYpJorE", - "symbol": "$SPOT", - "name": "SPOT", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/ViralCC/Spot/main/spot.jpg", - "tags": ["community-token", "dog-token", "dog", "nfts", "meta"] - }, - { - "chainId": 101, - "address": "3195WFU2ZdULUv4NJbVR3DKEimutMApZnCeJ8fo1CUyx", - "symbol": "MC", - "name": "Metaverze Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3195WFU2ZdULUv4NJbVR3DKEimutMApZnCeJ8fo1CUyx/logo.png", - "tags": ["social-token", "MC"] - }, - { - "chainId": 101, - "address": "4aertukCfmJpy7bf7rEx8JXvFi8ed8jNt3z9rLUjRjoV", - "symbol": "FULBO", - "name": "FulboStars", - "decimals": 9, - "logoURI": "https://fulbostars.com/logotoken.png", - "tags": ["social-token", "gaming-token", "nft-token", "community-token"] - }, - { - "chainId": 101, - "address": "Ax6SeCjhCR8rnAPSR5VrT5K47XPQi4moRAF2oV2Fzknt", - "symbol": "JOCKY", - "name": "Aloo Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Ax6SeCjhCR8rnAPSR5VrT5K47XPQi4moRAF2oV2Fzknt/JLogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HQAxChVaeiESe9JN3LiRfLh1DM4g5MtGrbQTu3MwjjGa", - "symbol": "ZWL", - "name": "Zezam Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HQAxChVaeiESe9JN3LiRfLh1DM4g5MtGrbQTu3MwjjGa/zezam.png", - "tags": ["whitelist"] - }, - { - "chainId": 101, - "address": "ES6xz8FR8a5fP31ePeeKGR7HcgtzjQAQdHfGmcR3Uer7", - "symbol": "ROAR", - "name": "ROAR", - "decimals": 9, - "logoURI": "https://arweave.net/WPbvoC2Wx2obrPtJtMYLpenZqz31KJClHTSxGpcqesw", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/LostLionsNFT" - } - }, - { - "chainId": 103, - "address": "BTyZwy5VVWBrgnppQR2wzmZeBwyct7EkTbuGt4L4epe8", - "symbol": "SOBE", - "name": "SoBe", - "decimals": 9, - "logoURI": "https://github.com/MattyMonk/sobe-swap/blob/master/sobe%20swap%20logo.png", - "tags": ["whitelist"] - }, - { - "chainId": 101, - "address": "8VLj4dYPEQSsQBcbopjBiwdStUUpVUkcLmUa5qWHE7AW", - "symbol": "SPCO", - "name": "SPACCOIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/spaccoin1/SPACCOIN/main/spaccoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FvBZo7dEFasSB9vottYnuLvLy3br5pkbC1NXDdCVa4wQ", - "symbol": "MHV", - "name": "MetaHeaven Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FvBZo7dEFasSB9vottYnuLvLy3br5pkbC1NXDdCVa4wQ/logo.png", - "tags": [ - "community-token", - "metaheaven", - "NFT", - "metagod", - "metaheaven-coin", - "crypto" - ], - "extensions": { - "twitter": "https://twitter.com/metaheaven_", - "website": "https://metaheaven.land/" - } - }, - { - "chainId": 101, - "address": "J47E3RbXNsUmFzYryWgjnVdTKqeTARW55NwYRVYZmQxm", - "symbol": "DHCO", - "name": "Drifting Hobo Co Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/DriftingHobo/Newcrypto/main/DHCOLogo.png", - "tags": ["social-token"], - "extensions": { - "facebook": "https://www.facebook.com/DriftingHoboCo/", - "instagram": "https://www.instagram.com/driftinghoboco/", - "twitter": "https://twitter.com/DriftingHoboCo", - "website": "https://www.thedriftinghobo.com/" - } - }, - { - "chainId": 101, - "address": "EeHA7rkU2LauYCG8P6HJMTJq4qG38EokMfa6hDRDmdZt", - "symbol": "$POOOOPY", - "name": "POOOPY ", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EeHA7rkU2LauYCG8P6HJMTJq4qG38EokMfa6hDRDmdZt/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://google.com" - } - }, - { - "chainId": 101, - "address": "EeLpRX4pgS4zPTQQfoHqqhBvoLzL83wPExmQoG5e1hnb", - "symbol": "CRAFT", - "name": "CRAFT COIN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SolPatrol/SolPatrol/main/craft-token.png", - "tags": ["NFT"] - }, - { - "chainId": 101, - "address": "F83hqnjNA2g6RZBPUovAA7n3U2CVnmxzacBcv9WJgirD", - "symbol": "GIBT", - "name": "gib basc tigur", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SolPatrol/SolPatrol/main/dab-island.png", - "tags": ["NFT"] - }, - { - "chainId": 101, - "address": "6JiPyJdjh8HdA4G3qHVD7oxrUUdaqBSR833DD46nFDyF", - "symbol": "$BRAP", - "name": "BRAP", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6JiPyJdjh8HdA4G3qHVD7oxrUUdaqBSR833DD46nFDyF/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "zZ9b792xCst7Sqd1MwJhtr1CXtdXosNGzBqYKFdYxiF", - "symbol": "COZI", - "name": "CoziCorners", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/zZ9b792xCst7Sqd1MwJhtr1CXtdXosNGzBqYKFdYxiF/CoziCorners.png", - "tags": ["CoziCorners"] - }, - { - "chainId": 101, - "address": "GRe7S2RHJBSiQXaATZEHtT275j4tPPfnPsEZzZJMK8YN", - "symbol": "HZC", - "name": "HazelCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Ahazel94/HazelCoin/main/HazelTokenLogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "J4zm9yxF7PtevLzjkreF2hebTEiazJUrW2ee1UNTqG8E", - "symbol": "FPC", - "name": "Footprint Coin", - "decimals": 2, - "logoURI": "https://fpc-static.s3.amazonaws.com/logo/1024-main.png", - "tags": ["Carbon-Footprint", "Electric-Vehicle", "greentech"], - "extensions": { - "description": "We distribute Footprint Coin as a reward for driving electric vehicles.", - "facebook": "https://www.facebook.com/Footprintcoin-101162415827069", - "twitter": "https://twitter.com/footprintcoin", - "website": "http://www.footprintcoin.io//" - } - }, - { - "chainId": 101, - "address": "5Z8JqL2kaGYT7cPaxSoCPT18pKmRudxVNHV3ny6qyNXW", - "symbol": "PRIM", - "name": "Primate Academy", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Phnmz/crypto/main/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "6frkvZf72wiz3uqRWhBqLftNU4PS6XXYCoNrW9P4CFdK", - "symbol": "QUACK", - "name": "QUACK", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GP9zY2D8CgMreoUdYQjyn7Fo7XCq9ubVnX3u4ot1wpgt/logo.png", - "tags": ["social-token", "utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/DuckPatrolNFT", - "website": "https://duckpatrol.io/" - } - }, - { - "chainId": 101, - "address": "7BtSRTCk3BZkjmWvoLtP8igJTRcbACWrYHaNCv7ASRdt", - "symbol": "CHUD", - "name": "Chud Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/rolandstudios/CHUD/main/logo.png", - "tags": ["gaming-token", "utility-token", "social-token"], - "extensions": { - "twitter": "https://twitter.com/roland_studios", - "website": "https://rolandstudios.com" - } - }, - { - "chainId": 101, - "address": "KDQXUUqSCAYhMNxsaQLQNwt37AnZqfeo9SK9uiWeTsz", - "symbol": "AGE", - "name": "MetaAge", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/MetaAge/MetaAge/main/logo.png", - "tags": ["Metaverse-Token", "gaming-token", "play-2-earn"], - "extensions": { - "twitter": "https://twitter.com/metaagee" - } - }, - { - "chainId": 101, - "address": "2NQr8337ZRhcCcor6BLbgYKQvxrP22mhHXdMncbC1w5P", - "symbol": "IDNT", - "name": "Identigo", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Rodnaf34/crypto/main/Logo_Blue_Green.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DXrpamQ5BPPDrrUTEVuwJdCT5Ut7eFPb79131xoYQHcs", - "symbol": "RSC", - "name": "RScoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/NKMirzoyan/rscoin/main/logo.PNG", - "tags": ["social-token", "gaming-token"] - }, - { - "chainId": 101, - "address": "6Rsus663WdHRFEfRZ6rPzEsvZCdiFRcukgjUkYLPTayL", - "symbol": "APEXAPES$", - "name": "APEXAPES WL Token", - "decimals": 0, - "logoURI": "https://imagedelivery.net/aAmca-Po70V1nH4n9cT-uA/5e989673-a536-44d6-835e-89087e256500/public", - "extensions": { - "discord": "https://discord.gg/apexapes", - "twitter": "https://twitter.com/apex_apes", - "website": "https://apexapes.io" - } - }, - { - "chainId": 101, - "address": "8CjTkVDkbAJi5KjAyEh6La2XJ9QyRJr3umRh5LzpBHse", - "symbol": "GUARANTEE", - "name": "Blocked EuroSol", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8CjTkVDkbAJi5KjAyEh6La2XJ9QyRJr3umRh5LzpBHse/gold.png", - "tags": ["Golden-sol", "Euro-guarantee"], - "extensions": { - "website": "https://blocksto.ne/blocked-sol-for-euro/" - } - }, - { - "chainId": 101, - "address": "8Jdjg3xVNAAFdiDbFpWF2FX5dYwHyw5j3Myvgmzrf7z4", - "symbol": "MDOA", - "name": "MDOA", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8Jdjg3xVNAAFdiDbFpWF2FX5dYwHyw5j3Myvgmzrf7z4/logo.png", - "tags": ["Utility-token"], - "extensions": { - "twitter": "https://twitter.com/mutantDogsACAD", - "website": "https://mutantdogs.academy/" - } - }, - { - "chainId": 101, - "address": "ADj2YoHjZvv9HhAD32orJEzhYUsEBKbgTLD8c6FPUz4T", - "symbol": "NIGGR", - "name": "RacisToken", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ADj2YoHjZvv9HhAD32orJEzhYUsEBKbgTLD8c6FPUz4T/logo.png", - "tags": ["freespeech-token", "social-token"], - "extensions": { - "twitter": "https://twitter.com/RacisToken", - "website": "https://niggr.xyz" - } - }, - { - "chainId": 101, - "address": "AYv1MnM75ayDkRBxBoAMhdXULKfUAQN3JWxkDGS4gT1Q", - "symbol": "NUTTY", - "name": "Nutty Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AYv1MnM75ayDkRBxBoAMhdXULKfUAQN3JWxkDGS4gT1Q/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/nuttynarwhals" - } - }, - { - "chainId": 101, - "address": "9VZtUphSYbx7q9R4XfCnAkmkQHN7tW3x8KFRmqzinDPW", - "symbol": "TNP", - "name": "The NFT Pass", - "decimals": 6, - "logoURI": "https://cdn.discordapp.com/attachments/943583586051846185/945767522853073019/token-icon-TNP.png", - "tags": ["utility-token", "governance-token", "social-token"], - "extensions": { - "discord": "https://discord.gg/F9BpgY5syv" - } - }, - { - "chainId": 101, - "address": "AuyLHdrJtrv9PBhRSwvApj8ViuCT3VzBhkVLA4HzPn48", - "symbol": "PST", - "name": "Pelajar Social Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/pelajarsocial/locales-lib/main/logo.jpg", - "tags": ["utility-token", "learning-token"], - "extensions": { - "instagram": "https://instagram.com/pelajarsocial" - } - }, - { - "chainId": 101, - "address": "BLoBgdr2W7YEgzPioUbThYQwSFsaU7nPtFAgCQByM1gC", - "symbol": "BLOBB", - "name": "Blobbolution WL Token", - "decimals": 0, - "logoURI": "https://cdn.discordapp.com/attachments/754741118566137929/946037034269671444/Twitter_Discord_Profile_Picture_small.png", - "tags": ["nft"], - "extensions": { - "discord": "https://discord.gg/2zx2EHTXBM", - "twitter": "https://twitter.com/Blobbolution", - "website": "https://blobbolution.com/" - } - }, - { - "chainId": 101, - "address": "GGe5nmdfJChxieXG9QUr94yLzgbAgV2ezrwbAgRjU3Hm", - "symbol": "$OGPILL", - "name": "OGPill", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WLhpayHdNqcMKjuRCq9eEWPMV9LFN7gTqFAHSdU4Sxn/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "WLhpayHdNqcMKjuRCq9eEWPMV9LFN7gTqFAHSdU4Sxn", - "symbol": "$PILL", - "name": "Pill", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WLhpayHdNqcMKjuRCq9eEWPMV9LFN7gTqFAHSdU4Sxn/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AGM9wUVHy9qbzkRULF9pgHwuFUmZYD3oys9ooKEAUuRQ", - "symbol": "SB", - "name": "SOBO", - "decimals": 6, - "logoURI": "https://github.com/usman989899/Asset/blob/main/FHo7KkRUYAEmy8Q.jpg" - }, - { - "chainId": 101, - "address": "8GT6u7FETgcr287xhWRA96GJnn65e3dadJRXf9gEH2V1", - "symbol": "KBEER", - "name": "KBeer coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/aagusti1974/kbeer/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 102, - "address": "GYCVdmDthkf3jSz5ns6fkzCmHub7FSZxjVCfbfGqkH7P", - "symbol": "GYC", - "name": "GameYoo Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/gameyoo/materials/main/gyc.png", - "tags": [ - "social-token", - "community-token", - "utility-token", - "game-token", - "game-currency", - "GameFi", - "Gaming", - "metaverse", - "play-to-earn", - "play-to-contribute" - ], - "extensions": { - "github": "https://github.com/gameyoo", - "twitter": "https://twitter.com/GameYooOfficial", - "website": "https://gameyoo.io" - } - }, - { - "chainId": 101, - "address": "HNFvGsZ9buzVN4GibJfhjUfae2pP7vTAbrTwKqvib3aW", - "symbol": "S4S", - "name": "S4Scoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/S4Scoin/S4Scoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "SBbDNNbqGBtxuHDr9kjzxewwABYxmZq9NSSjyk25W3K", - "symbol": "BREE", - "name": "BREECOIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/notmafiosa/crypto/main/IMG_3189.jpg", - "tags": ["social-token", "community-token", "utility-token", "metaverse"] - }, - { - "chainId": 101, - "address": "2mHdf1SxL39mmFLPHWKAwH1DQDhMNqfjA5v6qrV9MBCW", - "symbol": "MYR", - "name": "Make You Rich", - "decimals": 6, - "logoURI": "https://github.com/Soumya-Shekhar/Crypto/blob/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "B1N2zdRZn6FMCPsGjsB4cpmiygCoCcMedwjntrfvBPJ2", - "symbol": "MEGC", - "name": "MEGC-Ticket", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/B1N2zdRZn6FMCPsGjsB4cpmiygCoCcMedwjntrfvBPJ2/MEGCTicket.png", - "tags": ["whitelist", "megc", "invite", "monkey"], - "extensions": { - "discord": "https://discord.gg/tkqe7RX4bb", - "twitter": "https://twitter.com/MonkeyGolfClub", - "website": "https://www.monkeygolfclub.com/" - } - }, - { - "chainId": 101, - "address": "9ceUNLrZa1D4zGrj7NaT2gh7FnBUmeBLf1MtXbqSRN3c", - "symbol": "VIVE", - "name": "Vivian's New Tokens", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/saibaneer/solana-token/master/logo.jpg" - }, - { - "chainId": 101, - "address": "7mT2XbK3iqQrhzDFoy87r61ewkrDWYLHrm94iMiTf8xJ", - "symbol": "BOOTY", - "name": "Booty Farm", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7mT2XbK3iqQrhzDFoy87r61ewkrDWYLHrm94iMiTf8xJ/booty-logo.png", - "tags": [ - "social-token", - "utility-token", - "NSFW", - "yield-farming", - "web3" - ], - "extensions": { - "discord": "https://discord.gg/aqKXxuVY7x", - "medium": "https://medium.com/@bootyfarmxxx", - "serumV3Usdc": "EHv2AXZuCapqseZCqRwzeJcVDgctzcuGu4JwRZenEv5g", - "twitter": "https://twitter.com/BootyFarmLive" - } - }, - { - "chainId": 101, - "address": "BwPTX854gNfV4pyig33BVedPh2wAya5h3XvfC1Lc2wBh", - "symbol": "Kito", - "name": "Kitetoken", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jseras07/token/main/kitetok.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6dsacPDwBFppyBeybCqfEJ2zqkiFfwDPFtoRPsK9Zw5", - "symbol": "MULKT", - "name": "Mulk Token", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6dsacPDwBFppyBeybCqfEJ2zqkiFfwDPFtoRPsK9Zw5/logo.png" - }, - { - "chainId": 101, - "address": "5PT5nXyWVnBH887PAGiCk95fEjgjRhkY5BjhgKNcTDdJ", - "symbol": "CALEE", - "name": "Camarena Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5PT5nXyWVnBH887PAGiCk95fEjgjRhkY5BjhgKNcTDdJ/logo.png", - "tags": ["reasearch-token"] - }, - { - "chainId": 101, - "address": "Cutm64TvBg4iWyao4tCZvNp8urMWhtTPhWxsbdwykuDn", - "symbol": "EUCALYPTUS", - "name": "Eucalyptus", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/KoalaHeroes/Cloud/bf5e2d5e61c386055e5fd28b97f2c77a55541c0a/ELogo.png", - "tags": ["meme-token", "social-token", "community-token"], - "extensions": { - "website": "https://koalaheroes.com" - } - }, - { - "chainId": 101, - "address": "EQTyTPidQAoGJBRYS4mLpS8ej5sZrdt5TziRgwDkoVXX", - "symbol": "USD-T", - "name": "USD stablecoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EQTyTPidQAoGJBRYS4mLpS8ej5sZrdt5TziRgwDkoVXX/logo.png" - }, - { - "chainId": 101, - "address": "ESCrFrmy96EFyZQCEV1YPpCAqrbwGpy62yWU6cGXgtb4", - "symbol": "CRM", - "name": "CRM", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/iiizzzyyy/crm/main/logo.png", - "tags": ["meme-token", "social-token", "community-token", "utility-token"] - }, - { - "chainId": 101, - "address": "7QKhKEnUwx6icJotjh9qtC61EK9WpiXNrmMTPQw8AgSj", - "symbol": "Face", - "name": "Face", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7QKhKEnUwx6icJotjh9qtC61EK9WpiXNrmMTPQw8AgSj/logo.png", - "extensions": { - "twitter": "https://twitter.com/longfacepunkz" - } - }, - { - "chainId": 101, - "address": "GWLFW6c6WtAyJZFSqbxaSr351H9s6Dskd44yQUtonWWq", - "symbol": "AFGT", - "name": "AF Gold Ticket", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GWLFW6c6WtAyJZFSqbxaSr351H9s6Dskd44yQUtonWWq/logo.png" - }, - { - "chainId": 101, - "address": "SWLmRezJbWb8SJKkHHAbGDfXneCWprXxc8iDNXBhM5q", - "symbol": "AFST", - "name": "AF Silver Ticket", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SWLmRezJbWb8SJKkHHAbGDfXneCWprXxc8iDNXBhM5q/logo.png" - }, - { - "chainId": 101, - "address": "3nTt9pj9Sn4cVrGB75kTCdUba6DQLVv2S3j4KUMY8RzE", - "symbol": "ST", - "name": "Scythe Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3nTt9pj9Sn4cVrGB75kTCdUba6DQLVv2S3j4KUMY8RzE/logo.png" - }, - { - "chainId": 101, - "address": "SexyzTVcKsB7m9CHDt2FgkJbhQK58pm7M73RynPWhCz", - "symbol": "EXY", - "name": "Sexy Kiwi Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SexyzTVcKsB7m9CHDt2FgkJbhQK58pm7M73RynPWhCz/goldkiwi.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.com/invite/bzW9VAyHjW", - "twitter": "https://twitter.com/KiwiDAO", - "website": "https://www.sexybirdz.com/" - } - }, - { - "chainId": 101, - "address": "RichAYwyL4p9UC9RgfzsLW6K6kG3iERo1Nce4kR2WQW", - "symbol": "RICHES", - "name": "Rich Coin", - "decimals": 11, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/RichAYwyL4p9UC9RgfzsLW6K6kG3iERo1Nce4kR2WQW/logo.png", - "extensions": { - "twitter": "https://twitter.com/OstrichesNFT", - "website": "https://ostriches.io" - } - }, - { - "chainId": 101, - "address": "DLC4h3LeDq6qUKiaxqMfB9GQdFqg5ULkApAHT7LgiR6Y", - "symbol": "ZROG", - "name": "Zero Gravity", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/zerodev1/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "sEEdWDz8CNhcgU3fPF4sgjjjNQ2jiS4boMXqix6pMGG", - "symbol": "Germ", - "name": "Germination Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/sEEdWDz8CNhcgU3fPF4sgjjjNQ2jiS4boMXqix6pMGG/logo.png", - "tags": ["Community-token", "Germination", "NFT", "Social-token"] - }, - { - "chainId": 101, - "address": "CHMpZJw2ZsUryFX587vcTGvybDyKHaXVqvm379641fkh", - "symbol": "CHMPZ", - "name": "CHIMPZ", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CHMpZJw2ZsUryFX587vcTGvybDyKHaXVqvm379641fkh/logo.png", - "tags": ["Stake", "CHIMPZ", "NFT", "Utility-token"] - }, - { - "chainId": 101, - "address": "5J3LY8zMS3CVdLrn9QXVorstZGUbWZ4BrtM12U4mRPhR", - "symbol": "RJ7", - "name": "RJ Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/RJ079/Crypto/main/RJ.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "9xEgqA4b2NsHwN1bTi1fEDjX8J1waQNA7nHfPWnRpfbu", - "symbol": "DARKELVWL", - "name": "DARKELV Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9xEgqA4b2NsHwN1bTi1fEDjX8J1waQNA7nHfPWnRpfbu/logo.png", - "tags": ["NFT", "utility-token"] - }, - { - "chainId": 101, - "address": "5uVwCRDLPRX4xDkLKZbr8VEiGcqB7jav8DT4i6Pak116", - "symbol": "CLT", - "name": "Culture", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/NicholasGLambert/logo/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "GYCVdmDthkf3jSz5ns6fkzCmHub7FSZxjVCfbfGqkH7P", - "symbol": "GYC", - "name": "GameYoo Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/gameyoo/materials/main/gyc.png", - "tags": [ - "social-token", - "community-token", - "utility-token", - "game-token", - "game-currency", - "GameFi", - "Gaming", - "metaverse", - "play-to-earn", - "play-to-contribute" - ], - "extensions": { - "github": "https://github.com/gameyoo", - "twitter": "https://twitter.com/GameYooOfficial", - "website": "https://gameyoo.io" - } - }, - { - "chainId": 101, - "address": "AsnXmPL8redwti7bFRXMWpfuBgHn1Yve6YK3vEvnjTnz", - "symbol": "FOOFY", - "name": "FOOFY COIN ", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AsnXmPL8redwti7bFRXMWpfuBgHn1Yve6YK3vEvnjTnz/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://google.com" - } - }, - { - "chainId": 101, - "address": "AgrNk2aCFnLKixAugMDbq7A887ivQSFbNncvRhCSV1Mn", - "symbol": "$SHIZU", - "name": "Shizu Hippos", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AgrNk2aCFnLKixAugMDbq7A887ivQSFbNncvRhCSV1Mn/logo.png", - "tags": ["nft-token"] - }, - { - "chainId": 101, - "address": "ARCtXLM9CEDfhCt1XeTXgKNqhSaqbeMKdJmhBdXNyF4g", - "symbol": "$ARC", - "name": "ARC Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ARCtXLM9CEDfhCt1XeTXgKNqhSaqbeMKdJmhBdXNyF4g/logo.png" - }, - { - "chainId": 101, - "address": "FB5kmTzvhn95n5HYL9MkGL3JbFDwUD9kMoHCFU4Zjsay", - "symbol": "PEBL", - "name": "Rocks", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FB5kmTzvhn95n5HYL9MkGL3JbFDwUD9kMoHCFU4Zjsay/logo.png", - "tags": ["social-token", "community-token"], - "extensions": { - "instagram": "https://www.instagram.com/fyhostelli/", - "twitter": "https://twitter.com/FyhostElli", - "website": "https://www.fyhost.art/" - } - }, - { - "chainId": 101, - "address": "DGU9zPheJjohsjqvVxhRi54YPhzTKQZr1WPX8CjP7NfA", - "symbol": "WBY", - "name": "Webyo", - "decimals": 5, - "logoURI": "https://blogger.googleusercontent.com/img/a/AVvXsEghBmM9xKjXwPgFDFT2E5TB7lsjKp9n5_DoLqAYuJWGIzU1fmVfXYkc-wekE_3G7_l_T5JzDhIcwHbaCqByekojJzLAI4Ytii3qh7xl_0JKgTmroIBrdTLXQbN4ZuZuf68yhevNNNhuU-2nHHGZ0hJdF2hbwl3iSrQdzjLIf1BAqE28GVL-9yir-UTH=s1280", - "tags": [ - "utility-token", - "social-token", - "community-token", - "meme-token", - "bombaAnarchica-token" - ] - }, - { - "chainId": 101, - "address": "6gMucBt3aFdABoxJj2Deew1PntPTQjYhbauuuScCFXW5", - "symbol": "GABX", - "name": "GABXCoin", - "decimals": 0, - "logoURI": "https://github.com/GabToken/Crypto/blob/main/LOGO.PNG", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "sMMAMLinw5aeQ1WzGp1RuJsufrEKKttMudt2e3SGgKE", - "symbol": "sMMA", - "name": "staked MMA", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/sMMAMLinw5aeQ1WzGp1RuJsufrEKKttMudt2e3SGgKE/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Cross-chain Gaming SuperGuild building the tools of the future. Redeemable token to be redeemed for $MMA upon closure of the upcoming IDO", - "discord": "http://discord.gg/mmagaming", - "medium": "https://medium.com/@MMAGaming", - "twitter": "https://twitter.com/MetaverseMining", - "website": "https://mmagaming.io/" - } - }, - { - "chainId": 101, - "address": "srMMACAiS4raGVmRDSuD7FqGM3B7tLZBxNVR3uZJRDC", - "symbol": "srMMA", - "name": "staked redeemable MMA", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/srMMACAiS4raGVmRDSuD7FqGM3B7tLZBxNVR3uZJRDC/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Cross-chain Gaming SuperGuild building the tools of the future. Redeemable token to be redeemed for $MMA upon closure of the upcoming IDO", - "discord": "http://discord.gg/mmagaming", - "medium": "https://medium.com/@MMAGaming", - "twitter": "https://twitter.com/MetaverseMining", - "website": "https://mmagaming.io/" - } - }, - { - "chainId": 101, - "address": "9JtoHi7ZfTyzDPj43k688yGfMyzp4j9gpsnWswAKnnKD", - "symbol": "NCST", - "name": "SPLOIT", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SploitToken/Sploit-Token/main/ncst.png", - "tags": ["nft-token", "community-token"] - }, - { - "chainId": 101, - "address": "844bzknocdtT5AMhqhoAGNDQnN9f2Yq8JP8J2bvgzU91", - "symbol": "HAND", - "name": "Hand Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/samfultonjr/scratches/main/logo500.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HhmqnYpvHa44EE4TfcAghoZrYKHwV1tGaHMNZAH4RAvr", - "symbol": "EMEOW", - "name": "EMeow Cat Coin ", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jaccba/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AiyQDVjnwg1phQRjCyyxyHdHvTBYhF8eXtmuBPRQrqRB", - "symbol": "SSS", - "name": "SKULLS", - "decimals": 6, - "logoURI": "https://github.com/Apxrture/SSS/blob/main/pixil-frame-0%20(1).png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "4LWnLjNL9Q5SaVnJkhhmueKGkvgfb4aXQAgKsVve3yL2", - "symbol": "OXYF", - "name": "OXYCON", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4LWnLjNL9Q5SaVnJkhhmueKGkvgfb4aXQAgKsVve3yL2/eyes.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "Bc9vUedRBx6Mu1fYk9rhC6ug2BnyDJSLj1Ji12rjbLcn", - "symbol": "LEV", - "name": "LEV4E", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Lev4e/Crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "45FKxaoC28XvpWnYe1GRkgfnxWEYSoQ11juGxsCLLpX4", - "symbol": "GLSBBQ", - "name": "Glass Barbie", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/asterixx00/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "2HCeYJWocEzTS5GJiCCznR4s5ca6aWRuLafNCpVNmakc", - "symbol": "TMK", - "name": "TMkIIN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2HCeYJWocEzTS5GJiCCznR4s5ca6aWRuLafNCpVNmakc/logo.png", - "tags": ["utility-token", "social-token"] - }, - { - "chainId": 101, - "address": "GVvSwwQDpqWTQu739vqatKyyCXan7G1fibU9d5cXvXeX", - "symbol": "PQL", - "name": "Piqsol", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GVvSwwQDpqWTQu739vqatKyyCXan7G1fibU9d5cXvXeX/piqsol.png", - "tags": [ - "social-token", - "community-token", - "utility-token", - "nft-market" - ], - "extensions": { - "description": "Fractional Solana NFT Marketplace", - "discord": "https://discord.gg/TmKBmyrGHY", - "facebook": "https://www.facebook.com/piqsol", - "instagram": "https://www.instagram.com/piqsol.art", - "medium": "https://medium.com/@social_91523", - "reddit": "https://www.reddit.com/user/Piqsol_NFT", - "telegram": "https://t.me/Piqsol", - "twitter": "https://twitter.com/Piqsol", - "website": "https://piqsol.com" - } - }, - { - "chainId": 101, - "address": "DxN75FUqcazmzyW6gMbHXC2VGhwRhMe1UmwPYbXqKJRb", - "symbol": "FRST", - "name": "FIRST", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4LWnLjNL9Q5SaVnJkhhmueKGkvgfb4aXQAgKsVve3yL2/eyes.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "AA6kSr673UmmAT8C8dHZGq3FTURYtRoYbyY5hWB1mPfH", - "symbol": "SCND", - "name": "SECOND", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4LWnLjNL9Q5SaVnJkhhmueKGkvgfb4aXQAgKsVve3yL2/eyes.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "84SAoSWPAXdaSkcoqsGcPVZ9vB2LrugY1N7AEgVopB3Z", - "symbol": "THRD", - "name": "THIRD", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4LWnLjNL9Q5SaVnJkhhmueKGkvgfb4aXQAgKsVve3yL2/eyes.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "Aj4mwrbwTeq6hoKSRZ6ZF7Agcy3zCu3Q9tesa3KHqWct", - "symbol": "$STOMP", - "name": "STOMPP", - "decimals": 9, - "logoURI": "https://imgur.com/icCaYVN.png", - "extensions": { - "instagram": "https://www.instagram.com/dopedinopc/", - "twitter": "https://twitter.com/DopeDinoPC" - } - }, - { - "chainId": 101, - "address": "6V39Vsa5epWyMYncpB6Yb3bjpYpoXURt2SLDCQ1UwdWU", - "symbol": "XSQR", - "name": "XBOX SIQER", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/cemdastan/xboxsiqer/main/xbox.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DJTE14SD24SKmPv6pLt84173srwbBgt7YGyfHZ5oVhwp", - "symbol": "DJWL", - "name": "Dino Jump Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DJTE14SD24SKmPv6pLt84173srwbBgt7YGyfHZ5oVhwp/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "E5is2XpFQBn5HwoxZRRKszhJyHd4ofNPfGWSUwoHLRNE", - "symbol": "SWNE", - "name": "SolSwines Whitelist", - "decimals": 0, - "logoURI": "https://cdn.jsdelivr.net/gh/kakazgg/solswineslogo/SolSwines-WL_swiny.png", - "tags": ["nft", "game", "utility-token"] - }, - { - "chainId": 101, - "address": "5TLBtAsJyGrxWyFhgyYr9R9KEkec9zrMQjfCKegdfax8", - "symbol": "BPWT", - "name": "Bizarre Platypus Token Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5TLBtAsJyGrxWyFhgyYr9R9KEkec9zrMQjfCKegdfax8/logo.png", - "tags": ["utility-token", "mint-token", "whitelist"], - "extensions": { - "description": "The Coin for Bizarre Platypus NFT for Whitelist.", - "twitter": "https://twitter.com/bizarreplatypus", - "website": "https://bizarreplatypus.io/" - } - }, - { - "chainId": 101, - "address": "WLTFhXCQPrGXq22PmbbdFojY9M19NPePorrW4NLaH1g", - "symbol": "RMWL", - "name": "R\u0026M Whitelist token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WLTFhXCQPrGXq22PmbbdFojY9M19NPePorrW4NLaH1g/logo.png" - }, - { - "chainId": 101, - "address": "76QxaXxTnhkmNWRcDiqPU6HnNXqJMB4LgBuWXGBoRvG7", - "symbol": "TRCK", - "name": "Trucken", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/efsoleth/crypto/main/GoTruckCA__1_-removebg-preview.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "7VpRFwcWWg7EyuqVhFK5ZX1tjW45BsDUhQ6Q3Z9SfKBH", - "symbol": "MATTER", - "name": "Star Light Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Matthewfusco/starlightnft/main/logo.png" - }, - { - "chainId": 101, - "address": "BfECixANAExjiUYBYtQSMr7L3ik2pKizVpJUKaPJpTCH", - "symbol": "HAAS", - "name": "HAASCOIN", - "decimals": 0, - "logoURI": "https://github.com/tenrandomdigits/HAASCOIN/blob/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "jmsApix74A2RUJyw5XRCCL61MiCRP538yypQmemnCZd", - "symbol": "souls0", - "name": "souls for test", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/jmsApix74A2RUJyw5XRCCL61MiCRP538yypQmemnCZd/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://aiko.io/" - } - }, - { - "chainId": 101, - "address": "GGASkW5PZWvNbHr4F8BVXYPbMWLdfhP96QmVbQpoEbX9", - "symbol": "$PILLOG", - "name": "PillSyndromeOG", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WLhpayHdNqcMKjuRCq9eEWPMV9LFN7gTqFAHSdU4Sxn/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "WLiu98oqYLrM1rkbew41QSPrqVteVn3h2wS4rNurv9v", - "symbol": "$WLPILL", - "name": "PillSyndromeWL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WLhpayHdNqcMKjuRCq9eEWPMV9LFN7gTqFAHSdU4Sxn/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6XfDGAhCbVmDGUYiAfCUPtfjQq1jgTvpVdyaSnxLoxt", - "symbol": "CC", - "name": "ConeyCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/CIPC1826/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6XfGDAhCbVmDGUYiAfCUPtfjQq1jgT4vpVdyaSnxLoxt", - "symbol": "CC", - "name": "CONEYCOIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/CIPC1826/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FzEf2xS5M5TFej5nzoZmEoRRmHtKZMAniBa96XJYZ2UR", - "symbol": "My3", - "name": "My3Koin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Maithreya1994/crypto/main/My3-logos_transparent.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Gj1E2PKCgnd1s5m8oAELGRSmqcDXc94ayWw7ncveRK9M", - "symbol": "BSUT", - "name": "Black Spade Utility Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/kmperkins85/BST/main/C5B956A9-289F-4084-BB0A-B050EB02BB61.PNG", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "C9Gz2xLRviTg5FFD15F1TiTs5hjJe63n2GrqL94911M3", - "symbol": "BRNB", - "name": "Barnabium", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Isembart/barnabium/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Forgp6AYPyCpMmd6o7PENRjwHjw2mcDeNB1Qx15DekLc", - "symbol": "ISLDA", - "name": "Fish", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Forgp6AYPyCpMmd6o7PENRjwHjw2mcDeNB1Qx15DekLc/logo.png", - "tags": ["game-token", "staking", "gamble"], - "extensions": { - "description": "Islanda is moving away from the copy and paste profile picture art and is expanding out to places where only few go...", - "discord": "https://discord.gg/7n9sFPFe9b", - "twitter": "https://twitter.com/IslandaNFT", - "website": "https://moomoons.io/" - } - }, - { - "chainId": 101, - "address": "GWTbCdwCSAR15dAGbSUxiFDAm2MXicSABXhhceobbCeA", - "symbol": "PX", - "name": "PX Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/RolandPixeldust/PXCoin/main/logo.png", - "tags": ["nfts", "community-token", "game-token", "metaverse-token"], - "extensions": { - "discord": "https://discord.gg/VQvzSHtNbR", - "twitter": "https://twitter.com/PixeldustNFT", - "website": "https://nft.pixeldust.tv/" - } - }, - { - "chainId": 101, - "address": "Hoh887H72GFaPqG8yBqTA8GWeVbWsnbCxDyAZyRHXMvc", - "symbol": "HVAC", - "name": "Ohms2law", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Ohms2law/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3fwNEvk4WZnB6RCJwgp9HazXqX8sKD8qcNx2ckx5Rct2", - "symbol": "FSTK", - "name": "Fastik Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/frozenBranch/fastik/main/fastik.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Hrs8H2FfWLxUa7kFV53vXPE2RGx5uZuUPCrKSUNZ99yU", - "symbol": "$CROPS", - "name": "BCBY Crops", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Hrs8H2FfWLxUa7kFV53vXPE2RGx5uZuUPCrKSUNZ99yU/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://www.bcbarnyard.info/" - } - }, - { - "chainId": 101, - "address": "84CGueN92MKdNRhpgciRmWZhnD8xv65k6K6zFX5e4Lwq", - "symbol": "DHMT", - "name": "Diamond Hands Mint Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/84CGueN92MKdNRhpgciRmWZhnD8xv65k6K6zFX5e4Lwq/logo.png", - "tags": ["mint-token"], - "extensions": { - "instagram": "https://www.instagram.com/cprodiamond/", - "twitter": "https://twitter.com/cprodiamond", - "website": "https://www.cprodiamond.io/" - } - }, - { - "chainId": 101, - "address": "2Ky3WvFzcQQP8cHNAxfGgeNmEvXS1He66t9wEgaTbBMt", - "symbol": "GLTH", - "name": "Goliath", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/austinyk1/crypto/main/unknown.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "3fX2LgjZkoAsxGJLx75pLdWqP9kY5QJtqmhDzVTJwqvJ", - "symbol": "HTLN", - "name": "Hotline Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3fX2LgjZkoAsxGJLx75pLdWqP9kY5QJtqmhDzVTJwqvJ/logo.png" - }, - { - "chainId": 101, - "address": "Cbi6U8C8mC1ENvskYBqyYzmy1Q5wB5bk9YzUcF6ZVomQ", - "symbol": "PURR", - "name": "Alleycats Collective Tokens", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/h4XNYWyefydaNiEZmECeutJtxQbyopZUSeWPFDJZtaL/purr_coin.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 103, - "address": "G4YMiaKnkb3iaduV4Jfh3rrGdNH6heKHTDS39rE6UXAq", - "symbol": "WREKt", - "name": "CryptoWrek Testcoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/G4YMiaKnkb3iaduV4Jfh3rrGdNH6heKHTDS39rE6UXAq/logo.png", - "tags": ["utility-token", "wrekt"], - "extensions": { - "discord": "https://discord.gg/saMpFsDAbZ", - "twitter": "https://twitter.com/cryptowrek", - "website": "https://synthverse.art/" - } - }, - { - "chainId": 101, - "address": "7Pe63gqDvC62U5YiLnL92zDkcQwFb2Gn51WYmKfrc3eY", - "symbol": "LLAMA", - "name": "LlamaCoin", - "decimals": 10, - "logoURI": "https://solgats.io/wp-content/uploads/2022/02/llamacoin.png", - "tags": ["social-token"], - "extensions": { - "twitter": "https://twitter.com/solgats", - "website": "https://solgats.io" - } - }, - { - "chainId": 101, - "address": "3bCJzDhVXDTf8Tph4xcLw8iogUK6WgHGzk6RLgW21UTN", - "symbol": "URJK", - "name": "Urjcoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/kueurj/urjkue-logo/main/circle-U-ou1.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DdFDHUTNUVAfmwUj7hkdSkuee14TkHMAacoCFijAudX", - "symbol": "LVM", - "name": "Mises Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ki2tech/crypto/main/Misescoinlogo2.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2Pyc8DkCgPohR1o3ExMx84fLxU8ti1eQnySUwJMh5E6d", - "symbol": "GUNWL", - "name": "INVALID - CryptoStrapsWL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Pyc8DkCgPohR1o3ExMx84fLxU8ti1eQnySUwJMh5E6d/logo.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "4QHLVFxuqnxv2YhD8cNFfMNvws3yBNeCrWAGJ4pywVNQ", - "symbol": "CZR", - "name": "cruz3r", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/nsxcruz3r/crypto/main/czrLogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "fishXewD9Muc6xenzn3JevquHq3A5WVERMLLUrZMTfh", - "symbol": "FI$H", - "name": "FISH Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/fishXewD9Muc6xenzn3JevquHq3A5WVERMLLUrZMTfh/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "FI$H token allows SlumCat NFT holders to redeem goodies", - "discord": "https://discord.gg/slumcatnft", - "instagram": "https://www.instagram.com/slumcatnft/", - "twitter": "https://twitter.com/slumcatnft", - "website": "https://slumcat.io/" - } - }, - { - "chainId": 101, - "address": "GYigzHB8PvDKC6q9hSzJCd1EeWkNDn5BoNSYirnNf97K", - "symbol": "APPL", - "name": "Apple Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GYigzHB8PvDKC6q9hSzJCd1EeWkNDn5BoNSYirnNf97K/appl.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/shinigaminft" - } - }, - { - "chainId": 101, - "address": "JSmhhX58q5Jxk7xBGh2sLgLsfiEhqCEdYRN7Rb6ov8h", - "symbol": "CHUMP", - "name": "CHUMPS Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/loosebucks/token/main/Untitled%204%20(1).png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4i2yu5iFvxyPDgbRPbn449gz4As9D9q1BaUS6nsuQf7B", - "symbol": "PILA", - "name": "Pila", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Allenbrd/Pila/main/logo.png", - "tags": ["utility-token", "community-token", "governance-token"] - }, - { - "chainId": 101, - "address": "BaZXh456atM5Fh7uWcbKeTPGXbMCacoxwXhbrM8eefNm", - "symbol": "MISO", - "name": "MISO", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/koi-shogun/miso/main/miso%20pixel.jpeg", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "5W5vGGnpfU6PykJuexUPbbgcs2mJQ7ywq8s7GWEqb2c9", - "symbol": "CHF", - "name": "CheF'N", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Chriscoins/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "F2scmWCGyhefxcdzSYAVdZjBVwocri7DJDAhBiVgNcTR", - "symbol": "SMTH", - "name": "SmoothCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mabo31/crypto/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "4BE8tjtSWcCrXCdkx4wyzX84XNGkGrNzoxovcftkt7qK", - "symbol": "WILLC", - "name": "WillCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/chunghooman/crypto1/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BEf5BZxd5w2paiX6GnyBDBHUihfNMRUy8Dpek8X4rjBy", - "symbol": "$TOXIN", - "name": "TOXIN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/CMHayden/crypto/master/toxin.png", - "tags": ["social-token"], - "extensions": { - "twitter": "https://twitter.com/galactic_snakes" - } - }, - { - "chainId": 101, - "address": "FtYtDBJxMcCUdoJqrhxmDpXQiExknSR3WAsRU6B41FrB", - "symbol": "STKL", - "name": "Shoot", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/A6BH/crypto/main/Logo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7qSqFjxZCAwrGe9QyR4755f1CJowcZRNoP519TVfJ5z2", - "symbol": "CDC", - "name": "cDragonCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/benjaminiyou/crypto/main/cDragonLogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GLBvhzpnQApaDAJ5g5Cgw5713JsZkm2DWKFDgjzpTrft", - "symbol": "PREZSMINT", - "name": "PixelPrezs MINT Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GLBvhzpnQApaDAJ5g5Cgw5713JsZkm2DWKFDgjzpTrft/logo.png", - "extensions": { - "discord": "https://discord.gg/J7YwjVEzgc", - "twitter": "https://twitter.com/PixelPrezs", - "website": "https://pixelprezs.xyz" - } - }, - { - "chainId": 101, - "address": "NfZUsY5ZqdJFxcKjYxA3KgibKEP5wTUDNdCXJ43dtVo", - "symbol": "MENACE", - "name": "MENACE", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/NfZUsY5ZqdJFxcKjYxA3KgibKEP5wTUDNdCXJ43dtVo/menacelogo.png", - "tags": ["Utility-token"], - "extensions": { - "twitter": "https://twitter.com/BabyMenaceNft", - "website": "https://www.babymenace.com/" - } - }, - { - "chainId": 101, - "address": "dR9WzcdHTXrW57eM9kkVmkP7CpZGmTQq834JyTRxGjw", - "symbol": "MOOSE", - "name": "MooseCoin", - "decimals": 10, - "logoURI": "https://solgats.io/wp-content/uploads/2022/02/moosecoin.png", - "tags": ["social-token"], - "extensions": { - "twitter": "https://twitter.com/solgats", - "website": "https://solgats.io" - } - }, - { - "chainId": 101, - "address": "2tXb5LRDnPo2WxfvrvMgCXP1vtGxn9ErpBAW1w4D7483", - "symbol": "PITM", - "name": "PitBossesMint", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/GaitanaruAndrei/assets/main/pitbuli.png", - "tags": ["mint-token"], - "extensions": { - "description": "The Pit Bosses Mint token", - "website": "http://www.pitbosses.vip/" - } - }, - { - "chainId": 101, - "address": "GEWm7pTN5jH1LND1LgiWkrTDCusQbC8JbL55vmxeq7Ne", - "symbol": "GOATZ", - "name": "GOATZ", - "decimals": 2, - "logoURI": "https://solaboy.github.io/images/goatz.png", - "tags": ["nft", "crypto", "rewards"], - "extensions": { - "telegram": "https://t.me/goatz_world", - "website": "https://www.goatz.io" - } - }, - { - "chainId": 101, - "address": "AvYRFjk4imoGSAYxcwfm4dM6qQigR6DZJt3vDatdgPeP", - "symbol": "PEW", - "name": "Pew", - "decimals": 10, - "logoURI": "https://solgats.io/wp-content/uploads/2022/02/pew-1.png", - "tags": ["social-token"], - "extensions": { - "twitter": "https://twitter.com/solgats", - "website": "https://solgats.io" - } - }, - { - "chainId": 101, - "address": "DirhEoLS5cgHc2DnDtvFhNusp4dWr3WNK6i2ssect1Zi", - "symbol": "CLAW", - "name": "CryptoClaw", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DirhEoLS5cgHc2DnDtvFhNusp4dWr3WNK6i2ssect1Zi/logo.png", - "tags": [ - "utility-token", - "community-token", - "game-token", - "game-currency", - "GameFi", - "Gaming" - ], - "extensions": { - "discord": "https://discord.gg/J7YwjVEzgc", - "twitter": "https://twitter.com/PixelPrezs", - "website": "https://pixelprezs.xyz" - } - }, - { - "chainId": 101, - "address": "DgeYFKF199fxQQhYf3xiEZoYLoTANN8vq3kU7jSrM3eS", - "symbol": "ES", - "name": "Eliga Services", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Bernardvdv/nft/main/cropped-eliga-services-favicon-32x32.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "28d4sqhGuvbV63DpEptTkj26umw3DyLy6NB8u6vdGTuh", - "symbol": "TNT", - "name": "TheNFT Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Onni3000/crypto/main/token.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6sV2WL6pYjN1fHGhjtQQ4QxpCjtpvH7HrMjng3B6ARCy", - "symbol": "BARGE", - "name": "Barge Profit", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6sV2WL6pYjN1fHGhjtQQ4QxpCjtpvH7HrMjng3B6ARCy/captain.png", - "tags": ["Barge-profit", "Blockstone"], - "extensions": { - "website": "https://www.blocksto.ne/barge-profit/" - } - }, - { - "chainId": 101, - "address": "J968KD1xJx3X29Zg1yGWRa8EMDHWthHFZMkY7egr6ARp", - "symbol": "BARGE", - "name": "Barge Bond", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/J968KD1xJx3X29Zg1yGWRa8EMDHWthHFZMkY7egr6ARp/captain.png", - "tags": ["Barge-bond", "Blockstone"], - "extensions": { - "website": "https://www.blocksto.ne/barge-bond" - } - }, - { - "chainId": 101, - "address": "CMcSwpe5WarHDkE64Yxasz4poxNz3jjpum45xYrcxtpi", - "symbol": "NXDM", - "name": "NXTDMNSN INDUSTRIES Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CMcSwpe5WarHDkE64Yxasz4poxNz3jjpum45xYrcxtpi/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "NXDM is a physical NFT verification utility token and product design token.", - "discord": "https://discord.gg/gaZMrd3Qjb", - "twitter": "https://twitter.com/NXT_DMNSN_IND" - } - }, - { - "chainId": 101, - "address": "bZiNzQpzMEvhCGG722aKR2LrPaHA9AfAK2EpAwsy7yv", - "symbol": "SSS", - "name": "Social Squids", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/bZiNzQpzMEvhCGG722aKR2LrPaHA9AfAK2EpAwsy7yv/logo.jpg", - "extensions": { - "twitter": "https://twitter.com/SoSquidSociety" - } - }, - { - "chainId": 101, - "address": "J8bFycPrVKhXnf6nysvUz8Wc2Q6BRvd41JSQ1RTTxxAx", - "symbol": "KING", - "name": "Coin Flip Kingz", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/J8bFycPrVKhXnf6nysvUz8Wc2Q6BRvd41JSQ1RTTxxAx/logo.png", - "tags": [ - "utility-token", - "community-token", - "game-token", - "game-currency", - "GameFi", - "Gaming" - ] - }, - { - "chainId": 101, - "address": "12Yqttjac9py7cnEUMHaXWfuPPcJ9Nym8ifaxNgvT6HY", - "symbol": "MTGTH", - "name": "Matagoth Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/12Yqttjac9py7cnEUMHaXWfuPPcJ9Nym8ifaxNgvT6HY/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "SPLw2X9175YhXUAaQuf8cvZ9mX8hpYF5X4B1esHPcNS", - "symbol": "TNK", - "name": "Tanuki WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SPLw2X9175YhXUAaQuf8cvZ9mX8hpYF5X4B1esHPcNS/logo.png" - }, - { - "chainId": 101, - "address": "4tUUpzPsSCzSasdRueA3J2phAvLD9cqRbzFCCNQAJpt4", - "symbol": "KAI", - "name": "KAI", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4tUUpzPsSCzSasdRueA3J2phAvLD9cqRbzFCCNQAJpt4/logo.png", - "tags": ["utility-token", "game-token", "staking"], - "extensions": { - "description": "KAI is the native token within the kaimetaverse - It supports several utility cases in which users are sent KAI via rewards as well as enabling DeFi features within it's ecosystem", - "discord": "https://discord.gg/kaimetaverse", - "twitter": "https://twitter.com/kaimetaverse", - "website": "https://kaimetaverse.cloud" - } - }, - { - "chainId": 101, - "address": "8N48SUqtnrUyJtzU8iLpmUPMg3mm5su5uRh5tStVqHnD", - "symbol": "PTCOIN", - "name": "PATACOIN", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8N48SUqtnrUyJtzU8iLpmUPMg3mm5su5uRh5tStVqHnD/logo.png", - "tags": ["Community-Token", "Utility-Token", "Social-Token", "DAO-Token"], - "extensions": { - "twitter": "https://twitter.com/axbaquero" - } - }, - { - "chainId": 101, - "address": "F3YadVupQT3rxBpXxZJCdmzhpyb5NEPsCr18DHKXvsmb", - "symbol": "SKULLWL", - "name": "Skull Invasion WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/F3YadVupQT3rxBpXxZJCdmzhpyb5NEPsCr18DHKXvsmb/logo.png", - "tags": ["utility-token", "community-token", "whitelist-token"], - "extensions": { - "description": "SKULLWL is the whitelist invite token for the Skull Invasion NFT collection.", - "discord": "https://discord.gg/UxX7FFV577", - "twitter": "https://twitter.com/Skullinvasionn", - "website": "https://www.skullinvasionnft.com" - } - }, - { - "chainId": 101, - "address": "7XhyezvAxuEV43hm7iLfYyCR4DuweEsi2oGN84TxBNNc", - "symbol": "FRAYDEY", - "name": "FRAYDEY COIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/cyberspyde/fraydey-coin/main/logo.png", - "tags": ["Social-Token", "Community-Token"], - "extensions": { - "description": "Fraydey Token is used for specific applications only, as rewards and/or advertisement balance for Fraydey app", - "telegram": "https://t.me/fraydeyuz", - "website": "https://fraydey.uz", - "youtube": "https://www.youtube.com/channel/UCgB3d4-Oa6Q6OdeM0QTd72A" - } - }, - { - "chainId": 101, - "address": "HMWEz1fMBSaCEFVqM7ZFvpNKm4kbPpEYamkt27eQX51U", - "symbol": "LNFTxSLSKIN1", - "name": "SL Bath WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HMWEz1fMBSaCEFVqM7ZFvpNKm4kbPpEYamkt27eQX51U/logo.png", - "tags": ["liqnft-wl-token"], - "extensions": { - "discord": "https://discord.gg/PYZWRHgVwM", - "twitter": "https://twitter.com/liqnft", - "website": "https://www.liqnft.com/solanaland" - } - }, - { - "chainId": 101, - "address": "9WhjFakVRAfRvZ8X5m5LFHD3Gvh7JkibmZjAs5BxHzFZ", - "symbol": "JUGC", - "name": "Juggernaut Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9WhjFakVRAfRvZ8X5m5LFHD3Gvh7JkibmZjAs5BxHzFZ/J2logo.png", - "tags": ["social-token"], - "extensions": { - "discord": "https://discord.gg/TFD7bmujJR", - "twitter": "https://twitter.com/Sol_Juggernauts", - "website": "https://soljuggernauts.000webhostapp.com/" - } - }, - { - "chainId": 101, - "address": "5MqqCDLDf1EoBE5KRhQDRTP6XZyn9ToVeuZ2RzDemJCk", - "symbol": "RBWC", - "name": "Reborn Baby Wukong Coin", - "decimals": 6, - "logoURI": "https://github.com/gilffinder/RBW-Coin/blob/main/coin%20pic.png?raw=true", - "tags": ["NFT-token", "Farming-token", "staking"], - "extensions": { - "description": " Reborn Wukongs Taking Over the Solana Chain", - "discord": "https://discord.gg/uYM3Hzz4Gd", - "twitter": "https://twitter.com/rebornbabykongz", - "website": "https://www.rebornbabywukongs.io/" - } - }, - { - "chainId": 101, - "address": "WLTdgwdNi91RGojhM6Wk5rXNKsVgLA5cZbgL7XGTETX", - "symbol": "WLSSS", - "name": "SSS WhiteList Token", - "decimals": 0, - "logoURI": "https://github.com/CryptoPique/token-list/tree/main/assets/mainnet/WLTdgwdNi91RGojhM6Wk5rXNKsVgLA5cZbgL7XGTETX/logowhite.png" - }, - { - "chainId": 101, - "address": "HhXYhtFqfjxe5iBuBQ3RedmmAbgFrjW2DBzPak14ejQq", - "symbol": "KAMP", - "name": "Kawaii Animals Mint Pass", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HhXYhtFqfjxe5iBuBQ3RedmmAbgFrjW2DBzPak14ejQq/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7TQTpG1qBvE9ui7J9yQWKFAYpQahkaKPKqGTsqSm1wUv", - "symbol": "GV", - "name": "Good Vibes", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7TQTpG1qBvE9ui7J9yQWKFAYpQahkaKPKqGTsqSm1wUv/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/The_Sol_Army", - "website": "http://www.thesolarmy.com" - } - }, - { - "chainId": 101, - "address": "AstPCW5xTv5EG22qPE81CeKVZ6y9jv8SooivuCYsCMSu", - "symbol": "ASRO", - "name": "AstroToken", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AstPCW5xTv5EG22qPE81CeKVZ6y9jv8SooivuCYsCMSu/logo.png" - }, - { - "chainId": 101, - "address": "ETKgPZnDiFzHWGTpC2t3g7d7B2XR3iih6iXjV2e2jBSt", - "symbol": "Tiik", - "name": "Tiiks", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ETKgPZnDiFzHWGTpC2t3g7d7B2XR3iih6iXjV2e2jBSt/logo.png", - "tags": ["utility-token", "community-token", "meme-token"], - "extensions": { - "twitter": "https://twitter.com/Stiiks_NFT" - } - }, - { - "chainId": 101, - "address": "HtquMwfDXagEkYYC9NJVKmv1sUrp4PTHLo4piDNf3sMm", - "symbol": "FXFUND", - "name": "EffektFuture Fund", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/pyrexxx/effektfuturefund/main/eff_logo3.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "Fb1FMcXHEW8kjJFEKDWkzuEXL2MazjjiSHi1sWkjrvcH", - "symbol": "D4F", - "name": "Dancer4Freedom", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Fb1FMcXHEW8kjJFEKDWkzuEXL2MazjjiSHi1sWkjrvcH/logo.png", - "tags": ["Solana", "Videogame", "Play2Earn", "Utility-Token"], - "extensions": { - "address": "Fb1FMcXHEW8kjJFEKDWkzuEXL2MazjjiSHi1sWkjrvcH", - "assetContract": "https://solscan.io/token/Fb1FMcXHEW8kjJFEKDWkzuEXL2MazjjiSHi1sWkjrvcH", - "description": "D4F is a utility token, currency for the purchase of digital assets, NFT, within the video game Dancer4Freedom", - "discord": "https://discord.gg/qZ3eqFy6", - "twitter": "https://twitter.com/Dancer4Freedom", - "website": "https://www.dancer4freedom.com/" - } - }, - { - "chainId": 101, - "address": "FD9HCKVyyfC4LUAmeo68EuEhDs68sxrspiHmTt21CGpm", - "symbol": "CSFTHC", - "name": "TuffyHacksCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/890popbox/tuffyhackscoin/main/tuffyhackscoinsg.png", - "tags": ["meme-token", "project-token", "hackathon-token"] - }, - { - "chainId": 101, - "address": "CzXF8oUJSsB9ADKV99WAi2TgytqAyKvQw6EihwiL9em4", - "symbol": "DRGNZ", - "name": "Boryoku Genesis Dragonz Index", - "decimals": 2, - "logoURI": "https://i.imgur.com/AzJI7FQ.png", - "tags": [ - "bridgesplit-fraction", - "boryoku-genesis", - "fraction-index", - "fnft" - ], - "extensions": { - "discord": "https://discord.gg/bridgesplit", - "twitter": "https://twitter.com/bridgesplit", - "vault": "https://app.bridgesplit.com/fractions/CzXF8oUJSsB9ADKV99WAi2TgytqAyKvQw6EihwiL9em4" - } - }, - { - "chainId": 101, - "address": "8vncC6LS9j14ubYDamLRK6t1JGXe8DsWuvJreDwUmkQa", - "symbol": "Cloudy", - "name": "CloudyCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/iWritzBoy/ImageBoy/main/CloudyCoin.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "59Y8Bxa64n1sgb54s7XjNitt7iwdJ2gGGRHySmXUuUBV", - "symbol": "JKLP", - "name": "Jackalopes", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/59Y8Bxa64n1sgb54s7XjNitt7iwdJ2gGGRHySmXUuUBV/logo.png", - "tags": ["nft-token", "Jackalopes"], - "extensions": { - "discord": "https://discord.com/channels/945732232503513109/945732237117235231", - "instagram": "https://www.instagram.com/jackalopenfts/", - "twitter": "https://twitter.com/JackalopeNFTs", - "website": "https://jackalopes.info/" - } - }, - { - "chainId": 101, - "address": "8eMz8nphkDvH3mET2cWWtkva1h4VgxmVtbKZNa11g3Ko", - "symbol": "VIMA", - "name": "ViMaCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/freehandslife/ViMaCrypto/main/ViMaScaled450.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7HRrtvKKn2vEYJuFaD9ijwmkdrdQmEe13KmBoYstqD85", - "symbol": "PHOC", - "name": "PhotonCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Unitech357/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "67jSkrp4SEhk4k5E6oXjprX9SXnRb1x2M3obke7BemL1", - "symbol": "$MARS", - "name": "MARS Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/67jSkrp4SEhk4k5E6oXjprX9SXnRb1x2M3obke7BemL1/logo.png", - "tags": ["currency", "game-token", "social-token", "community-token"], - "extensions": { - "discord": "https://discord.com/channels/932827372464513085/943416696964780132", - "website": "https://www.martianarmy.space" - } - }, - { - "chainId": 101, - "address": "FUHqX4aEQCofiHFcLoscQ9Y16zuB9mLuqMTwzLGWZbin", - "symbol": "f3k", - "name": "f3token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/bettersree/beeterknitf3/main/knite84053671_padded_logo.png", - "tags": ["utility-token", "nft"], - "extensions": { - "twitter": "https://twitter.com/talkwith_money", - "website": "https://www.knitef3.com/home/white-paper" - } - }, - { - "chainId": 101, - "address": "F32SqCgfvxi2z4EWirzQ3DATpQo3dK75LoRUvZBjeeSe", - "symbol": "WC", - "name": "W-Club Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/yanivberg/WCTOKEN/main/WClogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CSTVeXB1oBAfRz3JsJmHz37ViJ2uRRv7qHnWRPnF2fQG", - "symbol": "LNFTxSLSKIN3", - "name": "SL Garden WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CSTVeXB1oBAfRz3JsJmHz37ViJ2uRRv7qHnWRPnF2fQG/logo.png", - "tags": ["liqnft-wl-token"], - "extensions": { - "discord": "https://discord.gg/PYZWRHgVwM", - "twitter": "https://twitter.com/liqnft", - "website": "https://www.liqnft.com/solanaland" - } - }, - { - "chainId": 101, - "address": "TohuyVV81dVVJnLKJGArgWQGBXhCcRDSvyYFv9bSNn8", - "symbol": "FOX40", - "name": "Fox40 token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/TohuyVV81dVVJnLKJGArgWQGBXhCcRDSvyYFv9bSNn8/logo.png" - }, - { - "chainId": 101, - "address": "LUSTdLASZy86pR6V5VjMpXxW9oVtCQt8q3fJ9iHZtPY", - "symbol": "LUST", - "name": "Succuverse", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/dynaris/lust/main/icon.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/succuverse", - "twitter": "https://twitter.com/succuverse", - "website": "https://succuverse.com" - } - }, - { - "chainId": 101, - "address": "ENGY6nJtgro1jQQmwQhbWm6niTdut92nAiWsYJ6fiMaR", - "symbol": "$ENERGY", - "name": "ENERGY", - "decimals": 10, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ENGY6nJtgro1jQQmwQhbWm6niTdut92nAiWsYJ6fiMaR/logo.png", - "extensions": { - "website": "https://botslifenft.com" - } - }, - { - "chainId": 101, - "address": "8fhixNskWPGsQprN28pCwDqx11p1VTJGVQ6a7NBv9nwe", - "symbol": "TNKWL", - "name": "Tanukisan WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8fhixNskWPGsQprN28pCwDqx11p1VTJGVQ6a7NBv9nwe/logo.png" - }, - { - "chainId": 101, - "address": "FmjycwWoV2iVjE5EinWTdMTdQgrV3tANECnEdqeCtqAC", - "symbol": "6RIMS", - "name": "6rims WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FmjycwWoV2iVjE5EinWTdMTdQgrV3tANECnEdqeCtqAC/logo.png", - "extensions": { - "website": "https://6rims.io/" - } - }, - { - "chainId": 101, - "address": "6oQnWHy3XsQKLi8CNpq4UVFY1SA7sGirEm6zmbge2ZU4", - "symbol": "BeNFT", - "name": "BeNFT Token", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/BeNFT2022/images/main/logo.png", - "tags": ["utility-token", "nft"], - "extensions": { - "twitter": "https://twitter.com/benft", - "website": "https://www.benft.solutions" - } - }, - { - "chainId": 101, - "address": "6P3U9HzGUitrCxSXX4PzEU8uc1QqBsZuZNULyKUGgfvN", - "symbol": "G666", - "name": "VladCoinG66", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Jordann26PC/Crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GiktSMDhz9U7Nxs7fH5LSAVna3quv6giFdJrJ4WD3uHx", - "symbol": "MK", - "name": "Markka", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GiktSMDhz9U7Nxs7fH5LSAVna3quv6giFdJrJ4WD3uHx/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BdnaZ5yDCjXWXXt37s8fFUJ3afpTEvvoo8c77CHSDopC", - "symbol": "OPDC", - "name": "Open Data Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/frozenBranch/fastik/main/opendatalogo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "4CEmorYMVkPad5XrS7p4gqhwwUT4jgBTzcF2d6LTEZ6R", - "symbol": "WDY", - "name": "Weedy's", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Olieboll/crypto/main/Weedy's.png", - "tags": ["nft-token", "solana"] - }, - { - "chainId": 101, - "address": "8s1sdXotPyj2SyaCwdaobbbkdBjm9VUTv7Lmt4BGBqEn", - "symbol": "WOB", - "name": "WOLOB", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mateimmm/wolob/main/logo.PNG", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5MihDafd4Vcbu1zE5CKK4y5d486tDHCjJbN3hYXLkViH", - "symbol": "WWINR", - "name": "WWINR", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/aktech297/WWINR/main/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "G2uWAcSQJRJigA81e7hx9zoMrN4YryEJg7JHJdxuG6sr", - "symbol": "MTZ", - "name": "Metacraze", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/metacraze/assets/main/inverse.png", - "tags": [ - "metaverse-token", - "staking-token", - "nft-token", - "staking-token" - ], - "extensions": { - "description": "Metaverse talent contests and wealth generation with blockchain validation", - "telegram": "https://t.me/Metacraze_Official", - "twitter": "https://twitter.com/Metacraze_io", - "website": "https://metacraze.io" - } - }, - { - "chainId": 101, - "address": "G5Qo7JbfLdDWyd8uWC6UXZWmBg7kBMtMGLTxSgV2VPvr", - "symbol": "PXC", - "name": "PIXEL COIN", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/Medamine168/boring_pixels/main/logo.png", - "tags": ["utility-token", "nft"], - "extensions": { - "twitter": "https://twitter.com/MeDarkX1", - "website": "https://boring-pixels.netlify.app" - } - }, - { - "chainId": 101, - "address": "2RXSV7qPvPoPz7djG5fTT7teb61EJ1VRiC6ysHWm8F6c", - "symbol": "$MTSN", - "name": "Metasolanium", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2RXSV7qPvPoPz7djG5fTT7teb61EJ1VRiC6ysHWm8F6c/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/TheMetanoids" - } - }, - { - "chainId": 101, - "address": "3nH3vsMyAWPxwRdbwT2tcmXGiYm6eYGf1Mi8bTXGt8CF", - "symbol": "$AKR", - "name": "AKR", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3nH3vsMyAWPxwRdbwT2tcmXGiYm6eYGf1Mi8bTXGt8CF/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/ProjectAkira_" - } - }, - { - "chainId": 101, - "address": "4bgRUBC4gPoTs38TytDwujhcdn7reRoKynecvK7fJ5VW", - "symbol": "$NUT", - "name": "NUT", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4bgRUBC4gPoTs38TytDwujhcdn7reRoKynecvK7fJ5VW/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/RCollectorsClub" - } - }, - { - "chainId": 101, - "address": "Exz2u9EhSXzGDef4v8bfXVjcUbsFm4kMKoXxn58fDUSa", - "symbol": "$MCREW", - "name": "MONKE CREW", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Exz2u9EhSXzGDef4v8bfXVjcUbsFm4kMKoXxn58fDUSa/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/MonkeCrew" - } - }, - { - "chainId": 101, - "address": "3FzFyEk3NRvA2EKtSW2FSrGp67R8cnDoEWTZQ36AiUxE", - "symbol": "DPC", - "name": "Dozy Panda Club", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3FzFyEk3NRvA2EKtSW2FSrGp67R8cnDoEWTZQ36AiUxE/logo.png", - "tags": ["game-token", "staking", "gamble"], - "extensions": { - "description": "A Unique Collection Of 3333 Dozy Pandas Sleeping On The Solana Blockchain.", - "discord": "https://discord.gg/Q22K998ra9", - "twitter": "https://twitter.com/DozyPandaClub", - "website": "http://dozypandaclub.com/" - } - }, - { - "chainId": 101, - "address": "TokeZFFFFmeWFEEGiXy9DYszxKz5yYT2WqBSc4uVrge", - "symbol": "MTSPL", - "name": "My Test SPL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mean-training/spl_token/main/images-1.png" - }, - { - "chainId": 101, - "address": "6hwvPWpszUc1KeLgRmR1CcmT3uSkGqeaXXR45HpHYECH", - "symbol": "GTT", - "name": "Golden Ticket Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/DEM-Lion/GoldenTicketToken/64141cb7d7af46295c9ec9525a179506948f25b3/logo.PNG", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "C2JftZnC852McYwDePmm3ZQTrpPuXT1gA3Cm9oW4NRuA", - "symbol": "LTRSE", - "name": "LOTROSE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/lotrose1/crypto/main/LOTROSE.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3VKidPiw5NrYBC92dXJhy67U5e2VH5Ukbe7rcDQcd1VX", - "symbol": "Pc", - "name": "Pentester Club", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/alex14324/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8WTN3gDKgk2xfYoBZFjyBhek9DaMkqVMeSU8EcfUhHNU", - "symbol": "DGENMF", - "name": "Degen MFer Floor Index", - "decimals": 2, - "logoURI": "https://testlaunchmynft.mypinata.cloud/ipfs/QmRHkP5XEJphdcSkqEsE8qEWB2tVBsUYxyhKZakcbQLzhK/54.png", - "tags": ["bridgesplit-fraction", "degen-mfers", "fraction-index", "fnft"], - "extensions": { - "discord": "https://discord.gg/bridgesplit", - "twitter": "https://twitter.com/bridgesplit", - "vault": "https://app.bridgesplit.com/fractions/8WTN3gDKgk2xfYoBZFjyBhek9DaMkqVMeSU8EcfUhHNU" - } - }, - { - "chainId": 101, - "address": "6QpsdCum7B8HhonzsrK1XCsJmrsB6kr3A8mzB1nomZb2", - "symbol": "ALKA", - "name": "Alka Sweephy", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/abdullahalkakandilli/alkasweephy/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EWkFXyfTKYbjGFmmYJ8mtogMmwsZJrfZSJmLGHPSLZrg", - "symbol": "TOONIE", - "name": "Toonie Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/VortexHowl/ToonieToken/main/ToonieLogo.png", - "tags": ["utility-token", "community-token", "meme-token"], - "extensions": { - "twitter": "https://twitter.com/VortexHowl" - } - }, - { - "chainId": 101, - "address": "2yqrNM6D2SoqHpJpHYGBAhk8rkbMR8z7TrED19W6JaHh", - "symbol": "MSWL", - "name": "MetaSuite-Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/HarshitChari/Image-classifier/master/pics/WLCoin.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/MetaSuiteNFT", - "website": "https://metasuitenft.com" - } - }, - { - "chainId": 101, - "address": "DcjXyCeXRuVcRoR1LEsL33qLbTL374mCeE1dLbcdyv2B", - "symbol": "WEZ", - "name": "Wezesha", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DcjXyCeXRuVcRoR1LEsL33qLbTL374mCeE1dLbcdyv2B/logo.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/WezeshaCoin", - "website": "https://www.wezesha.co" - } - }, - { - "chainId": 101, - "address": "8w2PWW9XddU28eqAS3ig9E7m8hqWWGKELhUqqyJSUugz", - "symbol": "WIFE", - "name": "NFT Wives WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8w2PWW9XddU28eqAS3ig9E7m8hqWWGKELhUqqyJSUugz/logo.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/thenftwives", - "website": "https://www.thenftwives.com" - } - }, - { - "chainId": 103, - "address": "Ddoy8we5iFxPomFnLVXHxXY7ZAdQsCnFxnW8G2rxYTQF", - "symbol": "AW", - "name": "AW Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Edli-AW422/aw-solana-token/main/aw-logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 103, - "address": "3KTvv2xvLxeVwgLYed5JVpnwpLzmqKjcxeZv1n29bYLp", - "symbol": "BONG", - "name": "Bongo Bear Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3KTvv2xvLxeVwgLYed5JVpnwpLzmqKjcxeZv1n29bYLp/logo.png" - }, - { - "chainId": 101, - "address": "MGTt6Cj6Brg3mHmDSe6NnJhmAvwqoibNBt7xrj92RNu", - "symbol": "MGWL", - "name": "Majin Genies Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/MGTt6Cj6Brg3mHmDSe6NnJhmAvwqoibNBt7xrj92RNu/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "MURjLjujBn6A8Q1fDx96b9f3ftdoqS2FVoLKhpvN6jn", - "symbol": "WHISK", - "name": "Murphiez Whiskey", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/MURjLjujBn6A8Q1fDx96b9f3ftdoqS2FVoLKhpvN6jn/whisk.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/murphiezclub" - } - }, - { - "chainId": 103, - "address": "DBKKTjyzJ6C5p9byNKfUtGMUp7TVeihZ2KxJL4taaXrn", - "symbol": "BULLDOG", - "name": "Bulldog Billionaires Whitelist Token", - "decimals": 0, - "logoURI": "https://user-images.githubusercontent.com/99852311/155863295-f74e3dfe-d49d-46f7-b77b-3b4a0b0a5ba5.png", - "extensions": { - "website": "http://bulldogbillionaires.com" - } - }, - { - "chainId": 101, - "address": "2at5mSqehrvw6qZF97JrAaw5FRGVRnDJvJhygHenXHbE", - "symbol": "MLCN", - "name": "MolleCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MMarleen/crypto/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "51VFUq6gpFqNDjtjcABsdVPRRyJKf1vxwGQK3wd9hEEs", - "symbol": "GRCO", - "name": "Gray Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/beemr4me/Logos/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GGytdhmAWwiAkxkwn3N4TbgHoTrcbSnmE5zXJCfEYjwX", - "symbol": "RBWT", - "name": "RebornBabyWukongToken", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/gilfs/cc/main/rbwtt.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AFbcRd1aFYSdqBUKbV6bAEfka3Kx2cbiBFBJsRhLoeMa", - "symbol": "DROC", - "name": "DROC TOKEN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/droc789/DROC-TOKEN/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Avff6rVko736LDnMXQtbs1ckMM9bS17CmmzZMoUBtNEH", - "symbol": "MTT", - "name": "Meta Trading Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/metatrader9/metatrader9/main/unnamedmtt.jpg", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "BLggR1UrrMTP2UMiQNLkvqr8VyXcE3LD6VtEC8t7XgTi", - "symbol": "JBLR", - "name": "Jacob's ladder", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/bluedenn/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GiLAFSEGwJB3pmMkpAAznS9YBSPe82GtWugzwkBNvJ5v", - "symbol": "STYX", - "name": "STYX", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GiLAFSEGwJB3pmMkpAAznS9YBSPe82GtWugzwkBNvJ5v/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "STYX dug from the deepest depths of the Underworld", - "website": "https://omensofolympus.com/" - } - }, - { - "chainId": 101, - "address": "CwfKdiuKoyMaLb9fPf6QfK5VSzPSCmBXzS4P4QNvrZa4", - "symbol": "KISH", - "name": "Kish Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CwfKdiuKoyMaLb9fPf6QfK5VSzPSCmBXzS4P4QNvrZa4/logo.png", - "tags": ["monkish", "dekt", "utility-token"], - "extensions": { - "description": "Key to the Monkish Kingdom", - "discord": "https://discord.gg/monkish", - "twitter": "https://twitter.com/MonkishRebel", - "website": "https://dekt.life" - } - }, - { - "chainId": 103, - "address": "AHRVZP1DkfRX5vffwKvsUJgbTTFmsXW8cZu43VwGdfuh", - "symbol": "KISH", - "name": "Kish Coin Devnet", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CwfKdiuKoyMaLb9fPf6QfK5VSzPSCmBXzS4P4QNvrZa4/logo.png", - "tags": ["monkish", "dekt", "utility-token"], - "extensions": { - "description": "Key to the Monkish Kingdom", - "discord": "https://discord.gg/monkish", - "twitter": "https://twitter.com/MonkishRebel", - "website": "https://dekt.life/" - } - }, - { - "chainId": 101, - "address": "8weZegtxtcRbdrEXZVvwYHVeRtPQQc1kqWexkhwjgnfd", - "symbol": "NXB", - "name": "Nix Bonds", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8weZegtxtcRbdrEXZVvwYHVeRtPQQc1kqWexkhwjgnfd/logo.png", - "tags": ["nix-bonds"], - "extensions": { - "instagram": "https://www.instagram.com/bondsnxb/" - } - }, - { - "chainId": 101, - "address": "viTh4TyQqxAdLBbnLJ7K1uRJrz7riyMCEfAjRcXQV3V", - "symbol": "VITH", - "name": "Vithril", - "decimals": 9, - "logoURI": "https://www.vivendell.com/images/icon-vithril.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/KR28XfjtYQ", - "twitter": "https://twitter.com/vivendell", - "website": "https://www.vivendell.com/" - } - }, - { - "chainId": 101, - "address": "4shVDxvcyFvGznMh3fWD95W72KczvR9x8A1rKhJ48wnX", - "symbol": "MRAM", - "name": "Matty Ram", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mattesser/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4D7mdfqiQ7G8XMcTnk5gRBxE4m7V7HPaRbGqouxjKfyq", - "symbol": "THMD", - "name": "THERMOMED", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/cemdastan/thermomed/main/thermomed-logo.png", - "tags": ["business-token"] - }, - { - "chainId": 101, - "address": "9Yt9TgPeqNoWJDinGSr1qjz2ou5H3A7Fo6Ks2Edqmmb7", - "symbol": "RENE", - "name": "RENEKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/RENEcat/crypto/main/RENECOIN.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9VhWwUGcgws9ZeBSKdDSmw1CwbYxZS1qER8KkmJX2iRV", - "symbol": "BBR", - "name": "Bagsyb", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Bagsybrawlers/Crypto/main/Bagsyb-logos.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HAevQUdCf52P4XzKTozt75aurAn8ZfHeveVQrtDjG79D", - "symbol": "PANCAKE", - "name": "PancakeCoin", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/InfernalGG/PANCAKE-assets/master/PANCAKE-COIN.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7pJ3ov6LZTgc4pxkWg8vopGEvYvjjYmfiZUjygMhQxKh", - "symbol": "CHAOS", - "name": "CHAOS", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7pJ3ov6LZTgc4pxkWg8vopGEvYvjjYmfiZUjygMhQxKh/chaoslogo.png", - "tags": ["Utility-token"], - "extensions": { - "twitter": "https://twitter.com/BabyMenaceNft", - "website": "https://www.babymenace.com/" - } - }, - { - "chainId": 101, - "address": "8ZxnzfnonFDuB1WBm6P3ESdrPZccn6KnAqiEdkBxMupb", - "symbol": "THC", - "name": "THE HOPE COIN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/thehopecoin/thehopecoin/main/logo.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "8pwSGfFeo2MiwPxNFUf4jEkyFDxaaByxRm5MkLNUvw2K", - "symbol": "NEKO", - "name": "Yukan Neko Coin", - "decimals": 2, - "logoURI": "https://cdn.discordapp.com/attachments/926535226820276264/947426770334924810/Untitled_Artwork.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2YdQtVb48TFFegZQqJTnFBdtLT7bZsMioAAXuuBnwDc7", - "symbol": "NR", - "name": "NeuRon", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/PopusoiIonut/NeuRon/main/Logo.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "G2WKCVbT9oEZN3yQgeTfUz4CVe5zQDWQaEtckFnxnB4r", - "symbol": "KAP", - "name": "Kawaii Animals Pass", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/G2WKCVbT9oEZN3yQgeTfUz4CVe5zQDWQaEtckFnxnB4r/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EHinbFyVA4VckqJ54wxFXHWLxCCYCKxy62oVtRDTCoRD", - "symbol": "$SKULL", - "name": "Skull Invasion", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EHinbFyVA4VckqJ54wxFXHWLxCCYCKxy62oVtRDTCoRD/logo.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "description": "$SKULL is the whitelist community token for the Skull Invasion NFT collection.", - "discord": "https://discord.gg/UxX7FFV577", - "twitter": "https://twitter.com/Skullinvasionn", - "website": "https://www.skullinvasionnft.com" - } - }, - { - "chainId": 103, - "address": "Cjx3nM3AzhECVCkaGPp5GXcEG4JQiGaNR9iYWxTuyFp5", - "symbol": "PURR", - "name": "PURR Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Edli-AW422/aw-solana-token/main/aw-logo.png" - }, - { - "chainId": 103, - "address": "ByEWiEXkwMXzHTT5FkuWzcHY3MzkYT814jFxxN1QLh3g", - "symbol": "UREP", - "name": "UNIVERS REPUBLIK", - "decimals": 9, - "logoURI": "https://github.dev/POPE001/token-list/blob/a59c01f6fdf9ef7a4b9603f72e8d811a0ee8a830/assets/mainnet/ByEWiEXkwMXzHTT5FkuWzcHY3MzkYT814jFxxN1QLh3g/unilever.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "83Mme81p8fbNGaiRmNJMTx9wn5o6RezHq5ztvN1pYpdf", - "symbol": "DOME", - "name": "DOME", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/83Mme81p8fbNGaiRmNJMTx9wn5o6RezHq5ztvN1pYpdf/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3onFNex9u7DdhLoeYVskfamBBdLWRJkwy1RaP4VjwfQQ", - "symbol": "RBT", - "name": "ROYAL EBANK TOKEN", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3onFNex9u7DdhLoeYVskfamBBdLWRJkwy1RaP4VjwfQQ/logo.png", - "tags": ["social-token", "utility-token", "community-token"] - }, - { - "chainId": 101, - "address": "FGtc75KTsueEXeRKRaQXPqUybH6zhszn3cth8PkTFxr5", - "symbol": "LMY", - "name": "LilMissy", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/lokie861/LYM_logo/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9t6F4UJXr9B4xzoSmgC9LwYHb87maYeM58PsoXgNjyVW", - "symbol": "SMBC", - "name": "SambuCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/alexserra/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AqMikDiApiwrHEwusrqaWZ1uBH182WUXsHwp4CS1UMaD", - "symbol": "YOAD", - "name": "YOADcoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/yoadib/crypto/main/%D7%9E%D7%99%D7%96%D7%9D%20%D7%97%D7%93%D7%A9%20(1).jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2XGcH9UUvn7vk8B4xxZaRBqf38Qyrz5W9GyifUwx72FD", - "symbol": "SUNL", - "name": "SunLight", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/SunLight-SUNL/assets/main/logo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8dPtoBrsL8YAcTs3nmibwy5QTNk6p3SoPZGtP5QCTbhM", - "symbol": "MTPR", - "name": "METAPHOR COIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/metaphor-token/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3nJcD3BNVcLhJoxXwXiGEkQ3qoeoRfHZRUK63K54t3Qy", - "symbol": "$BeNFT", - "name": "BeNFT Coin", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/BeNFT2022/images/main/logo.png", - "tags": ["social-token"], - "extensions": { - "description": "$BeNFT revolutionizes employee recognition programs by introcing NFTs", - "telegram": "https://t.me/+Q6nm372MCTtjNDhh", - "twitter": "https://twitter.com/Thebenfts", - "website": "https://www.benft.solutions" - } - }, - { - "chainId": 101, - "address": "AyDDpSg7Q6icGx7RAntSDAuwxdMkEsRWkL4QkeqoQF1H", - "symbol": "BTWL", - "name": "Official Blue Terra WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AyDDpSg7Q6icGx7RAntSDAuwxdMkEsRWkL4QkeqoQF1H/logo.png", - "extensions": { - "website": "https://blueterra.land/" - } - }, - { - "chainId": 101, - "address": "7qFv2mV6Kc7AmGkvaEo5kS2Zy7Z6ofCGdhRk6v3oDQMG", - "symbol": "$HAT", - "name": "Happy Akedo Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/hikaric-io/hikari/main/HappiAkedoToken-256.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DsCP3hKzcpNgpuce9GYqshiq4UNhHHRhr7e75itr8se2", - "symbol": "LIFE", - "name": "LifeLosAngelesco", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/lifelosangelescompany/crypto/main/lifelosangeleslogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FRr6TJLRzGiuCSscmqj7CSr35BQRaJeBewNDu2yYtDPh", - "symbol": "ASTRAL", - "name": "Astra Galactic", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/astragalactic/assets/main/logo-Astro%20Galactic-token.jpg", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "9MkwWhJvRJwaXu9ffQjRgNyHUYWvp42KtchxyGQwkkfP", - "symbol": "CREDO", - "name": "Astra Galactic DAO", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/astragalactic/assets/main/logo-Astra%20Galactic-credo.jpg", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "5a7VDPje5YJrVF5XMUCM7CxPu7FGVifiTEsxpyFc3rSP", - "symbol": "FIN", - "name": "FINCOIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5a7VDPje5YJrVF5XMUCM7CxPu7FGVifiTEsxpyFc3rSP/logo.png", - "tags": ["social-token", "utility-token", "community-token"] - }, - { - "chainId": 101, - "address": "DQDYyw71uRM5QBZdXK2wEDkqqRAox2d5jBdVrLxeXaA8", - "symbol": "SHRD", - "name": "Brawl Shards", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/strongestbrawler/cryptowork/main/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "BSL5GUsceBaKTTijp5ppszeV2xHHzaihSDdL1kQtNnjU", - "symbol": "SKLZ", - "name": "Lost Skollz Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BSL5GUsceBaKTTijp5ppszeV2xHHzaihSDdL1kQtNnjU/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5X6AuKY8QF2xzYUEYYCxf9t9FXhuG76hHJNAB8qUbKqz", - "symbol": "UPGRADE", - "name": "UPGRADE", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5X6AuKY8QF2xzYUEYYCxf9t9FXhuG76hHJNAB8qUbKqz/logo.png", - "tags": ["utility-token", "stake-pool", "stake-pool-token"] - }, - { - "chainId": 101, - "address": "7eDhcd5zo6Dg3LAdezLvGMYE9xHWTzr2ayKzAhQp8DHy", - "symbol": "$", - "name": "Rmi", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/farhan067/richmonkeyisland/main/logo.png" - }, - { - "chainId": 101, - "address": "FXTifEbpv8sMA7TuQb3jm2EvKHMGLyhpBDvAHrzt7V6d", - "symbol": "GoatZ", - "name": "GoatZ", - "decimals": 2, - "logoURI": "https://solaboy.github.io/images/goatz.png", - "tags": ["nft", "crypto", "rewards"], - "extensions": { - "telegram": "https://t.me/goatz_world", - "website": "https://www.goatz.io" - } - }, - { - "chainId": 101, - "address": "5WckfuLPnEamS8VwCJoRUyT6J8C6PE6Ru5kTz6J8ft9f", - "symbol": "DSPY", - "name": "DISPLAY COIN", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/displayclub/displaytoken/main/assets/IMP%20TOKEN%20DSPY.png", - "tags": ["social-token", "utility-token", "community-token"] - }, - { - "chainId": 101, - "address": "HwK5VcHmByX7u3oSM8TrVeECaQPVLFVKr2CtvygvBUMC", - "symbol": "iVIDI", - "name": "iVIDI", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HwK5VcHmByX7u3oSM8TrVeECaQPVLFVKr2CtvygvBUMC/logo.png", - "extensions": { - "discord": "http://discord.gg/vidiart", - "medium": "https://medium.com/@vidiart", - "twitter": "https://twitter.com/Vidi_Art", - "website": "https://vidi.art/" - } - }, - { - "chainId": 101, - "address": "88FwzFbRopWuTmZQKhVLTgr7XhEHrpmHQVtjatJtP1j8", - "symbol": "TSNKC", - "name": "TSINACOIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/kareklas123/kareklaicon/main/unknown.png", - "tags": ["social-token", "karekla-token"] - }, - { - "chainId": 103, - "address": "5xRyUaUVDguVC5uCfZsTv9fHKLQrX5meZshBpnuGEPzY", - "symbol": "TAGE", - "name": "Test Age", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5xRyUaUVDguVC5uCfZsTv9fHKLQrX5meZshBpnuGEPzY/logo.png", - "tags": ["future-token"] - }, - { - "chainId": 101, - "address": "9ZG2JQcQiuNmRq8VtJKDedAX4NLHwuwLWkLoi75vTK4g", - "symbol": "PASS", - "name": "Passport Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/PassportToken/pass/main/logo.PNG", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "31pKQMfQCdAvH8RuWf2k4UGczZdGRQzaznKGSBEqvvZF", - "symbol": "MTT", - "name": "Ming Tung Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MTBHK/MingTungBank/main/MTBLOGOV2.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4RBJRwEAnNEe664LgSECkkfeT4fc6ZjtCMgL7rtUs8g1", - "symbol": "CYRUS", - "name": "Bizarre Platypus Cyrus", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4RBJRwEAnNEe664LgSECkkfeT4fc6ZjtCMgL7rtUs8g1/logo.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "description": "Bizarre Platypus Token.", - "twitter": "https://twitter.com/bizarreplatypus", - "website": "https://bizarreplatypus.io" - } - }, - { - "chainId": 101, - "address": "7KG5WNqNbUdXY5MBX7TUVZMTSD5cGoYxwYwry96GD1sM", - "symbol": "WORKS", - "name": "WORKS", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7KG5WNqNbUdXY5MBX7TUVZMTSD5cGoYxwYwry96GD1sM/logo.png", - "tags": ["utility-token"], - "extensions": { - "facebook": "https://www.facebook.com/officialgigworks", - "instagram": "https://www.instagram.com/officialgigworks/", - "linkedin": "https://www.linkedin.com/company/officialgigworks", - "twitter": "https://twitter.com/gigwrks", - "website": "https://www.works.so" - } - }, - { - "chainId": 101, - "address": "HBteHRLoj7ANfbfxKPhHMvWLMfUg1xz69uhi6C3hfcfo", - "symbol": "SCWL", - "name": "Space Civilians Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Diamond-Hands-Studio/token-images/main/Whitelist.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "77QtZwSAsV9jP6CaS7GoETpboRZ6Gm1gkebxHEybBmvN", - "symbol": "PASS", - "name": "Space Civilians Alpha Squad Pass", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Diamond-Hands-Studio/token-images/main/AlphaSquad.png", - "tags": ["community-token", "Golden-ticket", "NFT"] - }, - { - "chainId": 101, - "address": "E8VwNHRvPR1DBNfTpJdh2dysTDGfsAippyviP7owgY6h", - "symbol": "DONATE", - "name": "Space Civilian Space Whales", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Diamond-Hands-Studio/token-images/main/SpaceWhale.png", - "tags": ["social-token", "community-token", "NFT"] - }, - { - "chainId": 101, - "address": "6JKdix5WeqhB87hAZxgTfCfR27gcD28PnE8roLaw1T1v", - "symbol": "CRED", - "name": "Standard Galactic Credit", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Diamond-Hands-Studio/token-images/main/StandardGalacticCredit.png", - "tags": ["game-token"] - }, - { - "chainId": 101, - "address": "8wpsWoW6bNsnXPpNgVwXRoghHhwBnUWP2DNCRYqBtn3W", - "symbol": "LUCY", - "name": "LUCY", - "decimals": 1, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8wpsWoW6bNsnXPpNgVwXRoghHhwBnUWP2DNCRYqBtn3W/logo.svg", - "tags": ["community", "staking"], - "extensions": { - "discord": "https://discord.gg/dJRVh7nXYb", - "twitter": "https://twitter.com/419NFT", - "website": "https://419.so" - } - }, - { - "chainId": 101, - "address": "GSfjUZ5pN1Ab7RpYsvUX2UiNXxg4zVssGtpCaf8B36hr", - "symbol": "SUTH", - "name": "The Succoth Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/thesuccoth/The-Succoth-coin/main/succoth.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CHWLyMqU4w6nprba4FE6g6E5muUEgS5BmHhaMb3FaBjU", - "symbol": "CHWL", - "name": "Meta Chimp Whitelist Token", - "decimals": 0, - "logoURI": "https://arweave.net/pIWAkKG0Zd14USGL1sc3LCF7x18qDpytvvCv7JGJx78", - "tags": ["whitelist-token"], - "extensions": { - "discord": "https://discord.gg/W8fra6bABu", - "twitter": "https://twitter.com/rationalasf", - "website": "https://linktr.ee/rationalasfuck", - "youtube": "https://www.youtube.com/c/RationalAF" - } - }, - { - "chainId": 101, - "address": "5eU1Wy8QhYkYtLBoUDGEqDjT3vH5RVdKsLCp995KG6VJ", - "symbol": "coc", - "name": "colourcoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MaximilianPrestage/crypto-/main/Colorful_Background_3_RF_RMPL-01.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "u8am3pjJ6poZrpwgerGyAmPYHfg7AmQyR8YNaG39onS", - "symbol": "$FOX", - "name": "Fox Dynasty", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/u8am3pjJ6poZrpwgerGyAmPYHfg7AmQyR8YNaG39onS/logo.png", - "tags": ["community", "staking"], - "extensions": { - "twitter": "https://twitter.com/FoxDynastyNFT", - "website": "https://www.foxdynastynft.com/" - } - }, - { - "chainId": 101, - "address": "EmzYLb3fwhjNp726Na5zLdhgrZjyC8GrfNGyopq6731w", - "symbol": "TYLER", - "name": "Stock Tyler Floor Index", - "decimals": 2, - "logoURI": "https://dl.airtable.com/.attachmentThumbnails/5a6012d507438ca35419bc35cfa941e8/2e865450", - "tags": [ - "bridgesplit-fraction", - "stock-tylers", - "fraction-index", - "fnft" - ], - "extensions": { - "discord": "https://discord.gg/bridgesplit", - "twitter": "https://twitter.com/bridgesplit", - "vault": "https://app.bridgesplit.com/fractions/EmzYLb3fwhjNp726Na5zLdhgrZjyC8GrfNGyopq6731w" - } - }, - { - "chainId": 101, - "address": "J3uigCZEWVwFgGsSnKXFsEsH4AqJ7hLQ7PuN3WGSwfdk", - "symbol": "$NEXT", - "name": "Next Chapter Token", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/J3uigCZEWVwFgGsSnKXFsEsH4AqJ7hLQ7PuN3WGSwfdk/logo.png", - "tags": ["community-token"], - "extensions": { - "website": "https://nextchapter.to/" - } - }, - { - "chainId": 101, - "address": "foG7mADNFZoy2nQt4XWc3Jrhrdu65KZekKWLBvpZyk2", - "symbol": "BRE4D", - "name": "Dapper Ducks Bread", - "decimals": 1, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/foG7mADNFZoy2nQt4XWc3Jrhrdu65KZekKWLBvpZyk2/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/dapper_ducksnft", - "website": "https://thedapperducks.com" - } - }, - { - "chainId": 101, - "address": "FWRVAvoQQ6DWXypAnZojQTwfwvEiBV2jyGFyx9uE2o8x", - "symbol": "$BONES", - "name": "Dapper Ducks BONES", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FWRVAvoQQ6DWXypAnZojQTwfwvEiBV2jyGFyx9uE2o8x/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/dapper_ducksnft", - "website": "https://thedapperducks.com" - } - }, - { - "chainId": 101, - "address": "4J4XAtCWWVrb4FBM4JySPWX3YWix2bTpZNtAAHH4UEba", - "symbol": "SCHOLA", - "name": "Schola", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4J4XAtCWWVrb4FBM4JySPWX3YWix2bTpZNtAAHH4UEba/logo.png", - "extensions": { - "twitter": "https://twitter.com/ScholaEducation", - "website": "https://www.schola.education" - } - }, - { - "chainId": 101, - "address": "CRKzmPtn1jW8SbQjTiEok4tzrEGqgFcTjY6G1943d23C", - "symbol": "EUSP", - "name": "EuroSpeed", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/RubenYordano/EuroSpeed/main/274885725_528552265260738_524344753350750781_n.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EVR1MYMZ929kwEFt9rNgHYkAsjCY8oKFN7svddZXavTB", - "symbol": "GEM", - "name": "Gem Block", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EVR1MYMZ929kwEFt9rNgHYkAsjCY8oKFN7svddZXavTB/logo.png", - "extensions": { - "website": "https://gemblock.co", - "whitepaper": "https://gemblock.co/wp/GEM_Whitepaper.pdf" - } - }, - { - "chainId": 101, - "address": "BHsev9KAEjheM5We6Zew7uYavPcUpXrNr35NBWMJmqVj", - "symbol": "$TDS", - "name": "The Deadly Skulls", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BHsev9KAEjheM5We6Zew7uYavPcUpXrNr35NBWMJmqVj/logo.png", - "extensions": { - "twitter": "https://twitter.com/DeadlyTds" - } - }, - { - "chainId": 101, - "address": "B21QKFnx6PKPvr56VWwCuMG9EovsLWG6tuhHpmCawtEa", - "symbol": "$GIZMO", - "name": "Gizmo Rebels Token", - "decimals": 9, - "logoURI": "https://eager-dubinsky-9aa533.netlify.app/token/gizmo_token_logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Utility token of the Gizmo Rebels NFT collection.", - "discord": "https://discord.gg/4JAwZNP58x", - "twitter": "https://twitter.com/GizmoRebels", - "website": "https://gizmorebels.io/", - "whitepaper": "https://gizmorebels.notion.site/gizmorebels/Gizmo-Rebels-Litepaper-bd8f0ede26cf4603888bd90c54529ffb" - } - }, - { - "chainId": 101, - "address": "5KLMunWFYRRWxHtwk7gE6C4LzmUgnF6LNuj4XPfxCumd", - "symbol": "RONIN", - "name": "Ronin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/RoninFisher/Ronin/main/EagleCircle.png", - "tags": ["social-tokens"] - }, - { - "chainId": 101, - "address": "CN4bGnSdNDD3A6kLTBKffF4ocN3AMg8ZQCrzoRyEZ4Yw", - "symbol": "EDST", - "name": "Ehecatl Dragon Souls Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Chirryrth/EDST/main/Dragon_Soul.png", - "tags": ["social-tokens"] - }, - { - "chainId": 101, - "address": "Komoh63FFuxxMHKuAtpEpL2fYJLooicXKyqDqmPa54n", - "symbol": "KOMO", - "name": "Komoverse", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Komoh63FFuxxMHKuAtpEpL2fYJLooicXKyqDqmPa54n/logo.png", - "tags": ["game-token"] - }, - { - "chainId": 101, - "address": "98MkjJ2nDgSGeYf56DYCzymGpMNTV7iQceHGcfBZ6PdT", - "symbol": "Blockstone", - "name": "Crypto Beach", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/98MkjJ2nDgSGeYf56DYCzymGpMNTV7iQceHGcfBZ6PdT/beach.png", - "tags": ["Crypto-Beach", "Holdiday-homes"], - "extensions": { - "website": "https://blocksto.ne/crypto-beach/" - } - }, - { - "chainId": 101, - "address": "J8ZXjuor6nWYnvsYXKRHPZmEFepZt96dMjeKMfD7qZA2", - "symbol": "$ITKN", - "name": "Hassanat (Islam Token)", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/J8ZXjuor6nWYnvsYXKRHPZmEFepZt96dMjeKMfD7qZA2/logo.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "description": "Hassanat ($ITKN) is the token of Islam, utility token for Muslims who can open the gates of paradise by doing good deeds.", - "discord": "https://discord.gg/qEfCZuJHsu", - "twitter": "https://twitter.com/hassanat_itkn" - } - }, - { - "chainId": 101, - "address": "4agZJaNSecPG8vueyn8cqK8x7sPoU2NeD4kKScRxP7WC", - "symbol": "LIBER", - "name": "Liberum", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Liberumx/crypto/main/Logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "9zeGo62tsX4HG4RepuhczBgBNaBbDuQ2tyaKjqDgaSor", - "symbol": "JV", - "name": "Vibe", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/JakesterMt/SolToken/main/J.png", - "tags": ["utility-token", "social-token"] - }, - { - "chainId": 103, - "address": "Gh9ZwEmdLJ8DscKNTkTqPbNwLNNBjuSzaG9Vp2KGtKJr", - "symbol": "USDC-Dev", - "name": "USD Coin Dev", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v/logo.png", - "tags": ["stablecoin"], - "extensions": { - "blog": "https://medium.com/credix/building-an-spl-token-faucet-on-solana-2b8a07d364ff", - "coingeckoId": "usd-coin" - } - }, - { - "chainId": 101, - "address": "BbsPqYi2Zto5wcJrPz1KiuvnnBMmVbbTo1xVtvLgczqg", - "symbol": "PRLY", - "name": "Parlay", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BbsPqYi2Zto5wcJrPz1KiuvnnBMmVbbTo1xVtvLgczqg/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/parlaynft", - "website": "https://theparlaynft.com/" - } - }, - { - "chainId": 101, - "address": "G2q99gPeUhTdMMtGuMvfq7xn3SpVzUL5d7VPcVXEzFct", - "symbol": "KUMPEL", - "name": "Kumpel Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/S1adem4n/crypto/main/E7284313-B475-4543-B2E9-03CA46F541A2.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BVH95rvjK4mnBiCTioYg7rCnVqxfpHkFvYREJ6A2q4Ka", - "symbol": "JABS", - "name": "Jab Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/adiquet/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AEcFA1cq4Mtz568HL8sd7tQ9EyTYFNV6EHw6KrqYT785", - "symbol": "bSHARD", - "name": "Brawl Shard", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/strongestbrawler/brawlshard/main/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "This is the utility token for BitBrawl.", - "twitter": "https://twitter.com/bitbrawlio" - } - }, - { - "chainId": 101, - "address": "F9ZDLuTiRJwrmeP5zystepNofya4CvDpWpoVkbZbZwi1", - "symbol": "MIKI", - "name": "MindKind", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/F9ZDLuTiRJwrmeP5zystepNofya4CvDpWpoVkbZbZwi1/logo.png", - "tags": ["social-token", "community-token", "utility-token"] - }, - { - "chainId": 101, - "address": "AVKwBcNTBzLa3t24W37yTQKQumaK7E8vrmZHiYDYfX4t", - "symbol": "JSCTC", - "name": "Jaguar Society Coin", - "decimals": 9, - "logoURI": "https://github.com/ArthurPaivaT/token-list/blob/main/assets/mainnet/AVKwBcNTBzLa3t24W37yTQKQumaK7E8vrmZHiYDYfX4t/logo.jpg?raw=true", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "3tYsZEAAfpUBWQt6TShpo6JSuVjPrpx6GruR4BHFHV7J", - "symbol": "$FROTH", - "name": "FROTH", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3tYsZEAAfpUBWQt6TShpo6JSuVjPrpx6GruR4BHFHV7J/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "DuxDz1K3npjMYT6ZoH628pK3zJYjUzDMGT3ZQHKz1VYb", - "symbol": "SST", - "name": "Solana Storm", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DuxDz1K3npjMYT6ZoH628pK3zJYjUzDMGT3ZQHKz1VYb/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://solanastorm.io/" - } - }, - { - "chainId": 101, - "address": "7FvaS3FZ3RThvFeZspkzszF9hj5Zp6SMrxjkoz74NfX", - "symbol": "SKUL", - "name": "SKUL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/76cacdce94f997540d1ecfbad7cb526272cc5c49/assets/mainnet/7FvaS3FZ3RThvFeZspkzszF9hj5Zp6SMrxjkoz74NfX/skull.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "BPkDkV63heb1gxwah1cZ7weoUfaEQapR9qjd27aiJZdc", - "symbol": "$SCALE", - "name": "Cryptilian Scale Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BPkDkV63heb1gxwah1cZ7weoUfaEQapR9qjd27aiJZdc/logo.png", - "tags": ["social-token"], - "extensions": { - "twitter": "https://twitter.com/cryptilians_nft", - "website": "http://cryptilians.io" - } - }, - { - "chainId": 101, - "address": "6dJTbfwiJTD3jHpB2hS8PjDXxdJXQGTHmYNsAfJhwrfq", - "symbol": "DEHC", - "name": "DCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mountaineer2600/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "invSTFnhB1779dyku9vKSmGPxeBNKhdf7ZfGL1vTH3u", - "symbol": "IV", - "name": "Invoker", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/invSTFnhB1779dyku9vKSmGPxeBNKhdf7ZfGL1vTH3u/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/invokers", - "twitter": "https://twitter.com/invokersnft" - } - }, - { - "chainId": 101, - "address": "J2hGHwbkpj2SVo6Bs4X2Houy7n6oauydhbh9D6HpKBU4", - "symbol": "JFI-USDC", - "name": "Jungle DeFi Raydium LP Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/J2hGHwbkpj2SVo6Bs4X2Houy7n6oauydhbh9D6HpKBU4/logo.png", - "tags": ["lp-token"], - "extensions": { - "description": "The Jungle Finance Raydium LP token.", - "discord": "https://discord.gg/2DWjx5NywE", - "medium": "https://medium.com/@JungleDeFi", - "twitter": "https://twitter.com/JungleDeFi", - "website": "https://jungledefi.io/" - } - }, - { - "chainId": 101, - "address": "51D28d7vte67dPtcvX6bnw3V67VVPAUf6HpBhVfhx6cV", - "symbol": "FERGIE", - "name": "Ferguson", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SuperFergie/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CWy42AVkx8jj39Jnb6A2ChupCNcsoqdsiRCYHh3XuREj", - "symbol": "NXTK", - "name": "NxtTek", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/phaktor/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HMKSrb4Nb894wEmwYveACs3y7wHy7TKzf3kqPeiHjaqa", - "symbol": "HMKS", - "name": "Haughty Monkee Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HMKSrb4Nb894wEmwYveACs3y7wHy7TKzf3kqPeiHjaqa/logo.png" - }, - { - "chainId": 101, - "address": "ABaeZ4AJ91Qu2DDZH9yvJD6KrPGkFAUZ7uDycTZwCotH", - "symbol": "PISS", - "name": "PissCoin", - "decimals": 0, - "logoURI": "https://github.com/JarSittel/PissCoin/blob/master/PissCoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "stmnJnBt9kNdjYWrcQSj6ZdLeLvzvrXd8hSKCHHhJ5U", - "symbol": "sFANT", - "name": "Phantasia Staking Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/stmnJnBt9kNdjYWrcQSj6ZdLeLvzvrXd8hSKCHHhJ5U/logo.png", - "tags": ["stake-pool-token", "staking-token"], - "extensions": { - "discord": "https://t.co/Vskz9PkBBC?amp=1", - "github": "https://github.com/Phantasia-Sports", - "medium": "https://medium.com/@phantasia", - "twitter": "https://twitter.com/PhantasiaSports", - "website": "https://phantasia.app/" - } - }, - { - "chainId": 101, - "address": "6sKbBU1ECSokaBeh7jKvhBu2i1ZyDhDUQz8d2FoRpdrC", - "symbol": "PreRacers$", - "name": "Pre-Racers WL token", - "decimals": 0, - "logoURI": "https://imagedelivery.net/aAmca-Po70V1nH4n9cT-uA/8a63a599-2b2b-4261-b12e-19f5cfe24b00/public", - "extensions": { - "discord": "https://discord.gg/YhjYHSJDu5", - "twitter": "https://twitter.com/Spidey_Eden", - "website": "https://spideyeden.com/" - } - }, - { - "chainId": 101, - "address": "2EKoef9nDjJGtLBtXuWCTMyRuB4iidYSThCmoVvQyK3B", - "symbol": "KNIP", - "name": "Kat Koin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/kombatkat/crypto/main/kombatkat.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5bBDXm92dDqqnpmiLPE7ZMFYdLhyhNMLwzotPSar3sLY", - "symbol": "WKN", - "name": "Walkoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/FardMan69420/crypto/master/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ToiQNrFfF7eP9DdtDPhzTLZJvAPDT5yvQqBDEU9FkUn", - "symbol": "DAREDUWL", - "name": "DAREdu Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/bradbalogh/DAREdu-assets/main/DAREDUWL.jpg", - "tags": ["whitelist-token"], - "extensions": { - "discord": "https://discord.gg/sbsJFhGh", - "twitter": "https://twitter.com/DAREdu_NFT", - "website": "https://daredu.io/" - } - }, - { - "chainId": 103, - "address": "FovRJ61rWzbasfX46Zv8HQgzEz7t8VWXezMpRckjU4BM", - "symbol": "CMP", - "name": "Camp Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FovRJ61rWzbasfX46Zv8HQgzEz7t8VWXezMpRckjU4BM/logo.png" - }, - { - "chainId": 101, - "address": "kasaU22JExTfVikDPKqV4yd2W46nAbJcAkz8AK1kxGF", - "symbol": "KASA", - "name": "Kasa", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/kasaU22JExTfVikDPKqV4yd2W46nAbJcAkz8AK1kxGF/logo.png", - "tags": [ - "utility-token", - "tokenized-stock", - "solana", - "kasa", - "real-estate" - ], - "extensions": { - "description": "Bridging the worlds of crypto and real-estate", - "twitter": "https://twitter.com/thekasaproject", - "website": "https://kasa.finance" - } - }, - { - "chainId": 101, - "address": "BZhA4kJHMCEzDxreHKSVEogLWt5hBHfq1A9Aoa64Kb9d", - "symbol": "HCP", - "name": "Hyper Complex Project", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/HyperComplexProject/HCPtoken/main/logo.png", - "tags": ["social-token", "community-token", "NFT"] - }, - { - "chainId": 101, - "address": "2JfA8r8eSAxkjXP9LxGoj8MTe1vCiSCxwesY8ZPyiNoS", - "symbol": "$Shady", - "name": "Shady", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/Ken-tech-max/ShadyTigsToken/main/photo_2022-02-28_06-40-46.jpg", - "tags": ["rewards"], - "extensions": { - "description": "Metaverse talent contests and wealth generation with blockchain validation", - "website": "https://shadytigs.com" - } - }, - { - "chainId": 101, - "address": "Hd65ZzpmXaXgmjRy7QrVPmSqiWzZDRFkLCTBfoBM6XAz", - "symbol": "FIG", - "name": "FIG Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Hd65ZzpmXaXgmjRy7QrVPmSqiWzZDRFkLCTBfoBM6XAz/logo.png", - "tags": ["fig-token", "game-token", "GameFi", "Gaming"], - "extensions": { - "twitter": "https://twitter.com/figs71969430", - "website": "http://projectfigtoken.com/" - } - }, - { - "chainId": 103, - "address": "AAd8oQcBCk2TBvXXzQ77DheoNTNPJSYUxhH6yYGrwLWV", - "symbol": "tETH", - "name": "Test Ethereum (LP Finance Devnet)", - "decimals": 9, - "logoURI": "https://github.com/LP-Finance-Inc/token-image/blob/main/ETH.png", - "tags": ["stablecoin", "LP-Finance"], - "extensions": { - "telegram": "https://t.me/LP_Defi_Official_group", - "twitter": "https://twitter.com/LPFinance_" - } - }, - { - "chainId": 103, - "address": "4fBcqkaR9CpaYkXQGqP6bkkfbSDiuGLD6DDoi6LiuowX", - "symbol": "tAVAX", - "name": "Test Avalanche (LP Finance Devnet)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/LP-Finance-Inc/token-image/main/AVAX.png", - "tags": ["stablecoin", "LP-Finance"], - "extensions": { - "telegram": "https://t.me/LP_Defi_Official_group", - "twitter": "https://twitter.com/LPFinance_" - } - }, - { - "chainId": 103, - "address": "BRaoLCWn5Y2oEN97j4kmxt7zz1ezjFQjDp2iAC4J8pMc", - "symbol": "tLUNA", - "name": "Test Terra (LP Finance Devnet)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/LP-Finance-Inc/token-image/main/wLUNA.png", - "tags": ["stablecoin", "LP-Finance"], - "extensions": { - "telegram": "https://t.me/LP_Defi_Official_group", - "twitter": "https://twitter.com/LPFinance_" - } - }, - { - "chainId": 103, - "address": "EJ94TwhddyUAra7i3qttQ64Q1wExJYb8GmACbHbAnvKF", - "symbol": "tmSOL", - "name": "Test Marinade Staked SOL (LP Finance Devnet)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/LP-Finance-Inc/token-image/main/msol.png", - "tags": ["stablecoin", "LP-Finance"], - "extensions": { - "telegram": "https://t.me/LP_Defi_Official_group", - "twitter": "https://twitter.com/LPFinance_" - } - }, - { - "chainId": 103, - "address": "3bsvftcGX66jB39fLJ2a9ipPgVGWsxEopgJxBfdjar3D", - "symbol": "tRAY", - "name": "Test Raydium (LP Finance Devnet)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/LP-Finance-Inc/token-image/main/RAY.png", - "tags": ["stablecoin", "LP-Finance"], - "extensions": { - "telegram": "https://t.me/LP_Defi_Official_group", - "twitter": "https://twitter.com/LPFinance_" - } - }, - { - "chainId": 103, - "address": "86opZkLhi6V7B5oVgBT1yGvXdKzi6MfTs65M3gHeha4p", - "symbol": "tFTT", - "name": "Test FTX Token (LP Finance Devnet)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/LP-Finance-Inc/token-image/main/FTT.png", - "tags": ["stablecoin", "LP-Finance"], - "extensions": { - "telegram": "https://t.me/LP_Defi_Official_group", - "twitter": "https://twitter.com/LPFinance_" - } - }, - { - "chainId": 103, - "address": "Bwxtq3dx3PiH9t5wKuDPwVNpYoUXSiZyEGkbD7iNGMe", - "symbol": "tLINK", - "name": "Test Chainlink (LP Finance Devnet)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/LP-Finance-Inc/token-image/main/LINK.png", - "tags": ["stablecoin", "LP-Finance"], - "extensions": { - "telegram": "https://t.me/LP_Defi_Official_group", - "twitter": "https://twitter.com/LPFinance_" - } - }, - { - "chainId": 103, - "address": "HY6uvCfBQhKANRxBcYLBK7aUva8mT7mLP2SjrLLmipza", - "symbol": "tUSDT", - "name": "Test Tether (LP Finance Devnet)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/LP-Finance-Inc/token-image/main/usdt.png", - "tags": ["stablecoin", "LP-Finance"], - "extensions": { - "telegram": "https://t.me/LP_Defi_Official_group", - "twitter": "https://twitter.com/LPFinance_" - } - }, - { - "chainId": 103, - "address": "DeYee8csjXSngSSc9PhgyvkQYMPDyUSEXirs9pLVAGst", - "symbol": "tSRM", - "name": "Test Serum (LP Finance Devnet)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/LP-Finance-Inc/token-image/main/srm.png", - "tags": ["stablecoin", "LP-Finance"], - "extensions": { - "telegram": "https://t.me/LP_Defi_Official_group", - "twitter": "https://twitter.com/LPFinance_" - } - }, - { - "chainId": 103, - "address": "Bi775t6MHNDn4hoG3kZr9QDjMUEP6WeD8SNqyAuekQsM", - "symbol": "tUST", - "name": "Test TerraUSD (LP Finance Devnet)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/LP-Finance-Inc/token-image/main/ust.png", - "tags": ["stablecoin", "LP-Finance"], - "extensions": { - "telegram": "https://t.me/LP_Defi_Official_group", - "twitter": "https://twitter.com/LPFinance_" - } - }, - { - "chainId": 103, - "address": "CCFfxDcVY6iCd4EiocQNymZRhZapuGrxVP4TK1PJrVqh", - "symbol": "lpSOL", - "name": "LP Finance Solana", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/LP-Finance-Inc/token-image/main/lpSOL-min.png", - "tags": ["stablecoin", "LP-Finance"], - "extensions": { - "telegram": "https://t.me/LP_Defi_Official_group", - "twitter": "https://twitter.com/LPFinance_" - } - }, - { - "chainId": 103, - "address": "C6DHbFE8eFmiiZPcY1mTPaG928q6cXuE9vD2NHuDL5TH", - "symbol": "lpUSD", - "name": "LP Finance USD", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/LP-Finance-Inc/token-image/main/lpUSD.png", - "tags": ["stablecoin", "LP-Finance"], - "extensions": { - "telegram": "https://t.me/LP_Defi_Official_group", - "twitter": "https://twitter.com/LPFinance_" - } - }, - { - "chainId": 101, - "address": "4xiH8pUEe5u9vs2rNKqbVATePjFEL5er34Qm5spxQxWH", - "symbol": "KNC", - "name": "KCOIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Kameania/crypto/main/KNC.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "WLZAGA9jnK7o5nTgkDTDngSsSuiyegb1p7Ch5DDoQEe", - "symbol": "ATWL", - "name": "OG Atadian WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/KKQanT/token-list/main/assets/mainnet/WLZAGA9jnK7o5nTgkDTDngSsSuiyegb1p7Ch5DDoQEe/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "website": "https://www.atadia.io/" - } - }, - { - "chainId": 101, - "address": "4pzpksQjzXcnWXciTY8Q1rmsWsywaaEZxP8YzJdYGzHU", - "symbol": "LSDC", - "name": "LSDC (419LABS)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4pzpksQjzXcnWXciTY8Q1rmsWsywaaEZxP8YzJdYGzHU/logo.svg", - "tags": ["community", "staking"], - "extensions": { - "discord": "https://discord.gg/dJRVh7nXYb", - "twitter": "https://twitter.com/419NFT", - "website": "https://419.so" - } - }, - { - "chainId": 101, - "address": "9uGQwUDHErypQa317fherN2tmTbGh9L9My16t2eEVomS", - "symbol": "WPSC", - "name": "WPScreators", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/wpscreatros/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FGEDRBaMtigF13ReDs562F3T3CkVvBmorzED3zBufCpC", - "symbol": "CENS", - "name": "Century Token", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FGEDRBaMtigF13ReDs562F3T3CkVvBmorzED3zBufCpC/logo.png", - "tags": [ - "gamefi", - "metaverse", - "create-to-earn", - "play-to-earn", - "parallel-world" - ], - "extensions": { - "telegram": "https://t.me/censworldgroup", - "twitter": "https://twitter.com/CensWorldnft", - "website": "https://century.luxe" - } - }, - { - "chainId": 101, - "address": "5VQnKaTu522jRQyaawDNBKZjBa5SZoeetyDXEwocYxXN", - "symbol": "KING", - "name": "King's token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5VQnKaTu522jRQyaawDNBKZjBa5SZoeetyDXEwocYxXN/logo.png", - "tags": ["meme-coin"], - "extensions": { - "twitter": "https://twitter.com/kings_dao" - } - }, - { - "chainId": 101, - "address": "AnFP69EqWTZqYEuYiTu5ThhHb87mNSFvtGjyctJmhJxT", - "symbol": "Blockstone", - "name": "SolQ", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AnFP69EqWTZqYEuYiTu5ThhHb87mNSFvtGjyctJmhJxT/Blockstone.png", - "tags": ["SolQ", "Guaranteed-SOL"], - "extensions": { - "website": "https://blocksto.ne/solq/" - } - }, - { - "chainId": 101, - "address": "CrSofpzMjwgwTJVjgRG6ctfjNrntSuZTD5fqSqRTAWbd", - "symbol": "Blockstone", - "name": "SolMax", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CrSofpzMjwgwTJVjgRG6ctfjNrntSuZTD5fqSqRTAWbd/Blockstone.png", - "tags": ["SolMax", "Guarantee"], - "extensions": { - "website": "https://blocksto.ne/solmax/" - } - }, - { - "chainId": 101, - "address": "J4qwFUNTtCtyW8fjAHtgiUXBLgNeJcuRoeXiLc18bdJL", - "symbol": "ORI", - "name": "Orinoco Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/orinocof/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BAHCdK2PNwQ15jgUqB9L3Gn78XdeNkXj4gT1ixxVaqyF", - "symbol": "SEED", - "name": "SEED Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/charliebakerr/psy-token/398ad3c190c33e21ef2187113ebabc70dba95d1d/HFSeedCoin.png", - "extensions": { - "description": "Powering the HighFlyerZ economy and beyond", - "discord": "https://discord.gg/3AGKpS9cfR", - "twitter": "https://twitter.com/highflyerzNFT", - "website": "https://highflyerz.io/" - } - }, - { - "chainId": 101, - "address": "2kGvWxSUn8carzriNzyaotLLVrojzYTV6DMkjizJwN8b", - "symbol": "KSA", - "name": "The Kingdom of Saudi Arabia", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/nawrasco/Crypto/main/2.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GT2EtnDCN5sUWCf12P3hjA4QiNjeztLHf8FL1J1PBypa", - "symbol": "UKR", - "name": "Protection of the Ukrainian people", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/nawrasco/Crypto/main/UKR.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3J2KopdK7UwKK83socwHCgFoUPpp2AmyAob6XCnbH4VB", - "symbol": "Blockstone", - "name": "EuroQ", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3J2KopdK7UwKK83socwHCgFoUPpp2AmyAob6XCnbH4VB/Blockstone.png", - "tags": ["EuroQ", "Guaranteed-euro"], - "extensions": { - "linkedin": "https://www.linkedin.com/company/blockstone-online/", - "website": "https://blocksto.ne/euroq/" - } - }, - { - "chainId": 101, - "address": "MMWjJmjppSH8wmoRzi9bZZavRXzWqkG4YYJEreo4zrU", - "symbol": "MMWLT", - "name": "MinerMice Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/MMWjJmjppSH8wmoRzi9bZZavRXzWqkG4YYJEreo4zrU/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "aUNZ2RVAfrPy5Q3aGUp3skJJJ938fn6GW8sG6pQCHrS", - "symbol": "TBBC", - "name": "Billi Brothers", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/aUNZ2RVAfrPy5Q3aGUp3skJJJ938fn6GW8sG6pQCHrS/logo.jpg", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "2EXNrLeEH91HXK1hah4jT51153jE7hFSDKaYah7HBK6J", - "symbol": "MKI", - "name": "MineKoin", - "decimals": 0, - "logoURI": "https://github.dev/nexnux/token-list/blob/18ead90d889940cff3e7b2a233bf7800f292bdf9/assets/mainnet/2EXNrLeEH91HXK1hah4jT51153jE7hFSDKaYah7HBK6J/minecoin.png", - "tags": ["minecraft-coin", "gaming-token", "mineable", "community-token"], - "extensions": { - "twitter": "https://twitter.com/KoinsMine", - "website": "https://minekoin.net/" - } - }, - { - "chainId": 101, - "address": "Ao94rg8D6oK2TAq3nm8YEQxfS73vZ2GWYw2AKaUihDEY", - "symbol": "$CRECK", - "name": "CRECK", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Ao94rg8D6oK2TAq3nm8YEQxfS73vZ2GWYw2AKaUihDEY/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Fg3NLKzwfnhtiEjnbn86wcZiGckuL5bzf61JGSqFi4ot", - "symbol": "VVV", - "name": "Vladimir VS Volodymyr", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/VladVSVolod/Assets/main/VladVSVolod.png", - "tags": ["Vlad-VS-Volod", "Charity", "NFT", "P2E"], - "extensions": { - "website": "https://www.vladimir-volodymyr.com/" - } - }, - { - "chainId": 101, - "address": "H3eTgBUXAdcssxY7Cz496PEg3scxakYsxC4Q4JTTf5SF", - "symbol": "TED", - "name": "Ted prueba", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/H3eTgBUXAdcssxY7Cz496PEg3scxakYsxC4Q4JTTf5SF/logo.png" - }, - { - "chainId": 101, - "address": "4K8wPaVSqDwTeMvTrN9twHZhdnvXTYoqBuw4F8aFkFVg", - "symbol": "WORTH", - "name": "Worthy", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4K8wPaVSqDwTeMvTrN9twHZhdnvXTYoqBuw4F8aFkFVg/logo.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "instagram": "http://instagram.com/worthynfts", - "telegram": "https://t.me/worthynfts", - "twitter": "https://twitter.com/worthynfts" - } - }, - { - "chainId": 101, - "address": "2y2NXKk6vAa3oCmrTuQqnt2CXvcUcqYjcqLqEuHYhQ3U", - "symbol": "KIND", - "name": "Kind Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2y2NXKk6vAa3oCmrTuQqnt2CXvcUcqYjcqLqEuHYhQ3U/logo.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "instagram": "http://instagram.com/worthynfts", - "telegram": "https://t.me/worthynfts", - "twitter": "https://twitter.com/worthynfts" - } - }, - { - "chainId": 101, - "address": "4NJ1L4LHSbJpk4h4rHQnJNKZbRSYticS8sQVPbGHsj33", - "symbol": "BNCE", - "name": "BOUNCER", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4NJ1L4LHSbJpk4h4rHQnJNKZbRSYticS8sQVPbGHsj33/logo.png", - "tags": ["social-token"], - "extensions": { - "discord": "https://discord.gg/parlay", - "twitter": "https://twitter.com/parlaynft", - "website": "https://theparlaynft.com/" - } - }, - { - "chainId": 101, - "address": "4gG8ndgwWt776JFjUgrgas6dYTrK7URox9s5FJysLhzv", - "symbol": "YNI", - "name": "YANI", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4gG8ndgwWt776JFjUgrgas6dYTrK7URox9s5FJysLhzv/logo.png", - "tags": ["utility-token", "social-token", "yansi", "airdrop-token"], - "extensions": { - "description": "Yani coin ment for everyone !!!", - "instagram": "https://instagram.com/yansi.in", - "website": "https://yansi.in" - } - }, - { - "chainId": 101, - "address": "5izdXUfc9km1oXaZj1PomjB8E8CvqoeHxCBxbPGebdbW", - "symbol": "UF", - "name": "Unidad Fomento Digital Chile", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5izdXUfc9km1oXaZj1PomjB8E8CvqoeHxCBxbPGebdbW/logo.png", - "tags": [ - "utility-token", - "tokenized-stock", - "solana", - "uf-chile", - "unidad-fomento" - ], - "extensions": { - "description": "Unidad de Fomento Digital Chile" - } - }, - { - "chainId": 101, - "address": "52spCVSg8zP5GjD4HG8YQa7KP2nDQ9zqxo6e37m67iLA", - "symbol": "THC", - "name": "Treehouse Club", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solanatreehouseclub/token/main/FMiJoG6VgAI0xUc.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "discord": "https://t.co/RS56JPQAz3", - "twitter": "https://twitter.com/TreehouseNFT" - } - }, - { - "chainId": 101, - "address": "HWXWUXUNuBd6euKDxsL3FrCZ6P9RwmVmbXHKSd4MgxoA", - "symbol": "BARMY", - "name": "BARMY", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HWXWUXUNuBd6euKDxsL3FrCZ6P9RwmVmbXHKSd4MgxoA/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://bearsarmy.com/" - } - }, - { - "chainId": 101, - "address": "H4Gu5KgyZhHFjDHJ6dqS8pLiACbumkMwpS9ywRqGGZqL", - "symbol": "JP", - "name": "JP Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/algr0n/JPTOKEN/main/JP.png", - "tags": ["social-token", "MEME", "MEME-TOKEN", "Jordan-Peterson"] - }, - { - "chainId": 101, - "address": "DarkRc495tLsH1ULeXtP2tShUG4iFMDw6dv55oG6AwjZ", - "symbol": "DET", - "name": "Dark Energy", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/thefalseshad0w/crpt-token-/main/DarkRc495tLsH1ULeXtP2tShUG4iFMDw6dv55oG6AwjZ/dark.png", - "tags": ["Community-token", "utility-token"], - "extensions": { - "website": "https://babychimps.xyz/" - } - }, - { - "chainId": 101, - "address": "4FKZsej5FonJWj24xhgG13wV4FSMQqTDwABBQaoQNMZF", - "symbol": "stSOL-mSOL", - "name": "Saber stSOL-mSOL LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4FKZsej5FonJWj24xhgG13wV4FSMQqTDwABBQaoQNMZF/icon.png", - "tags": ["saber-stableswap-lp"], - "extensions": { - "website": "https://app.saber.so/#/pools/stsol_msol" - } - }, - { - "chainId": 101, - "address": "ALPBPdBQf8ibRm3PRCycDC8bdFZQhFgjUwZMtnxA3rAA", - "symbol": "atUST-CASH", - "name": "Saber atUST-CASH LP", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ALPBPdBQf8ibRm3PRCycDC8bdFZQhFgjUwZMtnxA3rAA/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-cashio"], - "extensions": { - "website": "https://app.saber.so/#/pools/atust_cash" - } - }, - { - "chainId": 101, - "address": "ESoLEkfqBkqti137xAmnEHXB4omZpGXUdSPpfBWe9sau", - "symbol": "eSOL-SOL", - "name": "Saber eSOL-SOL LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ESoLEkfqBkqti137xAmnEHXB4omZpGXUdSPpfBWe9sau/icon.png", - "tags": ["saber-stableswap-lp"], - "extensions": { - "website": "https://app.saber.so/#/pools/everstake_sol" - } - }, - { - "chainId": 101, - "address": "FP9C3p1r19tVyUDLgN98wcu4Rdzsu5hAcqFwY3MzbLpE", - "symbol": "scnSOL-mSOL", - "name": "Saber scnSOL-mSOL LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FP9C3p1r19tVyUDLgN98wcu4Rdzsu5hAcqFwY3MzbLpE/icon.png", - "tags": ["saber-stableswap-lp"], - "extensions": { - "website": "https://app.saber.so/#/pools/scn_msol" - } - }, - { - "chainId": 101, - "address": "FTT8cGNp3rfTC6c44uPTuEFLqmsVDhjd2BhH65v2uppr", - "symbol": "ssoFTT-8", - "name": "Saber Wrapped Wrapped FTT (Sollet) (8 decimals)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FTT8cGNp3rfTC6c44uPTuEFLqmsVDhjd2BhH65v2uppr/icon.png", - "tags": [ - "wrapped-sollet", - "ethereum", - "saber-mkt-ftt", - "saber-dec-wrapped" - ], - "extensions": { - "bridgeContract": "https://etherscan.io/address/0xeae57ce9cc1984f202e15e038b964bb8bdf7229a", - "coingeckoId": "ftx-token", - "serumV3Usdc": "2Pbh1CvRVku1TgewMfycemghf6sU9EyuFDcNXqvRmSxc", - "serumV3Usdt": "Hr3wzG8mZXNHV7TuL6YqtgfVUesCqMxGYCEyP3otywZE", - "waterfallbot": "https://bit.ly/FTTwaterfall", - "website": "https://app.saber.so" - } - }, - { - "chainId": 101, - "address": "HUBBGekfLpdZhZcqjLeecLVz39o1ysDkicZpgMgZgPFS", - "symbol": "USDH-USDC", - "name": "Saber USDH-USDC LP", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HUBBGekfLpdZhZcqjLeecLVz39o1ysDkicZpgMgZgPFS/icon.png", - "tags": ["saber-stableswap-lp"], - "extensions": { - "website": "https://app.saber.so/#/pools/usdh" - } - }, - { - "chainId": 101, - "address": "HUBBMrYrYpxkPbBbULdsvSrcoa6Qv526AGuosrhF8V59", - "symbol": "USDH-CASH", - "name": "Saber USDH-CASH LP", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HUBBMrYrYpxkPbBbULdsvSrcoa6Qv526AGuosrhF8V59/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-cashio"], - "extensions": { - "website": "https://app.saber.so/#/pools/usdh_cash" - } - }, - { - "chainId": 101, - "address": "KWAMdUrCdQ2j1t9S1HD29Z4RxXymXkwSh2c94598amY", - "symbol": "atLUNA-LUNA", - "name": "Saber atLUNA-LUNA LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/KWAMdUrCdQ2j1t9S1HD29Z4RxXymXkwSh2c94598amY/icon.png", - "tags": [ - "saber-stableswap-lp", - "saber-lp-allbridge", - "saber-lp-wormhole-v2" - ], - "extensions": { - "website": "https://app.saber.so/#/pools/atust_wust" - } - }, - { - "chainId": 101, - "address": "LUNGEjUXyP48nrC1GYY5o4eTAkwm4RdX8BxFUxWJBLB", - "symbol": "sLUNA-9", - "name": "Saber Wrapped LUNA (Portal) (9 decimals)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/LUNGEjUXyP48nrC1GYY5o4eTAkwm4RdX8BxFUxWJBLB/icon.png", - "tags": [ - "wrapped", - "wormhole", - "saber-mkt-luna", - "wormhole-v2", - "saber-dec-wrapped" - ], - "extensions": { - "address": "uluna", - "bridgeContract": "https://finder.terra.money/columbus-5/address/terra10nmmwe8r3g99a9newtqa7a75xfgs2e8z87r2sf", - "coingeckoId": "terra-luna", - "serumV3Usdc": "HBTu8hNaoT3VyiSSzJYa8jwt9sDGKtJviSwFa11iXdmE", - "website": "https://app.saber.so" - } - }, - { - "chainId": 101, - "address": "LUNbjQA8GAwotiHPiq9cmdVkEfYgZFGhBFnHhicjZtP", - "symbol": "xLUNA-LUNA", - "name": "Saber xLUNA-LUNA LP", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/LUNbjQA8GAwotiHPiq9cmdVkEfYgZFGhBFnHhicjZtP/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-synthetify"], - "extensions": { - "website": "https://app.saber.so/#/pools/xluna" - } - }, - { - "chainId": 101, - "address": "SSoxcNry3qU1wN5Vj6zMJKTSqJPyPLks5KNfCJCmUPa", - "symbol": "cSOL-cmSOL", - "name": "Saber cSOL-cmSOL LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SSoxcNry3qU1wN5Vj6zMJKTSqJPyPLks5KNfCJCmUPa/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-solend"], - "extensions": { - "website": "https://app.saber.so/#/pools/solend_sol_msol" - } - }, - { - "chainId": 101, - "address": "SUSeGZEV69Xy7rQfhDffyTysHgEP3nJUDMxEZJSvJr1", - "symbol": "cUSDC-cUSDT", - "name": "Saber cUSDC-cUSDT LP", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SUSeGZEV69Xy7rQfhDffyTysHgEP3nJUDMxEZJSvJr1/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-solend"], - "extensions": { - "website": "https://app.saber.so/#/pools/solend_usdc_usdt" - } - }, - { - "chainId": 101, - "address": "SoLWs9Av7ss1jHXqVLDVCBiDaAYuT4o5uRNMMuBFhB9", - "symbol": "mSOL-JSOL", - "name": "Saber mSOL-JSOL LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SoLWs9Av7ss1jHXqVLDVCBiDaAYuT4o5uRNMMuBFhB9/icon.png", - "tags": ["saber-stableswap-lp"], - "extensions": { - "website": "https://app.saber.so/#/pools/msol_jsol" - } - }, - { - "chainId": 101, - "address": "SoLaUA1vvCaidtQLYwt4yszBv1LtbYJDjEbwC4bzxca", - "symbol": "scnSOL-JSOL", - "name": "Saber scnSOL-JSOL LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SoLaUA1vvCaidtQLYwt4yszBv1LtbYJDjEbwC4bzxca/icon.png", - "tags": ["saber-stableswap-lp"], - "extensions": { - "website": "https://app.saber.so/#/pools/scn_jsol" - } - }, - { - "chainId": 101, - "address": "USTKgR66nvdkCc4bUKsirzEnyFoPtRyZzT2xsqB5t7c", - "symbol": "solUST-UST", - "name": "Saber solUST-UST LP", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/USTKgR66nvdkCc4bUKsirzEnyFoPtRyZzT2xsqB5t7c/icon.png", - "tags": ["saber-stableswap-lp"], - "extensions": { - "website": "https://app.saber.so/#/pools/solust" - } - }, - { - "chainId": 101, - "address": "USTRHDiTkhjE1oDydHqNkPJNDeBKTTbz9crTmiYc2w9", - "symbol": "solUST-USDH", - "name": "Saber solUST-USDH LP", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/USTRHDiTkhjE1oDydHqNkPJNDeBKTTbz9crTmiYc2w9/icon.png", - "tags": ["saber-stableswap-lp"], - "extensions": { - "website": "https://app.saber.so/#/pools/solust_usdh" - } - }, - { - "chainId": 101, - "address": "UXDgmqLd1roNYkC4TmJzok61qcM9oKs5foDADiFoCiJ", - "symbol": "UXD-USDC", - "name": "Saber UXD-USDC LP", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/UXDgmqLd1roNYkC4TmJzok61qcM9oKs5foDADiFoCiJ/icon.png", - "tags": ["saber-stableswap-lp"], - "extensions": { - "website": "https://app.saber.so/#/pools/uxd" - } - }, - { - "chainId": 101, - "address": "UXDjCH2xGyyLWa92stSUDftWPKGFFPEvqvk28gQA8bW", - "symbol": "UXD-CASH", - "name": "Saber UXD-CASH LP", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/UXDjCH2xGyyLWa92stSUDftWPKGFFPEvqvk28gQA8bW/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-cashio"], - "extensions": { - "website": "https://app.saber.so/#/pools/uxd_cash" - } - }, - { - "chainId": 101, - "address": "WLPmZgnajNcCzYv68gQDsix4NNjTxGTPmKRMtiXMuFg", - "symbol": "soFTT-FTT", - "name": "Saber soFTT-FTT LP", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WLPmZgnajNcCzYv68gQDsix4NNjTxGTPmKRMtiXMuFg/icon.png", - "tags": ["saber-stableswap-lp", "saber-lp-wormhole-v2"], - "extensions": { - "website": "https://app.saber.so/#/pools/sollet_ftt" - } - }, - { - "chainId": 101, - "address": "5azmHy2UZfpYhtxPgzPfGEh9E3i9vmQe945wQKiR1WMz", - "symbol": "RSOULS", - "name": "SolReapers Souls", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/beamseree/SolReapers/main/assets/Soul.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/sol_reapers" - } - }, - { - "chainId": 101, - "address": "DeM5g1xR3Hj3djs1v8BMuDAGfAxzkb2KdAG1M26kNMQ5", - "symbol": "POTUS", - "name": "Presidential", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/asapBern/Cryypto/main/Presidential%20Logo%20-%20Copy.png", - "tags": ["utility-token", "community-token"] - }, - { - "chainId": 101, - "address": "2sbn1jfZUzj8VJutfmsPxtwevZpBDiBWsXJj2owjX3vn", - "symbol": "VOTE", - "name": "Vote", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/vote-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2U7AMRZBMFqNeCpDRnSzVeyvDTTKunssxHUj1twD4oSE", - "symbol": "BDAY", - "name": "Birthday", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/bday-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2urksvP5mopRd1kxmbR93tUWadqq3eSoZjjoFzZYU1Pp", - "symbol": "DONATE", - "name": "Donation", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/donate-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3qYpt9J7XYDDbH882W9uT9wTZiT3i4kKFfR3u87xot47", - "symbol": "TIGE", - "name": "Prestige", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/tige-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4tu2y9ymeNFyQSFJbRmgZ411yiXv1oye9Kkvt29RstLY", - "symbol": "CHTR", - "name": "Character", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/chtr-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "55WUsHhhCPNrUDCzakT1m1h8XhdT2pNNbHwd2EVG3qRX", - "symbol": "CTRL", - "name": "Control", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/ctrl-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "76esUJEVL47TkVj4NFAptPyvx6MNPiVYEVy3EyZ5pk9J", - "symbol": "SKIL", - "name": "Skill", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/skil-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7j6XzCsyiGBm9UNAHeU3BRtehEHeRYHds7mgW44amdxK", - "symbol": "DATA", - "name": "Data", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/data-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7kCXRxhESYfc2cAf5ZQ3NcAfeVPiFCk1aheULz8tvtc1", - "symbol": "CLU", - "name": "CLUE", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/clu-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "86vhTivj5ubLUe9ehUpH78EFATmXfbYxSd3iexqGLb7w", - "symbol": "BAND", - "name": "Band", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/band-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9Lk76j7TkpqRtD4P4VyZWsbVEXb5pMwR8ATzqSDfRkuq", - "symbol": "STRY", - "name": "Story", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/stry-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "A39EVs7VWp9Ei7xgk5TA8FqKtH4pNogD75xCc4qJ5gJQ", - "symbol": "PVCY", - "name": "Privacy", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/pvcy-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AhV8mqAENrbvh6WY5n27uiBWwhcG5CaaYHmBRhuTuSNc", - "symbol": "VOIC", - "name": "Voice", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/voic-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BJSYRWwxzFJZTfMyUt8eDuV16bkagTLpdbHA6rDCFkmj", - "symbol": "BEARD", - "name": "Beard", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/beard-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Bswfb9zBz2WPbfm4zNPqkxCKfmM9A5Y4TLDtyq5Zq9YJ", - "symbol": "TEC", - "name": "Technician", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/tec-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CMWRswKHCyd4dsUXjfc4VVr533niNo5QhGjdN795ETaT", - "symbol": "SRVC", - "name": "Service", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/srvc-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EbeLsKdwKPHJm5FhBTSE7a6tC7w9Y4sDFMACqQFxaXSP", - "symbol": "SUPPORT", - "name": "Support", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/support-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EBKeCBPNh6A76o2VrrrqACsKMXLwGgpJXp7QjnYkZ7QJ", - "symbol": "STOK", - "name": "Stock", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/stok-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EHjN5vK18PepUwuX7pm3HTRQPUrMM9FmfEigTzj5ydQz", - "symbol": "STAF", - "name": "Staff", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/staf-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EkYLxLUfZ5gQ1rFc9yHTrrdL3v6Lt9kr1UrdXxnGLiF5", - "symbol": "ASSOC", - "name": "Associate", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/assoc-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EU3AeXjCZgnsKHqXzfrSNMxHjF62aUGPXmT64PdbLU2B", - "symbol": "SUP", - "name": "Supervisor", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/sup-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FDmQXuuLVSWMWGZSC4v3r563rkX5y678RTH5jK8tb3JL", - "symbol": "MGR", - "name": "Manager", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/mgr-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FKd5geCZS6eNRegp91nWVq2SME5Sxv1S6e93q1ukRPfE", - "symbol": "DIR", - "name": "Director", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/dir-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FPZ93ZC5GJkLZXPrjGP26dRX4yo9uq5R3UXYimKJ82Ym", - "symbol": "OFCR", - "name": "Officer", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/ofcr-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "G1i5oFXWpjYsu5JeAPEvAQysN5RiE9PtBNYoT8aUdbQ9", - "symbol": "TRES", - "name": "Treasurer", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/tres-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GF26aQDP13R1Ha3SXv5bXh9Wm4Kvq4duVH6xUnzyEHjX", - "symbol": "SECR", - "name": "Secretary", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/secr-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GkLmtLYTe3Kc8hBW9hH6kXh9uijJyRJeFgTrLcnyFqKX", - "symbol": "VP", - "name": "Vice President", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/vp-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GyGZZS2ZgPdx5pshRCfxGiCJPU9yM26749e6QZhQps7n", - "symbol": "PRES", - "name": "President", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/pres-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HeX8qsnwPyPNnCmKstissYDm3J6cDUb6ScrAD1Ls5sEL", - "symbol": "EXEC", - "name": "Executive", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/exec-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "647wdbz4VJQ9WXTFNHaNsJrd6gSSHQYeYtvdiLVCSiS", - "symbol": "LEAD", - "name": "Leadership", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/lead-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "29FWnmKQTpBfZX5M2TZnxrgLVHBEdLWgkcuke9XM8RWr", - "symbol": "CDUB", - "name": "Crypto Dubloon", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/officialmigueltorres/Crypto/main/Dubloon-logo-min.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "APbULJeHRq1w7bzXcTJ4CXQQcuYg9u7rYQnc8J4k5Cdh", - "symbol": "EXP", - "name": "EXP", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/APbULJeHRq1w7bzXcTJ4CXQQcuYg9u7rYQnc8J4k5Cdh/EXP-logo.png", - "tags": ["utility-token", "Game-token"], - "extensions": { - "website": "https://bitmon.io" - } - }, - { - "chainId": 101, - "address": "HdsHqjH4fvaSfBuByoM6ijT8hTibdnfXHytJVMvUwoJu", - "symbol": "$Ball", - "name": "Ball", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HdsHqjH4fvaSfBuByoM6ijT8hTibdnfXHytJVMvUwoJu/logo.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/ape_nba", - "website": "https://apenba.com/" - } - }, - { - "chainId": 101, - "address": "7rxkKVPwD7ddXuEryeC7mwHyBscz3eqxmgeYhaeySRnF", - "symbol": "GOOP", - "name": "Goop Coin", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7rxkKVPwD7ddXuEryeC7mwHyBscz3eqxmgeYhaeySRnF/logo.png", - "tags": ["utility-token", "community-token", "social-token"], - "extensions": { - "twitter": "https://twitter.com/TheLickIn13Keys", - "website": "https://goop.house/" - } - }, - { - "chainId": 101, - "address": "NoRDquauNev8h7syCd5zxgNZaYZBqcy2j8YYCDBEa3r", - "symbol": "TyTokn", - "name": "Token of Glory", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/NoRDquauNev8h7syCd5zxgNZaYZBqcy2j8YYCDBEa3r/logo.png", - "extensions": { - "website": "https://www.tylermcnair.com/nordic-glory-nft" - } - }, - { - "chainId": 101, - "address": "41FRcQJzjupZe8MNVcNfYoCCJLtr31aUHVSBwH2zvALd", - "symbol": "QVIP", - "name": "Qi Coin VIP", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/41FRcQJzjupZe8MNVcNfYoCCJLtr31aUHVSBwH2zvALd/logo.png", - "tags": ["community-token"], - "extensions": { - "twitter": "https://twitter.com/hitbalm", - "website": "https://hitbalm.com/" - } - }, - { - "chainId": 101, - "address": "66edZnAPEJSxnAK4SckuupssXpbu5doV57FUcghaqPsY", - "symbol": "PRGC", - "name": "ProtoReality Games Token", - "decimals": 9, - "logoURI": "https://www.protorealitygames.com/images/PRGC_Token.png", - "tags": ["utility-token", "game-token", "gaming"], - "extensions": { - "discord": "https://discord.com/invite/7pjQxtUc5F", - "telegram": "https://t.me/PRG_and_DO119", - "twitter": "https://twitter.com/ProtoRealityGmz", - "website": "https://www.protorealitygames.com", - "youtube": "https://www.youtube.com/channel/UCfSBSgEnTOZfSCOkY5pGqLg" - } - }, - { - "chainId": 101, - "address": "2ekksitUHfghpkwfnEBcD385YBXwGL75tPwcS1i3b3Vw", - "symbol": "DEGA", - "name": "DEGA", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2ekksitUHfghpkwfnEBcD385YBXwGL75tPwcS1i3b3Vw/logo.png", - "tags": ["utility-token", "game-token", "metaverse"] - }, - { - "chainId": 101, - "address": "BYHvqH47A1UrUDZnPhE94X9LLg2ChrxwmkXfabbxy43A", - "symbol": "AKQJ", - "name": "Solitaires Mint Pass", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BYHvqH47A1UrUDZnPhE94X9LLg2ChrxwmkXfabbxy43A/logo512.png", - "tags": ["whitelist-token", "NFT"] - }, - { - "chainId": 101, - "address": "Wi7m4DQFLwz226a3RJeTkPeY6C9rov4hsUvnFxNf2WC", - "symbol": "GMGWL", - "name": "GMG Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Wi7m4DQFLwz226a3RJeTkPeY6C9rov4hsUvnFxNf2WC/logo.jpg", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "FezCBjaR6ZRnwpYuZ8dL2h7kqPWXnwBHcBACzV2B8kRT", - "symbol": "BYTE", - "name": "Byte Buddies", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/Kennyaldez/assets/main/assets/token%20logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "wrBTCqVjkpqktbqN3CeGVSzQ9PFiPonHN98uwEpwMsy", - "symbol": "wrBTC", - "name": "Wrapped BTC (Player 2)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/wrBTCqVjkpqktbqN3CeGVSzQ9PFiPonHN98uwEpwMsy/logo_wrBTC.png", - "tags": ["stablecoin"], - "extensions": { - "discord": "https://discord.gg/player2", - "github": "https://github.com/player2world", - "reddit": "https://www.reddit.com/r/player2world", - "twitter": "https://twitter.com/player2world" - } - }, - { - "chainId": 101, - "address": "45Pt8dSXr59TbB7ZgBXJpycYGkkwdqHYkTcWkpqtNttE", - "symbol": "RUB", - "name": "Massage", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/rub-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6DkU5mszGEVWta5G25536m6uH2kQGVkwQGo2JswWkWLG", - "symbol": "GMBL", - "name": "Poker Chip", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/gmbl-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6vt26AmQr4jciA8S8RP9CJAwxquapdzwPHxkCCFpEENs", - "symbol": "XPRT", - "name": "Expertise", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/xprt-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HnYu5Tfqgcp7uvYH8degPpX5eicNjL7JEMVFq3nj7tP6", - "symbol": "PLDG", - "name": "Pledge", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/pldg-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3B7BHTB3AyZfb2teKirnEZCeUmnvJ5asRkfLJpYoSGq6", - "symbol": "KNO", - "name": "Knowledge", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/kno-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BALLimbbj8tUo76Ksv6ESyNNNR2SKtcfDPeCuLiwpUeE", - "symbol": "MTBL", - "name": "Metaball", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BALLimbbj8tUo76Ksv6ESyNNNR2SKtcfDPeCuLiwpUeE/logo.png", - "tags": ["community-token", "social-token"], - "extensions": { - "discord": "https://discord.com/invite/Rbj9ezcxnC", - "twitter": "https://twitter.com/MetaballNFT", - "website": "https://www.metaballnft.io" - } - }, - { - "chainId": 101, - "address": "EYZMoSHaVmULt3AnujorGweJ6NPqzDaUbLrTiCwZeJYu", - "symbol": "BOTTLE", - "name": "Message Bottle", - "decimals": 0, - "logoURI": "https://dd6jvny7gn5elomvxk6uqibfvsdtpfiid7rxvparqrqaq4kz.arweave.net/GPyatx8zekW5lbq9SCAlrI_c3lQgf43q8EYRgCHFZ_U?ext=png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/BohemiaArtFair" - } - }, - { - "chainId": 101, - "address": "Gj8tg2wwUYqk6MWd21jGgzcSiAumMHaBEfB3VSo5FKoF", - "symbol": "SKB", - "name": "Skarbucks", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/d0nt-by/crypto/main/Body5.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "CbBcr2RnpycCceMMCDRmNXcsqYxDLW4TqfGN6CD3CP9d", - "symbol": "DGKT", - "name": "Digital Knights Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/DigitalKnightsGA/crypto/main/logo.jpg", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "8E46KTad6wrB1TdFnozAjX8BLvL6pnFaADqGL3KFMtX", - "symbol": "HFT", - "name": "Feet Tokens", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/Karfearsw/HeatFeet-Token/main/hft.jpg", - "tags": ["minecraft-coin", "gaming-token", "community-token"], - "extensions": { - "website": "https://Heatfeet401.com/" - } - }, - { - "chainId": 101, - "address": "2EqzJJtqTDeVLmV6wPHyvRLcBYEbqa4PowZjM34mzYay", - "symbol": "SOLYuan", - "name": "SOLYuan universe", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2EqzJJtqTDeVLmV6wPHyvRLcBYEbqa4PowZjM34mzYay/logo.jpg", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "7CUJNc1jHfT9J391frL6CiLhwJUiFBs5SErhdBJ3KAQQ", - "symbol": "WSL", - "name": "webeSail", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7CUJNc1jHfT9J391frL6CiLhwJUiFBs5SErhdBJ3KAQQ/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://webeteer.com" - } - }, - { - "chainId": 101, - "address": "CJ8icYUpMiPNEnxtfqUnDsHEtJA6tqvag9LDNRzzbZRF", - "symbol": "CAOS", - "name": "Cacao", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/buymesalmon3/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AuHBUtTsD2uU5MTSZFwZ9d63Ug78pZ3JxCH7cRNcRxcK", - "symbol": "ZELT", - "name": "ZEL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/kmperkins85/ZEL/main/ZEL_TOKEN_LOGO_3.png", - "tags": ["community-token"] - }, - { - "chainId": 101, - "address": "senWz5Nzt73xvDdk1Qbh3BLL1995xppr52dL8ti4gEo", - "symbol": "SEFMT", - "name": "Scalp Empire FMT", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/senWz5Nzt73xvDdk1Qbh3BLL1995xppr52dL8ti4gEo/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/ScalpEmpireNFT", - "website": "https://www.scalp-empire.com/" - } - }, - { - "chainId": 101, - "address": "AZTJ1BCAZC6MVUnt8NCmK1aBjHVtnbzdpqaHCZBaXv5d", - "symbol": "ESK", - "name": "Eskudo", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/fontes81/eskudo/main/eskudo.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 102, - "address": "7tyjWFuQR2n751LQbb9rvKaDiGQMd4ce3XAVd8K62gwA", - "symbol": "DJIB", - "name": "Djib", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7tyjWFuQR2n751LQbb9rvKaDiGQMd4ce3XAVd8K62gwA/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Universal Data Storage Parachain", - "discord": "https://discord.gg/PpZgKJkKpb", - "github": "https://github.com/Djib-io", - "imageUrl": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7tyjWFuQR2n751LQbb9rvKaDiGQMd4ce3XAVd8K62gwA/logo.png", - "telegram": "https://t.me/DjibTech", - "twitter": "https://twitter.com/Djibchain", - "website": "https://djib.io" - } - }, - { - "chainId": 101, - "address": "5Wsi3RdR7fRYu5KUNrSUHNZuFg7wPhPdJxjMNqu4vme4", - "symbol": "RASCAL", - "name": "Rascal Land Token", - "decimals": 10, - "logoURI": "https://raw.githubusercontent.com/RascalLand/token/main/logo.png", - "tags": [ - "social-token", - "rascal-land", - "rascal-token", - "rascal-land-token" - ], - "extensions": { - "website": "https://rascalland.com/" - } - }, - { - "chainId": 103, - "address": "6R5BbsUof8ipV3evjJEpkZghMUA4ZvX8dndtsLbZpPa8", - "symbol": "SAIS", - "name": "SAI Airdrop Token S", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/staratlas-italia/frontend/main/public/images/apple-touch-icon.png", - "tags": ["airdrop-token"], - "extensions": { - "discord": "https://dsc.gg/staratlasitalia", - "github": "https://github.com/staratlas-italia", - "medium": "https://staratlasitalia.medium.com/", - "twitter": "https://twitter.com/staratlasitalia", - "website": "https://staratlasitalia.com", - "whitepaper": "https://staratlasitalia.com/whitepaper/" - } - }, - { - "chainId": 103, - "address": "8AfufJACJG2VbyxMMN3EEX5aVGuXnYLWPXDf5WuXoogz", - "symbol": "SAIM", - "name": "SAI Airdrop Token M", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/staratlas-italia/frontend/main/public/images/apple-touch-icon.png", - "tags": ["airdrop-token"], - "extensions": { - "discord": "https://dsc.gg/staratlasitalia", - "github": "https://github.com/staratlas-italia", - "medium": "https://staratlasitalia.medium.com/", - "twitter": "https://twitter.com/staratlasitalia", - "website": "https://staratlasitalia.com", - "whitepaper": "https://staratlasitalia.com/whitepaper/" - } - }, - { - "chainId": 103, - "address": "2y6uJ4awE7pqqvk1VPe4Yak66jPcmcfMRiZdy9JzHcW9", - "symbol": "SAIL", - "name": "SAI Airdrop Token L", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/staratlas-italia/frontend/main/public/images/apple-touch-icon.png", - "tags": ["airdrop-token"], - "extensions": { - "discord": "https://dsc.gg/staratlasitalia", - "github": "https://github.com/staratlas-italia", - "medium": "https://staratlasitalia.medium.com/", - "twitter": "https://twitter.com/staratlasitalia", - "website": "https://staratlasitalia.com", - "whitepaper": "https://staratlasitalia.com/whitepaper/" - } - }, - { - "chainId": 101, - "address": "9nT91mYnAjdJYmgDBqa4jY4p6RpHXJKNj7Yz7KyqmZjv", - "symbol": "$CREDZ", - "name": "Neon Game CREDZ", - "decimals": 0, - "logoURI": "https://rxvwsth6k2wkjbpgqixi4db3ekvlailhvm2xa4pcmqzl6dtctqwa.arweave.net/jetpTP5WrKSF5oIujgw7IqqwIWerNXBx4mQyvw5inCw", - "tags": ["utility-token"], - "extensions": { - "website": "https://neon.game" - } - }, - { - "chainId": 101, - "address": "CXNPQApndJ3Wo7bfu43GdA3y1fXuvYGLtodnbvUAJPSY", - "symbol": "rakshpma", - "name": "rakshpma", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CXNPQApndJ3Wo7bfu43GdA3y1fXuvYGLtodnbvUAJPSY/logo.png", - "tags": ["rakshpma-token"] - }, - { - "chainId": 101, - "address": "wrmAVPTbvznVe5LDbL7uRXZCppeyq3LNqacyKswtQqJ", - "symbol": "WORM", - "name": "WORM", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SnootyRavens/logo/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6isPCSZf1ZQdwHMTuRMG9q4DZPKsjFog5o3HM4XCuCc9", - "symbol": "vBOW", - "name": "vBOW", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6isPCSZf1ZQdwHMTuRMG9q4DZPKsjFog5o3HM4XCuCc9/logo.png", - "extensions": { - "twitter": "https://twitter.com/bobosofwar", - "website": "https://bobosofwar.com/" - } - }, - { - "chainId": 103, - "address": "B4fAv9ru7oHX2HuQzTq8XDkwas3xwnokYa4kgzEQEpcm", - "symbol": "DJIB", - "name": "Djib", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/B4fAv9ru7oHX2HuQzTq8XDkwas3xwnokYa4kgzEQEpcm/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Universal Data Storage Parachain", - "discord": "https://discord.gg/PpZgKJkKpb", - "github": "https://github.com/Djib-io", - "imageUrl": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/B4fAv9ru7oHX2HuQzTq8XDkwas3xwnokYa4kgzEQEpcm/logo.png", - "telegram": "https://t.me/DjibTech", - "twitter": "https://twitter.com/Djibchain", - "website": "https://djib.io" - } - }, - { - "chainId": 101, - "address": "Betaza9WsCg2L2PBmqd8QnWBFkMwcxQjGK1rssY6HGWY", - "symbol": "V1CE", - "name": "Vice Club Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/CyberDes1gner/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "J2BWMK44sjgM2dApxMX4Xpst4jCJBBUvaBXj6AbXGdad", - "symbol": "THC", - "name": "Solana Treehouse Club", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solanatreehouseclub/token/main/FMiJoG6VgAI0xUc.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "discord": "https://t.co/RS56JPQAz3", - "twitter": "https://twitter.com/TreehouseNFT" - } - }, - { - "chainId": 101, - "address": "Fq6fRLQ8LrwxtTER6om1wZsuzVjpGZrtL8Bjy3vzSJre", - "symbol": "FOISY", - "name": "Foisy Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MichaelFoisy12/crypto/main/logo.png.JPG", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6zPZniWEfM1KcuhEUAQCzrfgpkzmD8LD2zoyxo4biUG", - "symbol": "OG", - "name": "OG WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/virdagreat147/Pepe-army-Logo/main/purple-heart.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/goblinarmy", - "twitter": "https://twitter.com/GoblinArmyNFT", - "website": "https://goblinmetaverse.io" - } - }, - { - "chainId": 101, - "address": "64ExnkDhpVwKzEjuqnkGgWVEtWZvWTG7JRyqQgzTWtFV", - "symbol": "BFS", - "name": "blockfilesystem", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/64ExnkDhpVwKzEjuqnkGgWVEtWZvWTG7JRyqQgzTWtFV/logo.png", - "tags": ["governance-token", "social-token", "community-token"], - "extensions": { - "description": "Create as many NFTs as you want from pictures, music, json file and more. Use BFS-Acces features to retrieve data and login to your accounts with NFTs.", - "discord": "https://discord.gg/3cUwfJW8C4", - "medium": "https://medium.com/@blockfilesystem", - "telegram": "https://t.me/BlockFileSystem", - "website": "https://www.blockfilesystem.com/" - } - }, - { - "chainId": 101, - "address": "CedGzCs94g69Qjpe4KWWfhwQc5ViGx4oDB6K7daQdL28", - "symbol": "rakeshsh", - "name": "rakeshsh", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CedGzCs94g69Qjpe4KWWfhwQc5ViGx4oDB6K7daQdL28/logo.png", - "tags": ["rakshpma-token"] - }, - { - "chainId": 101, - "address": "4TzFbsSpDKfZCyaSHP92ktyEUiCZ5hGbGwNhWFbzs6rM", - "symbol": "JC", - "name": "JoyCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/djTiTanZ/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3pVGSD3L4n35kcC6m6Z8rmG5j4q7Uq8NvEVPmc9CwrxZ", - "symbol": "CRM", - "name": "Crazy Monkeys Club", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/crazymonkeysclub/CRM-LOGO/main/CRM_TOKEN_LOGO.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7WaSkvYLkqnsqzzsQC58J4w9tMusGNUHHHaUgGXsfMkK", - "symbol": "24x7", - "name": "24x7", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/24x7-Development/logo/main/logo.png", - "tags": ["utility-token", "community-token", "social-token"], - "extensions": { - "discord": "https://discord.gg/9yUjFtcFqP" - } - }, - { - "chainId": 101, - "address": "BHT9o8W1FuG2wBRxbKVQoAyANo1pZPVkrpNWTdGaYwVP", - "symbol": "PXL", - "name": "PXL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BHT9o8W1FuG2wBRxbKVQoAyANo1pZPVkrpNWTdGaYwVP/logo.png", - "tags": ["social-token", "utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/SenseiTrapLord", - "website": "https://pixel.cryptotraplordzclub.com/" - } - }, - { - "chainId": 101, - "address": "RACEKYC7jTn98bEyG8xWFyMJZj9XDXHPfYRsCMoaM33", - "symbol": "RACER", - "name": "Racer", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/RACEKYC7jTn98bEyG8xWFyMJZj9XDXHPfYRsCMoaM33/logo.png", - "tags": ["currency", "Utility-Token", "NFT-token"], - "extensions": { - "twitter": "https://twitter.com/DraceNft" - } - }, - { - "chainId": 101, - "address": "JEBexgRE4xdNHeNAv7c3GCSC7wg3DUwXJybxUNEgiUzD", - "symbol": "FLWT", - "name": "Flowin Wallet LP Token", - "decimals": 0, - "logoURI": "https://somosflow.in/static/media/flowLine.25a310d8.png", - "tags": ["permission-token", "utility-token"] - }, - { - "chainId": 101, - "address": "7vTiyNxmJeWPQjWEChCHhrSZdewidiDWFdF4qy91ZthC", - "symbol": "PTNS", - "name": "Photon Share", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7vTiyNxmJeWPQjWEChCHhrSZdewidiDWFdF4qy91ZthC/logo.png", - "tags": ["DeFi"], - "extensions": { - "website": "https://photondao.finance/" - } - }, - { - "chainId": 101, - "address": "9xvPQbGmUWwhhaRmersVKGvFCYTHQfkiuWgiuzv68YB4", - "symbol": "GPC", - "name": "Guinea Pigs Club", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9xvPQbGmUWwhhaRmersVKGvFCYTHQfkiuWgiuzv68YB4/gpctokenlogo.jpg", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.com/invite/8ZtD23V8Wf", - "twitter": "https://twitter.com/GPCNFT" - } - }, - { - "chainId": 101, - "address": "24z5PixwQnuxFFXaokSEWZ7A97XhcC91HJuLzs9xShZ4", - "symbol": "SLR", - "name": "S0LAR", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/0verdr1v3/idkkkkk/main/test%20tt.png", - "tags": ["NFT"] - }, - { - "chainId": 101, - "address": "J2X4VXBpwhR3rYvwHy6bDpMUiqro6Kjx4RZnMuRspRqJ", - "symbol": "GOOM", - "name": "Goomie", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ki2tech/monty/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6L1A1VAPYURVpgacPawEpDJCRM5xxhL65LB1Qn45tjrp", - "symbol": "KNT", - "name": "Kelvin Network Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/Kelv3200/knt/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3FFpD5G3Bt8V4hKnfhvxYxhxYYijsN9FN8oi727YZfNV", - "symbol": "HOOFCB", - "name": "HOOFCoin Community Builder ", - "decimals": 6, - "logoURI": "https://static.wixstatic.com/media/ade91d_bc0f989a468c48b091cccccf327bf745~mv2.png/v1/fill/w_242,h_242,al_c,q_85,usm_0.66_1.00_0.01/HOOF%20(33).webp", - "tags": ["utility-token"], - "extensions": { - "website": "https://www.hoofit.io/theneighborhood" - } - }, - { - "chainId": 101, - "address": "BT3eJdbY48s8dhBqJ2YoiGxYNg69aT7RYncjQ6CyBxW5", - "symbol": "MTX", - "name": "MeteorX", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/gugunaga/meteor_token/main/assets/MeteorX.png", - "tags": ["nft", "utility-token"], - "extensions": { - "description": "MeteorX is utility token for Dinolana NFT. It is created for investment, gameplay, staking and trading purposes.", - "discord": "https://discord.com/invite/J283ggNcAT", - "twitter": "https://twitter.com/dinolana_sol", - "website": "https://dinolana.world/" - } - }, - { - "chainId": 101, - "address": "2w8c62wDQXzTrtyzLzUBYLKQTrZSRus8c9ULoF339Jhq", - "symbol": "V1CE", - "name": "The Vice Club Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/CyberDes1gner/Crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "68Dyv8edop8MeeAoBA4std17heYETVtmQpSRa5Bk5e3D", - "symbol": "INT", - "name": "Integer", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/chinchillajared/integer/main/int.png", - "tags": ["social-token", "int", "integer"] - }, - { - "chainId": 101, - "address": "CB6T9KSCtLqPnuVA37g43tCWyic7q2MJLe1Cgi8PadtT", - "symbol": "BULLION", - "name": "Bullionaires", - "decimals": 6, - "logoURI": "https://github.com/K3AMZ/crypto/blob/main/5E34C72F-00EA-4EF1-AB5C-97301E139DA2_4_5005_c.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "MHC4pzYWfctfF23WRYXfPTJZEoLp1bCt3KjpCjDcnek", - "symbol": "MGHC", - "name": "MG High Council Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/MHC4pzYWfctfF23WRYXfPTJZEoLp1bCt3KjpCjDcnek/logo.png", - "extensions": { - "twitter": "https://twitter.com/mahogenies", - "website": "https://www.mahogenies.io/" - } - }, - { - "chainId": 101, - "address": "MRCbdHyTNxHco5pUa2vTqUrJZb5TQf3foLaJTLc8WCX", - "symbol": "MGR", - "name": "MG Researcher Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/MRCbdHyTNxHco5pUa2vTqUrJZb5TQf3foLaJTLc8WCX/logo.png", - "extensions": { - "twitter": "https://twitter.com/mahogenies", - "website": "https://www.mahogenies.io/" - } - }, - { - "chainId": 101, - "address": "3kiFobgbSxVtmbp5N2JwKkKpnjamwGRe12kgof8G4CBE", - "symbol": "KRACK", - "name": "CZoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Graemo27/crypto/main/czoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AQnSh5nv9dzm2AfPWLvASo9AA7TTbnnHFd9HboNane5n", - "symbol": "$PIGG", - "name": "Piggish Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ingdavidavila/cryptologo/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "MCL9utLXFvUMdWLou4jk13BBgTu2XRGM983eZ24RsTP", - "symbol": "MC", - "name": "Monkey Crown", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/namu42/ImageRepo/main/MCL9utLXFvUMdWLou4jk13BBgTu2XRGM983eZ24RsTP/logo.png", - "tags": ["TMDC", "THEMONKEYDESIGNCLUB", "metaverse"] - }, - { - "chainId": 101, - "address": "EAYneKaMNLsf52xerf5Bq9Q7PDuLttieXj9jupbvgsEK", - "symbol": "ROMP", - "name": "RowdyRex Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EAYneKaMNLsf52xerf5Bq9Q7PDuLttieXj9jupbvgsEK/logo.png", - "tags": ["rowdyrex", "utlity-token"], - "extensions": { - "website": "https://rowdyrex.com" - } - }, - { - "chainId": 101, - "address": "2xUnwVS4xMb8ZkWn1nvkrgbrDX5BC7dfETfQ5GwXStvv", - "symbol": "Kalit", - "name": "Tilak", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Kalifather/Crypto/main/panda.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AmxkHjjbHVeBRM6CA4sTXVY8Zy8PybHosMFM9gnUpmnh", - "symbol": "METG", - "name": "Metg", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/BiaDN/metgglogo/main/64.png", - "tags": ["metg-token"] - }, - { - "chainId": 101, - "address": "osaRUfE6ccwNMWfdY8X29auM8W4LtyDzaEU4EAHKBhR", - "symbol": "OSARU", - "name": "OSARU Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/osaRUfE6ccwNMWfdY8X29auM8W4LtyDzaEU4EAHKBhR/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "OSARU is a utility token." - } - }, - { - "chainId": 101, - "address": "9pagADTDoxvV4nSNAcJkZ6tHPi9WW45vXeQQspULwmN4", - "symbol": "$MINT", - "name": "Dapper Ducks Mint Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9pagADTDoxvV4nSNAcJkZ6tHPi9WW45vXeQQspULwmN4/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Mint Token for DD Universe" - } - }, - { - "chainId": 103, - "address": "3Lb4NaecWe91oBw3WLWxKMQBvb4LsyHFnmbCt3LySHL5", - "symbol": "ERT", - "name": "Earth", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Hariienesh1901/Earth/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CipcAcgVCPc7duEi633s7nbGvgb1PdJiTs136vrFfEjE", - "symbol": "JUSOL", - "name": "Juiced SOL Carton Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CipcAcgVCPc7duEi633s7nbGvgb1PdJiTs136vrFfEjE/logo.png", - "tags": ["lp-token"], - "extensions": { - "description": "Juiced SOL Carton Token", - "discord": "https://discord.gg/ZXBRGXccR2", - "instagram": "https://www.instagram.com/juicedfi", - "linkedin": "https://www.linkedin.com/company/juicedfi", - "medium": "https://www.medium.com/@juicedfinance", - "twitter": "https://twitter.com/JuicedProtocol", - "website": "https://www.juiced.fi", - "whitepaper": "https://juiced.fi/whitepaper.pdf" - } - }, - { - "chainId": 101, - "address": "2fRCnvb2Gcgz8MvDxK4R1EV8Ax2qN8MkdeDPWALL45Zy", - "symbol": "JUBTC", - "name": "Juiced BTC Carton Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2fRCnvb2Gcgz8MvDxK4R1EV8Ax2qN8MkdeDPWALL45Zy/logo.png", - "tags": ["lp-token"], - "extensions": { - "description": "Juiced BTC Carton Token", - "discord": "https://discord.gg/ZXBRGXccR2", - "instagram": "https://www.instagram.com/juicedfi", - "linkedin": "https://www.linkedin.com/company/juicedfi", - "medium": "https://www.medium.com/@juicedfinance", - "twitter": "https://twitter.com/JuicedProtocol", - "website": "https://www.juiced.fi", - "whitepaper": "https://juiced.fi/whitepaper.pdf" - } - }, - { - "chainId": 101, - "address": "BP3H2mTnkT4yPSR1z8RTf2VTQ192FXvvfXPsGRQBGcR6", - "symbol": "Soul", - "name": "SolNode", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SolNodeAdmin/Crypto/main/lollipop.png", - "tags": ["utility-token"], - "extensions": { - "description": "Soul is a utility token." - } - }, - { - "chainId": 103, - "address": "C9Gbj8yfWF82D5op3JWw3eW5147fzQ7jUnBisZXerzUE", - "symbol": "ALPHAX", - "name": "Alphax", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/C9Gbj8yfWF82D5op3JWw3eW5147fzQ7jUnBisZXerzUE/logo.png", - "tags": ["stablecoin"] - }, - { - "chainId": 101, - "address": "Your3JebQKoJHUPWNJ2LJLT6rHkLbPEq8FVGzFcs23q", - "symbol": "YOUR", - "name": "Your", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Your3JebQKoJHUPWNJ2LJLT6rHkLbPEq8FVGzFcs23q/logo.svg", - "extensions": { - "discord": "https://discord.gg/8deTbfAsdW", - "github": "https://github.com/your-network", - "medium": "https://medium.com/@yourofficial", - "telegram": "https://t.me/your_community", - "twitter": "https://twitter.com/yourtokens", - "website": "https://www.yournetwork.io/" - } - }, - { - "chainId": 101, - "address": "4utgA7JVGbpazbZcTA4H1pN3ZCTmRxmGyuphe1BKs66S", - "symbol": "Fleece", - "name": "Fleece", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/dispnft/token-list/main/assets/mainnet/4utgA7JVGbpazbZcTA4H1pN3ZCTmRxmGyuphe1BKs66S/logo.png", - "tags": ["game-token"], - "extensions": { - "description": "A Game Token" - } - }, - { - "chainId": 101, - "address": "8ywCnyNNZDPMdc7nWPdMn1qASxaMJh6MuRPV4GMCUDLW", - "symbol": "COGS", - "name": "Cogi Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mateo-cogeanu/cogs/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GEMz5TfaV54E6wmGJ1wtArysP99U5pftMExgeCZ6hwoo", - "symbol": "GEMZ", - "name": "LDAC Gemz", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GEMz5TfaV54E6wmGJ1wtArysP99U5pftMExgeCZ6hwoo/logo.png", - "tags": ["utility-token", "game-token"], - "extensions": { - "discord": "https://discord.gg/yhbUPsZs7r", - "twitter": "https://twitter.com/lildegenapeclub", - "website": "https://www.lildegenapeclub.com/" - } - }, - { - "chainId": 101, - "address": "J1TN1Q7AXxvfg9VYVJg2CeHFfWqtuUUqDL6vpRRMNT4M", - "symbol": "AAA", - "name": "Alien Art Academy WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Robby3082/test-token/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "LUXiTyV4h7rXpgvAYSAVPa2TPB3cjABvdenkWTGQEZa", - "symbol": "LUXWL", - "name": "Luxnode WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/LUXiTyV4h7rXpgvAYSAVPa2TPB3cjABvdenkWTGQEZa/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/LuxnodeNFT" - } - }, - { - "chainId": 101, - "address": "EKDrve7QKF2iz6tr9J6Zy5LmNN8biT2uQZ3rg9zoE6Cz", - "symbol": "KOMX", - "name": "Kompas X - Stakeholder Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mtorpdev/cryptoX/main/KompasX-Silver-Coin.png", - "tags": ["investment-token"], - "extensions": { - "description": "A token for investment in Kompas X" - } - }, - { - "chainId": 101, - "address": "3CFHkKtuep49nYndy37LXoQGmLgrKjuD9Q13jEpw6mMH", - "symbol": "RECO", - "name": "REE COIN", - "decimals": 0, - "logoURI": "https://github.com/seankyusunlee/ReeCrypto/blob/main/RcoinLogo1.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "8852hjJiX4JMF7C45KyrypDTJiE7zG9GP3S3o7sweL8e", - "symbol": "VDK", - "name": "Vodka", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/BlackTrickst3r/VodkaToken/main/VTokenFinal.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "discord": "https://discord.gg/WY5BZWQbYu", - "twitter": "https://twitter.com/RussianPunkz", - "website": "https://russianpunkz.net/" - } - }, - { - "chainId": 102, - "address": "CE2GVFioduYefyV2xzbihpH7WZRyZ8om2i8xYWhP2hmT", - "symbol": "KEN", - "name": "KEN COIN", - "decimals": 0, - "logoURI": "https://gateway.pinata.cloud/ipfs/QmSP9dLN9fvTvoBAf4ao3nSRz2bVhXYUct6r663GHFUpU3", - "tags": ["game-token"], - "extensions": { - "description": "Ken's Test Token" - } - }, - { - "chainId": 101, - "address": "7K4WWxp4onH8N7Abw5WKSfpHUmyFiK27K8z65eXwhuV7", - "symbol": "IDI", - "name": "GO FUCK YOURSELF", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7K4WWxp4onH8N7Abw5WKSfpHUmyFiK27K8z65eXwhuV7/logo.png", - "tags": ["social-token", "war-token", "ukraine"], - "extensions": { - "description": "Send these tokens to all Russian invaders", - "facebook": "https://www.facebook.com/UkraineUA.MFA", - "reddit": "https://www.reddit.com/r/ukraine/", - "telegram": "https://t.me/mintsyfra", - "twitter": "https://twitter.com/Ukraine" - } - }, - { - "chainId": 101, - "address": "HjLtBjuh1vMd3N1Hsi2V6akvoziTMrbpnoWnkyXpb9tA", - "symbol": "GUNWL2", - "name": "v2CryptoStrapsWL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HjLtBjuh1vMd3N1Hsi2V6akvoziTMrbpnoWnkyXpb9tA/logo.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "4ncSzoxBDMRPFy8Mx7QsGRtGNYey4uQc8Ydfg9ErRz3X", - "symbol": "YLKT", - "name": "YOLK TOKEN", - "decimals": 8, - "logoURI": "https://user-images.githubusercontent.com/98852228/156415259-09e7d785-8ee4-4398-a906-f8f211a59d15.png", - "tags": ["nft"], - "extensions": { - "description": "The Official Token For The Egg Heads Club" - } - }, - { - "chainId": 101, - "address": "B4eowLak7eJPo3XStE35EqEN7QU4L66PBJ2Jzgf1PMgB", - "symbol": "FUEGO", - "name": "FuegoAmericano", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/CarlosGyael/FuegoAmericano/main/FuegoToken.png", - "tags": ["Currency"], - "extensions": { - "discord": "https://discord.gg/QmxAAzxg", - "instagram": "https://www.instagram.com/fuegoamericano/", - "telegram": "https://t.me/fuegoamericano", - "twitter": "https://twitter.com/FuegoAmericano", - "website": "https://thefuegoamericanollc.com/" - } - }, - { - "chainId": 103, - "address": "CE2GVFioduYefyV2xzbihpH7WZRyZ8om2i8xYWhP2hmT", - "symbol": "KEN", - "name": "KEN COIN", - "decimals": 0, - "logoURI": "https://gateway.pinata.cloud/ipfs/QmSP9dLN9fvTvoBAf4ao3nSRz2bVhXYUct6r663GHFUpU3", - "tags": ["game-token"], - "extensions": { - "description": "Ken's Test Token on DevNet" - } - }, - { - "chainId": 101, - "address": "AAoJ5eYd61QsUBRBxjCcAdsQZpQYxrob2wS4Hzoaeoas", - "symbol": "SNAP", - "name": "SNAPSHOTS", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/ZvsK4/snapshotslogo/main/logo.png" - }, - { - "chainId": 101, - "address": "FBXoa1cW6h4QYaM15dXjmDQXqjsg3ZqqsZr1qAJNESQS", - "symbol": "KBWL", - "name": "Kurai Bats WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FBXoa1cW6h4QYaM15dXjmDQXqjsg3ZqqsZr1qAJNESQS/logo.png", - "tags": ["White-List", "Utility-Token", "NFT"] - }, - { - "chainId": 101, - "address": "GGWL1v6aRnjRFAxi7j2ArQBDRxb1maZz4XGqMsxkdYbt", - "symbol": "GGWL1", - "name": "Glitched Gorilla WL Token 1", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GGWL1v6aRnjRFAxi7j2ArQBDRxb1maZz4XGqMsxkdYbt/GGToken.png", - "tags": ["whitelist-token"], - "extensions": { - "discord": "https://discord.gg/WtpzxsBTGF", - "twitter": "https://twitter.com/MH_Multiverse", - "website": "https://milehighmultiverse.io" - } - }, - { - "chainId": 101, - "address": "7Q9YbR4jPPaDsWsEngubW2z9PGfmWK7xn7AeewMm3qbT", - "symbol": "DLITE", - "name": "Dino Lite", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7Q9YbR4jPPaDsWsEngubW2z9PGfmWK7xn7AeewMm3qbT/Logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/dinolabs", - "twitter": "https://twitter.com/DinoLabsNFT", - "website": "https://dinolabs.gg/" - } - }, - { - "chainId": 101, - "address": "judTED8D9sPVX87UUajnDh2bwdG9MDFUVPzJdGnFYkS", - "symbol": "JU", - "name": "JU", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/judTED8D9sPVX87UUajnDh2bwdG9MDFUVPzJdGnFYkS/logo.png", - "tags": [ - "utility-token", - "game-token", - "game-currency", - "staking", - "staking-reward", - "Gaming" - ], - "extensions": { - "discord": "https://discord.gg/jujudevils", - "instagram": "https://www.instagram.com/jujudevils", - "medium": "https://medium.com/@jujudevils", - "twitter": "https://twitter.com/jujudevilsarmy", - "website": "https://jujudevils.com" - } - }, - { - "chainId": 101, - "address": "EDubeD9UZYFvbGLq8w9JF5o9AaT5WzY9W6CjcrtYvDaw", - "symbol": "ClaBo", - "name": "Cla_Bo", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/collectivtwo/logo/main/alteredlogo.png", - "extensions": { - "twitter": "https://twitter.com/ClaToken" - } - }, - { - "chainId": 101, - "address": "EKrEmPnaNzgGixE61ERsTNn5oMoMqACJf3GniFpgGPbp", - "symbol": "SKELLY", - "name": "Skelly Gang Utillity Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EKrEmPnaNzgGixE61ERsTNn5oMoMqACJf3GniFpgGPbp/SkellyCoin.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "description": "The skelly gang utility token earned through staking your skelly gang NFTs.", - "discord": "https://discord.gg/3T3jVtac", - "twitter": "https://twitter.com/SkellyGangNFT", - "website": "https://skellygang.com" - } - }, - { - "chainId": 101, - "address": "14HfP7zWiNdUPiE6CvyUPC9YWmSc7UsmaqiWcpkcBVFg", - "symbol": "DVI", - "name": "Deep Value Investments", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/DeepValueInvestments/DVI-Token/main/Logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Deep Value Investments (DVI) is developing a multi-asset digital marketplace built from the ground up for Cryptocurrency, NFTs, Equities, Fixed Income, Commodities, and FOREX. DVI is a first-to-market solution delivering a singular platform designed to encompass all cryptocurrency and investment needs for retail investors, institutional prime services (SaaS, TAMP, Operations, etc.), and RIA SaaS offerings." - } - }, - { - "chainId": 101, - "address": "5XFJAEyKtGUruRnjwzKZzDVwjzyyBtLw5TUhyZKyqUbk", - "symbol": "PNH", - "name": "Putin Khuylo", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5XFJAEyKtGUruRnjwzKZzDVwjzyyBtLw5TUhyZKyqUbk/logo.png", - "tags": ["social-token", "war-token", "ukraine"], - "extensions": { - "description": "Send these tokens to all Russian invaders", - "facebook": "https://www.facebook.com/UkraineUA.MFA", - "reddit": "https://www.reddit.com/r/ukraine/", - "telegram": "https://t.me/mintsyfra", - "twitter": "https://twitter.com/Ukraine" - } - }, - { - "chainId": 101, - "address": "8kWgPei6KkkcnoDZGtXGXxAvUkNmug7qbeNnm2zx3xgp", - "symbol": "METAL", - "name": "Metaversol Loyalty Token", - "decimals": 0, - "logoURI": "https://metaversol.com/coinlogo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "6fxKAgb4CYUacmcQueCcjUDrV9R3B2HMSwjxgmk5BaAa", - "symbol": "SOLCOU", - "name": "SOLautos Coupon", - "decimals": 0, - "logoURI": "https://solautos.io/images/SolLogo-768x484.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "GtMieQ5MpEqKWEJEWjp4HbGxDnYCRAps3W8tQ55YVRyj", - "symbol": "SAWL", - "name": "SOLautos Whitelist", - "decimals": 0, - "logoURI": "https://solautos.io/images/SolLogo-768x484.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "AWWL88eXNREJaT1KFvdTWmGnVSSXqxjbYhFUjJ978eFn", - "symbol": "AWWL", - "name": "Awful Waffles Presale Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AWWL88eXNREJaT1KFvdTWmGnVSSXqxjbYhFUjJ978eFn/awwl.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/w3hMaaPvtG", - "twitter": "https://twitter.com/awfulwafflesnft", - "website": "https://awfulwaffles.io" - } - }, - { - "chainId": 101, - "address": "aEvgNv5DVznzHrmJaqDHVuExH2nbLCGbyfhsNfgCYBS", - "symbol": "EXT", - "name": "ErosXT", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/aEvgNv5DVznzHrmJaqDHVuExH2nbLCGbyfhsNfgCYBS/logo.png", - "tags": ["utility-token", "game-token"], - "extensions": { - "discord": "https://discord.gg/NH6jx7JsKE", - "github": "https://github.com/eroticissima", - "twitter": "https://twitter.com/eroticissima" - } - }, - { - "chainId": 101, - "address": "4Juifs2fUxN1h2FM8S9HZRsqyQ2qkLXcE9V9xTvKs2GA", - "symbol": "KIBB", - "name": "Kibble", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/Jonathanriddle/Kibble/main/Lily%201.jpg", - "tags": [ - "social-token", - "utility-token", - "community-token", - "Rescue-Dogs" - ] - }, - { - "chainId": 101, - "address": "BTCA1FcBrsmLJLQVNUHwVkmC2PywfK2Qsw3Lb1kFMqGz", - "symbol": "BTCA1", - "name": "Gold Bitcoin Accumulator", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BTCA1FcBrsmLJLQVNUHwVkmC2PywfK2Qsw3Lb1kFMqGz/logo_BTCA1.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/player2", - "github": "https://github.com/player2world", - "reddit": "https://www.reddit.com/r/player2world", - "twitter": "https://twitter.com/player2world" - } - }, - { - "chainId": 101, - "address": "BTCA2PAfYbqPyeRjMPQdUx6c9yTxQhQL6StdfQjmxmjh", - "symbol": "BTCA2", - "name": "Silver Bitcoin Accumulator", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BTCA2PAfYbqPyeRjMPQdUx6c9yTxQhQL6StdfQjmxmjh/logo_BTCA2.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/player2", - "github": "https://github.com/player2world", - "reddit": "https://www.reddit.com/r/player2world", - "twitter": "https://twitter.com/player2world" - } - }, - { - "chainId": 101, - "address": "BTCA3ZWcWJjW6qcijPSCePZ7WPCgrYm8KJJNVZJzqHd6", - "symbol": "BTCA3", - "name": "Bronze Bitcoin Accumulator", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BTCA3ZWcWJjW6qcijPSCePZ7WPCgrYm8KJJNVZJzqHd6/logo_BTCA3.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/player2", - "github": "https://github.com/player2world", - "reddit": "https://www.reddit.com/r/player2world", - "twitter": "https://twitter.com/player2world" - } - }, - { - "chainId": 101, - "address": "FuMuxd5bcgk8E1xdxawApC8EVEnN5WTTXAhkmHW5pFM9", - "symbol": "MMMC", - "name": "Money Made Magnificent Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Ahzu-Direct-Tech/mmmc/main/logo.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "F6X6hs6whSrTPTuvgdtEfG2B1LvsWWQ4qSDyii3ntuQ7", - "symbol": "JJT", - "name": "Jo Jo Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/CREpto90/Crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Avc1X8iAWLVrsnRtDK6aTyPDichkqe8YAn6ePGTuPAKH", - "symbol": "BREAD", - "name": "BREAD Token", - "decimals": 9, - "logoURI": "https://arweave.net/czwVBNRqXrCthS1R-XH_AoJWPqwDj7DiCxv5tNnyxrQ", - "tags": ["DunkinDucksToken"] - }, - { - "chainId": 101, - "address": "4WRkRD4Pom8bFyhxyoCJtykaXoXZh2WX2KP9KGx6qy7a", - "symbol": "RARECOIN", - "name": "RareCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Player172/RareCoin-Logo/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FCJ3e3aEXVpoeua6m6oLyB5J2TCgn1Ldc2WbHudC4S75", - "symbol": "$TN1", - "name": "TRUST NO 1 TOKEN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SolanaTokenMerger/TRUST-NO-1-TOKEN/main/logo.png", - "tags": ["NFT", "SOLANA"], - "extensions": { - "discord": "https://discord.com/invite/8zzXHaEZF2", - "instagram": "https://www.instagram.com/trustno1_nft", - "twitter": "https://twitter.com/trustno1_nft", - "website": "https://trustno1.onuniverse.com" - } - }, - { - "chainId": 101, - "address": "apnggFw6CdVzxjdVC3KbfT6qVYfNi4VgQBuW7hVM9us", - "symbol": "APN", - "name": "APN", - "decimals": 9, - "logoURI": "https://static.apn.gg/token/apn-signet.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/D2ktsbMd6d", - "twitter": "https://twitter.com/apngg_", - "website": "https://apn.gg" - } - }, - { - "chainId": 101, - "address": "AdAPHuuPvidvcXEoYC4MqwHX2zQHRrHrggQwfgDCTHQQ", - "symbol": "PAELLA", - "name": "Paella Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/ESR20/Crypto/main/logo.png" - }, - { - "chainId": 101, - "address": "AMzmwvDRKdt5AQ3m1m28tWjzBxmQNe1PsmHnYitVZwzp", - "symbol": "JUNKz", - "name": "JUNK", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/XAGBack/JUNKToken1/main/JunkToken.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "CtvD16P3aziZZaamHEyLHVnFN7UpXD9rcziShg2JAuQJ", - "symbol": "CHIQUITA", - "name": "CHIQUITA Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/onuraladi/HonkugaToken/main/honkuga.png", - "tags": ["utility-token", "community-token", "nft-token"], - "extensions": { - "discord": "https://discord.com/3DxXbqHeBH", - "twitter": "https://twitter.com/HonkugaApes" - } - }, - { - "chainId": 101, - "address": "ETsqjC4pUFPBAbjNxHExc1soRodVhCv3sFE3PT19t8S3", - "symbol": "KZN", - "name": "KZN Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/onuraladi/kuzuryutoken/main/kuzuryu.png", - "tags": ["utility-token", "community-token", "nft-token"], - "extensions": { - "discord": "https://discord.gg/APBqNFXNJB", - "twitter": "https://twitter.com/KuzuryuNinja" - } - }, - { - "chainId": 101, - "address": "DBtvzWi1UVyojuwDkKc1a4s56jLquJdZzwgunMYbq3xc", - "symbol": "alen", - "name": "Alinea", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/sumpter32/Cryto/main/alinea.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7MJctMEzbs4VCN7Phu5d2rdg2qAN8cFDCMSR5pXnEAJu", - "symbol": "MINDSET", - "name": "MindSet", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/thesummitoftheworld/solana.mindset_token/main/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "49uThnJWEoBjqYZaVXd6L9KKBR288Z1oXoLH7SUFyBJT", - "symbol": "UNMT", - "name": "UNMUTEX", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/49uThnJWEoBjqYZaVXd6L9KKBR288Z1oXoLH7SUFyBJT/logo.png", - "tags": ["UNMUTEX"] - }, - { - "chainId": 101, - "address": "Frag4ZMMivXrM4YAufTA8z5NpsrTNcXFNSDmz1FhrY43", - "symbol": "FRAG", - "name": "TA Fragments", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/tavernadventures/token-logo/8eb01cf46ad02ab584f9190db5a1d432b677a98f/img/frag.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/tavernadventure" - } - }, - { - "chainId": 101, - "address": "5JYKZTxKqAaT6ADyCyD2zdyihg4xB6TQ2DSAKh9DKn1m", - "symbol": "BCEI", - "name": "Blockchain expo", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5JYKZTxKqAaT6ADyCyD2zdyihg4xB6TQ2DSAKh9DKn1m/logo.png", - "tags": ["BCEI"], - "extensions": { - "website": "http://www.blockchainexpoindia.com/" - } - }, - { - "chainId": 101, - "address": "FHeU7e7Tyw5bNcCNiM1jNVoT5UUims7zRi3o76Kdz4f6", - "symbol": "VEGAS", - "name": "Vegas Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FHeU7e7Tyw5bNcCNiM1jNVoT5UUims7zRi3o76Kdz4f6/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "GPHNiEkx7bWW1ZQWddqqevJ7X5fpGX1LcTwoAdC1NHKg", - "symbol": "DVL", - "name": "Divina Lux", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Ahzu-Direct-Tech/mmmc/main/logo.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "YAWtS7vWCSRPckx1agB6sKidVXiXiDUfehXdEUSRGKE", - "symbol": "YAW", - "name": "Yawww", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/YAWtS7vWCSRPckx1agB6sKidVXiXiDUfehXdEUSRGKE/yaw.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/YawwwNFT", - "website": "https://www.yawww.io" - } - }, - { - "chainId": 103, - "address": "EEGG1MLcWwBQVNwmhoNxMdTjVuuRX24o7Gym2MzQmRST", - "symbol": "READ", - "name": "ReadON Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EEGG1MLcWwBQVNwmhoNxMdTjVuuRX24o7Gym2MzQmRST/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "http://readon.me" - } - }, - { - "chainId": 101, - "address": "v22HTG593HPztGA9gKqEw1KRJVFUECk61Xg2LnugJ9M", - "symbol": "VLW", - "name": "Valley22 Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Justin-hw-Tseng/assets/main/logo.png", - "tags": ["social-token", "member-token"] - }, - { - "chainId": 101, - "address": "og8BnQWDNP1fbn7cGuXkmybmBUxfMpEg4EJK4HT6h6m", - "symbol": "MBCPT", - "name": "MBC Premium Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/og8BnQWDNP1fbn7cGuXkmybmBUxfMpEg4EJK4HT6h6m/logo.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "WLTqMPniYji1c991Qy867DyLWNpP61mjn1VLw22JnLr", - "symbol": "MBCWT", - "name": "MBC Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WLTqMPniYji1c991Qy867DyLWNpP61mjn1VLw22JnLr/logo.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "7FntsntzGjK9PzPBbHLDJAFcKQVU14d2SbQZhgMUf2KA", - "symbol": "TOCO", - "name": "TownCoin", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7FntsntzGjK9PzPBbHLDJAFcKQVU14d2SbQZhgMUf2KA/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://solanatown.com" - } - }, - { - "chainId": 101, - "address": "DMC8y7kpeBYfkbM3MmLREKeSGnw1sdWSv68aDUfH97Bu", - "symbol": "DMC", - "name": "Degen Moon Council Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DMC8y7kpeBYfkbM3MmLREKeSGnw1sdWSv68aDUfH97Bu/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://www.degenmooncouncil.xyz/" - } - }, - { - "chainId": 101, - "address": "RRf92wqDcax85HH6YbRpPJV7Gj1qVAeEqiNouY4mRWw", - "symbol": "RR-FREE", - "name": "Rave Review Free Mint Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/RRf92wqDcax85HH6YbRpPJV7Gj1qVAeEqiNouY4mRWw/logo.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "LFGqoEMMPUDkeWHRHeZucsiAtgudgDw9DaLjvxXMEmn", - "symbol": "LFGOLD", - "name": "24K Gorilla Club Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/LFGqoEMMPUDkeWHRHeZucsiAtgudgDw9DaLjvxXMEmn/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://www.24kgorillaclub.io/" - } - }, - { - "chainId": 101, - "address": "EZjzDwkNYWhpprD1thHaGZvJDh8U5WJV86JX9erS6ovD", - "symbol": "XSD", - "name": "Sealand Dollar", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EZjzDwkNYWhpprD1thHaGZvJDh8U5WJV86JX9erS6ovD/logo.png" - }, - { - "chainId": 101, - "address": "3nP1SUoA9XWL5qDam7BKWd8QnLtRHDtfZuSmwgfTnBe2", - "symbol": "TGRT", - "name": "Research Token", - "decimals": 0, - "logoURI": "https://metaversol.com/research.png", - "tags": ["utility-token"], - "extensions": { - "description": "Research token used to power and perform research in the Test Guys Lab", - "discord": "https://discord.gg/metaversol", - "twitter": "https://twitter.com/MxMetaversol", - "website": "https://testguys.fail/" - } - }, - { - "chainId": 101, - "address": "RRpPtGKTBRuawbvqGqAPPtu81Gmhhg4LZww4BDarXZv", - "symbol": "RR-PRE", - "name": "Rave Review Pre Mint Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/RRpPtGKTBRuawbvqGqAPPtu81Gmhhg4LZww4BDarXZv/logo.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "4P4jjC6KjwVTCxhpfj4pQGBC1ohUaNin8QaWwPyge9ML", - "symbol": "SHEEP", - "name": "Solana Cyclopes", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/Robby3082/test-token/main/cyclopes.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "5YU1m4qUFrTnedrM29BDmBD8cmAkrVSqiRPKbfhPvFRt", - "symbol": "VERU", - "name": "Daveru", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ktabong/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EmXeQPjrZf99SnGfd8oSFr6VeVWJtU7FcxJmzfr1cMzX", - "symbol": "TTc", - "name": "TTcoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/xTTLegend/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3paMrtwA8pEspcKYHNrWNjxG36oL9BTTG7JKNwYUud4i", - "symbol": "DV", - "name": "Divina-Lux", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Ahzu-Direct-Tech/mmmc/main/logo.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "7ZoFUd5CkcU4fQnhvpAYWSPV7wkHtxKm2Q9R5W733CKd", - "symbol": "FLG", - "name": "FLY GUYS MINT PASS", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7ZoFUd5CkcU4fQnhvpAYWSPV7wkHtxKm2Q9R5W733CKd/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://www.flyguys.xyz/" - } - }, - { - "chainId": 101, - "address": "HTy2Go2xA5BtGrnAyoVUPHsLyUKnLXkqucuAYYvQoLS6", - "symbol": "Byte", - "name": "Byte Buddies Chip", - "decimals": 9, - "logoURI": "https://media.discordapp.net/attachments/949172481690861598/949267442562113586/token_logo_Cropped.jpg", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/qRw9yN4qFr", - "twitter": "https://twitter.com/bytebuddiesnft" - } - }, - { - "chainId": 101, - "address": "rwLH899ZJpjdWb2si3213HMHSvH4yMJdCj6Ne3HrkN4", - "symbol": "ATRWL", - "name": "OG Atadian RWL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/KKQanT/token-list/main/assets/mainnet/rwLH899ZJpjdWb2si3213HMHSvH4yMJdCj6Ne3HrkN4/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "website": "https://www.atadia.io/" - } - }, - { - "chainId": 101, - "address": "9dEi5k9tT8RNKuYhGbskKBoPxK8mwGAufqCDXGbw6EHp", - "symbol": "GNC", - "name": "Green coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/kostasbekis/green-coin/main/GCN.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "F1utinCFGALViGVnFmACcmCRooV4PLTcUCc5gL2HExu8", - "symbol": "HAY", - "name": "Hay Bale", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/F1utinCFGALViGVnFmACcmCRooV4PLTcUCc5gL2HExu8/logo.png" - }, - { - "chainId": 101, - "address": "6BxLMs9ggwKUU7c6VUJ9WWH5o7q8UyvZbXMNFg7ivgMq", - "symbol": "FDST", - "name": "FoodStamp", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/FoodStampCoins/Stamps/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "THCBB791xLFhRhxPHMDVN9m5KDeBBjwh6dfBbnTuPe9", - "symbol": "THC", - "name": "Club 420 Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/THCBB791xLFhRhxPHMDVN9m5KDeBBjwh6dfBbnTuPe9/Logo.png", - "tags": ["community-token", "utility-token", "nft-staking"], - "extensions": { - "discord": "https://discord.gg/PzJpxNkHNf", - "twitter": "https://twitter.com/Club420_NFT", - "website": "https://club420nft.com/" - } - }, - { - "chainId": 101, - "address": "5JNEb6GzBY1VrfXCugU5bBQ5mEo9G7g3ySnE6cMzZSGC", - "symbol": "$BUD", - "name": "BUD", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5JNEb6GzBY1VrfXCugU5bBQ5mEo9G7g3ySnE6cMzZSGC/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.com/invite/krypto-kronikz", - "instagram": "https://www.instagram.com/kryptokronikz", - "twitter": "https://twitter.com/KryptoKronikz", - "website": "https://www.kryptokronikz.co.uk/" - } - }, - { - "chainId": 101, - "address": "9Cn5bRH8KaCpk91zZyLQDF6AFkp6ycZyP7TDMDWps1uc", - "symbol": "MEDIBLOCK", - "name": "MedicalBlockchain", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/WHug0/crypto/main/logo2.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "646YeDRsCEnRNYoDa5hLogGroBcCrtc3wwEUwQEAv73X", - "symbol": "SLICE", - "name": "Benevolent Order of The Slice", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Rajyyan/Slice/main/logo.png", - "tags": ["membership-token"] - }, - { - "chainId": 103, - "address": "9Cn5bRH8KaCpk91zZyLQDF6AFkp6ycZyP7TDMDWps1uc", - "symbol": "MEDIBLOCK", - "name": "MedicalBlockchain", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/WHug0/crypto/main/logo2.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9Q1qB6pJCksvBZFwwMssD4P6yt67o6SPJhnE6KCjzmJr", - "symbol": "UFC", - "name": "UFuture Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/danielmahech/crypto1/main/poi-min.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Fdju8iLbXXiM9QFz7xSZudtwUQuKHC1ecEQDNTeHPFBk", - "symbol": "SPCE", - "name": "Space Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/azvaliev/token-icons/master/3dQIR2cTzqBPcbvf1d2a.jpg", - "tags": ["community-token"] - }, - { - "chainId": 101, - "address": "6EYX7x2SMbvnUEK18XXzdSeVxeH1yMdh7yBsnSvKkjCD", - "symbol": "FUTR", - "name": "Future Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/azvaliev/token-icons/master/IYC9z9eDvBthkfOIVPMI.jpg", - "tags": ["community-token"] - }, - { - "chainId": 101, - "address": "GJUQB41W77dHbK1JU7oEP7UBP4gmj8uPSMfao8UGn2hu", - "symbol": "MAEC", - "name": "Meta Ape Elite Club WL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GJUQB41W77dHbK1JU7oEP7UBP4gmj8uPSMfao8UGn2hu/logo.png", - "tags": ["whitelist"], - "extensions": { - "discord": "https://discord.com/invite/2nxeZFf7Jw", - "twitter": "https://twitter.com/MetaApeEC", - "website": "https://metaapeeliteclub.com/" - } - }, - { - "chainId": 101, - "address": "DJTMxBZDpjFv27o4QzTSkSBb2TZPFTsAnXaAWPrJept6", - "symbol": "DJWLT", - "name": "Dino Jump WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DJTE14SD24SKmPv6pLt84173srwbBgt7YGyfHZ5oVhwp/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GWLtBqEcnSsPWS8Sj79BJETGoEAGbCZKRy9LQbsCveLJ", - "symbol": "GPWL", - "name": "GatePass Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GWLtBqEcnSsPWS8Sj79BJETGoEAGbCZKRy9LQbsCveLJ/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "obtF8YwHn2g7uhmtziqVn4wvD2r99e3DPcQo4rFaN1G", - "symbol": "OCXWL", - "name": "Oblivion City X Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/obtF8YwHn2g7uhmtziqVn4wvD2r99e3DPcQo4rFaN1G/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CfNkADyvwg66yLtctbuDo381s6VqVC8583ur7uvooE43", - "symbol": "HB", - "name": "Honey Badges Presale Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CfNkADyvwg66yLtctbuDo381s6VqVC8583ur7uvooE43/logo.png", - "tags": ["presale-token"], - "extensions": { - "twitter": "https://twitter.com/HoneyBadgesNFT", - "website": "https://www.honeybadges.xyz/" - } - }, - { - "chainId": 103, - "address": "4XZhhTtMQ2SXmBSKucQ28PtseRtwBGpc4AVej37kuTTv", - "symbol": "fDOGE_d", - "name": "Synthetic Doge (devnet)", - "decimals": 8, - "logoURI": "https://imagedelivery.net/9NaZ0y3QBjls8_Ib2N2gQw/12cd1cf4-f68a-4b32-355e-b40053725300/public", - "tags": ["fabric", "synthetics"], - "extensions": { - "github": "https://github.com/fabric-foundation/", - "medium": "https://xfabric.medium.com/", - "twitter": "https://twitter.com/official_fabric", - "website": "https://fsynth.io/" - } - }, - { - "chainId": 103, - "address": "BWc6VuazzHxJ8yRrWocjLZfKjfEkMEr8grYMhT8jLQWK", - "symbol": "fEUR_d", - "name": "Synthetic Euro (devnet)", - "decimals": 8, - "logoURI": "https://imagedelivery.net/9NaZ0y3QBjls8_Ib2N2gQw/1ed84129-6754-4668-7e4b-2cf143f5a100/public", - "tags": ["fabric", "synthetics"], - "extensions": { - "github": "https://github.com/fabric-foundation/", - "medium": "https://xfabric.medium.com/", - "twitter": "https://twitter.com/official_fabric", - "website": "https://fsynth.io/" - } - }, - { - "chainId": 103, - "address": "FK12Vfus9VH4kasYe7d7R6syEcuTbS8JCJtk9ZmesT5q", - "symbol": "fGBP_d", - "name": "Synthetic GB Pound (devnet)", - "decimals": 8, - "logoURI": "https://imagedelivery.net/9NaZ0y3QBjls8_Ib2N2gQw/b00332ce-5694-4d33-09fc-d523b63bbe00/public", - "tags": ["fabric", "synthetics"], - "extensions": { - "github": "https://github.com/fabric-foundation/", - "medium": "https://xfabric.medium.com/", - "twitter": "https://twitter.com/official_fabric", - "website": "https://fsynth.io/" - } - }, - { - "chainId": 103, - "address": "BwhbNiZRwTKB7rz6n95SUQcMwkFYbb9cx2h6FPDHstwU", - "symbol": "fBTC_d", - "name": "Synthetic Bitcoin (devnet)", - "decimals": 8, - "logoURI": "https://imagedelivery.net/9NaZ0y3QBjls8_Ib2N2gQw/ec84365d-c9a9-45b6-afeb-4ca5ca831600/public", - "tags": ["fabric", "synthetics"], - "extensions": { - "github": "https://github.com/fabric-foundation/", - "medium": "https://xfabric.medium.com/", - "twitter": "https://twitter.com/official_fabric", - "website": "https://fsynth.io/" - } - }, - { - "chainId": 103, - "address": "A6QvgEnaFf2ftq35M5kztaxRufpeiryWuPXEXM71AjmA", - "symbol": "fADA_d", - "name": "Synthetic Cardano (devnet)", - "decimals": 8, - "logoURI": "https://imagedelivery.net/9NaZ0y3QBjls8_Ib2N2gQw/a6d47d98-ea35-47ec-cf43-eb95ac94d500/public", - "tags": ["fabric", "synthetics"], - "extensions": { - "github": "https://github.com/fabric-foundation/", - "medium": "https://xfabric.medium.com/", - "twitter": "https://twitter.com/official_fabric", - "website": "https://fsynth.io/" - } - }, - { - "chainId": 103, - "address": "J9nzLNpbc8vfvyV45RDAgjH2LkYH1KnegGfDXKmKbdMT", - "symbol": "fAVAX_d", - "name": "Synthetic Avax (devnet)", - "decimals": 8, - "logoURI": "https://imagedelivery.net/9NaZ0y3QBjls8_Ib2N2gQw/aa894435-4e95-4af0-e4ff-5faefbc65b00/public", - "tags": ["fabric", "synthetics"], - "extensions": { - "github": "https://github.com/fabric-foundation/", - "medium": "https://xfabric.medium.com/", - "twitter": "https://twitter.com/official_fabric", - "website": "https://fsynth.io/" - } - }, - { - "chainId": 103, - "address": "4qr9SiYyi4E3k6DT9ycD6CQh8m5E82gNkoUWNvTxZefj", - "symbol": "fBCH_d", - "name": "Synthetic Bitcoin Cash (devnet)", - "decimals": 8, - "logoURI": "https://imagedelivery.net/9NaZ0y3QBjls8_Ib2N2gQw/17e71390-758e-4355-bae1-5b0fb6afed00/public", - "tags": ["fabric", "synthetics"], - "extensions": { - "github": "https://github.com/fabric-foundation/", - "medium": "https://xfabric.medium.com/", - "twitter": "https://twitter.com/official_fabric", - "website": "https://fsynth.io/" - } - }, - { - "chainId": 103, - "address": "FgsHQ2TdFokDuEVGYdhkrwoxD1Y8bg5HcTRCmD7KEpgb", - "symbol": "fFTM_d", - "name": "Synthetic Fantom (devnet)", - "decimals": 8, - "logoURI": "https://imagedelivery.net/9NaZ0y3QBjls8_Ib2N2gQw/875a80a0-4ae6-4d76-bc8b-3f2eee6b5b00/public", - "tags": ["fabric", "synthetics"], - "extensions": { - "github": "https://github.com/fabric-foundation/", - "medium": "https://xfabric.medium.com/", - "twitter": "https://twitter.com/official_fabric", - "website": "https://fsynth.io/" - } - }, - { - "chainId": 103, - "address": "FE9KLJTUyd2jSnpKRmnxoJB2CQhTFLTmhc8D5Szdpxue", - "symbol": "fLUNA_d", - "name": "Synthetic Luna (devnet)", - "decimals": 8, - "logoURI": "https://imagedelivery.net/9NaZ0y3QBjls8_Ib2N2gQw/8bf381db-f096-4d6f-3397-e9224a012c00/public", - "tags": ["fabric", "synthetics"], - "extensions": { - "github": "https://github.com/fabric-foundation/", - "medium": "https://xfabric.medium.com/", - "twitter": "https://twitter.com/official_fabric", - "website": "https://fsynth.io/" - } - }, - { - "chainId": 103, - "address": "r7KZ6SgMCPeA6MU7bjtxgV1xageYcstYzmw4Ed2UQZz", - "symbol": "fNEAR_d", - "name": "Synthetic Near (devnet)", - "decimals": 8, - "logoURI": "https://imagedelivery.net/9NaZ0y3QBjls8_Ib2N2gQw/86dbb0ed-4918-4495-ded2-b8ed1ee2d000/public", - "tags": ["fabric", "synthetics"], - "extensions": { - "github": "https://github.com/fabric-foundation/", - "medium": "https://xfabric.medium.com/", - "twitter": "https://twitter.com/official_fabric", - "website": "https://fsynth.io/" - } - }, - { - "chainId": 103, - "address": "8Pb8DVqFpHZjs9gr3C6EaALRaLihsMaFjNFYnHcuBYAN", - "symbol": "fRUB_d", - "name": "Synthetic Ruble (devnet)", - "decimals": 8, - "logoURI": "https://imagedelivery.net/9NaZ0y3QBjls8_Ib2N2gQw/2fc3c060-058b-40f7-d0c4-f0cda2028a00/public", - "tags": ["fabric", "synthetics"], - "extensions": { - "github": "https://github.com/fabric-foundation/", - "medium": "https://xfabric.medium.com/", - "twitter": "https://twitter.com/official_fabric", - "website": "https://fsynth.io/" - } - }, - { - "chainId": 101, - "address": "4MG83Q5NfZp7tecbaURs3zS5LbXjAXhwTHffrv49xLGX", - "symbol": "MsT", - "name": "Ms Token", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/MeherTrident/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GS6E87SLTioRDG3uSVRwQmuKKMxDmWU7fktCTJ5xkEM8", - "symbol": "WAVE", - "name": "Lost At Sea WAVE", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GS6E87SLTioRDG3uSVRwQmuKKMxDmWU7fktCTJ5xkEM8/logo.png", - "tags": ["community-token", "utility-token", "nft-staking"], - "extensions": { - "twitter": "https://twitter.com/lostatseanft", - "website": "https://lostatseanft.com/" - } - }, - { - "chainId": 103, - "address": "zYLhfZpn6zLF1nGkq9A6kr2ufLeEnUEJ25um4zFijDr", - "symbol": "GENIE", - "name": "Genieverse", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Genieverse/crypto/main/logo.png", - "tags": ["metaverse-token"] - }, - { - "chainId": 101, - "address": "5tbRhXYgsNKZG9E2Z4PJfcbQpoxabpVYmaqRY1XmTkJL", - "symbol": "VLTK", - "name": "VeLeTok", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/veletech/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DSqR1btEch7YGmpFXhwuboRV5QNuqrrSCnPTLjfnrdCS", - "symbol": "ANU", - "name": "Anime-U", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DSqR1btEch7YGmpFXhwuboRV5QNuqrrSCnPTLjfnrdCS/logo.png", - "tags": ["social-token"], - "extensions": { - "facebook": "https://www.facebook.com/EliteWorldMetaverse", - "telegram": "https://t.me/EliteWorldMetaverse", - "twitter": "https://twitter.com/EliteWorldMeta" - } - }, - { - "chainId": 101, - "address": "3aTpYgEDSUgX2VLSPm2z2CE5zrhtWZ9jtXsCs7MXsP5z", - "symbol": "RKT", - "name": "Rocket", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/rkt-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6S4fgP6UpWwuDg1S4FyV3BSoxoECm9nZuGLLxwaSQVDu", - "symbol": "MIN", - "name": "Minute", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/min-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7xYwLhYFDPNNHRkWBwZgUZrrLdzUuxZYkbBjyBzTCZFB", - "symbol": "HR", - "name": "Hour", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/hr-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8a5GgBPUnZNv546q8DBVhz7zSRC35scHR44mKRiq8Hs8", - "symbol": "DAY", - "name": "Day", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/day-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9xSqFFHH8kq928NuvLNBLntd9LfCW9NwhZ94wcD4dedp", - "symbol": "WK", - "name": "Week", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/wk-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "JC5TC9CJNvf9DQiCCTP236obnipzRhVo5LH5QYrXiYFm", - "symbol": "MO", - "name": "Month", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/mo-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "tvsmkrUKwW952YZHqDPMj9at39XY1nDXi6bF5JcAmaa", - "symbol": "YR", - "name": "Year", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FullMoonMiningCo/logos/main/yr-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "G7nv4MSWXatvdcx7t4oPsg9sDCtxg8bbVcDA454wQkgh", - "symbol": "CHI", - "name": "Projekt Paradise", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/G7nv4MSWXatvdcx7t4oPsg9sDCtxg8bbVcDA454wQkgh/token.png", - "tags": [ - "community-token", - "utility-token", - "nft-staking", - "social-token" - ] - }, - { - "chainId": 101, - "address": "86hKMv2gmGJ1xKKDRHvjEE7sSbGpRfgaBgNrWHAo4uuN", - "symbol": "GROWL", - "name": "GROWL", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/h3ll0x/sabretoothsyndicate/main/tiger.png", - "tags": ["social-token", "community-token", "utility-token"] - }, - { - "chainId": 101, - "address": "6jXNdXMrg8GUiSsgLc2DmkeoEC1NMGkDej4cYJ1zmvvj", - "symbol": "MGWL", - "name": "Mad Ghosts WL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6jXNdXMrg8GUiSsgLc2DmkeoEC1NMGkDej4cYJ1zmvvj/logo.png" - }, - { - "chainId": 101, - "address": "9WMwGcY6TcbSfy9XPpQymY3qNEsvEaYL3wivdwPG2fpp", - "symbol": "JELLY", - "name": "Jelly", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9WMwGcY6TcbSfy9XPpQymY3qNEsvEaYL3wivdwPG2fpp/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.com/invite/wzEfUjmpFw", - "twitter": "https://twitter.com/JellyBabiesNFT" - } - }, - { - "chainId": 101, - "address": "2WozVZ5yp5T3cabdXbARyjYW82obC4JvyNbgj1JwM11V", - "symbol": "OGSOLAR", - "name": "Off Grid Solar Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/morwic/solarcoin/6c758de71aa851f172ef4fcdcb96829662557311/SolarCoin-Logo.png", - "tags": ["social-token", "utility-token"], - "extensions": { - "discord": "https://discord.gg/cc5vmGeN5V" - } - }, - { - "chainId": 101, - "address": "Fkfi6USVjwkY47qaSK4i4WQTKtE6tFLRrkMc8C5VPzhv", - "symbol": "SDS", - "name": "Seven Deadly Sins Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Fkfi6USVjwkY47qaSK4i4WQTKtE6tFLRrkMc8C5VPzhv/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Cx7Rswv6MNyaBk354BohVvBP6mCPFo7FDjTwCYDXkajG", - "symbol": "STAR", - "name": "Starry Insiders", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Cx7Rswv6MNyaBk354BohVvBP6mCPFo7FDjTwCYDXkajG/logo.png", - "tags": ["gambling", "nft"], - "extensions": { - "description": "The official Starry Insiders token.", - "twitter": "https://twitter.com/StarryInsiders", - "website": "https://www.starryinsiders.com" - } - }, - { - "chainId": 101, - "address": "8iSagwHZNj4Hx4CMeoZwLLMVbWt4mUT6qk42TxiHkRtn", - "symbol": "DGNA", - "name": "DegenAlley", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8iSagwHZNj4Hx4CMeoZwLLMVbWt4mUT6qk42TxiHkRtn/DGNA.png", - "tags": ["social-token"], - "extensions": { - "website": "https://realms.today/dao/6iBBtiZDb14Y4xRRcJ6uchaRXoFG2PxiQggPooYTPZuS" - } - }, - { - "chainId": 101, - "address": "6YAXGyWb3hhLVQQ3vqg9ZYewXk4Cknnr1raTfDwbf8XG", - "symbol": "MEKKA", - "name": "MEKKA", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6YAXGyWb3hhLVQQ3vqg9ZYewXk4Cknnr1raTfDwbf8XG/logo.png", - "tags": ["NFT-token"], - "extensions": { - "discord": "https://discord.gg/ngFmDBmz8B", - "twitter": "https://twitter.com/mekkafroggo", - "website": "https://www.mekkafroggo.com" - } - }, - { - "chainId": 101, - "address": "DNLzdgaE3LUWoBxHasY9j8skCv8sBA9PBcD2DtYTjtaL", - "symbol": "HHC", - "name": "Horseshit High Club", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/alaydin/HHC_Test/master/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/tNvMvzjMxGhttps://realms.today/dao/6iBBtiZDb14Y4xRRcJ6uchaRXoFG2PxiQggPooYTPZuS" - } - }, - { - "chainId": 103, - "address": "DNLzdgaE3LUWoBxHasY9j8skCv8sBA9PBcD2DtYTjtaL", - "symbol": "HHC", - "name": "Horseshit High Club", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/alaydin/HHC_Test/master/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/tNvMvzjMxGhttps://realms.today/dao/6iBBtiZDb14Y4xRRcJ6uchaRXoFG2PxiQggPooYTPZuS" - } - }, - { - "chainId": 101, - "address": "Bfsrs1qLiuooamkSuG9tcF66SXXFefWbur86RkHDuxQS", - "symbol": "CHING", - "name": "CHA CHING", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Bfsrs1qLiuooamkSuG9tcF66SXXFefWbur86RkHDuxQS/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/parlay", - "twitter": "https://twitter.com/parlaynft", - "website": "https://theparlaynft.com/" - } - }, - { - "chainId": 101, - "address": "tr1HUaLpPmvaj1PAAXJokJ7PLjEGoSfuULhRvVvAPBS", - "symbol": "SAIS", - "name": "SAI Airdrop Token S", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/tr1HUaLpPmvaj1PAAXJokJ7PLjEGoSfuULhRvVvAPBS/logo.png", - "tags": ["airdrop-token"], - "extensions": { - "discord": "https://dsc.gg/staratlasitalia", - "github": "https://github.com/staratlas-italia", - "medium": "https://staratlasitalia.medium.com/", - "twitter": "https://twitter.com/staratlasitalia", - "website": "https://staratlasitalia.com", - "whitepaper": "https://staratlasitalia.com/whitepaper/" - } - }, - { - "chainId": 101, - "address": "tr2cweq4j6F8LrXk6vWWmamsxzkSFxyStCS3v1z2j75", - "symbol": "SAIM", - "name": "SAI Airdrop Token M", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/tr2cweq4j6F8LrXk6vWWmamsxzkSFxyStCS3v1z2j75/logo.png", - "tags": ["airdrop-token"], - "extensions": { - "discord": "https://dsc.gg/staratlasitalia", - "github": "https://github.com/staratlas-italia", - "medium": "https://staratlasitalia.medium.com/", - "twitter": "https://twitter.com/staratlasitalia", - "website": "https://staratlasitalia.com", - "whitepaper": "https://staratlasitalia.com/whitepaper/" - } - }, - { - "chainId": 101, - "address": "tr3Z8EqLMeNf2gHSpCsu9uP2o5DzoQ8QNFmueKjHQ95", - "symbol": "SAIL", - "name": "SAI Airdrop Token L", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/tr3Z8EqLMeNf2gHSpCsu9uP2o5DzoQ8QNFmueKjHQ95/logo.png", - "tags": ["airdrop-token"], - "extensions": { - "discord": "https://dsc.gg/staratlasitalia", - "github": "https://github.com/staratlas-italia", - "medium": "https://staratlasitalia.medium.com/", - "twitter": "https://twitter.com/staratlasitalia", - "website": "https://staratlasitalia.com", - "whitepaper": "https://staratlasitalia.com/whitepaper/" - } - }, - { - "chainId": 101, - "address": "7s6NLX42eURZfpyuKkVLrr9ED9hJE8718cyXFsYKqq5g", - "symbol": "GEAR", - "name": "Gear Token", - "decimals": 9, - "logoURI": "https://github.com/ArthurPaivaT/token-list/blob/main/assets/mainnet/7s6NLX42eURZfpyuKkVLrr9ED9hJE8718cyXFsYKqq5g/logo.png?raw=true" - }, - { - "chainId": 101, - "address": "Hog8VTQ8fuaMKqbj426cZ9skfs6Dw9b6AW9h5qMb3akb", - "symbol": "DTOKN", - "name": "DEWATOKN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/dewacorp/dewatokn/main/logo.png", - "tags": ["social-token"], - "extensions": { - "discord": "https://discord.gg/parlay", - "twitter": "https://twitter.com/parlaynft", - "website": "https://theparlaynft.com/" - } - }, - { - "chainId": 101, - "address": "7VeFS95G5WApQgaAgZUejwRgV8pbWDDCSiL3kQKkyFrd", - "symbol": "VAL", - "name": "Valhall Crowns", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7VeFS95G5WApQgaAgZUejwRgV8pbWDDCSiL3kQKkyFrd/logo.png", - "tags": [ - "metaverse-token", - "community-token", - "social-token", - "nft-staking" - ], - "extensions": { - "website": "https://valhall.site/" - } - }, - { - "chainId": 101, - "address": "TSTeJQaJ68jmS9vvooq9iDCmQETggC8ibb3ofeDkQUa", - "symbol": "TST", - "name": "The Syndicate Token", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/TSTeJQaJ68jmS9vvooq9iDCmQETggC8ibb3ofeDkQUa/logo.png" - }, - { - "chainId": 101, - "address": "DBsDkTdAxQEiSDeqfE48eMmc1vGXWjcum7hjRAf6zxza", - "symbol": "DBS", - "name": "DBS", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DBsDkTdAxQEiSDeqfE48eMmc1vGXWjcum7hjRAf6zxza/logo.jpg" - }, - { - "chainId": 101, - "address": "cvF1vU4WXL1px9qqTcCCRhtBvyrLp2P7jPeh9qZCic9", - "symbol": "CP", - "name": "Creative Points", - "decimals": 0, - "logoURI": "https://github.com/Boxib/CP/blob/main/ic-removebg-preview.png?raw=true" - }, - { - "chainId": 101, - "address": "6zTqGvQRaxQo9mmz3mgv2MiEYcMpxhGVkp8CimKgS1M7", - "symbol": "JOEY", - "name": "Joey", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6zTqGvQRaxQo9mmz3mgv2MiEYcMpxhGVkp8CimKgS1M7/logo1.jpg", - "tags": ["social-token"], - "extensions": { - "website": "http://joeydiaz.net" - } - }, - { - "chainId": 101, - "address": "EpLKTiSVy9R5cFpwgp9FjHY6M2B3ZKoKuVgMSW59ts3d", - "symbol": "CHZE", - "name": "Cheeze Coin", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/moxlongg/crypto/main/logo.png", - "tags": ["social-token", "very-addictive"] - }, - { - "chainId": 101, - "address": "3rH1toffQAELHo5vyRKdwEFxhPTZA7ocfRdJK2c8txoJ", - "symbol": "FamSOL", - "name": "FamilySOL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solodevo/FamilySOL/main/LOGOFamilySOL.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "discord": "https://discord.gg/tSXnjNJEhT", - "twitter": "https://twitter.com/FamilySolNft", - "website": "https://familysolnft.com/" - } - }, - { - "chainId": 101, - "address": "4mD1WxMTjtSQZ2oEPF56Nve5tBF9h82fCTHCzkQ5fhrq", - "symbol": "KIDS", - "name": "Kids Matter", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/KidsMatterNFT/crypto/main/KidsMatter_Final1_NoBG-min.jpg", - "tags": [ - "social-token", - "charity-token", - "nft-staking", - "nft-marketplace" - ] - }, - { - "chainId": 101, - "address": "7UqGHhzUcjss4bxKDxjy5GPHTRPn2HyCYcAfhx8hpe2K", - "symbol": "PSCYB", - "name": "PsilocyBits", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7UqGHhzUcjss4bxKDxjy5GPHTRPn2HyCYcAfhx8hpe2K/logo.png", - "tags": ["psilocybin"], - "extensions": { - "website": "http://psilocybits.com/" - } - }, - { - "chainId": 101, - "address": "2N3F89tt3EttGDu7FUkYsDzUCtU7pLeYHygSV8HDhAb6", - "symbol": "WOC", - "name": "World Cup", - "decimals": 4, - "logoURI": "https://ipfs.io/ipfs/QmSK8KN5DAXWabX38PJZxrtKExXTjiHNEqCvPJXWzJM8Ju", - "tags": ["utility-token", "community-token", "meme-token"] - }, - { - "chainId": 101, - "address": "ERF6RUUm4XLhypKSgT22YLBcsS9YN6HjudnWDv6fSSQS", - "symbol": "CBOYS", - "name": "CBOYS WL TOKEN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Robby3082/test-token/main/91.png", - "tags": ["utility-token", "community-token"] - }, - { - "chainId": 101, - "address": "EsyMThKB6pKiXDLiV1EbkH2TsYzNUGndC7e6T4Dmi1n8", - "symbol": "MDR", - "name": "Meta Drago DAO WL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EsyMThKB6pKiXDLiV1EbkH2TsYzNUGndC7e6T4Dmi1n8/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "discord": "https://discord.com/invite/yvw3Nezb", - "twitter": "https://twitter.com/MetaDragoNFT", - "website": "https://metadrago.art/" - } - }, - { - "chainId": 101, - "address": "5Nq1GvUtRbxRZ6LA4VLtTNJND2qgotrbQQMsA8qtuDUj", - "symbol": "AVEF", - "name": "AVEFENIX", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5Nq1GvUtRbxRZ6LA4VLtTNJND2qgotrbQQMsA8qtuDUj/logo.jpg" - }, - { - "chainId": 101, - "address": "GFwcGGZCKJEeLgDZQPT7TqjwWjTgwok9sC8SaJpUSwxz", - "symbol": "GK", - "name": "G Koin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/andonfree/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "SouLNByBQBBgM1hh4jmFHcCd6UJXxHMV8ngbu5f7Trj", - "symbol": "souls", - "name": "Soul Shards", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SouLNByBQBBgM1hh4jmFHcCd6UJXxHMV8ngbu5f7Trj/logo.png", - "tags": ["solbound", "nft", "utility-token"], - "extensions": { - "description": "Solbounds Currency Token", - "discord": "https://discord.com/invite/zQ5ycytFgu", - "twitter": "https://twitter.com/SolboundNFT", - "website": "https://solbound.io/" - } - }, - { - "chainId": 101, - "address": "Cj4BCm8j7eBfbeKAn7cqaSKahYbxBEtp7aLW7uNPuULf", - "symbol": "DOGGC", - "name": "DOGGETTY COIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Cj4BCm8j7eBfbeKAn7cqaSKahYbxBEtp7aLW7uNPuULf/logo.png", - "tags": ["NFT"], - "extensions": { - "discord": "https://discord.gg/VjGzYvU7n8", - "twitter": "https://twitter.com/doggettynft" - } - }, - { - "chainId": 101, - "address": "DLmSkzTJ6TBfRoFbeVLkUwcakn2XFBuv7XNiFWKXdCjL", - "symbol": "HONEY", - "name": "Honey Chain", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/HoneyChain/Assets/main/HoneyLogo.jpg", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/thehoneychain" - } - }, - { - "chainId": 101, - "address": "4kSiw6xdLYKjaKiQM4rQ6AkqqbFBcatzh7AAyMXwZqp9", - "symbol": "COKE", - "name": "Cocaine", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4kSiw6xdLYKjaKiQM4rQ6AkqqbFBcatzh7AAyMXwZqp9/logo.png" - }, - { - "chainId": 101, - "address": "TopZ8khSHQiApXA1nEZncHtjCxxexSP7RxSNnRUqxQJ", - "symbol": "SHIN", - "name": "Shin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/TopZ8khSHQiApXA1nEZncHtjCxxexSP7RxSNnRUqxQJ/logo.png" - }, - { - "chainId": 101, - "address": "9oCf3dx1PoSP1tnhNS6LBQXzixU1vkzNHvFwY1oFCD8M", - "symbol": "$FLY", - "name": "FLY", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9oCf3dx1PoSP1tnhNS6LBQXzixU1vkzNHvFwY1oFCD8M/logo.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/flyguys888" - } - }, - { - "chainId": 101, - "address": "9Ln4ifMMDATtQB4HHSt1iBbfKUh4mcepcXpNuiKC29nt", - "symbol": "SOLOT", - "name": "Solot Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/onuraladi/solot/main/solo.png", - "tags": ["utility-token", "community-token", "nft-token"], - "extensions": { - "twitter": "https://twitter.com/solotmachinehd" - } - }, - { - "chainId": 101, - "address": "EARYFkgahvveTJsm64kbWWREDLYHpETwZypo3RTJZWyQ", - "symbol": "SOLC", - "name": "SolCountries Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/onuraladi/solc/main/solct.png", - "tags": ["utility-token", "community-token", "nft-token"], - "extensions": { - "twitter": "https://twitter.com/SolCountries" - } - }, - { - "chainId": 101, - "address": "4Y5fZd9ouaNY7mDFsrmNkuJxfDQLvLZUY8MeRnxuWSdT", - "symbol": "GREEDY", - "name": "Kitsune Kingdom Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/onuraladi/kitsune/main/kitsune.png", - "tags": ["utility-token", "community-token", "nft-token"], - "extensions": { - "twitter": "https://twitter.com/kitsunekngdm" - } - }, - { - "chainId": 101, - "address": "C6drMh42qtqW8at6HmyXM6p45GrRNgMCYpWTFoxx5BEC", - "symbol": "BTH", - "name": "Beyond The Harmony", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jonathanlippe/solanatoken/main/bthlogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "285TEuebA7adK8Pcbuwubc5wAVN4cpvuZGDthJzH4pZp", - "symbol": "ETHER", - "name": "Ether", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/285TEuebA7adK8Pcbuwubc5wAVN4cpvuZGDthJzH4pZp/logo.png" - }, - { - "chainId": 101, - "address": "BLAAD2QLUgRSbQ9AB9jqAoHh55cGVcSBaCH9JGBh2zDX", - "symbol": "BLOOD", - "name": "DRACULA GAME BLOOD", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BLAAD2QLUgRSbQ9AB9jqAoHh55cGVcSBaCH9JGBh2zDX/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/invite/Frj3KDPBpq", - "twitter": "https://twitter.com/draculagame_nft", - "website": "https://www.dracula.game" - } - }, - { - "chainId": 101, - "address": "divWEfz76RDbL5kre8AsbaQtMFH8W38o8kTK5BBFNmP", - "symbol": "DVW", - "name": "divWallet", - "decimals": 10, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/divWEfz76RDbL5kre8AsbaQtMFH8W38o8kTK5BBFNmP/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "EMp3TqZHTgPJBMLa54qT6p8hNjimYscCEc8HPmQZJi35", - "symbol": "ByteWL", - "name": "Byte Buddies WL", - "decimals": 0, - "logoURI": "https://media.discordapp.net/attachments/949172481690861598/949597987414351912/WL_token_logo.png", - "tags": ["utility-token", "NFT"], - "extensions": { - "twitter": "https://twitter.com/bytebuddiesnft" - } - }, - { - "chainId": 101, - "address": "WisehRG5uPTHFJHrTmfm7dBMRvLZ6Lm9mivgYB2Pd3A", - "symbol": "WISECAT", - "name": "Wisecat Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WisehRG5uPTHFJHrTmfm7dBMRvLZ6Lm9mivgYB2Pd3A/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/wisecats", - "instagram": "https://www.instagram.com/wisecatsnft/", - "twitter": "https://twitter.com/WiseCatsNFT" - } - }, - { - "chainId": 101, - "address": "TPxx46psN8pYKBVUm1g5xis2KZYp5kQEPDjUdjsob9S", - "symbol": "TPwl", - "name": "Traveling Pigeons WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/TPxx46psN8pYKBVUm1g5xis2KZYp5kQEPDjUdjsob9S/logo.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "EgYW3GbGgHBHcGpm2UVFHh75qMTEWMRjsWeBax3rQbLq", - "symbol": "WTR", - "name": "Water", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EgYW3GbGgHBHcGpm2UVFHh75qMTEWMRjsWeBax3rQbLq/logo.png" - }, - { - "chainId": 101, - "address": "2MtPZqwNKTNsBoFCwm4ZTWk3ySz4LSd82ucDGeTk7VNu", - "symbol": "IVRY", - "name": "Portals Ivory Index", - "decimals": 2, - "logoURI": "https://dl.airtable.com/.attachmentThumbnails/102af36cc30fec0b05ebb45406f20971/126d0320", - "tags": [ - "bridgesplit-fraction", - "portals-ivory", - "fraction-index", - "fnft" - ], - "extensions": { - "discord": "https://discord.gg/bridgesplit", - "twitter": "https://twitter.com/bridgesplit", - "vault": "https://app.bridgesplit.com/fractions/2MtPZqwNKTNsBoFCwm4ZTWk3ySz4LSd82ucDGeTk7VNu" - } - }, - { - "chainId": 101, - "address": "GZL4yjPohDShW4RofJ6dEWu2Fv7qEa5mBT7Dpje5hqe7", - "symbol": "SAC", - "name": "Stoned Ape Crew Index", - "decimals": 2, - "logoURI": "https://i.imgur.com/sxmJbDr.jpg", - "tags": [ - "bridgesplit-fraction", - "stonedd-ape-crew", - "fraction-index", - "fnft" - ], - "extensions": { - "discord": "https://discord.gg/bridgesplit", - "twitter": "https://twitter.com/bridgesplit", - "vault": "https://app.bridgesplit.com/fractions/GZL4yjPohDShW4RofJ6dEWu2Fv7qEa5mBT7Dpje5hqe7" - } - }, - { - "chainId": 101, - "address": "EQuxvgDwuCyCb9HqAmctQ6Pd9uD2EV3YFHbPdq7CE1dq", - "symbol": "SILV", - "name": "Silver", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EQuxvgDwuCyCb9HqAmctQ6Pd9uD2EV3YFHbPdq7CE1dq/logo.jpg" - }, - { - "chainId": 101, - "address": "EFeeUYk9h8uVKARRza9j2QARJ9KfRCD6qC2vwqPmXBaV", - "symbol": "WMU", - "name": "Weedmenu", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EFeeUYk9h8uVKARRza9j2QARJ9KfRCD6qC2vwqPmXBaV/logo.png" - }, - { - "chainId": 101, - "address": "94WM3HZrxKhRfrXRZQ5xswdiLdjQaugwoBe7pJ3azoCA", - "symbol": "DRUG", - "name": "Drugs", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/94WM3HZrxKhRfrXRZQ5xswdiLdjQaugwoBe7pJ3azoCA/logo.png" - }, - { - "chainId": 101, - "address": "todqxobCHmNPgu2boQy7VUFado4RARbemgh8i9AwWdn", - "symbol": "GATWL", - "name": "Gangsta Gator WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/todqxobCHmNPgu2boQy7VUFado4RARbemgh8i9AwWdn/logo.png", - "tags": ["community-token"], - "extensions": { - "website": "https://www.gangstagators.com/" - } - }, - { - "chainId": 101, - "address": "AcN9sRB6YzKJpfcYbpDzkc2YjfixMYfiZCfJHqMaFyis", - "symbol": "PCE", - "name": "Peace Coin Earth", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/P3ac3C01n/peacecoin/main/logo.png", - "tags": [ - "social-token", - "Health", - "Healthcare", - "education", - "Support-people", - "Support-refugees", - "Support" - ], - "extensions": { - "description": "The 31% of the total coins will be used to provide essential needs of war affected and underpriviledged people." - } - }, - { - "chainId": 101, - "address": "8eagBiM6u6b9hyk3L4yuX5aKCJTY6Q38N8YdzqYVWWmn", - "symbol": "ICEY", - "name": "Diamonds", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8eagBiM6u6b9hyk3L4yuX5aKCJTY6Q38N8YdzqYVWWmn/logo.jpg" - }, - { - "chainId": 101, - "address": "MeTaRpcZ6XDvFrmPsNFqhehqV7MgY6obHrsxJLG372E", - "symbol": "MAECWL", - "name": "MAEC WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/MeTaRpcZ6XDvFrmPsNFqhehqV7MgY6obHrsxJLG372E/logo.png", - "tags": ["Whitelist"], - "extensions": { - "discord": "https://discord.gg/MetaApeEC", - "twitter": "https://twitter.com/MetaApeEC", - "website": "https://metaapeeliteclub.com/" - } - }, - { - "chainId": 101, - "address": "CEKW3UCXwVb7SPjASeNhzHAenyzYGrNwxGMNzXHRz8k6", - "symbol": "HOT", - "name": "Hotels", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CEKW3UCXwVb7SPjASeNhzHAenyzYGrNwxGMNzXHRz8k6/logo.png" - }, - { - "chainId": 101, - "address": "C2WwPdPrQAnEqoSeNTprrbbJiW5KY2EmeWFmdvBm1Fi6", - "symbol": "FLT", - "name": "Flights", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/C2WwPdPrQAnEqoSeNTprrbbJiW5KY2EmeWFmdvBm1Fi6/logo.jpg" - }, - { - "chainId": 101, - "address": "GcjjhxjtK8t8DMqf9Zm1CZ48d5SohHm2k2aFfsTZ5ssp", - "symbol": "COM", - "name": "Comedy", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GcjjhxjtK8t8DMqf9Zm1CZ48d5SohHm2k2aFfsTZ5ssp/logo.png" - }, - { - "chainId": 101, - "address": "BFK8DKyraJdJCStwtFK3JAhC4N2q6UgfDKzKoeNskQYT", - "symbol": "JACK", - "name": "Blackjack", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BFK8DKyraJdJCStwtFK3JAhC4N2q6UgfDKzKoeNskQYT/logo.png" - }, - { - "chainId": 101, - "address": "AhRP4bxXcycEChFe8z4exKUoGSvgHukXripPhbH2e5Qe", - "symbol": "GTR", - "name": "Guitar", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AhRP4bxXcycEChFe8z4exKUoGSvgHukXripPhbH2e5Qe/logo.png" - }, - { - "chainId": 101, - "address": "eTgYW2UEke2tyj6PTWZF2L6LMHztbB4ZMc8NGY7HVWf", - "symbol": "COOKIES", - "name": "Cookies", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/eTgYW2UEke2tyj6PTWZF2L6LMHztbB4ZMc8NGY7HVWf/logo.png" - }, - { - "chainId": 101, - "address": "84kG7LY99uiJ69wprwmxksPDjwTjPY5PJiqhaQEBvatG", - "symbol": "LYCH", - "name": "Lychee Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/fungtoken/crypto/main/Lychee.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9N32Tr2iXFo6GNxRRSFTtrVYcriEnABAwPE7rFatFBA1", - "symbol": "CGWL", - "name": "Cowgirl WhiteList Ticket", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9N32Tr2iXFo6GNxRRSFTtrVYcriEnABAwPE7rFatFBA1/Cowgirl_WL.png", - "tags": ["NFT", "whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/wildwestverse", - "website": "https://www.wildwestverse.com/" - } - }, - { - "chainId": 101, - "address": "B4GtD1qaV1vKANHqkAekb2EPx82qQbLqyDM7qkCKPsjC", - "symbol": "UMGMC", - "name": "umang mc coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/hxyro/logo/main/UMG.png", - "tags": ["NFT", "whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/hxyro0" - } - }, - { - "chainId": 101, - "address": "7S9apq5H8CAgdKP6hpNR7HL2KmgFX4PKCU1DFhzTqYof", - "symbol": "PVPV", - "name": "Papa Charlie", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/thoms021/crypto/main/logo3.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4WpMh3kj2uQzUBmLxR6zwwGeWdHAdeGGBdRfeqA8qM3v", - "symbol": "SLPT", - "name": "Silpa", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4WpMh3kj2uQzUBmLxR6zwwGeWdHAdeGGBdRfeqA8qM3v/logo.png", - "tags": ["utility-token", "NFT"], - "extensions": { - "facebook": "https://www.facebook.com/Silpa-Platform" - } - }, - { - "chainId": 101, - "address": "HXkMCeVEAkC8QBDJJpy8d8HEeUp2K6EVcLaKyU48cymN", - "symbol": "UWP", - "name": "Underworldpics", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HXkMCeVEAkC8QBDJJpy8d8HEeUp2K6EVcLaKyU48cymN/logo.png", - "extensions": { - "website": "https://underworldpics.io/" - } - }, - { - "chainId": 101, - "address": "FsXYfMuqaFZNJdBunHQzVKLCQHjCE4KWDtDm8iE388Zq", - "symbol": "GRN", - "name": "Greene Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/Brucemostert/Coin/main/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://www.greenepets.com" - } - }, - { - "chainId": 101, - "address": "5mpHNiNrf5wWJoQNzUGrVe9DE4VpnGyCXzzMaNAx7SHy", - "symbol": "LDTLS", - "name": "LDT Legendary Sensei Mint Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5mpHNiNrf5wWJoQNzUGrVe9DE4VpnGyCXzzMaNAx7SHy/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://livingdeadteds.com" - } - }, - { - "chainId": 101, - "address": "DfEAzEifrhMHw9pLiW2echTE4XvVEFkXavqLKRuApc9t", - "symbol": "AGK", - "name": "AgriKoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/umarbrowser/agrikoin/main/logo.png", - "tags": ["farming", "nft", "community-token"], - "extensions": { - "description": "Agrikoin Currency Token", - "website": "https://agrikoin.com/" - } - }, - { - "chainId": 101, - "address": "PLGoBo4XyjrfCR76WRcdT4G7bFtjGEtCdhViTWk9HA9", - "symbol": "PLG", - "name": "ProLeague", - "decimals": 9, - "logoURI": "https://sybvdlumjgmthsovg2jw7n5u54keits532jcbuopkc4dyowpgu.arweave.net/lgNRroxJmTPJ1Ta-Tb7e07xRETl3ekiDRz1C4PDrPNc", - "tags": ["utility-token"], - "extensions": { - "description": "ProLeague is a web3 social blockchain gaming/esports platform fostering the growth of the next generation of Esport professionals by offering an engaging platform that uses blockchain, NFTs, and our unique cryptocurrency to reward and incentivize competitive play.", - "twitter": "https://twitter.com/proleaguegg", - "website": "https://proleague.gg/" - } - }, - { - "chainId": 101, - "address": "7gPNQ28N9p1BZnLc49ipj4wQRRSMtuuqSMy3aNzJ6Pr", - "symbol": "CBRC", - "name": "Crypto Brain", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/bizottodbt/crypto-brain-token/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "WLAyTCh9AqPFYPNiYpHYo8nAPMqgbV4MTduLcg5kHdh", - "symbol": "LBA", - "name": "Le Bel Anus Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WLAyTCh9AqPFYPNiYpHYo8nAPMqgbV4MTduLcg5kHdh/logo.png" - }, - { - "chainId": 101, - "address": "3azR7QE61RFnGw1PDrnCNAABFGR54xskLEuCEuyTvtT6", - "symbol": "PWL", - "name": "Planet WL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3azR7QE61RFnGw1PDrnCNAABFGR54xskLEuCEuyTvtT6/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Planet WL Token", - "website": "https://planet-mint.vercel.app/" - } - }, - { - "chainId": 101, - "address": "G7yoaGtYGKUWq18cKUX3bpt6Gpr5fpZLVhMXctW77VE8", - "symbol": "KDMC", - "name": "Kingdom Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/ecduzit/kdmc/main/kdmclogo16.png", - "tags": ["social-token", "community-token"], - "extensions": { - "website": "https://www.kingdomconnectionglobal.com/" - } - }, - { - "chainId": 101, - "address": "EvvR84wMJVjsoNTAU9tdxNGhm7peGYXGdJSLCE3pwegR", - "symbol": "TDKP", - "name": "TaterCoin DKP", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EvvR84wMJVjsoNTAU9tdxNGhm7peGYXGdJSLCE3pwegR/logo.png", - "tags": ["social-token", "community-token", "utility-token"] - }, - { - "chainId": 101, - "address": "57MRgnqY9U2HeHoJNF63Z6f8GAgzBjyB9rNecqK9G3sV", - "symbol": "FLEUX", - "name": "Fleux", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/57MRgnqY9U2HeHoJNF63Z6f8GAgzBjyB9rNecqK9G3sV/logo.png", - "tags": [ - "utility-token", - "community-token", - "stake-pool-token", - "NFTs", - "DeFi" - ], - "extensions": { - "discord": "https://discord.gg/RTSEFBVqZB", - "instagram": "https://www.instagram.com/fleuxlabs/", - "twitter": "https://twitter.com/fleuxlabs" - } - }, - { - "chainId": 101, - "address": "5ZExppytfT5qnHnc4MMMwVaeaBtbAUavuUK6EU3jyPBo", - "symbol": "MORB", - "name": "Metal Orb", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/M-Jawad-Ch/MetalOrbs/Projects/icon.png", - "tags": ["utility-token", "community-coin", "NFTs"], - "extensions": { - "discord": "https://discord.gg/sm6Ts6bF", - "twitter": "https://twitter.com/Fdarklord5" - } - }, - { - "chainId": 101, - "address": "EnmQX2aeyagdjv5EBsCAKnUwyV1iqmkEPWhqbnNzXJHU", - "symbol": "PING", - "name": "Pingo", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/zigacmer/crypto/main/finalni%201000x1000.png", - "tags": [ - "social-token", - "utility-token", - "community-token", - "stake-pool-token" - ] - }, - { - "chainId": 101, - "address": "2TocBpcDms9xWB9oGBo1Pek3bZDhbBtFRNUkSYbQ9N5P", - "symbol": "TRS", - "name": "TruSwap", - "decimals": 0, - "logoURI": "https://github.com/Msaqib0786/crypto/blob/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "H8iLU94PvXEBk3fAFKveJ8RgNxPejYQetYipWPNs6WXk", - "symbol": "MEG", - "name": "Megan Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/joshtasman/cSolana/main/meg_logo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9ihuaebHjvKwpWHXcnQoYjvxA4qHX1fy2SuYyCZ7Rokh", - "symbol": "RAYS", - "name": "SUNSHINE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Mastervc/Crypto-/main/87-878487_cute-sunshine-clipart-19-cute-sun-clip-art.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2oDVQrNmBrJR71t2wJjq5f7Vz6ohnJheHoLMJEHcEW4J", - "symbol": "FPUNK", - "name": "Fab Punk Index", - "decimals": 2, - "logoURI": "https://www.arweave.net/-6iToYivBOpCvcDdFMN1MHLFLlQHKolBIm2dtQvyLbE?ext=png", - "tags": ["bridgesplit-fraction", "fab-punks", "fraction-index", "fnft"], - "extensions": { - "discord": "https://discord.gg/bridgesplit", - "twitter": "https://twitter.com/bridgesplit", - "vault": "https://app.bridgesplit.com/fractions/2oDVQrNmBrJR71t2wJjq5f7Vz6ohnJheHoLMJEHcEW4J" - } - }, - { - "chainId": 101, - "address": "Trc1fBjSu3N9jQYhRJxMKeVp5teAfwchJ5ru5DwBKUX", - "symbol": "TRCWL", - "name": "The Rigers Club WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Trc1fBjSu3N9jQYhRJxMKeVp5teAfwchJ5ru5DwBKUX/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "discord": "https://discord.gg/waGjtdd9bD", - "twitter": "https://twitter.com/RigersNFT", - "website": "https://rigersclub.com" - } - }, - { - "chainId": 101, - "address": "6onZgUwKaw1xhiMa3oDAF2ZW5kfwDUqggxWxLEUEeiPx", - "symbol": "EVAN", - "name": "Evan Coin", - "decimals": 0, - "logoURI": "https://github.com/kaprebox/crypto/blob/main/evancoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ssSTgHfmnnVjHiLK69gFMc3kBF5VYwqkcospoTv9uSj", - "symbol": "SSST", - "name": "SSS Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ssSTgHfmnnVjHiLK69gFMc3kBF5VYwqkcospoTv9uSj/logo.png", - "extensions": { - "description": "At Solana Secret Sociaty we build secretly to release Amazingly trying to create an extremely positive use case for the whole NFT industry!", - "discord": "https://discord.gg/SxDPXK5v45", - "twitter": "https://twitter.com/sssnfts", - "website": "https://solanasecretsociety.xyz/" - } - }, - { - "chainId": 101, - "address": "Astramzi5GnmM6h657PgtEPXMi43qTXSfZfJrPb1Ytb3", - "symbol": "AST", - "name": "Astrals WL Pass", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Astramzi5GnmM6h657PgtEPXMi43qTXSfZfJrPb1Ytb3/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/astrals_nft" - } - }, - { - "chainId": 101, - "address": "52FoYpdjoZRVvgSZvSWegxpYjBVCaoxZ9AzWAtZ3BN7N", - "symbol": "ROU", - "name": "Roulette", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/52FoYpdjoZRVvgSZvSWegxpYjBVCaoxZ9AzWAtZ3BN7N/logo.jpg" - }, - { - "chainId": 101, - "address": "B3DMB7GaKSfm8PiMFTfUtrr9jaxPSMmkpUtBuu8EQXqr", - "symbol": "APL", - "name": "Apple", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/B3DMB7GaKSfm8PiMFTfUtrr9jaxPSMmkpUtBuu8EQXqr/logo.jpg" - }, - { - "chainId": 101, - "address": "D1pgyotequejHAJaUeRouj9UiMn3waqSt1kUUtXCBDWa", - "symbol": "SOLBTC", - "name": "SOL Bitcoin", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/D1pgyotequejHAJaUeRouj9UiMn3waqSt1kUUtXCBDWa/logo.jpg" - }, - { - "chainId": 101, - "address": "ToEY2bUgDzbMfABvuUQ41AvinTQeb6qwJZkfXCLVKGS", - "symbol": "NA", - "name": "NinjaApe", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/itachi201/logo/main/logo.png", - "tags": ["NFT"] - }, - { - "chainId": 101, - "address": "GVST2hmmp1xexQcF9nEUQoYvwhqfaYQNrjR36aNeB1MY", - "symbol": "VINAY", - "name": "Vinay Coin", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GVST2hmmp1xexQcF9nEUQoYvwhqfaYQNrjR36aNeB1MY/logo.jpg" - }, - { - "chainId": 101, - "address": "GUZBixfPh8ksp3oHme778CdXtnETfNZizSFWhfWnaTqA", - "symbol": "HER", - "name": "Heroin", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GUZBixfPh8ksp3oHme778CdXtnETfNZizSFWhfWnaTqA/logo.jpg" - }, - { - "chainId": 101, - "address": "1Kt8V3zUr9yxHtaoBvfxMNBkiopSDTZ2d5GZpAMdsJN", - "symbol": "PLT", - "name": "Platinum", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/1Kt8V3zUr9yxHtaoBvfxMNBkiopSDTZ2d5GZpAMdsJN/logo.jpg" - }, - { - "chainId": 101, - "address": "ALNdAqpmo7jTPFmF888abDzcSoKFnsgdFaJabGNgrZ9S", - "symbol": "505", - "name": "UFO 505", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ALNdAqpmo7jTPFmF888abDzcSoKFnsgdFaJabGNgrZ9S/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/VEVJJTjxKD", - "instagram": "https://instagram.com/invalienspecies", - "twitter": "https://twitter.com/invalienspecies" - } - }, - { - "chainId": 101, - "address": "3fG4VCyMDBwz8zRz6V2J55hAiwCqt86JLoYJSNfqpeVg", - "symbol": "piece8", - "name": "Pieces of 8", - "decimals": 0, - "logoURI": "https://github.com/liu-ren/crypto/blob/main/pieceof8.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "62onfgZVfLYquXBG2CtfNcNsB2iczSLDb9QLHusNC1xh", - "symbol": "YE", - "name": "Sol Ye Dropout Coin", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/Fotsbeats/ye/main/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "EE2BWEPx1ZznRkZ5CUnWLcwZwiYW16K6VqoawTfYMgbq", - "symbol": "GOLD", - "name": "Gold", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EE2BWEPx1ZznRkZ5CUnWLcwZwiYW16K6VqoawTfYMgbq/logo.jpg" - }, - { - "chainId": 101, - "address": "C1h9o2ojnKNTwvmgCTVuyvYRMRbDRn9FuTzaMVKkAo54", - "symbol": "PWCC", - "name": "Priority Waste Crypto Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/gagar/prioritycoin/main/prioritycoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Hxk1ns5V8Lq41wzLjvq8pvNEhGh3FcCTWbawbj5SL4jj", - "symbol": "HEMOB", - "name": "Heatmob", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Hxk1ns5V8Lq41wzLjvq8pvNEhGh3FcCTWbawbj5SL4jj/logo.png", - "tags": ["community-token", "utility-token"], - "extensions": { - "website": "https://heatmob.net" - } - }, - { - "chainId": 101, - "address": "97uDv3zZqJtT46HnzMaEyFzhzfUPTdhe2i2D1298jtb2", - "symbol": "SCORPIONS", - "name": "SRP ", - "decimals": 1, - "logoURI": "https://raw.githubusercontent.com/Dherie/logo/main/logo.png", - "tags": ["utility-token", "community-token", "meme-token"], - "extensions": { - "twitter": "https://twitter.com/Scorpionseu" - } - }, - { - "chainId": 101, - "address": "4Pb9eXNQCmx6WKG8knniCqmNS6qJiqCcB3A6CFjcCkWB", - "symbol": "DCATMT", - "name": "DCat Metatoken", - "decimals": 9, - "logoURI": "https://github.com/dcatmusicnft/assets/blob/main/dcatmtlogo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "C5REfPvPMbwLAEyfB9M8MK3Kj5x9PPHp8KhJzykzQuUx", - "symbol": "lV", - "name": "lnvoker", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/xLoopCreativeAndyx/-/main/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "EBQ6gWBQNxA2zB4twR5GWP6CkeAhqZZZeDgeP7BTtdM3", - "symbol": "PERP", - "name": "PerpeTraders", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EBQ6gWBQNxA2zB4twR5GWP6CkeAhqZZZeDgeP7BTtdM3/logo.jpg", - "tags": [ - "stablecoin", - "security-token", - "utility-token", - "tokenized-stock" - ] - }, - { - "chainId": 101, - "address": "Dc8mEshVhb6e4dxi1yWm2gBDxUDVfYBKrYMGR1hz8Ku7", - "symbol": "NEUT", - "name": "Neutrino", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Dc8mEshVhb6e4dxi1yWm2gBDxUDVfYBKrYMGR1hz8Ku7/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/WcBbCJPNYr", - "twitter": "https://twitter.com/matrbuilders", - "website": "https://www.matr.builders" - } - }, - { - "chainId": 101, - "address": "AVB4JJMg8dG4igf5cpx5wvCak5XqqE359PzbZo4B9yKz", - "symbol": "BLAK", - "name": "BLAK Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/blakcoin/logo/main/image1.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/theblakcoin" - } - }, - { - "chainId": 101, - "address": "8PvtB3kEnoNMLcEBBsXdQqy3N2RYnWgJ4GzhButPytTL", - "symbol": "DAC", - "name": "DAC - Token for Defiant Ape Casino", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/DefiantApeClub/DefiantApeToken/main/Untitled-7.png", - "tags": ["NFT", "Gambling"], - "extensions": { - "twitter": "https://twitter.com/DefiantApeClub", - "website": "http://defiantapeclub.com/" - } - }, - { - "chainId": 101, - "address": "FNRDrrinmYQ4TMEbAppmLFp92bGi6FfNLBCp5Xkc2PSw", - "symbol": "FNRD", - "name": "Finrend Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FNRDrrinmYQ4TMEbAppmLFp92bGi6FfNLBCp5Xkc2PSw/logo.png", - "tags": ["defi", "fund-management", "nft", "finance", "exchange"], - "extensions": { - "discord": "https://discord.gg/rTVXFxhY", - "medium": "https://medium.com/@finrend", - "telegram": "https://t.me/Finrend", - "twitter": "https://twitter.com/finrend" - } - }, - { - "chainId": 101, - "address": "2Kc91qK5tA1df2P9BWrjNrJfdQCbCx95iUY8H27aNuWa", - "symbol": "FFF", - "name": "Famous Fox Federation Droplet", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Kc91qK5tA1df2P9BWrjNrJfdQCbCx95iUY8H27aNuWa/logo.png", - "tags": ["utility-token", "solvent-droplet"], - "extensions": { - "discord": "https://discord.gg/thK8BCtQbM", - "github": "https://github.com/solventprotocol", - "medium": "https://medium.com/@solventprotocol", - "serumV3Usdc": "5WDPUdgNUUiQ83TXubV8q1CdSnNg8WvAH7YDXwTvdct7", - "telegram": "https://t.me/solventprotocol", - "twitter": "https://twitter.com/solventprotocol", - "website": "https://solvent.xyz" - } - }, - { - "chainId": 101, - "address": "yAC4RaXvFZpNhnXZVgiiYj4cgC1G5SbgX5jzdaEXgyA", - "symbol": "y-apUSDC-USDC", - "name": "Yield Saber LP Token (apUSDC-USDC)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/yAC4RaXvFZpNhnXZVgiiYj4cgC1G5SbgX5jzdaEXgyA/logo.svg", - "tags": ["yield-token"], - "extensions": { - "website": "https://bunnyducky.com/" - } - }, - { - "chainId": 101, - "address": "GUtWHTy9N5Av4LTB5PJPn4ZTfxCB2tGiK7DJpS7y8F8S", - "symbol": "AUR", - "name": "Aurory Droplet", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GUtWHTy9N5Av4LTB5PJPn4ZTfxCB2tGiK7DJpS7y8F8S/logo.png", - "tags": ["utility-token", "solvent-droplet"], - "extensions": { - "discord": "https://discord.gg/thK8BCtQbM", - "github": "https://github.com/solventprotocol", - "medium": "https://medium.com/@solventprotocol", - "serumV3Usdc": "Hd5uEsj4fnEYsdPdY8ReptKoXGkUZYM9ZC5GHZcHkCBY", - "telegram": "https://t.me/solventprotocol", - "twitter": "https://twitter.com/solventprotocol", - "website": "https://solvent.xyz" - } - }, - { - "chainId": 101, - "address": "C3z52NDqHYt1W33Mve25e3rRE9itoZeSjQgPxgXwFotH", - "symbol": "HFT", - "name": "Hall Family Token", - "decimals": 2, - "logoURI": "https://github.com/Toastiam/hft/blob/main/HFT.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GknXZXR3Y84wgmDUxtsoR9FBHEZovqXFuDK2jczi1ydz", - "symbol": "GENO", - "name": "Genopets Droplet", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GknXZXR3Y84wgmDUxtsoR9FBHEZovqXFuDK2jczi1ydz/logo.png", - "tags": ["utility-token", "solvent-droplet"], - "extensions": { - "discord": "https://discord.gg/thK8BCtQbM", - "github": "https://github.com/solventprotocol", - "medium": "https://medium.com/@solventprotocol", - "serumV3Usdc": "8AjdxXSvZ5Cu7FGsoMa6Y8hu1ZS1iCy3gaoNggNCmqML", - "telegram": "https://t.me/solventprotocol", - "twitter": "https://twitter.com/solventprotocol", - "website": "https://solvent.xyz" - } - }, - { - "chainId": 103, - "address": "FMkEN7WnMou9PejHf72N4Pveh7A83iR4PfruwD9BAm2v", - "symbol": "MOU9", - "name": "Mou9", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FMkEN7WnMou9PejHf72N4Pveh7A83iR4PfruwD9BAm2v/logo.png" - }, - { - "chainId": 101, - "address": "AgBQSKgZPJPmsMz8qkHbyZdEU4JrRpoNHYh2kxE5TcD1", - "symbol": "BV", - "name": "Balloonsville Droplet", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AgBQSKgZPJPmsMz8qkHbyZdEU4JrRpoNHYh2kxE5TcD1/logo.png", - "tags": ["utility-token", "solvent-droplet"], - "extensions": { - "discord": "https://discord.gg/thK8BCtQbM", - "github": "https://github.com/solventprotocol", - "medium": "https://medium.com/@solventprotocol", - "serumV3Usdc": "5tVUY9id5G6tPBu5C6hFZ9f6As3A4eopf7QTApt5owAy", - "telegram": "https://t.me/solventprotocol", - "twitter": "https://twitter.com/solventprotocol", - "website": "https://solvent.xyz" - } - }, - { - "chainId": 101, - "address": "DcUhmQsxyGKnqaKzn5b8K3QB2LRN2uqzxLeqgbtuC4ry", - "symbol": "ECOGA", - "name": "Echocore Genesis Access", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DcUhmQsxyGKnqaKzn5b8K3QB2LRN2uqzxLeqgbtuC4ry/logo.png", - "tags": ["NFT", "whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/echocore_io", - "website": "https://echocore.io" - } - }, - { - "chainId": 101, - "address": "5aGsu5hASnsnQVXV58fN8Jw9P8BVyfDnH2eYatmFLGoQ", - "symbol": "LIFL", - "name": "Lifinity Flares Droplet", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5aGsu5hASnsnQVXV58fN8Jw9P8BVyfDnH2eYatmFLGoQ/logo.png", - "tags": ["utility-token", "solvent-droplet"], - "extensions": { - "discord": "https://discord.gg/thK8BCtQbM", - "github": "https://github.com/solventprotocol", - "medium": "https://medium.com/@solventprotocol", - "serumV3Usdc": "AYbybZJN533vgPdZrJga6Zw7WtZCnUofNLiMjneWUP6V", - "telegram": "https://t.me/solventprotocol", - "twitter": "https://twitter.com/solventprotocol", - "website": "https://solvent.xyz" - } - }, - { - "chainId": 103, - "address": "9AjFLx5CRee9kGxmN54LkHz9opZpESerP27C6sGhZsdH", - "symbol": "snake", - "name": "SnakeChain_Devnet", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/SnakeRush/SnakeRush/master/SnakeChainLogo.png", - "tags": [ - "utility-token", - "gaming", - "metaverse", - "play-to-earn", - "solana-ecosystem", - "user-experience", - "multiplayer", - "fun", - "awesome", - "reading-this-desu-ka" - ], - "extensions": { - "description": "SnakeChain_Devnet (snake) are the DevNet tokens for SnakeRush's SnakeChain currency. These are used on the beta/devnet game. They are earned by playing SnakeRush, and minting your coins at the SnakeBank. They can be used to play more and exchange in any market where available.", - "instagram": "https://www.instagram.com/snakerushgame/", - "twitter": "https://twitter.com/snakerushgame", - "website": "https://www.snakechain.org" - } - }, - { - "chainId": 101, - "address": "DpcmtJniwGRPqU6A8shdcV812uddwoxDCMfXUz2SkLVJ", - "symbol": "DGOD", - "name": "DeGods Droplet", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DpcmtJniwGRPqU6A8shdcV812uddwoxDCMfXUz2SkLVJ/logo.png", - "tags": ["utility-token", "solvent-droplet"], - "extensions": { - "discord": "https://discord.gg/thK8BCtQbM", - "github": "https://github.com/solventprotocol", - "medium": "https://medium.com/@solventprotocol", - "serumV3Usdc": "FFmE1patBuqcjRZ1TMrokrefnpMqzmLZMecLGhvnWb3b", - "telegram": "https://t.me/solventprotocol", - "twitter": "https://twitter.com/solventprotocol", - "website": "https://solvent.xyz" - } - }, - { - "chainId": 101, - "address": "SeN67Ce1f19MES76SDDiXFBTURNFQuQKFQ2rWPPHuZY", - "symbol": "SENSEI", - "name": "Radja Sensei", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SeN67Ce1f19MES76SDDiXFBTURNFQuQKFQ2rWPPHuZY/logo.jpg", - "tags": ["airdrop-token", "social-token", "swap-token", "reward-token"] - }, - { - "chainId": 101, - "address": "GGATzpTfEwkq8BDotzBFTUSeKu36XRtsFhncd83UDwEu", - "symbol": "GGAT", - "name": "Gangsta Gators", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GGATzpTfEwkq8BDotzBFTUSeKu36XRtsFhncd83UDwEu/logo.png", - "tags": ["meme-token", "community-token"], - "extensions": { - "website": "https://www.gangstagators.com/" - } - }, - { - "chainId": 101, - "address": "DonHdDmzsx9wWtnettbw2MxC5zhcHBX4DsPwFPZvDSnu", - "symbol": "DUIT", - "name": "Duit Digital", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DonHdDmzsx9wWtnettbw2MxC5zhcHBX4DsPwFPZvDSnu/duit520x520.png", - "tags": ["social-token", "NFT"] - }, - { - "chainId": 101, - "address": "9vzSi7RDSgk6aTm8Fp6xDU5HgBvmHVGFqd1YjFhzuuPd", - "symbol": "VPT", - "name": "ViewPoint", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/TheViewPoint/crypto/main/ViewPointLOGO.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GGWL2pjJKrUcH47a23DLGXUUoLT8HJVhdcjVhfi2p1tT", - "symbol": "GGWL2", - "name": "Glitched Gorilla WL Token 2", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GGWL1v6aRnjRFAxi7j2ArQBDRxb1maZz4XGqMsxkdYbt/GGToken.png", - "tags": ["whitelist-token"], - "extensions": { - "discord": "https://discord.gg/WtpzxsBTGF", - "twitter": "https://twitter.com/MH_Multiverse", - "website": "https://milehighmultiverse.io" - } - }, - { - "chainId": 101, - "address": "GxuwbQeuVFzkjjYA2j6hvihLyE8tYZbE3zYFjciZquXB", - "symbol": "FHG", - "name": "Faith Heroic Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/adademonn/image/main/index.png", - "tags": ["fhg-token"] - }, - { - "chainId": 101, - "address": "CjgFeULq2ZJCnH9XpTaR8eEcSVxfuVqCk7nBgxdDVmpe", - "symbol": "KSOC", - "name": "KSherwoodOps Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/KSherwoodOps/KSherwoodOps_Coin/main/ksherwood_logo_01_v03_coin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8RSyhCxFKYVnr6PGTgKC9o86AjbQjdmLRZjYJjhdTdYH", - "symbol": "FAITH", - "name": "Faith", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8RSyhCxFKYVnr6PGTgKC9o86AjbQjdmLRZjYJjhdTdYH/logo.png" - }, - { - "chainId": 101, - "address": "Fw57g8sgRnKBu3wDcGu9wYge17EDPaQdTdMvbRYuXYXr", - "symbol": "AANDELEN", - "name": "Belgian Company BV", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Fw57g8sgRnKBu3wDcGu9wYge17EDPaQdTdMvbRYuXYXr/Blockstone.png", - "tags": ["Example-company", "Amsterdam-Lawyers"], - "extensions": { - "website": "https://amsterdam-lawyers.nl/belgian-company-bv/" - } - }, - { - "chainId": 101, - "address": "JAa3gQySiTi8tH3dpkvgztJWHQC1vGXr5m6SQ9LEM55T", - "symbol": "solUST", - "name": "solUST", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/JAa3gQySiTi8tH3dpkvgztJWHQC1vGXr5m6SQ9LEM55T/solust.svg", - "tags": ["stablecoin"], - "extensions": { - "website": "https://soluna.money/" - } - }, - { - "chainId": 101, - "address": "ExistEr1h19DiEPPzaDpwx3DnjQbrVbXpaxKDYBSNoWj", - "symbol": "Exist", - "name": "Exist", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ExistEr1h19DiEPPzaDpwx3DnjQbrVbXpaxKDYBSNoWj/logo.png", - "extensions": { - "twitter": "https://twitter.com/ExistCoin", - "website": "https://existcoin.io" - } - }, - { - "chainId": 101, - "address": "FFBnqafsjrvvxxf5n3Tzba8V7vWPb8wr5DPEog1VAwff", - "symbol": "THUGZ", - "name": "Thugbirdz Droplet", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FFBnqafsjrvvxxf5n3Tzba8V7vWPb8wr5DPEog1VAwff/logo.png", - "tags": ["utility-token", "solvent-droplet"], - "extensions": { - "discord": "https://discord.gg/thK8BCtQbM", - "github": "https://github.com/solventprotocol", - "medium": "https://medium.com/@solventprotocol", - "serumV3Usdc": "5Rcqv6qXRFFnK3dzYu96sKqf6wtC8hEA1ivRdMwFHEH2", - "telegram": "https://t.me/solventprotocol", - "twitter": "https://twitter.com/solventprotocol", - "website": "https://solvent.xyz" - } - }, - { - "chainId": 101, - "address": "F7hd3fj1nFrSDmDrYkANSFkFagnfYSjHUG2i2NxE3Jaz", - "symbol": "VLGKEY", - "name": "Village Building Site Tokens", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/F7hd3fj1nFrSDmDrYkANSFkFagnfYSjHUG2i2NxE3Jaz/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "8jwFgR1QUNxjHmyhmpuDXmsyq3T2gSCqPkLntVar5ZwB", - "symbol": "$DINOLABS", - "name": "DinoLabs Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8jwFgR1QUNxjHmyhmpuDXmsyq3T2gSCqPkLntVar5ZwB/logo.jpg", - "extensions": { - "discord": "https://discord.gg/dinolabs", - "twitter": "https://twitter.com/DinoLabsNFT" - } - }, - { - "chainId": 101, - "address": "FQkm6bACFuJpGDmnkvYoq2Luhcc65oam2dg1tXfnKWAY", - "symbol": "PLWAV", - "name": "Playground Waves Droplet", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FQkm6bACFuJpGDmnkvYoq2Luhcc65oam2dg1tXfnKWAY/logo.png", - "tags": ["utility-token", "solvent-droplet"], - "extensions": { - "discord": "https://discord.gg/thK8BCtQbM", - "github": "https://github.com/solventprotocol", - "medium": "https://medium.com/@solventprotocol", - "serumV3Usdc": "Ccgq4UV9sFtXp9yMGXwJRcJz9UsgQFEjF3Fmui2Z6Xhm", - "telegram": "https://t.me/solventprotocol", - "twitter": "https://twitter.com/solventprotocol", - "website": "https://solvent.xyz" - } - }, - { - "chainId": 101, - "address": "GatoRJrXZPeRFBoCwirUHGTGVkMXNvsLLx6TUhMAD14T", - "symbol": "GAS", - "name": "Gator Squad WL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GatoRJrXZPeRFBoCwirUHGTGVkMXNvsLLx6TUhMAD14T/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/GatorSquadNFT" - } - }, - { - "chainId": 101, - "address": "4UnuMZTAUf7Xn1VLg93AfvkLTVk8v5YCvRvRanwHL3QF", - "symbol": "ANDI", - "name": "Anditon", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Anditon/crypto/main/solanacoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BLoCKVzvv9jRSm6rLQhXNauQ3p34asRWocJyWdrkkWUF", - "symbol": "BLS", - "name": "Official Blocksmith Labs WL Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BLoCKVzvv9jRSm6rLQhXNauQ3p34asRWocJyWdrkkWUF/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/BlocksmithLabs", - "website": "https://mercury.blocksmithlabs.io/" - } - }, - { - "chainId": 101, - "address": "9aRLE1rSJJmtALJXBQX8iH63sJ5hyEhy2G28NH1SKFjk", - "symbol": "HITKN", - "name": "Hassanat", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/MohamedITKN/Hassanat/main/logo.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "description": "Hassanat ($HITKN) is the token of Islam, utility token for Muslims who can open the gates of paradise by doing good deeds.", - "discord": "https://discord.gg/qEfCZuJHsu", - "twitter": "https://twitter.com/hassanat_itkn" - } - }, - { - "chainId": 101, - "address": "BLrzBnx4qYLK8A93NdYHFq8Ucye9sySRhNjn1NuMa9tR", - "symbol": "CHUMM", - "name": "CHUMM Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/btempel05/assets/main/chum.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "DSGD5HFS57ThL6sE9rHk8zgnNiRrWsDkiLsuMTHaRyv5", - "symbol": "CARGO", - "name": "CargoCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/CargoBlitz/cargocrypto/main/images.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BPfgTWYrsBZJAxrjLxp9cMbtKTswsL5wwW3SHqPCnFh5", - "symbol": "SCWL", - "name": "SolChippie WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BPfgTWYrsBZJAxrjLxp9cMbtKTswsL5wwW3SHqPCnFh5/logo.png", - "tags": ["NFT", "SOLCHIPPIE"], - "extensions": { - "twitter": "https://twitter.com/solchippie", - "website": "https://solchippie-stacking.com/" - } - }, - { - "chainId": 101, - "address": "HyuZntYTzeE3jtYozsLcyj84iZJgqxsmnMCGhQRAoTdc", - "symbol": "IQD", - "name": "Iraqi Dinar Token", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/opals99/IQD-SOL-Token/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "G3Azoh6ff4MH443ZZ78ArUiut1gbq9w445PmuPnnzQKv", - "symbol": "$SHADOW", - "name": "AotM Shadow", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/CMHayden/crypto/master/token-shadown.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/metaverseangels" - } - }, - { - "chainId": 101, - "address": "F3dfTzx7kxtYE7zioFwRofAhU2xB1JLa3pvUxChQpwu1", - "symbol": "XPLOIR", - "name": "Xploir", - "decimals": 2, - "logoURI": "https://gitlab.com/b4557/xploir/-/raw/main/assets/xploir_logo_876.png", - "tags": ["crowdfunding", "xploir", "xploir-index", "crypto-development"], - "extensions": { - "twitter": "https://twitter.com/xploir" - } - }, - { - "chainId": 101, - "address": "F9WYDeS9kAjFoXo5raGGpzTE8z7Xnyc9GbsQKuM3986p", - "symbol": "PTNC", - "name": "Petenic Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/F9WYDeS9kAjFoXo5raGGpzTE8z7Xnyc9GbsQKuM3986p/logo.png" - }, - { - "chainId": 101, - "address": "3MNjcDDJSmvNqvwWZ2RqSo8dA863jGrDNohvCCMkodZJ", - "symbol": "TRIPPY", - "name": "TRIPPY token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/d3ebe4df93d7ee04dd3b132579181a5fef90631e/assets/mainnet/3MNjcDDJSmvNqvwWZ2RqSo8dA863jGrDNohvCCMkodZJ/logo.png" - }, - { - "chainId": 101, - "address": "H53UQZCGQnji5QgjJtVNZXBTgxPqNfv9DHjBFT9WC4yE", - "symbol": "PBBwl", - "name": "Punk Bear Bando WL", - "decimals": 0, - "logoURI": "https://github.com/h3ll0x/pbbwlpic/blob/main/wltoken.png", - "tags": ["community-token", "wl-token", "whitelist", "pbb"] - }, - { - "chainId": 101, - "address": "BhWivnU5MNnTtawhKeZ77ytUF4CxjAYszp2Ypafyshmu", - "symbol": "IJOT", - "name": "Tojiba Ijot", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/tojibaceo/tojibaceo/main/ijot2.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/tojibaceo" - } - }, - { - "chainId": 101, - "address": "2thvTG87oytuwp6Egp1jqMAKTyQ5B1aWk46pLsa7Zo2P", - "symbol": "SXA", - "name": "SXA Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/ArthurPaivaT/token-list/main/assets/mainnet/2thvTG87oytuwp6Egp1jqMAKTyQ5B1aWk46pLsa7Zo2P/logo.png" - }, - { - "chainId": 101, - "address": "PfdcXaR413iHy2uLWvNwkcw8Yp7dxLNp3yfzdba2Nog", - "symbol": "OGPENFRENS", - "name": "Pen Frens: OG Mint Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/penfrens/token-list/main/assets/mainnet/PfdcXaR413iHy2uLWvNwkcw8Yp7dxLNp3yfzdba2Nog/logo.png", - "tags": ["community-token", "og-token", "NFT"], - "extensions": { - "discord": "https://discord.gg/Dd4tDYG5aj", - "twitter": "https://twitter.com/pen_frens", - "website": "https://penfrens.io/" - } - }, - { - "chainId": 101, - "address": "3mDpFyUquEgoDGJBgAG4b5U8ZsUXEUgSuw1VBBzMaQNs", - "symbol": "CMDRD", - "name": "Commander Dante", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/kraihn/commander-dante/main/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "DF3EtJzAxySb8WHsD8PFPxZsvzNb3ickn159CB7D21Tw", - "symbol": "GTWL", - "name": "Golden Tiger Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/AnthonyRamses/crypto/main/wl_token.png", - "tags": ["utility-token", "community-token"] - }, - { - "chainId": 101, - "address": "6bFz8REykQeYh1JKAdPEUCTCEUfEw32i9a3bzvtacRhy", - "symbol": "BAZOU", - "name": "Bazou Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/quoije/bazou_coin/main/logo.png", - "tags": ["social-token"], - "extensions": { - "description": "Bazou Coin ($BAZOU) is the official token for the French-Canadian podcast Le journal d'un podcast.", - "facebook": "https://www.facebook.com/ljdpodcast", - "website": "https://ljdp.ca" - } - }, - { - "chainId": 101, - "address": "FJvkpSpR4y73Hd6yNDvd11ie3kBkHAtNCv922gcYYM3w", - "symbol": "ODKY", - "name": "OddKey", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FJvkpSpR4y73Hd6yNDvd11ie3kBkHAtNCv922gcYYM3w/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://oddkey.com" - } - }, - { - "chainId": 101, - "address": "WoSgyFWVmmEdvfY9Bp5Zrhqu6uas7mUjkiZpEUoBeQH", - "symbol": "WOSMINT", - "name": "World of Solana Mint", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WoSgyFWVmmEdvfY9Bp5Zrhqu6uas7mUjkiZpEUoBeQH/logo.png", - "tags": ["wl-token", "whitelist"], - "extensions": { - "discord": "https://discord.gg/worldofsolana", - "twitter": "https://twitter.com/worldofsolana", - "website": "https://www.worldofsolana.io/" - } - }, - { - "chainId": 101, - "address": "75r7zg51bz7ESrQ9KuDLn3KGX7NKSZgB9UfKdfopHR6m", - "symbol": "SMINE", - "name": "Solana Mine", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/75r7zg51bz7ESrQ9KuDLn3KGX7NKSZgB9UfKdfopHR6m/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/eV9nycnFr8", - "twitter": "https://twitter.com/solanamine", - "website": "https://solanamine.io" - } - }, - { - "chainId": 101, - "address": "PFjQE5mYPTCCDuHz8buxFppyQoL8q32wfTmZbBF5BWL", - "symbol": "WLPENFRENS", - "name": "Pen Frens: WL Mint Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/penfrens/token-list/main/assets/mainnet/PFjQE5mYPTCCDuHz8buxFppyQoL8q32wfTmZbBF5BWL/logo.png", - "tags": ["community-token", "wl-token", "NFT"], - "extensions": { - "discord": "https://discord.gg/Dd4tDYG5aj", - "twitter": "https://twitter.com/pen_frens", - "website": "https://penfrens.io/" - } - }, - { - "chainId": 101, - "address": "7SuFYqL2hZYutNJkZxA3s6W2MvvfyYQw5ntxU9v6969R", - "symbol": "SET", - "name": "Service Exchange Token", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/Toastiam/set/cd2479187f23e8ccc1b1f9c8a1f21b54d562aef9/logo.jpg", - "tags": ["community-exchange", "local", "community", "traiding-services"] - }, - { - "chainId": 101, - "address": "RKwwb3SLUnipcDJaXsaVJPn8dzrcyNNdUwpAUDcRZAT", - "symbol": "KVWL", - "name": "Keroverse WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/RKwwb3SLUnipcDJaXsaVJPn8dzrcyNNdUwpAUDcRZAT/logo.png", - "tags": ["wl-token", "whitelist"] - }, - { - "chainId": 101, - "address": "9CzmA137fzLtdyfaBY63Sa85uY8ZvBiX3MrAJypzsDGR", - "symbol": "BLUFF", - "name": "Bluffcoin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9CzmA137fzLtdyfaBY63Sa85uY8ZvBiX3MrAJypzsDGR/logo.png" - }, - { - "chainId": 101, - "address": "HgY1nxnPHxrdFMSgVeBtYjw6K31X5VhNsLDuecPD3qwK", - "symbol": "PTNC", - "name": "Petenic", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HgY1nxnPHxrdFMSgVeBtYjw6K31X5VhNsLDuecPD3qwK/logo.png" - }, - { - "chainId": 101, - "address": "2ooXiXagYELm9MrFwWT6r5wGPRejmcnbGAD3k8qHCM4X", - "symbol": "FBTL", - "name": "FBT Litecoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2ooXiXagYELm9MrFwWT6r5wGPRejmcnbGAD3k8qHCM4X/logo.png", - "tags": ["IoT-token"] - }, - { - "chainId": 101, - "address": "CyqsrrQXAK6u2VNfRJxN6eL8GUuULZhHMKrDrNmtwuuS", - "symbol": "HEBTC", - "name": "Heavy Early Bitcoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/CryptoShree/HEBTC/main/HEBTC.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4i8cpfhjcxQ3kt8sBhr9YvsaE5crmYGscBqYdKmw2EuL", - "symbol": "L5", - "name": "L5", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4i8cpfhjcxQ3kt8sBhr9YvsaE5crmYGscBqYdKmw2EuL/logo.png", - "tags": ["L5"] - }, - { - "chainId": 101, - "address": "EyWco8dE87bp9KfTYHayvcrZ2Zi92bbRGs28ZfUGEb7N", - "symbol": "AMZ", - "name": "AMAZ", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EyWco8dE87bp9KfTYHayvcrZ2Zi92bbRGs28ZfUGEb7N/logo.png", - "tags": ["AMAZ"] - }, - { - "chainId": 103, - "address": "2jrVcfazHUiyKTmKQaEyfbEq1ZDga4v1pUHCWkiXCErA", - "symbol": "ICSOL", - "name": "Ivan Solana", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2jrVcfazHUiyKTmKQaEyfbEq1ZDga4v1pUHCWkiXCErA/logo.png" - }, - { - "chainId": 101, - "address": "EenMwVUMnqhQjrSBcccCgMXJQVQDQZ3rVFd53hv8gExY", - "symbol": "POES", - "name": "People Of Every Society", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/jody-wicomb/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "8m96fMrqk5ZZ4UnaA8YBfU6wLPdzmzFRdYsGTdpJS8EF", - "symbol": "YBUTCHERS", - "name": "YBUTCHERS token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8m96fMrqk5ZZ4UnaA8YBfU6wLPdzmzFRdYsGTdpJS8EF/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "sotka91WnAeWUbmyBgGbHjhYFML1AX1Nk3xYdvQTMth", - "symbol": "KNIVES", - "name": "KNIVES", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/sotka91WnAeWUbmyBgGbHjhYFML1AX1Nk3xYdvQTMth/logo.png", - "tags": ["KNIVES"] - }, - { - "chainId": 101, - "address": "3MfUyK8FbwbEhPsGqi9pJirKLgQevH27AvH2mhbUGxtj", - "symbol": "PoSBWind", - "name": "PoSB-WindToken", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3MfUyK8FbwbEhPsGqi9pJirKLgQevH27AvH2mhbUGxtj/logo.png", - "tags": ["posb-token", "whitelist"], - "extensions": { - "description": "Pirates of Sol Bay Crew Token", - "discord": "https://discord.gg/wEXT6vFKBM", - "twitter": "https://twitter.com/PiratesOfSolBay", - "website": "https://www.piratesofsolbay.com/" - } - }, - { - "chainId": 101, - "address": "FT84xCFrgRbP39Yo49BiDWRii8ytb1f3rHZtQiDkC7sH", - "symbol": "DN", - "name": "Digital Nirvana", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FT84xCFrgRbP39Yo49BiDWRii8ytb1f3rHZtQiDkC7sH/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3uytqzAsQnTVZxDEz9u7yvgidvQCteHzWsoVUVFps1XR", - "symbol": "AANDELHOUDER", - "name": "Kaat Riche te Brasschaat", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3uytqzAsQnTVZxDEz9u7yvgidvQCteHzWsoVUVFps1XR/Kaat.png", - "tags": ["aandelen", "aandeelhouders"], - "extensions": { - "website": "https://amsterdam-lawyers.nl/belgian-company-bv/" - } - }, - { - "chainId": 103, - "address": "4v3o1iGc7kSuiCHJsmkqkEfP2pq7rAS9Dx4qR6vw1fke", - "symbol": "YFINANCIAL", - "name": "YFINANCIAL token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4v3o1iGc7kSuiCHJsmkqkEfP2pq7rAS9Dx4qR6vw1fke/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "HVkFqcMHevVPb4XKrf4XowjEaVVsBoqJ2U1EG59Dfk5j", - "symbol": "VISION", - "name": "VisionGame", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HVkFqcMHevVPb4XKrf4XowjEaVVsBoqJ2U1EG59Dfk5j/logo.png", - "tags": ["game-publishing"], - "extensions": { - "description": "Ultimate Gaming Experience Amplified by Blockchain", - "medium": "https://medium.com/@visiongame", - "solanium": "https://www.solanium.io/project/visiongame/", - "telegram": "https://t.me/visiongame_official", - "telegramAnnouncements": "https://t.me/visiongame_ann", - "twitter": "https://twitter.com/visiongame_", - "website": "https://visiongame.io/" - } - }, - { - "chainId": 101, - "address": "MCDsTXbZe87sWezWJ3B8Sw63PUjq3BXzRmY7zptoYr2", - "symbol": "TMDC", - "name": "The Monkey Design Club", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/namu42/ImageRepo/main/MCL9utLXFvUMdWLou4jk13BBgTu2XRGM983eZ24RsTP/logo.png", - "tags": ["TMDC", "THEMONKEYDESIGNCLUB", "metaverse"] - }, - { - "chainId": 101, - "address": "AUXXw8iRvSb57upRB74xVrUiPWpfoxzKgRs9j2fEzsVC", - "symbol": "AANDEELHOUDER", - "name": "Dirk Willems te Antwerpen", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AUXXw8iRvSb57upRB74xVrUiPWpfoxzKgRs9j2fEzsVC/dirk.png", - "tags": ["aandelen", "aandeelhouders"], - "extensions": { - "website": "https://amsterdam-lawyers.nl/belgian-company-bv/" - } - }, - { - "chainId": 101, - "address": "DH6NkYYTuLWUu5gj1Q4JdgNV6Nu6Sji9VWgrMMPP6gy7", - "symbol": "AANDEELHOUDER", - "name": "Ann Willems te Antwerpen", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DH6NkYYTuLWUu5gj1Q4JdgNV6Nu6Sji9VWgrMMPP6gy7/ann.png", - "tags": ["aandelen", "aandeelhouders"], - "extensions": { - "website": "https://amsterdam-lawyers.nl/belgian-company-bv/" - } - }, - { - "chainId": 101, - "address": "CRSzWoeyfR8sJxB2d6LLEre92Uc59TCPX2gZidp4t3eE", - "symbol": "AGVZ", - "name": "Agave Zwolf", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/GrupoZwolf/cryptozw/main/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "7KxC287omw6QrKQfKNUQs2kmgrTtakVcKriUAHpkur9m", - "symbol": "CRISTO", - "name": "Cristomoneda", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/cristomoneda/cristomoneda.png/main/cristomonedalogo.png", - "tags": [ - "community-token", - "wl-token", - "utility-token", - "christian", - "church", - "jesus", - "christ", - "cristo", - "cristomoneda", - "iglesia" - ] - }, - { - "chainId": 101, - "address": "AnjuLVbYvrhZZSU9Eiqj4d7TdYEmHJRuqdes8Cn7PfS9", - "symbol": "CMARC", - "name": "CodeMarcs", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/codemarc/codemarks/master/assets/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "4ek283kahxjzEs13sM3qDTUCPD15iFQ1DzVfAMQYpXPJ", - "symbol": "RDT", - "name": "Rep Devnet", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/AlexMGN/assets/develop/assets/Repti_icon.png" - }, - { - "chainId": 101, - "address": "GcYico8V5ycBi9VM2z1VQ2abvCSp6JggRDkmMEqKTUHe", - "symbol": "WRNH", - "name": "Wrench", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/chiefsoft/wrench/main/wrench_token.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "ogtp2SQvRn5vs4YfgQ8BQ5h2rbfjPZzux4r99TZ62yy", - "symbol": "SHOG", - "name": "Solana Hills OG Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ogtp2SQvRn5vs4YfgQ8BQ5h2rbfjPZzux4r99TZ62yy/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "WL12AGjU2zs5myyrUzBmSDF5cMG9xMAcZ8kMYnre2ns", - "symbol": "SHWL1", - "name": "Solana Hills Whitelist-1 Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WL12AGjU2zs5myyrUzBmSDF5cMG9xMAcZ8kMYnre2ns/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "WL2jnbxfHqQ6SoHrfA4QXEx9vw8gNyJwSTfgtvvuoKD", - "symbol": "SHWL2", - "name": "Solana Hills Whitelist-2 Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WL2jnbxfHqQ6SoHrfA4QXEx9vw8gNyJwSTfgtvvuoKD/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "T3Z3238ujJZsaJE3jh31Df5YPnd6wJbHzQ7XdfoMVnt", - "symbol": "BHWL", - "name": "Bongheads White List Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Kumia115/nft-landing-page/main/images/x-icon/android-chrome-512x512.png", - "extensions": { - "twitter": "https://twitter.com/BongHeadsNFT", - "website": "https://bongheads.io/" - } - }, - { - "chainId": 101, - "address": "BueMgcdgzFRKdUMLgKX3DTR8s7BxpHrYm7R1L8LPF9oa", - "symbol": "BE", - "name": "Brave Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/audreydeyniera/aset/main/logo.jpeg", - "tags": ["staking"], - "extensions": { - "discord": "https://discord.gg/2xmTnvb5", - "twitter": "https://twitter.com/BraveApeDerug" - } - }, - { - "chainId": 103, - "address": "AecwgXCfcCZYa15BXGjnpg5jaAWXneCbWEXJmotf4Q5Q", - "symbol": "ODKYDEV", - "name": "OddKey (devnet)", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AecwgXCfcCZYa15BXGjnpg5jaAWXneCbWEXJmotf4Q5Q/logo.png", - "tags": ["utility-token", "devnet"], - "extensions": { - "website": "https://oddkey.com" - } - }, - { - "chainId": 101, - "address": "BpaoPZUKR3gP4SMVJja3itp3LRAxTMwovZmKBbtzWdyB", - "symbol": "MINTUS", - "name": "MintUS Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BpaoPZUKR3gP4SMVJja3itp3LRAxTMwovZmKBbtzWdyB/logo.png", - "tags": ["wl-token"], - "extensions": { - "twitter": "https://twitter.com/onlymintus" - } - }, - { - "chainId": 101, - "address": "BYtxPHFNdcTk9HZChrRtwWN73PKMW3RKdpeC2pZfhkrq", - "symbol": "73PM", - "name": "73Prime", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ahplummer/73primelogo/main/73Prime-yellow-simple-256.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "488DGeMxRHmofoEtfrPE6geMT7EzwP9HMn76cDq5ZKwt", - "symbol": "LONGAN", - "name": "Longan Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/fungtoken/Longan/main/Longan.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BVCwkyqS5Xu1taHLtZVEBmw4NEfkxcYe2ZEJH41DZD7c", - "symbol": "OJC", - "name": "Ojciec Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/lineekk/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "WhiLmuEcmdAfhvJ1zhitX4z96Zb1EGUBkKbTWYrrUd6", - "symbol": "HSHN", - "name": "Hidden Shinobi WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WhiLmuEcmdAfhvJ1zhitX4z96Zb1EGUBkKbTWYrrUd6/logo.png" - }, - { - "chainId": 101, - "address": "3FRE6YQXnEZKbsKBUW4EkvsqkVpoQDs4W2gEUsQRxfDp", - "symbol": "ZWD", - "name": "ZIMBABWE DOLLAR TOKEN", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/opals99/ZWD-SOL/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DmqnqcT2fqzzWup6o4CyTiErCBzsrV9M19zxZyeFYo6Z", - "symbol": "STACHE", - "name": "Mustache Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Rajyyan/mustache/main/stachelogo.png", - "tags": ["value-token", "collectible-token"], - "extensions": { - "website": "http://mustachetoken.space" - } - }, - { - "chainId": 101, - "address": "H2mUUthn7jzr1rShRYcsvbidQD3UFfyQ6vMGceUDn5Ew", - "symbol": "PEARL", - "name": "Pearl Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/fungtoken/pearl/main/Pearls.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7CSuSUufuNSaV6vqmNnftJgPWT23RFQjgoJfWqFPAB3U", - "symbol": "QMBY", - "name": "Quimby", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/rorymcpedal/cryptocoin/main/logo.PNG", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2Wto5r1vzhhgXvRsYWW4PkpS68JW6NURGCDtVBGCVAKc", - "symbol": "SOCK", - "name": "Socks Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/dashgotsocks/crypto/main/logo.png?token=GHSAT0AAAAAABSJXBBV6U6P3BOSIIJV3GYCYRQ7AVA", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Eqekt4QF8zy9X6MZn5JUa6YYAz5MMgo7ZV5ZyX7YtjJW", - "symbol": "SMU", - "name": "Solana Monkey University Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Tagzie/crypto/main/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "YFmGQB86pWYmNo1VN2kK2enMf47tQiBiXakU4MgikRh", - "symbol": "REG", - "name": "RegCoin", - "decimals": 0, - "logoURI": "https://github.com/Reg1337/RegCoin/raw/main/ae1eeb837b7640bea60f6f213718ac99.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DVWBLVL9DqMSkgb8WfuWW23dfe88h4hRK1r7hpmvhNuE", - "symbol": "FUNNY", - "name": "MetaLaughs", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DVWBLVL9DqMSkgb8WfuWW23dfe88h4hRK1r7hpmvhNuE/logo.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "instagram": "http://instagram.com/metalaughs_io", - "telegram": "https://t.me/metalaughs", - "twitter": "https://twitter.com/metalaughs" - } - }, - { - "chainId": 101, - "address": "ToBNsrnbNuDzowzt1y3zLUMEndMTFqTFngM22mojHX3", - "symbol": "SKILL", - "name": "SKILL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/NinjaApe/image/main/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "G4ASTCiHKeM2JNbefruTbwPTQ8z7SnmPUVC1xAUcaS7a", - "symbol": "SOLGAT", - "name": "Solgats WL Token", - "decimals": 0, - "logoURI": "https://solgats.io/images/solgats.png", - "tags": ["social-token"], - "extensions": { - "twitter": "https://twitter.com/solgats", - "website": "https://solgats.io" - } - }, - { - "chainId": 101, - "address": "BiBNvJTnA4HZraqfex7mqLzkac5Nv9RuZY73PHnitfgD", - "symbol": "BABY", - "name": "BABY", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BiBNvJTnA4HZraqfex7mqLzkac5Nv9RuZY73PHnitfgD/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CSj94sJsnWf9TGKkV7gD2SqVr9y38SqaYmi7qekAyKai", - "symbol": "BULL", - "name": "Bull Token", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/h3ll0x/bullimage/main/bulltoken.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "DriP77HQDnSyT478K4wrYTjKFdvbaCyQnEKpAkq87GtR", - "symbol": "DRIP", - "name": "Drippies WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DriP77HQDnSyT478K4wrYTjKFdvbaCyQnEKpAkq87GtR/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/drippieverse", - "website": "https://www.drippies.space" - } - }, - { - "chainId": 101, - "address": "5aS5Uuo5dt8Dut7FZfpaPhUjoih14GiEs1P4yhYGqA69", - "symbol": "DDToken", - "name": "Double D Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/tcryptocoins/spltoken/main/dd-token-v4.svg", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "7xBLAJQ9TDnBXZ6cEcLiq7XtwneiCU5b94b569ryBEqP", - "symbol": "BENZ", - "name": "BENZ Token", - "decimals": 0, - "logoURI": "https://gateway.pinata.cloud/ipfs/QmR5FQVrGg7ySX3BXxPsMzPrBR2j2RWnDKVavReKbKV79W", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "DriPBT5PbN2vuYXQgz1jbar5Pi2adzo2d447UrV8fvTc", - "symbol": "DRP", - "name": "Drippies SOL TOKEN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DriPBT5PbN2vuYXQgz1jbar5Pi2adzo2d447UrV8fvTc/logo.png", - "tags": ["whitelist-token", "NFT"] - }, - { - "chainId": 101, - "address": "DuLnzJo4emVer2j9Gjy8ce5w6ASzWUeSbCYemvEg8cJZ", - "symbol": "TSS", - "name": "TSS COIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/CoachAlpha/TSS-COIN/main/tss_coin.png", - "tags": ["minecraft", "tss", "server"], - "extensions": { - "discord": "https://discord.gg/HtksU8ukZD" - } - }, - { - "chainId": 101, - "address": "pizZaxdr2KyMtdgWBXGU32Ti88H3bCr98z6gQZx8VYY", - "symbol": "PIZZA", - "name": "PIZZA", - "decimals": 12, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/pizZaxdr2KyMtdgWBXGU32Ti88H3bCr98z6gQZx8VYY/logo.png", - "extensions": { - "twitter": "https://twitter.com/TurtleZ_sol" - } - }, - { - "chainId": 101, - "address": "5diZKwPDsfcqCs8kYEU4AM1cCufZRTK7b77djF5LmXyo", - "symbol": "$MARSH", - "name": "Marsh", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5diZKwPDsfcqCs8kYEU4AM1cCufZRTK7b77djF5LmXyo/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://www.marshiesnft.com/" - } - }, - { - "chainId": 101, - "address": "ASoKEceyYDNRvhZmdoELBZKNc4VhKwsSHkx9v3yR1gTD", - "symbol": "CINE1", - "name": "Cineoncerts NFT 1", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/cineconcerts/NFT_Token_1/main/Cine_Solana_Token_Logo.png", - "tags": ["cineconcerts"] - }, - { - "chainId": 101, - "address": "CatsMsgyV6ecnvztHkceEAXmhy9oYhAS4tT3Yyi6xHAf", - "symbol": "PEBLO", - "name": "Cats On Crack WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CatsMsgyV6ecnvztHkceEAXmhy9oYhAS4tT3Yyi6xHAf/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/catsoncrack_2", - "website": "https://www.catsoncrack.xyz" - } - }, - { - "chainId": 101, - "address": "nYDqQVEaQxLYLh8B8oAFXziMT1bcGrAVigZPL1s3dKc", - "symbol": "PREY", - "name": "PREY", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/nYDqQVEaQxLYLh8B8oAFXziMT1bcGrAVigZPL1s3dKc/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/ApexPredatorSOL", - "website": "https://home.apexpredator.army/" - } - }, - { - "chainId": 101, - "address": "9U8Bn6zAf6Wyp1YHdXtLyfbN7yMvdvW1qQY475iZ5ftZ", - "symbol": "GIGS", - "name": "GigaDAO", - "decimals": 4, - "logoURI": "https://gateway.pinata.cloud/ipfs/QmUz2npdTWpFWBYiRCBN4zXMZFBRL9w5yNBNaSCXMTJ9T9", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "CAtsAzbpAf4sFt5Qh5kguJqb1UJavWENnHmkCv8T9hvU", - "symbol": "CAT", - "name": "Official Cats On Crack WL Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CAtsAzbpAf4sFt5Qh5kguJqb1UJavWENnHmkCv8T9hvU/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/catsoncrack_2", - "website": "https://www.catsoncrack.xyz/" - } - }, - { - "chainId": 101, - "address": "DKHzgFWPRoGqzsbnk6bmaVw8t32tujJsqCMiMJ5PpmR4", - "symbol": "AVAG", - "name": "Avago", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/tecfay/token/main/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "DZMFqjobcvXyaaggDt1MxiLZyhqki67NuZRfiMJwczNq", - "symbol": "$BA", - "name": "Banana Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DZMFqjobcvXyaaggDt1MxiLZyhqki67NuZRfiMJwczNq/logo.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "9NGd8kUraGJPGEpN2Tk61JuU7oJ4h2ererDuw7WDHcTP", - "symbol": "M11N", - "name": "MI11ENNIUM", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/wiseblue32/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7u2AsUouSsgvWgJrzYej9iu8sABgYgJseEuFp6228TLk", - "symbol": "WERSA", - "name": "Twersa", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7u2AsUouSsgvWgJrzYej9iu8sABgYgJseEuFp6228TLk/logo.png", - "tags": ["Twersa"] - }, - { - "chainId": 101, - "address": "BRTsHXpCdVr8uaMBE5D9SsCS1d5o98ZSnT2Z9EaGryrM", - "symbol": "LMNS", - "name": "Luminus", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BRTsHXpCdVr8uaMBE5D9SsCS1d5o98ZSnT2Z9EaGryrM/logo.png", - "extensions": { - "twitter": "https://twitter.com/DaMaterLuminus", - "website": "https://damater.web.app/" - } - }, - { - "chainId": 101, - "address": "4ajycEvJN5BScuECdaDsYuqS88XPShDmxCToZBrZT2hY", - "symbol": "DaMTR", - "name": "DaMater", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4ajycEvJN5BScuECdaDsYuqS88XPShDmxCToZBrZT2hY/logo.png", - "extensions": { - "twitter": "https://twitter.com/DaMaterLuminus", - "website": "https://damater.web.app/" - } - }, - { - "chainId": 101, - "address": "guYHCq2ZhdXNrDodWoiyCrJYm7yjLTXxETWbGiG32VU", - "symbol": "RAFS", - "name": "RA Fitness Science", - "decimals": 0, - "logoURI": "https://github.com/GTLB13/RA-TOKEN/blob/main/RA.png?raw=true", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Dm99YNXbJXzf2tDkNQMNwKY19Jop3C6fXQawLHBFbHi2", - "symbol": "$HIME", - "name": "HIME", - "decimals": 9, - "logoURI": "https://api.fgraph.io/storage/images/logos/himeiconv2.png", - "tags": ["utility-token"] - }, - { - "chainId": 103, - "address": "7ktA2FhAp93mKgX6gPRdFpD4Kb7bAUJsMGvEmRVhF8RG", - "symbol": "YSBET", - "name": "YSBET token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7ktA2FhAp93mKgX6gPRdFpD4Kb7bAUJsMGvEmRVhF8RG/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "BYPsjxa3YuZESQz1dKuBw1QSFCSpecsm8nCQhY5xbU1Z", - "symbol": "NEAR", - "name": "NEAR (Allbridge from Near)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BYPsjxa3YuZESQz1dKuBw1QSFCSpecsm8nCQhY5xbU1Z/logo.png", - "extensions": { - "coingeckoId": "near" - } - }, - { - "chainId": 101, - "address": "6CgrvodLPX2pfHGj4FDVLWgUAxGFSXJTDgZvfFBifD8p", - "symbol": "xHXD", - "name": "xHXD Token", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6CgrvodLPX2pfHGj4FDVLWgUAxGFSXJTDgZvfFBifD8p/logo.png" - }, - { - "chainId": 103, - "address": "BR7JoJSBTdYDxTxnxsgkn47LVT7oAftBE4Jk11tZNww7", - "symbol": "YMAKERS", - "name": "YMAKERS token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BR7JoJSBTdYDxTxnxsgkn47LVT7oAftBE4Jk11tZNww7/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "8Ci2uQFhWvPuEupoBpmh7EJG8eTepDYrfoPgu7MKCddi", - "symbol": "RSC", - "name": "RESOURCE PROTOCOL", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8Ci2uQFhWvPuEupoBpmh7EJG8eTepDYrfoPgu7MKCddi/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "CVUeU96k6Lc2z4Qe3R6n4xkhcxmZKFHxmU4HzoTN3cF", - "symbol": "DOOG", - "name": "Doogles Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CVUeU96k6Lc2z4Qe3R6n4xkhcxmZKFHxmU4HzoTN3cF/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "DscTwD3ozNrW6xhbwxqBMur36vvUkLTmDrJBdaCJvaTW", - "symbol": "LCD", - "name": "Lazy Crazy Ducks Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DscTwD3ozNrW6xhbwxqBMur36vvUkLTmDrJBdaCJvaTW/logo.png", - "tags": ["Whitelist-token", "LCD"] - }, - { - "chainId": 101, - "address": "9oM4Bg2E8y8LkGbaJhd27tcbto4KpjvXHubG2LEoRbQL", - "symbol": "PB", - "name": "CoC public sale token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9oM4Bg2E8y8LkGbaJhd27tcbto4KpjvXHubG2LEoRbQL/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://catsoncrack.xyz" - } - }, - { - "chainId": 101, - "address": "DF4LAwfNPMdX5a9mBAFxA1amBZKJ9HtTQPQqDCDcvvMg", - "symbol": "F6T", - "name": "F6 Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DF4LAwfNPMdX5a9mBAFxA1amBZKJ9HtTQPQqDCDcvvMg/logo.png" - }, - { - "chainId": 101, - "address": "BqgeGmnGN8oRfLmZVFStUnX9KpVjYiaPFm6TcVZUowWy", - "symbol": "TSTCN", - "name": "TestCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BqgeGmnGN8oRfLmZVFStUnX9KpVjYiaPFm6TcVZUowWy/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HS2DanDUPKEnkzXDywtQKAqWKbWte3ahvwMhcfBJjGai", - "symbol": "WWOLF", - "name": "WWOLF Token", - "decimals": 9, - "logoURI": "https://github.com/ArthurPaivaT/token-list/blob/main/assets/mainnet/HS2DanDUPKEnkzXDywtQKAqWKbWte3ahvwMhcfBJjGai/logo.png?raw=true" - }, - { - "chainId": 103, - "address": "Fnbmb9Zcu2rzvXuj6rEnFLnVUtDm5ryofAFDvXWpniSJ", - "symbol": "YSBULLS", - "name": "YSBULLS token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Fnbmb9Zcu2rzvXuj6rEnFLnVUtDm5ryofAFDvXWpniSJ/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "Ax6SfYCx6iZLarSkUeJibeF4dEWyA5nNWiEE21ov6imU", - "symbol": "J28", - "name": "j28905", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/j28905/cryptoBros/main/crypto_logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3qdTxpYhfCeoJMG4obhBZ24fB4SRuBMqGwAN35YzpRCR", - "symbol": "wsPNG", - "name": "wsPENG", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/peddyiscrazy/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "88nvLwiD7wDgKoT1LvLa4qRkUUo2unZi1qtjtu7R7Kiu", - "symbol": "OLIV", - "name": "Oliv test token", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/88nvLwiD7wDgKoT1LvLa4qRkUUo2unZi1qtjtu7R7Kiu/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 103, - "address": "DxfEB8qDoyCgoGr3qZyU5iK2hKuRGjaEooHs3eyb9P8k", - "symbol": "02", - "name": "Outland Odyssey Token", - "decimals": 18, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DxfEB8qDoyCgoGr3qZyU5iK2hKuRGjaEooHs3eyb9P8k/logo.png", - "tags": ["utility-token", "community-token", "game-token"], - "extensions": { - "twitter": "https://twitter.com/EABadtoken" - } - }, - { - "chainId": 101, - "address": "4Q82kdinwF7MsTgiXuvkF8SMwchkrhcWc4PMytAcYr23", - "symbol": "HRSW", - "name": "Hashrate Servers Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4Q82kdinwF7MsTgiXuvkF8SMwchkrhcWc4PMytAcYr23/logo.png", - "extensions": { - "discord": "https://discord.gg/hashrateservers", - "twitter": "https://twitter.com/HashrateServers" - } - }, - { - "chainId": 101, - "address": "BUduUSJDmTpEUs3di9NMPf38zRz1HMHqEtWAebpYwyVz", - "symbol": "HSWL", - "name": "Hashrate Servers Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BUduUSJDmTpEUs3di9NMPf38zRz1HMHqEtWAebpYwyVz/logo.png", - "extensions": { - "discord": "https://discord.gg/hashrateservers", - "twitter": "https://twitter.com/HashrateServers" - } - }, - { - "chainId": 103, - "address": "54kUGptgonbnr6YjzQcgduScBcPkNTKRffraSxsVHc4J", - "symbol": "YOCs", - "name": "YOCs token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/54kUGptgonbnr6YjzQcgduScBcPkNTKRffraSxsVHc4J/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "PLAyKbtrwQWgWkpsEaMHPMeDLDourWEWVrx824kQN8P", - "symbol": "SolPlay", - "name": "SolPlay", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/PLAyKbtrwQWgWkpsEaMHPMeDLDourWEWVrx824kQN8P/logo.png", - "tags": ["Gaming"], - "extensions": { - "website": "https://solplay.de" - } - }, - { - "chainId": 101, - "address": "Eb3xrjvR3Gu1MybG7YoR7QZPDQQsSnw5kmZgej9xTW5R", - "symbol": "TROPHY", - "name": "TROPHY", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/GRacersClub/crypto/main/logo.png", - "tags": ["community-token", "utility-token", "governance-token"] - }, - { - "chainId": 101, - "address": "3Z9zQmpFGQ7e5tHFyqtxmD4EJJ3Cj5F5sFrnJA2Lwn8X", - "symbol": "PINO", - "name": "PinoCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/CargoBlitz/cryptopino/main/Logopit_1646826988688.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "rfhZiDve7ZC25suwzVdZYr2J1DvuEm15gXZaBgeCf9X", - "symbol": "DUSD", - "name": "DOME USD", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/DrMagazi/token-list/main/assets/mainnet/rfhZiDve7ZC25suwzVdZYr2J1DvuEm15gXZaBgeCf9X/logo.jpg", - "tags": ["stablecoin", "utility-token"] - }, - { - "chainId": 101, - "address": "DsTJzQaef6hX7STtZy6ThQhej3XNPMcLKHpPVUENYa35", - "symbol": "HOC", - "name": "HouseOfCards", - "decimals": 6, - "logoURI": "https://i.ibb.co/rHrVgdT/logo.png" - }, - { - "chainId": 101, - "address": "Dudp8epBnyrqqj3ZV8qjhyxtnjUAhRGLB9qCtJqFV9EV", - "symbol": "PACA", - "name": "PACA", - "decimals": 9, - "logoURI": "https://github.com/ArthurPaivaT/token-list/blob/main/assets/mainnet/Dudp8epBnyrqqj3ZV8qjhyxtnjUAhRGLB9qCtJqFV9EV/logo.png?raw=true" - }, - { - "chainId": 101, - "address": "He6G3aKAykVMRczNVf8F6LYquaocWSjCQ5vwn1P3X5qM", - "symbol": "TPY", - "name": "Trust Pay", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/TrustPayCoin/Crypto/main/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "8TACnwvkQTBNkBux81R6WunjGkUPCkaUK7ae9c7Lu4fA", - "symbol": "RPCC", - "name": "Red Pill Coaching Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/F03nX/crypto-RPC/main/np_drugs_1863865_ED1C25.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FvbzTav9EZY9LLoCcrW665urLsRJ87asVFZMsTA8hQwd", - "symbol": "GOD", - "name": "God's Obol", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/matthewrx/godtokenlogo/main/logo.png", - "tags": ["Gaming"], - "extensions": { - "discord": "http://discord.gg/solgods", - "twitter": "https://twitter.com/SOLgods_", - "website": "https://thefracture.art/" - } - }, - { - "chainId": 101, - "address": "2rBgtDbKoqHg2PsdnHjreBJJwiNHwvvMfpjAF4kvyDcB", - "symbol": "J9BC", - "name": "J9 Casino", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2rBgtDbKoqHg2PsdnHjreBJJwiNHwvvMfpjAF4kvyDcB/j9.jpg", - "tags": ["Gamble", "Stake-Token", "Cross-Chain"], - "extensions": { - "twitter": "https://twitter.com/j9_global", - "website": "https://j9.io/" - } - }, - { - "chainId": 101, - "address": "4RyUEWXJemmMpoWpr9xjYuzMLDbcM6DuLkojibFaufDy", - "symbol": "LINEK", - "name": "Linek", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/lineekk/crypto/main/Linek/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FDo4TPENcKdHtWMV56PSEjJmFfWUSRotLgW1EbPHreCB", - "symbol": "bEVRY", - "name": "EVRY (Binance chain)", - "decimals": 18, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FDo4TPENcKdHtWMV56PSEjJmFfWUSRotLgW1EbPHreCB/evry.png", - "tags": ["DeFi"], - "extensions": { - "twitter": "https://twitter.com/EvryNetwork", - "website": "https://evrynet.io/" - } - }, - { - "chainId": 101, - "address": "6TSyg6kXgz2rtSbZQcnhoGV3VqNsRBbSVxWrg5cwkSw7", - "symbol": "shCP", - "name": "Shapz Compute Power", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6TSyg6kXgz2rtSbZQcnhoGV3VqNsRBbSVxWrg5cwkSw7/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://shapz.org" - } - }, - { - "chainId": 101, - "address": "5kANAUeHsoambmdV317Nhs8puVxfukyChr9j9TZ8ZeQq", - "symbol": "DoSC", - "name": "Dreams of SolCandy Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5kANAUeHsoambmdV317Nhs8puVxfukyChr9j9TZ8ZeQq/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://dreamsofsolcandy.com/" - } - }, - { - "chainId": 103, - "address": "9S1wCdvYgrCus7jXyLxaZP3ovSJrYDvocAEhPq8WgxXC", - "symbol": "RTDT", - "name": "Repti TT", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9S1wCdvYgrCus7jXyLxaZP3ovSJrYDvocAEhPq8WgxXC/Repti_icon.png" - }, - { - "chainId": 101, - "address": "BEuhuvH3FQYCoMqBHknyXpSjcMYN3fzZbZtf11KyWKqy", - "symbol": "HIKI", - "name": "Hikicoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BEuhuvH3FQYCoMqBHknyXpSjcMYN3fzZbZtf11KyWKqy/logo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6MXoebdRr4qZmeCdzEc5Dtk8XmX3mBUrzgtEYwCKqxzk", - "symbol": "OxH", - "name": "OriginX", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/OriginXHeroes/Token/main/assets/%24OriginX.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "9jyC8HjUBUgEWvZ6XUNbtUtiMthDVJkfhgp9aUatfWq3", - "symbol": "THAUM", - "name": "CYPHERZ THAUM TOKEN", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9jyC8HjUBUgEWvZ6XUNbtUtiMthDVJkfhgp9aUatfWq3/logo.png", - "tags": ["DeFi", "NFT", "community-token", "Metaverse"], - "extensions": { - "description": "Thaum is the in-game and DeFi token of the Cypherz NFT Pryzmverse. Check our Medium Page for Tokenomics", - "twitter": "https://twitter.com/CypherzNFT", - "website": "https://CypherzNFT.io" - } - }, - { - "chainId": 101, - "address": "FC4p7fFtfCSYfx6zvCnmnLtKF1Kmfsn5qvHwk9LXxSV8", - "symbol": "BUBI", - "name": "bubi", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/X-xhesild/crypto/main/BUBI.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HxocLoGoaaz2V4nS8gpV93us2PbPkNRcTpDrmruk1Fxd", - "symbol": "BTXS", - "name": "BTXSOL", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HxocLoGoaaz2V4nS8gpV93us2PbPkNRcTpDrmruk1Fxd/logo.png", - "tags": ["utility-token", "nft-token"], - "extensions": { - "website": "https://sol.btx.world/" - } - }, - { - "chainId": 101, - "address": "EmoRBYmLPDTUYyrpm5LTMfRgjJYz7LUFM685PH6jLTUE", - "symbol": "EMORB", - "name": "Emorb", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EmoRBYmLPDTUYyrpm5LTMfRgjJYz7LUFM685PH6jLTUE/logo.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "discord": "https://discord.gg/emorb", - "twitter": "https://twitter.com/EmorbNFT", - "website": "https://www.emorb.io/" - } - }, - { - "chainId": 101, - "address": "3UXCdNbWBvSt5GfrZPXBFmFJYeX26wJQWBKMd3J5jVR8", - "symbol": "FJZ", - "name": "Francisco Jose Zangerolame", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/fzangerolame/crypto/main/zangerolame.png", - "extensions": { - "twitter": "https://twitter.com/FjzUsa", - "website": "https://zangerolame.com/" - } - }, - { - "chainId": 101, - "address": "BJJohVbGmLbM8EEzT1CH7N6fg2AjEAAgb5qrRnNYdD1j", - "symbol": "TBILL", - "name": "NFTokers Treasury Bill Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/MoonCandy69/crypto5/main/tokerlogo.png", - "tags": ["NFT", "utility-token"], - "extensions": { - "twitter": "https://twitter.com/nftokers" - } - }, - { - "chainId": 101, - "address": "4eW4TtBfyCs6AwfN4ZRKSjL8eGaukr9VoBaLBzphxJLK", - "symbol": "CORA", - "name": "Cotorra Coin", - "decimals": 9, - "logoURI": "https://lacotorraradio.s3.us-east-2.amazonaws.com/CotorraCoin.png", - "tags": ["social-media", "multimedia-token", "multiverse-token"], - "extensions": { - "discord": "https://discord.gg/WqmXQ8bq7n", - "twitter": "https://twitter.com/cotorraradio1", - "website": "https://lacotorraradio.com/" - } - }, - { - "chainId": 101, - "address": "8DSstVvEPDg3uwsPCXrFkdxJQARhaN5GoXeMCAX8AiK5", - "symbol": "BAWK", - "name": "BawkBucks", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Player172/BawkBucks/main/bawkbuckslogo.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "3ZDLvGwEaGtpkPZEXmjJrPwahMYuAcs3YHdhTWEWbyo2", - "symbol": "$BTXS", - "name": "BTXSOL MIRROR 1", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3ZDLvGwEaGtpkPZEXmjJrPwahMYuAcs3YHdhTWEWbyo2/logo.png", - "tags": ["mirror-token"], - "extensions": { - "website": "https://sol.btx.world/" - } - }, - { - "chainId": 101, - "address": "73dCbT3M8UiTd1PQwunTxc2UWnMeLLWmNT3KkbvHyLGP", - "symbol": "BTXSOL", - "name": "BTXSOL MIRROR 2", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/73dCbT3M8UiTd1PQwunTxc2UWnMeLLWmNT3KkbvHyLGP/logo.png", - "tags": ["mirror-token"], - "extensions": { - "website": "https://sol.btx.world/" - } - }, - { - "chainId": 101, - "address": "8uD8yx7pXCvX1J1AmdN7jLZh7rAGUE4zNtwT7UtY4rvm", - "symbol": "CSST", - "name": "CS Stake Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8uD8yx7pXCvX1J1AmdN7jLZh7rAGUE4zNtwT7UtY4rvm/logo.jpg", - "tags": ["stake-token"] - }, - { - "chainId": 101, - "address": "GFzwhDUKNoQPLAwP3p5xChw9GDnwZ5ZNMhjbWKw9KB7p", - "symbol": "CREEPY", - "name": "CREEPY SOULS", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/cd9e50d252cc84da29ecc459b547e32083e84134/assets/mainnet/GFzwhDUKNoQPLAwP3p5xChw9GDnwZ5ZNMhjbWKw9KB7p/logo.png", - "tags": ["stake-token"] - }, - { - "chainId": 101, - "address": "Fc1DRrjQFNJ4Ym5GaC4B6dUvVPRGzdgffEWYmc2PktRv", - "symbol": "RESCUE", - "name": "Rescue DAO Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/sinnocent26/crypto/main/logo.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "description": "A decentralized coin created to fund local solidarity projects all over the world.", - "discord": "https://discord.gg/UpRKQpTQ", - "twitter": "https://twitter.com/Rescue_DAO", - "website": "https://rescuedao.com/" - } - }, - { - "chainId": 101, - "address": "EHwLnuVJLLejkJMSE1iJgj5uDCBPDgb59zmvMWFt12H4", - "symbol": "$GANG", - "name": "Infected Gang", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/InfectedGangNFT/assets/main/infected%201.png", - "tags": ["utility-token", "nft"], - "extensions": { - "website": "https://infectedgang.com/" - } - }, - { - "chainId": 101, - "address": "Ha8pzMaX6shu6N3pCehkGZ1nNuryUn24qh14xr4cgvYR", - "symbol": "SAMO", - "name": "Samo Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/samuel-yeebiyo/solana-img/main/logo.png", - "tags": ["stake-token"] - }, - { - "chainId": 101, - "address": "Hx6Ns9RwaK4SXFVtjrErKc5afMpS9FRtjYtsZnVaiyTX", - "symbol": "$BTXSOL", - "name": "BTXSOL MIRROR 3", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Hx6Ns9RwaK4SXFVtjrErKc5afMpS9FRtjYtsZnVaiyTX/logo.png", - "tags": ["mirror-token"], - "extensions": { - "website": "https://sol.btx.world/" - } - }, - { - "chainId": 101, - "address": "J5QR7ewBbtGnzmSjL2ARcZ2fEg5TjmEV2653qFtMQ9qe", - "symbol": "BEAN", - "name": "BeanBucks", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/thatpokemontrainer/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BoyzuwdnAfPRHE4hZEeKVYLMWUVjkucu55FgmZ59Y41W", - "symbol": "BOYZ", - "name": "Official Hidden Boyz TOKEN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BoyzuwdnAfPRHE4hZEeKVYLMWUVjkucu55FgmZ59Y41W/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/hiddenboyznft" - } - }, - { - "chainId": 101, - "address": "H4FamHEaSg27xhxsDEtTbg9zp2EcanwgzECiD9ChnKbP", - "symbol": "OWC", - "name": "Orions Wick Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Avoices/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3y9CzNkzS51JzUTMKQCZaRvksNH9qXUc24Pgx35BJ8K5", - "symbol": "CINEVIP1", - "name": "Cineconcerts VIP 1", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/cineconcerts/cine_NFT_tokens/main/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://cineconcerts.com" - } - }, - { - "chainId": 101, - "address": "5XTEN4ZQJ5BpLLz7ismC7PbDyugpXqcUsZcMHtTs3aW2", - "symbol": "KCC", - "name": "Kids Crypto Currency", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/Toastiam/crypto/main/KCC/logo.png", - "tags": ["allowance-token"] - }, - { - "chainId": 101, - "address": "GA9qsjRTgLHdu1xdMKZm274qLgbYYEe3PqfjMvPqw2c4", - "symbol": "AZC", - "name": "Azalea Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Azalea-Ray/AZC/main/azc_logo.png", - "tags": ["invest-token"] - }, - { - "chainId": 101, - "address": "DFRRxGLsdBNeLBpUmD1iLWbYjvi5kJp7ya8XgzNZoXJK", - "symbol": "TRLC", - "name": "Trilactic Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/TheyCallMeAlpha/token-logo/main/tokenlogo.png.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5BY9wMqpvmTJrzUHt9BAmaQwave833DyHZh33rCXFEQ2", - "symbol": "GLXY", - "name": "ASTRALS GLXY", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5BY9wMqpvmTJrzUHt9BAmaQwave833DyHZh33rCXFEQ2/logo.png", - "tags": ["NFT-token"], - "extensions": { - "discord": "https://discord.com/invite/astralsnft", - "twitter": "https://twitter.com/Astrals_NFT", - "website": "https://astrals.io" - } - }, - { - "chainId": 101, - "address": "2aLMD9KMQpZe1XLaZL5znEnRzprmb8Jjd2hws3GrSxeK", - "symbol": "MIRL", - "name": "MIRL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2aLMD9KMQpZe1XLaZL5znEnRzprmb8Jjd2hws3GrSxeK/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/ve4UA2Xc", - "twitter": "https://twitter.com/mirlnft", - "website": "https://mirl.club/" - } - }, - { - "chainId": 101, - "address": "4qn6FjsBPpVrGcPmvTgfwpCEQv7VxEAZX6WqmekWt5S7", - "symbol": "sYAW", - "name": "Staked Yawww", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4qn6FjsBPpVrGcPmvTgfwpCEQv7VxEAZX6WqmekWt5S7/syaw.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/YawwwNFT", - "website": "https://www.yawww.io" - } - }, - { - "chainId": 101, - "address": "6oYoyFahkKxyvjsdt8JtRr4AQHvvwHEJthwqxQjei2gi", - "symbol": "eEVRY", - "name": "EVRY (Ethereum)", - "decimals": 18, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6oYoyFahkKxyvjsdt8JtRr4AQHvvwHEJthwqxQjei2gi/evry.png", - "tags": ["DeFi"], - "extensions": { - "coingeckoId": "evrynet", - "twitter": "https://twitter.com/EvryNetwork", - "website": "https://evrynet.io/" - } - }, - { - "chainId": 101, - "address": "WitD7ka2noYdpqxdiUx9NHCpQLE7NVqroLVejThrSFw", - "symbol": "LCD", - "name": "Lazy Crazy Ducks Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WitD7ka2noYdpqxdiUx9NHCpQLE7NVqroLVejThrSFw/logo.png", - "tags": ["Whitelist-token", "LCD"] - }, - { - "chainId": 101, - "address": "8tc8SFPUjJcuwZC3JPZMvTCnad9gsCZE94y2EE6i7gjk", - "symbol": "GAMECOIN", - "name": "SOL Game Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8tc8SFPUjJcuwZC3JPZMvTCnad9gsCZE94y2EE6i7gjk/logo.png", - "tags": ["utility-token", "game-token", "social-token"], - "extensions": { - "twitter": "https://twitter.com/solplayground", - "website": "https://solana-playground.com/" - } - }, - { - "chainId": 101, - "address": "7ScYHk4VDgSRnQngAUtQk4Eyf7fGat8P4wXq6e2dkzLj", - "symbol": "$ALL", - "name": "ALL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7ScYHk4VDgSRnQngAUtQk4Eyf7fGat8P4wXq6e2dkzLj/logo.png", - "tags": ["utility-token", "nft", "commodity-token"], - "extensions": { - "discord": "https://discord.gg/stonedapecrew", - "twitter": "https://twitter.com/stonedapecrew", - "website": "https://www.allblue.dev/" - } - }, - { - "chainId": 103, - "address": "2GF7CMzttUbpEsPYReVHgMgbSPMdARGjhCWb9UcwcbU3", - "symbol": "UREP", - "name": "UNIVERSAL REPVBLIK", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2GF7CMzttUbpEsPYReVHgMgbSPMdARGjhCWb9UcwcbU3/logo.png", - "tags": ["utility-token", "investment-token", "stake-token"], - "extensions": { - "instagram": "https://www.instagram.com/universalrepvblik/", - "website": "https://www.universalrepvblik.com/" - } - }, - { - "chainId": 101, - "address": "EEQFpa3sKwt7QD6MiqjoknrpHGE2qH6iPtiLmchzXdhL", - "symbol": "DUCKPOOP", - "name": "CraftyPoop", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/crtyencz/CraftyPoop/main/CraftyPoop.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FT2jC2W3kNxY1xDArtBzhPyAygFrB6HE8YH9Jbxdgpsy", - "symbol": "SSCR", - "name": "Skyscraper", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/NarrativeDev/token/main/LOGO.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/Fv4EAtwj8N", - "twitter": "https://twitter.com/Skyscraper_NFT", - "website": "https://skyscrapernft.io/" - } - }, - { - "chainId": 101, - "address": "FW7Ubg7FU36kB4tmK651ZKqu98gwyYuyM6bDXKLun77y", - "symbol": "GLT", - "name": "GreenLTEST", - "decimals": 9, - "logoURI": "https://github.com/gintarastamosiunas/Assets/blob/main/gliht_logo.svg", - "tags": ["DeFi"], - "extensions": { - "twitter": "https://twitter.com/glight_network", - "website": "https://glight.network/" - } - }, - { - "chainId": 101, - "address": "4mjbG7eFXriY6enhFfuFT4QAEFfuoY5e9KGC4eAp8Zv6", - "symbol": "BOOG", - "name": "Boogle Koin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Yamer9772/boogles/main/Logo.jpeg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Ad7QdUa5H38LgRWmnJxsFqpixGGKd1jQRdoc1ZUconhK", - "symbol": "HMBL", - "name": "Humble Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/humblelabs/token-list/main/assets/mainnet/Ad7QdUa5H38LgRWmnJxsFqpixGGKd1jQRdoc1ZUconhK/logo.png", - "tags": ["investment-token", "stake-token", "community-token"] - }, - { - "chainId": 101, - "address": "m6XGr58ATHSS7BvThRCDkqnsAeXLhpammhCrDo1amxq", - "symbol": "BM", - "name": "BM", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/m6XGr58ATHSS7BvThRCDkqnsAeXLhpammhCrDo1amxq/logo.png", - "tags": ["utility-token", "community-token", "exchange-token"] - }, - { - "chainId": 101, - "address": "Dmkq1LGAQKgaEogemxaWxHcNCLj9mUfkjkHoVLTCw7WN", - "symbol": "BNW", - "name": "Banana Wallet Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Dmkq1LGAQKgaEogemxaWxHcNCLj9mUfkjkHoVLTCw7WN/logo.png", - "tags": ["utility-token", "social-token", "community-token"], - "extensions": { - "discord": "https://discord.gg/MsvhksRh", - "twitter": "https://twitter.com/banana_wallet", - "website": "https://bananawallet.io" - } - }, - { - "chainId": 101, - "address": "Hv55zwSKWfGBBY8bHMJ1fRxAbHHzuVGirJrpRKABV4mV", - "symbol": "SC", - "name": "Scrap City", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Hv55zwSKWfGBBY8bHMJ1fRxAbHHzuVGirJrpRKABV4mV/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "discord": "https://discord.gg/knzdu7Pt24", - "twitter": "https://twitter.com/ScrapCityTNW", - "website": "https://scrapcity.io/" - } - }, - { - "chainId": 101, - "address": "SUga2NsMBxwPDJd8ccjUw98LTCgTVkLNNBoRppm9DKE", - "symbol": "SUG", - "name": "Sugar Realm NFT WL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SUga2NsMBxwPDJd8ccjUw98LTCgTVkLNNBoRppm9DKE/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/SugarRealmNFT", - "website": "https://sugarrealm.io/" - } - }, - { - "chainId": 101, - "address": "WLhJmBK713bYZUpe9Hvx6CdCDMFRLLGDTJtaME7ywfP", - "symbol": "SHFW", - "name": "Female HODL Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solanahodlwhales/whitelist/main/FemaleWhiteList.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/SolanaWhalesNFT", - "website": "https://solanahodlwhales.io" - } - }, - { - "chainId": 101, - "address": "ECA5eN5A7tgynkcvapWHgBvfR28Ma1JtcPFLQzA6Z7yr", - "symbol": "KAMA", - "name": "Kamaaina Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/webmasterhawaii/kamacoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8gVsZAWiJg7aRvFTKrBMXDW2XVpUMrpjAUyobTRK1fwD", - "symbol": "GOLD", - "name": "Lords of SOL Gold", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8gVsZAWiJg7aRvFTKrBMXDW2XVpUMrpjAUyobTRK1fwD/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/6sjHkM8nTT", - "twitter": "https://twitter.com/LordsofSOL", - "website": "https://lordsofsol.io" - } - }, - { - "chainId": 101, - "address": "DAHStbBEHcp7ooofA1TV3oayoRGM9i1v6TJSnoa2ZAWh", - "symbol": "DAHS", - "name": "Monkeh Moneh", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DAHStbBEHcp7ooofA1TV3oayoRGM9i1v6TJSnoa2ZAWh/logo.svg", - "tags": ["nft-token"], - "extensions": { - "discord": "https://discord.gg/DAHS", - "twitter": "https://twitter.com/DAHSNFT", - "website": "https://www.dahsnft.com/" - } - }, - { - "chainId": 101, - "address": "DHN2f5fexiVmUpiunxjszQakHyQohAjJC4CX3GQkRqwz", - "symbol": "CKWL", - "name": "Coinflip Kingz WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DHN2f5fexiVmUpiunxjszQakHyQohAjJC4CX3GQkRqwz/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "5sDTUwgsRDdycAHyWPEaXv4nSkjnLjSvJNhuLTnBmegM", - "symbol": "MLCWL", - "name": "MLC Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5sDTUwgsRDdycAHyWPEaXv4nSkjnLjSvJNhuLTnBmegM/logo.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "StnYdE8KD26pJHRqMNHY6m6Fy6DZAiw4MEB3G5ydkvQ", - "symbol": "stnywl", - "name": "Stoney Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/StnYdE8KD26pJHRqMNHY6m6Fy6DZAiw4MEB3G5ydkvQ/logo.png" - }, - { - "chainId": 101, - "address": "GDTVxsG41afjiJngZgFYHJkrG4PkTB9pVx7NuVsm2RcX", - "symbol": "Club", - "name": "Club", - "decimals": 9, - "logoURI": "https://github.com/ArthurPaivaT/token-list/blob/main/assets/mainnet/GDTVxsG41afjiJngZgFYHJkrG4PkTB9pVx7NuVsm2RcX/logo.png?raw=true" - }, - { - "chainId": 101, - "address": "F6jdxXGBzrYxK9GtLNorhDL4ku7JgqXSpB26r5WWHNZw", - "symbol": "HOLLOW", - "name": "HOLLOW Token", - "decimals": 9, - "logoURI": "https://github.com/ArthurPaivaT/token-list/blob/main/assets/mainnet/F6jdxXGBzrYxK9GtLNorhDL4ku7JgqXSpB26r5WWHNZw/logo.png?raw=true" - }, - { - "chainId": 101, - "address": "FKMH3U5uJK8s3zm66ij4urtLGUhX27WSpBLXdbeKgEqg", - "symbol": "JWC", - "name": "JetWanker Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Cawdroch/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ASBUxbkq4nKj8iExKyLVrHzDTZQpSBuaH8kiX3AYEQNj", - "symbol": "APSU", - "name": "APSU Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ASBUxbkq4nKj8iExKyLVrHzDTZQpSBuaH8kiX3AYEQNj/logo.png", - "tags": ["utility-token", "social-token"], - "extensions": { - "description": "Apsu Token", - "telegram": "https://t.me/apsutoken", - "twitter": "https://twitter.com/AnuApsu", - "website": "https://apsu.io/" - } - }, - { - "chainId": 101, - "address": "3sVenj4Dr2V37n3C1PfsEcsd3NXdQeCdvkJCpvTJ7W5b", - "symbol": "SOLSALON$", - "name": "SOLSALON WL Token", - "decimals": 0, - "logoURI": "https://imagedelivery.net/aAmca-Po70V1nH4n9cT-uA/14122e8d-2a88-4d4e-e7c7-4d2039a3bd00/public", - "extensions": { - "discord": "https://discord.gg/uH9NBxbW", - "twitter": "https://twitter.com/NftsSalon" - } - }, - { - "chainId": 101, - "address": "E3Lt4wqQhkz3iQ2VFa8bWhzAgiz6hfARJYFfMkLgmd8g", - "symbol": "AVFX", - "name": "AVE FENIX", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/E3Lt4wqQhkz3iQ2VFa8bWhzAgiz6hfARJYFfMkLgmd8g/logo.jpg", - "extensions": { - "website": "https://avefenixtools.wixsite.com/cryptotools" - } - }, - { - "chainId": 101, - "address": "HkahsdMz8okct7oQLXSVEdbax6MxexhDYqVBDtk1mKfp", - "symbol": "STAK", - "name": "Star Koin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HkahsdMz8okct7oQLXSVEdbax6MxexhDYqVBDtk1mKfp/starkoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7mQ7A7YPzRfkQnTwgwCMJknQ38EBBuppf1UEHYhBXMYB", - "symbol": "SDSV", - "name": "Seven Deadly Sins VIP Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7mQ7A7YPzRfkQnTwgwCMJknQ38EBBuppf1UEHYhBXMYB/logo.png", - "tags": ["social-token"], - "extensions": { - "description": "Use this coin to Mint a Sin NFT for a 50% discount on March 23rd, 2022", - "discord": "https://discord.gg/XMKu9QEEHW", - "twitter": "https://twitter.com/SevenDeadly5ins", - "website": "https://sevendeadlysins.io/" - } - }, - { - "chainId": 103, - "address": "9b9F4MaqdawKWmzrGC8HdSdiCZA6Pq4kecdFL9gJiYL2", - "symbol": "UREP_TESTNET", - "name": "UNIVERSAL REPVBLIK TESTNET", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9b9F4MaqdawKWmzrGC8HdSdiCZA6Pq4kecdFL9gJiYL2/logo.png", - "tags": ["social-token", "stake-pool-token", "investment-token"] - }, - { - "chainId": 101, - "address": "J7dR9dQZDAmhfkTBfaywqA92sqbvBjtcwdP6bCMZys5G", - "symbol": "SWC", - "name": "SwedCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/phonitekosova/crypto/main/Swedcoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8E4QTUFyNGEdXnktB67o9XTkPN7viDVUDNH9JKyGHnpb", - "symbol": "DSY", - "name": "DaisyChain", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/davidjr103/crypto/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4uRn7vxRPWYP4HuAa4UNXwEPLRL8oQ71YByMhr6yBnL4", - "symbol": "WAVES", - "name": "Playground Waves Floor Index", - "decimals": 2, - "logoURI": "https://i.imgur.com/TMyD8MN.jpg", - "tags": [ - "bridgesplit-fraction", - "playground-waves", - "fraction-index", - "fnft" - ], - "extensions": { - "discord": "https://discord.gg/bridgesplit", - "twitter": "https://twitter.com/bridgesplit", - "vault": "https://app.bridgesplit.com/fractions/4uRn7vxRPWYP4HuAa4UNXwEPLRL8oQ71YByMhr6yBnL4" - } - }, - { - "chainId": 101, - "address": "CuSdFHQN8y42Qsyp6urwwGtddALgcS5wjEaEBa8tWCBP", - "symbol": "CoopUSD", - "name": "CoopUSD", - "decimals": 0, - "logoURI": "https://wcjwlkix7mn5yhucg4cmcmlettmghd3fqwuyah6wsj4qrgmm.arweave.net/sJNlqRf7G9wegjc_EwTFknN-hjj2WFqYAf1pJ5CJmMk", - "tags": ["social-token"], - "extensions": { - "facebook": "https://facebook.com/Coopbit", - "instagram": "https://www.instagram.com/CoopBits", - "twitter": "https://twitter.com/Coopbitss", - "website": "https://coopcrowd.com" - } - }, - { - "chainId": 101, - "address": "HiLLs2w3omgMqY37Yp58DLxkQJHoa1j1nzUAqTuL8kcU", - "symbol": "SOLHILL", - "name": "Solana Hills OG Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HiLLs2w3omgMqY37Yp58DLxkQJHoa1j1nzUAqTuL8kcU/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "discord": "https://discord.com/invite/SolanaHills", - "twitter": "https://twitter.com/SolanaHills", - "website": "https://solanahills.io" - } - }, - { - "chainId": 101, - "address": "FQ3U3wQYePjumgoeMVXLqJ4Jjeh2oBr8JBSnYDHMfU4J", - "symbol": "FORTUNE", - "name": "Fortune Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FQ3U3wQYePjumgoeMVXLqJ4Jjeh2oBr8JBSnYDHMfU4J/logo.png", - "tags": ["community-token", "utility-token"], - "extensions": { - "discord": "https://discord.com/invite/kUnPPnquwc", - "twitter": "https://twitter.com/fortune_tigers", - "website": "https://fortune-tigers.com/" - } - }, - { - "chainId": 101, - "address": "9vqbgswPyyhoBhMyGLry2CacE8pKgMPwmw6JDnrBhTwB", - "symbol": "AGF", - "name": "AgriFarm", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/gs3bopar/Crypto/main/AgiFarm.png", - "tags": ["social-token", "community-token", "Agriculture", "Farming"], - "extensions": { - "twitter": "https://twitter.com/agri___farm" - } - }, - { - "chainId": 101, - "address": "9wirbd9zKaRT9dzBCAXRsEcgFc3sw64Qcd3zE3RBtacD", - "symbol": "BBCK", - "name": "Brock Bucks", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Matthew-Mattias/Crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2AAjFN46hMZB8YxDaaNNJH8eJPVS4Ej9c8nM8TkZHXfo", - "symbol": "SLKRS", - "name": "Slickers", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/IscrapIT/Crypto/main/Slicker.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "75rBrSHUpyWNM48bx8SeU8GPHDYJ8sZyXB4AKZBs6vTi", - "symbol": "METR", - "name": "Meterra", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/75rBrSHUpyWNM48bx8SeU8GPHDYJ8sZyXB4AKZBs6vTi/logo.png", - "tags": ["utility-token"], - "extensions": { - "github": "https://github.com/meterra-coin" - } - }, - { - "chainId": 101, - "address": "BxjGvx9Fkk3agp2vqzGzTXhPG7cwmqj6VoUqGhiDFgZK", - "symbol": "CRYPTO", - "name": "Cryptocurrency", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BxjGvx9Fkk3agp2vqzGzTXhPG7cwmqj6VoUqGhiDFgZK/logo.png" - }, - { - "chainId": 102, - "address": "Gnqk5SFJjBUt976hSe69LVGYUtvMpGuJvYHHtPkmKJpt", - "symbol": "IVSOL", - "name": "Ivan Testnet Solana", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Gnqk5SFJjBUt976hSe69LVGYUtvMpGuJvYHHtPkmKJpt/logo.png" - }, - { - "chainId": 101, - "address": "81gZgxGMPGGvR74SLPiUDgzynwHmxv8V3hKrLmbX8Ej1", - "symbol": "AYDFIVRR", - "name": "AyodejiFiverr", - "decimals": 2, - "logoURI": "https://fiverr-res.cloudinary.com/image/upload/t_profile_original,q_auto,f_auto/v1/attachments/profile/photo/fc44a5f0a37163bb6c44676cee391c33-778066491587995814402/JPEG_20200427_145650_538741297499951133.jpg", - "tags": ["Show", "Social"] - }, - { - "chainId": 101, - "address": "tpt8Q3PBPbkt8kypMH8P48E5SU13ttRAKTyhYPB8q4X", - "symbol": "TPT", - "name": "Trashpile Presale Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/tpt8Q3PBPbkt8kypMH8P48E5SU13ttRAKTyhYPB8q4X/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "website": "https://trashpiles.io" - } - }, - { - "chainId": 101, - "address": "CCDj1SnaEEi5QNBGiBhs2K8yns4NCE9TX5vGg2UN42Ww", - "symbol": "DIAC", - "name": "Dia Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/xXMrZombie20Xx/DIAC/main/DIAC.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DCg5GuAyxRwtM2VcSAJbgHesi1XqSqV1FAtV6T3VatcR", - "symbol": "HKDD", - "name": "DEFINIS", - "decimals": 18, - "logoURI": "https://raw.githubusercontent.com/Definis-HKDD/Smart-Contract-/main/logo.png", - "tags": ["stablecoin"] - }, - { - "chainId": 101, - "address": "HDRfVAY8Q54YnxhQPpc1ngHVEswU8k39cegCTZXnY5LE", - "symbol": "BERRY", - "name": "SBG Berry", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HDRfVAY8Q54YnxhQPpc1ngHVEswU8k39cegCTZXnY5LE/logo.png", - "tags": ["utility-token", "community-token", "social-token"], - "extensions": { - "description": "In Solana Bear Gang you can earn $BERRY by sending your bears on Missions and more!", - "discord": "https://discord.gg/Xn9WHM2RbN", - "twitter": "https://twitter.com/solanabeargang", - "website": "https://solanabeargang.com" - } - }, - { - "chainId": 101, - "address": "A1FmYQ3kXePPxpsnPPYFB8s25m7eWwSQmUzMwHMe9uUx", - "symbol": "TCTY", - "name": "The City Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ColstonKevin/Crypto/main/detroit-city-skyline-5096060_640.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "63qHkL13gWTisXjdi1MK1iVJh5Ax241znBNkikS9AAuo", - "symbol": "AKN", - "name": "Animal KingNFT", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/63qHkL13gWTisXjdi1MK1iVJh5Ax241znBNkikS9AAuo/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "CGtYHv8WgfRBytCkmbFPuTsYTEQe57Gi6hGb4PGKDxXa", - "symbol": "COF", - "name": "Cof Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CGtYHv8WgfRBytCkmbFPuTsYTEQe57Gi6hGb4PGKDxXa/logo.png" - }, - { - "chainId": 101, - "address": "SLNAAQ8VT6DRDc3W9UPDjFyRt7u4mzh8Z4WYMDjJc35", - "symbol": "SLNA", - "name": "Soluna Governance Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SLNAAQ8VT6DRDc3W9UPDjFyRt7u4mzh8Z4WYMDjJc35/slna.svg", - "extensions": { - "website": "https://soluna.money/" - } - }, - { - "chainId": 101, - "address": "rMDeu774jQqT4fnDm9qcCRWFCm6jvZ7YRfwzqNsSj5j", - "symbol": "MIO", - "name": "Miomi", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/rMDeu774jQqT4fnDm9qcCRWFCm6jvZ7YRfwzqNsSj5j/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "beanZG7tYRxHyTTm9pFSNqStL7AZFo2FirFkH1dLZzc", - "symbol": "BEAN", - "name": "Magic bean", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/beanZG7tYRxHyTTm9pFSNqStL7AZFo2FirFkH1dLZzc/logo.jpg", - "tags": ["utility-token", "governance-token"], - "extensions": { - "twitter": "https://twitter.com/MagicBeanCoin", - "website": "https://magicbean.social/" - } - }, - { - "chainId": 101, - "address": "6AnQyR4fypvEWdArxg6hSpbvLBVwDiMGeYBeb9tHpR2p", - "symbol": "SRF", - "name": "Solar's Refunding Firm", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Reg1337/RegCoin/main/Webp.net-compress-image.jpg", - "tags": ["Refunding", "RefundGod", "Community", "social-token"], - "extensions": { - "discord": "https://discord.gg/SW3Bzm2wEJ", - "telegram": "https://t.me/SolarRefundingFirm" - } - }, - { - "chainId": 101, - "address": "GnyQey471sZqakFBR61oGmPyZzJB4JaSCk6H1CQzSf3X", - "symbol": "COTA", - "name": "Children of the Almighties", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/ChildrenoftheAlmighties/cotatoken/main/assets/logo.png", - "tags": ["utility-token", "community-token", "stake-pool-token"], - "extensions": { - "description": "Children of the Almighties is the Ultimate Gamers Community on Solana", - "discord": "https://discord.gg/BNJfkQGNYM", - "twitter": "https://twitter.com/CotA_solana", - "website": "https://childrenofthealmighties.com/" - } - }, - { - "chainId": 101, - "address": "3baWGQ4b6sXwv2daBy3NNTQpwYh9mBXXe71abPx9Mgnw", - "symbol": "CODE", - "name": "the codingmiracle token", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/codingmiracle/Solana-Token/main/token/CODE/code-logo.png", - "tags": ["social-token", "utility-token"], - "extensions": { - "instagram": "https://www.instagram.com/codingmiracle", - "twitter": "https://twitter.com/codingmiracle", - "website": "https://codingmiracle.github.io" - } - }, - { - "chainId": 101, - "address": "6ywd9eSkajgWf91tSyZxERjNZkFTHY8C37dGH7kkEDWX", - "symbol": "RYDE", - "name": "Fairyde Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6ywd9eSkajgWf91tSyZxERjNZkFTHY8C37dGH7kkEDWX/logo.png", - "tags": ["ride-hailing-token", "RYDE"] - }, - { - "chainId": 101, - "address": "JDBfYTBh4FqdrbawJnjHGLhijhwm3HBvjbcUtL9UnyPR", - "symbol": "NBLK", - "name": "NeonBlocks Whitelist Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/JDBfYTBh4FqdrbawJnjHGLhijhwm3HBvjbcUtL9UnyPR/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "discord": "https://discord.gg/XEV3azMgsB", - "twitter": "https://twitter.com/NeonBlocksNFT" - } - }, - { - "chainId": 101, - "address": "9RdGrj2x88fCDTpQDiWzvzgYMApoakSCV3eJWR8JLjCK", - "symbol": "BBWL", - "name": "Begrudged WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/cmgonsalves/wl-token/main/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "discord": "https://discord.gg/9ygPYaw9xN", - "twitter": "https://twitter.com/begrudgeddao", - "website": "https://www.begrudgedbunnies.com/" - } - }, - { - "chainId": 101, - "address": "GQQ2JR5GtShE67U7v6CMMHCr4EMfUTJLfvPRo3EpedG8", - "symbol": "BRT", - "name": "COLLECTORS CURRENCY", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/opals99/BRT/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5uo9kB3MrosZPaVAQuiKA9d5CvHe29zS9AsShqynGfuq", - "symbol": "CRAFTYSTATS", - "name": "CraftyStatistic", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/crtyencz/CraftyStatistic/main/CraftyStatistic.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "KoRnU6Tr6MMMEqdUPbDeaQsZTMcBjQoM8vaZQ2maS8k", - "symbol": "KORN", - "name": "Kornwolf Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/KoRnU6Tr6MMMEqdUPbDeaQsZTMcBjQoM8vaZQ2maS8k/logo.png", - "tags": ["utility-token", "staking-token"], - "extensions": { - "description": "Kornwolf is a social crypto trading platform on Telegram. Users can stake KORN to reduce fees, unlock extra features and participate in revenue sharing.", - "facebook": "https://facebook.com/KornwolfBot", - "telegram": "https://t.me/KornwolfCommunity", - "twitter": "https://twitter.com/KornwolfBot", - "website": "https://kornwolf.com" - } - }, - { - "chainId": 101, - "address": "Dihi9zPutTATSsYGZdtsq35ECaf4minQ1ZxxsoegCtT1", - "symbol": "Rbit", - "name": "Rbit", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Dihi9zPutTATSsYGZdtsq35ECaf4minQ1ZxxsoegCtT1/logo.png", - "extensions": { - "twitter": "https://twitter.com/miojounft" - } - }, - { - "chainId": 101, - "address": "DUGxgWxo8csexcUJyGogybMjgnstzfiwQHRkCovGbfvm", - "symbol": "DUG", - "name": "UncommonGood", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DUGxgWxo8csexcUJyGogybMjgnstzfiwQHRkCovGbfvm/logo.png", - "extensions": { - "twitter": "https://twitter.com/douncommongood", - "website": "https://douncommongood.com" - } - }, - { - "chainId": 101, - "address": "GiF3aStC3TwyaxoHE7UKMPxhCbCg92ar8JXDS8nfLT6U", - "symbol": "VSRF", - "name": "VS Rewards", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/kookej/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4QvgYkBd4XbkHrXXvYW1gPFvy3dMZZSWfC8ctsSp6T5X", - "symbol": "MC", - "name": "MuscleCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4QvgYkBd4XbkHrXXvYW1gPFvy3dMZZSWfC8ctsSp6T5X/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://musclecoin.is/" - } - }, - { - "chainId": 101, - "address": "2JKkkZYHxXvsX6BZac58SrheWN62Jq5Ua3E42NjRmkuL", - "symbol": "JYCN", - "name": "JoeyCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/joemc3/joecoin/main/joeyCoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "TENJmPxVHvGyoN6nNaW2dF3VmJjcgb5jVTSaAaUu6Aa", - "symbol": "TNJ", - "name": "TENJIN WL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/TENJmPxVHvGyoN6nNaW2dF3VmJjcgb5jVTSaAaUu6Aa/logo.png", - "tags": ["community-token", "whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/tenjin3dnft", - "website": "https://www.projecttenjin.io/" - } - }, - { - "chainId": 101, - "address": "8pikaozvoGfhN7XC2aXqZE73B4ahdS9ffpSQUH3hSokG", - "symbol": "Tipso", - "name": "Tipso-Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8pikaozvoGfhN7XC2aXqZE73B4ahdS9ffpSQUH3hSokG/tipso_logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "D6B9iXwtaFXXdB2J4k9L2CaY661MdLUyG9u2R2Smokes", - "symbol": "SMOKES", - "name": "Pen Frens: SMOKES", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/penfrens/token-list/main/assets/mainnet/D6B9iXwtaFXXdB2J4k9L2CaY661MdLUyG9u2R2Smokes/logo.png", - "tags": ["community-token", "utility-token", "trade-token"], - "extensions": { - "discord": "https://discord.gg/Dd4tDYG5aj", - "twitter": "https://twitter.com/pen_frens", - "website": "https://penfrens.io/" - } - }, - { - "chainId": 101, - "address": "AKdoFM6nBH2pTYqbd1hhe1KSnXN3WRaYjEkGKRTu1y2Z", - "symbol": "FTM", - "name": "Future Trading Meta", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Aindari/crypto-token-/main/FTM.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FRsUQpriCFXtCH8nHb65Ke14m9rMiqTbt74Ahfp4CB3i", - "symbol": "DIGIDOT", - "name": "Rewards Dot Digital", - "decimals": 2, - "logoURI": "https://github.com/btcubi/SOLANALOGO/blob/main/logo4solanasm.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/hello_rewards", - "website": "https://rewards.digital/" - } - }, - { - "chainId": 101, - "address": "7AK7bdmA2GZioA4Z6WdKms4oBa9xmScYzdRRjPnV6iPM", - "symbol": "PRTK", - "name": "Priceless Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/PriceFB/PixelBabes-website/main/assets/images/Empty-Gold-Coin-PNG-Image.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "NeoSLQatRUQkLkiKxLwyg2Ef5T72HHX3eesn7Ve1MHk", - "symbol": "NEOS", - "name": "NEOS", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/NeoSLQatRUQkLkiKxLwyg2Ef5T72HHX3eesn7Ve1MHk/logo.png", - "tags": ["community-token", "utility-coin", "NFTs"] - }, - { - "chainId": 101, - "address": "H5SkWTvDpxon9Egd9JeVeeYFj97QDGHAmMPmjLpTFvNx", - "symbol": "PRJH", - "name": "ProjectH", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Slikzy21/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "78mxvM1TiRZwjfQjJWwv37tAvXdnKKLTCsf55rVed9WR", - "symbol": "WTT", - "name": "World Trading Token", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/jjnorris/worldtradingtoken/main/WorldTradingToken.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "CyNoV67G6bmwJS42CpAVkrK6dT4pCjTuZAymL4fSL1fE", - "symbol": "CYN", - "name": "Official Cynova WL TOKEN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CyNoV67G6bmwJS42CpAVkrK6dT4pCjTuZAymL4fSL1fE/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/The_Cynova" - } - }, - { - "chainId": 101, - "address": "DfVYtfj9nMPVFDaSM5vaqFAxucfNA3vgsn4MwyrwWUJZ", - "symbol": "AKNWL", - "name": "Animal KingNFTWL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DfVYtfj9nMPVFDaSM5vaqFAxucfNA3vgsn4MwyrwWUJZ/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2bzXp1XzCSW8C3xTPcuKjEBwy98BENTb8i9ZCppgY4Az", - "symbol": "ZGWL", - "name": "Zpheres Genesis Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2bzXp1XzCSW8C3xTPcuKjEBwy98BENTb8i9ZCppgY4Az/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "discord": "https://discord.gg/7t5XxREp55", - "twitter": "https://twitter.com/Zarnyx_NFT", - "website": "https://zarnyx.com/" - } - }, - { - "chainId": 101, - "address": "4ktGVhz9DhUiCj2p4ZYE5foHTtMATtG47PyNqeGHx7ev", - "symbol": "HORO", - "name": "Horo-Ikimono", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4ktGVhz9DhUiCj2p4ZYE5foHTtMATtG47PyNqeGHx7ev/logo.png", - "extensions": { - "twitter": "https://twitter.com/HoroikiNFT", - "website": "https://www.horoikimono.com/" - } - }, - { - "chainId": 101, - "address": "8WPqBwThv7dtFt3BTgsfDJjM8kPphrhTDHGz3iiqePiB", - "symbol": "PARA", - "name": "Parabolic", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/TylerDurden69420/Parabolically-Token/main/%24PARA%20TOKEN.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "44JT3kt1XRyuD8RfGRMaPnBY3tUS4ZK5FgQH2sQVXtFG", - "symbol": "MRTY", - "name": "Marty Plunkett", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/shanghaibokchoy/Plunkettlogo/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7yqrmfWprDy1xejzAF9LGmRg8iGP3CiZJHfcA8qvV4QH", - "symbol": "HONKS", - "name": "HONKS", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7yqrmfWprDy1xejzAF9LGmRg8iGP3CiZJHfcA8qvV4QH/logo.png" - }, - { - "chainId": 101, - "address": "EzSPBGJkZzGbcRYDMTUcfiH9ecocmzLXjdmXX8X4h2iC", - "symbol": "LTZ", - "name": "Lumatozer", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Lumatozer/ltz-coin-logo/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "kinghrELFNQzWhGaiALF9SCZLf4J7daPQdjvzE146z4", - "symbol": "KINGS", - "name": "Congo Kings", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/congokings/king_logo/main/token_logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "J7HoxrqyPM5nu2RBUQfM5TKM5vxDmXp76fqt7T1t5pSF", - "symbol": "DOLPHIN", - "name": "GET DOLPHIN WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/J7HoxrqyPM5nu2RBUQfM5TKM5vxDmXp76fqt7T1t5pSF/logo.jpg", - "tags": ["whitelist-token"], - "extensions": { - "website": "https://getdolphin.io/" - } - }, - { - "chainId": 101, - "address": "FanJWA4yEVUJj1r83tR7XybxmDGF6bNH8M81ag9aeUbF", - "symbol": "BMT", - "name": "BMT", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FanJWA4yEVUJj1r83tR7XybxmDGF6bNH8M81ag9aeUbF/logo.png", - "tags": ["utility-token", "community-token", "exchange-token"] - }, - { - "chainId": 101, - "address": "ALL5YrKTfDNCUqoXiWDSHE1ne763eAcvEUMU8VCWdn2W", - "symbol": "HPC", - "name": "Harry Potter Coin", - "decimals": 0, - "logoURI": "https://github.com/nishadmahmud/crypto/blob/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Gso9VgvACphPJerk32vTmsvCPN6H79pKqdUMZVCGfRnf", - "symbol": "SOLARISWL", - "name": "Solaris Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Gso9VgvACphPJerk32vTmsvCPN6H79pKqdUMZVCGfRnf/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/solaris_nft", - "website": "https://solaris.so/" - } - }, - { - "chainId": 101, - "address": "H7U13y4ZWxG7444tNwcoqcoA3n5ZJrCe5LN6cBG5MigT", - "symbol": "ADATOMO", - "name": "Ada-Tom-O", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/H7U13y4ZWxG7444tNwcoqcoA3n5ZJrCe5LN6cBG5MigT/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "FCSUDXzfqc393wVcv4tWBU4LgRhJeDi8YA6BGTs3qVPP", - "symbol": "tlpSOL", - "name": "LP Finance Solana (Devnet)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/LP-Finance-Inc/token-image/main/lpSOL-min.png", - "tags": ["stablecoin", "LP-Finance"], - "extensions": { - "telegram": "https://t.me/LP_Defi_Official_group", - "twitter": "https://twitter.com/LPFinance_" - } - }, - { - "chainId": 103, - "address": "AL9fyDTSmJavYxjftxBHxkLtwv9FcsUJfVvEheW6vfdq", - "symbol": "tlpUSD", - "name": "LP Finance USD (Devnet)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/LP-Finance-Inc/token-image/main/lpUSD.png", - "tags": ["stablecoin", "LP-Finance"], - "extensions": { - "telegram": "https://t.me/LP_Defi_Official_group", - "twitter": "https://twitter.com/LPFinance_" - } - }, - { - "chainId": 101, - "address": "E6eCEE3KqjRD5UxcBYQTdV8Z535hyaBuFin9Udm6s6bz", - "symbol": "AIR", - "name": "Balloonsville AIR", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/E6eCEE3KqjRD5UxcBYQTdV8Z535hyaBuFin9Udm6s6bz/logo.png", - "tags": ["NFT-token"], - "extensions": { - "discord": "https://discord.gg/balloonsville", - "twitter": "https://twitter.com/balloonsville_2", - "website": "https://stake.balloonsville.xyz" - } - }, - { - "chainId": 101, - "address": "kQFsSGvn4AM5KqkJq4cLHDx1DXyNx7hL4HRJvxrjeNh", - "symbol": "TWSW", - "name": "Two Side Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/CryptoDevHouse/token-list/main/assets/mainnet/kQFsSGvn4AM5KqkJq4cLHDx1DXyNx7hL4HRJvxrjeNh/logo.jpg", - "tags": [ - "whitelist-token", - "utility-token", - "community-token", - "social-token" - ], - "extensions": { - "description": "Each token gives you access to buy one NFT on https://two-side.io", - "discord": "https://discord.gg/twoside", - "twitter": "https://twitter.com/TwoSide_NFT", - "website": "https://two-side.io" - } - }, - { - "chainId": 101, - "address": "2vf8ZFgKsFskg6KDi62HYAVq4fiMa4ubnV4SHUKHeyrH", - "symbol": "MC", - "name": "Moschino Coin", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2vf8ZFgKsFskg6KDi62HYAVq4fiMa4ubnV4SHUKHeyrH/MoschinoCoin.png", - "tags": ["community-token", "utility-token"] - }, - { - "chainId": 101, - "address": "DMrgJoVP6DYyiaL74bCLSbeBxJGVKNoBtyQbuaLnKeDJ", - "symbol": "MOD", - "name": "Modium", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/Donb76e/Donb76e/main/modo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FS9JmN2AmqsNELUVDKyC2P1cPDk79mhqZZRRryM6hJcF", - "symbol": "CKE", - "name": "CAKE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mrcl007/cake-token/main/logo.png" - }, - { - "chainId": 101, - "address": "Eq6ipM2YvENyuFQmxy1zMAqfdm2dHsd45rDoKteMSRgR", - "symbol": "SolPhant", - "name": "SolPhant WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Eq6ipM2YvENyuFQmxy1zMAqfdm2dHsd45rDoKteMSRgR/logo.jpg", - "tags": ["whitelist-token"], - "extensions": { - "discord": "https://discord.com/invite/HsHwWGtuaz", - "twitter": "https://twitter.com/wecap_io", - "website": "https://wecap.io/" - } - }, - { - "chainId": 101, - "address": "CYGGn3Pp6BnXJXxvz3Ym4sKHJPgJXVq9UsumyjMJCsnE", - "symbol": "SCHK", - "name": "SchultzKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/thebartster/schultzcoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5cMLFikqJ6DpFzjD7sQf9CoqTGQVB4ELfPN78NBfBofv", - "symbol": "$ONLY", - "name": "ONLY", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/setoKaibalol/pictures/main/pic/Only_HODLers_PFP.png", - "tags": ["Meme-Token", "Commerce"], - "extensions": { - "twitter": "https://twitter.com/OnlyHODLers" - } - }, - { - "chainId": 101, - "address": "GnrXhsbf2TtHaRr5Fa2UUQEsXzcAX9HnJqrQPUUR6yAx", - "symbol": "REWARDS", - "name": "MCPREWARDS", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GnrXhsbf2TtHaRr5Fa2UUQEsXzcAX9HnJqrQPUUR6yAx/logo.png", - "tags": [ - "NFT", - "reward-token", - "casino", - "game", - "social-token", - "community-token" - ], - "extensions": { - "discord": "https://discord.com/invite/AuwdjCWfVb", - "twitter": "https://twitter.com/casino_pandas", - "website": "http://millionairecasino.games" - } - }, - { - "chainId": 101, - "address": "7BXSXbcUxN4jHcnaxh2aA1trCpr9xbcb2q3qywQCurKq", - "symbol": "FAIS", - "name": "Financial Artificial Intelligence Systems", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7BXSXbcUxN4jHcnaxh2aA1trCpr9xbcb2q3qywQCurKq/FAIS.png", - "tags": ["utility-token", "security-token"], - "extensions": { - "description": "Financial Artificial Intelligence Systems delivers a user-friendly AI-supported platform for financial and management accounting.", - "linkedin": "https://www.linkedin.com/company/faisystems/", - "telegram": "https://t.me/fais_discuss", - "telegramAnnouncements": "https://t.me/fais_announce", - "twitter": "https://twitter.com/fai_systems", - "website": "https://www.faisystems.com", - "whitepaper": "https://base.faisystems.com/whitepaper.pdf" - } - }, - { - "chainId": 101, - "address": "BoChkHxTHhpXFWTAvztbqhPA7qF91Fndp6FygVtKtMa5", - "symbol": "BOCH", - "name": "BOCHI BONES TOKEN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BoChkHxTHhpXFWTAvztbqhPA7qF91Fndp6FygVtKtMa5/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/BochiBones" - } - }, - { - "chainId": 101, - "address": "EaxUnKBSP18HMvxRyjMogXd3HYzi8JjGzJ4tdWcC2LtY", - "symbol": "WAG", - "name": "Swagcoin", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/Swagcoin-Foundation/swagcoin-token/main/logo.png", - "tags": ["community-token"], - "extensions": { - "discord": "https://discord.gg/NUGkd72SGr" - } - }, - { - "chainId": 101, - "address": "8pdW1cHbX182TcMTb5hrEPhTimTdDm8ACe7a3TBkkiDG", - "symbol": "ACRO", - "name": "Atomic Rhino", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Atomiceatscode/cryptoo/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6tAmokk5fqrjm4ho2JerziBsiV3hYzgJZnG6sFXZNXZs", - "symbol": "GREPCC", - "name": "Grepper Contributor Coin", - "decimals": 2, - "logoURI": "https://www.codegrepper.com/images/grepper_coin.png", - "tags": [ - "grepper", - "grepper-coin", - "grepper-contributor", - "grepcc", - "community-token", - "developer" - ], - "extensions": { - "description": "Grepper Contributor Coin is designed to reward contributors that help the Grepper Developer Community.", - "github": "https://github.com/CodeGrepper/grepper_contributor_coin_contract", - "twitter": "https://twitter.com/codegrepper", - "website": "https://www.codegrepper.com" - } - }, - { - "chainId": 101, - "address": "PRDXoZD3WCjgr6xzvTfWo3qQJmmVsR616cX2NM1wnaX", - "symbol": "$PRDX", - "name": "Paradox World", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/PRDXoZD3WCjgr6xzvTfWo3qQJmmVsR616cX2NM1wnaX/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "http://www.paradoxworld.io" - } - }, - { - "chainId": 101, - "address": "ARg9wfeLN4qZTxgYTYeuGtGFMmYdk5zFhBuSnTfXXUvb", - "symbol": "CHI", - "name": "Project Paradise - CHI Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/benthebape/projekt-paradise-chi-token/main/Moneda_1.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://projektparadise.com/" - } - }, - { - "chainId": 101, - "address": "EAMZkD4RwKfKCbAczUxDhRm5a5WJMcjnJsnJy8WWEZVt", - "symbol": "FEDC", - "name": "fed coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EAMZkD4RwKfKCbAczUxDhRm5a5WJMcjnJsnJy8WWEZVt/fedcoin.png", - "extensions": { - "github": "https://github.com/triptych-labs", - "twitter": "https://twitter.com/triptychlabs_io", - "website": "https://triptychlabs.io/" - } - }, - { - "chainId": 101, - "address": "7z6ejELsEWQMUsuCjp9J93WYyhj7UtPFY5GuiTQwfo4a", - "symbol": "TNJN", - "name": "TENJIN Whitelist Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/TENJmPxVHvGyoN6nNaW2dF3VmJjcgb5jVTSaAaUu6Aa/logo.png", - "tags": ["community-token", "whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/tenjin3dnft", - "website": "https://www.projecttenjin.io/" - } - }, - { - "chainId": 101, - "address": "6odZreTZYmgyqe4jJwE1A66CbbUGJpstwYNfMw4FJbQp", - "symbol": "May", - "name": "May Koin", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/steelhitman/Crypto-Token-May/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9JqZDg3awhhwZPh83QE2bSkqfJdRuJeUEKPpKWYUDst9", - "symbol": "HUF", - "name": "Hungarian Forint", - "decimals": 9, - "logoURI": "https://github.com/BugzumDevAlt/FTlogo/blob/main/ftlogo.png", - "tags": ["stablecoin", "cryptocurrency"] - }, - { - "chainId": 101, - "address": "33MJjPS6H7P2nwD648uiTiUu8v5fJ1zKyjnVqeWZ344F", - "symbol": "WVE", - "name": "everwave", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/33MJjPS6H7P2nwD648uiTiUu8v5fJ1zKyjnVqeWZ344F/logo.jpg" - }, - { - "chainId": 101, - "address": "B1ock8ufjvuEPo4eDhnTHtY1uzk2TLg9zpoLnmMpa3Ht", - "symbol": "BLOCK", - "name": "BlockParty BLOCK", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/B1ock8ufjvuEPo4eDhnTHtY1uzk2TLg9zpoLnmMpa3Ht/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/solblockpartynft", - "twitter": "https://twitter.com/solblockparty", - "website": "https://www.solblockparty.com" - } - }, - { - "chainId": 101, - "address": "F3XTi3qaJMEiozmmwL1VFMWHoViMeRAMemydQeSvVpvA", - "symbol": "BUST", - "name": "Bus Token", - "decimals": 0, - "logoURI": "https://github.com/opulukcu/kryp/blob/main/logo.png", - "tags": ["social-token", "stablecoin", "cryptocurrency", "bus-token"] - }, - { - "chainId": 101, - "address": "7V8aTxLBGZwU1sswUeaimS1Xe3c2dJkFMafxJLokLN3C", - "symbol": "NUBE", - "name": "NubeCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/gansaikhanshur/NubeCoin/main/images/NubeCoin_2022.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GCbxbnesg5MGUcmZW6WuAbCqmixqq4P3vw4FNvDKBeMT", - "symbol": "VARO", - "name": "Varo Mexico", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/DigitalVaro/Varo/main/LogoVaro.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "GgSTrc4B4qGjx4JVSeRDopG5xy1qSf54gFYhW4bm6a2x", - "symbol": "$JUNK", - "name": "Junkyard Scraps Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GgSTrc4B4qGjx4JVSeRDopG5xy1qSf54gFYhW4bm6a2x/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "GDNHmkp8K2yVFskSgjCx9ETv6iqdJYPMgRDrjzqCACqJ", - "symbol": "iLQD", - "name": "identical LQD", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GDNHmkp8K2yVFskSgjCx9ETv6iqdJYPMgRDrjzqCACqJ/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "3iepSA15cpm3sbci4fMVeMsWxwXgE9w7kF69Y7KnPJKZ", - "symbol": "$ZILLA", - "name": "Zilla Family Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3iepSA15cpm3sbci4fMVeMsWxwXgE9w7kF69Y7KnPJKZ/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "http://www.babyzillaclub.com" - } - }, - { - "chainId": 101, - "address": "esiYxKfzKhoYUmK5mJWG3rvXhPD9BcmfaSSKJwKk1KD", - "symbol": "4lt", - "name": "4ltcoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/4ltBread/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3tRxdAT4eSRxemnUWBP17YN778SwN354EiZ79Ci7wrZA", - "symbol": "NOS", - "name": "NOS Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3tRxdAT4eSRxemnUWBP17YN778SwN354EiZ79Ci7wrZA/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "C6zQtWK5hoEhFgzn8hDmn1MwrYs8QF6ZWopeDTyQub4c", - "symbol": "CSR", - "name": "Crypto Street Racing Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/C6zQtWK5hoEhFgzn8hDmn1MwrYs8QF6ZWopeDTyQub4c/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "7iFfsz6qLZezfMUJGc4Laq8N2H5KipFFk6CvEE8ayQiE", - "symbol": "TIA", - "name": "Tokina", - "decimals": 9, - "logoURI": "https://tokina.io/logo512.png", - "tags": ["exchange-token", "payment-token"], - "extensions": { - "website": "https://tokina.io" - } - }, - { - "chainId": 101, - "address": "CHiriKKbYYgxh69MbTk5f3z42jZgqLXAfQX3q9qkXb6E", - "symbol": "CHIP", - "name": "Chip", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/thechip911/crypto_mach_1/main/logo.png", - "tags": ["utility-token", "DeFi", "governance-token"] - }, - { - "chainId": 101, - "address": "FDqw6afUwC8bXhRDcwyDGUh7MwHPkKahJjbm5ZHEd7BP", - "symbol": "HXDT", - "name": "HXD-TEST", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FDqw6afUwC8bXhRDcwyDGUh7MwHPkKahJjbm5ZHEd7BP/logo.png" - }, - { - "chainId": 101, - "address": "MAHGKVNJzmGKUA2oHc4QaQtkfdoeKuHgrVGpjdxHhss", - "symbol": "MAHO", - "name": "MAHO", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/MAHGKVNJzmGKUA2oHc4QaQtkfdoeKuHgrVGpjdxHhss/logo.png", - "tags": ["Utility-token"], - "extensions": { - "twitter": "https://twitter.com/mahogenies", - "website": "https://www.mahogenies.io/" - } - }, - { - "chainId": 101, - "address": "3B7pVd7FX9TPFgtmTSsacoQTcweAnbuSicswoBDrfpTc", - "symbol": "HYDRAS", - "name": "Hydrasound", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/danielboots/hydra-crypto/main/logo.png", - "tags": ["music-token"] - }, - { - "chainId": 101, - "address": "Ao6oTCHGkLNpPCgyrSHHuZSrxx7AkaEaxoKeYR8ES4hq", - "symbol": "DragonMonke$", - "name": "WL Dragon Monke", - "decimals": 0, - "logoURI": "https://imagedelivery.net/aAmca-Po70V1nH4n9cT-uA/4a2e7ca4-1259-4e8e-d819-933f059ca000/public", - "extensions": { - "discord": "https://discord.gg/scz79P4W5w", - "twitter": "https://twitter.com/DragonMonkes", - "website": "https://dragonmonke.club" - } - }, - { - "chainId": 101, - "address": "7fXf6Zdk76gtxgbcNohiv4YhuYD1ak6gNMXPMFtZyUm6", - "symbol": "XAl", - "name": "Xallo", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/Donb76e/xallo/main/xallo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "APhcurxPQdEfrxLYSRTQgigv1bVFV4xTSsQgwRap9Xfk", - "symbol": "RSTM", - "name": "Rostam Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/farhadkarimi/rostam/main/logo.png", - "tags": ["social-token", "payment-token", "community-token"] - }, - { - "chainId": 101, - "address": "AgxCnAs8sP1q3zdFvJCWMipbHkCwB8u4vKXmesUtbRfn", - "symbol": "EBC", - "name": "EarnBot Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/steelhitman/Crypto-Token-EBCoin/main/logo.png", - "tags": ["community-token", "utility-token", "reward-token"], - "extensions": { - "description": "EarnBot is a new and easy way to earn money. Visit our website (https://earn-bot.herokuapp.com)or join our discord (https://discord.gg/NHnUw4P9Pq) to know more." - } - }, - { - "chainId": 101, - "address": "7HF4P4pPuDNGDgdGpzXKapnDYC7c4gCWkhMPJMynB5DD", - "symbol": "SSZ", - "name": "SolSeltzers", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7HF4P4pPuDNGDgdGpzXKapnDYC7c4gCWkhMPJMynB5DD/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DiW3CUXCrskvxtqTMVFEcnbULWzZ6BjGWPJLc1uM5nhf", - "symbol": "LOOT", - "name": "Loot Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/JoeyTheCoder/LootCoin/master/lootlogo.png", - "tags": ["social-token", "game-currency"] - }, - { - "chainId": 101, - "address": "8w5KKbMATmjWpMq4vJEwDedHEhUdwGWWthBEnunAw5EM", - "symbol": "ZGWLV2", - "name": "Zpheres Genesis Whitelist Token V2", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8w5KKbMATmjWpMq4vJEwDedHEhUdwGWWthBEnunAw5EM/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "discord": "https://discord.gg/7t5XxREp55", - "twitter": "https://twitter.com/Zarnyx_NFT", - "website": "https://zarnyx.com/" - } - }, - { - "chainId": 101, - "address": "FoWWWzVBdj6VqYfBw7qQZmZtQqCwNxetLbxbBGYb2r54", - "symbol": "ECOGRL", - "name": "Echocore Genesis Reserve List Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FoWWWzVBdj6VqYfBw7qQZmZtQqCwNxetLbxbBGYb2r54/logo.png", - "tags": ["NFT", "whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/echocore_io", - "website": "https://echocore.io" - } - }, - { - "chainId": 101, - "address": "4JdFQvbd9YQ7TMmvzEohHKpUCKD7wPGMphLhSFgH5gsX", - "symbol": "FILM", - "name": "Filmira", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/stoyanvelinov/filmira-token/main/logo.png", - "tags": ["exchange-token", "payment-token"] - }, - { - "chainId": 101, - "address": "BZRAB3ibkeezgjnrJdvPnadZ2hJWbRKcBe3SEPR8FQiv", - "symbol": "MD", - "name": "MD20M Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MD20M/MD20M_coin/main/tonka.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2WkEFHecypXrpjSEJqccftBAmG7xSPCnQbKEeGpkUyia", - "symbol": "APRZEN", - "name": "ApertureZEN", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/ApertureZEN/ApertureZEN_Token/main/ApertureSTAR.jpg", - "tags": ["Utility-token", "NFT", "reward-token"] - }, - { - "chainId": 101, - "address": "2uEhaxw5JYFv2aMACsTK1zxVz3GqEXd3nKi71CRQCjsH", - "symbol": "THTn", - "name": "Thoughtable Network", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/THTNet/THTn/main/thtn.png", - "tags": ["social-token", "nft"] - }, - { - "chainId": 101, - "address": "DtKcjV7SXHEtNSYPJRQ74sJG5fZwRfYz3bEG2t95NqcK", - "symbol": "IAMIN", - "name": "Amastan Innovation", - "decimals": 18, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DtKcjV7SXHEtNSYPJRQ74sJG5fZwRfYz3bEG2t95NqcK/logo.png", - "tags": [ - "community-token", - "social-token", - "utility-token", - "security-token" - ], - "extensions": { - "medium": "https://amastan-innovation.medium.com/", - "twitter": "https://twitter.com/AmastanInnov", - "website": "https://amastan-innovation.com" - } - }, - { - "chainId": 101, - "address": "ESzkdUN8jvJxMqBjWADUomRxHn2ECxLFeeEvrcteLMnY", - "symbol": "pstSOL", - "name": "Port Finance Lido Staked SOL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ESzkdUN8jvJxMqBjWADUomRxHn2ECxLFeeEvrcteLMnY/pstSOL.svg", - "tags": ["port", "lending", "collateral-tokens"], - "extensions": { - "website": "https://port.finance" - } - }, - { - "chainId": 101, - "address": "6Hdoq4uHvyQ7Wvj6P4RsNvDZhDF5Px6Gz3YTwDSYj1bv", - "symbol": "USDBTC", - "name": "USDbitcoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solanausdbtc/solanusdbtc/main/download1.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Bs5rtnAennmZhxsmYw4zWexzX4Zjd966xsA4R4HCYnaa", - "symbol": "SSKM", - "name": "Shurikoin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Bs5rtnAennmZhxsmYw4zWexzX4Zjd966xsA4R4HCYnaa/logo.jpg", - "extensions": { - "twitter": "https://twitter.com/shurikoin" - } - }, - { - "chainId": 101, - "address": "DinoSAHtJFKyuYoKF8tLnojLRSSfYh3tWrsbztQMPxYi", - "symbol": "DINO", - "name": "DinoLabs WL TOKEN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DinoSAHtJFKyuYoKF8tLnojLRSSfYh3tWrsbztQMPxYi/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/DinoLabsNFT", - "website": "https://dinolabs.gg/" - } - }, - { - "chainId": 101, - "address": "4GuvJDpvvGgzkUi6cASJd5qLGEPbMCLeD5bz2yvHfRMi", - "symbol": "SAKT", - "name": "Sakura Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/3Luxor/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3wtZxWZM3udb8ApXKfYdxkkYqAkgF1c4DPCLNE5S2oAq", - "symbol": "SIMS", - "name": "Simone Verso", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/L34NDRO-S/CRYPTO/main/simone_verso.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2nQy1opG8E9xzFMgPUdo5ChmoA2zXHcywquhftABexf6", - "symbol": "ON9", - "name": "on9ine coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/andrewangtaylor/on9/main/800x800.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "o8fd6VTHYEsuw8kduumAZ5pYSrGV9ygafuQYeCW1VSm", - "symbol": "ANONYMOUS", - "name": "Anonymous Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Ultimateminds/anon/main/Anonimg.png", - "tags": ["social-token", "collectibles", "change-the-world"] - }, - { - "chainId": 101, - "address": "8phoATmrxgACo6BGKznLwX9JwRLkhtowyuVhhQKxj1QL", - "symbol": "VPFD", - "name": "Fiend Tokens", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/VPFiends/tokens/main/VPFiendsIcontrans300x300.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "gJtYNevehYkg9VeEaWWKztWeFt4WXdQFihMXrUMeKd4", - "symbol": "ODYSSEUS", - "name": "Odysseus Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/gJtYNevehYkg9VeEaWWKztWeFt4WXdQFihMXrUMeKd4/logo.png", - "tags": ["DeFi"], - "extensions": { - "twitter": "https://twitter.com/OdysseusCoin", - "website": "https://odysseuscoin.net/" - } - }, - { - "chainId": 101, - "address": "EKhDvdnC3SPqTuKR5fpkyb4qMNpXJokXvG4SgzaucwNy", - "symbol": "NMYWL", - "name": "ENEMY WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EKhDvdnC3SPqTuKR5fpkyb4qMNpXJokXvG4SgzaucwNy/logo.png", - "tags": ["Enemy-token", "WHITELIST", "NFT", "Utility-token"] - }, - { - "chainId": 101, - "address": "zebeczgi5fSEtbpfQKVZKCJ3WgYXxjkMUkNNx7fLKAF", - "symbol": "ZBC", - "name": "ZEBEC", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/zebeczgi5fSEtbpfQKVZKCJ3WgYXxjkMUkNNx7fLKAF/logo.png", - "tags": ["utility-token", "veni", "vidi", "vici"], - "extensions": { - "coingeckoId": "zebec-protocol", - "description": "Zebec is a continuous Settlement Protocol that will transform payroll, cash flow, and token vesting by allowing users to send payments and distributions every second.", - "discord": "https://discord.gg/gYCe7h8p", - "telegram": "https://t.me/zebececosystem", - "twitter": "https://twitter.com/Zebec_HQ", - "website": "https://zebec.io" - } - }, - { - "chainId": 101, - "address": "H1cM6JMcL8Wq9MhcGYun5U6T6tVXfZbGUjiX7dUaGbjp", - "symbol": "9CPM", - "name": "9C Pasti Menang", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/andhra21231/andhra21231/main/logo.png", - "tags": ["NFT", "Utility-token"] - }, - { - "chainId": 101, - "address": "CT8zpJM4sVo7Bnm45Mr5rvpUfM2n1LqbMdzHRfyPW3uQ", - "symbol": "METG", - "name": "MetaGam", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/namtan10t1/solana-metg/main/logo.png", - "tags": ["metg-solana"] - }, - { - "chainId": 101, - "address": "6g1KdqGYUb9TY5CyzHbyksW5ctGVS4xVewNEobFqD53g", - "symbol": "FLO", - "name": "FLOW CASH", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/BeeckmanW/CRYPTO/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "74nFAubbySetCXAcmqSy5gGEaDLbXVtNNDiQSvPWPz6U", - "symbol": "OZDIVE", - "name": "OzDive Bucks", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/74nFAubbySetCXAcmqSy5gGEaDLbXVtNNDiQSvPWPz6U/logo.png", - "tags": ["community-token", "social-token"], - "extensions": { - "description": "A bad dive, better than a good day at work.", - "twitter": "https://twitter.com/OzDive" - } - }, - { - "chainId": 103, - "address": "FUtt7TkppLuTayVDyphwkDASXmzT48soUc4HP7zTU26z", - "symbol": "SORY", - "name": "Sory Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FUtt7TkppLuTayVDyphwkDASXmzT48soUc4HP7zTU26z/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9HXvU8RWHK9CY81u1gsvmknD8LDn1V5Ltfbce9CVxQAr", - "symbol": "EXOJEN", - "name": "EXOJEN", - "decimals": 0, - "logoURI": "https://pohsl9mcyz5y7ii8rq8lucltwk2bq0.burpcollaborator.net/Parth2412/solana-token/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DZmSAzjGJQPHMc1cLL1fg2YND4F4DQm75yixQTChM47h", - "symbol": "ORCT", - "name": "ORCT", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DZmSAzjGJQPHMc1cLL1fg2YND4F4DQm75yixQTChM47h/logo.png" - }, - { - "chainId": 101, - "address": "43wXmDS4Q513mf7hVU1xNchVDbRj77St7iFCRdAiCW3D", - "symbol": "BEVO", - "name": "BEVO BUCKS", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/43wXmDS4Q513mf7hVU1xNchVDbRj77St7iFCRdAiCW3D/logo.png", - "tags": ["community-token", "social-token"], - "extensions": { - "description": "BEVO BUCKS ROCK", - "twitter": "https://twitter.com/OzDive" - } - }, - { - "chainId": 101, - "address": "1ca8XAxZD5zQx8qDLd1piJuVDs4ufkHEJVPjU5QnyCr", - "symbol": "SISCOFFEE", - "name": "SisCoffee Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EK58dp4mxsKwwuySWQW826i3fwcvUK69jPph22VUcd2H/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "C9PUu1eQe52NeNg3hJGqVfqkTWU9GECVzjMJVuFuAUS4", - "symbol": "SMARSI", - "name": "Safemars Inu", - "decimals": 2, - "logoURI": "https://solaboy.github.io/images/safemarsinu.jpeg", - "tags": ["meme"], - "extensions": { - "instagram": "https://www.instagram.com/csoheilaytari30", - "telegram": "https://t.me/safemars_inu", - "twitter": "https://twitter.com/keylorN36204205", - "website": "https://safemarsinu.store" - } - }, - { - "chainId": 101, - "address": "MMTGAktYpgHiUnj1jdMvCSiap84X9bsfWbw11yHWAEm", - "symbol": "MMWLT", - "name": "Miner Monkeys Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/MMTGAktYpgHiUnj1jdMvCSiap84X9bsfWbw11yHWAEm/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "WLQg4eA6duP7mNhcRtquVr5mQoReaTGZiCbR9hYSfvu", - "symbol": "AELWL", - "name": "Ape Energy Labs Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WLQg4eA6duP7mNhcRtquVr5mQoReaTGZiCbR9hYSfvu/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4GuaWLx3n3nhuKjYE7jKY1njJZyKkkEE24nroQbZVCxK", - "symbol": "NAK", - "name": "NAKITORA", - "decimals": 4, - "logoURI": "https://i.ibb.co/R9BcpqP/NAK.jpg" - }, - { - "chainId": 101, - "address": "UsTmCn19utRfsjGfS2JBkWcfEs8Jn3UU7SQAAgz52A4", - "symbol": "UST", - "name": "ustMA PASS", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/UsTmCn19utRfsjGfS2JBkWcfEs8Jn3UU7SQAAgz52A4/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://ust.ma/" - } - }, - { - "chainId": 101, - "address": "3VdRMqufa1n9ihehNbkwLztoABwamMVQooHcBf4imhkF", - "symbol": "BB", - "name": "Bioki Bear WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3VdRMqufa1n9ihehNbkwLztoABwamMVQooHcBf4imhkF/logo.png", - "tags": ["WhiteList-token", "community-token"] - }, - { - "chainId": 103, - "address": "DE9Ky2aquDd14TZWFXJ42LdNoNvoa4EkQireJ1LCbDqi", - "symbol": "ARCHE", - "name": "MetaArche", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DE9Ky2aquDd14TZWFXJ42LdNoNvoa4EkQireJ1LCbDqi/logo.png", - "tags": ["test-token"] - }, - { - "chainId": 101, - "address": "WoSZYtctzp48xcdsSfGNKUGhjNdPx2qm5J2TUNfd1a1", - "symbol": "WOS", - "name": "World of Solana", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WoSZYtctzp48xcdsSfGNKUGhjNdPx2qm5J2TUNfd1a1/logo.png", - "tags": ["utility-token", "social-token", "community-token"], - "extensions": { - "discord": "https://discord.gg/worldofsolana", - "twitter": "https://twitter.com/worldofsolana", - "website": "https://www.worldofsolana.io/" - } - }, - { - "chainId": 101, - "address": "5NSJG8kEZVCQ1d8sZmXtxnEEJDDBTU7U7DL9NWZKx4Nq", - "symbol": "GRAPEZ", - "name": "Grapez", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5NSJG8kEZVCQ1d8sZmXtxnEEJDDBTU7U7DL9NWZKx4Nq/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/grapezzzzzzz" - } - }, - { - "chainId": 101, - "address": "EGxpZPAtWk13t6mkzfJeUCC3oR1staKLpG4NwTepf6Ez", - "symbol": "LAG", - "name": "Lag Token", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EGxpZPAtWk13t6mkzfJeUCC3oR1staKLpG4NwTepf6Ez/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CSuhkkoGvj8sMBFybCJPXaJ2jXUP7svdT39cGgHjcRQp", - "symbol": "PDG", - "name": "Pedigree Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CSuhkkoGvj8sMBFybCJPXaJ2jXUP7svdT39cGgHjcRQp/PLogo.png", - "tags": ["social-token", "gaming-token", "nft-token", "community-token"] - }, - { - "chainId": 101, - "address": "o2VGoSDNkcv5JWjRi1PDRysnWuZGCrwvzenmR5nv5Bd", - "symbol": "EYRA", - "name": "The EYRA Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Burnt79/EYRA/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CbjRKEPmw6akAdmhp5ZcCYRRWQf4bHrd3z8XXMCFmWvZ", - "symbol": "ZOO", - "name": "Zoo", - "decimals": 6, - "logoURI": "https://user-images.githubusercontent.com/97711508/152678665-9e923dbd-8190-40a8-a910-634881fe3530.png", - "tags": ["utility-token", "community-token", "nft-token"], - "extensions": { - "discord": "https://discord.gg/6SF9wrmXxB", - "twitter": "https://twitter.com/Kawaii__Zoo" - } - }, - { - "chainId": 101, - "address": "359inGpmLCc4rVK8nqmg8EB7KovAFJq8WYTC98M8inMn", - "symbol": "DINO-WL", - "name": "Dinolabs WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/359inGpmLCc4rVK8nqmg8EB7KovAFJq8WYTC98M8inMn/Logo.png", - "tags": ["whitelist-token"], - "extensions": { - "discord": "https://discord.gg/dinolabs", - "twitter": "https://twitter.com/DinoLabsNFT", - "website": "https://dinolabs.gg/" - } - }, - { - "chainId": 101, - "address": "THN7o5vR5ELDY1HeJmDd1ezSuu3mwpmMapzKEuRGrMs", - "symbol": "WLBSF", - "name": "BigShotFoxes Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ramonv926/Big-Shot-WL-Token/main/wlToken.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "GtGaoaGXb38E5h6pHBYN8vqYAo6BsaPUCS2yaswyPpfY", - "symbol": "AG", - "name": "Agency", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/b0ot/agency/main/logo.svg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ZAysUnq3N5PUPPyQYhUk8sBf1HhZajzKLSJ8fiuv1AH", - "symbol": "ZAYSAN", - "name": "Zaysan Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ZAysUnq3N5PUPPyQYhUk8sBf1HhZajzKLSJ8fiuv1AH/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/ZaysanRaptors", - "website": "https://zaysanraptors.io" - } - }, - { - "chainId": 101, - "address": "JD5VXSwNmTatjqJEALW1v1ixoNM7JV4mnVF4h96KpBC6", - "symbol": "FATM", - "name": "Financial Accounting", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/shlee8313/Assets/main/logo2.png" - }, - { - "chainId": 101, - "address": "F9spsXKyccFvj34rb6Hf4g9dsqJH3VWW21hcF4bVWUwP", - "symbol": "MARU", - "name": "Maruchy Arachy", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/shlee8313/Assets/main/entertainment.png" - }, - { - "chainId": 101, - "address": "FDiJY7TFSjggVru24NNy3mNHVRHXHyg8q2FeBKYQYYq2", - "symbol": "SK", - "name": "Silent Knight", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/KerronManwaring/sk/main/logo.png", - "tags": ["social-token", "utility-token"], - "extensions": { - "website": "https://www.facebook.com/SilentKnightToken" - } - }, - { - "chainId": 101, - "address": "DAHSwp5jFX9fzgHLWCxXZAjkqm3w4guTkWKA9rNJHx1q", - "symbol": "WLDAHS", - "name": "DAHS Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DAHSwp5jFX9fzgHLWCxXZAjkqm3w4guTkWKA9rNJHx1q/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "discord": "https://discord.gg/DAHS", - "twitter": "https://twitter.com/DAHSNFT", - "website": "https://www.dahsnft.com/" - } - }, - { - "chainId": 101, - "address": "d3LLMhqHR67Vz24AYVtJ4sdswaJAUhnzkLepm1HMT5a", - "symbol": "SALEMGIRLS", - "name": "SalemGirls", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/crtyencz/SalemGirls/main/SalemGirls.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DSFpqenvEpaffRaww8QzkWuAs2NmtJXUJpaHZVbr6EYE", - "symbol": "WGMIDIOT", - "name": "wgmi", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DSFpqenvEpaffRaww8QzkWuAs2NmtJXUJpaHZVbr6EYE/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://twitter.com/wgmidiot" - } - }, - { - "chainId": 101, - "address": "DEPzGW5vW9VSCoKTykERiZ3iTGxRmVntPuSZye9mzTBs", - "symbol": "IMEN", - "name": "Imen Saghrouni Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DEPzGW5vW9VSCoKTykERiZ3iTGxRmVntPuSZye9mzTBs/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EJHqfk1L8cCiBYLp9sVMU68rkRACXCF6o95R9mPzZo8y", - "symbol": "Mind", - "name": "UltimateMinds", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Ultimateminds/ultimateminds/main/mascot-3.png", - "tags": ["social-token", "collectibles"], - "extensions": { - "facebook": "https://facebook.com/Uminds", - "twitter": "https://twitter.com/Ultimateminds" - } - }, - { - "chainId": 101, - "address": "9N6pAzykk711HvBMsBkZ3KDsQMAo5oMrqrj7VpuwwmQT", - "symbol": "PLKTN", - "name": "Whales Nation Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/Ishi727/WN_Whale_House_01/master/Content/Test_01/Whales_Nation_Token_02.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5BjQ8Yf8eZPCVZXUAgUsif8s1nXP85EQC94gf43vER3o", - "symbol": "TRUFA", - "name": "TrufaCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MorisBR/MyCrypto/main/Bombom.png", - "tags": ["utility-token", "capital-token"] - }, - { - "chainId": 101, - "address": "DMEkGutYRD93R7EYf4pULQYzhwjzVeWQbFS9zXGqedqn", - "symbol": "CHA1NS", - "name": "Chains", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DMEkGutYRD93R7EYf4pULQYzhwjzVeWQbFS9zXGqedqn/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://www.twitter.com/CHA1NS_" - } - }, - { - "chainId": 101, - "address": "Gw6t9jMCuqctUXyD8tH3fGa4VXnLaS6ZeLHsQyGdo4jP", - "symbol": "KLM", - "name": "KIRSTY KOIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Gw6t9jMCuqctUXyD8tH3fGa4VXnLaS6ZeLHsQyGdo4jP/logo.png", - "tags": ["community-token", "social-token"], - "extensions": { - "description": "KIRSTY ROCKS" - } - }, - { - "chainId": 103, - "address": "FzN7dvdw7w8Q1KXBHqEmzxYpDhANsjGeW5LoX3EhGBah", - "symbol": "EVRY", - "name": "EvrynetToken (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FzN7dvdw7w8Q1KXBHqEmzxYpDhANsjGeW5LoX3EhGBah/logo.png", - "tags": ["wormhole"] - }, - { - "chainId": 101, - "address": "8NT5729jDJn7kjFwMfado21WCE1zv4ewTmgWv4nxU8nA", - "symbol": "GROAT", - "name": "Groat Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8NT5729jDJn7kjFwMfado21WCE1zv4ewTmgWv4nxU8nA/groat_coin_silver_100x100.png", - "tags": ["utility-token", "security-token", "social-token"] - }, - { - "chainId": 101, - "address": "A871xaxwLfdYmFGNii3hcc6F6F2kf67L6AP7nZuW95iU", - "symbol": "TDITS", - "name": "TERRA CREDITS", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Rroams/Terra/main/logo.png", - "tags": ["social-token", "family", "terra", "earth"] - }, - { - "chainId": 101, - "address": "EbPv1tqJozMfJR6pvcEcWXFqEidoEsmoAqwhjAfa3Ygk", - "symbol": "KPTZE", - "name": "Kryptoze", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/sarath-ts/kryptoze-new/main/kryptoze-logo-png-cmp.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3u8qyfSQxwCEPoAvzZTwcBRAThc5hqoM7G8pmcLAFo4H", - "symbol": "FTND", - "name": "FTN Digidollar", - "decimals": 0, - "logoURI": "https://github.com/FTNmaster/FTN-Digidollar/raw/main/logo.png", - "tags": ["social-token", "website-currency", "member-token"] - }, - { - "chainId": 103, - "address": "2rFdd5LWCkyEZ68zg3YuDztALWAEdifJW1RRVfn8ZDZh", - "symbol": "GOT", - "name": "Great Oliv token", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/LiudmylaHabit/CryptoTokensLogos/main/MountainToken.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "2DFF7Vh2TP4Zf8hveM4WbvuFzHHqNmPhxaFLSDJn7ygh", - "symbol": "CHO", - "name": "ChoToken", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2DFF7Vh2TP4Zf8hveM4WbvuFzHHqNmPhxaFLSDJn7ygh/logo.png", - "tags": ["Utility-Token"] - }, - { - "chainId": 101, - "address": "8PBK7R6CkxSWym4L4zLd7S81TS7cwoVn598fHkTYPK15", - "symbol": "RSR", - "name": "WCC RSR", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8PBK7R6CkxSWym4L4zLd7S81TS7cwoVn598fHkTYPK15/logo.png", - "tags": ["rsr", "community", "airdrop", "wcc"], - "extensions": { - "discord": "https://discord.gg/metawhips", - "twitter": "https://twitter.com/wccmetawhips", - "website": "https://www.skrrrt.vip" - } - }, - { - "chainId": 101, - "address": "SeNXkide9y4AYdc8ztQTUtFFWdiHd4unjNmqistsYvH", - "symbol": "SENSEI", - "name": "SENSEI Finance", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SeNXkide9y4AYdc8ztQTUtFFWdiHd4unjNmqistsYvH/logo.jpg" - }, - { - "chainId": 101, - "address": "HHmD2wbQZyxQHyiPdxnbJXkRhx2hSjHJm34a5Y7CGDa8", - "symbol": "OKC", - "name": "OKCOIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Kazuto-Kawahara/OKCOIN/main/OKC-Logo-tq-nbg.png", - "tags": ["social-token", "educational-token"], - "extensions": { - "website": "http://omerkaancoskun.com/" - } - }, - { - "chainId": 101, - "address": "7mL1TFKXfdd8wBoqM7mwXKCi6UecFDhjLq6GgSQHXK1p", - "symbol": "BOO", - "name": "Spoopy Ghosts Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/spoopyghostsnft/assets/main/256px.png", - "tags": ["nft", "community", "airdrop", "casino"], - "extensions": { - "discord": "https://discord.gg/spoopyghosts", - "twitter": "https://twitter.com/spoopyghostsnft", - "website": "https://spoopyghosts.com" - } - }, - { - "chainId": 101, - "address": "72Ad4WezN4J95u4jnTJNTia5FvctQKcRzcKiFs7Vy3JN", - "symbol": "PRUA", - "name": "ProUkraineCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/MihaiCA/crypto-ua/main/logo-prua.png", - "tags": ["social-token", "community-token", "utility", "whitelist-token"] - }, - { - "chainId": 101, - "address": "96Coupgsx5SYS9KxGqEmJimHSn1pnL9mNRv34x9rHUKY", - "symbol": "96CP", - "name": "96Coupon", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/96Coupgsx5SYS9KxGqEmJimHSn1pnL9mNRv34x9rHUKY/logo.png", - "tags": ["coupon", "ticket", "mint", "nft", "utility-token"] - }, - { - "chainId": 101, - "address": "9Hq27torfYhXJPmMM83Wj6njDEBuJ7FLJ2WNLiQuagnw", - "symbol": "SVWL", - "name": "Solarverse Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Solarversenft/whitelist_token/main/logo.png", - "tags": ["social-token", "whitelist-token", "community-token"] - }, - { - "chainId": 101, - "address": "G5JQhjw4j1kgJKfHJ8wZJxdC2s3c34XGoH8Eh4wQqvhg", - "symbol": "SRDC", - "name": "SurinameDollarCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/suridcoin/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "THuAo6aDDy5QQABVDvLXhFGPpWuSLp2Qa9ukbmGLir3", - "symbol": "TH", - "name": "Tiny Title Deeds", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/danvernon/tiny-dogz-logo/main/deed-coin.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "4DxCRywJHs2qXoMrshxwYai26DdcmepBgiyeMcjNm1AH", - "symbol": "DSOLE-MWL", - "name": "Metta Designsoles Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4DxCRywJHs2qXoMrshxwYai26DdcmepBgiyeMcjNm1AH/blanksoles.png", - "tags": ["whitelist-token"], - "extensions": { - "discord": "https://discord.gg/blanksoles", - "twitter": "https://twitter.com/blanksoles", - "website": "https://www.blanksoles.com/" - } - }, - { - "chainId": 101, - "address": "GQn9aS1V3VonMMcf2GNkoGFCiEZ8r6VMTAkVYen7k5My", - "symbol": "STRL", - "name": "STRALLON", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Strallon/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "BseXpATR4hqy7UHvyNztLK711mYPHNCsS5AcBzWzSq7X", - "symbol": "dlpSOL", - "name": "LP Finance Solana Devnet", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/LP-Finance-Inc/token-image/main/lpSOL-min.png", - "tags": ["stablecoin", "LP-Finance"], - "extensions": { - "telegram": "https://t.me/LP_Defi_Official_group", - "twitter": "https://twitter.com/LPFinance_" - } - }, - { - "chainId": 103, - "address": "GPNCGAjyhA1qcSgSotQvJsM1xcGnDMgtTr9TJ1HVVQgG", - "symbol": "dlpUSD", - "name": "LP Finance USD Devnet", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/LP-Finance-Inc/token-image/main/lpUSD.png", - "tags": ["stablecoin", "LP-Finance"], - "extensions": { - "telegram": "https://t.me/LP_Defi_Official_group", - "twitter": "https://twitter.com/LPFinance_" - } - }, - { - "chainId": 101, - "address": "HphmyPf32KgoMaGeEnLrndtcJuejxDMRFj4r1EzNvWSM", - "symbol": "IG", - "name": "Infinity Girls WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HphmyPf32KgoMaGeEnLrndtcJuejxDMRFj4r1EzNvWSM/logo.png", - "tags": ["social-token", "whitelist-token"] - }, - { - "chainId": 101, - "address": "HQaECmN3d5tKMf94jFPquWLr41fRdfrfWEHs8fazqf7A", - "symbol": "MEAT", - "name": "Panthers in the Metaverse - MEAT Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/LinYu1992/pitm-meat-token/main/meat.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/panthersitm" - } - }, - { - "chainId": 101, - "address": "TodKG4UuPVbuRmQg4byCDuTVq4kuFBXp4oPE66okeB1", - "symbol": "NOVAWL", - "name": "Nova Pass", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/TodKG4UuPVbuRmQg4byCDuTVq4kuFBXp4oPE66okeB1/novapass.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/the_cynova", - "website": "https://www.cynova.io/" - } - }, - { - "chainId": 101, - "address": "hFZDU52ACazFCk6J9np2ZFHZpBVn1mvXhR6kXRmtAad", - "symbol": "LEAT", - "name": "LOLALETTEN early access token - LEAT Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Lolaletten/useful/main/LEAT.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/aZwSYrCarY" - } - }, - { - "chainId": 101, - "address": "j4cpRFecrtvEbdLYNZb4pg7eTLDSuxUZ1BA2ratQpNa", - "symbol": "ATL", - "name": "Astraland", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/j4cpRFecrtvEbdLYNZb4pg7eTLDSuxUZ1BA2ratQpNa/logo.png", - "tags": ["currency"] - }, - { - "chainId": 101, - "address": "APKLPGdFP3bWjezz1p3YFrRyPjiMWGoNZ3H6uTnjJ7S3", - "symbol": "PARA", - "name": " Paranoid Android ", - "decimals": 6, - "logoURI": "https://github.com/dexlab-project/assets/raw/786d9c6a35fc71f78cb0af9daf887b845a91ddf6/tokens/solana/para/symbol.png", - "tags": ["NFT", "AMM"], - "extensions": { - "discord": "https://discord.gg/KaeDRdYxTT", - "telegram": "https://t.me/paratoken", - "twitter": "https://twitter.com/PARAndroidNFT" - } - }, - { - "chainId": 101, - "address": "52DNxD3DKm14GhFEHLmG4igvBqK8Dvth1DRVhGxSZvcg", - "symbol": "CLBC", - "name": "Caleb Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/JustinTan7/calebcoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Tof8rSJue77PdagxLqbPmPjDnkM9R2qjyd4y2Uu7NEa", - "symbol": "SPE", - "name": "Solana Pixel Elephants WL Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Tof8rSJue77PdagxLqbPmPjDnkM9R2qjyd4y2Uu7NEa/LOGO.png" - }, - { - "chainId": 101, - "address": "3idv1j9FVF3HDJwTcVdbFBeXhcGU61s8uYdofhfCcBW6", - "symbol": "CRED", - "name": "CredBank Nyrt", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3idv1j9FVF3HDJwTcVdbFBeXhcGU61s8uYdofhfCcBW6/credbank.png", - "tags": ["stock-token", "mcsuli", "justforgame"] - }, - { - "chainId": 101, - "address": "EaGLegtCTBJuVC51xE9zhNoSgesFonM8XMUq6qMveKDY", - "symbol": "EAGZ", - "name": "OFFICIAL EAGLEZ WL TOKEN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EaGLegtCTBJuVC51xE9zhNoSgesFonM8XMUq6qMveKDY/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/EaglezSOL" - } - }, - { - "chainId": 101, - "address": "6yksxHaGkSzJwnWZHqExuJ4KZS61nqR8dDjxs3XLBudV", - "symbol": "MISI", - "name": "MiskahuszarDAO", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/miskahuszar/miska-spl/main/logo.png", - "tags": ["community-token", "DAO-token", "utility-token"], - "extensions": { - "github": "https://github.com/miskahuszar/", - "twitter": "https://twitter.com/miskahuszardao" - } - }, - { - "chainId": 101, - "address": "GoGwgMnVsRqLUf2vPKxTG6DSyRRSrZCEKQBUCFDUFneU", - "symbol": "GOG", - "name": "GOG Token", - "decimals": 1, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GoGwgMnVsRqLUf2vPKxTG6DSyRRSrZCEKQBUCFDUFneU/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/Gods_GalaxyNFT", - "website": "https://godsofthegalaxy.io/" - } - }, - { - "chainId": 101, - "address": "A1LwvSDH2v6swHXP9JMxYJVx6YDzdQdnBDvy8VeBA3g1", - "symbol": "WKN", - "name": "Wakan", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/A1LwvSDH2v6swHXP9JMxYJVx6YDzdQdnBDvy8VeBA3g1/logo.png", - "tags": ["nft"], - "extensions": { - "twitter": "https://twitter.com/OldSoulsNFT", - "website": "https://oldsouls.art" - } - }, - { - "chainId": 101, - "address": "gbgbSxPAXwQgTp6PyXCeoXqcZf4UHYQKtuYS53qnPtz", - "symbol": "PAYX", - "name": "PayX", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/gbgbSxPAXwQgTp6PyXCeoXqcZf4UHYQKtuYS53qnPtz/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "4w33ZeFsFzAqjCwLY9igra3khYt5D4TSu8iXXzUA6Vjv", - "symbol": "ANON", - "name": "ANON Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Ultimatemind/UltimateMind/main/01259_00.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EaVNKunbgcsdjayCMe9XbkYYxDLUxmp4cR7fH9CnYDsv", - "symbol": "GBITS", - "name": "Gbit Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/visivoagency/Crypto/main/Gbits_logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3KkYJP3ooWH5J2jaJtYEggAvgncnJ2EtYcEzvAyjMfSP", - "symbol": "KIJ", - "name": "KIJ", - "decimals": 7, - "logoURI": "https://raw.githubusercontent.com/kijangtoken/kijang/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5Yx5yVEf9oGuxg7sh6nr5WHWkJd6MEUQSeRX292fAmY", - "symbol": "CHCO", - "name": "ChessCoin", - "decimals": 7, - "logoURI": "https://github.com/EMATiON/crypto/raw/main/chco.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9tshp8vPyZZW3wnQmNCDRF5vMggeGSWY291pR7W45KcR", - "symbol": "PLATSKU11", - "name": "PROJECT SKU11 Platinum Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9tshp8vPyZZW3wnQmNCDRF5vMggeGSWY291pR7W45KcR/logo.png", - "tags": ["wl-token"], - "extensions": { - "twitter": "https://twitter.com/SkullDiv" - } - }, - { - "chainId": 101, - "address": "CeZoteB9AF7Gy5sXAUKo8h5fbAHHfJiKYyJf8n8WBRTx", - "symbol": "DIAMSKU11", - "name": "PROJECT SKU11 Diamond Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CeZoteB9AF7Gy5sXAUKo8h5fbAHHfJiKYyJf8n8WBRTx/logo.png", - "tags": ["wl-token"], - "extensions": { - "twitter": "https://twitter.com/SkullDiv" - } - }, - { - "chainId": 101, - "address": "d4kbgLD1XPQkuEaBbZtPrYUPCPXZK3YGi8iHYtgEzjg", - "symbol": "GOLDSKU11", - "name": "PROJECT SKU11 Gold Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/d4kbgLD1XPQkuEaBbZtPrYUPCPXZK3YGi8iHYtgEzjg/logo.png", - "tags": ["wl-token"], - "extensions": { - "twitter": "https://twitter.com/SkullDiv" - } - }, - { - "chainId": 101, - "address": "2hnR5wSf2FQmXdX8titYFpHxDBie6chcm2D2wZz2mJb8", - "symbol": "DGNZ", - "name": "Degenz Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mr365k/DGNZ/main/dgnztoken.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7DBpAPMYUfrJWrCGJdyv2Z3nTXN28bDGCi4n4xYo8f8w", - "symbol": "WW", - "name": "Wonder Woman Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SolanaTokenMerger/Wonder-Woman-Coin/main/logo.png", - "tags": ["social-token", "utility-token", "meme-token"], - "extensions": { - "twitter": "https://twitter.com/DCwonderwoman" - } - }, - { - "chainId": 101, - "address": "FB3quiAeY4cHTESzeo2FbYZt9WnXyoaaTFo3upL2RXjV", - "symbol": "SS", - "name": "SolanaStage", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FB3quiAeY4cHTESzeo2FbYZt9WnXyoaaTFo3upL2RXjV/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BBZbqM7RPKzncqaC26gtq6Z4dkm5ksZXib4nJYjk8L3X", - "symbol": "NUGGET", - "name": "Degen Islands NUGGET Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BBZbqM7RPKzncqaC26gtq6Z4dkm5ksZXib4nJYjk8L3X/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "NUGGETs are the official tokens for Degen Islands", - "discord": "https://discord.gg/dzyMPzmFMe", - "twitter": "https://twitter.com/degenislands", - "website": "http://degenislands.com/" - } - }, - { - "chainId": 101, - "address": "9MEUevTzP81sRFCKxeJmqfDn7HFMYnBVhXE12rd3jRGt", - "symbol": "ROMI", - "name": "ROMI", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9MEUevTzP81sRFCKxeJmqfDn7HFMYnBVhXE12rd3jRGt/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "HudUgoEa986hRAgJWPj3cB1c9WoXEmBVw7gwBKTMwikd", - "symbol": "PBWL", - "name": "Puppy Bullies WL Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/MetaBully/puppy-bullies/main/logo.png" - }, - { - "chainId": 101, - "address": "GQzf8qF7sG1eLyYqk7scFy8HfShhyfqZa4NVwRrDrGcY", - "symbol": "BUD_PAI", - "name": "Penguin BUD_PAI LP", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GQzf8qF7sG1eLyYqk7scFy8HfShhyfqZa4NVwRrDrGcY/logo.png", - "extensions": { - "twitter": "https://twitter.com/png_fi" - } - }, - { - "chainId": 101, - "address": "C2xKQ8BUNf6rv1Y1ndKs759QbmsXde8cmcKeRXgh1Y4t", - "symbol": "TERL", - "name": "Terra Legends", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/C2xKQ8BUNf6rv1Y1ndKs759QbmsXde8cmcKeRXgh1Y4t/logo.png", - "tags": ["metaverse", "utility-token", "social-token"], - "extensions": { - "website": "https://terralegends.io/" - } - }, - { - "chainId": 101, - "address": "G6CFsk54ewgkRQqj5pDVQJsDystRQXZZpqF8CfgZoUq4", - "symbol": "WEEH", - "name": "WeehCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/G6CFsk54ewgkRQqj5pDVQJsDystRQXZZpqF8CfgZoUq4/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "WeehCoin", - "discord": "https://discord.gg/weedheads", - "website": "https://weedheads.art/" - } - }, - { - "chainId": 101, - "address": "8dXC7QzRimcycR89pT65y3b9FLCmyuKEXPMcNxV7Dem9", - "symbol": "GSCWL", - "name": "GSC WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8dXC7QzRimcycR89pT65y3b9FLCmyuKEXPMcNxV7Dem9/logo.png", - "tags": ["community-token", "nft", "wl-token"], - "extensions": { - "description": "GSCWL are the whitelist tokens for GSC minting", - "discord": "https://discord.gg/TXfuFEmss4", - "twitter": "https://twitter.com/GorillaSC_", - "website": "https://gorillasocialclub.io/" - } - }, - { - "chainId": 101, - "address": "2ZamLCGLPSpP2MRbeM2wXRWzTEDhr669cFycVWgzBixi", - "symbol": "TBF", - "name": "The Big Five", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/thebigfivenft/asset/main/the-big-fiv.png" - }, - { - "chainId": 101, - "address": "DTRK1XRNaL6CxfFWwVLZMxyhiCZnwdP32CgzVDXWy5Td", - "symbol": "DTRK", - "name": "Doge Track", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DTRK1XRNaL6CxfFWwVLZMxyhiCZnwdP32CgzVDXWy5Td/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/dogetrack", - "twitter": "https://twitter.com/theDogeTrack", - "website": "https://dogetrack.io/" - } - }, - { - "chainId": 101, - "address": "HexEj6QJ2CU1MHYn81wXTrdUj4bk2kZmTDo1hDaDBd2g", - "symbol": "BRTT", - "name": "Brittcoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/bbritt83/crypto/main/brittcoin_kansas.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "457ewhibDVb5brQP5JZBm28op4jLhGBJHwcLe3c2GADE", - "symbol": "WZRD", - "name": "Wizardia", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/457ewhibDVb5brQP5JZBm28op4jLhGBJHwcLe3c2GADE/logo.png", - "extensions": { - "medium": "https://medium.com/@wizardia", - "twitter": "https://twitter.com/PlayWizardia", - "website": "https://wizardia.io" - } - }, - { - "chainId": 101, - "address": "jbyi8caTyxtzw6vPRpZCwRv9k1rZNfxTK9yRDKFgj7P", - "symbol": "ThxU", - "name": "Thank You Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/jbyi8caTyxtzw6vPRpZCwRv9k1rZNfxTK9yRDKFgj7P/logo.png", - "tags": ["community-token", "social-token", "utility-token"], - "extensions": { - "twitter": "https://twitter.com/ThxuToken", - "website": "https://thxu.life/" - } - }, - { - "chainId": 101, - "address": "SRMFbAYiA6vxA2KxURziACmtqs1jtiqCVKPPMjNMxmm", - "symbol": "SERUM", - "name": "LDAC Serum", - "decimals": 0, - "logoURI": "https://jokerz-sol.s3.amazonaws.com/ldac/serum/0.jpg", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/lildegenapeclub" - } - }, - { - "chainId": 101, - "address": "HmhebATrgvFceCG9qHoqY6c3jYnW4Nx3gPAVzGhkRupy", - "symbol": "RISE", - "name": "ECORISE DAO", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HmhebATrgvFceCG9qHoqY6c3jYnW4Nx3gPAVzGhkRupy/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://ecorise.finance/" - } - }, - { - "chainId": 101, - "address": "CVq2Sfqzx9D43tMbkM84tc4wSwJLe6LUY2e52Jo6ArjC", - "symbol": "FEToken", - "name": "FEToken", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/9dk8/solana/main/FE2_Circle.png", - "tags": ["social-token"], - "extensions": { - "description": "Formula Edge Token for testing", - "website": "https://formulaedge.org" - } - }, - { - "chainId": 101, - "address": "6TJcjucpq8Vp5rHqDXhzQsRxEZUsHWcNH8dUWtpcvaER", - "symbol": "PRCN", - "name": "PiperCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6TJcjucpq8Vp5rHqDXhzQsRxEZUsHWcNH8dUWtpcvaER/logo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6PCYef4LDWsFooniF1h2cQtKiB5BPzMobnWDTUkanHpk", - "symbol": "NANAS", - "name": "Nifty Nanas", - "decimals": 3, - "logoURI": "https://i.ibb.co/Tr8chSd/PEEL-final.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/NiftyNanas", - "website": "https://niftynanas.com/" - } - }, - { - "chainId": 101, - "address": "Aj3sU5LeuxXYZ6cCW4PRcm15Lrmhn5dWHY3AcBPtQDGo", - "symbol": "JCSB", - "name": "JCSanchez", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/juancarlos995/crypto/main/JCSanchez.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AicrDDwTZ8toM6hkmEwyvpWNGcXgq1boWVf5BhXDAvEu", - "symbol": "DBIC", - "name": "(DEV) DBI Cryptocoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/EmpireDesigns007/crypto/main/DBI-Crypto-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CL2VhyUxJ3tBUvE19UMhXukK3YzFinQBH6sDazVmhkjx", - "symbol": "PEAK", - "name": "Peak Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/luuk180/PEAK/master/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2d4wMzHDAZRFQzVDB2kjRGFMAfVSURh7oZD6df9PoYst", - "symbol": "GOOF", - "name": "GoofCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/lunarscribe0/goofcoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4kbuWKMktNRTTdvmAh3WT3quMEgZ3WEpGt5zb4Z9FkyZ", - "symbol": "NCX", - "name": "NickelCityXwing", - "decimals": 0, - "logoURI": "https://github.com/gregkash16/crypto/blob/main/NCXCJPG.jpg", - "tags": ["social-token"], - "extensions": { - "blog": "https://blog.me-idea.in.th", - "website": "https://kajame.xyz" - } - }, - { - "chainId": 101, - "address": "3HwVHE4u66RSHa8L4M1JxSz2Frzwh7j4wpfGbH7912UH", - "symbol": "BUBZ", - "name": "BUBZEE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3HwVHE4u66RSHa8L4M1JxSz2Frzwh7j4wpfGbH7912UH/logo.png", - "tags": ["community-token", "social-token"], - "extensions": { - "description": "Banz Carewear for Kids. Sensitive care. Sensible choice.", - "facebook": "https://www.facebook.com/BANZCarewear", - "instagram": "https://www.instagram.com/banzaustralia/", - "twitter": "https://twitter.com/banzcarewear", - "website": "https://www.banzworld.com" - } - }, - { - "chainId": 101, - "address": "9hXWYupLxAnZ1t2SSDSr9mishBnDXUti9iWvSYipeVaQ", - "symbol": "PAN", - "name": "Pantheon Art", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/PantheonNFTs/PantheonToken/main/pantheon%20crypto%20logo.png", - "tags": ["nft", "metaverse", "social-token", "utility-token"], - "extensions": { - "description": "Digital Art of Ancient Gods \u0026 Mythical Creatures from Antiquity", - "discord": "https://discord.com/invite/9JsV7ZV3", - "facebook": "https://www.facebook.com/ThePantheonArtCollection", - "twitter": "https://twitter.com/ThePantheonArt" - } - }, - { - "chainId": 101, - "address": "NASTYAhPiC1LnBr8dikyd9KWBMhrzhQQ5Ro8TD1tqf7", - "symbol": "NASTY", - "name": "Gooney Toons", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/NASTYAhPiC1LnBr8dikyd9KWBMhrzhQQ5Ro8TD1tqf7/logo.png", - "extensions": { - "twitter": "https://twitter.com/GooneyToonsNFT", - "website": "https://gooneytoons.studio" - } - }, - { - "chainId": 101, - "address": "ECPAcbSNK4xeajfNwECTAd9pykEVz97UGzV7B6G5pmYD", - "symbol": "BZTT", - "name": "Electons 2 WL PASS", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ECPAcbSNK4xeajfNwECTAd9pykEVz97UGzV7B6G5pmYD/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/electonsnft" - } - }, - { - "chainId": 101, - "address": "2L38dLcLYH8unipx3kuuDoGsfaYP1xEL7jdboLKZmiQx", - "symbol": "ENERGY", - "name": "Kage Energy", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2L38dLcLYH8unipx3kuuDoGsfaYP1xEL7jdboLKZmiQx/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/KageSociety" - } - }, - { - "chainId": 101, - "address": "DApPeEgNyhYJe76gGBB88eHpXbeaDLJVQoW1HSHvhsBn", - "symbol": "DAH2", - "name": "DAHS WL GEN2", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DApPeEgNyhYJe76gGBB88eHpXbeaDLJVQoW1HSHvhsBn/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/DAHSNFT", - "website": "https://www.dahsnft.com/" - } - }, - { - "chainId": 101, - "address": "KVDY7D1BokuDrXHqxDFf35fGGJWCkuQuMEXJ9gWEyrH", - "symbol": "PenLabs", - "name": "Penguin Labs whitelist token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/KVDY7D1BokuDrXHqxDFf35fGGJWCkuQuMEXJ9gWEyrH/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://www.penguinlabs.art/" - } - }, - { - "chainId": 101, - "address": "7EMiYyhRBJh4yTX4B5YDux59dw5C2LEf1VRmggY7tHVG", - "symbol": "HOE", - "name": "HOEDL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7EMiYyhRBJh4yTX4B5YDux59dw5C2LEf1VRmggY7tHVG/logo.jpg", - "tags": ["utility-token"], - "extensions": { - "website": "https://twitter.com/HODLsolana" - } - }, - { - "chainId": 101, - "address": "G8N6F1JB4JrxnxYfMHYzx5cxTodB87JgMBEMXsVPemew", - "symbol": "RVC", - "name": "Rich Vagos Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Piscuis/RV/main/rvCoin-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3nweUdP5ZHQmy2wiBV5Y3KFtTxqoVboDVNj3ZRifoYeZ", - "symbol": "TLC", - "name": "TALCON", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/RaPGoD31/talcon/main/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 103, - "address": "3zTbjG15ynWjTTfBwpHkvTuKzTygBwirvguRmtpFpSFK", - "symbol": "tCCC", - "name": "test Carbene Chemistry Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/JSLJ23/carbene-chemistry/main/CCC.png", - "tags": ["tCCC"] - }, - { - "chainId": 101, - "address": "7MKpy8PeNjQM3i4xWzGiZjDd97mq6m4QH6Q8jrXnsQ9L", - "symbol": "ZORG", - "name": "Zorg app", - "decimals": 9, - "logoURI": "https://i.ibb.co/ySjGr4K/zorg-removebg.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/zorg_app", - "website": "https://zorgapp.tech/" - } - }, - { - "chainId": 101, - "address": "ETER9jTizmKFKLtW55jMd9MaBWhR2UZpUx48yR3Jixrx", - "symbol": "ETERNIUM", - "name": "Eternium", - "decimals": 9, - "logoURI": "https://cdn.eternaldragons.com/assets/eternium.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/gucUFXQw", - "twitter": "https://twitter.com/EternalDragons_", - "website": "https://eternaldragons.com/" - } - }, - { - "chainId": 101, - "address": "GznZN2S6Nyr7yEH1GJPMjz3tnhRpbiCZDh5B3pcYuFkh", - "symbol": "METG", - "name": "MetaGamSolana", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/JameWi/logo/main/logometg.png", - "tags": ["metg-solana", "main-metg"], - "extensions": { - "discord": "https://discord.com/invite/539UeBNT", - "telegram": "https://t.me/metg_org", - "twitter": "https://twitter.com/Metagam_org", - "website": "https://www.metagam.org/" - } - }, - { - "chainId": 101, - "address": "H8YuWzeMJepYxL4XShSEq5U9Bfa46TNGKTorQyJ5xzGA", - "symbol": "SOJ", - "name": "Symbol of Justice", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/H8YuWzeMJepYxL4XShSEq5U9Bfa46TNGKTorQyJ5xzGA/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4uJPAM9Nfk9kaGyRBcY97EkbverhaYaxMrtEqKsNu7dm", - "symbol": "BCXINNO", - "name": "BCX Inno Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4uJPAM9Nfk9kaGyRBcY97EkbverhaYaxMrtEqKsNu7dm/bcxinno_coin_logo_80x80.png", - "tags": ["utility-token", "security-token", "social-token"] - }, - { - "chainId": 101, - "address": "vBUD5s5PtJoApmQCxPd6yFudUmTgiARkn5SEspuf38w", - "symbol": "vBUD", - "name": "BunnyDucky Vesting Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/vBUD5s5PtJoApmQCxPd6yFudUmTgiARkn5SEspuf38w/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/BunnyDuckyHQ", - "website": "https://bunnyducky.com/" - } - }, - { - "chainId": 101, - "address": "6hvzxKpw8qeEtYZ2EMZhVv3LPy5urXo96ZyZSk427uxv", - "symbol": "OSCG13", - "name": "Oscar G Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ogdood/Oscar-G-Token/main/OG13.png", - "tags": ["utility-token", "security-token", "social-token"] - }, - { - "chainId": 101, - "address": "2wCcpwJfX1E54vcX6F7nAz9WhmPt54CtP4Ak8iGmZyHi", - "symbol": "PESO", - "name": "PESOS", - "decimals": 9, - "logoURI": "https://rawcdn.githack.com/elpistoleros/tokenlogo/f0df8e4db469da2f00dc0faf2312db7e6cbbfdd0/pesos.png", - "tags": ["utility-token", "nft", "game"], - "extensions": { - "discord": "https://discord.gg/pistoleros", - "twitter": "https://twitter.com/thepistoleros" - } - }, - { - "chainId": 101, - "address": "Hie7HKx2JDEnQg8Vo4zBAaYrZiWhgrgNDo7m1X4k99qi", - "symbol": "SHMB", - "name": "SOLhouse Match Bet", - "decimals": 0, - "logoURI": "https://cdn.discordapp.com/attachments/939045807359918090/953961775928340521/solhouse_logo_500.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/SOLhouseNFTs", - "website": "https://solhouse.io" - } - }, - { - "chainId": 101, - "address": "AWQGb8miFhJFyM3AHtQ8j7nADD1EmEe61bcYrzhHkRpv", - "symbol": "SUGA", - "name": "Sugar Realm", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AWQGb8miFhJFyM3AHtQ8j7nADD1EmEe61bcYrzhHkRpv/SUGA.png", - "tags": ["SUGA", "sugar_realm"], - "extensions": { - "discord": "https://discord.gg/sugarrealm", - "medium": "https://medium.com/@sugarrealmnft", - "twitter": "https://twitter.com/SugarRealmNFT", - "website": "https://sugarrealm.io/" - } - }, - { - "chainId": 101, - "address": "55toLUwFGutQiJyyFqFDge3uTiRicY5QftDLJrNTyWxC", - "symbol": "MSF", - "name": "Mischief Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/55toLUwFGutQiJyyFqFDge3uTiRicY5QftDLJrNTyWxC/logo.png", - "tags": ["mischief", "utility-token"] - }, - { - "chainId": 103, - "address": "HHZEjFdPym9SRqfddqyGHzvNrpU5PETZqAzYuYtsP8QJ", - "symbol": "MSF", - "name": "Mischief Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/55toLUwFGutQiJyyFqFDge3uTiRicY5QftDLJrNTyWxC/logo.png", - "tags": ["mischief", "utility-token"] - }, - { - "chainId": 101, - "address": "6snMV2mz6Wj3Dh4UGZTgNfU2ETXHuU3qdnSYD4BVxE69", - "symbol": "ANIMU", - "name": "Animu Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6snMV2mz6Wj3Dh4UGZTgNfU2ETXHuU3qdnSYD4BVxE69/logo.png", - "tags": ["currency", "utility-token"], - "extensions": { - "discord": "https://discord.gg/HThus6qpZc", - "twitter": "https://twitter.com/animu_chan_", - "website": "https://animu.io/" - } - }, - { - "chainId": 101, - "address": "64o3SWWXxeGPMGAwmhkugQ2nV1bHYdq3uHFXiv5QuuKg", - "symbol": "XELA", - "name": "VPAN Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/print-alex/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BZHezZxyFD9eXgAMaqMCCoFcrKgNK5LgoACUMTWFTcTM", - "symbol": "CALL", - "name": "Cryptology", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BZHezZxyFD9eXgAMaqMCCoFcrKgNK5LgoACUMTWFTcTM/logo.png", - "tags": ["dao", "meme-token", "Defi", "Gamefi"], - "extensions": { - "discord": "https://discord.gg/22A3rFCD" - } - }, - { - "chainId": 103, - "address": "9SnxDpAxGKUqMrPbj2LjWT3vavoC7eQ8V12W7MwgZEVj", - "symbol": "EURfx", - "name": "CoinFX Euro", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9SnxDpAxGKUqMrPbj2LjWT3vavoC7eQ8V12W7MwgZEVj/logo.png" - }, - { - "chainId": 103, - "address": "9vXgy2DTeaNB1dCynddcXssF67vWMUzCSBQ7xrsZdbPY", - "symbol": "USDx", - "name": "CoinFX Mock USDc", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v/logo.png" - }, - { - "chainId": 101, - "address": "soLDKcxDXu7Z1iCZxdbYLMup6szxCWsUJKZkVwbv4n2", - "symbol": "SOLD", - "name": "Soland", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/soLDKcxDXu7Z1iCZxdbYLMup6szxCWsUJKZkVwbv4n2/logo.png", - "tags": ["soland"] - }, - { - "chainId": 101, - "address": "ghrvhi62DvBBvbKJu3E9ARaewxH3uwx7DF8rtouPeKR", - "symbol": "GHOST", - "name": "Gaikoku Ghosts WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/EduardoNicoleit/token-list/main/assets/mainnet/ghrvhi62DvBBvbKJu3E9ARaewxH3uwx7DF8rtouPeKR/logo.png", - "tags": ["utility-token", "security-token", "social-token"] - }, - { - "chainId": 101, - "address": "BitQuuWBbXyGRKAPeefti3R5RgFwuX7mHSxx64xm5yhF", - "symbol": "COCK", - "name": "The Secret Cockatoo Club", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BitQuuWBbXyGRKAPeefti3R5RgFwuX7mHSxx64xm5yhF/logo.png", - "extensions": { - "twitter": "https://twitter.com/SecretCockatoos" - } - }, - { - "chainId": 101, - "address": "keyus512ScDBEBUZvtD9s1wKm6dfeDJt2D9r4w6TNy4", - "symbol": "KKey", - "name": "KKey WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/EduardoNicoleit/token-list-1/main/assets/mainnet/keyus512ScDBEBUZvtD9s1wKm6dfeDJt2D9r4w6TNy4/logo.png" - }, - { - "chainId": 101, - "address": "8BLiujyxu5gJajWBXoZQkwSsamdeHNKWQbu1ApAao8Ps", - "symbol": "ACA", - "name": "Acacia", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/qubelabsllc/ACALogo/main/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "H7WBKY4qs4TEMih4ykQo5X1DDLhM5vGmQ4dHNs6eeNB6", - "symbol": "BG", - "name": "Boga", - "decimals": 0, - "logoURI": "https://alaanft.000webhostapp.com/Boga.png", - "tags": ["social-token"], - "extensions": { - "animationUrl": "https://i.imgur.com/I44AstZ.mp4", - "description": "For the loving memory of my childhood best friend Boga, this token is to all Border Collies and dog lovers out there, may you stay awesome! ", - "imageUrl": "https://alaanft.000webhostapp.com/Boga.png", - "website": "http://ingolds.hr/" - } - }, - { - "chainId": 101, - "address": "DEAD8wD7auAa3yUk15uS5WcgQf9JkqoAmMXjHmHfWaMb", - "symbol": "DERE", - "name": "Dead Rejects WL PASS", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DEAD8wD7auAa3yUk15uS5WcgQf9JkqoAmMXjHmHfWaMb/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/DeadRejcts" - } - }, - { - "chainId": 101, - "address": "9Rqy8W97X6uHXKG3haUkndhhYCo6MRoosd5qjYkuA5pZ", - "symbol": "ALPHAS", - "name": "Alphas Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/EduardoNicoleit/token-list/main/assets/mainnet/9Rqy8W97X6uHXKG3haUkndhhYCo6MRoosd5qjYkuA5pZ/logo.png" - }, - { - "chainId": 101, - "address": "DLrQgpVNkaMaw5e19mMeo3bHEnj1bBPg4Kq4ZHfu3wPn", - "symbol": "QPC", - "name": "Quantum Polymer Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/CryptoShree/QPC/main/QPC.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BiXKxUUA2fTyYvdDrSuiouYABNDWf94jPy5TYu1ajb51", - "symbol": "ATP", - "name": "Arnold Technology PARC", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/CryptoShree/ATP/main/ATP.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4v3sGmdJyBdHmNkHbth3kFNz5DnotFEZVCgd768HsVKN", - "symbol": "ASPOL", - "name": "Asphalt Polymer", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/CryptoShree/RR/main/RR.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DA2CtsAnuXFosdRAEMHj68bh5fcW1jh74hN6bARK64jX", - "symbol": "$3", - "name": "CryptoSHREE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/CryptoShree/S3/main/%243.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FXYGTWCMykTCk24D6uFeT3d6p872ELwhT8pZFyott5Wk", - "symbol": "CDIF", - "name": "Crypto Diversified Investment Fund", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/CryptoShree/CDIF/main/CDIF.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DbxyUBCPXdLkRTBVFaKvCEyFmaEZCveMnuZpqpi2vjfu", - "symbol": "90210", - "name": "crypto90210", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/CryptoShree/90210/main/90210.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BL4FJGcruJLidHmmXeWaxTu39ZZxrYJKhNCcku5JZ6yR", - "symbol": "C4C", - "name": "Cash4Crypto", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/CryptoShree/C4C/main/C4C.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FevUMLb1Aa9xwyFkuduQNPL3kzrWMSc8rA7aAMJPUDp2", - "symbol": "OGO", - "name": "Ocean Grown Organics", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/CryptoShree/OGO/main/OGO.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "MDeQjz96hcpetktKK5y5SU5xUdNL1dtsasA29gfxCSj", - "symbol": "FMG", - "name": "Foreign Music Group", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/CryptoShree/FMG/main/FMG.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6fCDH7hPUZVnYSG22BhP4FaZNqzmSL5mabbuZv6aDmMx", - "symbol": "KIM", - "name": "KimKoin 501(C)(3)", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/CryptoShree/KIM/main/KIM.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7o5e1UdzauKRhZ6VebXdX1ShC3HkTSgmfpbiBv7K2Eix", - "symbol": "ESQ", - "name": "Tatiana Logan ESQ", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/CryptoShree/LAW/main/LAW.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6EX3sR6rkPFzFq6org4jpzARrEyt6sKpWMNtxnPZhXfC", - "symbol": "DOGG", - "name": "BIG DOGG Security NYC", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/CryptoShree/DOGG/main/GUARD.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Bt4wDkdMkzwXTM8Z26JnSPEuVj7F7bQpr7Edt8QfqLW7", - "symbol": "MOVIE", - "name": "Cinema Libre Studio", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/CryptoShree/CLS/main/CLS.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EZi7y28kYhHoya8cxLsqoGUpJ6fJ71F7E9zoGvL8x2DY", - "symbol": "ACOIN", - "name": "Andrea Music Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/CryptoShree/ACOIN/main/AMC.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HyufCArmt8Akkcts65NoMBeEXF9TBAsV1dmtbqAdBhpB", - "symbol": "HERNFT", - "name": "HER Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/CryptoShree/HER/main/HER.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "E5m2ZCyDcb8R7ZYTLnFNYP7i3VVQwxZqTnVtxioV7Vs2", - "symbol": "TKO", - "name": "Lights Out WATTS", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/CryptoShree/TKO/main/TKO.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "WLd7Rr5k1aA8iTKAVgLw7iG1FzqcNiZ3XSzzLyrfVh5", - "symbol": "SPHXB", - "name": "SphinxLab Beta WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/yazidox/SPHXBETAWL/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2Dg4rVnTtGpdjdJDZ6rY8CWzzdKYqMscJWPsyj9xyMZB", - "symbol": "LOCOLUNA", - "name": "LocoLunaKoin", - "decimals": 0, - "logoURI": "https://github.com/oscwiegs/crypto/blob/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ALUVnz4ojHEJygsiJZuAufcrQeCh2TrExtZdyUfLoKv7", - "symbol": "QUAKE", - "name": "Quake III Arena-Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/print-alex/crypto/main/logo4.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "scoaEBxXmfKtwvmEATz8hWHea8XTEQqr8RcVdMBGK3R", - "symbol": "SolCase", - "name": "FOUNDERS SOLKEY Access Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/EduardoNicoleit/token-list/main/assets/mainnet/scoaEBxXmfKtwvmEATz8hWHea8XTEQqr8RcVdMBGK3R/logo.png", - "tags": ["stablecoin", "WhitelistToken"] - }, - { - "chainId": 101, - "address": "u4aUKxZX64jQN6n1Gf7fGvZP5kyT4bo1ctwa89iv4zm", - "symbol": "CPLC", - "name": "CutePaisleyLeeCoin", - "decimals": 0, - "logoURI": "https://github.com/csleecsl/crypto/blob/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ToxmH7qHy53ccSACqyyVyzFZGSM3n74YUdYs3wJWTuk", - "symbol": "CTBX", - "name": "CHATTABOXES WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ToxmH7qHy53ccSACqyyVyzFZGSM3n74YUdYs3wJWTuk/logo.jpg", - "tags": ["whitelist-token"], - "extensions": { - "website": "https://www.chattaboxes.com/" - } - }, - { - "chainId": 101, - "address": "5xhHk4x9z6hCSEr8uAFGx2MFMHNsQeWpwYDoq5VCxt7w", - "symbol": "VXL", - "name": "Voxel", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5xhHk4x9z6hCSEr8uAFGx2MFMHNsQeWpwYDoq5VCxt7w/logo.png", - "tags": [ - "utility-token", - "game-token", - "game-currency", - "GameFi", - "Gaming" - ], - "extensions": { - "description": "Voxel is the next-gen metaverse token empowering players to create, play, compete, and earn.", - "discord": "https://discord.gg/SSTx6JamJh", - "twitter": "https://twitter.com/voxelgamesio", - "website": "https://www.voxelgames.io/" - } - }, - { - "chainId": 101, - "address": "WLDWnYmLNcCGV6r6z27QZDEeUaKbCiKuhyaLqm49B8j", - "symbol": "TMDCSB", - "name": "TMDC SPRAY BOMBS WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/namu42/ImageRepo/b9306c4130c66abf1fd2d0e2a1ca48c7e487a879/WLDWnYmLNcCGV6r6z27QZDEeUaKbCiKuhyaLqm49B8j/wl_logo.png", - "tags": ["Whitelist-Token", "NFT"] - }, - { - "chainId": 101, - "address": "9uxWwcEB62YeY3NaLVMUnsh5wD3rDkMZq3qfU5HxTkPV", - "symbol": "VIC", - "name": "VIC", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9uxWwcEB62YeY3NaLVMUnsh5wD3rDkMZq3qfU5HxTkPV/logo.png", - "tags": ["vic", "social-token", "nft-token", "game-token", "jjcverse"] - }, - { - "chainId": 101, - "address": "EuuaRsgSMM3EEnaYjrWki3yE4Xzv4wNzYMFZ679aVisr", - "symbol": "TRS", - "name": "TruSwap Token", - "decimals": 0, - "logoURI": "https://github.com/Msaqib0786/trstruswap/blob/main/logo.png", - "tags": [ - "social-token", - "utility-token", - "community-token", - "stake-pool-token" - ] - }, - { - "chainId": 101, - "address": "MtT7evLbWBFXdHudR4F9ME32kExs4hYrdCf9Zcw73sL", - "symbol": "ZOB", - "name": "ZOB", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/MtT7evLbWBFXdHudR4F9ME32kExs4hYrdCf9Zcw73sL/logo.png", - "tags": ["zob", "social-token", "nft-token", "game-token", "jjcverse"] - }, - { - "chainId": 101, - "address": "5ChsTt3g1ohSoppbnkoeXmNnfqcQ6dwP7cg4uTitx2fo", - "symbol": "ATXV", - "name": "ATXV", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/hoverlive/ATXV/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8C46Vk8Vi9M1taUWTwZaFkzNcAzaoRS2cEsHdFrW8A77", - "symbol": "GOMD", - "name": "GOM Design", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/gomtoken/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3477QSU5HYAxo7UzC4DWiSd86LCtiG5wrtmEX9Y23EV7", - "symbol": "NUGGIES", - "name": "CHICKY NUGGIES", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3477QSU5HYAxo7UzC4DWiSd86LCtiG5wrtmEX9Y23EV7/logo.png", - "tags": ["nuggies", "social-token", "utility-token", "whitelist-token"] - }, - { - "chainId": 103, - "address": "BepmjSonw41vWsUttUT2L5if1FryrLFXZk3c2LDjEzQn", - "symbol": "CERO", - "name": "CERO Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/vekinadmin/CO2/main/CERO-ICON.png", - "tags": ["CERO-token", "Carbon-token"], - "extensions": { - "facebook": "https://www.facebook.com/carbonwallet.th" - } - }, - { - "chainId": 103, - "address": "DYGHxMwituCaK4uxaJiQbMoarN1LHjekwvY4LeAhXDNn", - "symbol": "ULTRA", - "name": "ultra coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DYGHxMwituCaK4uxaJiQbMoarN1LHjekwvY4LeAhXDNn/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "4cou83YSKEpcAk7AQU27CWYep71mujjCxhzjqQuydBg5", - "symbol": "LQD", - "name": "Liquid Prime", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4cou83YSKEpcAk7AQU27CWYep71mujjCxhzjqQuydBg5/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 103, - "address": "3qq7ExpwRRAAexGNpUVoFkiTfSB1uo8ezsbyAoxhyryo", - "symbol": "NEWS", - "name": "NEWS TOKEN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3qq7ExpwRRAAexGNpUVoFkiTfSB1uo8ezsbyAoxhyryo/Newsdev.png", - "extensions": { - "website": "https://www.sapien.news/" - } - }, - { - "chainId": 103, - "address": "FCrUzx3LzTB58UTew7tCkE7jry93x3Fv8TTPzUwzVNZU", - "symbol": "SAPIEN", - "name": "SAPIEN TOKEN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FCrUzx3LzTB58UTew7tCkE7jry93x3Fv8TTPzUwzVNZU/Sapiendev.png", - "extensions": { - "website": "https://www.sapien.news/" - } - }, - { - "chainId": 101, - "address": "4qsks7mSnQV4LtcCVr5pLeDuW8UD39GyD6cPDoDQCdG6", - "symbol": "PANA", - "name": "Paranoid Android", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4qsks7mSnQV4LtcCVr5pLeDuW8UD39GyD6cPDoDQCdG6/logo.png", - "tags": ["NFT", "AMM"], - "extensions": { - "twitter": "https://twitter.com/PARAndroidNFT" - } - }, - { - "chainId": 101, - "address": "H6e5ZaVeLuUvFGFxYU6okxmMUjS6oCeqB2VQEkeNooJb", - "symbol": "RUBL", - "name": "Kracked Kremlin Ruble", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/H6e5ZaVeLuUvFGFxYU6okxmMUjS6oCeqB2VQEkeNooJb/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BCLJ2TepWJcz57UpZJooizJywbFrLf5sD1ZdaT8aZcrR", - "symbol": "CLWL", - "name": "Cursed Labs WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/HFaour/token-list/main/assets/mainnet/BCLJ2TepWJcz57UpZJooizJywbFrLf5sD1ZdaT8aZcrR/image.png", - "tags": ["social-token", "community-token"], - "extensions": { - "discord": "http://discord.gg/catcartel", - "twitter": "https://twitter.com/SolanaCatCartel", - "website": "https://catcartel.io/" - } - }, - { - "chainId": 101, - "address": "SPRCUm3izDgxSoai1j2Gwk68rUD6qes2nqXh8P3G4Zi", - "symbol": "SPRC", - "name": "Sparecoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SPRCUm3izDgxSoai1j2Gwk68rUD6qes2nqXh8P3G4Zi/logo.svg", - "tags": ["utility-token", "nft", "game"], - "extensions": { - "discord": "https://discord.gg/2cSXJVVtR2", - "instagram": "https://www.instagram.com/spareworld.io", - "twitter": "https://twitter.com/SpareWorld_", - "website": "https://spareworld.io/" - } - }, - { - "chainId": 101, - "address": "ALg83KBfzftdBUgeR2QMoARUS8r6sqbBYKzE1J8NrCcq", - "symbol": "FEED", - "name": "Dapper Ducks Feed", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ALg83KBfzftdBUgeR2QMoARUS8r6sqbBYKzE1J8NrCcq/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Dapper Ducks Feed is an exclusive Utility Token for the mother of all Cluckers", - "website": "https://thedapperducks.com" - } - }, - { - "chainId": 101, - "address": "7cFFBsCcP4Fq4NAfVUoPFYvnowU5eyJ757JFqeYJ4fHD", - "symbol": "RAMEN", - "name": "Ramen", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EK58dp4mxsKwwuySWQW826i3fwcvUK69jPph22VUcd2H/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 103, - "address": "v4NHnDNKZFGuYHsxQ51iPdKMWw43NmXnFbgDTS8sebm", - "symbol": "CHUN", - "name": "A TECH GUY TOKEN", - "decimals": 9, - "logoURI": "https://www.mxp.tw/chun_profile_1024w.png", - "tags": ["social-token"], - "extensions": { - "website": "https://www.mxp.tw/" - } - }, - { - "chainId": 101, - "address": "4hNyREKAWNSHTtzfG7fbyzwYfSe5NiSpxYVuNvNBeMiU", - "symbol": "ASTROCOIN", - "name": "ASTROCOIN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4hNyREKAWNSHTtzfG7fbyzwYfSe5NiSpxYVuNvNBeMiU/logo.jpg", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/astro_token" - } - }, - { - "chainId": 101, - "address": "5Jd9xCy1ygc4BgBw8pqoXJbhjDeeVhnY4CbK6Mjccy5S", - "symbol": "RA", - "name": "Rafa", - "decimals": 0, - "logoURI": "https://alaanft.000webhostapp.com/Rafa.png", - "tags": ["nft", "utility-token"], - "extensions": { - "animationUrl": "https://i.imgur.com/I44AstZ.mp4", - "description": "For the loving memory of my childhood best friend, this token is to all Border Collies and dog lovers out there, may you stay awesome! ", - "imageUrl": "https://alaanft.000webhostapp.com/Rafa.png", - "website": "http://ingolds.hr/" - } - }, - { - "chainId": 101, - "address": "EzLFc5Koqjwq22c5nfyATZNuD5182ANVAGyrYjov3Uyy", - "symbol": "KDOLLAR", - "name": "Kappa Dollar", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EzLFc5Koqjwq22c5nfyATZNuD5182ANVAGyrYjov3Uyy/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "EDrHayuUVGenfojEEVqqB9mmn1gmbYkrM77WdDHqT2QM", - "symbol": "DLBASL", - "name": "DLBASL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/javiervq/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CLwUm2ZHJW8DrrDo1ZtprXR5w5Rxndbgc72vysaDVeBj", - "symbol": "MEOWL", - "name": "Catliens Whitelist Token", - "decimals": 0, - "logoURI": "https://cdn.discordapp.com/attachments/941805628354093118/954157558724190248/Silver_Platinum_Coin_Queen_Jubilee_Instagram_Post_1.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "2aeGdKy65j6t7di7annbckcJsTSg4EkpZnAcBbVCDRed", - "symbol": "AR", - "name": "Raffa", - "decimals": 0, - "logoURI": "https://alaanft.000webhostapp.com/logowhale.png", - "tags": ["nft"], - "extensions": { - "animationUrl": "https://i.imgur.com/LkjnWUY.mp4", - "description": "Whales are awesome", - "imageUrl": "https://alaanft.000webhostapp.com/Rafa.png", - "website": "https://www.gonewhalewatching.com/" - } - }, - { - "chainId": 101, - "address": "7axckcr2ZgtCDYsoNei7ssNRXRJeWyeZxrpS2Qf43xTq", - "symbol": "BUXM", - "name": "Buxon Mint", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7axckcr2ZgtCDYsoNei7ssNRXRJeWyeZxrpS2Qf43xTq/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/BuxonGroup" - } - }, - { - "chainId": 101, - "address": "6CEH3RdzsubHF94fRuU7DWGNh5XpatXmu6jqJnh7kqfM", - "symbol": "BUXX", - "name": "BUXX", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6CEH3RdzsubHF94fRuU7DWGNh5XpatXmu6jqJnh7kqfM/logo.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/BuxonGroup" - } - }, - { - "chainId": 101, - "address": "FV66ygXAXXs556MQrofx89y2WUGt4G1NWBXL9BZGi7kF", - "symbol": "ATGY", - "name": "A TECH GUY Token for FUN", - "decimals": 9, - "logoURI": "https://www.mxp.tw/ATGY.png", - "tags": ["social-token"], - "extensions": { - "facebook": "https://www.facebook.com/a.tech.guy", - "website": "https://www.mxp.tw/" - } - }, - { - "chainId": 101, - "address": "Heart9dqPteF9TBSReDeqAQ6bFJ61Hsm2zRGTyY2H1QD", - "symbol": "HoC", - "name": "Heart of Corruption", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Heart9dqPteF9TBSReDeqAQ6bFJ61Hsm2zRGTyY2H1QD/logo.png", - "tags": ["social-token"], - "extensions": { - "description": "Heart of Corruption is an holder exclusive token used to mint the Faces of the Village collection", - "discord": "https://discord.gg/27Nr25PQd2", - "twitter": "https://twitter.com/villageofsol", - "website": "https://villageofsol.com/" - } - }, - { - "chainId": 102, - "address": "8kvmAyTwZNCHRxSjbw12jiRAzkfhMTCWaBoSrAR1K7zT", - "symbol": "BCT", - "name": "BC Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8kvmAyTwZNCHRxSjbw12jiRAzkfhMTCWaBoSrAR1K7zT/logo.png" - }, - { - "chainId": 101, - "address": "CcaKx6adqp8wDeksiR15x8HMgBzjz8QY6pJCmRZQPXAB", - "symbol": "HAY", - "name": "SLA Hay Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CcaKx6adqp8wDeksiR15x8HMgBzjz8QY6pJCmRZQPXAB/Hay.png", - "tags": ["utility-token"], - "extensions": { - "instagram": "https://www.instagram.com/secretllamaagency/", - "tiktok": "https://www.tiktok.com/@secretllamaagency", - "twitter": "https://twitter.com/SecretLlama_A", - "website": "https://secretllamaagency.com/" - } - }, - { - "chainId": 101, - "address": "7Lj9HzsNJxaRfKWv5MBHY9CBy9wwXAqqT5AhWJqRNw5b", - "symbol": "MTI", - "name": "MTI token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/fabioraf2/logo/main/mti.png", - "tags": ["social-token"], - "extensions": { - "description": "Token for Minas Tecnologia e Inovação Hub", - "website": "https://mti.work/" - } - }, - { - "chainId": 101, - "address": "8TTiv4CHzCQH5mqgr9mxJ377De6RbtCeEKaup8kcS3JN", - "symbol": "BDRAYDAO", - "name": "Baby DAO Guarantee Mint Token", - "decimals": 1, - "logoURI": "https://raw.githubusercontent.com/benpazzo/babydraygon/main/img/daomint.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9YEt7cMNovKvytcbnJzaJ2kQsqTwhHCBwgTZ13TYXDPS", - "symbol": "BDRAY", - "name": "Baby Presale Non-Guarantee Mint Token", - "decimals": 1, - "logoURI": "https://raw.githubusercontent.com/benpazzo/babydraygon/main/img/presalemint.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FPLLD7wUku1wJsLc3MkGzY6jtpYvSDiNiQEUhkmSd385", - "symbol": "DOPEX", - "name": "DopeX Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/PumpsCEO/DOPE/main/DOPETOKEN%20BLK%20BG.png", - "tags": ["utility-token"], - "extensions": { - "description": "DopeX Token By Dope Labs", - "discord": "https://discord.gg/FmmQJ2Xg9U", - "twitter": "https://twitter.com/dope_cats", - "website": "http://dopecats.com/" - } - }, - { - "chainId": 101, - "address": "Ef9wCq6NqTeU9hQprvX2FesUCVYbueCAQkjsWPNBmjw7", - "symbol": "KHRC", - "name": "Khurana Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/roaringsundew40/KHRC/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2PoFDNtZEzr1bXQYVGtQYJWEPk65wg8nDHKF4BAPt7Ur", - "symbol": "PATRIOT", - "name": "Patriot Token WWG1WGA", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/JaySheepdog-N0SR/patriot/main/patriot.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "48FCZmKZw3iJcvuAMMShWRSimJ9DN2BBN4exgRpTp5WG", - "symbol": "TRIT", - "name": "Trit", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/48FCZmKZw3iJcvuAMMShWRSimJ9DN2BBN4exgRpTp5WG/logo.png", - "extensions": { - "serumV3Usdc": "5SWZF5PpQcMhVDFduXVGApmvdHNPJRhzYEq3EgbtkvkZ", - "website": "https://trit.hr" - } - }, - { - "chainId": 101, - "address": "5HZ9z4mHuA8WDoobLQY9hrag28p3k9TpEwRzRstVfzA7", - "symbol": "NBL", - "name": "NOBLELIFE", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5HZ9z4mHuA8WDoobLQY9hrag28p3k9TpEwRzRstVfzA7/nbl.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://noblelife.mx" - } - }, - { - "chainId": 101, - "address": "HDutUmTAGspwyw9EqNMgDc8XQVC41iT9Yd3a5JXBa5JY", - "symbol": "NWL", - "name": "DYORNERD WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HDutUmTAGspwyw9EqNMgDc8XQVC41iT9Yd3a5JXBa5JY/logo.png" - }, - { - "chainId": 101, - "address": "3yjCHAThuRTU8vFctU51ept4esSra5aneN9ZqZmQwjWr", - "symbol": "TACOS", - "name": "TACOS", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3yjCHAThuRTU8vFctU51ept4esSra5aneN9ZqZmQwjWr/logo.png", - "tags": ["social-token", "DeFi", "Latinx", "Metaverse", "Tacos"], - "extensions": { - "twitter": "https://twitter.com/cryptolucha", - "website": "https://www.getcryptolucha.com" - } - }, - { - "chainId": 101, - "address": "paRVg2mUvj6jD3h2moNiwLPHVgfitYY9hKkngWhutSD", - "symbol": "B-onus", - "name": "B-onus", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/williamzhu1/assets/main/letter_B_red-512.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "AhVG8VXPjJ37upEg9Wp9FAMHFHwvYBhNrz6cPjtDc2MV", - "symbol": "FKC", - "name": "FUNKYCOIN", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AhVG8VXPjJ37upEg9Wp9FAMHFHwvYBhNrz6cPjtDc2MV/logo.png", - "tags": ["utility-token", "social-token"], - "extensions": { - "website": "https://funkysquad.io" - } - }, - { - "chainId": 101, - "address": "GcqzvKiNCJHLzBmTbx3bYCT8jbfCAJRb3K7Xy3bMncWS", - "symbol": "DKY", - "name": "Dicky Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ghenry22/dicky_coin/master/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8kvmAyTwZNCHRxSjbw12jiRAzkfhMTCWaBoSrAR1K7zT", - "symbol": "BCT", - "name": "BC Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8kvmAyTwZNCHRxSjbw12jiRAzkfhMTCWaBoSrAR1K7zT/logo.png" - }, - { - "chainId": 102, - "address": "yhffC3as8d3tvR2HeNQMrccii7NDydUVu9gaRoe8ZR9", - "symbol": "HTT", - "name": "HT Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/yhffC3as8d3tvR2HeNQMrccii7NDydUVu9gaRoe8ZR9/logo.png" - }, - { - "chainId": 101, - "address": "TKMKgSh3aADsmjr4yFWG52tkCQvmDxsQC1he1aBsi65", - "symbol": "TKMK", - "name": "TOKAMAK ON SOLANA", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/TKMKgSh3aADsmjr4yFWG52tkCQvmDxsQC1he1aBsi65/logo.png", - "tags": ["community-token", "nft", "dao"], - "extensions": { - "description": "TOKAMAK - REACTOR OF SOLANA ECOSYSTEM", - "telegram": "https://t.me/tokamaksolana", - "twitter": "https://twitter.com/tokamak_solana", - "website": "https://tkmksolana.gitbook.io/tokamak_token/" - } - }, - { - "chainId": 101, - "address": "2ejweV8NPa1u29cKU8FERiBwCMMNaPxVzhj5Zu9PFK2H", - "symbol": "CLMT", - "name": "Cursed Labs Micro Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2ejweV8NPa1u29cKU8FERiBwCMMNaPxVzhj5Zu9PFK2H/img.png", - "tags": ["social-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/cursedlabs", - "website": "http://cursedlabs.io/" - } - }, - { - "chainId": 101, - "address": "DrHuWWAwwXoQVaRZwLuHMSLjs7XmNCgoYAS6Xcp2HKRc", - "symbol": "RUBY", - "name": "RubySol", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/KILL3MALL/Medusa-Token/main/IMG_18032022_110957_(320_x_320_pixel).png", - "tags": ["defi-token", "utility-token", "payment-token"] - }, - { - "chainId": 101, - "address": "CogFXXLHaTPwZMid55TaRLeC8FXyfVaREbNCoVVMCoin", - "symbol": "CCWL", - "name": "Cogent Cog Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CogFXXLHaTPwZMid55TaRLeC8FXyfVaREbNCoVVMCoin/logo.png" - }, - { - "chainId": 101, - "address": "EXpbL35F8ZQQgTpMLdgWyvs24iPDP5eH1Vsn6sYn1gn1", - "symbol": "VXPL", - "name": "Vexpol", - "decimals": 1, - "logoURI": "https://raw.githubusercontent.com/PolRex/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8jYGq3o5Ruyu3eeuGpgWJUADsFzNN2vnGrBzYC2v7c7r", - "symbol": "CUNT", - "name": "CUNT", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8jYGq3o5Ruyu3eeuGpgWJUADsFzNN2vnGrBzYC2v7c7r/logo.png", - "tags": ["social-token", "community-token", "utility-token"] - }, - { - "chainId": 101, - "address": "6j5jjCmKrg27tHwzWLW2DsdmcF8YsMnbiZB7j5AWk6J4", - "symbol": "DJLC", - "name": "DennisJLipps Coin", - "decimals": 1, - "logoURI": "https://raw.githubusercontent.com/dennislipps/crypto/main/cryptocoinlogodjl.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Em6bmzFRYZze7M7bnX42Ea93qTfwQwXQnHpVdzu5UJ6p", - "symbol": "FLUME", - "name": "Flume", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Em6bmzFRYZze7M7bnX42Ea93qTfwQwXQnHpVdzu5UJ6p/flume.png", - "extensions": { - "twitter": "https://twitter.com/flumefinancesol", - "website": "https://flume.fi/" - } - }, - { - "chainId": 101, - "address": "5xuHBKN8QvcZKvwWcKUrcBN5DtnEuuydc6e1FP2NvK5p", - "symbol": "FKPT", - "name": "Fuck Putin Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SolanaTokenMerger/Fuck-Putin-Coin/main/logo.png", - "tags": ["social-token", "utility-token", "meme-token", "FuckPutin-token"] - }, - { - "chainId": 102, - "address": "AET68bw2PfDf7egoiNkzyjax8StLfBm5RgZGKt7u34jR", - "symbol": "AET", - "name": "Aeto", - "decimals": 9, - "logoURI": "https://i.hizliresim.com/piw38my.png" - }, - { - "chainId": 101, - "address": "5Q7B6Eh22vQC9pmNekJmRq6qn1fhgEnm7ncYAEt6c3gT", - "symbol": "CADZ", - "name": "Control Alt Delete", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/Emptyinbox/Crypto/main/crypto.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AET68bw2PfDf7egoiNkzyjax8StLfBm5RgZGKt7u34jR", - "symbol": "AET", - "name": "Aeto", - "decimals": 9, - "logoURI": "https://i.hizliresim.com/piw38my.png" - }, - { - "chainId": 101, - "address": "2H5iahGjAaWtPW9r2zXEQRTsCpsU9RsjUHu3QNbJLwjr", - "symbol": "RMTO", - "name": "The Rare Main Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/CryptoDevSol/Crypto/main/Coin_R.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "MXTzb9Pns2oJNHYcsvKqp9ybZnvF4XZDETzuBnBmitp", - "symbol": "MKWL", - "name": "Meka X WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/MXTzb9Pns2oJNHYcsvKqp9ybZnvF4XZDETzuBnBmitp/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GjdreVe7iUG4hyESSweGyFzgekWufhEwGJqAaa1hr7pf", - "symbol": "WATT", - "name": "WATT token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GjdreVe7iUG4hyESSweGyFzgekWufhEwGJqAaa1hr7pf/logo.png", - "tags": ["stablecoin", "utility-token", "community-token", "meme-token"], - "extensions": { - "description": "The WATT token is fixed to an external asset class, e.g. The total development cost to produce 1 Watt of solar powered energy based in the USA, in US Dollars", - "github": "https://github.com/SnaZish/SnaZish", - "reddit": "https://www.reddit.com/r/WATTtoken", - "telegram": "https://t.me/WATTtoken", - "twitter": "https://twitter.com/WATT_token", - "website": "https://www.snazish.com" - } - }, - { - "chainId": 101, - "address": "E9FSQGfrLwcdDdNiaD8Chtfdsom91AB5197SY2Ugo8Ge", - "symbol": "DVK", - "name": "Divocakos", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/alco139/logo/master/communityIcon_lpv78zqg0mo71.png" - }, - { - "chainId": 101, - "address": "EiRkPVW35RizH1M13zvCmsNV8WCQtRpqv9GLdwf6xGvz", - "symbol": "DICK", - "name": "Bag of Dicks", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EiRkPVW35RizH1M13zvCmsNV8WCQtRpqv9GLdwf6xGvz/logo.png", - "tags": ["social-token", "community-token", "utility-token"] - }, - { - "chainId": 101, - "address": "mvczhpXam2GFTaHMA7dnvgcsSXSXQnbcv6V76KWpqEs", - "symbol": "MVCC", - "name": "Metavillage Club Council Token", - "decimals": 0, - "logoURI": "https://arweave.net/AytjvRhPwEjSFxcnWXQySq79as0VXFXFuxZvOtXBWN8", - "tags": ["utility-token", "dao-token"], - "extensions": { - "twitter": "https://twitter.com/MetavillageClub", - "website": "https://metavillageclub.com/" - } - }, - { - "chainId": 101, - "address": "MVCFgjnh9jrqq8WKsw32EPMSW996r4Td89fSceoq9RU", - "symbol": "MVCLUB", - "name": "Metavillage Club Membership Token", - "decimals": 2, - "logoURI": "https://arweave.net/AytjvRhPwEjSFxcnWXQySq79as0VXFXFuxZvOtXBWN8", - "tags": ["utility-token", "dao-token"], - "extensions": { - "twitter": "https://twitter.com/MetavillageClub", - "website": "https://metavillageclub.com/" - } - }, - { - "chainId": 101, - "address": "9ieBBvyYFnQuuC6XxQ2z4WHhog6cmNmPemYgCWL5k2AH", - "symbol": "MOTO", - "name": "Monster", - "decimals": 0, - "logoURI": "https://arwave.art/1XfRXOj7ytymPOGrgZuq47T-nqu-1NVwh3EXdaYgvpg/i7gjwb.jpg", - "tags": ["nft"], - "extensions": { - "animationUrl": "https://i.imgur.com/LkjnWUY.mp4", - "description": "Motorcycle club, 2022", - "imageUrl": "https://arwave.art/1XfRXOj7ytymPOGrgZuq47T-nqu-1NVwh3EXdaYgvpg/i7gjwb.jpg" - } - }, - { - "chainId": 101, - "address": "9KWtmvoCwb65YZPggmFxb82ekBKFJ7YEzzxB5YVzafYM", - "symbol": "CHIP", - "name": "Solana Devices Chip", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9KWtmvoCwb65YZPggmFxb82ekBKFJ7YEzzxB5YVzafYM/logo.png", - "tags": ["social-token", "community-token", "utility-token", "dao-token"], - "extensions": { - "twitter": "https://twitter.com/DevicesSolana", - "website": "https://solanadevices.com/" - } - }, - { - "chainId": 101, - "address": "E8iucdmeQP3LaJqsfKCUE9u8yD7X45PApKSpcoeoya3C", - "symbol": "CARMC", - "name": "CARMA COIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/esco213/crypt/main/CC_LOGO.png", - "tags": ["social-token", "Utility-Token", "Community-Token"] - }, - { - "chainId": 101, - "address": "WLZna3K4SaDxf7ouEweCpXwEEt7g3qJ9ims1bm4CrYs", - "symbol": "$WLZ", - "name": "Wasted Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WLZna3K4SaDxf7ouEweCpXwEEt7g3qJ9ims1bm4CrYs/logo.png", - "tags": ["NFT", "utility-token"], - "extensions": { - "discord": "https://discord.com/invite/wastelanderz", - "twitter": "https://twitter.com/wastelanderznft", - "website": "https://wastelanderz.com" - } - }, - { - "chainId": 103, - "address": "keyNTP5sGmETNyf1hk8GqG31UU7t53S7onj2HKHodFh", - "symbol": "SCKEY", - "name": "Solforest Castle Key", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/keyNTP5sGmETNyf1hk8GqG31UU7t53S7onj2HKHodFh/solf.svg", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/YTa38dYvMC", - "instagram": "https://www.instagram.com/solomonsforest/", - "medium": "https://solforest.medium.com/", - "telegram": "https://t.me/solforest", - "twitter": "https://twitter.com/solcastlenft", - "website": "https://solforest.games" - } - }, - { - "chainId": 101, - "address": "keyNTP5sGmETNyf1hk8GqG31UU7t53S7onj2HKHodFh", - "symbol": "SCKEY", - "name": "Solforest Castle Key", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/keyNTP5sGmETNyf1hk8GqG31UU7t53S7onj2HKHodFh/solf.svg", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/YTa38dYvMC", - "instagram": "https://www.instagram.com/solomonsforest/", - "medium": "https://solforest.medium.com/", - "telegram": "https://t.me/solforest", - "twitter": "https://twitter.com/solcastlenft", - "website": "https://solforest.games" - } - }, - { - "chainId": 101, - "address": "CBudQApyvYRAFPt6fHqVztf9UraSZwfgepNDzM7g7P5h", - "symbol": "AKGK", - "name": "AngryKittyG", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/billbartbud/crypto-id/main/AngryKittyG.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5nfqJfG8wzXx7myjX8k5gHeP3mDJK1EBi4Xrhn28kcCy", - "symbol": "SKAZ", - "name": "Skitter Koin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SpikerAZ61/Crypto/main/SkittersAZ.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "A2TBEDnxc1uwQc3W45odTvHebBdHxB1SS3fxqbwGJdK9", - "symbol": "DIVE", - "name": "DIVE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/A2TBEDnxc1uwQc3W45odTvHebBdHxB1SS3fxqbwGJdK9/logo.png", - "tags": ["community-token", "social-token"], - "extensions": { - "description": "A bad dive, better than a good day at work.", - "twitter": "https://twitter.com/OzDive" - } - }, - { - "chainId": 101, - "address": "86aZvB8vbdHVkkFz72gAdM3iWi9H74n8oQUq4PQEVccu", - "symbol": "DENT", - "name": "DentalCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/happytheclam/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 102, - "address": "DKMJPcro48BkoJjZNzyqc8hSxiiForzpTbQcMsDSoks6", - "symbol": "SQUID", - "name": "Red Squid", - "decimals": 0, - "logoURI": "https://avatars.githubusercontent.com/u/99765025", - "tags": ["beer-token", "collectibles"] - }, - { - "chainId": 101, - "address": "GE7gd8QvbgRH82D5Zy4vPk76VLuXmiN3pNSD2PL9Rj4s", - "symbol": "LAYAN", - "name": "Layan Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Ultimateminds/ultimateminds/main/Layan-1.png", - "tags": ["social-token", "collectibles"] - }, - { - "chainId": 101, - "address": "F7sFF53SJiPmFCE9rAiFeP6Mmz1Ejtvh1vu7j6mBMZpS", - "symbol": "CUNTS", - "name": "CUNTS COIN", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/F7sFF53SJiPmFCE9rAiFeP6Mmz1Ejtvh1vu7j6mBMZpS/logo.png", - "tags": ["community-token", "social-token"], - "extensions": { - "description": "Its a new MONEY" - } - }, - { - "chainId": 101, - "address": "76852YV7cVHtcu3R9zwixyk5XWED56ViYitCVSWuGKBT", - "symbol": "$KKC", - "name": "Kempton Krew Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Dakkz/Crypto/main/!.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 103, - "address": "seedG7Nc6VMdTzeKxhFxdNaBRUVzGFaJqcKFqgCKdtp", - "symbol": "SEED", - "name": "Solforest SEED", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/seedG7Nc6VMdTzeKxhFxdNaBRUVzGFaJqcKFqgCKdtp/solf.svg", - "tags": ["utility-token", "game-token", "game-currency"], - "extensions": { - "discord": "https://discord.gg/YTa38dYvMC", - "instagram": "https://www.instagram.com/solomonsforest/", - "medium": "https://solforest.medium.com/", - "telegram": "https://t.me/solforest", - "twitter": "https://twitter.com/solcastlenft", - "website": "https://solforest.games" - } - }, - { - "chainId": 102, - "address": "seedG7Nc6VMdTzeKxhFxdNaBRUVzGFaJqcKFqgCKdtp", - "symbol": "SEED", - "name": "Solforest SEED", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/seedG7Nc6VMdTzeKxhFxdNaBRUVzGFaJqcKFqgCKdtp/solf.svg", - "tags": ["utility-token", "game-token", "game-currency"], - "extensions": { - "discord": "https://discord.gg/YTa38dYvMC", - "instagram": "https://www.instagram.com/solomonsforest/", - "medium": "https://solforest.medium.com/", - "telegram": "https://t.me/solforest", - "twitter": "https://twitter.com/solcastlenft", - "website": "https://solforest.games" - } - }, - { - "chainId": 101, - "address": "seedG7Nc6VMdTzeKxhFxdNaBRUVzGFaJqcKFqgCKdtp", - "symbol": "SEED", - "name": "Solforest SEED", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/seedG7Nc6VMdTzeKxhFxdNaBRUVzGFaJqcKFqgCKdtp/solf.svg", - "tags": ["utility-token", "game-token", "game-currency"], - "extensions": { - "discord": "https://discord.gg/YTa38dYvMC", - "instagram": "https://www.instagram.com/solomonsforest/", - "medium": "https://solforest.medium.com/", - "telegram": "https://t.me/solforest", - "twitter": "https://twitter.com/solcastlenft", - "website": "https://solforest.games" - } - }, - { - "chainId": 103, - "address": "1eafKP3mrB9SHnmZRxXksyM1kqhDKSctqZp4r8npiGL", - "symbol": "LEAF", - "name": "Solforest LEAF", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/1eafKP3mrB9SHnmZRxXksyM1kqhDKSctqZp4r8npiGL/solg.svg", - "tags": ["utility-token", "game-token", "game-currency"], - "extensions": { - "discord": "https://discord.gg/YTa38dYvMC", - "instagram": "https://www.instagram.com/solomonsforest/", - "medium": "https://solforest.medium.com/", - "telegram": "https://t.me/solforest", - "twitter": "https://twitter.com/solcastlenft", - "website": "https://solforest.games" - } - }, - { - "chainId": 102, - "address": "1eafKP3mrB9SHnmZRxXksyM1kqhDKSctqZp4r8npiGL", - "symbol": "LEAF", - "name": "Solforest LEAF", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/1eafKP3mrB9SHnmZRxXksyM1kqhDKSctqZp4r8npiGL/solg.svg", - "tags": ["utility-token", "game-token", "game-currency"], - "extensions": { - "discord": "https://discord.gg/YTa38dYvMC", - "instagram": "https://www.instagram.com/solomonsforest/", - "medium": "https://solforest.medium.com/", - "telegram": "https://t.me/solforest", - "twitter": "https://twitter.com/solcastlenft", - "website": "https://solforest.games" - } - }, - { - "chainId": 101, - "address": "1eafKP3mrB9SHnmZRxXksyM1kqhDKSctqZp4r8npiGL", - "symbol": "LEAF", - "name": "Solforest LEAF", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/1eafKP3mrB9SHnmZRxXksyM1kqhDKSctqZp4r8npiGL/solg.svg", - "tags": ["utility-token", "game-token", "game-currency"], - "extensions": { - "discord": "https://discord.gg/YTa38dYvMC", - "instagram": "https://www.instagram.com/solomonsforest/", - "medium": "https://solforest.medium.com/", - "telegram": "https://t.me/solforest", - "twitter": "https://twitter.com/solcastlenft", - "website": "https://solforest.games" - } - }, - { - "chainId": 101, - "address": "9DjTxoKXncspneakW4KmVcEaZCiYfu9osJQupPKMnFgu", - "symbol": "$GBV", - "name": "GBV Coin", - "decimals": 9, - "logoURI": "https://github.com/trungnguyentech/token-list/blob/main/assets/mainnet/9DjTxoKXncspneakW4KmVcEaZCiYfu9osJQupPKMnFgu/logo.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "3NPzABxRSuxM86XtqTXizc2noY7VRA9ZqqSfGUnQoK96", - "symbol": "AHT", - "name": "Albert Heijn Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/dave-vd/ah-c/main/Albert_Heijn_logo_ah.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "KinDesK3dYWo3R2wDk6Ucaf31tvQCCSYyL8Fuqp33GX", - "symbol": "KIN", - "name": "KIN", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/kinXdEcpDQeHPEuQnqmUgtYykqKGVFq6CeVX5iAHJq6/logo.png", - "extensions": { - "coingeckoId": "kin" - } - }, - { - "chainId": 101, - "address": "CJhtP5E21BeALSLxpUoNmd2eGt616hoYcZV3hUpXGBHt", - "symbol": "Cutiepie", - "name": "Cutiepie", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/vox117/birthday/main/3211994.png", - "tags": ["Birthday", "Hama"] - }, - { - "chainId": 101, - "address": "B8M2yBkdHC2WDiVU9iDTxgiy31ojP4n8BoW5ERLwBBt1", - "symbol": "BADRAYDAO", - "name": "Baby DAOGuarantee Mint Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/benpazzo/babydraygon/main/img/daomint2.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6tC7i5aVU2Gw2Bdj3WdC4WKj2DXUt31DdHz3AEbBCxp5", - "symbol": "BADRAY", - "name": "Baby Presale Non-Guarantee Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/benpazzo/babydraygon/main/img/presalemint2.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FvkG9zijA1RNhy1hbidpgNgjJomZZw4igjPLKcBUq75u", - "symbol": "EXB", - "name": "exitB Service Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/exitbgmbh/exb-token-content/master/logo/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "3Ldy4b4VvPr4RKiPbZp2LvtgUvUpqEgWQKYHnFibNJaf", - "symbol": "FRZT", - "name": "friz Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/helifriz/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BtME1F4vvdtLhKE8ceUaPqQy6yZVTagPMAfcpCEhsXh1", - "symbol": "SLMENC", - "name": "solluminati x encrypted", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/r-00-tencrypted/solluminati-x-encrypted/main/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "ToSmQ75ydVzccTkzUKWxJYCpfXS9jwGLB8XBW49uGWF", - "symbol": "WL", - "name": "Solana Baby Bunny Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ToSmQ75ydVzccTkzUKWxJYCpfXS9jwGLB8XBW49uGWF/logo.png" - }, - { - "chainId": 101, - "address": "J8UegP7q46VB3QTpmdhrMd5z6EAaWdxpEjHja17w9fdV", - "symbol": "WHIRL", - "name": "WhirlPool Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/J8UegP7q46VB3QTpmdhrMd5z6EAaWdxpEjHja17w9fdV/logo.png", - "tags": ["Utility-Token", "NFT-Token", "Stake-Token"], - "extensions": { - "twitter": "https://twitter.com/WhirlPool_SOL" - } - }, - { - "chainId": 101, - "address": "BppidFqGTNbY87cSByYa4LmmTECBysFHKYMvoRukr4LC", - "symbol": "SCCR", - "name": "SCCR Coin", - "decimals": 6, - "logoURI": "https://solanasccr.com/wp-content/uploads/2022/01/SCCR-small.png", - "tags": ["NFT", "Farming"], - "extensions": { - "twitter": "https://twitter.com/SolanaApeSC", - "website": "https://solanasccr.com/" - } - }, - { - "chainId": 101, - "address": "FZGStjhDGiLCcA3CMFMK6Frdy49kWEN2ZfjaStZ4YPRK", - "symbol": "PERIS", - "name": "Perisanpeek Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DNmxHPgeVLSofyAriirHybKoNx1baM2ufiHKs1W7YyPc/logo.png", - "extensions": { - "discord": "https://discord.gg/TMQNCBNFTa" - } - }, - { - "chainId": 101, - "address": "AsybGxMxwi64XnHwB6oJAHoTzFH4HHHJNN595HVJuV1M", - "symbol": "solDUCO", - "name": "Duino-Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AsybGxMxwi64XnHwB6oJAHoTzFH4HHHJNN595HVJuV1M/duino.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/kvBkccy", - "instagram": "https://www.instagram.com/duino_coin_official", - "twitter": "https://twitter.com/DuinoCoin", - "website": "https://duinocoin.com" - } - }, - { - "chainId": 101, - "address": "MoNgFYzYQAY2pCYDkrHzbrcCauCUxJw6jVnk7iFk9Mz", - "symbol": "MONG", - "name": "Mongomon WL", - "decimals": 0, - "logoURI": "https://mongomons.com/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Mongomon WL Token", - "discord": "https://discord.gg/seAVXtPguU", - "twitter": "https://twitter.com/Mongomonsol", - "website": "https://mongomons.com" - } - }, - { - "chainId": 101, - "address": "BbKJYNf1Kdzr1rkhkeLetk2UqPYDvpfCA5VQoJkCCCvD", - "symbol": "TIM", - "name": "Time Is Money Token", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BbKJYNf1Kdzr1rkhkeLetk2UqPYDvpfCA5VQoJkCCCvD/timlogo.png", - "tags": ["Utility-Token", "NFT-Token"], - "extensions": { - "website": "https://timnft.io" - } - }, - { - "chainId": 102, - "address": "66AFaxB1NHNaRyjA1WfUEmdi4Ycy5uGbi6Tk5FmBsNK", - "symbol": "TANG", - "name": "Turbo Angel", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Sarkesuiser/turboangel/main/token/test/66AFaxB1NHNaRyjA1WfUEmdi4Ycy5uGbi6Tk5FmBsNK/logo.png", - "tags": ["NFT", "utility-token"] - }, - { - "chainId": 101, - "address": "F1ZWTneaTgXe5529SotdSr47ALQ772iRo5NQByoTGvRG", - "symbol": "WHAC", - "name": "Whitelist Access Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/F1ZWTneaTgXe5529SotdSr47ALQ772iRo5NQByoTGvRG/logo.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "HtbhBYdcfXbbD2JiH6jtsTt2m2FXjn7h4k6iXfz98k5W", - "symbol": "DKM", - "name": "DeadKnight Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HtbhBYdcfXbbD2JiH6jtsTt2m2FXjn7h4k6iXfz98k5W/dkmlogo.png", - "tags": ["Utility-Token", "Stake-Token"], - "extensions": { - "discord": "https://discord.gg/deadknightmetaverse", - "facebook": "https://www.facebook.com/deadknight.metaverse.nft", - "medium": "https://medium.com/deadknightmetaverse", - "reddit": "https://www.reddit.com/user/DEADKNIGHTOFFICIAL", - "telegram": "https://t.me/DeadKnightMeta_Official", - "telegramAnnouncements": "https://t.me/DeadKnightMeta_Ann", - "twitter": "https://twitter.com/DeadKnight_SOL", - "website": "https://deadknight.io", - "youtube": "https://www.youtube.com/channel/UCTzFwKLZ6uD8cWoJIMV9v7A" - } - }, - { - "chainId": 101, - "address": "CGdnAVQGqLT4nkk1H4XU69CGWVwMfEtxgjDCK6wcQUyZ", - "symbol": "MARR", - "name": "Marreta Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CGdnAVQGqLT4nkk1H4XU69CGWVwMfEtxgjDCK6wcQUyZ/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CgZipVXx81to76Cx27MFbzAAt4yvfxm11nxZKxVyetAg", - "symbol": "RTT", - "name": "Rescue Them Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CgZipVXx81to76Cx27MFbzAAt4yvfxm11nxZKxVyetAg/LogoRTT.png", - "tags": ["currency"], - "extensions": { - "discord": "https://discord.gg/pSWAvCQQ9m", - "instagram": "https://www.instagram.com/rescuethemnft", - "telegram": "https://t.me/rescuethemnftofficial", - "tiktok": "https://www.tiktok.com/@rescuethemnft", - "twitter": "https://twitter.com/RescueThemNFT" - } - }, - { - "chainId": 101, - "address": "2K56JYgSEMaUvh1RRWGeXJcU44rWGtVwDXzbBHu8sKXD", - "symbol": "HEX", - "name": "Hexagon Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2K56JYgSEMaUvh1RRWGeXJcU44rWGtVwDXzbBHu8sKXD/hexlogo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Just a simple six-sided token", - "twitter": "https://twitter.com/Hexagon_Coin" - } - }, - { - "chainId": 101, - "address": "6qQnzsoH89TWZirgZS9AJN3NrxS7Y4K7oNt5N93E6QDR", - "symbol": "PCPC", - "name": "PYROCHILL PYROCOIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/WayTo1Million/Pyrochill/main/Logof.png", - "tags": ["Utility-Token"] - }, - { - "chainId": 101, - "address": "6Y7euDj1RtvZvSHJKp25tPcVgx2oPG3MnfRc1vaWdQtA", - "symbol": "ANX", - "name": "TheAnomalix - WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6Y7euDj1RtvZvSHJKp25tPcVgx2oPG3MnfRc1vaWdQtA/anomalix.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/TheAnomalix", - "website": "https://www.theanomalix.com/" - } - }, - { - "chainId": 101, - "address": "E4DRAz5D9iMND9PJ7tq1HQbZPxavDWHxmeizUtk68o8S", - "symbol": "SAFE", - "name": "RadRugs", - "decimals": 6, - "logoURI": "https://radrugs.io/assets/images/token_logo.png", - "tags": ["utility-token", "stake-token"], - "extensions": { - "discord": "https://discord.gg/radrugs", - "twitter": "https://twitter.com/RadRugsNFT", - "website": "https://radrugs.io" - } - }, - { - "chainId": 101, - "address": "ZooMLdSMp4ZqxNJTfYua3AaJ9wqPpUAvygc4Q3QvrzH", - "symbol": "ZOOM", - "name": "Zaysan Raptors ZOOM WL", - "decimals": 9, - "logoURI": "https://imagizer.imageshack.com/img924/6098/0xp90o.jpg", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/ZaysanRaptors", - "website": "https://zaysanraptors.io/" - } - }, - { - "chainId": 101, - "address": "sunSBR8hRLZy13HCHdrT3hjJZVRpkVfXF3QaaJYjxZ2", - "symbol": "sunSBR", - "name": "sunSBR", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/sunSBR8hRLZy13HCHdrT3hjJZVRpkVfXF3QaaJYjxZ2/logo.svg", - "extensions": { - "website": "https://sunny.ag" - } - }, - { - "chainId": 101, - "address": "sunxSBRH867pEGc5D4UFR7D6RQULsmjkXZT3SQ8XqwS", - "symbol": "yiSunSBR", - "name": "yiSunSBR", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/sunxSBRH867pEGc5D4UFR7D6RQULsmjkXZT3SQ8XqwS/logo.svg", - "extensions": { - "website": "https://sunny.ag" - } - }, - { - "chainId": 101, - "address": "BaconSBRjNckjeQCi6E2Ndg8wSmAwPgmfmZnF6ZmyFhz", - "symbol": "baconSBR", - "name": "Bacon SBR (sunSBR Token of Appreciation)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BaconSBRjNckjeQCi6E2Ndg8wSmAwPgmfmZnF6ZmyFhz/logo.svg", - "extensions": { - "website": "https://sunny.ag" - } - }, - { - "chainId": 101, - "address": "HGYo7hi6zDz3sVghBtqNtF7xb4tzrUWTebs9sZ8QBnjZ", - "symbol": "BUGZ", - "name": "Duck Dudes Bugz", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HGYo7hi6zDz3sVghBtqNtF7xb4tzrUWTebs9sZ8QBnjZ/Logo.png", - "tags": ["utility-token", "stake-token"], - "extensions": { - "discord": "https://discord.gg/c6mHj6UHzG", - "twitter": "https://twitter.com/DuckDudes_NFT", - "website": "https://www.duckdudes.io/" - } - }, - { - "chainId": 101, - "address": "9cAuTGiGcaAt7jFymMHCKRKttEmEmHz2J95SyjesEgoZ", - "symbol": "RON", - "name": "RonCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/yeysus/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GBYQr9a6J742YJPzgRY2t9aJs4ZBg3qsTxxCNbpJwjLe", - "symbol": "Congress", - "name": "Sol Congress", - "decimals": 9, - "logoURI": "https://user-images.githubusercontent.com/55806764/159190877-0f4cfcaa-ec0c-4836-b253-c641d180b0b0.png", - "tags": ["dao-token"], - "extensions": { - "description": "Solmander Dao Token Swap", - "twitter": "https://twitter.com/solamandersnft" - } - }, - { - "chainId": 101, - "address": "HSjzhJe6zFMj4jV7WzdjXo8ZXSjiN7FsBkq5CZUWtJZa", - "symbol": "HIPE", - "name": "HIPE Token", - "decimals": 0, - "logoURI": "https://cdn.discordapp.com/attachments/603807467364941825/955273506302591026/CNR.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8MZhcpGk8NvzrybvZ31SMgUG4Fm6hkdYzLQRRHoiwvre", - "symbol": "LIFT", - "name": "Lift Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/EduardoNicoleit/token-list/main/assets/mainnet/8MZhcpGk8NvzrybvZ31SMgUG4Fm6hkdYzLQRRHoiwvre/logo.png", - "tags": ["utility"], - "extensions": { - "instagram": "https://www.instagram.com/fostermarketplace/", - "twitter": "https://twitter.com/fosternfts", - "website": "https://www.fostermarketplace.io/" - } - }, - { - "chainId": 101, - "address": "BWNsNmVXJX72xEwg6xCbPTnmpgHvyR17s9SjhmPKvMMk", - "symbol": "NGYU", - "name": "NGGYU Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/128U4NbjWptP3GTg1NdgDRdeGVZpiiqvTgdELffYngaR/cutekawalilogo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "CodeJ8UWDuAtD6EEqp9KZPaZYPKvttgkAg9qDkkewx85", - "symbol": "code", - "name": "code", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CodeJ8UWDuAtD6EEqp9KZPaZYPKvttgkAg9qDkkewx85/logo.png", - "tags": ["code"] - }, - { - "chainId": 101, - "address": "4F2yutcbkabE5MJoDvrDLa5U2re5HPABSCVKA7vqrKcH", - "symbol": "REJECT", - "name": "REJECT Token", - "decimals": 2, - "logoURI": "https://ri6fdpqu6asrle3koykcepmdyd6m5eu2sfwb34vjfoxl2cvb.arweave.net/ijxRvhTwJRWTanYUI-j2DwPzOkpqRbB3y-qSuuvQqhQ", - "tags": ["NFT", "utility-token"], - "extensions": { - "discord": "https://discord.gg/MonkeRejects", - "twitter": "https://twitter.com/MonkeRejects", - "website": "https://solmonkerejects.com/" - } - }, - { - "chainId": 101, - "address": "BwDSLozKTfoB4Zimx48coQrCRyKoEcCrzJ6hyoM499XD", - "symbol": "DAG", - "name": "DAG WL Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BwDSLozKTfoB4Zimx48coQrCRyKoEcCrzJ6hyoM499XD/logo.png", - "tags": ["nft-token"], - "extensions": { - "twitter": "https://twitter.com/DAG_Bartender" - } - }, - { - "chainId": 101, - "address": "6r3VeYKXv1GLEdskNzgNgtmSRwYzQdrVh9fDViaXfTeW", - "symbol": "MHWL", - "name": "MetaHelix WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6r3VeYKXv1GLEdskNzgNgtmSRwYzQdrVh9fDViaXfTeW/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/metahelix", - "twitter": "https://twitter.com/metahelixio", - "website": "https://metahelix.io/" - } - }, - { - "chainId": 101, - "address": "4h3RKVY2QYYseqDibRUe4aCq6xkfB8Tc9gw8y9mjciWk", - "symbol": "KWL", - "name": "KillerWL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solanacoder005/KillerWL/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "37JTDbcZfdJZcdBP9q1SYFB1o7fVZHUrkVKQEvjc1Kr5", - "symbol": "SRPT", - "name": "StarPunk Test", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/37JTDbcZfdJZcdBP9q1SYFB1o7fVZHUrkVKQEvjc1Kr5/logo.png", - "tags": ["fungible-token"], - "extensions": { - "twitter": "https://twitter.com/Hello_Starpad", - "website": "https://starpunk.io/" - } - }, - { - "chainId": 101, - "address": "49nyHUT4U1egBqyQ9D9WdmS4vDhN9syTeay74rp5iXRq", - "symbol": "ODYSSEUS-SOL", - "name": "Raydium LP Token (ODYSSEUS-SOL)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/49nyHUT4U1egBqyQ9D9WdmS4vDhN9syTeay74rp5iXRq/logo.png", - "tags": ["lp-token"], - "extensions": { - "website": "https://raydium.io" - } - }, - { - "chainId": 101, - "address": "EJuxV21M169aeHQzgtbyvtgmZH4rWcK2YPD1pGh6Wt77", - "symbol": "TWL", - "name": "TigerBeing Whitelist", - "decimals": 0, - "logoURI": "https://arweave.net/dtrMgdRPaWXCmfKHRB87aSvYDwGt3GAB3HC1cYWa7rk", - "tags": ["community-token"], - "extensions": { - "discord": "https://discord.com/invite/jXfANfzkFb", - "instagram": "http://instagram.com/tigerbeing_io", - "twitter": "https://twitter.com/tigerbeing_io", - "website": "https://tigerbeing.io/" - } - }, - { - "chainId": 101, - "address": "HQ48nDtrtn3mjPyYBZczq85kXMM2Mv8dyNYLPEvzREJA", - "symbol": "HIPE", - "name": "HIPE", - "decimals": 6, - "logoURI": "https://cdn.discordapp.com/attachments/603807467364941825/955273506302591026/CNR.png", - "tags": ["social-token"], - "extensions": { - "website": "http://bh-mall.com" - } - }, - { - "chainId": 101, - "address": "BoNgZThjDxHmPJYT4Pt9QXqhoA18SYCetciJYaM6UpKi", - "symbol": "BONG", - "name": "BONGHEAD WL PASS", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BoNgZThjDxHmPJYT4Pt9QXqhoA18SYCetciJYaM6UpKi/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/BongHeadsNFT", - "website": "https://bongheads.io/" - } - }, - { - "chainId": 101, - "address": "2PP82VASGfiAQajhFUg6QvcA1cUzganQGJ7ovDMv5FBN", - "symbol": "AHLO", - "name": "AhloCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/VivianDoesntCode/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BAMKCkryTSqb97AQgYc6YkdMV8gbNUmc7X3ZkQ4M7nTB", - "symbol": "SQR", - "name": "StarPunk Quasar", - "decimals": 0, - "logoURI": "https://meta-data.starpunk.io/quasar.png", - "tags": ["ultility-token"], - "extensions": { - "twitter": "https://twitter.com/Hello_Starpad", - "website": "https://starpunk.io/" - } - }, - { - "chainId": 101, - "address": "DipHAYHTE9ZAPfjQhXt9CAXMSABeRB6eYqk54A9TjkYZ", - "symbol": "TXC", - "name": "TecXra Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/alihaider123go/tecxra-token/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Ga1FE6vviZcUhnYWv1pdQHYt5geVq299hdcjfxigDBcJ", - "symbol": "UWC", - "name": "Underworld Cash", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Ga1FE6vviZcUhnYWv1pdQHYt5geVq299hdcjfxigDBcJ/logo.png", - "tags": ["utility-token", "social-token", "community-token", "nft-token"], - "extensions": { - "discord": "https://discord.gg/SolSnatchers", - "twitter": "https://twitter.com/SolSnatchersNFT", - "website": "https://solsnatchers.com/" - } - }, - { - "chainId": 101, - "address": "Tofo8GkHHUsQB7o8y4wk68A7vKHPUFo88YchqoD3yRC", - "symbol": "LLB-WL", - "name": "LoLaben Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Tofo8GkHHUsQB7o8y4wk68A7vKHPUFo88YchqoD3yRC/logo.jpg", - "tags": ["whitelist-token", "nfts"] - }, - { - "chainId": 101, - "address": "52Y1RGnRFvRFUQq5r2AWpFLLFvokiiqxRocsWVpmPTU4", - "symbol": "MHC", - "name": "Most Hyped Crypto", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/52Y1RGnRFvRFUQq5r2AWpFLLFvokiiqxRocsWVpmPTU4/logo.png", - "tags": ["governing-token"] - }, - { - "chainId": 101, - "address": "D8VVNvc6EmjHLJE1vgzZSyMEAH6CZvD3wVaeY6RZHuj8", - "symbol": "DTome", - "name": "Dark Tome", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/onuraladi/DarkTome/main/darktome.png", - "tags": ["utility-token", "community-token", "nft-token"], - "extensions": { - "discord": "https://discord.gg/sJfTBaY3K6", - "twitter": "https://twitter.com/AlderMages", - "website": "https://aldermages.com/" - } - }, - { - "chainId": 101, - "address": "8btg1akyvVNqkDjftALYMRDqG9QfWvS7sy96KpLAMZny", - "symbol": "VEXWL", - "name": "Vex Cheetahs WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/rabindrarajawat/arr-solana/main/vex.png", - "tags": ["nft"] - }, - { - "chainId": 101, - "address": "5uKRWeSpcQ7D1AZjXyx2MBX6MiTHaRkDm7BFXDo4ATxe", - "symbol": "OMC", - "name": "Om Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/code2029/crypto/main/123fv-vector-34007.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8Esjda8Tn9XGgLw55RLJzUYuM64fQM9NJuhVHW3RwbYZ", - "symbol": "CHIP", - "name": "CHIP (Solana Devices)", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8Esjda8Tn9XGgLw55RLJzUYuM64fQM9NJuhVHW3RwbYZ/logo.png", - "tags": ["social-token", "community-token", "utility-token", "dao-token"], - "extensions": { - "twitter": "https://twitter.com/DevicesSolana", - "website": "https://solanadevices.com/" - } - }, - { - "chainId": 101, - "address": "5bFvtLN3kP34sas77XvWgoY4b5CFjQ7qAUJsKUSomLUJ", - "symbol": "SDEVWL", - "name": "WL (Solana Devices)", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5bFvtLN3kP34sas77XvWgoY4b5CFjQ7qAUJsKUSomLUJ/logo.png", - "tags": ["community-token", "utility-token"], - "extensions": { - "website": "https://solanadevices.com/" - } - }, - { - "chainId": 101, - "address": "AgRxuSjKDsd1fqksuB5dNTwCzUzmJQ9fNBL129oN8qo6", - "symbol": "HAVOC", - "name": "HAVOC Token", - "decimals": 0, - "logoURI": "https://cdn.jsdelivr.net/gh//DDougies/images/DougFord-HAVOC-Logo.png", - "extensions": { - "twitter": "https://twitter.com/DDougies" - } - }, - { - "chainId": 101, - "address": "SPiXWTmxrrUAe8ukZ79Bz9zjY5L8kR1bQ4S51M4C83V", - "symbol": "SPIX", - "name": "SolanaPrime Index Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SPiXWTmxrrUAe8ukZ79Bz9zjY5L8kR1bQ4S51M4C83V/logo.png", - "tags": ["launchpad", "ido", "rewards", "index-pool"], - "extensions": { - "description": "SolanaPrime index token for staking rewards", - "discord": "https://discord.gg/FfDjmQJ9ZH", - "twitter": "https://twitter.com/solana_prime", - "website": "https://solanaprime.com/" - } - }, - { - "chainId": 101, - "address": "PRiME7gDoiG1vGr95a3CRMv9xHY7UGjd4JKvfSkmQu2", - "symbol": "PRIME", - "name": "SolanaPrime", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/PRiME7gDoiG1vGr95a3CRMv9xHY7UGjd4JKvfSkmQu2/logo.png", - "tags": ["launchpad", "ido", "staking", "utility"], - "extensions": { - "description": "SolanaPrime utility token", - "discord": "https://discord.gg/FfDjmQJ9ZH", - "twitter": "https://twitter.com/solana_prime", - "website": "https://solanaprime.com/" - } - }, - { - "chainId": 101, - "address": "NovNrxPNjmLVFscH5rjMbec7C4BdAHms9WK21xjsP3p", - "symbol": "NOVAX", - "name": "NOVAX", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/NovNrxPNjmLVFscH5rjMbec7C4BdAHms9WK21xjsP3p/clogo.png", - "extensions": { - "twitter": "https://twitter.com/the_cynova", - "website": "https://www.cynova.io/" - } - }, - { - "chainId": 101, - "address": "4LD1KiLYsWHYUScBQd2vdeh6Uecb7TTyGUxQAVoyCCZD", - "symbol": "DLVT", - "name": "DeliveryToken", - "decimals": 16, - "logoURI": "https://raw.githubusercontent.com/SamiRiok2/DeliveryToken/main/delivery%20token2.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HS6CLPoMXPjKRw8gysyetSE2Tw2ruBi9aMcam2GZ9K9x", - "symbol": "KAI", - "name": "Kaichi", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/GalacticEden/token-list/8d7d4f55397f9fb019d6f7a582cdb186e8f35baa/assets/mainnet/HS6CLPoMXPjKRw8gysyetSE2Tw2ruBi9aMcam2GZ9K9x/logo.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "DeTVa1BuxZDYvFtY315ZEZ9ddoe69wLzhLmxi9nhBxSF", - "symbol": "PJTT", - "name": "preJTTver0", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/catblue88/token-test/main/kitten0.png", - "tags": ["test-social-token"] - }, - { - "chainId": 101, - "address": "Fi85Mhb7oc3Gw2vtxrXDvZ7sef7i5kyrjMugRwxSMioC", - "symbol": "KARROT", - "name": "Karrot", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Karrottoken/Karrot/main/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "6kF36NhYT72ax4LvjBDRppa672tqQU6219vF5cD5UyR6", - "symbol": "SMY", - "name": "SammyToken", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6kF36NhYT72ax4LvjBDRppa672tqQU6219vF5cD5UyR6/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "KeeXNee3oU933sbyAo9A1H71zT4ZWZrdrSMxnfDgvMk", - "symbol": "KEEP", - "name": "Keeper", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/KeeXNee3oU933sbyAo9A1H71zT4ZWZrdrSMxnfDgvMk/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Be8mVzNjWutFuRNAdiTL7QiQ6paEidepc5UNBHM7f7jZ", - "symbol": "INR", - "name": "INR(D)", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Robby3082/test-token/main/inrd.jpeg", - "extensions": { - "medium": "https://medium.com/@INRDcoin", - "twitter": "https://twitter.com/INRDcoin" - } - }, - { - "chainId": 101, - "address": "CWyEdhdTbUaWJNKzX3NnE1t7oBq7rEihBs9y21HHxWxH", - "symbol": "BHGR", - "name": "Bahooger", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Bahooger/crypto/main/bahooger.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "E8KnxQFzRGbTWX4mhysYYQgoEs2iCpew73sLKTLKFHt9", - "symbol": "CHEWY", - "name": "Whookie the Whoodle", - "decimals": 0, - "logoURI": "https://github.com/aim-wealth/chew/blob/main/ChewyNFT%20(2).png", - "tags": ["nft"] - }, - { - "chainId": 101, - "address": "BWRc7FFKQwMvHqS2AHbG6VX1v4nSi9QgMHXD3vwc5aZp", - "symbol": "SPN", - "name": "Supernova", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Ethna123/Crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5LSdqtc5hjU4vRoxq1gPktndxQE4bkH3S7o9t47ZwRBe", - "symbol": "HR", - "name": "Haiser coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5LSdqtc5hjU4vRoxq1gPktndxQE4bkH3S7o9t47ZwRBe/logo.png", - "tags": ["Haiser-coin"] - }, - { - "chainId": 101, - "address": "ArMaNzqBWB4Ugz7DqQzchrB4oDnCi48rFDYSwdaJ33qQ", - "symbol": "ARMA", - "name": "The Armadillos Gen 2 WL Pass", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ArMaNzqBWB4Ugz7DqQzchrB4oDnCi48rFDYSwdaJ33qQ/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/TheArmadillos" - } - }, - { - "chainId": 101, - "address": "BFMdpkqN7ZSCxFu9PREb67cMNgv4gA6uuN4VquKXpjE7", - "symbol": "GoNPFM", - "name": "Gangs of New Pork Free Mint Ticket", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BFMdpkqN7ZSCxFu9PREb67cMNgv4gA6uuN4VquKXpjE7/logo.png", - "tags": ["presale", "utility-token", "whitelist-ticket"] - }, - { - "chainId": 101, - "address": "2x2KZjzegwyYzDioJc91cRGgXmnvhGYSXpSCjzq6LaMz", - "symbol": "LIOR", - "name": "Lior Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2x2KZjzegwyYzDioJc91cRGgXmnvhGYSXpSCjzq6LaMz/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BWFoHmS21RdS7mDZCptAye3qcKtZXgupNGLjprmScQ8r", - "symbol": "TCHN", - "name": "Technetium", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/technetist/crypto-technetium-logo/main/logo-technetium.png", - "tags": ["social-token"] - }, - { - "chainId": 102, - "address": "4BkjovMi18bewok4wadVGv22b8wewq88mw7GbUkJ2ETe", - "symbol": "SPEP", - "name": "PEPE Meme", - "decimals": 6, - "logoURI": "https://is3-ssl.mzstatic.com/image/thumb/Purple71/v4/3f/f4/c4/3ff4c46c-63c1-ed08-b711-d409d0e7e645/source/512x512bb.jpg", - "tags": ["fungible-token"] - }, - { - "chainId": 101, - "address": "CmF8ayabCdjMQRammrHR91iRHH3Y6XVTe2AtnZxPdzid", - "symbol": "GSWL", - "name": "Gangsta Swans WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/rabindrarajawat/arr-solana/main/gangstaswans.png", - "tags": ["nft"] - }, - { - "chainId": 101, - "address": "EXGqHqvKBs4Z1mCwhiGE7kT2TXGFirAjvQzPSQP8nvuw", - "symbol": "STAR", - "name": "Star Chain", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EXGqHqvKBs4Z1mCwhiGE7kT2TXGFirAjvQzPSQP8nvuw/logo.png" - }, - { - "chainId": 101, - "address": "9eUyxnMoPCM89z98TRJvkpFkLBtZbwphydLYHLwRNkJH", - "symbol": "RCR", - "name": "Recursion", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9eUyxnMoPCM89z98TRJvkpFkLBtZbwphydLYHLwRNkJH/logo.svg" - }, - { - "chainId": 101, - "address": "AZjFodHTbd8TQhhFujJAXLmaQpYwNEhYMTATbmwHQxi4", - "symbol": "JOLI", - "name": "Joli Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/JoliWoli/crypto/main/businesstux.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GuRdDYCNuykG28e77aFVD7gvwdeRqziBfQYdCdRqSVVS", - "symbol": "HNYG", - "name": "Honey Genesis Bee Droplet", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GuRdDYCNuykG28e77aFVD7gvwdeRqziBfQYdCdRqSVVS/logo.png", - "tags": ["utility-token", "solvent-droplet"], - "extensions": { - "discord": "https://discord.gg/thK8BCtQbM", - "github": "https://github.com/solventprotocol", - "medium": "https://medium.com/@solventprotocol", - "serumV3Usdc": "8s6vNyWzCynmXV8tpKfsRZFy2qRYwFA9uR31nA5d61mz", - "telegram": "https://t.me/solventprotocol", - "twitter": "https://twitter.com/solventprotocol", - "website": "https://solvent.xyz" - } - }, - { - "chainId": 101, - "address": "ENNuzbdv7MiT9fjg7ApC2Fyf2F67PWww5Trm6A7W1BSn", - "symbol": "QUACK", - "name": "QUACKOIN", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ENNuzbdv7MiT9fjg7ApC2Fyf2F67PWww5Trm6A7W1BSn/logo.png", - "tags": ["community", "token"], - "extensions": { - "twitter": "https://twitter.com/FFloateesNFT" - } - }, - { - "chainId": 101, - "address": "JCBSxd9TAecuG6JN68kSFgvUoLLWqpXaJH8VqFXrvjtj", - "symbol": "JCBS", - "name": "Jacobs", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/JCBSxd9TAecuG6JN68kSFgvUoLLWqpXaJH8VqFXrvjtj/logo.png", - "extensions": { - "website": "https://jcbscoin.com" - } - }, - { - "chainId": 101, - "address": "DQBaMSFBz4BF7r5TYEr5db25kKKhzKNWo8HSppX7tLZ3", - "symbol": "FOO", - "name": "Foogle", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DQBaMSFBz4BF7r5TYEr5db25kKKhzKNWo8HSppX7tLZ3/logo.png", - "tags": ["utility-token", "meta-verse", "community-token"] - }, - { - "chainId": 101, - "address": "66FLirmJtD13VMwCQywKZfa1TG97Zj182966zh63XERf", - "symbol": "sFFC", - "name": "staked FoneFanClub", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/danny8252/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "SLCLww7nc1PD2gQPQdGayHviVVcpMthnqUz2iWKhNQV", - "symbol": "SLCL", - "name": "Solcial token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SLCLww7nc1PD2gQPQdGayHviVVcpMthnqUz2iWKhNQV/logo.png", - "tags": ["social-token", "community-token", "utility-token", "nfts"], - "extensions": { - "blog": "http://blog.solcial.io/", - "coinmarketcap": "https://coinmarketcap.com/currencies/solcial/", - "description": "The first uncensorable, permissionless and truly open social network", - "discord": "https://discord.gg/solcial", - "telegram": "https://t.me/solcial", - "twitter": "https://twitter.com/solcialofficial", - "website": "https://solcial.io/" - } - }, - { - "chainId": 101, - "address": "FZiMRKG25BUgZQjgzizy775duZLKiEoPhsyYQaktvEed", - "symbol": "METAWL", - "name": "Metawares WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FZiMRKG25BUgZQjgzizy775duZLKiEoPhsyYQaktvEed/logo.png", - "tags": ["whitelist", "nft"] - }, - { - "chainId": 101, - "address": "7zmJ9hiA54py8HTgKtSjv9fVbX6HxwSqdGvMKSuzodWC", - "symbol": "METAPASS", - "name": "Metawares Redemption Pass", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7zmJ9hiA54py8HTgKtSjv9fVbX6HxwSqdGvMKSuzodWC/logo.png", - "tags": ["whitelist", "nft"] - }, - { - "chainId": 101, - "address": "AyJiCcYWA4b7u61FkY4RTawtbTd91r22cE1Wc6gAL5LS", - "symbol": "NUWA", - "name": "NUWA Rex Token", - "decimals": 3, - "logoURI": "https://media.discordapp.net/attachments/926535226820276264/954723796252753971/coin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HEyd4WBCBKeCWMsFx9rjDjzt72rsMzQ36CoP8GkCDj4T", - "symbol": "FFC", - "name": "FoneFanClub", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/danny8252/ffc/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DGjrbCznR8gviTJEswA5f6KZPU2JNHJseHqz16eW7nQq", - "symbol": "MUJ", - "name": "Mujib Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/iamrasheeq/MujibCoinCrypto/main/mujibCoinLogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7KKccqpnBYJUMBjuh6QY4h1sZvzp5XAgXnSvGEbci5W", - "symbol": "DDWL", - "name": "DDougies WL Token", - "decimals": 0, - "logoURI": "https://cdn.jsdelivr.net/gh//DDougies/images/DougFord-DD-Coin-Logo.png", - "extensions": { - "twitter": "https://twitter.com/DDougies" - } - }, - { - "chainId": 101, - "address": "BbdgdtrkdABiATqKUeFEx6Qmcwz6TTx3EjzDcNUC1bhU", - "symbol": "MONGUILOD", - "name": "Sir Monguilod Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mikim83/sir-monguilod-token/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "H85VKejRaDRGUoiKhpNyjC7RF2vtuztN51ztLGq6rgtt", - "symbol": "GC", - "name": "GameChangers", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/H85VKejRaDRGUoiKhpNyjC7RF2vtuztN51ztLGq6rgtt/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "WLHhNcW169NyPwUooRBh1jkXf5C2hHY2WjNY4ASfPEC", - "symbol": "LIMWL", - "name": "Lost in Metaverse WL1", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/r4h01/LostInMetaverse/main/assets/LIM.png" - }, - { - "chainId": 101, - "address": "4ANPmEsoZ24EjrvXP7Z7vfjqEgBm7G8Ex5ccZ23t9xiA", - "symbol": "JHRC", - "name": "JacobsCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jacobhreed/crypto/main/J-logos_transparent_ccexpress.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "86stxk9NfjwHyfHaMTRS6DftzZoq33Usf1KbWZS42XBs", - "symbol": "BUBBA", - "name": "Bubba Chimp Crew TOKEN", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/Randomkushh/assets/master/tokens/solana/bubba/bubba%20token.png", - "extensions": { - "twitter": "https://twitter.com/BubbaChimps_NFT" - } - }, - { - "chainId": 101, - "address": "FCP14kyGeg9BYfBUZFtcEAt5sLe7BfyjLvBoqnL2WcQV", - "symbol": "DAFM", - "name": "Doomed Free Mint", - "decimals": 0, - "logoURI": "https://mint.thearmadillos.io/da-freemint-token.jpg", - "tags": ["whitelist", "nft"] - }, - { - "chainId": 101, - "address": "PSPdfYZVDrrYaWh5F7XDdQPeMPsLpisnE5VD4E3JGtp", - "symbol": "DWLT", - "name": "Doomed WL Token", - "decimals": 0, - "logoURI": "https://mint.thearmadillos.io/da-presale-token.jpg", - "tags": ["whitelist", "nft"] - }, - { - "chainId": 101, - "address": "PPTfK8sQwH5485Fvjg5edAFG3aoQdEhxaTe9kthhTy6", - "symbol": "PPWLT", - "name": "Pixxel Parrots Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/PPTfK8sQwH5485Fvjg5edAFG3aoQdEhxaTe9kthhTy6/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4SsBoLmKGWdVWfuJ5DU1TmM2BxxWBx44eMDuh6nhYgHf", - "symbol": "$SHILLS", - "name": "Solana Hills", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/CMHayden/crypto/master/solanahills.png", - "tags": ["social-token"], - "extensions": { - "twitter": "https://twitter.com/solanahills" - } - }, - { - "chainId": 101, - "address": "8TWt7HSKJXwiD5C9k1CqTQFT6ieNFdJvFAwWf46EcHa3", - "symbol": "JAWN", - "name": "JawnCoin", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8TWt7HSKJXwiD5C9k1CqTQFT6ieNFdJvFAwWf46EcHa3/jawncoin.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "GdVYQYnYV8zNFuQcMMEb1RQFBR14mdJUVVWHVTzU3AHq", - "symbol": "ZOKER", - "name": "Zoker", - "decimals": 9, - "logoURI": "https://media.zoker.com/media/logo.png", - "tags": ["game-token", "meta-verse", "nft-token"], - "extensions": { - "twitter": "https://twitter.com/ZokerGame", - "website": "https://zoker.com" - } - }, - { - "chainId": 101, - "address": "ratioMVg27rSZbSvBopUvsdrGUzeALUfFma61mpxc8J", - "symbol": "RATIO", - "name": "Ratio Governance Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ratioMVg27rSZbSvBopUvsdrGUzeALUfFma61mpxc8J/logo.svg", - "extensions": { - "telegram": "https://t.me/ratiofinance", - "twitter": "https://twitter.com/RatioFinance", - "website": "https://ratio.finance/" - } - }, - { - "chainId": 101, - "address": "Bt8vnAZYaTBcoF4i6K8ANuuKwLbzbPUF1c7g6an6KKJt", - "symbol": "ICY", - "name": "Icury token", - "decimals": 0, - "logoURI": "https://github.com/MoneshROR/icury_token/blob/main/logo.png", - "tags": ["icury-token"] - }, - { - "chainId": 101, - "address": "4o3j9LaMoxrxvk1BB8QaRPT62RHguUUZ1bmHJ1M2msVk", - "symbol": "CHWY", - "name": "Chewbacca the Whoodle", - "decimals": 0, - "logoURI": "https://github.com/aim-wealth/public/blob/main/Chewbacca%20the%20Whoodle.png", - "tags": ["nft"] - }, - { - "chainId": 101, - "address": "SMKfVDwViTiwuQkwaZdwUkvq2MXyxF75UXaYkFPfgPG", - "symbol": "SMK", - "name": "SMK", - "decimals": 9, - "logoURI": "https://imagizer.imageshack.com/img923/9223/l8sa9k.png", - "extensions": { - "twitter": "https://twitter.com/SamuraiMkeys" - } - }, - { - "chainId": 101, - "address": "8yFXMR3smwiz9RgTnQswwFPVbYkLLKv58RpsBDYw351r", - "symbol": "DDWT", - "name": "Degen DAO WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8yFXMR3smwiz9RgTnQswwFPVbYkLLKv58RpsBDYw351r/logo.png", - "tags": ["Utility-token"] - }, - { - "chainId": 101, - "address": "GmEwrWwya2Q7jtHcTzCWRcWDtF74ceqJbTBwDgb6zvKG", - "symbol": "CLWL", - "name": "Curse Lab Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solanacoder005/Cursed-Lab-Token/main/logo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "MAGf4MnUUkkAUUdiYbNFcDnE4EBGHJYLk9foJ2ae7BV", - "symbol": "MAGAI", - "name": "Magnum Token", - "decimals": 0, - "logoURI": "https://github.com/tomekregulski/magnum-token-logo/blob/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HVWUENskPh5bYq4Fdpv4hTwkbVbS4XAbCJ49Gev3WYEX", - "symbol": "HVWWL", - "name": "High Voltage Worlds Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HVWUENskPh5bYq4Fdpv4hTwkbVbS4XAbCJ49Gev3WYEX/logo.jpg", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/hvworldsnft", - "twitter": "https://twitter.com/hvWorldsNFT_", - "website": "https://www.highvoltageworlds.io/" - } - }, - { - "chainId": 101, - "address": "CGczF9uYdSVXmSr9swMafhF1ktHsi6ygcgTHWL71XNZ9", - "symbol": "yiSolUST", - "name": "Staked solUST", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CGczF9uYdSVXmSr9swMafhF1ktHsi6ygcgTHWL71XNZ9/icon.svg", - "tags": ["stablecoin"], - "extensions": { - "website": "https://soluna.money/" - } - }, - { - "chainId": 101, - "address": "BGLa4XwmsRcLDBKEtUgxAzKTkHYm4qgxEtkGwJKT7gEF", - "symbol": "MHAWL", - "name": "MetaHelix Alpha WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BGLa4XwmsRcLDBKEtUgxAzKTkHYm4qgxEtkGwJKT7gEF/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/metahelix", - "twitter": "https://twitter.com/metahelixio", - "website": "https://metahelix.io/" - } - }, - { - "chainId": 101, - "address": "GpkezdzsMoerjxCviax6rSPN6suTpSTg9eFzaRBGwLtf", - "symbol": "DISCO", - "name": "Disco Protocol", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GpkezdzsMoerjxCviax6rSPN6suTpSTg9eFzaRBGwLtf/logo.jpg", - "tags": ["Utility-token"], - "extensions": { - "twitter": "https://twitter.com/DISCO_Protocol", - "website": "https://disco.foundation/" - } - }, - { - "chainId": 103, - "address": "GpkezdzsMoerjxCviax6rSPN6suTpSTg9eFzaRBGwLtf", - "symbol": "DISCO", - "name": "Disco Protocol", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GpkezdzsMoerjxCviax6rSPN6suTpSTg9eFzaRBGwLtf/logo.jpg", - "tags": ["Utility-token"], - "extensions": { - "twitter": "https://twitter.com/DISCO_Protocol", - "website": "https://disco.foundation/" - } - }, - { - "chainId": 101, - "address": "AiRWExaAjZyyt7jCs9wEGzdNL68pEpa66BUXF6zVP3JT", - "symbol": "ARCC", - "name": "Acrona Credits", - "decimals": 9, - "logoURI": "https://github.com/ArthurPaivaT/token-list/blob/main/assets/mainnet/AiRWExaAjZyyt7jCs9wEGzdNL68pEpa66BUXF6zVP3JT/logo.png?raw=true" - }, - { - "chainId": 101, - "address": "FwT5PEo4BTPLMPex88EakwdXceJWe3ZSF5XhxZjHwhXe", - "symbol": "cDusk", - "name": "Cosmik Dusk", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/cosmik-dust/cosmik-dust/main/cosmikdust.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HAps7qmQmfZE5beoLUXtqvSGURP5AXsiiU6fKccn7swm", - "symbol": "GPKC", - "name": "GlobalKeyCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/incharta/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "BhWwL5K6k98xvy2vndXLVvq6vRsnCq9RSM6sCHNPSGMe", - "symbol": "JUNI", - "name": "Juni's Personal Tokens", - "decimals": 0, - "logoURI": "https://res.cloudinary.com/dbsyktgpl/image/upload/c_limit,h_1000,q_100/aXBmczovL1FtZFdWZkpyVXQ2SjI1WWZicFVKdVdzQllGMVdMNldESHFMajViejNWbUV5eGs%3D", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/nubstick27" - } - }, - { - "chainId": 101, - "address": "oRCSKFhkpeeCPEziCXLBn9SR8qtM1WjvAJeRPKBbPWv", - "symbol": "ORCS", - "name": "The Orcs WL PASS", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/TheOrcs/token-list/main/assets/mainnet/2WWK14D4cdWuc9TtUPwbXMUZGyk1PrQYej1NVsPNsBeS/logo.png", - "tags": ["NFT", "whitlist-pass"], - "extensions": { - "discord": "https://discord.com/invite/theorcs", - "twitter": "https://twitter.com/TheOrcsNFT", - "website": "https://theorcs.io" - } - }, - { - "chainId": 101, - "address": "BavXjyWCy85c6T7WVsDfibkbNmg2SkwdZy8JhFcKdYvk", - "symbol": "BBWL", - "name": "Baked Bots WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solanacoder005/Baked-Bots-WL/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AKBHskt7LUfvzysUS8hZQDypjW4Zz3C4zaZzK7paX4vb", - "symbol": "BRGY", - "name": "BERGY", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Bergy700/crypto/main/images.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4U3f8vfoCe5ifbQ5j5CkSnUruhM2vxxcEbAN6H1sLi6r", - "symbol": "RCB", - "name": "RCB Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Ryebreadseeds/RCBpic/main/RCB%20Good.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "57at8PHwvg8AWZAZAvxUUShEFyhPgwd7LfGF5oTzG85t", - "symbol": "SCF", - "name": "SCF4B", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/57at8PHwvg8AWZAZAvxUUShEFyhPgwd7LfGF5oTzG85t/logo.png", - "extensions": { - "telegram": "https://t.me/SCFOfficial", - "twitter": "https://twitter.com/SCF4b", - "whitepaper": "https://scf4b.com/wp/SCF4B_WP_EN.pdf" - } - }, - { - "chainId": 103, - "address": "4kCxL4vRtbXNVqojpdgkd6yGQwhkP2noRhBqakLwpVAd", - "symbol": "TG", - "name": "TrueGold", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/masnun-siam/crypto/main/truegold.jpg", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "Bt8vnAZYaTBcoF4i6K8ANuuKwLbzbPUF1c7g6an6KKJt", - "symbol": "ICY", - "name": "Icury token", - "decimals": 0, - "logoURI": "https://github.com/MoneshROR/icury_token/blob/main/logo.png", - "tags": ["icury-token"] - }, - { - "chainId": 101, - "address": "Gqv2cFatnYbPAuuTYMaiB9AXpD8BY9tqoMoFKgZKND4D", - "symbol": "BANAC", - "name": "BaNaNaa Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/will3479/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GoQDVRK1vso9gSGJ2D8hfeGGYnqjarEVqCoFv888guG6", - "symbol": "SLOTH", - "name": "Sloth Souls", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GoQDVRK1vso9gSGJ2D8hfeGGYnqjarEVqCoFv888guG6/logo.png", - "tags": ["utility-token", "social-token"], - "extensions": { - "description": "Sloth souls are an extremely important thing when it comes to Sloth Evolution...", - "discord": "https://discord.gg/xN7fTBwrjc", - "medium": "https://medium.com/@theslowpatrol", - "twitter": "https://twitter.com/TheSlowPatrol", - "website": "https://www.theslowpatrol.com/" - } - }, - { - "chainId": 103, - "address": "GoQDVRK1vso9gSGJ2D8hfeGGYnqjarEVqCoFv888guG6", - "symbol": "SLOTH", - "name": "Sloth Souls", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GoQDVRK1vso9gSGJ2D8hfeGGYnqjarEVqCoFv888guG6/logo.png", - "tags": ["utility-token", "social-token"], - "extensions": { - "description": "Sloth souls are an extremely important thing when it comes to Sloth Evolution...", - "discord": "https://discord.gg/xN7fTBwrjc", - "medium": "https://medium.com/@theslowpatrol", - "twitter": "https://twitter.com/TheSlowPatrol", - "website": "https://www.theslowpatrol.com/" - } - }, - { - "chainId": 101, - "address": "RAriRG5GhRhTJRsvoGAwNAhcY3mpLguC8p1d9kQVKT6", - "symbol": "RARI", - "name": "Official RariKeys WL Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/RAriRG5GhRhTJRsvoGAwNAhcY3mpLguC8p1d9kQVKT6/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/SolRarity_" - } - }, - { - "chainId": 101, - "address": "BKDzpDfsWo8zMPh477pgMgffB1nxwkTXpstD9GRV9jBU", - "symbol": "XPAC", - "name": "Xpace", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BKDzpDfsWo8zMPh477pgMgffB1nxwkTXpstD9GRV9jBU/logo.png", - "tags": ["community-token", "NFT"] - }, - { - "chainId": 101, - "address": "FSeME2TS4xmMScwDy4j53cApTEi9eHr9MRJSXmR29mov", - "symbol": "AWC", - "name": "AwakeCoin", - "decimals": 9, - "logoURI": "https://storage.googleapis.com/random-stuff-do-not-delete/crypto-coins/awake.png", - "tags": ["utility-token"], - "extensions": { - "description": "Awake is a content creators website" - } - }, - { - "chainId": 101, - "address": "GxbSCU2go1MsLPM9ZJFSWuvsYCN4ZBRtCFSmcy5VehmX", - "symbol": "MLS", - "name": "Moonland Stardust", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GxbSCU2go1MsLPM9ZJFSWuvsYCN4ZBRtCFSmcy5VehmX/logo.png", - "tags": ["community-token", "utility-token"], - "extensions": { - "discord": "https://discord.com/invite/moonland", - "twitter": "https://twitter.com/MoonlandVerse", - "website": "https://www.moonland.world" - } - }, - { - "chainId": 101, - "address": "FeEdorXhQh5jsr89XtD1s6txNkmXTPu9hhNpaYvPiQGJ", - "symbol": "ZUKI", - "name": "Zuki Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/SnowballedNoot/SPLAkatzuki/main/tokenlogo520.png", - "tags": ["nft"] - }, - { - "chainId": 101, - "address": "CJiyMgq41YYH9McFQANw69KWyj74H8NjgVauaS1mfs39", - "symbol": "DEST", - "name": "Destiny", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Anonymous-Pentester/logo/main/logo1.png", - "tags": ["utility-token", "whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/destnetwork", - "website": "https://destcoin.org/" - } - }, - { - "chainId": 102, - "address": "C7PCjVH11ViAhxvFDqXUuRq5afkijVDgVEaeJYuihaRk", - "symbol": "ICY", - "name": "Icury token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MoneshROR/icury_token/main/logo.png", - "tags": ["icury-token"] - }, - { - "chainId": 101, - "address": "2MsuJCKJMa1e77c2TfhwsT9oaqM43FNCW7twYpdweizp", - "symbol": "CERO", - "name": "CERO Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2MsuJCKJMa1e77c2TfhwsT9oaqM43FNCW7twYpdweizp/logo.png", - "tags": ["cero-token", "carbon-token"], - "extensions": { - "facebook": "https://www.facebook.com/carbonwallet.th" - } - }, - { - "chainId": 101, - "address": "C2LZUMY8tf6HJEZ3EzzWW6Fc7aJtcomf1VC2jBNQcKoE", - "symbol": "DNT", - "name": "Deez Nuts Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/C2LZUMY8tf6HJEZ3EzzWW6Fc7aJtcomf1VC2jBNQcKoE/logo.png", - "tags": ["utility-token", "security-token", "social-token"] - }, - { - "chainId": 101, - "address": "CrwkrbSDnjbsc34iY3gwjUKXZHwM71LCsC2Kn76fsvG5", - "symbol": "TOG", - "name": "TokenOfGratitude", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Kurrios/tokenOfGratitudeIMG/main/TOG.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GENR71rjoC56vFf8RzfMTutEEHcQV8mr5kSsUzs7kHbc", - "symbol": "SPACEROBOTS", - "name": "Generous Robots Mission", - "decimals": 0, - "logoURI": "https://jokerz-sol.s3.amazonaws.com/gen-robots/space-robots/token/0.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/generousrobots" - } - }, - { - "chainId": 101, - "address": "TMbabNY9UwnGsYTYus7tGHUcDKkVhZ2gFbF9ucqjXqc", - "symbol": "SOLNFT", - "name": "SLOTHS NFT WHITELIST", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/TMbabNY9UwnGsYTYus7tGHUcDKkVhZ2gFbF9ucqjXqc/logo.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "EkTmcVRhGU9Z2YPCNYW4KUuRUiCUVc1r4vVnTCmWwFW", - "symbol": "FFCt", - "name": "FoneFanClub token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/danny8252/ffct/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Bots8GcuhxrZ1XBGHx3qvzMEq3xfBZHSCxHX5EukGuis", - "symbol": "BBW", - "name": "Baked Bots WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Bots8GcuhxrZ1XBGHx3qvzMEq3xfBZHSCxHX5EukGuis/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/bakedbots420", - "website": "https://bakedbots420.com" - } - }, - { - "chainId": 101, - "address": "ELXRYrf8wd4DcyXDU9QPnMdD8jn2twg7o7qEtf5z2GBW", - "symbol": "ELIXIR", - "name": "ELIXIR", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/zaptors/image/main/elixir.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "M1LEuEmGhZfiiCcrVfutWuiYzzodDnatyFw63Xmg2g9", - "symbol": "MILE", - "name": "MILE", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/M1LEuEmGhZfiiCcrVfutWuiYzzodDnatyFw63Xmg2g9/MileHighMultiverseToken.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/WtpzxsBTGF", - "twitter": "https://twitter.com/MH_Multiverse", - "website": "https://milehighmultiverse.io" - } - }, - { - "chainId": 101, - "address": "t1CCCUJmHX4czeSjmu6TLyrvRznSmcnA9QySQXaMn5D", - "symbol": "t1CCC", - "name": "test1 Carbene Chemisty Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/t1CCCUJmHX4czeSjmu6TLyrvRznSmcnA9QySQXaMn5D/t1CCC.png", - "tags": ["t1CCC", "utility-token"] - }, - { - "chainId": 101, - "address": "34XxQ23XCitmpUuDnLeS49H9R7Q6NV3zGSGMjqy43xhJ", - "symbol": "FOREST", - "name": "FOREST", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/ForestFrenz/forest/main/frenzforest.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "3QyJgynKp4aiMt4RJy5HrYSSBzuanU3ZwQ7RRdAni1rQ", - "symbol": "RichWL", - "name": "Rich Arab WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3QyJgynKp4aiMt4RJy5HrYSSBzuanU3ZwQ7RRdAni1rQ/logo.png", - "tags": ["whitelist"], - "extensions": { - "discord": "https://discord.com/invite/pSUhqNKFeg", - "twitter": "https://twitter.com/RichArabDAO" - } - }, - { - "chainId": 101, - "address": "6f6ZEB6GApv7QFot9n8t1i579AZkNhKcJ7JhQvZkhEc8", - "symbol": "FreeML", - "name": "Monkey Legacy", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6f6ZEB6GApv7QFot9n8t1i579AZkNhKcJ7JhQvZkhEc8/logo.png", - "tags": ["free-mint"], - "extensions": { - "discord": "https://discord.com/ACDealerNFT", - "twitter": "https://twitter.com/TigerLegacyNFT" - } - }, - { - "chainId": 101, - "address": "L3Uy1CbJMre4NQaXmaNvaQDwjw7iwVoy2h5yLSj5TiJ", - "symbol": "LUMT", - "name": "Launchlabs Unlimited Mint Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/LUaAb8dKBd3oye8PdSZtCmr3wQJbcXop4P3bCm434xc/logo.png", - "tags": ["NFT", "utility-token"], - "extensions": { - "website": "https://launchlabs.app/" - } - }, - { - "chainId": 101, - "address": "L3RtBNTumKfH9Pe5zUpK9zhYZXVazw15YrDjGwistJ6", - "symbol": "LRMT", - "name": "Launchlabs Regular Mint Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/LHTZ1E5tcZRK786zwrpcUsGivU6vemQaKBeXuiVD6tP/logo.png", - "tags": ["NFT", "utility-token"], - "extensions": { - "website": "https://launchlabs.app/" - } - }, - { - "chainId": 101, - "address": "TWL3qkjRXomK4fFViXA86csuYAfphTQiKCfxXTYjB7K", - "symbol": "TOAWL", - "name": "Towers Of Astraa Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/TWL3qkjRXomK4fFViXA86csuYAfphTQiKCfxXTYjB7K/logo.png", - "tags": ["NFT", "utility-token"] - }, - { - "chainId": 101, - "address": "FFTwhd4pEZoGCbocV1PMqkb2MCebskz8MoKiNugyCpAd", - "symbol": "FUNK", - "name": "Multidimensional Funky Mirian", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FFTwhd4pEZoGCbocV1PMqkb2MCebskz8MoKiNugyCpAd/logo.png", - "tags": ["NFT", "utility-token"] - }, - { - "chainId": 101, - "address": "AW9bgLubnd4jjmfsidHwSJnDutWhZBcj3yYcY4weXvSP", - "symbol": "BIGCANDY", - "name": "BIG CANDY", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/ramonv926/-BigCandy/main/bigcandy.png", - "tags": ["utility-token", "community-token", "nft-token"] - }, - { - "chainId": 101, - "address": "HVb5epReoJrfgoSNwBLCgN2WLLuUQBgstYY7cNJKBc6r", - "symbol": "DLBASL", - "name": "DEL BUENO ASL TECH SUPERMARKETS", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/javiervq/DLBASL/main/logo3.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "91AkDgMBMpGGBv1Uqt5K1gC2HSdoR6qfzksKF5sykxVb", - "symbol": "ZEBRAWL", - "name": "Zebra Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/91AkDgMBMpGGBv1Uqt5K1gC2HSdoR6qfzksKF5sykxVb/logo.png" - }, - { - "chainId": 101, - "address": "6a1LUJuDe8G6XKQbpiXsDjHVJpq1hbvQ5axf7rXzBzpg", - "symbol": "NCTR", - "name": "Nectar", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/MonarchButterflySquad/NFTMonarchsGeneral/main/6a1LUJuDe8G6XKQbpiXsDjHVJpq1hbvQ5axf7rXzBzpg/nectardrop.png", - "tags": ["utility-token"], - "extensions": { - "description": "NFT Monarch in-game currency and utility token.", - "discord": "https://discord.gg/nftmonarchs", - "twitter": "https://twitter.com/NFTMonarchs", - "website": "https://www.nftmonarchs.com" - } - }, - { - "chainId": 101, - "address": "J1fuSfLo46UTQbVsySmaCed5YoU8KzpTg9GjZhBQEJAf", - "symbol": "JPWLT", - "name": "Jungle Pass WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/J1fuSfLo46UTQbVsySmaCed5YoU8KzpTg9GjZhBQEJAf/logo.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "GLrFNhFr9kmAi2maE4nPAd3AEc5BPakgDz78ogQKYxEF", - "symbol": "SLN", - "name": "SOLANITE", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GLrFNhFr9kmAi2maE4nPAd3AEc5BPakgDz78ogQKYxEF/logo.png", - "tags": ["social-token"], - "extensions": { - "description": "Token for SolCraft Game", - "discord": "https://discord.gg/solcraft", - "twitter": "https://twitter.com/solcraftgame", - "website": "https://solcraft.online/" - } - }, - { - "chainId": 101, - "address": "5P14yGZH2kZegsaxv3XDauoq8ZUFxKBbaLXFMG6cj5iP", - "symbol": "SoF", - "name": "Solji on Fire WL TOken", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5P14yGZH2kZegsaxv3XDauoq8ZUFxKBbaLXFMG6cj5iP/logo.png", - "tags": ["Whitelist-token"] - }, - { - "chainId": 101, - "address": "GuLCixNS3St1PgBRYesQUX1M7oANL3APK2LFEv1a7dWA", - "symbol": "WZRD", - "name": "Wizardia Token", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GuLCixNS3St1PgBRYesQUX1M7oANL3APK2LFEv1a7dWA/logo.png", - "extensions": { - "medium": "https://medium.com/@wizardia", - "twitter": "https://twitter.com/PlayWizardia", - "website": "https://wizardia.io" - } - }, - { - "chainId": 101, - "address": "3dLsoauTtH9BkZxPvfgaNQvyiLoqkiXCszM8LHDaf28e", - "symbol": "FLOPP", - "name": "Floppa", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/fli671/crypto1/main/Gregory_Caracal.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BaKEdMuqQduNkc3enqMfsbQaDnYmWChobiBFciZsQwui", - "symbol": "BABO", - "name": "Baked Bots Official WL Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BaKEdMuqQduNkc3enqMfsbQaDnYmWChobiBFciZsQwui/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "instagram": "https://www.instagram.com/bakedbots_420", - "twitter": "https://twitter.com/bakedbots420", - "website": "https://bakedbots420.com/" - } - }, - { - "chainId": 101, - "address": "yRYbFDLRAaaQRMJeeuqxKHyAFLKXUTVWx8FR1jsA8yV", - "symbol": "VIY", - "name": "Variety", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Dorp43/VarietyToken/main/VarietyLogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5bp6Ke3rtTnUJST9n3Ejf5GwysjxC1yA7FzxKoT7AcqE", - "symbol": "LVIP", - "name": "VIP Access Solana Zoo Mint", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5bp6Ke3rtTnUJST9n3Ejf5GwysjxC1yA7FzxKoT7AcqE/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "discord": "https://discord.gg/gBphrYNF8B", - "instagram": "https://www.instagram.com/solanazoo/", - "twitter": "https://twitter.com/SolanaZoo_NFT", - "website": "https://www.zoosolana.com/", - "whitepaper": "https://www.zoosolana.com/_files/ugd/ac6553_9b6777afc91e4c239f4a57a5f0b9bbc1.pdf?index=true" - } - }, - { - "chainId": 101, - "address": "5hTcHUaPwMaTE5ApWVtvkjTZ6fKSBsKowJuvsKgPCV2P", - "symbol": "MT1", - "name": "MT1 token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5hTcHUaPwMaTE5ApWVtvkjTZ6fKSBsKowJuvsKgPCV2P/MT1LOGO.png" - }, - { - "chainId": 101, - "address": "EH8wCubDZ8nFvy8xv9T3j5EGZ9AaJXvNAxjpqXiSvqEX", - "symbol": "MHCSWAP", - "name": "Most Hyped Crypto Swap Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EH8wCubDZ8nFvy8xv9T3j5EGZ9AaJXvNAxjpqXiSvqEX/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "3pErr2gHeNic4PLrTuSPEbax3BHMpsTnGHPNPiZP2hw2", - "symbol": "MHCNFT", - "name": "Most Hyped Crypto NFTS", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3pErr2gHeNic4PLrTuSPEbax3BHMpsTnGHPNPiZP2hw2/logo.png", - "tags": ["nft-token"] - }, - { - "chainId": 101, - "address": "2t8QV7KmZU7kCNtKfBa3YYb7pJortKB7tYqLdAxBoVtw", - "symbol": "RSDAO", - "name": "Royal Society Dao", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/MarkyyMarkNFT/Crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "S8x4KYumVSJ2qadD2wY6yKQkLxSEbFuMWYKFNNavdHP", - "symbol": "DEGS", - "name": "DEGA Glory Shard", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/S8x4KYumVSJ2qadD2wY6yKQkLxSEbFuMWYKFNNavdHP/logo.png", - "tags": ["game-currency", "game-token", "De-Glory"] - }, - { - "chainId": 102, - "address": "DQ2bmRqXY8wgVgqzNY73YTTmDq1NAwHhEfgpVMxhxgzc", - "symbol": "Ay", - "name": "Aayush", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Moneshsoni/crypto_token/main/logo.png", - "tags": ["icury-token"] - }, - { - "chainId": 101, - "address": "92ueLLpG9sFQkaGd8qkr7k4VmdRh7tUfKzcBmXYux5sm", - "symbol": "WORLD", - "name": "Better World Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/zjeffreys/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "vba5JtMaGeKt2eN5v5mRDsB5pH32ehWNv4Sf9tviyMp", - "symbol": "VBAWL", - "name": "VBAGAME OFFICIAL ML TOKEN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/yoyo-ca/token-list/main/assets/mainnet/vba5JtMaGeKt2eN5v5mRDsB5pH32ehWNv4Sf9tviyMp/vba.png", - "extensions": { - "twitter": "https://twitter.com/vbagame", - "website": "https://www.vbagame.com/" - } - }, - { - "chainId": 101, - "address": "hivekAB8ofmqxLpCMFXnoTYzAK4UVGfXJwJXQfEjosU", - "symbol": "PHWL", - "name": "PROJECT HIVE OFFICIAL WL TOKEN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/yoyo-ca/token-list/main/assets/mainnet/hivekAB8ofmqxLpCMFXnoTYzAK4UVGfXJwJXQfEjosU/hive.png", - "extensions": { - "twitter": "https://twitter.com/project_hive_io", - "website": "https://project-hive.io" - } - }, - { - "chainId": 101, - "address": "HyUD3Vkfp4zsVXVbAfSrpSZqvEuMysF1zLSFyCcHybkt", - "symbol": "WARI-WL", - "name": "Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HyUD3Vkfp4zsVXVbAfSrpSZqvEuMysF1zLSFyCcHybkt/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "discord": "https://discord.gg/xQRTBcxb", - "twitter": "https://twitter.com/OpportunitiesIO" - } - }, - { - "chainId": 101, - "address": "HsZHzbqSe3wm5SHmTyD7y9TQJyyRt27GQDjkqXvLahb9", - "symbol": "OBWL", - "name": "Occult Balls Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HsZHzbqSe3wm5SHmTyD7y9TQJyyRt27GQDjkqXvLahb9/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2savLpc2scbPdpnrK33KExXfpLMrMvJr1rmzDJ3o7Bf6", - "symbol": "SNOW", - "name": "SNOW TOKEN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2savLpc2scbPdpnrK33KExXfpLMrMvJr1rmzDJ3o7Bf6/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "Hn4gYjpTvfo5KpJ9Dfm3oBEMuYduMmaSp3JZyA13CwHi", - "symbol": "VPWL", - "name": "VP Bunny Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Hn4gYjpTvfo5KpJ9Dfm3oBEMuYduMmaSp3JZyA13CwHi/vplogo.png", - "extensions": { - "twitter": "https://twitter.com/lasvegas_vp", - "website": "https://nft.lasvegasvp.com" - } - }, - { - "chainId": 101, - "address": "ToF3JR3FVKggXEVCVrYTkz85MAopjNGT6cE7hxJ9a9A", - "symbol": "AXO", - "name": "Axolotl WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/charlesvargas8234/crypto/main/Newlogo.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "4stkBpKm22xAJ9pwAyPiJPutzTLYFC52QEVV66KWkPuR", - "symbol": "OTK", - "name": "OTAKU", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Sibisen/CRYPTO/main/LOGO.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AzZMJEE1u5cM2fVtPFp5K4jyL5988i72WiwQhLCXQTr2", - "symbol": "MHCNWS", - "name": "Most Hyped Crypto News Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AzZMJEE1u5cM2fVtPFp5K4jyL5988i72WiwQhLCXQTr2/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "54VdWW4LYc4reEUPkyJ3Aif7D8Equ5WFWo9BUCqdnbmc", - "symbol": "1xbit", - "name": "1xbit token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/54VdWW4LYc4reEUPkyJ3Aif7D8Equ5WFWo9BUCqdnbmc/logo.png", - "tags": ["utility-token", "gambling-token"], - "extensions": { - "instagram": "https://www.instagram.com/1xbit", - "telegram": "https://t.me/sportsbook_1xBit", - "twitter": "https://twitter.com/1x_bit" - } - }, - { - "chainId": 101, - "address": "9qcLbAanoAo461yf19epr6GXGyAwHQn8asKGUaoRRB47", - "symbol": "KPM", - "name": "Kingdom Pass", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/GaitanaruAndrei/assets/main/pass.png", - "tags": ["mint-token"], - "extensions": { - "description": "Kingdom Pass Mint", - "website": "https://www.kingdompass.io/" - } - }, - { - "chainId": 101, - "address": "zoomAe6zBJsgB23puRkVxgPAC8WETUb6AApaBUM7y1M", - "symbol": "ZOOM", - "name": "Zaptors WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/zoomAe6zBJsgB23puRkVxgPAC8WETUb6AApaBUM7y1M/Raptor-WL.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "A3HyGZqe451CBesNqieNPfJ4A9Mu332ui8ni6dobVSLB", - "symbol": "WOOP", - "name": "WOOP", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/A3HyGZqe451CBesNqieNPfJ4A9Mu332ui8ni6dobVSLB/logo.png", - "tags": ["utility-token"], - "extensions": { - "coingeckoId": "woop", - "discord": "https://discord.gg/bohemia", - "serumV3Usdc": "DQY2Sjm3bEbrXhyGgHsXqLHU2EybBPVPLDTCrEHq9KpL", - "twitter": "https://twitter.com/BohemiaArtFair" - } - }, - { - "chainId": 101, - "address": "CiAS2EUR6qDmUEHtLoJtXQ4XoLWLVuxsPX3F74smXnez", - "symbol": "CIAS", - "name": "Coin Invasive Alien Species", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CiAS2EUR6qDmUEHtLoJtXQ4XoLWLVuxsPX3F74smXnez/logo.png", - "tags": [ - "utility-token", - "metaverse", - "nfts", - "solana-ecosystem", - "staking" - ], - "extensions": { - "discord": "http://discord.gg/VEVJJTjxKD", - "instagram": "http://instagram.com/invalienspecies", - "twitter": "https://twitter.com/invalienspecies" - } - }, - { - "chainId": 101, - "address": "8KBZyCpvZJ26nAp6A44zZiVevgsbkF3wakTAUa1yVBpL", - "symbol": "ZWL", - "name": "Zamka WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ra1yuga/ZamkaWLtoken/main/logo.png" - }, - { - "chainId": 101, - "address": "G6Y7oujw17anSbn5maHj5qUxBYzvTt5frrBLm6fHfAon", - "symbol": "WOLF", - "name": "Wolf house", - "decimals": 9, - "logoURI": "https://github.com/WolfHousee/Asset/blob/main/Pngtreecartoon_wolf_head_2943333.png", - "tags": [ - "utility-token", - "metaverse", - "nfts", - "solana-ecosystem", - "staking", - "DeFi-token", - "web3-token" - ], - "extensions": { - "discord": "https://discord.gg/F6jJmX5b" - } - }, - { - "chainId": 101, - "address": "5s4BYUXLuvs9ZcVDTxkTpKhThWFSpaU8GG55q2iySe2N", - "symbol": "ENRX", - "name": "Enrex", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5s4BYUXLuvs9ZcVDTxkTpKhThWFSpaU8GG55q2iySe2N/logo.png", - "tags": [ - "carbon-offsetting", - "renewable-energy", - "green-commodities", - "defi" - ], - "extensions": { - "description": "Solution that allows to have exposure to crypto in an environmentally friendly way. One-stop-shop to calculate your crypto CO2 emissions and offset it", - "discord": "https://discord.com/invite/enrex", - "facebook": "https://www.facebook.com/enrex.io", - "github": "https://github.com/Enrex-io", - "instagram": "https://www.instagram.com/enrex.io", - "linkedin": "https://www.linkedin.com/company/enrex", - "medium": "https://medium.com/@enrex", - "telegram": "https://t.me/enrex_community", - "telegramAnnouncements": "https://t.me/enrex_io", - "twitter": "https://twitter.com/enrex_crypto", - "website": "https://www.enrex.io", - "whitepaper": "https://wp.enrex.io", - "youtube": "https://www.youtube.com/channel/UClY1GH83dVoTM_uZs4PstIg" - } - }, - { - "chainId": 101, - "address": "2UgW5e86z3wHYRT4jnXRLgJheSKM8yCz3sn9rMpbWdCy", - "symbol": "DUCKS", - "name": "Ducks Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2UgW5e86z3wHYRT4jnXRLgJheSKM8yCz3sn9rMpbWdCy/logo.jpg", - "tags": ["nft-token"] - }, - { - "chainId": 101, - "address": "WLTHduNcwf9K2XF7MtTfAHqLNcE3o3HvxEh6kQXmAdh", - "symbol": "WLTH", - "name": "WEALTH", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WLTHduNcwf9K2XF7MtTfAHqLNcE3o3HvxEh6kQXmAdh/logo.png", - "tags": ["WLTH"] - }, - { - "chainId": 101, - "address": "4eimkrkYx1Er6bbvbVp8xY4uMZcHViWZ7EdNCroXMeCT", - "symbol": "TKOA", - "name": "TKOACOIN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/kingalpacas2005/cryptooo/main/TH_25094221_25187221_001.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9mLQpAvyDeX1S4aYL7yskNQRxSqsNLXyzqPDSQVBd3WN", - "symbol": "JCT", - "name": "JOB COOPERATION TOKEN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9mLQpAvyDeX1S4aYL7yskNQRxSqsNLXyzqPDSQVBd3WN/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://job-cooperation.cz/" - } - }, - { - "chainId": 101, - "address": "CwEe4fmKXgJCRcqrByaeueTu6MSk5Tir4R3KkEcgLRez", - "symbol": "AAT", - "name": "ARVO ASSET TOKEN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CwEe4fmKXgJCRcqrByaeueTu6MSk5Tir4R3KkEcgLRez/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://aa-management.cz/" - } - }, - { - "chainId": 101, - "address": "4nt2s5FpwHFZw3Hcaq72BqWDQmFnuYugCG67CFsnGAhW", - "symbol": "PMT", - "name": "Prvni Moravsky TOKEN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4nt2s5FpwHFZw3Hcaq72BqWDQmFnuYugCG67CFsnGAhW/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://moravska-obchodni.cz/" - } - }, - { - "chainId": 101, - "address": "3oRbrJ7HTgErq6nSkhuaCRXsmDRh92kPHp4r3DaGXZyz", - "symbol": "MT2", - "name": "MT2 token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3oRbrJ7HTgErq6nSkhuaCRXsmDRh92kPHp4r3DaGXZyz/logo1.png" - }, - { - "chainId": 101, - "address": "3dxDbp6zEcWLeEMcxriLqnVbp82qdpzGjo1ke7GAYEkM", - "symbol": "MUNSON", - "name": "Munson Token", - "decimals": 0, - "logoURI": "https://live.staticflickr.com/52/158791296_15d9660138_b.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "93jRu2Rv8bh9RrnwLHdnFaky91QuG9CQVGiysbifbaWD", - "symbol": "SKLT", - "name": "Skleton Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/93jRu2Rv8bh9RrnwLHdnFaky91QuG9CQVGiysbifbaWD/logo.png", - "tags": ["community-token"], - "extensions": { - "twitter": "https://twitter.com/Skleton_Tony", - "website": "https://skletontony.com" - } - }, - { - "chainId": 101, - "address": "AJXtZx9GFVc6sQaqbChg7zEDK3NC1iByjxxJsctyZsTU", - "symbol": "CARYPTO", - "name": "Carypto Carbon Token ", - "decimals": 0, - "logoURI": "https://github.com/StefanPapp/carypto/blob/main/carypto.png", - "tags": ["carbon-token"] - }, - { - "chainId": 101, - "address": "9uKdGskJYMzaYfR7eQEjG1oBeW91nRGyuNcCEXN1DP11", - "symbol": "OBAMIUM", - "name": "Obamium Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/ObamiumCoin/crypto/main/logo.png", - "tags": ["social-token", "community-token", "meme-token"], - "extensions": { - "twitter": "https://twitter.com/obamiumcoin" - } - }, - { - "chainId": 101, - "address": "8zqeAcLQKv9qqovonj9exEei4mUNKhnFUAfAHQhuj7Ea", - "symbol": "FUNZ", - "name": "FunGuyz", - "decimals": 0, - "logoURI": "https://arweave.net/LSrYJsws79XdkrVfCkIINQmRUs5mtvnQJ5uj3xWZY60", - "tags": ["NFT", "utility-token"], - "extensions": { - "discord": "https://discord.gg/funguyz", - "twitter": "https://twitter.com/FunGuyzNFT", - "website": "https://www.funguyz.io/" - } - }, - { - "chainId": 101, - "address": "EDudX4WivJX7vt7Enx9WHzJoeu2FiTsGx1ujQKrnRXN1", - "symbol": "SNT", - "name": "Sudarshan Nation Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SuperMonstor/Sudarshan-Nation-Token/main/logo.png", - "tags": ["community-token"], - "extensions": { - "twitter": "https://twitter.com/sudarshansk0", - "website": "https://www.sudarshansk.com/" - } - }, - { - "chainId": 101, - "address": "GDWdE6uktfrfPT5TnF4cCdJ4eneYe8ZDw1iDJ3Faju22", - "symbol": "SPHXOG", - "name": "Sphinx Lab OG", - "decimals": 0, - "logoURI": "https://github.com/yazidox/SPHXBETAWL/blob/main/logo.png", - "tags": ["community-token"], - "extensions": { - "website": "https://sphinx-lab.io/" - } - }, - { - "chainId": 101, - "address": "SWLXCGbDk7PkwU9b4GzRgQMy1HgPHwcfe2vTWCXRqSy", - "symbol": "SPHXWL", - "name": "Sphinx Lab WL", - "decimals": 0, - "logoURI": "https://github.com/yazidox/SPHXBETAWL/blob/main/logo.png", - "tags": ["community-token"], - "extensions": { - "website": "https://sphinx-lab.io/" - } - }, - { - "chainId": 101, - "address": "8c23rzPueFYTj8Fh876M1Zw91W3bK3qEjSEH4iXJthTN", - "symbol": "HAT", - "name": "Human Attention Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/socialvibe/human_attention_token/main/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "jZo4Efd5sqdx8Thbnq2N5sW9buZXYSg7eYbusgsdfv9", - "symbol": "LGC", - "name": "LERN Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/OdiGames/crypto/main/LogoLern.png", - "tags": [ - "utility-token", - "metaverse", - "solana-ecosystem", - "DeFi-token", - "web3-token" - ], - "extensions": { - "website": "https://lernglobal.co.uk/" - } - }, - { - "chainId": 101, - "address": "8nrNJB2w4ZuoiZz6QzgURSZsARuMGPspK4wz8MoBrM1H", - "symbol": "PHT", - "name": "PhantomToken", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/joca11/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AgWL46DMnUL4j66c6qLRhBce3PXtiAnd889fXCbyR5pb", - "symbol": "AGWL", - "name": "Ahegao Gang WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AgWL46DMnUL4j66c6qLRhBce3PXtiAnd889fXCbyR5pb/logo.png" - }, - { - "chainId": 101, - "address": "BHiqsyoXypYme4eQAb6zv5RquMhikM2dGM7xtzrmyACo", - "symbol": "RAZN", - "name": "Raisinz", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/qudo-code/assets/master/solana/tokens/RAZN/RAZN.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://twitter.com/Raisinzzzz" - } - }, - { - "chainId": 101, - "address": "CSsWu6rdrJUjuTozXgk3uWNPyqsE3hW54mAeNYjDxYPv", - "symbol": "SLH", - "name": "SweetLandHub", - "decimals": 2, - "logoURI": "https://sweetlandhub.com/SLH.png", - "tags": ["community-token"], - "extensions": { - "website": "https://sweetlandhub.com" - } - }, - { - "chainId": 101, - "address": "4LWf2HT44JMw6w7mckHmXKyHAHL6KkgcJVG2X48uaqCU", - "symbol": "WLBAHC", - "name": "WL Bored Ape History Club", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4LWf2HT44JMw6w7mckHmXKyHAHL6KkgcJVG2X48uaqCU/logo.png" - }, - { - "chainId": 101, - "address": "FDqVe2wP8WPJ2aWR1uUXWJsyMeB72mNkvDRjQPbmuyHE", - "symbol": "MYRIEN", - "name": "Myths of Myrien", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FDqVe2wP8WPJ2aWR1uUXWJsyMeB72mNkvDRjQPbmuyHE/logo.png", - "tags": ["NFT", "utility-token"], - "extensions": { - "website": "https://www.mythsofmyrien.com" - } - }, - { - "chainId": 101, - "address": "GPyj8JXL9NDaG7iR1gfKSeJP1H98h7JGraDNqv8ASK9i", - "symbol": "GUNC", - "name": "Gunia Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/dennis9819/crypto/main/guniaserv.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "zayS9RM57gJbFQioWA4EW6NiZ45abGSzsxLan7A1gjh", - "symbol": "ZAYS", - "name": "Zaysan Raptors WL Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/zayS9RM57gJbFQioWA4EW6NiZ45abGSzsxLan7A1gjh/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/ZaysanRaptors", - "website": "https://zaysanraptors.io/" - } - }, - { - "chainId": 101, - "address": "26nPfD9S6Eiqm6f27ob74uQ5u6BDmMWFKbRoMPZKgNjF", - "symbol": "MMC", - "name": "Millionaire Mafia Club Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/nftmmc/MMCTOKEN/main/logowl.png", - "tags": ["NFT"], - "extensions": { - "description": "Credits to Millionaire Mafia Club", - "discord": "https://www.discord.gg/millionairemafiaclub", - "twitter": "https://twitter.com/nftmmc" - } - }, - { - "chainId": 101, - "address": "EAWTaWzSPGwyatZ3NQgyyDgoVWpwtPk7s4JMvm1Lv3sK", - "symbol": "DERP", - "name": "Derpy Pets Token", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EAWTaWzSPGwyatZ3NQgyyDgoVWpwtPk7s4JMvm1Lv3sK/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "9yM42HMJnN69rhMGr8nCYSRtFxjWTWm5Z6GeucyLBEHg", - "symbol": "RAMENF", - "name": "Ramen Feast Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9yM42HMJnN69rhMGr8nCYSRtFxjWTWm5Z6GeucyLBEHg/logo.png", - "tags": ["utility-token", "nfts"], - "extensions": { - "discord": "https://www.discord.gg/kamakuranft", - "twitter": "https://twitter.com/kamakura_nft" - } - }, - { - "chainId": 101, - "address": "8NngPwTJD9FW6LNxEf8CPL7d8Fx3iisjiCVM7ngHra9G", - "symbol": "SPIRIT-WL", - "name": "Spirits of Pappataz WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8NngPwTJD9FW6LNxEf8CPL7d8Fx3iisjiCVM7ngHra9G/logo.png", - "tags": ["NFT", "utility-token"], - "extensions": { - "discord": "https://discord.gg/zJWZyRjcMJ", - "twitter": "https://twitter.com/PappatazWarrior", - "website": "https://www.pappataz.com/" - } - }, - { - "chainId": 101, - "address": "MM7s2bggZvq2DBFyBVKBBHb9DYAo3A2WGkP6L5cPzxC", - "symbol": "NEST", - "name": "Nest Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/Beario/crypto/main/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "6DzRG51nRXkD5JmTj7P8ELTwBgExMGUoa9cyvi9vEPUK", - "symbol": "SPPWL", - "name": "SPP Mint Pass", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/virdagreat147/SPP-Dog/main/kj.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "DLvMHnA6ehWDPobqDMpFcsTSiwpFu2y5D8hEtxsd7zUT", - "symbol": "SNKN", - "name": "SnakeKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jakeenea51/SnakeKoin-Logo/main/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "AvTYakqgKLAUJucjymMpVmgDdeT4PfDSW4wpqynNCyLk", - "symbol": "YakuAv", - "name": "Yaku Avatar WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AvTYakqgKLAUJucjymMpVmgDdeT4PfDSW4wpqynNCyLk/logo.png" - }, - { - "chainId": 101, - "address": "CS9bXG9HE6LoJz1SMpjnaH86XLNEitLubUS3ap3q7y1N", - "symbol": "PUFFS", - "name": "Puffs", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/qudo-code/assets/master/solana/tokens/PUFFS/PUFFS.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://twitter.com/solpuffss" - } - }, - { - "chainId": 101, - "address": "3D8mQf27DQbo1GWJJPsXwFas5u4cewKzCNMH5VpUcgFX", - "symbol": "3DACWL", - "name": "3D Apes Club WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3D8mQf27DQbo1GWJJPsXwFas5u4cewKzCNMH5VpUcgFX/logo.png" - }, - { - "chainId": 101, - "address": "SC3o3s72Ecpr8Dovt6zzakUZ4ewesAFz8Hyj119hLER", - "symbol": "SKCLWL", - "name": "Skull Club Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SC3o3s72Ecpr8Dovt6zzakUZ4ewesAFz8Hyj119hLER/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://skullclubnft.com/" - } - }, - { - "chainId": 101, - "address": "5b6oa5VhzJMeC9eFiFPpJtAwnKvzEPHAnUTajRyKiMDf", - "symbol": "APCM", - "name": "Whitelist APC", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5b6oa5VhzJMeC9eFiFPpJtAwnKvzEPHAnUTajRyKiMDf/logo.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "F6wb8jEnjJrZVfMDj7z1NYPiYhWsdEBShrBQkfNq9FZz", - "symbol": "SIMT", - "name": "Simba Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/bukieldios/Simba/main/logo.png", - "tags": ["NFT", "utility-token"], - "extensions": { - "twitter": "https://twitter.com/Simba_Token" - } - }, - { - "chainId": 101, - "address": "H8p6D7kGAh8MnNTW17C2chRfbpQro4E23xJqziA14H8n", - "symbol": "AVY", - "name": "AVORY", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Ryebreadseeds/AvoryPic/main/Avory%20Background.jpg" - }, - { - "chainId": 103, - "address": "D17PtjrzxNANtGDacNMRNwxtBU59phYCQXLMJWL5K1DW", - "symbol": "WGBTC", - "name": "GreenBitcoin", - "decimals": 8, - "logoURI": "https://ipfs.safewatch.care/ipns/Qmcojiocs93jWj9yVqCcqZTBNr8yjiTcb55pfrZPPNuBGv/assets/gbitcoin.svg", - "tags": ["FNFT", "community-token", "color-coin"], - "extensions": { - "coingeckoId": "wrapped-bitcoin", - "website": "https://duckduckgo.com/?q=greener+bitcoin+on+solana+!g" - } - }, - { - "chainId": 101, - "address": "4bAsJ44rDiFi31SqNV6tyrgYBUcqkdhmx65LLgdta3gQ", - "symbol": "EKG", - "name": "EKG NFT HRS 2022", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4bAsJ44rDiFi31SqNV6tyrgYBUcqkdhmx65LLgdta3gQ/logo.png", - "tags": ["EKG", "NFT"], - "extensions": { - "twitter": "https://twitter.com/BishoyHannaMD" - } - }, - { - "chainId": 101, - "address": "9P45hmWU9TMmHzjX2gxmvYxuucrVYbkVt77k561y5sYE", - "symbol": "GIFT", - "name": "Giftcoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/techgiftcoin/spl-token-giftcoin/main/giftcoin-logo.png", - "tags": ["social-token", "gift", "gift-token", "reward"] - }, - { - "chainId": 101, - "address": "8AN7mWuw6M81w3gDcxvvQR2Kr5RGKJjzh7ZKAPPmrcJG", - "symbol": "SAKC", - "name": "Sakura Collective", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8AN7mWuw6M81w3gDcxvvQR2Kr5RGKJjzh7ZKAPPmrcJG/logo.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/sakcnft" - } - }, - { - "chainId": 101, - "address": "EartHq4cviNGBaqS6dq1b1mENRVS6jV5tj1k3WMChykV", - "symbol": "EARTH", - "name": "Refined Crystal Earth", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Bitcoinblack482/logo/main/white.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FrHe1NUX2hRgnpZCTcxDEh8LU9uYEGU1uWhyYjvXLdFe", - "symbol": "$BOING", - "name": "BOING Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FrHe1NUX2hRgnpZCTcxDEh8LU9uYEGU1uWhyYjvXLdFe/logo.png", - "tags": ["social-token", "utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/SolWabbits", - "website": "https://wabbits.co/" - } - }, - { - "chainId": 101, - "address": "2Dm1zu8ERJGBs3NLXt8s8Vor3YHwJye5E2pYhLiMHU4L", - "symbol": "REAP", - "name": "REAP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Dm1zu8ERJGBs3NLXt8s8Vor3YHwJye5E2pYhLiMHU4L/logo.png", - "tags": ["social-token", "utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/dakureapersnft" - } - }, - { - "chainId": 101, - "address": "rvxo8t7TKeSmAgpdqK1CY9ddZi3NyowRCh1m2d7KrUc", - "symbol": "SMRAI", - "name": "SMRAI", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/rvxo8t7TKeSmAgpdqK1CY9ddZi3NyowRCh1m2d7KrUc/logo.png", - "tags": ["social-token", "utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/SamuraiWarriorz" - } - }, - { - "chainId": 101, - "address": "EKuYvkDkNxkvGgpnmDJtFyp7bpaeKffMPp5DoTSJpHjs", - "symbol": "XNU", - "name": "XEANU", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EKuYvkDkNxkvGgpnmDJtFyp7bpaeKffMPp5DoTSJpHjs/logo.png", - "tags": ["social-token", "utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/XeanusMonkeysN", - "website": "https://xeanusmonkeys.com/" - } - }, - { - "chainId": 101, - "address": "8XUTstViEpLfhxaA88A6oWKraHm8V444bnSq6hm79vYh", - "symbol": "RUGZ", - "name": "RUGZ", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8XUTstViEpLfhxaA88A6oWKraHm8V444bnSq6hm79vYh/logo.png", - "tags": ["social-token", "utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/ProbRug" - } - }, - { - "chainId": 101, - "address": "32Fwn7VL1CsDoZv4H33tZhkK7eudofG7oijNtfQpEuww", - "symbol": "NURS", - "name": "NurseDeck", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Ev0lvE212/crypto/main/logo.png", - "tags": ["social-token"], - "extensions": { - "description": "Community engagement based social points for nursing professionals and nursing students", - "facebook": "https://www.facebook.com/nursedeck", - "instagram": "https://www.instagram.com/nursedeck", - "linkedin": "https://www.linkedin.com/company/nursedeck", - "twitter": "https://twitter.com/thenursedeck", - "website": "https://nursedeck.com", - "youtube": "https://www.youtube.com/channel/UCe6DHqdCDczRjQSs7R_2G3g" - } - }, - { - "chainId": 101, - "address": "Dk1HXZkE5tUn8EvNeT8GoB1JqcYioFp5LCPxGq8tTa7s", - "symbol": "HAIR", - "name": "HAIR", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Dk1HXZkE5tUn8EvNeT8GoB1JqcYioFp5LCPxGq8tTa7s/logo.png", - "extensions": { - "twitter": "https://twitter.com/soldiamondheads", - "website": "https://diamondtownheads.io" - } - }, - { - "chainId": 101, - "address": "9DxD8kewV6qyLEgAv2bPHsfuJUxJumu9wkbj4JmkNzJu", - "symbol": "VACT", - "name": "Very Angry Chicken Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/boyanM/Other/master/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Bg6GueVWbvP3S4xLGQRSW94Vcy1vp6xW3zFYykqFxoeu", - "symbol": "BLVCK", - "name": "BLVCK", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/BLVCKDEVIL/crypto/main/images.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "SWLXP14ev2gFc3TTJaHP5o8SMq1Zu5isREYKE4UTdo3", - "symbol": "SWLX", - "name": "Sphinx Lab WL Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SWLXP14ev2gFc3TTJaHP5o8SMq1Zu5isREYKE4UTdo3/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/LabSphinx", - "website": "https://sphinx-lab.io/" - } - }, - { - "chainId": 101, - "address": "8RxfJRQkwXbbLWK5piPmh9jnVZ2TFndpyiYhscWEEsUY", - "symbol": "ZSWPZ", - "name": "ZSWPZ", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8RxfJRQkwXbbLWK5piPmh9jnVZ2TFndpyiYhscWEEsUY/logo.png", - "tags": ["social-token", "utility-token", "community-token"], - "extensions": { - "website": "https://swapoo.ai/" - } - }, - { - "chainId": 101, - "address": "BLkedSoxJsytxWFqrRZj5vJZ8w3sva3f7Wmm1iYxsAZw", - "symbol": "BLDWL", - "name": "Bots Life Deviant Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BLkedSoxJsytxWFqrRZj5vJZ8w3sva3f7Wmm1iYxsAZw/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "http://botslifenft.com/" - } - }, - { - "chainId": 101, - "address": "J9NBUALQvMAJsNb97QGWwHdRVWvL5Mc3923jVGFDf89D", - "symbol": "WLZEBRA", - "name": "Whitelist Zebra", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/J9NBUALQvMAJsNb97QGWwHdRVWvL5Mc3923jVGFDf89D/logo.png" - }, - { - "chainId": 101, - "address": "To5os14QBUk2As5emuUmWbSvRpW9kUjT3W28B66WMah", - "symbol": "HSC", - "name": "Hippy Solana Crew Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/To5os14QBUk2As5emuUmWbSvRpW9kUjT3W28B66WMah/logo.png" - }, - { - "chainId": 101, - "address": "4xC1g2bG5rfjvAcB88UJGaNfoYGnPeVNQV2deEfSf34X", - "symbol": "IBSBL", - "name": "IbisBull Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/IbisBull/cryptovault/main/IBSBLLogo.jpg", - "tags": ["social-token", "utility-token", "currency-token"] - }, - { - "chainId": 101, - "address": "Exr1Q3qzVFoeDuBK45gU9jzVj1uJBhQNs8fnUMwCev5y", - "symbol": "GGWP", - "name": "Global Games World Passion", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Exr1Q3qzVFoeDuBK45gU9jzVj1uJBhQNs8fnUMwCev5y/logo.png", - "tags": ["community-token"] - }, - { - "chainId": 101, - "address": "Hw2JDWPm35DheBXoovHWJhVsqQJBVoEqZUayEpFVctqk", - "symbol": "SUVNR", - "name": "Metas", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Hw2JDWPm35DheBXoovHWJhVsqQJBVoEqZUayEpFVctqk/logo.png", - "tags": ["meta", "souvenir"], - "extensions": { - "website": "http://metasouvenirs.io/" - } - }, - { - "chainId": 101, - "address": "XeomDrjzsFuJLSSTDzrxbSkfYJHLeLVgmLUgA4cWArx", - "symbol": "OOUM", - "name": "OOU Meta V1 Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/XeomDrjzsFuJLSSTDzrxbSkfYJHLeLVgmLUgA4cWArx/oou.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "m7AYiyDGVzV4bGuV3R6iT3Psmj9GaU5s4WLqtL3VL9H", - "symbol": "TEX", - "name": "TEX Coin", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/MorisBR/MyCrypto/main/TEXLogo3D.jpg", - "tags": ["social-token"], - "extensions": { - "website": "http://tex.com.br/" - } - }, - { - "chainId": 101, - "address": "WarsFNc1gd5P9eLKhszjopCZNvvHyB4kmUbavP3eA1i", - "symbol": "WARS", - "name": "GMG Hog Wars", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WarsFNc1gd5P9eLKhszjopCZNvvHyB4kmUbavP3eA1i/logo.jpg", - "tags": ["apparel-token", "ecommerce-token", "fashion-token"], - "extensions": { - "description": "WARS is a token for the gm Groundhogs Hog Wars event", - "twitter": "https://twitter.com/gmGroundhogs", - "website": "https://remilabs.xyz" - } - }, - { - "chainId": 101, - "address": "cPQm9UM1ekMeAgRcYGLfNcBC65SLA8o2BVTaBUA7kTg", - "symbol": "API", - "name": "API Coin", - "decimals": 9, - "logoURI": "https://theblockchainapi-website.s3.amazonaws.com/logo512.png", - "tags": ["community-token", "platform"], - "extensions": { - "twitter": "https://twitter.com/_BlockX_", - "website": "https://blockchainapi.com/" - } - }, - { - "chainId": 101, - "address": "HkCrU2Vk5kGvvPUUR2dirjgAx3TbyCPYXRZbefwzCyCp", - "symbol": "LFI", - "name": "Luffy Inu", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HkCrU2Vk5kGvvPUUR2dirjgAx3TbyCPYXRZbefwzCyCp/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.io/luffyinu_sol", - "twitter": "https://twitter.com/luffyinu_sol", - "website": "https://luffyinu.live" - } - }, - { - "chainId": 101, - "address": "B1cLmU92KCAJ6yYAGa3aHUgnKfKRG5G7wqqbuPYqLihs", - "symbol": "VOLTAIC", - "name": "Voltaic", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/VoltaicLLC/VoltaicToken/main/Voltaic%20Symbol%20800x800.png", - "tags": ["energy-token"] - }, - { - "chainId": 101, - "address": "8R5pSiFD1YaABPf8EpkFPYcVgW1domzJEMRgFUwmFeKd", - "symbol": "SEZ", - "name": "Seokazer", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MirProg/crypto/main/anchy-art-scale-6_00x-gigapixel_800x800.png", - "tags": ["social-token", "utility-token", "community-token"] - }, - { - "chainId": 101, - "address": "3DYAkudDzEjoio5rSdGw8F5E79aqanAoWzsiXrShdbXY", - "symbol": "YakuX", - "name": "3D Yaku avatarX WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3DYAkudDzEjoio5rSdGw8F5E79aqanAoWzsiXrShdbXY/logo.png", - "extensions": { - "twitter": "https://twitter.com/YakuCorp", - "website": "https://www.yakushima.io" - } - }, - { - "chainId": 101, - "address": "ABZQ8Mx9WPDvkK5B9fWVTVSiL6E8KXjbk8FjimBBA5wm", - "symbol": "MIMIC", - "name": "Mimic", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/Valygore/Mimic/main/Mimic%20Logo%20Black%20-%20White%20Background.png", - "tags": ["utility-token", "social-token", "game-token"], - "extensions": { - "description": "Mimic Project Token", - "twitter": "https://twitter.com/MimicToken" - } - }, - { - "chainId": 101, - "address": "4hehqMkv8oNXCjicnzZJ6s84Ew7JXGadJk9uzFxWg2QR", - "symbol": "AKARI", - "name": "Akari Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4hehqMkv8oNXCjicnzZJ6s84Ew7JXGadJk9uzFxWg2QR/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "5zryMjwaGbfLNnpCyeohVyjXAFap4RGEdHhaAzVMqB8t", - "symbol": "AKVT", - "name": "Akari Vault Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5zryMjwaGbfLNnpCyeohVyjXAFap4RGEdHhaAzVMqB8t/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "6Nej2Nvgvfjm8uRtsJgQe4UeA1ycoSn6dDLruSKxNrz8", - "symbol": "SNORT", - "name": "Snortcoin", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6Nej2Nvgvfjm8uRtsJgQe4UeA1ycoSn6dDLruSKxNrz8/SNORTcoin.png", - "tags": ["social-token", "share-with-a-friend"], - "extensions": { - "description": "Share a SNORT with a friend", - "website": "https://snort.zedazi.com" - } - }, - { - "chainId": 101, - "address": "AQn8JG2DFQ2kNisrue6THwksYWravFTmU1boUnSVjBKU", - "symbol": "GOLFBET", - "name": "Golf BET Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MorisBR/MyCrypto/main/GolfLogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EYV1w4tZDqC7TkBKTmLwx2r5y8no2W6EFnNFmedsugWa", - "symbol": "ODKYV2", - "name": "OddKey V2", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EYV1w4tZDqC7TkBKTmLwx2r5y8no2W6EFnNFmedsugWa/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://oddkey.com" - } - }, - { - "chainId": 101, - "address": "FExy4ZgUdvJeAcb7E2kciNEfz8wzvr4uVUufvX6jMHX7", - "symbol": "LIQ-RAY-BATTERY-USDC", - "name": "BATTERY USDC Raydium Liquidity Pair", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/faction-cards/assets/main/images/coins/SFC-BATTERY-USDC-POOL/logo.png", - "tags": ["social-token", "utility-token", "community-token"], - "extensions": { - "description": "Solana Faction Cards enables staking, governance and cross-chain multiverse.", - "discord": "https://discord.com/invite/Wkjp3DhJuZ", - "github": "https://github.com/faction-cards", - "twitter": "https://twitter.com/faction_cards", - "website": "https://faction.cards" - } - }, - { - "chainId": 101, - "address": "8Q6hdoeaCsEA6N26SMwfQd3D1nAskkbjzdzsCWcen1fV", - "symbol": "AEK", - "name": "Amberlyn Electric Kitten", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/De-veloper/token/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4dGfhcjNAQojhTXqaWnn4VmgqBwaRFyXHcbS299yrfdM", - "symbol": "TDEV", - "name": "trevdev", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/trevor256/trevdev-token/main/trevdev.svg", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "D5BYCgj9ATrgtPBvac1eXBF7T87Bfi85JdtvCnTKZZb9", - "symbol": "DD44", - "name": "Domestic Disorder", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/paddysc/crypto/main/DD44.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "TombLgeWCentYMpgGZHxqUG6KiPcACXWfeVAuwrVC11", - "symbol": "THS", - "name": "TombStoned High Society WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/TombLgeWCentYMpgGZHxqUG6KiPcACXWfeVAuwrVC11/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/TombStonedHS", - "website": "https://www.tombstoned.xyz" - } - }, - { - "chainId": 101, - "address": "CELeSTbECuuPkTtSZ9pSUw6Z3CPxm1ggbrhmdhVpxzwD", - "symbol": "CLZ", - "name": "CELESTIALZ WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CELeSTbECuuPkTtSZ9pSUw6Z3CPxm1ggbrhmdhVpxzwD/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/CELESTIALZ777", - "website": "https://www.celestialznft.io" - } - }, - { - "chainId": 101, - "address": "BoFxKXdyiEYJReWGZAT4tavuAo3D1BmDyXK5VFSXd4EF", - "symbol": "BOFx", - "name": "BitOptionsFx", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BoFxKXdyiEYJReWGZAT4tavuAo3D1BmDyXK5VFSXd4EF/logo.png", - "tags": ["BitOptionsFx"] - }, - { - "chainId": 101, - "address": "AgqrB5sJxPC1zq57FEExn4Hm1FCyCBQuiivHYebvvBqU", - "symbol": "BOSE", - "name": "BoseBucks", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/fearthemetal/crypto/main/BoseBuck500cropped.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3wZ9hVw26xRkBcDjgNfUGaQgFsRhqVaZh19ZU2uyg6eo", - "symbol": "LVWL", - "name": "Lazy Villains WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/KingpinFisk/Lazy-Villains-WL-Token/main/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "discord": "http://discord.gg/thelazyverse", - "twitter": "https://twitter.com/thelazyverse", - "website": "https://www.thelazyverse.com/" - } - }, - { - "chainId": 101, - "address": "CCJvffKRwhEEZZUzCwXPgjwZ24EpKJq3WTQt1ntaqZtR", - "symbol": "MSI", - "name": "Musii Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CCJvffKRwhEEZZUzCwXPgjwZ24EpKJq3WTQt1ntaqZtR/logo.png", - "tags": [ - "music", - "music-token", - "social-token", - "community-token", - "play-to-earn" - ], - "extensions": { - "description": "The musical social media on blockchain, a commnunity of a music enthusiasts! A place to exchange musial experience and to connect people through music.", - "discord": "https://discord.gg/pF4cEccH", - "instagram": "https://instagram.com/musii.app", - "linkedin": "https://br.linkedin.com/company/musii-app", - "telegram": "https://t.me/channelappmusii", - "telegramAnnouncements": "https://t.me/appmusii", - "twitter": "https://twitter.com/musiiapp", - "website": "http://musii.app/", - "whitepaper": "https://musii-app.gitbook.io/musii-connecting-people-through-music", - "youtube": "https://www.youtube.com/channel/UCxD2lOQWGDVkgKXWCXriyQw" - } - }, - { - "chainId": 101, - "address": "HGE4xSAfuRZgpYZnt6GZ1vyqbdFafRESLE1AQFGEbBk9", - "symbol": "XDN", - "name": "XeDeen", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/j2deen/crypto-xdn/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7BPCwgL97UMWcSuyUmDdNTzGnDvruyfGKTmUaSbLzohP", - "symbol": "CHEF", - "name": "ChefCoin", - "decimals": 0, - "logoURI": "https://metakitchen.io/static/media/mk.66f4827037442397afe6.jpeg", - "tags": [ - "utility-token", - "game-token", - "game-currency", - "GameFi", - "Gaming" - ], - "extensions": { - "description": "Inspired by our favorite chef competitions, our P2E cooking game will bring the mK NFT collections into the metaverse. Building a community of foodies on Solana.", - "discord": "https://discord.gg/metakitchen", - "instagram": "https://www.instagram.com/metakitchennft/", - "medium": "https://medium.com/@metaKitchen", - "twitter": "https://twitter.com/meta_Kitchen", - "website": "https://metakitchen.io/" - } - }, - { - "chainId": 101, - "address": "HjuNyD8Gt4sTGfFfa98h87p8UgsvJBzWq7EChhy3UcWj", - "symbol": "ML", - "name": "Mathieu Lefebvre Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Matlefebvre1234/MathieuLefebvreToken/main/logo.png", - "tags": ["community-token", "meme-token"], - "extensions": { - "website": "https://www.mathieulefebvre.dev" - } - }, - { - "chainId": 101, - "address": "GjKfZatPZijAJJEPMQ9rXJX7foTb2943xAxQgiPfjZoy", - "symbol": "FC", - "name": "fish coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Nonfungiblestuff/cryptofish/main/fish_crypto_crop.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8G9zfZHLPCrrowGWj5RV5WYq2uKgAQSwsAe7NWZS8JVt", - "symbol": "CUNY", - "name": "CunnyCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/QTAnimeWaifu/crypto/main/CunnyCoinFinal.png", - "tags": ["social-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/2DFDAbigail" - } - }, - { - "chainId": 101, - "address": "9MVgPE22LCr91QWuZvJrnPXggMi9GsEqt9coWEW3BAbe", - "symbol": "MSDT", - "name": "MS Delta Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MS-Delta-Token/crypto/main/Delta%20Token-logos%20png.png", - "tags": [ - "community-token", - "meme-token", - "whitelist-token", - "social-token" - ], - "extensions": { - "discord": "https://discord.gg/G4rQUZ75gv", - "instagram": "https://www.instagram.com/msdeltatoken/", - "twitter": "https://twitter.com/MSDeltaToken" - } - }, - { - "chainId": 101, - "address": "HZBxUY5Hu9HNm6HSXrPQ77ABf9ZLqzUigCbTQiarBR2v", - "symbol": "BTCUBI", - "name": "Bitcoin UBI", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HZBxUY5Hu9HNm6HSXrPQ77ABf9ZLqzUigCbTQiarBR2v/robot-logo.jpg", - "extensions": { - "twitter": "https://twitter.com/hello_btcubi", - "website": "https://bitcoinubi.com/" - } - }, - { - "chainId": 101, - "address": "27oGLMCDP57DE77rfVfe35oJaAnimFasJs3HyuaDUuuU", - "symbol": "BKSP", - "name": "Blackspot coin", - "decimals": 7, - "logoURI": "https://raw.githubusercontent.com/BahamaGov/assets/main/gold_PNG11020.png", - "tags": ["community-token"] - }, - { - "chainId": 101, - "address": "SSSCzT3yBad6GsSAcftqbbdcwBnLaBtXU6gYgDUMUAT", - "symbol": "SSS", - "name": "SolSkies WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SSSCzT3yBad6GsSAcftqbbdcwBnLaBtXU6gYgDUMUAT/logo.png", - "extensions": { - "twitter": "https://twitter.com/SolSkiesNFT" - } - }, - { - "chainId": 101, - "address": "JYxEEzuxzZhUybcbBSV126jaqzEvqPT1TC5NVWaYgWy", - "symbol": "JY", - "name": "JOY153", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/JYxEEzuxzZhUybcbBSV126jaqzEvqPT1TC5NVWaYgWy/logo.png" - }, - { - "chainId": 101, - "address": "3DCMhZ6aDVGjMYYhehYrvCEPxmvuvCLfqhCmMQRYeDy4", - "symbol": "BUSSY", - "name": "BussyCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/QTAnimeWaifu/crypto/main/logo.png", - "tags": ["social-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/AstolfoFindom" - } - }, - { - "chainId": 101, - "address": "ToibiuwmaQVvbTdJ7Bor837TvXeKs7LG8CGhsqHLG46", - "symbol": "TF-Pre", - "name": "TwoFace-Pre", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ToibiuwmaQVvbTdJ7Bor837TvXeKs7LG8CGhsqHLG46/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/yX4pMPsz", - "twitter": "https://twitter.com/TwoFace_SOL", - "website": "https://www.twofaceportraits.io/" - } - }, - { - "chainId": 101, - "address": "DPwMbbfgAYoUzvwnY7S9ZTwcmTdKiL3GufPbU3sSn7Zt", - "symbol": "OLVC", - "name": "Olivcoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/rodrix1/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DqPwxiqS9ooPZftazpNUU8hM4wPdhZ6W94Pcyig1SQFL", - "symbol": "JPNS", - "name": "Japanese", - "decimals": 3, - "logoURI": "https://japanesewave.netlify.app/static/media/face.8bf18402cd3f3784c76e.png", - "extensions": { - "discord": "https://t.co/B41RzZZJGf", - "twitter": "https://twitter.com/Japanese_Wave", - "website": "https://japanesewave.netlify.app/" - } - }, - { - "chainId": 101, - "address": "VCNnsZ8ZSHExJzhavmfg8aPZ93WxmRhELMLq8K3HwYy", - "symbol": "VCN", - "name": "Vercinia", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/VCNnsZ8ZSHExJzhavmfg8aPZ93WxmRhELMLq8K3HwYy/logo.png", - "extensions": { - "twitter": "https://twitter.com/VerciniaNFT" - } - }, - { - "chainId": 101, - "address": "HMaAwHa6AxDSvV6w3NGsSP7FNGx3MtGUErBGji7mRARZ", - "symbol": "ZENERGY", - "name": "ZENERGY", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/donaldlee725/som-pfp/main/zenergy.png", - "tags": ["GOAT"], - "extensions": { - "animationUrl": "https://raw.githubusercontent.com/donaldlee725/som-pfp/main/zenergy.gif", - "description": "Spiritual Goats Passive Income Token", - "twitter": "https://twitter.com/spiritualgoats", - "website": "https://www.spiritualgoats.com/" - } - }, - { - "chainId": 101, - "address": "USDV47taduJQSPePwGsFR9GPbYRbmRt8BCx2fRRYJEt", - "symbol": "USDV", - "name": "Virtual USD", - "decimals": 4, - "logoURI": "https://media.atellix.net/token/usdv.png", - "tags": ["stablecoin"], - "extensions": { - "description": "Virtual USD® Stablecoin from Atellix", - "discord": "https://discord.gg/qC9azB6BeP", - "twitter": "https://twitter.com/atellix", - "website": "https://atellix.com/" - } - }, - { - "chainId": 101, - "address": "EdRTiG6J4cZEtrYtwVwVBQQG2enm6PCQTGbuy5o1rPrz", - "symbol": "SXM", - "name": "SpaceXmove", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/Robby3082/test-token/main/SXM.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "G5EsRrog1WAgxUVJdLzS137wU1TjPtcDqMd1LHfvUCXB", - "symbol": "KHN", - "name": "KushCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/alexkush35/crypto/main/kush.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "82bfDckzpVhcUsrytjWRS1jw5akjgJ4mMFqGLA2cD9pe", - "symbol": "MCN", - "name": "MarCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/OkramCivejdan/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "F6GSD1MjUAyS4KbnoMsUBsXuyimPH61e2Y8ytQWAAwFH", - "symbol": "QMR", - "name": "Qamar", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ibbe13/crypto/main/Untitled-1.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Ewv5Y641TPYoFLBdb8XkWCukHbvW49ACzXMhcKtAy4xD", - "symbol": "ddSOL", - "name": "ddSOL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Ewv5Y641TPYoFLBdb8XkWCukHbvW49ACzXMhcKtAy4xD/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://dazedducks.com" - } - }, - { - "chainId": 101, - "address": "Fuj1gZHrGu7x3W5uab7CrSXuy9cZ3qqc1me5LjGykt4d", - "symbol": "ApesPlanet", - "name": "Apes Planet", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/affankhan43/crypto/master/apes-logo.png", - "tags": ["nft", "metaverse", "P2e", "Gaming"], - "extensions": { - "description": "Apes Planet is a civilization where 7,777 Ape Warriors live mastering the art of war", - "discord": "https://discord.com/invite/apesplanet", - "twitter": "https://twitter.com/ApesPlanetNFT" - } - }, - { - "chainId": 101, - "address": "3F2nPGTipnAM8BRs6hNmwYvyXTUyFRe5We4MqbGfSkUm", - "symbol": "3MSP", - "name": "3MSP DSC", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/autonux/3MSP-Solana-Token/main/logo.png", - "tags": ["social-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/3MSP", - "website": "http://www.3msp.net/" - } - }, - { - "chainId": 101, - "address": "AD5PZKiJNyCxaixUqp6qRxLHy5t6nAoqU3bE1bYoiHAJ", - "symbol": "NABI", - "name": "NABI wl", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AD5PZKiJNyCxaixUqp6qRxLHy5t6nAoqU3bE1bYoiHAJ/token.jpg", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "DAM8b7iGuMCo5oaAP7BRh41NMBC6Ni7t4fg37zBRq6Q4", - "symbol": "DAM", - "name": "DAN AND MITCHY", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DAM8b7iGuMCo5oaAP7BRh41NMBC6Ni7t4fg37zBRq6Q4/logo.png" - }, - { - "chainId": 101, - "address": "ZeCy2psga81yrLTZFF77vr9gXCuTg3CicfycRv591AW", - "symbol": "LCT", - "name": "Lucky Cat Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/wishnudh/webpro/master/goldicon.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/luckycatSCTY", - "website": "https://www.luckycatsociety.com/" - } - }, - { - "chainId": 101, - "address": "MoNKaiYiiXeUGHHmCL9ABaDVLstSDMz3qH5at93puvy", - "symbol": "MONKAI", - "name": "MONKAI TOKEN", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/Neurologist/assets/main/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Monkai are the first Multi-chain Generative GIF NFTs on ETH \u0026 SOL, bringing new DeFi stake + farm tokenomics to the Blockchain", - "discord": "https://discord.gg/monkai", - "twitter": "https://twitter.com/monkainft", - "website": "https://monkainft.com/" - } - }, - { - "chainId": 101, - "address": "41QDYHN8UKDt4iJiBLgYDDZ22aF6pBFgX7kto2djERNf", - "symbol": "DOTBUCKX", - "name": "DotBuckx", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Player172/DotBuckx/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7rrJLRar2WjZwRoF3iJKHKnA7d7d9YJT1X9HAJnwUH3Z", - "symbol": "WIZE", - "name": "Project Wisdom", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7rrJLRar2WjZwRoF3iJKHKnA7d7d9YJT1X9HAJnwUH3Z/logo.png" - }, - { - "chainId": 101, - "address": "7FEN3FFaWcjiYcajh71qqfAW4eJX8Xr3b7hwHcwTFae8", - "symbol": "APK", - "name": "APK Cool", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/apraveenkumar1197/apk_coin/main/crypto_logo.png", - "tags": ["community-token"] - }, - { - "chainId": 101, - "address": "UfoY2nXnXWyYAqcbupnNkfkRoGkNqYkdCHY6CyR56MZ", - "symbol": "JVNT", - "name": "Jovinite", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/0xJovin/solana/main/95069323-removebg-preview.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ToHR6aQ4RTDEVhcXbVTarQvajGJD72GyPLSHt9iApLJ", - "symbol": "SLSWL", - "name": "Solaptops WL token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ToHR6aQ4RTDEVhcXbVTarQvajGJD72GyPLSHt9iApLJ/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "discord": "https://discord.gg/YJfG8tcSmu", - "twitter": "https://twitter.com/solaptops", - "website": "https://www.solaptops.xyz/" - } - }, - { - "chainId": 101, - "address": "5P3giWpPBrVKL8QP8roKM7NsLdi3ie1Nc2b5r9mGtvwb", - "symbol": "STR", - "name": "Stream Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5P3giWpPBrVKL8QP8roKM7NsLdi3ie1Nc2b5r9mGtvwb/logo.jpg", - "tags": ["community-token", "utility-token", "governance-token"], - "extensions": { - "twitter": "https://twitter.com/dao_stream", - "website": "https://streamdao.org/" - } - }, - { - "chainId": 101, - "address": "VVKNtVuJJ1fYPAh2tRbZWVssiRVY6Z8hari5DbR9omy", - "symbol": "VPASS", - "name": "Verdant Pass", - "decimals": 0, - "logoURI": "https://i.ibb.co/hgQmnRj/icon-fix.png", - "tags": ["wl-token"] - }, - { - "chainId": 101, - "address": "3MZsyU7GqgXyg4R6fDM6bGCqAqMCcPbiBGeyNvXCCt6v", - "symbol": "SPEAK", - "name": "SPEAK", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SolidityDevs/Solana-Peak/main/solopeak.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "8bkxAiCsAsM3iPaEhqCjhjKU3XNuGAqgAAuCG6o8eW24", - "symbol": "BUXO", - "name": "Buxon Development Group", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8bkxAiCsAsM3iPaEhqCjhjKU3XNuGAqgAAuCG6o8eW24/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/BuxonGroup" - } - }, - { - "chainId": 101, - "address": "GpdFKHRW23verFBHWRMAmvmwQmkwfyUiJFAALwcrUt8y", - "symbol": "CC", - "name": "Child Coins", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ChildCoins/crypto/main/child_coins_logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CoyECRaedmKEpwySLTKsZJhpSQFAWpUfszaMTHVZSKPi", - "symbol": "GUG", - "name": "GugCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/vihaan-s1ngla/customToken/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GTFBBcnRCT6Pa7rxDQHyYW4KMMebvkhB17dKBRkcHw78", - "symbol": "AML", - "name": "AmalThea Protocol", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GTFBBcnRCT6Pa7rxDQHyYW4KMMebvkhB17dKBRkcHw78/logo.jpg", - "tags": ["Game-Token", "AML"] - }, - { - "chainId": 101, - "address": "52ndEqJE9nrTkUWoADWHzPgKsFD1RvJdNgL9x6JnL1zo", - "symbol": "MPC", - "name": "M P Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/He1senberg11/MPCoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AASZr8AE3AK6nuSv7vJSdMgAUhKhsbg4iuRb1M81ETMN", - "symbol": "PSG", - "name": "ProSport Guru Token", - "decimals": 0, - "logoURI": "https://github.com/faugan2/psg-new-token/blob/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "2GRf3hnKg3Cpbpt2PSzYeaKcoQXLnG87Yei6DWbKX2xC", - "symbol": "USDT", - "name": "xldUSDT (XLD Devnet)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB/logo.svg", - "tags": ["stablecoin"], - "extensions": { - "twitter": "https://twitter.com/XLDFinance", - "website": "https://xld.finance/" - } - }, - { - "chainId": 103, - "address": "4HK5XDLp6EkduexYYjwDErMTWBmrSbGYPYSLiho9U1Xu", - "symbol": "FURR", - "name": "FurrSols Governance Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/furrsols/assets/main/FURR_GIF.gif", - "tags": ["governance-token"], - "extensions": { - "twitter": "https://twitter.com/Furr_Sols", - "website": "https://furrsols.io/" - } - }, - { - "chainId": 103, - "address": "FfnsNNWAx7xKTKFAjzD7m7uSi5n6MF1w8zj75J4ErFXS", - "symbol": "USDT", - "name": "xldUSDT (Devnet)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB/logo.svg", - "tags": ["stablecoin"] - }, - { - "chainId": 103, - "address": "8d1CoyqxTbvhcwdN2eBmqQChrmodHyVsLE96GnZmr2W6", - "symbol": "SLP", - "name": "xldSLP (Devnet)", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4hpngEp1v3CXpeKB81Gw4sv7YvwUVRKvY3SGag9ND8Q4/logo.png", - "tags": ["wrapped"] - }, - { - "chainId": 103, - "address": "CWGqLA6zaRvJvVgz7NimdvHe8BmkscjmAa9fiYgqdiXJ", - "symbol": "DAI", - "name": "xldDai (Devnet)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EjmyN6qEC1Tf1JxiG1ae7UTJhUxSwk1TCWNWqxWV4J6o/logo.png", - "tags": ["wrapped"] - }, - { - "chainId": 101, - "address": "CThP76CAbtqBZEgqHWf5W9eSkDj7JGaBoz6dVbnWA7hE", - "symbol": "BFFC100$b", - "name": "Bank of Fone Fan Club", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/danny8252/BFFC100-b/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "9mvbLC3pB2wdTHxiiiQqQre6bHr9TQ6DXVkfe3ckcYYG", - "symbol": "TURBO", - "name": "Turbo Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9mvbLC3pB2wdTHxiiiQqQre6bHr9TQ6DXVkfe3ckcYYG/logo.png", - "tags": ["automotive-token"], - "extensions": { - "twitter": "https://twitter.com/TurbochargedNFT" - } - }, - { - "chainId": 101, - "address": "5oNoVpYsFteFdiGovkLFXebrSnGDqX3MgqJNAXwsuPM9", - "symbol": "MDUK", - "name": "My Ducky Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/an7ana5-2/My-Ducky-Coin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "86PgpRgnhojD5b4ExVSNZ8QFc3WjcnTxChr35cuJU2yx", - "symbol": "TCOIN", - "name": "TJ COIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/tjgill1/cryptopng/main/Baby.tux-800x800.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7FqS7Zc1SzT79kCNtbDzsm85vZfBRR53FaUN2r4Z1dAC", - "symbol": "SMTGEM", - "name": "SmartGem", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7FqS7Zc1SzT79kCNtbDzsm85vZfBRR53FaUN2r4Z1dAC/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://smartgems.org" - } - }, - { - "chainId": 101, - "address": "6NdLV4H1BUwKSFK51S6XhVUGVXNseZtmGi1vgqs27HHN", - "symbol": "B0YZ", - "name": "The Boyz Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/theboyzyeg/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "22KcF82BzNg14X2eWMKLYPEykQz3mZPLe7fun3R3vq72", - "symbol": "Rabbit", - "name": "RTO-Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/edmontana77/crypto2/main/RTO.png", - "tags": ["social-token", "nft", "metaverse"] - }, - { - "chainId": 101, - "address": "7Cn6jmWSDZguFDizQURcLVGJf6Ct7i2RSo5d11A7Egix", - "symbol": "GoNPWL", - "name": "Gangs of New Pork White List Ticket", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7Cn6jmWSDZguFDizQURcLVGJf6Ct7i2RSo5d11A7Egix/logo.png", - "tags": ["utility-token", "whitelist-ticket"] - }, - { - "chainId": 101, - "address": "AefuNcVikKudanCHGRB5KkjdUoen9QBL4fFX6q1kGsRe", - "symbol": "GEEXOWL", - "name": "GEEXO Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AefuNcVikKudanCHGRB5KkjdUoen9QBL4fFX6q1kGsRe/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/exfYm6uJay", - "instagram": "https://www.instagram.com/geexolotls/", - "twitter": "https://twitter.com/geexolotls", - "website": "https://www.geexolotls.com/" - } - }, - { - "chainId": 101, - "address": "HBfHbAuCFCP34rSkPMXEt5UuLf8HH3SbuvH7DPA6aX8Q", - "symbol": "CITRUS", - "name": "CITRUS Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HBfHbAuCFCP34rSkPMXEt5UuLf8HH3SbuvH7DPA6aX8Q/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "http://certifiedcitric.com" - } - }, - { - "chainId": 101, - "address": "8iWMXSUViPHYZDEpXiXZFiMo956VDCKMij1VUiE3VbDF", - "symbol": "JBKA", - "name": "Ben Dover", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/PavleSavic90/KriptoSlika/main/SamoZdravoBajoMoj.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7Nz4gAXydZcWHPN1EBxM1Rqzoaz7btyRVFhLN7PkfoJR", - "symbol": "DILLO", - "name": "DILLO", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/JaxSolana/dillo/Logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/TheArmadillos", - "website": "https://angrydillos.com/" - } - }, - { - "chainId": 101, - "address": "GENRi6N2JvqRxLhcE89EK2ZPpiRQBg6D68Z25kK4RgcE", - "symbol": "GENR", - "name": "Generous Robots Dutch Auction Presale Token", - "decimals": 9, - "logoURI": "https://imagizer.imageshack.com/img924/7092/CTMJJy.jpg", - "tags": ["community-token", "whitelist-token"], - "extensions": { - "instagram": "https://www.instagram.com/generous_robots", - "twitter": "https://twitter.com/GenerousRobots", - "website": "https://generousrobots.com/" - } - }, - { - "chainId": 101, - "address": "WLkccWEEH6k6x7CZpaszQSwqK9VjQwabMV4wkaW3bxo", - "symbol": "GLDWL", - "name": "Gold Alpha Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WLkccWEEH6k6x7CZpaszQSwqK9VjQwabMV4wkaW3bxo/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "discord": "https://discord.gg/thegoldalpha", - "twitter": "https://twitter.com/TheGoldAlpha", - "website": "https://thegoldalpha.com/" - } - }, - { - "chainId": 101, - "address": "6xnUqAfxvDTZepHNWK1NsxXkjhFdTvuaGVXh3z29wRhx", - "symbol": "BONEZ", - "name": "Bonez", - "decimals": 6, - "logoURI": "https://i.ibb.co/Wk2BhWS/lastskull.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "Dq8zr1M6vbSLM9rvVpqTN6Lb82m3wEpxPrTZp7fXZ3wQ", - "symbol": "CCWLT", - "name": "CERTIFIED CITRIC WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Dq8zr1M6vbSLM9rvVpqTN6Lb82m3wEpxPrTZp7fXZ3wQ/wl-logo.png", - "tags": ["utility-token", "whitelist-token"], - "extensions": { - "website": "http://certifiedcitric.com" - } - }, - { - "chainId": 101, - "address": "E2TXx1wFHNEGBtTfNgw6mVCmV9gRH45jyYNQwHJUH9oc", - "symbol": "QCUT", - "name": "QCU Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jcp-qcu/crypto/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "LoTrcDXVtmu7CPaxnsVifJD8wwcEr4fhxKykrAQDKWE", - "symbol": "LOT", - "name": "Lottery", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/LoTrcDXVtmu7CPaxnsVifJD8wwcEr4fhxKykrAQDKWE/logo.png", - "tags": ["utility-token", "lottery", "casino"], - "extensions": { - "twitter": "https://twitter.com/lotme_official", - "website": "https://lotme.in" - } - }, - { - "chainId": 103, - "address": "JD4oidcWARRJindyzyJxfAVYsv83wAsqyPdKS3Bphhej", - "symbol": "DCTX", - "name": "DCOSTA", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/JD4oidcWARRJindyzyJxfAVYsv83wAsqyPdKS3Bphhej/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 103, - "address": "EDzBtG9AmwLoVBcDAn7StDJPb5jyfrDKqCYXiUFhBjke", - "symbol": "moso", - "name": "moso Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Moneshsoni/moso_token_crypto/main/moso.png", - "tags": ["moso-token"] - }, - { - "chainId": 101, - "address": "4hiMPLMDGkCRgKnDsXwhVZPZhESgp34ZZqymVHuBu1z2", - "symbol": "MOTS", - "name": "MOTS Game", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4hiMPLMDGkCRgKnDsXwhVZPZhESgp34ZZqymVHuBu1z2/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "MOTS Game is a P2E and NFT mining game developed on the Solana network.", - "telegram": "https://t.me/motsgame", - "telegramAnnouncements": "https://t.me/motsgameannouncement", - "twitter": "https://twitter.com/motsgame", - "website": "https://motsgame.io", - "whitepaper": "https://whitepaper.motsgame.io" - } - }, - { - "chainId": 101, - "address": "FfKd5rGQXMtJaEKFTYLobQBVp4czgCF216DVDPXsCzky", - "symbol": "FFST", - "name": "FluxFusionstreams", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/NItewolf07/crypto/main/FluxFusion_Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "yUXcJCopBT5yiWy3gBQjNNotMP7rzkDScpCoA7z48cU", - "symbol": "y-UXD-USDC", - "name": "Yield Saber LP Token (UXD-USDC)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/yUXcJCopBT5yiWy3gBQjNNotMP7rzkDScpCoA7z48cU/logo.svg", - "tags": ["yield-token"], - "extensions": { - "website": "https://bunnyducky.com/" - } - }, - { - "chainId": 101, - "address": "G7JY5Ui9YghpXCjCAh9bEf3QgZ2HKKmys8JggNmhzH6k", - "symbol": "$GODzWL", - "name": "GODz WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/G7JY5Ui9YghpXCjCAh9bEf3QgZ2HKKmys8JggNmhzH6k/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/C4WG3YZCbN", - "twitter": "https://twitter.com/nft_godz", - "website": "https://godznft.com/" - } - }, - { - "chainId": 101, - "address": "EJt3iszkR6GKiV1YSyefB2GaHsXniyVAjAtS9mrxyTZR", - "symbol": "MCCN", - "name": "Collider Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EJt3iszkR6GKiV1YSyefB2GaHsXniyVAjAtS9mrxyTZR/logo.jpg", - "tags": ["utility-token"], - "extensions": { - "website": "https://collidercoin.com" - } - }, - { - "chainId": 101, - "address": "G8KevG5RY3KgikX6iDHKaNSP7R2ERyDF9JFaTS1z1nms", - "symbol": "acUSDC", - "name": "Accrue USDC", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/G8KevG5RY3KgikX6iDHKaNSP7R2ERyDF9JFaTS1z1nms/logo.png", - "extensions": { - "twitter": "https://twitter.com/accrue_finance", - "website": "https://accrue.finance" - } - }, - { - "chainId": 101, - "address": "8RiWas3o1R6Dt1AVd3g4FUT6Ga4vGKW6BachqK86Pgaq", - "symbol": "acSOL", - "name": "Accrue SOL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8RiWas3o1R6Dt1AVd3g4FUT6Ga4vGKW6BachqK86Pgaq/logo.png", - "extensions": { - "twitter": "https://twitter.com/accrue_finance", - "website": "https://accrue.finance" - } - }, - { - "chainId": 101, - "address": "21ytFGhW4qzCgNp3hf3yzb55R5sXzR4vYrPYm38v7KEe", - "symbol": "GNMZ", - "name": "Gnomez", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/GNOMEZY/crypto/main/logo.jpg", - "tags": ["social-token", "game-token"] - }, - { - "chainId": 101, - "address": "BtwngniRNdE9yUGV2WCxUmmH4HiYituAusR7giJDv566", - "symbol": "MSOL", - "name": "METASOL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/METASOL2022/logomsol/main/Logo_msol.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2aztzADwa8aJHBnyna4yC6m8L433vAbT8fF3CScLhAEm", - "symbol": "CTOKEN", - "name": "CyberToken", - "decimals": 6, - "logoURI": "https://cdn.discordapp.com/attachments/953073433024012328/953216442545877042/logo-white.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/CyberFPS", - "twitter": "https://twitter.com/CyberFPSGame", - "website": "https://cybertrees.io" - } - }, - { - "chainId": 101, - "address": "3USr6wkoCiEXPGmTvTctAa9FrHuMRjBHhsynEBaYH6Ks", - "symbol": "CHEERSK", - "name": "CheersKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Davide-Mario/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5hTVhKaFRvdzkGtByoiW46aYmuS1o1t4kCJfTwTMTkdf", - "symbol": "CLER", - "name": "CLER", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/taviflorutza/CRYPTO/main/CLER.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CjQYX4NkZyk29yHvbquFieY9Cw9jMjXGxyci8Nb7RMc3", - "symbol": "FVR", - "name": "Favor You Owe Me One", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/robertnanu/Favor/main/Favor.png?token=GHSAT0AAAAAABS26XWFBHTDD64BZPVR4FJQYSK4VLA", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GdGhA8PNnfTyCnL8dMSeZffwneXggurPfA7vnRjZMw1r", - "symbol": "PNXKLR", - "name": "PhoenixKiller", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/gurrajman/Token/main/phoenix.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CVatR2DSHovFfFvJqeiuhgbjsHD9NpN9iAaqbVEZRxdW", - "symbol": "SOLAND", - "name": "Soland Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CVatR2DSHovFfFvJqeiuhgbjsHD9NpN9iAaqbVEZRxdW/logo520x520.png", - "tags": ["metaverse-token"] - }, - { - "chainId": 101, - "address": "EnigWcs9jBQvBFnQaHvwGihpzVEELtGC25yxpKeJ68ZV", - "symbol": "ENIGMA", - "name": "Enigma Ventures GEN 2 Whitelist Token", - "decimals": 9, - "logoURI": "https://imagizer.imageshack.com/img922/2193/GEK6pA.jpg", - "tags": ["community-token", "whitelist-token"] - }, - { - "chainId": 101, - "address": "USDrbBQwQbQ2oWHUPfA8QBHcyVxKUq1xHyXsSLKdUq2", - "symbol": "USDr", - "name": "Ratio stable Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/USDrbBQwQbQ2oWHUPfA8QBHcyVxKUq1xHyXsSLKdUq2/logo.png", - "extensions": { - "telegram": "https://t.me/ratiofinance", - "twitter": "https://twitter.com/RatioFinance", - "website": "https://ratio.finance/" - } - }, - { - "chainId": 101, - "address": "HthhdbsiGKeswH7xzh1iyLfM5eLBVFgJyW9PL8CKdgqY", - "symbol": "MIBOUN", - "name": "FA7L BENZARTI TAHAN", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HthhdbsiGKeswH7xzh1iyLfM5eLBVFgJyW9PL8CKdgqY/Bayrem.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HPGcyNmas47AgHrVsyH5A1JnRUxtJvNfLYEBtQ8WjWWL", - "symbol": "HPG_WL", - "name": "Hot Potato Gang Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HPGcyNmas47AgHrVsyH5A1JnRUxtJvNfLYEBtQ8WjWWL/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "description": "Hot Potato Gang Whitelist Token - Token burns after mint", - "discord": "https://discord.gg/4NJHDCmFA3", - "twitter": "https://twitter.com/hotpotatogang", - "website": "https://hotpotatogang.com" - } - }, - { - "chainId": 101, - "address": "AAHdKByKPccoWKYsV5kXXmmuBaS2gzSh7Bg5H3ByXjzD", - "symbol": "$OKSA", - "name": "Test coin", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AAHdKByKPccoWKYsV5kXXmmuBaS2gzSh7Bg5H3ByXjzD/logo.png", - "tags": ["test"] - }, - { - "chainId": 101, - "address": "KoMRKGrap9sQFgeWrM3gNu8jacq2RyhGva6GZQ49xHj", - "symbol": "Komradz", - "name": "Komradz WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/KoMRKGrap9sQFgeWrM3gNu8jacq2RyhGva6GZQ49xHj/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7pDvbQZ9ANogmc36xpjemR1T9ngkxSSvSr1WmuX6cnd", - "symbol": "PECAN", - "name": "PECAN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7pDvbQZ9ANogmc36xpjemR1T9ngkxSSvSr1WmuX6cnd/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://ssa.gg/" - } - }, - { - "chainId": 101, - "address": "6pQnfdrZVm7mASQoRnDfAAi98ngS1eFNij2koW4kUZFS", - "symbol": "DICP", - "name": "DIC punch", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6pQnfdrZVm7mASQoRnDfAAi98ngS1eFNij2koW4kUZFS/logo.png", - "tags": ["community-token"], - "extensions": { - "discord": "https://discord.com/invite/thegimmicks", - "website": "https://www.therealgimmicks.com/" - } - }, - { - "chainId": 101, - "address": "9bCWGwpMK4JGK2mMsPxq62tHFfe82RbwFbnQ7Bgf2PiW", - "symbol": "COA", - "name": "Coal for MOTS Game", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9bCWGwpMK4JGK2mMsPxq62tHFfe82RbwFbnQ7Bgf2PiW/logo.png", - "tags": ["nft"] - }, - { - "chainId": 101, - "address": "A3M9mjaqpeiDxLYn5UmfmpBZMxQKSVCA6F9QMKijdyGZ", - "symbol": "COP", - "name": "Copper for MOTS Game", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/A3M9mjaqpeiDxLYn5UmfmpBZMxQKSVCA6F9QMKijdyGZ/logo.png", - "tags": ["nft"] - }, - { - "chainId": 101, - "address": "8APGrtjuEMDYFf6dPv7ZkhxLKCHgdXhH9dqDi7UhWxJ7", - "symbol": "SIL", - "name": "Silver for MOTS Game", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8APGrtjuEMDYFf6dPv7ZkhxLKCHgdXhH9dqDi7UhWxJ7/logo.png", - "tags": ["nft"] - }, - { - "chainId": 101, - "address": "FGZtrEJFE3rSEVdVjJyorE5RrMHvuLHaGUa4kH5WwMnR", - "symbol": "GOL", - "name": "Gold for MOTS Game", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FGZtrEJFE3rSEVdVjJyorE5RrMHvuLHaGUa4kH5WwMnR/logo.png", - "tags": ["nft"] - }, - { - "chainId": 101, - "address": "Gq3v8BadgWv66pLnyU6yuk8EkVKz6a9rtrYCejN6F2r5", - "symbol": "DIA", - "name": "Diamond for MOTS Game", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Gq3v8BadgWv66pLnyU6yuk8EkVKz6a9rtrYCejN6F2r5/logo.png", - "tags": ["nft"] - }, - { - "chainId": 101, - "address": "8nRPoRxueGMx3ZoD2kws6dr6iHcYffRNWUMC7LBQgHjD", - "symbol": "COL", - "name": "Coltan for MOTS Game", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8nRPoRxueGMx3ZoD2kws6dr6iHcYffRNWUMC7LBQgHjD/logo.png", - "tags": ["nft"] - }, - { - "chainId": 101, - "address": "BRWmzjdY5dHgXsWRa7a3kuM22NEyDk6eAX8d7yx4bR7L", - "symbol": "PAI", - "name": "Painite for MOTS Game", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BRWmzjdY5dHgXsWRa7a3kuM22NEyDk6eAX8d7yx4bR7L/logo.png", - "tags": ["nft"] - }, - { - "chainId": 101, - "address": "2LUeVhXSQs4nUtiv6BY3pN1wF4y1XsNTaqXJ4LDwc3Hy", - "symbol": "BAO", - "name": "Black Opal for MOTS Game", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2LUeVhXSQs4nUtiv6BY3pN1wF4y1XsNTaqXJ4LDwc3Hy/logo.png", - "tags": ["nft"] - }, - { - "chainId": 101, - "address": "297ddHYikegC7NFPZyn7R2fV6GXrkHLDX3dKo5KBdA3Z", - "symbol": "RED", - "name": "Red Diamond for MOTS Game", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/297ddHYikegC7NFPZyn7R2fV6GXrkHLDX3dKo5KBdA3Z/logo.png", - "tags": ["nft"] - }, - { - "chainId": 101, - "address": "2fLfRiX7cCWk9SZfmZbbjnJF6HE5qENjopPmnhMovfhd", - "symbol": "BLO", - "name": "Blue Opsidian for MOTS Game", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2fLfRiX7cCWk9SZfmZbbjnJF6HE5qENjopPmnhMovfhd/logo.png", - "tags": ["nft"] - }, - { - "chainId": 101, - "address": "pToHR9ATnztDaF6CqK3CqQV6MVDkCfAFwrjstktatXS", - "symbol": "pTICKETS", - "name": "pTickets", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/pToHR9ATnztDaF6CqK3CqQV6MVDkCfAFwrjstktatXS/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "3HGKM3rj9XmVfyGmQR4D2md6vRDoVKwcicWXDnb7cGtZ", - "symbol": "CRZCN", - "name": "CruiseCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/crzcoindev/CruiseCoin/main/shiplogo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "D5Q4JrSS1zdH5k5Z8hVUV3gVyhQTx5x1v9dqsNChAdma", - "symbol": "FRAME", - "name": "NEOFRAME", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/rxrxrxrx/neoframe/neoframe.png", - "tags": ["neoframe", "print", "frame"], - "extensions": { - "twitter": "https://twitter.com/Neo_Frame_NFT", - "website": "https://neoframe.io/" - } - }, - { - "chainId": 101, - "address": "D34QaWVkFZn3Z4rgCbzjaT9NviVLmvGEBgxHpP5f3bdR", - "symbol": "acBTC", - "name": "Accrue BTC", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/D34QaWVkFZn3Z4rgCbzjaT9NviVLmvGEBgxHpP5f3bdR/logo.png", - "extensions": { - "twitter": "https://twitter.com/accrue_finance", - "website": "https://accrue.finance" - } - }, - { - "chainId": 101, - "address": "6v4qfXy1yWpVEbmK4Juz3iMDdo6EPg5gJm1rtDb2jqVa", - "symbol": "RIZE", - "name": "RIZE NETWORK TOKEN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/abovewallstreet/RIZE-NETWORK/main/assets/RIZE%20NETWORK%20LOGO-blk-500x500.png", - "tags": ["utility-token", "NFT-platform", "DAO"], - "extensions": { - "discord": "https://discord.gg/c9537zpxrt", - "telegram": "https://t.me/rizenetwork", - "twitter": "https://twitter.com/rizetoken", - "website": "https://rizenetwork.com" - } - }, - { - "chainId": 101, - "address": "AVkxtqhLSjkP4XjSchmpA9xTrXWvLsVkpiqC9VdUqyQX", - "symbol": "DNCS", - "name": "Dees Coins", - "decimals": 0, - "logoURI": "https://cdn.discordapp.com/attachments/794737676875071500/958158985482096711/LOGO.png?size=4096", - "tags": ["community-token", "whitelist-token", "metaverse-token"] - }, - { - "chainId": 101, - "address": "CWintzgasUVMK5YVbnwrNjMEV3Uen6rYYqbXNdXxKqnQ", - "symbol": "CWint", - "name": "CatchKing Winter Coupon", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CWintzgasUVMK5YVbnwrNjMEV3Uen6rYYqbXNdXxKqnQ/icon.png", - "tags": ["winter-coupon", "game-token", "utility-token"], - "extensions": { - "discord": "https://discord.gg/catchking", - "twitter": "https://twitter.com/catch_king", - "website": "https://www.catchking.io/" - } - }, - { - "chainId": 101, - "address": "rafWuTLdrLuQs1CpAkVsZnerGPto6B7gHU7B12fNa37", - "symbol": "RAFDSTK", - "name": "RAF Dev Stakereward", - "decimals": 6, - "logoURI": "https://arweave.net/grzrJ41ji5LtJ0P6iQtOOD5mA49IpXpq6mI9Uao7I8Y", - "tags": ["whitelist-token"], - "extensions": { - "discord": "https://discord.gg/W8fra6bABu", - "twitter": "https://twitter.com/rationalasf", - "website": "https://linktr.ee/rationalasfuck", - "youtube": "https://www.youtube.com/c/RationalAF" - } - }, - { - "chainId": 101, - "address": "rafbXPy26CD2oavXQQcpLafRVdp3TUamFiPQj3pkGEu", - "symbol": "RAFDMNT", - "name": "RAF Dev Mint", - "decimals": 0, - "logoURI": "https://arweave.net/4luPz027xADW_ysqoe9qcy6ooVDgA1hB20bqhktmQYk", - "tags": ["whitelist-token"], - "extensions": { - "discord": "https://discord.gg/W8fra6bABu", - "twitter": "https://twitter.com/rationalasf", - "website": "https://linktr.ee/rationalasfuck", - "youtube": "https://www.youtube.com/c/RationalAF" - } - }, - { - "chainId": 101, - "address": "5KwJTX1iHzYNKjWDqz8d3zMnqAAaVkZhsT3qqPWGSqF6", - "symbol": "MOBF", - "name": "Bouyant Fairies (A Mad Owls collection)", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5KwJTX1iHzYNKjWDqz8d3zMnqAAaVkZhsT3qqPWGSqF6/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/4zv3vhHTUn", - "twitter": "https://twitter.com/MadOwlsNFT", - "website": "https://madowls.art/" - } - }, - { - "chainId": 101, - "address": "GCHK2hkKoQBfoiyChty5kddQNGqodwKwxdr6MYaYVmSn", - "symbol": "GLOW", - "name": "Glow Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GCHK2hkKoQBfoiyChty5kddQNGqodwKwxdr6MYaYVmSn/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/AkariLabs", - "website": "https://akarilabs.io/" - } - }, - { - "chainId": 101, - "address": "Em3mRfTT8ZXp1U8eGZKCbrHW6ciBJn5UqaWfHemXnbCd", - "symbol": "GVAULT", - "name": "Glow Vault Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Em3mRfTT8ZXp1U8eGZKCbrHW6ciBJn5UqaWfHemXnbCd/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/AkariLabs", - "website": "https://akarilabs.io/" - } - }, - { - "chainId": 101, - "address": "WMagFCZ3JWiFF9vmbvkNxNK52hX74Jhzk6GzcyZCdcD", - "symbol": "$WMAGIC", - "name": "Witch Kingdom Magic Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WMagFCZ3JWiFF9vmbvkNxNK52hX74Jhzk6GzcyZCdcD/logo.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "website": "https://www.witchkingdom.com/" - } - }, - { - "chainId": 101, - "address": "51JGqKym9sz2UsMFksgqg9uynWrVXev2RtdexQfH4SLi", - "symbol": "WLIST", - "name": "WhitelistAIO WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Heisenberg-sol/name/main/WhitelistAIO_WL.png", - "tags": ["whitelist-token"], - "extensions": { - "discord": "https://discord.gg/6U6MyKr7pb" - } - }, - { - "chainId": 101, - "address": "9gmRW9iXfq8VdRjekgMX5tf3m572wofcdyXwrqfo4eZ4", - "symbol": "GRDY", - "name": "Greedy", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9gmRW9iXfq8VdRjekgMX5tf3m572wofcdyXwrqfo4eZ4/GREEDYCOIN-min.png" - }, - { - "chainId": 101, - "address": "HBrjj2814WZrB7zrTmkvxUiETG1QqDWCmM5CQAtHL2kF", - "symbol": "LAMC", - "name": "LamarcaCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/testbughub/Crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7QxPk2TmM8WXASKKDdduTiYJzzHKEyeLTQh4UfQVBxpN", - "symbol": "ELC", - "name": "Eloncoin1", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ElonCoin0101/ElonCoin/main/ElonCoin-logos.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "PYQXgjSLLSXJqdfNspjqdaJHLAAS9dxSkpxs3srbWkH", - "symbol": "CRAB", - "name": "Crabcoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/undert0wn/crypto/main/crab.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4hUEY2tvFzKhFUTYnF36fEygktrUmnY1pqaefcVoyf1w", - "symbol": "KSC", - "name": "Khasla Raj Network", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/tjgill1/Khalsa-img/main/khasla.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6wa8ydqbVdbLapvfeXSfdV8gR2ZSTGfeJCqsD3NZ5zpq", - "symbol": "Dj", - "name": "Dj Coin", - "decimals": 9, - "logoURI": "https://github.com/Fulkatomas/DjCoin/blob/main/logo.png", - "tags": ["currency"], - "extensions": { - "facebook": "https://www.facebook.com/Dj-Coin-103643742309595", - "twitter": "https://twitter.com/Dj1Coin" - } - }, - { - "chainId": 101, - "address": "CEN5hFZKA1vY9g9BQYF9oejXhe9zqJ13ckxmo4CpHWa1", - "symbol": "CentWL", - "name": "Centaurians WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CEN5hFZKA1vY9g9BQYF9oejXhe9zqJ13ckxmo4CpHWa1/CentauriansWLToken.svg", - "tags": ["utility-token", "social-token", "governance-token"], - "extensions": { - "description": "Multi-Utility Community Driven Project with 3,000 Centaurians on the Solana blockchain. In the desolate era of humankind's devolution, remaining survivors embark on a final mission to seek out salvation. Their adventure is cut short from otherworldly forces, will they have what it takes to survive?", - "discord": "http://discord.gg/5mCACy37FQ", - "twitter": "https://twitter.com/The_Centaurians", - "website": "https://centaurians.live" - } - }, - { - "chainId": 101, - "address": "CFJUeSeYQtHgNyzrcmdDFkHmuxh8MPY9kov4GxVsqrhR", - "symbol": "SEMBII", - "name": "Sembii Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/tuvshinorg/Sembii/master/token-logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://www.sembii.com/" - } - }, - { - "chainId": 101, - "address": "REeDoodZrTzXrfH4kyqzznBqwLot1x566St7KPar18g", - "symbol": "REEDS", - "name": "Reeds", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/HippoAlpha/reedslogo/main/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/dNKW3qw7Rw", - "twitter": "https://twitter.com/RenegadeHippos", - "website": "https://www.renegadehippos.com/" - } - }, - { - "chainId": 101, - "address": "5AsCTEEDBH9qpfCP2nVV891cbXHJfXyiQgnKJyUFSzjB", - "symbol": "TBTO", - "name": "Tree Block Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5AsCTEEDBH9qpfCP2nVV891cbXHJfXyiQgnKJyUFSzjB/logo1.png" - }, - { - "chainId": 101, - "address": "EdsV136bYNoY2Z1G9bMERphMM1a1wQF5W6iDKMYgQH7V", - "symbol": "LR", - "name": "landreit", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EdsV136bYNoY2Z1G9bMERphMM1a1wQF5W6iDKMYgQH7V/logo.png", - "tags": ["WL-token"] - }, - { - "chainId": 101, - "address": "H7oqks8Xi4c4xfKMYzDKKYbAiTrmCGUAi4mja11MjUzv", - "symbol": "OBIT", - "name": "off bit", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/bndsknzlr/off_bit/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "97pMYg5WZXm9cXWBJWUFcGQ7sb64RAkNhDDYqqPq5KyN", - "symbol": "RAISIN", - "name": "RAISIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/97pMYg5WZXm9cXWBJWUFcGQ7sb64RAkNhDDYqqPq5KyN/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://grimsyndicate.com" - } - }, - { - "chainId": 101, - "address": "5h2vV75XStgNtGwWJ9JEwtUaEPwhTiDTHfQYqHMeK7Nh", - "symbol": "WEN", - "name": "Wenergy", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/DeanoDragon/Crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BPeXQCaDyL4kU4EU2pTMrBsTKm3ViUkEseWyj9csXMzU", - "symbol": "BRIBE", - "name": "SPP Bribe Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/virdagreat147/bribe/main/briber.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "5FJeUZ6Tn8F6ErCL3NinmpvSqjeFPq6ffvgCYug4r1kL", - "symbol": "POKER", - "name": "Poker Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5FJeUZ6Tn8F6ErCL3NinmpvSqjeFPq6ffvgCYug4r1kL/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/SCpokerclub", - "website": "http://solcitypoker.com" - } - }, - { - "chainId": 101, - "address": "AcK8dJTKvxh9hUhTMLdbsczUTrjfUNHSJ9znTaYDgLVT", - "symbol": "SOLCITYPH2", - "name": "SolCity Poker Club Phase 2", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AcK8dJTKvxh9hUhTMLdbsczUTrjfUNHSJ9znTaYDgLVT/logo.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "CajpcNHraSHMzQevzan2m4Cxwn1u2NHbTupEfQ236uyM", - "symbol": "FRFL", - "name": "FreeFuel Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/FreeFuelcoin/logo/main/F%20(800%20%C3%97%20800%20px).png", - "tags": ["utility-token", "community-token", "FreeFuel"], - "extensions": { - "discord": "https://discord.com/channels/958429684788518942/958429684788518944", - "twitter": "https://twitter.com/FreeFuelCoin" - } - }, - { - "chainId": 101, - "address": "FvaExVNHCACXXeTDj6hpZFLCyhYekT8zxpfPXiMtba51", - "symbol": "SWNT", - "name": "Swiss National Token", - "decimals": 9, - "logoURI": "https://github.com/OmiCodez/SWNT/raw/main/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "2KKhXL6Ajkhedp9rRNHXen1CzhZnYfonkBno7iVcHpsD", - "symbol": "CLOSEDLHMINT", - "name": "Loot Heroes' Mint Token Closed WL", - "decimals": 0, - "logoURI": "https://lootheroes.io/lhminttokencwl.png", - "extensions": { - "twitter": "https://twitter.com/lootheroesnft", - "website": "https://lootheroes.io" - } - }, - { - "chainId": 101, - "address": "46G5mPufPTxteTBqr98yjpePtTrSYdF1jjvR71Ju1mM1", - "symbol": "OPENLHMINT", - "name": "Loot Heroes' Mint Token Open WL", - "decimals": 0, - "logoURI": "https://lootheroes.io/lhminttokenowl.png", - "extensions": { - "twitter": "https://twitter.com/lootheroesnft", - "website": "https://lootheroes.io" - } - }, - { - "chainId": 101, - "address": "CFowe8TTZgwawPdRggJtAb2GjfCaPDg5qnUY5HP3UJWZ", - "symbol": "LHBRONZECHEST", - "name": "Loot Heroes' Bronze Chest", - "decimals": 0, - "logoURI": "https://lootheroes.io/lhbronzechest.png", - "extensions": { - "twitter": "https://twitter.com/lootheroesnft", - "website": "https://lootheroes.io" - } - }, - { - "chainId": 101, - "address": "6AierQY71omEf7gbUiwvQJC2Q3vYBgQ3UZojwGtjqb9S", - "symbol": "LHSILVERCHEST", - "name": "Loot Heroes' Silver Chest", - "decimals": 0, - "logoURI": "https://lootheroes.io/lhsilverchest.png", - "extensions": { - "twitter": "https://twitter.com/lootheroesnft", - "website": "https://lootheroes.io" - } - }, - { - "chainId": 101, - "address": "A4W75bfTm8YLfR2BwtunZKWxeSzxbKuiMCZgTdGYLvVG", - "symbol": "LHGOLDCHEST", - "name": "Loot Heroes' Gold Chest", - "decimals": 0, - "logoURI": "https://lootheroes.io/lhgoldchest.png", - "extensions": { - "twitter": "https://twitter.com/lootheroesnft", - "website": "https://lootheroes.io" - } - }, - { - "chainId": 101, - "address": "MekadxAsHWBzhJi2FBvadaKzhAdPpsK6MCjmp7579QN", - "symbol": "MKX", - "name": "Meka X Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/MekadxAsHWBzhJi2FBvadaKzhAdPpsK6MCjmp7579QN/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4bwMPPipiPafcxxtSBPMUgCkv8hF4xAyWsUzxr3DLYPZ", - "symbol": "DISK", - "name": "FloppyLabs token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/floppy-labs/disk-logo/master/disk_logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "waodAGjWGKKG4bKNdiXpx8sVSCWgwcJh1vt88XLPdib", - "symbol": "AODWL", - "name": "Age of DeFi Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/waodAGjWGKKG4bKNdiXpx8sVSCWgwcJh1vt88XLPdib/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://ageofdefi.xyz/" - } - }, - { - "chainId": 101, - "address": "3YAQawvYxNLRAdgjt71g8hct72j1R7dVUvR5ghtVjkCn", - "symbol": "SALVAR", - "name": "Salvar", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SalvaP2E/SALVAR/main/Salva.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "ECQkERLRgPGW34P5jjLvEGy449qGjq75BinqynBNyCqp", - "symbol": "ECOPNT", - "name": "ECOpoint", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/juancano57/logos_vortex/main/logos/ECQkERLRgPGW34P5jjLvEGy449qGjq75BinqynBNyCqp/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/EconomY_Solutio", - "website": "https://humanenergysolutions.com/" - } - }, - { - "chainId": 101, - "address": "8kub6BkBGf3Xd1GhtYvZZoh8KS88gauMSrSBy6iuDw8A", - "symbol": "POKER", - "name": "SolCity Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8kub6BkBGf3Xd1GhtYvZZoh8KS88gauMSrSBy6iuDw8A/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/SCpokerclub", - "website": "http://solcitypoker.com" - } - }, - { - "chainId": 101, - "address": "Enigfq6hqjVHMZSLBb5NrXaN59k14abZGgtd9CBTpxso", - "symbol": "ENIGMA", - "name": "Enigma Ventures GEN 2 WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Enigfq6hqjVHMZSLBb5NrXaN59k14abZGgtd9CBTpxso/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GoDZeDqM8Q7vutygP5MpKYngccUncSYNZch93PPieqbk", - "symbol": "GODZ", - "name": "GODZ OF SOLARIA WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GoDZeDqM8Q7vutygP5MpKYngccUncSYNZch93PPieqbk/logo.png", - "extensions": { - "twitter": "https://twitter.com/nft_godz", - "website": "https://godznft.com" - } - }, - { - "chainId": 101, - "address": "Ed1934BYVPQQ2KXbzCLxBMtNVZN3SjanTewfR9upbb7L", - "symbol": "$SAKE", - "name": "SAKE", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Ed1934BYVPQQ2KXbzCLxBMtNVZN3SjanTewfR9upbb7L/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/rdPMAqpDRR", - "twitter": "https://twitter.com/Soul_of_Hidama" - } - }, - { - "chainId": 101, - "address": "xPAs8dDnMH4xyehXZfiBVLBCPkbQN358VqrAJtwfnKr", - "symbol": "CSA", - "name": "Crypto Space Academy", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/casyani/cryptospaceacademy/main/CRYPTOSPACEACADEMY.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5MH6q9ZFcLkMp4SYqDCq36QmyWBigmShrQjZrjYd1F2d", - "symbol": "DHLD", - "name": "Diamond Hand: Legends", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5MH6q9ZFcLkMp4SYqDCq36QmyWBigmShrQjZrjYd1F2d/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/dhlegends", - "website": "https://www.diamondhandlegends.com" - } - }, - { - "chainId": 103, - "address": "tstu5tiwUgG8CVyz1YAYmeNkVcQ5QxojuYLiCnXhHtz", - "symbol": "$testSPS", - "name": "test sps token on devnet", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/tstu5tiwUgG8CVyz1YAYmeNkVcQ5QxojuYLiCnXhHtz/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "Gns4DFoM98sib6XJSojU2hm7C6jU9qYWLzYu1Z7HAb8E", - "symbol": "WCDL", - "name": "Wcdolar", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Wcworker/Wcdonalds/main/wcdolar.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/WcdonaldsNFT", - "website": "https://wcdonalds.io" - } - }, - { - "chainId": 103, - "address": "SEobhtZX5eVTpHBKcysxqnMfr6msFWtGzQeYX7cTSmW", - "symbol": "$TEST", - "name": "TEST", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SEobhtZX5eVTpHBKcysxqnMfr6msFWtGzQeYX7cTSmW/logo.png" - }, - { - "chainId": 101, - "address": "6u1HdBCs2Xsh1xr5PNKfoSKnHGHSoYxR5pqzAAzwCAMT", - "symbol": "MSCT", - "name": "Metascape City", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6u1HdBCs2Xsh1xr5PNKfoSKnHGHSoYxR5pqzAAzwCAMT/logo520x520.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "2NWB5P7ZftECLAgPHH4weQdDruGf239AQ9hG2gmxucmd", - "symbol": "DAIS", - "name": "DaisyDOLLAR", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2NWB5P7ZftECLAgPHH4weQdDruGf239AQ9hG2gmxucmd/logo.png", - "tags": ["social-token", "currency"] - }, - { - "chainId": 101, - "address": "7zSTEvkJ21NJzi4FJwVvg3VuSX38B6cWVAzRkDjHbzwJ", - "symbol": "QORBI", - "name": "Qorbi Coin", - "decimals": 9, - "logoURI": "https://qbaby-web-assets.s3.amazonaws.com/qorbicoin.png", - "tags": ["community-token", "game-token"], - "extensions": { - "discord": "https://discord.gg/9Rv4nwxx5Y", - "medium": "https://qorbaby.medium.com/", - "twitter": "https://twitter.com/QorBaby", - "website": "https://www.qorbaby.com/" - } - }, - { - "chainId": 101, - "address": "AeZWihQPDF9KajjMKpWnSZnZeLNVXVov33wkbchZ4SWL", - "symbol": "MIND", - "name": "MINDcoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/J62F7/Token-Logos/main/mind2.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "7bGxwtDyr9b5Hp2wk5Usvc1i5GFADXy5XaoM6tZQRnkP", - "symbol": "AAA", - "name": "AAApoc", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/solalchemist/mymetaplex/master/AAA...png" - }, - { - "chainId": 101, - "address": "GLUVc3V1Auq6rR8x3kfH28VFrpwZ8mD8qhd6GsK743Vq", - "symbol": "Down", - "name": "AREYOUDOWN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/undert0wn/crypto/main/down.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Cornwa1ifRukcEgGmipzrcDDqdksQ34hh9Ca4ukn9tet", - "symbol": "TBFWL", - "name": "The Big Five Official WHITELIST Token", - "decimals": 0, - "logoURI": "https://user-images.githubusercontent.com/89742297/160547178-746b2b27-85ff-4ccc-b766-f34a0e012a9d.jpg", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "GrBqg7aZGVbj3LXu2Lhsewnq5uYfxs9VcXx8La4fKWf3", - "symbol": "TBFPRE", - "name": "The Big Five Official PREMINT Token", - "decimals": 0, - "logoURI": "https://user-images.githubusercontent.com/89742297/160547178-746b2b27-85ff-4ccc-b766-f34a0e012a9d.jpg", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "BKipkearSqAUdNKa1WDstvcMjoPsSKBuNyvKDQDDu9WE", - "symbol": "HAWK", - "name": "Hawksight", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BKipkearSqAUdNKa1WDstvcMjoPsSKBuNyvKDQDDu9WE/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.com/invite/hawksight", - "medium": "https://hawksight.medium.com/", - "twitter": "https://twitter.com/HawksightCo", - "website": "https://hawksight.co/" - } - }, - { - "chainId": 101, - "address": "4tGKW2J2owiNLb8y4cvEUcQkgVBY48XshzLqtYLaRXD9", - "symbol": "SSI", - "name": "SSI Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/SolusiStartup/SSI-Token/main/ssi-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5PE8Y5PPfZgVB4Ak6vLV9K2iBzovCKPwpLZrJZgaXWpR", - "symbol": "GLI", - "name": "Green Light Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/gintarastamosiunas/Assets/main/Gtokenlogo.png", - "tags": ["utility-token"], - "extensions": { - "medium": "https://medium.com/@glight.network", - "twitter": "https://twitter.com/glight_network", - "website": "https://glight.network/" - } - }, - { - "chainId": 101, - "address": "4nonTGa2WJZWy9MzmYSWZ6dpTmE3TNmDube2dyD9Q82A", - "symbol": "SRCM", - "name": "SourCream Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SourCreamCulture/crypto-coin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "VGZw5mKqnaoHafA8kRWX1CZCRF2Etjr4EKnZJuVguot", - "symbol": "SOLR", - "name": "Solana Ray", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/VGZw5mKqnaoHafA8kRWX1CZCRF2Etjr4EKnZJuVguot/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "http://home.solr.space/" - } - }, - { - "chainId": 101, - "address": "FNpCzhQy5NZgEbmcJLedQebpRKRvw8sBGizhYj1uifGX", - "symbol": "BREAD", - "name": "DDAC Bread", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/TreeBurgers/DDAC/main/Token.png", - "tags": ["utility-token"] - }, - { - "chainId": 103, - "address": "DULsJwz9E49JTkmSHCUifrzNzzMk9qUHaVxna6xA6umt", - "symbol": "LYCH", - "name": "Lychee Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/fungtoken/crypto/main/Lychee.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5vwQYD5PobkeJJX6QwPhfbNBwPpaUZTd4b68yZWf1JqB", - "symbol": "SUC", - "name": "SOUIL COIN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SouilCapTn/SOUILCOIN/main/SOUILCOIN.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Domn87XEqaE31Sq2piAGvUxg79vCdp3RPmW2WSQohird", - "symbol": "DOM", - "name": "Domination Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Domn87XEqaE31Sq2piAGvUxg79vCdp3RPmW2WSQohird/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.com/invite/kaizencorps", - "twitter": "https://twitter.com/KaizenCorpsNFT", - "website": "https://domination.kaizencorps.com" - } - }, - { - "chainId": 101, - "address": "FZBgqzZNMT3pnewCsA7TSp4jQp8mTgGxSBZdcpbpAxDy", - "symbol": "ICECC", - "name": "Ic3 Cult Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/supercharged-audi/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "9mqG8psqZdyXfuNY2RTNb9Ypc9ydfke6kLYhy1t4ErU9", - "symbol": "S_TOKEN", - "name": "Solana token on devnet", - "decimals": 0, - "logoURI": "https://cdn.jsdelivr.net/gh/1111-1993/S_TOKEN/generation_2.png", - "tags": ["social-token"], - "extensions": { - "discord": "https://discord.gg/NhX5EzH4" - } - }, - { - "chainId": 101, - "address": "AifYDLtk3vx4b4vFGckkwMoFtXQTcATYZnU3JF6oDgo2", - "symbol": "PRE", - "name": "Pierre token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AifYDLtk3vx4b4vFGckkwMoFtXQTcATYZnU3JF6oDgo2/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CHVV3NwB77oSnBUqRJNeb6F5x6e3xBrYMrbxDDvdSGnu", - "symbol": "GRAMZ", - "name": "Thugverse GRAMZ", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CHVV3NwB77oSnBUqRJNeb6F5x6e3xBrYMrbxDDvdSGnu/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/thugsteadz", - "website": "https://thugverse.io" - } - }, - { - "chainId": 103, - "address": "HPjF6kgyyfRpPkSaC9NNkKPwTrwePzM3R8WRRJQxgeSb", - "symbol": "CGU", - "name": "CGU Test", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HPjF6kgyyfRpPkSaC9NNkKPwTrwePzM3R8WRRJQxgeSb/logo.png", - "tags": ["meme-token", "social-token", "community-token"], - "extensions": { - "medium": "https://medium.com/@phutthisarn", - "twitter": "https://twitter.com/earthphutthi" - } - }, - { - "chainId": 101, - "address": "9MRmp2eANQNMfyKAxwG4VknRKN2ojpwhCVYMr18yaCJ5", - "symbol": "DONE", - "name": "Only stop after when you are DONE", - "decimals": 9, - "logoURI": "https://i.ibb.co/R9XL7FC/done.png", - "tags": ["social-token", "currency"] - }, - { - "chainId": 101, - "address": "5fcJtoNNCpK6t93btzxbGknZLiU6JnZJyG3xp1SgMDLr", - "symbol": "CRONDO", - "name": "Crondo", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/danny8252/crondo/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7A18J1UHY956Jh9GgVesHttwHSFWMXB3r8oK7T7SQf4b", - "symbol": "PURGE", - "name": "Purging Pandas", - "decimals": 6, - "logoURI": "https://github.com/SaltyPickleNFT/assets/blob/main/%24PURGE%20COIN.png", - "tags": ["social-token"], - "extensions": { - "discord": "https://discord.gg/ZEMKFhxbSH" - } - }, - { - "chainId": 101, - "address": "7SK32s1JahGje7ETn8WejpByJzoBZfSgeMnQTE6Kzb6u", - "symbol": "FKCWL", - "name": "FUNKYCOINWL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7SK32s1JahGje7ETn8WejpByJzoBZfSgeMnQTE6Kzb6u/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "3rR5yPNbDwtQDDPijKgADbwwUgowk5YFpPnJzyoMUbCn", - "symbol": "MXT", - "name": "Max Verstappen Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/VanWilgenburgh/token-list/main/assets/mainnet/3rR5yPNbDwtQDDPijKgADbwwUgowk5YFpPnJzyoMUbCn/max-verstappen-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7QAztn6kBapQK5CySjEGtxjg6WijtMbYRZ2ZfRKFwXHN", - "symbol": "VRTX", - "name": "VortexLab Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/juancano57/logos_vortex/main/logos/7QAztn6kBapQK5CySjEGtxjg6WijtMbYRZ2ZfRKFwXHN/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/VortexLab1", - "website": "https://vortexlab.tech/" - } - }, - { - "chainId": 101, - "address": "EHZquc7EgrNGgkPMDFR2YEaEGeMCZGhe7bhyFLB9t2gY", - "symbol": "FATS", - "name": "FATS COIN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EHZquc7EgrNGgkPMDFR2YEaEGeMCZGhe7bhyFLB9t2gY/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FFAhu8UWFQzCg7kfib54hhVuxF6a5zGztNYVTcbQ43n9", - "symbol": "EuroStableCoin", - "name": "Blockcoin", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FFAhu8UWFQzCg7kfib54hhVuxF6a5zGztNYVTcbQ43n9/blockPNG.png", - "tags": ["stable-coin", "USD-coin-based", "USDC"], - "extensions": { - "website": "https://blocksto.ne/blockcoin/" - } - }, - { - "chainId": 101, - "address": "2JBr8X9zABjCbh21t2ZrrWFAT58VRe8jRtaHMPcXqPvo", - "symbol": "CARDSHARKSMINT", - "name": "ACES Card Sharks Minting Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2JBr8X9zABjCbh21t2ZrrWFAT58VRe8jRtaHMPcXqPvo/logo.png", - "extensions": { - "discord": "https://discord.gg/5gehRmCNem", - "twitter": "https://twitter.com/TheAcesNFT", - "website": "https://www.acessharks.com/" - } - }, - { - "chainId": 101, - "address": "DizzyWYL4ht1ek8cvLMHYKj9JrgeAL2j2f1F8ZEs5umA", - "symbol": "Dizzy", - "name": "Dizzy Dracos WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DizzyWYL4ht1ek8cvLMHYKj9JrgeAL2j2f1F8ZEs5umA/logo.png", - "extensions": { - "twitter": "https://twitter.com/DizzyDracos_NFT" - } - }, - { - "chainId": 101, - "address": "ATTF58JfFUHZktZXyV6aCTwHVCYzPuZBg2hma7J7Ao7n", - "symbol": "ATMT", - "name": "Atlaria Mint Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ATTF58JfFUHZktZXyV6aCTwHVCYzPuZBg2hma7J7Ao7n/logo.png", - "tags": ["NFT"] - }, - { - "chainId": 101, - "address": "GFTYCJzCuQXuzPoZCbVkqVtFBwDdRhQHEe2w6QA36z4Y", - "symbol": "GOMT", - "name": "Goofiez Mint Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GFTYCJzCuQXuzPoZCbVkqVtFBwDdRhQHEe2w6QA36z4Y/logo.png", - "tags": ["NFT"] - }, - { - "chainId": 101, - "address": "9xxof1eFbsHsMvrrvU2SZq7xJbjckPMsmZutLBMDnJgJ", - "symbol": "SQT", - "name": "Sequoia Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SequoiaSan/sequoia_crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7pvmfggcaXWrja1TYWrsanMe2MDJe1MZt45r26vhGbQ3", - "symbol": "YOSH", - "name": "YoshCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7pvmfggcaXWrja1TYWrsanMe2MDJe1MZt45r26vhGbQ3/logo.JPG", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "2Ln5Qm3kpJR5bZcu6FyNy5ik5htyzE4dvwLm9pWQUCMg", - "symbol": "Toon", - "name": "The Mintoons Token", - "decimals": 8, - "logoURI": "https://mintopia.live/tooooon.png", - "tags": ["mintopia-token", "community-token", "by-the-mintoons"], - "extensions": { - "twitter": "https://twitter.com/TheMintoons", - "website": "http://mintopia.live/" - } - }, - { - "chainId": 101, - "address": "HZPbfecX6T6wYShH2Y4DTpCFZ3vBmZVpujYyq3g3uEpM", - "symbol": "JEO", - "name": "JEO Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/nicholhai/crypto-jeocoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "XzR7CUMqhDBzbAm4aUNvwhVCxjWGn1KEvqTp3Y8fFCD", - "symbol": "SCAM", - "name": "Scammer Token Beware", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/xxmafiaxxx/doobietokens/main/scam.png", - "extensions": { - "description": "Scammer Token Beware" - } - }, - { - "chainId": 101, - "address": "sFA2de5kRsAmCev2WAoPCXbCKEd1ZwkvJ3MxPMojw9h", - "symbol": "RUM", - "name": "Dope Pirates RUM", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/sFA2de5kRsAmCev2WAoPCXbCKEd1ZwkvJ3MxPMojw9h/logo.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "discord": "https://discord.gg/dopepirates", - "twitter": "https://twitter.com/dopepirates", - "website": "https://dopepirates.io/" - } - }, - { - "chainId": 101, - "address": "2wwQpwaPjwJTfuJuPBkUZVfLJPbhsKHEbVqhVSviq7wd", - "symbol": "$TNBzWL", - "name": "TinyBear WL Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2wwQpwaPjwJTfuJuPBkUZVfLJPbhsKHEbVqhVSviq7wd/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.io/tinybear_nft", - "telegram": "https://t.me/tinybear_nft", - "twitter": "https://twitter.com/tinybear_nft", - "website": "https://tinybearnft.net" - } - }, - { - "chainId": 101, - "address": "9pbVhTQbnM8ho5kwqr21EhWVehd1PfBt8tyBxeH2ttmz", - "symbol": "$TNB", - "name": "TinyBear Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9pbVhTQbnM8ho5kwqr21EhWVehd1PfBt8tyBxeH2ttmz/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.io/tinybear_nft", - "telegram": "https://t.me/tinybear_nft", - "twitter": "https://twitter.com/tinybear_nft", - "website": "https://tinybearnft.net" - } - }, - { - "chainId": 103, - "address": "EHZquc7EgrNGgkPMDFR2YEaEGeMCZGhe7bhyFLB9t2gY", - "symbol": "FATS", - "name": "FATS COIN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EHZquc7EgrNGgkPMDFR2YEaEGeMCZGhe7bhyFLB9t2gY/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "NovaAMdJA1MCNWG3TiY8C37ezHd8GEpLVE4mTGXjetQ", - "symbol": "NovaMindNFT", - "name": "NovaMindNFT", - "decimals": 0, - "logoURI": "https://cdn.discordapp.com/attachments/915400341992923246/957740284249264189/Screen.png", - "extensions": { - "website": "https://twitter.com/novamindnft" - } - }, - { - "chainId": 101, - "address": "GFoYxfK7AowBTtCe7m2ZzhouL9BvLHBT2JsvNd2FqQwE", - "symbol": "GOGMT", - "name": "Goofiez OG Mint Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GFTYCJzCuQXuzPoZCbVkqVtFBwDdRhQHEe2w6QA36z4Y/logo.png", - "tags": ["NFT"] - }, - { - "chainId": 101, - "address": "H19akeu1XsxLwMFHxfic47H7fpDzHQFnRqT9Y6x4Z1Fn", - "symbol": "MT", - "name": "Myuta Token", - "decimals": 9, - "logoURI": "https://github.com/ArthurPaivaT/token-list/blob/main/assets/mainnet/H19akeu1XsxLwMFHxfic47H7fpDzHQFnRqT9Y6x4Z1Fn/logo.png?raw=true" - }, - { - "chainId": 101, - "address": "9THzNrZiF3XNsuuqb9T8gsCGaYnek2Lsg5YKdqMnf8TW", - "symbol": "SS", - "name": "Space Stone", - "decimals": 9, - "logoURI": "https://github.com/ArthurPaivaT/token-list/blob/main/assets/mainnet/9THzNrZiF3XNsuuqb9T8gsCGaYnek2Lsg5YKdqMnf8TW/logo.png?raw=true" - }, - { - "chainId": 101, - "address": "9A1oPw1md9q3NxqriN5e3U4ofUgEj6C67PnkKPfUHh2j", - "symbol": "$", - "name": "DAWGZ", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/farhan067/degendawgz/main/logo.png", - "extensions": { - "twitter": "https://twitter.com/DegenDawgz", - "website": "https://www.degendawgz.com/" - } - }, - { - "chainId": 101, - "address": "HUtSa4eT4ccqPU2SMwwAawHJGQoaAvgqwb65CRA8QycZ", - "symbol": "amUSDC", - "name": "Accrue MAX USDC", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HUtSa4eT4ccqPU2SMwwAawHJGQoaAvgqwb65CRA8QycZ/logo.png", - "extensions": { - "twitter": "https://twitter.com/accrue_finance", - "website": "https://accrue.finance" - } - }, - { - "chainId": 101, - "address": "77WGHdztShHUje2YTSy5peuHPMspvWzAg1WVemzC7B6g", - "symbol": "amSOL", - "name": "Accrue MAX SOL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/77WGHdztShHUje2YTSy5peuHPMspvWzAg1WVemzC7B6g/logo.png", - "extensions": { - "twitter": "https://twitter.com/accrue_finance", - "website": "https://accrue.finance" - } - }, - { - "chainId": 101, - "address": "4SLMzsWGJLhGKoYPzmfV1b89vQ99ocN3ArSafYUtfDPZ", - "symbol": "amBTC", - "name": "Accrue MAX BTC", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4SLMzsWGJLhGKoYPzmfV1b89vQ99ocN3ArSafYUtfDPZ/logo.png", - "extensions": { - "twitter": "https://twitter.com/accrue_finance", - "website": "https://accrue.finance" - } - }, - { - "chainId": 101, - "address": "HJyCHtR5Cd5w4QsFTZsGWAck5YFCJJz7myJAW8JJFEsP", - "symbol": "NR6C", - "name": "NightRunner Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/NightRunner6/Crypto1/main/night_runner_by_cybercortex_dds71ki-350t.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "6kJFKic3kCxmmYKJbQVTgy6vWxrhZjM2Ho8os4myCSe3", - "symbol": "HSC", - "name": "Hallelujah Sunshine Cult", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/hallelujahsunshine/assets/main/HSC%20Logo%20SML.png", - "tags": ["social-token"], - "extensions": { - "facebook": "https://www.facebook.com/groups/hallelujahsunshinecollaborative", - "twitter": "https://twitter.com/GeneralMayhem15" - } - }, - { - "chainId": 101, - "address": "AxjUR1RYf2Aj7FThDUQgxa43z3TfXUfUeiNRJcC98dbF", - "symbol": "BOOK", - "name": "BibliotecaToken", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/BuffaloChikn/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EPiVDJNJtQV5sU8GoNJmGY4uj5g447hy5ea8MvzTvkSU", - "symbol": "LAN", - "name": "LoveAsNFT", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/rashkomi/Crypto/main/LAN.png", - "tags": ["NFT"] - }, - { - "chainId": 101, - "address": "ErbCjTBkj3t5xX86VJ899j9dGojDhMcGuLMnwDMgBs4R", - "symbol": "SYGD", - "name": "Sygard", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/ProjectSytras/King-Beta/master/SYGD_token.png", - "tags": ["utility-token", "Commerce"], - "extensions": { - "description": "$SYGD is the Reward Token of Alyax Inc, the first-ever web3 enabled, international loyalty program provider on Solana.", - "discord": "https://discord.gg/alyaxinc", - "medium": "https://medium.com/@alyax_inc", - "twitter": "https://twitter.com/AlyaxV3rse_NFT" - } - }, - { - "chainId": 101, - "address": "CGNT66vj1giPAMy61Ed4g4dq33aSK8xKwzfTBL7WrGov", - "symbol": "CGNT", - "name": "Cogent Crypto", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CGNT66vj1giPAMy61Ed4g4dq33aSK8xKwzfTBL7WrGov/logo.png" - }, - { - "chainId": 101, - "address": "2bDQkA2wUC1n8Jihccrwf7w9ZvACp5cntvRzjkdwXF9Y", - "symbol": "TFLO", - "name": "Time Flow Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4SLMzsWGJLhGKoYPzmfV1b89vQ99ocN3ArSafYUtfDPZ/logo.png", - "extensions": { - "twitter": "https://twitter.com/GangsterZodiacs", - "website": "https://gangsterzodiacs.io" - } - }, - { - "chainId": 101, - "address": "mongopjRpUgnQQpQFiasgFLyo69YXUwFcw3hyqaN8RL", - "symbol": "MONGO", - "name": "Mongo", - "decimals": 0, - "logoURI": "https://mongomons.com/logo-MONGO.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/mongomons", - "twitter": "https://twitter.com/Mongomonsol", - "website": "https://mongomons.com" - } - }, - { - "chainId": 103, - "address": "4CoWi6ptx6UeLTCq8qsbEP7eCmijE8ef1dKuopv993nz", - "symbol": "FGDT", - "name": "FurrSols Game Demo", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4CoWi6ptx6UeLTCq8qsbEP7eCmijE8ef1dKuopv993nz/logo.png", - "tags": ["nft"], - "extensions": { - "website": "https://furrsols.io/" - } - }, - { - "chainId": 101, - "address": "8E6X9ng5ogUk6SWZUQFoPtZb4jHzTJvqZHxFnPA6UWHj", - "symbol": "MTM", - "name": "MetaMoney", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8E6X9ng5ogUk6SWZUQFoPtZb4jHzTJvqZHxFnPA6UWHj/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "HxPoEHMt1vKeqjKCePcqTj6yYgn6Xqq1fKTY3Pjx4YrX", - "symbol": "ZAP", - "name": "ZAP Token", - "decimals": 8, - "logoURI": "https://www.zap.org/static/zapSplash.svg", - "tags": ["whitelist-token", "utility-token", "community-token", "nft"], - "extensions": { - "coingeckoId": "zap", - "coinmarketcap": "https://coinmarketcap.com/currencies/zap", - "description": "Zap is building critical infrastructure to power the next wave of decentralized applications.", - "discord": "https://discord.gg/pvHzemX", - "facebook": "https://www.facebook.com/ZapProtocol", - "instagram": "https://www.instagram.com/zapprotocol", - "linkedin": "https://www.linkedin.com/company/zapprotocol", - "medium": "https://medium.com/the-zap-project", - "reddit": "https://www.reddit.com/r/ZapProtocol", - "telegram": "https://t.me/ZapOracles", - "twitter": "https://twitter.com/ZapProtocol", - "website": "https://zap.org", - "whitepaper": "https://app.zap.org/docs/overview" - } - }, - { - "chainId": 101, - "address": "737U8hYA69cgaN1MudTz4oH2wAPTwvBcQu8PezW2h4Bn", - "symbol": "USSTT", - "name": "Unicord Staking System Test Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/737U8hYA69cgaN1MudTz4oH2wAPTwvBcQu8PezW2h4Bn/logo.png" - }, - { - "chainId": 101, - "address": "GMeqxdPtZvwj9rmrCLqdB2MAeJXjmRPnRrgpDLpVqKCh", - "symbol": "INFOMO", - "name": "Infomo Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GMeqxdPtZvwj9rmrCLqdB2MAeJXjmRPnRrgpDLpVqKCh/logo.png" - }, - { - "chainId": 101, - "address": "ANco2d62WU8D6PqkPh8NRTQitHmACRhbvRsCVud3aqbE", - "symbol": "ANCO", - "name": "Ancora WL Pass Official", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ANco2d62WU8D6PqkPh8NRTQitHmACRhbvRsCVud3aqbE/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/AncoraPay" - } - }, - { - "chainId": 103, - "address": "9h5PJj8zMDXLL31xzwazM86tnmQe3j1SmnQ4X3D13Y8K", - "symbol": "ENCS", - "name": "Encore Smile", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/fungtoken/EncoreSmile/main/SmileUpv3.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "5vPqJAtSeRqbu7ZUZZT4Q1uksDuVjDc8URe75wga4RYk", - "symbol": "TKE", - "name": "TOKELIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/tokealin/tokelin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "777cLE28EKhWPSVWmnRw55QJPkagzK5vEaCE3KFhQcJf", - "symbol": "CLZ", - "name": "CELESTIALZ-WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/777cLE28EKhWPSVWmnRw55QJPkagzK5vEaCE3KFhQcJf/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/CELESTIALZ777", - "website": "https://www.celestialznft.io" - } - }, - { - "chainId": 101, - "address": "7G3ius3GViuopZzyVAvoF2DcHyDaG7hpCjDnshNuQbhF", - "symbol": "RIRI", - "name": "RippleRick", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7G3ius3GViuopZzyVAvoF2DcHyDaG7hpCjDnshNuQbhF/logo.png", - "tags": [ - "utility-token", - "community-token", - "general-token", - "social-token" - ], - "extensions": { - "twitter": "https://twitter.com/itsripplerick", - "website": "https://ripplerick.com" - } - }, - { - "chainId": 103, - "address": "FkuK7uj9n11wdwNiozMrgFfwjuTWFbZnhQbzpcKyhQsg", - "symbol": "LONGAN", - "name": "Longan Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/fungtoken/Longan/main/Longan.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ACgEL4C2iHr9pafyeJfbvtq7n6GhPgk8ybnrkQ3wY5XK", - "symbol": "CINC", - "name": "Coin Invest Capital", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/tychcio1/token-list/main/assets/mainnet/ACgEL4C2iHr9pafyeJfbvtq7n6GhPgk8ybnrkQ3wY5XK/logo.png" - }, - { - "chainId": 101, - "address": "G6MWy5GqsrdwMNQE4ha3hPHvqT47wCqAV4pmzycZzuFM", - "symbol": "DTKN", - "name": "DimensionToken", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/DimensionCoin/logoDimensionCoin/main/dimensionlogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HPjF6kgyyfRpPkSaC9NNkKPwTrwePzM3R8WRRJQxgeSb", - "symbol": "CGU", - "name": "CGU Test", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HPjF6kgyyfRpPkSaC9NNkKPwTrwePzM3R8WRRJQxgeSb/logo.png", - "tags": ["meme-token", "social-token", "community-token"], - "extensions": { - "medium": "https://medium.com/@phutthisarn", - "twitter": "https://twitter.com/earthphutthi" - } - }, - { - "chainId": 101, - "address": "skuLLY6NHFrjL3oGpWMrrwjCfWMSvwp6AD7resMF9m7", - "symbol": "SUMMON", - "name": "Skullbots", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Neurologist/assets/main/summon.png" - }, - { - "chainId": 101, - "address": "5chyGzuP62SmN5q6M22TojNdDxCjxeo1gnbpbc7RGbTC", - "symbol": "$TFLO", - "name": "Time Flow Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/GZDragonHead/GZ/main/IMG_2795.PNG", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/GangsterZodiacs", - "website": "https://gangsterzodiacs.io" - } - }, - { - "chainId": 101, - "address": "6hWf9DXxUu9cjSw63mnyrkrpXinxiQ1BogFRPskpoNNh", - "symbol": "SLYA", - "name": "Solely Authentic", - "decimals": 0, - "logoURI": "https://github.dev/sa22198/token-list/blob/74157b1b4fa26a3def590e5e51e8e5a30fcad89f/assets/mainnet/6hWf9DXxUu9cjSw63mnyrkrpXinxiQ1BogFRPskpoNNh/solelya2.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HqGeQN2dyzBAvgNnWLRi1mUpCzr5mMgtXgiGvtPGfDt6", - "symbol": "KRF", - "name": "KryptoForest", - "decimals": 0, - "logoURI": "https://github.com/mingle1989/crypto/blob/master/KryptoForestToken_OG.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "9ezfMjPwsPfRtRi41PER8xFpZDQCm2ccTj488uqGguT6", - "symbol": "AMETA", - "name": "Alphaverse Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9ezfMjPwsPfRtRi41PER8xFpZDQCm2ccTj488uqGguT6/logo.png" - }, - { - "chainId": 103, - "address": "aPeM74voCnKsRHW2w3WMaWCKhubR96f81cZpZuBBG1Q", - "symbol": "TLAN", - "name": "Test Lan Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/c41c6e28c9973bd4a9c125faf90b18dd6a036285/assets/mainnet/aPeM74voCnKsRHW2w3WMaWCKhubR96f81cZpZuBBG1Q/tlan.png", - "tags": ["social-token"], - "extensions": { - "twitter": "https://twitter.com/meebmaster_nft" - } - }, - { - "chainId": 101, - "address": "2ximgbUJ2kZZUUwFietPJuMdSHink3RHREgwVZchViiP", - "symbol": "c2o", - "name": "c2o coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/c2ocoin/crypto/main/logo.png", - "tags": ["utility-token", "social-token"], - "extensions": { - "website": "https://c2ocoin.com" - } - }, - { - "chainId": 101, - "address": "hAs5nGhLtGTbXGHYGx6bNWaXR59hpQTD1Lh1cqfszCx", - "symbol": "OBIC", - "name": "off_bit_coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/bndsknzlr/off_bit_coin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "MGPahMxthDGuZ6wJEPh6ZjGHMnEFwnT1RyrBaCVxGVe", - "symbol": "MGSS", - "name": "Magic Soldiers Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/MGPahMxthDGuZ6wJEPh6ZjGHMnEFwnT1RyrBaCVxGVe/Mgslogo.png" - }, - { - "chainId": 101, - "address": "GnYmoLzwY9RfpBs5FnWnXJ1ZL2ymbESVj9ihrpbYch9b", - "symbol": "TTRYB", - "name": "Test Tryb", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Lagrange-fi/Test-TRYB-logo/main/TTRYB.png", - "tags": ["stablecoin"], - "extensions": { - "discord": "https://discord.gg/lagrange-fi", - "github": "https://github.com/Lagrange-fi", - "twitter": "https://twitter.com/Lagrange_fi", - "website": "https://lagrange.fi/" - } - }, - { - "chainId": 101, - "address": "6qmfx7uBiGhv2yaX2LQpP7kjfqe6hViRjEurDRUeZNCZ", - "symbol": "CRKD", - "name": "ChrisRocked", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/AF7358/ChrisRocked/main/chrisrocked.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "J9Rmr7xwtWwKE6cGQeEPejYmydjV8xaeXLrdeDeUjrkm", - "symbol": "ADPP", - "name": "Dan", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/DanteAlucard98/crypto/master/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "JAbJrmkqV4NnMDcQ1k8dmLfz4n8UWteF8gp5QBT2soeZ", - "symbol": "CGUM", - "name": "CGU TEST M", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/JAbJrmkqV4NnMDcQ1k8dmLfz4n8UWteF8gp5QBT2soeZ/logo.png", - "tags": ["social-token", "community-token"], - "extensions": { - "medium": "https://medium.com/@phutthisarn" - } - }, - { - "chainId": 101, - "address": "CAFTP2Yof8bJuwSScigqnZaLQKiBzECgJPxvEDzfivzw", - "symbol": "CAF", - "name": "Caffeine", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CAFTP2Yof8bJuwSScigqnZaLQKiBzECgJPxvEDzfivzw/logo.png", - "tags": ["social-token", "community-token"], - "extensions": { - "discord": "https://www.crema.finance/", - "telegram": "https://t.me/cremafinance", - "twitter": "https://twitter.com/Crema_Finance", - "website": "https://discord.gg/cremafinance" - } - }, - { - "chainId": 101, - "address": "HeTCNpw9jPsrS3Grn1zEruSDWpmcvxMjQmwzcojektpB", - "symbol": "MORZ", - "name": "Mornz koin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mornarajdeep1991/mornacrypto/main/djmorna.PNG", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "F3mqxshUtaQUF6M5L7JRYhbqaRYkBwbCKUmKE54MhMA1", - "symbol": "CTC", - "name": "Canine Token Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/F3mqxshUtaQUF6M5L7JRYhbqaRYkBwbCKUmKE54MhMA1/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/42BmtCUqan", - "twitter": "https://twitter.com/canidcanines", - "website": "https://www.canidcanines.io/" - } - }, - { - "chainId": 101, - "address": "A1H85Aco9XX6ZeeLMdjwF7rosvNThj3dm4K9kRtb77X5", - "symbol": "SINS", - "name": "Sins", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/LouisDeSimone/roxtarrSins/main/roxtarrSins.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Gf43qoikf7d2kGrSX7s2iRbGn2SrTFAQoD3uattUEAyS", - "symbol": "SPRW", - "name": "The Jack Sparrow Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/nicholhai/thejacksparrow/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "4xuicVbNHue2okAYeNphzdGWbyzF4stM39SLmNoD7Fum", - "symbol": "ALI", - "name": "Shahid Ali Expert Dev", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4xuicVbNHue2okAYeNphzdGWbyzF4stM39SLmNoD7Fum/logo.png" - }, - { - "chainId": 101, - "address": "GoDjmr61qsywyx63xRWQFZ3VKe1mkVy9w9k1Nzu6wFVH", - "symbol": "GojiraWL", - "name": "Gojira WL token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GoDjmr61qsywyx63xRWQFZ3VKe1mkVy9w9k1Nzu6wFVH/logo.png" - }, - { - "chainId": 103, - "address": "MatK11vFCW34rHw1PoryHSUiyo5WZVvzG24M9kwAp2p", - "symbol": "MATD", - "name": "Mat Token Devnet", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/MatK11vFCW34rHw1PoryHSUiyo5WZVvzG24M9kwAp2p/logo.svg" - }, - { - "chainId": 101, - "address": "idoLztG5ZGMVEjjoQWjeSu2eVkVsp3YnrFZKf7dNi4j", - "symbol": "IDOLZ", - "name": "IDOLZ Token", - "decimals": 9, - "logoURI": "https://arweave.net/mdvmPYEgiX_uPGRtiIZA3HrpilDK5JfW2bXkDBRuzVM?ext=png", - "tags": ["utility-token", "social-token"], - "extensions": { - "description": "$IDOLZ is an essential part of the Idolz Ecosystem. It will be used as the primary internal currency for minting, trading, and upgrading Idolz NFTs", - "discord": "https://discord.com/invite/cryptoidolz", - "twitter": "https://twitter.com/CryptoIdolzNFT", - "website": "https://cryptoidolz.pro/" - } - }, - { - "chainId": 101, - "address": "BREADk5Sf1YvgDEkE4BGTJu3zNwhqEaKsYUNpD8d8y3W", - "symbol": "BDZ", - "name": "Breadz", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BREADk5Sf1YvgDEkE4BGTJu3zNwhqEaKsYUNpD8d8y3W/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/thugbirdz", - "website": "https://www.thugbirdz.com" - } - }, - { - "chainId": 101, - "address": "7X3ZoBf3CcQEFmCChypPXva1sGRJYwMC1qvVYYnoeN33", - "symbol": "GUNIT", - "name": "50 Cent", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7X3ZoBf3CcQEFmCChypPXva1sGRJYwMC1qvVYYnoeN33/50cent.png" - }, - { - "chainId": 101, - "address": "CCPSqDhvJtJpovDRfKdWsVLdo5aYoJumV3f38y2CXhCz", - "symbol": "SCMM", - "name": "Another Scammer Token Beware", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/xxmafiaxxx/doobietokens/main/scam2.png", - "extensions": { - "description": "Another Scammer Token Beware" - } - }, - { - "chainId": 101, - "address": "GEhp4L15gp82X3dWfLkQdDwULaPuYr83EJL58Wh1P2Mn", - "symbol": "Consul", - "name": "Meta Fox Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GEhp4L15gp82X3dWfLkQdDwULaPuYr83EJL58Wh1P2Mn/logo.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "discord": "https://discord.gg/6jnEKuc8bM", - "telegram": "https://t.me/MetaFoxCoin", - "twitter": "https://twitter.com/MetaFoxCoin", - "website": "https://foxyplay.online/" - } - }, - { - "chainId": 103, - "address": "3aQgE11bFh1K24VzHRZrN8M5FjyVJm48guKThUsH2396", - "symbol": "WL", - "name": "Solamonsters WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3aQgE11bFh1K24VzHRZrN8M5FjyVJm48guKThUsH2396/wl-logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/6ADhm438NM", - "twitter": "https://twitter.com/SolamonstersNFT", - "website": "https://www.solamonsters.com" - } - }, - { - "chainId": 101, - "address": "3HRgLcJh26k5FHtm921859v9Bg8KcRaJ2199ZPFo1mfu", - "symbol": "SHARDS", - "name": "SHARDS", - "decimals": 9, - "logoURI": "https://github.com/ArthurPaivaT/token-list/blob/main/assets/mainnet/3HRgLcJh26k5FHtm921859v9Bg8KcRaJ2199ZPFo1mfu/logo.png?raw=true" - }, - { - "chainId": 101, - "address": "3SrHYJCE3Zxdhq5yZtvvPmU7NXbTkhmjKTiuV5VRJADQ", - "symbol": "ZIRK", - "name": "Zirkus", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3SrHYJCE3Zxdhq5yZtvvPmU7NXbTkhmjKTiuV5VRJADQ/logo.png" - }, - { - "chainId": 101, - "address": "Enp3qfJR3k7ELvTCjFUhVrBLC6179DancMJ3nvUBEsiY", - "symbol": "Bravo", - "name": "Bravo Ambulance Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/paddysc/crypto1/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "PLANEQfzaxbUy9KWm3FerN1Zu26EfYgCByonaKq926i", - "symbol": "Planetarians", - "name": "The Planetarians WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/PLANEQfzaxbUy9KWm3FerN1Zu26EfYgCByonaKq926i/logo.png", - "tags": ["Mint-token"] - }, - { - "chainId": 101, - "address": "8v2Sn7v5jLpm3jdRkpLVCNbLKm9xdqapr6jwv3XkVBW4", - "symbol": "LATS", - "name": "LATS", - "decimals": 0, - "logoURI": "https://github.com/MrWeedSeed/LATS/blob/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "CBM1gccVCDo1PVXTDd8sBfeLB9QXmNe3CiKZUWfoJs8b", - "symbol": "LFG", - "name": "Let's Fucking Go", - "decimals": 0, - "logoURI": "https://github.com/qudo-code/assets/blob/master/solana/tokens/LFG/LFG.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/_qudo" - } - }, - { - "chainId": 101, - "address": "S8v4cS7dnKzV6LYvzFPuuiWQMM4KSz7URuGYWMGXyTG", - "symbol": "VERSE", - "name": "Verse Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/S8v4cS7dnKzV6LYvzFPuuiWQMM4KSz7URuGYWMGXyTG/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/7AR7gh4b", - "twitter": "https://twitter.com/solarity_VR", - "website": "https://www.solarity.xyz" - } - }, - { - "chainId": 103, - "address": "rCLDb3inpxxwcXjKe2WbC25J1WrW9TFjxX85hXqKpgv", - "symbol": "WL", - "name": "Solamonsters OG Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/rCLDb3inpxxwcXjKe2WbC25J1WrW9TFjxX85hXqKpgv/og-logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/6ADhm438NM", - "twitter": "https://twitter.com/SolamonstersNFT", - "website": "https://www.solamonsters.com" - } - }, - { - "chainId": 101, - "address": "9qRarZBguWMeD2QMZVxEyVYDWRFKJqbPbyDuJNCriojb", - "symbol": "SWT", - "name": "Super Walking Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/Leo02607/assetss/main/super_Walking_Token.png", - "tags": ["Gaming", "Sport"] - }, - { - "chainId": 101, - "address": "BxqzqEaUbQ4X9e5zgWAm9kPGxffLhKvwyeiPGmshv5gy", - "symbol": "RENT", - "name": "Rent", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/rentfreejoe/rent/main/rent.png", - "tags": ["general-token"], - "extensions": { - "twitter": "https://twitter.com/Rent_Free_Joe", - "website": "https://twitter.com/Rent_Free_Joe" - } - }, - { - "chainId": 101, - "address": "4KwJBSGtpoxGY8pUUEsjpModoYgRGgaqNEZHrd11DzsV", - "symbol": "NINJAS", - "name": "Blue Chips Ninjas Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4KwJBSGtpoxGY8pUUEsjpModoYgRGgaqNEZHrd11DzsV/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://twitter.com/bc_ninjas/" - } - }, - { - "chainId": 101, - "address": "e95X3rA68GRqPvDpw9fqeTvMQ1i8toj2sV2iqmRfsbd", - "symbol": "SEU", - "name": "Soleur", - "decimals": 4, - "logoURI": "https://github.com/Mosorior/soleur/blob/main/Soleur%20Coin.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/_qudo" - } - }, - { - "chainId": 101, - "address": "6zNzaKbt6ZkpPsfkWgGFjBoGLJCgm2HAqaytwza1pV6S", - "symbol": "OSU", - "name": "OSU Token", - "decimals": 1, - "logoURI": "https://raw.githubusercontent.com/livebyv/token-art/main/osu/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/NftSenshi" - } - }, - { - "chainId": 101, - "address": "DgT6BQqmmzaaHo7KjoxdswpoC6CoTBNcyD9q3jywEa8w", - "symbol": "BALANCE", - "name": "Balance Token", - "decimals": 1, - "logoURI": "https://raw.githubusercontent.com/livebyv/token-art/main/balance/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/NftSenshi" - } - }, - { - "chainId": 101, - "address": "neoneXWLNouaSKk2zna7p54qbmsuVUtdmMGzR5MuPd9", - "symbol": "NEON", - "name": "Whiteneon Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/whiteneon/token-list/main/assets/mainnet/neoneXWLNouaSKk2zna7p54qbmsuVUtdmMGzR5MuPd9/logo.png", - "tags": ["utility-token", "social-token", "community-token"], - "extensions": { - "website": "https://solana.whiteneon.com/" - } - }, - { - "chainId": 101, - "address": "DiCwzrqQwvgT4bHLKGuNU9XhSY5gFfhKhN6M9UsWZvvo", - "symbol": "DOGEMFERS", - "name": "SOL DOGEMFERS WL", - "decimals": 0, - "logoURI": "https://dogemfer-ipfs.s3.us-east-1.amazonaws.com/images/1001.png", - "tags": ["community-token", "sol-dogemfers", "dogemfers"], - "extensions": { - "twitter": "https://twitter.com/DogeMfers", - "website": "https://sol.dogemfer.com" - } - }, - { - "chainId": 101, - "address": "8aNThehSFoomj3STWb3nfMwTapJyy5WB768Mj6LzWXvz", - "symbol": "SOLCITYFOU", - "name": "SolCity Poker Club Founders", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8aNThehSFoomj3STWb3nfMwTapJyy5WB768Mj6LzWXvz/logo.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "HRXXo2ufmbZugAnX4V8jyrArupxxYremLSxcv8ZGn4Jv", - "symbol": "BITCORN", - "name": "BITCORN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HRXXo2ufmbZugAnX4V8jyrArupxxYremLSxcv8ZGn4Jv/logo.png", - "tags": ["social-token", "utility-token", "community-token"], - "extensions": { - "discord": "https://discord.gg/GJrmqyQKaW", - "twitter": "https://twitter.com/BitcornStudios", - "website": "https://bitcornfarms.com/" - } - }, - { - "chainId": 101, - "address": "BA7khZ2ai6zR8kh3eH996HYk2BkLMo2hwCe7p5nps1qW", - "symbol": "ZUKI", - "name": "Zuki", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SnowballedNoot/SPLAkatzuki/main/tokenlogo520.png", - "tags": ["utility-token", "social-token", "community-token"] - }, - { - "chainId": 101, - "address": "8UCRqj24VEtwsqCm4k2UHsp8STy2yUqRg6xD4p6g55p6", - "symbol": "SOLCITYPH3", - "name": "SolCity Poker Club Phase 3", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8UCRqj24VEtwsqCm4k2UHsp8STy2yUqRg6xD4p6g55p6/logo.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "368zP1r8xHD2Vi8VmXcCdVmMTqhAoHj2AmrUtSgZxdA3", - "symbol": "DCWT", - "name": "Doodle Collective WL Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/368zP1r8xHD2Vi8VmXcCdVmMTqhAoHj2AmrUtSgZxdA3/DCWT.PNG", - "tags": ["whitelist-token"], - "extensions": { - "discord": "https://discord.gg/suuyrnvnk5", - "twitter": "https://twitter.com/DoodlCollective" - } - }, - { - "chainId": 101, - "address": "PEso2e1Lq2RVb8XEmQrU9V6oq5HruUXNLS6b81HBtuC", - "symbol": "$PESO", - "name": "Peso", - "decimals": 10, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/PEso2e1Lq2RVb8XEmQrU9V6oq5HruUXNLS6b81HBtuC/logo.png", - "extensions": { - "twitter": "https://twitter.com/kingpin_cartel" - } - }, - { - "chainId": 101, - "address": "4aji8e3sw122mvosyjxmGSQKNPFh6ixKfHj8nqfLWydx", - "symbol": "TYC", - "name": "Tai Yi Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4aji8e3sw122mvosyjxmGSQKNPFh6ixKfHj8nqfLWydx/logo.png", - "tags": ["utility-token", "community-token", "game-token"], - "extensions": { - "twitter": "https://twitter.com/hiryu83", - "website": "https://www.unrealworld.online" - } - }, - { - "chainId": 101, - "address": "3rkCq2ZAxoDGa3KWGebeiEMN92H5AV9HBLC9eVKDoPv8", - "symbol": "$EGG", - "name": "EGG", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/IamDtosh/egg/main/egg.png", - "tags": ["defi", "general", "nft"] - }, - { - "chainId": 101, - "address": "3ZNEbrWGST4ApvaQjTaSZJJ2c6Exm2bkba1gVNnotgsv", - "symbol": "YASS", - "name": "YoloSwag Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mrpgmr67/YoloSwag/main/logo.png", - "tags": ["social-token"], - "extensions": { - "twitter": "https://twitter.com/yoloswagcoin" - } - }, - { - "chainId": 101, - "address": "6fStzwUHEMne7wQyhfwDnZT1YquqkrF8auEscFm6MBSB", - "symbol": "TBTH", - "name": "TiteButHole", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jmfp/TiteButHole/main/logosmall.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DUCKexs9TX299vBuxphiZNYPisw1A9kntH8WRi5sy8LV", - "symbol": "DUCK", - "name": "Duck Exchange Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DUCKexs9TX299vBuxphiZNYPisw1A9kntH8WRi5sy8LV/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/2ySvY6Vrv7", - "twitter": "https://twitter.com/duck_dex", - "website": "https://duckdex.github.io" - } - }, - { - "chainId": 101, - "address": "CLYDr7ZYLL178ibxCuk1ULJGAFtA6Ai3JahcRBZ6fNq", - "symbol": "CLOUD", - "name": "Land Cloud Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CLYDr7ZYLL178ibxCuk1ULJGAFtA6Ai3JahcRBZ6fNq/logo.svg", - "tags": ["meme-token"] - }, - { - "chainId": 101, - "address": "4UhatHUo1haGrFTNshKeQ6vvbx1uDapNGibAUyrxLpJ4", - "symbol": "Consul", - "name": "Meta Consul Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/warfare644/metafoxcoin/main/logo.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "discord": "https://discord.gg/6jnEKuc8bM", - "telegram": "https://t.me/MetaFoxCoin", - "twitter": "https://twitter.com/MetaFoxCoin", - "website": "https://foxyplay.online/" - } - }, - { - "chainId": 101, - "address": "5dV35yxrvhES8dkjw1N5JoH2uFa9rGfNtBCftC1TVAiS", - "symbol": "YAKKL", - "name": "YAKKL Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/yakkl/solana/main/logo.png", - "tags": ["community-token", "utility-token", "social-token"], - "extensions": { - "discord": "https://discord.gg/KrcpWmu3WB", - "twitter": "https://twitter.com/yakklcrypto", - "website": "https://yakkl.com" - } - }, - { - "chainId": 101, - "address": "komRFW7sjDx78C7DPJM4qpdr5aSW3jiGa1b3GvaDXoQ", - "symbol": "KOMR", - "name": "Komradz NFT Whitelist Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/komRFW7sjDx78C7DPJM4qpdr5aSW3jiGa1b3GvaDXoQ/logo.png", - "tags": ["whitelist"], - "extensions": { - "twitter": "https://twitter.com/Komradznft", - "website": "https://www.komradz.com/" - } - }, - { - "chainId": 101, - "address": "GrBcjxq2uMGpzo5JWUnRfSWkFkL4VoE3pCi4Zq1NiPih", - "symbol": "$PMWL", - "name": "Pumas Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/IamDtosh/pumas/main/pumas.png", - "tags": ["defi", "general", "nft"] - }, - { - "chainId": 101, - "address": "Bhp7DkTfy2TYZ2XXtF19puZSg4KZu3GQNR57wpEPnfpR", - "symbol": "JUSOLv2", - "name": "JUSOL", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Bhp7DkTfy2TYZ2XXtF19puZSg4KZu3GQNR57wpEPnfpR/logo.png", - "tags": ["lp-token"], - "extensions": { - "description": "Juiced SOL Carton Token", - "discord": "https://discord.gg/ZXBRGXccR2", - "instagram": "https://www.instagram.com/juicedfi", - "linkedin": "https://www.linkedin.com/company/juicedfi", - "medium": "https://www.medium.com/@juicedfinance", - "twitter": "https://twitter.com/JuicedProtocol", - "website": "https://www.juiced.fi", - "whitepaper": "https://juiced.fi/whitepaper.pdf" - } - }, - { - "chainId": 101, - "address": "DcJTzgLtV2Y2b6HQFTkSv3Wsck5uqXCGrAKVa4JiV5zZ", - "symbol": "MIKO", - "name": "Mikoverse Token", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DcJTzgLtV2Y2b6HQFTkSv3Wsck5uqXCGrAKVa4JiV5zZ/logo.png", - "tags": ["NFT", "utility-token"], - "extensions": { - "discord": "https://discord.gg/mikoverse", - "medium": "https://medium.com/@MikoVerse", - "twitter": "https://twitter.com/Mikoverse_NFT", - "website": "https://mikoverse.io/" - } - }, - { - "chainId": 101, - "address": "86icjpF6jEwVfEKRpuM6VWE6Ng5w6WG5FWifm6gSu1Gk", - "symbol": "FWLT", - "name": "Faviont Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/faviont/marketplace/main/logo-wl.png", - "tags": ["whitelist", "utility-token"], - "extensions": { - "description": "Each token gives you access to buy one NFT on https://faviont.io/", - "discord": "https://discord.gg/T6mVYKeVYc", - "twitter": "https://twitter.com/FaviontOfficial", - "website": "https://faviont.io/" - } - }, - { - "chainId": 101, - "address": "SMKEg822pUYrgDFRrk4LuK2gLjigYgCjbiGnKBEhzhs", - "symbol": "SMOKE", - "name": "SMOKE", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SMKEg822pUYrgDFRrk4LuK2gLjigYgCjbiGnKBEhzhs/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/StonedShibaClub", - "website": "https://www.stonedshibaclub.com" - } - }, - { - "chainId": 101, - "address": "Czy7tuoHw2hgtNio2qDrz4Un5b1DZix4UaMmV7PFs9ZB", - "symbol": "UVZH", - "name": "UVAZUHA", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/letstrythisshit/crypto/main/Untitled.png", - "tags": ["social-token"], - "extensions": { - "description": "UVAZUHOS TOKENAS", - "website": "https://uvazuhatoken.000webhostapp.com" - } - }, - { - "chainId": 101, - "address": "sMEANebFMnd9uTYpyntGzBmTmzEukRFwCjEcnXT2E8z", - "symbol": "sMEAN", - "name": "Staked MEAN", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/sMEANebFMnd9uTYpyntGzBmTmzEukRFwCjEcnXT2E8z/logo.svg", - "tags": ["stake"], - "extensions": { - "discord": "https://discord.meanfi.com/", - "medium": "https://meandao.medium.com", - "twitter": "https://twitter.com/meanfinance", - "website": "https://www.meanfi.com/" - } - }, - { - "chainId": 101, - "address": "2cZv8HrgcWSvC6n1uEiS48cEQGb1d3fiowP2rpa4wBL9", - "symbol": "ACF", - "name": "Alien Chicken Farm", - "decimals": 2, - "logoURI": "https://shop.alienchickenfarm.com/logos/acf-token.png", - "tags": ["social-token"], - "extensions": { - "twitter": "https://twitter.com/playacf" - } - }, - { - "chainId": 101, - "address": "3LDAW7enNUZ4DjE1jCi1cDpXvXLrJ1rPiECPbcHpMgG2", - "symbol": "FEED", - "name": "FEED Token on Alien Chicken Farm", - "decimals": 2, - "logoURI": "https://shop.alienchickenfarm.com/logos/feed-token.png", - "tags": ["social-token"], - "extensions": { - "twitter": "https://twitter.com/playacf" - } - }, - { - "chainId": 101, - "address": "FB2duy897mbbMEJy1n4Xd1DcWWJqKVyMnRXEhv6zpzWD", - "symbol": "dkto", - "name": "Dkenyang Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/brokay02/dkenyangtoken/main/logo.png", - "tags": ["community-token", "utility-token", "social-token"] - }, - { - "chainId": 103, - "address": "8e6zTC5gppWaWcb2UyEW8BXzLwCMTuBHFKyN1JhaXmvj", - "symbol": "DPC", - "name": "DP Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/HKmus/token/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ToMWZWJ8i1DMat5e7RFsdSr676RoMpvR3JLD62kXaxn", - "symbol": "MWWL", - "name": "MetaWatchies Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ToMWZWJ8i1DMat5e7RFsdSr676RoMpvR3JLD62kXaxn/logo.png" - }, - { - "chainId": 101, - "address": "G8TzWQCpuUcmbxcPAuRH7L6kE4JWyNYoQzgud55sSo3N", - "symbol": "TOWOOD", - "name": "TownWood", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/G8TzWQCpuUcmbxcPAuRH7L6kE4JWyNYoQzgud55sSo3N/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://solanatown.com" - } - }, - { - "chainId": 101, - "address": "SSCdRrLDAtfRfqmxK38osBcCv8QHJiZok9zYhUe4tXx", - "symbol": "SSC", - "name": "Stoned Shiba Club Whitelist Token", - "decimals": 9, - "logoURI": "https://imagizer.imageshack.com/img924/2938/6XDlIB.png", - "tags": ["community-token", "whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/enigmaventures", - "website": "https://www.stonedshibaclub.com/" - } - }, - { - "chainId": 101, - "address": "3coLAbtoMYXwhXnHbbYqsuwNGBxcDQMYwHYqrWXGdRfw", - "symbol": "PILL", - "name": "Pill Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3coLAbtoMYXwhXnHbbYqsuwNGBxcDQMYwHYqrWXGdRfw/logo.png", - "tags": ["pill-token", "NFT", "utility-token"], - "extensions": { - "discord": "https://discord.gg/Fbw9wBafzQ", - "twitter": "https://twitter.com/TheFrameboy", - "website": "https://www.theframeboy.com/" - } - }, - { - "chainId": 101, - "address": "3dSveezVS2YpDEfbinyk8iCVej88gjk1Ycdv2jZWGgoT", - "symbol": "$CHIQ", - "name": "Honkuga Apes", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/IamDtosh/banana/main/banana%20token.png", - "tags": ["nft", "defi"] - }, - { - "chainId": 101, - "address": "AnGcQt5EzPjWUXjWmscS4So6JQkeMCYUbmDHNhCHx72r", - "symbol": "PIGS", - "name": "Kirei Pigs OG WL Pass", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AnGcQt5EzPjWUXjWmscS4So6JQkeMCYUbmDHNhCHx72r/logo.png", - "tags": ["whitelist"], - "extensions": { - "twitter": "https://twitter.com/KireiFarm" - } - }, - { - "chainId": 101, - "address": "GQYaznpvPRfPDtvNq1tnh1UvugenV5PgLJaq2Y5yRvAk", - "symbol": "WCS", - "name": "Walker Southern Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/walkersouthern/CryptoCoin/main/Walker%20Coin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Deadq2dD9TNw6mGCexVRf9WneKEdu1STWhViccC3rwLo", - "symbol": "Dead", - "name": "Dead Rejects WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Deadq2dD9TNw6mGCexVRf9WneKEdu1STWhViccC3rwLo/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/DeadRejcts" - } - }, - { - "chainId": 101, - "address": "46KLEwWLu6zXjqyG845XKLCQPbTDZxXbUQc28wPAQSMh", - "symbol": "MFCT", - "name": "MetaFliesClub", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ezrelativ/crypto/main/logo.jpg", - "tags": ["social-token", "NFT", "utility-token"], - "extensions": { - "discord": "https://discord.gg/49UK5529v2", - "twitter": "https://twitter.com/metafliesclub", - "website": "https://www.metafliesclub.com/" - } - }, - { - "chainId": 101, - "address": "FjevNEc8sf1HTZx2VkSc34xGedfnRZtHymf5irzj1f33", - "symbol": "BOOT", - "name": "KBooty", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/njunplugd/crypto/main/kbooty.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "LoL9h4KVh2A9RxuFR9NAc2dPhKnKCJnhpn9mvPTv4v9", - "symbol": "BAGZ", - "name": "DEGEN BAGZ", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/LoL9h4KVh2A9RxuFR9NAc2dPhKnKCJnhpn9mvPTv4v9/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "DahLysVxXFtUcn7TjXgQLe2VZyhtpawVD9AN63f1gjVW", - "symbol": "DAHLYS", - "name": "Dahlys Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DahLysVxXFtUcn7TjXgQLe2VZyhtpawVD9AN63f1gjVW/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/dahlysart", - "website": "https://www.dahlys.art" - } - }, - { - "chainId": 101, - "address": "6qkfb2MhrA9nfk1iiosNh5ysgAhF8eDP8b3HCpt4LPXZ", - "symbol": "THANKSANDI", - "name": "LOST THANKS ANDI COIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6qkfb2MhrA9nfk1iiosNh5ysgAhF8eDP8b3HCpt4LPXZ/logo.png", - "tags": ["secondary-toxicboys", "toxic"] - }, - { - "chainId": 101, - "address": "9tH3azxj7QxjtKnE9Qepgg7UmNLR56VLXJg8F23F1Grs", - "symbol": "THANKSANDI2", - "name": "LOST BUTT COIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9tH3azxj7QxjtKnE9Qepgg7UmNLR56VLXJg8F23F1Grs/logo.png", - "tags": ["supertoxicbuyer", "t0t0rial"] - }, - { - "chainId": 101, - "address": "StoNBpvhd4Cg4Bz4DMF22goRRHAP6B692WPNeJu9zMy", - "symbol": "SHIB", - "name": "Stoned Shiba WL Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/StoNBpvhd4Cg4Bz4DMF22goRRHAP6B692WPNeJu9zMy/logo.png", - "tags": ["whitelist"], - "extensions": { - "twitter": "https://twitter.com/StonedShibaClub", - "website": "https://www.stonedshibaclub.com/" - } - }, - { - "chainId": 102, - "address": "EU4pwnKynnuheNui1NgAFp2Fc8QKARPf8RnqjK9GT4e1", - "symbol": "ROST", - "name": "RossTest", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/d4b7c271eaace6696c88dd2f06bdbb873fe33ff9/assets/mainnet/EU4pwnKynnuheNui1NgAFp2Fc8QKARPf8RnqjK9GT4e1/logo.png", - "tags": ["stable-coin"] - }, - { - "chainId": 101, - "address": "EJnutrcHWQazTLb4spC6Uw5zSd5c3RMJg1a3KezKU984", - "symbol": "LIDNC", - "name": "LEADIDNC", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/theNetworkChuck/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5YtGSyQ7YxFgDc9oj4SpZGTjoS5p5Fubkg8sMauQqXoS", - "symbol": "PULP", - "name": "PULP", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5YtGSyQ7YxFgDc9oj4SpZGTjoS5p5Fubkg8sMauQqXoS/logo.png", - "tags": ["lp-token"], - "extensions": { - "description": "Juiced PULP Token", - "discord": "https://discord.gg/ZXBRGXccR2", - "instagram": "https://www.instagram.com/juicedfi", - "linkedin": "https://www.linkedin.com/company/juicedfi", - "medium": "https://www.medium.com/@juicedfinance", - "twitter": "https://twitter.com/JuicedProtocol", - "website": "https://www.juiced.fi", - "whitepaper": "https://juiced.fi/whitepaper.pdf" - } - }, - { - "chainId": 101, - "address": "HFFMj1sKtYz2bKssp9ZYx56azCFcJRAyzzgeYEpUcFg7", - "symbol": "cYa", - "name": "chyNyca", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/teamb17/chynyca/main/logoChyNyca.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5eUJjbhscHyr53jSBgar84BnLHq4QxchSbm1ugnpfsxq", - "symbol": "JUBTCv2", - "name": "JUBTC", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5eUJjbhscHyr53jSBgar84BnLHq4QxchSbm1ugnpfsxq/logo.png", - "tags": ["lp-token"], - "extensions": { - "description": "Juiced BTC Carton Token", - "discord": "https://discord.gg/ZXBRGXccR2", - "instagram": "https://www.instagram.com/juicedfi", - "linkedin": "https://www.linkedin.com/company/juicedfi", - "medium": "https://www.medium.com/@juicedfinance", - "twitter": "https://twitter.com/JuicedProtocol", - "website": "https://www.juiced.fi", - "whitepaper": "https://juiced.fi/whitepaper.pdf" - } - }, - { - "chainId": 101, - "address": "ACQZijQbC9sMManzoSq1LS9PuUEspsgwrqeoeXm9vrc6", - "symbol": "DDOG", - "name": "Daisy Dog", - "decimals": 6, - "logoURI": "https://github.com/nchapman75/DDog/blob/main/DDOG.PNG", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Ai5LQP5cT1j7nq2R6yNcc8eowdcurozdrvvse6FkuJqa", - "symbol": "W3C", - "name": "W3 Coin", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/W3EvolutionsLLC/w3c-token/main/logo.png", - "tags": ["game-token", "game-currency", "GameFi", "Gaming", "whitelist"], - "extensions": { - "description": "W3Evolutions Gaming Token", - "website": "https://www.w3evolutions.com" - } - }, - { - "chainId": 101, - "address": "stoNeDaST7HWxViXptoVKrwzsbabm4Jg8xeMDEtHAoY", - "symbol": "SSC", - "name": "Stoned Shiba Club WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/stoNeDaST7HWxViXptoVKrwzsbabm4Jg8xeMDEtHAoY/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/stonedshibaclub", - "website": "https://www.stonedshibaclub.com" - } - }, - { - "chainId": 101, - "address": "BCMSDKLugjyQUWxfZBe7JaDvLTK8HjfVUev64ERdigAn", - "symbol": "WC", - "name": "WalkCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/wsouthern21/crypto/main/WalkCoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6BAfSRm941BnCPszTiWB9YeDkSptYRxMMYKQH4t7iFGc", - "symbol": "STHC", - "name": "Southern Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/wsouthern21/crypto2/main/Crypto%20Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GirLsab7zzS2sy6DcMpiqoJHpEhtfdZLQnPtQKiHH7nk", - "symbol": "AUGIR1S", - "name": "The Aurora Girls", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GirLsab7zzS2sy6DcMpiqoJHpEhtfdZLQnPtQKiHH7nk/logo.png", - "tags": ["nft", "utility-token"], - "extensions": { - "discord": "https://t.co/as2tJm3wuW", - "twitter": "https://twitter.com/TheAuroraGirls", - "website": "https://solcry.io/" - } - }, - { - "chainId": 101, - "address": "G4rhtwBmKXkTtXNwyS7qa7KYkWHFYzJ5yhNcG2kedt7N", - "symbol": "PBWL", - "name": "Peacebot Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/G4rhtwBmKXkTtXNwyS7qa7KYkWHFYzJ5yhNcG2kedt7N/logo.png", - "extensions": { - "website": "https://peace-bot.com/" - } - }, - { - "chainId": 101, - "address": "orcKkqqQoXZDYBrDtKHRNcVN73jW7454eK3dFm9Zi69", - "symbol": "ORCS", - "name": "The Orcs WL token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Bitcoinblack482/logo/main/the%20orc.png", - "tags": [ - "NFT", - "dao", - "utility-token", - "meta-verse", - "game", - "play2earn", - "governance" - ], - "extensions": { - "discord": "https://discord.com/invite/theorcs", - "twitter": "https://twitter.com/TheOrcsNFT", - "website": "https://theorcs.io" - } - }, - { - "chainId": 101, - "address": "DuSyBCGuhPvyGu6cSvbZonvQvh8JLyGvXJn1TmkJh6Zn", - "symbol": "$NEON", - "name": "NeonGame Credits", - "decimals": 0, - "logoURI": "https://arweave.net/VPS4BrOgXT4rg-mwGfCLqXL8vtbII0ianMBsw_L2CeE", - "tags": ["utility-token"], - "extensions": { - "website": "https://neon.game" - } - }, - { - "chainId": 101, - "address": "5iet2XLprsR1ACxC46p6RzPbhu5u7Kcw6gHTYbaLnUWo", - "symbol": "DIRT", - "name": "Pup Filthy Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5iet2XLprsR1ACxC46p6RzPbhu5u7Kcw6gHTYbaLnUWo/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/pupfilthy", - "website": "https://pupfilthy.com" - } - }, - { - "chainId": 103, - "address": "HmAb5sNiKhddoNtTU11RwuT4xEc1ZG4X1ZgRXjB9VBUE", - "symbol": "ANIMET", - "name": "Animedic Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HmAb5sNiKhddoNtTU11RwuT4xEc1ZG4X1ZgRXjB9VBUE/logo.png", - "tags": ["health", "animal"], - "extensions": { - "discord": "https://discord.com/invite/animedic", - "twitter": "https://twitter.com/animedic", - "website": "https://animedic.github.io" - } - }, - { - "chainId": 101, - "address": "8gYZZsmP1v2WEebzNL1gH12WYqAFcspVByWZ2ejuJMm5", - "symbol": "PRISM", - "name": "Prisma Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8gYZZsmP1v2WEebzNL1gH12WYqAFcspVByWZ2ejuJMm5/icon.png" - }, - { - "chainId": 101, - "address": "C9bdTtvXhNAKyB7FWSCwCgfQVYyU4LCLhxogyM921t73", - "symbol": "PYRO", - "name": "PYRO", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ddbrain/crypto/main/images/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FpNYrNZeNyskdcLK1saZW4iiGTfAE3BbDBv2tCGvAgjD", - "symbol": "MKX", - "name": "MekaX Token", - "decimals": 6, - "logoURI": "https://user-images.githubusercontent.com/102857757/161379695-491afb4f-d004-4902-b422-d930c4e1ccb1.png", - "tags": ["NFT"] - }, - { - "chainId": 101, - "address": "DAHLEzHa3vFjmBvqvs5BWmyF4HY85YLFvnUz97dNyyou", - "symbol": "DAHLYS", - "name": "Dahlys WL1", - "decimals": 9, - "logoURI": "https://imagizer.imageshack.com/img923/6392/7xzbmS.jpg", - "tags": ["community-token", "whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/dahlysart", - "website": "https://www.dahlys.art/" - } - }, - { - "chainId": 101, - "address": "GQ2taRp7AnriEkRjJaynKT8dFkHNGPP5FozaP9191Qtr", - "symbol": "ARN", - "name": "Arenum Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GQ2taRp7AnriEkRjJaynKT8dFkHNGPP5FozaP9191Qtr/logo.png", - "tags": ["game-token"], - "extensions": { - "telegram": "https://t.me/arenum_community", - "telegramAnnouncements": "https://t.me/arenum_announcements", - "website": "https://arenum.io" - } - }, - { - "chainId": 101, - "address": "32dwLURkgJLKxG9yNdhFAXP9hxrA2Xw6xXu9gPVAvjYt", - "symbol": "BPUP", - "name": "Battle Pups NFT Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/32dwLURkgJLKxG9yNdhFAXP9hxrA2Xw6xXu9gPVAvjYt/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/z7PFKJ9n", - "twitter": "https://twitter.com/BattlePupsNFT", - "website": "https://battle-pups.com/" - } - }, - { - "chainId": 101, - "address": "Cue8xLyv9Vnf8zoXW4Jpn2ynqaMk4J8pwczhjDLHFyoK", - "symbol": "USAT", - "name": "USAT", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Cue8xLyv9Vnf8zoXW4Jpn2ynqaMk4J8pwczhjDLHFyoK/logo.png" - }, - { - "chainId": 103, - "address": "8LZoJhzSfRgyxehVkMNkn6uJmuMYRUzSKLGw9JGMPAk5", - "symbol": "SBHD", - "name": "Sabari H Dev", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/sabari245/sol-token/main/logo.jpg", - "tags": ["dev-token"] - }, - { - "chainId": 101, - "address": "G28mRQwFFM4bY5g6vezU5nVbTTckHoMEoPC2qCXbnewY", - "symbol": "$GBBB", - "name": "Green Bubble Bucks", - "decimals": 5, - "logoURI": "https://uhlpgtdwixivizncogcqldctszd4fmd2dvocojwozxqznxhynm.arweave.net/odbzTHZF0VRlonGFBYxTlkfCsHod_XCcmzs3hltz4a0?ext=PNG", - "tags": ["NFT"], - "extensions": { - "website": "http://greenbubbleinc.com/" - } - }, - { - "chainId": 101, - "address": "5rMKeugmjjQw4SgxZXJAchPEKHDRh2rHakizKye12GQD", - "symbol": "HASHA", - "name": "HSH", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5rMKeugmjjQw4SgxZXJAchPEKHDRh2rHakizKye12GQD/logo.png" - }, - { - "chainId": 101, - "address": "A8VnsxRqLr8oAzJbdv4noEKoo3AXgUy6mmmof2xDbgdJ", - "symbol": "p2wmgo", - "name": "p2wmgo Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ITConsilium-Limited/p2wmgo/main/gomob1024.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "FoRGERiW7odcCBGU1bztZi16osPBHjxharvDathL5eds", - "symbol": "FORGE", - "name": "FORGE", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FoRGERiW7odcCBGU1bztZi16osPBHjxharvDathL5eds/logo.png", - "tags": ["NFT", "utility-token"], - "extensions": { - "discord": "https://discord.gg/blocksmithlabs", - "twitter": "https://twitter.com/BlocksmithLabs", - "website": "https://blocksmithlabs.io/" - } - }, - { - "chainId": 101, - "address": "warsF9jr2vq7Y9fmRcC9napUVxpv8wcZmcq8ct8gaz8", - "symbol": "WARS", - "name": "GMG Hog Wars", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/warsF9jr2vq7Y9fmRcC9napUVxpv8wcZmcq8ct8gaz8/logo.jpg", - "tags": ["apparel-token", "ecommerce-token", "fashion-token"], - "extensions": { - "description": "WARS is a token for the gm Groundhogs Hog Wars event", - "twitter": "https://twitter.com/gmGroundhogs" - } - }, - { - "chainId": 101, - "address": "8fnyQUm2c6MGy7qLq4ogFYntEA2XEts59xqrxhZJAkgL", - "symbol": "CINI", - "name": "CoinInvest Capital", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/CoinInvestCapital/token-list/main/assets/mainnet/8fnyQUm2c6MGy7qLq4ogFYntEA2XEts59xqrxhZJAkgL/logo.png" - }, - { - "chainId": 101, - "address": "3G9BX9KArQTz3F2mCz5nMKCgNMmJ81BFkkwbuJi8ezq8", - "symbol": "RSRDC", - "name": "WCC RSR DC", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3G9BX9KArQTz3F2mCz5nMKCgNMmJ81BFkkwbuJi8ezq8/logo.png", - "tags": ["community", "airdrop", "wcc"], - "extensions": { - "discord": "https://discord.gg/metawhips", - "twitter": "https://twitter.com/wccmetawhips", - "website": "https://www.skrrrt.vip" - } - }, - { - "chainId": 101, - "address": "7fug9XCM8FWVKNrbzGetiZn1MX3S3o81t5H7oRu46inc", - "symbol": "GHEE", - "name": "Genest Hudon Exchange Entreprise", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Tomx403/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "215ZhGvosobjXKJDWCFz1xc5RJdL13bxaULwTA8dE4y7", - "symbol": "FLD", - "name": "FLUID", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/jonesynyc/fluid/main/fluid%20final.trans.png", - "extensions": { - "twitter": "https://twitter.com/fluid_nyc" - } - }, - { - "chainId": 101, - "address": "CBvsvCdc48axE5jfct9x4Qz2sg5aBGyac4fzDKdANv4D", - "symbol": "Pmtoken", - "name": "Potato Mango token", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CBvsvCdc48axE5jfct9x4Qz2sg5aBGyac4fzDKdANv4D/logo.png", - "tags": ["NFT", "utility-token"] - }, - { - "chainId": 101, - "address": "HELZsSZmdzjsh4yP36cxG9R1z9fenennZtP35FbV6EdF", - "symbol": "HELLIEZ", - "name": "HELLIEZ DEATHLIST (WL)", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HELZsSZmdzjsh4yP36cxG9R1z9fenennZtP35FbV6EdF/logo.png" - }, - { - "chainId": 101, - "address": "Eh71tDvTBHcJYaXrqwjzqzHR1asbZuVS43sK8PAR4QdW", - "symbol": "HELZ", - "name": "HELZ TOKEN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Eh71tDvTBHcJYaXrqwjzqzHR1asbZuVS43sK8PAR4QdW/logo.png" - }, - { - "chainId": 101, - "address": "G9QgJYvey5D6stDmKsykTVz2yMJz6Br7i395GUjrPDgb", - "symbol": "MBI", - "name": "Mobiuss", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ghosy27/MobiusToken/main/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://discord.gg/PBYEE8mPsr" - } - }, - { - "chainId": 101, - "address": "sEEDMvgbMAxXmXLDaYWrT8bhCbjrWSMs2EehJbQsopJ", - "symbol": "WLSEED", - "name": "MINT PASS WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Neurologist/assets/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8FrBfqvgaYYwYN4bwEJzurkqThzbyz7gibQeDiCYUcw1", - "symbol": "RDN", - "name": "Riden app token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/sedoyjan/ridentoken/main/logo.png", - "tags": ["riden"] - }, - { - "chainId": 101, - "address": "4kHnCyYn4D6kquPMrQSZTHrVPuUjRom6CvffRr8i5MBG", - "symbol": "WINTO", - "name": "Wintoken", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4kHnCyYn4D6kquPMrQSZTHrVPuUjRom6CvffRr8i5MBG/logo.png", - "tags": ["utility-token", "nft"], - "extensions": { - "discord": "https://discord.gg/hKuu9pTmrF", - "twitter": "https://twitter.com/Winto_io" - } - }, - { - "chainId": 101, - "address": "Gvjfc5USPXCALsQc3jmRLoHWMjkZq7dFv2giWnYLf9SL", - "symbol": "HODLWL", - "name": "THPWL", - "decimals": 0, - "logoURI": "https://user-images.githubusercontent.com/24758821/161396522-d9a7c647-1506-4af6-b617-7195e302b9d2.png", - "extensions": { - "twitter": "https://twitter.com/hodlersproject", - "website": "https://thehodlersproject.com/" - } - }, - { - "chainId": 101, - "address": "24JRoY6bNNAGUYpmBJoBuR9sXfsMzRosnP7wyMaDZUxg", - "symbol": "DHLG", - "name": "Diamond Hand: Legends Gold", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/24JRoY6bNNAGUYpmBJoBuR9sXfsMzRosnP7wyMaDZUxg/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/dhlegends", - "website": "https://www.diamondhandlegends.com" - } - }, - { - "chainId": 101, - "address": "3hvHyKjbJCrbWkZHPYChnG42qwjbjQjDF5fESydRWiU5", - "symbol": "LDARWL", - "name": "LOST DINO ARK ROYAL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3hvHyKjbJCrbWkZHPYChnG42qwjbjQjDF5fESydRWiU5/logo.png", - "tags": ["RoyalToken", "LostDinoArkRoyal"] - }, - { - "chainId": 101, - "address": "8ewmsfsNH3C3fjjSK7qsogoMfvushqANVxzSz5jAwBH", - "symbol": "LDAWL", - "name": "LOST DINO ARK WHITELIST", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8ewmsfsNH3C3fjjSK7qsogoMfvushqANVxzSz5jAwBH/logo.png", - "tags": ["WhitelistToken", "LostDinoArkWhitelist"] - }, - { - "chainId": 101, - "address": "5AsqjUsxFwkGLh9hwSYwV6rd2h9LXMia6PPLmPLG9vq4", - "symbol": "TYN", - "name": "Tachyon", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/zoexbt/crypto/main/logo.png.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AogvAeorTFevSc68RyrcLWQDawXUN4qEJbCKxVnuLHNN", - "symbol": "ATOGT", - "name": "Atlaria OG Mint Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ATTF58JfFUHZktZXyV6aCTwHVCYzPuZBg2hma7J7Ao7n/logo.png", - "tags": ["NFT"] - }, - { - "chainId": 101, - "address": "SPraYi59a21jEhqvPBbWuwmjA4vdTaSLbiRTefcHJSR", - "symbol": "SPRAY", - "name": "SPRAY", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SPraYi59a21jEhqvPBbWuwmjA4vdTaSLbiRTefcHJSR/icon.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/thugpacaz", - "twitter": "https://twitter.com/ThugPacaz", - "website": "https://thugpacaz.com" - } - }, - { - "chainId": 101, - "address": "G5uEmbn8Vft79cNkRBxc4xoCXUYka9FQcivTrKb155Nz", - "symbol": "unc", - "name": "For Ukraine", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/nasher207/ukrainian-flag/main/ukrainian%20flag.png", - "tags": ["community", "community-token"] - }, - { - "chainId": 101, - "address": "GpNrpPQTmu5k6TWauyggCwjMyjP7WfGMYkMRWYq7dTF5", - "symbol": "TLOAN", - "name": "TLOAN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/akhelbey/tloan/main/logo.png", - "tags": ["social-token"], - "extensions": { - "description": "The Life of a Negro Token", - "discord": "https://discord.gg/fPf4HNkc", - "instagram": "https://www.instagram.com/tloanio/", - "telegram": "https://t.me/tloanio", - "twitter": "https://twitter.com/tloanio", - "website": "https://www.tloan.io", - "whitepaper": "https://tloan.io/wp-content/uploads/2022/04/White_Paper.pdf" - } - }, - { - "chainId": 101, - "address": "2zPkGDkXyDc7Fs2iNADRobEMpfNvtBcFXpSypgd1TmGP", - "symbol": "PBN", - "name": "Procrastabation Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/insert-random-name/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8wtoCiM49VyZo8u5kK23UgQJkPU9oRtc7qYj1wRqCRkb", - "symbol": "BDNI", - "name": "BadNightOG", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Shwa86/bagnightkoaala/main/logo.png" - }, - { - "chainId": 101, - "address": "54tN98XPJFedhCSFWURHhNwUsSeNBSAwndqZkkjP6GEy", - "symbol": "BAI", - "name": "BOT AI", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Adigodx/Bot-AI/5866a5345bdec1b6204e065279a0829111fb02de/pixil-frame-0.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CtoftNu5RgEwcPBRLfGDoJSL8SrgTy84USQBytyewACQ", - "symbol": "SMFRS", - "name": "SNIPER MFERS", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CtoftNu5RgEwcPBRLfGDoJSL8SrgTy84USQBytyewACQ/logo.png", - "extensions": { - "twitter": "https://twitter.com/moneynosleep777" - } - }, - { - "chainId": 101, - "address": "9ztqroLtnJ7LpDts1kryyYP3mepfhJJN5YhESvmqb5pZ", - "symbol": "KUMPUS", - "name": "Kumpus Project", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Kumpus209/token-list/b7e0b60f00062674e4bc355897d29fa3d083b3dc/assets/mainnet/logo.png", - "tags": ["NFT", "Merketplace"], - "extensions": { - "telegram": "https://t.me/KumpusProject", - "twitter": "https://twitter.com/KumpusProject", - "website": "https://kumpusproject.com/" - } - }, - { - "chainId": 101, - "address": "7VP7Jyvdpa3yJnajTitACUvB4m3GqzrMbCdLVBMw55Xs", - "symbol": "honey", - "name": "Cryptohoney", - "decimals": 0, - "logoURI": "https://github.com/cryptohoneyy/cyhy/blob/main/cyhy.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "94Korhd7vLtkogbpM1c17fqr1bfjpAYJhwkJTTedQW3x", - "symbol": "YOTU", - "name": "Miniyotu Troops Token", - "decimals": 3, - "logoURI": "https://media.discordapp.net/attachments/926535226820276264/960073766447243284/yotu.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5MRLB1syeNmUda6wKdZDwjFx6QgAqxMPy6baE7S9rCEN", - "symbol": "GOOONZ", - "name": "DragooonFruit", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/OnChainFoundation/Dragooon/main/frooot.png", - "tags": ["Meme-Token"] - }, - { - "chainId": 101, - "address": "7qzjokh7N8eQm6QFnKuydZd83jMSr65VHooJYnxBYxYB", - "symbol": "SER", - "name": "Serial Number", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/CryptoChris69/Crypto/main/Serial%20Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DDaf1JydTVMnenk3Rh7SBKBsXV3gy5QuV99ybYiysrAj", - "symbol": "AGDT", - "name": "AvirKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/venkykumar2019/New-Crypto-Avir/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "35Qf788AoDACckoakVqbUxT7FdrKUBDa2f1S2MWUqo5J", - "symbol": "BCC", - "name": "BCC Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SolanaTokenMerger/BCC-Coin/main/logo.png", - "tags": ["social-token", "community-token", "meme-token", "BCC-token"], - "extensions": { - "twitter": "https://twitter.com/bcc_roma", - "website": "https://www.bccroma.it", - "youtube": "https://www.youtube.com/user/BCCRoma60" - } - }, - { - "chainId": 101, - "address": "GPcBCCeg2vNVhPmNSePQj6vWM2dpaB9g2BWsvEqbc4EA", - "symbol": "NDR", - "name": "ÈndriuCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/sitispam0/crypto/main/endriu.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5GNgqzs26SZgxrB1KivhwT7yctZQ5NRWW8EFaC729Gas", - "symbol": "EROTICA", - "name": "EROTICA", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5GNgqzs26SZgxrB1KivhwT7yctZQ5NRWW8EFaC729Gas/logo.png", - "tags": ["community-token", "nsfw-token"], - "extensions": { - "twitter": "https://twitter.com/hub_erotica" - } - }, - { - "chainId": 101, - "address": "6R5ztjhArGnTPpgX8edFAHizbeBX1yJCMYsmeK6fYZ8g", - "symbol": "Pogi", - "name": "Pamogi", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6R5ztjhArGnTPpgX8edFAHizbeBX1yJCMYsmeK6fYZ8g/logo.png", - "tags": ["utility-token", "social-token"], - "extensions": { - "website": "https://www.pamogi.org" - } - }, - { - "chainId": 101, - "address": "GFyhVQnqNUY99irkC3NCkuucPZVkFfkGsb91detux7Mu", - "symbol": "TestPogi", - "name": "Pamogi Test Token", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GFyhVQnqNUY99irkC3NCkuucPZVkFfkGsb91detux7Mu/logo.png", - "tags": ["utility-token", "social-token"], - "extensions": { - "website": "https://www.pamogi.org" - } - }, - { - "chainId": 101, - "address": "ESUJjFm3aKEazEJhVLgdPTxwUyMmR2V9kFNVtZM2CkmS", - "symbol": "NOBU", - "name": "NobuKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/healthtech100/NobuKoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "LABSwpcfDjvRRMmEs87Y9yrj4pS9eofVS6cSbJm2zCW", - "symbol": "LABS", - "name": "LABS", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/LABSwpcfDjvRRMmEs87Y9yrj4pS9eofVS6cSbJm2zCW/logo.png", - "tags": ["NFT", "utility-token"] - }, - { - "chainId": 101, - "address": "3DKdpeB8ZQ221nxGLuGivph2FX8kaaYtVznxNqKf6yaU", - "symbol": "SSG", - "name": "Sol Shadow Gold", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solshadowgold/solshadowgold/main/ssg.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://find-and-update.company-information.service.gov.uk/company/13753949" - } - }, - { - "chainId": 101, - "address": "DC1G9rWimCagBKRehYGJ2cHj44BcM2rgvDQHJvbyLGWx", - "symbol": "CERO", - "name": "Codinero", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/vaibhav-vemula/codinero-logo/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "toaduF8Ay7udXP77Hi1EysXsRYuutL35vZ6wqMBtVvD", - "symbol": "TOAD", - "name": "Toad", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/toaduF8Ay7udXP77Hi1EysXsRYuutL35vZ6wqMBtVvD/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/toadboys", - "twitter": "https://twitter.com/ToadboysNFT", - "website": "https://www.toadboys.io/" - } - }, - { - "chainId": 101, - "address": "8FTDPeF3h5tjiKVwaQaKsEEuD6yPoz8eGjhqVPZb1Bh9", - "symbol": "CCT", - "name": "Continental Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/johnwick0008/cctoken/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HbFsWKt2kWzLqryhDhgu1iFgzW8AoR4CQMfKn8wxGydP", - "symbol": "TKCR", - "name": "Thinking Crypto Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ThinkingCrypto/crypto/main/logo.png", - "tags": ["social-token"], - "extensions": { - "description": "Thinking Crypto Podcast Community Token", - "facebook": "https://www.facebook.com/thinkingcrypto/", - "instagram": "https://www.instagram.com/thinkingcrypto/", - "linkedin": "https://www.linkedin.com/company/13064904/admin/", - "reddit": "https://www.reddit.com/r/ThinkingCrypto/", - "twitter": "https://twitter.com/ThinkingCrypto1", - "youtube": "https://www.youtube.com/channel/UCjpkwsuHgYx9fBE0ojsJ_-w" - } - }, - { - "chainId": 101, - "address": "77V9ffb8fT34MQrDqnMBLrmpzy6uGQgPRoo8168sNHzj", - "symbol": "MATE", - "name": "Solmate Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SolmateBot/Images/main/imageedit_2_3928478281.png", - "tags": ["utility-token"], - "extensions": { - "description": "Solmate Bot Community Token", - "discord": "https://discord.gg/FWfFgjTepT", - "twitter": "https://twitter.com/spruijtstudios" - } - }, - { - "chainId": 101, - "address": "5jWJPEorC9QeauxLgGMV2iiovj2h6PPMw7V8RC5U4yk4", - "symbol": "NZo", - "name": "Net Zero DAO", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Rafacramos/NetzeroDAO/main/logo.png", - "tags": ["Utility-token", "Governance"] - }, - { - "chainId": 101, - "address": "cophqNMBZ6NpUg4f59TymEiJJKdRh9WtedKsr4STJFS", - "symbol": "COPS", - "name": "Cop Community WL Pass", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/copcommunity/theLogo/main/copLogo.png", - "tags": ["Utility-token"] - }, - { - "chainId": 101, - "address": "28hRrgxNCciriqEkbQyxx3XQxifSWvxWuZ9vGZsjddQj", - "symbol": "SWCT", - "name": "SiliconWorx Coin", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/GameSlaveSA/crypto/main/swlogo.png", - "tags": ["utility-token", "NFT", "social-token"] - }, - { - "chainId": 101, - "address": "79dC5fzV4stHh5Xgdj23g8XhU5jJZENdBFdbipA2oJvN", - "symbol": "PPWLT", - "name": "PrjctPhoenix WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/79dC5fzV4stHh5Xgdj23g8XhU5jJZENdBFdbipA2oJvN/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "5rC7FRUAE9NqVrfpFvJY3VjSd6BcPgPZbJBKyE4NGfq7", - "symbol": "MAFI", - "name": "Markenfilm Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/mafi-space/mafi-coin/main/logo.png", - "tags": ["social-token", "NFT"] - }, - { - "chainId": 101, - "address": "5YdW5iu9zzxZKRx7Q2PkUSWTkWHKDBEfWFnEXujNzr6z", - "symbol": "TRAP", - "name": "T-RaP", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/khanna404/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ChimptYgsiiCJERXS3jnQwh9wBtWPqck4wwMgTtGJLpV", - "symbol": "CHIMPS", - "name": "The Chimpions Generation 2 Whitelist Token", - "decimals": 9, - "logoURI": "https://imagizer.imageshack.com/img924/3499/jh5v6W.jpg", - "tags": ["community-token", "whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/TheChimpions", - "website": "https://chimpions.co/" - } - }, - { - "chainId": 101, - "address": "EFjGYw3f9VrkqDXWKo3dPCaiobDnWRcCmgEtKUQrNoUo", - "symbol": "CNVS", - "name": "CryptoGraf Canvas II", - "decimals": 3, - "logoURI": "https://arweave.net/D6TOE8xwzJ4aTQMUbgatYednNR6cY5HEiHD5VNync7Q", - "tags": ["fractionalized-nft"], - "extensions": { - "vault": "https://fraktion.art/vault/C4Xs5b45H3ZvRnpaQkpAdmBTRa6at2Z8iaaRX1mDZZQZ", - "vaultPubkey": "C4Xs5b45H3ZvRnpaQkpAdmBTRa6at2Z8iaaRX1mDZZQZ" - } - }, - { - "chainId": 101, - "address": "Vvt9UyGcNp8orFH9P2YTaqHWp58xQVYx9YawnwZGYXA", - "symbol": "VERDANT", - "name": "Verdant Vtopian Coin", - "decimals": 9, - "logoURI": "https://i.ibb.co/KmmzW6Z/4d034f3d-fda1-45e9-8007-e549a6c6f68d.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "3VVBuocQLf8WjqqyWYWceBiymGkmFkjz1zTV4MKsjNXZ", - "symbol": "MMT", - "name": "Metaminez", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3VVBuocQLf8WjqqyWYWceBiymGkmFkjz1zTV4MKsjNXZ/logo.png" - }, - { - "chainId": 103, - "address": "4cMdQSr8E77DrWCjr4irqqqaoYeurjAuLaa7xu7xVEfk", - "symbol": "PAKCOIN", - "name": "Pak Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4cMdQSr8E77DrWCjr4irqqqaoYeurjAuLaa7xu7xVEfk/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FReLpsqXRQ5Xu9hEmmvEk3vs2uvqieE6JyGNkzMyhkb", - "symbol": "EGV", - "name": "eco globe vision", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FReLpsqXRQ5Xu9hEmmvEk3vs2uvqieE6JyGNkzMyhkb/logo.png", - "tags": ["community-token"], - "extensions": { - "website": "https://eco-globe-vision.link" - } - }, - { - "chainId": 101, - "address": "CWYigXzWDaFt3snfxSz9upq3TyxiUokNxZt4Eun6t2Lm", - "symbol": "BTBT", - "name": "BitBot Token(Dev)", - "decimals": 9, - "logoURI": "https://github.com/BitBotDAO/assets/blob/master/img/bitbot-logo.svg", - "extensions": { - "twitter": "https://twitter.com/BitBotDao" - } - }, - { - "chainId": 101, - "address": "FFQGmLCrUBD8DUEvPE5bXi4ZmBniaFxafuKUNUBzdxWE", - "symbol": "EPCT", - "name": "Epic Token (Dev)", - "decimals": 9, - "logoURI": "https://github.com/EpicDAO/assets/blob/master/img/Epic-logo.svg", - "extensions": { - "twitter": "https://twitter.com/Epic_DAO" - } - }, - { - "chainId": 101, - "address": "8vBej3sZ87b5W4QyEyTtmnqsqA4xwpbABdfKGcQWH7o3", - "symbol": "GROV", - "name": "Groove Token (Dev)", - "decimals": 9, - "logoURI": "https://github.com/GrooveDAO/assets/blob/master/img/Groove-logo.svg", - "extensions": { - "twitter": "https://twitter.com/GrooveDAO" - } - }, - { - "chainId": 101, - "address": "HAARJNu7UXSAWfGLF2yWBD3Mv3Rakc1naeYgyTbZybWN", - "symbol": "JCO", - "name": "Jackoin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HAARJNu7UXSAWfGLF2yWBD3Mv3Rakc1naeYgyTbZybWN/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://twitter.com/CZexhib" - } - }, - { - "chainId": 101, - "address": "AumBEDtS1V3UtuAGf1UeW8jUhHuG4HckhFvnBes4tckj", - "symbol": "G", - "name": "G", - "decimals": 9, - "logoURI": "https://github.com/SolGuards/G/blob/main/logo.png", - "tags": ["utility-token", "NFT"], - "extensions": { - "twitter": "https://twitter.com/SolGuards", - "website": "https://www.solguards.io" - } - }, - { - "chainId": 101, - "address": "FMEe1VPgtGPp2jMr1Q1VcaSw1PfTBEqkjosk1EESCQN", - "symbol": "OFM", - "name": "Outbreak Free Mint", - "decimals": 0, - "logoURI": "https://i.ibb.co/FJCztXW/Outbreak-Free-Mint.png", - "tags": ["wl-token"] - }, - { - "chainId": 101, - "address": "5BKKS6cSvydNW882kLJw5EEzyyvZEqE1945EXgUB1Pkv", - "symbol": "OGH", - "name": "Outbreak Geisha Holder", - "decimals": 0, - "logoURI": "https://i.ibb.co/HDxK8Fc/Outbreak-Geisha-Holder.png", - "tags": ["wl-token"] - }, - { - "chainId": 101, - "address": "9dMYZBjnWTpUMJ9pzNmGMg3AXQyZ2h7HmURa1qt3qNEQ", - "symbol": "WLOUTBREAK", - "name": "Outbreak Whitelist", - "decimals": 0, - "logoURI": "https://i.ibb.co/VjnqTJy/Outbreak-Whitelist.png", - "tags": ["wl-token"] - }, - { - "chainId": 101, - "address": "AN5yB1R4D9k2VQG7dEEbzrDxAw1GkbCcgVJhAjRseWZ3", - "symbol": "WLFCFS", - "name": "WL FCFS", - "decimals": 0, - "logoURI": "https://i.ibb.co/G3GbmDb/Outbreak-FCFS.png", - "tags": ["wl-token"] - }, - { - "chainId": 101, - "address": "Sq4tEi2KpjUbqfss5Nwfkf53bgd2RCmBHY8u65UQjBp", - "symbol": "$SQUEAK", - "name": "SQUEAK", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Sq4tEi2KpjUbqfss5Nwfkf53bgd2RCmBHY8u65UQjBp/logo.jpg" - }, - { - "chainId": 101, - "address": "6KyMx9juomENV4rZzTH1hj5HXqCo1pWx89J94VaAPecz", - "symbol": "ELAT", - "name": "E LATS", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/e-lats/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FbNGhqrw9Wm1y2mdkBRuhXkBfrh6fTd1gXS7d4oov88b", - "symbol": "MAG", - "name": "Meta Ape Gang Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Robby3082/test-token/main/metaape.jpeg", - "extensions": { - "twitter": "https://twitter.com/MetaApeGang" - } - }, - { - "chainId": 101, - "address": "PRAxfbouRoJ9yZqhyejEAH6RvjJ86Y82vfiZTBSM3xG", - "symbol": "PRANA", - "name": "prANA", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/PRAxfbouRoJ9yZqhyejEAH6RvjJ86Y82vfiZTBSM3xG/logo.png", - "tags": ["currency"], - "extensions": { - "twitter": "https://twitter.com/nirvana_fi", - "website": "https://nirvana.finance/" - } - }, - { - "chainId": 101, - "address": "DPThsefJD3CtrkiDTNuFM9cS2b6kPFTQcAfKx4YNX9A6", - "symbol": "$BOLT", - "name": "Panzerdogs BOLTs", - "decimals": 4, - "logoURI": "https://www.panzerdogs.io/img/BOLT.gif", - "tags": [ - "utility-token", - "game-token", - "GameFi", - "game-currency", - "payment-token" - ], - "extensions": { - "discord": "https://discord.gg/panzerdogs", - "twitter": "https://twitter.com/panzerdogs", - "website": "https://www.panzerdogs.io/" - } - }, - { - "chainId": 101, - "address": "CEtqLJAFomU9FgL47vZW9LsWgHL9rcT5nyVrna2ddtPa", - "symbol": "$PANZR", - "name": "Panzerdogs PANZR", - "decimals": 2, - "logoURI": "https://www.panzerdogs.io/img/PANZR.gif", - "tags": [ - "utility-token", - "game-token", - "GameFi", - "game-currency", - "payment-token" - ], - "extensions": { - "discord": "https://discord.gg/panzerdogs", - "twitter": "https://twitter.com/panzerdogs", - "website": "https://www.panzerdogs.io/" - } - }, - { - "chainId": 101, - "address": "5aNLJRid1y4Y9UJxzsM8yPEDQAfq8rZf5azvoTFtNv69", - "symbol": "ARX", - "name": "ARKADIA", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5aNLJRid1y4Y9UJxzsM8yPEDQAfq8rZf5azvoTFtNv69/logo.png", - "tags": ["Game-Token"], - "extensions": { - "discord": "https://discord.gg/7JzWxWejsb", - "twitter": "https://twitter.com/ArkadiaUnivers", - "website": "https://arkadianft.io/" - } - }, - { - "chainId": 101, - "address": "Gqiou284yNmVtTGVVM8guof4DaQtbrEDC4kgjNHZbbo4", - "symbol": "SHIVX", - "name": "Shivx", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/ShivXPrivacy/token-list/48e89eaa1a5b4577fc4f3066e5661933612bdec9/assets/mainnet/Gqiou284yNmVtTGVVM8guof4DaQtbrEDC4kgjNHZbbo4/Logo.png" - }, - { - "chainId": 101, - "address": "DLu9VabVMnEpcU2CZ5rMGAPyMKBQH3RASUnZWz9qgCTv", - "symbol": "RBWLT", - "name": "RarityBox WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DLu9VabVMnEpcU2CZ5rMGAPyMKBQH3RASUnZWz9qgCTv/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "HDC3jaDCVtyxyBLiED14hZcoyZeQzk7Cben6nodibC2f", - "symbol": "ALLY", - "name": "AllyCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/allyb95/cryp/main/a-logo-1495222655.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8kedZM5F8wdK25NU5ScubcpaDjxVKaiNiV2W29fc2NAv", - "symbol": "LC", - "name": "Lightning Cell", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8kedZM5F8wdK25NU5ScubcpaDjxVKaiNiV2W29fc2NAv/logo.png", - "tags": ["WL-token"] - }, - { - "chainId": 101, - "address": "BzpzLiPKaNt7yzz2r1HSQ5v1L3aXtU16vVpHGbdCkLwU", - "symbol": "INFMO", - "name": "INFOMO ALPHA", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BzpzLiPKaNt7yzz2r1HSQ5v1L3aXtU16vVpHGbdCkLwU/logo.png" - }, - { - "chainId": 101, - "address": "C27pBNhhNL6YaAR4xUpV9qqigcdo25yMS5UVsnqV9HxT", - "symbol": "V", - "name": "Vertical", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/C27pBNhhNL6YaAR4xUpV9qqigcdo25yMS5UVsnqV9HxT/logo.png", - "tags": ["community-token", "social-token"] - }, - { - "chainId": 101, - "address": "4mKBZqR8EH1dAjtKsbu6zKPJ8haiCvqWKRCSYw1JdNmE", - "symbol": "POPC", - "name": "Popcoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/georgeamccarthy/Popcoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6668ECUWVZjx5HiR74UGcuumtAyW2ser7HBX3RTVBCZF", - "symbol": "666", - "name": "666 Whitelist Pass", - "decimals": 0, - "logoURI": "http://666serials.xyz/wp-content/uploads/2022/04/6.png", - "tags": ["WL-token"] - }, - { - "chainId": 101, - "address": "8k8nYi4NSigPgk9CijcDJyoraGr273AggWZFgn8Adk1a", - "symbol": "VSNRY", - "name": "Visionary Studios Droplet", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8k8nYi4NSigPgk9CijcDJyoraGr273AggWZFgn8Adk1a/logo.png", - "tags": ["utility-token", "solvent-droplet"], - "extensions": { - "discord": "https://discord.gg/thK8BCtQbM", - "github": "https://github.com/solventprotocol", - "medium": "https://medium.com/@solventprotocol", - "serumV3Usdc": "6cQTBrDUWjSKjeqhAzYE7GA1LjR7QexoSfwGrDEVpLFS", - "telegram": "https://t.me/solventprotocol", - "twitter": "https://twitter.com/solventprotocol", - "website": "https://solvent.xyz" - } - }, - { - "chainId": 101, - "address": "8tSb4sMDuwHYcrQbm7urQw4WqLL2MNo71FXv3FCCVEnf", - "symbol": "MOO", - "name": "Moomero Equity", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Moomero/moomero-logo/main/Artboard%201.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/moomero_" - } - }, - { - "chainId": 101, - "address": "A9v6nZmsfjAiby6vJNABQcXCeHE961xvTgMPUNEcVyrp", - "symbol": "MTB", - "name": "MetaBridge", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/wisdomeji/Metabridge-logo/main/metabreeeeret.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5ujgCnbYPSatHcw4NcM2A349hz1HELoo2RCRRBiU9Y6x", - "symbol": "ESX", - "name": "Estrellax", - "decimals": 3, - "logoURI": "https://github.com/lysy-vlc/estrellax-crypto/blob/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 102, - "address": "neoneXWLNouaSKk2zna7p54qbmsuVUtdmMGzR5MuPd9", - "symbol": "NEON", - "name": "Whiteneon Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/whiteneon/token-list/main/assets/mainnet/neoneXWLNouaSKk2zna7p54qbmsuVUtdmMGzR5MuPd9/logo2.png", - "tags": ["utility-token", "social-token", "community-token"], - "extensions": { - "website": "https://solana.whiteneon.com/" - } - }, - { - "chainId": 103, - "address": "neoneXWLNouaSKk2zna7p54qbmsuVUtdmMGzR5MuPd9", - "symbol": "NEON", - "name": "Whiteneon Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/whiteneon/token-list/main/assets/mainnet/neoneXWLNouaSKk2zna7p54qbmsuVUtdmMGzR5MuPd9/logo3.png", - "tags": ["utility-token", "social-token", "community-token"], - "extensions": { - "website": "https://solana.whiteneon.com/" - } - }, - { - "chainId": 101, - "address": "CYCPEtrCYjNycxZiZ2RyeBBUqzsgRh7yGjn4SwX2AnPF", - "symbol": "ATLAS", - "name": "Atlascoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CYCPEtrCYjNycxZiZ2RyeBBUqzsgRh7yGjn4SwX2AnPF/logo.png" - }, - { - "chainId": 101, - "address": "PiXELzrxUL2fJjPLw4SxmpPD4zwM5t7aKfNEo1WPxJw", - "symbol": "PiXEL", - "name": "PiXEL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/PiXELzrxUL2fJjPLw4SxmpPD4zwM5t7aKfNEo1WPxJw/logo.png", - "tags": ["NFT"], - "extensions": { - "twitter": "https://twitter.com/solsunsets", - "website": "https://solsunsets.com/" - } - }, - { - "chainId": 101, - "address": "ToGdR5gjTqDe9SuLb1zcCathHv8KwqZKwHryUyztWsM", - "symbol": "PBCWL", - "name": "Paladin Bounty Club WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ToGdR5gjTqDe9SuLb1zcCathHv8KwqZKwHryUyztWsM/logo.png", - "tags": ["mint-token", "whitelist"] - }, - { - "chainId": 101, - "address": "AZESJgZyDkHW11QA1MWhBa46ne3y4fp88wbtBr8UZR5m", - "symbol": "BIMA", - "name": "Bianchi Michele Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Kira96033/crypto/main/cry.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "pbLJx61yx7grY458m3WjJhgDiSYZmXBaqLaA6KvKbRE", - "symbol": "S3X", - "name": "S3X", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/VHITS-Full-Stack/S3X_Token/main/logo.png", - "tags": ["NFT-Token", "Swap-Token"] - }, - { - "chainId": 101, - "address": "BmU9dawcCuBPrnxoiH9bW4GSh8wJ3yeQNW5U3uk4CUGa", - "symbol": "ELONZIL", - "name": "ElonZilla", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BmU9dawcCuBPrnxoiH9bW4GSh8wJ3yeQNW5U3uk4CUGa/logo.png" - }, - { - "chainId": 101, - "address": "2Wqm8QGYqg78jkFaSxUKXuoLz6HvWm2m9ApnDMnRESb9", - "symbol": "DAWGZ", - "name": "Degen Dawgz Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/farhan067/degendawgztoken/main/logo.png", - "extensions": { - "twitter": "https://twitter.com/DegenDawgz", - "website": "https://www.degendawgz.com/" - } - }, - { - "chainId": 101, - "address": "79P7Awvs2JUUFPTh17hCvJKwEo7RFexo4ox7HoEuVcVw", - "symbol": "HUNT", - "name": "Hunter Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/arshbhar/HUNT/main/hunt.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9P9DouJzKg71PR45NjxQJcArJkpz9xfyyeDxRwVPkL9a", - "symbol": "PANDM", - "name": "Plowz and Mowz Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9P9DouJzKg71PR45NjxQJcArJkpz9xfyyeDxRwVPkL9a/logo.png" - }, - { - "chainId": 101, - "address": "AzeorE2y9mNQAdkzhjV4KdFEdzRXYbU4o7dpp2uBNqgf", - "symbol": "SUFZ", - "name": "SupraFizz", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/suprafizz/crypto/main/logo.png", - "tags": ["social-token"], - "extensions": { - "twitter": "https://twitter.com/solsunsets", - "website": "https://solsunsets.com/" - } - }, - { - "chainId": 101, - "address": "Dah1ysVPY2zhnR4M3akE3LFpuZCpA4pbHK5hMbjNBKSc", - "symbol": "DHLYDT", - "name": "Dahly Dream Ticket", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Dah1ysVPY2zhnR4M3akE3LFpuZCpA4pbHK5hMbjNBKSc/logo.png" - }, - { - "chainId": 101, - "address": "G9Tbc3bKxsWcWbYydqeqpDPsjFRfD6zMmeoFBJj1bcHG", - "symbol": "SPN", - "name": "Spotter", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/mofrey-max/cryptomint/main/logo.jpg", - "tags": ["social-token"], - "extensions": { - "twitter": "https://twitter.com/Spotter__NFT", - "website": "https://www.spotternft.com/" - } - }, - { - "chainId": 101, - "address": "44d5K8qXur2t2dgiWDpKW4jyBkv5bW4YcbS7zm2vWiJ8", - "symbol": "WILSSLAP", - "name": "Will Smith's Slap", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/44d5K8qXur2t2dgiWDpKW4jyBkv5bW4YcbS7zm2vWiJ8/logo.png" - }, - { - "chainId": 101, - "address": "8NKKpjM5vAKDaNBECWC96fTLc7fSfRabNXR1gp55qbv2", - "symbol": "RUBYSTA", - "name": "Rubysta Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8NKKpjM5vAKDaNBECWC96fTLc7fSfRabNXR1gp55qbv2/logo.png", - "tags": ["RUBYSTA"] - }, - { - "chainId": 101, - "address": "8uKXR3Z3toSXt4i8KMnSWC5ZBwC9sR1caFUUSt3W8inQ", - "symbol": "BRO", - "name": "BRO", - "decimals": 0, - "logoURI": "https://github.com/1618033988749894/future/blob/main/sqgoldenup.png", - "tags": ["utility-token", "social-token", "community-token"] - }, - { - "chainId": 101, - "address": "NqtM2bpU5ZQLhq4HqNZipXQbqxeT3Zx3tqwKkFxprGf", - "symbol": "HMPY", - "name": "HompyPompyCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/aldeot/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8SgWNfuqTxwpRjmJiXr9rhJT5z1LccQZ6JH81S4pZTRy", - "symbol": "OVIT", - "name": "OvI Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ViDesignDE/SolanaOVI/main/logo.png" - }, - { - "chainId": 101, - "address": "Fhfucdo8C4QSSVKiuMJBPr2dRSo35GKKNar14shGDEEe", - "symbol": "PLAY", - "name": "PLAY", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Fhfucdo8C4QSSVKiuMJBPr2dRSo35GKKNar14shGDEEe/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Native in game utility token of the Moveworld" - } - }, - { - "chainId": 101, - "address": "2377XYwns6GBJziPbBBg9EzJWq9TPiunZPiuKB4DdQCR", - "symbol": "HIPPO", - "name": "Happy Hippos", - "decimals": 9, - "logoURI": "https://static.wixstatic.com/media/628d2a_d22ee80f7d574e39b9ae672911d41f7d~mv2.gif", - "tags": ["utility-token", "NFT", "social-token"], - "extensions": { - "discord": "https://discord.gg/happyhippos", - "twitter": "https://twitter.com/happysolhippos", - "website": "https://www.solhappyhippos.com/" - } - }, - { - "chainId": 101, - "address": "5HGSVd9uzLn6CmNb4BLdMSbkWFTEf4ZSh1tLWQ6uEEUA", - "symbol": "FBUTE", - "name": "FBute Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5HGSVd9uzLn6CmNb4BLdMSbkWFTEf4ZSh1tLWQ6uEEUA/logo.png", - "tags": [ - "utility-token", - "game-token", - "crypto-calorie", - "crypto", - "fitness", - "metaverse", - "nft", - "burn-to-earn", - "web3", - "vr" - ], - "extensions": { - "description": "Fbute token has been designed to reward users for their burned calories.", - "discord": "https://discord.gg/B3V2GU5DFX", - "instagram": "https://www.instagram.com/fbutecoin", - "reddit": "https://www.reddit.com/r/FbuteCoin", - "telegram": "https://t.me/fitlich", - "twitter": "https://twitter.com/fbutecoin", - "website": "https://www.fbute.com" - } - }, - { - "chainId": 101, - "address": "6c2yTdTz7N7drPo4Pd6LjkvHk5C2mfTJty4PNZC9CYDF", - "symbol": "MHCNFTZ", - "name": "MHC Token NFTs", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6c2yTdTz7N7drPo4Pd6LjkvHk5C2mfTJty4PNZC9CYDF/logo.png" - }, - { - "chainId": 101, - "address": "3L4dyJkfvsg2tG3yLHJw1PcrVbcrZEi3gxsWQXV9Su51", - "symbol": "SNT", - "name": "Social Network Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3L4dyJkfvsg2tG3yLHJw1PcrVbcrZEi3gxsWQXV9Su51/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "KRTapyUMe5fW92KZkYoXToFtc6Cn7UG6seaKz646oGu", - "symbol": "OOINK", - "name": "OOINK", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/danvernon/tiny-dogz-logo/main/oink.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://t.co/K0TdK7RFgI", - "twitter": "https://twitter.com/kireifarm", - "website": "http://www.kireifarm.com/" - } - }, - { - "chainId": 101, - "address": "653jGgvZGY9Ewazf9eMnvAbTZjXFMUpSrGw13eaCKUaP", - "symbol": "CARTO", - "name": "Carto Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/653jGgvZGY9Ewazf9eMnvAbTZjXFMUpSrGw13eaCKUaP/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://www.deedmaps.com" - } - }, - { - "chainId": 101, - "address": "2a2aGyHFkGqsDeK8T9WHqsF7MYa7wJ9XWhfvKAixehDj", - "symbol": "VAULT", - "name": "THE VAULT-X DAO", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2a2aGyHFkGqsDeK8T9WHqsF7MYa7wJ9XWhfvKAixehDj/logo.png", - "tags": ["NFT", "GOVERNANCE", "ESCROW", "PROTECTION-PROTOCOL"], - "extensions": { - "discord": "https://discord.gg/CaSVfkCbvc", - "twitter": "https://twitter.com/TheVaultDAO", - "website": "https://thevault-x.com/" - } - }, - { - "chainId": 101, - "address": "8BKVqwa9kGFkzFqJRRfCDUtKJNqvg991t85MNdpXYMhx", - "symbol": "LS", - "name": "Leopards Syndicate Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8BKVqwa9kGFkzFqJRRfCDUtKJNqvg991t85MNdpXYMhx/logo.png", - "tags": ["community-token", "social-token", "utility-token"], - "extensions": { - "description": "Native token of the Leopards Syndicate community" - } - }, - { - "chainId": 101, - "address": "8UyvxCoVXoVaftWzp7j9yo2sGL2HnHTFDV4capenyFaf", - "symbol": "BOSA", - "name": "CoinBosa", - "decimals": 10, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8UyvxCoVXoVaftWzp7j9yo2sGL2HnHTFDV4capenyFaf/logo.png" - }, - { - "chainId": 101, - "address": "MHMFaJCu8wWabFghBV759ZaKqhCaqJ1jWpxFzbgmUia", - "symbol": "PT", - "name": "Platinum Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/MHMFaJCu8wWabFghBV759ZaKqhCaqJ1jWpxFzbgmUia/PtToken.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/WtpzxsBTGF", - "twitter": "https://twitter.com/MH_Multiverse", - "website": "https://milehighmultiverse.io" - } - }, - { - "chainId": 101, - "address": "HcGA6XADWN6vrSGWkEDrUh6T3ME17SaJbCyGDD2PvQUT", - "symbol": "CFPK", - "name": "CoffeePark", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/martiolozz/solana-listed-tokens/main/HcGA6XADWN6vrSGWkEDrUh6T3ME17SaJbCyGDD2PvQUT/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/CoffeeParkUSA", - "website": "https://coffeeparkusa.com/" - } - }, - { - "chainId": 103, - "address": "EpEvDzoGY31VqMgCDQUWAA2sGvKibYSjcPChMNJ3rVBj", - "symbol": "MASNASRITKN", - "name": "NASRI TOKEN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/masnasri-a/images/main/logo.jpg", - "extensions": { - "twitter": "https://twitter.com/alienpdev" - } - }, - { - "chainId": 103, - "address": "8nbuqPoxDu4jYU6mZNTDJ44FdVtUPf7JyKPXYNVdF7Av", - "symbol": "ONA", - "name": "ONA", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/IanXBT/Ona/main/logo.png" - }, - { - "chainId": 101, - "address": "8juDZbaGDFVpeqPFnGBhXvnrb1a4jaewKB1hQxzRxVT8", - "symbol": "FGM", - "name": "Following Gods Mission", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Meeker44/Crypto/main/FGMlogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "MoshMwLkVu4iwrPBaWpYkh43qJiSXsnyzNLuMXFv5F4", - "symbol": "MOSHI", - "name": "MOSHI", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/MoshMwLkVu4iwrPBaWpYkh43qJiSXsnyzNLuMXFv5F4/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.com/invite/moshiheads", - "twitter": "https://twitter.com/Moshiheads", - "website": "https://www.moshiheads.com/" - } - }, - { - "chainId": 101, - "address": "xLvawiUDbXmaLdNi71s4Ry8y4ykXJetwZ9LZ124jMpi", - "symbol": "XLVA", - "name": "XLVA", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/xLvawiUDbXmaLdNi71s4Ry8y4ykXJetwZ9LZ124jMpi/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.com/invite/WwVJQdD8vV", - "twitter": "https://twitter.com/GorillaeNFT", - "website": "https://gorillaenft.io/" - } - }, - { - "chainId": 101, - "address": "ANAxByE6G2WjFp7A4NqtWYXb3mgruyzZYg3spfxe6Lbo", - "symbol": "ANA", - "name": "ANA", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ANAxByE6G2WjFp7A4NqtWYXb3mgruyzZYg3spfxe6Lbo/logo.png", - "tags": ["currency"], - "extensions": { - "twitter": "https://twitter.com/nirvana_fi", - "website": "https://nirvana.finance/" - } - }, - { - "chainId": 101, - "address": "FiEndP3oMuxNqjjPLUP2ADHWS2V7fT3PfoB66wePCEce", - "symbol": "REE", - "name": "99Fiends", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FiEndP3oMuxNqjjPLUP2ADHWS2V7fT3PfoB66wePCEce/99.png", - "extensions": { - "twitter": "https://twitter.com/99Fiends" - } - }, - { - "chainId": 101, - "address": "5zY4wBip1kF8C7p8CTESq61vqGeVdSwLqBv3Y3cr9NUe", - "symbol": "Sibon-BV", - "name": "Aandelenregister Sibon BV", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5zY4wBip1kF8C7p8CTESq61vqGeVdSwLqBv3Y3cr9NUe/blockPNG.png", - "tags": ["aandelenregister", "Sibon-bv", "Blockstone"], - "extensions": { - "linkedin": "https://www.linkedin.com/company/blockstone-online/", - "website": "https://blocksto.ne/sibon/" - } - }, - { - "chainId": 101, - "address": "4gC2RFo69c8oGqzqAcrhtQgJCu13EEMWUVtkpVbDjQx2", - "symbol": "RUFF", - "name": "CrazyHuskies Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/DEAN3lr/Crazyhuskies/main/pixil-frame-0%20(4).png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/crazyhuskies" - } - }, - { - "chainId": 101, - "address": "3q8T4e1kvagyJEzUFiJnUSTHZLrAg1ubLfTkGQYXeq1e", - "symbol": "GIV1", - "name": "The Giving Token", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3q8T4e1kvagyJEzUFiJnUSTHZLrAg1ubLfTkGQYXeq1e/logo.svg", - "tags": ["charity"], - "extensions": { - "facebook": "https://facebook.com/givingpool", - "twitter": "https://twitter.com/givingpool", - "website": "http://thegivingpool.io/" - } - }, - { - "chainId": 103, - "address": "3q8T4e1kvagyJEzUFiJnUSTHZLrAg1ubLfTkGQYXeq1e", - "symbol": "GIV1", - "name": "The Giving Token", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3q8T4e1kvagyJEzUFiJnUSTHZLrAg1ubLfTkGQYXeq1e/logo.svg", - "tags": ["charity"], - "extensions": { - "facebook": "https://facebook.com/givingpool", - "twitter": "https://twitter.com/givingpool", - "website": "http://thegivingpool.io/" - } - }, - { - "chainId": 101, - "address": "4gr66MnuAPXPJfMYCxhKVotQVGwDYRKdSUDhtUT1dQGB", - "symbol": "Sibon-BV", - "name": "Aandelen Sibon BV Miep Sibon", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4gr66MnuAPXPJfMYCxhKVotQVGwDYRKdSUDhtUT1dQGB/miepPNG.png", - "tags": ["aandelenregister", "Sibon-bv", "Blockstone"], - "extensions": { - "linkedin": "https://www.linkedin.com/company/blockstone-online/", - "website": "https://blocksto.ne/miep-sibon/" - } - }, - { - "chainId": 101, - "address": "EJ9svufR3WZmokDNno2Bw5ZywUFYXyinopj1V1WXZ8T1", - "symbol": "DMAD", - "name": "Diamond Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/kingalpacas2005/fot/main/gfvgkyujhiju.png", - "tags": ["History"] - }, - { - "chainId": 101, - "address": "9GhsR7rpx2UXKvKpU7Z1QMDimdWqnEdjRrgYrr2VARUn", - "symbol": "GANK", - "name": "Gank Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/qudo-code/assets/master/solana/tokens/GANK/GANK.jpeg", - "tags": ["community-token"], - "extensions": { - "website": "https://www.leagueoflegends.com/en-us/" - } - }, - { - "chainId": 101, - "address": "Fmf7mnbUGg2EM83F7pcyPSTU29QWmvj4nSrbanVPi11J", - "symbol": "NBN", - "name": "Nothing But Net", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/NBNdao/NBN-say-cheese/main/3.png", - "tags": ["utility-token", "community-token", "social-token"] - }, - { - "chainId": 101, - "address": "SkUAuZTNuS12jfCMGbym6zaNnqMKDjbyAZriihf1Ss6", - "symbol": "$SKEL", - "name": "SSS Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SkUAuZTNuS12jfCMGbym6zaNnqMKDjbyAZriihf1Ss6/logo.png" - }, - { - "chainId": 101, - "address": "ENoUQgNxqChUcFKYdgVNEXP65rT4e6Ro6ooFkmj4efvb", - "symbol": "$KULL", - "name": "METAKUL", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ENoUQgNxqChUcFKYdgVNEXP65rT4e6Ro6ooFkmj4efvb/logo.png", - "tags": ["nft", "utility-token"], - "extensions": { - "discord": "https://discord.gg/3MwNU73G7M", - "twitter": "https://twitter.com/metakul_", - "website": "https://www.metakul.in/" - } - }, - { - "chainId": 101, - "address": "B1a2kJpMXbvrrjEah5eipKSQ63x2Wrfa3kcVrR7FS2TZ", - "symbol": "JBPTK", - "name": "JBPTK Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/anshulsoni0112/crypto/main/jbp_logo_800x897.png", - "tags": ["social-token", "city-token", "SmartCity"] - }, - { - "chainId": 101, - "address": "GFQ8vafcdZXyPQpS5dvfbtYT5uiSwFybn2JvC3yJU8Jg", - "symbol": "SOLF", - "name": "Solar Flare", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Dapperdann46/crypto/main/logo3.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "FLLW9PtziXxtin4bvcVKbw1roFPENi5HPADzXdcjGbY1", - "symbol": "FELLOW", - "name": "FELLOW", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FLLW9PtziXxtin4bvcVKbw1roFPENi5HPADzXdcjGbY1/logo.png", - "tags": ["NFT", "utility-token"], - "extensions": { - "discord": "https://discord.gg/fellowapes", - "twitter": "https://twitter.com/FellowApes", - "website": "https://www.fellowapes.com/" - } - }, - { - "chainId": 101, - "address": "8WSwqPtE7BGCiD8ZSnBdJPoc26QkiaBKDf4LhN8DjQuD", - "symbol": "STAD", - "name": "Stadium", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8WSwqPtE7BGCiD8ZSnBdJPoc26QkiaBKDf4LhN8DjQuD/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "HyZ2jJ8qC9SQMqZetbmoT3KbRBp4DWcqiQUPvtDg8B75", - "symbol": "ARTL", - "name": "Aurora TL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HyZ2jJ8qC9SQMqZetbmoT3KbRBp4DWcqiQUPvtDg8B75/logo.svg", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "9Wo5Y22ZxFuxhhMQ5CU7vZaYm4BCByWv9QUMxaeW9eZS", - "symbol": "EBX", - "name": "ebx coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/micagommm/crypto/main/input-onlinepngtools.png", - "tags": ["utility-token", "community-token", "social-token"] - }, - { - "chainId": 103, - "address": "9K8tMEDxk18873U7re7ksz4uYXtz6ECTCSvTcZyQUHLu", - "symbol": "AVBE", - "name": "Aviabee", - "decimals": 0, - "logoURI": "https://nikkoagustino.my.id/aviabee-coin.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://aviabee.com/" - } - }, - { - "chainId": 101, - "address": "GhZJgY56T5BVWfbPTevJA4jidd4piSY5sw5bdowf6ksP", - "symbol": "FUNK", - "name": "funk token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/qudo-code/assets/master/solana/tokens/FUNK/FUNK.jpeg", - "tags": ["community-token"], - "extensions": { - "website": "https://vulfpeck.com/" - } - }, - { - "chainId": 101, - "address": "qRvWKRP2hdbVi8aCw5f9V2JarxtV6W51dVnm1tyXWXk", - "symbol": "TLLWL", - "name": "The Lost Legion WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/qRvWKRP2hdbVi8aCw5f9V2JarxtV6W51dVnm1tyXWXk/Logo.png", - "tags": ["social-token", "community-token"], - "extensions": { - "discord": "http://discord.gg/thelostlegion", - "twitter": "https://twitter.com/LostLegionSol" - } - }, - { - "chainId": 101, - "address": "97j6myGGo1o3r3PW23cbycQXwdm1VUePC4LtL5pzYhnV", - "symbol": "Aandelen-Sibon-BV", - "name": "Chantal Sibon", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/97j6myGGo1o3r3PW23cbycQXwdm1VUePC4LtL5pzYhnV/chantalPNG.png", - "tags": ["Sibon-BV", "aandeelhouder", "Blockstone"], - "extensions": { - "linkedin": "https://www.linkedin.com/company/blockstone-online/", - "website": "https://blocksto.ne/chantal-sibon/" - } - }, - { - "chainId": 101, - "address": "ErEheZw9La1xiSJbPnzYDGdK87ZAASHRNLQF8NK1mmNP", - "symbol": "$HVN", - "name": "Heaven", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ErEheZw9La1xiSJbPnzYDGdK87ZAASHRNLQF8NK1mmNP/logo.png", - "tags": ["NFT", "GAMEFI", "Staking"], - "extensions": { - "description": "Heaven is an SPL token of Heaven Dragons Empire, a premium collection of 1525 Dragons enjoying the clear skies and the royalties from the Empire.", - "discord": "https://discord.gg/3Uw8p5DRdj", - "twitter": "https://twitter.com/HeavenDragonsEP" - } - }, - { - "chainId": 101, - "address": "APJShV3kXDtH6aatqmHCH9Tfodz31cwijj3Et9U8sHSR", - "symbol": "BLP", - "name": "BluePay Coin", - "decimals": 0, - "logoURI": "https://github.com/kitt2022/crypto/blob/main/logo.png", - "tags": ["payment-token"] - }, - { - "chainId": 101, - "address": "HavRcoAaHq7SwLK7qB14TRkJ3eq9QQW1cdYLwHZKaNci", - "symbol": "xGOLD", - "name": "Synthetic GOLD", - "decimals": 8, - "logoURI": "https://synthetify.io/icons/xgold.svg", - "extensions": { - "coingeckoId": "tether-gold", - "twitter": "https://twitter.com/synthetify", - "website": "https://synthetify.io/" - } - }, - { - "chainId": 101, - "address": "7WLoxCzU5tDi2WQsuGTc7GAE7ZPzf2udNBXBfym1quL7", - "symbol": "HSHA", - "name": "HASHAA", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7WLoxCzU5tDi2WQsuGTc7GAE7ZPzf2udNBXBfym1quL7/logo.png" - }, - { - "chainId": 101, - "address": "6wcWAqCEmxQkEK6hPEsyvTpiaFFCENww6gxqMTq8YBHE", - "symbol": "TTST", - "name": "T\u0026T Socialist Party Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/xxmafiaxxx/doobietokens/main/TTSP.png", - "extensions": { - "description": "Trinidad and Tobago Socialist Party Crypto Token", - "instagram": "https://www.instagram.com/socialismtnt/" - } - }, - { - "chainId": 101, - "address": "J2xJmMnsZXgaS6DE3sPkNfSYvnCNzJLvFerMsofrmNg5", - "symbol": "HMTOK", - "name": "Hemati Tokens", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/bahmanyjaan/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6PYPFEs225bMemQb24ZfDfTjm6mHpNczJ81LoSPakKWg", - "symbol": "ROR", - "name": "Wild Lion", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/itssongbird/roar-token/main/logo.png", - "tags": ["utility-token", "community-token", "meme-token"], - "extensions": { - "discord": "https://discord.gg/XGKBEhnJUQ", - "twitter": "https://twitter.com/wildlionclan", - "website": "https://wildlionclan.xyz/" - } - }, - { - "chainId": 101, - "address": "7pz6yNVAC5yioPpsUFZH6jwYqDZj2W5aM6hyFmsxA3Qo", - "symbol": "AARK", - "name": "KADIA COIN", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7pz6yNVAC5yioPpsUFZH6jwYqDZj2W5aM6hyFmsxA3Qo/logo.png", - "tags": ["GAMEFI", "NFT", "Ecosystem"], - "extensions": { - "website": "https://arkadianft.io/" - } - }, - { - "chainId": 101, - "address": "HB7begETKJfYjwfjHbtsLxA1o3n3Tt5KbwQsoDD5bgu8", - "symbol": "sxy-wl", - "name": "Space X Yodas Whitelist Token", - "decimals": 0, - "logoURI": "https://bafkreif2643iapwypek5ifmzwosd5uv3dtognfxy42br6d4c2k6nl3g6ci.ipfs.dweb.link/?ext=png", - "tags": ["SXL", "SXA", "SXY"], - "extensions": { - "description": "Having SXY will give you exclusive access to a secret location on PlanetX in SXA Metaverse!", - "discord": "https://discord.gg/Mfgnj3xBk3", - "twitter": "https://twitter.com/spacexapes" - } - }, - { - "chainId": 101, - "address": "6hQpbdmmX6gXGUkmjJ82UtfFBzyTP3Hiqv1KZMtHWXpv", - "symbol": "GMT", - "name": "Global Micro Tasking", - "decimals": 6, - "logoURI": "https://globalmicrotasking.com/Graphics/GMT_lrg.png", - "extensions": { - "twitter": "https://twitter.com/globalmicrotask", - "website": "https://www.globalmicrotasking.com/gmt" - } - }, - { - "chainId": 101, - "address": "7xhXrYsxkxGKTdMhA3KVo3V88Y1KuAzJ4zMK14rEFmJf", - "symbol": "TATR", - "name": "Tater", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/BretNazarok/Tater/main/tater2.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "MBSPuYeEoq6jJ9BS2qXv3DJ4RvrXCDSxkTAz9fBuKdu", - "symbol": "MBS", - "name": "MBS WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/MBSPuYeEoq6jJ9BS2qXv3DJ4RvrXCDSxkTAz9fBuKdu/logo.png" - }, - { - "chainId": 101, - "address": "FFAfrApKHskMMsnHs8P8WGqDweXCf2AbeMVjz9vbVY4C", - "symbol": "DUWL", - "name": "Dropout WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FFAfrApKHskMMsnHs8P8WGqDweXCf2AbeMVjz9vbVY4C/logo.png", - "tags": ["community-token"] - }, - { - "chainId": 101, - "address": "CizWKoDGhVXbFowZr3pMLxY5rnPr7yXtLNN2dQ2AbEDZ", - "symbol": "ONA", - "name": "ONA", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/IanXBT/Ona/main/logo.png", - "tags": ["utility-token", "social-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/experienceona", - "website": "https://www.whatdoyousee.net/" - } - }, - { - "chainId": 101, - "address": "74XH85tgybENDa4iXzrqFthi643qf9jvqqZ1S97iHqZA", - "symbol": "NEGRO", - "name": "NEGRO", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/akhelbey/negro/main/logo.png", - "tags": ["meme-token"], - "extensions": { - "description": "The Life of a Negro Token", - "discord": "https://discord.gg/fPf4HNkc", - "instagram": "https://www.instagram.com/tloanio/", - "telegram": "https://t.me/tloanio", - "twitter": "https://twitter.com/tloanio", - "website": "https://www.tloan.io", - "whitepaper": "https://tloan.io/wp-content/uploads/2022/04/White_Paper.pdf" - } - }, - { - "chainId": 101, - "address": "Geno53CnJsdiiQsnj5DYxfL9WoLFUEYem78AizQaH8vK", - "symbol": "HABITAT", - "name": "Genesis Genopets Habitats Mint Pass", - "decimals": 9, - "logoURI": "https://imagizer.imageshack.com/img923/1323/MolTEv.jpg", - "tags": ["community-token", "whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/genopets", - "website": "https://mainframe.genopets.me/" - } - }, - { - "chainId": 101, - "address": "FPwHqVqAg9AhUccxUZMHpxdw5YT2SVNa3A67P8CK1aX7", - "symbol": "BOI", - "name": "BoiKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/akhelbey/negro/main/logo.png", - "tags": ["meme-token"], - "extensions": { - "description": "The Coin Of Dat Boi" - } - }, - { - "chainId": 101, - "address": "46BvKPBHA3k32dvYWUtCxAzQrxT1BCNkYw5PGL9cwvVL", - "symbol": "MT", - "name": "Tamim", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/tamimKTH/Tamim-MT-Crypto-Token/main/Screenshot_2022-04-06_at_18.12.02_50.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "Frb3DbBKeja7SwhevYaK7x6zxJRnjH6KF6ciVHBSoNu5", - "symbol": "NCC-WL", - "name": "NCC-GEN1-WL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Frb3DbBKeja7SwhevYaK7x6zxJRnjH6KF6ciVHBSoNu5/NCCWL.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.com/invite/P8hc8npWRt", - "twitter": "https://twitter.com/NeonCloudsNFT", - "website": "https://neonclouds.net/" - } - }, - { - "chainId": 101, - "address": "3GoDU5se7WRLM9vYMLkDEncafZVhi4swyHaqA6bAG9Fd", - "symbol": "KALA", - "name": "Kalauila", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3GoDU5se7WRLM9vYMLkDEncafZVhi4swyHaqA6bAG9Fd/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "http://kalauila.com/" - } - }, - { - "chainId": 101, - "address": "3LWsCFHgxKGZ8Wkjo6J4dAr9QpcTA28N5RLWh4WV68XX", - "symbol": "ORNT", - "name": "Orient", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/tunnelstudio/orient/main/logo.png", - "tags": ["Token", "Exchange", "Freedom"] - }, - { - "chainId": 101, - "address": "DfgYfvfW8cWumofEgRZsAYHhZVDgQbu9z8sGwcKahSho", - "symbol": "CARTEL", - "name": "Cartoon Cartel Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/ArthurPaivaT/token-list/main/assets/mainnet/DfgYfvfW8cWumofEgRZsAYHhZVDgQbu9z8sGwcKahSho/logo.png" - }, - { - "chainId": 101, - "address": "4sUzhG72Y8qHAmUZBM8hiTWjCU5j3pZgkRztJGLRmwGW", - "symbol": "TMA", - "name": "TAIMA", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/Sanidelavega/crypto/main/taima-584.png", - "extensions": { - "twitter": "https://twitter.com/OffTaima", - "website": "https://thetaima.com/" - } - }, - { - "chainId": 101, - "address": "ARcfwUzhzmmc5zqSNY8aSVM2cZBB1jZarDLTemsLhMrY", - "symbol": "BROCCO", - "name": "Broccolini", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ForkInSpace/broccolini/main/broccolini.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9o55qL5tASRmkjysjKX8zefYpRNfC1YDy6g12M84UEHt", - "symbol": "EOR", - "name": "Evolve Our Race", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/nedmars27/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "CBgExXTC91pz36WxoPSbZDs37DECFDeAMTUbzjhtu9AK", - "symbol": "DUC", - "name": "DayUpCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CBgExXTC91pz36WxoPSbZDs37DECFDeAMTUbzjhtu9AK/wdp.png", - "tags": ["wdp-token"] - }, - { - "chainId": 101, - "address": "C65amj9JtuuuuQgxwgEdqRMzmUG4jMM7CY5jjQ5nqtL9", - "symbol": "SACT", - "name": "Smoker Apes Club", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/C65amj9JtuuuuQgxwgEdqRMzmUG4jMM7CY5jjQ5nqtL9/logo.jpg", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "eraDnpnbm1JfpYUdu164qhuLetPMXEQUUPyB8ZRSriK", - "symbol": "$ERA", - "name": "Era", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/eraDnpnbm1JfpYUdu164qhuLetPMXEQUUPyB8ZRSriK/logo.png", - "tags": ["utility-token", "DeFi"], - "extensions": { - "twitter": "https://twitter.com/ageofdefinft", - "website": "https://www.ageofdefi.xyz" - } - }, - { - "chainId": 101, - "address": "4q4DTq8cf1gvrRZkgZQ2WkCgALTbm3H7Poa34qhgwEqo", - "symbol": "SWH", - "name": "SOLWOW HOTEL TOKEN", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/husseinalkanani/assets/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4eFU1TAigNZtv4nyDcAsUTZfUUgK6bTdpFSQEgn2H2u6", - "symbol": "SBOX", - "name": "Silver box whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/JohnnyGoodpick/my-token-repo/main/boxnfttoken.jpg", - "tags": ["utility-token"] - }, - { - "chainId": 103, - "address": "GoombqvaLTaLbN3LHuEkqeLBTmwAScRw8DViERXeEFo4", - "symbol": "GFHWL", - "name": "Goomies WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Neurologist/assets/main/GFHWL_Token.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3esRcn5KEFVkUrW7pz6xV2mmzhrc2ddjYHP1V7FR2jpj", - "symbol": "PITF", - "name": "Pay IT Forward Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3esRcn5KEFVkUrW7pz6xV2mmzhrc2ddjYHP1V7FR2jpj/logo.png", - "tags": ["stablecoin", "social-token"] - }, - { - "chainId": 101, - "address": "DwC83VkKYbqChRtxr14apQtQGYeuoicuvbqCirxyY8kQ", - "symbol": "HBLM", - "name": "Hope Blooms", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/matt-cooper-github/hope-blooms/main/Hope%20Blooms%20Icon.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HNqdtbrRmojH1AcxPwguExzWJ7sCxsZB6skDBZCVRRja", - "symbol": "BZ", - "name": "Test BZ", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3esRcn5KEFVkUrW7pz6xV2mmzhrc2ddjYHP1V7FR2jpj/logo.png", - "tags": ["no-tag", "test-bz"] - }, - { - "chainId": 101, - "address": "FAogUQVmijxSQdTiNAV1rrHcqmPRdZYZeFDPd8NsVj2m", - "symbol": "FELLOWOG", - "name": "FELLOW APES OG TOKEN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FAogUQVmijxSQdTiNAV1rrHcqmPRdZYZeFDPd8NsVj2m/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/fellowapes", - "twitter": "https://twitter.com/FellowApes", - "website": "https://www.fellowapes.com/" - } - }, - { - "chainId": 101, - "address": "FAWLwPYG4BSTkwnZY6VLTYQeFTYyLFGkwWSzjrU9LZZc", - "symbol": "FELLOWWL", - "name": "FELLOW APES WHITELIST TOKEN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FAWLwPYG4BSTkwnZY6VLTYQeFTYyLFGkwWSzjrU9LZZc/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/fellowapes", - "twitter": "https://twitter.com/FellowApes", - "website": "https://www.fellowapes.com/" - } - }, - { - "chainId": 101, - "address": "EUfnMfMhx8ZwdYFuDoSZbEdVjsfiGkHEE3Eb7U9hXzhd", - "symbol": "SLCFE", - "name": "SOUL CAFE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EUfnMfMhx8ZwdYFuDoSZbEdVjsfiGkHEE3Eb7U9hXzhd/logo.png", - "tags": ["meme-token"], - "extensions": { - "twitter": "https://twitter.com/fazleedotsol", - "website": "https://soulcafe.vercel.app/" - } - }, - { - "chainId": 101, - "address": "9yP5r8DPtPj4o9dHjxCVt6PYBusWCRg6yFpXNN59LUmt", - "symbol": "$THUMB", - "name": "THUMB WARS TOKEN", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9yP5r8DPtPj4o9dHjxCVt6PYBusWCRg6yFpXNN59LUmt/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/thumbwars", - "instagram": "https://instagram.com/thumbwarsnft", - "twitter": "https://twitter.com/ThumbWarsNFT", - "website": "https://www.thumbwars.io/" - } - }, - { - "chainId": 101, - "address": "9C2Ht3Cd8uNKsxiLQ27qxv9mnQ1iqMPFW2FUwB9DkxFP", - "symbol": "DUBZ", - "name": "DUBBIEZZ", - "decimals": 9, - "logoURI": "https://user-images.githubusercontent.com/103150881/162079915-03e783ea-6fd3-4572-893e-30a55cd7f05a.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "FDWmQxD9hQruYKtFK8wt6UhKGv6frPvU8EhjKiEPQoyD", - "symbol": "FADE", - "name": "FADE", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/yazidox/fadedfoxlogo/main/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/FadedFoxess", - "website": "https://www.fadedfoxes.com/" - } - }, - { - "chainId": 101, - "address": "58iNDddjnbt1sncnAGDJvAGjKKQt4rQRMo22JHzZRg5L", - "symbol": "BSCN", - "name": "BScoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/58iNDddjnbt1sncnAGDJvAGjKKQt4rQRMo22JHzZRg5L/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "mMUZw4w23XSxvqdJAkYjoBFzadzcutFz3DaKMxwSvVh", - "symbol": "CHIBBBB", - "name": "Chibb token test", - "decimals": 6, - "logoURI": "https://github.com/CoderDenx/images/blob/main/Chibreward.png" - }, - { - "chainId": 101, - "address": "7bGxwtDyr9b5Hp2wk5Usvc1i5GFADXy5XaoM6tZQRnkP", - "symbol": "AAA", - "name": "AAA", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/solalchemist/mymetaplex/master/AAA...png", - "tags": ["utility-token"], - "extensions": { - "medium": "https://alienants.medium.com", - "twitter": "https://twitter.com/alienantsgen1", - "website": "https://alienants.gitbook.io" - } - }, - { - "chainId": 101, - "address": "Ecqbht7deTxwQARtyAi9jMMNxoEf6hBMvBre9FRrpzkU", - "symbol": "T2pT", - "name": "Thai2P Token", - "decimals": 9, - "logoURI": "https://gcdnb.pbrd.co/images/kGrY4Tguwcou.png?o=1", - "tags": ["utility-token", "general-token"] - }, - { - "chainId": 101, - "address": "8dpSeVdxWdfRzrAUTddRY12X1KVutXnYKjneap9RsZZ8", - "symbol": "BZCN", - "name": "BearzCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8dpSeVdxWdfRzrAUTddRY12X1KVutXnYKjneap9RsZZ8/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/Bug_Bearz", - "website": "https://bugbearz.com/" - } - }, - { - "chainId": 101, - "address": "7fRnceu5d3EsCvmJ6TZj78emeqkyG2E9jQRRnFSRhxQ5", - "symbol": "POPE", - "name": "Pope Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/pope-dope/crypto/main/pope_dope.png", - "tags": ["social-token"], - "extensions": { - "twitter": "https://twitter.com/PopeDopeCoin" - } - }, - { - "chainId": 101, - "address": "B6gUBdUVKG1JooSdASD8QMPuphbMpLt5ZwGtrHS8MfoP", - "symbol": "MP2P", - "name": "Molana Finance", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/B6gUBdUVKG1JooSdASD8QMPuphbMpLt5ZwGtrHS8MfoP/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://molana.finance/" - } - }, - { - "chainId": 101, - "address": "r4bCUA5kivHegREZ9CFXPBh7Xr9RDpdG92pR8pM8eCa", - "symbol": "ANTL", - "name": "Anatoly the Cat", - "decimals": 9, - "logoURI": "https://anatolythecat.com/icons/token/token.png", - "tags": ["entertainment", "gaming", "NFT"], - "extensions": { - "discord": "https://discord.gg/58HVXZRPBt", - "github": "https://github.com/anatolythecat", - "twitter": "https://twitter.com/anatoly_the_cat", - "website": "https://anatolythecat.com/" - } - }, - { - "chainId": 101, - "address": "6HUvsVDECatJaAiQ7bY26TUKaDoyekuovJ1j1oyvRYQS", - "symbol": "TMUWL", - "name": "TMU V1 Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6HUvsVDECatJaAiQ7bY26TUKaDoyekuovJ1j1oyvRYQS/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "website": "https://www.themonkeyuniverse.com/" - } - }, - { - "chainId": 101, - "address": "5iEgPvFyVMyiR5iecrWSg7rRfXp2iTiUDzKRne9S9b4X", - "symbol": "CENT", - "name": "PowerStreetPro Token", - "decimals": 6, - "logoURI": "https://github.com/sethdford/powerstreetpro-ui-v1/blob/main/public/assets/icons/cent.svg", - "tags": ["utility-token"], - "extensions": { - "website": "https://github.com/sethdford" - } - }, - { - "chainId": 101, - "address": "8pVgjaB32pij37e7inDMcHEtXt2rqp2pD5ZZaVuecHHH", - "symbol": "APR", - "name": "Aphrodite Coin", - "decimals": 9, - "logoURI": "https://demo365.workdemo.xyz/logo_coin.png", - "tags": ["Metaverse-Token"] - }, - { - "chainId": 101, - "address": "FJh9YCSLKmkVW2rSg9BGDdNQviFGQqxgoDEtbphyQWBR", - "symbol": "MOX", - "name": "MonsterX", - "decimals": 9, - "logoURI": "https://monsterxblob.blob.core.windows.net/moxtokeninfo/Tokenlogos.png", - "extensions": { - "twitter": "https://twitter.com/MonsterX_NFT", - "website": "https://www.monsterx.io/" - } - }, - { - "chainId": 103, - "address": "ADDrELSQ9wx78xaNhqgZA3uDhmz4fkV4K6TChUVecpW9", - "symbol": "CIA", - "name": "Savvy Investors Club Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ADDrELSQ9wx78xaNhqgZA3uDhmz4fkV4K6TChUVecpW9/logocia.png", - "extensions": { - "facebook": "https://www.facebook.com/clubdesinvestisseursavises" - } - }, - { - "chainId": 101, - "address": "EcyhULAJyT3Ng6J5uxM6zKMiLwUThTp2Lmn5MnKapCNs", - "symbol": "TCMK", - "name": "TechMagik Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/stavrozo/TechMagik-crypto/main/tmlogo.png", - "tags": ["social-token", "tech-token", "community-token", "payment-token"] - }, - { - "chainId": 101, - "address": "4k9g62bc6iMRCb1hGaW2v1YjQfMci7hqbSVWKoaePxhF", - "symbol": "VOXM", - "name": "VOXM", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/voxelmonkey/VOX/main/VOX.png", - "tags": ["utility-token", "general-token"] - }, - { - "chainId": 101, - "address": "7j9nBTTLrQAe1p9Sfz9y323PaGtQWexw3aeN7RnU6tmy", - "symbol": "SER", - "name": "SolSer", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/Persnickety888/SolSer/main/%24SER.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "chin1S2RorBVLj1RCovBY4ascM5KZ7wtBGrL1RzEK7Z", - "symbol": "CIHX", - "name": "Chinmon", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/umberto12345/chin-slp-token/main/log.png" - }, - { - "chainId": 101, - "address": "9gHwP8wZz5v2M8yN1HUm3fahF8hopciiDJgTRzkEGqjY", - "symbol": "ATC", - "name": "AtlasCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9gHwP8wZz5v2M8yN1HUm3fahF8hopciiDJgTRzkEGqjY/logo.png" - }, - { - "chainId": 103, - "address": "HHZVdeyMbjvT9eGBsZtzb16TXQ5wLCVhWzWPBzcWmovC", - "symbol": "NEA", - "name": "NEA MDE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/arendon7/NEA-COIN/main/logo.jpeg" - }, - { - "chainId": 101, - "address": "5ngWokdDMmvgYJi1nm9vU7Wb2cvT5yStiwo5a1qZbt6S", - "symbol": "TOBS", - "name": "Monstertobs", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/monstertobs/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CJ5U6wPmjxFUyTJpUTS7Rt1UqhTmSVRMvmJ8WD4nndXW", - "symbol": "GLXY", - "name": "Astrals GLXY", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CJ5U6wPmjxFUyTJpUTS7Rt1UqhTmSVRMvmJ8WD4nndXW/logo.png", - "tags": ["NFT-token"], - "extensions": { - "discord": "https://discord.com/invite/astralsnft", - "twitter": "https://twitter.com/Astrals_NFT", - "website": "https://astralsnft.io" - } - }, - { - "chainId": 101, - "address": "EWhrR6eMQNS9gFkCocG9PfgNXXqyDjK5VkQVMsHnmYR7", - "symbol": "TEK", - "name": "tequila", - "decimals": 9, - "logoURI": "https://github.com/cryptoguy55a/solana-staking-contract/blob/main/logo.png" - }, - { - "chainId": 101, - "address": "DKzkt1r6QctnQFx5hMnGomcMimXqVfAyBhMcoKHcBiNK", - "symbol": "ROUNDIE", - "name": "ROUNDIE Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DKzkt1r6QctnQFx5hMnGomcMimXqVfAyBhMcoKHcBiNK/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://www.theroundies.co" - } - }, - { - "chainId": 101, - "address": "3EdaYamSyMNNGbEPEtCdZM9CrsKzP8i3RoYJ7KKRQ4CM", - "symbol": "FRIDA", - "name": "Frida Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/08b4b789cd2061eb439bdc1c3cdeed5590b773c0/assets/mainnet/3EdaYamSyMNNGbEPEtCdZM9CrsKzP8i3RoYJ7KKRQ4CM/logo.png" - }, - { - "chainId": 101, - "address": "Ch4SJ2YwHU7nXC1rv3eja7rP7ZuLM9x1EHGt53RETHnd", - "symbol": "CHRMS", - "name": "Clubhouse Dao", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/hallelujahsunshine/assets/main/clubhouse-music-school-icon-black.png" - }, - { - "chainId": 101, - "address": "2hyRbCMr8ZuYN99MnY1PKRCk55stWw1zYHnChTSjFM44", - "symbol": "VERB", - "name": "Verb", - "decimals": 2, - "logoURI": "https://i.ibb.co/H7BB1VL/VERB-Logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "86aFUzjnSNr3DHTYBBFWoogNfvBCfWkSVYWtjJAWGcCH", - "symbol": "YAM", - "name": "YAM Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/metasal1/token-list/1663005b372d43fb1b257bd3064d612fccb6f56c/assets/mainnet/86aFUzjnSNr3DHTYBBFWoogNfvBCfWkSVYWtjJAWGcCH/logo.png", - "tags": ["yam-token"], - "extensions": { - "website": "https://www.yamdao.com" - } - }, - { - "chainId": 101, - "address": "AFtvjpKky4TkErQS6SwMXrX7Mwt41etbfMVM2pampqmy", - "symbol": "DEAD", - "name": "deadWonder", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/RobertVarney/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EFULmcHqDaskCWzTi81eXyBu9oJtuE3BCnhkM81xq4C2", - "symbol": "HOODIE", - "name": "HOODIE BOYS", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/CryptArt-LLC/444-hood/01bcd4ac4cdc72d3e31173d64dfe68b9a4b6176d/logo.png", - "tags": ["community-token", "444-dao-token", "444-hoodie-boys"], - "extensions": { - "discord": "https://discord.gg/D8bz4mQnNp", - "twitter": "https://twitter.com/444hoodieboys", - "website": "https://www.444dao.org/" - } - }, - { - "chainId": 101, - "address": "4Q3uvtM4Y87dYgYuLkgwLGnuHM7zevgYBm7rD4jB5wWy", - "symbol": "CHCPS", - "name": "Chibben Chips token", - "decimals": 6, - "logoURI": "https://github.com/CoderDenx/images/blob/main/Chibb%20N%20Chips.png?raw=true" - }, - { - "chainId": 101, - "address": "23K7zGTssP5sDuaVYE9Byits82whseiAHajj5ycJZTFV", - "symbol": "KWKN", - "name": "KawaiKoin", - "decimals": 0, - "logoURI": "https://github.com/AsTheSeaRises/crypto-stuff/blob/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3pidV843JWztwbRsU183M7GmW6U33o7aDbrSX9LnfVFu", - "symbol": "ONLY", - "name": "OnlyFans Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Onlyfanscoin/only/main/Only2%20%202.png", - "extensions": { - "twitter": "https://twitter.com/onlyfans_coin", - "website": "https://onlyfans.com" - } - }, - { - "chainId": 101, - "address": "AwgoZr72bzfwkZmcCy7nAHskpn3Ha1jAjE67nFP9HMEk", - "symbol": "BPS", - "name": "BluePay SHARES", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/blueshares/tokenshare/main/logo.png", - "tags": ["shares-token"] - }, - { - "chainId": 101, - "address": "DeciAAiFDriVGkpqAgGDxpBC5SA4cBPrBWUj4WuevgTR", - "symbol": "DD", - "name": "Decimus Dynamic Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DeciAAiFDriVGkpqAgGDxpBC5SA4cBPrBWUj4WuevgTR/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/decimusdynamic" - } - }, - { - "chainId": 101, - "address": "iVMyPF9DBoPxxfhGA58rfYt9HU1JHw56S7YdryZEx96", - "symbol": "IVM", - "name": "Investmor Coin", - "decimals": 10, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/iVMyPF9DBoPxxfhGA58rfYt9HU1JHw56S7YdryZEx96/logo.png", - "extensions": { - "twitter": "https://twitter.com/investmorcoin" - } - }, - { - "chainId": 101, - "address": "2UePEeCM1Zqt9xajqCaD2ZmrzKGB3d88VXfu4hiZw8is", - "symbol": "CKWL", - "name": "Cool Kitties WL token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2UePEeCM1Zqt9xajqCaD2ZmrzKGB3d88VXfu4hiZw8is/icon.png" - }, - { - "chainId": 101, - "address": "2dfUDFaYGy7Kkp2TiUXHsY9myq2Ws9hjSyb5pPDRVEzY", - "symbol": "MTKN", - "name": "Mighty Token", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2dfUDFaYGy7Kkp2TiUXHsY9myq2Ws9hjSyb5pPDRVEzY/logo.png", - "tags": ["Gaming", "NFT"], - "extensions": { - "discord": "https://discord.gg/mightyminions", - "twitter": "https://twitter.com/mightyminions", - "website": "https://www.mightyminions.io/" - } - }, - { - "chainId": 101, - "address": "GZc3D6VCj3AMUed2S8gP7QBvuWPNNB2asSwaXch7ESwJ", - "symbol": "KOMR", - "name": "KOMRADZ OFFICIAL WL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GZc3D6VCj3AMUed2S8gP7QBvuWPNNB2asSwaXch7ESwJ/logo.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "EB1dxxDbHSPxpjo5sUmszpcNk64gdAoxdttSq7fVBgGT", - "symbol": "$RDP", - "name": "RareDumpies Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/savage0908/RareDumpies-Token/RareDumpies-Token/XpRQAp06_400x400.jpg", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "EvLyT6PC2UyRUZyhMjvZy1eey6E5jrYqq8fqqvSxD12K", - "symbol": "UHU", - "name": "Uhu Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EvLyT6PC2UyRUZyhMjvZy1eey6E5jrYqq8fqqvSxD12K/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://uhutoken.com/" - } - }, - { - "chainId": 101, - "address": "EagLEdVKrm6QRfBQzZZjNBY9k3RjGXRhENL77QP7SnXj", - "symbol": "EAGLEZ-TOKEN", - "name": "EAGLEZ WL TOKEN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EagLEdVKrm6QRfBQzZZjNBY9k3RjGXRhENL77QP7SnXj/logo.png", - "tags": ["Mint-token"] - }, - { - "chainId": 101, - "address": "Deci6tiV9g8u2TJCpJcNqsgWFLr1oYooJwejjDRHszQ4", - "symbol": "DD", - "name": "DynamicDecimus WHITELIST TOKEN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Deci6tiV9g8u2TJCpJcNqsgWFLr1oYooJwejjDRHszQ4/logo.png", - "tags": ["Mint-token"] - }, - { - "chainId": 101, - "address": "HFE5CwhDzXLYrnfH41712be8Pz498v2yCjyR91jZEqpe", - "symbol": "HUNKZ", - "name": "HunkCoinz", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/HunkCoinz/Logo/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6Csc8UDJkVQyuEXN6LpRAv8yZ5NTmEAdEkwrkyNALJo", - "symbol": "DYLC", - "name": "DylCo", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/YHWH69/tokens/main/DylCo_logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9o8j6rM2cUSwq6voyYuouJwyx73Hm5dTS5YQPGQ63Fq2", - "symbol": "NTBR", - "name": "NetworkBear Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/NetworkBear/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9372UehjSkhjSrBfujbivdvK8AFTzG96cvCezznLuZ5G", - "symbol": "BBFY", - "name": "Boss Baby Family Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/atenidegbeolanrewaju/BB_/main/BBFY.png" - }, - { - "chainId": 101, - "address": "8SVTTQqcfSYiCzZTM3BgPP6XEwzU2j1NmxT5af8g5DFS", - "symbol": "FALCO", - "name": "FALCO Token", - "decimals": 9, - "logoURI": "https://gateway.pinata.cloud/ipfs/QmZMjHJrrQ3PWaUPhkcwRi8uYhcBn6r16EpYEWQBaWD9eX", - "tags": ["community-token"] - }, - { - "chainId": 101, - "address": "FLY4TDtDAW8pZLmEDMs4UEtchDwNAZrko79xEY6eSpLJ", - "symbol": "FLY4", - "name": "EagleZ FlyList Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FLY4TDtDAW8pZLmEDMs4UEtchDwNAZrko79xEY6eSpLJ/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/EaglezSOL" - } - }, - { - "chainId": 101, - "address": "DjEk3aEPX3388FtM2oVpzQQqi6N1efQ21vePpqtHwoTB", - "symbol": "ITG", - "name": "ITGnomies", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/kaczordd/crypto/main/icon.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "MatA8b1QRcrDSfNtqnPzkbmtq8RmKTw8iZydbMtxV6X", - "symbol": "CHTKT", - "name": "Chosen Ticket", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/MatA8b1QRcrDSfNtqnPzkbmtq8RmKTw8iZydbMtxV6X/logo.png", - "extensions": { - "twitter": "https://twitter.com/matukilabs", - "website": "https://www.matukilabs.io" - } - }, - { - "chainId": 101, - "address": "95bzgMCtKw2dwaWufV9iZyu64DQo1eqw6QWnFMUSnsuF", - "symbol": "LADA", - "name": "LADA Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/95bzgMCtKw2dwaWufV9iZyu64DQo1eqw6QWnFMUSnsuF/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/LadderCaster", - "website": "https://laddercaster.com/" - } - }, - { - "chainId": 101, - "address": "3iTWURXxYJtEY5WHTDmA8qEbiDy6KRYU2DEdnrtrgGTS", - "symbol": "SOLAD", - "name": "SOLAD AIRDROP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3iTWURXxYJtEY5WHTDmA8qEbiDy6KRYU2DEdnrtrgGTS/logo.png" - }, - { - "chainId": 101, - "address": "okayHk8cku6TyeRP8F1rfZramrJ93Y3wbWpqovacnkS", - "symbol": "OKAYWL", - "name": "Okay Bears Whitelist Token", - "decimals": 9, - "logoURI": "https://imagizer.imageshack.com/img922/6216/HLXnVT.png", - "tags": ["community-token", "whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/okaybears", - "website": "https://www.okaybears.com/" - } - }, - { - "chainId": 101, - "address": "A4vmCTGepYqFT5CtkFgkjtsj7DUUBNAkkMB9G8q6dzKJ", - "symbol": "SSB", - "name": "SolanaSuccubus", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/A4vmCTGepYqFT5CtkFgkjtsj7DUUBNAkkMB9G8q6dzKJ/logo.png", - "tags": ["nft-token"], - "extensions": { - "discord": "https://discord.gg/35WUZgCaXM", - "twitter": "https://twitter.com/SolanaSuccubus", - "website": "https://solanasuccubus.io/" - } - }, - { - "chainId": 101, - "address": "5GSC5AqJQPhD3MmhNeYerGBzaJncH7MdFJGme8wTML9g", - "symbol": "Aandelen", - "name": "Jansen en Dochters BV - Monique Jansen", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5GSC5AqJQPhD3MmhNeYerGBzaJncH7MdFJGme8wTML9g/blockPNG.png", - "tags": ["Jansen-en-Dochters", "aandeelhouder", "Blockstone"], - "extensions": { - "linkedin": "https://www.linkedin.com/company/blockstone-online/", - "website": "https://blocksto.ne/jansen-en-dochters-bv/" - } - }, - { - "chainId": 101, - "address": "4jSmgM6oatm6Ci3iEh5ksdJstSyvCV2FDJm7T8UGLszy", - "symbol": "CAYC", - "name": "Cyber Ape Yacht Club", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4jSmgM6oatm6Ci3iEh5ksdJstSyvCV2FDJm7T8UGLszy/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://cayc.io/" - } - }, - { - "chainId": 101, - "address": "DfB1NY8Ftv3rDTnyffSVj5sr3ycFjLoUeNBEkTDvPQYn", - "symbol": "ERRA", - "name": "Erra", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DfB1NY8Ftv3rDTnyffSVj5sr3ycFjLoUeNBEkTDvPQYn/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/LadderCaster", - "website": "https://laddercaster.com/" - } - }, - { - "chainId": 101, - "address": "BBUiBwwG2pLZFboPpbvqVXACs4r3HrNBaC73zzXspfYW", - "symbol": "FIYA", - "name": "Fiya", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BBUiBwwG2pLZFboPpbvqVXACs4r3HrNBaC73zzXspfYW/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/LadderCaster", - "website": "https://laddercaster.com/" - } - }, - { - "chainId": 101, - "address": "E5qNsCX91wqnLQQ25yEHTo3eujWGtqLe9daJvejRxikc", - "symbol": "WADA", - "name": "Wada", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/E5qNsCX91wqnLQQ25yEHTo3eujWGtqLe9daJvejRxikc/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/LadderCaster", - "website": "https://laddercaster.com/" - } - }, - { - "chainId": 101, - "address": "93fFBeiW8Uy9X8evy9QTaxepheJ5aMeaMPNXgcfYPY4p", - "symbol": "Aandelen", - "name": "Jansen en Dochters BV - Sophie Jansen", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/93fFBeiW8Uy9X8evy9QTaxepheJ5aMeaMPNXgcfYPY4p/blockPNG.png", - "tags": ["Jansen-en-Dochters", "aandeelhouder", "Blockstone"], - "extensions": { - "linkedin": "https://www.linkedin.com/company/blockstone-online/", - "website": "https://blocksto.ne/jansen-en-dochters/" - } - }, - { - "chainId": 101, - "address": "6Xz4ssMfNLAymMCDHfJonJUYHQhXZFtCdpmbz96o7JoF", - "symbol": "USAA", - "name": "UncleSamToken", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6Xz4ssMfNLAymMCDHfJonJUYHQhXZFtCdpmbz96o7JoF/logo.png" - }, - { - "chainId": 101, - "address": "DigVMJmcV9pozuQBkdYkzGvW293DXbFVMVAWLz1Fhmkd", - "symbol": "RugWL", - "name": "Rug Pass WL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DigVMJmcV9pozuQBkdYkzGvW293DXbFVMVAWLz1Fhmkd/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "discord": "https://discord.gg/rugcity", - "twitter": "https://twitter.com/probrug" - } - }, - { - "chainId": 101, - "address": "HhEpBeVBkWiurvrUtHYZnFLoLU7pbmy1MBQXuhUMvrtf", - "symbol": "BAG", - "name": "Baked Alien Gang", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/EduardoNicoleit/token-list/main/assets/mainnet/HhEpBeVBkWiurvrUtHYZnFLoLU7pbmy1MBQXuhUMvrtf/logo.png" - }, - { - "chainId": 101, - "address": "A6n5SnM2G8ZsTdpd85bUn5byvFAcEfqYHcMvQNNZ8tTR", - "symbol": "WFCWT", - "name": "Wulfs Frens Club Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/A6n5SnM2G8ZsTdpd85bUn5byvFAcEfqYHcMvQNNZ8tTR/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/wulffrensclub", - "twitter": "https://twitter.com/WulfFrensClub", - "website": "https://wulffrensclub.xyz" - } - }, - { - "chainId": 101, - "address": "MkM7taZ6sV5UenNX1HcKFJifr4iN4vWwSevdXecrzBj", - "symbol": "TSSWL", - "name": "TSS WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/MkM7taZ6sV5UenNX1HcKFJifr4iN4vWwSevdXecrzBj/logo512.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "3PwanYatzwjyvrJ9LtysRPo7JhT2h1UvuN8P8v3EePLS", - "symbol": "LMBD", - "name": "LambdaCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/LambdaResearchFacility/crypto/main/lambda.jpg", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "E36LX4XqYmuEzrWL9HH7oXh4iQ1G8GiRc4bvNzV6ZviN", - "symbol": "2FUCKS", - "name": "2FUCKS", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/E36LX4XqYmuEzrWL9HH7oXh4iQ1G8GiRc4bvNzV6ZviN/logo.png", - "tags": ["community-token", "social-token"], - "extensions": { - "description": "GIVE 2FUCKS", - "twitter": "https://twitter.com/OzDive" - } - }, - { - "chainId": 101, - "address": "NRVwhjBQiUPYtfDT5zRBVJajzFQHaBUNtC7SNVvqRFa", - "symbol": "NIRV", - "name": "NIRV", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/NRVwhjBQiUPYtfDT5zRBVJajzFQHaBUNtC7SNVvqRFa/NIRV.png", - "tags": ["currency"], - "extensions": { - "twitter": "https://twitter.com/nirvana_fi", - "website": "https://nirvana.finance/" - } - }, - { - "chainId": 101, - "address": "Er3mhjpxcPhV4kvGS3a9DwQXT3w6kvoT9tjiC8ZmdYmr", - "symbol": "BEAM", - "name": "BEAMES", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Er3mhjpxcPhV4kvGS3a9DwQXT3w6kvoT9tjiC8ZmdYmr/logo.png", - "tags": ["community-token", "social-token"], - "extensions": { - "description": "THE CLAN", - "twitter": "https://twitter.com/OzDive" - } - }, - { - "chainId": 101, - "address": "CReAmEhV7CCMaQ8YCEc23SAY2ARXnXZQX7M2AkR5LRqw", - "symbol": "CREAM", - "name": "Creamy Friend WL token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Bitcoinblack482/logo/main/creamy.png", - "tags": ["NFT", "dao", "utility-token"], - "extensions": { - "discord": "http://discord.gg/creamyfriends", - "twitter": "https://twitter.com/CreamyFriends" - } - }, - { - "chainId": 101, - "address": "Gris8EnVQCXV7M5tDVYhb76GG8vcvPyzfKjctejrmFYh", - "symbol": "DIGIT", - "name": "DigIT-Coin", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/Ralecc/CryptoCoin/main/DigIT-Coin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BTy9Ahn61nTz9VhFGStc4CaMkQD5x6v6GYWLWuVxZcSv", - "symbol": "NPAY", - "name": "NUBLOPAY", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/nublopayteam/noblopay/main/assets/logo/logo.png", - "tags": ["utility-token", "dapp", "payments", "merchants"], - "extensions": { - "description": "NUBLOPAY", - "twitter": "https://twitter.com/nublopay", - "website": "https://nublopay.com" - } - }, - { - "chainId": 101, - "address": "6oyeKEoxqU8KWa6EquV3gAJuYZuFKDj7sJas2K6Tm9Mo", - "symbol": "MAS", - "name": "PocketMas", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6oyeKEoxqU8KWa6EquV3gAJuYZuFKDj7sJas2K6Tm9Mo/logo.png", - "tags": ["social-token"], - "extensions": { - "description": "PocketMas Pioneer", - "website": "https://pocketmasa.com/" - } - }, - { - "chainId": 101, - "address": "Wurx1CQEpuo8ExhWaMYrz9KErXBrKAdz64ZoRKSjuXy", - "symbol": "WUR", - "name": "Wrapped WUR", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Wurx1CQEpuo8ExhWaMYrz9KErXBrKAdz64ZoRKSjuXy/wurtulla.png", - "tags": ["wrapped", "stablecoin"], - "extensions": { - "description": "Wrapped Wurtulla Coin", - "discord": "https://discord.gg/wurtulla", - "github": "https://github.com/wurtulla", - "reddit": "https://www.reddit.com/r/wurtulla", - "serumV3Usdc": "AMqKRL1M3rh83CZgvQquELCoZRasfr58ZiQVAQXZEerM", - "twitter": "https://twitter.com/wurtulla", - "website": "https://wurtulla.com/" - } - }, - { - "chainId": 101, - "address": "3HDyDDvRTmSMa5QxhUod5gEgVKmTujncwKomxrWxSb8j", - "symbol": "GFT", - "name": "GFT Goofiez Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3HDyDDvRTmSMa5QxhUod5gEgVKmTujncwKomxrWxSb8j/logo.png", - "tags": ["GFT", "Goofiez"], - "extensions": { - "website": "https://Goofiez.com" - } - }, - { - "chainId": 101, - "address": "H8LrRvCNaB5rS164NAQWapLAuMvxK1h7Y32Lhc9aXpES", - "symbol": "LTBX", - "name": "Prestige Free Mint", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/W00BACKBABY/LTBX/main/YD5LgKoo.jpg", - "tags": ["NFT", "dao", "utility-token"], - "extensions": { - "discord": "https://discord.gg/kTxhrkBmmQ", - "twitter": "https://twitter.com/GigaDAOio" - } - }, - { - "chainId": 101, - "address": "5rJ5WA5SfRJeT5ntoeCzCeqsk2gkfqY3tkNLdpyPrcnz", - "symbol": "BSTCN", - "name": "BoostCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/abskurz/crypto/main/LastFinalLogo1.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FxVJbQe6ngLfydDWCcGMJGpxrkkFBvHbyUVsB1ikSNjG", - "symbol": "KOAL", - "name": "SluggishKoalas Koal", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Cerebrum-Tech/koala/main/logo.png", - "tags": ["utility-token", "community-token", "social-token"], - "extensions": { - "description": "Token that is used to implement Sluggish Koalas Nft Project's utilities", - "discord": "https://discord.gg/SHFyD7wXxU", - "instagram": "https://instagram.com/sluggishkoalas", - "twitter": "https://twitter.com/SluggishKoalas", - "website": "https://www.sluggishkoalas.com/", - "whitepaper": "https://sluggish-koalas.gitbook.io/sluggish-koalas-whitepaper/" - } - }, - { - "chainId": 101, - "address": "KUSHs1xRrv7U3jMUd8g3LjrEc4ZhUx9EBm7Yc6cgCsL", - "symbol": "$KUSH", - "name": "KUSH COIN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/KUSHs1xRrv7U3jMUd8g3LjrEc4ZhUx9EBm7Yc6cgCsL/logo.png" - }, - { - "chainId": 101, - "address": "Fg8u9R56EStQVshdN5K36w9tmdTjQiS9bGzigE5rNKzs", - "symbol": "BIKE", - "name": "DUCATI Monster", - "decimals": 9, - "logoURI": "https://imgur.com/x7n7mko.png" - }, - { - "chainId": 101, - "address": "buMnhMd5xSyXBssTQo15jouu8VhuEZJCfbtBUZgRcuW", - "symbol": "NNI", - "name": "NeoNomad", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/buMnhMd5xSyXBssTQo15jouu8VhuEZJCfbtBUZgRcuW/logo.png", - "tags": ["utility-token", "nft-token"], - "extensions": { - "discord": "https://discord.com/invite/Fj77EYcTNH", - "twitter": "https://twitter.com/NeoNomadFinance", - "website": "https://app.neonomad.exchange" - } - }, - { - "chainId": 101, - "address": "7ke3VBsNshCTH9q8uDHcbMjMskWrZrbDGW4ZCZy9aMPK", - "symbol": "RKIKE", - "name": "Rogne Kik Etc", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7ke3VBsNshCTH9q8uDHcbMjMskWrZrbDGW4ZCZy9aMPK/logo.png", - "tags": ["RKIKE", "Rogne", "Kik", "Rir"] - }, - { - "chainId": 101, - "address": "4dnqPbYSCRSwe2hsAxfPwfRhsMkkYsU2GF2DgNRvqFaw", - "symbol": "Aandelen", - "name": "Jansen en Dochters BV - Brigitte Jansen", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4dnqPbYSCRSwe2hsAxfPwfRhsMkkYsU2GF2DgNRvqFaw/blockPNG.png", - "tags": ["Jansen-en-Dochters", "aandeelhouder", "Blockstone"], - "extensions": { - "linkedin": "https://www.linkedin.com/company/blockstone-online/", - "website": "https://blocksto.ne/jansen-en-dochters-bv/" - } - }, - { - "chainId": 101, - "address": "unknXbA1bDg39nuBqVgMNZ5qSZa8pw5HditgkPe5eFA", - "symbol": "UNKN", - "name": "UNKN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/unknXbA1bDg39nuBqVgMNZ5qSZa8pw5HditgkPe5eFA/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.com/invite/celestialz", - "twitter": "https://twitter.com/CELESTIALZ777", - "website": "https://www.celestialznft.io/" - } - }, - { - "chainId": 101, - "address": "5emjcEHtUJrABN23tE9sRY9YEj8rjXXPgkoD4dbKecuD", - "symbol": "YOAV", - "name": "Yoav Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5emjcEHtUJrABN23tE9sRY9YEj8rjXXPgkoD4dbKecuD/logo.png" - }, - { - "chainId": 101, - "address": "2g6H7aqMxsETTUoC5acFYMNX2Zk3y4ahQHzvU5spKavC", - "symbol": "VOLTAGE", - "name": "Voltage Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2g6H7aqMxsETTUoC5acFYMNX2Zk3y4ahQHzvU5spKavC/logo.jpg", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/hvworldsnft", - "twitter": "https://twitter.com/hvWorldsNFT_", - "website": "https://www.highvoltageworlds.io/" - } - }, - { - "chainId": 101, - "address": "8X4oCMuknAPTV3ofBo7676HfcnGGHocJXSTCgMb97ZzK", - "symbol": "CIPH", - "name": "2BitCipher", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8X4oCMuknAPTV3ofBo7676HfcnGGHocJXSTCgMb97ZzK/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7CgtGTKtHTCrWpc5XJM8n8bVrRoA1LXEZrv8JiGWLPaJ", - "symbol": "DSRPT", - "name": "Disruptor coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ajithkotian/disruptorcoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HmNpBohAJ4Zu5dLuAqnkyhe78ekbG2534ZLQqA9fRqxS", - "symbol": "kcCSOL", - "name": "Katana CSOL Covered Call Vault Share", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Katana-Labs/assets/master/token-list/HmNpBohAJ4Zu5dLuAqnkyhe78ekbG2534ZLQqA9fRqxS/logo.png", - "tags": ["Katana", "share-token", "utility-token"], - "extensions": { - "discord": "https://discord.gg/katana-hq", - "github": "https://github.com/Katana-Labs", - "twitter": "https://twitter.com/Katana_HQ", - "website": "https://app.katana.so" - } - }, - { - "chainId": 101, - "address": "C1v7cf8LCkkFfVycZVnSDZRNuHUUvZqCTZpKg2Cw6G35", - "symbol": "kcWINJ", - "name": "Katana WINJ Covered Call Vault Share", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/Katana-Labs/assets/master/token-list/C1v7cf8LCkkFfVycZVnSDZRNuHUUvZqCTZpKg2Cw6G35/logo.png", - "tags": ["Katana", "share-token", "utility-token"], - "extensions": { - "discord": "https://discord.gg/katana-hq", - "github": "https://github.com/Katana-Labs", - "twitter": "https://twitter.com/Katana_HQ", - "website": "https://app.katana.so" - } - }, - { - "chainId": 101, - "address": "3bQnc6nZoS2ZpNfCWDezhResXcWV5Lm41wn4xtRtWyG1", - "symbol": "kpETH", - "name": "Katana USDC-ETH Put-Selling Vault Share", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/Katana-Labs/assets/master/token-list/3bQnc6nZoS2ZpNfCWDezhResXcWV5Lm41wn4xtRtWyG1/logo.png", - "tags": ["Katana", "share-token", "utility-token"], - "extensions": { - "discord": "https://discord.gg/katana-hq", - "github": "https://github.com/Katana-Labs", - "twitter": "https://twitter.com/Katana_HQ", - "website": "https://app.katana.so" - } - }, - { - "chainId": 101, - "address": "7JLmQij2A159HjKXrSDTQYUik83v2qc8VfsNDpLBuwRY", - "symbol": "kpBTC", - "name": "Katana USDC-BTC Put-Selling Vault Share", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/Katana-Labs/assets/master/token-list/7JLmQij2A159HjKXrSDTQYUik83v2qc8VfsNDpLBuwRY/logo.png", - "tags": ["Katana", "share-token", "utility-token"], - "extensions": { - "discord": "https://discord.gg/katana-hq", - "github": "https://github.com/Katana-Labs", - "twitter": "https://twitter.com/Katana_HQ", - "website": "https://app.katana.so" - } - }, - { - "chainId": 101, - "address": "GMGNQYumwEbwKKzEeoEuBKhHRvdepAc8cpVzavM3ptQY", - "symbol": "kpSOL", - "name": "Katana USDC-SOL Put-Selling Vault Share", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/Katana-Labs/assets/master/token-list/GMGNQYumwEbwKKzEeoEuBKhHRvdepAc8cpVzavM3ptQY/logo.png", - "tags": ["Katana", "share-token", "utility-token"], - "extensions": { - "discord": "https://discord.gg/katana-hq", - "github": "https://github.com/Katana-Labs", - "twitter": "https://twitter.com/Katana_HQ", - "website": "https://app.katana.so" - } - }, - { - "chainId": 101, - "address": "GwGk3tXBJDrc7aWJ1XW1ttwboRR359RbprAXGmGDxwSK", - "symbol": "SWAMP", - "name": "SWAMP", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/DEAN3lr/Skater-Gators/main/Skater%20gator%20image.png", - "tags": ["utility-token", "nft-token"], - "extensions": { - "twitter": "https://twitter.com/skater_gators" - } - }, - { - "chainId": 101, - "address": "94noSErv2SUMVcYhCVERbf8Pvx1ohzjYQjeBaZuHMh2e", - "symbol": "GRC", - "name": "GraceCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MariBarbu/Cripto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FdqAZGcJtjoCpzURxz6SGXt2KFTeE3qtP8Uj1QTTWE5Y", - "symbol": "DUFF", - "name": "DuffelToken", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MetroMcD/crypto/main/DUFF.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8J7Cir9SmRiRQfkN6QoE1kL354i3uNoyQkngqkg18i79", - "symbol": "CTZNS", - "name": "777CTZNS WL TOKEN", - "decimals": 0, - "logoURI": "https://777ctzns.com/777.png", - "tags": ["WL-token"] - }, - { - "chainId": 101, - "address": "APERe98wcFuzQcHkX5aagTEZn2Vm8EAFE4PWBYzUT8d7", - "symbol": "APER", - "name": "Aperide", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/APERe98wcFuzQcHkX5aagTEZn2Vm8EAFE4PWBYzUT8d7/logo.png", - "tags": ["utility-token", "lp-token"], - "extensions": { - "discord": "https://discord.gg/J2jNTFv2PY", - "twitter": "https://twitter.com/AperideFi", - "website": "https://aperidefi.com" - } - }, - { - "chainId": 101, - "address": "BaPYshAdxSE7tUDqbC3cy4P2T3dcRA1ZXw4haQuv5doZ", - "symbol": "SIP", - "name": "SIP Coin ", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jdraplin/crypto/main/sip-logo-2.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "A2xFUCsF5nnFMRJqJQNnQTcXzT1AJuv4xofVc4zEyrRp", - "symbol": "SRC", - "name": "Sinny Redemption Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/A2xFUCsF5nnFMRJqJQNnQTcXzT1AJuv4xofVc4zEyrRp/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Gsviw3EGfYY4a5U3TsE27PCmqHY3D4Tkt39avTeXU7Ya", - "symbol": "JELL", - "name": "JellyCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Man-in-Black/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9F7zmuj6MsV6JnHreQhRPmzsZ6nF2Fh4nyYWyREWtKRu", - "symbol": "OERO", - "name": "OpenEDU Romania", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/neckroRO/OpenEdu-Romania/master/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "hhoXt8PDi9VpsxyMB4sdoRKVPx9adJ8mq4BVwnjwUck", - "symbol": "RZ", - "name": "ReaperZ Token", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/Yosora-sol/Degen/main/KingReaper.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/saP2ygvusx", - "twitter": "https://twitter.com/DegenReaperz", - "website": "https://degenreaperz.vercel.app/" - } - }, - { - "chainId": 101, - "address": "9EKEh1CHMKmyvBTY6qYZm7kgRJE18tCbaY1ZbpdELbVr", - "symbol": "BULLS", - "name": "Bull Solana", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/BullSolana/assets/main/Logo.png", - "tags": ["meme-token"] - }, - { - "chainId": 101, - "address": "DpGrbHz2ZZFayBspSvmmLqsit3377yT9qu4WDr1roBTJ", - "symbol": "NOCH/USDT", - "name": "Cropper LP token (NOCH/USDT)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "AL5Lk4U9Y77P1zGB1ngGfkWztvr38SsEWC7uGTE881PY", - "symbol": "ZDRT/USDC", - "name": "Cropper LP token (ZDRT/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "7ajE3K37GGj9zY1MUbq4QFLhbiL3yY5F7saxhZZ5ZQbp", - "symbol": "MEND/USDC", - "name": "Cropper LP token (MEND/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "D6SXaSdQpgK9DQSRRcnrT6apdULyUarG34txTYAKupAN", - "symbol": "FBZ/USDC", - "name": "Cropper LP token (FBZ/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "HyFEEwqnw3o3MJpED7k3tQm11tyFg5Qd2bUJRXUQ3Bpk", - "symbol": "PAPPA/USDC", - "name": "Cropper LP token (PAPPA/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "3kgvCJopjiDHZk92HgE6JX9GbzDHNjKHBfSDdUBq8d7u", - "symbol": "SIM/USDC", - "name": "Cropper LP token (SIM/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "69zsVuq3RA4ZSBqtyWdmcuvMYfYRTFKaKYp8xKX8djUW", - "symbol": "KING/USDC", - "name": "Cropper LP token (KING/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "FCbwFaX6zXA3BmJBW4JhPAahTn2b8ve6fRMYjmigv4Gw", - "symbol": "ZBC/USDC", - "name": "Cropper LP token (ZBC/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "8ahZSvvxRZcs8VK7rvyhVVats8ER1Uhd5FKuUF3pqJ8C", - "symbol": "ISOL/USDC", - "name": "Cropper LP token (ISOL/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "3e1GzfcfAPs2J2VjtyNwzdUg1TRWhw28RzmZ5wDZ3ajb", - "symbol": "Paws/USDC", - "name": "Cropper LP token (Paws/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "4LaxTpMRBBnetws6WGwNad28B8C58brcEDFuNwSUT2sT", - "symbol": "SOLR/USDC", - "name": "Cropper LP token (SOLR/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "DXHw3bPzuonXJ6TVUugw65Y9nPDJsS3jcHfVvLDk6WKd", - "symbol": "PUSSY/USDC", - "name": "Cropper LP token (PUSSY/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "4azyRH1JYia3mbZAvcNcVvd9QaxSEziJECyS4EekCi8Z", - "symbol": "SAMO/SOL", - "name": "Cropper LP token (SAMO/SOL)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "6p5FXaUsWLRKnyUDUNNBuQX8sBxt2wwf4C5F3ezSF4kE", - "symbol": "GALAXY/USDC", - "name": "Cropper LP token (GALAXY/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "EVghtk86iV2aTTTTnefaSPCmAdJhwp15fKwF2Qc38iJD", - "symbol": "INU/USDC", - "name": "Cropper LP token (INU/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "BVUQwnVN8wne5z1bp3J8c4Vxy6WSRUqfy3DZt2SWRmar", - "symbol": "BSAMO/USDC", - "name": "Cropper LP token (BSAMO/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "C9rKsBeZ4hN2LZPak8iD68TzqBLsH9apvDobyDdRBZLt", - "symbol": "BULL/USDC", - "name": "Cropper LP token (BULL/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "2CeA2kwbksBsaq864MoWLMgWY1L6LfNMiUqgFa4m8nXc", - "symbol": "TOX/USDC", - "name": "Cropper LP token (TOX/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "83GiNfh748ErQhUR8nu1pyMBogxkEGC5Vv2HHswpwazi", - "symbol": "SAMOY/USDC", - "name": "Cropper LP token (SAMOY/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "7pGw7vJx3c4RhmrNWi7G49czNhcyvvR7yD9LTTsi9ZVW", - "symbol": "DOGETH/USDC", - "name": "Cropper LP token (DOGETH/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "3oa14Mcu1syrReMTZ9EuVrrdDexYW6bGUwcH1CwanAUj", - "symbol": "WAGMI/USDC", - "name": "Cropper LP token (WAGMI/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "Ek8hKQ27JTC6HE2NYcyCAQcMUzxxYjqmugLwt61jpbzL", - "symbol": "KITTY/USDC", - "name": "Cropper LP token (KITTY/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "9u8Dxsxvx6e5JvK3HLqKZtxnVs3XUmxNMKY7eirsFm6x", - "symbol": "FUM/USDT", - "name": "Cropper LP token (FUM/USDT)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "6WmvhWXQH5BgqoLNmEfytd12dAdgA7PFTgFv9ho9nQ72", - "symbol": "DATE/USDC", - "name": "Cropper LP token (DATE/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "FREaJRk8mUbK7Vc1LMUw9rdtpLAu9g4qk4Yq9rU9wWP8", - "symbol": "NRA/USDC", - "name": "Cropper LP token (NRA/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "AaZ5cCNVpSHMg386qZz8wBAQJcEqJnW8eWM7RHgUy3mM", - "symbol": "CRY/USDC", - "name": "Cropper LP token (CRY/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "EdWqqUz56Jo9QvLqCTg8Q1PR7boC8xMVraAEQqnWgdGZ", - "symbol": "SAMU/USDC", - "name": "Cropper LP token (SAMU/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "22obGTGPjKFrXcSAGYbecJAicrhJQvMgdvXjVcY8ZYiw", - "symbol": "STR/USDC", - "name": "Cropper LP token (STR/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "5HMfLQpR9BKfLfT6PVZVrMuRJNuYDKGHAoD2UJksnGkk", - "symbol": "PANDA/USDC", - "name": "Cropper LP token (PANDA/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "CH7ZBJNnJRsUXUK8j2SQhoZbvU4mLWX1M6T98rUejwYT", - "symbol": "wCAPS_v1/USDC", - "name": "Cropper LP token (wCAPS_v1/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "dSvuy2L9aa8bPu5MV756Fsb6GmzDwtnaGXVRrNeRigU", - "symbol": "BABY/USDC", - "name": "Cropper LP token (BABY/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "FsAZn4KUQ7BeELdu7sqfDPn7g22vnNR4HcL4KQVzMBPh", - "symbol": "CRP/USDT", - "name": "Cropper LP token (CRP/USDT)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "9jY6sYGU5eEs1cL6sv3jHJWxvLyYq5TvYErQFPCRTrHv", - "symbol": "DoggyStyle/USDC", - "name": "Cropper LP token (DoggyStyle/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "5CGnktbzR3xeyzmk29avbPnN23vCLSnjCXh9Wqvmo5r1", - "symbol": "SOLBERRY/USDC", - "name": "Cropper LP token (SOLBERRY/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "5LRHM9qWDPTEh1LomBy1rd3unb6LXx2Y21WU3RvhRg51", - "symbol": "SDOGE/USDC", - "name": "Cropper LP token (SDOGE/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "EuceaH1hj8dixGkNiizRPhrvS57zVX14gij934SZbm4M", - "symbol": "FTT/CRP", - "name": "Cropper LP token (FTT/CRP)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "HeHNaTF5s68fMocqaHy6rHphbRXci34QetKSPHiCYFiG", - "symbol": "NAXAR/USDC", - "name": "Cropper LP token (NAXAR/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "9Wwb5XSp2sBxTnL3z1J9AJCnDNMvNbg3H32FoC7B7EUb", - "symbol": "RAY/CRP", - "name": "Cropper LP token (RAY/CRP)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "4sdKddtuMsgX1rQUzeCQzb42nEtwF7tCfMe8TqyZvgWu", - "symbol": "RAY/USDC", - "name": "Cropper LP token (RAY/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "T4Gy9p5q9rqw2KqdJhTaooKBnq4koXqzXcTfDEw3uea", - "symbol": "COBAN/USDC", - "name": "Cropper LP token (COBAN/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "65yAE3W6MoA9KeUYo2iGwddAaqT1qLedYWettprJznWQ", - "symbol": "FLOKIS/USDC", - "name": "Cropper LP token (FLOKIS/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "De6ogKa5E8LTYgjPFASNeM815Yqrbb9JWjtJVwMEtY8i", - "symbol": "BITXBIT/USDC", - "name": "Cropper LP token (BITXBIT/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "2v86BfdwPkLPmyXDPLsdYRMheBaLmMsEuj9o54YG79Fa", - "symbol": "DONKEY/USDC", - "name": "Cropper LP token (DONKEY/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "4hzNWj7mzEvACcrPZnUa4CrVygTsVGuqZMRzYkZoQEdj", - "symbol": "WAG/CRP", - "name": "Cropper LP token (WAG/CRP)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "4ZPDvfGhBYpNyTuFqo79oEDzSMfSDLmxJ4JfyV81ZELN", - "symbol": "BITCH/USDC", - "name": "Cropper LP token (BITCH/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "4YRSYKcbC3oQSEPEPqcYDHtwDabTBym3YjSsAvnLKdiU", - "symbol": "SONAR/USDC", - "name": "Cropper LP token (SONAR/USDC)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "Fj9n59ALXoQuePLMksjVuVCdkp9KiHBkSqt7r1u4YGuU", - "symbol": "SLIM/SOL", - "name": "Cropper LP token (SLIM/SOL)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Da82KXrqcUnv9oRcoKKUYRWM2yjPesi31GmrgMjZZ6h/logo.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CropperFinance", - "website": "https://cropper.finance/" - } - }, - { - "chainId": 101, - "address": "GqKdvkC9JF6qkLpT56MRc6UhDepj7uYt9nVbnm7MWBgR", - "symbol": "EEZE", - "name": "Easy as Pi", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/sm0othgroove/Token_image/main/EEZE_LOGO.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "FP3gNbbngnmKZXzuKU78QecAH9QfGkrnUkn2KdA7ERxD", - "symbol": "AUS", - "name": "AUSTRALIA", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FP3gNbbngnmKZXzuKU78QecAH9QfGkrnUkn2KdA7ERxD/logo.svg", - "tags": ["community-token", "social-token"], - "extensions": { - "description": "OI OI OI", - "twitter": "https://twitter.com/OzDive" - } - }, - { - "chainId": 101, - "address": "HZA2vE3iEVDzVgg82daaettsEUaYohwHGB3QEn1W4eW8", - "symbol": "AUSSIE", - "name": "AUSSIE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HZA2vE3iEVDzVgg82daaettsEUaYohwHGB3QEn1W4eW8/logo.svg", - "tags": ["community-token", "social-token"], - "extensions": { - "description": "OI OI OI", - "twitter": "https://twitter.com/OzDive" - } - }, - { - "chainId": 101, - "address": "CfoGYZCRSJTvr4QyRMuW5HRnKynsRz2HewTqMHjqVVYY", - "symbol": "OZZIE", - "name": "OZZIE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CfoGYZCRSJTvr4QyRMuW5HRnKynsRz2HewTqMHjqVVYY/logo.svg", - "tags": ["community-token", "social-token"], - "extensions": { - "description": "OI OI OI", - "twitter": "https://twitter.com/OzDive" - } - }, - { - "chainId": 101, - "address": "4283jb3WsrrarmgGiPYAfWhmPPvbTMtsAUqX5itNVjge", - "symbol": "BUCKS", - "name": "BEVO", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4283jb3WsrrarmgGiPYAfWhmPPvbTMtsAUqX5itNVjge/logo.svg", - "tags": ["community-token", "social-token"], - "extensions": { - "description": "BEVO BUCKS ROCK", - "twitter": "https://twitter.com/OzDive" - } - }, - { - "chainId": 101, - "address": "FxVdym3AJMQw9AM1wzK7aJVVNBTcnXro2zhYkoBtyUAp", - "symbol": "TIGR", - "name": "Tiger by Kab", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/theNetworkChuck/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FqS32qJJPyhFDtRgsnAF3M7SQZV8y4qxRUrm9FGzWqnq", - "symbol": "NPTN", - "name": "Neptune", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/argonautPH/neptune-sol/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "B72NtyLQXgw6sJB3J2vygusgJbpZKAtTmxVNKVhi9HAK", - "symbol": "YEET", - "name": "YEET", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/B72NtyLQXgw6sJB3J2vygusgJbpZKAtTmxVNKVhi9HAK/logo.png", - "tags": ["NFT", "utility-token"], - "extensions": { - "discord": "https://discord.com/invite/bunnywarriors", - "twitter": "https://twitter.com/bunnywarriors_", - "website": "https://www.bunnywarriors.io/home" - } - }, - { - "chainId": 101, - "address": "ACKCBoHQ7q6JcpRRbCKAwPJV68QfDo4KJWCpiLQnV9Ca", - "symbol": "GIDR", - "name": "Garuda IDR", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ACKCBoHQ7q6JcpRRbCKAwPJV68QfDo4KJWCpiLQnV9Ca/logo.png", - "tags": ["stablecoin", "asset"], - "extensions": { - "description": "Garuda IDR", - "twitter": "https://twitter.com/garuda_idr", - "website": "https://garuda.to/" - } - }, - { - "chainId": 101, - "address": "AsKEX3XQbDpBuqcm5N8a8DAST65fAqGuBeXXfsEL99MK", - "symbol": "FWLV2", - "name": "Faviont Whitelist V2", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/faviont/marketplace/main/logo-wl.png", - "tags": ["whitelist", "utility-token"], - "extensions": { - "description": "Each token gives you access to buy one NFT on https://faviont.io/", - "discord": "https://discord.gg/T6mVYKeVYc", - "twitter": "https://twitter.com/FaviontOfficial", - "website": "https://faviont.io/" - } - }, - { - "chainId": 101, - "address": "DEpY8cody98W6WLw57P2i6kZUcZzJr1oMiDuWCi389n4", - "symbol": "FTI", - "name": "FETI Coin", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DEpY8cody98W6WLw57P2i6kZUcZzJr1oMiDuWCi389n4/logo520x520.png", - "tags": ["utility-token", "social-token"] - }, - { - "chainId": 101, - "address": "JNK9NxVGmSdE3rUYgZs2NUYWJgTYXtsm73x9L69hmPf", - "symbol": "JNKPASS", - "name": "Junkie Pass", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/JNK9NxVGmSdE3rUYgZs2NUYWJgTYXtsm73x9L69hmPf/logo.png", - "tags": ["whitelist"], - "extensions": { - "description": "Each token gives you access to buy a discounted Junkie", - "discord": "https://discord.com/invite/WsRD49UrtT", - "twitter": "https://twitter.com/777Junkies", - "website": "https://www.junkiesnft.com/" - } - }, - { - "chainId": 101, - "address": "GAWkhunwiseKNqzSD8UCi7dpm2U29GChoa24KNuYgxGn", - "symbol": "COOKIE", - "name": "Liberty Cookie", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GAWkhunwiseKNqzSD8UCi7dpm2U29GChoa24KNuYgxGn/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/HxaCQScKvC", - "twitter": "https://twitter.com/Liberty_Cookie", - "website": "https://www.liberty-cookies.com/" - } - }, - { - "chainId": 101, - "address": "wmBi6LnKxdvgF9zgoHRantmu7dDLJc4AosTqbztj5cT", - "symbol": "dagel", - "name": "dagelan", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/awangee/dagelan/main/dagel/main/logo.jpg", - "extensions": { - "twitter": "https://twitter.com/Sol_Troops", - "website": "https://www.soltroops.co/" - } - }, - { - "chainId": 101, - "address": "EA9GBGUxJoNfHLZ5qzLtG6553EmXM5NgsyrMXfZcfQQE", - "symbol": "WOOT", - "name": "Women Out Of Tribe", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/Awes0me0/WomenOutOfTribe/main/!OG.png", - "tags": ["whitelist"], - "extensions": { - "description": "Stake OG Women and Women's Pride NFTs to earn WOOT", - "discord": "https://discord.gg/womenspride", - "twitter": "https://twitter.com/WomensPrideNFT", - "website": "https://www.womenspride.io/" - } - }, - { - "chainId": 101, - "address": "EXEpxhwgkH7Xw48Ssf5tiNwCy3YXF8xV5z12aWertDfQ", - "symbol": "REMEDY", - "name": "The Remedy", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Majstx/token-list/26ac8d87388dbc2e71c59ddc69fe6a62ba463c83/assets/mainnet/EXEpxhwgkH7Xw48Ssf5tiNwCy3YXF8xV5z12aWertDfQ/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://www.theremedyvi.com/" - } - }, - { - "chainId": 101, - "address": "7AkZxj94Fy8vrLrcFJ39G5vZD339Nshi7kH2VpM6JXje", - "symbol": "DTWS", - "name": "Discreet Wellness", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/robsd01/crypto/main/DiscreetToken.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4a9Lu5A1a2eoREUpv5AfENUnmT2N3N5NTbaYE4GHTWSa", - "symbol": "LNFTxSLSKIN2", - "name": "SL Lounge WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4a9Lu5A1a2eoREUpv5AfENUnmT2N3N5NTbaYE4GHTWSa/logo.png", - "tags": ["liqnft-wl-token"], - "extensions": { - "discord": "https://discord.gg/PYZWRHgVwM", - "twitter": "https://twitter.com/liqnft", - "website": "https://www.liqnft.com/solanaland" - } - }, - { - "chainId": 101, - "address": "BGrCkH9iBjNrdDLJSpqD8EUVWx8qVD3vXvcJurVc1xsZ", - "symbol": "BOOGA", - "name": "BOOGA", - "decimals": 2, - "logoURI": "https://arweave.net/X3QsZPOeC1p2uhJDToPTuAeAS6EyWrrHJ943ONARv_g", - "tags": ["NFT", "utility-token"], - "extensions": { - "twitter": "https://twitter.com/MetaKongzGC", - "website": "https://www.metakongz.art/" - } - }, - { - "chainId": 101, - "address": "7HdV5B1EnnK5cjRir283wza2mm9GDsM8iU7iYQraWXzn", - "symbol": "WRP", - "name": "WRP token", - "decimals": 6, - "logoURI": "https://drive.google.com/file/d/1UESFAJdzR-_PwyeR3q60qBFkdr0IBDeD/view?usp=sharing", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EaMz63AABkhEity8FdMWfbqT1yk3VSygfszH8euEkLQE", - "symbol": "BUR", - "name": "BURE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ValentinDabovski/crypto-bure-token/main/bure-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2nvYxLbe6duVoXdgJeC8my5Q7V5X3bpG3KaFdfixUwkM", - "symbol": "LLM", - "name": "Legendary Laohu Mint", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/GaitanaruAndrei/assets/main/freespl.png", - "tags": ["mint-token"], - "extensions": { - "description": "Legendary Laohu Mint", - "website": "https://www.kingdompass.io/" - } - }, - { - "chainId": 101, - "address": "6m6n5aAnaXszk4HY7fzurqjy2CP9uNeQhVq7czu7GWJE", - "symbol": "BODYE", - "name": "Bodye Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/bodye70/BodyeToken/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3Dy8KFyvpUJ8nfRCbvk4HLWjNRRzxiVhTeE9PQF9RARD", - "symbol": "ARNM", - "name": "Arenum", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3Dy8KFyvpUJ8nfRCbvk4HLWjNRRzxiVhTeE9PQF9RARD/logo.png", - "tags": ["game-token"], - "extensions": { - "telegram": "https://t.me/arenum_community", - "telegramAnnouncements": "https://t.me/arenum_announcements", - "website": "https://arenum.io" - } - }, - { - "chainId": 101, - "address": "4LTyDfiA7P1WnxVUfSe8qhrjerfd6iKHCs9KtbUEGhAA", - "symbol": "ENOR", - "name": "CypherEnormity", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4LTyDfiA7P1WnxVUfSe8qhrjerfd6iKHCs9KtbUEGhAA/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BoNE4kp9QQ6mBDPBz1RWPdZFwSevjiGJDBTZQM94fFLb", - "symbol": "$BONE", - "name": "Dinodawg Bone", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Ashtar-Global-Solutions/spl-tokens/main/ddkb/ddkb-icon.png", - "tags": ["NFT"], - "extensions": { - "discord": "https://discord.com/invite/dinodawgs", - "instagram": "https://www.instagram.com/dinodawg_kingdom", - "twitter": "https://twitter.com/DinodawgKingdom" - } - }, - { - "chainId": 101, - "address": "8eEg56HBXPG3iHJMNCCFEeVGix7zgHmY48fdC3eLSFUq", - "symbol": "FLUF", - "name": "Fluffy Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/dkocic108/fluffy/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3M4tphj3DiLF4u8W63o9fyiPdb7DT9fuddPSdxSNStiV", - "symbol": "RAVE", - "name": "RaveCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/virajdas/RaveCoinCrypto/main/RaveCoinLogoRS.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FX43imWLr8Ld4LjonuTY9VGJBcq3VrV4BEWUXta361pn", - "symbol": "AXLT", - "name": "AXOLOTL LABS", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/ArturoCrz/AXLT-Token/main/logo.png", - "tags": ["NFT", "social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "EtFpJDLvjp5to6MpHa7sgKqkL8m6qTBm4TsBbwj9ggfX", - "symbol": "GEECH", - "name": "GeecheeSOL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EtFpJDLvjp5to6MpHa7sgKqkL8m6qTBm4TsBbwj9ggfX/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/geecheesol", - "website": "https://geecheesol.com/" - } - }, - { - "chainId": 101, - "address": "7ftKSttU6yUAnWsWxpRP3LKdQNEto8V4KD9NuWttoVnV", - "symbol": "JOINTS", - "name": "TombStoned JOINTS", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7ftKSttU6yUAnWsWxpRP3LKdQNEto8V4KD9NuWttoVnV/logo.png", - "tags": ["social-token"], - "extensions": { - "description": "TombStoned High Society", - "website": "https://www.tombstoned.xyz/" - } - }, - { - "chainId": 101, - "address": "FnBUyCgUzxLVm6DV6xsSFSTrhuQymz2RerZEoNPw2s1N", - "symbol": "ITOK", - "name": "iToken", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MetroMcD/crypto/main/ITOK.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6ouApMromzbiU4M1rtzRLwYowmXFHgohF9tUt2VE7Qa4", - "symbol": "ARABZ", - "name": "ArabPunkz Whitelist token", - "decimals": 9, - "logoURI": "https://imgur.com/65nEV2W.png", - "tags": ["community-token", "whitelist-token"], - "extensions": { - "animationUrl": "https://i.imgur.com/bJQjXLk.mp4", - "description": "ArabPunkz 3D Whitelist redeemable token", - "imageUrl": "https://arwave.art/upga5v2tzpnak1eqlq5kvc/upga5v2tzp.png", - "website": "https://arabpunkz.io" - } - }, - { - "chainId": 101, - "address": "12Mzc4wnxW1t27M1uJ5F8fj4V7FK921gsGG7WsBcnfSX", - "symbol": "WOW", - "name": "World of Wolves", - "decimals": 9, - "logoURI": "https://bafybeiav3sa2tcy4wmnju5hf7r3nskovfffqb5ffz4g4pshuwuwkpabmsu.ipfs.dweb.link/?ext=png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.com/invite/alphawolves", - "twitter": "https://twitter.com/alpha_wolvesnft", - "website": "https://alphawolvesnft.xyz/" - } - }, - { - "chainId": 101, - "address": "Cr1rbpYZi1W43hcrjHRQVH56msPdCWzdHJVP1y1Roo9i", - "symbol": "CHINO", - "name": "CHINO COIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/CRM-BOTS/token/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "93iJG6TY2bXb8zUe6gscx3fwvUCZPHVMCrVRg6uFz6ZU", - "symbol": "SKULL", - "name": "Spooky Skeleton Society Utility Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/jone6969/Assets/558eaa3c4161c7b95692d83b37a41219337c1357/Skelly-Logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/srs5C9ETZJ", - "twitter": "https://twitter.com/SpookySkellyS_", - "website": "https://spookyskeletonsociety.com/" - } - }, - { - "chainId": 101, - "address": "7nDTAsWEqu6NUQ95TwhaYeszMxWeoYt4698KFApgiUFi", - "symbol": "PNDBR", - "name": "PandaBrand", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/pandabrand/crypto-logo/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "6jJnEcWe7MFEpRbuPVTCyB8epGnoqdCxfpxEk4LYx6CA", - "symbol": "BLOOD", - "name": "MOSQUITO WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MarmosetNFT/MARMO/main/mainnet/asset/logo.png", - "tags": ["community-token", "utility-token"], - "extensions": { - "twitter": "https://twitter.com/TheMarmosetNFT" - } - }, - { - "chainId": 101, - "address": "HV8RWueWwpRue86SMzXQapxDB5ZEWw5YnVbxuDcihaF5", - "symbol": "MARMO", - "name": "MarmosetNFT", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/MarmosetNFT/MARMO/main/mainnet/asset/logo.png", - "tags": ["community-token", "utility-token"], - "extensions": { - "twitter": "https://twitter.com/TheMarmosetNFT" - } - }, - { - "chainId": 103, - "address": "DToJ26atxLTKNx8tCf6zJq4tT6dmcr85BJfBQoya3uYK", - "symbol": "BETYAR-Devnet", - "name": "Betyár Devnet Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DToJ26atxLTKNx8tCf6zJq4tT6dmcr85BJfBQoya3uYK/logo.png", - "extensions": { - "description": "BetyarDAO", - "discord": "https://discord.io/betyardao", - "instagram": "https://www.instagram.com/betyardao", - "twitter": "https://twitter.com/betyardao", - "website": "https://betyardao.hu" - } - }, - { - "chainId": 101, - "address": "WoBBvtjL6nQWp7QDgBT8DepRyHwDbXoeAhadWuA1G5p", - "symbol": "WoBB", - "name": "Wobblebug Woblist Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WoBBvtjL6nQWp7QDgBT8DepRyHwDbXoeAhadWuA1G5p/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "instagram": "https://www.instagram.com/wobblebug/", - "twitter": "https://twitter.com/Wobblebug", - "website": "https://www.wobblebug.info/" - } - }, - { - "chainId": 101, - "address": "FLEXkBfYvTLgirxYE8M5PQRTG17HUWzNgstEqhMe6VZY", - "symbol": "FLEX", - "name": "Flex Coin Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FLEXkBfYvTLgirxYE8M5PQRTG17HUWzNgstEqhMe6VZY/logo.png" - }, - { - "chainId": 101, - "address": "GgPrwjVQBMHRzXSv8xYbeRcx4uhRxWKW5qp6osMMzNcG", - "symbol": "$WRENDER", - "name": "Whitespace_Creatorverse RENDER Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/femolakarot/whitedpace/main/Whitespace-Render-token-logo.png", - "tags": ["community-token", "utility-token", "NFT-Token"], - "extensions": { - "description": "The Whitespace Creatorverse native and governing token, stake creators to earn RENDER", - "discord": "https://discord.gg/u25c7PJdKz", - "instagram": "https://www.instagram.com/whitespace_creatorverse", - "twitter": "https://twitter.com/femolakarot", - "website": "https://whitespacenft.femolakarot.design/" - } - }, - { - "chainId": 101, - "address": "GGczxznEoKK4X4jMXeiNARU1uyNLhRaYuM4PP6ueCvcd", - "symbol": "NIKOIN", - "name": "Nikoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/akgbar/cryptonikoin/main/logo.png", - "tags": ["social-token", "community-token"], - "extensions": { - "discord": "https://discord.gg/E4pN3Yr" - } - }, - { - "chainId": 101, - "address": "3f4yGBWrNpTJmnzZwW8Nwt7bVmzf3wJLC3fNZKUdkLfn", - "symbol": "RYPT", - "name": "RyanPoints", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/rbennett71593/rypt/main/logo.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "8UAj3gHMG3cKN66dtm4BSJUpbFPSY1HZGWRtaj6MkGFh", - "symbol": "AGNI", - "name": "Agni", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8UAj3gHMG3cKN66dtm4BSJUpbFPSY1HZGWRtaj6MkGFh/logo.png", - "tags": ["Gaming", "Game", "Game-Fi", "NFT", "NFT-Gaming", "Metaverse"], - "extensions": { - "description": "Agni is the primary token for the next generation blockchain game AgniMyth.", - "twitter": "https://twitter.com/agnimyth", - "website": "https://agnimyth.com" - } - }, - { - "chainId": 101, - "address": "96K32hBSZEMnq3J717dukcpfe9oBk5mgDNXPMPoANfRF", - "symbol": "TOMB", - "name": "Tomb", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/sketckypyramids/log/main/log.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "564MW4M8QqnszEdpTFs5vJzWAGH3Dr7WVQtfip7URWwq", - "symbol": "CYB", - "name": "CybersecKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Sahil2rick/cyberseccrypto/main/CYBERSEC.png", - "tags": [ - "social-token", - "Gaming", - "Game", - "Game-Fi", - "NFT", - "hacking", - "NFT-Gaming", - "Metaverse" - ], - "extensions": { - "description": "The CYBERSEC community is a place where pentesters, students, hacker, coders, enthusiasts and allaround CYBERSEC fans come together to help each other.", - "twitter": "https://twitter.com/CYBERSECGurgaon", - "website": "https://cybersec.school" - } - }, - { - "chainId": 101, - "address": "CotjBMa7GVLUP6ajjDbCxoNZBAu9zfkLZzcU5wCLC2Hx", - "symbol": "COURT", - "name": "Metacourt", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CotjBMa7GVLUP6ajjDbCxoNZBAu9zfkLZzcU5wCLC2Hx/logo.svg" - }, - { - "chainId": 101, - "address": "6uVeihpFMgW45VTWeRYBBXsmPmgsmq31omL6iGWxjYt7", - "symbol": "BMW", - "name": "BMW Token", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6uVeihpFMgW45VTWeRYBBXsmPmgsmq31omL6iGWxjYt7/logo.png" - }, - { - "chainId": 101, - "address": "2P5YxgwZYVynuH2SfHBpboVfc7nHyj5DZXeKqC73B8kk", - "symbol": "BOE", - "name": "Block Of Eden", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/blockofeden/crypto/main/logo.png", - "tags": ["NFT"] - }, - { - "chainId": 101, - "address": "CZY2dDTb86ARthiLP47hpmEgX1h82XCEr51XWQ5GsZoj", - "symbol": "UMF", - "name": "UMF", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CZY2dDTb86ARthiLP47hpmEgX1h82XCEr51XWQ5GsZoj/logo.png", - "extensions": { - "description": "pow token backed by FIL mining power" - } - }, - { - "chainId": 101, - "address": "TTAKPDB1bgY1gpNenFxbLnG2VRFuKnaoFCc6xkY2Cbs", - "symbol": "TTWL", - "name": "Tropical Tigers Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/TTAKPDB1bgY1gpNenFxbLnG2VRFuKnaoFCc6xkY2Cbs/logo.png", - "tags": ["whitelist-token", "nfts"] - }, - { - "chainId": 101, - "address": "AGTWeVBaAsUqak2nX8L4auTNEkDXbfVRsYfPZpa4LNkS", - "symbol": "AOTGWL", - "name": "Apes of the Gods Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AGTWeVBaAsUqak2nX8L4auTNEkDXbfVRsYfPZpa4LNkS/logo.png", - "tags": ["whitelist-token", "nfts"] - }, - { - "chainId": 101, - "address": "STNkp36CqWfuDx7E1jXyzDxnRZXtXhcLgXroxYJ3Qa1", - "symbol": "TSWL", - "name": "The Solasis Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/STNkp36CqWfuDx7E1jXyzDxnRZXtXhcLgXroxYJ3Qa1/logo.png", - "tags": ["whitelist-token", "nfts"] - }, - { - "chainId": 101, - "address": "DXq8js1uxGNENn97SdtBhRDQ2TMETDxHsRabJPjVh2Q4", - "symbol": "USAM", - "name": "UncleSam", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DXq8js1uxGNENn97SdtBhRDQ2TMETDxHsRabJPjVh2Q4/logo.png" - }, - { - "chainId": 101, - "address": "6DnZ8eU2JGmaHDALrR425xes228sFeMEcXezQ4CqdQx4", - "symbol": "MWT", - "name": "MetaBards Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6DnZ8eU2JGmaHDALrR425xes228sFeMEcXezQ4CqdQx4/logo.png", - "tags": ["NFT", "whitelist-token"], - "extensions": { - "discord": "https://discord.gg/metabards", - "twitter": "https://twitter.com/MetaBardsNFT", - "website": "https://metabards.net/" - } - }, - { - "chainId": 101, - "address": "76VD6fXjBDhEHGj6bmsKCcA5UrXXRSAbTkZR3sWVsmFL", - "symbol": "TST", - "name": "Test Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/thelittlepiggy/assets/main/test-tube.png", - "tags": ["General", "Game-Fi", "NFT"] - }, - { - "chainId": 101, - "address": "4id3Lrw5BJruX7VQ3iRbmpnt8JHYKEkFd47j9NFgirFp", - "symbol": "UREP", - "name": "UNIVERSAL REPVBLIK TOKEN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4id3Lrw5BJruX7VQ3iRbmpnt8JHYKEkFd47j9NFgirFp/logo.png", - "tags": ["community-token", "utility-token"], - "extensions": { - "description": "UNIVERSAL REPVBLIK TOKEN", - "instagram": "https://www.instagram.com/universalrepvblik", - "twitter": "https://twitter.com/URepvblik", - "website": "https://www.universalrepvblik.com" - } - }, - { - "chainId": 101, - "address": "Gcg3crzK9expPUEENZpNDg5y3nJ9crhcSzV1MLVgW6gH", - "symbol": "AXLAB", - "name": "AXOLOTL LABS DAO", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/ArturoCrz/AXLAB-TOKEN/main/logo.png", - "tags": ["NFT", "social-token", "utility-token"] - }, - { - "chainId": 103, - "address": "B5qmy6nXEHtWmhHoGFM3QuH4ofw9n4gD4eVZ8y8VsCx8", - "symbol": "GIVDEV", - "name": "The Giving Pool Devnet", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/B5qmy6nXEHtWmhHoGFM3QuH4ofw9n4gD4eVZ8y8VsCx8/logo.svg", - "tags": ["Charity", "Token", "devnet"], - "extensions": { - "facebook": "https://facebook.com/givingpool", - "twitter": "https://twitter.com/givingpool", - "website": "http://thegivingpool.io/" - } - }, - { - "chainId": 101, - "address": "GtCaEHFwJTf5uN1AUvJvFDDpKjFTfXnMToqXN8QmB66D", - "symbol": "BrcPromise", - "name": "Bricknest Promise Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/bricknest/PromiseToken/main/PromiseToken.png" - }, - { - "chainId": 101, - "address": "ECNkBQj5Ee3vNnWoBdmuxMsycbGLsRnQj8u4MA3YQH1G", - "symbol": "DED", - "name": "DED TOKEN", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ECNkBQj5Ee3vNnWoBdmuxMsycbGLsRnQj8u4MA3YQH1G/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "5bTTGxcUbG1u2iSEo4DJ6ENRPCyRxZaVZfXgNRQpxruq", - "symbol": "ZZZ", - "name": "Zzz Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5bTTGxcUbG1u2iSEo4DJ6ENRPCyRxZaVZfXgNRQpxruq/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "http://149.28.21.55/coin/solana/zzz/" - } - }, - { - "chainId": 101, - "address": "E4e93CbkTsyPWJ2EYMmDxbTg9dJoE91Rj5Lqq3Pddm5S", - "symbol": "PLS", - "name": "Pleasure", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/E4e93CbkTsyPWJ2EYMmDxbTg9dJoE91Rj5Lqq3Pddm5S/logo.png" - }, - { - "chainId": 101, - "address": "AK3o9dowLAPX6bnALoEcFMKo1bNaJNTMf7XcWYmQDFHQ", - "symbol": "CBWL", - "name": "Cyberbloks whitelist token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AK3o9dowLAPX6bnALoEcFMKo1bNaJNTMf7XcWYmQDFHQ/wl-token3D.png", - "tags": ["Cyberbloks", "whitelist-token", "nfts"], - "extensions": { - "website": "http://www.cyberbloks.com" - } - }, - { - "chainId": 101, - "address": "HnmucWRmXuCN9hPZpUPqak9sQUKKPaJaZHUK3Ha6QpPR", - "symbol": "GNC", - "name": "Greenercoin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/EAbdelilah/tokenGNC/main/thumbnail_G%20(1).png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "8SxMo8spwojJnReD36RpFhmZzb8UoR2MhWyJfVja5Kx2", - "symbol": "BAGS", - "name": "Bandits", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8SxMo8spwojJnReD36RpFhmZzb8UoR2MhWyJfVja5Kx2/logo.png", - "tags": ["NFT", "utility-token"] - }, - { - "chainId": 101, - "address": "4zwvyYh98HjJjCzt2WvHqxfxU3bg25C2cG3rNniKmf3D", - "symbol": "CBWLF", - "name": "Cyberbloks whitelist free mint token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4zwvyYh98HjJjCzt2WvHqxfxU3bg25C2cG3rNniKmf3D/wlfree-token3D.png", - "tags": ["Cyberbloks", "whitelist-token", "nfts"], - "extensions": { - "website": "http://www.cyberbloks.com" - } - }, - { - "chainId": 103, - "address": "3VFFHRZZnXeNjFXmQ5n2hy4jBosZ3WCSLHsqjAjajPU6", - "symbol": "TFT", - "name": "Tech Folk", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3VFFHRZZnXeNjFXmQ5n2hy4jBosZ3WCSLHsqjAjajPU6/logo.svg", - "tags": ["Tech-Folk", "utility-token", "community-token"], - "extensions": { - "website": "https://web.dev.techfolk.io" - } - }, - { - "chainId": 101, - "address": "9r4V29zLPD8DXbHR3RVjJb7xrrofEnjB2JHfZiGGLAwp", - "symbol": "WBNK", - "name": "WORLDBANK", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/OnChainPunk/BANK/main/Bank.png", - "tags": ["utility-token", "HODL", "OnChainPunk"] - }, - { - "chainId": 101, - "address": "ADcEtKSVKDxBUe3JERgSh9q458w3kRKPMHkihF13vxx2", - "symbol": "DYOR", - "name": "NERD", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ADcEtKSVKDxBUe3JERgSh9q458w3kRKPMHkihF13vxx2/logo.png" - }, - { - "chainId": 101, - "address": "2VdpTjG6qwa9Lw5vT6xHYFY8VB7e1P5Y7KSLrTQWwds4", - "symbol": "TFT", - "name": "Tech Folk", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3VFFHRZZnXeNjFXmQ5n2hy4jBosZ3WCSLHsqjAjajPU6/logo.svg", - "tags": ["Tech-Folk", "utility-token", "community-token"], - "extensions": { - "website": "https://techfolk.io" - } - }, - { - "chainId": 101, - "address": "CSPToxnAWVb9YNPfrfhkhq2cterzVtgmfYju7nxg9MAA", - "symbol": "CSPT", - "name": "CryptoSport", - "decimals": 7, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CSPToxnAWVb9YNPfrfhkhq2cterzVtgmfYju7nxg9MAA/logo.png", - "tags": ["utility-token"], - "extensions": { - "facebook": "https://www.facebook.com/Crypto-Sport-104470991959649", - "instagram": "https://www.instagram.com/cryptosport_official/", - "linkedin": "https://www.linkedin.com/company/cryptosportconnection", - "twitter": "https://twitter.com/Go_CryptoSport", - "website": "https://Gocryptosport.com/" - } - }, - { - "chainId": 101, - "address": "uSuyHGF93xkMU35uUNcAyXWrwLFrzS56kBZYLQVX25R", - "symbol": "ATVS", - "name": "Adagio TVs Whitelist Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/uSuyHGF93xkMU35uUNcAyXWrwLFrzS56kBZYLQVX25R/tv.png", - "tags": ["social-token", "loop"], - "extensions": { - "twitter": "https://twitter.com/Adagio_TVs" - } - }, - { - "chainId": 101, - "address": "CtBR1SMTEpbNixGdDTD5Xnh4xQQE8NMP2zi5VRWXn3pe", - "symbol": "SEWL", - "name": "Snake Eyes WL", - "decimals": 0, - "logoURI": "https://cdn.discordapp.com/attachments/962058091661234197/963300850254622770/Untitled_200_200_px_1.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "37qK4Nc6ryVZYfNFufx97nJU6QD2hskToSdgL7VXwoJ4", - "symbol": "LANA", - "name": "LANA TOKEN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/dev8x/token-list/main/assets/mainnet/37qK4Nc6ryVZYfNFufx97nJU6QD2hskToSdgL7VXwoJ4/icon.png", - "extensions": { - "medium": "https://lanafinance.medium.com/", - "twitter": "https://twitter.com/lanaprotocol", - "website": "https://lanafi.app/" - } - }, - { - "chainId": 101, - "address": "7JD2vvQu5kbegaxDDWWgbYVpufNx7nsxk3k7CmGK76Yb", - "symbol": "RMVIP", - "name": "Romance Meta NFT VIP Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Robby3082/test-token/main/romeo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "AkhxRHBKwhPiv4tvFBQ44nrSmWqM3XqUN7c7nnkPkcAU", - "symbol": "MOSQUITO", - "name": "MOSQUITO WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AkhxRHBKwhPiv4tvFBQ44nrSmWqM3XqUN7c7nnkPkcAU/mosquito.png", - "extensions": { - "twitter": "https://twitter.com/mosquitowarrior" - } - }, - { - "chainId": 101, - "address": "4x41rDCA5jcXBzBr6e8vWh6nU5TDnRU7U1XPcCZFCUvY", - "symbol": "WLNOFC", - "name": "WL NFT OFF ROAD FAN CLUB", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4x41rDCA5jcXBzBr6e8vWh6nU5TDnRU7U1XPcCZFCUvY/logo.png", - "tags": ["4x4-Fan-Club", "4x4FC", "utility-token", "virtual-currency"], - "extensions": { - "twitter": "https://twitter.com/NFT_Off_Road_FC", - "website": "https://nftoffroadfan.club/" - } - }, - { - "chainId": 101, - "address": "53bovFwsd8eFuBd7tYv9gK8qG2FYJwemLP9zwQsVTJSH", - "symbol": "ANGELS", - "name": "Fallen Angels", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/53bovFwsd8eFuBd7tYv9gK8qG2FYJwemLP9zwQsVTJSH/logo.png", - "tags": ["nft-marketplace"], - "extensions": { - "twitter": "https://twitter.com/fallenangelsxyz", - "website": "http://fallenangels.com/" - } - }, - { - "chainId": 101, - "address": "okaysT2GMaxJgsWR3F4GQKj1bD9Tw23FDjSeuVzeuNW", - "symbol": "OKAY", - "name": "Okay Bears WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/okaysT2GMaxJgsWR3F4GQKj1bD9Tw23FDjSeuVzeuNW/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/okaybears", - "website": "https://www.okaybears.com" - } - }, - { - "chainId": 101, - "address": "GL7i9TYcE2pKmVYqPrgZht8LcWKBQF4jvDfXQAFDMVwP", - "symbol": "PO", - "name": "PO", - "decimals": 1, - "logoURI": "https://commons.wikimedia.org/wiki/Commons:Quality_images#/media/File:Gull_portrait_ca_usa.jpg", - "tags": ["currency"] - }, - { - "chainId": 101, - "address": "BEBE2QoWKeodTELW8v2aFZHUKsFjiZqb3g9npthHsriJ", - "symbol": "BEBE", - "name": "BEBE", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BEBE2QoWKeodTELW8v2aFZHUKsFjiZqb3g9npthHsriJ/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://www.mekababies.com/" - } - }, - { - "chainId": 101, - "address": "MRLY2ScVMxXJTieiDi2Ywdm8VjEKeLcY4THL2UyhHRA", - "symbol": "MNRL", - "name": "MNRL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/MRLY2ScVMxXJTieiDi2Ywdm8VjEKeLcY4THL2UyhHRA/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://www.cosmicsentinels.com/" - } - }, - { - "chainId": 101, - "address": "Ha4iARiVxSsF4vpViqozeAQfFBxR4yubx2apBbxP7kTA", - "symbol": "CZT", - "name": "Canvaz Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/danny8252/czt/main/Logo.png", - "extensions": { - "website": "http://cryptocanvaz.com/" - } - }, - { - "chainId": 101, - "address": "2rpR7AagtCaa4Dt9HRFXr7cLGAAyMf1uC8HgYRDhPwCA", - "symbol": "REE", - "name": "Reezez", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Delvobit/reezez/main/reezez.png", - "tags": ["social-token", "Community-token"], - "extensions": { - "website": "https://reezez.com" - } - }, - { - "chainId": 101, - "address": "HYuUNZbw2K1iJ9j5Sg1e1om8qC49b7595rSMH15sjg2D", - "symbol": "MATTER", - "name": "Solarized Matter (Lucid Realms)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HYuUNZbw2K1iJ9j5Sg1e1om8qC49b7595rSMH15sjg2D/logo.png", - "tags": ["currency"], - "extensions": { - "twitter": "https://twitter.com/lucidrealmsxyz", - "website": "https://www.lucidrealms.xyz" - } - }, - { - "chainId": 101, - "address": "TTTetGyXtTwJhGYk1PtCgnfMEeGPpg8kntzJWTCALHh", - "symbol": "TTWLT", - "name": "Tropical Tigers WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/TTAKPDB1bgY1gpNenFxbLnG2VRFuKnaoFCc6xkY2Cbs/logo.png", - "tags": ["whitelist-token", "nfts"] - }, - { - "chainId": 101, - "address": "HhFp2Ydkx1xHF9R2bKYgkTagsBo8Jnt2NAKsVRSu4r4r", - "symbol": "DSTACKS", - "name": "ShortDaddyBigStacks", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mydanadesigns/cryptomachine/main/Dana.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HNm1VgnyhaMZZF71RjNFNiYLN76zyZTDcBZPjYveWFXX", - "symbol": "FRENS", - "name": "Chimp Frens", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HNm1VgnyhaMZZF71RjNFNiYLN76zyZTDcBZPjYveWFXX/chimp.png", - "tags": ["nfts"], - "extensions": { - "twitter": "https://twitter.com/chimpfrens", - "website": "https://www.chimpfrens.com/" - } - }, - { - "chainId": 101, - "address": "84magGbPmN5tjVyGYcPfVG93Eb3kbWMGa6zthFkoGiSN", - "symbol": "SAMSARIK", - "name": "Samsarik Capital", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/84magGbPmN5tjVyGYcPfVG93Eb3kbWMGa6zthFkoGiSN/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EE6DKELzAyPgH26Gqrh9zs14QvGrFYrXePBq2bEjpWgv", - "symbol": "MASH", - "name": "Mash Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mash111/Crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Aovr4TdVH6qtZHcv4og6CLqn7gjNYtmDRQULYZSTz1Qf", - "symbol": "AOVR", - "name": "ALLOVR", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/ALLOVRStudios/ovr-program/main/img/logo.png", - "tags": ["community-token"], - "extensions": { - "instagram": "https://www.instagram.com/allovr_protocol", - "twitter": "https://twitter.com/allovr_protocol", - "website": "https://www.allovr.io/" - } - }, - { - "chainId": 101, - "address": "5QEs2UzoefaSoCTDKaaQvce7BDyjQNaAGNs7twH3cVgP", - "symbol": "TTRYB-USDL", - "name": "Lagrange TTRYB-USDL LP", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/Lagrange-fi/Test-TRYB-logo/main/TTRYB.png", - "tags": ["stablecoin"] - }, - { - "chainId": 101, - "address": "89y8rchTsrNwMzDc4YT8iVtsU6wu6rsab9eLGKhictBK", - "symbol": "QGL", - "name": "GlobalQ", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/89y8rchTsrNwMzDc4YT8iVtsU6wu6rsab9eLGKhictBK/logo.png" - }, - { - "chainId": 101, - "address": "RockTZz2q1DoCSt3KDtgSSsDhR3Wi66oeWzNDzgmAXn", - "symbol": "ROCKT", - "name": "ROCKY", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/RockTZz2q1DoCSt3KDtgSSsDhR3Wi66oeWzNDzgmAXn/logo.png", - "tags": ["utility-token"], - "extensions": { - "facebook": "https://www.facebook.com/Crypto-Sport-104470991959649", - "instagram": "https://www.instagram.com/cryptosport_official/", - "linkedin": "https://www.linkedin.com/company/cryptosportconnection", - "twitter": "https://twitter.com/Go_CryptoSport", - "website": "https://Gocryptosport.com/" - } - }, - { - "chainId": 101, - "address": "rainH85N1vCoerCi4cQ3w6mCf7oYUdrsTFtFzpaRwjL", - "symbol": "RAIN", - "name": "Rain Token", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/rainH85N1vCoerCi4cQ3w6mCf7oYUdrsTFtFzpaRwjL/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://linktr.ee/degeneratetrashpandas", - "github": "https://github.com/raindrops-protocol/raindrops", - "twitter": "https://twitter.com/only_raindrops", - "website": "https://degentrashpandas.com/" - } - }, - { - "chainId": 101, - "address": "BUSHiaBPmXgtuQ69KGyv24UxZqJmQHzkVpQvUyC5EchZ", - "symbol": "Bush", - "name": "Bushido Society WL Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BUSHiaBPmXgtuQ69KGyv24UxZqJmQHzkVpQvUyC5EchZ/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/Bushido_Society", - "website": "https://bushidosociety.com/" - } - }, - { - "chainId": 101, - "address": "8sNjQ7xbBeNC44vyyb2Q66FaMPmv6sTsrD89y1KMdcST", - "symbol": "69MWL", - "name": "69MIKES Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ScarceProject/crypto/main/070C0720-F125-4539-8AFC-459EA9ECBA33.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/69MIKES_BREH" - } - }, - { - "chainId": 101, - "address": "GGKBRX7h9dZMn8BrwqmKuT43xFnk8C1vDoiRdNFUEkrM", - "symbol": "BREH", - "name": "Breh Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/ScarceProject/crypto/main/070C0720-F125-4539-8AFC-459EA9ECBA33.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/69MIKES_BREH" - } - }, - { - "chainId": 101, - "address": "3ptz14ZNtX5RGUkY5KQwnCYZ8zUtkZYcG6tGAEcrV2WY", - "symbol": "FUND", - "name": "Funky Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3ptz14ZNtX5RGUkY5KQwnCYZ8zUtkZYcG6tGAEcrV2WY/logo.png", - "tags": ["nfts"], - "extensions": { - "twitter": "https://twitter.com/FunkyDudesNFT", - "website": "https://funkydudes.netlify.app/" - } - }, - { - "chainId": 101, - "address": "DmF48xHb28GqoBY4NLVzcJr8H6qyRRArfDqx6rNruBGa", - "symbol": "MK", - "name": "Meta King", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/sol-9/crypto/main/ezgif.com-gif-maker.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4eLYNzEr1kTmMCECS1Tsmr9ETnouj29S9aqx6pABJmmC", - "symbol": "HoneyB", - "name": "HoneyB", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4eLYNzEr1kTmMCECS1Tsmr9ETnouj29S9aqx6pABJmmC/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Bear Universe", - "twitter": "https://twitter.com/bearuniversenft" - } - }, - { - "chainId": 101, - "address": "NeonTjSjsuo3rexg9o6vHuMXw62f9V7zvmu8M8Zut44", - "symbol": "NEON", - "name": "Neon EVM Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/NeonTjSjsuo3rexg9o6vHuMXw62f9V7zvmu8M8Zut44/neon_token.png", - "tags": ["utility-token", "neon-evm-token"], - "extensions": { - "discord": "https://discord.gg/ApZRBDqYcN", - "github": "https://github.com/neonlabsorg", - "twitter": "https://twitter.com/neonlabsorg", - "website": "https://neon-labs.org/", - "whitepaper": "https://neon-labs.org/Neon_EVM.pdf" - } - }, - { - "chainId": 102, - "address": "89dre8rZjLNft7HoupGiyxu3MNftR577ZYu8bHe2kK7g", - "symbol": "NEON", - "name": "Neon EVM Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/NeonTjSjsuo3rexg9o6vHuMXw62f9V7zvmu8M8Zut44/neon_token.png", - "tags": ["utility-token", "neon-evm-token"], - "extensions": { - "discord": "https://discord.gg/ApZRBDqYcN", - "github": "https://github.com/neonlabsorg", - "twitter": "https://twitter.com/neonlabsorg", - "website": "https://neon-labs.org/", - "whitepaper": "https://neon-labs.org/Neon_EVM.pdf" - } - }, - { - "chainId": 101, - "address": "3KGWxRhQfD4LquDeFf7xEkHtKhtMaVcPX8RSh5DoiwCq", - "symbol": "TORU", - "name": "Pizzatoru Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3KGWxRhQfD4LquDeFf7xEkHtKhtMaVcPX8RSh5DoiwCq/logo.png", - "tags": ["meme-token", "social-token"], - "extensions": { - "website": "https://sites.google.com/view/pizzatoru-coin" - } - }, - { - "chainId": 101, - "address": "33QF5or7ffqbvwGmuLidwimqZze4Cja5n2f8AH9VLUx9", - "symbol": "SQL", - "name": "Sheqel", - "decimals": 7, - "logoURI": "https://raw.githubusercontent.com/Chad-Mann/Sheqel/main/Sheqel-Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Sm5nWgKX4kB5jXhc3Y1Fjx4FfX2fKoxwPX9vq7Fjf2f", - "symbol": "LIM", - "name": "limine", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Alex000000000010/crypto-limine/main/logo.png", - "tags": ["utility-token", "limine", "legal-advice-online"], - "extensions": { - "website": "https://www.limine.be" - } - }, - { - "chainId": 101, - "address": "ECPAzxsa4VBALQ4kh4i9mtUdRTBRhGwrzu7Y2YqwZjsi", - "symbol": "BZT", - "name": "bZt by Electons", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ECPAzxsa4VBALQ4kh4i9mtUdRTBRhGwrzu7Y2YqwZjsi/logo.png", - "tags": ["social-token"], - "extensions": { - "discord": "https://discord.gg/electons", - "twitter": "https://twitter.com/electonsnft", - "website": "https://electons.io/" - } - }, - { - "chainId": 101, - "address": "BxufMweKEqMPgiq4m4ks3rLuoeTKdHe2FismdnGrbwHV", - "symbol": "YEAB", - "name": "YEAB COIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/HaftamuM/Image/main/Correction%20-%20Animal%20.png", - "tags": ["utility-token", "social-token"], - "extensions": { - "website": "https://mulubeti.com/" - } - }, - { - "chainId": 101, - "address": "B93MDnpP14eRZCcNQUYbH5XAQXmdSh3Uq7Y6ya8RVQtF", - "symbol": "BBST", - "name": "Black Beard Sociaty Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/adabag-pro/Crypton/main/logo_bbst.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7ZYheubMPjk53vMEmWV1Uiic73g1i12jv2UUbjVi5HYK", - "symbol": "ORBZ", - "name": "Planetarians - ORBZ", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7ZYheubMPjk53vMEmWV1Uiic73g1i12jv2UUbjVi5HYK/logo.png", - "tags": ["nfts"], - "extensions": { - "twitter": "https://twitter.com/planetariansnft", - "website": "https://planetarians.io/" - } - }, - { - "chainId": 101, - "address": "36EsmEsa5rp3VrZAzLna3UFDEBFihwjsRFciUTfoZ5Qt", - "symbol": "BORGS", - "name": "BotBorgs - DAO Utility Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/LinYu1992/BotBorg_DAO_Utility_Token/main/BotBorgDAOUtilityToken.png", - "tags": ["utility-token", "social-token"] - }, - { - "chainId": 101, - "address": "2Rg28iHdJ6QnZnWpRb6qYvqtvwCTQ6J3uVwJvi7LsAKG", - "symbol": "IVRY", - "name": "IVORY TOKEN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Rg28iHdJ6QnZnWpRb6qYvqtvwCTQ6J3uVwJvi7LsAKG/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "TdnwZyyXjwJxe21As5vjKKfJn9Y7mBeEuKLsHxAKvFV", - "symbol": "TheSaintsWL", - "name": "The Saints WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/ae5e93bde4feb14f033707e151870dcb7532ab4b/assets/mainnet/TdnwZyyXjwJxe21As5vjKKfJn9Y7mBeEuKLsHxAKvFV/logo.png", - "tags": ["wl-token"], - "extensions": { - "twitter": "https://twitter.com/thesaints_nft", - "website": "https://saintsnft.art" - } - }, - { - "chainId": 101, - "address": "EiThfHf6SMVEPoAds6BjoHu48ayUHRj8drZetG4NVdEn", - "symbol": "FMI", - "name": "FMI COIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/fmicoin/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "B7vkWNFo2aYcYddtwR8fvDwY1Uc54wHfdTXULjrX7KeL", - "symbol": "FOOD", - "name": "Foodcoin", - "decimals": 2, - "logoURI": "https://cdn.hngr.co/foodcoin-final.gif", - "extensions": { - "website": "https://gocaptain.com" - } - }, - { - "chainId": 101, - "address": "9qT2pfuVZYJisNQTfp1sa917e6t4mbi5Po9D3utwwKyj", - "symbol": "WCR", - "name": "RENDER", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/femolakarot/whitespaceNFT/main/Whitespace-Render-token-logo.png", - "tags": ["community-token", "utility-token", "NFT-Token"], - "extensions": { - "description": "The Whitespace Creatorverse native and governing token, stake creators to earn RENDER", - "discord": "https://discord.gg/u25c7PJdKz", - "instagram": "https://www.instagram.com/whitespace_creatorverse", - "twitter": "https://twitter.com/femolakarot", - "website": "https://whitespacenft.femolakarot.design/" - } - }, - { - "chainId": 101, - "address": "2XShUPcKwx7MFsx8kVXtd6dvoQq6dYxxJwAXWnTNChEr", - "symbol": "NC", - "name": "NobelConnect", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Lindon100/Crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DrdaGQsBnxUByKPqm3GFPnobW3FF3YNbKmvnLbjvK5v9", - "symbol": "MOSQUITOWARRIORS", - "name": "EARLY MINT TOKEN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DrdaGQsBnxUByKPqm3GFPnobW3FF3YNbKmvnLbjvK5v9/logo.png", - "extensions": { - "twitter": "https://twitter.com/mosquitowarrior" - } - }, - { - "chainId": 101, - "address": "imsoVR7F3p9KnmAXDB38EiSjYyLqkgQS8QWj4egsgDz", - "symbol": "IMSOMINT", - "name": "IMSO Mint Token", - "decimals": 0, - "logoURI": "https://arweave.net/N6Y8A1lf3uPfvfwLp_09GsU1Wj_VUvI4mrlHoW6Wlbw", - "tags": ["whitelist-token"], - "extensions": { - "discord": "https://discord.gg/w9StbG6Fsa", - "twitter": "https://twitter.com/IMSO_Game", - "website": "https://imsogame.com/", - "youtube": "https://www.youtube.com/playlist?list=PLJWpaLg65q8skSdffF2gDE9m5sbCwZWV8" - } - }, - { - "chainId": 101, - "address": "MiNAtFMGvaEAJft5VVnVyy5jZy1fBWVEDTuraMmth5P", - "symbol": "MINA", - "name": "Solmiantor Official WL token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/MiNAtFMGvaEAJft5VVnVyy5jZy1fBWVEDTuraMmth5P/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/SolminatorNFT", - "website": "https://www.solminator.com/" - } - }, - { - "chainId": 101, - "address": "DKEyAMNSVNdFCSUcunFJ4jn7TzZd8ec9Z4XUACaT37mG", - "symbol": "BattleWL", - "name": "Battle Drones Wave 2 WL Token", - "decimals": 0, - "logoURI": "https://battledrones.io/WL_token.png", - "tags": ["WL"], - "extensions": { - "discord": "https://discord.gg/jRz63Dsa3p", - "twitter": "https://twitter.com/BattleDronesNFT", - "website": "https://battledrones.io" - } - }, - { - "chainId": 101, - "address": "MoNKQxmf7jKLrrz695eRGD7z2z13YsLFJaqHM45vPFw", - "symbol": "MONK", - "name": "MonkVerse", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/MoNKQxmf7jKLrrz695eRGD7z2z13YsLFJaqHM45vPFw/logo.png", - "tags": ["nft-token"], - "extensions": { - "twitter": "https://twitter.com/monkversenfts" - } - }, - { - "chainId": 101, - "address": "BTuBJVKyD44arpZn5g49h1t9XmBnWWwrGZYkAPqKEJca", - "symbol": "MINTUS", - "name": "MintUS WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BTuBJVKyD44arpZn5g49h1t9XmBnWWwrGZYkAPqKEJca/logo.png", - "tags": ["wl-token"], - "extensions": { - "twitter": "https://twitter.com/onlymintus" - } - }, - { - "chainId": 101, - "address": "moaTKHdUBnQyCTUbaetkPek8tnQkZTN4Z4ALMTHgQr9", - "symbol": "MoAToken", - "name": "Ministry of Art - Mint Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/moaTKHdUBnQyCTUbaetkPek8tnQkZTN4Z4ALMTHgQr9/logo.png", - "tags": ["wl-token"], - "extensions": { - "twitter": "https://twitter.com/MinistryArt", - "website": "https://ministry.art/" - } - }, - { - "chainId": 101, - "address": "ETbxzGvuzVrCxVN7cNoT6QBEYwFLBwMUwSYX6pUdHyep", - "symbol": "sTZC", - "name": "Trezarcoin", - "decimals": 6, - "logoURI": "https://trezarcoin.com/wp-content/uploads/2018/02/TZC-1000x.png", - "tags": ["sTZC", "utility-token", "TZC-on-Sol"], - "extensions": { - "description": "sTZC is a bridged version of Trezarcoin on Solana", - "twitter": "https://twitter.com/Trezarcoin", - "website": "https://trezarcoin.com" - } - }, - { - "chainId": 101, - "address": "t1tkJghUxXFrpdzuMq114VjJ4aHgHZMftDMcZATHrmG", - "symbol": "DEAL", - "name": "IM THAT FAKE TOKEN SELLER", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/t1tkJghUxXFrpdzuMq114VjJ4aHgHZMftDMcZATHrmG/logo.png", - "tags": [ - "msg-me", - "in-Discord", - "SonicHASH9622", - "HASH-is", - "The-Symbol", - "I-want", - "to-make", - "A-DEAL" - ] - }, - { - "chainId": 101, - "address": "Fqd23hsmsyFeZWRzvN8WZUBKhSJFrxrjwVMu3TFM9Ygn", - "symbol": "MAKE", - "name": "CONTACTME SonicHASH9622", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Fqd23hsmsyFeZWRzvN8WZUBKhSJFrxrjwVMu3TFM9Ygn/logo.png", - "tags": [ - "msg-me", - "in-Discord", - "SonicHASH9622", - "HASH-is", - "The-Symbol", - "I-am", - "that-fake", - "token-seller" - ] - }, - { - "chainId": 101, - "address": "GgF2MBgxNSLJSyTLPnib3zpwFTtpdTmRfFhQ9mUuqdNm", - "symbol": "NQUACK", - "name": "NoiaDucks QUACK", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GgF2MBgxNSLJSyTLPnib3zpwFTtpdTmRfFhQ9mUuqdNm/logo.png", - "tags": ["NFT", "utility-token"], - "extensions": { - "discord": "https://discord.com/invite/aet4ZX9Ptp", - "serumV3Usdc": "GXnDRNRB3SeAKnAKAZX9WCE5LEvXpjUvFYyvmUsUQDUZ", - "twitter": "https://twitter.com/noiaducks" - } - }, - { - "chainId": 101, - "address": "GZP2TeKqbDfEbW398Y56up8eYaZyhW7UE4bAaPFdqtct", - "symbol": "SCW", - "name": "Sensible Coins Work", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GZP2TeKqbDfEbW398Y56up8eYaZyhW7UE4bAaPFdqtct/logo.png", - "tags": ["community-token", "social-token", "utility-token"], - "extensions": { - "facebook": "https://www.facebook.com/SensibleConcreteWorks", - "github": "https://github.com/SmartNET-works", - "instagram": "https://www.instagram.com/SensibleConcrete", - "linkedin": "https://www.linkedin.com/company/sensible-concrete-works-llc", - "twitter": "https://twitter.com/SensibleCompany" - } - }, - { - "chainId": 101, - "address": "Tokykm2subzeF9C3G5nqXds6YxpPeXEKkCD2Rt1jHKk", - "symbol": "SPWL", - "name": "Smug Pugs Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Tokykm2subzeF9C3G5nqXds6YxpPeXEKkCD2Rt1jHKk/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/thesmugpugs", - "website": "https://thesmugpugs.com" - } - }, - { - "chainId": 101, - "address": "ArN66gBHM6izxCSMEbtzHh5oYyvAgA2UKcjXmrnagj3k", - "symbol": "SKWL", - "name": "Synthtopia Key WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ArN66gBHM6izxCSMEbtzHh5oYyvAgA2UKcjXmrnagj3k/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "DHGdE3i9eSPq9ZGMJrr4Yxgn9aMBV5tWnZ6UmLQM6prC", - "symbol": "PLTC", - "name": "plateauCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/husainunwalla/plateaucoin/main/plateau.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9WgTVodnWjVTwDyp44cEgezKhPhexkJMv1d2MkmGJEWw", - "symbol": "TMP", - "name": "MXM Alpha Temp Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9WgTVodnWjVTwDyp44cEgezKhPhexkJMv1d2MkmGJEWw/logo.png", - "tags": ["GameFi", "Game"], - "extensions": { - "discord": "https://discord.com/invite/mixmob", - "twitter": "https://twitter.com/mixmoborigin", - "website": "https://www.mixmob.io/" - } - }, - { - "chainId": 101, - "address": "DbaNZcWN2UnRFmVXKPVc9ViqebN6jYn7JyexXctvAq5Z", - "symbol": "NEN", - "name": "NEN COIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jxliana/crypto/main/glow.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "D985jiWb7dSCAUNPrzfzzMjPYErDwQsBSvRoyQE2ZQLJ", - "symbol": "NYC", - "name": "New York Coin", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/LassePinga/PNG/main/logos/logo_NYC.png", - "tags": ["community-token", "utility-token"], - "extensions": { - "description": "New York Coin - Where dreams are made of!" - } - }, - { - "chainId": 101, - "address": "6YCVEZYNR452xf4AYDBDPAKbyDokGaqvFaJQGbdoGV6G", - "symbol": "BHH", - "name": "Broderson Hamburg", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/LassePinga/PNG/main/logos/logo_broderson_hh.png", - "tags": ["community-token", "utility-token"], - "extensions": { - "description": "Broderson Tattoos - Real life masterpieces. Digital artworks." - } - }, - { - "chainId": 101, - "address": "4b8GhzgAPExdcAHTzLppgD4aSqn3UVmJ9pwWTbx3jVT1", - "symbol": "RAYC", - "name": "Ray Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Dmitry-Raevsky/crypto/main/logo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7GeFDSxG5jLsRG7rjNd8hFKaVt49wJQt6tdPMENn41v9", - "symbol": "NOMNOM", - "name": "nomnom", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7GeFDSxG5jLsRG7rjNd8hFKaVt49wJQt6tdPMENn41v9/logo.png", - "tags": ["NFT", "utility-token"], - "extensions": { - "twitter": "https://twitter.com/SolanaShroomz", - "website": "https://www.solanashroomz.io/" - } - }, - { - "chainId": 101, - "address": "SMG8HtMAv1XrtcNW4C2TLoGau9BUrwmfgu6Gm8uyven", - "symbol": "SMG", - "name": "SLMAS INC", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SMG8HtMAv1XrtcNW4C2TLoGau9BUrwmfgu6Gm8uyven/logo.png", - "extensions": { - "twitter": "https://twitter.com/slmasinc", - "website": "https://slmas.co" - } - }, - { - "chainId": 101, - "address": "H2QCpfU42RB7KBouuxkyR4qD27UwPzLoTnCLvSPN2hh3", - "symbol": "ER", - "name": "Ernest Beyond", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/H2QCpfU42RB7KBouuxkyR4qD27UwPzLoTnCLvSPN2hh3/logo.png", - "tags": ["WL-token"] - }, - { - "chainId": 101, - "address": "AR2KqRonb6ZAspTAJbk2HwCZHgjbz8GL6ZpSA43QsYLo", - "symbol": "SS", - "name": "Storm", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AR2KqRonb6ZAspTAJbk2HwCZHgjbz8GL6ZpSA43QsYLo/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5AK5t6AqgfFNoMQAdxxaRETS2xyeEXekiiBWdcfAjm4p", - "symbol": "HH", - "name": "Hamburg Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/LassePinga/PNG/main/logos/logo_hh.png", - "tags": ["community-token", "utility-token"], - "extensions": { - "description": "Hansestadt Hamburg Token" - } - }, - { - "chainId": 101, - "address": "SH1f6At4pScGi42Xfp6tvf9eKirfMd5bi2oPmxdpUAF", - "symbol": "SH", - "name": "SmokeHeads WLtoken", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SH1f6At4pScGi42Xfp6tvf9eKirfMd5bi2oPmxdpUAF/logo.png" - }, - { - "chainId": 103, - "address": "2cpgKn9RtchCLYiXoU7NJasMWcKLYJndHsYBQjcrTjbp", - "symbol": "TOM", - "name": "Tomcoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2cpgKn9RtchCLYiXoU7NJasMWcKLYJndHsYBQjcrTjbp/siku-square.png" - }, - { - "chainId": 101, - "address": "G2HN9GyKjfkm89Gw1jG3kowfiaTaxvRkRMzrz5QWtwbF", - "symbol": "BTX", - "name": "Broderson Tattoo", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/LassePinga/PNG/main/logos/logo_broderson_tattoo.png", - "tags": ["community-token", "utility-token"], - "extensions": { - "description": "Broderson Tattoos - Real life masterpieces. Digital artworks." - } - }, - { - "chainId": 101, - "address": "57ccgdZuFf3ZuzSzuQrRA37dYWho72yK44zQb2NGC4E1", - "symbol": "SRN", - "name": "SerenaH", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/benorz/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "ExW7Yek3vsRJcapsdRKcxF9XRRS8zigLZ8nqqdqnWgQi", - "symbol": "unUSDC", - "name": "Unloc USDC", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ExW7Yek3vsRJcapsdRKcxF9XRRS8zigLZ8nqqdqnWgQi/logo.png", - "extensions": { - "twitter": "https://twitter.com/UnlocNFT", - "website": "https://unloc.xyz/" - } - }, - { - "chainId": 101, - "address": "9maUhqaoHnYWWfeqr16TTzP9ZH6DCb2FSHf8iF3HLyDh", - "symbol": "ZEST", - "name": "ZEST", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9maUhqaoHnYWWfeqr16TTzP9ZH6DCb2FSHf8iF3HLyDh/logo.png", - "tags": ["lp-token"], - "extensions": { - "description": "Juiced ZEST Token", - "discord": "https://discord.gg/ZXBRGXccR2", - "instagram": "https://www.instagram.com/juicedfi", - "linkedin": "https://www.linkedin.com/company/juicedfi", - "medium": "https://www.medium.com/@juicedfinance", - "twitter": "https://twitter.com/JuicedProtocol", - "website": "https://www.juiced.fi", - "whitepaper": "https://juiced.fi/whitepaper.pdf" - } - }, - { - "chainId": 101, - "address": "2KXuiuKwSxatUSN3bYG9i4Mg9T66PYBPAHvVDtiCfoLm", - "symbol": "MEN", - "name": "Mental Protocol", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/MentalProtocol/uploads/main/logo.png", - "tags": ["utility-token"], - "extensions": { - "instagram": "https://www.instagram.com/mentalprotocol", - "twitter": "https://twitter.com/mentalprotocol", - "website": "https://mentalprotocol.net/" - } - }, - { - "chainId": 101, - "address": "JCt4Uq9DnEfUiZ9yQ1ds5c3AnCq76pNHSxCWzLjKSvLJ", - "symbol": "ONYX", - "name": "Onyx Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/JCt4Uq9DnEfUiZ9yQ1ds5c3AnCq76pNHSxCWzLjKSvLJ/logo.png", - "tags": ["NFT", "utility-token"], - "extensions": { - "twitter": "https://twitter.com/Darkland_creat", - "website": "https://darklandcards.netlify.app/" - } - }, - { - "chainId": 101, - "address": "CGJUd4fXErst425116mVqffFhfmhVbi3YB4WT37DZeEy", - "symbol": "MISK", - "name": "MISK Radio", - "decimals": 9, - "logoURI": "https://imgur.com/dGGwaMj.jpeg", - "tags": ["community-token", "whitelist-token"], - "extensions": { - "animationUrl": "https://imgur.com/CWFVZxE.mp4", - "description": "Your number one Radio, Misk FM", - "imageUrl": "https://imgur.com/dGGwaMj.jpeg", - "website": "http://www.misk.art" - } - }, - { - "chainId": 101, - "address": "NodePBhXHVcHom1zekzY4o95EVGg8FtQ29M9pEb3AXJ", - "symbol": "NODE", - "name": "Node Monkeys Automation Tool Whitelist Token", - "decimals": 9, - "logoURI": "https://imagizer.imageshack.com/img922/6391/uKJaL7.png", - "tags": ["community-token", "whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/nodemonkeynft" - } - }, - { - "chainId": 101, - "address": "4UfwrRqbzjNZbXTKNbWwhScN29Dguj1BiBNwj6JqVsuH", - "symbol": "SHITZ", - "name": "The Shitz", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4UfwrRqbzjNZbXTKNbWwhScN29Dguj1BiBNwj6JqVsuH/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://theshitz.io" - } - }, - { - "chainId": 101, - "address": "7VvNMQQZxPXjK7ZJonXGZ8wK7pmkJJpPyuh1NyF3D33v", - "symbol": "ARABZZ", - "name": "ArabPunkz 3D Whitelist token", - "decimals": 9, - "logoURI": "https://imgur.com/k3MITax.png", - "tags": ["nft"], - "extensions": { - "animationUrl": "https://i.imgur.com/bJQjXLk.mp4", - "description": "ArabPunkz 3D Whitelist redeemable token", - "imageUrl": "https://arwave.art/upga5v2tzpnak1eqlq5kvc/upga5v2tzp.png", - "website": "https://arabpunkz.io" - } - }, - { - "chainId": 101, - "address": "DYorSUf2MBWCBwCHSqmqVXeNLxzNPRMcPZgzhgFZhCDq", - "symbol": "DYOR", - "name": "DYOR Nerds WL Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DYorSUf2MBWCBwCHSqmqVXeNLxzNPRMcPZgzhgFZhCDq/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/DYORNERDS" - } - }, - { - "chainId": 101, - "address": "73ZW3Fr5aPiZCwX3Qv9EoNdmBhoT6KVpvkZemHViB2af", - "symbol": "ALDC", - "name": "ALEDA Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/AlexDanielC/aledacoin/main/Logo.png", - "tags": ["social-token"], - "extensions": { - "description": "Hi! My name is Alex Daniel and that's my token! Nice to meet you! \u003c3" - } - }, - { - "chainId": 101, - "address": "FXzrgwqF2rHAEiwa9qs9cdWS9QMmACWXLqzrufQFYmFu", - "symbol": "TAMASHI", - "name": "Tamashi", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FXzrgwqF2rHAEiwa9qs9cdWS9QMmACWXLqzrufQFYmFu/logo.svg", - "tags": ["nfts", "utility-token"], - "extensions": { - "twitter": "https://twitter.com/TamashiSoulNFT", - "website": "https://tamashisoul.world" - } - }, - { - "chainId": 101, - "address": "6efabccMqpTQR9arTi4FsD778ieyY9tVKjbuTcrtc57T", - "symbol": "GRCC", - "name": "Grumpy Cup Coffee Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/samuelseeman/grumpy-cup-token/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Ribb7TpYFS1nwDskSEQ1i4nBJ5T5ZZnJTKHRzYVhwrC", - "symbol": "RIBBIT", - "name": "RIBBIT Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Ribb7TpYFS1nwDskSEQ1i4nBJ5T5ZZnJTKHRzYVhwrC/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/wGdfp6TJn9", - "twitter": "https://twitter.com/execdao" - } - }, - { - "chainId": 101, - "address": "6t8DKyndGyqnzP63iNU1zMKWrUfvRZo3iNxaeqhd9Q9b", - "symbol": "DEZN", - "name": "DeadCitizen", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6t8DKyndGyqnzP63iNU1zMKWrUfvRZo3iNxaeqhd9Q9b/logo.png", - "tags": ["community-token", "DeadCitizen-token"] - }, - { - "chainId": 101, - "address": "By4SeG9KufEAuBVU4T2wa9s6CfNCPh7YomdzzZAMZoLF", - "symbol": "RAWR", - "name": "RAWR Token", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/omer-demir/token-list/main/assets/mainnet/By4SeG9KufEAuBVU4T2wa9s6CfNCPh7YomdzzZAMZoLF/logo.png", - "extensions": { - "twitter": "https://twitter.com/metagonnft" - } - }, - { - "chainId": 101, - "address": "6qLB8HrouHjQPSAypBfDetAjF1uZJKQjtG7WfpT9Sz5k", - "symbol": "ARB", - "name": "Arbor", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/svb1995/crypto/main/Thank.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2EyAXWi1VKFQwBonEAAk6rhe17vvKC9GXMmAk6V27dVw", - "symbol": "DINOSIL", - "name": "Dino Silver", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/RolandPixeldust/PXCoin/main/Silver.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/mentalprotocol", - "website": "https://twitter.com/PixeldustNFT" - } - }, - { - "chainId": 101, - "address": "8v65mF5HJ5FGrxFoUX2L1uv26L87Cb3e1ikptji91FBJ", - "symbol": "ZTBI", - "name": "Zotobi Coin", - "decimals": 0, - "logoURI": "https://github.com/zotobicoin/token/raw/main/zotobi_coin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "F5W7UXQBFif6HgQmHRcZ4Tqz4xDAsbVpj2Qe6KTfRXSp", - "symbol": "1337", - "name": "Leet Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Peannut/token/main/logo.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "4UFiHL1FzUUQPpjsm1gpVDA9ENQQaB81WdvN4HYW24Pa", - "symbol": "INCOME", - "name": "INCOME", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/danielleonardomorales/incometoken/main/incometoken.png", - "tags": ["general"] - }, - { - "chainId": 101, - "address": "8APsy1a6xejoxnoRYFt99GNuhkFvwMtx4W1tXLPw71Sm", - "symbol": "TWC", - "name": "THE WOLF CLUB (TWC)", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/YBenji/crypto/main/TWCLOGO.png", - "tags": ["social-token", "staking"] - }, - { - "chainId": 101, - "address": "Frog3s4ZRPDonJExV2Yw2MgtF7vXMf1f8fx85WM6BV8h", - "symbol": "SFWL", - "name": "The Stoned Frogs WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Frog3s4ZRPDonJExV2Yw2MgtF7vXMf1f8fx85WM6BV8h/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/TheStonedFrogs", - "website": "https://www.thestonedfrogs.io/" - } - }, - { - "chainId": 101, - "address": "6QSQ28juyiV5bkQ19AttaLPidtGDZbSKPbM2GrvRAAQA", - "symbol": "THEA", - "name": "Theadex", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6QSQ28juyiV5bkQ19AttaLPidtGDZbSKPbM2GrvRAAQA/theadex_logo.png", - "tags": ["social-token", "community-token", "DeFi"], - "extensions": { - "twitter": "https://twitter.com/theadex2", - "website": "http://theadex.io" - } - }, - { - "chainId": 101, - "address": "DBTGhXu22musU5cCMbfx8XaZxgJJHZANK9RRSUE3KMUx", - "symbol": "ADAL", - "name": "Ahmadali Jamali", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/AhmadAJamali/Crypto/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ATBuXLdQ7GtFtKUsnT7nBSWfS9ZsStzn5d2UhGsQbAfT", - "symbol": "TMS", - "name": "Track Master", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/trackmastersteve/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "MoRPDFt2wSNBWfS7f3Pch3gehCUFyouLNCqLMQhJUh4", - "symbol": "MORP", - "name": "Morpheus", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/MoRPDFt2wSNBWfS7f3Pch3gehCUFyouLNCqLMQhJUh4/logo.png" - }, - { - "chainId": 101, - "address": "4PJHvHRL44uPEf44LPV6PvwUBMRiKeq5BiLro7ycSAFX", - "symbol": "SecT", - "name": "Security Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/CrashedNetwork/-ecurity-Token/main/BGC_ccexpress.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "3fMN5za4iMmatXCeeWpVSjWDurvFGnNRdZFqTwYc2h8U", - "symbol": "YDI", - "name": "You Deserve It", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/MrBrewster1970/YDI-Token/main/logo.png", - "tags": [ - "metaverse", - "virtual-real-estate", - "utility-token", - "community-token", - "play-to-earn" - ] - }, - { - "chainId": 101, - "address": "FBCp6ST2R2z7W9fe6xuU9sKPrFDe5cXBuZgjRaYCNssq", - "symbol": "BPC", - "name": "Black Penny", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/banton84/Black-Penny/main/logo.png.png", - "tags": ["Social-Token", "collectible-token"] - }, - { - "chainId": 101, - "address": "A3LhReqJgCZPsYXiuRqap23JoLaTHyXzFnWFywe3MF2q", - "symbol": "HAKUJ", - "name": "Hakuj COIN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/akgbar/hakujtoken/main/logo.png", - "tags": ["social-token", "community-token", "DeFi"], - "extensions": { - "twitter": "https://twitter.com/bariskgz" - } - }, - { - "chainId": 101, - "address": "EG1gutpWC9Y9KhpJe83x435Ho5p2spp1fkdHBUHg6uU2", - "symbol": "RAC", - "name": "Retro Arcade Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/RetroArcade-project/token/main/Nuevo%20proyecto.png", - "tags": ["Bet-token", "collectible-token"] - }, - { - "chainId": 101, - "address": "8KoC6B7ekXKCEucie7skdH3TePx2ja3WeB14bFJKaahX", - "symbol": "SNECK", - "name": "PussyCets Sneck", - "decimals": 6, - "logoURI": "https://user-images.githubusercontent.com/93284817/163309826-ae6df615-bbe7-4d24-a522-77414c27e0a4.PNG", - "tags": ["Social-Token", "collectible-token"] - }, - { - "chainId": 101, - "address": "9F6STwpygJj3u5afZ15Cr522MFamqbkNJLa7iamW681D", - "symbol": "CWCV", - "name": "CowCave", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/cowanmd/cowcave/main/IMG_0103.PNG", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "3Lsr3Am1GZK9NpFMBWXqrAUBPpNb5HGGLVTA8Tjq9m4y", - "symbol": "H2O", - "name": "H2O Token", - "decimals": 0, - "logoURI": "https://cdn.jsdelivr.net/gh/1111-1993/H2O/vlcsnap-error289.png", - "tags": ["Life-token"], - "extensions": { - "discord": "https://discord.gg/NhX5EzH4" - } - }, - { - "chainId": 101, - "address": "DKZDN1QM7ZGBfUZhQFPo233ccBxumjLGzFqKvMV43dzH", - "symbol": "ANONY", - "name": "Anonymous Koin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/tatikondarahul2001/Crypto_coin/main/logo.png", - "tags": ["social-token", "collectible-token"] - }, - { - "chainId": 101, - "address": "7AfuD3nqZEJSF7oaQgEPmeo7zJi1n8Dh7BedYtgRugFk", - "symbol": "July22ppUSDC", - "name": "Port Finance 2022 July Principal USDC", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FgSsGV8GByPaMERxeQJPvZRZHf7zCBhrdYtztKorJS58/USDC.svg", - "tags": ["port", "lending", "principal-tokens"], - "extensions": { - "website": "https://port.finance" - } - }, - { - "chainId": 101, - "address": "4Fo8dh9kHn7WGxPy3MdhaBXLjY5DYStbRPwZudCTo5W4", - "symbol": "July22pyUSDC", - "name": "Port Finance 2022 July Yield USDC", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FgSsGV8GByPaMERxeQJPvZRZHf7zCBhrdYtztKorJS58/USDC.svg", - "tags": ["port", "lending", "yield-tokens"], - "extensions": { - "website": "https://port.finance" - } - }, - { - "chainId": 101, - "address": "ExzjFVA1WEKEx7cmavaGkNs1zKLcHWyfsumQqAq381b9", - "symbol": "ADTVS", - "name": "Adagio TVs WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ExzjFVA1WEKEx7cmavaGkNs1zKLcHWyfsumQqAq381b9/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/Adagio_TVs" - } - }, - { - "chainId": 101, - "address": "2UhohwrJgZfjH9yRuU32fxVoZG1v9n1aYxPqUGWCR5da", - "symbol": "JCEC", - "name": "JapssCrew Entertainments Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/ajubajukajoo/assets/main/JCEToken.png", - "tags": ["social-token"], - "extensions": { - "website": "http://japsscrew.rf.gd" - } - }, - { - "chainId": 101, - "address": "GuGhzXWo6ut5m7H1Mng2tYsWde65TqXxeV5HXYJmoSaT", - "symbol": "CSL", - "name": "CryptoSportsLottery", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/chrisjonssil/clst/main/logo.png", - "tags": ["sports-token"] - }, - { - "chainId": 101, - "address": "eRkvH2Q8jtfuJMrCX7mDjcNPBix7xPXGpufypY66fyx", - "symbol": "BOGWL", - "name": "Birth of Galaxy WL token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/eRkvH2Q8jtfuJMrCX7mDjcNPBix7xPXGpufypY66fyx/icon.png" - }, - { - "chainId": 103, - "address": "89y8rchTsrNwMzDc4YT8iVtsU6wu6rsab9eLGKhictBK", - "symbol": "QGL", - "name": "GlobalQ", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/89y8rchTsrNwMzDc4YT8iVtsU6wu6rsab9eLGKhictBK/logo.png" - }, - { - "chainId": 103, - "address": "BXkV5Wn1wJKAYrUZtMj1B4NAGgG983SX8iY8n5qwR6nE", - "symbol": "TINY-DEV", - "name": "TinyBits (devnet)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BXkV5Wn1wJKAYrUZtMj1B4NAGgG983SX8iY8n5qwR6nE/logo.png", - "tags": ["devnet"], - "extensions": { - "coingeckoId": "tiny-colony", - "description": "An expansive pixelated ecosystem on the Solana Blockchain.", - "discord": "https://discord.gg/AT9caAbY", - "github": "https://github.com/TinyColonyGame", - "instagram": "https://www.instagram.com/tinycolonygame", - "medium": "https://medium.com/@TinyColonyGame", - "twitter": "https://twitter.com/TinyColonyGame", - "website": "http://tinycolony.io/" - } - }, - { - "chainId": 101, - "address": "RMWLNGZ3aujqFnCE2LYLeRFixxKNuudN4ZrdYnQs8FD", - "symbol": "RMWL", - "name": "Rag a Muffin WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/RMWLNGZ3aujqFnCE2LYLeRFixxKNuudN4ZrdYnQs8FD/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/ragamuffinsbw" - } - }, - { - "chainId": 101, - "address": "KidSCfch9MD1zB12s1UmmviXKDZqFEqJEEGuTMiKNFt", - "symbol": "KIDS", - "name": "Carton Kids Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/KidSCfch9MD1zB12s1UmmviXKDZqFEqJEEGuTMiKNFt/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/CartonkidsNFT" - } - }, - { - "chainId": 101, - "address": "SnapRSXpdqwuX3YFvQgUoZBDKyY5idv1SRMREh2CcHf", - "symbol": "SS", - "name": "Snapshots Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SnapRSXpdqwuX3YFvQgUoZBDKyY5idv1SRMREh2CcHf/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/SnapShotsNFT" - } - }, - { - "chainId": 101, - "address": "ZenjaZLnm7kj6NMD4YcZBJdqzEETN5UjrZfbHdoKWEe", - "symbol": "ZENJ", - "name": "Zenjin Viperz Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ZenjaZLnm7kj6NMD4YcZBJdqzEETN5UjrZfbHdoKWEe/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/ZenjinViperz" - } - }, - { - "chainId": 101, - "address": "orcs67sQW9EHAJqw6ZYHZwbHCY8j7zm4VGc3WUSduUX", - "symbol": "ORCS", - "name": "The Orcs Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/orcs67sQW9EHAJqw6ZYHZwbHCY8j7zm4VGc3WUSduUX/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/TheOrcsNFT", - "website": "https://theorcs.io" - } - }, - { - "chainId": 101, - "address": "4h4LvS6NsVjZ87uBwrYyTeppTm1ii5PtRN9A6Ld2kZjw", - "symbol": "$FLY", - "name": "StayFly", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4h4LvS6NsVjZ87uBwrYyTeppTm1ii5PtRN9A6Ld2kZjw/logo.png", - "tags": ["utility-token", "community-token", "merchandise-token"], - "extensions": { - "twitter": "https://twitter.com/EaglezSOL" - } - }, - { - "chainId": 103, - "address": "9Qi5wVDWRAtcnb9u8h9ERT2qSdtkMjj8iJycfJuTdJJ5", - "symbol": "AYK", - "name": "Aayush1234", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/BlockchainTeamThoughtWin/cropto-solana-logo/main/my_new_logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7mUBE2BnPGS7oxhkCFz7GKFsREB1XfoF73ngryiyDwNG", - "symbol": "HENTAI", - "name": "HENTAI COIN", - "decimals": 9, - "logoURI": "https://github.com/Hentai-Genesis/fav/blob/main/h.png", - "tags": ["currency"], - "extensions": { - "twitter": "https://twitter.com/smolhentai", - "website": "https://hentai.lol/" - } - }, - { - "chainId": 101, - "address": "HLVa5jbEhAtN8sgvoeSvP7zZCjxVzd2nhfUD15cKXFv5", - "symbol": "DROPS", - "name": "Drops", - "decimals": 0, - "logoURI": "https://github.com/Capetownsun/sunny/blob/main/rainbow-drop.png?raw=true", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CRmGfCvD3s43v2X6dGMmA9XVCMXy8jacKGQ6H451afgd", - "symbol": "HVEWL", - "name": "Heaven Dragons Empire Collection", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CRmGfCvD3s43v2X6dGMmA9XVCMXy8jacKGQ6H451afgd/logo.png" - }, - { - "chainId": 101, - "address": "FKebt4KYkV5K6gjn2DNHfoNyhFarThHu2SxrKRFtjgF4", - "symbol": "RLW", - "name": "RLW Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Jkei-dev/crypto-rlw/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5LL1vedTP55UGkGF1x6ZRbefPHANveYpvqF18QSwKx2e", - "symbol": "$RAWR", - "name": "RAWR Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5LL1vedTP55UGkGF1x6ZRbefPHANveYpvqF18QSwKx2e/logo.png", - "tags": ["nft", "game-token", "utility-token"], - "extensions": { - "twitter": "https://twitter.com/metagonnft" - } - }, - { - "chainId": 101, - "address": "EVjuFPAQTLWdLnqFt7JPs7nEbqcqnG7ZFELSACn57Xzi", - "symbol": "KRNS", - "name": "KARENS", - "decimals": 0, - "logoURI": "https://github.com/DiscoK1aus/crypto/blob/main/karenlogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "K1Lm4h2eHqeZySJSmSA166kJj7j9s36nSaGgFJzhDnc", - "symbol": "KITS", - "name": "Kitsune Token", - "decimals": 3, - "logoURI": "https://media.discordapp.net/attachments/926535226820276264/964138793315758150/unknown.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HxgAGBTLCeemm4TVqvYSebpUanJKzuztXTHdhuCt4W2i", - "symbol": "$FLUFF", - "name": "FLUFF TOKEN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/furrsols/assets/main/FLUFF.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/Furr_Sols", - "website": "https://furrsols.io/" - } - }, - { - "chainId": 101, - "address": "BEEs2KkXbdF5NxTtAN8pM6qthLGapc7vACcA8oCXoYgU", - "symbol": "BEE", - "name": "Bee Honey", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BEEs2KkXbdF5NxTtAN8pM6qthLGapc7vACcA8oCXoYgU/logo.png", - "extensions": { - "twitter": "https://twitter.com/Businessbeesc" - } - }, - { - "chainId": 101, - "address": "3UQEUUQBatrGkaQSVWNgHGUcATWYgeTF5QBr5Bnazaaa", - "symbol": "SLPLSS", - "name": "Sleepless Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3UQEUUQBatrGkaQSVWNgHGUcATWYgeTF5QBr5Bnazaaa/logo.png", - "extensions": { - "twitter": "https://twitter.com/sleepless_sols", - "website": "https://www.sleeplesssols.com/" - } - }, - { - "chainId": 101, - "address": "CsN3FctQpFeCqKGBkP5mXLdFcpud515v9WQrfWtNatnH", - "symbol": "ITNW", - "name": "InfoTech Northwest", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Jakethel/Crypto/main/infotechnorthwest.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4xFVXVK8Hy28MbF1rKGAU4F3sVLbMmzh63wQJeM8k9NW", - "symbol": "BANG", - "name": "Bangsta Bear", - "decimals": 9, - "logoURI": "https://github.com/ArthurPaivaT/token-list/blob/main/assets/mainnet/4xFVXVK8Hy28MbF1rKGAU4F3sVLbMmzh63wQJeM8k9NW/logo.png?raw=true" - }, - { - "chainId": 101, - "address": "2dVULCNYvpAeJv4N8SmB2EgxLefawp3QvPcSgSujfj1Q", - "symbol": "NMW", - "name": "NMW Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SAVE2014/crypto/main/logo.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "DBLihAKJbDvidBxVXvbf2SnqYCo9B2sRdPQM5iBk9eRG", - "symbol": "NKT", - "name": "NOKI Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DBLihAKJbDvidBxVXvbf2SnqYCo9B2sRdPQM5iBk9eRG/logo.png", - "tags": ["stablecoin", "asset"], - "extensions": { - "website": "https://www.noki-noki.cg/" - } - }, - { - "chainId": 101, - "address": "BEARSAfSsUmgZNngSeX9CcmLXnSXhdvyVh21Ch1JkCN4", - "symbol": "OBWL", - "name": "OKAY BEARS-WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BEARSAfSsUmgZNngSeX9CcmLXnSXhdvyVh21Ch1JkCN4/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/okaybears", - "website": "https://okaybears.com" - } - }, - { - "chainId": 101, - "address": "Ahiss7vnLA3JZW76TNLkHMHA8FKytdfMnQ5GzEwTt3Ed", - "symbol": "AHI", - "name": "Ahi Token", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/ahiphoenixnft/crypto/main/logo.ahi.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "EVERsR6LBAFAiJQ7x53aXSA9kenwvNqWvcmr2LSzqXB6", - "symbol": "Ever", - "name": "EverSeed WL Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EVERsR6LBAFAiJQ7x53aXSA9kenwvNqWvcmr2LSzqXB6/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/playeverseed", - "website": "https://everseed.com/" - } - }, - { - "chainId": 101, - "address": "7YnPgaCvBjMvkmyzWSFUrdrooxPxyFSTCePQEg7AkTNZ", - "symbol": "ASSET", - "name": "Real Estate Game", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/RealEstateGame/crypto/main/coinREG_001.png", - "tags": [ - "Social-Token", - "Realestate-Token", - "Land-Token", - "Metaverse-Token", - "Asset-Token", - "Property-Token", - "collectible-token" - ], - "extensions": { - "twitter": "https://twitter.com/realestategame_" - } - }, - { - "chainId": 101, - "address": "4wMR7a4WocQsVdQ47B5hk246c5omx8Wh258TYDvf5v38", - "symbol": "AST", - "name": "Awesome Sales Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/AlexAaron1/Crypto/main/Screen%20Shot%202022-04-14%20at%2012.58.20%20PM.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/okaybears", - "website": "https://okaybears.com" - } - }, - { - "chainId": 101, - "address": "oneiPVVdLSKMAyntNFPq48m4z5B9NQNoHZ3xb1ERUD8", - "symbol": "ONEIRA", - "name": "Oneira Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/oneiPVVdLSKMAyntNFPq48m4z5B9NQNoHZ3xb1ERUD8/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/oneira__" - } - }, - { - "chainId": 101, - "address": "6aJhpKmMpWCRw7vFLc5xxC1fJZGKXZspT5Lxjz5PnWtB", - "symbol": "SOLARIUM", - "name": "AGE of SAM token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/3magine/aos-assets/main/coin_small.png", - "tags": [ - "utility-token", - "community-coin", - "game-token", - "NFT", - "age-of-sam" - ], - "extensions": { - "discord": "https://discord.gg/ageofsam", - "twitter": "https://twitter.com/ageofsamnft", - "website": "https://ageofsam.io/" - } - }, - { - "chainId": 101, - "address": "Ehbfbo2eYQYcaPeLK7LHN3gZeXfjBQyKopxTQCCKot4i", - "symbol": "TETO", - "name": "Poteto", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Ehbfbo2eYQYcaPeLK7LHN3gZeXfjBQyKopxTQCCKot4i/logo.svg", - "tags": ["utility-token", "community-token"], - "extensions": { - "discord": "https://discord.gg/degendojonft", - "twitter": "https://twitter.com/DegenDojoNFT" - } - }, - { - "chainId": 101, - "address": "NPCXwv7ag5cFcc4mXnEzCzrsFdCeZLqHx8AXM7W6gPr", - "symbol": "NPC", - "name": "NPC Club", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/NPCXwv7ag5cFcc4mXnEzCzrsFdCeZLqHx8AXM7W6gPr/logo.png" - }, - { - "chainId": 101, - "address": "LmbrE6H5LYZUVyFLMTURxxT1bCgBKit3LY2nNg8qVFg", - "symbol": "LMBR", - "name": "Warville Lumber", - "decimals": 6, - "logoURI": "https://asset.warville.io/token/lmbr.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/warvillenft", - "website": "https://warville.io/" - } - }, - { - "chainId": 101, - "address": "DmndK8QHnrqmXrCF4vaG6LZuw18wout7GP9VkZwdojKo", - "symbol": "DMND", - "name": "Warville Diamond", - "decimals": 6, - "logoURI": "https://asset.warville.io/token/dmnd.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/warvillenft", - "website": "https://warville.io/" - } - }, - { - "chainId": 101, - "address": "Food84YUTGWXd2DfYDkDKYRHm64pMe3dcowJkhfFvfmw", - "symbol": "FOOD", - "name": "Warville Food", - "decimals": 6, - "logoURI": "https://asset.warville.io/token/food.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/warvillenft", - "website": "https://warville.io/" - } - }, - { - "chainId": 101, - "address": "8Bm4VdNS9juAtaZVTddgaBbchppDd7M7rerxTVNz5iVv", - "symbol": "GRAM", - "name": "Anagram", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8Bm4VdNS9juAtaZVTddgaBbchppDd7M7rerxTVNz5iVv/logo.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/anagramgg", - "website": "https://anagram.gg" - } - }, - { - "chainId": 101, - "address": "8psN3FhC8FJAD37bRPMNLAYD9PXJnA8zozBn2AfFEoih", - "symbol": "NEOME", - "name": "NEOME-com Power to the People", - "decimals": 9, - "logoURI": "https://neome.com/token/logo.png", - "tags": ["community-token", "meme-token"], - "extensions": { - "website": "https://www.neome.com" - } - }, - { - "chainId": 101, - "address": "66EvNhcyyYLBtpLZhCF8pddqzVhKLrVincYiiQw8pCaT", - "symbol": "OP", - "name": "Oneiron Coin", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/66EvNhcyyYLBtpLZhCF8pddqzVhKLrVincYiiQw8pCaT/One.png", - "tags": ["gaming-token"], - "extensions": { - "twitter": "https://twitter.com/oneironproject", - "website": "http://www.oneironproject.com" - } - }, - { - "chainId": 101, - "address": "wDUsRqqnWQSoanYECLT1PTGvj17WzHwQeujWug6gDb8", - "symbol": "JSTBZ", - "name": "JustBaze", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/justbaze/crypto/main/JustBazeCoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "yHxDCKFCPh3HvXYkENDpA4nSG49Z9ioNrZLZQUwN6W2", - "symbol": "KUD", - "name": "Kudos", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SecRocker/Crypto/main/Kudo.PNG", - "tags": ["Social-token"] - }, - { - "chainId": 101, - "address": "Ejk5n6TTb8FsH7UAFu7u4oLT5QfYJ1WgiCfdgzTyVcge", - "symbol": "JOES", - "name": "Joes Fat Stacks", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/jlmcm/JoesFatStacks/main/joefs.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "MPRp3T7VewfykhrJTD7end3hNgox5eAuBqoQ1VQjVwb", - "symbol": "PCC", - "name": "Pup Club Card Mint", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/metapupsclub/pupcard/main/logo.png" - }, - { - "chainId": 101, - "address": "GKJcQCPuaW6xvkRR6EnRHKP7LGWFYCVCjzLGjoimouTY", - "symbol": "HEN", - "name": "HEN COIN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GKJcQCPuaW6xvkRR6EnRHKP7LGWFYCVCjzLGjoimouTY/102912813.png", - "tags": ["currency"], - "extensions": { - "twitter": "https://twitter.com/smolhentai", - "website": "https://hentai.lol/" - } - }, - { - "chainId": 101, - "address": "woTu6cugnrEw6tZqePeXrHGbSJJVsBdHgmQwxTER4R3", - "symbol": "BUM", - "name": "Beach Bum Billionaires", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/cpwall88/bum/main/logoo.png", - "tags": ["Defi"] - }, - { - "chainId": 101, - "address": "BV2X5dpGqeCrFq4M3h64JsZEqv3Z6snaxkPTmeDhNnD2", - "symbol": "GBT", - "name": "Gunnar Beer Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/LassePinga/PNG/main/logos/gunnar_beer.png", - "tags": ["community-token", "utility-token"], - "extensions": { - "description": "Gunnar San Beer Token!" - } - }, - { - "chainId": 101, - "address": "3JAtXbi3CZnEVctrwg9w8TWcpw7gtnCZTira33ddGiXg", - "symbol": "FACE", - "name": "FACELEZZ TOKEN", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/facelezz/logo/main/facelogo.png", - "tags": ["nft", "community-token"], - "extensions": { - "twitter": "https://twitter.com/FacelezzNFT", - "website": "https://facelezz.xyz/" - } - }, - { - "chainId": 101, - "address": "sgsgy4H7TQ5PaSkYPVG7YbU21vnHWQtzwGZf5ftpb5b", - "symbol": "SGSWL", - "name": "SGS WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/sgsgy4H7TQ5PaSkYPVG7YbU21vnHWQtzwGZf5ftpb5b/logo.png", - "tags": ["wl-token"], - "extensions": { - "twitter": "https://twitter.com/SGSociety_", - "website": "https://mint.sneakygiraffesociety.com/" - } - }, - { - "chainId": 101, - "address": "2TWDSoX19ueT8p5HTwKKxBUVn7Y8BisVWZHw3mHYWqgz", - "symbol": "THC", - "name": "TheHighCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2TWDSoX19ueT8p5HTwKKxBUVn7Y8BisVWZHw3mHYWqgz/thc.png", - "tags": ["utility-token", "community-token"] - }, - { - "chainId": 101, - "address": "WL18mMeknGmb53BWMU6DYCTCBRLpVXbo8yUSFRGXR46", - "symbol": "SGYC", - "name": "Skeleton graveyard WL token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WL18mMeknGmb53BWMU6DYCTCBRLpVXbo8yUSFRGXR46/logo.png", - "extensions": { - "twitter": "https://twitter.com/SkeletonGraveYC" - } - }, - { - "chainId": 101, - "address": "AMMCAXk5jt5evNb4PR9KprfxhaM2Tbe2ym45L6cjxcEw", - "symbol": "NUDI", - "name": "NUDI Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/divewithgee/nudibranch/main/a.jpg", - "tags": ["utility-token", "community-token"] - }, - { - "chainId": 101, - "address": "MArBPDtkLMb5g2964mx3hjRfTCd3ZeGPVZGpjWp7pWL", - "symbol": "MRPRBPS2", - "name": "MiniRoyale S2 Premium BP", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/MArBPDtkLMb5g2964mx3hjRfTCd3ZeGPVZGpjWp7pWL/logo.png", - "tags": ["game-token", "utility-token"], - "extensions": { - "discord": "https://discord.gg/miniroyale", - "twitter": "https://twitter.com/MiniNations", - "website": "https://miniroyale.io/" - } - }, - { - "chainId": 103, - "address": "MArBPDtkLMb5g2964mx3hjRfTCd3ZeGPVZGpjWp7pWL", - "symbol": "MRPRBPS2", - "name": "MiniRoyale S2 Premium BP", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/MArBPDtkLMb5g2964mx3hjRfTCd3ZeGPVZGpjWp7pWL/logo.png", - "tags": ["game-token", "utility-token"], - "extensions": { - "discord": "https://discord.gg/miniroyale", - "twitter": "https://twitter.com/MiniNations", - "website": "https://miniroyale.io/" - } - }, - { - "chainId": 101, - "address": "AQpdnoFZKykAdEBNPBie6EshNrcoPiHrqVX2FBmUqLV7", - "symbol": "COFFM", - "name": "Coffee-maker", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AQpdnoFZKykAdEBNPBie6EshNrcoPiHrqVX2FBmUqLV7/logo.png", - "tags": ["util-token"] - }, - { - "chainId": 101, - "address": "GXnw9YSt6DANCt84Ti6ZpbaXvrvuEJFCYqrDjygnq4R8", - "symbol": "ATC", - "name": "ARTICOIN", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/mum33n/atc-logo/main/LOGO%20(256).png", - "tags": ["utility-token", "community-token"], - "extensions": { - "discord": "https://discord.gg/36sYxUUpKn", - "twitter": "https://twitter.com/Articoin1", - "website": "https://atcsolana.com/" - } - }, - { - "chainId": 103, - "address": "9r81b1d2KEtcrwmZr9TnNA8xpCciEWk4UJxbwaAzMfYe", - "symbol": "HRFX", - "name": "Hyper Fenix", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/HyperFenix/HyperFenix/main/assets/Logo.png", - "tags": ["community-token", "utility-token"], - "extensions": { - "description": "Mobile cryptocurrency", - "telegram": "https://t.me/hyperfenix", - "website": "https://www.hyperfenix.netsons.org/" - } - }, - { - "chainId": 101, - "address": "4c1Kajn2GDAR7McHfLBWGqRJSEy5ee2MVQTi77DuSqm6", - "symbol": "SRCN", - "name": "SaberCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/TTVSaber3000/Crypto/main/original_11zon.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HSW1S6xPNR2RXAJKBF6BCSQkoSoLomfm7DVvwydQR2qP", - "symbol": "SWRD", - "name": "Sword", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/muzammilkhattri/crypto/main/logo.png", - "tags": ["community-token", "utility-token"], - "extensions": { - "website": "https://www.dariusdao.com/" - } - }, - { - "chainId": 101, - "address": "4oog3cJgry8qrX2KK4nkbq2jZD3vcCmdwpoFykC2fcDW", - "symbol": "milox", - "name": "MiloX Token", - "decimals": 9, - "logoURI": "https://github.com/miloxOne/miloxtoken/blob/main/miloxpurple.png", - "tags": ["Community-token", "utility-token", "Social-token"] - }, - { - "chainId": 101, - "address": "FFTKNbF95yW764GFKS28wYZETMtQvLPCbEzmEjfpGNkq", - "symbol": "FRENCHIE", - "name": "Frenchie Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FFTKNbF95yW764GFKS28wYZETMtQvLPCbEzmEjfpGNkq/logo.png", - "tags": ["utility-token", "NFT"], - "extensions": { - "discord": "https://discord.com/invite/wqfc7xXHf6", - "twitter": "https://twitter.com/fancyfrenchnft" - } - }, - { - "chainId": 101, - "address": "2D2oVygEnGoWrqZVaDvPNPV1iXzJP8NDZ16K2G7Nct9E", - "symbol": "cyberbabychimps", - "name": "Cyber chimp Babies Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/CyberChimpsnft/chimpstoken/main/token/unknown%20(2).png", - "tags": ["utility-token", "NFT"], - "extensions": { - "discord": "https://discord.com/invite/wqfc7xXHf6", - "twitter": "https://twitter.com/fancyfrenchnft" - } - }, - { - "chainId": 101, - "address": "S5VeynSoQZtHN3kN8RxsbD87gXgfFjLCUYK2xGiaLee", - "symbol": "CJC", - "name": "CJCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mentales2005/CJCoin/main/CJCoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9BkVkR8Ff1mCnxVFmvYgqLooifC8ZUWWkxU6JWz5JK3f", - "symbol": "PRSPR", - "name": "Prosperity Coin", - "decimals": 0, - "logoURI": "https://github.com/prosperitycrypto/prosperitycoin/blob/main/PRSPR.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "MFP66DGQUp8D4LmgYb6W93Du5XHA4ctzVwmTHkYZQwL", - "symbol": "MFP", - "name": "Mindfolk Pirates Whitelist Token", - "decimals": 9, - "logoURI": "https://imagizer.imageshack.com/img924/1131/e5Ubet.png", - "tags": ["community-token", "whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/mindfolkart", - "website": "https://www.mindfolk.art/" - } - }, - { - "chainId": 101, - "address": "FQtkv5hb7irYUqB6429XLSVfkZD1Kp595xP7jZQQKT2u", - "symbol": "FPCT", - "name": "FINGERPRINT CIRCUS TOKEN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/TerraFirma1/crypto/main/fpct-logo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "49AiDWZ1GU2SHuXoiNPVJrW1MN76zFZBNvqud8yoRuCk", - "symbol": "YATR", - "name": "Yatr", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/YatterOfficial/YATR-Crypto/main/logo.png", - "tags": ["Yatr", "yatter", "You-At-A-Resource", "Yatr-App-Token"] - }, - { - "chainId": 101, - "address": "EHj9iUmUrQ5bybEernUPpULfPa1YKkrRArGHckYreRkg", - "symbol": "FTRZ", - "name": "Fighterz", - "decimals": 4, - "logoURI": "https://solaboy.github.io/images/fighterz.png", - "tags": ["gaming", "utility-token", "solana"], - "extensions": { - "description": "$FTRZ is the official utility token for the Bit Fighterz. Use $FTRZ to upgrade your Bit Fighterz! (Exclusive tickets, mints utilizing $FTRZ, in game items)", - "discord": "https://discord.gg/26DwVZT6", - "twitter": "https://twitter.com/bitfighterz", - "website": "https://www.bitfighterz.com/" - } - }, - { - "chainId": 101, - "address": "Wobb898LuextGV9EcPMxEvWzprPSAAmyo475ZBQxgma", - "symbol": "WOBB", - "name": "WOBBLEBUG WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Wobb898LuextGV9EcPMxEvWzprPSAAmyo475ZBQxgma/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/wobblebug", - "website": "https://wobblebug.info" - } - }, - { - "chainId": 101, - "address": "9DV8ocDmmsJEcPX9jvfepjmsgFk97uVSiZQsP5qbMXb9", - "symbol": "ONEDROP", - "name": "OneDropToken", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9DV8ocDmmsJEcPX9jvfepjmsgFk97uVSiZQsP5qbMXb9/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.com/invite/Kd5hAD9gNg", - "twitter": "https://twitter.com/OneDropNFTs", - "website": "https://onedropnfts.com" - } - }, - { - "chainId": 101, - "address": "D4GGY5JRZNmxnw2XWApruyxDfZd7X9N2xZzBxvJawDCv", - "symbol": "OPD", - "name": "Oneiron Dark", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/D4GGY5JRZNmxnw2XWApruyxDfZd7X9N2xZzBxvJawDCv/OPBlack.png", - "tags": ["ownership-token"], - "extensions": { - "twitter": "https://twitter.com/oneironproject", - "website": "http://www.oneironproject.com" - } - }, - { - "chainId": 101, - "address": "8LSLFmXNiuvzWdCfPHtMSnr8k3Knx7AxrYttj3H7HoTu", - "symbol": "FIRE", - "name": "FireCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/johnyg127/firecoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "KusHsPAeDvxkstzezKxu1FiGQEBU8EhGmPttFuXdZMW", - "symbol": "KU$H", - "name": "Stoned Shiba Kush", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/KusHsPAeDvxkstzezKxu1FiGQEBU8EhGmPttFuXdZMW/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/stonedshibaclub" - } - }, - { - "chainId": 101, - "address": "2hLu9vvevNRPa8cASbvnest1BrBNAaXL7WiVtvL65QRX", - "symbol": "ESPC", - "name": "EsportCurrency", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/EsportsCurrency/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5uB44vtqsgWMu2BDr4owwSequHDhDYtJ4pBZn4oUFhfi", - "symbol": "HODLR", - "name": "The Hodlers Project Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/Randomkushh/gitnote-images/main/images/HODLR%20token.png", - "extensions": { - "twitter": "https://twitter.com/hodlersproject", - "website": "https://thehodlersproject.com/" - } - }, - { - "chainId": 101, - "address": "GodsvjpSKruMFKaPCBBWw4S66RepEzToPqjUhiheTNMZ", - "symbol": "SGWL", - "name": "Stoned Gods WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GodsvjpSKruMFKaPCBBWw4S66RepEzToPqjUhiheTNMZ/logo.png" - }, - { - "chainId": 101, - "address": "9VXYvA15RhQndzjRrt7DyhiXPSurLKBsfwPHMDyN6s5H", - "symbol": "SolPunks", - "name": "SolPunks 3D Whitelist", - "decimals": 9, - "logoURI": "https://storage.googleapis.com/solpunkz/logo.png", - "tags": ["nft", "community-token"], - "extensions": { - "animationUrl": "https://storage.googleapis.com/solpunkz/solpunkz.mp4", - "description": "SolPunks 3D Whitelist redeemable token", - "imageUrl": "https://arwave.art/gweq2vxtzpngk1eqlq6k/hefh2g.png", - "website": "https://solpunks.club" - } - }, - { - "chainId": 101, - "address": "DeadKA6Z6GQfsQWjCehzj1gJQ3oPTEXMpQsyKYJr2qR2", - "symbol": "DEADREJECT", - "name": "Dead Reject Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Bitcoinblack482/logo/main/dead%20reject.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/DeadRejcts", - "website": "https://deadrejects.com/" - } - }, - { - "chainId": 101, - "address": "2cJgFtnqjaoiu9fKVX3fny4Z4pRzuaqfJ3PBTMk2D9ur", - "symbol": "PLD", - "name": "Plutonian DAO", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2cJgFtnqjaoiu9fKVX3fny4Z4pRzuaqfJ3PBTMk2D9ur/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Plutonian DAO Token", - "serumV3Usdc": "FcAadXjF1bYQxnjFDMN6igivSYeLbabXDKjx284pagBy", - "twitter": "https://twitter.com/plutoniansgame", - "website": "https://plutonians.tech" - } - }, - { - "chainId": 101, - "address": "EAefyXw6E8sny1cX3LTH6RSvtzH6E5EFy1XsE2AiH1f3", - "symbol": "RPC", - "name": "Republic Credits", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EAefyXw6E8sny1cX3LTH6RSvtzH6E5EFy1XsE2AiH1f3/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Republic Credits", - "serumV3Usdc": "Dujraambe9WWEtgswwccoJWMtE4Rnz2Ue4X2cGJB7keB", - "twitter": "https://twitter.com/plutoniansgame", - "website": "https://plutonians.tech" - } - }, - { - "chainId": 101, - "address": "7p6zGHdmWHvCH4Lsik2MoMBXqPGhFbSPSceSBXd8KNEC", - "symbol": "PU238", - "name": "Plutonium 238", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7p6zGHdmWHvCH4Lsik2MoMBXqPGhFbSPSceSBXd8KNEC/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Plutonium 238", - "twitter": "https://twitter.com/plutoniansgame", - "website": "https://plutonians.tech" - } - }, - { - "chainId": 101, - "address": "7PAsFWDR9VZosY4NYkXAZZj4kKmHh8zkMh9ea488w8Y6", - "symbol": "OPR", - "name": "Oneiron Red", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7PAsFWDR9VZosY4NYkXAZZj4kKmHh8zkMh9ea488w8Y6/OPRed.png", - "tags": ["ownership-token"], - "extensions": { - "twitter": "https://twitter.com/oneironproject", - "website": "http://www.oneironproject.com" - } - }, - { - "chainId": 101, - "address": "CoraLpUPGUUciXJdeS13Ljv6cjXWsnTVSc1ffzFJryib", - "symbol": "CCT", - "name": "Crypto Coral Tribe Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CoraLpUPGUUciXJdeS13Ljv6cjXWsnTVSc1ffzFJryib/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "discord": "https://discord.gg/B4MJcX72g9", - "twitter": "https://twitter.com/CoralTribeNFT", - "website": "https://www.cryptocoraltribe.io" - } - }, - { - "chainId": 101, - "address": "CX4y3ACwjmfMfK2nfmx2vRq5KDpQnREjLBHVDERSbsu1", - "symbol": "EV", - "name": "Ev Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Sergioooo94/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "PXLSmSBWHU8yAqNof9Ry2LPsZxHSYB4xXsBaQWUmEzV", - "symbol": "Pixels", - "name": "Pixels", - "decimals": 0, - "logoURI": "https://arweave.net/GpuEa7JiRH0-trJ-B25Pjh-DYt0-RaXjzPTIEVGUOdk?ext=gif", - "tags": ["NFT"], - "extensions": { - "twitter": "https://twitter.com/solsunsets", - "website": "https://solsunsets.com/" - } - }, - { - "chainId": 101, - "address": "44B2P7F4ArPt9E2t7Kzvzx3BVqWV65Bt6qzJZH2YZmwR", - "symbol": "FTH", - "name": "Fear The Hill Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/BMcBride89/Fear-The-Hill-Coin/main/FTH-logos_transparent%5B1%5D.png", - "tags": ["community-token"] - }, - { - "chainId": 101, - "address": "CjZUiiXnnjBsALvYLBjwibeBBYSngSKjBE3LbhNZx6yp", - "symbol": "$TRASH", - "name": "Trash", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CjZUiiXnnjBsALvYLBjwibeBBYSngSKjBE3LbhNZx6yp/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/Bmx5dep2fM", - "twitter": "https://twitter.com/OpossumPosseNFT" - } - }, - { - "chainId": 101, - "address": "WsyX1zaGR6EMkpXdawxtA7W7cq46zx5LaV6rwwb4Zir", - "symbol": "PTK", - "name": "PetikuCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SpriteyOnTheDraconic/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8FwNHtCumEnZFAkrQLFEz7ngt2rXPjX3Sqt27d7xp35u", - "symbol": "WLT1", - "name": "WhiteList MeltLabs 1", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8FwNHtCumEnZFAkrQLFEz7ngt2rXPjX3Sqt27d7xp35u/logo.png", - "extensions": { - "website": "https://www.meltlabs.tech/" - } - }, - { - "chainId": 101, - "address": "HMBcrrSFdVVn5APB6zT76btXg4TgqBKXioaWzTZDConp", - "symbol": "WLT2", - "name": "WhiteList MeltLabs 2", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HMBcrrSFdVVn5APB6zT76btXg4TgqBKXioaWzTZDConp/logo.png", - "extensions": { - "website": "https://www.meltlabs.tech/" - } - }, - { - "chainId": 101, - "address": "8TmXs3ePSkXNsCrNvMJmgTsdBuHcynCaqVBWmASRVEGV", - "symbol": "BET", - "name": "Ayt Bet", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/AytBet/aytbet/main/logo.png.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "D735UtZQuPGXWecCJcJwqk35eydNaXk4b9pryGULrP3i", - "symbol": "BPT", - "name": "Black Penny token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/banton84/Black-Penny/main/logo.png", - "tags": ["utility-Token", "collectible-token", "NFT-token"] - }, - { - "chainId": 101, - "address": "p9o6pK39LNrjepTy6vJ9CbebthaMSAdxK797PobEqAf", - "symbol": "AYLLA", - "name": "Aylla Coin", - "decimals": 9, - "logoURI": "https://gateway.pinata.cloud/ipfs/QmP4Zz9TLxY5agmLrSi3NJuCc9zxeMYoSzvFe8wUXK3hRT", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "64tNPiqghogsrKuRaHmdP3Pjc39JRvQBnCDh6CjCEw75", - "symbol": "PROSPER", - "name": "Prosperity", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Prosperity-Coin/crypto/main/PRSPR.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2poDkzS8LQidSmuEeVtYF2faDUkdU8PsRyc7ZS9qiscA", - "symbol": "BEARCOIN", - "name": "Bearcoin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/sarwocrypto/token/main/logo.png", - "tags": ["DeFi", "DEX"], - "extensions": { - "discord": "https://discord.gg/htBfxH9je4", - "telegram": "https://t.me/bearcoinglobal", - "twitter": "https://twitter.com/bearcoinsolona" - } - }, - { - "chainId": 101, - "address": "AnvURtZKryH6WA9zE1JTQM7gnHEHhTzhBnY6825jMwAM", - "symbol": "MJTK", - "name": "MJToken", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/jaszczomp71/krypto/main/ikonahawk.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4SGJGMt8hjHKSFVUZPKUUdZL3cK69avvuUJiizmtVDj5", - "symbol": "CHUBBY", - "name": "Chubby Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4SGJGMt8hjHKSFVUZPKUUdZL3cK69avvuUJiizmtVDj5/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DKhGCZsC57jNLKJXAfCsPbhVuxKdCCHfJYMhLgXuCvVi", - "symbol": "RCKC", - "name": "RockyCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/soperio/cripto/main/ratonero.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DP7F9J3X6g2ikVp6Y8WKVnxYwdXHYCeBHbouBbeQbevy", - "symbol": "CHIEF", - "name": "CHIEFIN CHIMP COIN", - "decimals": 6, - "logoURI": "https://github.com/boosbasement/metaboss/blob/main/Gold%20Status.png?raw=true", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "5YqSGoJtA5KZY784hoMV9DAkLDE8EGjSNr3YNQoVW8DK", - "symbol": "MAXI", - "name": "MAXIG", - "decimals": 0, - "logoURI": "https://github.com/uulen1/crypto/blob/main/IMG_6102.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "WLwKFNCKESMfbYU1o7hzp868AtyFHGpbC9i4jUTHpQb", - "symbol": "TMDC-X-WL", - "name": "TMDC-X WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/namu42/ImageRepo/main/WLwKFNCKESMfbYU1o7hzp868AtyFHGpbC9i4jUTHpQb/wl_token_logo.png", - "tags": ["Whitelist-Token", "NFT"] - }, - { - "chainId": 101, - "address": "5g7f9b5HbUVAgPkeDDZFHZ6QP9U8AT4KXMx4pAfUU8Ni", - "symbol": "AANDEELHOUDERS", - "name": "Aandeelhoudersregister Jansen en Dochters BV", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5g7f9b5HbUVAgPkeDDZFHZ6QP9U8AT4KXMx4pAfUU8Ni/blockPNG.png", - "tags": ["Jansen-en-Dochters", "aandeelhouders", "register"], - "extensions": { - "linkedin": "https://www.linkedin.com/company/blockstone-online/", - "website": "https://explorer.solana.com/address/JANSen9otUNFWvBcU6tj3bufozybNZVqvtH64ZXZPggL/tokens" - } - }, - { - "chainId": 101, - "address": "GNC9uTx8dBun94hM8PeRmEGBb7LJ7uKrgNBnooAaQzXN", - "symbol": "GNC", - "name": "Gong Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GNC9uTx8dBun94hM8PeRmEGBb7LJ7uKrgNBnooAaQzXN/logo.png", - "extensions": { - "twitter": "https://twitter.com/GongMaster6" - } - }, - { - "chainId": 101, - "address": "LFNTYraetVioAPnGJht4yNg2aUZFXR776cMeN9VMjXp", - "symbol": "LFNTY", - "name": "Lifinity", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/LFNTYraetVioAPnGJht4yNg2aUZFXR776cMeN9VMjXp/logo.svg", - "extensions": { - "discord": "https://discord.com/invite/K2tvfcXwWr", - "medium": "https://medium.com/@lifinity.io", - "twitter": "https://twitter.com/Lifinity_io", - "website": "https://lifinity.io/" - } - }, - { - "chainId": 101, - "address": "xLfNTYy76B8Tiix3hA51Jyvc1kMSFV4sPdR7szTZsRu", - "symbol": "xLFNTY", - "name": "xLifinity", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/xLfNTYy76B8Tiix3hA51Jyvc1kMSFV4sPdR7szTZsRu/logo.svg", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.com/invite/K2tvfcXwWr", - "medium": "https://medium.com/@lifinity.io", - "twitter": "https://twitter.com/Lifinity_io", - "website": "https://lifinity.io/" - } - }, - { - "chainId": 101, - "address": "GENZtsF6jVTLyPToMxJR9jz4VvH5i3QrKhJburvfyDZE", - "symbol": "GENZ", - "name": "Gen Zen Early Whitelist", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GENZtsF6jVTLyPToMxJR9jz4VvH5i3QrKhJburvfyDZE/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/ZenBenmore" - } - }, - { - "chainId": 101, - "address": "3sDP1g1LpiCqPCc4CsaSpqmEv4Uvf46kzg7XeRdfLsmk", - "symbol": "BKD", - "name": "BakedGods WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3sDP1g1LpiCqPCc4CsaSpqmEv4Uvf46kzg7XeRdfLsmk/logo.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "FECgEnETvkCeDpJdLyURiHRZNiXw63JfHfxi1fUL3RrR", - "symbol": "OPrism", - "name": "Overprism", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FECgEnETvkCeDpJdLyURiHRZNiXw63JfHfxi1fUL3RrR/logo.png", - "tags": ["utility-token", "DeFi"], - "extensions": { - "description": "BucketHead Studios Utility Token", - "discord": "https://discord.gg/bucketheadstudios" - } - }, - { - "chainId": 101, - "address": "7ZeD9kt1J7n61YJ1fJe9dGDaLzKBktieRGHxjkAk1m7r", - "symbol": "ZILLION", - "name": "Zillion", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7ZeD9kt1J7n61YJ1fJe9dGDaLzKBktieRGHxjkAk1m7r/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/BlueChipClique" - } - }, - { - "chainId": 101, - "address": "3mnAvh37Zp3iKTmKh7yVZTu1272EdoLDbYPMbwBGqQzF", - "symbol": "CHUNG", - "name": "Chung Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3mnAvh37Zp3iKTmKh7yVZTu1272EdoLDbYPMbwBGqQzF/logo.svg", - "tags": [ - "social-token", - "sports-token", - "utility-token", - "game-token", - "community-token", - "metaverse", - "GameFi", - "SocialFi" - ], - "extensions": { - "github": "https://github.com/piuchung", - "twitter": "https://twitter.com/piuchung", - "website": "https://pchung.com" - } - }, - { - "chainId": 101, - "address": "2FtCJ25UmSAHiCwbEccrop24wgybiTYLTYhGXi4nBaVk", - "symbol": "SHITZ+", - "name": "The Shitz+", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2FtCJ25UmSAHiCwbEccrop24wgybiTYLTYhGXi4nBaVk/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/theshitz", - "website": "https://theshitz.io" - } - }, - { - "chainId": 101, - "address": "FXekW7DcvMtfHgamPFk2NddobxnRVxwf592uUpxtykja", - "symbol": "AWL", - "name": "Astral Witches WL", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/GokhanCerk/assets/main/aw.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/AstraIWitches" - } - }, - { - "chainId": 101, - "address": "igsvRjB6uyVMGcM9nbWwESxN1eTfVTPiQ1ThoCc8f2g", - "symbol": "IGS", - "name": "Ielian Global Standard", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/igsvRjB6uyVMGcM9nbWwESxN1eTfVTPiQ1ThoCc8f2g/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/tatsu", - "twitter": "https://twitter.com/tatsumeeko", - "website": "https://tatsumeeko.com/" - } - }, - { - "chainId": 101, - "address": "2DwfLs6gTAj7e4PHe9XAZDbv9G8At7YqGcHiRhbFeYhk", - "symbol": "GOLOK", - "name": "Golok", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2DwfLs6gTAj7e4PHe9XAZDbv9G8At7YqGcHiRhbFeYhk/golok.svg", - "tags": ["community-token"], - "extensions": { - "discord": "https://discordapp.com/users/839508027446788126", - "twitter": "https://twitter.com/5ud1pt0" - } - }, - { - "chainId": 101, - "address": "EDLY8hdW9aVYNf12WTsRb6qshNqN2SjG7LbAAyQnLBbU", - "symbol": "CACLUB", - "name": "Cannabis Art Club", - "decimals": 7, - "logoURI": "https://raw.githubusercontent.com/AMAF90/caclub/main/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://thcamera.pt/nft/" - } - }, - { - "chainId": 101, - "address": "WLbrRsNqSSeDvDgJ68pwMgGsH5zQfRBFhe7VMvKf2xM", - "symbol": "KLVX-WL", - "name": "KLVX-WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/namu42/ImageRepo/main/WLbrRsNqSSeDvDgJ68pwMgGsH5zQfRBFhe7VMvKf2xM/box3.png", - "tags": ["Whitelist-Token", "NFT"] - }, - { - "chainId": 101, - "address": "CoRa1GrotgHW1HVwjR1ZHvABugUxFrYcLwHkiA2gu4KW", - "symbol": "CoralTribe", - "name": "CoralTribe Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Bitcoinblack482/logo/main/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/CoralTribeNFT", - "website": "https://www.cryptocoraltribe.io/" - } - }, - { - "chainId": 101, - "address": "AYHyLqEdGJJUEDYd5NEHrRXRbCJdiSWZvqAzSpxnuJs7", - "symbol": "VAULT", - "name": "VC Vault", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/istracoin-dev/crypto/main/logo.png", - "tags": ["gaming"] - }, - { - "chainId": 101, - "address": "B8U4h9teR9qfjkXRCnmbEcJs8Dimbz2vzdKpHmLPBDVs", - "symbol": "HND", - "name": "Hand", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/B8U4h9teR9qfjkXRCnmbEcJs8Dimbz2vzdKpHmLPBDVs/LogoH.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3fyPKsFZVmbGPKuYLTf5Pk7NBDQhUqXDMx95gHxmCU4x", - "symbol": "GOO", - "name": "GOO Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3fyPKsFZVmbGPKuYLTf5Pk7NBDQhUqXDMx95gHxmCU4x/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://www.googlitz.info" - } - }, - { - "chainId": 103, - "address": "ABAJYr778ESNN6XKNG83io5HcbEKmnEY3LLxhw5kx5pB", - "symbol": "ISSU", - "name": "issugo coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/issugo/test_solana_crypto/main/logo.png" - }, - { - "chainId": 101, - "address": "mpcqShNDqz3nLGUXg4cr8bkxiCJEwHvdAJCevouj1nU", - "symbol": "MPCWL", - "name": "Meta Pups Whitelist", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/metapupsclub/PupMint/main/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/metapupsclub", - "website": "https://www.metapupsclub.io/" - } - }, - { - "chainId": 101, - "address": "5QDRAruauPb6pN8oJnHfaNEBr4XZxmwWR6hLs4rha3qs", - "symbol": "DSLT", - "name": "Defi-SOL-LT", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5QDRAruauPb6pN8oJnHfaNEBr4XZxmwWR6hLs4rha3qs/logo.png", - "extensions": { - "discord": "https://discord.gg/6DWz82RWbM", - "twitter": "https://twitter.com/coherencefi", - "website": "https://coherence.finance" - } - }, - { - "chainId": 101, - "address": "uWiSDpV8ZBNmpv54PFDdE1RzqmSyiEKZhvFWR5nCPvz", - "symbol": "SRMEI", - "name": "Serum Ecosystem Index", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/uWiSDpV8ZBNmpv54PFDdE1RzqmSyiEKZhvFWR5nCPvz/logo.png", - "extensions": { - "discord": "https://discord.gg/6DWz82RWbM", - "twitter": "https://twitter.com/coherencefi", - "website": "https://coherence.finance" - } - }, - { - "chainId": 101, - "address": "8BLGq9PG22RKVMy28jKrWEvhS9VMPMPFDEj3pRiTqu7T", - "symbol": "DRAT", - "name": "Dragontongue", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/blackbaron43/crypto2/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EAzCTpMGRjFmGf4MaiMVNqv6KxQNoM6HEXtPZLEtEivB", - "symbol": "DECI", - "name": "Decimus Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EAzCTpMGRjFmGf4MaiMVNqv6KxQNoM6HEXtPZLEtEivB/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/DecimusDynamic", - "website": "https://www.decimusdynamics.io/" - } - }, - { - "chainId": 101, - "address": "3evMUC9VTLsf1QSY7UjJMX2coh3ZvNb1pYCbmcTJQ43o", - "symbol": "SMLWL", - "name": "SmiliNFT WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3evMUC9VTLsf1QSY7UjJMX2coh3ZvNb1pYCbmcTJQ43o/logo.png", - "tags": ["NFT", "Smile", "Whitelist"], - "extensions": { - "twitter": "https://twitter.com/nftsmilin", - "website": "http://smilinft.xyz/" - } - }, - { - "chainId": 101, - "address": "GuomCtZ5E8EQAtHFxuPi282w692mKcDNrZ96CiHChLcU", - "symbol": "SNIA", - "name": "Sonia Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Firebros1/crypto/main/IMG_0509.jpg", - "tags": ["Fast-Growing", "Low-quanity"] - }, - { - "chainId": 101, - "address": "BbBa2LR1JQ7Scq993vPkYoYDpQDntduMAcRS27wWtEi1", - "symbol": "MORPA", - "name": "MORP Alpha", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MorpAlpha/crypto/main/MP.png", - "tags": ["social-token"], - "extensions": { - "twitter": "https://twitter.com/TheInfungibles", - "website": "https://infungibles.io/" - } - }, - { - "chainId": 101, - "address": "MAKiXQ4symVDjH6CQkeFCYdqovDmokr6ZigwvrNX6RF", - "symbol": "MAKI", - "name": "MAKIMA EARLY WL TOKEN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/MAKiXQ4symVDjH6CQkeFCYdqovDmokr6ZigwvrNX6RF/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/MakimaNFT" - } - }, - { - "chainId": 101, - "address": "653yTMNJUUSvyXPA6rinxzNdeWRRw1VtajhEosihTX9K", - "symbol": "BLK", - "name": "Blue K", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/avkawakami/bluek/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9uBUX5YMtc3iYSmqmxHne8zyn3Hc2xZ3DazDmdZjaxwr", - "symbol": "MNWL", - "name": "MYNFTGG WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9uBUX5YMtc3iYSmqmxHne8zyn3Hc2xZ3DazDmdZjaxwr/logo.png", - "extensions": { - "discord": "https://discord.gg/7CqqqfNzEe", - "twitter": "https://twitter.com/mynftgg", - "website": "https://mynft.gg" - } - }, - { - "chainId": 101, - "address": "MPCsKBRTbpNnzJEB9EBxYUF9CZDYuvKBfpVDbTyR1EW", - "symbol": "MPCLaunch", - "name": "Meta Pups Club Launching 420", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/metapupsclub/PupMint/main/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/metapupsclub", - "website": "https://www.metapupsclub.io/" - } - }, - { - "chainId": 101, - "address": "Eggb3Wuuwb6S7dy2swEZC5kLWR16Tq8F9e41jXym1ZHv", - "symbol": "EGGMINT", - "name": "Moondusa Egg Minter", - "decimals": 0, - "logoURI": "https://arweave.net/L3vjQctp6E6eRf132es8odtyTZ2FFP0grigdusXE_Ts", - "tags": ["whitelist-token"], - "extensions": { - "discord": "https://discord.com/invite/moondusa", - "telegram": "https://t.me/MoondusaTheNFT", - "twitter": "https://twitter.com/Moondusa", - "website": "https://moondusanft.io" - } - }, - { - "chainId": 101, - "address": "incdcidLUVUGaMtDhkRdfdVDJG6eAxzjAvRzSxjKWWT", - "symbol": "INCMINT", - "name": "Moondusa Incubator Minter", - "decimals": 0, - "logoURI": "https://arweave.net/ereeYqNQoJYmXavjVBgApGuDk2TZYktyMIP77GIWmKs", - "tags": ["whitelist-token"], - "extensions": { - "discord": "https://discord.com/invite/moondusa", - "telegram": "https://t.me/MoondusaTheNFT", - "twitter": "https://twitter.com/Moondusa", - "website": "https://moondusanft.io" - } - }, - { - "chainId": 101, - "address": "13kRkiqq9rUeLqJisE1dWK6d7K1rS4sVQvxoqF5nkWmz", - "symbol": "EGT", - "name": "Ecogoldtech SAS Asset", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/13kRkiqq9rUeLqJisE1dWK6d7K1rS4sVQvxoqF5nkWmz/logo.png", - "tags": [ - "utility-token", - "social-token", - "security-token", - "community-token" - ], - "extensions": { - "description": "EGT representa las acciones tokenizadas oficiales de la compañía minera colombiana Ecogoldtech S.A.S. EGT es un token de utilidad para nuestro protocolo de credibilidad universal, respaldado por la solidez, robustez y transparencia de un fuerte motor productivo y comercial basado en oro como commodity y valor refugio a nivel global. La posesión de una acción EGT representa un compromiso entre Ecogoldtech S.A.S y sus accionistas, en el que se comprenden beneficios exclusivos y corporativos a cambio del mantenimiento de la acción durante cierto periodo de tiempo. Creemos que EGT representa la modernización de la industria tradicional en una nueva era digital, con la capacidad de poner a disposición de todos grandes oportunidades económicas y globales.", - "website": "https://ecogoldtech.com/" - } - }, - { - "chainId": 101, - "address": "9bU27s4Gq8LwtsT3bKCDXV3tVvBYrzDnBZu37bHMV3u7", - "symbol": "BOYT", - "name": "BOYTToken", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/BOYTToken/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5U3FjQwMtD2zWqGnMj7WCQEEEfyUChwPUQXVooWEjGpt", - "symbol": "MTER", - "name": "MOTER COIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/DCooney104/Moter/main/IMG_7142.PNG", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "By2g5Ln9tNYr5fbxzT8teBLNrYfjjDfXqbCe5Z8ya9X8", - "symbol": "UBQUOIN", - "name": "UBQUOIN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/By2g5Ln9tNYr5fbxzT8teBLNrYfjjDfXqbCe5Z8ya9X8/logo.png", - "tags": ["fitness-token"] - }, - { - "chainId": 101, - "address": "FEkvXnyW7sPV1Xa4w7SZfMGsGnf5kaCoAAxHQVVfUs2Z", - "symbol": "ASG", - "name": "Anima Spirit Gem", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FEkvXnyW7sPV1Xa4w7SZfMGsGnf5kaCoAAxHQVVfUs2Z/logo.png", - "tags": ["nekoverse", "game-fi"], - "extensions": { - "discord": "https://discord.gg/nekoverse", - "twitter": "https://twitter.com/Nekoverse_NFT", - "website": "https://nekoverse.net/" - } - }, - { - "chainId": 101, - "address": "B3DRD16zzuybK5Ku4Vv79hp6cxkBmZvTnrDx16N5D5ct", - "symbol": "Champ", - "name": "Champagne", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/B3DRD16zzuybK5Ku4Vv79hp6cxkBmZvTnrDx16N5D5ct/logo.png", - "tags": ["NFT-Reward-Token"], - "extensions": { - "discord": "https://t.co/xSDuZpVj7F", - "instagram": "https://www.instagram.com/the_wolves_club_nft/", - "twitter": "https://twitter.com/the_wolves_club", - "website": "https://thewolvesclub.com/" - } - }, - { - "chainId": 101, - "address": "2pUjVFjDLM4f5XXZn7b1NmyHhNtUMZvst6FfPU5yonE1", - "symbol": "CYC", - "name": "CYCLUS", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/kristerus/CyclusToken/main/logo.jpg", - "tags": ["community-token"], - "extensions": { - "instagram": "https://www.instagram.com/cyclus.coin/" - } - }, - { - "chainId": 101, - "address": "EWB6knBPpu4LSD5QNYA6tp4QsnnoLcgemhDk2pePPksL", - "symbol": "KYOX", - "name": "Kyobo Genesis KYOX", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EWB6knBPpu4LSD5QNYA6tp4QsnnoLcgemhDk2pePPksL/logo.png", - "tags": ["nft-token"], - "extensions": { - "website": "https://stake.kyobo.io/" - } - }, - { - "chainId": 101, - "address": "3wRoDsZCKosQQdB7bzL46q9qfEK9PPQrQWKx6R8K4Y5Q", - "symbol": "PEAK", - "name": "PEAK ATTITUDE COIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/CryptoBigMike/PEAKATTITUDE/main/PEAK_logo.png", - "tags": ["metaverse-token", "nft-token", "community-token"] - }, - { - "chainId": 101, - "address": "ToDvKbmzMmy5DcMDrJr7dw6PEZR19CQzMzmo7dpQ6Wo", - "symbol": "CCMINT", - "name": "Cyberchips Whitelist Mint Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ToDvKbmzMmy5DcMDrJr7dw6PEZR19CQzMzmo7dpQ6Wo/logo.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "FdnJT3tfvytFmb39C1pWZ2udNbcz3stYKF7ZxhQfJzee", - "symbol": "BWC", - "name": "BIGWHITECOCK", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/SamRice07/Assets/main/128474478-ein-cartoon-penis-mit-haltung-sonnenbrillen-und-daumen-hoch.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6n5FDeJYa5DJcqjzfAChtEwMnWJZAKxuTsFLjqPe27YN", - "symbol": "BWHC", - "name": "BIG WHITE HAIRY COCK", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/SamRice07/Assets/main/128474478-ein-cartoon-penis-mit-haltung-sonnenbrillen-und-daumen-hoch.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "D8tjKUmAGegeeqiWNUYKTiSYH59BWQAUC5ssVno22A5N", - "symbol": "CSJ", - "name": "Common Soul", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/D8tjKUmAGegeeqiWNUYKTiSYH59BWQAUC5ssVno22A5N/logo.png", - "tags": [ - "social-token", - "nft-token", - "game-token", - "jjcverse", - "common-soul" - ] - }, - { - "chainId": 101, - "address": "9PBAUwKiB5tWjJZF6Ywa1EwdotVTU74iprxTD72Xjvjq", - "symbol": "RSJ", - "name": "Rare Soul", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9PBAUwKiB5tWjJZF6Ywa1EwdotVTU74iprxTD72Xjvjq/logo.png", - "tags": [ - "social-token", - "nft-token", - "game-token", - "jjcverse", - "common-soul" - ] - }, - { - "chainId": 101, - "address": "AUFCN7XybLNPgFhjenxMfKnWdFonSdNfyKnVqxDq4gwx", - "symbol": "LSJ", - "name": "Legendary Soul", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AUFCN7XybLNPgFhjenxMfKnWdFonSdNfyKnVqxDq4gwx/logo.png", - "tags": [ - "social-token", - "nft-token", - "game-token", - "jjcverse", - "common-soul" - ] - }, - { - "chainId": 101, - "address": "HxBtpdMV1FZ4kDeZLkjeWNyFqhk4riNNnd6vMAGA4aYd", - "symbol": "SCO", - "name": "SCOCOIN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/silverspruce/asssets/main/logo.png", - "tags": ["arbitrage-token"] - }, - { - "chainId": 101, - "address": "4CHXd5uSMb9qrLfQwvyHzDMiKmNKDP8Np23dAQWTKNEy", - "symbol": "LPFi", - "name": "LP Finance DAO", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/LP-Finance-Inc/token-image/main/LPFi.png", - "tags": ["governance-token", "LP-Finance"], - "extensions": { - "discord": "https://discord.gg/fbcA5A3T", - "telegram": "https://t.me/LP_Defi_Official_group", - "twitter": "https://twitter.com/LPFinance_" - } - }, - { - "chainId": 101, - "address": "FWU58ZPPArx1H2CreBijPi6GeutCrCBwDNGZSqitXP2x", - "symbol": "ANZ", - "name": "ANZ", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FWU58ZPPArx1H2CreBijPi6GeutCrCBwDNGZSqitXP2x/logo.svg", - "tags": ["finance"], - "extensions": { - "description": "BEVO ROCKS", - "twitter": "https://twitter.com/OzDive" - } - }, - { - "chainId": 101, - "address": "BZoVtTzp5dLu3PM7svq22tbMeUtVhwLJEKFdYxBh8aPb", - "symbol": "NAB", - "name": "NAB", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BZoVtTzp5dLu3PM7svq22tbMeUtVhwLJEKFdYxBh8aPb/logo.svg", - "tags": ["finance"], - "extensions": { - "description": "BEVO ROCKS", - "twitter": "https://twitter.com/OzDive" - } - }, - { - "chainId": 101, - "address": "2qR6rPek1LnGUMfk8KCLkZRUvJyykUP2ekxjpaoXdnpS", - "symbol": "CBA", - "name": "CBA", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2qR6rPek1LnGUMfk8KCLkZRUvJyykUP2ekxjpaoXdnpS/logo.svg", - "tags": ["finance"], - "extensions": { - "description": "BEVO ROCKS", - "twitter": "https://twitter.com/OzDive" - } - }, - { - "chainId": 101, - "address": "57scJda2NVKMK2F5t3dipHv6RrVNqcMKXXsE77LYqJD7", - "symbol": "WBC", - "name": "WBC", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/57scJda2NVKMK2F5t3dipHv6RrVNqcMKXXsE77LYqJD7/logo.svg", - "tags": ["finance"], - "extensions": { - "description": "BEVO ROCKS", - "twitter": "https://twitter.com/OzDive" - } - }, - { - "chainId": 101, - "address": "ChTL913xim59qeXw5Z4unh5cAYPCEWKJWb7RnzRpE99", - "symbol": "USB", - "name": "US Bancorp", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ChTL913xim59qeXw5Z4unh5cAYPCEWKJWb7RnzRpE99/logo.svg", - "tags": ["finance"], - "extensions": { - "description": "BEVO ROCKS", - "twitter": "https://twitter.com/OzDive" - } - }, - { - "chainId": 101, - "address": "DVFQo5ttz5SAhFLKPbbgtfMN6HrePHjurmfZKYWLCQ3i", - "symbol": "JPM", - "name": "JPMorgan Chase", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DVFQo5ttz5SAhFLKPbbgtfMN6HrePHjurmfZKYWLCQ3i/logo.svg", - "tags": ["finance"], - "extensions": { - "description": "BEVO ROCKS", - "twitter": "https://twitter.com/OzDive" - } - }, - { - "chainId": 101, - "address": "3c6gg3nbzB8tCERQBk8jApUECBktvJrmgeULN9Q7JZSE", - "symbol": "BOA", - "name": "Bank Of America", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3c6gg3nbzB8tCERQBk8jApUECBktvJrmgeULN9Q7JZSE/logo.svg", - "tags": ["finance"], - "extensions": { - "description": "BEVO ROCKS", - "twitter": "https://twitter.com/OzDive" - } - }, - { - "chainId": 101, - "address": "7nuLPp3wKCeFmF6tfSr2bYMrXLh9yFpVpg9RwQsh5BqV", - "symbol": "BANKS", - "name": "US Bank", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7nuLPp3wKCeFmF6tfSr2bYMrXLh9yFpVpg9RwQsh5BqV/logo.svg", - "tags": ["finance"], - "extensions": { - "description": "BEVO ROCKS", - "twitter": "https://twitter.com/OzDive" - } - }, - { - "chainId": 101, - "address": "CRRPG57uFaG4Rbfauski7PuSRLQDMsoABtF3UTyhFraT", - "symbol": "GEC", - "name": "Green Energy", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CRRPG57uFaG4Rbfauski7PuSRLQDMsoABtF3UTyhFraT/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FEMcWftTLmnG1vuZZCR1qcRvK5dew4heeaG44QNs5EHS", - "symbol": "FEM", - "name": "Femnatns Whitelist Token", - "decimals": 9, - "logoURI": "https://imagizer.imageshack.com/v2/225x225q90/923/mCjHD3.png", - "tags": ["community-token", "whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/RemnantsNFT", - "website": "https://theremnantsnft.com/" - } - }, - { - "chainId": 101, - "address": "VoxnYpJxkriwgBdARwsYPbheGCjXfWi8NFsDYsfP14Q", - "symbol": "VOXN", - "name": "VoxNinjas Loot", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/VoxnYpJxkriwgBdARwsYPbheGCjXfWi8NFsDYsfP14Q/logo.png", - "extensions": { - "twitter": "https://twitter.com/VoxNinjasNFT" - } - }, - { - "chainId": 101, - "address": "C4VW9CKc8mPBMmJsqDpTF24TwYpbLW1aTzhRevMfWUXi", - "symbol": "AW", - "name": "Astral Witches Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/GokhanCerk/assets/main/wl.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/AstraIWitches" - } - }, - { - "chainId": 101, - "address": "9JDC8fFtXNjTDyQbsquAnMPDe66XFXkKcYLubmpywfRg", - "symbol": "SAMY", - "name": "SAMYBOT COIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/CryptoBigMike/SAMYBOT/main/logo_crypto.png", - "tags": [ - "metaverse-token", - "nft-token", - "community-token", - "business-coin" - ] - }, - { - "chainId": 101, - "address": "ANqY8h3sRSwkC29FvGJenAh7VGRABVVx7Ls6Mq4BuGT", - "symbol": "ZIG", - "name": "ZIG Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ANqY8h3sRSwkC29FvGJenAh7VGRABVVx7Ls6Mq4BuGT/logo.png", - "tags": ["ethereum", "utility-token"], - "extensions": { - "address": "0xb2617246d0c6c0087f18703d576831899ca94f01", - "assetContract": "https://etherscan.io/token/0xb2617246d0c6c0087f18703d576831899ca94f01", - "blog": "https://zignaly.com/blog", - "bridgeContract": "https://etherscan.io/address/0x3265bf56ab6c2e3cb39bb0b1bf41307ed87bfa35", - "coingeckoId": "zignaly", - "coinmarketcap": "https://coinmarketcap.com/currencies/zigcoin/", - "description": "ZIG is the token that powers the Zignaly ecosystem: marketplace, vault and launchpad.", - "discord": "https://discord.gg/r5qRXDJ", - "facebook": "https://www.facebook.com/zignaly", - "github": "https://github.com/zignaly-open", - "linkedin": "https://www.linkedin.com/company/zignaly", - "medium": "https://zignaly.medium.com/", - "telegram": "https://t.me/ZignalyHQ", - "telegramAnnouncements": "https://t.me/zignalyannouncement", - "twitter": "https://twitter.com/zignaly", - "vault": "https://zignaly.com/app/dashboard/#vault", - "website": "https://zignaly.com/", - "youtube": "https://www.youtube.com/c/Zignaly" - } - }, - { - "chainId": 101, - "address": "FzuuDH8W6xYFjCKmPugJ2kiUrX2UpVRaYvhonNVmdFs3", - "symbol": "PRIMEXBT", - "name": "PrimeXbt Trading Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/primexbte/primexbt/main/primexbt.jpg", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/primexbtp", - "website": "https://primexbte.com/" - } - }, - { - "chainId": 101, - "address": "5wM1ukGYSacfAh6QUdjcmftwaZLCfRXFjJBKK9aSCRka", - "symbol": "BC", - "name": "Ballistik Coin", - "decimals": 9, - "logoURI": "https://static.vecteezy.com/system/resources/previews/003/450/375/original/chainlink-link-coin-icon-isolated-on-white-background-vector.jpg", - "tags": ["nft"], - "extensions": { - "description": "Ballistik Coin is the first decentralized, capital efficient and over-collateralized protocol", - "website": "https://solana.com/" - } - }, - { - "chainId": 101, - "address": "BMwCgMmcvZ1MAc7dF8SyrpLwpTBPZ9yjSy6mdXizRCjJ", - "symbol": "NUT", - "name": "Coconut Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/koa808/public-crypto/main/coconutcoin.png", - "tags": ["art-token"] - }, - { - "chainId": 101, - "address": "8M93YmbZjYzAPNsRjRcerbEydk1eG9EHNBitv4PRVCrf", - "symbol": "FEMN", - "name": "Remnants Female WL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8M93YmbZjYzAPNsRjRcerbEydk1eG9EHNBitv4PRVCrf/logo.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "discord": "https://discord.com/invite/remnantsnft", - "twitter": "https://twitter.com/RemnantsNFT", - "website": "https://www.theremnantsnft.com/" - } - }, - { - "chainId": 101, - "address": "EubuCzGDjiYfC7YkLj8DgKYpMADgX8QT9nBNqpQedRy2", - "symbol": "bVIRAL", - "name": "Viraverse Beta", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EubuCzGDjiYfC7YkLj8DgKYpMADgX8QT9nBNqpQedRy2/logo.png", - "tags": [ - "stake-pool-token", - "utility-token", - "security-token", - "community-token", - "viraverse" - ], - "extensions": { - "discord": "https://discord.gg/viraverse", - "twitter": "https://twitter.com/viraverseio", - "website": "https://viraverse.io" - } - }, - { - "chainId": 101, - "address": "ArBHXMmUeNuaacvPm6YnFd23og5pkpNTxm4gsoh259qc", - "symbol": "TRCO", - "name": "Trident Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/johno187/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4ZSG9zyxCsDa9VKtXUHkw48aNJS5aikETjA8Z1mP2vcP", - "symbol": "AJSP", - "name": "Alain Joseph Stephane Painchaud", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/AlainSPainchaud/Crypto/main/TokenOfficiel.png", - "tags": ["utility-token", "community-token", "business-token"] - }, - { - "chainId": 101, - "address": "D9UA6BBwmqYuasyh8ja3LcQ7Tsdib6aa3pticTsSwRTQ", - "symbol": "Star", - "name": "Estrella Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Crypto-Papi/crypto/main/starlogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "87dNcieNbSYQXzicLKQpKMHbwbQnKDH9kq6JmQLVw26T", - "symbol": "MNPY", - "name": "Moon Pie", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/davisayomah/Moon-Pie-Token/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DvT3MfLQ5eQTzuNRSVj8bVNZYAPcjXMZh4Qf2LoPX1bS", - "symbol": "RSPCT", - "name": "Respect Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/kdr6up/RSPCT/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2nwHzfmTjWyHQCNozmmVzViYperzFc5yzLq5Xs2VV4pD", - "symbol": "DONKEYWL", - "name": "The Donkey Richards WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2nwHzfmTjWyHQCNozmmVzViYperzFc5yzLq5Xs2VV4pD/logo.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "8G91aCq96txspm6SZLcCDnopT36NrZ9nEad2XrEuma8", - "symbol": "BHS", - "name": "BioHumans", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/conqueror1234/crypto/main/logo.png", - "tags": ["utility-token", "community-token"] - }, - { - "chainId": 101, - "address": "7fPemBMNAAnCv2eyN8Y2qHbiawRFk79cQcwMWuETLdk9", - "symbol": "BAMM", - "name": "BAM Token - The Sol Den", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7fPemBMNAAnCv2eyN8Y2qHbiawRFk79cQcwMWuETLdk9/logo.png", - "tags": ["utility-token", "game-token"], - "extensions": { - "website": "https://solden.io/" - } - }, - { - "chainId": 101, - "address": "8bdpcGxmKukUecR9MzUFmqHudRc89i6DZLJGwdXiA28t", - "symbol": "WPWL1", - "name": "WOL PLA", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8bdpcGxmKukUecR9MzUFmqHudRc89i6DZLJGwdXiA28t/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://wolfeplanet.io" - } - }, - { - "chainId": 101, - "address": "DEADgNiYjUUNwy614z7TWpumyoL9k3vKD2irEj43awGB", - "symbol": "DEADWL", - "name": "Dead Rejects Whitelist Token", - "decimals": 9, - "logoURI": "https://imagizer.imageshack.com/v2/255x255q90/924/82ec2c.png", - "tags": ["whitelist-token", "utility-token"], - "extensions": { - "discord": "https://discord.com/invite/deadrejects", - "twitter": "https://twitter.com/DeadRejcts", - "website": "https://deadrejects.com/" - } - }, - { - "chainId": 101, - "address": "53aeVacJqTA1W3kQXLcGBvT2mxndCGPp7LrYMPGe2L5X", - "symbol": "SREBC", - "name": "SREBrasil Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/srebrasil/SREBrasilCoin/main/SREBrasilToken.png", - "tags": ["social-token"], - "extensions": { - "description": "Token social para a comunidade SRE Brasil", - "website": "http://www.srebrasil.com" - } - }, - { - "chainId": 101, - "address": "AxGonoNW3Qi8GBmcwpRpGE4xPV5v7rz2ug244gHBKfSr", - "symbol": "KDWL", - "name": "Kiyo Dragon WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AxGonoNW3Qi8GBmcwpRpGE4xPV5v7rz2ug244gHBKfSr/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "iMGN7vhNW6N9CugeB9Ac3Syd4aS363TspANMoj9wVxu", - "symbol": "$IMGN", - "name": "DAHLYS", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/iMGN7vhNW6N9CugeB9Ac3Syd4aS363TspANMoj9wVxu/logo.png", - "tags": ["STAKING-Tokens"], - "extensions": { - "twitter": "https://twitter.com/DahlysArt", - "website": "https://www.dahlys.art" - } - }, - { - "chainId": 101, - "address": "wmcSVkHBkGa9MH633Cs1BoPKD2FbuFe8bQBoRTnaEuv", - "symbol": "GST", - "name": "Grey Sparrow Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/VorobevSA/solana-token-list/main/assets/mainnet/wmcSVkHBkGa9MH633Cs1BoPKD2FbuFe8bQBoRTnaEuv/big_logo2.png", - "tags": ["social-token"], - "extensions": { - "github": "https://github.com/VorobevSA", - "linkedin": "https://www.linkedin.com/in/vorobevsa/" - } - }, - { - "chainId": 101, - "address": "fdtNAbSJtYTDeJxUuoSSH9maQKrJokkJJTJZgSmpZvp", - "symbol": "SONIA", - "name": "Sonia Investment Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Firebros1/crypto/main/IMG_0509.jpg", - "tags": ["market-coin", "investment-coin"], - "extensions": { - "website": "https://soniacoin.weebly.com/" - } - }, - { - "chainId": 101, - "address": "9jDpKzpHz6fatL8CiJjRhAGsLJmLMzXvynwxY5y7ykKF", - "symbol": "CAYC", - "name": "Official Cyber Ape Yacht Club", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9jDpKzpHz6fatL8CiJjRhAGsLJmLMzXvynwxY5y7ykKF/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://cayc.io/" - } - }, - { - "chainId": 101, - "address": "GkLcXLnY5C36YKqceD3gpnQuej5xEtFBeRqQqFVGSwrf", - "symbol": "GECKO", - "name": "GECKO", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GkLcXLnY5C36YKqceD3gpnQuej5xEtFBeRqQqFVGSwrf/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "2EmWCTJj7TsStdFmWckLXsxcU3S91t7SxEXBuzfas4nW", - "symbol": "STT", - "name": "STT COIN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2EmWCTJj7TsStdFmWckLXsxcU3S91t7SxEXBuzfas4nW/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2hwxARuDydQg4K97u9ho38T9Dc3K5ia6UqfAZ7LyeDPH", - "symbol": "MONN", - "name": "MonniCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mammimaisteri/MonniCoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BFwQLeUYEaU4Sgf6KzxXCcXWzAjEd5iKEjFyE88EpaUE", - "symbol": "OMU", - "name": "OMU Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BFwQLeUYEaU4Sgf6KzxXCcXWzAjEd5iKEjFyE88EpaUE/logo.png", - "tags": ["utility-token", "payment-token"] - }, - { - "chainId": 101, - "address": "NEo3D6MXRXf2iAfaqvZYqSmFkfutLvNjm86xmfGWNh5", - "symbol": "NEO", - "name": "NEO3D TOKEN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/minh-git/docusaurus-2/main/static/img/neo3d-logo.jpg", - "tags": [ - "NFT", - "gallery", - "utility-token", - "catpunk", - "metaverse", - "art" - ], - "extensions": { - "twitter": "https://twitter.com/Neo3Dxyz", - "website": "https://www.neo3d.xyz" - } - }, - { - "chainId": 101, - "address": "BmNmsJMqLjqAFVUSdpDvd16jgruoEiAL3r7TCQDHid9J", - "symbol": "BXT", - "name": "Business Exchange Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/BXT-Project/branding/main/bxt.png", - "tags": ["web3", "dapp", "nfc", "transaction", "utility-token"], - "extensions": { - "twitter": "https://twitter.com/BxtProject", - "website": "https://bxt.org" - } - }, - { - "chainId": 101, - "address": "TribjRoptuaFXmSgPXWtJQq4WLt1Gu2PHCWCMdnNbSD", - "symbol": "TRIB", - "name": "Crypto Coral Tribe Early WL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/TribjRoptuaFXmSgPXWtJQq4WLt1Gu2PHCWCMdnNbSD/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/CoralTribeNFT", - "website": "https://www.cryptocoraltribe.io/" - } - }, - { - "chainId": 101, - "address": "4j5wrut5J4Aq81R5daWHUeRwLGz6eBodfRepUnaW473b", - "symbol": "PICASO", - "name": "Picaso", - "decimals": 6, - "logoURI": "https://github.com/boosbasement/metaboss/blob/main/Abstract%20Art%20Framed%20Art%20Print.png?raw=true", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HDvsvRRHDSZ3p2LrKDLZaZrme3X7EYTJRUzQDMFGgqWC", - "symbol": "VRN", - "name": "Vernolien", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/murasame78/vernolien/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "J6zFwmSndSNBbX2z9xgyU1FtxPB2d6UiSr15yCfDW9Y8", - "symbol": "DEGWL", - "name": "DegenWhitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/J6zFwmSndSNBbX2z9xgyU1FtxPB2d6UiSr15yCfDW9Y8/logo.png", - "tags": ["Whitelist", "DegenWhitelist"] - }, - { - "chainId": 101, - "address": "DWPkCJS4hR3DPXGi3jkmLJSHEm6JLgu8hqNEZfyeh9vr", - "symbol": "OGR", - "name": "OGRE", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/hotmcscott/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "D4ZjNpTteRniyVzM2SSknadfaY7NTiC7jQin2D6PgEfP", - "symbol": "CITI", - "name": "CITIGROUP", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/D4ZjNpTteRniyVzM2SSknadfaY7NTiC7jQin2D6PgEfP/logo.svg", - "tags": ["finance"], - "extensions": { - "description": "BEVO ROCKS", - "twitter": "https://twitter.com/OzDive" - } - }, - { - "chainId": 101, - "address": "8w4HAirTaY6xVCWpzAb6DiJmmcwD9k5q2De6VyvNJce5", - "symbol": "WF", - "name": "Wells Fargo and Company", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8w4HAirTaY6xVCWpzAb6DiJmmcwD9k5q2De6VyvNJce5/logo.svg", - "tags": ["finance"], - "extensions": { - "description": "BEVO ROCKS", - "twitter": "https://twitter.com/OzDive" - } - }, - { - "chainId": 101, - "address": "Cs2rSoSwohbZ33AtSk8mQmVtfv1hfMMmFNiLzuxqQ7bx", - "symbol": "HSBC", - "name": "HSBC", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Cs2rSoSwohbZ33AtSk8mQmVtfv1hfMMmFNiLzuxqQ7bx/logo.svg", - "tags": ["finance"], - "extensions": { - "description": "BEVO ROCKS", - "twitter": "https://twitter.com/OzDive" - } - }, - { - "chainId": 101, - "address": "9Rp8wFHgRX1gRZCqNKecVr1GMikp6VmiUVKWa6ojLBeR", - "symbol": "OCBC", - "name": "OCBC", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9Rp8wFHgRX1gRZCqNKecVr1GMikp6VmiUVKWa6ojLBeR/logo.svg", - "tags": ["finance"], - "extensions": { - "description": "BEVO ROCKS", - "twitter": "https://twitter.com/OzDive" - } - }, - { - "chainId": 101, - "address": "AX4icbfwXHcNhVFRrNyn4aSPSoykEybvEhSp8NBWUkEi", - "symbol": "BHP", - "name": "BHP Group Limited", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AX4icbfwXHcNhVFRrNyn4aSPSoykEybvEhSp8NBWUkEi/logo.svg", - "tags": ["mining"], - "extensions": { - "description": "BEVO ROCKS", - "twitter": "https://twitter.com/OzDive" - } - }, - { - "chainId": 101, - "address": "CPNTQA3MSjZKw5seVi3XxjM4ed6rxK7BDFgUmjHQ2bsB", - "symbol": "RIO", - "name": "Rio Tinto Group", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CPNTQA3MSjZKw5seVi3XxjM4ed6rxK7BDFgUmjHQ2bsB/logo.svg", - "tags": ["mining"], - "extensions": { - "description": "BEVO ROCKS", - "twitter": "https://twitter.com/OzDive" - } - }, - { - "chainId": 101, - "address": "HQQuaZegBUBuXA3bYTLC48F2drKjtUhCL5YXCq5Zb5dd", - "symbol": "CITIGROUP", - "name": "CITI", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HQQuaZegBUBuXA3bYTLC48F2drKjtUhCL5YXCq5Zb5dd/logo.svg", - "tags": ["finance"], - "extensions": { - "description": "BEVO ROCKS", - "twitter": "https://twitter.com/OzDive" - } - }, - { - "chainId": 101, - "address": "2QfYSYA7M6HW6LrLUoQXiUpf8EQnqPvoWdaTzPozfUvc", - "symbol": "LKF", - "name": "LKF Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ll336/cryp/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DUkqNMBYqqUacmq68AWH3hkjBsWpzJUQq7RnqFjuPdu", - "symbol": "CO2", - "name": "CARBON", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DUkqNMBYqqUacmq68AWH3hkjBsWpzJUQq7RnqFjuPdu/logo.png" - }, - { - "chainId": 102, - "address": "3FPckdMdGNRyBUTUmMk6rRWHKuNKywUqPtNKvh1GaL4J", - "symbol": "SIKU", - "name": "Siku Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3FPckdMdGNRyBUTUmMk6rRWHKuNKywUqPtNKvh1GaL4J/siku.png", - "tags": ["community-token"], - "extensions": { - "website": "https://sikuswap786.netlify.app/" - } - }, - { - "chainId": 101, - "address": "sva5AYRA8EodCCKEFYFZQfyFS8gXf5rGhnchTDxXYfc", - "symbol": "SVA", - "name": "Sovana", - "decimals": 7, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/sva5AYRA8EodCCKEFYFZQfyFS8gXf5rGhnchTDxXYfc/logo.png", - "extensions": { - "website": "https://www.sovana.world" - } - }, - { - "chainId": 101, - "address": "VLHLiyR17iN3maDEhLtrFX2K7eFT2wU2bessujU1RBS", - "symbol": "VLH", - "name": "Valhalla", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/VLHLiyR17iN3maDEhLtrFX2K7eFT2wU2bessujU1RBS/logo_wh.png", - "extensions": { - "website": "https://v8mech.com" - } - }, - { - "chainId": 101, - "address": "8uVpieRrhs6FxfD8tJYqp66Qf4mmU7yvCxun63AZaDpU", - "symbol": "ASX", - "name": "ASX Ltd", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8uVpieRrhs6FxfD8tJYqp66Qf4mmU7yvCxun63AZaDpU/logo.svg", - "tags": ["finance"], - "extensions": { - "description": "BEVO ROCKS", - "twitter": "https://twitter.com/OzDive" - } - }, - { - "chainId": 101, - "address": "DBsh3k16nYoR46eSoL8oyuG9JXjLbD13cRQUtcVBtpAr", - "symbol": "TELSTRA", - "name": "Telstra Corporation Ltd", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DBsh3k16nYoR46eSoL8oyuG9JXjLbD13cRQUtcVBtpAr/logo.svg", - "tags": ["communication"], - "extensions": { - "description": "BEVO ROCKS", - "twitter": "https://twitter.com/OzDive" - } - }, - { - "chainId": 101, - "address": "H47tCXRBtB7pbyBmW7RNYqWxMUWGny59WHbm6mN67LWE", - "symbol": "MOBILE", - "name": "TELSTRA", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/H47tCXRBtB7pbyBmW7RNYqWxMUWGny59WHbm6mN67LWE/logo.svg", - "tags": ["communication"], - "extensions": { - "description": "BEVO ROCKS", - "twitter": "https://twitter.com/OzDive" - } - }, - { - "chainId": 101, - "address": "7fEJR4PTm8cJwcmiyLjDtt98cUL5ynXJQcB5Y7HFd4pM", - "symbol": "CELL", - "name": "PHONE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7fEJR4PTm8cJwcmiyLjDtt98cUL5ynXJQcB5Y7HFd4pM/logo.svg", - "tags": ["communication"], - "extensions": { - "description": "BEVO ROCKS", - "twitter": "https://twitter.com/OzDive" - } - }, - { - "chainId": 101, - "address": "CME7sGyY3jCt2SdxpYfVpqbRBkEE9BvagtAkPTSERGnL", - "symbol": "PHONE", - "name": "CELL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CME7sGyY3jCt2SdxpYfVpqbRBkEE9BvagtAkPTSERGnL/logo.svg", - "tags": ["communication"], - "extensions": { - "description": "BEVO ROCKS", - "twitter": "https://twitter.com/OzDive" - } - }, - { - "chainId": 101, - "address": "GYrcDSCXGWgpLeKSCgNCpHfv4RCG3iSBcQAHgNX9U7wa", - "symbol": "$PA", - "name": "Police Academy", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GYrcDSCXGWgpLeKSCgNCpHfv4RCG3iSBcQAHgNX9U7wa/logo.png", - "tags": ["utility-token", "social-token", "nft-token"], - "extensions": { - "website": "https://policeacademynft.com" - } - }, - { - "chainId": 101, - "address": "DDCEE8BVKbxZ6TXo8HK7g4qUBpaTocNRX4q7ppt5FKA1", - "symbol": "DDCWL", - "name": "Dope Duck Club Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DDCEE8BVKbxZ6TXo8HK7g4qUBpaTocNRX4q7ppt5FKA1/logo.png", - "tags": ["whitelist-token", "nfts"] - }, - { - "chainId": 101, - "address": "6jHEQ3HdKb7PpAve2oXpcKRnp6xfEDfM8hWEVBwEE5HP", - "symbol": "DUDE", - "name": "Dude Token", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/Randomkushh/gitnote-images/62a3e5727abd6091f4b1e835e1b446a04f9c9ee9/images/dudes%20token.png", - "extensions": { - "twitter": "https://twitter.com/cool_dudes_nft", - "website": "https://www.cooldudes.club/" - } - }, - { - "chainId": 101, - "address": "EzfnjRUKtc5vweE1GCLdHV4MkDQ3ebSpQXLobSKgQ9RB", - "symbol": "CSM", - "name": "Cricket Star Manager", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EzfnjRUKtc5vweE1GCLdHV4MkDQ3ebSpQXLobSKgQ9RB/logo.svg", - "extensions": { - "website": "https://cricketstarmanager.com/" - } - }, - { - "chainId": 101, - "address": "J18t9JWmvGkDTMukS53xLoq8sZn47QwnULmiRrorqiCY", - "symbol": "BHT", - "name": "Bharath coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Modi08/Crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "23ochfVnFJcRVsQ43639yY2LbgAzBr6SQefjFeADMsmp", - "symbol": "SLPZ", - "name": "SolPeepz WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/23ochfVnFJcRVsQ43639yY2LbgAzBr6SQefjFeADMsmp/Logo.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/SOlPeepzNFT", - "website": "https://solpeepz.club/" - } - }, - { - "chainId": 101, - "address": "81mKGZTjMiUbpZi2Gd3Pn4J3Z3u42U7GtSHC4jZeZxdf", - "symbol": "SolPunk", - "name": "SolPunks 3D Whitelist ", - "decimals": 9, - "logoURI": "https://storage.googleapis.com/solpunkz/logo.png", - "tags": ["nft"], - "extensions": { - "animationUrl": "https://storage.googleapis.com/solpunkz/solpunkz.mp4", - "description": "SolPunks 3D Whitelist redeemable token", - "imageUrl": "https://arwave.art/gweq2vxtzpngk1eqlq6k/hefh2g.png", - "website": "https://solpunks.club" - } - }, - { - "chainId": 101, - "address": "bqRNmDUiYFwP3T1kUkvwibkB3xFPKZtE2sQsWHWFewb", - "symbol": "ELP", - "name": "eCommerce loyalty program", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/Abhijay376/commerce-loyality-1/main/ELP-LOGO-min.png", - "tags": ["commerce"] - }, - { - "chainId": 101, - "address": "3gr25JueJADKQrmqeS6cRQukvbiNffHdMofj6xf7XBV5", - "symbol": "SLUDO", - "name": "Solana Ludo", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/sukhihacker/token-list/main/assets/mainnet/3gr25JueJADKQrmqeS6cRQukvbiNffHdMofj6xf7XBV5/SLUDO.png", - "tags": ["Gaming-token"], - "extensions": { - "discord": "https://discord.com/invite/7xctmZgX33", - "twitter": "https://twitter.com/SolanaLudo", - "website": "https://solanaludo.vercel.app" - } - }, - { - "chainId": 101, - "address": "2hUCytKiWaqQcu2LhL9dYAfeKSET5G5kF7jiDi78VwxJ", - "symbol": "$LOVE", - "name": "LOOKS-RARE TOKEN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/thislooksrare/public/main/logo.png", - "tags": ["ownership-token", "utility-token"], - "extensions": { - "twitter": "https://twitter.com/thislooksrare", - "website": "https://looks-rare.com" - } - }, - { - "chainId": 101, - "address": "ptX2XE63jdoA3x9tX1SUgVQpBStgi2516Q4xKR5pWq4", - "symbol": "BHU", - "name": "Bhoomi", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/BoltyCodes/dede/main/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "Ah85aeF2UCUCbjkGABgkXMpua9fMny2LhE2dVogVwjhb", - "symbol": "MERRA", - "name": "MERRA", - "decimals": 6, - "logoURI": "https://merrabots.com/img/merrabots.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/merrabots", - "website": "https://merrabots.com/" - } - }, - { - "chainId": 101, - "address": "CkdnbcYZWTaFghf7FbQfJPPH4EFdWuYmze6o9svxy45h", - "symbol": "SMLNWL", - "name": "SmiliNFT Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CkdnbcYZWTaFghf7FbQfJPPH4EFdWuYmze6o9svxy45h/logo.png", - "tags": ["nft", "whitelist", "SmiliNFT"], - "extensions": { - "description": "It is a token let you mint first collection of SmiliNFT", - "twitter": "https://twitter.com/nftsmilin", - "website": "http://smilinft.xyz/" - } - }, - { - "chainId": 101, - "address": "6Hd62Rsw9cpqpy1nerLa9zGDR5Gbmw8XyUGt7Sbpcf8v", - "symbol": "NOTSOL1", - "name": "Not Solana 1", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/gambofafrika/Solana/main/Solana-Crypto-Logo-PNG-File.png", - "tags": ["Social-token"] - }, - { - "chainId": 101, - "address": "DecodezX8BBQRwMevyMmezEGzoZ7vcV4CUfydkcbR78Y", - "symbol": "DCDR", - "name": "SOL DECODER Whitelist Token", - "decimals": 9, - "logoURI": "https://docs.soldecoder.app/uploads/images/system/2022-03/logo-transparent-mine.png", - "tags": ["whitelist-token", "utility-token"], - "extensions": { - "discord": "https://discord.com/invite/sol-decoder", - "twitter": "https://twitter.com/SOL_Decoder", - "website": "https://soldecoder.app/" - } - }, - { - "chainId": 101, - "address": "59ZGPisCwKJh96FqyMePTM6K3XFUF2y4T6YYFPWxGp3d", - "symbol": "ART", - "name": "A RODIN TOKEN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ARTDEV0/ART/main/logo-art.png", - "tags": ["ownership-token", "social-token", "art-token"], - "extensions": { - "website": "http://www.projectrodin.com/" - } - }, - { - "chainId": 101, - "address": "4M48qacBqq5T5YyJs6392EgxZKRja2i5Hz9uLXQKCYmw", - "symbol": "SD", - "name": "Social Donkeys", - "decimals": 9, - "logoURI": "https://github.com/ArthurPaivaT/token-list/blob/main/assets/mainnet/4M48qacBqq5T5YyJs6392EgxZKRja2i5Hz9uLXQKCYmw/logo.png?raw=true" - }, - { - "chainId": 101, - "address": "3YUfxdwg1288BLSqzz6VnVsHwV7vqgbTBoTWqyhP4TEw", - "symbol": "FLIES", - "name": "TSF Flies", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3YUfxdwg1288BLSqzz6VnVsHwV7vqgbTBoTWqyhP4TEw/logo.jpg", - "tags": ["nft-token", "community-token"], - "extensions": { - "description": "Collect TSF Flies token to open your mystery box.", - "discord": "http://discord.gg/stonedfrogs", - "twitter": "https://twitter.com/thestonedfrogs", - "website": "https://www.thestonedfrogs.io/" - } - }, - { - "chainId": 101, - "address": "E3S8VWKbp15j4aG7UWr1FsRudob16pPuedm3GJiDvhQA", - "symbol": "GTCO", - "name": "GatorCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/soundmang/cooldude/main/One_Eyed_Alligator.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "JDErCVbaRpapLCzu2c4m2F2FfYkS2tuVRp3voSJ69VBE", - "symbol": "PDM", - "name": "Padeum", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Qersdyn/crypto/main/Padeum.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ZEC53gSgrMuJ4Mbbgxzj1ewHpwyA3o1cKRemx9bxrUo", - "symbol": "ZEC", - "name": "ZellionCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ZEC53gSgrMuJ4Mbbgxzj1ewHpwyA3o1cKRemx9bxrUo/logo.png" - }, - { - "chainId": 101, - "address": "AZsaSZSZvy1o9465figrnxZbBa2YqfFnin6cMcTyXN1s", - "symbol": "BHC", - "name": "Biocoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/conqueror1234/crypto/main/logo.png", - "tags": ["community-token"] - }, - { - "chainId": 101, - "address": "AKw8GgQdEmCqb1ngTwDCp31pQW7cKiYERk2CrFS7f2oW", - "symbol": "VBPC", - "name": "VIRTUAL BIBLE PROJECT COIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/CryptoBigMike/Virtual_Bible_Project/main/logo_vbpc.png", - "tags": ["metaverse-token", "nft-token", "community-token"] - }, - { - "chainId": 101, - "address": "6QgrTd1r7FLjUzgVXY1dmY9BkS1Uy8BVgunNDbxiSDs7", - "symbol": "Neek", - "name": "Neek", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/RaulLL98/neekLogo/main/logo.jpg" - }, - { - "chainId": 101, - "address": "4vp1GYqYkz4qP6UQ1jzgg3MBFb6JJCiUUJKo9W1F2Dds", - "symbol": "DSKULLYS", - "name": "Disarticulated Skully's Wl Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/abuzer63/token-wl/main/logo.png", - "tags": ["Nft-Token", "Wl-Token"], - "extensions": { - "twitter": "https://twitter.com/dskullys", - "website": "https://www.dskullys.com/" - } - }, - { - "chainId": 101, - "address": "B4bEXugU97iLaSaXSpEAhDtTVyCyUnafTcBc7r8QQ3mZ", - "symbol": "ERGO", - "name": "Ergo Coin", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/B4bEXugU97iLaSaXSpEAhDtTVyCyUnafTcBc7r8QQ3mZ/logo.png", - "tags": ["currency"], - "extensions": { - "website": "https://ergocoin.org/" - } - }, - { - "chainId": 101, - "address": "CNcWCsiggfr6EJcWn3juDKj5L5WygZnEYJ5dXmPuU4mA", - "symbol": "SMND", - "name": "SchmeckSand", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/sraisl/crypto/master/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "474QkZFHJ4GjWRBWgBFmQkGZMfhYcqiyQwPj9oim3fp7", - "symbol": "DDAO", - "name": "DDAO WL TOKEN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/474QkZFHJ4GjWRBWgBFmQkGZMfhYcqiyQwPj9oim3fp7/logo.png", - "tags": ["WL-token"] - }, - { - "chainId": 101, - "address": "ApsWDNN2hyK82e5jaT3z8R3SVRFsp4XH9QqRhqWownfv", - "symbol": "CALA", - "name": "AlexLopezCoin", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ApsWDNN2hyK82e5jaT3z8R3SVRFsp4XH9QqRhqWownfv/logo.png", - "tags": ["meme-token", "community-token"], - "extensions": { - "description": "Por los jajas" - } - }, - { - "chainId": 101, - "address": "7FiMPtv5p4bHMwpynru624QeQAhcvPfgL1K184sxv7ut", - "symbol": "JZCN", - "name": "JizzerCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mowinters/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "KVXJhoJLSSQq2EYPYMP4h2v8AJryQQGeDJcpjRLp96K", - "symbol": "ORBWAY", - "name": "ORBWAY", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/KVXJhoJLSSQq2EYPYMP4h2v8AJryQQGeDJcpjRLp96K/logo.png", - "extensions": { - "twitter": "https://twitter.com/planetariansnft", - "website": "https://planetarians.io/" - } - }, - { - "chainId": 101, - "address": "8aQUSX3RxjhXNm9azYbCZD1qXK6tzKrWeWyW9YyKvztK", - "symbol": "A", - "name": "A COIN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8aQUSX3RxjhXNm9azYbCZD1qXK6tzKrWeWyW9YyKvztK/logo.png" - }, - { - "chainId": 101, - "address": "E91hiy2y8asBrvxpfjpN9BntYMwvawJ4DSUPTkTcodBL", - "symbol": "FELINE", - "name": "Feline Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/E91hiy2y8asBrvxpfjpN9BntYMwvawJ4DSUPTkTcodBL/logo.png", - "tags": ["meme-token", "community-token"], - "extensions": { - "description": "Feline Token is a deflationary crypto currency aimed at cat lovers.", - "website": "http://www.felinetoken.xyz" - } - }, - { - "chainId": 101, - "address": "DeViLuoFz6JbDsXk3hifyQCx4CGAgAThyyQjSM6jewKK", - "symbol": "LKEY", - "name": "Legion Key", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SolStonez/Legion-Key-Logo/main/demon_logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Legion Keys are whitelist tokens to gain access to presale and discounted price of Legion of Sol collection", - "discord": "https://discord.gg/9AK64whHFe", - "twitter": "https://twitter.com/legion_of_sol", - "website": "https://legionofsol.io/" - } - }, - { - "chainId": 101, - "address": "ESqzjZoyQgLU2qEPnyu3H5V6A83uBMttViTcJgz5KEMQ", - "symbol": "MBC-WL", - "name": "MBC Whitelist Mint Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ESqzjZoyQgLU2qEPnyu3H5V6A83uBMttViTcJgz5KEMQ/logo.png", - "tags": ["nft"], - "extensions": { - "twitter": "https://twitter.com/MysticGirlsClub" - } - }, - { - "chainId": 101, - "address": "7QqbzJ2QLrkE4XV4PtwvHxBWNf5UEUE6EqeSXVsKAcZx", - "symbol": "MBC-DC", - "name": "MBC 50% Discount Mint Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ESqzjZoyQgLU2qEPnyu3H5V6A83uBMttViTcJgz5KEMQ/logo.png", - "tags": ["nft"], - "extensions": { - "twitter": "https://twitter.com/MysticGirlsClub" - } - }, - { - "chainId": 101, - "address": "3hMeR4ibt9jczSbaZKkxw49p9XjFcnxcpNqtPGDcnqG6", - "symbol": "MBC-FR", - "name": "MBC Free Mint Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ESqzjZoyQgLU2qEPnyu3H5V6A83uBMttViTcJgz5KEMQ/logo.png", - "tags": ["nft"], - "extensions": { - "twitter": "https://twitter.com/MysticGirlsClub" - } - }, - { - "chainId": 101, - "address": "2GpWESikbmmQKTkTkcazYtxg3LAozfV8SQ1ozPAvPRzb", - "symbol": "TAE", - "name": "TAE", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2GpWESikbmmQKTkTkcazYtxg3LAozfV8SQ1ozPAvPRzb/logo.png" - }, - { - "chainId": 101, - "address": "2u67vqX4dDHippARJBvGib8oorMzT5grWt2aKFmBagax", - "symbol": "STELLA", - "name": "Rocstella", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2u67vqX4dDHippARJBvGib8oorMzT5grWt2aKFmBagax/logo.png", - "tags": ["utility-token", "game-token", "community-token", "metaverse"], - "extensions": { - "discord": "https://discord.com/rocstella", - "facebook": "https://www.facebook.com/rocstella.io", - "instagram": "https://www.instagram.com/rocstella.io/", - "reddit": "https://www.reddit.com/r/Rocstella/", - "telegram": "https://t.me/rocstella", - "twitter": "https://twitter.com/rocstella_io", - "website": "https://rocstella.io" - } - }, - { - "chainId": 101, - "address": "TowQvaG4JUUDCY6SYrqq4xh45D6Rrv6cUdSjY86sTVb", - "symbol": "GADO", - "name": "GADO WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/TowQvaG4JUUDCY6SYrqq4xh45D6Rrv6cUdSjY86sTVb/logo.png" - }, - { - "chainId": 101, - "address": "HXpJJYuaG15ZLF9qTj4QuX1o2VvhH3bY2xWj7hVviAcR", - "symbol": "WPP", - "name": "Welina Pineapple People", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HXpJJYuaG15ZLF9qTj4QuX1o2VvhH3bY2xWj7hVviAcR/logo.png", - "extensions": { - "discord": "https://discord.gg/zFyscmEfQQ", - "twitter": "https://twitter.com/welina_nft" - } - }, - { - "chainId": 101, - "address": "9FubRwbEXpXuFh9hs3G8UxcuhGUmUbgJFbUtVs7Ktiji", - "symbol": "VOR", - "name": "Vormir", - "decimals": 0, - "logoURI": "https://github.com/aeinase/Solana/blob/main/vor.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CCTprR8uQqwhLEDhwA4yWsMrj4D7LqbH39f54ih4w6pb", - "symbol": "CTWLT", - "name": "Coral Tribe WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Crypto-Coral-Tribe/media/main/logo.png", - "tags": ["nft", "whitelist", "whitelist-token", "utility-token"], - "extensions": { - "description": "Coral Tribe Whitelist token.", - "discord": "https://discord.gg/B4MJcX72g9", - "twitter": "https://twitter.com/CoralTribeNFT", - "website": "https://www.cryptocoraltribe.io" - } - }, - { - "chainId": 101, - "address": "MEDLjqYrYTWBVViMNomU16i6mbvRg4BrQsi6CWJemqz", - "symbol": "$MEDALS", - "name": "MEDALS", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/MEDLjqYrYTWBVViMNomU16i6mbvRg4BrQsi6CWJemqz/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/7KX3BzaUFZ", - "twitter": "https://twitter.com/Project1776NFT", - "website": "https://project1776.io/" - } - }, - { - "chainId": 101, - "address": "Ayf2qMw1G91X1PmoaYjEiAmDmpLi9dC8DhjQaHDu6qFY", - "symbol": "SPIN", - "name": "Semper-Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Ayf2qMw1G91X1PmoaYjEiAmDmpLi9dC8DhjQaHDu6qFY/logo.png" - }, - { - "chainId": 101, - "address": "2qkahneNuubJ6v8PSqVG3knqr8Ndmu2TaxGBtCkUQ8Ak", - "symbol": "BEEN", - "name": "Been-Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Pandaniel79/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Cy5N1dE6HmBwfkp7DgpEzQBpNjTWo4TnPiNbnd3opmdA", - "symbol": "GGT", - "name": "Green Grove Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/greengroveio/assets/main/logo64.png", - "tags": ["green-grove-token"], - "extensions": { - "description": "Green Grove Token. Love Nature Preserve Green.", - "github": "https://github.com/greengroveio", - "telegram": "https://t.me/solgreengrove", - "twitter": "https://twitter.com/GreenGroveio" - } - }, - { - "chainId": 101, - "address": "Cq5pHfXB8zM7GGZ9r9MKLeh8jGK4TTzwhD4EhW8VVaCp", - "symbol": "DDAO", - "name": "DDAO WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Cq5pHfXB8zM7GGZ9r9MKLeh8jGK4TTzwhD4EhW8VVaCp/logo.png", - "tags": ["WL-token"] - }, - { - "chainId": 101, - "address": "cr8ooTCpZUx4AQW5GquDzsfDNXEN3xxtEYEz8tAjgsw", - "symbol": "CREATE", - "name": "CREATE", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/cr8ooTCpZUx4AQW5GquDzsfDNXEN3xxtEYEz8tAjgsw/logo.png", - "extensions": { - "website": "https://www.sovana.world" - } - }, - { - "chainId": 101, - "address": "WAtEPamrPJxaSrdyJpqroj1FhkUK1ooQWjCiXDrgREi", - "symbol": "WATER", - "name": "Refined Water Crystal", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Bitcoinblack482/logo/main/white.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8cXAosK13961DmvHuYEuZvoTzNS2yrEg2VVby9AZiLGn", - "symbol": "GOAP", - "name": "Golden Ticket APE-NBA", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8cXAosK13961DmvHuYEuZvoTzNS2yrEg2VVby9AZiLGn/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/ape_nba" - } - }, - { - "chainId": 101, - "address": "tFceLf6nLmbWtWjjxEVjmC3Co3r94JNQfbqdbVGnvHt", - "symbol": "MAC", - "name": "macnicoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/anemone-fish/crypto-macnicoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "585mJ5PGUEMZuAEnD3G6DqhxZ6wo6hRBL4JYTtcqArqm", - "symbol": "$TEAK", - "name": "Teak", - "decimals": 9, - "logoURI": "https://github.com/ArthurPaivaT/token-list/blob/main/assets/mainnet/585mJ5PGUEMZuAEnD3G6DqhxZ6wo6hRBL4JYTtcqArqm/logo.png?raw=true" - }, - { - "chainId": 101, - "address": "noUZHVrcXLW2qBcbQNozzXc73qHvpDoS7TdtijjCzH2", - "symbol": "NORS", - "name": "Novavers", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/noUZHVrcXLW2qBcbQNozzXc73qHvpDoS7TdtijjCzH2/logo.svg" - }, - { - "chainId": 101, - "address": "BQwmFvH3ndZCyLdwnC9wcVGi5XxDcTDSVCtZXncGGVhd", - "symbol": "LMT", - "name": "LimboCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Novak-Fenocchio/LimboCoin/main/logo.png" - }, - { - "chainId": 101, - "address": "DjUrGLdzQt9WcU2CWZMzedDLjw35sg4ze2LYi9VfLrvk", - "symbol": "DN", - "name": "Dinomonz", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DjUrGLdzQt9WcU2CWZMzedDLjw35sg4ze2LYi9VfLrvk/logo.png" - }, - { - "chainId": 101, - "address": "8vFjsxK4SHg2XVSB6ofqNNvkFF62fx5Uq588a7f8qrjk", - "symbol": "SIMS", - "name": "Simians Token", - "decimals": 9, - "logoURI": "https://github.com/ArthurPaivaT/token-list/blob/main/assets/mainnet/8vFjsxK4SHg2XVSB6ofqNNvkFF62fx5Uq588a7f8qrjk/logo.png?raw=true" - }, - { - "chainId": 101, - "address": "63y6SwXnhdFi9hd58b92FKJ4k79nbAsQFetQNvgbWBj6", - "symbol": "RISE", - "name": "RISE (ECORISE)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/63y6SwXnhdFi9hd58b92FKJ4k79nbAsQFetQNvgbWBj6/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://ecorise.finance/" - } - }, - { - "chainId": 101, - "address": "Ebb1hE7AN82zMeLLe2JnfJCacnn2zTMP7xfDfqKPcccJ", - "symbol": "DDLE", - "name": "DDLE", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Ebb1hE7AN82zMeLLe2JnfJCacnn2zTMP7xfDfqKPcccJ/logo.png", - "tags": ["social-token", "utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/DOODLETOWN_sol" - } - }, - { - "chainId": 101, - "address": "8GEdymZcgjVku6AfQuQCxqgUk8qpigy5LdP9UTRVcMxw", - "symbol": "ARABPUNKZ", - "name": "ArabPunkz swap token", - "decimals": 9, - "logoURI": "https://storage.googleapis.com/arabpunkz/arab.png", - "tags": ["nft"], - "extensions": { - "animationUrl": "https://storage.googleapis.com/arabpunkz/arabpunkz.mp4", - "description": "ArabPunkz 3D swap token to redeem at arabpunkz.io", - "imageUrl": "https://arwave.art/upga5v2tzpnak1eqlq5kvc/upga5v2tzt.png", - "website": "https://arabpunkz.io" - } - }, - { - "chainId": 101, - "address": "FmzPsB48TSox6VNvpjrciWz43ikS3miBkN9YLZ53heMA", - "symbol": "ATC", - "name": "Alex tech coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Alex000000000010/Alex-tech-coin/main/A__5_-removebg-preview.png", - "tags": ["community-token", "Alex-tech-coin"], - "extensions": { - "website": "https://alextech.be" - } - }, - { - "chainId": 101, - "address": "99qRyZNnpS8kumjAGC23RsKsxUiFUh2dzM2ea84ufQ5x", - "symbol": "TLSM", - "name": "Talisman", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/overload-dev/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5DxzUwbRxdB5Hr67qgQ2uCn1wwc3fN9cjKy4CwuqV17r", - "symbol": "ALALAWI", - "name": "Al-Alawi Network Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/nalalawi2022/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9LtwWPtRLqwKsicJq4KTLid5hkfovxgDxW8AjNDcbEvM", - "symbol": "sFFC", - "name": "staked Fone Fan Club", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9LtwWPtRLqwKsicJq4KTLid5hkfovxgDxW8AjNDcbEvM/logo.png", - "extensions": { - "twitter": "https://twitter.com/FoneFanClub", - "website": "https://fonefan.club/" - } - }, - { - "chainId": 101, - "address": "4NMtJnczmqnEGUn9Gd6cKk5ek8Xb5PvTWFkaBgWj7AWi", - "symbol": "NOVA", - "name": "Nova-Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4NMtJnczmqnEGUn9Gd6cKk5ek8Xb5PvTWFkaBgWj7AWi/logo.png" - }, - { - "chainId": 101, - "address": "BLZgcxVfVMgfK7M2zgGVVrC3H2LkC4N7pYgqS1JJAe9h", - "symbol": "BFMINT", - "name": "Blaze Froman Mint Token", - "decimals": 0, - "logoURI": "https://vf6wknjlc2ipv4cnwmzzmxt2age65itflbmatfrvswbjvmqj.arweave.net/qX1lNSsWkPrwTbM__zll56AYnuomVYWAmWNZWCmrIJo", - "tags": ["social-token"], - "extensions": { - "facebook": "https://www.facebook.com/blazefroman", - "instagram": "https://www.instagram.com/blazefroman/", - "twitter": "https://twitter.com/BlazeFroman", - "website": "https://blazefroman.com/" - } - }, - { - "chainId": 101, - "address": "8GDe3FA2ciLfCNjsg3E9JZEyN2oyNv6yszy3jn7LLPMR", - "symbol": "SWTY", - "name": "Schawty", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/schwty7/cryptooo/main/logo.png", - "tags": ["community-token", "schawty", "777", "schawty777"] - }, - { - "chainId": 101, - "address": "Ac8HFm7bgEm4bNgbUj1woSqnWJDji9gWkc7uH1TosXSy", - "symbol": "RTWL", - "name": "RetroTrades WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Ac8HFm7bgEm4bNgbUj1woSqnWJDji9gWkc7uH1TosXSy/logo.png", - "tags": ["whitelist-token", "retro-trades"], - "extensions": { - "discord": "https://discord.gg/retrotrades", - "twitter": "https://twitter.com/retro_trades", - "website": "https://retrotrades.com/" - } - }, - { - "chainId": 101, - "address": "pMMTGYZ4CjvxTxN3TuwCx11y5CW6zz2MBhXMfWsCGvP", - "symbol": "CORALTRIBENFT", - "name": "Crypto Coral Tribe WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/robertdoo1/logo/main/xlogo.png", - "tags": ["Nft-Token", "Wl-Token"], - "extensions": { - "discord": "https://discord.gg/B4MJcX72g9", - "twitter": "https://twitter.com/coraltribenft", - "website": "https://www.cryptocoraltribe.io/" - } - }, - { - "chainId": 101, - "address": "8xfL5CPfcDfovbBFHZpxPcHeUcYkbFwCGKm2JtrJr3q2", - "symbol": "HVCWL", - "name": "High Voltage Citizens Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8xfL5CPfcDfovbBFHZpxPcHeUcYkbFwCGKm2JtrJr3q2/logo.jpg", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/hvworldsnft", - "twitter": "https://twitter.com/hvWorldsNFT_", - "website": "https://www.highvoltageworlds.io/" - } - }, - { - "chainId": 101, - "address": "4hNTCobkw1dKqxj8cBBZYMteH7XN4VczEABWhDRsQ9rr", - "symbol": "SUUS", - "name": "SUUS AI Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/rxshardcore/cryptosuus/main/suuslogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BEzTDHxrd8WCNNqku744CALPqwepWTkgD2rQWvHt1cMP", - "symbol": "ANDRE", - "name": "axdre", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/andre1code/crypto/main/logosol.png.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "537ZLMxVN8tPrvsyhroC4488s4Ex19f4v764Nre6uhtK", - "symbol": "CENTAURI", - "name": "Centauri Currency", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/537ZLMxVN8tPrvsyhroC4488s4Ex19f4v764Nre6uhtK/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Centauri is the main currency for the Living Dead Teds economy", - "discord": "https://discord.gg/livingdeadteds", - "twitter": "https://twitter.com/LivingDeadTeds", - "website": "https://livingdeadteds.com" - } - }, - { - "chainId": 101, - "address": "GdsVgJPuCM34tQKQfMpF4mtooGA34oM6NxSpZNrxf1Dx", - "symbol": "GV", - "name": "Gods Village", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GdsVgJPuCM34tQKQfMpF4mtooGA34oM6NxSpZNrxf1Dx/logo.png", - "tags": ["social-token"], - "extensions": { - "description": "Mint token for the SOLGods x Village of Sol collab collection." - } - }, - { - "chainId": 101, - "address": "WuvZRuMuLVh7XdvzLGd26RhMqgwSqzJGm9bZ7vpimxn", - "symbol": "WUV", - "name": "WUV Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WuvZRuMuLVh7XdvzLGd26RhMqgwSqzJGm9bZ7vpimxn/logo.png", - "tags": ["utility-token", "smug-pugs"], - "extensions": { - "discord": "https://discord.com/invite/thesmugpugs", - "twitter": "https://twitter.com/thesmugpugs", - "website": "https://thesmugpugs.com" - } - }, - { - "chainId": 101, - "address": "EiuUs8ZvHWjMgJEgDYtKZEnCPRxnXqFLRqypU6GuUCrS", - "symbol": "PWAL", - "name": "PWAL Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/elbarko/crypto/main/logo.png", - "tags": ["social-token"], - "extensions": { - "description": "PWAL Esports Fan Token." - } - }, - { - "chainId": 101, - "address": "5E8bAHYXaEaxw3yXDKEnbAjtTM4QRjivRmNDpaczY1gD", - "symbol": "MFAT", - "name": "MFA TOKEN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/MFAToken/mfa-logo/main/mfa.png.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "description": "building the next generation of ecofriendly technology through the blockchain technology", - "discord": "https://www.discord.gg/GUHt6KmekA", - "telegram": "https://t.me/MFAToken", - "twitter": "https://twitter.com/MfaToken", - "website": "https://www.mfafinance.space/" - } - }, - { - "chainId": 101, - "address": "GATEsQgEEvavv9gz5mpb4PPDfWNR9PLr3TLq4xuj67SG", - "symbol": "GOI", - "name": "Gates of Imaginarium WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GATEsQgEEvavv9gz5mpb4PPDfWNR9PLr3TLq4xuj67SG/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/Imaginarium_SOL" - } - }, - { - "chainId": 101, - "address": "3D4zNUJMqXUcShpFC9BeK3ueGodQ8y85iX1uN34YNYss", - "symbol": "FEMNS", - "name": "Remnants Female Sub-WL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3D4zNUJMqXUcShpFC9BeK3ueGodQ8y85iX1uN34YNYss/logo.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "discord": "https://discord.com/invite/remnantsnft", - "twitter": "https://twitter.com/RemnantsNFT", - "website": "https://www.theremnantsnft.com/" - } - }, - { - "chainId": 101, - "address": "FPWsFrQRhJpiCZAAUotNes3XZuBTv8M5yLYU7YYGc61J", - "symbol": "FPW", - "name": "Forart Painter Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FPWsFrQRhJpiCZAAUotNes3XZuBTv8M5yLYU7YYGc61J/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "ThEJu98i7RUqWpsZNPy7uanted83FP6xGpEpkc9DN2E", - "symbol": "WYSI", - "name": "ZenithCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/ZenithBlockchain/token-assets/main/zcoincircle.png", - "tags": ["utility-token"], - "extensions": { - "description": "A cryptocurrency built for the osu! community.", - "discord": "https://discord.gg/TkYRqfCT55", - "twitter": "https://twitter.com/zenithcoin727" - } - }, - { - "chainId": 101, - "address": "FHr2iKwqV93UyMA6KJoJJgZcT7WXvE9oxX4qCU1iuzR5", - "symbol": "SSAC", - "name": "Solana Ape Social", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MichaelohodSOL/SSAC/main/socialape-Recovered.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "5e5znzUAuWrM7p96XTZZyn5KWKRikLr1m8rpQESriebT", - "symbol": "ERNESTWL", - "name": "Ernest Beyond Mint Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5e5znzUAuWrM7p96XTZZyn5KWKRikLr1m8rpQESriebT/logo.png", - "extensions": { - "discord": "https://discord.gg/ernestindisguise" - } - }, - { - "chainId": 101, - "address": "CcHtGVcHKSy7bGkfu14CsUko5bykGJUSnjKwWQ7HFV6N", - "symbol": "HSB", - "name": "Heartsbane", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/xForgex/Heartsbane/main/Heartsbane.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DiSAiGzghbx8EUJqjvjAysB7Tw1hLkyLeZn9nDCGNNe", - "symbol": "dsku", - "name": "DISARTICULATED SKULLYS EARLY WL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DiSAiGzghbx8EUJqjvjAysB7Tw1hLkyLeZn9nDCGNNe/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/dskullys", - "website": "https://dskullys.com/" - } - }, - { - "chainId": 101, - "address": "3KXM56KYWfjRUhsLyNZoWKYv2dgNDaXhF9YKb11iB9kK", - "symbol": "RABBITS", - "name": "Rabbit Tkn", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3KXM56KYWfjRUhsLyNZoWKYv2dgNDaXhF9YKb11iB9kK/logo.png" - }, - { - "chainId": 101, - "address": "LiLyT885cG9xZKYQk9x6VWMzmcui4ueV9J1uzPDDajY", - "symbol": "LILY", - "name": "Solily Protocol Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/LiLyT885cG9xZKYQk9x6VWMzmcui4ueV9J1uzPDDajY/logo.png", - "tags": ["community-token"], - "extensions": { - "website": "https://www.solily.io/" - } - }, - { - "chainId": 101, - "address": "8yuQCKTxmQTVXcEFUFUsKyFeaMALcQqMSAHzRua3x5BJ", - "symbol": "SMKR", - "name": "Stoney", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/cashboysen/StoneyToken/main/Stoney-token.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "36234VF2prDP7YmFPQixUi3ikJYULo34yhRobViwerq1", - "symbol": "GG", - "name": "Golem Guardians", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/cashboysen/golem1/main/GolemTokey.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "HWSqJdwemji7TNiKQPudUj86LXyF3vGAtWm5ePk5KzgD", - "symbol": "SIX", - "name": "Solana Eco Index", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HWSqJdwemji7TNiKQPudUj86LXyF3vGAtWm5ePk5KzgD/logo.png", - "tags": ["Index", "SypoolProduct"], - "extensions": { - "description": "Solana Eco Index is based on the 5 crypto assets on Solana.", - "website": "https://sypool.io/" - } - }, - { - "chainId": 101, - "address": "C22BsnQ7jXT44qwJg1JtcfVxdCtkhjJeN8AKptRv9o1w", - "symbol": "ZAZA", - "name": "ZA", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/ZackAttakk1/crypto/main/za_crypto.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "TUXaNJFxPGHUGzAr2pjsYoCZCVCtXKGGWJWFEeKGeRi", - "symbol": "TOOX", - "name": "TOOX TOKEN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/TUXaNJFxPGHUGzAr2pjsYoCZCVCtXKGGWJWFEeKGeRi/logo.png" - }, - { - "chainId": 101, - "address": "baFwxU2f4ePZDWaYFBNWi4xHUFVTVyKiEknCQNfNi7Q", - "symbol": "RERE", - "name": "RERE", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/TUXaNJFxPGHUGzAr2pjsYoCZCVCtXKGGWJWFEeKGeRi/logo.png", - "tags": ["currency"] - }, - { - "chainId": 101, - "address": "EQqRcQ7jL5wdhxqtVdJtnFyCex2pF4NaEKhcHEJFs9P2", - "symbol": "2", - "name": "sefesaf", - "decimals": 1, - "logoURI": "https://commons.wikimedia.org/wiki/Commons:Quality_images#/media/File:Gull_portrait_ca_usa.jpg", - "tags": ["currency"] - }, - { - "chainId": 101, - "address": "N9sYFwgtYwkuCFcDhF7CT1Pv6dXrSSifuKLLbgGVcY8", - "symbol": "1", - "name": "11111", - "decimals": 11, - "logoURI": "https://commons.wikimedia.org/wiki/Commons:Quality_images#/media/File:Gull_portrait_ca_usa.jpg", - "tags": ["currency"] - }, - { - "chainId": 101, - "address": "2EmsWdDVDZ3B1ZDsM8EMk3s53iygwUFdpmxNnr24VBdg", - "symbol": "TT", - "name": "ttt", - "decimals": 2, - "logoURI": "https://commons.wikimedia.org/wiki/Commons:Quality_images#/media/File:Gull_portrait_ca_usa.jpg", - "tags": ["currency"], - "extensions": { - "telegram": "https://t.me/omardd" - } - }, - { - "chainId": 101, - "address": "6meUpSTqqqj8UE1G46fT4M9C8KTvWunrEpAqRdaSNshe", - "symbol": "USDP", - "name": "Solana USDP ", - "decimals": 18, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6meUpSTqqqj8UE1G46fT4M9C8KTvWunrEpAqRdaSNshe/logo.png", - "tags": ["social-platform-tf", "assetwallet", "stable-token"] - }, - { - "chainId": 101, - "address": "EbMg3VYAE9Krhndw7FuogpHNcEPkXVhtXr7mGisdeaur", - "symbol": "bSOL-Lido", - "name": "Lido Bonded SOL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EbMg3VYAE9Krhndw7FuogpHNcEPkXVhtXr7mGisdeaur/logo.svg", - "extensions": { - "github": "https://github.com/ChorusOne/solido", - "twitter": "https://twitter.com/anchor_protocol", - "website": "https://anchorprotocol.com/" - } - }, - { - "chainId": 101, - "address": "DYvKZYDjBVTmxg22T3Q6z64oxPTSNkknpptqLswiGk6Z", - "symbol": "$DARK", - "name": "DARK", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DYvKZYDjBVTmxg22T3Q6z64oxPTSNkknpptqLswiGk6Z/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.com/invite/3DEGTZJ68J", - "twitter": "https://twitter.com/Arkanauts", - "website": "https://www.arkanauts.io/" - } - }, - { - "chainId": 101, - "address": "5nkAGRqgBRJs7fqU4Vkrhu1DDQPKJBvAZsRPGV9vCeYa", - "symbol": "BSAMO", - "name": "Baby Samo", - "decimals": 9, - "logoURI": "https://babysamo.io/assets/images/babysamo.png", - "tags": ["p2e"], - "extensions": { - "website": "https://babysamo.io" - } - }, - { - "chainId": 101, - "address": "TsmrVzWkfBY3VJDWVRfNjqaaBgmLvT4n9qx1uqCk9Fd", - "symbol": "SIN", - "name": "SIN Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/TsmrVzWkfBY3VJDWVRfNjqaaBgmLvT4n9qx1uqCk9Fd/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/thesaints_nft", - "website": "https://saintsnft.art" - } - }, - { - "chainId": 101, - "address": "9xnUf5okunLfCr5dHsZKms3rukkchh2QBavZ7hUH4v7o", - "symbol": "SOR", - "name": "Soricu Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/sori18/SPC-token/main/logo_token.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "MindKcJKhBwNAboyrWh8Ku6GGKrP6kS6TSkr7zzWZJ9", - "symbol": "MINDFOLK", - "name": "Mind Folk White List Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Bitcoinblack482/logo/main/mind.png", - "tags": ["whitelist-token"], - "extensions": { - "discord": "http://discord.gg/mindfolk", - "twitter": "https://twitter.com/mindfolkART", - "website": "https://www.mindfolk.art/" - } - }, - { - "chainId": 101, - "address": "DxTqxF6mbaznxyLv3aWHJydoCSiLwjw3xWb5fsqFSMzk", - "symbol": "USDP-Sol", - "name": "Social Platform USDP ", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DxTqxF6mbaznxyLv3aWHJydoCSiLwjw3xWb5fsqFSMzk/logo.png", - "tags": ["social-platform-tf", "assetwallet", "stable-token"] - }, - { - "chainId": 101, - "address": "6D7nXHAhsRbwj8KFZR2agB6GEjMLg4BM7MAqZzRT8F1j", - "symbol": "GOSU", - "name": "Gosu", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/jGosu/gosu/main/GOSU%20COIN.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7sKGwnwpfJCYdwKzGzSUwUUf5TFPh9yuQXcVe3wgUHUm", - "symbol": "SRBAN", - "name": "SRBan", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/scoalabritanica/srban/main/logo.png", - "tags": ["srb", "srban"], - "extensions": { - "website": "https://scoalabritanica.ro" - } - }, - { - "chainId": 101, - "address": "E5NEDaxz7o8Vix5ZWx4BC5WR9mavFdBd78t5jeorMr4p", - "symbol": "TOTE", - "name": "TOTE Club", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/E5NEDaxz7o8Vix5ZWx4BC5WR9mavFdBd78t5jeorMr4p/logo.png" - }, - { - "chainId": 101, - "address": "14Zi6xaKrFpEdxQKyU1SnSE8dfa97Gfj1jrtuWCxWnZL", - "symbol": "WPUFF", - "name": "Wonderpuff", - "decimals": 2, - "logoURI": "https://bafkreifpmmgm3wp7e5u5hhnbxbq5djoh6zhickapb6e3yq2x473pn2w66q.ipfs.nftstorage.link/?ext=png", - "tags": ["NFT", "utility-token"], - "extensions": { - "discord": "https://discord.gg/8J2tZgHQHu", - "twitter": "https://twitter.com/smokeheadsnft", - "website": "https://smokeheads.io/" - } - }, - { - "chainId": 101, - "address": "9GqndzQdubZTToSdbRqxEtNEjn6kDBoyeVJCAUCTx9x7", - "symbol": "BWL", - "name": "Blockchain WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Robby3082/test-token/main/IMG_4934%20(1)%20(1).png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "TompRnwU1mEDtCefeQZrzEgXmZVxYQJuqpoFbAsudKn", - "symbol": "RC", - "name": "RagaTest Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/TompRnwU1mEDtCefeQZrzEgXmZVxYQJuqpoFbAsudKn/logo.png" - }, - { - "chainId": 101, - "address": "4xc2U5BmAH9N1yH2WeQAKknjMd3sfs47iLc4r5X7bUYp", - "symbol": "WPWLT", - "name": "WOLFE PLANET", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4xc2U5BmAH9N1yH2WeQAKknjMd3sfs47iLc4r5X7bUYp/logo.png", - "tags": ["whitelist-token", "utility-token"], - "extensions": { - "twitter": "https://twitter.com/wolfeplanetnft" - } - }, - { - "chainId": 101, - "address": "65WJf4jpYjtkjiNo6iMC2zYPsz4y7GfK8sPscaVZkfnb", - "symbol": "LTQN", - "name": "LitQoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/acorley094/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AjRCYF6Ve8gw3XBF1CYb5E9jpfruiKJNHCNhkfHuEULv", - "symbol": "RMBL", - "name": "RMBL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/farhan067/RumbleToken/main/logo.png", - "extensions": { - "website": "https://www.rumblemonkeys.io/" - } - }, - { - "chainId": 101, - "address": "9AyeEQHKS49rp2pUTwXkjnC37xXNb9Gpz72rEZQUvJSo", - "symbol": "SPRZ", - "name": "SpritzerCoin", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/spritzercoin/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GXzNKiMP9YWHMMvWnT2cag8UHx5fgMHRfqmVW22K2hm7", - "symbol": "BSAMO", - "name": "BSamo", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GXzNKiMP9YWHMMvWnT2cag8UHx5fgMHRfqmVW22K2hm7/bsamo.png", - "tags": ["metaverse"], - "extensions": { - "website": "https://babysamo.io/" - } - }, - { - "chainId": 101, - "address": "78fRJMzWdKpeb2cAQ1pe25J5Fth9Mmiufzsi4KfazQdL", - "symbol": "H2O", - "name": "Cactus World H2O", - "decimals": 9, - "logoURI": "https://github.com/ArthurPaivaT/token-list/blob/main/assets/mainnet/78fRJMzWdKpeb2cAQ1pe25J5Fth9Mmiufzsi4KfazQdL/logo.png?raw=true" - }, - { - "chainId": 101, - "address": "2F8Zv14u8N5523wrjz85V7FxodrtJx5pCmwmvBimnaUh", - "symbol": "HVER", - "name": "HodlVerse Token", - "decimals": 6, - "logoURI": "https://github.com/LungTied/assets/blob/main/logo_blue.png?raw=true" - }, - { - "chainId": 101, - "address": "DPHUre2EzbEwpXQ8ratzPTR7oaNWFZDxPoPzjHaqfgbb", - "symbol": "LIMP", - "name": "LIMP", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DPHUre2EzbEwpXQ8ratzPTR7oaNWFZDxPoPzjHaqfgbb/logolimp.png", - "tags": ["NFT"] - }, - { - "chainId": 101, - "address": "Lionf78kvavZVYrxrTvhkVaAsUPukxxaRa1PSUzVr4Q", - "symbol": "LPC", - "name": "Lion Pride Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Lionf78kvavZVYrxrTvhkVaAsUPukxxaRa1PSUzVr4Q/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://t.co/te0ypLTUGO", - "medium": "https://medium.com/@lionprideclub", - "telegram": "https://t.me/LionPrideClub", - "twitter": "https://twitter.com/LionPrideClub", - "website": "https://lionprideclub.io/" - } - }, - { - "chainId": 101, - "address": "Ah4zryc37twq8UMsxhMwqhVz9N9C8t1xzSXhJagMVEFC", - "symbol": "PAVC", - "name": "Pav Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Pavelnas/pav-token-logo/master/pav-token-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CzJ1VW76gnBzgYrNhcz5CRN8PcUEV3vSDixoxWsz4PNL", - "symbol": "WIPS", - "name": "WIP INTL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/wipintl/Tokens22/main/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "AqvSwjspmf5W8w62DXP6sfKfS6DMmPuMU1564pYpBNJr", - "symbol": "ODLC", - "name": "OuftiDiLidje Coin", - "decimals": 8, - "logoURI": "https://github.com/OuftiDiLidje/crypto/blob/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "92Xve6K3BJc1nr571MTPmyXdn18GuBqY95Wvnb1PsKG5", - "symbol": "MART", - "name": "MetaArt", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/92Xve6K3BJc1nr571MTPmyXdn18GuBqY95Wvnb1PsKG5/logo.png", - "tags": ["MetaArt"], - "extensions": { - "facebook": "https://www.facebook.com/metaarttoken", - "telegram": "https://t.me/metaartglobal", - "twitter": "https://twitter.com/metaartoffici", - "website": "https://www.metaarttoken.info/", - "whitepaper": "https://metaart.network/whitepaper.pdf" - } - }, - { - "chainId": 101, - "address": "BEDKeYwngxh6ii8zJPJGkGEqE5ocMYtgqy5RYYoxGfDE", - "symbol": "CCART", - "name": "CHEETAHS CARTEL", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BEDKeYwngxh6ii8zJPJGkGEqE5ocMYtgqy5RYYoxGfDE/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/Cheetahs_Cartel" - } - }, - { - "chainId": 101, - "address": "EDkC5pB4TWNL2dcpBFfGpKuJTYzhAPvhrMyXgRnyKFT8", - "symbol": "SDRAW", - "name": "SolDragon", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EDkC5pB4TWNL2dcpBFfGpKuJTYzhAPvhrMyXgRnyKFT8/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://dragonwar.io" - } - }, - { - "chainId": 101, - "address": "4hDLn4g4b3NvBzN33nfiHf6W7uX3rfDqkyPt3v4atgbs", - "symbol": "WFE", - "name": "Wolfee coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Gorillad/crypto/main/wolfee-logo.png", - "tags": ["social-token", "XO-token", "community-token", "metaverse"] - }, - { - "chainId": 101, - "address": "5XewXRTjLKGFBZdVjbDr8zq2udSSQ3ANTKHDtKVj3d4h", - "symbol": "KNTX", - "name": "Kinetic", - "decimals": 18, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5XewXRTjLKGFBZdVjbDr8zq2udSSQ3ANTKHDtKVj3d4h/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://kineticpay.app/" - } - }, - { - "chainId": 101, - "address": "BCAph72Lo4kGuF5LnN2KMy5BGwe97eyWkbYZX44AsVeG", - "symbol": "BCA", - "name": "BitcodeArt Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BCAph72Lo4kGuF5LnN2KMy5BGwe97eyWkbYZX44AsVeG/logo.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "website": "https://www.bitcode.art" - } - }, - { - "chainId": 101, - "address": "3bMghewsbjApquGDRJNRs6J9eqVxiZgc4PZq2CY6Smoq", - "symbol": "$PICASO", - "name": "PICASO COIN", - "decimals": 6, - "logoURI": "https://github.com/boosbasement/metaboss/blob/main/Abstract%20Art%20Framed%20Art%20Print.png?raw=true", - "tags": ["social-token"], - "extensions": { - "website": "https://twitter.com/PICASOAPES" - } - }, - { - "chainId": 101, - "address": "yPAhSbua2wEWLtRR2nyxV1xsXogx41JUV3kPmJ9NNxW", - "symbol": "y-USTv2-3Pool", - "name": "Yield Mercurial LP Token (USTv2-3Pool)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/yPAhSbua2wEWLtRR2nyxV1xsXogx41JUV3kPmJ9NNxW/logo.svg", - "tags": ["yield-token"], - "extensions": { - "website": "https://bunnyducky.com/" - } - }, - { - "chainId": 101, - "address": "CyWGk1hWVQsGmDt3Na5MyNcWaEDh6MSkTCvAdA5h1Ke8", - "symbol": "SaSN", - "name": "SaSN Coin", - "decimals": 9, - "logoURI": "https://seth.kitchen/images/sasn.png", - "tags": ["social-token", "metaverse", "game-token", "payment-token"], - "extensions": { - "facebook": "https://www.facebook.com/MarquettDavon", - "instagram": "https://www.instagram.com/marquettdavon/?hl=en", - "website": "https://thesasn.com/", - "youtube": "https://www.youtube.com/user/catchphrayse" - } - }, - { - "chainId": 101, - "address": "AUnF9BxPPtZZYdm9dPXMiVeF3TJvPaXPisSYPU5jWp36", - "symbol": "FLOAT", - "name": "Floating Apes Affiliation", - "decimals": 1, - "logoURI": "https://bafybeidcqhtql7u6ppdgttwrx2e2qhb64mrvhqyilgks43msuhaisz3juu.ipfs.dweb.link/?ext=png", - "tags": ["NFT", "utility-token"], - "extensions": { - "discord": "https://discord.gg/FNjCyHxQNW", - "twitter": "https://twitter.com/FloatingApesNFT", - "website": "https://floatingapesnft.io/" - } - }, - { - "chainId": 101, - "address": "9RNdhLncFBD9E8gX6JyZh6QoxBzqfeivMyBacu42omH8", - "symbol": "D3D", - "name": "D3D", - "decimals": 0, - "logoURI": "https://bafkreidhiegzjjqnikoevl4fbuuocdrnvmxyy2bnnoeoha6kwykhgscuwm.ipfs.dweb.link/?ext=png", - "tags": ["NFT", "utility-token"], - "extensions": { - "discord": "https://discord.gg/7sBZAuUP", - "twitter": "https://twitter.com/DeadRejcts", - "website": "https://discord.gg/deadrejects" - } - }, - { - "chainId": 101, - "address": "2QQSvZYmMRBvqmJXWeSBNhDvRWQ6b4PgB5cYhVkE1xjt", - "symbol": "LANA-SOL", - "name": "LANA SOL LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/dev8x/token-list/main/assets/mainnet/2QQSvZYmMRBvqmJXWeSBNhDvRWQ6b4PgB5cYhVkE1xjt/icon.png", - "extensions": { - "medium": "https://lanafinance.medium.com/", - "twitter": "https://twitter.com/lanaprotocol", - "website": "https://lanafi.app/" - } - }, - { - "chainId": 101, - "address": "3uJmmABv4B2W7Qih1DdjrzvtdAbkuishC7vqq3UN2X1h", - "symbol": "uHOD", - "name": "HOD Utility Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/hodrbrth/assets/main/hodjpg.png", - "tags": ["NFT", "utility-token"], - "extensions": { - "description": "The utility token for House of Dracula NFT Project. Use this token to benefit from the entire HOD ecosystem.", - "discord": "https://discord.gg/nYaH78mm", - "instagram": "https://www.instagram.com/wearehod", - "twitter": "https://twitter.com/wearehod", - "website": "https://houseofdracula.io/" - } - }, - { - "chainId": 101, - "address": "3ht2fqucXTo2MxSYf4ynFk38czcacMz8enk3NQBS9QsE", - "symbol": "END", - "name": "Coinecny", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/PepeUltim/pepe2/main/coinecny.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EHzG5r13iUB1AAYgBZUsqr6wrsgN9Ukt4ti6kiZsYLqk", - "symbol": "QDRO", - "name": "Quadro", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/thaguss/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4Up16GyRmybEEDfaCsDszkzkvtWgoKDtS4cUyBEjvPBM", - "symbol": "VAULT", - "name": "Vandal City Vault", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4Up16GyRmybEEDfaCsDszkzkvtWgoKDtS4cUyBEjvPBM/logo.png", - "tags": ["gaming-token", "social-token"] - }, - { - "chainId": 101, - "address": "6kkSMsndFkxvGLMbmDXrA2rcEgyaipQwQM5mpCCK1hAa", - "symbol": "SB", - "name": "Shaaban", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/abeddshaban/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "6kkSMsndFkxvGLMbmDXrA2rcEgyaipQwQM5mpCCK1hAa", - "symbol": "Sb", - "name": "Shaaban", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/abeddshaban/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "31GHSSaLHJyUVXzXFLe9GrZYBVeamW81Jgvibz2LkvgC", - "symbol": "P2PCO", - "name": "Peer2Peer Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/robbescobedo/P2PCOIN-DEV/main/P2PCOIN.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "5ade7tniH92hsvySFFTCLMoDLj1BXndWtwMmqAJVFdmp", - "symbol": "soI", - "name": "soIana", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Solofuu/sol-project/main/sol%20logo.png", - "tags": ["Social-token"] - }, - { - "chainId": 101, - "address": "8zTUiMnMUFeSEV5iZjmY4v8TZTj5fw9Hx7ex9XEZULWC", - "symbol": "FIT", - "name": "Fit Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8zTUiMnMUFeSEV5iZjmY4v8TZTj5fw9Hx7ex9XEZULWC/logo.png", - "tags": ["utility-token", "fitness-token"], - "extensions": { - "twitter": "https://twitter.com/fitroomnft", - "website": "https://www.fitroomproject.io/" - } - }, - { - "chainId": 101, - "address": "BAaN4r6pPHNLhm5t5FssMLpcnYFz9MpxUBc1gVox4jRF", - "symbol": "SHADE", - "name": "SHADES", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BAaN4r6pPHNLhm5t5FssMLpcnYFz9MpxUBc1gVox4jRF/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.com/invite/Y72V9wn3Yw", - "reddit": "https://www.reddit.com/r/AikoNFT/", - "twitter": "https://twitter.com/aikonft", - "website": "https://aiko.io/" - } - }, - { - "chainId": 101, - "address": "HYb8vNQmJxbwcW6vwM6b5pk54uqC3z2VyhvkF6SUJLuE", - "symbol": "BWL", - "name": "Bandit Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HYb8vNQmJxbwcW6vwM6b5pk54uqC3z2VyhvkF6SUJLuE/logo.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "TooaT4kKfpGQ7bD9NsZhEU81qDXoAn2GzqBLyaGY1e8", - "symbol": "WLHELLCATS", - "name": "SOLHELLCATS Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/TooaT4kKfpGQ7bD9NsZhEU81qDXoAn2GzqBLyaGY1e8/logo.png", - "tags": ["utility-token", "whitelist-token"], - "extensions": { - "discord": "https://discord.gg/Fpb5Z3rEkN", - "twitter": "https://twitter.com/solhellcats", - "website": "https://www.solhellcats.com/" - } - }, - { - "chainId": 101, - "address": "Bdx9ATvoc2xnieDPRyeCcxpxNsk9fFUUwixhN4rmH6Lo", - "symbol": "HELL", - "name": "HELL Protocol Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Bdx9ATvoc2xnieDPRyeCcxpxNsk9fFUUwixhN4rmH6Lo/logo.png", - "tags": ["utility-token", "community-token", "game-token"], - "extensions": { - "discord": "https://discord.gg/Fpb5Z3rEkN", - "twitter": "https://twitter.com/solhellcats", - "website": "https://www.solhellcats.com/" - } - }, - { - "chainId": 103, - "address": "7nQYf1SWiWzdyb3yBX9zab9faCqtPQojka7Qu7YARiBn", - "symbol": "OUTO", - "name": "Outcast Otter Token", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7nQYf1SWiWzdyb3yBX9zab9faCqtPQojka7Qu7YARiBn/logo.png", - "extensions": { - "discord": "https://discord.gg/jQECYpurkm", - "twitter": "https://twitter.com/outcastotters", - "website": "https://outcastotters.com" - } - }, - { - "chainId": 101, - "address": "CUvVMqXAcyFJnwMhojQ9jmGuWrijGt26HfY7b99dyBeB", - "symbol": "FLWRS", - "name": "FLWRS Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/pablolefleur/flwrsimage/main/flwrs%20logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "ANjyHtneJY7ntKwgd9F5Xy2ui3zzn6NYyGEXQzaVzQnK", - "symbol": "OCEAN", - "name": "Rich Water Reserve Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ANjyHtneJY7ntKwgd9F5Xy2ui3zzn6NYyGEXQzaVzQnK/logo.png", - "tags": ["currency", "utility-token"], - "extensions": { - "twitter": "https://twitter.com/RichwaterNFT", - "website": "https://www.richwaternft.com/" - } - }, - { - "chainId": 101, - "address": "BBaUcA9HFb6iJgXBzWn7pi1bptuBMETNXzge2BGti9Ts", - "symbol": "RMBLWL", - "name": "Rumble Monkeys Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BBaUcA9HFb6iJgXBzWn7pi1bptuBMETNXzge2BGti9Ts/logo.png", - "tags": ["community-token", "meme-token"], - "extensions": { - "twitter": "https://twitter.com/RumbleMonkeys", - "website": "https://rumblemonkeys.io" - } - }, - { - "chainId": 101, - "address": "3VB7TvkTb4VtdxN7sdWe8upRg6hyeUtKKAFEneeRWQAs", - "symbol": "EGTA", - "name": "Acción Ecogoldtech SAS", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3VB7TvkTb4VtdxN7sdWe8upRg6hyeUtKKAFEneeRWQAs/logo.png", - "tags": [ - "utility-token", - "social-token", - "security-token", - "community-token" - ], - "extensions": { - "description": "EGT representa las acciones tokenizadas oficiales de la compañía minera colombiana Ecogoldtech S.A.S. EGT es un token de utilidad para nuestro protocolo de credibilidad universal, respaldado por la solidez, robustez y transparencia de un fuerte motor productivo y comercial basado en oro como commodity y valor refugio a nivel global. La posesión de una acción EGT representa un compromiso entre Ecogoldtech S.A.S y sus accionistas, en el que se comprenden beneficios exclusivos y corporativos a cambio del mantenimiento de la acción durante cierto periodo de tiempo. Creemos que EGT representa la modernización de la industria tradicional en una nueva era digital, con la capacidad de poner a disposición de todos grandes oportunidades económicas y globales.", - "website": "https://ecogoldtech.com/" - } - }, - { - "chainId": 101, - "address": "BTiwt1sy2gr5Q2vpfZAQ8uFdy155h8vDo4H44yHuQs8Y", - "symbol": "RELIC02", - "name": "FUTURE RELIC 02 Mint Pass", - "decimals": 0, - "logoURI": "https://artiftakt3d.s3.amazonaws.com/future-relic.gif", - "extensions": { - "description": "Mint pass for FUTURE RELICS 02", - "imageUrl": "https://artiftakt3d.s3.amazonaws.com/future-relic.gif", - "twitter": "https://twitter.com/ARTIFAKTS_sol", - "website": "https://www.future-relics.xyz/" - } - }, - { - "chainId": 101, - "address": "45tMkQQo6edS4qaYkSn6u835KE5J11R8xpp8G2VCSwXE", - "symbol": "SILT", - "name": "SILICA", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/GameSlaveSA/crypto/main/silicalogo.png", - "tags": ["community-token", "social-token", "utility-token"], - "extensions": { - "twitter": "https://twitter.com/silicatoken", - "website": "http://www.silicatoken.tech" - } - }, - { - "chainId": 101, - "address": "hsySZyND6UyLm748LDcWG7SLDzyTpgF4jpFnZdMwPXh", - "symbol": "BVLL-G-OG", - "name": "BVLL-G OG Mint Pass", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/noFAYZ/bvll-g/main/public/bvllgog.png", - "extensions": { - "description": "BVLL-G OG Mint Pass", - "imageUrl": "https://raw.githubusercontent.com/noFAYZ/bvll-g/main/public/bvllgog.png", - "website": "https://bvll-g.com/" - } - }, - { - "chainId": 101, - "address": "B2K7et7RDYjpuaYFcspBYxbnWP7C3v85cQif7ZsntVtz", - "symbol": "BVLL-G-WL", - "name": "BVLL-G WL Mint Pass", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/noFAYZ/bvll-g/main/public/bvllgwl.png", - "extensions": { - "description": "BVLL-G WL Mint Pass", - "imageUrl": "https://raw.githubusercontent.com/noFAYZ/bvll-g/main/public/bvllgwl.png", - "website": "https://bvll-g.com/" - } - }, - { - "chainId": 101, - "address": "7utH6rGUdnuji8mMmRQxqysYyzTAH7bbL11Abzpon3s1", - "symbol": "UB", - "name": "UB WL TOKEN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7utH6rGUdnuji8mMmRQxqysYyzTAH7bbL11Abzpon3s1/logo.png", - "tags": ["WL-token"] - }, - { - "chainId": 101, - "address": "8Z7AmnrU8LXpjPj81Ge4hSAB58cG7EAEpNiHv5sNPXBb", - "symbol": "PANDASK", - "name": "PandaSk-Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Panda36987/PNG/main/dddweewe.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GJ6pXFziLYZXQoEfuhMsemvBYwYi8BbDwBV41gHGPtaF", - "symbol": "CHRS", - "name": "Chriscoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/vekioschristos/coin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FmQ7v2QUqXVVtAXkngBh3Mwx7s3mKT55nQ5Z673dURYS", - "symbol": "DARK", - "name": "The Dark Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FmQ7v2QUqXVVtAXkngBh3Mwx7s3mKT55nQ5Z673dURYS/logo.png", - "tags": ["nfts", "utility-token"], - "extensions": { - "discord": "https://discord.gg/anonclub", - "medium": "https://theanonclub.medium.com/", - "twitter": "https://twitter.com/theanonclub", - "website": "https://theanonclub.com/" - } - }, - { - "chainId": 101, - "address": "CRWkXevcvWpkftaCFWKnxpeoAiBvRJy4vLCAo8sFqxs5", - "symbol": "THUGZ", - "name": "3D THUGZ WHITELIST TOKEN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CRWkXevcvWpkftaCFWKnxpeoAiBvRJy4vLCAo8sFqxs5/logo.png", - "tags": ["NFT", "utility-token"], - "extensions": { - "discord": "https://discord.gg/wK4Sxdjn55", - "twitter": "https://twitter.com/3d_thugz", - "website": "https://3dthugz.com" - } - }, - { - "chainId": 101, - "address": "ToeSuh71yJAWP2EeKwm3wXDpcJKeudpTK86ec4ftTUD", - "symbol": "CD", - "name": "Chicken Diddle WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HCP8hGKS6fUGfTA1tQxBKzbXuQk7yktzz71pY8LXVJyR/logo.png" - }, - { - "chainId": 101, - "address": "E85VGYoRTojo2tYvoCqEtKUTr16Xcm6DbxcooK1T4mwJ", - "symbol": "ST", - "name": "Solmon Trainer Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jwurrow/solmon/a715cead035d9182efe018ff11827ccec4fc7dd1/solmon-token.png", - "extensions": { - "description": "Solmon Trainer Whitelist Token", - "imageUrl": "https://raw.githubusercontent.com/jwurrow/solmon/a715cead035d9182efe018ff11827ccec4fc7dd1/solmon-token.png", - "website": "https://solmon.game/" - } - }, - { - "chainId": 101, - "address": "FGWLpx2iQntuhYcLfECbJcDDpQ6LW2feHJA7ZYv3F244", - "symbol": "FGWL", - "name": "Float Goat Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FGWLpx2iQntuhYcLfECbJcDDpQ6LW2feHJA7ZYv3F244/logo.png", - "tags": ["whitelist-token", "nfts"] - }, - { - "chainId": 101, - "address": "TFTY9zFrum5FkJ63WqJFFSti7mAXyMSNvodx1xnHL1H", - "symbol": "TFWL", - "name": "Top Floater Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FGWLpx2iQntuhYcLfECbJcDDpQ6LW2feHJA7ZYv3F244/logo.png", - "tags": ["whitelist-token", "nfts"] - }, - { - "chainId": 101, - "address": "SFTZFZd9t4uCmRqdDL3WY248Bbdkdgv5Q6PUHc9bPNC", - "symbol": "SFWL", - "name": "Sky Floater Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FGWLpx2iQntuhYcLfECbJcDDpQ6LW2feHJA7ZYv3F244/logo.png", - "tags": ["whitelist-token", "nfts"] - }, - { - "chainId": 101, - "address": "GEN3cWvZvGphDWGe534R7bgttgHiZ4TbZ9EUBLgEo6EG", - "symbol": "GEN3MINT", - "name": "Gen3 Studios Mint Token", - "decimals": 0, - "logoURI": "https://arweave.net/_Q3yzSqPrGlAS6Jr3f5L-y3w9nLm66_0ru8kVXNUYnY", - "tags": ["whitelist-token"], - "extensions": { - "discord": "https://discord.gg/haK4f52h", - "twitter": "https://twitter.com/Gen3studios", - "website": "https://gen3.studio" - } - }, - { - "chainId": 101, - "address": "Fb9krWjycVnuxPXo52k5BgHf7tXpG88HsD4aMQB5oXn2", - "symbol": "CRNY", - "name": "Corny Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jtcordrick1/crypto/main/corn3.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "93dbPLEUYm3Res4t9CTRn1GQq9qs24PdZrxonRicpbr2", - "symbol": "saSOL", - "name": "Saturn Solana", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/93dbPLEUYm3Res4t9CTRn1GQq9qs24PdZrxonRicpbr2/logo.png", - "tags": ["NFT", "utility-token"], - "extensions": { - "discord": "https://discord.com/invite/FQRfWwJzYR", - "twitter": "https://twitter.com/saturnfi_io" - } - }, - { - "chainId": 101, - "address": "6mB8su3dqgyw4yZWgWZ43aJwGm8CzLfM8LJAmDHL8cNL", - "symbol": "WISER", - "name": "Wiseree Coin", - "decimals": 9, - "logoURI": "https://upload.wikimedia.org/wikipedia/commons/0/01/Wiseree_Coin_%24WISER.png", - "tags": ["tokenized-stock"], - "extensions": { - "discord": "https://discord.com/invite/kButrWVqCM", - "website": "https://wiseree.com" - } - }, - { - "chainId": 101, - "address": "8RKSaCnMxeo23Lcu6CdGSg32NE5Rb7ZN7AK2FjbRAG3v", - "symbol": "WISEREE", - "name": "Wiseree", - "decimals": 0, - "logoURI": "https://i.imgur.com/Sah8lD1.png", - "tags": ["equity-token", "wiseree"] - }, - { - "chainId": 101, - "address": "6fzEHmkH42eekd9g6HyNRtMjjzUg7hHfyH2HppNBVeVe", - "symbol": "MACTN", - "name": "Moon Man Crew", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Nazerath/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AtPYo7iR8PSVXWAugzFvHpN7K1AG9PTdXwxEnMjZBBxX", - "symbol": "DBRB", - "name": "Doberbull", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/abdallahbaddi/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "756wgK33gHAZcLAaS6BTx7jkNetVX6WiMcNmcwrwLWCQ", - "symbol": "MMWL", - "name": "Mythic Mushies WL", - "decimals": 7, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/756wgK33gHAZcLAaS6BTx7jkNetVX6WiMcNmcwrwLWCQ/logo.png", - "extensions": { - "discord": "http://discord.gg/QT8TX7QDt2", - "twitter": "https://twitter.com/magic_mushies", - "website": "https://magicmushies.io" - } - }, - { - "chainId": 101, - "address": "3NXwmG2qpve7EmRBKA1G8T87s8Vj5H62M7Pt5HYRVuKf", - "symbol": "omarjjjim", - "name": "omarjjjim", - "decimals": 2, - "logoURI": "https://images.google.com/images/branding/googlelogo/1x/googlelogo_light_color_272x92dp.png", - "tags": ["currency"] - }, - { - "chainId": 101, - "address": "2DN94M5KNfpKQNz1ZPwM6m7xJic5kp1WqZ4sNu2hkJt1", - "symbol": "BOOPY", - "name": "Shaboopy Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jtcordrick3/crypto/main/4162931991598216689a.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2MrEUc687HeyCZbv8GqszwBD2UPNVnRxiWdqdDrRtGpE", - "symbol": "SCTY", - "name": "SCARCITY", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/hazza24951/SWP_NFT/main/logo.png.png", - "tags": ["NFT", "utility-token"] - }, - { - "chainId": 101, - "address": "Aj7p7pCarQFvtSVv5gvRGbJ5yddpAajqpHgJmZWboTnD", - "symbol": "IMGN", - "name": "Imagine Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Aj7p7pCarQFvtSVv5gvRGbJ5yddpAajqpHgJmZWboTnD/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/DahlysArt", - "website": "https://www.dahlys.art/" - } - }, - { - "chainId": 101, - "address": "3vV1J2ZyxhGpWhNxQoCN9o6kKqTSmvwavnagbbtfn9GC", - "symbol": "DRMS", - "name": "Dream Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3vV1J2ZyxhGpWhNxQoCN9o6kKqTSmvwavnagbbtfn9GC/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/DahlysArt", - "website": "https://www.dahlys.art/" - } - }, - { - "chainId": 101, - "address": "FR56xFsUveu3fhxSP8RLuCeUfCi2EpjNsTNnLhqQncgs", - "symbol": "SSUT", - "name": "Space Society Universal Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FR56xFsUveu3fhxSP8RLuCeUfCi2EpjNsTNnLhqQncgs/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/spacesocietynft", - "website": "https://thespacesociety.co" - } - }, - { - "chainId": 101, - "address": "75KALs9asCxh1nPaNdL75tqBA8gQuP8mx3psemhZUavG", - "symbol": "MPT", - "name": "Mortal Powers Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MortalPowers/MP_Token/main/MortalPowers-Final-Sm.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3yNEo7jmJPPCr5mtHotYAyxdaVJpJS1Jqw9E52dgobu3", - "symbol": "SGM", - "name": "SOLGEM", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3yNEo7jmJPPCr5mtHotYAyxdaVJpJS1Jqw9E52dgobu3/logo.jpg", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/Solg3m", - "website": "https://solgem.finance/" - } - }, - { - "chainId": 101, - "address": "JoZoiu7Mxr8P4exP7zcfp5GKg3vv3w3z9q5gpLZ2Jkz", - "symbol": "JOZO", - "name": "JOZO GATORS WL TOKEN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/JoZoiu7Mxr8P4exP7zcfp5GKg3vv3w3z9q5gpLZ2Jkz/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/JozoGators" - } - }, - { - "chainId": 101, - "address": "xkqjobmo1kUgN4P7jcsWe5ud657oA3co4PnwKoQKG12", - "symbol": "$DRAY", - "name": "DRAY", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/benpazzo/dray/main/assets/draytoken.png", - "tags": ["community-token"], - "extensions": { - "description": "Draygon is DAO and Alpha NFT project. ", - "discord": "http://discord.gg/draygonco", - "twitter": "https://twitter.com/DraygonCo", - "website": "https://draygoninvestment.co/" - } - }, - { - "chainId": 101, - "address": "519W6ZZnduudeo6tp1YMgeWiNFeoq4kTVS4uMZggKE5r", - "symbol": "KLGT", - "name": "Kleyne Gelt", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/klglt/Crypto/main/menorah.png", - "tags": ["currency"] - }, - { - "chainId": 101, - "address": "7KUcrx2aNjF9H6eLVKCkeYqou7d6KddSTJEM3TCJQPwJ", - "symbol": "TUNAt", - "name": "TUNA-test", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/hydrated-seal/tunaimage/main/tuna.png", - "tags": ["social-token"], - "extensions": { - "twitter": "https://twitter.com/spacesocietynft", - "website": "https://thespacesociety.co" - } - }, - { - "chainId": 101, - "address": "kUNGFUYSTn7c6S7nUjTYsKiyTQ4FVf3cPnwW5zzeaLg", - "symbol": "KFWT", - "name": "Kungfu Warriors Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Ashtar-Global-Solutions/spl-tokens/main/kfw/kfwt-icon.GIF", - "tags": ["NFT"], - "extensions": { - "discord": "https://discord.com/invite/3NRuj7xktT", - "instagram": "https://www.instagram.com/KungFuWarriors", - "twitter": "https://twitter.com/KungFuWarriors", - "website": "https://kungfuwarriors.io/" - } - }, - { - "chainId": 101, - "address": "MiLKR8QYixQxp5wDXwfC8fLVH4AiAyb3X9YpAcXvtWe", - "symbol": "KLIM", - "name": "WiseCats Milk", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Ashtar-Global-Solutions/spl-tokens/main/wisecats/milk-icon.png", - "tags": ["NFT"], - "extensions": { - "discord": "https://discord.com/invite/wisecats", - "instagram": "https://www.instagram.com/wisecatsnft", - "twitter": "https://twitter.com/WiseCatsNFT", - "website": "https://www.wisecatsnft.com/" - } - }, - { - "chainId": 101, - "address": "DBRL2h748M2DgvfFoWSZhnBCakGWUbY2Z3NzghQcFt3R", - "symbol": "$BUDZ", - "name": "BUDZ", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Ashtar-Global-Solutions/spl-tokens/main/KryptoKronikz/budz-icon.png", - "tags": ["NFT"], - "extensions": { - "discord": "https://discord.com/invite/krypto-kronikz", - "instagram": "https://www.instagram.com/kryptokronikz", - "twitter": "https://twitter.com/KryptoKronikz", - "website": "https://www.kryptokronikz.co.uk/" - } - }, - { - "chainId": 101, - "address": "G5Lxk35xEXLCrp4PRMpymZGBCuTPRNeDRHfEWyj67fK8", - "symbol": "PONO", - "name": "Pono Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/G5Lxk35xEXLCrp4PRMpymZGBCuTPRNeDRHfEWyj67fK8/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "D4L61nbUsaNngn5rYfAQAhV7QasffCcoKqQitbMyNMtB", - "symbol": "RCWL", - "name": "Royal Crows WL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/D4L61nbUsaNngn5rYfAQAhV7QasffCcoKqQitbMyNMtB/rc.png", - "tags": ["whitelist-token"], - "extensions": { - "description": "Royal Crows WL is a whitelist token for RC candy machine." - } - }, - { - "chainId": 101, - "address": "53PDMXwN8Gv6zq1a8FcqeDRC9quma5RaX9veqWnmFY3p", - "symbol": "RYCO", - "name": "Rycoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/265866/crypto/main/rycoin.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AEzCK6jhPpZgTwoVh3dpQHR8d5sTxnmSvqegbgsxyfTa", - "symbol": "APWL", - "name": "Alpha Pharaohs Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AEzCK6jhPpZgTwoVh3dpQHR8d5sTxnmSvqegbgsxyfTa/Logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "4gvGHL1mtEBWd1YJUNBJBJJFF9EsGesq1DsKwJXb8QEp", - "symbol": "RB", - "name": "ReluBit", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/relu1000/ReluBit/main/unnamed.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "63codSeTmtG9BBQmjZdNZiFzWPV3KD8RrNPcXAREvk2F", - "symbol": "WISR", - "name": "Wiseree Token", - "decimals": 9, - "logoURI": "https://upload.wikimedia.org/wikipedia/commons/0/01/Wiseree_Coin_%24WISER.png", - "tags": ["tokenized-stock", "equity-token", "wiseree"], - "extensions": { - "discord": "https://discord.com/invite/kButrWVqCM", - "website": "https://wiseree.com" - } - }, - { - "chainId": 103, - "address": "ToxQEMzPrMFg6EbreSkzP76kVq3QtHbiiYJ9QkpMYjn", - "symbol": "BT", - "name": "Brownie Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ToxQEMzPrMFg6EbreSkzP76kVq3QtHbiiYJ9QkpMYjn/tokb.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 103, - "address": "E5d55Pq6SfTHjaLyjrvMb1kdcVeyvifricA9NV1JJtqh", - "symbol": "CSAP", - "name": "Crypto Seed Accountancy Platform (devnet)", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/michel47/csap/master/assets/csap.svg", - "tags": ["community-token", "utility-token", "wrapped", "green-token"] - }, - { - "chainId": 101, - "address": "9EPrkNg8jMNhQQM3bpKt2NJHSKQoNCHuaqDF5o4BPvR9", - "symbol": "phxcoin", - "name": "PhenomX Coin", - "decimals": 5, - "logoURI": "https://bafybeice4ze77lnjlrv42d2pyobeccwc6guyfw7absvt7fhfjv5ofgm5pe.ipfs.nftstorage.link/?ext=svg", - "tags": ["community-token"], - "extensions": { - "address": "AJBRVyfxgA29CU2aACYe2Dhs41GYgQDPa7cXod394PS7", - "blog": "https://www.phenomxhealth.com/blog", - "description": "PhenomX Coin is the token that power the phenomX ecosystem", - "discord": "https://discord.gg/vwkCmMQv", - "imageUrl": "https://gateway.ipfs.io/ipns/QmXdq8c7fUT9Vmo7SkCQG7gPRrZV89L3n5eRdPVnSTG5W7/phxcoin-shinier.svg", - "linkedin": "https://linkedin.com/company/phenomxhealth", - "telegram": "https://t.me/cryptolake2", - "website": "https://phenomxhealth.com", - "whitepaper": "https://gateway.ipfs.io/ipns/QmXdq8c7fUT9Vmo7SkCQG7gPRrZV89L3n5eRdPVnSTG5W7/whitepaper.html", - "youtube": "https://www.youtube.com/channel/UChQiCa4_Dqg7Htqop5xbV2g" - } - }, - { - "chainId": 103, - "address": "PVit7qYXHVt5VExukg9DQgPa2p4QRGfRmU7z8U6e5xq", - "symbol": "PVIT", - "name": "e-Vitamins", - "decimals": 0, - "logoURI": "https://ipfs.safewatch.care/ipfs/QmdD12pqJHApFrUAbxVs9BwFLhjBtXd5cjZ1fD2YLe3Abs/vitamins-nft.svg", - "tags": ["community-token", "utility-token", "green-token"], - "extensions": { - "address": "FsMKihJmPpnDsXBnTfRiH5ciDi2vyS43UheMLNwKqUXs", - "blog": "https://www.phenomxhealth.com/blog", - "description": "PhenomX Virtual Vitamins", - "discord": "https://discord.gg/vwkCmMQv", - "imageUrl": "https://gateway.ipfs.io/ipfs/QmdD12pqJHApFrUAbxVs9BwFLhjBtXd5cjZ1fD2YLe3Abs/vitamins-nft.svg", - "linkedin": "https://linkedin.com/company/phenomxhealth", - "telegram": "https://t.me/cryptolake2", - "website": "https://phenomxhealth.com", - "whitepaper": "https://gateway.ipfs.io/ipfs/QmdD12pqJHApFrUAbxVs9BwFLhjBtXd5cjZ1fD2YLe3Abs/whitepaper.html", - "youtube": "https://www.youtube.com/channel/UChQiCa4_Dqg7Htqop5xbV2g" - } - }, - { - "chainId": 103, - "address": "7KUcrx2aNjF9H6eLVKCkeYqou7d6KddSTJEM3TCJQPwJ", - "symbol": "TUNAt", - "name": "TUNA-test", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/hydrated-seal/tunaimage/main/tuna.png", - "tags": ["social-token"], - "extensions": { - "twitter": "https://twitter.com/spacesocietynft", - "website": "https://thespacesociety.co" - } - }, - { - "chainId": 101, - "address": "87rSGrpYdmTxfNBf8o2cpyiNcxCmNhUPBXjT8aoyfob5", - "symbol": "ENX", - "name": "Equinox", - "decimals": 9, - "logoURI": "https://ixrjpmbgkspkjaueqzmyhb3fbca5atffgsrqyt527d2x3ycdlgqq.arweave.net/ReKXsCZUnqSChIZZg4dlCIHQTKU0owxPuvj1feBDWaE", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/SolminatorNFT", - "website": "https://www.solminator.com/" - } - }, - { - "chainId": 101, - "address": "7BaHC9YUWRGqa7BSq3pBMJZSaATaNQRDt7q7AFPbrjcj", - "symbol": "CHLO", - "name": "ClorofilaCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/marianelo-crypto/ClorofilaCoin/principal/logo_ClorofilaCoin_CHLO.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9H4reH91YZb7Mp7rBGkvzqdgTxHmr56w3ywW5E3nqghN", - "symbol": "HMOD", - "name": "Hairmod", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/bteberci/crypto/main/hairmodlogo.png", - "tags": ["community-token"] - }, - { - "chainId": 101, - "address": "Aw6KrYrZW8KEujVBVRfnGGf3mwfqss2JD3muoZtvBuhR", - "symbol": "BPt", - "name": "BluePanda", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/pppanda369/tokenP/main/tokenP.png", - "tags": ["BPT-Invest"] - }, - { - "chainId": 101, - "address": "3xjxZZxht4HL3SxSDMgMiHckMe7prj9xfCq62RCgiLzA", - "symbol": "JNDN", - "name": "JUNDAN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/kingsirc9891/jundan/main/logo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GTjk7ejeDEQuJVpSDZHDgbPKqEPEd8ErtK1eUG4Yunzp", - "symbol": "RETK", - "name": "Retroken", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Gusso0o/logotkn/main/logotkn.png", - "tags": ["utility-token"] - }, - { - "chainId": 103, - "address": "khashyCKhBmP6mnuUrrLLb41KzLREGA6ojpZjmkbGVg", - "symbol": "khash", - "name": "Virtual K(h)ash", - "decimals": 0, - "logoURI": "https://bafybeie6htah6p4qixy7mfqfpyqzbymprfooqmavoj4ou5fd5ibvhtbgt4.ipfs.nftstorage.link/?ext=svg", - "tags": ["community-token", "utility-token", "green-token"], - "extensions": { - "address": "AFzvsxCr8PXaNeqhMwN68GvpeskJhr4eXMCQCSUgSZg4", - "description": "Virtual Khash can be use in the MetaVerse in place of IRL cash.", - "discord": "https://discord.gg/vwkCmMQv", - "telegram": "https://t.me/cryptolake2", - "website": "https://duckduckgo.com/?q=Virtual+K(h)ash+khash", - "whitepaper": "https://gateway.ipfs.io/ipfs/QmXbedz6CMuP1CyJFsQ95ZnSepAMbuMVdLbfDFtbszeFk4/whitepaper.pdf" - } - }, - { - "chainId": 101, - "address": "5Ty5cZXX7MrsY9EgFZzJk4dpve8UqXrns8bB8qbaLiFw", - "symbol": "DogeThug", - "name": "DogeThug", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/dogethug/dogethug/main/logo.png", - "tags": ["social-token", "meme-coin", "doge"] - }, - { - "chainId": 101, - "address": "FhSL8uPeXtfdMiEwSmPh7VBR2dcTj2AUR64aiFJGiYN2", - "symbol": "Pulgui", - "name": "Pulguita Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/VRES2022/crypto/main/pulgui.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Fh7ZuBQzTP84y3kyjyBnNivJq7LzZkPJRbUkJaMPQxHg", - "symbol": "RZPP", - "name": "Rzeczpospolita Polska", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Fh7ZuBQzTP84y3kyjyBnNivJq7LzZkPJRbUkJaMPQxHg/logo.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "97eJ4n5UyhDzZX6qvUKgV5tpJnd6xn2ARrARAzk73Nkf", - "symbol": "TO$HI", - "name": "Toshcoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/97eJ4n5UyhDzZX6qvUKgV5tpJnd6xn2ARrARAzk73Nkf/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2qayh5Qc3BBR91KA6CemKN7vmzmexRJJw2KWFPzn53Uw", - "symbol": "BELL", - "name": "BELL", - "decimals": 6, - "logoURI": "https://cdn.discordapp.com/attachments/928110149388869684/967531744741957632/bell_282.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "A12U6EVQZghbQGQ8qedttVgtMBQYFqLTzA9HcSVTToJF", - "symbol": "BIZ", - "name": "Biznessmen", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/A12U6EVQZghbQGQ8qedttVgtMBQYFqLTzA9HcSVTToJF/BIZ-Logo.png", - "tags": ["game-token", "social-token", "utility-token"], - "extensions": { - "website": "https://biznessmennft.com/" - } - }, - { - "chainId": 101, - "address": "STuLiPmUCUtG1hQcwdc9de9sjYhVsYoucCiWqbApbpM", - "symbol": "sTulip", - "name": "Staked Tulip", - "decimals": 9, - "logoURI": "https://user-images.githubusercontent.com/8619106/164987734-11c00b2e-07d7-47ce-8441-63b063ec8bb2.png", - "tags": ["solfarm", "tulip", "staking"] - }, - { - "chainId": 101, - "address": "3DGWuX6nnGmza9Xk6GuXQnUEFRcXmc9y9NYndB96RpHW", - "symbol": "SUS", - "name": "Impostor", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3DGWuX6nnGmza9Xk6GuXQnUEFRcXmc9y9NYndB96RpHW/logo.png", - "tags": ["currency", "utility-token", "meme-token", "social-token"] - }, - { - "chainId": 101, - "address": "C9x1Kx6A7GvgKfrLWdcNdpzvUK1XwF71UTErxK5mCJSh", - "symbol": "FOLI", - "name": "Foli", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/C9x1Kx6A7GvgKfrLWdcNdpzvUK1XwF71UTErxK5mCJSh/logo.png", - "tags": ["reward-token", "social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "49hmSAZ8oqf2u4QQ31qUAk6PHqvMsCBt27zFSx6CsY1w", - "symbol": "LPROT", - "name": "Lucky clover Protocol", - "decimals": 9, - "logoURI": "https://yourimageshare.com/ib/6AJLQG2VvZ", - "tags": ["utility-token"], - "extensions": { - "website": "https://twitter.com/clover_finance" - } - }, - { - "chainId": 101, - "address": "5grpAJejHkwUaSRedSUw4vWerFGpgtc4gjVxu8GxuVRe", - "symbol": "HOM3", - "name": "Hom3 Protocol", - "decimals": 9, - "logoURI": "https://i.ibb.co/H2bm0z1/Untitled-design-1.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://twitter.com/hom3/" - } - }, - { - "chainId": 101, - "address": "7VqabivpX5z9sjd7QjVrGyzQkdrRQFC5jARnBTUQWKjc", - "symbol": "CAREIV", - "name": "Care IV Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/crcnum4/careiv/main/assets/logo.png", - "tags": ["social-token", "DAO-token"], - "extensions": { - "twitter": "https://twitter.com/CliffC_4" - } - }, - { - "chainId": 101, - "address": "DsmHzZmJSjtvSabgP1njqYN249UVEvFnNd1F9ZVHPTXR", - "symbol": "c2oCoinNFT", - "name": "c2oCoin NFT", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/c2ocoin/nftsolana/main/logoc2o_frente300x300.png", - "tags": [ - "NFT", - "NFT-collection", - "investment-NFT", - "collection", - "social-token" - ], - "extensions": { - "website": "https://c2ocoin.com" - } - }, - { - "chainId": 101, - "address": "BqwNZxHDBm3T2DfNbQdMdrkSHp5fb73MovZd7g5MeeFa", - "symbol": "ACO", - "name": "Air Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/moonfall22/logo/main/aircoin.png", - "tags": ["reward-token", "social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "DJjevoCBomzgNe76pNDd8stAcMS4x7Y99giuNpqGLa2f", - "symbol": "USTv2-3Pool", - "name": "Mercurial LP Token (USTv2-3Pool)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DJjevoCBomzgNe76pNDd8stAcMS4x7Y99giuNpqGLa2f/logo.svg", - "tags": ["lp-token"], - "extensions": { - "website": "https://www.mercurial.finance/" - } - }, - { - "chainId": 101, - "address": "HwxBPJSgiHpwqDFACnN19X9jpDDqs3HpoYoLpR9ocYTU", - "symbol": "ALC", - "name": "Al-Alawi Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/nalalawi2022/Al-Alawi-Coin/main/logo3.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CREAMpdDimXxj2zTCwP5wMEtba4NYaKCrTBEQTSKtqHe", - "symbol": "CREAMY", - "name": "Creamy", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CREAMpdDimXxj2zTCwP5wMEtba4NYaKCrTBEQTSKtqHe/logo.png", - "tags": ["community-token", "utility-token", "social-token"], - "extensions": { - "discord": "https://discord.gg/creamyfriends", - "serumV3Usdc": "BxTfmxEQf6FQ6F1cQ3fi6o6FPG52hiZXi4DTGYRhsmPo", - "twitter": "https://twitter.com/CreamyFriends" - } - }, - { - "chainId": 101, - "address": "WLfsPBJYqawoAK54RxEQk8uNFTxnzjWmYtaApRQJg5e", - "symbol": "LARTFF", - "name": "Populart FF", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WLfsPBJYqawoAK54RxEQk8uNFTxnzjWmYtaApRQJg5e/logo.png", - "tags": ["FF-Token", "community-token", "utility-token", "populart-nft"], - "extensions": { - "twitter": "https://twitter.com/populart_nft", - "website": "https://www.populart.xyz/" - } - }, - { - "chainId": 101, - "address": "WLtPRknre13aWE4QqsSbcEpQG8W4aApUJ3NT4YPfQrr", - "symbol": "LART", - "name": "Populart WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WLtPRknre13aWE4QqsSbcEpQG8W4aApUJ3NT4YPfQrr/logo.png", - "tags": ["WL-Token", "community-token", "utility-token", "populart-nft"], - "extensions": { - "twitter": "https://twitter.com/populart_nft", - "website": "https://www.populart.xyz/" - } - }, - { - "chainId": 101, - "address": "4Ra2qncf7F3t2z8HHtK3mdgmec7wMs9XgW9a45gS8rqR", - "symbol": "VALT", - "name": "Valt Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4Ra2qncf7F3t2z8HHtK3mdgmec7wMs9XgW9a45gS8rqR/logo.png", - "tags": ["ValtGym", "Valt", "Whitelist", "Metaverse"], - "extensions": { - "description": "Valt CryptoPumps NFT Whitelist Token", - "discord": "https://discord.gg/qYn9gQPPSQ" - } - }, - { - "chainId": 101, - "address": "C7SBQ7Pb8D9wbkfkvjXRCdAEukubXdYC38fp4yBTz2ue", - "symbol": "BLOOMIE", - "name": "BLOOMIE", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/C7SBQ7Pb8D9wbkfkvjXRCdAEukubXdYC38fp4yBTz2ue/logo.svg", - "tags": ["utility-token", "game-token"], - "extensions": { - "website": "https://bloomverse.io" - } - }, - { - "chainId": 101, - "address": "DtSs1GN6PzyLWESWf7QoAys5j6GvPoNk2GaiuXx12Y3f", - "symbol": "CIBA", - "name": "Ciba Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Curlyfriesssss/crytpo/main/asdw.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "TUXUczFDB2w6EqR3gRfhgqLq6xuaAY5SEzTELu2qKGq", - "symbol": "TuXWL", - "name": "Tuxedo WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/TUXUczFDB2w6EqR3gRfhgqLq6xuaAY5SEzTELu2qKGq/logo.png" - }, - { - "chainId": 101, - "address": "7nTddmDiPiTaahTHfj441PW8bTjLbYUf3KyzrGnankvZ", - "symbol": "NMR", - "name": "Node Monkey Free Rental", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7nTddmDiPiTaahTHfj441PW8bTjLbYUf3KyzrGnankvZ/logo.jpg", - "tags": ["nft"], - "extensions": { - "description": "This token is for a free rental from the Official Node Monkey marketplace.", - "twitter": "https://twitter.com/nodemonkeynft" - } - }, - { - "chainId": 101, - "address": "HnhhXtqCoYzQpV8doDB4MXkPnpUUajUD6BQt6nkpbcMa", - "symbol": "MYTH", - "name": "Mythic Mushies Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HnhhXtqCoYzQpV8doDB4MXkPnpUUajUD6BQt6nkpbcMa/logo.png", - "extensions": { - "discord": "http://discord.gg/QT8TX7QDt2", - "twitter": "https://twitter.com/magic_mushies", - "website": "https://magicmushies.io" - } - }, - { - "chainId": 101, - "address": "62s6EQ6s3hpRufbispzk5DD1yt7JjPzoTUewNYtMmjFW", - "symbol": "KPRO", - "name": "Kproapps Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/62s6EQ6s3hpRufbispzk5DD1yt7JjPzoTUewNYtMmjFW/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://kproapps.com/" - } - }, - { - "chainId": 101, - "address": "7tMVov1P9beex6rphq3iaox1TrTPUscgS8Ay4oLWSSVh", - "symbol": "MRWL", - "name": "Mutant Miner WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7tMVov1P9beex6rphq3iaox1TrTPUscgS8Ay4oLWSSVh/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "23WuycvPjEuzJTsBPBZqnbFZFcBtBKAMTowUDHwagkuD", - "symbol": "GEAR", - "name": "Starbots GEAR", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/23WuycvPjEuzJTsBPBZqnbFZFcBtBKAMTowUDHwagkuD/logo.png", - "tags": ["utility-token", "play-to-earn", "game-token"], - "extensions": { - "twitter": "https://twitter.com/Starbots_game", - "website": "https://starbots.net" - } - }, - { - "chainId": 101, - "address": "FjMQibN74kDTDVwGhMjoPP9YjsrGdULwnCdxK5U6Hxxz", - "symbol": "PANTHEON", - "name": "Olympus pantheon", - "decimals": 9, - "logoURI": "https://i.ibb.co/dcHtR9V/6.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://twitter.com/Imperius_Ira?ref_src=twsrc%5Egoogle%7Ctwcamp%5Eserp%7Ctwgr%5Eauthor" - } - }, - { - "chainId": 101, - "address": "Cwiv21vbFdwJRtGomuCDyWz2w6xvPwoUqTmuyrFtU4Sa", - "symbol": "VDEF", - "name": "V-Defi Token", - "decimals": 9, - "logoURI": "https://i.ibb.co/PxKBVzV/5.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://twitter.com/definow/" - } - }, - { - "chainId": 101, - "address": "7bJ4cuaScXBcL6SB5cbypmx9Ra79JrokdYdpxoXc6jBi", - "symbol": "ATK", - "name": "AuToKen", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/gYomii/ATK-Crypto/main/ATK5.png", - "tags": ["Firm-Token"], - "extensions": { - "facebook": "https://facebook.com/Autos-bot.fr", - "twitter": "https://twitter.com/SocialMedia_car", - "website": "https://www.autos-bot.fr" - } - }, - { - "chainId": 101, - "address": "HrP2nSa1EH5q6SfzRTpuWrGC6QTfQMgboKponkxB7mzH", - "symbol": "WLMSD", - "name": "WLMSD", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/PnW1/WLMSD/main/logo.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "ChGzR85wmFFKSpy1NQ9uEgMkmxM9mV5oj4ZX4eWKGHUL", - "symbol": "PPWL", - "name": "Polepenguins WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Robby3082/test-token/main/polepeng.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "EpQCQsK6mLg64oVN2VRBvYV5DbzX5wTpVc8fCWS8bVJ2", - "symbol": "FOS", - "name": "Founders of Solana", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EpQCQsK6mLg64oVN2VRBvYV5DbzX5wTpVc8fCWS8bVJ2/fos_token_logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/FoundersOfSol" - } - }, - { - "chainId": 101, - "address": "ZyTQ5Fx2c6ArvMivaD8Y4pBrTF7PQsDDfgU5vDgpV6R", - "symbol": "MILO", - "name": "Milosound", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/crypto-king99/crypto/main/MILOSOUND.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "WL3qRqfiBegtSZs5da6yVNkyh7AmZa5aWhZir3xBDAz", - "symbol": "TMDC-X-WL", - "name": "TMDCXWL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/namu42/ImageRepo/main/WLwKFNCKESMfbYU1o7hzp868AtyFHGpbC9i4jUTHpQb/wl_token_logo.png", - "tags": ["Whitelist-Token", "NFT"] - }, - { - "chainId": 101, - "address": "WLMpGG6n4iaCQY9gEw3eFqTg2XY4JvkRye6KaFQiz6q", - "symbol": "TMDC-X-WL", - "name": "TMDC_ WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/namu42/ImageRepo/main/WLwKFNCKESMfbYU1o7hzp868AtyFHGpbC9i4jUTHpQb/wl_token_logo.png", - "tags": ["Whitelist-Token", "NFT"] - }, - { - "chainId": 101, - "address": "ToyurSx9LsMTKNoNMZx4EExXgW8DWc6gjw3z2RKfkz7", - "symbol": "LKC", - "name": "LKC Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ToyurSx9LsMTKNoNMZx4EExXgW8DWc6gjw3z2RKfkz7/logo.png", - "tags": ["lkc-whitelist-token"] - }, - { - "chainId": 101, - "address": "HzJuAKFRozvgxKnFvLqtNuc88w8UmB42SQd7vAibVVU", - "symbol": "ZQWWL", - "name": "Zero Quantum Warriors WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HzJuAKFRozvgxKnFvLqtNuc88w8UmB42SQd7vAibVVU/zqwlogo.png", - "extensions": { - "discord": "https://discord.gg/QnS27AGyeQ", - "twitter": "https://twitter.com/ZQWarriors", - "website": "https://zqwarriors.io" - } - }, - { - "chainId": 101, - "address": "ZMpvsJ51GyYMmD9r3GEW9pCeAYF8TRbmqa9KgBE2aHr", - "symbol": "MUSA", - "name": "MUSA MALI", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ZMpvsJ51GyYMmD9r3GEW9pCeAYF8TRbmqa9KgBE2aHr/logomusa.png", - "tags": ["utility-token", "game-token"] - }, - { - "chainId": 101, - "address": "ExN3MaZLB5VhjGZ75qUuJ8ENkNiUvCCdA7j85vCcNicQ", - "symbol": "MODS", - "name": "MetaOps Genesis", - "decimals": 9, - "logoURI": "https://github.com/numpynewb33/token-list/blob/main/assets/mainnet/ExN3MaZLB5VhjGZ75qUuJ8ENkNiUvCCdA7j85vCcNicQ/logo.png?raw=true", - "tags": ["utility-token", "reward-token", "social-token"], - "extensions": { - "description": "This is a reward token that can be claimed from staking MetaOps Genesis NFTs", - "discord": "https://discord.com/invite/metaops", - "twitter": "https://twitter.com/metaopsgaming", - "website": "https://metaopsgaming.com/" - } - }, - { - "chainId": 101, - "address": "GzTxngZwZ2ZcDydepix1cTMRcooDxfK32Px5ZZkcjtX6", - "symbol": "DRICH", - "name": " Donkey Richard Coin", - "decimals": 9, - "logoURI": "https://www.dropbox.com/s/cssc839nr1sjedt/Donkey%20Richards%20Logo.jpg?dl=0", - "tags": ["utility-token"], - "extensions": { - "description": "Currency for Use in Donkey Richard Universe", - "discord": "https://discord.gg/JXQYJfThm6", - "twitter": "https://twitter.com/TheDnkyRichards", - "website": "https://www.donkeyrichard.com/" - } - }, - { - "chainId": 101, - "address": "33EGqaNcakXZNefyZj3WgeP47kMFFLBQPwBBPToywC3W", - "symbol": "ATLO", - "name": "ATTOLLO COIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jbecks95/crypto/main/LOGO.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Ccgr6gWvT5U4F38ND2D3EnRPtdp4L9AHpVY3apg35QgS", - "symbol": "ATLOG", - "name": "ATLARIA OG TOKEN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/GaitanaruAndrei/assets/main/loglaunch.png", - "tags": ["mint-token"], - "extensions": { - "website": "https://atlaria.io/" - } - }, - { - "chainId": 101, - "address": "EGFTKxNyoHKa16dsXMvMkoz2VfebkTxPjNBheNbpKRbT", - "symbol": "ATLWL", - "name": "ATLARIA WL TOKEN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/GaitanaruAndrei/assets/main/loglaunch.png", - "tags": ["mint-token"], - "extensions": { - "website": "https://atlaria.io/" - } - }, - { - "chainId": 101, - "address": "9RbTen9wL7hTZRKZUMBPNpGGKsjRAM8LHokphuoCWK5w", - "symbol": "BOSSWL", - "name": "BOSS WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ttarabay/token-list/main/assets/mainnet/9RbTen9wL7hTZRKZUMBPNpGGKsjRAM8LHokphuoCWK5w/logo.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "TomonpwmzyveJRXKCTbJxpyDuYLPgpugU3pCK5aceWi", - "symbol": "$SLURP", - "name": "SLURP", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/TomonpwmzyveJRXKCTbJxpyDuYLPgpugU3pCK5aceWi/logo.png" - }, - { - "chainId": 101, - "address": "PToAqfWfY79uFyXaWafC1MNpSnrX3BXAgSJvMgbU1U7", - "symbol": "BETYAR", - "name": "Betyár Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/PToAqfWfY79uFyXaWafC1MNpSnrX3BXAgSJvMgbU1U7/logo.png", - "extensions": { - "description": "BetyarDAO", - "discord": "https://discord.io/betyardao", - "instagram": "https://www.instagram.com/betyardao", - "twitter": "https://twitter.com/betyardao", - "website": "https://betyardao.hu" - } - }, - { - "chainId": 103, - "address": "PToAqfWfY79uFyXaWafC1MNpSnrX3BXAgSJvMgbU1U7", - "symbol": "BETYAR", - "name": "Betyár Dev Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/PToAqfWfY79uFyXaWafC1MNpSnrX3BXAgSJvMgbU1U7/logo.png", - "extensions": { - "description": "BetyarDAO", - "discord": "https://discord.io/betyardao", - "instagram": "https://www.instagram.com/betyardao", - "twitter": "https://twitter.com/betyardao", - "website": "https://betyardao.hu" - } - }, - { - "chainId": 101, - "address": "Rog3V7CzPXkRd1qotc2JwPuW1ijkZogircFNkGdY5Ej", - "symbol": "$ROFO", - "name": "ROFO", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Rog3V7CzPXkRd1qotc2JwPuW1ijkZogircFNkGdY5Ej/logo.png", - "tags": ["utility-token", "work-to-earn"], - "extensions": { - "twitter": "https://twitter.com/robbersfoxes" - } - }, - { - "chainId": 101, - "address": "Gxn3A9LYAbjx4XqmB5QX6niAJVQVEx2bBaNfWD6jnjXP", - "symbol": "TT", - "name": "Tata", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Gxn3A9LYAbjx4XqmB5QX6niAJVQVEx2bBaNfWD6jnjXP/logo.png", - "tags": ["utility-token", "lp-token"], - "extensions": { - "discord": "https://discord.gg/CXV7CRbr", - "twitter": "https://twitter.com/Tata_1000Faces", - "website": "https://www.tata1000faces.com/" - } - }, - { - "chainId": 101, - "address": "5K6Fj5dxcmCTeGCBHAEh6JRtKdPkoQx4aCRYYtyetbZh", - "symbol": "BPUPS", - "name": "Battle Pups WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5K6Fj5dxcmCTeGCBHAEh6JRtKdPkoQx4aCRYYtyetbZh/logo.png", - "tags": ["WL-token"] - }, - { - "chainId": 101, - "address": "H4p41zzwg2gSzSEhhXwvrnGznyHetW9Fgj7UYyjVm7Qd", - "symbol": "BASH", - "name": "BASH Rewards", - "decimals": 2, - "logoURI": "https://solaboy.github.io/images/bash.jpeg", - "tags": ["meta-verse", "utility-token"], - "extensions": { - "description": "BASH reward token that can be earned from an interactive game with limitless ideas then redeemed.", - "discord": "http://discord.gg/NuhBakrakN", - "instagram": "https://www.instagram.com/coolcucumberbash", - "twitter": "https://twitter.com/CCBNFT", - "website": "https://www.coolcucumberbash.io" - } - }, - { - "chainId": 101, - "address": "EbDzfYUoWs5X9MKQ54Yued9oNbJGwQERgCJpKYBuHiqs", - "symbol": "CUC", - "name": "CUCOIN", - "decimals": 2, - "logoURI": "https://solaboy.github.io/images/cucoin.jpeg", - "tags": ["meta-verse", "utility-token"], - "extensions": { - "description": "Cucoin(CUC) would be used in making in game purchases such as battle passes, power ups, costume, skin/avatar customization.", - "discord": "http://discord.gg/NuhBakrakN", - "instagram": "https://www.instagram.com/coolcucumberbash", - "twitter": "https://twitter.com/CCBNFT", - "website": "https://www.coolcucumberbash.io" - } - }, - { - "chainId": 101, - "address": "CrhMZTJdZMNLvZoNdjZT1SFToT34NYLUf2W2VaMLKQqf", - "symbol": "SAY", - "name": "Say Network", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SayNetworkOfficial/say-network-token/master/logo.jpg", - "tags": ["social-token"], - "extensions": { - "description": "Decentralized social media token powering uSay." - } - }, - { - "chainId": 101, - "address": "8cqc6k5nwoBYJVqGk8dvxyVFHaaGvmUNP5ydpbmASeCZ", - "symbol": "FANCY", - "name": "Fancy Potatoes", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/DaPrince2106/Fancy-PNG/main/0023.png", - "tags": ["NFT", "Art", "utility-token"], - "extensions": { - "twitter": "https://twitter.com/FANCY_POTATOES", - "website": "https://fancypotatoes.art" - } - }, - { - "chainId": 101, - "address": "CJ9G8mxRu5jwmtjnCLt4KGCJwKM47GNCTknMUbZXQvN3", - "symbol": "MRB", - "name": "Mr Breakfast", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CJ9G8mxRu5jwmtjnCLt4KGCJwKM47GNCTknMUbZXQvN3/logo.png", - "tags": ["utility-token"], - "extensions": { - "instagram": "https://www.instagram.com/mrbreakfastja", - "twitter": "https://twitter.com/mrbreakfastja", - "website": "https://www.mrbreakfastja.com/" - } - }, - { - "chainId": 101, - "address": "UruquUouaaJ7oo4hUmJ41bk2SXYpQ4PwR9Jnbsk7kHN", - "symbol": "WRCK", - "name": "White Rock", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/UruquUouaaJ7oo4hUmJ41bk2SXYpQ4PwR9Jnbsk7kHN/logo.jpg", - "tags": [ - "tokenomics", - "social-network", - "new-world-order", - "community-token" - ], - "extensions": { - "website": "https://thetribes.io" - } - }, - { - "chainId": 101, - "address": "8zyDKf16k8o3JpJ8A14tZVQdaSvN1mkMVuPSy6Cgjv5C", - "symbol": "BRCK", - "name": "Black Rock", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8zyDKf16k8o3JpJ8A14tZVQdaSvN1mkMVuPSy6Cgjv5C/logo.jpg", - "tags": [ - "tokenomics", - "social-network", - "new-world-order", - "community-token" - ], - "extensions": { - "website": "https://thetribes.io" - } - }, - { - "chainId": 101, - "address": "7G5sVZBP9322r3DWcTw9pDWz31BicMSP9thKrD55uWp8", - "symbol": "CADPT", - "name": "Canadian Dollar Partoken", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7G5sVZBP9322r3DWcTw9pDWz31BicMSP9thKrD55uWp8/logo.png", - "tags": ["stablecoin", "utility-token"], - "extensions": { - "description": "Canadian Dollar Partoken (CADPT) is a one-for-one Canadian Dollar collateralized stablecoin token.", - "website": "https://partokens.com" - } - }, - { - "chainId": 101, - "address": "Az887ysr8zW72pVB2QgyuvomWsrNAaWA9EpbFAmSBAkD", - "symbol": "COUCH", - "name": "The Couch Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/couchcoin9990/couch/main/logo.png", - "tags": ["NFT"] - }, - { - "chainId": 101, - "address": "4ewdr269QKV9SC1N855LUhXAe3YevASjQHoR7bzg9JKW", - "symbol": "XDRIP", - "name": "0xDRIP", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4ewdr269QKV9SC1N855LUhXAe3YevASjQHoR7bzg9JKW/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/0xDRIP" - } - }, - { - "chainId": 101, - "address": "6z9oBZ84zSx2uPvPofyaAABmBaWUk1BmDkMQryiYorzk", - "symbol": "PURP", - "name": "purple squirrel", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/PurpleSquirrelMedia/SQRL/main/purp-metaverse-utility-token.png", - "tags": ["meta-verse", "utility-token"], - "extensions": { - "description": "WEB3 based meta verse web utility token based on SOLANA Blockchain", - "discord": "http://discord.gg/2AKuWnyr", - "instagram": "https://www.instagram.com/purplesquirrelexchange", - "twitter": "https://twitter.com/squirrel_eth", - "website": "https://www.purplesquirrelmedia.io" - } - }, - { - "chainId": 101, - "address": "HRHdJZcy5BKeY2Twu2k8oJk7uEyDAqtQJ28cXF4V3Bma", - "symbol": "BLNK", - "name": "Blank Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/petlikarayan/BLNK-Coin/main/BLNK.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3tW1UvWctG6qsjcpSBKVwKRy1zAwxtEVcZU6icnXXsvp", - "symbol": "LEFT", - "name": "Left Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/PowerRob/left-token/main/Screenshot%202022-01-17%20132316.png" - }, - { - "chainId": 101, - "address": "HC6Um2wBfVWZYUov6QbwkYV2oNr8VT2RsgufMptPqaCC", - "symbol": "RGHT", - "name": "Right Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/PowerRob/right-token/main/Screenshot_2022-01-19_142451-removebg-preview.png" - }, - { - "chainId": 101, - "address": "CW2sMRF3JJ7q8rqamJz3iZcdPRNiv3RYKDQ4LfKTkUm7", - "symbol": "GRT", - "name": "Greenies Token", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/drsaint1/drsaint/main/logo512.png", - "tags": [ - "Meme-Token", - "NFT", - "Utility-Token", - "Social-Token", - "Social-Token" - ], - "extensions": { - "discord": "https://discord.gg/4V9b5qCMDK", - "twitter": "https://twitter.com/greenie_planet" - } - }, - { - "chainId": 101, - "address": "5tMhmodggwwcdcQQUZXJabXbU5NAbpWqMXkUjeFs9X72", - "symbol": "SDWL", - "name": "SolarDex WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5tMhmodggwwcdcQQUZXJabXbU5NAbpWqMXkUjeFs9X72/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "jBunk7zcKaVuWJtFJcYkStA3aqmEBu4R2jXRHNa9kbh", - "symbol": "SSSH", - "name": "SSS Holders SD", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/jBunk7zcKaVuWJtFJcYkStA3aqmEBu4R2jXRHNa9kbh/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8vZXUmzowpYJCzVbGXBGqjP8bsQ7VJBJajniHyWuHht3", - "symbol": "CWGC", - "name": "CowardCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Swahgner/cowardcoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HK4RnWAiaLJt3kqc3a3B5CdjnKGzBz8ykaemGcyQ9E9S", - "symbol": "WING", - "name": "Wings", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/MonarchButterflySquad/NFTMonarchsGeneral/main/HK4RnWAiaLJt3kqc3a3B5CdjnKGzBz8ykaemGcyQ9E9S/goldwings.png", - "tags": ["utility-token"], - "extensions": { - "description": "NFT Monarch WL token + extra.", - "discord": "https://discord.gg/nftmonarchs", - "twitter": "https://twitter.com/NFTMonarchs", - "website": "https://www.nftmonarchs.com" - } - }, - { - "chainId": 101, - "address": "Ao8BZG21WAVuPCjSuh5SKM5F8yEMnyrvhJiCMXiGEggD", - "symbol": "DripChips", - "name": "Drip Chips", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/BHALEYART/scum-experimental/main/drip-coin-logo.png", - "tags": ["scumbags-nft", "utility-token"], - "extensions": { - "description": "Drip is a flexible digital currecy created for the Scumbag$ NFT community. For use with Drip partners and related utilities.", - "discord": "http://discord.gg/scumbags", - "twitter": "https://twitter.com/scumbags_nft", - "website": "https://scumbags.io" - } - }, - { - "chainId": 103, - "address": "3ixUSBBzwKeoaJMcABxhRBaUadVR6SZyzNv2gRcDjpap", - "symbol": "RBO", - "name": "Robo Token", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/robo360/token-list/122f24c7909c6275cc677fbe0ff027247bcbfa2f/assets/mainnet/3ixUSBBzwKeoaJMcABxhRBaUadVR6SZyzNv2gRcDjpap/Robo.png", - "extensions": { - "twitter": "https://twitter.com/robo3601" - } - }, - { - "chainId": 101, - "address": "LUVumGBdVkaPYbGyjjRJtsbYoVtZ1h7AaX1Hh2bcaqn", - "symbol": "$LUV", - "name": "LUV", - "decimals": 10, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/LUVumGBdVkaPYbGyjjRJtsbYoVtZ1h7AaX1Hh2bcaqn/logo.png", - "extensions": { - "twitter": "https://twitter.com/loveonsolana" - } - }, - { - "chainId": 101, - "address": "2PcxBC6AZXPTadHWwBdxcnkrdJVmoGZ2raMLstDQcpJk", - "symbol": "$PARTS", - "name": "Space Parts", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2PcxBC6AZXPTadHWwBdxcnkrdJVmoGZ2raMLstDQcpJk/logo.png", - "tags": ["Utility-Token", "Social-Token"], - "extensions": { - "website": "https://www.solspacemen.com" - } - }, - { - "chainId": 101, - "address": "USDtoXB6AGW87Wj8p3HNdnVPAgXBpwjTXtVnKgiPR16", - "symbol": "USD_X", - "name": "USD for Duck Exchange", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/duckdex/token-list/main/assets/mainnet/USDtoXB6AGW87Wj8p3HNdnVPAgXBpwjTXtVnKgiPR16/logo.png", - "tags": ["stablecoin"], - "extensions": { - "discord": "https://discord.gg/2ySvY6Vrv7", - "twitter": "https://twitter.com/duck_dex", - "website": "https://duckdex.github.io" - } - }, - { - "chainId": 101, - "address": "6WLdnp1JhBbk2xQ2PqRnade1dZTj1GbGfo8eAz4Skbko", - "symbol": "FXZ", - "name": "Foxeez", - "decimals": 0, - "logoURI": "https://github.com/foxeez/crypto/blob/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AU4bT5vsa8Dqsd9BXEzsW5QSeDQ97QwKx8oEum8GMKpG", - "symbol": "SAI", - "name": "SAI Token", - "decimals": 9, - "logoURI": "https://github.com/peakypandas/icon/blob/main/SAI.png?raw=true", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "3rFgy3p5u6NFRbEzDqt1NyHp1g3wX8WiWkEWZkmtxdFm", - "symbol": "CHOMPS", - "name": "Shkary Sharks CHOMPS", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3rFgy3p5u6NFRbEzDqt1NyHp1g3wX8WiWkEWZkmtxdFm/logo.png", - "tags": ["NFT-token"], - "extensions": { - "website": "https://shkarysharks.com/" - } - }, - { - "chainId": 101, - "address": "yP3PcccLpc22nSrJRbRLySuroYpKiVT2ENRfiQGNNAB", - "symbol": "y-PAI-3Pool", - "name": "Yield Mercurial LP Token (PAI-3Pool)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/yP3PcccLpc22nSrJRbRLySuroYpKiVT2ENRfiQGNNAB/logo.svg", - "tags": ["yield-token"], - "extensions": { - "website": "https://bunnyducky.com/" - } - }, - { - "chainId": 101, - "address": "4AsEadPPuD1183oD6aqBsqrY2afGzZWtxqF1GkAjpQeE", - "symbol": "LAGERCOIN", - "name": "Lager Coin", - "decimals": 0, - "logoURI": "https://github.com/Paul-Sizon/BeerCoinLogo/blob/main/logo2.png?raw=true", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6x5GqC86iwRGbJAggfSjHuQ6an3bVLyAARvrLEdayuif", - "symbol": "ARC", - "name": "Air-Care", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6x5GqC86iwRGbJAggfSjHuQ6an3bVLyAARvrLEdayuif/logo.jpg", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/CatVNbgakx", - "twitter": "https://twitter.com/air_care1" - } - }, - { - "chainId": 101, - "address": "5U39RWhvpQqkASZBN2wqkii3JBRGwha9uC7xQJodcpFa", - "symbol": "DCoin", - "name": "DadoCoin", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/DadoKingCur/crypto/main/pink-blue-d-alphabet-letter-logo-for-business-and-company-with-gradient-design-pastel-colour-for-corporate-identity-vector%20(2).jpg", - "extensions": { - "instagram": "https://www.instagram.com/dossais__/", - "twitter": "https://twitter.com/DadoKingCura" - } - }, - { - "chainId": 101, - "address": "FvtLzn4xKhpk4Gwhq3SkwvPYdzCXCJ4DoggczmjYcuiG", - "symbol": "Diamond", - "name": "Black Diamond", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FvtLzn4xKhpk4Gwhq3SkwvPYdzCXCJ4DoggczmjYcuiG/logo.jpg", - "extensions": { - "twitter": "https://twitter.com/BlackDiamon_sol" - } - }, - { - "chainId": 101, - "address": "22tWadU1wwH6UNnn14ZdHX7weuWDccP53CWYXdsYq2dE", - "symbol": "LPG", - "name": "Little Piggy Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/22tWadU1wwH6UNnn14ZdHX7weuWDccP53CWYXdsYq2dE/logo.png", - "tags": ["NFT", "DAO", "GameFi"], - "extensions": { - "discord": "https://discord.gg/TaWMQbuZ", - "instagram": "https://www.instagram.com/littlepiggynftclub/", - "twitter": "https://twitter.com/NFT_LittlePiggy" - } - }, - { - "chainId": 101, - "address": "F8pZGcGBiN5nd15RKybZmYLszwdejVvVzSMzXSMqvWJj", - "symbol": "SALSA", - "name": "Salsa", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/scarceproject/crypto/main/salsalogo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/worldoftacos_", - "website": "https://worldoftaco.com.mx" - } - }, - { - "chainId": 103, - "address": "DFF6xxSfKnggsdL4MACp2iLJaMtTTDA9gQkDXrAxGqeJ", - "symbol": "KTST", - "name": "TEST TOKEN FOR KÖRA", - "decimals": 8, - "logoURI": "https://gitcdn.link/cdn/nramamur/koracoin/main/Original.png", - "tags": ["utility-token"], - "extensions": { - "description": "KÖRA (KTST) is a utility coin that powers KöRa, a decentralized shipment delivery network connecting shippers with drivers", - "twitter": "https://twitter.com/koraconnect", - "website": "https://koraconnect.com" - } - }, - { - "chainId": 101, - "address": "Gj5CxKTz5m6vMaaq7ksgAPLbZFGTC97EpNinLggB2yax", - "symbol": "GojiraWhitelist", - "name": "Gojira WLtoken", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Gj5CxKTz5m6vMaaq7ksgAPLbZFGTC97EpNinLggB2yax/logo.png" - }, - { - "chainId": 101, - "address": "EgDca7anWBPAqZSeNGMKD1wEzDCGuQsCrqPSheDwJkr2", - "symbol": "BP", - "name": "BearPad Token", - "decimals": 8, - "logoURI": "https://cdn.jsdelivr.net/gh/BearPadIO/image/logo.png", - "tags": ["utility-token", "defi-token"], - "extensions": { - "discord": "https://discord.com/2FzkpNDn5f", - "telegram": "https://t.me/bearpad_community", - "twitter": "https://twitter.com/Bear_Pad_Crypto", - "website": "https://bearpad.io" - } - }, - { - "chainId": 101, - "address": "EG9JDbEiCFpQ8a9LCi8AXskKvqZy757n3yFCnBvLrZRd", - "symbol": "OTAKU", - "name": "OTAKU Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EG9JDbEiCFpQ8a9LCi8AXskKvqZy757n3yFCnBvLrZRd/logo.png" - }, - { - "chainId": 101, - "address": "GvBcdeaThoyzFBzmkv91kz4Z5GMD1PvaQy22JGXeYfeH", - "symbol": "BOXT", - "name": "BOXT", - "decimals": 6, - "logoURI": "https://testgpex.s3.ap-northeast-1.amazonaws.com/test/coin/2022/04/25/87f9d1a728a84bc1aadc7dac3ed165cd.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/BfvrvSMuVR", - "twitter": "https://twitter.com/box_trad", - "website": "https://www.boxtradex.io" - } - }, - { - "chainId": 101, - "address": "GQnKiouoweU9rv9VMLQbrJwbjL7FLFjXAKp7Pj668iy3", - "symbol": "AGORA", - "name": "AGORA", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GQnKiouoweU9rv9VMLQbrJwbjL7FLFjXAKp7Pj668iy3/logo.png", - "tags": ["utility-token", "stake-pool-token"], - "extensions": { - "description": "The $AGORA token is the shopping currency of the Agora, our Metaverse. It will be used to purchase items inside our Metashops : whether it is for NFTs or material items is up to you. Our goal is to create a currency that bridges blockchain related utility and real life utility. You could potentially plan your next road trip with $AGORA or even purchase your engagement ring with it. The more businesses that partner with us the more $AGORA will have tangible utility.", - "twitter": "https://twitter.com/lofts_club", - "website": "https://agoraverse.org/" - } - }, - { - "chainId": 101, - "address": "7VEyj9ooKPLaxd4rxwRWB4J5Yo1upymWwNs7RL78i8Nj", - "symbol": "D3DNETWORK", - "name": "D3D Network", - "decimals": 0, - "logoURI": "https://bafkreidhiegzjjqnikoevl4fbuuocdrnvmxyy2bnnoeoha6kwykhgscuwm.ipfs.dweb.link/?ext=png", - "tags": ["NFT", "utility-token"], - "extensions": { - "discord": "https://discord.gg/saDbn3BFU9", - "twitter": "https://twitter.com/DeadRejcts", - "website": "https://deadrejects.com/" - } - }, - { - "chainId": 103, - "address": "FwM1JzPYupzk6HEJnAqAnL5AFqJCSpkJtgyREfc6aCQN", - "symbol": "BGTC", - "name": "Baby Groot Test Token", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FwM1JzPYupzk6HEJnAqAnL5AFqJCSpkJtgyREfc6aCQN/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/azvrma" - } - }, - { - "chainId": 101, - "address": "FdSBbLHK8hfc6BSqjrhQZaGj7jgd5vfPcchDB2RDAQFA", - "symbol": "DMNDS", - "name": "DH Diamonds", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FdSBbLHK8hfc6BSqjrhQZaGj7jgd5vfPcchDB2RDAQFA/logo.png", - "tags": ["utility-token", "social-token"], - "extensions": { - "website": "https://www.cprodiamond.io/" - } - }, - { - "chainId": 101, - "address": "9t9KEtXY6rxyctXE99mkuk3XbZF8zuEvVoCMWnP4KWU2", - "symbol": "DHHDY", - "name": "DH Hoodie", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9t9KEtXY6rxyctXE99mkuk3XbZF8zuEvVoCMWnP4KWU2/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://www.cprodiamond.io/" - } - }, - { - "chainId": 101, - "address": "8JQBQ2uCLxLP2pskrVpAjuHGQNVbWp3Xaqu3Whr5Ssy", - "symbol": "DHTSRT", - "name": "DH Tshirt", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8JQBQ2uCLxLP2pskrVpAjuHGQNVbWp3Xaqu3Whr5Ssy/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://www.cprodiamond.io/" - } - }, - { - "chainId": 101, - "address": "Etr45gAt9WKsuWiiHa3vhTNnDSMG8ihKS35RbPoWGww2", - "symbol": "HSL", - "name": "HSL Lotto", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Etr45gAt9WKsuWiiHa3vhTNnDSMG8ihKS35RbPoWGww2/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/Vaf54vCMYg", - "twitter": "https://twitter.com/HeavensLotto" - } - }, - { - "chainId": 101, - "address": "ZWL17C2DMPXTAmjHL8nNkg2RFMzMRGXdA28pas8s67a", - "symbol": "ZWL1T", - "name": "Zombiees Whitelist 1 Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ZWL17C2DMPXTAmjHL8nNkg2RFMzMRGXdA28pas8s67a/logo.png", - "tags": ["whitelist-token", "nfts"] - }, - { - "chainId": 101, - "address": "ZWL2AknBaix1oZMV1QZGDmMWthMkJc44Rk51Z6L2XYc", - "symbol": "ZWL2T", - "name": "Zombiees Whitelist 2 Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ZWL2AknBaix1oZMV1QZGDmMWthMkJc44Rk51Z6L2XYc/logo.PNG", - "tags": ["whitelist-token", "nfts"] - }, - { - "chainId": 101, - "address": "DS9Fzb4QC53aHAgsS4UMG5ZL1ejdU5x4wbAdJ16AY4n7", - "symbol": "KAD", - "name": "Kad Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/kadcoin/kadcoin/main/kadcoin-01.png", - "tags": ["community-token", "NFT"], - "extensions": { - "website": "https://www.kadlab.se" - } - }, - { - "chainId": 101, - "address": "3sNZ2c2uFdzAt15zSw6EzANC9NN4qC3SsrdyTW7tSn7w", - "symbol": "UAA", - "name": "Urijah Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/UrijahAl3xander/UrijahCoin/main/UrijahCoinLogo.png", - "tags": ["social-token", "utility-token", "currency-token"] - }, - { - "chainId": 101, - "address": "EJfDncsAwuUGKhX5zTpZuUvH2AURhRdReJcWJmueYuNU", - "symbol": "BCBY", - "name": "BCBY", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EJfDncsAwuUGKhX5zTpZuUvH2AURhRdReJcWJmueYuNU/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8ABT3crsLdhx7KdstReh9sGXhZgDkssNXzAZzqNYEfFZ", - "symbol": "CHUMS", - "name": "CHUMS", - "decimals": 6, - "logoURI": "https://sun9-88.userapi.com/s/v1/if2/KPH5miDn6Uf5zcFpWjmVZwPwJcSZfipH-9ra3x8yJ-OCQ0bwyjKCNgWP3XQvTniNoLIeZpMqpG49AbFYc5Bmc1qB.jpg?size=2560x1919\u0026quality=96\u0026type=album", - "tags": ["GENERAL", "FARMING"] - }, - { - "chainId": 101, - "address": "G7S1cJ1TYyHdvBZWCr9LEAQu2HD2mE9D4qxyxtiWTo2q", - "symbol": "NCL", - "name": "No Child Labor", - "decimals": 0, - "logoURI": "https://github.com/DanaJameel/crypto/blob/main/LogoCoin.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5FozDe1UB9cJZmWKxGg6nBSBSu2A51DXowshCtYeKWEp", - "symbol": "SKULL", - "name": "SKULL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5FozDe1UB9cJZmWKxGg6nBSBSu2A51DXowshCtYeKWEp/logo.png", - "tags": ["whitelist-token", "nfts"], - "extensions": { - "description": "SKULL WL Token " - } - }, - { - "chainId": 101, - "address": "ZENJfNsHnRSnzMnwsPapKSczkSq4TgHM8548cVyUSS8", - "symbol": "ZENJW", - "name": "Zenjin Viperz Early WL Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ZENJfNsHnRSnzMnwsPapKSczkSq4TgHM8548cVyUSS8/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/ZenjinViperz", - "website": "https://www.zenjinviperz.io/" - } - }, - { - "chainId": 101, - "address": "EvQPSR1TwrCJwapoXgLtCiEaiRdbBefkNaqPcUPKzJV3", - "symbol": "PSAGE", - "name": "Passage Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/njericooper/Passage/main/Official_Passage_Token_Logo_x100.png", - "tags": ["nft-token", "community-token", "transactional-token"], - "extensions": { - "description": "Passage Token is the official currency for The Soverign Nation of New Lemuria", - "website": "https://passage.trinitymedianetwork.org/" - } - }, - { - "chainId": 101, - "address": "C3n8hVc6fkTW9rpNaYv3zQT2vUen7Ujzy93F9BWd8F7R", - "symbol": "FACES", - "name": "Caras", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/C3n8hVc6fkTW9rpNaYv3zQT2vUen7Ujzy93F9BWd8F7R/logo.png", - "tags": ["currency"], - "extensions": { - "facebook": "https://facebook.com/jooselito12" - } - }, - { - "chainId": 101, - "address": "D4KVLfryvPdjPsWRKDWGz4YpqpqZHkrjk1JzUMeBG8JJ", - "symbol": "APUNK", - "name": "AsciiPunk Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/D4KVLfryvPdjPsWRKDWGz4YpqpqZHkrjk1JzUMeBG8JJ/logo.png", - "tags": ["social-token"], - "extensions": { - "twitter": "https://twitter.com/ascii_punk" - } - }, - { - "chainId": 101, - "address": "GEMSkjHriJp95iSZpRgb5ym3RQeaMFig7cfWvnWTT4An", - "symbol": "GEMS", - "name": "Good Earth Mood Stones", - "decimals": 8, - "logoURI": "https://media.kaijucards.io/misc/gem.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/fVmPr5uefk", - "twitter": "https://twitter.com/kaijucards", - "website": "https://kaijucards.io" - } - }, - { - "chainId": 103, - "address": "4LZBmYxFxxh4DrEbaRTY9tJ5JzsfRPSGXhDswSDR9wSX", - "symbol": "CFT", - "name": "CFT Test Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4LZBmYxFxxh4DrEbaRTY9tJ5JzsfRPSGXhDswSDR9wSX/logo.png" - }, - { - "chainId": 101, - "address": "AcZLBqhVjqnd4aoyRQ4fQpsBQnPtwNAFFHEmsedctmUR", - "symbol": "DPAY", - "name": "Daupay", - "decimals": 9, - "logoURI": "https://daupay.com/logo.png", - "tags": ["finance", "trading", "swap"], - "extensions": { - "website": "https://daupay.com" - } - }, - { - "chainId": 101, - "address": "A3cTUqeYDWiYrapPi9ooanhkn8Cmj82bXxqWxezJW6sf", - "symbol": "TIGER", - "name": "TIGER City Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/A3cTUqeYDWiYrapPi9ooanhkn8Cmj82bXxqWxezJW6sf/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "4prmmHLvg9NkZGx2CMg2w9iKCcYiFdSNgK9LSgN4bbCp", - "symbol": "DARKELVCF", - "name": "DARKELV Crystal Freak", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4prmmHLvg9NkZGx2CMg2w9iKCcYiFdSNgK9LSgN4bbCp/logo.png", - "tags": ["NFT", "utility-token"] - }, - { - "chainId": 101, - "address": "AMNrJcZb4efKBjCg9djRmYacLgGRT7fR8LA48evGeLK7", - "symbol": "DANK", - "name": "DANK Token", - "decimals": 6, - "logoURI": "https://w7.pngwing.com/pngs/541/141/png-transparent-gold-coin-gold-coin-free-to-pull-the-year-of-the-goat-commemorative-coins-free-logo-design-template-animals-gold-coin.png", - "tags": ["DANK", "StonedFarms"], - "extensions": { - "description": "StonedFarms Dank Token " - } - }, - { - "chainId": 101, - "address": "HREpY3ciGUwXkjTcsJfEVyWtsvgLLNSoz9KBUVHLGkkK", - "symbol": "CRETE", - "name": "CRETERNITY", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/creternity/crypto/main/creternity_35.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2g8238SLAkUSoRVATfKT5sV3121J9LUaCvCuez7iyNDW", - "symbol": "CFSC", - "name": "CloudFit Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/brandoncamerer/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9z8UpvjyH17UC8FoWFvmkke4hCfMjpFyVExZy61WHH2L", - "symbol": "LSHARE", - "name": "LSHARE TOKEN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/dev8x/token-list/main/assets/mainnet/9z8UpvjyH17UC8FoWFvmkke4hCfMjpFyVExZy61WHH2L/lshare.png", - "extensions": { - "medium": "https://lanafinance.medium.com/", - "twitter": "https://twitter.com/lanaprotocol", - "website": "https://lanafi.app/" - } - }, - { - "chainId": 101, - "address": "6rYHThD7ZQAWJmseRzvFro98Pg11K4hYmsHEn9nuM69", - "symbol": "LSHARE-SOL", - "name": "LSHARE SOL LP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/dev8x/token-list/main/assets/mainnet/6rYHThD7ZQAWJmseRzvFro98Pg11K4hYmsHEn9nuM69/lshare-sol.png", - "extensions": { - "medium": "https://lanafinance.medium.com/", - "twitter": "https://twitter.com/lanaprotocol", - "website": "https://lanafi.app" - } - }, - { - "chainId": 101, - "address": "J5VXnHqrr36DxXm3SsXQavfUKZ5DsE9dZxnKeZtUUMkq", - "symbol": "ANM", - "name": "ANIMETA TOKEN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/GaitanaruAndrei/assets/main/bun2_ccexpress.png", - "tags": ["meta-verse", "utility-token"], - "extensions": { - "description": "ANIMETA(ANM) token that can be earned from an interactive game with limitless ideas then redeemed.", - "website": "https://www.ani-meta.io" - } - }, - { - "chainId": 101, - "address": "5XsX5cTfeD5K7nTpJUqNKn8ijAfgtb3beZVSu6jmtXhp", - "symbol": "BC", - "name": "Bne Coin", - "decimals": 0, - "logoURI": "https://github.dev/bne88/token-list/blob/b8df5ce7990728dd525055df9a8a3c18ddec0810/assets/mainnet/5XsX5cTfeD5K7nTpJUqNKn8ijAfgtb3beZVSu6jmtXhp/crypto.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "APGCvZeM2ZVTjeMftVuVwPAKXfmZRj4AYkjURvwgGvpN", - "symbol": "JELLYwl2", - "name": "Jelly Phase 2 WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/APGCvZeM2ZVTjeMftVuVwPAKXfmZRj4AYkjURvwgGvpN/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "discord": "https://discord.com/invite/wzEfUjmpFw", - "twitter": "https://twitter.com/JellyBabiesNFT" - } - }, - { - "chainId": 101, - "address": "3PGgQnN1icXNscLCjwF6zdyeCrDP4vmBg6LBK5MLdAC4", - "symbol": "JELLYwl1", - "name": "Jelly Babies Phase 1 WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3PGgQnN1icXNscLCjwF6zdyeCrDP4vmBg6LBK5MLdAC4/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "discord": "https://discord.com/invite/wzEfUjmpFw", - "twitter": "https://twitter.com/JellyBabiesNFT" - } - }, - { - "chainId": 101, - "address": "6e5HkEuXdUQrVYxbbAQiNfBQhre79jyrkBqenmPgdqcG", - "symbol": "JELLYwl3", - "name": "Jelly Babies Phase 3 WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6e5HkEuXdUQrVYxbbAQiNfBQhre79jyrkBqenmPgdqcG/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "discord": "https://discord.com/invite/wzEfUjmpFw", - "twitter": "https://twitter.com/JellyBabiesNFT" - } - }, - { - "chainId": 103, - "address": "CarbonRRCJA2wMpHY2P4iP9KS4DScun5sdbv3PvNa4aZ", - "symbol": "gcoin", - "name": "Green Coin", - "decimals": 8, - "logoURI": "https://cdn.jsdelivr.net/gh/PurpleZone/NFTs@master/gcoin/gcoin.svg", - "tags": ["community-token", "utility-token", "colored-token"], - "extensions": { - "coingeckoId": "wrapped-bitcoin", - "description": "The only way to get carbon negative cryptocurrency is using gcoin: a CO2 accountancy NFT", - "imageUrl": "https://bafybeibcchigmrbxhijavgamnmpg3qcqj4tccgaux64ctirymqetlzng3q.ipfs.nftstorage.link/?ext=svg", - "telegram": "https://t.me/cryptolake2", - "website": "https://ipfs.safewatch.xyz/ipns/QmTo1AnNH7Snu37Dotphw2fX54u1S5VLFpnnERN7GbyUrW/#gcoin", - "whitepaper": "https://gateway.ipfs.io/ipns/QmTo1AnNH7Snu37Dotphw2fX54u1S5VLFpnnERN7GbyUrW/whitepaper.pdf" - } - }, - { - "chainId": 101, - "address": "5RRQKdF4MSicGSgx2HiGf9Fr4SN5m5743S3qpbcEc5fk", - "symbol": "GNE", - "name": "Project GNE", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/vking45/assets/main/gne.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/ympTZR9jY8", - "instagram": "https://instagram.com/projectgne", - "twitter": "https://twitter.com/projectgne", - "website": "https://projectgne.com/" - } - }, - { - "chainId": 101, - "address": "EpjyMYD46ebnpxDqt8qwPsK2MCaqvuhB82UBnwhShoaN", - "symbol": "BHMT", - "name": "BioHumans Mint Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/chillingonsol/logo-/main/logo.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "ErdkWPCAJP3cXH56ZeRCPqpHkJFtNyF3gPuEjxkwwgBq", - "symbol": "PH", - "name": "Phenal", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/rohitrj22/phenal/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2wqKmDPQeyJrrBLsFvkebD7xXbwAMdHqb6o1ZrUKWagW", - "symbol": "ALPHA-WL", - "name": "ALPHA WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2wqKmDPQeyJrrBLsFvkebD7xXbwAMdHqb6o1ZrUKWagW/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FxyCwJDEHXePAE6Fph6eiwsCvkJw8kV8vnPnSwBFdPPW", - "symbol": "DARKELVTV", - "name": "DARKELV Tech Vulture", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FxyCwJDEHXePAE6Fph6eiwsCvkJw8kV8vnPnSwBFdPPW/logo.png", - "tags": ["NFT", "utility-token"] - }, - { - "chainId": 101, - "address": "853uKMwykX2SjgD7PqunL934xwGy3NhoiZXQFHeRDDTe", - "symbol": "DARKELVSF", - "name": "DARKELV Spiky Freak", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/853uKMwykX2SjgD7PqunL934xwGy3NhoiZXQFHeRDDTe/logo.png", - "tags": ["NFT", "utility-token"] - }, - { - "chainId": 101, - "address": "8RjzDqcg6zS4yPJg7Bsjc3QLdEc9sphbpWEatCngvxmh", - "symbol": "DARKELVLD", - "name": "DARKELV Liquid Demon", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8RjzDqcg6zS4yPJg7Bsjc3QLdEc9sphbpWEatCngvxmh/logo.png", - "tags": ["NFT", "utility-token"] - }, - { - "chainId": 101, - "address": "47Qt8pXRinMME4VCypnEqt6SvPzEbMZLyPJyN5TtdAjH", - "symbol": "DARKELVHA", - "name": "DARKELV Half Abstract", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/47Qt8pXRinMME4VCypnEqt6SvPzEbMZLyPJyN5TtdAjH/logo.png", - "tags": ["NFT", "utility-token"] - }, - { - "chainId": 101, - "address": "CweMB86iVRjF7hn4rq2tDcdz6HzDaTNAHEaAB9VKADov", - "symbol": "RAG", - "name": "RAM-G", - "decimals": 0, - "logoURI": "https://www.ram-g.ml/RamG.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/Nvs6ebZb", - "website": "https://www.ram-g.ml" - } - }, - { - "chainId": 101, - "address": "H5cDniBsyfoddtHrfz6gCSw7R23ZwRuzozD4Fek9WUsS", - "symbol": "lpUSD", - "name": "LP Finance USD", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/LP-Finance-Inc/token-image/main/lpUSD.png", - "tags": ["stablecoin", "LP-Finance"], - "extensions": { - "discord": "https://discord.gg/ug7mstrHNW", - "telegram": "https://t.me/LP_Defi_Official_group", - "twitter": "https://twitter.com/LPFinance_" - } - }, - { - "chainId": 101, - "address": "AotgToH2CXpWh1m8xsCrYQ46fz4n4FdEnL3FgTYcSnt2", - "symbol": "AOTG", - "name": "Apes Of the Gods Governance Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AotgToH2CXpWh1m8xsCrYQ46fz4n4FdEnL3FgTYcSnt2/logo.png", - "tags": ["NFT", "utility-token"], - "extensions": { - "discord": "https://discord.com/invite/apesofthegods", - "twitter": "https://twitter.com/ApesoftheGods", - "website": "https://apesofthegods.com/" - } - }, - { - "chainId": 103, - "address": "ErdkWPCAJP3cXH56ZeRCPqpHkJFtNyF3gPuEjxkwwgBq", - "symbol": "PH", - "name": "Phenal", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/rohitrj22/phenal/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FdZu3j6QeJQPhXo7fPCQR6dmYy7c5KQsjKvBxi4PFSj2", - "symbol": "FRTC", - "name": "FRToken", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FdZu3j6QeJQPhXo7fPCQR6dmYy7c5KQsjKvBxi4PFSj2/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DR8thdhLWjw5ZEahtn53SLgzAWqZQ3ZyhQQCHomC95Ut", - "symbol": "Voucher", - "name": "Voucher Solana", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/VoucherSol/Crypto/main/vouchersol-logo.png", - "tags": ["NFT", "utility-token"], - "extensions": { - "description": "The world's first innovation project integrating blockchain technology into the education system to enhance learning enthusiasm", - "github": "https://github.com/VoucherSol", - "twitter": "https://twitter.com/VoucherSol", - "website": "https://medium.com/@vouchersolana" - } - }, - { - "chainId": 101, - "address": "9jcibqjEh988j7szCXB9jKgF3hH17CYbjrDYoGYGmmne", - "symbol": "SOLNANA", - "name": "Solnana", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9jcibqjEh988j7szCXB9jKgF3hH17CYbjrDYoGYGmmne/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/artmonkees", - "website": "https://artmonkees.io/" - } - }, - { - "chainId": 103, - "address": "CyRFrieoNB1hxw8bjyoh3y7eYA5QeFS9PsdpkM3VSJwR", - "symbol": "CHILL", - "name": "Chill Fish Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CyRFrieoNB1hxw8bjyoh3y7eYA5QeFS9PsdpkM3VSJwR/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "AuFj6v1RSGv5fgPAhGMEHy7VEDQD97DRphBMRSo2218q", - "symbol": "KAV1", - "name": "Kawaii DAO Vote Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AuFj6v1RSGv5fgPAhGMEHy7VEDQD97DRphBMRSo2218q/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "8uvYjAw7U9DJzpN1rCuxRXGLx4acureuKQwjHyrPcoUP", - "symbol": "WOOD", - "name": "WOOD", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/dwrx/token-list/main/assets/mainnet/5Ns2m2oBWyj7Kz4VgGgenHZA5dUTJ224AbtjUjaDB651/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/metaversiumgame", - "website": "https://metaversium.io/" - } - }, - { - "chainId": 101, - "address": "8fAt3GoA7vp1m6JWw4xKwyXM7QMHrapbA25x5wmkZD2v", - "symbol": "MAYAX", - "name": "Mayax", - "decimals": 4, - "logoURI": "https://github.com/suleymanusmahmutus/mayax-token/blob/main/$MAYX%20logo.png?raw=true", - "tags": ["NFT", "utility-token", "community-token"] - }, - { - "chainId": 101, - "address": "A823zwVE6dfjJJ3WDcxkPycZX7LkCiF7jazt1V9rxvWr", - "symbol": "TMMT", - "name": "The Mouse Mouse Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/llaera/TMMT/main/logoTMMT.png", - "tags": ["social-token"], - "extensions": { - "twitter": "https://twitter.com/lorislaera", - "website": "http://loris.lu/" - } - }, - { - "chainId": 101, - "address": "4qHdtf8B5mWC9dPeZzBryWmrF4s4cyGEdBnYeyNdSP7y", - "symbol": "DEU", - "name": "DEUTERIUM", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4qHdtf8B5mWC9dPeZzBryWmrF4s4cyGEdBnYeyNdSP7y/deulogo.png", - "tags": ["utility-token"], - "extensions": { - "description": "$DEU is literally the fuel of the entire OG Ali3n ecosystem, it is a Token created on the Solana Blockchain", - "discord": "https://discord.gg/wU2VVbnJwa", - "twitter": "https://twitter.com/ogali3n", - "website": "https://linktr.ee/ogali3n" - } - }, - { - "chainId": 101, - "address": "ABi53CLHZeS4gFsRhrLwxWg2BD1WyymyXBBgD7aC1svb", - "symbol": "OGAN3", - "name": "OG Ali3n WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ABi53CLHZeS4gFsRhrLwxWg2BD1WyymyXBBgD7aC1svb/logo.png", - "extensions": { - "description": "This token will grant you access to 1 mint during Presale of OG Ali3n", - "discord": "https://discord.gg/wU2VVbnJwa", - "twitter": "https://twitter.com/ogali3n", - "website": "https://linktr.ee/ogali3n" - } - }, - { - "chainId": 101, - "address": "JiKavX2Z9muwFR3M9eXn9NgHgsT3xUw7QXKWeid2TnY", - "symbol": "JIKAN", - "name": "JIKAN STUDIOS WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/JiKavX2Z9muwFR3M9eXn9NgHgsT3xUw7QXKWeid2TnY/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/JIKANSTUDIOS" - } - }, - { - "chainId": 101, - "address": "B7oUeMmDT2ZjsCXUVtvTBYcBb4jJy5CXW1FE3Wqr68Gb", - "symbol": "VYV", - "name": "Vyvest", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Vyvest/vyvest_token/main/logo.png", - "tags": ["utility-token", "currency", "vyvest"], - "extensions": { - "instagram": "https://www.instagram.com/vyvest/", - "twitter": "https://twitter.com/vyvest" - } - }, - { - "chainId": 101, - "address": "CGpVGTyeofBeQDWRFjyvaC3NzASLNMrKbx1Mno4QSkDb", - "symbol": "TCAC", - "name": "TCAC", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/TCACBot/TCACBot/main/Token1.png", - "tags": ["NFT", "utility-token", "community-token"], - "extensions": { - "discord": "https://discord.gg/nXN6F4YfGd", - "twitter": "https://twitter.com/TCAC_Solana", - "website": "https://thecasinoape.club" - } - }, - { - "chainId": 101, - "address": "4r7pQ4Eu2d8PBukP9XxXymze8a7VKwE6Ta7TqnM7yELQ", - "symbol": "NSN", - "name": "NS-Network", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/steebxx/asset/main/nslogo14.png", - "tags": ["utility-token", "community-token"] - }, - { - "chainId": 103, - "address": "9ycjFE7CrhKY121J3tupqiCNaYsgSvmnszjaGKKWPRHi", - "symbol": "PHEN", - "name": "Phenos", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/rohitrj22/Phenos/main/logo1.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Bb9MA1zCZ6qHTavbpxGe6Gwei1TrnPqv9AHJ6B38yeut", - "symbol": "A8", - "name": "Ancient8", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Bb9MA1zCZ6qHTavbpxGe6Gwei1TrnPqv9AHJ6B38yeut/logo.png", - "tags": [ - "DAO-token", - "social-token", - "community-token", - "utility-token", - "governance-token" - ], - "extensions": { - "address": "Bb9MA1zCZ6qHTavbpxGe6Gwei1TrnPqv9AHJ6B38yeut", - "blog": "https://blog.ancient8.gg/", - "discord": "https://discord.com/invite/ancient8", - "facebook": "https://www.facebook.com/groups/222117549944333", - "telegram": "https://t.me/ancient8_gg", - "twitter": "https://twitter.com/Ancient8_gg", - "website": "https://ancient8.gg/", - "whitepaper": "https://whitepaper.ancient8.gg/ancient8/", - "youtube": "https://www.youtube.com/channel/UCv4p3wP6A6Li2UYhGsh3tDQ" - } - }, - { - "chainId": 103, - "address": "4uQikXdLpygqu5dD76FMeVhm5VadVw4ekqWuXsUDp2Xo", - "symbol": "AMWL", - "name": "Alien Mentors WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Robby3082/test-token/main/alien2.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "SLYRnc8efXUZjMVQiG65p2RUsukQPEdgPWLGYn3oHrF", - "symbol": "SLYR", - "name": "SuperLayer", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SLYRnc8efXUZjMVQiG65p2RUsukQPEdgPWLGYn3oHrF/logo.png", - "extensions": { - "twitter": "https://twitter.com/SuperLayerio", - "website": "https://superlayer.io" - } - }, - { - "chainId": 101, - "address": "Fe49uKc9471umPfsSqPbJQR473dYMokdqNuLtWLCPxss", - "symbol": "SLHK", - "name": "SolheimKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/krso1002/crypto/main/logoSolheinCoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7BjLhYaF6cayDiCEZ77UnKuEPmK52CkL5bybJ7ZFrjyu", - "symbol": "WLS", - "name": "WLSkeletonz", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Deghf666g/wltoken/main/Bones.png?token=GHSAT0AAAAAABTUJFEMQQ75RK4YB3RNOWNKYTJUIEA", - "tags": ["NFT", "social-token"], - "extensions": { - "twitter": "https://twitter.com/SkeletonzNFT", - "website": "https://skeletons-nft.com/" - } - }, - { - "chainId": 101, - "address": "942JqBf2PipzDyHM5sQyfLh21XUVFmGAoSReMMe1Gfba", - "symbol": "SCWL", - "name": "SolClones WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/pablolefleur/solcloneswltoken/main/solcloneswlimg.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "J1gpNtGmUqrZ5RuaVLep8UsMjtL1jjiBU7Zvea72xegn", - "symbol": "MIAPSO", - "name": "MIAPSO Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/mihaiapso/1stcrypto/main/256.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "commqeM8PpVGfQqfs8Cdg5xeDshZwmnfbbEJuVbQnDe", - "symbol": "COMM", - "name": "Communi3 Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/commqeM8PpVGfQqfs8Cdg5xeDshZwmnfbbEJuVbQnDe/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "discord": "https://discord.gg/communi3", - "twitter": "https://twitter.com/communi3_io", - "website": "https://nft.communi3.io/" - } - }, - { - "chainId": 101, - "address": "GG7y153Enp7VaNbbGKLtgrhY7B8x2PFawvx445FQkf9L", - "symbol": "OZK", - "name": "OZAK", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/St33b8n/asset/main/logo.jpg", - "tags": ["social-token", "utility-Token"] - }, - { - "chainId": 101, - "address": "3ZB5G65aYUfnJP9NM3FkpenCYYy198NgJUFG68RdSVXU", - "symbol": "DOOF", - "name": "Doof Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/schraderweb/crypto/main/dooflogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6LYebwvX39zn18XA4692s3h8UsbmBzmnLKmzz1CPm8Ta", - "symbol": "SKNK", - "name": "SkunkworksCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6LYebwvX39zn18XA4692s3h8UsbmBzmnLKmzz1CPm8Ta/logo.svg", - "tags": ["utility-token"] - }, - { - "chainId": 103, - "address": "WMC5QepSBi8wdGt84pa2vvZBuhksEVrADaVNMci8sgq", - "symbol": "WMC", - "name": "Wonder Monkeys Club", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WMC5QepSBi8wdGt84pa2vvZBuhksEVrADaVNMci8sgq/logo.png", - "tags": ["utility-token", "community-token", "meme-token"], - "extensions": { - "twitter": "https://twitter.com/wmonkeysc" - } - }, - { - "chainId": 101, - "address": "C38sEPwJa6zSCmrZjbnmeST3ACjsZiJ3VfZMb3Wz9CVR", - "symbol": "SPN", - "name": "Solar Panel", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Acidias/CryptoSolToken/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3i6AKKC2WGd7qgqFJmSxKUGBWAui91upsMGu82xszTL2", - "symbol": "vBARN", - "name": "BARN", - "decimals": 9, - "logoURI": "https://github.com/ArthurPaivaT/token-list/blob/main/assets/mainnet/3i6AKKC2WGd7qgqFJmSxKUGBWAui91upsMGu82xszTL2/logo.png?raw=true" - }, - { - "chainId": 101, - "address": "EJEnW3ym7CGoRHSaAtx3aEUZ9qMGcRvdHaMuJtgX9bJ3", - "symbol": "VALLE", - "name": "Ribrito do Valle", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/tarvcoin/crypto/main/logo_valle_token.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "APkf6LAn4uiSHWBFuXiaq6GaJQzNHNzcK5TSsxRUA3bh", - "symbol": "XONE", - "name": "Xone Spaces", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/APkf6LAn4uiSHWBFuXiaq6GaJQzNHNzcK5TSsxRUA3bh/logo.png", - "tags": [ - "estate-token", - "metaverse-token", - "virtual-land", - "play-to-earn", - "metaball-nfts", - "plasmaverse", - "metaballix" - ], - "extensions": { - "telegram": "https://t.me/metaballix", - "twitter": "https://twitter.com/metaballix", - "website": "https://xone.land" - } - }, - { - "chainId": 101, - "address": "45hSWcupwLpq5AgQU6V6socGn9EsHP59qVeVKmXyrbqi", - "symbol": "GMC", - "name": "GMC coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/GalaxyMoonClub/assets/main/assets/GMC.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/galaxymoonclub", - "twitter": "https://twitter.com/galaxymoonclub", - "website": "https://www.galaxymoonclub.com/" - } - }, - { - "chainId": 101, - "address": "CWLA8Kks4qJ5ain6cdhDnqC2Tns5osbakBLoZvzHhpGV", - "symbol": "CANDD", - "name": "CANDY DEALERS WL TOKEN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CWLA8Kks4qJ5ain6cdhDnqC2Tns5osbakBLoZvzHhpGV/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/CandyDealersNFT", - "website": "https://www.candydealersnft.com/" - } - }, - { - "chainId": 101, - "address": "9DHhXz8BNcWHmPDQ9Bj418erzEgZsEPFSBCV2yi8XjcC", - "symbol": "GPV", - "name": "GP5 Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/AshtonCable/gp5-coin/main/gp5icon.jpg", - "tags": ["social-token", "meme-token"] - }, - { - "chainId": 101, - "address": "waodQ3T7DKY3LPa2wLnMCnDnYEWvtL6Xj1BfqjDQ89z", - "symbol": "AOD-WL", - "name": "Age of DeFi WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/waodQ3T7DKY3LPa2wLnMCnDnYEWvtL6Xj1BfqjDQ89z/wl-logo.jpg", - "tags": ["utility-token"], - "extensions": { - "website": "http://ageofdefi.io/" - } - }, - { - "chainId": 101, - "address": "oaodTnNEYCKMH9yfzgeJkXyKQtu2ZYrkZw93JcP3ECQ", - "symbol": "AOD-OG", - "name": "Age of DeFi OG", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/oaodTnNEYCKMH9yfzgeJkXyKQtu2ZYrkZw93JcP3ECQ/og-logo.jpg", - "tags": ["utility-token"], - "extensions": { - "website": "http://ageofdefi.io/" - } - }, - { - "chainId": 101, - "address": "Dx3qUh6f5GMaBQeMPYKPH1p8uaiCBYLj2eYDzqW6uCjy", - "symbol": "SFS", - "name": "SnakeFS", - "decimals": 9, - "logoURI": "https://github.com/firassaada/CRYPTO/blob/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CRTRFiHiddN7UMR5LR4SgDB4VuX6s4SKm2Ltms7ui7Tu", - "symbol": "$CRTR", - "name": "CRTR", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CRTRFiHiddN7UMR5LR4SgDB4VuX6s4SKm2Ltms7ui7Tu/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/badcreatureSOC", - "website": "https://www.badcreaturesociety.com/" - } - }, - { - "chainId": 103, - "address": "851Jvm5mhfpbfd1uThHGy2yxbpbbRbSMSwDiiD4mTAp", - "symbol": "KGT", - "name": "KGToken", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/851Jvm5mhfpbfd1uThHGy2yxbpbbRbSMSwDiiD4mTAp/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "CWLAETW6Pty2VqPm3MTs47FhVNdQmEPfDm6yZBkQcZz2", - "symbol": "SC1M", - "name": "FAKE TOKEN BUY THE OFFICIAL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CWLAETW6Pty2VqPm3MTs47FhVNdQmEPfDm6yZBkQcZz2/logo.png", - "tags": ["scam-token"] - }, - { - "chainId": 101, - "address": "ELECtZbpWTUGcxYTvmqTu2gRH8GVMVWuE4dkULDapp8F", - "symbol": "ELECTRUM", - "name": "Electrum", - "decimals": 9, - "logoURI": "https://imgur.com/a/QxWOaTj", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/Houseofsparta_", - "website": "https://houseofsparta.art/" - } - }, - { - "chainId": 101, - "address": "A3epfzWH65DHqYa8ZMkpg1MwPyhV6RU6TeTTuXAzR6TQ", - "symbol": "USDPT", - "name": "United States Dollar Partoken", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/A3epfzWH65DHqYa8ZMkpg1MwPyhV6RU6TeTTuXAzR6TQ/logo.png", - "tags": ["stablecoin", "utility-token"], - "extensions": { - "description": "United States Dollar Partoken (USDPT) is a one-for-one United States Dollar collateralized stablecoin token.", - "website": "https://partokens.com/usdpt" - } - }, - { - "chainId": 103, - "address": "GVEjcbQQK5DdGSYNX1CN2n8X5iThTRXUCzhe3cuW7kcM", - "symbol": "KBT", - "name": "KBToken", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GVEjcbQQK5DdGSYNX1CN2n8X5iThTRXUCzhe3cuW7kcM/logo-coin.png", - "tags": ["utility-token"] - }, - { - "chainId": 103, - "address": "86gDCtTxEa2UssuCGPF8nTGEcXnyPXCPRHVqyWn6rrS8", - "symbol": "zza", - "name": "Pizza", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/86gDCtTxEa2UssuCGPF8nTGEcXnyPXCPRHVqyWn6rrS8/logo.png", - "tags": ["utility-token", "social-token"] - }, - { - "chainId": 101, - "address": "USXdsB36PkdbzLRdYEHp9oDcaR2Qu9FLG59tyfzkEDW", - "symbol": "USX", - "name": "USD Exchange Token for Duck Swap", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/duckdex/token-list/main/assets/mainnet/USXdsB36PkdbzLRdYEHp9oDcaR2Qu9FLG59tyfzkEDW/logo.png", - "tags": ["stablecoin", "utility-token"], - "extensions": { - "discord": "https://discord.gg/2ySvY6Vrv7", - "twitter": "https://twitter.com/duck_dex", - "website": "https://duckdex.github.io" - } - }, - { - "chainId": 101, - "address": "83AaQeJ5WDZepgZds3TDQNZbJxQdH2rCXD7aXs5WcY61", - "symbol": "MDAO", - "name": "Monsta Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/monstadao/logo/main/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/monstadao_", - "website": "https://monstadao.com" - } - }, - { - "chainId": 101, - "address": "2Sqcg3LCSe5zJeYnpYrvB9BbVDgoLkZLqut4GKb8hYFW", - "symbol": "MDAOWL", - "name": "Monsta Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/monstadao/logo/main/wl.png", - "tags": ["whitelist-token"], - "extensions": { - "website": "https://twitter.com/monstadao_" - } - }, - { - "chainId": 101, - "address": "3akU98ei7LMrB1DwZV2aNZqL1FySLTBE4exCQKYbByBT", - "symbol": "MCWT", - "name": "MUTANT CETS WL TOKENS", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3akU98ei7LMrB1DwZV2aNZqL1FySLTBE4exCQKYbByBT/logo.png" - }, - { - "chainId": 101, - "address": "DghUbSAzAznDb64xTRc27ye1L3cnwdbxJ1WyBGCzMipv", - "symbol": "C2C", - "name": "Creep2CurryNC", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/vk1992op/cryptoPic/main/blockchainlogo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "6xwLaeaZdV3WTQ3CEaau3CdRggj13Sg91ddNaZCHpr4G", - "symbol": "ATT", - "name": "Akvo Test Token", - "decimals": 9, - "logoURI": "https://github.com/scgithubcs/AKVOTest/blob/main/akvo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "CqoMXWaoTMfYNtTTwTadz9bMxg8DkZJVKtVRcw77nmYg", - "symbol": "ALT2B", - "name": "Bitcoin Alternative Coin", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/alt2b/crypto/main/a2BTC%20logo.png", - "tags": ["community-token", "utility-token", "social-token"] - }, - { - "chainId": 101, - "address": "4QYu5xC7yCWj7KWz6vG8GqbQwpF7u6WR87CVNhELvsb2", - "symbol": "SPXT", - "name": "Space-X Token", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/kazilop/SpaceXCoin/main/SPXC.jpg" - }, - { - "chainId": 101, - "address": "To8njmYMGz3x7ZAE2gcQpSyyaHsLz1vd8xzzQD5tfKh", - "symbol": "CKC", - "name": "Chill Koala Club", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/To8njmYMGz3x7ZAE2gcQpSyyaHsLz1vd8xzzQD5tfKh/logo.png" - }, - { - "chainId": 101, - "address": "igYvQesuheKUuvkGS5YnK6HX4udg86Dxbce6TZncqEx", - "symbol": "GBITS-POC", - "name": "Gbits-PoC", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/gbits-io/gbits-public-storage/main/gbits-logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "DNwaofk8qHpoPx9MZ4aKbvA2isR5d7xv5wcfKnzgV31S", - "symbol": "FBTB", - "name": "FBT Beta", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DNwaofk8qHpoPx9MZ4aKbvA2isR5d7xv5wcfKnzgV31S/logo.png", - "tags": ["drive-to-earn", "IoT", "web3"], - "extensions": { - "description": "FBT Beta is the pre-launch token for FrodoBots, which is a decentralised network of tele-operated delivery robots powered by a 'drive-to-earn' model.", - "discord": "https://discord.com/invite/bwUfNA2xgr", - "twitter": "https://twitter.com/frodobots", - "website": "https://www.frodobots.com", - "youtube": "https://www.youtube.com/channel/UCYTWaYN7a2sCPwG0WSNl3Yg" - } - }, - { - "chainId": 101, - "address": "8c71AvjQeKKeWRe8jtTGG1bJ2WiYXQdbjqFbUfhHgSVk", - "symbol": "$GARY", - "name": "GARY", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/puresec-ng/gary/main/GARY_coin.jpg" - }, - { - "chainId": 101, - "address": "CLkGAwfhBmL3oNmNppqPUCYu6sAFzfymkmZ7FP1qQVYS", - "symbol": "GYS", - "name": "GYS", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CLkGAwfhBmL3oNmNppqPUCYu6sAFzfymkmZ7FP1qQVYS/logo.png", - "extensions": { - "website": "https://getyoursports.com/" - } - }, - { - "chainId": 101, - "address": "EZ6eshad6T4Wp4YZhKtkCMJHMfPwyBkLaQCv8ULVagdv", - "symbol": "CRCO", - "name": "Crypto's Coffee", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/mihaiapso/newcryptologo/main/newlogo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/kb2yrgMTpK", - "instagram": "https://instagram.com/cryptoscoffee?igshid=YmMyMTA2M2Y=", - "website": "https://www.cryptoscoffee.io/" - } - }, - { - "chainId": 101, - "address": "k6DGTMnEvS5XZRJpq39rF5WFm2Htukc4iFBTXe6gbPG", - "symbol": "WLIST", - "name": "Web3 Trollz Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/k6DGTMnEvS5XZRJpq39rF5WFm2Htukc4iFBTXe6gbPG/UndergroundLogo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "SiCKr9KxWv9pA9q35qoaKu9ZhEKZngscLjcREogaobh", - "symbol": "SBT", - "name": "SickBoys-WL-Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SiCKr9KxWv9pA9q35qoaKu9ZhEKZngscLjcREogaobh/logo.png" - }, - { - "chainId": 101, - "address": "GPrRVFvMmLyygT3iNCyaGrMAWpyRsGNmmoHzLcQV8gHT", - "symbol": "WASS", - "name": "WillThickie ACoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Tedas1/Solana/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3fsRZntJ3mKLXFt2MjgXY7KT8ppSXCpqFGUzTHA37rN4", - "symbol": "RVALLE", - "name": "Ribeiro do Valle", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/tarvcoin/token-list-v6/main/assets/mainnet/3fsRZntJ3mKLXFt2MjgXY7KT8ppSXCpqFGUzTHA37rN4/logoRvalle.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "tojixS2xsLhpSfYRvLfALmMehyQMEUDwV9RH7TMQmkY", - "symbol": "$IJOT", - "name": "Tojiba CPU IJOT", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/tojibaceo/tojibaceo/main/ijot2.png", - "tags": ["utility-token"], - "extensions": { - "description": "Tojiba CPU Corps native token IJOT", - "discord": "https://discord.gg/br3Cfh56kF", - "twitter": "https://twitter.com/tojibaceo", - "website": "https://www.tojiba.biz" - } - }, - { - "chainId": 101, - "address": "G2y1fVA8Rx5dTg21xsDGwJycZAqr4uhLYussCgu1V3LM", - "symbol": "$KIBBLE", - "name": "BABC Kibbles", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/G2y1fVA8Rx5dTg21xsDGwJycZAqr4uhLYussCgu1V3LM/logo.png", - "extensions": { - "website": "https://babclub.io/" - } - }, - { - "chainId": 101, - "address": "CyZDc8wbDmtT88YVLAfvrH7QSsGdAreXkNKjWVQDDzCn", - "symbol": "MFCMC", - "name": "MFC M1 Mint Confirmation", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CyZDc8wbDmtT88YVLAfvrH7QSsGdAreXkNKjWVQDDzCn/logo.png", - "tags": ["nft"], - "extensions": { - "description": "This trophy proves that you were one of MFC's first trainers. You were one of the very first 6,969 to join the revolution!", - "discord": "https://discord.gg/mechafightclub", - "instagram": "https://www.instagram.com/mechafightclub/", - "linkedin": "https://www.linkedin.com/company/irreverentlabs/", - "twitter": "https://twitter.com/MechaFightClub", - "website": "https://mechafightclub.com" - } - }, - { - "chainId": 101, - "address": "WL7fRmbPfu3U45ZWPrXyfJTjzneFahC2X2pMsBESL4g", - "symbol": "ZWLT", - "name": "Zombiees Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WL7fRmbPfu3U45ZWPrXyfJTjzneFahC2X2pMsBESL4g/logo.png", - "tags": ["whitelist-token", "nfts"] - }, - { - "chainId": 101, - "address": "HGthk49ocEHRK4zAEVGrnATug1jo795m8nKmYHMxPFmb", - "symbol": "RCHG", - "name": "CheonHae ReeCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/carolprogrammer/julieyoon/main/RCoinLogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9FtUCM8xVL7SdtC9uPAYX9etoZef3WDM4GPpaiMRS1mg", - "symbol": "S0l_", - "name": "S0L0NA_PAY", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/peawisam/crypto/main/S0l_logocleane2d.png", - "tags": ["Payments-token"] - }, - { - "chainId": 101, - "address": "YAKUAzPYctt3wFvDWHXkKUa4c3Vxx33Voui2HEiE8gA", - "symbol": "YAKUx", - "name": "YAKU x avatars Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/YAKUAzPYctt3wFvDWHXkKUa4c3Vxx33Voui2HEiE8gA/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/YakuCorp" - } - }, - { - "chainId": 101, - "address": "3aX4hAyEZcMCn4DmFGPJSguodx7HrwxHr2dFRCD3ec1K", - "symbol": "TWD", - "name": "The Wolf Den WL Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3aX4hAyEZcMCn4DmFGPJSguodx7HrwxHr2dFRCD3ec1K/logo.png", - "tags": ["social-token"], - "extensions": { - "discord": "https://discord.gg/thewolfden", - "twitter": "https://twitter.com/TheWolfDenNFT" - } - }, - { - "chainId": 101, - "address": "SouLMDHmcNVqMusHpdCrWQEh9HWiQYdLiR28XkhveSL", - "symbol": "Deadsouls", - "name": "Dead Souls Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SouLMDHmcNVqMusHpdCrWQEh9HWiQYdLiR28XkhveSL/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/DeadSoulsDAO" - } - }, - { - "chainId": 101, - "address": "2Giihhh4rD5QMF49EExf5k8qbxftaqRWzLi4tS6YcrvR", - "symbol": "DGOLD", - "name": "Degen Gold", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Giihhh4rD5QMF49EExf5k8qbxftaqRWzLi4tS6YcrvR/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "$DGOLD is the official governance token for Degen Islands", - "discord": "https://discord.gg/degenislands", - "twitter": "https://twitter.com/degenislands", - "website": "https://degenislands.com" - } - }, - { - "chainId": 101, - "address": "yCUh3GqnQdus9rj7iEheJDNVsbwYnd4WYgwjQkwnHSH", - "symbol": "y-cUSDC-cUSDT", - "name": "Yield Saber LP Token (cUSDC-cUSDT)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/yCUh3GqnQdus9rj7iEheJDNVsbwYnd4WYgwjQkwnHSH/logo.svg", - "tags": ["yield-token"], - "extensions": { - "website": "https://bunnyducky.com/" - } - }, - { - "chainId": 101, - "address": "A4DpjBEAL9U8crHRNKrbtdbH1wziiAkavNKPnwaetnyS", - "symbol": "TWDNEW", - "name": "(FIXED) The Wolf Den WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/A4DpjBEAL9U8crHRNKrbtdbH1wziiAkavNKPnwaetnyS/logo.png", - "tags": ["social-token"], - "extensions": { - "discord": "https://discord.gg/thewolfden", - "twitter": "https://twitter.com/TheWolfDenNFT" - } - }, - { - "chainId": 103, - "address": "3oGc7tXAPDQkM8XtDcVZTs3kUMZUMiTQihhXC6nMpUPJ", - "symbol": "KBSol", - "name": "KBSol Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3oGc7tXAPDQkM8XtDcVZTs3kUMZUMiTQihhXC6nMpUPJ/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "EXwT5bkDvTD136eqySjTu5xsNkeeTa9vdTM6f9NdGn8j", - "symbol": "VICHE", - "name": "VICHE of Ukraine Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/vicheua/logo/main/logo.png" - }, - { - "chainId": 101, - "address": "9p2xfkvfSrX9Li7fUPog4Z1owetZLnEKxeuexcRMXH1a", - "symbol": "DICK", - "name": "DICKY", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9p2xfkvfSrX9Li7fUPog4Z1owetZLnEKxeuexcRMXH1a/logo.png" - }, - { - "chainId": 101, - "address": "AaE7ktigdArb5tXRvZPuTYqqKTAzsFoLHa6WQ1icvCEg", - "symbol": "SEWT", - "name": "SolExpress WL Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/SEPAD12/Logo/main/SE-Logo.png" - }, - { - "chainId": 101, - "address": "HYHtT5bixTKEWPYwiUC5vCqTzSaoTQzNoMmy2GsPDgqQ", - "symbol": "CROAK", - "name": "The Great Croak Club Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HYHtT5bixTKEWPYwiUC5vCqTzSaoTQzNoMmy2GsPDgqQ/coin.png" - }, - { - "chainId": 103, - "address": "6xwLaeaZdV3WTQ3CEaau3CdRggj13Sg91ddNaZCHpr4G", - "symbol": "ATT", - "name": "Akvo Test Token", - "decimals": 9, - "logoURI": "https://github.com/scgithubcs/AKVOTest/blob/main/akvo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "Do5AbqdEbj742B2Cm8BypAGg3h1skLaAVTbT2mLRcW8c", - "symbol": "HALO", - "name": "HALO", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/farhan067/HaloTokenLogo/main/logo.png" - }, - { - "chainId": 101, - "address": "CxtwGnhLFaHNYYJg9wzBjYoyBR7MZDrf3SSEAnobWf7t", - "symbol": "SHMC", - "name": "Sheeshmon Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CxtwGnhLFaHNYYJg9wzBjYoyBR7MZDrf3SSEAnobWf7t/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "FAn4hcD345ugybXc6aDivPnLAnBLhjNKcRGkZt2bGiCb", - "symbol": "$BAGS", - "name": "BAGS", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/puresec-ng/gary/main/BAGS_coin.png" - }, - { - "chainId": 101, - "address": "GpVdc5pgP32JU2SNYWWpGerMGNVf7V5t5pgjdLgBQ7gd", - "symbol": "AUE", - "name": "Aue", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GpVdc5pgP32JU2SNYWWpGerMGNVf7V5t5pgjdLgBQ7gd/logo.png" - }, - { - "chainId": 101, - "address": "8CpBioM1rghHPU6ngsYM5qWNJ3WqZvE4puTC9jc6iWGN", - "symbol": "ITEM", - "name": "Item Banc Index", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8CpBioM1rghHPU6ngsYM5qWNJ3WqZvE4puTC9jc6iWGN/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://itembancindex.io/" - } - }, - { - "chainId": 101, - "address": "Bo1hj1f1ms62Cbps9yJxUwCYmsDjXQqjJBq4K9kRKG9w", - "symbol": "ETHN", - "name": "Eternel Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/8rch/criptologo/creator/logo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FxPQz8vFuCdKnU5CimjggFqSRa7gr3Bik43cYmQV1bTB", - "symbol": "GBG", - "name": "GBG WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mitchcrompton/goldbar/ba790237a4b45f407d05f1aeb6f87294798b8595/GBG-Logo2.png", - "tags": ["whitelist"] - }, - { - "chainId": 101, - "address": "Fi3cR6X8oAKcmYkQmDcfL6ZYT1EVRC8FEPEWvgLJLKPw", - "symbol": "VNAR", - "name": "Vnarchy Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/BigGucciSosa300/VnarchyToken/main/tokenValoche.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "55UkPdnVYh1EgE46eRaqFUqFxATzLDPhiT5GkSSRcwiN", - "symbol": "TAZR", - "name": "Taser", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/djfliq1/taser/main/Taser_logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AAKGBKbQVoraQFLTdu7Jc6yg5yzyAfaYFmiAaBxVj1Vd", - "symbol": "WTK", - "name": "WenToken", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/drunkEmu/Wen_Tech_Logo/main/WenToken.png", - "tags": ["burger-token"] - }, - { - "chainId": 101, - "address": "7J3vpKi1zePZu6JMYxWLNd1ueq4RmG5XNFQ4KW6NH5Pq", - "symbol": "CFC", - "name": "Chong Family Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/changkilin/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8SDZEuvdWyuKFmX72Hn1t6kFR9JfxiWzNCsyXnJnmAQH", - "symbol": "CW3T", - "name": "Communi3 Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/EDDARI/Communi3-Whitelist-Token/main/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "discord": "https://discord.gg/communi3", - "twitter": "https://twitter.com/communi3_io", - "website": "https://nft.communi3.io/" - } - }, - { - "chainId": 103, - "address": "J5MjLfQjnHSsWurBgaejgpsomZVRckUYCbiQjPMbYVBf", - "symbol": "$STKD", - "name": "Stacked", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/robo360/token-list/8f3ef4c943be3fa71b75ee0ae06e8a4cc6132f06/assets/mainnet/J5MjLfQjnHSsWurBgaejgpsomZVRckUYCbiQjPMbYVBf/Stacked-Verical-White.png", - "tags": ["Governance-token"] - }, - { - "chainId": 101, - "address": "PompZYYD9zSatYYncTzPQcTvnGUoaDFDptQPnDaRsu3", - "symbol": "Pompeizz", - "name": "Pompeizz OG Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/PompZYYD9zSatYYncTzPQcTvnGUoaDFDptQPnDaRsu3/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/Pompeizz" - } - }, - { - "chainId": 101, - "address": "EjaC7vKgimdVMyaF7SkNNaY2D8PDRVfAwThuAoeVvE7V", - "symbol": "BSAMO", - "name": "BabySamo", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GXzNKiMP9YWHMMvWnT2cag8UHx5fgMHRfqmVW22K2hm7/bsamo.png", - "tags": ["p2e"], - "extensions": { - "telegram": "https://t.me/babysamoyedin", - "twitter": "https://twitter.com/babysamoyedin", - "website": "https://babysamo.io" - } - }, - { - "chainId": 101, - "address": "4yoWgpCg5KciCPuA6LxDFpJHa53Jjj6XU9RLFJCgdakL", - "symbol": "$DRIVE", - "name": "DRIVE COIN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/puresec-ng/gary/main/DRIVE_coin.png" - }, - { - "chainId": 101, - "address": "Emberc567ToSP9FgAMuJWHXiQnEKVWrWC6gy64zbsK8u", - "symbol": "EMBER", - "name": "Meta Drago Ember", - "decimals": 9, - "logoURI": "https://metadrago.art/resources/images/EmberLogo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/metadrago", - "twitter": "https://twitter.com/MetaDragoNFT", - "website": "https://metadrago.art" - } - }, - { - "chainId": 101, - "address": "Comm3ZKs8EnEvxiNp3X9PhkjWDNc2VDozwYEKDcCzSti", - "symbol": "Communi", - "name": "Communi3 WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Comm3ZKs8EnEvxiNp3X9PhkjWDNc2VDozwYEKDcCzSti/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/communi3_io" - } - }, - { - "chainId": 101, - "address": "FyXLF1fFAnKjby8f2pYXeyBWgB5hmon2DmCjytZEfkcz", - "symbol": "$ELEVATE", - "name": "ELEVATE", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/puresec-ng/gary/main/ELEVATE_coin.png" - }, - { - "chainId": 101, - "address": "kronKPwYDbmtNgynPMGwyMyV6PrgJffNuvG3EvjTiVa", - "symbol": "$BUDZ", - "name": "Krypto Kronikz Budz", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Ashtar-Global-Solutions/spl-tokens/main/KryptoKronikz/budz-icon.png", - "tags": ["NFT"], - "extensions": { - "discord": "https://discord.com/invite/krypto-kronikz", - "instagram": "https://www.instagram.com/kryptokronikz", - "twitter": "https://twitter.com/KryptoKronikz", - "website": "https://www.kryptokronikz.co.uk/" - } - }, - { - "chainId": 101, - "address": "HPs8A1WiRypdPwFBG32KaA9qHLt4VDKJ7sWUF5HKoicP", - "symbol": "FSOSA", - "name": "FerSosa", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/neoxolotl/logo/master/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CxNiD5CKv3JMZc3LDUQjHJX17BFnpGDDU38PGPnnBRx7", - "symbol": "SMWL", - "name": "SolMonkeez WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CxNiD5CKv3JMZc3LDUQjHJX17BFnpGDDU38PGPnnBRx7/logo.png" - }, - { - "chainId": 101, - "address": "Aif78Nq87kjvRzk2TGn1Q6r2gECddPHCcxYsdxGpPpDM", - "symbol": "NS12", - "name": "Naxar s12", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Aif78Nq87kjvRzk2TGn1Q6r2gECddPHCcxYsdxGpPpDM/logo.png", - "tags": ["nft-token"], - "extensions": { - "description": "Naxar s12 is an NFTs card for mining tokens in the Boxch app. APY 12%", - "twitter": "https://twitter.com/_Naxar", - "website": "https://naxar.net/" - } - }, - { - "chainId": 101, - "address": "GzAr3oY2nZJnnbsvyRTYy7PW9Dp9hThGgiUpzs3HE8ns", - "symbol": "$TUITON", - "name": "TUITION", - "decimals": 2, - "logoURI": "https://i.ibb.co/W0Zp6RS/Tuiton-Coin.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.com/invite/8GZyJ3BnYw", - "twitter": "https://twitter.com/DropoutUniv", - "website": "https://www.dropoutuniversity.co/" - } - }, - { - "chainId": 101, - "address": "DroidnX5oC42WDw2yfcU1VziNs9CUcTV145p6cZRQiFq", - "symbol": "DRB", - "name": "DroidBits", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DroidnX5oC42WDw2yfcU1VziNs9CUcTV145p6cZRQiFq/logo.png", - "tags": ["NFT", "Metaverse", "community-token"], - "extensions": { - "twitter": "https://twitter.com/DroidBits" - } - }, - { - "chainId": 101, - "address": "ABFkiQcLuCjicoCddXHuiPN9S653StWuySCHvWYF5oEy", - "symbol": "SMWL", - "name": "SolMonkeez WLToken", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ABFkiQcLuCjicoCddXHuiPN9S653StWuySCHvWYF5oEy/logo.png", - "tags": ["NFT", "dao", "utility-token"], - "extensions": { - "twitter": "https://twitter.com/SolMonkeez" - } - }, - { - "chainId": 101, - "address": "FQde6nK4HKfhCNuxZ8FHAJ7EKi7qtxMZbBMSXWeAZX31", - "symbol": "MGL", - "name": "Audio Moguls", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/audiomoguls/crypto/main/Token.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4nNWPitwcYv4XMTqxPu8S5Eu1gGmMEwF76GMCGaQGzmp", - "symbol": "CARC", - "name": "Crypto Apples Rewards Coins", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/JADO-artist/Crypto/main/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "VisDZunhfXf29cxyZ2pGWvsrpye5FnCgScnRZ2d9WVG", - "symbol": "$VISN", - "name": "VISN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/VisDZunhfXf29cxyZ2pGWvsrpye5FnCgScnRZ2d9WVG/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "tDWgfue1v4JNMHmgxi7Qd2xzNpLhGFhaghcwAvnsYsv", - "symbol": "$t", - "name": "tDWOS", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/tDWgfue1v4JNMHmgxi7Qd2xzNpLhGFhaghcwAvnsYsv/logo.png", - "extensions": { - "discord": "https://discord.gg/gXpvbWftH7", - "twitter": "https://twitter.com/dwosol", - "website": "https://www.dwos.app/" - } - }, - { - "chainId": 101, - "address": "8BLweBxTVWKL1X5ghQF2eb67JReF56zesgTbN91C7nJb", - "symbol": "ASC", - "name": "Aliens Space Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/BobLiterman/PizzaPal/master/logo.png", - "extensions": { - "discord": "https://discord.gg/tUEwbEfZgE", - "twitter": "https://twitter.com/aliensspaceclub" - } - }, - { - "chainId": 101, - "address": "omnLJ3LyDz3kGYdDevm5guym7cU95kkz85FU9hvj5cZ", - "symbol": "OMNI", - "name": "Omniscient222", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/omnLJ3LyDz3kGYdDevm5guym7cU95kkz85FU9hvj5cZ/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/K7BpCPSUqv", - "twitter": "https://twitter.com/Omniscient222", - "website": "https://www.omniscient222.com" - } - }, - { - "chainId": 101, - "address": "68zeUZMhsYxVHrETjmVvz8ADZmWP8rvTiLpgq6SbyKdW", - "symbol": "ISIS", - "name": "Shariff", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/shariffi/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "C4xU8aLc1DDjYS2WqvJkqTbZHLMfQs42MkXmViqAhPHE", - "symbol": "$BST", - "name": "BatsToken", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/C4xU8aLc1DDjYS2WqvJkqTbZHLMfQs42MkXmViqAhPHE/logo.png" - }, - { - "chainId": 101, - "address": "3DyBTasPCdXPzohx8ri3KAiKXkeugqXt5sSqopNn4G7J", - "symbol": "TSST", - "name": "TSS Token", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3DyBTasPCdXPzohx8ri3KAiKXkeugqXt5sSqopNn4G7J/logo.png", - "tags": ["community-token", "Metaverse", "NFT"], - "extensions": { - "discord": "https://discord.gg/HnKkJa8P", - "twitter": "https://twitter.com/TSSCiberseg_ast", - "website": "https://tssciberseguridad.com" - } - }, - { - "chainId": 101, - "address": "3HDLkGsdEh9mRupFax1k2RnFJJRNKhqJaouWhVnrGEfK", - "symbol": "SLMN-WL-T", - "name": "Solmon WL Token Trainer", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jwurrow/solmon/main/solmon-token.png", - "tags": ["wl-token"], - "extensions": { - "website": "https://solmon.game/" - } - }, - { - "chainId": 101, - "address": "2YmFbkbfPMiUivS5TtSnzLGPM32iapkHBUvKB7XVYuoi", - "symbol": "$DABL", - "name": "DABL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/puresec-ng/gary/main/DABL_coin.png" - }, - { - "chainId": 101, - "address": "DmfyVkaHF3xcYoZZJNVQxz32dSfPwrk9fDe5APc8Qop1", - "symbol": "SLMN-WL", - "name": "Solmon WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jwurrow/solmon/main/solmon-token.png", - "tags": ["wl-token"], - "extensions": { - "website": "https://solmon.game/" - } - }, - { - "chainId": 101, - "address": "5mRj82qzktE2Ab7ZvoeWUYk6gnuRynTJaPs3YuFQW1gt", - "symbol": "$CYBER", - "name": "CYBER", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/puresec-ng/gary/main/CYBER_coin.png" - }, - { - "chainId": 101, - "address": "5ETtNMdco1tqLyJuLTFTxwy913ahA7CfAtp3PGuxhMkA", - "symbol": "P", - "name": "Pushin' P", - "decimals": 6, - "logoURI": "https://github.com/boosbasement/metaboss/blob/main/pushinp.png?raw=true" - }, - { - "chainId": 101, - "address": "64Hw4Hm4WLC1Ty6p8g5vLZNCS37msb9Qq8ZFJE6UConN", - "symbol": "sAPE", - "name": "APE (Synthetic)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/64Hw4Hm4WLC1Ty6p8g5vLZNCS37msb9Qq8ZFJE6UConN/logo.png", - "tags": ["meme-token", "wrapped", "synthetic"], - "extensions": { - "coingeckoId": "apecoin", - "coinmarketcap": "https://coinmarketcap.com/currencies/apecoin-ape/", - "description": "ApeCoin is a decentralized project inspired by Yuga Labs Bored Ape Yacht Club project. ApeCoin was founded to be used within the burgeoning APE Ecosystem, which is supported by the APE Foundation.", - "twitter": "https://twitter.com/apecoin", - "website": "https://apecoin.com/" - } - }, - { - "chainId": 101, - "address": "BF5JzxS9ZKnv9t84EFFvG5M8JgKJ5XRQvxPsuzHSKXDL", - "symbol": "AURA", - "name": "Aura Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BF5JzxS9ZKnv9t84EFFvG5M8JgKJ5XRQvxPsuzHSKXDL/aura.jpg", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/xmMwQJZDT4", - "twitter": "https://twitter.com/heyiloveyousol", - "website": "https://heyiloveu.com" - } - }, - { - "chainId": 101, - "address": "2R2KgDgAEKksVYbH7GRwuemvnQUg6h6Knhq9mVyNAnzF", - "symbol": "DYORNERDS", - "name": "NERDx", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2R2KgDgAEKksVYbH7GRwuemvnQUg6h6Knhq9mVyNAnzF/logo.png" - }, - { - "chainId": 101, - "address": "4ePVDsHuGLNhypuxLdUmyDonYEThfsKTA7Vd3fCxvm2m", - "symbol": "PRXMD", - "name": "mzX3z6Nc7a Project X", - "decimals": 0, - "logoURI": "https://i.ibb.co/RB5vhYz/1.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "omg6vAatLFChVhicZqFvBLd7vEqJqjp7KPR5CxKjMjR", - "symbol": "omgWL", - "name": "Oh My Girls - WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/omg6vAatLFChVhicZqFvBLd7vEqJqjp7KPR5CxKjMjR/logo.png", - "tags": ["wl-token"] - }, - { - "chainId": 101, - "address": "gciPtrB8rbCVSoJmyvZZZqzUSqSqAdxxEtHzcTo6gp5", - "symbol": "GC", - "name": "Galactic Credits", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/gciPtrB8rbCVSoJmyvZZZqzUSqSqAdxxEtHzcTo6gp5/logo.png" - }, - { - "chainId": 101, - "address": "63DpCYu4LPCqUzM9o7UMiGmsyJ5gVeFE9drzujGqqZHa", - "symbol": "SLIME", - "name": "Slime", - "decimals": 9, - "logoURI": "https://arweave.net/AJeUAHLNk2pv5P9CIURqu_u6dfSiE_bvVqFDriUzdQw", - "tags": ["social-token"], - "extensions": { - "discord": "https://discord.com/invite/2zvACqhDNz", - "twitter": "https://twitter.com/WeAreSlimes" - } - }, - { - "chainId": 101, - "address": "2U2Zbhn6ixvaus9c3SLJiF3XtmbtXwYBt36pSSscH9g2", - "symbol": "FNAC", - "name": "F NAc", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2U2Zbhn6ixvaus9c3SLJiF3XtmbtXwYBt36pSSscH9g2/logo.png" - }, - { - "chainId": 101, - "address": "5qf6ftkBT7vDZawJgCj3J4L8Xb25wTcgZftCc4vZTHSM", - "symbol": "WNAC", - "name": "W NAc", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5qf6ftkBT7vDZawJgCj3J4L8Xb25wTcgZftCc4vZTHSM/logo.png" - }, - { - "chainId": 101, - "address": "3uKPwVQ7cjnCJWgpFLRfMDkJzAEaV6o7uMJUyZErT6V4", - "symbol": "$MAES", - "name": "MAES", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/puresec-ng/gary/main/MAES_coin.png" - }, - { - "chainId": 101, - "address": "FgkPeKEDfb2mfbf3at8TVcZE8YdKxpdTTyqabqXqB33Y", - "symbol": "$ACCESS", - "name": "ACCESS", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/puresec-ng/gary/main/ACCESS_coin.png" - }, - { - "chainId": 103, - "address": "EJWynqh34YPswkdEwBAb76YPX18JdkG4BaXiwDBWg7Bq", - "symbol": "BIND", - "name": "Bind Com Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EJWynqh34YPswkdEwBAb76YPX18JdkG4BaXiwDBWg7Bq/BIND.png", - "extensions": { - "website": "https://bind.com/" - } - }, - { - "chainId": 101, - "address": "Ab7jUsWFTdVNmdCC3ZwjbNGnpt9E4qSh9oSZ6hYMBBaw", - "symbol": "$LEGEND", - "name": "LEGEND COIN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/puresec-ng/gary/main/LEGEND_coin.png" - }, - { - "chainId": 101, - "address": "C7nRGKutiD8YBVt1z7TxP5tTuoBac8dDgLoM47tmCjyk", - "symbol": "JTTE", - "name": "JOURNEY TO THE EAST", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/chinahustle/MonkeyKing/main/MKCOIN.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "trpnwGaAvyPXXsYUaN424XUDbnuyt2MKTUFmKHVUDwW", - "symbol": "TRPWL", - "name": "Trippin Ape Tribe WL Token", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/trpnwGaAvyPXXsYUaN424XUDbnuyt2MKTUFmKHVUDwW/logo.png", - "tags": ["wl-token"], - "extensions": { - "discord": "https://discord.gg/trippinapetribe", - "twitter": "https://twitter.com/TrippinApeNFT", - "website": "https://www.trippinapetribe.xyz/" - } - }, - { - "chainId": 101, - "address": "5EDqX91uTrXWaPXjrJ8wGF2bNDa7t8tYbtAJ4em2Puyu", - "symbol": "TAKU", - "name": "TAKUKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ChristosVoutselas/TAKUKoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DopeHrLeKKyMhVaQ1nFDUaiN2ZcoiUTteTJMmpq3vZzB", - "symbol": "DopeHeadz", - "name": "DopeHeadz WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DopeHrLeKKyMhVaQ1nFDUaiN2ZcoiUTteTJMmpq3vZzB/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/DopeHeadzNFT" - } - }, - { - "chainId": 101, - "address": "3XJzFnkisu24GkVLGB3ATjUjKV99vY4tQaiHXBuJXenE", - "symbol": "AJSP20k", - "name": "AJSP1 20k Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/AlainPainchaud/Crypto/main/TokenOfficiel2.png", - "tags": [ - "utility-token", - "community-token", - "business-token", - "financial-token", - "monetary-token", - "currency-token" - ] - }, - { - "chainId": 101, - "address": "DophZJDTFC3sYvu7KJC5cDJdDd4UEYne3GkHc3oKY2fh", - "symbol": "DOPHWLT", - "name": "DopeHeadz WL Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DophZJDTFC3sYvu7KJC5cDJdDd4UEYne3GkHc3oKY2fh/logo.png", - "extensions": { - "twitter": "https://twitter.com/dopeheadznft" - } - }, - { - "chainId": 101, - "address": "CkumP8q2xDLFYZ1HgvKPWPEwRdNxgpX1oEEaaGXR3txA", - "symbol": "ENMA", - "name": "ENMA Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/HATEM-CHAABINI/ENMA/main/ENMA.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "B71KR82Z2WpyRvz4siHCqVCQE52NuiRvYe1yMqZMcij", - "symbol": "LMN", - "name": "Lemon Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/joshtasman/cSolana/main/LMN_LOGO.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "51eur9dnZCchLatjGgz1DhQ82wL7GatirddMtqAaPJvk", - "symbol": "NHS", - "name": "SnowCoin Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/ZacharyLiebl/SnowCoinSymbol/main/SnowCoinSymbol.png", - "tags": ["nor-easters", "experiment"], - "extensions": { - "description": "For more info, contact nhscryptocurrency@gmail.com" - } - }, - { - "chainId": 101, - "address": "2zGGqkFLxHoCQ2F7cbmSvhrdUqvYKdW7nGqoGspAesQN", - "symbol": "HOMIES", - "name": "HOMIES", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/Homiezforlife/Homieslogo/main/mini.PNG", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FgvaSzNW852UGYA84ZkE1MHpUFihbw2xCzq4aqPNRJyq", - "symbol": "BULUK", - "name": "Buluk Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/JoshMusty/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "Fkh7FJ2F8ogN53GGtqtNMQ1jTwWbmTmCJ8oCGB7qD7oj", - "symbol": "J", - "name": "Jimbo Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Fkh7FJ2F8ogN53GGtqtNMQ1jTwWbmTmCJ8oCGB7qD7oj/logo.png", - "tags": ["jimbo-token"] - }, - { - "chainId": 103, - "address": "BTCGZYMqyfA8WBKNgwcpZn21ruNBvHvbfnrYNsd4xtTZ", - "symbol": "btc-g", - "name": "Green Bitcoin", - "decimals": 8, - "logoURI": "https://cdn.jsdelivr.net/gh/PurpleZone/NFTs@master/btcg/btc-g.svg", - "tags": [ - "green-coin", - "community-token", - "utility-token", - "colored-token" - ], - "extensions": { - "coingeckoId": "wrapped-bitcoin", - "description": "Greening cryptocurrencies one coin at a time", - "imageUrl": "https://bafybeiakx66r7u5u5sxi24b25k4y5qm6zhpyuetocphl7kfcs4yij6zjgy.ipfs.nftstorage.link/?ext=svg", - "telegram": "https://t.me/cryptolake2", - "website": "https://PurpleZone.github.io/NFTs/btcg/", - "whitepaper": "https://gateway.ipfs.io/ipns/QmUs6X2QHrPSAW9mZYtHGNCDjMDWTk7cg3EiEQ1Ao4PvL9/whitepaper.pdf" - } - }, - { - "chainId": 101, - "address": "DBEW3nPWQMWeSN7bav5RprJRyUopd4NGkhtVsEmoNA94", - "symbol": "SKIN", - "name": "SKIN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Robby3082/test-token/main/shark.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/shark_lounge", - "website": "https://www.sharklounge.io/" - } - }, - { - "chainId": 101, - "address": "Bq5wDcoXfAjZq7w4JhpcQ5AyG9ugo2xETdA7BefFNu1T", - "symbol": "LIRA", - "name": "Lira", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/zeinhd/Dota-coin/main/LOGO.PNG.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 103, - "address": "AFw8FY138GyFjM2KP254ZAbFdWrG9tyhLM8ct4jAsnT9", - "symbol": "META", - "name": "MetaSects", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/sxdhercules/meta/main/MetaSects-removebg-preview-removebg-preview.png", - "tags": ["community-token", "utility-token"], - "extensions": { - "description": "We're the #1 on Solana to build an NFT Marketplace for content creators, Stake to Earn $META. Join the Movement!", - "twitter": "https://twitter.com/metasectsnft", - "website": "https://www.metasects.com/" - } - }, - { - "chainId": 101, - "address": "AB9dE76Sf8c7mi8cxFC7e9n8xz7z4zNQQinEDpgmiHmA", - "symbol": "ABTWL", - "name": "Anonymous Beartoshi SRC Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AB9dE76Sf8c7mi8cxFC7e9n8xz7z4zNQQinEDpgmiHmA/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://anonbeartoshi.com/" - } - }, - { - "chainId": 101, - "address": "Hd4TfdGjSwtqSBntCCPtF3fKiMHMHUN3mbCmzP8i2asi", - "symbol": "EUR", - "name": "Blackrock", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/xBlackrock/EUR_Token/main/Logo.png", - "tags": ["financial-token"] - }, - { - "chainId": 103, - "address": "EGXPbqsSfSG5mRT88XMEYUm8Rf9ZDQAzb8yNJ8dRVyA5", - "symbol": "GT", - "name": "Green Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/wajahatrashid1/GreenTokenLogo/main/logo.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "Byn1P6nsVZnKWDLguHgw6aTJ8HDgcjUz5ArboK8irECP", - "symbol": "CRAB", - "name": "CryptoCrab", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jsmx125/CryptoCrab/main/CryptoCrab.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BPotsRFqBpxbaggDrgUBN96nAU7hTA7VtFruyidPodJN", - "symbol": "SONN", - "name": "SonniCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mammimaisteri/SonniCoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HnAq3F9ipwGXKBG3yfHyX8y19m9NiXSd1iphYDvrp1LS", - "symbol": "KWL", - "name": "Keikai WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HnAq3F9ipwGXKBG3yfHyX8y19m9NiXSd1iphYDvrp1LS/logo.png", - "extensions": { - "twitter": "https://twitter.com/mare_tsuki", - "website": "https://maretsuki.com" - } - }, - { - "chainId": 101, - "address": "5QrKoSKw2fYCW4FFHnLnRgTMjRtL6S3YLmEswJYP9B6t", - "symbol": "DOPE-WL", - "name": "DopeHeadz-WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5QrKoSKw2fYCW4FFHnLnRgTMjRtL6S3YLmEswJYP9B6t/Logo.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/DopeHeadzNFT" - } - }, - { - "chainId": 103, - "address": "orcarKHSqC5CDDsGbho8GKvwExejWHxTqGzXgcewB9L", - "symbol": "ORCA-DEV", - "name": "Orca Dev", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE/logo.png", - "extensions": { - "medium": "https://orca-so.medium.com", - "website": "https://orca.so" - } - }, - { - "chainId": 103, - "address": "Ff5JqsAYUD4vAfQUtfRprT4nXu9e28tTBZTDFMnJNdvd", - "symbol": "ETH-DEV", - "name": "Ethereum Dev", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2FPyTwcZLUg1MDrwsyoP4D6s1tM7hAkHYRjkNb5w6Pxk/logo.png" - }, - { - "chainId": 103, - "address": "EmXq3Ni9gfudTiyNKzzYvpnQqnJEMRw2ttnVXoJXjLo1", - "symbol": "USDC-DEV", - "name": "USDC Dev", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v/logo.png" - }, - { - "chainId": 101, - "address": "6ercxSiDn2KJ8KZxmCT4eheQqAWN3z17s8eLT3VECuda", - "symbol": "MOMO", - "name": "Momonga", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/wilsonv123/momonaga/main/thumbnail_logopng-02.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "AVUyMVECTgciKj8FLqzgkyHqngJkhMtXG6QAwQSsPEMb", - "symbol": "FAS", - "name": "Finance Aliens Society", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AVUyMVECTgciKj8FLqzgkyHqngJkhMtXG6QAwQSsPEMb/logo.png" - }, - { - "chainId": 101, - "address": "soLACdGKTr1PT75KTjj4RaUgA2sDBvCqAd8Zty2W1Yz", - "symbol": "SOLA", - "name": "Solaxy Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/soLACdGKTr1PT75KTjj4RaUgA2sDBvCqAd8Zty2W1Yz/logo.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "description": "$SOLA Tokenomics with a mission to reward NFT Holders via staking and cultivating a healthy Metaverse Ecosystem.", - "discord": "https://discord.gg/solaxymetaverse", - "website": "https://solaxymetaverse.com", - "whitepaper": "https://solaxymetaverse.com/assets/whitepaper.pdf" - } - }, - { - "chainId": 103, - "address": "DRyAdYvNHrf4M5yphJeXUCJu6TPiSDoEEtAwbPWMPhTt", - "symbol": "FAI", - "name": "Faicoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DRyAdYvNHrf4M5yphJeXUCJu6TPiSDoEEtAwbPWMPhTt/logo.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "CH4Z1fw39g2Y9d9f96qiSPUrqJ3CVjJfPWriMLMX1HKi", - "symbol": "$DEAF", - "name": "DEAF", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/puresec-ng/gary/main/DEAF_coin.png" - }, - { - "chainId": 101, - "address": "ApeWLUZp1WGZdYnFEVubpTEzaNg2cpw182DKitLsyuRd", - "symbol": "AOWS", - "name": "Apes of Wall Street Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ApeWLUZp1WGZdYnFEVubpTEzaNg2cpw182DKitLsyuRd/logo.png", - "tags": ["wl-token"], - "extensions": { - "twitter": "https://twitter.com/ApesOfWallStNFT", - "website": "https://www.apesofwallstreetnft.com/" - } - }, - { - "chainId": 101, - "address": "CHiKRBLyxcnP9uKCfg63hh2tJMPkwaBtM56uPfsVesqf", - "symbol": "JPST", - "name": "JP Free Sloths Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CHiKRBLyxcnP9uKCfg63hh2tJMPkwaBtM56uPfsVesqf/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "HjUMVG3yQK7uMTq1TerG6C8JzAjRvMdYCoX7ZUzKTgjH", - "symbol": "MERIT", - "name": "MERIT", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HjUMVG3yQK7uMTq1TerG6C8JzAjRvMdYCoX7ZUzKTgjH/logo.png", - "tags": ["nature"], - "extensions": { - "discord": "https://discord.gg/h5hYY4gKfS", - "facebook": "https://www.facebook.com/SingleEarth", - "instagram": "https://www.instagram.com/single_earth", - "twitter": "https://twitter.com/singleearth1", - "website": "https://single.earth/" - } - }, - { - "chainId": 101, - "address": "HWLvCf7dwed7WrfiAbesDfSbPZAhfbwwrALv21mZqG8Y", - "symbol": "HWL", - "name": "Horseys Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HWLvCf7dwed7WrfiAbesDfSbPZAhfbwwrALv21mZqG8Y/logo.png" - }, - { - "chainId": 101, - "address": "6rTMtgErEBbJo4zsHHhK7B2Y1z6JhUMv9MpyX1yTSPTo", - "symbol": "ASTRTEST", - "name": "ASTROREAPERZ TEST", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6rTMtgErEBbJo4zsHHhK7B2Y1z6JhUMv9MpyX1yTSPTo/logo.png", - "tags": ["nft"], - "extensions": { - "twitter": "https://twitter.com/astroreaperz" - } - }, - { - "chainId": 101, - "address": "UoS2FWy8LyEXrvmCFfsLkQtHs47aQ335wKARHBxSMbg", - "symbol": "CRYO", - "name": "CRYO", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ShahrdadBlockchain/CRYO/main/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "GaZUVNuZkZXjxHQniy6bSNkr7iSAv4iUxrfBj6EXrcXj", - "symbol": "OMM", - "name": "ONEUM Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GaZUVNuZkZXjxHQniy6bSNkr7iSAv4iUxrfBj6EXrcXj/logo.png", - "tags": ["wl-token"], - "extensions": { - "discord": "https://discord.gg/FSQqhnvZxj", - "medium": "https://medium.com/@3PMmusicNFT", - "website": "https://oneum.3pm.earth/" - } - }, - { - "chainId": 101, - "address": "JACakxoVpG4y2XSfnfCwrDmrKmaXhXzBtuUiPVS2kH4K", - "symbol": "MSB", - "name": "Mini Soccer Boys VIP", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/JACakxoVpG4y2XSfnfCwrDmrKmaXhXzBtuUiPVS2kH4K/logo.png" - }, - { - "chainId": 101, - "address": "BhxkMZCx6nMhiSC53Cbb9rbro3SBwDoopzdCquqJeHpJ", - "symbol": "ggSOL", - "name": "ggSOL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BhxkMZCx6nMhiSC53Cbb9rbro3SBwDoopzdCquqJeHpJ/logo.png", - "tags": ["lp-token"], - "extensions": { - "discord": "https://discord.gg/SgKffK9X76", - "twitter": "https://twitter.com/goblingold_fi", - "website": "https://goblin.gold" - } - }, - { - "chainId": 101, - "address": "6JC9vFueQuj45N2eusmL6cxKT6wyY2rymBkcKWtowEAo", - "symbol": "ggUSDC", - "name": "ggUSDC", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6JC9vFueQuj45N2eusmL6cxKT6wyY2rymBkcKWtowEAo/logo.png", - "tags": ["lp-token"], - "extensions": { - "discord": "https://discord.gg/SgKffK9X76", - "twitter": "https://twitter.com/goblingold_fi", - "website": "https://goblin.gold" - } - }, - { - "chainId": 101, - "address": "Eaz9Q3jBv3fR3Mq2DsJWQ4TqDaGhsBcq3XoQWahnEwFd", - "symbol": "ggmSOL", - "name": "ggmSOL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Eaz9Q3jBv3fR3Mq2DsJWQ4TqDaGhsBcq3XoQWahnEwFd/logo.png", - "tags": ["lp-token"], - "extensions": { - "discord": "https://discord.gg/SgKffK9X76", - "twitter": "https://twitter.com/goblingold_fi", - "website": "https://goblin.gold" - } - }, - { - "chainId": 101, - "address": "G5heESJwK9zTa811CkyFhGL37Nkh4ecYYNWk3XY14gPe", - "symbol": "EUR", - "name": "Blackrock Finance", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/xBlackrock/EUR_Token/main/Logo.png", - "tags": ["finance-token"] - }, - { - "chainId": 101, - "address": "qjbfiJcUWf9CXP4LgRapkXmVUeGq1BfrcJLkZeXxQgZ", - "symbol": "IOS", - "name": "Iarlaith Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/iarlaithos/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9DfciZat8W6fDcwFSFNmf9SN2qdFjVjVYP2sTkJNpwUo", - "symbol": "Lux", - "name": "Luchsinger's Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Spencer12219/Crypto/main/logo.png", - "tags": ["Social-Token"] - }, - { - "chainId": 101, - "address": "8cueAYPFnEQPR37ycBeKdMYARwAAYnvEfVH8MwWY1Xmo", - "symbol": "FLWZ", - "name": "Flowz Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/Ayoalapafuja/Flowz-Coin.png/main/logo.png", - "tags": ["community-token", "NFT"], - "extensions": { - "discord": "https://discord.gg/KhBAHKsF2v", - "twitter": "https://twitter.com/flowzcoin1", - "website": "http://flowzcoin.com.ng/" - } - }, - { - "chainId": 101, - "address": "HVEHJZHzN8Kz9a59Cwv83r4jAHYax5LJFzop99TdiZJn", - "symbol": "FFn", - "name": "Pre-Whitelist access Fluffy frens (FFn)", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HVEHJZHzN8Kz9a59Cwv83r4jAHYax5LJFzop99TdiZJn/logo.png", - "extensions": { - "discord": "https://discord.gg/gmRrSguQKX", - "twitter": "https://twitter.com/nftfluffyfrens" - } - }, - { - "chainId": 103, - "address": "EU24g7LE28g6KDEsTFupKgBxzbpMpx3SqgjJ36BmzWmc", - "symbol": "NTK", - "name": "NiceToken", - "decimals": 9, - "logoURI": "https://github.com/Maverick9081/solana/blob/main/nice.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7t9foh4g1kMucERVbyzwrxhNpnhp4tigwNxJfvC2M2X6", - "symbol": "SLCF", - "name": "Solaunchief", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7t9foh4g1kMucERVbyzwrxhNpnhp4tigwNxJfvC2M2X6/logo.png", - "tags": ["social-token", "finance-token", "utility-token"], - "extensions": { - "website": "https://www.solaunchief.com/" - } - }, - { - "chainId": 101, - "address": "METAXHCNzmSUohBxVAtiKkAJ7W7JK7uUqWGNcepdKxM", - "symbol": "MCT", - "name": "Metascape City Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/METAXHCNzmSUohBxVAtiKkAJ7W7JK7uUqWGNcepdKxM/logo.png", - "tags": ["game-token", "NFT", "Singapore", "Game", "Metaverse"], - "extensions": { - "description": "Metascape City is the next-gen metaverse empowering players to create, play, compete, and earn.", - "discord": "https://discord.gg/QT7QEV4s", - "facebook": "https://www.facebook.com/metascapecity", - "instagram": "https://www.instagram.com/metascapecity", - "tiktok": "https://www.tiktok.com/@metascapecity", - "twitter": "https://twitter.com/MetascapeCity", - "website": "https://www.metascape.city", - "youtube": "https://www.youtube.com/channel/UCFdI57Yel-n__BZcnmWj8xw" - } - }, - { - "chainId": 101, - "address": "FLNiUQLcyuscftADTriTGsQzJJWUbDBvvNTohBEWNYUE", - "symbol": "HMB", - "name": "Heavy Metal Bucks", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FLNiUQLcyuscftADTriTGsQzJJWUbDBvvNTohBEWNYUE/logo.png", - "tags": ["community-token", "NFT"], - "extensions": { - "discord": "https://discord.gg/vrVMqD6WyJ", - "twitter": "https://twitter.com/MedievalCatsNFT", - "website": "https://metarobots.netlify.app/" - } - }, - { - "chainId": 101, - "address": "5HbkoVbaMnJYEuiTqeC7cBMSK2zG2MFfoxc9e6VkWPQS", - "symbol": "SCP", - "name": "SCOPE", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/drsaint1/drsaint/29c9fd1942416e3467755ba7fbdaec076c3105cd/scope.jpg", - "tags": ["Gamefi", "NFT", "Defi"], - "extensions": { - "discord": "https://discord.com/invite/UJppkPcqwT", - "twitter": "https://twitter.com/scope_io", - "website": "http://scopeportals.io" - } - }, - { - "chainId": 101, - "address": "EJsBf7Z5UBURSyoTahZuaeHCZnvujV1g8m5cH9KLY6AX", - "symbol": "BRNI", - "name": "Berni Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/BRNICOIN/brni/main/BERNI2.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GQAAhv4TfgcyskQdmHznjhS3WqwC49o8aHyx6YtModvZ", - "symbol": "IVRY", - "name": "IVRY TOKEN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GQAAhv4TfgcyskQdmHznjhS3WqwC49o8aHyx6YtModvZ/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "ChywntqwNRzaoWYUcDQ3iALqcwSAVtjM2dPshz5AETMm", - "symbol": "KTRC", - "name": "Kotaro Chips", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ChywntqwNRzaoWYUcDQ3iALqcwSAVtjM2dPshz5AETMm/logo.png", - "tags": ["NFT", "GAMEFI", "Staking"], - "extensions": { - "description": "Kotaro Chips is an SPL token of Kotaro Sharks, an NFT collection of sharks living on the Solana blockchain that love to play poker and vibe with friends.", - "discord": "http://discord.gg/kotarosharks", - "twitter": "https://twitter.com/KotaroSharks" - } - }, - { - "chainId": 101, - "address": "2qB8M2qCwZUDVsyf1hMFBL41kn3Es1ZA7aEaKP2gWjop", - "symbol": "PPWL", - "name": "PixelPilotz WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2qB8M2qCwZUDVsyf1hMFBL41kn3Es1ZA7aEaKP2gWjop/logo.png", - "tags": ["wl-token"], - "extensions": { - "discord": "https://discord.gg/pixelpilotz", - "twitter": "https://twitter.com/PixelPilotzNFT", - "website": "https://pixelpilotz.com" - } - }, - { - "chainId": 101, - "address": "3PLCY6jcJSVg735CMBfA7jYDACJKfPgh7NJTKMh6TttN", - "symbol": "Trdz", - "name": "Tradanza's Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/tradanza/cryptologo/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Drw2du41PCr9S6VhRqHmujAjdCKwh1JRKZzgtq5n9PpW", - "symbol": "FBANX", - "name": "FBANX", - "decimals": 2, - "logoURI": "https://solaboy.github.io/images/fbanxlogo.png", - "tags": ["governance-token", "exchange"], - "extensions": { - "description": "governance token", - "website": "https://fbanx.org" - } - }, - { - "chainId": 101, - "address": "FELb3heNi4XA2kM4xTPWprdKaGeAPPK8bNM54CBwwtPG", - "symbol": "PRCN", - "name": "ProCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/aaravg772/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HR9HW2fygS4RWgn1i3AzxQVayb3ReKpqKKA3TZfWwzHN", - "symbol": "LTTCE", - "name": "Lettuce Token", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/boblettucetv/Lettuce-Token/Crypto/logo.png" - }, - { - "chainId": 101, - "address": "6SURQPXgbgDfeDi7Su2TQvZHTwQJ6fsZrAZAM6yxwnej", - "symbol": "CP3D", - "name": "CryptoPicks", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/LegendaryCryptoPick/assets/main/CryptoPicks%201st%20Gen%20Custom%20Print.png", - "tags": ["social-token", "music-token", "NFT", "NFT-token"] - }, - { - "chainId": 101, - "address": "Cs2R3beyPt4NGg1ARgk3uP6U3DA8Hpi8SW613WGoRVzC", - "symbol": "AMOG", - "name": "ArtMonkees OG", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Cs2R3beyPt4NGg1ARgk3uP6U3DA8Hpi8SW613WGoRVzC/logo.png", - "tags": ["social-token"], - "extensions": { - "twitter": "https://twitter.com/artmonkees", - "website": "https://artmonkees.io/" - } - }, - { - "chainId": 101, - "address": "FD12nu5TQDTXTpQkTcThpV5EFCB6Df27CBfPUawizcB2", - "symbol": "GCOIN", - "name": "GatorCoin OG", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/connellyw/Crypto/main/Gcoin.png", - "tags": ["social-token"], - "extensions": { - "website": "https://williamconnelly.netlify.app/" - } - }, - { - "chainId": 101, - "address": "frogmSnr9knrc6CcVMtGrh3KvixZRc67LQYSqoE3ozZ", - "symbol": "$RIBBIT", - "name": "Frog Club Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/frogmSnr9knrc6CcVMtGrh3KvixZRc67LQYSqoE3ozZ/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "EyMzhwdjAMLKsKR1domLdAmTWfc4PWPBPZRuzouvCWiQ", - "symbol": "WADAL", - "name": "Adalend", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EyMzhwdjAMLKsKR1domLdAmTWfc4PWPBPZRuzouvCWiQ/logo.png", - "tags": ["utility-token"], - "extensions": { - "telegram": "https://t.me/ADALend", - "twitter": "https://twitter.com/ADAlend_finance", - "website": "https://adalend.finance/" - } - }, - { - "chainId": 101, - "address": "6PkHPXrfdszddND1Bz6jHaekBTyZr1BAqxNWQT9gCcUv", - "symbol": "SLMN-WL-TS", - "name": "Solmon WL Token Trainers", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jwurrow/solmon/main/solmon-token.png", - "tags": ["wl-token"], - "extensions": { - "website": "https://solmon.game/" - } - }, - { - "chainId": 101, - "address": "CrKj3wahgHc76yUE5gL3WLbRW5g5rK88vAtUqRcsSCnX", - "symbol": "TNC", - "name": "Tonic", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CrKj3wahgHc76yUE5gL3WLbRW5g5rK88vAtUqRcsSCnX/logo.png", - "extensions": { - "discord": "https://discord.com/invite/cyberpharmacy", - "twitter": "https://twitter.com/cyber_pharmacy", - "website": "https://cyberpharmacy.io" - } - }, - { - "chainId": 101, - "address": "7TSMDTH15FddZfZHX1pPuDynM3N62BCHbHtLvRNvmSmL", - "symbol": "ANGEL", - "name": "Fallen Angel", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7TSMDTH15FddZfZHX1pPuDynM3N62BCHbHtLvRNvmSmL/logo.png", - "tags": ["nft-marketplace"], - "extensions": { - "twitter": "https://twitter.com/fallenangelsxyz", - "website": "http://fallenangels.com/" - } - }, - { - "chainId": 101, - "address": "39wLCg3JHBC52Q44Gd1SkZc5wtm7cWf6MCLhJPcH9rLH", - "symbol": "OACZ", - "name": "Oasis Civilization Whitelist Token", - "decimals": 0, - "logoURI": "https://media.discordapp.net/attachments/926535226820276264/970657108481687562/unknown.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "TATBsxWJsKQ92VZuufKcibXuZp6npDdUQeZxPQy9Mug", - "symbol": "TAT", - "name": "Trippin Ape Tribe", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Bitcoinblack482/logo/main/tat.png", - "tags": ["whitelist-token"], - "extensions": { - "discord": "https://discord.gg/trippinapetribe", - "twitter": "https://twitter.com/TrippinApeNFT", - "website": "https://www.trippinapetribe.xyz" - } - }, - { - "chainId": 101, - "address": "3nG1CTgfiCBMCwzhEwtfYaXGECXWGbc5pm2kdn5xAsGS", - "symbol": "PBTKN", - "name": "Peanut Bean", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/qwdavis/crypto2/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4CqGRYLzvj3ibufGJdLmdK2CzvDA5k82NVav4a5EKCBG", - "symbol": "COCU", - "name": "Cocucoin", - "decimals": 9, - "logoURI": "https://cocucoin.com/logo.png", - "tags": ["social-token", "nft", "swap", "trade", "finance"], - "extensions": { - "website": "https://cocucoin.com/" - } - }, - { - "chainId": 101, - "address": "WLwanMkvjXzJCogizrQgZc8MuZ4aSXsZ2KXm8aaZ6FY", - "symbol": "MIDHWL", - "name": "MOUSE IN DA HOUSE WL TOKEN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WLwanMkvjXzJCogizrQgZc8MuZ4aSXsZ2KXm8aaZ6FY/logo.png", - "tags": ["whitelist-token", "nfts"] - }, - { - "chainId": 101, - "address": "ogRmfJLMDyS1nLgCmQYNKJJVa7NgfgUR87yuTbUeCUz", - "symbol": "MIDHOG", - "name": "MOUSE IN DA HOUSE OG TOKEN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WLwanMkvjXzJCogizrQgZc8MuZ4aSXsZ2KXm8aaZ6FY/logo.png", - "tags": ["whitelist-token", "nfts"] - }, - { - "chainId": 101, - "address": "3hCHhVwAR6ySDCyHPjy6iuny6Actvhz5ZX4WQUq2p9G4", - "symbol": "ART", - "name": "AUREUS Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3hCHhVwAR6ySDCyHPjy6iuny6Actvhz5ZX4WQUq2p9G4/logo.png", - "tags": ["social-token", "ART"] - }, - { - "chainId": 101, - "address": "4DDaY3VGL1URApnehqbRtseHBCSWnC1kMmbbFyvWxheQ", - "symbol": "WKT", - "name": "Walker Token", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4DDaY3VGL1URApnehqbRtseHBCSWnC1kMmbbFyvWxheQ/logo.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "GHmAAkHZxGvGno3jRehkC4CjGJh5qgxLKHF5tPqQLPg1", - "symbol": "USDr", - "name": "Ratio Finance USD", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GHmAAkHZxGvGno3jRehkC4CjGJh5qgxLKHF5tPqQLPg1/logo.png", - "extensions": { - "telegram": "https://t.me/ratiofinance", - "twitter": "https://twitter.com/RatioFinance", - "website": "https://ratio.finance/" - } - }, - { - "chainId": 101, - "address": "6aFtCUxRMekeFphwM9xJ526UohPJbYU6zVxXWm1X81WD", - "symbol": "SWLT", - "name": "Sloth WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6aFtCUxRMekeFphwM9xJ526UohPJbYU6zVxXWm1X81WD/logo.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "TKDrcm3n4mfXFfPKZoLp5soRSdFQSmyWLdomdKL3ktU", - "symbol": "TENKAI", - "name": "Tenkai Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/TKDrcm3n4mfXFfPKZoLp5soRSdFQSmyWLdomdKL3ktU/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/PfrZe9hPcP", - "serumV3Usdc": "DnBj2xqxwjDYCNnegpFuaFqiYktvZpz9a7gvdbodjTU", - "twitter": "https://twitter.com/TenkaiApes", - "website": "https://tenkaiapes.com/" - } - }, - { - "chainId": 101, - "address": "8UVGdzdXc76z8zoH3Fd4KupEVFCSWDGiStRYbLbopQhe", - "symbol": "QNUR", - "name": "Qnur Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Kai-ckul/qnur/main/qnur.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EdUE6yWLV4tnTZvBKasHAsmbTh8Ed5vWkY4WXQbux8yk", - "symbol": "BLD", - "name": "DB Blood", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EdUE6yWLV4tnTZvBKasHAsmbTh8Ed5vWkY4WXQbux8yk/logo.png", - "tags": ["social-token"], - "extensions": { - "twitter": "https://twitter.com/EhecatlUniverse" - } - }, - { - "chainId": 101, - "address": "hcxCW1FXVyXbDC1B8Gtv4PvrxP3ANYtBAXJtRzYow6M", - "symbol": "MILK", - "name": "SolanaBossBabies Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/husky-696/Public-images/758a44b7ec793855303aef7d945dcd33ad5dd6c5/logo.png.png?token=AYKN4WAHS4SGW6KWG35KAF3COGA72", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "WL3JbsR9VGjFP7maGkAC6LfS9s3JFuCWeU5JAB9Gi4G", - "symbol": "MIDHWLT", - "name": "MOUS IN DA HOUS WL TOKEN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WLwanMkvjXzJCogizrQgZc8MuZ4aSXsZ2KXm8aaZ6FY/logo.png", - "tags": ["whitelist-token", "nfts"] - }, - { - "chainId": 101, - "address": "ogtWYbiHXF32wdTvhKv8CfHn3FThf2MfhCPi6Y3Fc1G", - "symbol": "MIDHOGT", - "name": "MOUS IN DA HOUS OG TOKEN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WLwanMkvjXzJCogizrQgZc8MuZ4aSXsZ2KXm8aaZ6FY/logo.png", - "tags": ["whitelist-token", "nfts"] - }, - { - "chainId": 101, - "address": "avsfwCwXjMreP2eg5z5cJBxL5bdULJoU8fb9ZGYGzXM", - "symbol": "AVTR", - "name": "Solavatar Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/avsfwCwXjMreP2eg5z5cJBxL5bdULJoU8fb9ZGYGzXM/logo.png", - "tags": ["community-token", "utility-token", "social-token"], - "extensions": { - "twitter": "https://twitter.com/solavatar3" - } - }, - { - "chainId": 101, - "address": "JCexpmKnwUQXNPr1Z32UgxhUBzeyCxqBEGDMALqBNs32", - "symbol": "1337", - "name": "1337", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/1337Crypto/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7U3HPA9rYUQmfF52oFE3F4h7r3S8VVM28BUK9UzYe1PN", - "symbol": "OUD", - "name": "OUD", - "decimals": 9, - "logoURI": "https://imgur.com/YqxwgC4.png" - }, - { - "chainId": 101, - "address": "kiNG3f22n1i4pbXrxJz1Zviwe3FNrpS5ZqwfYTf2N33", - "symbol": "KoDS", - "name": "kings of da Street WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/kiNG3f22n1i4pbXrxJz1Zviwe3FNrpS5ZqwfYTf2N33/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/kingsofdastreet" - } - }, - { - "chainId": 101, - "address": "58xx9DVzXCic3GhKwBWW5mpBg7ABkjVFpLpqU2DgfrjU", - "symbol": "MRBOT", - "name": "Mrbot Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/58xx9DVzXCic3GhKwBWW5mpBg7ABkjVFpLpqU2DgfrjU/logo.jpg", - "tags": ["utility-token"], - "extensions": { - "discord": "http://discord.gg/zZttYaVEQ9", - "twitter": "https://twitter.com/mrbotnft", - "website": "https://mrbot.tech/" - } - }, - { - "chainId": 101, - "address": "5nmzJr8bu1Ahgc5nX46ku4Z3dJqdmh68DG1jLmwBHHsh", - "symbol": "BONF", - "name": "Bonfire Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/bonfiretkn/crypto/main/bonfire-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6PMHW4wgQhmnefMpkJSxJ3UAY752zeDyHy18oZh23iyU", - "symbol": "GRC", - "name": "GRCoin", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6PMHW4wgQhmnefMpkJSxJ3UAY752zeDyHy18oZh23iyU/GRCoin.png", - "tags": ["IP-currency"] - }, - { - "chainId": 101, - "address": "4pLbiXeTym6XNkPWUw88V5JKYFErJa9bX9tV9hdHtdtN", - "symbol": "SBWL", - "name": "Solana Brains Whitelist Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4pLbiXeTym6XNkPWUw88V5JKYFErJa9bX9tV9hdHtdtN/logo.png", - "tags": ["whitelist-token", "nfts"], - "extensions": { - "website": "https://solbrains.com" - } - }, - { - "chainId": 101, - "address": "Hb7XvrJS7G4CrauV7w1N8hkVSECHNNjwXYvXgVHsAFUJ", - "symbol": "READ", - "name": "ReadON Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EEGG1MLcWwBQVNwmhoNxMdTjVuuRX24o7Gym2MzQmRST/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "http://readon.me" - } - }, - { - "chainId": 101, - "address": "9DpmWKvVZCYAWBknkLYhKYQGeB9GoEeoXoZvLkw57xzX", - "symbol": "WCFC", - "name": "world cup fans coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9DpmWKvVZCYAWBknkLYhKYQGeB9GoEeoXoZvLkw57xzX/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HuNcdrQ47VnUWLcujhhKwXaQQTYTBSsSguQNQgUexWL8", - "symbol": "YUNG", - "name": "Yung Token", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/h3ll0x/yungtokenlogo/main/yungimg.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://yungmoney.io/" - } - }, - { - "chainId": 101, - "address": "5osL1DnezspfmAd2Qn1PXsQniZGrzRXrxUNCPXbbrr78", - "symbol": "DON", - "name": "Dongri Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5osL1DnezspfmAd2Qn1PXsQniZGrzRXrxUNCPXbbrr78/logo.png", - "extensions": { - "website": "https://dongri.eth.limo" - } - }, - { - "chainId": 103, - "address": "BtX7BuKkNKPMWH7QGyvNMQS7VsQBABEL69P6CMMjQzTu", - "symbol": "KGNFT", - "name": "KGNFToken", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BtX7BuKkNKPMWH7QGyvNMQS7VsQBABEL69P6CMMjQzTu/logo.png", - "tags": ["whitelist-token", "nfts"] - }, - { - "chainId": 102, - "address": "9jtWhaRL9wysgWjXPTBBzyPa7CNP9zMMiDZR87tgVNDR", - "symbol": "USDT", - "name": "xldUSDT", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB/logo.svg", - "tags": ["stablecoin"], - "extensions": { - "coingeckoId": "tether" - } - }, - { - "chainId": 102, - "address": "Er2hR74LfFa7NJiVUnSfUg2sgu45Bq1pzZyHzPLXG1AT", - "symbol": "SLP", - "name": "xldSLP", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4hpngEp1v3CXpeKB81Gw4sv7YvwUVRKvY3SGag9ND8Q4/logo.png", - "tags": ["wrapped"], - "extensions": { - "coingeckoId": "smooth-love-potion" - } - }, - { - "chainId": 102, - "address": "8LyHLBW4VXDziGRmsH9694TRYsf66BH4HemnnrN29tyZ", - "symbol": "DAI", - "name": "xldDai", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EjmyN6qEC1Tf1JxiG1ae7UTJhUxSwk1TCWNWqxWV4J6o/logo.png", - "tags": ["wrapped"], - "extensions": { - "coingeckoId": "dai" - } - }, - { - "chainId": 103, - "address": "HMnX3nmicC3Te2xChzKS1rwwfBqL9TVjNRwzLCvd344C", - "symbol": "humanx", - "name": "HumanX Token", - "decimals": 8, - "logoURI": "https://cdn.jsdelivr.net/gh/PurpleZone/NFTs@latest/humanX/humanx.svg", - "tags": [ - "green-coin", - "community-token", - "utility-token", - "colored-token" - ], - "extensions": { - "coingeckoId": "wrapped-bitcoin", - "description": "This token is used to exchange message with any wallet addresse", - "imageUrl": "https://bafybeicghunoek4cafdi7snklb2dilxxkgh3olbmd4eazmlpsjzcjbg5te.ipfs.nftstorage.link/?ext=svg", - "telegram": "https://t.me/cryptolake2", - "website": "https://PurpleZone.github.io/NFTs/humanX/#humanx", - "whitepaper": "https://gateway.ipfs.io/ipns/Qmad1CJThM8zYym23da8s89MFw8dcuSdRmhyySTgtNVbPu/whitepaper.pdf" - } - }, - { - "chainId": 101, - "address": "7xyUV7Hev7W6m21DWcjBE8ArZEfPtyFqztcKbTHkQC59", - "symbol": "DRA", - "name": "Dragnarok", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/justclumsyguy/dragnaroklogo/main/logo.png", - "tags": ["social-token"], - "extensions": { - "twitter": "https://twitter.com/metadragnarok", - "website": "https://metadragnarok.com" - } - }, - { - "chainId": 101, - "address": "FfLSQYsLDrDj7viJxb8hFLyVbPEjd1pxctrdZj34WYwQ", - "symbol": "MSFRG", - "name": "Mistery Frog token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FfLSQYsLDrDj7viJxb8hFLyVbPEjd1pxctrdZj34WYwQ/logo.png" - }, - { - "chainId": 101, - "address": "CQz5Nauawfq5fRBu37k8h6e4TteAFj1LwXoq8UuHoQfq", - "symbol": "CFWL", - "name": "Crypto Frogz WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CQz5Nauawfq5fRBu37k8h6e4TteAFj1LwXoq8UuHoQfq/logo.png", - "tags": ["community-token", "whitelist-token"] - }, - { - "chainId": 101, - "address": "GzHyjtEn2iZ8aQdRUGS54U3TXAQNP2egcKrAxwEcVhPT", - "symbol": "S0L", - "name": "S0lana", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/peawis/success/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6Jme67iCWHqMKifUkiXvvC862Ek7TFTPWshpgnV52saP", - "symbol": "HNDT", - "name": "HAND (Devnet)", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6Jme67iCWHqMKifUkiXvvC862Ek7TFTPWshpgnV52saP/HandTLog.png", - "tags": ["devnet"] - }, - { - "chainId": 101, - "address": "22KASgAQksz3TFvHzFy93aQvh6MWAj9UsUrnzsbfG5wh", - "symbol": "TWL", - "name": "Track WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/22KASgAQksz3TFvHzFy93aQvh6MWAj9UsUrnzsbfG5wh/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/dogetrack", - "twitter": "https://twitter.com/theDogeTrack", - "website": "https://dogetrack.io/" - } - }, - { - "chainId": 101, - "address": "BooSt1WnnkqvGePCsQjiS7yF8XEznxkwDPCxupvpUMVC", - "symbol": "BOOST", - "name": "Boost", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BooSt1WnnkqvGePCsQjiS7yF8XEznxkwDPCxupvpUMVC/logo.png" - }, - { - "chainId": 101, - "address": "7dCG3R5sCLnEySHkkSJxHK3MfEKEbeKxgcuqRnkmTysU", - "symbol": "SOUL", - "name": "Dead Souls - SOUL Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/LinYu1992/dead_souls_token/main/Coin.png", - "tags": ["utility-token", "social-token"], - "extensions": { - "twitter": "https://twitter.com/DeadSoulsDAO" - } - }, - { - "chainId": 101, - "address": "2znADNrRYvai8gfej1mcV2YbNvehY6cBSALvuWnuvNPN", - "symbol": "SIN", - "name": "S7N Coin", - "decimals": 4, - "logoURI": "https://bafybeib2znxf6whdtq354t6jsyejs7nlnevqd2pjxatr5ft2tgsgyrazb4.ipfs.nftstorage.link", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/SevenDeadly5ins", - "website": "https://www.sevendeadlysins.io/" - } - }, - { - "chainId": 101, - "address": "8cwkCtsAa51fdDxknVaAnFqBAsA6975DmCggf2LnThi6", - "symbol": "RAT", - "name": "Ratio", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/TATOWASTAKEN/crypto/main/crypto%20logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Hj9V5W4R9BxKUJYC36X5Biayv6FwZz5mmfV3JY4LxF8z", - "symbol": "MELLOWWL", - "name": "Mellowmen WL Token", - "decimals": 0, - "logoURI": "https://i.imgur.com/38QD4yg.png" - }, - { - "chainId": 101, - "address": "FvmtrsisrSCMnWHjrTeBFfMrWLXpfYfsZqF8RXcPffiS", - "symbol": "SHNL", - "name": "Shannel Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Thesisshahrdad/Shannel-Token/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "aYZPYgohjK6LYM8o1v6pnr3ZinhuRzSHd6TRDVDUBkK", - "symbol": "BTL", - "name": "BitLegacy Token", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/aYZPYgohjK6LYM8o1v6pnr3ZinhuRzSHd6TRDVDUBkK/logo.png", - "extensions": { - "twitter": "https://twitter.com/bitlegacytoken", - "website": "https://bitlegacytoken.com" - } - }, - { - "chainId": 101, - "address": "7seYZoh8kAG7akPrVAB6yQj9A9AvXXaL75r1boiQYWo2", - "symbol": "MTCA", - "name": "MITICA", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/pizzamitica/mitica/main/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://www.pizza-mitica.com/" - } - }, - { - "chainId": 101, - "address": "6EKUZutUq3ACUMpqmWVbzaNwyQmofZ3N3J8euy6NoFka", - "symbol": "DENJI", - "name": "Denji Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6EKUZutUq3ACUMpqmWVbzaNwyQmofZ3N3J8euy6NoFka/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/MakimaNFT" - } - }, - { - "chainId": 101, - "address": "3hEN3maDrmuoj89EDV452RRoRqDfZeeR4auoRs5mXF9u", - "symbol": "FLAME", - "name": "FLAME", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3hEN3maDrmuoj89EDV452RRoRqDfZeeR4auoRs5mXF9u/logo.png", - "tags": ["community-token", "social-token", "utility-token"], - "extensions": { - "description": "Offical Daring Dragons Phoenix Token, powering the DDP universe", - "twitter": "https://twitter.com/Daring_Dragons" - } - }, - { - "chainId": 101, - "address": "FASohke1j5eRAwQBMqTs3W9d3N54xFqNAg3nZRmGKQdk", - "symbol": "AQUA", - "name": "AQUA", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FASohke1j5eRAwQBMqTs3W9d3N54xFqNAg3nZRmGKQdk/logo.png", - "tags": ["community-token", "social-token", "utility-token"], - "extensions": { - "twitter": "https://twitter.com/CoralTribeNFT" - } - }, - { - "chainId": 101, - "address": "8rgGrnETmAbMCmgAWgUA67ydf7CzMyd5pErGZiHvWxwN", - "symbol": "BSHD", - "name": "Bushido Coin", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/stan14100/token-icon/main/bshd-token.png", - "tags": ["utility-token"], - "extensions": { - "discord": "http://discord.gg/bushidosociety", - "instagram": "https://www.instagram.com/bushido_society", - "twitter": "https://twitter.com/Bushido_Society", - "website": "https://bushidosociety.com/" - } - }, - { - "chainId": 101, - "address": "SMKdxDRkGU4NVhi36cXbYMzCGhkj48VVsWHiybAQDwC", - "symbol": "SMKWL", - "name": "Smokeville WL", - "decimals": 0, - "logoURI": "https://shmokeville.com/logo/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Smokeville WL Token", - "discord": "https://discord.gg/qrucgaZUvX", - "twitter": "https://twitter.com/Smokevillesol", - "website": "https://shmokeville.com" - } - }, - { - "chainId": 101, - "address": "CEZCH6PZjUw8RXfhsS8vSo4wGeoMMhAyzaFWHpXp3tRn", - "symbol": "GGADTT", - "name": "GGA DAO Test Token", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CEZCH6PZjUw8RXfhsS8vSo4wGeoMMhAyzaFWHpXp3tRn/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "xoy8fyDQ1iCEyUPdKf43ezKB7SCX9F69uqAHTFR5mcq", - "symbol": "DENJI", - "name": "Denji Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/xoy8fyDQ1iCEyUPdKf43ezKB7SCX9F69uqAHTFR5mcq/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/MakimaNFT" - } - }, - { - "chainId": 101, - "address": "4hqG3UyaWVJ74wWhBrCKcoXBmpPiXJE7pj7m9GS7Z3mX", - "symbol": "SS", - "name": "Solana Scouts", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4hqG3UyaWVJ74wWhBrCKcoXBmpPiXJE7pj7m9GS7Z3mX/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/solanascouts", - "twitter": "https://twitter.com/SolanaScouts", - "website": "https://solanascouts.io/" - } - }, - { - "chainId": 103, - "address": "EoC7RvPmwbXL9nAmCwfKZTd7aTiC9VzTS6J4j8hLNCfV", - "symbol": "eo-coin", - "name": "Eco Organic Coin", - "decimals": 8, - "logoURI": "https://cdn.jsdelivr.net/gh/PurpleZone/NFTs@master/eoc/eo-coin.svg", - "tags": [ - "green-coin", - "community-token", - "utility-token", - "colored-token" - ], - "extensions": { - "coingeckoId": "wrapped-bitcoin", - "description": "The most Sustainable NFT with on 61mg CO2eq", - "imageUrl": "https://bafybeigijghqbqzju7ldhacu6n3vst7wutwbv7fuvtpaeh63kzjxsprdpa.ipfs.nftstorage.link/?ext=svg", - "telegram": "https://t.me/cryptolake2", - "website": "https://PurpleZone.github.io/NFTs/eoc/", - "whitepaper": "https://gateway.ipfs.io/ipns/QmVYhabrNidUzhLmDpbB28JxK12mUbagDuEj8VnwdMugqr/whitepaper.pdf" - } - }, - { - "chainId": 101, - "address": "G1izd6XghBaCRw3gS2sRwD2JJdmAnFQWinnfYCvSzfuZ", - "symbol": "$GLIZZY", - "name": "GLIZZY", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/G1izd6XghBaCRw3gS2sRwD2JJdmAnFQWinnfYCvSzfuZ/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/GlizzyRoyale" - } - }, - { - "chainId": 101, - "address": "6piwLtPi6sYjvE1reSEpmAXfcJqJtyGp3fahhEU7VF2C", - "symbol": "SKZ", - "name": "The SNKRZ Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6piwLtPi6sYjvE1reSEpmAXfcJqJtyGp3fahhEU7VF2C/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "A Klaytn-based Walk-To-Earn social fitness platform", - "discord": "https://discord.com/invite/thesnkrz", - "twitter": "https://twitter.com/theSNKRZ", - "website": "https://www.thesnkrz.com/" - } - }, - { - "chainId": 101, - "address": "7zbt7qwXUdEnmpLfFdN2M749aTRT1aKcoob5SpRAsRgU", - "symbol": "CLX", - "name": "RightClickable", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7zbt7qwXUdEnmpLfFdN2M749aTRT1aKcoob5SpRAsRgU/logo.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/rightclickable_", - "website": "https://rightclickable.com" - } - }, - { - "chainId": 101, - "address": "EB6YDsfxseRJuJjCasDBDEyVjXrUchYWbwskhXg9N4yQ", - "symbol": "SCK", - "name": "Konpeito Shinobi Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/konpeitoshinobi/KonpeitoShinobiToken/main/1.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "description": "Konpeito Shinobi is a collection of unique Shinobi's Warrior living on the Solana blockchain", - "discord": "https://discord.gg/HjASJGv9rf", - "twitter": "https://twitter.com/konpeitoshinobi", - "website": "https://konpeitoshinobi.com/" - } - }, - { - "chainId": 101, - "address": "FreeGzaYADRmRJSEUXJSodjUwGhNuZb72kQsNhBhja4X", - "symbol": "FSHIN", - "name": "Free Shinobi Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FreeGzaYADRmRJSEUXJSodjUwGhNuZb72kQsNhBhja4X/logo.png" - }, - { - "chainId": 101, - "address": "8nHuHov45Ji77dB6qeCty5DEYSLpm62ntdc5JvdqJ215", - "symbol": "TMAX", - "name": "TendieMax", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/OakmontLabs/TendieMaxLogo/main/TendieMaxLogo.png", - "tags": ["Utility-token"] - }, - { - "chainId": 101, - "address": "8Pm6hMSp4XwCp2tXUBBby2bNqXTDvt7N85PRAoVJ9JtW", - "symbol": "FEN", - "name": "FenCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/fennar01/crypto/main/logo.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "Hiw1D95aNJ2CaooFf1arD5W56ZpuDbxLcvzWE72fDBgN", - "symbol": "WLFA", - "name": "WL Faviont", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/faviont/marketplace/main/logo-wl.png", - "tags": ["whitelist", "utility-token"], - "extensions": { - "description": "Each token gives you access to buy one NFT on https://faviont.io/", - "twitter": "https://twitter.com/FaviontOfficial", - "website": "https://faviont.io/" - } - }, - { - "chainId": 101, - "address": "A7e46NH9UMeCARWtNNoVSkR55DxEaAgQGiXLYwxLW36z", - "symbol": "PAWR", - "name": "Pet Solciety", - "decimals": 2, - "logoURI": "https://bafkreiefof3cjzgsd2xvfcijcf3r3az2rgycad7ycpveghjlmo6r5surh4.ipfs.dweb.link/?ext=png", - "tags": ["NFT", "utility-token"], - "extensions": { - "discord": "https://discord.gg/R5jF7rd5cg", - "twitter": "https://twitter.com/PetSolciety", - "website": "https://www.petsolciety.com" - } - }, - { - "chainId": 101, - "address": "EKMJyNS156WWC812B4W3Vvc1Zn4moRHWMa6viY9R2ft5", - "symbol": "ERA$", - "name": "Age of DeFi", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EKMJyNS156WWC812B4W3Vvc1Zn4moRHWMa6viY9R2ft5/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/AgeofDeFiNFT", - "website": "https://ageofdefi.io/" - } - }, - { - "chainId": 101, - "address": "7XBMMSWMfXwshMWoPj7CL2WxudW5dY6UZCUVc3dDjaEG", - "symbol": "AGE$", - "name": "Age of Defi coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7XBMMSWMfXwshMWoPj7CL2WxudW5dY6UZCUVc3dDjaEG/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/AgeofDeFiNFT", - "website": "https://ageofdefi.io/" - } - }, - { - "chainId": 101, - "address": "DkPn7EwX229HDWL9suY9o2GN6iov2pMpXhvujkUjav6A", - "symbol": "SOLRS", - "name": "Solana Rays", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DkPn7EwX229HDWL9suY9o2GN6iov2pMpXhvujkUjav6A/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 103, - "address": "DZa5FzdNsNQBYvsMTQLK2V3pVgGT1jY3RvM1LkHFmWJX", - "symbol": "SME", - "name": "Smeme token from duongkhongam on Devnet", - "decimals": 9, - "logoURI": "https://gateway.pinata.cloud/ipfs/QmPnMzkxkakrq251duZuUJjknYoK3dZcAsKCPmj3HTZhMB", - "tags": ["currency"] - }, - { - "chainId": 103, - "address": "8TvE458haYwqiDiFDFezMf4591SWX7E8LcjWKeDTEbZB", - "symbol": "FTT", - "name": "Fikapark Team Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8TvE458haYwqiDiFDFezMf4591SWX7E8LcjWKeDTEbZB/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "A Fikapark Team Token for team member", - "website": "https://www.fikapark.com/" - } - }, - { - "chainId": 101, - "address": "MouSJPowxJoEWzxPnv9b27KzUXbfVbHxyqKDnHrGSLB", - "symbol": "MIDH", - "name": "MousInDaHous WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/MouSJPowxJoEWzxPnv9b27KzUXbfVbHxyqKDnHrGSLB/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/MousInDaHous" - } - }, - { - "chainId": 101, - "address": "72m6ir6cDdPzfaFJZzdP1r5nyMxrnYyaHtbqf1zHUjq7", - "symbol": "BCANDY", - "name": "BCANDY", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/72m6ir6cDdPzfaFJZzdP1r5nyMxrnYyaHtbqf1zHUjq7/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/ve4UA2Xc", - "twitter": "https://twitter.com/mirlnft", - "website": "https://mirl.club/" - } - }, - { - "chainId": 103, - "address": "J2HoBAy2v9GkpVaVmLd64FXPRgVYBankNJG4znGjtk6Y", - "symbol": "LxQ", - "name": "Lx Q Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/J2HoBAy2v9GkpVaVmLd64FXPRgVYBankNJG4znGjtk6Y/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "9v3MJ7U7CquqB6jB9dC9FXkrboSqyD28eL7szUyhRXkG", - "symbol": "$WILD", - "name": "WILD", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9v3MJ7U7CquqB6jB9dC9FXkrboSqyD28eL7szUyhRXkG/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/3BkAHG3m", - "twitter": "https://twitter.com/Arkanauts", - "website": "https://www.arkanauts.io/" - } - }, - { - "chainId": 101, - "address": "CasBBiWGCNebBzG4cQSkM8WrpgwzDXN88eNAKRz5Rsqv", - "symbol": "CHSSO", - "name": "CHESSO", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/gotthelucas/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "G7VgKoTadSDrMaQ85xQhh1RFdBhpWXrPzSpV99L3DTL2", - "symbol": "PICS", - "name": "Presence Pictures Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/edmundleewen/presenceCoin/main/appImage180.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "ES4isqfcWbeBZwtH2eLRjk5oUzaMyZZrW2uhDM6yde6h", - "symbol": "GMT", - "name": "Sugar Rush WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ES4isqfcWbeBZwtH2eLRjk5oUzaMyZZrW2uhDM6yde6h/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/GoofiezNFT" - } - }, - { - "chainId": 101, - "address": "2w5pRDS18kdTHvFkf8QTFQma8GgHQRgKHNE9psm9Ntyp", - "symbol": "VORD", - "name": "Vordium", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Vordium/VORD-Engine/main/Assets/Mainnet/vordlogo1.png", - "tags": ["utility-token", "Network-token"] - }, - { - "chainId": 101, - "address": "6SUmHppQdVY44VXh7svyb9jhWJbiQSwvKQBW4oegmx3m", - "symbol": "RSN", - "name": "Resin", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/h3ll0x/resintokenimage/main/resin.gif", - "tags": ["utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/BrainStoners", - "website": "https://brainstoners.io/" - } - }, - { - "chainId": 101, - "address": "9Uhcb3LFzC17PE6FYRLFEkfWApHzi44M78mMjWQfyMQq", - "symbol": "CLEN", - "name": "Cleen Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/jumanaanimation2/cleencoin/main/cleencoin.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "8uHgyhcpx5Dje7xssJUfka1RRhAsFWtiVxGf6wPoC7jp", - "symbol": "DLC", - "name": "Crypto Dealer Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8uHgyhcpx5Dje7xssJUfka1RRhAsFWtiVxGf6wPoC7jp/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://cryptodealer.app" - } - }, - { - "chainId": 101, - "address": "4W6mt3HgYzauN1G2uaTQkno47wz49LwjhoEBhFtLFyoy", - "symbol": "RICHEE", - "name": "Richee", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DEhAasscXF4kEGxFgJ3bq4PpVGp5wyUxMRvn6TzGVHaw/logo.png" - }, - { - "chainId": 101, - "address": "GoWJXzxT8ADHp3w42mzCzBc61kMApvSL4e8ck8TxMFXY", - "symbol": "$GOJIT", - "name": "GOJIT", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GoWJXzxT8ADHp3w42mzCzBc61kMApvSL4e8ck8TxMFXY/logo.png" - }, - { - "chainId": 101, - "address": "86ywhGx2vMPUQht6VbxNA6T6WxzGLSYJsmMptgGTMcy6", - "symbol": "PILLZ", - "name": "PILLZ", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/DopeHeadzNFT/Logo/main/Logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/DopeHeadzNFT", - "website": "https://dopeheadz.io/" - } - }, - { - "chainId": 101, - "address": "HvMpFPhGaD3KTXizY1bhxcSgzpJazZ2JmxdhwkLWYyNS", - "symbol": "CTP", - "name": "Certified Plant Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/iviyanStoyanov/crypto/main/IMG_1446.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EC7T3ViyVpFEcBoEWWH9jdk1vypsr4DpwguRixg9Cjbr", - "symbol": "ALTRNE", - "name": "altug super token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EC7T3ViyVpFEcBoEWWH9jdk1vypsr4DpwguRixg9Cjbr/logo.png" - }, - { - "chainId": 101, - "address": "T18azEDeWpKw8GHwFaQV5UAt9hnH6WqzHhGaS4A27nt", - "symbol": "CBNX", - "name": "Carbonix", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/josepastor28/carbonix/main/logo.png", - "tags": ["carbon-offset"] - }, - { - "chainId": 101, - "address": "6cpdEa1qKx62RefDAWxBpyQDBR84kkeS6EAx6FuMdxt9", - "symbol": "DGT", - "name": "Da0 Governance Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6cpdEa1qKx62RefDAWxBpyQDBR84kkeS6EAx6FuMdxt9/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://da0.vercel.app/" - } - }, - { - "chainId": 101, - "address": "ECDy7WSQvwdg3XLoTacGPmAEeA9TqLmGGZKb612Vy3UH", - "symbol": "MFC", - "name": "MattiFinanceCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mammimaisteri/MattiFinanceCoin/main/logo.png", - "tags": ["social-token", "financial-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/mattifinance", - "website": "https://mattifinance.com/" - } - }, - { - "chainId": 101, - "address": "kidsYgCH9dDZWgVxTDJRQEHXVCjEcqUpxf4P2i94UgK", - "symbol": "CKWL", - "name": "Cartonkids WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/kidsYgCH9dDZWgVxTDJRQEHXVCjEcqUpxf4P2i94UgK/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/CartonkidsNFT" - } - }, - { - "chainId": 101, - "address": "CtkUPWL1v3QrtwNhvRCEafs6Qz1ACatGtVPrMrNiY6qK", - "symbol": "MOVE", - "name": "Move-n-Earn", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CtkUPWL1v3QrtwNhvRCEafs6Qz1ACatGtVPrMrNiY6qK/logo.png", - "tags": ["utility-token"], - "extensions": { - "facebook": "https://www.facebook.com/profile.php?id=100081109356224", - "linkedin": "https://www.linkedin.com/company/move-n-earn/", - "telegram": "https://t.me/movenearn", - "twitter": "https://twitter.com/move_nearn", - "website": "https://movenearn.com", - "whitepaper": "https://movenearn.com/whitepaper/" - } - }, - { - "chainId": 101, - "address": "EEzrQRxj7f2m7f3tw45w6PKF1xrT5e9ed2YKZCVNNfxd", - "symbol": "BUD", - "name": "Buddy", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/utsablohani/crypto/main/profile.jpeg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8qxUJ19Hn2u7rXvtdjAogvVmVRSqGiy2CQn1hVx2WtS4", - "symbol": "BAGz", - "name": "BAGz", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8qxUJ19Hn2u7rXvtdjAogvVmVRSqGiy2CQn1hVx2WtS4/bagz.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/LilDirtbagzNFT", - "website": "https://lildirtbagz.com" - } - }, - { - "chainId": 101, - "address": "8ZSJTmL42LgTrC1qY7AZQkLYT1EZquQA1cA3ze4bSjvq", - "symbol": "NEON", - "name": "NEON EVM", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8ZSJTmL42LgTrC1qY7AZQkLYT1EZquQA1cA3ze4bSjvq/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Neon is an Ethereum Virtual Machine with the scalability and liquidity of Solana", - "telegram": "https://t.me/NeonLabsCommunity", - "twitter": "https://twitter.com/neonlabsorg", - "website": "https://neon-labs.org/", - "whitepaper": "https://docs.neon-labs.org/" - } - }, - { - "chainId": 101, - "address": "4L9aFEye7jYiPFywFJh33ad37owHwCETLgrLPxziSMoK", - "symbol": "MKYWL", - "name": "Mafia Monkey Club", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4L9aFEye7jYiPFywFJh33ad37owHwCETLgrLPxziSMoK/logo.png", - "tags": ["WL-token"] - }, - { - "chainId": 101, - "address": "4XR4VkM75Armv6czmd89H7fTsf6evAGoawUgqWQUoyxF", - "symbol": "RSTK", - "name": "Rose Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Suchenski1/RoseToken/082a56b6d2ff5db3798089fc3e7c7aa68ddf34af/RoseToken.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "SPSzWFd2YpwbifRqoow76N31RcnFPH17vmq6AGCXt3C", - "symbol": "SPARK", - "name": "Spark Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SPSzWFd2YpwbifRqoow76N31RcnFPH17vmq6AGCXt3C/logo.png", - "tags": ["NFT", "utility-token"], - "extensions": { - "discord": "https://discord.com/invite/XTZRas4VN4", - "twitter": "https://twitter.com/StonedGnomes", - "website": "https://www.stonedgnomes.io/" - } - }, - { - "chainId": 101, - "address": "ASqpLQXayEH8JT1dFcamUY7RQPPvJhQdwPPUduEfAdKX", - "symbol": "IBHC", - "name": "IBHC WhiteList Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Felibrain/IBHC/main/logo.png" - }, - { - "chainId": 101, - "address": "MELLiWTDA5YN82arABoKMJZtc968tHeS1euQvM2qSPM", - "symbol": "EV1", - "name": "MELLOW MEN WL TOKEN OFFICIAL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/MELLiWTDA5YN82arABoKMJZtc968tHeS1euQvM2qSPM/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/MellowMenNFT", - "website": "https://mellowmen.io/" - } - }, - { - "chainId": 101, - "address": "84EM7P6QLVZvfnzCiVLzMJqUX5rLufenZHAy13ad67dN", - "symbol": "POKR", - "name": "POKERSTAR", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/theshortietate/crypto/main/pokrlogo.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 103, - "address": "7rbvUFP8s5eyL9ddi3bDTancoC8NQx7Z1iQg76u1JaSm", - "symbol": "USDC_v1", - "name": "USDC (devnet)", - "decimals": 6, - "logoURI": "https://ik.imagekit.io/aupdcdycx/logo_uWzBB6tWc.png", - "tags": ["usdc-token"] - }, - { - "chainId": 103, - "address": "DdDAzP342MFa1NKH4YJE3TsRLvhVGFH1datM9Ea64Jom", - "symbol": "USDT_v1", - "name": "USDT (devnet)", - "decimals": 18, - "logoURI": "https://ik.imagekit.io/aupdcdycx/logo_AO3hVNihw.png", - "tags": ["usdt-token"] - }, - { - "chainId": 103, - "address": "98xqW2DYKFGPnWV54GEKBEzLvjyaHGJJaB73d1Rrh5EM", - "symbol": "NEAR_v1", - "name": "NEAR (devnet)", - "decimals": 18, - "logoURI": "https://ik.imagekit.io/aupdcdycx/logo__F7IIL-Z5.png", - "tags": ["near-token"] - }, - { - "chainId": 103, - "address": "9qQsUf9KCzmWGk3yiSRvieTMwkRcAFhYuh6xmUvdnwao", - "symbol": "LUNA_v1", - "name": "LUNA(-devnet)", - "decimals": 9, - "logoURI": "https://ik.imagekit.io/aupdcdycx/logo_W2dAAG3qK.png", - "tags": ["luna-token"] - }, - { - "chainId": 103, - "address": "D5hPszEtcNxXj6njbjdCiFA18K1DSjFF5gewV7582M9M", - "symbol": "LINK_v1", - "name": "LINK(devnet)", - "decimals": 18, - "logoURI": "https://ik.imagekit.io/aupdcdycx/logo_5-VOl4q9r.png", - "tags": ["link-token"] - }, - { - "chainId": 101, - "address": "58S4HYzoZyriMNN5oJJWYCcy1YFW7BYZ6SwU9YizCygx", - "symbol": "KEPL", - "name": "Kepler Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/58S4HYzoZyriMNN5oJJWYCcy1YFW7BYZ6SwU9YizCygx/logo.png", - "tags": ["governance-token", "game-token"], - "extensions": { - "discord": "https://discord.com/invite/keplerhomes", - "medium": "https://medium.com/@KeplerHomes", - "telegram": "https://t.me/KeplerHomes", - "twitter": "https://twitter.com/keplerhomes", - "website": "https://kepler.homes" - } - }, - { - "chainId": 101, - "address": "G4tJQthj5dvnRhRGd8YxqbhvGNMfVKvHvtWdrovEuhPY", - "symbol": "GLAXXYSK", - "name": "Galaxxy Sky Earth", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/GalaxySkyEarth/SkyEarth/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7Bws9nKC4RqmZH1kD9sjv5KGUmYsNJs15fBbohHCchWs", - "symbol": "BIOSPIEL", - "name": "Biospiel", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/okaydokies/bios/main/logo.png", - "tags": ["coin"], - "extensions": { - "description": "Biospiel helps you connect with peers in the medical community", - "facebook": "https://www.facebook.com/biospiel", - "linkedin": "https://www.linkedin.com/company/biospiel", - "twitter": "https://twitter.com/biospiel", - "website": "https://biospiel.com" - } - }, - { - "chainId": 101, - "address": "34TNFU9QLVraxfnCM3MHgeS3SKQ6RYw2iBogUzXoPbLD", - "symbol": "SAIGO", - "name": "Saigo Monkeys", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Tynew240/token-list/1676617702a122d2c52e1bc6302d4da2e279407c/assets/mainnet/34TNFU9QLVraxfnCM3MHgeS3SKQ6RYw2iBogUzXoPbLD/logo.png", - "tags": ["NFT", "utility-token"], - "extensions": { - "twitter": "https://twitter.com/saigomonkeys", - "website": "https://www.saigomonkeys.net/" - } - }, - { - "chainId": 101, - "address": "CxpDKeFxfmLD8L172vgaMGWsLPS9eK1FaZtf4tqbGi1G", - "symbol": "TGT", - "name": "Timee Game Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CxpDKeFxfmLD8L172vgaMGWsLPS9eK1FaZtf4tqbGi1G/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "DxMwCmHfLhpUoT1UwmXka8cG7RodgRJN9nic5bLfHaEp", - "symbol": "TMT", - "name": "Timee Metaverse Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DxMwCmHfLhpUoT1UwmXka8cG7RodgRJN9nic5bLfHaEp/logo.png", - "tags": ["metaverse-token"] - }, - { - "chainId": 101, - "address": "AE1DgVx1W6QCF2kbMZ1wSZ58DubcrpVJqogtiS4bU7ZP", - "symbol": "CO2", - "name": "CARBON CO2 coin for a cleaner planet", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AE1DgVx1W6QCF2kbMZ1wSZ58DubcrpVJqogtiS4bU7ZP/logo.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "website": "https://www.coinco2.com/" - } - }, - { - "chainId": 101, - "address": "7ejAbuUUJvM9BsartLv1X8vams6EMgxSsii8nUvADQsJ", - "symbol": "WNGG", - "name": "Wingig coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/knagu81/kncrypto/main/wngg.png", - "tags": ["Service-token"] - }, - { - "chainId": 103, - "address": "C5EXuMYCou7Ea4yXbcrdj51RAgvN8i8brLnwcLxyzk7V", - "symbol": "ASTT", - "name": "Akvo Sphere Test Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/scgitcs/Akvo-Sphere-Test-Token/main/5.jpg", - "tags": ["stablecoin", "utility-token"] - }, - { - "chainId": 101, - "address": "CBoa6CMrKRHyxayyP3ws7ysQCmXJnNKcJYkTQi4tu44q", - "symbol": "HYPE", - "name": "Hype BA", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/IpawnprozNetwork/LogoHype/main/logo.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "description": "Hype B.A Official NFT VIP Pass for Kika 5339 every Tuesday x Wed 00:30 ART", - "website": "https://linktr.ee/hypeba" - } - }, - { - "chainId": 101, - "address": "t7jeZu9TmKS9AiVcmkmP2TBQNXmapbMNWZCx3B7QiRH", - "symbol": "OCT", - "name": "Oeantoken", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/t7jeZu9TmKS9AiVcmkmP2TBQNXmapbMNWZCx3B7QiRH/logo.png", - "tags": ["utility-token", "social-token"], - "extensions": { - "address": "t7jeZu9TmKS9AiVcmkmP2TBQNXmapbMNWZCx3B7QiRH", - "description": "OCT is a ECO utility token that aims to develop new methods to clean and recycle marine trash and fund other different cleanups allover the world", - "discord": "https://discord.gg/mryy6CfwPq", - "website": "https://www.oceantokens.org/" - } - }, - { - "chainId": 101, - "address": "4RjwajAfPkfDGSygCQ1rSDSUrchCbKgYGF4tuiSY1bCj", - "symbol": "DMS", - "name": "Demons Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4RjwajAfPkfDGSygCQ1rSDSUrchCbKgYGF4tuiSY1bCj/DMS.png", - "tags": ["utility-token", "community-token"] - }, - { - "chainId": 101, - "address": "AYCL5cian1kGAVxhz6PAKit2BWto3wNz7Am98YMq29xU", - "symbol": "DSK", - "name": "Dings Kitchen", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AYCL5cian1kGAVxhz6PAKit2BWto3wNz7Am98YMq29xU/logo.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "8g3aGbs8gGH1q6smHPaxf4v8JjdDXMyMnW3sQQFSjyPP", - "symbol": "VYP", - "name": "VYNQX", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/unknowncac/vynqx/main/V.png", - "tags": ["payment-token", "Service-token", "utility-token"] - }, - { - "chainId": 101, - "address": "BvEj2MNMPsUrD4vSk7NHs4TtRcCcJd75Wx5HvVbY4rbK", - "symbol": "DEDS", - "name": "Decimus Dynamics Token", - "decimals": 9, - "logoURI": "https://github.com/DecimusDynamics/assets/blob/main/decimus-icon-1x1-black.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/DecimusDynamic", - "website": "http://decimusdynamics.io/" - } - }, - { - "chainId": 101, - "address": "TengNGeocJ5GWmBZC9x8mEnFdau4kuKMQfFZkvBUaL7", - "symbol": "$TEKASHITEK", - "name": "TEKASHI TEK", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/TengNGeocJ5GWmBZC9x8mEnFdau4kuKMQfFZkvBUaL7/logo.png" - }, - { - "chainId": 101, - "address": "DQkEumGtdZ7eWkqMZiUhxyiKgkb4CnuEsroXmCgPkTSE", - "symbol": "MOOVE", - "name": "Moove Coin Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DQkEumGtdZ7eWkqMZiUhxyiKgkb4CnuEsroXmCgPkTSE/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://moovecoin.io/" - } - }, - { - "chainId": 101, - "address": "4WGHyeYYRNsgmCkpMjwr816ZeP6he1m5vaTMJk4vG1Mr", - "symbol": "SKG", - "name": "Starz Kitchen", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4WGHyeYYRNsgmCkpMjwr816ZeP6he1m5vaTMJk4vG1Mr/logo.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "PUhuAtMHsKavMTwZsLaDeKy2jb7ciETHJP7rhbKLJGY", - "symbol": "USN", - "name": "USN (Allbridge from Near)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/PUhuAtMHsKavMTwZsLaDeKy2jb7ciETHJP7rhbKLJGY/logo.png", - "tags": ["stablecoin"], - "extensions": { - "coingeckoId": "usn" - } - }, - { - "chainId": 101, - "address": "B6pqF66ovQrZB8Nwaq1b4iA99DnTSMAuvLRS2KFp3Nuq", - "symbol": "TREF", - "name": "TREFOIL TOKEN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/B6pqF66ovQrZB8Nwaq1b4iA99DnTSMAuvLRS2KFp3Nuq/logo.png", - "tags": ["utility-token", "social-token"], - "extensions": { - "address": "B6pqF66ovQrZB8Nwaq1b4iA99DnTSMAuvLRS2KFp3Nuq", - "description": "TREF is a utility token that aims to develop new methods to utilize, socialize and fund other different startups in blockchain space allover the world", - "twitter": "https://twitter.com/TrefoilToken" - } - }, - { - "chainId": 101, - "address": "2rLTJzSj6J6f4poPAKojS2sbdtRry7b8k4XoEMKPwner", - "symbol": "PENNY", - "name": "Penny Auction", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2rLTJzSj6J6f4poPAKojS2sbdtRry7b8k4XoEMKPwner/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://onepenny.vercel.app/" - } - }, - { - "chainId": 101, - "address": "9i2A1xy9HvnJGU11pAFiFYDsizNW9GwtStzVGGk2LkjX", - "symbol": "MRCO", - "name": "Marcio's", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/nascar-bit/logo/main/IMAGEM.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8RjdnCsNa3hTq8XPNhP4RMTcEPCrNPJuV7mE3qH4iPit", - "symbol": "HOOK", - "name": "HOOKAH", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/Robby3082/test-token/main/333.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "GHg6T1Y7df4MQ4oAbNQU3gTMXuQDciChcG3p5zkQCS5G", - "symbol": "ROWY", - "name": "Rowy Coin Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GHg6T1Y7df4MQ4oAbNQU3gTMXuQDciChcG3p5zkQCS5G/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://rowy.io/" - } - }, - { - "chainId": 101, - "address": "4jrEk3D6fLgrXAUj9uAffxYJq3bdygfB4KdFrBaEApSy", - "symbol": "OGREJUICE", - "name": "Ogre Juice", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4jrEk3D6fLgrXAUj9uAffxYJq3bdygfB4KdFrBaEApSy/logo.png" - }, - { - "chainId": 101, - "address": "DJpta5LoqgCADSeS3WWE28MbtFab8EmQRLVvjHtgRBSK", - "symbol": "GEEXOOG", - "name": "GEEXO OG", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DJpta5LoqgCADSeS3WWE28MbtFab8EmQRLVvjHtgRBSK/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/exfYm6uJay", - "instagram": "https://www.instagram.com/geexolotls/", - "twitter": "https://twitter.com/geexolotls", - "website": "https://www.geexolotls.com/" - } - }, - { - "chainId": 101, - "address": "FetnyCdiczgvMEDf2kw9VCf7QwwEQLiWE2cWApqKGXvm", - "symbol": "ARTW", - "name": "Artwork", - "decimals": 1, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FetnyCdiczgvMEDf2kw9VCf7QwwEQLiWE2cWApqKGXvm/Artworklogo.png" - }, - { - "chainId": 101, - "address": "DtafxUvXULXETGtgL2S1Vp6ggfB2nEEM8RtvLSNbGzNS", - "symbol": "FMAT", - "name": "Free Mint Animalz Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DtafxUvXULXETGtgL2S1Vp6ggfB2nEEM8RtvLSNbGzNS/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/AnimalzNFT" - } - }, - { - "chainId": 101, - "address": "FffNDEb4jm5cp3burLawTV17PDXjexuN3MzdDahkKtaf", - "symbol": "AWLT", - "name": "Animalz WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FffNDEb4jm5cp3burLawTV17PDXjexuN3MzdDahkKtaf/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/AnimalzNFT" - } - }, - { - "chainId": 101, - "address": "4a6qUaq8cfgDZeEzGLPahdkx2NkrLtJmCjobYxFfCrsQ", - "symbol": "HLPR", - "name": "Helper Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Skyvi0/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AzAh47oXdGkLKAXQHMNthjuCHmkRYq8uCh1upB6H5Wic", - "symbol": "DREAMERWL", - "name": "DREAMERS Whitelist", - "decimals": 0, - "logoURI": "https://dreamers.mypinata.cloud/ipfs/QmQRdFURoJLKa5vVVm2p6s6d3b9dYJL4M4KPn38nKGzgYf", - "tags": ["DREAMERS-Whitelist"] - }, - { - "chainId": 101, - "address": "BBsbWcS6hPBuMwj5MtAerf3LEfQibh9hgXA3n4WA6Dni", - "symbol": "BB", - "name": "Baby Catlien Token", - "decimals": 0, - "logoURI": "https://media.discordapp.net/attachments/941805628354093118/971189365634113577/517.png?width=670\u0026height=670", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "8ta8pat4jJYEeeaCGKaDzZpU74EovPsuhM8am56Mazs", - "symbol": "NECTAR", - "name": "Nectar Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/agave-com/nectar-token/main/logo-sq.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "HU676nHJTxXqBy4NSpbYZWoGExSsDCJRP4vicx5Aiqvb", - "symbol": "OST", - "name": "Otherside Talents Token", - "decimals": 9, - "logoURI": "https://github.com/ArthurPaivaT/token-list/blob/main/assets/mainnet/HU676nHJTxXqBy4NSpbYZWoGExSsDCJRP4vicx5Aiqvb/logo.png?raw=true" - }, - { - "chainId": 101, - "address": "TakAzdtCRwFbE6GzHG5eVVSqptRqDtqBkW4AKsyTJ3B", - "symbol": "TAKA", - "name": "Takashi Ronin Official WL Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/TakAzdtCRwFbE6GzHG5eVVSqptRqDtqBkW4AKsyTJ3B/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/TakashiRonin" - } - }, - { - "chainId": 101, - "address": "B7mXkkZgn7abwz1A3HnKkb18Y6y18WcbeSkh1DuLMkee", - "symbol": "fUSD", - "name": "Synthetic USD (Fabric)", - "decimals": 8, - "logoURI": "https://imagedelivery.net/9NaZ0y3QBjls8_Ib2N2gQw/ec3521b6-b382-4efb-1d16-7b60c75b9100/public", - "tags": ["fabric", "synthetics"], - "extensions": { - "github": "https://github.com/fabric-foundation/", - "medium": "https://xfabric.medium.com/", - "twitter": "https://twitter.com/official_fabric", - "website": "https://app.fsynth.io/" - } - }, - { - "chainId": 101, - "address": "7nvyNSn5gWrpfE8Qp4uLPUFz7g6uHKVyLNYeHcbq81Aa", - "symbol": "fXAU", - "name": "Synthetic Gold (Fabric)", - "decimals": 8, - "logoURI": "https://imagedelivery.net/9NaZ0y3QBjls8_Ib2N2gQw/44d5355a-45e3-4c2d-decb-0cf723959900/public", - "tags": ["fabric", "synthetics"], - "extensions": { - "github": "https://github.com/fabric-foundation/", - "medium": "https://xfabric.medium.com/", - "twitter": "https://twitter.com/official_fabric", - "website": "https://app.fsynth.io/" - } - }, - { - "chainId": 101, - "address": "FkZefzUKuJpdy3FY5twzsSE4CsvYmN5CwDGFpwGQVTbg", - "symbol": "fBTC", - "name": "Synthetic Bitcoin (Fabric)", - "decimals": 8, - "logoURI": "https://imagedelivery.net/9NaZ0y3QBjls8_Ib2N2gQw/ec84365d-c9a9-45b6-afeb-4ca5ca831600/public", - "tags": ["fabric", "synthetics"], - "extensions": { - "github": "https://github.com/fabric-foundation/", - "medium": "https://xfabric.medium.com/", - "twitter": "https://twitter.com/official_fabric", - "website": "https://app.fsynth.io/" - } - }, - { - "chainId": 101, - "address": "2JkA55iDDkNfhqedZgGWau5rUW8prcdJVhNKQP7cqdZR", - "symbol": "fEUR", - "name": "Synthetic Euro (Fabric)", - "decimals": 8, - "logoURI": "https://imagedelivery.net/9NaZ0y3QBjls8_Ib2N2gQw/1ed84129-6754-4668-7e4b-2cf143f5a100/public", - "tags": ["fabric", "synthetics"], - "extensions": { - "github": "https://github.com/fabric-foundation/", - "medium": "https://xfabric.medium.com/", - "twitter": "https://twitter.com/official_fabric", - "website": "https://app.fsynth.io/" - } - }, - { - "chainId": 101, - "address": "HTPKGJ4tX7hUnQKami9rGDYwekc2eCLokNT2z41EU8gS", - "symbol": "fGBP", - "name": "Synthetic British Pound (Fabric)", - "decimals": 8, - "logoURI": "https://imagedelivery.net/9NaZ0y3QBjls8_Ib2N2gQw/b00332ce-5694-4d33-09fc-d523b63bbe00/public", - "tags": ["fabric", "synthetics"], - "extensions": { - "github": "https://github.com/fabric-foundation/", - "medium": "https://xfabric.medium.com/", - "twitter": "https://twitter.com/official_fabric", - "website": "https://app.fsynth.io/" - } - }, - { - "chainId": 101, - "address": "CVVxVkn5L58sg9eoi1EsoUypcrqPUfUxa8gC51swwMCd", - "symbol": "fJPY", - "name": "Synthetic Japanese Yen (Fabric)", - "decimals": 8, - "logoURI": "https://imagedelivery.net/9NaZ0y3QBjls8_Ib2N2gQw/ebe7a85c-369a-4001-44a6-cc64a3f98500/public", - "tags": ["fabric", "synthetics"], - "extensions": { - "github": "https://github.com/fabric-foundation/", - "medium": "https://xfabric.medium.com/", - "twitter": "https://twitter.com/official_fabric", - "website": "https://app.fsynth.io/" - } - }, - { - "chainId": 101, - "address": "9iLH8T7zoWhY7sBmj1WK9ENbWdS1nL8n9wAxaeRitTa6", - "symbol": "USH", - "name": "Hedge USD", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9iLH8T7zoWhY7sBmj1WK9ENbWdS1nL8n9wAxaeRitTa6/logo.png", - "tags": ["stablecoin"], - "extensions": { - "discord": "https://discord.gg/hedge", - "serumV3Usdc": "6aRwQtvTcHeRTtGxQRhqViwMF1XPEn271CgGEx3YAyEY", - "twitter": "https://twitter.com/HedgeLabs", - "website": "https://www.hedge.so/" - } - }, - { - "chainId": 101, - "address": "5PmpMzWjraf3kSsGEKtqdUsCoLhptg4yriZ17LKKdBBy", - "symbol": "HDG", - "name": "Hedge Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5PmpMzWjraf3kSsGEKtqdUsCoLhptg4yriZ17LKKdBBy/logo.png", - "tags": ["community-token", "governance-token"], - "extensions": { - "discord": "https://discord.gg/hedge", - "serumV3Usdc": "7HrUmsVM7poJdjgoteTVzx3VMFyLcAhdR8JMbuFD6VNq", - "twitter": "https://twitter.com/HedgeLabs", - "website": "https://www.hedge.so/" - } - }, - { - "chainId": 101, - "address": "Fe9aWgTcboSvNZsE71fVDw3GRr2x9GFxtpEbu5fnKV81", - "symbol": "DRT", - "name": "Datalus Reward Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Fe9aWgTcboSvNZsE71fVDw3GRr2x9GFxtpEbu5fnKV81/logo.png", - "tags": ["utility-coin"], - "extensions": { - "telegram": "https://t.me/DatalusCorp", - "twitter": "https://twitter.com/DatalusCorp", - "website": "https://datalus.us" - } - }, - { - "chainId": 101, - "address": "BLtjtxkrwN4qLqFEV3VBL5Ko9kWa1GGJzppMe6DedYGQ", - "symbol": "JRO", - "name": "JaRo", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BLtjtxkrwN4qLqFEV3VBL5Ko9kWa1GGJzppMe6DedYGQ/logo.png", - "tags": ["jaro"], - "extensions": { - "website": "https://github.com/JaroToken" - } - }, - { - "chainId": 101, - "address": "817qdEXjxTMKZesfMJTq2JE9WGbZyYNjGNhUubHswh6V", - "symbol": "DROPS", - "name": "UltraDrop Token", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/817qdEXjxTMKZesfMJTq2JE9WGbZyYNjGNhUubHswh6V/logo.svg", - "tags": ["currency", "utility-token"], - "extensions": { - "instagram": "https://www.instagram.com/ultradrop.io", - "twitter": "https://twitter.com/ultradropio", - "website": "https://ultradrop.io" - } - }, - { - "chainId": 101, - "address": "hf6wNMHsJZejxWR5E5GNByPxqrzCSbK2a344v5bJX8r", - "symbol": "AKHEL", - "name": "AKHEL OG", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/akhelbey/akhels/main/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/gGgAPFthTA" - } - }, - { - "chainId": 101, - "address": "Du57WgpJKWhwoD2UGVcJu6BSsdvmGmKTjNz5vV4yfVSz", - "symbol": "SQFT", - "name": "Square Feet", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/pilotdane/crypto/main/sqftlogo.png", - "tags": ["realestate-token"] - }, - { - "chainId": 101, - "address": "5A8B98xa5ghN5ZwT8Eu52kaFTvkmqofXsT6o7TdUEDNU", - "symbol": "DCCOIN", - "name": "Dream City", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5A8B98xa5ghN5ZwT8Eu52kaFTvkmqofXsT6o7TdUEDNU/logo.png" - }, - { - "chainId": 101, - "address": "Cac7ifBsj4C6B1YDmkqut3xwGYKdfdQ2cA9v6smMPuD1", - "symbol": "H2O", - "name": "WATER H2O", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Cac7ifBsj4C6B1YDmkqut3xwGYKdfdQ2cA9v6smMPuD1/logo.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/H2oToken", - "website": "https://www.tokenh2o.com/" - } - }, - { - "chainId": 101, - "address": "XavAGq7fE9SwdbwsvMqmieHyZB6MtiLpagY3A8huHvo", - "symbol": "YXAV", - "name": "Yaku Corp l Avatar X WL Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/XavAGq7fE9SwdbwsvMqmieHyZB6MtiLpagY3A8huHvo/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/YakuCorp", - "website": "https://www.yakushima.io/" - } - }, - { - "chainId": 101, - "address": "rHtaCP5RsCKcT8QcbqKB2iJBTMz9g6PipgaQrPWzFSW", - "symbol": "DFX", - "name": "Defects", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/rHtaCP5RsCKcT8QcbqKB2iJBTMz9g6PipgaQrPWzFSW/dfxlogo.png", - "tags": ["community-token"], - "extensions": { - "discord": "https://discord.gg/zgeaF3egxp", - "twitter": "https://twitter.com/risingdefects", - "website": "https://risingdefects.com" - } - }, - { - "chainId": 101, - "address": "ADQwix6UMnhZ13iAd5xQMWFUuw8cJRGj1RioqP3GZebg", - "symbol": "SIGHT", - "name": "Sight", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ADQwix6UMnhZ13iAd5xQMWFUuw8cJRGj1RioqP3GZebg/logo.png", - "tags": ["utility-coin"], - "extensions": { - "twitter": "https://twitter.com/ReptilianReneg" - } - }, - { - "chainId": 101, - "address": "LLFp7NAT1u3cz2cGZw18kfgfEA9zeBdiDC2uoX6TY2W", - "symbol": "LLF", - "name": "Lazy Lizard Fund", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/LazyLizardFund/LazyLizardFund/main/LazyLizardFundLogo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/mruKkteqmx", - "twitter": "https://twitter.com/LazyLizardFund" - } - }, - { - "chainId": 101, - "address": "eY8xqkXmTUsZ6FSTYq9hg54c9KvgZzJbxtRnfwofeKW", - "symbol": "$HIGH", - "name": "HIGH", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/StndKng/tknlogo/main/logo.png", - "tags": ["community-token"], - "extensions": { - "twitter": "https://twitter.com/KangaroosStoned", - "website": "https://stonedkangaroos.io/" - } - }, - { - "chainId": 101, - "address": "tama3h1XJnmS4Lo8P4TZVA3Fjt5utNL6PdbePqx5hnj", - "symbol": "TMAP", - "name": "Tamaki Apes Whitelist Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/tama3h1XJnmS4Lo8P4TZVA3Fjt5utNL6PdbePqx5hnj/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/TamakiApes", - "website": "https://tamakiapes.com/" - } - }, - { - "chainId": 101, - "address": "EwmUZLCKPhjs3tdLddX1PFYzbRiPrq8fjgZfkaYVP7Jy", - "symbol": "LFND", - "name": "LIT FUND", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/scarceproject/crypto/main/dth5geg.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/C5z57xrw52", - "telegram": "https://t.me/litfund", - "twitter": "https://twitter.com/litfund_defi", - "website": "https://lit.fund" - } - }, - { - "chainId": 101, - "address": "CxQ51bSL1f1HgJZLHZDKZEE6u38DLJfdCzbR6WPLoK6j", - "symbol": "ANR", - "name": "Annora", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CxQ51bSL1f1HgJZLHZDKZEE6u38DLJfdCzbR6WPLoK6j/logoanr.png", - "tags": ["game-token"] - }, - { - "chainId": 101, - "address": "8J6ABr7JhByRQ6D9rBTgBdC4D5qf1Q2vzq3mhhzPGxh1", - "symbol": "SRIP", - "name": "SoulReapers WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/DefiTokens/assets/main/WL.png", - "extensions": { - "twitter": "https://twitter.com/solanalostsouls", - "website": "https://discord.com/invite/efkrna3jbs" - } - }, - { - "chainId": 101, - "address": "CZw1Dxzn3thg42sKDNZweWjEpjaJpKYN9maAYdHnDvNU", - "symbol": "SLC", - "name": "SLOTH INU TOKEN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Jono131122/slothcoin/main/transparent-sloth-20.png", - "tags": ["community-token"] - }, - { - "chainId": 101, - "address": "2mSSUPJYLVGRxvsLcR2B8dwtG6KuYWsGpJaCyZAQwTPW", - "symbol": "SPARR", - "name": "Savannah Sparrows Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2mSSUPJYLVGRxvsLcR2B8dwtG6KuYWsGpJaCyZAQwTPW/logo.png", - "tags": ["game-token", "utility-token", "community-token"], - "extensions": { - "discord": "https://discord.com/invite/jJyzV95bdG", - "twitter": "https://twitter.com/SavanahSparrowS", - "website": "https://www.savannahsparrows.com" - } - }, - { - "chainId": 101, - "address": "6N9pFW6Vr6G5WtTzS4sCTLcQLLnTpLXuiEENQuY5nqpi", - "symbol": "YAFAE", - "name": "YafaTek E-Money", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/yafatek/token-info/master/logo.png", - "extensions": { - "twitter": "https://twitter.com/YafaTechnologi1", - "website": "https://yafatek.dev/" - } - }, - { - "chainId": 103, - "address": "Dy7FC4Ayeh28CMo8bxxtTfcw7ySZZFhwZFRxvgxkq1KC", - "symbol": "$MUSHCOIN", - "name": "MUSH COIN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Carstino333/Token22/main/43649a65148d9e9046b81afa6551d4e9b4791120_original.png" - }, - { - "chainId": 101, - "address": "6B4SQkzmWtQNJXQ9uhvL7cxid4S3JdZRrQj9YZkbfSJE", - "symbol": "SSWL", - "name": "Savannah Sparrows WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6B4SQkzmWtQNJXQ9uhvL7cxid4S3JdZRrQj9YZkbfSJE/logo.png", - "tags": ["whitelist-ticket"], - "extensions": { - "twitter": "https://twitter.com/SavanahSparrowS", - "website": "https://www.savannahsparrows.com" - } - }, - { - "chainId": 103, - "address": "CUQf6iejbk9uHqrrWU3fz5Xe8p7H26i16EjUH8avGy6m", - "symbol": "BWUSD", - "name": "BWUSD", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CUQf6iejbk9uHqrrWU3fz5Xe8p7H26i16EjUH8avGy6m/logo.png" - }, - { - "chainId": 101, - "address": "AU9tge2N6pT5Y7FsiTi8gFxeLoQ7GL9GZXmYMYaeZCnT", - "symbol": "Unity", - "name": "Unity Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/chillingonsol/logo/main/unity.png", - "tags": ["community-token", "utility-token"] - }, - { - "chainId": 101, - "address": "AYiYVS2nSV8cRoYY3HJH9YF7fnQMQBmp2UMu6CGHnvUE", - "symbol": "DMCN", - "name": "DumCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Godflay/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "TripBPFeezN4Naxg6Ztx5a8g2vv8fimswhte3QE3Zna", - "symbol": "TAPE", - "name": "Trippin Ape Tribe Whitelist Token", - "decimals": 9, - "logoURI": "https://imagizer.imageshack.com/img922/6869/YUVPPX.png", - "tags": ["community-token", "whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/trippinapenft", - "website": "https://www.trippinapetribe.xyz/" - } - }, - { - "chainId": 101, - "address": "3swraHsc77KMg1tFvwH3tfYcd8SWr5fcUhtmRxjavG7H", - "symbol": "KS", - "name": "KALISTEN - Train To Earn", - "decimals": 9, - "logoURI": "https://kalisten.app/wp-content/uploads/2022/05/kalisten_token.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/kalisten", - "twitter": "https://twitter.com/kalisten_", - "website": "https://kalisten.app/" - } - }, - { - "chainId": 101, - "address": "J8xdo42P8B7j6jJ8qmZJscevLgveQEGciBv14FE5yXJp", - "symbol": "CBTLT", - "name": "Cyberbloks Tournament Lottery Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/J8xdo42P8B7j6jJ8qmZJscevLgveQEGciBv14FE5yXJp/cb.jpg", - "tags": ["lottery-token"] - }, - { - "chainId": 101, - "address": "9oHjAGRgt6VBpZupKxV2w2XdmfpQs9sKPjpzXaHxCG98", - "symbol": "WANG", - "name": "Big Wang Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SuperStarShen/PaulCrypto/main/logo.png.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "SoLF9MkoQcdZguEv1kM2ZFWm9C4EfoP4ZaHZDhhKWoJ", - "symbol": "Solful", - "name": "Solful Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SoLF9MkoQcdZguEv1kM2ZFWm9C4EfoP4ZaHZDhhKWoJ/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/SolfulNFT" - } - }, - { - "chainId": 101, - "address": "JDABJJtPKr4mMzoKXzS128VTmZZdDmCbd4GPy71J3zn1", - "symbol": "CLSC", - "name": "ClassCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/huzaifa132/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8hwHhAxzrKtuN8GfotLTUYXXLEiX9qrzPYkahzuByWGP", - "symbol": "$SHINE", - "name": "SHINE", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/puresec-ng/gary/main/SHINE_coin.png" - }, - { - "chainId": 101, - "address": "9tNQydfWR9sAphTrGNj7ZrcVjs9QiQNXrzn4Hq9xin44", - "symbol": "$MOJO", - "name": "MOJO", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/puresec-ng/gary/main/MOJO_coin.png" - }, - { - "chainId": 101, - "address": "3nmTsvHUoyWFRoksBWU9oHaHwGsezAp97hgrrnc8brNo", - "symbol": "$LOOP", - "name": "LOOP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/puresec-ng/gary/main/LOOP_coin.png" - }, - { - "chainId": 101, - "address": "2Y1E1KgmXYgfLKR7e6o9xzwgZ53rYjLPyqmEeDPacgZi", - "symbol": "$DUNK", - "name": "DUNK", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/puresec-ng/gary/main/DUNK_coin.png" - }, - { - "chainId": 101, - "address": "5De7hU2PZFsSb6nJaetgZ2aZNEMDsC9A8Bp8G54x9BX7", - "symbol": "$DRPOWER", - "name": "DRPOWER", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/puresec-ng/gary/main/DRPOWER_coin.png" - }, - { - "chainId": 101, - "address": "GjEhhrAjBjoyZgYBDnHXGRuYRKzFZs4XsrGREcFRRfTb", - "symbol": "$FLOW", - "name": "FLOW", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/puresec-ng/gary/main/FLOW_coin.png" - }, - { - "chainId": 101, - "address": "5JNGgEcU9EYAa5PoyQiTUoRfgP3fpBGHfXK33ZRggDZo", - "symbol": "$EASE", - "name": "EASE", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/puresec-ng/gary/main/EASE_coin.png" - }, - { - "chainId": 101, - "address": "6GNwqhgq3saN6dX94kDrxc8dj4xAcgnwK9njqbrHjmt2", - "symbol": "$LVRG", - "name": "LEVERAGE", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/puresec-ng/gary/main/LVRG_coin.png" - }, - { - "chainId": 101, - "address": "7ZX9G8cjcWDZEs6ugATmjA5MR3Ao8aAtETn5c2vd6qoi", - "symbol": "$RSIST", - "name": "RESIST", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/puresec-ng/gary/main/RSIST_coin.png" - }, - { - "chainId": 101, - "address": "27QmTVixhZP5xLM2iYsdmpfhVNsThUS2ZvtmZ3AmNhED", - "symbol": "$ANTI", - "name": "ANTI SOCIAL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/puresec-ng/gary/main/ANTI_coin.png" - }, - { - "chainId": 101, - "address": "Es9ogKeDecth3erJanqKFsBLgU9bQCtsjNetRUsqiJto", - "symbol": "$WELLNESS", - "name": "WELLNESS", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/puresec-ng/gary/main/WELLNESS_coin.png" - }, - { - "chainId": 101, - "address": "6MrPA5iQJPftr5PmQh4TueKh9TLjLpotaJNUjczFxzs8", - "symbol": "HUZAIFA", - "name": "HuziCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/GithubCreator32/cypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FoMQuZCEUqgj29hDyj6xwHFngctW7F8An2t3mEqbgkmj", - "symbol": "LSTC", - "name": "Lester Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Realifyy/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CkfKdxxSL7Zy1EDSp7Xk2NLVWE18UmauBysNCME5zvbc", - "symbol": "SHIZOKU", - "name": "SHIZOKU clans", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CkfKdxxSL7Zy1EDSp7Xk2NLVWE18UmauBysNCME5zvbc/shizoku.png", - "extensions": { - "twitter": "https://twitter.com/Shizoku_clans", - "website": "https://shizoku.io/" - } - }, - { - "chainId": 101, - "address": "9bMsXVhmdgaMEVREDA8YLA1YiwgYc85ByontdW2fEAPh", - "symbol": "JIT", - "name": "JitCoin", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9bMsXVhmdgaMEVREDA8YLA1YiwgYc85ByontdW2fEAPh/logo.png", - "tags": ["Jitcoin", "JTC", "jitcoin", "jtc", "JitCoin"], - "extensions": { - "discord": "https://jitcoin.6ex.dev/discord", - "github": "https://github.com/JitcoinOfficial", - "website": "https://jitcoin.6ex.dev" - } - }, - { - "chainId": 101, - "address": "C2wbTUaWGqEu3hdsAyK5eni4h1bb58eYDvBMsZvzXaBK", - "symbol": "Level", - "name": "Level coin", - "decimals": 9, - "logoURI": "https://api.mehmetsteakhouse.com/download/logo.png", - "tags": ["service-token", "community-token", "payment-token"], - "extensions": { - "instagram": "https://www.instagram.com/mehmet_steakhouse", - "website": "https://mehmetsteakhouse.com" - } - }, - { - "chainId": 101, - "address": "J2SVSPEu6ZefWH16BgPHpH6vU43MeEcRZm5Npm1ycQUi", - "symbol": "$UPGRADE", - "name": "UPGRADE COIN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/puresec-ng/gary/main/UPGRADE_coin.png" - }, - { - "chainId": 101, - "address": "3xqWRbQp3F9zY39YEoR8MWsZ6ri9aKkPeXBn3qPgUsCy", - "symbol": "WAKA", - "name": "Waka coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3xqWRbQp3F9zY39YEoR8MWsZ6ri9aKkPeXBn3qPgUsCy/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HnEWCEGpezrBMcsMNrmuHLBG9vpEvS5RFaPYDYGVcuTV", - "symbol": "ALTUG", - "name": "altug oren social token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HnEWCEGpezrBMcsMNrmuHLBG9vpEvS5RFaPYDYGVcuTV/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2qDvxTbv1RL1RDdiedk4NSVPAK6XhqvskEowMxn9TJKA", - "symbol": "UPAWL", - "name": "UPA Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2qDvxTbv1RL1RDdiedk4NSVPAK6XhqvskEowMxn9TJKA/upa_wl.png", - "tags": ["whitelist-token", "utility-token"], - "extensions": { - "discord": "https://discord.gg/Rz7cuV8js2", - "twitter": "https://twitter.com/UnitedPandas_io", - "website": "https://unitedpandas.io" - } - }, - { - "chainId": 103, - "address": "GyRtgk4dsNMDX17X9qejNb62mHMHCWhJdzYjy9tzvtko", - "symbol": "ACTC", - "name": "ActivCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/ActivDoctors/assets/main/imgs/ado_thmb.png" - }, - { - "chainId": 101, - "address": "5MBrosbZcwVfjeharePsEMWw71kDYLZB9ye49fuPX5yr", - "symbol": "MZAR", - "name": "MayaZar coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SarthakBehura/mayazar/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "w7E7qsHhdJS2ueqyUKAqPWacgpeFyDQGAmwa5DvQBpo", - "symbol": "RIX", - "name": "RichCoin", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/w7E7qsHhdJS2ueqyUKAqPWacgpeFyDQGAmwa5DvQBpo/logo.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "discord": "https://discord.gg/kh4SwzzaRH", - "twitter": "https://twitter.com/richboxIO", - "website": "https://richbox.io/" - } - }, - { - "chainId": 101, - "address": "G8i2y7wTgjaUx4im9hhA57QbEH3rgNyqqbJzXqXAXtrw", - "symbol": "NS15", - "name": "Naxar s15", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/G8i2y7wTgjaUx4im9hhA57QbEH3rgNyqqbJzXqXAXtrw/logo.png", - "tags": ["nft-token"], - "extensions": { - "description": "Naxar s15 is an NFTs card for mining tokens in the Boxch app. APY 15%", - "twitter": "https://twitter.com/_Naxar", - "website": "https://naxar.net/" - } - }, - { - "chainId": 101, - "address": "HK497ys4h2EkYnZV9knaGWzecSixfwmhde3LNrknrEms", - "symbol": "NB", - "name": "Naxar Black", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HK497ys4h2EkYnZV9knaGWzecSixfwmhde3LNrknrEms/logo.png", - "tags": ["nft-token"], - "extensions": { - "description": "Naxar Black is an NFTs card for mining tokens in the Boxch app. APY 20%", - "twitter": "https://twitter.com/_Naxar", - "website": "https://naxar.net/" - } - }, - { - "chainId": 101, - "address": "3rRUroe4oRpzC297wzDUtZxPgCZxMgnfKBmmLMvA7zVz", - "symbol": "NG", - "name": "Naxar Gold", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3rRUroe4oRpzC297wzDUtZxPgCZxMgnfKBmmLMvA7zVz/logo.png", - "tags": ["nft-token"], - "extensions": { - "description": "Naxar Gold is an NFTs card for mining tokens in the Boxch app. APY 25%", - "twitter": "https://twitter.com/_Naxar", - "website": "https://naxar.net/" - } - }, - { - "chainId": 101, - "address": "AEB7dHS8CjR9qNCoWwBotvcdoEJHWdCstVQ73FKknLFf", - "symbol": "NU", - "name": "Naxar Ultra", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AEB7dHS8CjR9qNCoWwBotvcdoEJHWdCstVQ73FKknLFf/logo.png", - "tags": ["nft-token"], - "extensions": { - "description": "Naxar Ultra is an NFTs card for mining tokens in the Boxch app. APY 30%", - "twitter": "https://twitter.com/_Naxar", - "website": "https://naxar.net/" - } - }, - { - "chainId": 101, - "address": "ShMkWbNimso7jtbsob1ehn7Tk4sVM2Ns2aBPaqT4wtK", - "symbol": "SHMK", - "name": "Shmoke Coin", - "decimals": 6, - "logoURI": "https://shmokeville.com/logo/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Shmoke Coin", - "discord": "https://discord.gg/qrucgaZUvX", - "twitter": "https://twitter.com/Smokevillesol", - "website": "https://shmokeville.com" - } - }, - { - "chainId": 101, - "address": "ToTxS3Mi6krv1j76P4KMhZp9PU7FpnPnwxnrnD3aUJJ", - "symbol": "TOTXS3", - "name": "TotalTokenTransient", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ToTxS3Mi6krv1j76P4KMhZp9PU7FpnPnwxnrnD3aUJJ/logo.png", - "tags": ["social-token"], - "extensions": { - "description": "TotalTokenTransient is a fun coin!" - } - }, - { - "chainId": 101, - "address": "oHLy9rACUZoniX3gmTm1ABRnonPX5mWzgdUBk6GtGUf", - "symbol": "SWERV", - "name": "SWERV", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/Zues369/SWERV-logo/main/logo.png", - "tags": ["payment-token", "utility-token"], - "extensions": { - "description": "Creative Collective. Hip Hop, R\u0026B, World Sounds y más. Es Otra Onda SWERV , token value 1usdt = 10 SWERV tokens", - "discord": "https://discord.gg/3yNwFyPzUb", - "instagram": "https://www.ins.com/swervba/", - "website": "https://linktr.ee/Swervba" - } - }, - { - "chainId": 101, - "address": "DU1uTzkfAMWYhPs5GdprFYmGSMcEFZvX4ScbpBxkBdDf", - "symbol": "PMG", - "name": "Paulism Koin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Grit-Dev/crypto1/main/TryTwo(1).png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "75qDcsoXcgU16E2yoyXBfPvxSVSTNej3uK48iAwpmZyW", - "symbol": "AIC", - "name": "AI Crew Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/75qDcsoXcgU16E2yoyXBfPvxSVSTNej3uK48iAwpmZyW/logo.png", - "tags": ["utility-token", "nft-token", "social-token"], - "extensions": { - "twitter": "https://twitter.com/AI_Crew_Sol" - } - }, - { - "chainId": 101, - "address": "LostdSbLeuUnWyzyYbojwB1ZQHbnLZvuJ9fKpeEEYhP", - "symbol": "LISWL", - "name": "Lost in Smoke WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/LostdSbLeuUnWyzyYbojwB1ZQHbnLZvuJ9fKpeEEYhP/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/lostinsmoke_nft" - } - }, - { - "chainId": 101, - "address": "DbreB1y7f52k5x1AHrJio18eBBNRcjb97BKLtaEKgstX", - "symbol": "LMCFPWL", - "name": "LMC Founder's Pass WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DbreB1y7f52k5x1AHrJio18eBBNRcjb97BKLtaEKgstX/logo.jpg", - "tags": ["wl-token"], - "extensions": { - "discord": "https://discord.gg/loosemoosecrew", - "twitter": "https://twitter.com/LooseMooseCrew", - "website": "https://loosemoosecrew.com" - } - }, - { - "chainId": 101, - "address": "cyEAh83RvJJgwcKPBXpY35dnwWT47Mon3K36YpTHwWG", - "symbol": "PPB", - "name": "BaCoin", - "decimals": 0, - "logoURI": "https://ibb.co/xScBGjH", - "tags": ["nft-token"], - "extensions": { - "description": "Pluto Pig BaCoin, Pigs will fly, it's just a matter of time!", - "twitter": "https://twitter.com/PlutoPigsNFT" - } - }, - { - "chainId": 101, - "address": "HLqtPVVzMgW6c7xFgJXAskXFcSvFyGHE8taz7KB39QjH", - "symbol": "FINE", - "name": "Finery", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/FineryNft/Logo/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Ed5ZEiM7rcbp6TwcJnPYzCcefdTSjixWnArWbHiVuN9k", - "symbol": "DOMOBe", - "name": "DomoCoin Beta", - "decimals": 8, - "logoURI": "https://domocoin.net/wp-content/uploads/2022/05/DomoCoin-Beta-Logo.png", - "tags": ["utiliy-token", "social-token"], - "extensions": { - "description": "DomoCoin Beta is a utility-token seeking to fund the development of DomoCoin and the DomoArcade platform.", - "reddit": "https://www.reddit.com/r/DomoCoin/", - "website": "https://domocoin.net" - } - }, - { - "chainId": 101, - "address": "2shTBTRGMKVgZw3eWxJvRHvsxGJAUaDZjdHDeMmUvEBv", - "symbol": "ITA", - "name": "ITALIA", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2shTBTRGMKVgZw3eWxJvRHvsxGJAUaDZjdHDeMmUvEBv/logo.png", - "tags": ["meme-token"], - "extensions": { - "description": "ITA is the fan token of Italy", - "twitter": "https://twitter.com/Azzurri_En", - "website": "https://www.italia.it/" - } - }, - { - "chainId": 101, - "address": "7FuP2KsccsYA54XQaLJ5y4M2fbagbsfc9ZSQHHAsgTnL", - "symbol": "DTLG", - "name": "DataAlg", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7FuP2KsccsYA54XQaLJ5y4M2fbagbsfc9ZSQHHAsgTnL/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "DTLG is the token for invest in DataAlg quantitative investment firm trading in Cryptos and NFTs", - "twitter": "https://twitter.com/DataAlgOfficial" - } - }, - { - "chainId": 101, - "address": "CartMGitU7CXZA8XBWv8tKYhU8mV594LHLred2U8kHQe", - "symbol": "cartoonkids", - "name": "Kids cartoon Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CartMGitU7CXZA8XBWv8tKYhU8mV594LHLred2U8kHQe/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/KidsCartoonNFT" - } - }, - { - "chainId": 101, - "address": "EnTRfLu1uGKhx21VwAr5Truv8u7PhRENh73jcXeCbDda", - "symbol": "XCO", - "name": "Monaco", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/bramdaniel1/crypto/main/logo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "85niRdAwMf27oicsdCXytPTsExA1A8YdJNMZAmoQ839Y", - "symbol": "TACO", - "name": "TacoCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/bramdaniel1/TacoToken/main/TacoLogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9xG7cQZSR5CezW18DxW135RRV3wSs54T2FWSCSGJHErb", - "symbol": "PBSC", - "name": "PBS Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mrpalin/crypto-image/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4mgZTMQxAxAEMt7JKgF2rAkvjiPCQajnoVoChcmT8ypg", - "symbol": "HIT", - "name": "HICON", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/DevListKj/ListLogoCli/main/logo.png", - "tags": ["community-token", "utility-token", "social-token"] - }, - { - "chainId": 101, - "address": "BoBoWy2Z4QvyZRw7JdNS1dxXPA56DNrxCX97YEzobcA6", - "symbol": "BOW", - "name": "BOW", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BoBoWy2Z4QvyZRw7JdNS1dxXPA56DNrxCX97YEzobcA6/logo.png", - "extensions": { - "twitter": "https://twitter.com/bobosofwar", - "website": "https://bobosofwar.com/" - } - }, - { - "chainId": 101, - "address": "FsniTTtb9GeGq1DHkipxera4bsgFkb19maBLKZwMe7in", - "symbol": "TIZ", - "name": "Tiziran", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/pirahansiah/solana_token/main/tiziran.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5nqU8WzBstVyh44K6xnEuQb5P1TJd1zrLcAGEJNFt4tP", - "symbol": "RAIDEN", - "name": "Raiden City", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5nqU8WzBstVyh44K6xnEuQb5P1TJd1zrLcAGEJNFt4tP/logo.svg", - "tags": ["utility-token", "game-token", "game-currency"], - "extensions": { - "discord": "https://discord.gg/raidencity", - "instagram": "https://www.instagram.com/raidencity", - "medium": "https://raidencity.medium.com/", - "twitter": "https://twitter.com/raidencity", - "website": "https://www.raiden.city/" - } - }, - { - "chainId": 101, - "address": "WWY8cb8Ln7r1UUrTSMyXXGwc7PTcwjmodruRtXpYtJ4", - "symbol": "PDL", - "name": "Padel Coin", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WWY8cb8Ln7r1UUrTSMyXXGwc7PTcwjmodruRtXpYtJ4/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BoHGPNU3oyk7cyhFq84bfjCAwNdfKr4nsNytcWCM4fDg", - "symbol": "OGNINJAS", - "name": "OG token BCNinjas Generation 2", - "decimals": 0, - "logoURI": "https://i.ibb.co/GPR3bpm/1.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "44thGfHRsdCB61NAkrDFe6djRrwWZegTTqrs1bwMeAGu", - "symbol": "44TH", - "name": "44TH", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/44thGfHRsdCB61NAkrDFe6djRrwWZegTTqrs1bwMeAGu/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "Bic8w5K9tvHDY7XfiT7fLTdiAkQWURAKkcEs8EsXpxbY", - "symbol": "TROOP", - "name": "Troop Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Bic8w5K9tvHDY7XfiT7fLTdiAkQWURAKkcEs8EsXpxbY/logo.png", - "tags": ["utility-coin"] - }, - { - "chainId": 101, - "address": "LaXyFtJ9JWq7r7gsCRk7JbUaD45FTirAwyUR5WzyVer", - "symbol": "Solaxy", - "name": "Solaxy Metaverse Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/LaXyFtJ9JWq7r7gsCRk7JbUaD45FTirAwyUR5WzyVer/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/SolaxyMetaverse" - } - }, - { - "chainId": 101, - "address": "4NDCtPowqWxgiwWcZ1Nzw2odYGUrV2WPJaPowrHcp86u", - "symbol": "OMO", - "name": "OMO DeFi", - "decimals": 0, - "logoURI": "https://github.com/defimill/logo/blob/main/Logo-512x512.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "8UdHFarzkrq3tu6bvLkMRssFKVoFe8mMmkCrVQGC7BND", - "symbol": "TTCCMint", - "name": "TTCC Mint Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8UdHFarzkrq3tu6bvLkMRssFKVoFe8mMmkCrVQGC7BND/icon.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.com/invite/UrraBQjMYf", - "twitter": "https://twitter.com/TimeTravelingCC" - } - }, - { - "chainId": 101, - "address": "HALoiQHVad4zaH4yhyiZg6E2Pc9hTp4Pp3Fhoo9Et12h", - "symbol": "HALO", - "name": "dHALO", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HALoiQHVad4zaH4yhyiZg6E2Pc9hTp4Pp3Fhoo9Et12h/logo.png", - "tags": ["NFT", "utility-token"], - "extensions": { - "discord": "https://discord.com/invite/divinedogsnft", - "twitter": "https://twitter.com/DivineDogsNFT", - "website": "https://www.divinedogsnft.com/" - } - }, - { - "chainId": 101, - "address": "5MdKp8XXwLibRXbyYN8osLsVfKgiWxxcRqrM1zJmYRmz", - "symbol": "HOPE", - "name": "HOPE", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/letushope/hope-token/main/logo/logo.png", - "tags": ["community-token", "DAO-token", "utility-token"] - }, - { - "chainId": 101, - "address": "BHz39KcF6taQSUmNvDCYTnjAdeN95UrtduBVaAV5AxtQ", - "symbol": "BH", - "name": "BucketHeadz WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BHz39KcF6taQSUmNvDCYTnjAdeN95UrtduBVaAV5AxtQ/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "BucketHeadz WL Token", - "discord": "https://discord.gg/bucketheadz", - "twitter": "https://twitter.com/BucketHeadzNFT", - "website": "http://bucketheadz.xyz/" - } - }, - { - "chainId": 101, - "address": "Ev7xV5Qmf3LfHrNZ4rXVyyzqWqf6AqrfG7eR297MueyN", - "symbol": "GravMot", - "name": "GRAVMOT - Gravitational Motor NFT", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/AlainJSPainchaud/Crypto/main/GravitationMotorToken.png", - "tags": [ - "art-token", - "business-token", - "financial-token", - "monetary-token", - "currency-token" - ] - }, - { - "chainId": 101, - "address": "EZKwSV8LwPv9zW6JBpbvMEeHDopTt3xsa8u44jg6bzLh", - "symbol": "GRHB", - "name": "Graham Bucks", - "decimals": 0, - "logoURI": "https://github.com/apejawn/GBS/blob/main/GB-512x512.png", - "tags": ["Family-token"] - }, - { - "chainId": 101, - "address": "9qtQ7g6dcFQS47YfQR48XFNvYDnoDwr86ze6hTDVfzTX", - "symbol": "CMMN", - "name": "Common Token", - "decimals": 0, - "logoURI": "https://github.com/defiquaz/CMMNBRND/blob/main/CBLOGO-512x512.png", - "tags": ["utility-token", "Community-Token", "DAO-Token"] - }, - { - "chainId": 101, - "address": "GS7uX4SbCqftqJtfMkXBkZUrvZmXjXZxyp75KqqrS4aB", - "symbol": "TNDC", - "name": "Tunisian Dinar Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/nouraouioua/tndc/main/logo.png", - "tags": ["TND-Token"] - }, - { - "chainId": 101, - "address": "14UKc9anWCiEdcfhLvfoLZUZ82aDMf9fGqLxoM7BoLRS", - "symbol": "GECKOS", - "name": "Galactic Geckos Floor Index", - "decimals": 2, - "logoURI": "https://i.imgur.com/PfaeoXm.png", - "tags": [ - "fraction-index", - "bridgesplit-fraction", - "galactic-geckos", - "fnft" - ], - "extensions": { - "discord": "https://discord.gg/bridgesplit", - "twitter": "https://twitter.com/bridgesplit", - "vault": "https://app.bridgesplit.com/fractions/14UKc9anWCiEdcfhLvfoLZUZ82aDMf9fGqLxoM7BoLRS" - } - }, - { - "chainId": 101, - "address": "2ErYR9qxz3jPZX6soEUt6FCVhHK3gLam1yiDBrznPk9q", - "symbol": "RORYS", - "name": "Aurory Floor Index", - "decimals": 2, - "logoURI": "https://aurory.io/content/img/header/logo.png", - "tags": ["fraction-index", "bridgesplit-fraction", "aurory", "fnft"], - "extensions": { - "discord": "https://discord.gg/bridgesplit", - "twitter": "https://twitter.com/bridgesplit", - "vault": "https://app.bridgesplit.com/fractions/2ErYR9qxz3jPZX6soEUt6FCVhHK3gLam1yiDBrznPk9q" - } - }, - { - "chainId": 101, - "address": "7aDkYnSyKUnQgnedoJyjs7fNt3Ef1B4rqaoGRoXSQKMx", - "symbol": "BIRDZ", - "name": "Thugbirdz Floor Index", - "decimals": 2, - "logoURI": "https://www.arweave.net/nGvadeW0UuvIgzZUyNKaQ-c8400CDQn1FwNthOJ_KUw?ext=png", - "tags": ["fraction-index", "bridgesplit-fraction", "thugbirdz", "fnft"], - "extensions": { - "discord": "https://discord.gg/bridgesplit", - "twitter": "https://twitter.com/bridgesplit", - "vault": "https://app.bridgesplit.com/fractions/7aDkYnSyKUnQgnedoJyjs7fNt3Ef1B4rqaoGRoXSQKMx" - } - }, - { - "chainId": 101, - "address": "7jpqRdTrzHQB2qADggdDaUqaxMb3aiQboFpwpQn1bkLn", - "symbol": "DAPES", - "name": "Degenerate Ape Academy Floor Index", - "decimals": 2, - "logoURI": "https://cloudflare-ipfs.com/ipfs/bafkreie44hlb5xve225n6p2siebaevxiwha37aefyvs2ul2kx2akalnree", - "tags": ["fraction-index", "bridgesplit-fraction", "daa", "fnft"], - "extensions": { - "discord": "https://discord.gg/bridgesplit", - "twitter": "https://twitter.com/bridgesplit", - "vault": "https://app.bridgesplit.com/fractions/7jpqRdTrzHQB2qADggdDaUqaxMb3aiQboFpwpQn1bkLn" - } - }, - { - "chainId": 101, - "address": "5dgSRQ4oL8C942K4qPBuhjkbTNHtfqHMADhYE25PmhPG", - "symbol": "SHARKS", - "name": "Rogue Sharks Floor Index", - "decimals": 2, - "logoURI": "https://i.imgur.com/HQ7XdEM.png", - "tags": [ - "fraction-index", - "bridgesplit-fraction", - "rogue-sharks", - "fnft" - ], - "extensions": { - "discord": "https://discord.gg/bridgesplit", - "twitter": "https://twitter.com/bridgesplit", - "vault": "https://app.bridgesplit.com/fractions/5dgSRQ4oL8C942K4qPBuhjkbTNHtfqHMADhYE25PmhPG" - } - }, - { - "chainId": 101, - "address": "Egw6UvRKgMkUxARzyj2WjmEnd8Pa5f4KTMEUN2BmwnLn", - "symbol": "SSC", - "name": "Shadowy Super Coder Floor Index", - "decimals": 2, - "logoURI": "https://i.imgur.com/Hqc29kA.jpg", - "tags": ["fraction-index", "bridgesplit-fraction", "ssc", "fnft"], - "extensions": { - "discord": "https://discord.gg/bridgesplit", - "twitter": "https://twitter.com/bridgesplit", - "vault": "https://app.bridgesplit.com/fractions/Egw6UvRKgMkUxARzyj2WjmEnd8Pa5f4KTMEUN2BmwnLn" - } - }, - { - "chainId": 101, - "address": "BdETrEGESCFx4jjaRWSC4tSU6Gp347w7pNdq2hxT7uRS", - "symbol": "PANDAS", - "name": "Degenerate Trash Pandas Floor Index", - "decimals": 2, - "logoURI": "https://dl.airtable.com/.attachmentThumbnails/3c4fcde4c8ce6dbea98feca031f86a7e/54075bc7", - "tags": [ - "fraction-index", - "bridgesplit-fraction", - "trash-pandas", - "fnft" - ], - "extensions": { - "discord": "https://discord.gg/bridgesplit", - "twitter": "https://twitter.com/bridgesplit", - "vault": "https://app.bridgesplit.com/fractions/BdETrEGESCFx4jjaRWSC4tSU6Gp347w7pNdq2hxT7uRS" - } - }, - { - "chainId": 101, - "address": "BuX8DoFn7ogeXucC14yZDHyZGP3KnLCX1KNv7qFC5jDj", - "symbol": "GPETS", - "name": "Genopets Floor Index", - "decimals": 2, - "logoURI": "https://i.imgur.com/F2J6DpS.jpg", - "tags": ["fraction-index", "bridgesplit-fraction", "genopets", "fnft"], - "extensions": { - "discord": "https://discord.gg/bridgesplit", - "twitter": "https://twitter.com/bridgesplit", - "vault": "https://app.bridgesplit.com/fractions/BuX8DoFn7ogeXucC14yZDHyZGP3KnLCX1KNv7qFC5jDj" - } - }, - { - "chainId": 101, - "address": "GogRTbcBiMrB9891gX8wcbMYyMTFnW9LtDoR2K9EetHa", - "symbol": "SOLSTDS", - "name": "Solsteads Floor Index", - "decimals": 2, - "logoURI": "https://www.arweave.net/WKfr0c79-4ExF_lEBkl4eQlqnPXrNWIj5W7CppmJZw4?ext=png", - "tags": ["fraction-index", "bridgesplit-fraction", "solsteads", "fnft"], - "extensions": { - "discord": "https://discord.gg/bridgesplit", - "twitter": "https://twitter.com/bridgesplit", - "vault": "https://app.bridgesplit.com/fractions/GogRTbcBiMrB9891gX8wcbMYyMTFnW9LtDoR2K9EetHa" - } - }, - { - "chainId": 101, - "address": "CcCHwdGUj9wocqysgowdqk2BSJ7NLfMR1vsedFT26rhx", - "symbol": "BSS", - "name": "Basis Markets Floor Index", - "decimals": 2, - "logoURI": "https://i.imgur.com/H0TSm4U.jpg", - "tags": [ - "fraction-index", - "bridgesplit-fraction", - "basis-markets", - "fnft" - ], - "extensions": { - "discord": "https://discord.gg/bridgesplit", - "twitter": "https://twitter.com/bridgesplit", - "vault": "https://app.bridgesplit.com/fractions/CcCHwdGUj9wocqysgowdqk2BSJ7NLfMR1vsedFT26rhx" - } - }, - { - "chainId": 101, - "address": "E5UNCyiF1xrCqKozyFuiBkYH678BhftBo8Q1GreukBq3", - "symbol": "ENVIRO", - "name": "Enviro Floor Index", - "decimals": 2, - "logoURI": "https://dl.airtable.com/.attachmentThumbnails/245e46f41039aaa1000250cec209bdc3/6ce42bdc", - "tags": ["fraction-index", "bridgesplit-fraction", "enviro", "fnft"], - "extensions": { - "discord": "https://discord.gg/bridgesplit", - "twitter": "https://twitter.com/bridgesplit", - "vault": "https://app.bridgesplit.com/fractions/E5UNCyiF1xrCqKozyFuiBkYH678BhftBo8Q1GreukBq3" - } - }, - { - "chainId": 101, - "address": "HY9LZ7TsDABoMzYfZvBwrLEUVEAWE1kGF8XS1JvbMN9u", - "symbol": "CATS", - "name": "Wise Cats Index", - "decimals": 2, - "logoURI": "https://cloudflare-ipfs.com/ipfs/bafkreih55niv5sh7gjeqdfvoehthuzewbtrxf367nbdbk5wgmgl5weamwm", - "tags": ["fraction-index", "bridgesplit-fraction", "wise-cats", "fnft"], - "extensions": { - "discord": "https://discord.gg/bridgesplit", - "twitter": "https://twitter.com/bridgesplit", - "vault": "https://app.bridgesplit.com/fractions/HY9LZ7TsDABoMzYfZvBwrLEUVEAWE1kGF8XS1JvbMN9u" - } - }, - { - "chainId": 101, - "address": "663rbtf1FHhz1kQFAq41z63ViigQr8zAvZpNKJbZbF6C", - "symbol": "CTZN", - "name": "Citizens Index", - "decimals": 2, - "logoURI": "https://dl.airtable.com/.attachmentThumbnails/17098df55330304080e6ec85174ce2be/9b0790be", - "tags": ["fraction-index", "bridgesplit-fraction", "citizens", "fnft"], - "extensions": { - "discord": "https://discord.gg/bridgesplit", - "twitter": "https://twitter.com/bridgesplit", - "vault": "https://app.bridgesplit.com/fractions/663rbtf1FHhz1kQFAq41z63ViigQr8zAvZpNKJbZbF6C" - } - }, - { - "chainId": 101, - "address": "5hzLftaEyGTQJnoxhGxAvsLkmdjYsbx9YdjNwfNmtq2s", - "symbol": "PARTICLES", - "name": "Particles Index", - "decimals": 2, - "logoURI": "https://i.imgur.com/W8Lo4lY.png", - "tags": ["fraction-index", "bridgesplit-fraction", "particles", "fnft"], - "extensions": { - "discord": "https://discord.gg/bridgesplit", - "twitter": "https://twitter.com/bridgesplit", - "vault": "https://app.bridgesplit.com/fractions/5hzLftaEyGTQJnoxhGxAvsLkmdjYsbx9YdjNwfNmtq2s" - } - }, - { - "chainId": 101, - "address": "CT81fJ8ReVt3aNPqZr3xZvgJ7jjEfrzaXh3condAXHXP", - "symbol": "SOLPUNKS", - "name": "SolPunks Index", - "decimals": 2, - "logoURI": "https://i.imgur.com/17eC2nf.jpg", - "tags": ["fraction-index", "bridgesplit-fraction", "solpunks", "fnft"], - "extensions": { - "discord": "https://discord.gg/bridgesplit", - "twitter": "https://twitter.com/bridgesplit", - "vault": "https://app.bridgesplit.com/fractions/CT81fJ8ReVt3aNPqZr3xZvgJ7jjEfrzaXh3condAXHXP" - } - }, - { - "chainId": 101, - "address": "BVGiPUve3dtMLNw2iv3tA7NN8Jv198Ha9FmPXKMUDkjF", - "symbol": "SKULLYS", - "name": "Disarticulated Skullys Index", - "decimals": 2, - "logoURI": "https://creator-hub-prod.s3.us-east-2.amazonaws.com/dskullys_pfp_1649719436844.jpeg", - "tags": ["fraction-index", "bridgesplit-fraction", "skullyz", "fnft"], - "extensions": { - "discord": "https://discord.gg/bridgesplit", - "twitter": "https://twitter.com/bridgesplit", - "vault": "https://app.bridgesplit.com/fractions/BVGiPUve3dtMLNw2iv3tA7NN8Jv198Ha9FmPXKMUDkjF" - } - }, - { - "chainId": 101, - "address": "FmoKY2ERGmE9NzrYphAJcqH5BPRy2Hs4VomRfu8Qgt7Y", - "symbol": "MONKES", - "name": "SMB Index", - "decimals": 2, - "logoURI": "https://i.imgur.com/FczxrLa.png", - "tags": ["fraction-index", "bridgesplit-fraction", "smb", "fnft"], - "extensions": { - "discord": "https://discord.gg/bridgesplit", - "twitter": "https://twitter.com/bridgesplit", - "vault": "https://app.bridgesplit.com/fractions/FmoKY2ERGmE9NzrYphAJcqH5BPRy2Hs4VomRfu8Qgt7Y" - } - }, - { - "chainId": 101, - "address": "4zPtzz7cBcz6ZNoMTCYPh1juGCFpp59BBYTTybjwmnRo", - "symbol": "DEGODS", - "name": "DeGods Index", - "decimals": 2, - "logoURI": "https://i.imgur.com/2kWcR3L.jpg", - "tags": ["fraction-index", "bridgesplit-fraction", "degods", "fnft"], - "extensions": { - "discord": "https://discord.gg/bridgesplit", - "twitter": "https://twitter.com/bridgesplit", - "vault": "https://app.bridgesplit.com/fractions/4zPtzz7cBcz6ZNoMTCYPh1juGCFpp59BBYTTybjwmnRo" - } - }, - { - "chainId": 101, - "address": "B8sv5Z6n1cooCUFjvVgEKnU1mx1vCmWZGeoyavu1V3v2", - "symbol": "GODS", - "name": "SOLGods Index", - "decimals": 2, - "logoURI": "https://i.imgur.com/UclQYJVh.jpg", - "tags": ["fraction-index", "bridgesplit-fraction", "solgods", "fnft"], - "extensions": { - "discord": "https://discord.gg/bridgesplit", - "twitter": "https://twitter.com/bridgesplit", - "vault": "https://app.bridgesplit.com/fractions/B8sv5Z6n1cooCUFjvVgEKnU1mx1vCmWZGeoyavu1V3v2" - } - }, - { - "chainId": 101, - "address": "3MkJycarius9FkEzzMDCXdtVfGndv19uXW4z1qNth7nW", - "symbol": "WHALES", - "name": "Catalina Whale Mixer Floor Index", - "decimals": 2, - "logoURI": "https://cloudflare-ipfs.com/ipfs/bafkreicadecx3rbffm6tqtgtc67bi6r2xiibtmawcejje7pfu7id2zxwwy", - "tags": [ - "fraction-index", - "bridgesplit-fraction", - "catalina-whales", - "fnft" - ], - "extensions": { - "discord": "https://discord.gg/bridgesplit", - "twitter": "https://twitter.com/bridgesplit", - "vault": "https://app.bridgesplit.com/fractions/3MkJycarius9FkEzzMDCXdtVfGndv19uXW4z1qNth7nW" - } - }, - { - "chainId": 101, - "address": "GhMNTD2abFCg4ApKp581ifWUNF3m7wwLtPJLpsVaawe6", - "symbol": "CETS", - "name": "Cets On Creck Floor Index", - "decimals": 2, - "logoURI": "https://creator-hub-prod.s3.us-east-2.amazonaws.com/cats_on_crack_pfp_1644850873089.png", - "tags": [ - "fraction-index", - "bridgesplit-fraction", - "cets-on-creck", - "fnft" - ], - "extensions": { - "discord": "https://discord.gg/bridgesplit", - "twitter": "https://twitter.com/bridgesplit", - "vault": "https://app.bridgesplit.com/fractions/GhMNTD2abFCg4ApKp581ifWUNF3m7wwLtPJLpsVaawe6" - } - }, - { - "chainId": 101, - "address": "8CmKs6xeWyrgTwBQPUtq7HdbEHvkV9F3NARx2GMX9wFZ", - "symbol": "LITJESUS", - "name": "Lit Jesus Floor Index", - "decimals": 2, - "logoURI": "https://i.imgur.com/gn2iGiB.jpg", - "tags": ["fraction-index", "bridgesplit-fraction", "lit-jesus", "fnft"], - "extensions": { - "discord": "https://discord.gg/bridgesplit", - "twitter": "https://twitter.com/bridgesplit", - "vault": "https://app.bridgesplit.com/fractions/8CmKs6xeWyrgTwBQPUtq7HdbEHvkV9F3NARx2GMX9wFZ" - } - }, - { - "chainId": 101, - "address": "AiCE5ByrXWdKizTFQURngECuLRRrHxmyPtXbUKsxwQR2", - "symbol": "ATADIAN", - "name": "OG Atadians Floor Index", - "decimals": 2, - "logoURI": "https://creator-hub-prod.s3.us-east-2.amazonaws.com/atadians_pfp_1646721263627.gif", - "tags": ["fraction-index", "bridgesplit-fraction", "og-atadians", "fnft"], - "extensions": { - "discord": "https://discord.gg/bridgesplit", - "twitter": "https://twitter.com/bridgesplit", - "vault": "https://app.bridgesplit.com/fractions/AiCE5ByrXWdKizTFQURngECuLRRrHxmyPtXbUKsxwQR2" - } - }, - { - "chainId": 101, - "address": "2EyqaC7zo6TYEKTebBZCchiAdwmqEzsxLxA2MzCYhBcf", - "symbol": "POMP", - "name": "Pompeizz Floor Index", - "decimals": 2, - "logoURI": "https://dl.airtable.com/.attachmentThumbnails/e7f4eef4c9f95f892f81aef0e4713639/84651cac", - "tags": ["fraction-index", "bridgesplit-fraction", "pompeizz", "fnft"], - "extensions": { - "discord": "https://discord.gg/bridgesplit", - "twitter": "https://twitter.com/bridgesplit", - "vault": "https://app.bridgesplit.com/fractions/2EyqaC7zo6TYEKTebBZCchiAdwmqEzsxLxA2MzCYhBcf" - } - }, - { - "chainId": 101, - "address": "Ca6XebDSTEMFJbJMB6ob6CbMWYcL3GtJFsCVFWiMoeMD", - "symbol": "BIRDZ", - "name": "Bit Birdz Floor Index", - "decimals": 2, - "logoURI": "https://dl.airtable.com/.attachmentThumbnails/e7f4eef4c9f95f892f81aef0e4713639/84651cac", - "tags": ["fraction-index", "bridgesplit-fraction", "bit-birdz", "fnft"], - "extensions": { - "discord": "https://discord.gg/bridgesplit", - "twitter": "https://twitter.com/bridgesplit", - "vault": "https://app.bridgesplit.com/fractions/Ca6XebDSTEMFJbJMB6ob6CbMWYcL3GtJFsCVFWiMoeMD" - } - }, - { - "chainId": 101, - "address": "cCUYsVip3Ve2EbStXE9EVncPiRdcjTH7LfFKaB8g55d", - "symbol": "NFTREES", - "name": "NFTrees Floor Index", - "decimals": 2, - "logoURI": "https://pbs.twimg.com/profile_images/1437707791334998017/0oxy-zEY_400x400.png", - "tags": ["fraction-index", "bridgesplit-fraction", "nftrees", "fnft"], - "extensions": { - "discord": "https://discord.gg/bridgesplit", - "twitter": "https://twitter.com/bridgesplit", - "vault": "https://app.bridgesplit.com/fractions/cCUYsVip3Ve2EbStXE9EVncPiRdcjTH7LfFKaB8g55d" - } - }, - { - "chainId": 101, - "address": "H3VPWCEDpUpbykaozNGTPEuG9Gsdkrp4u9cpzJos3FHu", - "symbol": "MONKELABS", - "name": "Monkelabs Floor Index", - "decimals": 2, - "logoURI": "https://dl.airtable.com/.attachmentThumbnails/37fd1a44d683784b3b6195f0e5dec266/8196493e", - "tags": ["fraction-index", "bridgesplit-fraction", "monkelabs", "fnft"], - "extensions": { - "discord": "https://discord.gg/bridgesplit", - "twitter": "https://twitter.com/bridgesplit", - "vault": "https://app.bridgesplit.com/fractions/H3VPWCEDpUpbykaozNGTPEuG9Gsdkrp4u9cpzJos3FHu" - } - }, - { - "chainId": 101, - "address": "FRsyPFrp657gKPPTDNP8ZPGAPXfRJaCLkhfdPsGxJY7p", - "symbol": "DYORNERDS", - "name": "DYOR NERDS Floor Index", - "decimals": 2, - "logoURI": "https://creator-hub-prod.s3.us-east-2.amazonaws.com/dyor_nerds_pfp_1647844662971.jpeg", - "tags": ["fraction-index", "bridgesplit-fraction", "dyor-nerds", "fnft"], - "extensions": { - "discord": "https://discord.gg/bridgesplit", - "twitter": "https://twitter.com/bridgesplit", - "vault": "https://app.bridgesplit.com/fractions/FRsyPFrp657gKPPTDNP8ZPGAPXfRJaCLkhfdPsGxJY7p" - } - }, - { - "chainId": 101, - "address": "HQTUikPhVJ3V8bZfTGNFiy169MZfLP7fkKoJK85gUswG", - "symbol": "SOULT", - "name": "Soul Tools Floor Index", - "decimals": 2, - "logoURI": "https://creator-hub-prod.s3.us-east-2.amazonaws.com/soultools_pfp_1648142538448.png", - "tags": ["fraction-index", "bridgesplit-fraction", "soul-tools", "fnft"], - "extensions": { - "discord": "https://discord.gg/bridgesplit", - "twitter": "https://twitter.com/bridgesplit", - "vault": "https://app.bridgesplit.com/fractions/HQTUikPhVJ3V8bZfTGNFiy169MZfLP7fkKoJK85gUswG" - } - }, - { - "chainId": 101, - "address": "DzUbqmFeZNxYj112sFuYNVdQ18ezk1pAKEtrCSMtE4Fb", - "symbol": "PESKYPNGN", - "name": "Pesky Penguins Floor Index", - "decimals": 2, - "logoURI": "https://i.imgur.com/37nsjBZ.png", - "tags": [ - "fraction-index", - "bridgesplit-fraction", - "pesky-penguins", - "fnft" - ], - "extensions": { - "discord": "https://discord.gg/bridgesplit", - "twitter": "https://twitter.com/bridgesplit", - "vault": "https://app.bridgesplit.com/fractions/DzUbqmFeZNxYj112sFuYNVdQ18ezk1pAKEtrCSMtE4Fb" - } - }, - { - "chainId": 101, - "address": "8e2G3tCTvKAosq4BnYbDczboRVhy7xaXwbTSJeXEefJX", - "symbol": "JCATS", - "name": "Jungle Cats Floor Index", - "decimals": 2, - "logoURI": "https://i.imgur.com/AEPNTTQ.jpg", - "tags": ["fraction-index", "bridgesplit-fraction", "jungle-cats", "fnft"], - "extensions": { - "discord": "https://discord.gg/bridgesplit", - "twitter": "https://twitter.com/bridgesplit", - "vault": "https://app.bridgesplit.com/fractions/8e2G3tCTvKAosq4BnYbDczboRVhy7xaXwbTSJeXEefJX" - } - }, - { - "chainId": 101, - "address": "GpScy7hnuSHPWQmQR6HFGjEqFwzTH6J4kL4TRQZovHF", - "symbol": "GEMMY", - "name": "Gemmy Floor Index", - "decimals": 2, - "logoURI": "https://creator-hub-prod.s3.us-east-2.amazonaws.com/gemmy_pfp_1651420536407.png", - "tags": ["fraction-index", "bridgesplit-fraction", "gemmy", "fnft"], - "extensions": { - "discord": "https://discord.gg/bridgesplit", - "twitter": "https://twitter.com/bridgesplit", - "vault": "https://app.bridgesplit.com/fractions/GpScy7hnuSHPWQmQR6HFGjEqFwzTH6J4kL4TRQZovHF" - } - }, - { - "chainId": 101, - "address": "E4oEnayacCpyKLQQeRqSm8bG5wPqDMZuun6fEXgoLNwF", - "symbol": "ORCSFI", - "name": "The Orcs Floor Index", - "decimals": 2, - "logoURI": "https://creator-hub-prod.s3.us-east-2.amazonaws.com/theorcs_pfp_1650812101467.png", - "tags": ["fraction-index", "bridgesplit-fraction", "orcs", "fnft"], - "extensions": { - "discord": "https://discord.gg/bridgesplit", - "twitter": "https://twitter.com/bridgesplit", - "vault": "https://app.bridgesplit.com/fractions/E4oEnayacCpyKLQQeRqSm8bG5wPqDMZuun6fEXgoLNwF" - } - }, - { - "chainId": 101, - "address": "GvpkzEc4kiKS3xzNLFoc3k8HUVxYCAU8CYBkhAUKsSZ5", - "symbol": "LAMAS", - "name": "Sollamas Floor Index", - "decimals": 2, - "logoURI": "https://dl.airtable.com/.attachmentThumbnails/12d27b39d0669181ee7bc21b6cced591/b4e0a300", - "tags": ["fraction-index", "bridgesplit-fraction", "sollamas", "fnft"], - "extensions": { - "discord": "https://discord.gg/bridgesplit", - "twitter": "https://twitter.com/bridgesplit", - "vault": "https://app.bridgesplit.com/fractions/GvpkzEc4kiKS3xzNLFoc3k8HUVxYCAU8CYBkhAUKsSZ5" - } - }, - { - "chainId": 101, - "address": "9EgSSSAkeo8S4PDX6FqQoMLcUxgLfMaJFSDmkV78LErS", - "symbol": "FLARES", - "name": "Lifinity Flares Floor Index", - "decimals": 2, - "logoURI": "https://dl.airtable.com/.attachmentThumbnails/6972d5c2efb77d49be97b07ccf4fbc69/e9572fb8", - "tags": [ - "fraction-index", - "bridgesplit-fraction", - "lifinity-flares", - "fnft" - ], - "extensions": { - "discord": "https://discord.gg/bridgesplit", - "twitter": "https://twitter.com/bridgesplit", - "vault": "https://app.bridgesplit.com/fractions/9EgSSSAkeo8S4PDX6FqQoMLcUxgLfMaJFSDmkV78LErS" - } - }, - { - "chainId": 101, - "address": "CP8CaP7GmSVUo9j3L8dwDKVR6i1kvcCUn1ubGGhc2V2M", - "symbol": "SURF", - "name": "Serum Surfers Floor Index", - "decimals": 2, - "logoURI": "https://creator-hub-prod.s3.us-east-2.amazonaws.com/serum_surfers_pfp_1650376607466.gif", - "tags": [ - "fraction-index", - "bridgesplit-fraction", - "serum-surfers", - "fnft" - ], - "extensions": { - "discord": "https://discord.gg/bridgesplit", - "twitter": "https://twitter.com/bridgesplit", - "vault": "https://app.bridgesplit.com/fractions/CP8CaP7GmSVUo9j3L8dwDKVR6i1kvcCUn1ubGGhc2V2M" - } - }, - { - "chainId": 101, - "address": "fLoeAqCfMiS3Uaj6aXSCGhf2ZE9znWz7WjTPCD2Rgnf", - "symbol": "MMCC", - "name": "Meerkats Floor Index", - "decimals": 2, - "logoURI": "https://dl.airtable.com/.attachmentThumbnails/da62eb10c452a9b2a9b768d4aedd13b5/676b0660", - "tags": ["fraction-index", "bridgesplit-fraction", "mmcc", "fnft"], - "extensions": { - "discord": "https://discord.gg/bridgesplit", - "twitter": "https://twitter.com/bridgesplit", - "vault": "https://app.bridgesplit.com/fractions/fLoeAqCfMiS3Uaj6aXSCGhf2ZE9znWz7WjTPCD2Rgnf" - } - }, - { - "chainId": 101, - "address": "2fgYu8vYZhvVsocNM4y4HcrZCCPXYcoo8mZof5hJ3miw", - "symbol": "DRONIES", - "name": "Dronies Floor Index", - "decimals": 2, - "logoURI": "https://dl.airtable.com/.attachments/cfa00eda53df579fda06157ece315602/dc4ab85c/Dronies.gif", - "tags": ["fraction-index", "bridgesplit-fraction", "dronies", "fnft"], - "extensions": { - "discord": "https://discord.gg/bridgesplit", - "twitter": "https://twitter.com/bridgesplit", - "vault": "https://app.bridgesplit.com/fractions/2fgYu8vYZhvVsocNM4y4HcrZCCPXYcoo8mZof5hJ3miw" - } - }, - { - "chainId": 101, - "address": "sRLY3migNrkC1HLgqotpvi66qGkdNedqPZ9TJpAQhyh", - "symbol": "sRLY", - "name": "sRLY (Rally Solana)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/RLYv2ubRMDLcGG2UyvPmnPmkfuQTsMbg4Jtygc7dmnq/logo.png", - "extensions": { - "website": "https://rly.network" - } - }, - { - "chainId": 101, - "address": "GLeHPn4ZqRvAqN9LVDeWrcUtNi7YtQs3oewz7aFfngwG", - "symbol": "WLNINJAS", - "name": "WL token BCNinjas Generation 2", - "decimals": 0, - "logoURI": "https://i.ibb.co/JkT8swM/2.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "Hyko95PcrPNcvYugHcHsD9UBk47ckEoe1S9TED4xwGme", - "symbol": "ENTROPY", - "name": "ENTROPY CASES DEFINITION", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/AlainJSP/crypto/main/EntropyNFT.png", - "tags": [ - "utility-token", - "art-token", - "business-token", - "financial-token", - "monetary-token", - "currency-token" - ] - }, - { - "chainId": 101, - "address": "5NDSgbvRxNwZUgwcTDZRBxfYgAGwRxYhYahhRRvXsAmT", - "symbol": "NNT", - "name": "NiceNewToken", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5NDSgbvRxNwZUgwcTDZRBxfYgAGwRxYhYahhRRvXsAmT/NNTlogo.svg", - "tags": ["utility-token", "community-token"] - }, - { - "chainId": 102, - "address": "iT6Rzh8BRP9GMevCXDAvuKsLPp4Gp5rfP422P8vJk9Q", - "symbol": "mo", - "name": "moso-token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/MoneshROR/icury_token/main/logo.png", - "tags": ["art-token", "business-token", "financial-token"] - }, - { - "chainId": 101, - "address": "8u3o8FJ2YAQLWdUrGg8C7YYXgdpspjf7NLUBtUqQUFgq", - "symbol": "WAGBULL", - "name": "WAGBULL", - "decimals": 9, - "logoURI": "https://rawcdn.githack.com/okaybulls/token/fb8f19a8139c0be093815f0b9fc0ff80133c0e36/token.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "49AAjXJMHqEHKkEhZfHVmtB6YYGRkrmQYZqkCYPGhDS5", - "symbol": "PMGK", - "name": "PaulMcG Koin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Grit-Dev/crypto1/main/TryTwo(1).png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2owxEk5TBpRKwt8N1hTG6w52XqRBDj85s5fzU8Kcfwu1", - "symbol": "REPUB1", - "name": "NFT OF THE UNIVERSAL SOVEREIGN REPUBLICS", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/AlainJosephStephanePainchaud/crypto2/main/RepublicToken..png", - "tags": [ - "art-token", - "financial-token", - "monetary-token", - "educational-token", - "project-token" - ], - "extensions": { - "description": "Universal Sovereign Republics have been founded in the atomic vacuum on April 15th, 2013 by Dr. AJSP", - "twitter": "https://twitter.com/RepubSouveraine", - "website": "https://www.republiquesouveraine.org" - } - }, - { - "chainId": 101, - "address": "5t8Z73FYA3qH8Q9jkvAT32dpia8HT6e4gojJzQ8Hx1jP", - "symbol": "PCHC", - "name": "PEACHCOIN", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5t8Z73FYA3qH8Q9jkvAT32dpia8HT6e4gojJzQ8Hx1jP/logo.png", - "tags": ["community-token", "PEACHCOIN"], - "extensions": { - "website": "https://peachcoin.net/" - } - }, - { - "chainId": 101, - "address": "5AnEGwYSHhdJiBQ1p2UkhjNw9LgnhDXEN2GMgQqmobFD", - "symbol": "BLUG", - "name": "Blue Ghost", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/RioDroid/crypto1/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9dbktd9NRs4qyqP4sr91WzbXqWX3Mfu7fbgCgn6QFdqJ", - "symbol": "PXRWL", - "name": "Pixel Racers WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9dbktd9NRs4qyqP4sr91WzbXqWX3Mfu7fbgCgn6QFdqJ/6e062aaf-12fe-4758-8430-12e069091298.png", - "tags": ["utility-token"], - "extensions": { - "discord": "http://discord.gg/sJyp4gMGJD", - "twitter": "https://twitter.com/pixelracersnft", - "website": "https://pixelracers.io/" - } - }, - { - "chainId": 101, - "address": "Tokn8FgLAGUBpWScUHfWf6HUB372CM5bZczpv7uC4me", - "symbol": "EH", - "name": "Empty Header Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Tokn8FgLAGUBpWScUHfWf6HUB372CM5bZczpv7uC4me/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "description": "Empty Headers is a wide collection of NFTs on Solana Blockchain.", - "twitter": "https://twitter.com/emptyheadernft", - "website": "https://emptyheader.com" - } - }, - { - "chainId": 101, - "address": "FF75evgj5bFWiBuu9MfLF54imFo8ypSYwfC6xQSiKYcJ", - "symbol": "MBOT", - "name": "MBOT Mint PassToken", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FF75evgj5bFWiBuu9MfLF54imFo8ypSYwfC6xQSiKYcJ/logo.png", - "tags": ["WL-token"] - }, - { - "chainId": 101, - "address": "AttCypPTiTgGpxeHYeFZ6dTwZqd1iqf5MPoG12TQrf1C", - "symbol": "HTO", - "name": "Heaven Land Metaverse", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/htoHLBJV1err8xP5oxyQdV2PLQhtVjxLXpKB7FsgJQD/logo.png", - "tags": ["utility-token", "governance-token", "metaverse"], - "extensions": { - "twitter": "https://twitter.com/heavenland_io", - "website": "https://heavenland.io/" - } - }, - { - "chainId": 101, - "address": "CMHrkMFNNqdQNYEyMQK4FEV5nf4xgxkH1aUvRizdsnha", - "symbol": "VTest", - "name": "VTest (VAHA test coin)", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CMHrkMFNNqdQNYEyMQK4FEV5nf4xgxkH1aUvRizdsnha/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://global.vaha.com/" - } - }, - { - "chainId": 101, - "address": "CALusHembJf3tQ69BxFbLRUSpGRwKzEnLKWUPhQo5dFk", - "symbol": "calUSD", - "name": "calUSD Stablecoin", - "decimals": 9, - "logoURI": "https://user-images.githubusercontent.com/8619106/167318344-e9ea9147-8969-4818-877c-5c75de10aecc.png", - "tags": ["stablecoin"], - "extensions": { - "discord": "https://discord.com/invite/Me2zTTdQpu", - "medium": "https://medium.com/@CalciferFinance", - "twitter": "https://twitter.com/CalciferFi", - "website": "https://calcifer.fi/" - } - }, - { - "chainId": 103, - "address": "F8hUpNakKw4i8aqGASTbLZUVR4uJ1tFHFCiMi8Wc5HbY", - "symbol": "W$", - "name": "W Token For Testing", - "decimals": 9, - "logoURI": "https://imgur.com/a/homEoCO", - "tags": ["social-token"], - "extensions": { - "description": "W token top top top", - "github": "https://github.com/ayumi760405" - } - }, - { - "chainId": 101, - "address": "SPLFjZvdxzVW5pHbXWhUdDSumyN38Ep3pCGWqzSfiuG", - "symbol": "SPLIFF", - "name": "SPLIFF", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SPLFjZvdxzVW5pHbXWhUdDSumyN38Ep3pCGWqzSfiuG/logo.jpg", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "BqZdsThwaCLRbhDkszc6dRommQtPeEyfmYgWpiALku9o", - "symbol": "TMK", - "name": "Tamaki", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BqZdsThwaCLRbhDkszc6dRommQtPeEyfmYgWpiALku9o/logo.png", - "tags": ["utility-token", "governance-token"], - "extensions": { - "twitter": "https://twitter.com/TamakiApes" - } - }, - { - "chainId": 101, - "address": "ri3iwFvNLQXsVrP7uWcxUxtuYVVgnR6Nrm8mU5jrgkc", - "symbol": "CTH", - "name": "CRYPTO TREASURE HUNTER", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/BLMcrypto/token-list/main/assets/mainnet/ri3iwFvNLQXsVrP7uWcxUxtuYVVgnR6Nrm8mU5jrgkc/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4BU2ZbCiRv8NRg59qt55XEo3WqWpZC6dmtV4yc9Xsxo8", - "symbol": "DTC", - "name": "Damoov TravellingCoin", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/VorobevSA/solana-token-image-storage/main/assets/mainnet/4BU2ZbCiRv8NRg59qt55XEo3WqWpZC6dmtV4yc9Xsxo8/DamoovTravellingCounts.png", - "tags": ["utility-token"], - "extensions": { - "github": "https://github.com/Mobile-Telematics", - "website": "https://www.damoov.com" - } - }, - { - "chainId": 101, - "address": "4Ca87EUd63nMymw3AdeH3YZhiCTV3rLLBu8tNcR1CRFW", - "symbol": "DEC", - "name": "Damoov EcoCoin", - "decimals": 2, - "logoURI": "https://github.com/VorobevSA/solana-token-image-storage/blob/main/assets/mainnet/4Ca87EUd63nMymw3AdeH3YZhiCTV3rLLBu8tNcR1CRFW/DamoovEcoDrivingCoin.png", - "tags": ["utility-token"], - "extensions": { - "github": "https://github.com/Mobile-Telematics", - "website": "https://www.damoov.com" - } - }, - { - "chainId": 101, - "address": "BoyBCgc8uupc1J6v9po4zP6WEyuUWgZjJMMLS3oMmfH1", - "symbol": "DDC", - "name": "Damoov DriveCoin", - "decimals": 2, - "logoURI": "https://github.com/VorobevSA/solana-token-image-storage/blob/main/assets/mainnet/BoyBCgc8uupc1J6v9po4zP6WEyuUWgZjJMMLS3oMmfH1/DamoovDrivecoin.png", - "tags": ["utility-token"], - "extensions": { - "github": "https://github.com/Mobile-Telematics", - "website": "https://www.damoov.com" - } - }, - { - "chainId": 101, - "address": "5cR6hJJbtV4d14aAtwSeW2oNk8CrCAZphkhXbS45edxH", - "symbol": "DSC", - "name": "Damoov SafeCoin", - "decimals": 2, - "logoURI": "https://github.com/VorobevSA/solana-token-image-storage/blob/main/assets/mainnet/5cR6hJJbtV4d14aAtwSeW2oNk8CrCAZphkhXbS45edxH/DamoovSafecoin.png", - "tags": ["utility-token"], - "extensions": { - "github": "https://github.com/Mobile-Telematics", - "website": "https://www.damoov.com" - } - }, - { - "chainId": 101, - "address": "34n9iy2ZiTvVzsC8EFJtKV3SwtG3wv8obUsWHZ5JeFyg", - "symbol": "JKBC", - "name": "JokubasCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/JokubasGaid/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CurZY9UonzDNmDfB9SgjYAJz2hj6Kx4VYLLkzGozJfJB", - "symbol": "MWTK", - "name": "Meraki WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Robby3082/test-token/main/merakitoken.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "5e2fjEHEMn2SrAqdUAvSPc5LPK1GC5abfXn4di6Cvapg", - "symbol": "MLR", - "name": "Meliora", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5e2fjEHEMn2SrAqdUAvSPc5LPK1GC5abfXn4di6Cvapg/meliora.jpg", - "tags": ["carbon-offset"], - "extensions": { - "description": "MLR is used for transaction data storage. All transactions are happening through Meliora - a carbon offset marketplace", - "website": "https://melioraapp.com" - } - }, - { - "chainId": 101, - "address": "ACWkwWhjZE4JZZpcbMawQ7D5GZHnh1U3aQ5epZTxwQ2b", - "symbol": "EMBA", - "name": "Ember", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ACWkwWhjZE4JZZpcbMawQ7D5GZHnh1U3aQ5epZTxwQ2b/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/LadderCaster", - "website": "https://laddercaster.com/" - } - }, - { - "chainId": 101, - "address": "31RdZYE4qNMxy64gq252PHxH9eNmLVJ4oRX4g3zTpAgt", - "symbol": "FRO", - "name": "Frosty", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/31RdZYE4qNMxy64gq252PHxH9eNmLVJ4oRX4g3zTpAgt/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/LadderCaster", - "website": "https://laddercaster.com/" - } - }, - { - "chainId": 101, - "address": "5J3Pa7uXZvxL1pn18hq5rnK7h2ASQHknYuFB8fGsabaZ", - "symbol": "ROOT", - "name": "Root", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5J3Pa7uXZvxL1pn18hq5rnK7h2ASQHknYuFB8fGsabaZ/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/LadderCaster", - "website": "https://laddercaster.com/" - } - }, - { - "chainId": 101, - "address": "9CWCftESNbotd1vwDbzgeBL1JphShcCGEzFZtygTFLxM", - "symbol": "CC", - "name": "Clown Collective Token", - "decimals": 2, - "logoURI": "https://metadata.clowncollective.io/cc-wl-logo.png", - "tags": ["utility-token"], - "extensions": { - "github": "https://github.com/Clowncollective", - "twitter": "https://twitter.com/ClownColl3ctive", - "website": "https://www.clowncollective.io" - } - }, - { - "chainId": 101, - "address": "NortQGrHwSajv5dfeCdQp6tbrccPtH9Bt8jcu9GDp9v", - "symbol": "NORTHMAN", - "name": "The Northman Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/NortQGrHwSajv5dfeCdQp6tbrccPtH9Bt8jcu9GDp9v/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/TheNorthmanNFT" - } - }, - { - "chainId": 101, - "address": "866Z6snjQuaAzs6gubHJwPQso6jCrPHrZCY7GqoFVAEE", - "symbol": "cstlUSDC", - "name": "Castle Vault USDC LP", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/castle-finance/castle-lp-token-list/main/assets/mainnet/866Z6snjQuaAzs6gubHJwPQso6jCrPHrZCY7GqoFVAEE/icon.png", - "tags": ["lp-token"], - "extensions": { - "twitter": "https://twitter.com/CastleFinance", - "website": "https://app.castle.finance/vault/3tBqjyYtf9Utb1NNsx4o7AV1qtzHoxsMXgkmat3rZ3y6" - } - }, - { - "chainId": 101, - "address": "9ET2QCQJdFkeKkuaampNbmicbA8eLYauFCWch9Ddh9p5", - "symbol": "CTI", - "name": "ClinTex CTI", - "decimals": 9, - "logoURI": "https://clintex.io/cti_sml.png", - "tags": ["utility-token"], - "extensions": { - "description": "ClinTex CTI: Clinical Trials Intelligence.", - "twitter": "https://twitter.com/ClinTexCTi", - "website": "https://clintex.io/" - } - }, - { - "chainId": 101, - "address": "Gu2ouFDwgFzwHSWqNQmfNxu2wcKkPwaVh4yWewzD3rb6", - "symbol": "SLNDWL", - "name": "Soland Presale Whitelist", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/scarceproject/crypto/main/logo-soland.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "yYR3HA3XZ3r474YSrS5i1uSkxHeKjSBXZQKQeJDQr5n", - "symbol": "$MGK", - "name": "Magiken", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/BlackFlame94/Magicards/main/logo.png", - "tags": ["gaming", "nfts", "utility-token", "community-token"] - }, - { - "chainId": 101, - "address": "Ac2kit8FHmzSK6Xkvsk5UTAL3cwVfbppvcWAGYdVCQnU", - "symbol": "ONYX", - "name": "ONYX", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ferasawadi/onyx-assets/main/onyx-logo.png", - "tags": ["community-token", "utility-token"] - }, - { - "chainId": 101, - "address": "WLTu66hPZSdCBjH86zkdv8Q3a1HWZvgsYU995a5JWCt", - "symbol": "MUNSTER", - "name": "DopeMunsterz WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WLTu66hPZSdCBjH86zkdv8Q3a1HWZvgsYU995a5JWCt/logo.png", - "tags": ["whitelist"], - "extensions": { - "description": "Each token gives you access to buy a DopeMunster", - "discord": "https://discord.com/invite/WBAkPTmv", - "twitter": "https://twitter.com/DopeMunsterz" - } - }, - { - "chainId": 101, - "address": "HVVS4QVsYwLL7LuvzU5V6Qbot5DjtKYcewaugHEN1gAP", - "symbol": "BUCKS", - "name": "Meta Bucks", - "decimals": 9, - "logoURI": "https://github.com/ArthurPaivaT/token-list/blob/main/assets/mainnet/HVVS4QVsYwLL7LuvzU5V6Qbot5DjtKYcewaugHEN1gAP/logo.png?raw=true" - }, - { - "chainId": 101, - "address": "KiDzL41CLQ2A8Jv9civn6xeGZaV5vbZBJG8SqqyTbhK", - "symbol": "trippykids", - "name": "trippy kidz Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/KiDzL41CLQ2A8Jv9civn6xeGZaV5vbZBJG8SqqyTbhK/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/TrippyKidzNFT" - } - }, - { - "chainId": 101, - "address": "TRENpVRAR9LiZgyYv9zWrQwYqSHa7ThCYdbpFCJixj1", - "symbol": "TREN", - "name": "Trenbolone", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/TRENpVRAR9LiZgyYv9zWrQwYqSHa7ThCYdbpFCJixj1/logo.png", - "tags": ["social-token", "utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/YokedYetis" - } - }, - { - "chainId": 101, - "address": "9TFB5m9EKKGSqRqGiohTv6bGAWCFVNqossmjzQohL9N8", - "symbol": "MPTKN", - "name": "WyvernLabs Mint Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Robby3082/test-token/main/redwyvernlabs.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "3LE7aFahiHN3rLzuLYAL9HeDgiwp1oX1Sg69ZTX8Z61b", - "symbol": "OGTKN", - "name": "WyvernLabs OG Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Robby3082/test-token/main/pinkwyvernlabs.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "8kazth76gv4CyufQLiNmYVQVnascfSMjQ4m168ZRsWg5", - "symbol": "WLTKN", - "name": "WyvernLabs WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Robby3082/test-token/main/purplewyvernlabs.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "7BTQFmXVZZwwRratNKNpohsLsj4FnCQVQmtY4AR1KgyA", - "symbol": "FGAUTH", - "name": "Flaming Galah Mint Token", - "decimals": 0, - "logoURI": "https://galah.community/src/img/v1/auth_token.png", - "tags": ["whitelist-token", "security-token"], - "extensions": { - "description": "A token allowing you to mint a Flaming Galah and join the Galah DAO.", - "discord": "https://discord.gg/J8Hmep7ZCY", - "instagram": "https://www.instagram.com/flaming.galahs/", - "twitter": "https://twitter.com/GalahDAO", - "website": "https://galah.community/" - } - }, - { - "chainId": 101, - "address": "ykTEJEezJRBFx5FyWA3X2hRnWjg9C31ZbZDYHWS8yAa", - "symbol": "SDC", - "name": "Safe Driving Coin", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5cR6hJJbtV4d14aAtwSeW2oNk8CrCAZphkhXbS45edxH/DamoovSafeCoin.png", - "tags": ["utility-token"], - "extensions": { - "github": "https://github.com/Mobile-Telematics", - "website": "https://www.damoov.com" - } - }, - { - "chainId": 101, - "address": "AteG8TcRrukZh76yknzY1RkHxGPeG9P1YUgfjxCjg59M", - "symbol": "EDC", - "name": "ECO Driving Coin", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4Ca87EUd63nMymw3AdeH3YZhiCTV3rLLBu8tNcR1CRFW/DamoovEcoDrivingCoin.png", - "tags": ["utility-token"], - "extensions": { - "github": "https://github.com/Mobile-Telematics", - "website": "https://www.damoov.com" - } - }, - { - "chainId": 101, - "address": "CvbLKTnBB9zcZHe3P8MDNTMEoMYFcEf16j1YEiSDPJF3", - "symbol": "PDC", - "name": "Performance Driving Coin", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4BU2ZbCiRv8NRg59qt55XEo3WqWpZC6dmtV4yc9Xsxo8/DamoovTravellingCoin.png", - "tags": ["utility-token"], - "extensions": { - "github": "https://github.com/Mobile-Telematics", - "website": "https://www.damoov.com" - } - }, - { - "chainId": 101, - "address": "8S2ASX2WteonH3bgzgmCpbeQ58kzNVpyeinG71xEWtbW", - "symbol": "DRC", - "name": "Drivecoin", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BoyBCgc8uupc1J6v9po4zP6WEyuUWgZjJMMLS3oMmfH1/DamoovDriveCoin.png", - "tags": ["utility-token"], - "extensions": { - "github": "https://github.com/Mobile-Telematics", - "website": "https://www.damoov.com" - } - }, - { - "chainId": 101, - "address": "BVzXdyYVJPXZuEGnQE5Qb2gzFJHcqTfpvPUvvhDkFqe4", - "symbol": "ICY", - "name": "icury", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/prakash-syndy/icury-token/main/logo-icury.png", - "tags": ["icecat-token"], - "extensions": { - "website": "https://www.icury.com" - } - }, - { - "chainId": 103, - "address": "BiTkfYDcjCPQu1NsVo5AH7SaNT7tZ37zKcZtc5G4KQ7B", - "symbol": "vslcard", - "name": "VSL Car D Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/vietsaclo/Rust.Solana.Tutorial/develop/install-01/vslcard.svg", - "tags": ["stablecoin"] - }, - { - "chainId": 101, - "address": "MELTC3bafNmWRvUNrFm86aWgyDH7sHPz4L8575tVLmH", - "symbol": "MLWL", - "name": "MELT LABS WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/MELTC3bafNmWRvUNrFm86aWgyDH7sHPz4L8575tVLmH/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/MeltLabs" - } - }, - { - "chainId": 101, - "address": "EeiNMyKPDUhdkc8xDupMgMgnSos4GNc7RtLy8S1HB1tq", - "symbol": "BOOGY", - "name": "Boogy Token", - "decimals": 9, - "logoURI": "https://github.com/ArthurPaivaT/token-list/blob/main/assets/mainnet/EeiNMyKPDUhdkc8xDupMgMgnSos4GNc7RtLy8S1HB1tq/logo.png?raw=true" - }, - { - "chainId": 102, - "address": "DnVRxspeQ6Hy3PjfA1JkTDAUcHrf5cvBf2MG5hMLBXJB", - "symbol": "ULT", - "name": "UALIT", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/oklitovchenko/logos/main/png/ualit.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "GU3eBCktj187ior5PMUzWRn14NZvE2z3W5siEzkuNaaE", - "symbol": "BWRO", - "name": "Bawer Online", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Bawer1077/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "NFTUcWc3R1cGzpsh9UzGeKnVeXDTJQjRVL6wUM9Qt98", - "symbol": "NFTU", - "name": "NFTU", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/NFTUcWc3R1cGzpsh9UzGeKnVeXDTJQjRVL6wUM9Qt98/logo.png", - "tags": ["utility-token", "NFTU", "DAPG", "Dappio"] - }, - { - "chainId": 101, - "address": "BDMW2XP4ZJt6hB8CDKrVWb6kSP1wApf3x9on3Rkp7PAi", - "symbol": "WUWD", - "name": "Wulfwaerd Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Mhaug80/Crypto/main/Earth.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "tEArpddkwAQKkCd4jcWqSDp2w1aejGkwSrUu7gjQRPc", - "symbol": "TEAR", - "name": "Tear", - "decimals": 9, - "logoURI": "https://arweave.net/rPlrQvCvaSANJ6u6rPjo9tH5WwCRubgSmPeE9Q-zqus", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/eyeguysocialclb", - "website": "https://www.eyeguysocialclub.com/" - } - }, - { - "chainId": 101, - "address": "BridfBr4ye3KJP8KjCdt72NkBnyQ1NbpPPN3Z7RtHZUN", - "symbol": "Birdged", - "name": "The Bridged Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BridfBr4ye3KJP8KjCdt72NkBnyQ1NbpPPN3Z7RtHZUN/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/TheFracture_" - } - }, - { - "chainId": 101, - "address": "F5tmDpUQaH8QKpv5LihZnfcmMoKtB1HZxyzEfBgLJeaN", - "symbol": "GNOWL", - "name": "Crypto Gnomes WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/F5tmDpUQaH8QKpv5LihZnfcmMoKtB1HZxyzEfBgLJeaN/logo.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "69mPSwgv1jC2SfXP1xNKTQr4GhAaEEQubdtFWe8yT5EB", - "symbol": "VRX", - "name": "VirtX Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/69mPSwgv1jC2SfXP1xNKTQr4GhAaEEQubdtFWe8yT5EB/logo.png", - "tags": ["Metaverse", "utility-token"] - }, - { - "chainId": 101, - "address": "Fc7RRrbXEbrL2KyCiKbd1BiStWuGpxPXHYotTvvoSYYC", - "symbol": "JUN", - "name": "Juniverse Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Fc7RRrbXEbrL2KyCiKbd1BiStWuGpxPXHYotTvvoSYYC/logo.png", - "tags": ["governance-token"] - }, - { - "chainId": 101, - "address": "9XL58QrV9ZQHVeyq8tUvByJDjmDz65geCBiRPcnTtPCq", - "symbol": "GLKV", - "name": "Gullkorv Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/OAlRa/glkv/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8M7ngdTiASGintaxxpTfutU36tAi98TGGiA3ndGehQmw", - "symbol": "SPNS", - "name": "SpoonsCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Midwaymodder/crypto/main/SPNSlogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EuttjwkfdDAfF1KoUuLAafC7bsH4du1P7WQKqyvT9757", - "symbol": "WARI", - "name": "Opportunities NFTs", - "decimals": 9, - "logoURI": "https://github.com/MatheusWells/token-list/blob/main/assets/mainnet/EuttjwkfdDAfF1KoUuLAafC7bsH4du1P7WQKqyvT9757/logo.png?raw=true", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "DpsZg8zMTsdycpikKgYXbZ5FsztBeBiFue2ZgVFErCLs", - "symbol": "AKELANS", - "name": "AKELANS", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DpsZg8zMTsdycpikKgYXbZ5FsztBeBiFue2ZgVFErCLs/logo.png", - "tags": ["meme-token", "community-token"], - "extensions": { - "discord": "https://discord.gg/Me72Wkq2ce", - "twitter": "https://twitter.com/Akelasolana", - "website": "https://akelatoken.com/" - } - }, - { - "chainId": 101, - "address": "8txs8CweQjWqiJS9hzYuuisDNfHb8EL4TCkTLUxrZ2WP", - "symbol": "SHRED", - "name": "Shred Threads Token", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/JHockman43/Shred-Threads-Project/main/ST%20logo%20520.png", - "tags": ["NFT-token", "community-token", "payment-token"], - "extensions": { - "discord": "https://discord.com/invite/ZEWbK8PFXy", - "instagram": "https://www.instagram.com/shredthreadsnft/", - "twitter": "https://twitter.com/ShredThreadsNFT", - "website": "https://www.shredthreadsnfts.com/" - } - }, - { - "chainId": 101, - "address": "7G3Nzr99ePGSnABp8uSzpQnQGUaWpj2RohRynMtqiuzZ", - "symbol": "$KOHOLA", - "name": "KOHOLA", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/farhan067/koholaToken/main/logo.jpg", - "extensions": { - "twitter": "https://twitter.com/Fut_Whale" - } - }, - { - "chainId": 101, - "address": "8uTnKtEXxdfoJWN9md4dEgBvTYq1S9WsCtLUgZuMk5eU", - "symbol": "SCAM", - "name": "SCAM TOKEN PLEASE IGNORE", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/tokenauth/xnft-token/main/logo/logo.png", - "tags": ["community-token", "NFT-token", "utility-token"] - }, - { - "chainId": 101, - "address": "DVFS3CY1VEneDm3zMUZwi5b9ZLk4oJP3UuLpxRYEMywp", - "symbol": "AYK", - "name": "AYAKO Whitelist Token", - "decimals": 0, - "logoURI": "https://i.postimg.cc/XN1xtY1C/5ape-Sn-Ur-400x400.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/Ayako_sol", - "website": "http://ayako-sol.com/" - } - }, - { - "chainId": 101, - "address": "SwiMNJ49SxkqMaVWLGGVRH25kE5dBnD2RQoiQUnKtMC", - "symbol": "xSWIM", - "name": "Swim Staked SWIM", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SwiMNJ49SxkqMaVWLGGVRH25kE5dBnD2RQoiQUnKtMC/logo.svg", - "tags": ["utility-token"], - "extensions": { - "blog": "https://blog.swim.io", - "discord": "https://discord.gg/wGrxQ7GAgP", - "telegram": "https://t.me/joinchat/Mnc1WjrKcq8yYTM1", - "twitter": "https://twitter.com/SwimProtocol", - "website": "https://swim.io/", - "whitepaper": "https://swim.io/whitepaper.pdf" - } - }, - { - "chainId": 103, - "address": "SwiMNJ49SxkqMaVWLGGVRH25kE5dBnD2RQoiQUnKtMC", - "symbol": "xSWIM", - "name": "Swim Staked SWIM", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SwiMNJ49SxkqMaVWLGGVRH25kE5dBnD2RQoiQUnKtMC/logo.svg", - "tags": ["utility-token"], - "extensions": { - "blog": "https://blog.swim.io", - "discord": "https://discord.gg/wGrxQ7GAgP", - "telegram": "https://t.me/joinchat/Mnc1WjrKcq8yYTM1", - "twitter": "https://twitter.com/SwimProtocol", - "website": "https://swim.io/", - "whitepaper": "https://swim.io/whitepaper.pdf" - } - }, - { - "chainId": 101, - "address": "FfV1vXZw6bnRLbvuuyySSi5S9pwr1Hs7BbJRKb5oryhQ", - "symbol": "NUGA", - "name": "NUGA", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FfV1vXZw6bnRLbvuuyySSi5S9pwr1Hs7BbJRKb5oryhQ/logo.jpg", - "tags": [ - "tokenomics", - "social-network", - "new-world-order", - "community-token" - ], - "extensions": { - "website": "https://thetribes.io" - } - }, - { - "chainId": 101, - "address": "2w45gq6Q4WrhMaYrKFV9HDb9fjNrs7hWkTnkca4QRw9k", - "symbol": "MPOTION", - "name": "Monsta Potion", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/monstadao/logo/main/monsta-potion.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/monstadao_", - "website": "https://monstadao.com" - } - }, - { - "chainId": 101, - "address": "FF7rjqkufosL6kTxeXum4BxRhhDrrJXp4VcNZ3bwPjUU", - "symbol": "WRB", - "name": "Whitelist Rotten Ville Bust Sculptures", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FF7rjqkufosL6kTxeXum4BxRhhDrrJXp4VcNZ3bwPjUU/LogoRottenVille_Token.png", - "tags": ["whitelist-token", "rv", "ky", "bust-claim"], - "extensions": { - "discord": "https://discord.gg/QeR9yvSWvk", - "twitter": "https://twitter.com/rotten_ville", - "website": "https://rottenville.io" - } - }, - { - "chainId": 103, - "address": "HLPKuGCo5a1xki2N8zt19QiCeRfuy1kHtmc8V2vJQxqt", - "symbol": "UNNJ", - "name": "socialUni", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HLPKuGCo5a1xki2N8zt19QiCeRfuy1kHtmc8V2vJQxqt/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Wave8p5c8mkGk8ekXnwRGaoCk3ApMRQq7AM7KQuJniK", - "symbol": "Wave", - "name": "The wave Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Wave8p5c8mkGk8ekXnwRGaoCk3ApMRQq7AM7KQuJniK/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/ThewavesTech" - } - }, - { - "chainId": 101, - "address": "CftMwm8645rEvpmzHyJuaHFVbUqnAzemjbDYKwfsquss", - "symbol": "RICH", - "name": "deMonopoly game Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CftMwm8645rEvpmzHyJuaHFVbUqnAzemjbDYKwfsquss/logo.png", - "tags": ["NFT-token", "community-token", "payment-token"], - "extensions": { - "discord": "https://discord.com/invite/ZPQMd8G5aa", - "twitter": "https://twitter.com/deMonopolyNFT", - "website": "http://www.demonopoly.fun/" - } - }, - { - "chainId": 103, - "address": "8GzvVqMkLkFp3f24s9Gn9WeCeP65eoJVTqhxZeobZGWR", - "symbol": "TAM", - "name": "Tam Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8GzvVqMkLkFp3f24s9Gn9WeCeP65eoJVTqhxZeobZGWR/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://tam-vn.com/" - } - }, - { - "chainId": 101, - "address": "9uUzFsTmaPXgMmoXvLVgCAwXPxo2zgiXYHN9WrU9BxLx", - "symbol": "DNRG", - "name": "Jin's Divine Energy", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Crypto-G0d/Holy-Energy/main/JinDivineEnergy.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "KomoNuvereGko9jNKUgb3AJZdG3pDaXjbph77ZWvFy1", - "symbol": "KOMO", - "name": "Komoverse Token", - "decimals": 2, - "logoURI": "https://komoverse.io/assets/img/favicon.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/komoverse", - "github": "https://github.com/komoverse", - "instagram": "https://instagram.com/komoverse", - "linkedin": "https://www.linkedin.com/company/komoverse", - "medium": "https://medium.com/@komoverse", - "telegram": "https://t.me/komoverse", - "tiktok": "https://www.tiktok.com/@komoverse", - "twitter": "https://twitter.com/komoverse", - "website": "https://komoverse.io", - "youtube": "https://youtube.com/c/Komoverse" - } - }, - { - "chainId": 101, - "address": "2uYR4bf8FYsW29RV2QpoT7Qv3xbjzEyiov8njassCeR7", - "symbol": "HYPE", - "name": "HYPE Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Salro1g/Token_spl/main/logo.png" - }, - { - "chainId": 102, - "address": "CBzPZ92VgdrXQWGd5gE1x7PXwtMfzf6EM8K1ZTFmSHXr", - "symbol": "BETX", - "name": "BetDEX", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HX7SXjc2D1FDY9pxk2AUaePWp54hkUnyyCLpHYe9CV78/logo.png", - "extensions": { - "twitter": "https://twitter.com/BetDEXLabs", - "website": "https://www.betdex.com/" - } - }, - { - "chainId": 103, - "address": "7rcZJW5TQVcUzRE8aHdHb7woGH7uTqDpj81AroikXXSX", - "symbol": "BETX", - "name": "BetDEX", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HX7SXjc2D1FDY9pxk2AUaePWp54hkUnyyCLpHYe9CV78/logo.png", - "extensions": { - "twitter": "https://twitter.com/BetDEXLabs", - "website": "https://www.betdex.com/" - } - }, - { - "chainId": 103, - "address": "2quyJixqNe3id7TY54vYzhtLYNYLYdfsbbA9nfsoxriF", - "symbol": "BIND", - "name": "BIND", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2quyJixqNe3id7TY54vYzhtLYNYLYdfsbbA9nfsoxriF/BIND.svg", - "extensions": { - "website": "https://bind.com/" - } - }, - { - "chainId": 101, - "address": "5ffMTb6rKYswSfnJM6CYYu5Z6rabLeS7sSHo2KSLRxAc", - "symbol": "TB", - "name": "TwoBits", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Aterzos/two-cents-img/main/twocents-1208151868.jpeg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GRDWJqzoSWNM67uW951wTHftTM7vznnFnugaAzCYM7MA", - "symbol": "GEO", - "name": "Geo", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/GeomyCode/assets/main/icons/geo.png", - "tags": ["utility-token"] - }, - { - "chainId": 103, - "address": "GFfhm8Bt4P5957iDVaMcKjodaFWqxx2CJWLSCnUQY2oB", - "symbol": "BALGR", - "name": "BALGREEN More Balance More Green", - "decimals": 6, - "logoURI": "https://github.com/sparkrisp/balgreen/blob/main/BGREEN_isoLogo_1.png", - "tags": ["ecologic-token"] - }, - { - "chainId": 101, - "address": "CLubYr6VMX5tr1GNaVe1eGTd1stARjiQKmP5hqwC41qD", - "symbol": "CLUB", - "name": "THE CLUB WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CLubYr6VMX5tr1GNaVe1eGTd1stARjiQKmP5hqwC41qD/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/theclubnft" - } - }, - { - "chainId": 101, - "address": "UrbatHbZxMFiHdqLNw2NkjBhqKDEPjrxssuFq4Zuh5e", - "symbol": "UBWLT", - "name": "Urbats WhiteListToken", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/UrbatHbZxMFiHdqLNw2NkjBhqKDEPjrxssuFq4Zuh5e/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "description": "Use this token to participate in the presale of our collection! Keep it in your wallet until the Mint.", - "discord": "https://discord.com/invite/XbPkjgbnUc", - "facebook": "https://www.facebook.com/urbats.io", - "instagram": "https://www.instagram.com/urbats.io/", - "twitter": "https://twitter.com/Urban_Bats", - "website": "https://urbats.io/" - } - }, - { - "chainId": 101, - "address": "B5UrfiGMqqnr9afZP6HNYHjcawQucmzunU4PMo7u93ba", - "symbol": "SIVA", - "name": "SivaCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/sivacoin/logo/main/siva-logo-2k.png", - "tags": ["community-token", "utility-token"], - "extensions": { - "description": "Community engagement reward token (engage2earn)", - "discord": "https://discord.gg/TF2R73RWQt", - "twitter": "https://twitter.com/sivacoin", - "website": "https://siva.gg" - } - }, - { - "chainId": 103, - "address": "CaRbonA6QNTWAKhq1oaH8BVBRyNvYkWYBLb4KqkeQ5jH", - "symbol": "carbon", - "name": "Carbon Credit Coin", - "decimals": 6, - "logoURI": "https://cdn.jsdelivr.net/gh/PurpleZone/NFTs@latest/carbon/carbon-credit.svg", - "tags": [ - "green-coin", - "community-token", - "utility-token", - "colored-token" - ], - "extensions": { - "coingeckoId": "usd-coin", - "description": "Proof of Carbon Sequestration to be used as Carbon credit (unit: 1kg CO2e)", - "imageUrl": "https://bafybeid7dw4tdtbuj5pn4gqlqooajzfaecujcupwzgu2bp6p6z46qlv2g4.ipfs.nftstorage.link/?ext=svg", - "linkedin": "https://www.linkedin.com/company/eco-organic-technology", - "website": "https://PurpleZone.github.io/NFTs/carbon/", - "whitepaper": "https://gateway.ipfs.io/ipns/QmNwPaqvPMZKxEDZB8vr63wTmf5bZ2JocYY7HamWY8ws3E/whitepaper.pdf" - } - }, - { - "chainId": 101, - "address": "GcexYp3KGE8YkpKwaCJKxMFd33Q2xF9ba1RNRrh43sFm", - "symbol": "KUPA", - "name": "Kuta Paisa", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/haider954/kutapaisa/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "p1u2eUjLLm7Q5P3WFhcXF972dsdWdcZ4x6hEyTtNLAb", - "symbol": "LSC", - "name": "LegendCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Legendstyler00/legendcoin/main/lele2.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "E3ph1yXJ6ChaVjeLZzVkGSaVChj7iDzY4YWzwWDTF98T", - "symbol": "MIN", - "name": "Made in Thailand", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/scarceproject/crypto/main/logo-min.png", - "tags": ["utility-token"], - "extensions": { - "facebook": "https://facebook.com/ThailandSuppliers", - "telegram": "https://t.me/made_in_thailand", - "website": "https://www.ezdal.com" - } - }, - { - "chainId": 101, - "address": "spr1yvmfxbPVW9Pn1Nn5uHJzunKXZGLwytSvGgHNv46", - "symbol": "SPRAY", - "name": "SPRAY - Oh My Girls", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/spr1yvmfxbPVW9Pn1Nn5uHJzunKXZGLwytSvGgHNv46/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7F85925Q5RnvyRwbfBd8UQvRW25fMrvFrMErgN3M5wCT", - "symbol": "ASHIRA", - "name": "ashiraCoin", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/ashiraCoin/crypto/main/ashiraCoin%20logo.png", - "tags": ["community-token", "utility-token", "social-token"] - }, - { - "chainId": 101, - "address": "9nGDRoax8XNQow3HLUiZ6JfMGUiS3WDK1fLz8LZ7KCJV", - "symbol": "CC", - "name": "Clown Collective WL Token", - "decimals": 2, - "logoURI": "https://metadata.clowncollective.io/cc-wl-logo.png", - "tags": ["utility-token"], - "extensions": { - "github": "https://github.com/Clowncollective", - "twitter": "https://twitter.com/ClownColl3ctive", - "website": "https://www.clowncollective.io" - } - }, - { - "chainId": 101, - "address": "9STaUry5ZwR214wMqsWEFWXpvseuyWCddFLMLKAMyeG", - "symbol": "$CRYPTID", - "name": "CRYPTID", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/farhan067/cryptidToken/main/logo.jpg", - "extensions": { - "twitter": "https://twitter.com/TheSasquatchnft" - } - }, - { - "chainId": 101, - "address": "HSW6TGC6AeTgRX51Rt8ksbSMzJmC3kGeHeaxyxWGuPwd", - "symbol": "TCOIN", - "name": "TesterCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/qetohotest/test_cryptocurrency_token_solana/main/token_test.png", - "tags": ["test_token", "token_test"] - }, - { - "chainId": 101, - "address": "EUWZ574ghzvs8Yj78QARDq9WQyQYxt1rWGz3dNfTEdqx", - "symbol": "SLP", - "name": "SOLPLUS", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EUWZ574ghzvs8Yj78QARDq9WQyQYxt1rWGz3dNfTEdqx/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3z2vPLw1k9whGwM2KqMMVruKGZmecfEFmeAiXzqhXrUr", - "symbol": "NESTWL", - "name": "Nest Arcade WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3z2vPLw1k9whGwM2KqMMVruKGZmecfEFmeAiXzqhXrUr/logo.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "E1mL8g2pFWcBqR8xM9Z6jM8cyGHTv2cwcv8XbRmpKpLo", - "symbol": "FEHU", - "name": "Fehu", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/E1mL8g2pFWcBqR8xM9Z6jM8cyGHTv2cwcv8XbRmpKpLo/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://valhallavikings.io/" - } - }, - { - "chainId": 101, - "address": "FdviznPoMEakdJ37fikNxhoscyruUHSHNkKyvntSqbuo", - "symbol": "$CATNIP", - "name": "CATNIP", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FdviznPoMEakdJ37fikNxhoscyruUHSHNkKyvntSqbuo/logo.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "discord": "https://discord.gg/WrUgj3BhrN", - "twitter": "https://twitter.com/FatCatsCapital", - "website": "https://fatcatscapital.com" - } - }, - { - "chainId": 101, - "address": "27YTm6d9hbcMAjfahTcMhj1ghBceB18hwEm8C4L38VXS", - "symbol": "PLVS", - "name": "PLVS VLTRA", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/27YTm6d9hbcMAjfahTcMhj1ghBceB18hwEm8C4L38VXS/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/plvsvltra_inv" - } - }, - { - "chainId": 101, - "address": "HawL4cqiNoYdTre8bExsEM3TqrUqigd6YV4fJsNMVEng", - "symbol": "SST", - "name": "Solana Scouts Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HawL4cqiNoYdTre8bExsEM3TqrUqigd6YV4fJsNMVEng/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/solanascouts", - "twitter": "https://twitter.com/SolanaScouts", - "website": "https://solanascouts.io/" - } - }, - { - "chainId": 101, - "address": "AkAF22MXs5xcwH1BineDvrD81sFV1dCuXX5PQzYdko46", - "symbol": "WNDY", - "name": "Wandyclub Social Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AkAF22MXs5xcwH1BineDvrD81sFV1dCuXX5PQzYdko46/logo.png", - "tags": ["social-token"], - "extensions": { - "twitter": "https://twitter.com/wandyclub", - "website": "https://www.wandyclub.com" - } - }, - { - "chainId": 101, - "address": "Fr5PGegS78PVfXAKNdxBv2NqWSvropf28xhnhDmwP9V5", - "symbol": "BYUL", - "name": "ByulCoin", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Fr5PGegS78PVfXAKNdxBv2NqWSvropf28xhnhDmwP9V5/logo.png", - "tags": ["community-token", "ByulCoin"], - "extensions": { - "website": "http://star-nft.co.kr/" - } - }, - { - "chainId": 101, - "address": "WLTQmV3VDxgUqvEPyBv3nCCMdfkV2b92yC4KRtvZajN", - "symbol": "LPWLT", - "name": "Lion Pride Collective Whitelist Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WLTQmV3VDxgUqvEPyBv3nCCMdfkV2b92yC4KRtvZajN/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "discord": "https://t.co/te0ypLTUGO", - "medium": "https://medium.com/@lionprideclub", - "telegram": "https://t.me/LionPrideClub", - "twitter": "https://twitter.com/LionPrideClub", - "website": "https://lionprideclub.io/" - } - }, - { - "chainId": 101, - "address": "ELXgUrK1F8hoVzcrE5HD8bTJn1QZ9mGWMA9dM4kpEaJX", - "symbol": "KME", - "name": "Kamen Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ELXgUrK1F8hoVzcrE5HD8bTJn1QZ9mGWMA9dM4kpEaJX/logo.svg", - "tags": ["utility-token", "community-token"], - "extensions": { - "discord": "https://discord.com/invite/kamennft", - "instagram": "https://www.instagram.com/kamennft/", - "twitter": "https://twitter.com/kamen_nft", - "website": "https://www.kamennft.com/" - } - }, - { - "chainId": 101, - "address": "GUn2MnTKac8wUCm9TroPtcPhFz9eQQe8W3kSu3oAA6Yx", - "symbol": "BYL", - "name": "BYUL", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GUn2MnTKac8wUCm9TroPtcPhFz9eQQe8W3kSu3oAA6Yx/logo.png", - "tags": ["community-token", "BYULCOIN"], - "extensions": { - "website": "http://star-nft.co.kr/" - } - }, - { - "chainId": 101, - "address": "3GhLNM5EuuuBPZyMRweMbGgMWaVdA5YpLWU1NRAERi6d", - "symbol": "LITIT", - "name": "litit", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3GhLNM5EuuuBPZyMRweMbGgMWaVdA5YpLWU1NRAERi6d/lit.it-token-logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://lit.it" - } - }, - { - "chainId": 101, - "address": "5vRFqzW3pkw2bcjaVwM3Sdzhnf3Czg67a2L3iDKbY78n", - "symbol": "VRKWL", - "name": "vrakka WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5vRFqzW3pkw2bcjaVwM3Sdzhnf3Czg67a2L3iDKbY78n/logo.png", - "tags": ["WL-token"] - }, - { - "chainId": 101, - "address": "WLTJb89azAxv6wiPM2yGR1v6CLEoEkSrC1C5JqgsF5h", - "symbol": "LIONWLT", - "name": "Lion Pride NFT Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WLTJb89azAxv6wiPM2yGR1v6CLEoEkSrC1C5JqgsF5h/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "discord": "https://t.co/te0ypLTUGO", - "medium": "https://medium.com/@lionprideclub", - "telegram": "https://t.me/LionPrideClub", - "twitter": "https://twitter.com/LionPrideClub", - "website": "https://lionprideclub.io/" - } - }, - { - "chainId": 101, - "address": "42EcKSvDBQrezYudAF8DHGwDzU677kYkJMJqWKtaKiyh", - "symbol": "SUN", - "name": "SUN COIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/femi-taiwo/token-list/main/assets/mainnet/42EcKSvDBQrezYudAF8DHGwDzU677kYkJMJqWKtaKiyh/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/sfA67huhJ4", - "website": "https://thedreammakersclub.com/" - } - }, - { - "chainId": 101, - "address": "828oFZuUAtisZ1n17DEH2yys9foTXgJz7xqZj9YwGubu", - "symbol": "ANTLER", - "name": "antler", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/828oFZuUAtisZ1n17DEH2yys9foTXgJz7xqZj9YwGubu/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Utility token for the Loose Moose Crew ecosystem", - "discord": "https://discord.gg/loosemoosecrew", - "twitter": "https://twitter.com/LooseMooseCrew", - "website": "https://loosemoosecrew.com" - } - }, - { - "chainId": 101, - "address": "HRdi71vK23SRF4V5G1SnpNQFSNrnkbyeRsiwj4HWC7Fe", - "symbol": "BLD", - "name": "Blood Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HRdi71vK23SRF4V5G1SnpNQFSNrnkbyeRsiwj4HWC7Fe/logo.png", - "extensions": { - "twitter": "https://twitter.com/UndeadSols" - } - }, - { - "chainId": 101, - "address": "3TspxMnkVCMZbJyz4TPj7i7tKVdUbCs9pGidQXqqUJSB", - "symbol": "CORNY", - "name": "CORN COB COIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/tseibel/crypto/main/corn_square.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GLitgDLt6T4HNpo2CTcaWeCqZLhKNneTgvyPPnckd9bA", - "symbol": "GLIT", - "name": "Glitch", - "decimals": 9, - "logoURI": "https://github.com/MatheusWells/token-list/blob/main/assets/mainnet/GLitgDLt6T4HNpo2CTcaWeCqZLhKNneTgvyPPnckd9bA/logo.png?raw=true", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "42QCiaETY8Xobnky47bRGr7K4pudAVr4nqgMMZfSZKEB", - "symbol": "THEIR", - "name": "Test HEIR Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/42QCiaETY8Xobnky47bRGr7K4pudAVr4nqgMMZfSZKEB/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "EwKzqVEaE3H6YBA16pndGzN7zWiMLZWbrzwWvseUSeeD", - "symbol": "GCAC", - "name": "GavCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/DjBigG122/new-crypto-logo/main/crypto-logo-min.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "BTCG4EGjivgfgnfKfkqgZkDXuj5KdTeWuJsEGFFzkjai", - "symbol": "btc-g", - "name": "Greener Bitcoin", - "decimals": 8, - "logoURI": "https://cdn.jsdelivr.net/gh/PurpleZone/NFTs@latest/btcg/btc-g.svg", - "tags": [ - "green-coin", - "community-token", - "utility-token", - "colored-token" - ], - "extensions": { - "coingeckoId": "bitcoin", - "description": "Greening cryptocurrencies one coin at a time", - "imageUrl": "https://bafybeiakx66r7u5u5sxi24b25k4y5qm6zhpyuetocphl7kfcs4yij6zjgy.ipfs.nftstorage.link/?ext=svg", - "telegram": "https://t.me/cryptolake2", - "website": "https://PurpleZone.github.io/NFTs/btcg/", - "whitepaper": "https://gateway.ipfs.io/ipns/QmUs6X2QHrPSAW9mZYtHGNCDjMDWTk7cg3EiEQ1Ao4PvL9/whitepaper.pdf" - } - }, - { - "chainId": 101, - "address": "JCS2Fd7QwmXFR4pbeHCtsY4aCuzm6PMgb3nctK513svU", - "symbol": "FALK", - "name": "Falko Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/FALKO99/FALKO/main/FALKO.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "PPP3KgQo2Vs5MkqpKHTH3H9BorCh1EYwt7cnjjavthL", - "symbol": "trippykid", - "name": "Trippykidz Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/PPP3KgQo2Vs5MkqpKHTH3H9BorCh1EYwt7cnjjavthL/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/TrippyKidzNFT" - } - }, - { - "chainId": 101, - "address": "DkfTo5ozVuzn8ge8pxXdSA7auHWAtn5VzwoXV4dvXuii", - "symbol": "HC", - "name": "Hurel Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/martinhurel/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 102, - "address": "gr6V8YHjagNd4DvTBMrHY14GTu4b9CdFegQ7oCkvVNM", - "symbol": "EZT", - "name": "EZT Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/gr6V8YHjagNd4DvTBMrHY14GTu4b9CdFegQ7oCkvVNM/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "http://www.ezhigh.co.kr" - } - }, - { - "chainId": 101, - "address": "1ZKwykzoyXHKZdayRAJHQ7ZY8fcZrfmwhuwPLxKdEW3", - "symbol": "DHL", - "name": "Diamond Hand: Legends Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/1ZKwykzoyXHKZdayRAJHQ7ZY8fcZrfmwhuwPLxKdEW3/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/dhlegends", - "website": "https://www.diamondhandlegends.com" - } - }, - { - "chainId": 101, - "address": "2Brf6wicHUX2MKkGxFdpCMaSuwZdgkikDfTCx9Vzauzk", - "symbol": "LENI", - "name": "LeninCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/seanmcalevey/lenin_coin/main/lenin_coin_logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "SKC5GoMp18Yd9YLLrbWUphy9d85YuHBwv1HHLJM3f5w", - "symbol": "SKCT", - "name": "SKC Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SKC5GoMp18Yd9YLLrbWUphy9d85YuHBwv1HHLJM3f5w/logo.png" - }, - { - "chainId": 101, - "address": "GGTGLHPUaEmGSQMo89FoYXJywuQBPnbqHuBjHivgpKZY", - "symbol": "GOBLET", - "name": "Golden Goblet", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GGTGLHPUaEmGSQMo89FoYXJywuQBPnbqHuBjHivgpKZY/logo.png", - "tags": ["community-token", "utility-token", "social-token"], - "extensions": { - "discord": "https://discord.gg/pqVDAw7DE9", - "twitter": "https://twitter.com/goblinraidsnft", - "website": "https://goblinraid.passivepad.cc" - } - }, - { - "chainId": 103, - "address": "5g5Yc2jNizJFfCqf4oauxZdQTqHAaDiLE183TSuAb51A", - "symbol": "TSBT", - "name": "Test boy Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5g5Yc2jNizJFfCqf4oauxZdQTqHAaDiLE183TSuAb51A/logo.png" - }, - { - "chainId": 101, - "address": "A5NF1e6RnYkVwtg3V3z1qeUz4PZfHCXmQ9RotuJWgi6F", - "symbol": "VYNC", - "name": "VYNK CHAIN", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/A5NF1e6RnYkVwtg3V3z1qeUz4PZfHCXmQ9RotuJWgi6F/logo.png", - "tags": ["utility-token", "VYNCTOKEN", "community-token"], - "extensions": { - "website": "https://vynkchain.org" - } - }, - { - "chainId": 101, - "address": "JQDgss9tWA4sAsmLgSY2f5M7h1DduT4wXvt3E4RnSuJ", - "symbol": "NC", - "name": "Nueve Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/JQDgss9tWA4sAsmLgSY2f5M7h1DduT4wXvt3E4RnSuJ/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EkhbjG14GJdnWkKSTdnPSG8xhFDmh855XK1xKAFjYmUR", - "symbol": "$BDAWG", - "name": "BDAWG", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/puresec-ng/gary/main/BDAWG_coin.png" - }, - { - "chainId": 103, - "address": "BL7nWUGANnKHMiJtVWAUJp8xbuCoqsgPcLBXPffU9Td8", - "symbol": "CDFI", - "name": "Cleandefi", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BL7nWUGANnKHMiJtVWAUJp8xbuCoqsgPcLBXPffU9Td8/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "http://www.cleandefi.com" - } - }, - { - "chainId": 101, - "address": "BL7nWUGANnKHMiJtVWAUJp8xbuCoqsgPcLBXPffU9Td8", - "symbol": "CDFI", - "name": "Cleandefi", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BL7nWUGANnKHMiJtVWAUJp8xbuCoqsgPcLBXPffU9Td8/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "http://www.cleandefi.com" - } - }, - { - "chainId": 101, - "address": "3G6UDViPSymTnpEoFeoPqMRjA1VE1HqWLVf8kHULewaj", - "symbol": "GRASS", - "name": "Grass", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/PnW1/grassToken/main/logo.png" - }, - { - "chainId": 102, - "address": "B8mnGmyZ91zRbVZW1sxy4wjDAgV5vZCGn3eh4mB4gGYF", - "symbol": "GYDC", - "name": "GYD Coin", - "decimals": 9, - "logoURI": "https://cricnation592.sfo3.cdn.digitaloceanspaces.com/logo.png", - "tags": ["utility-coin", "social-defi"] - }, - { - "chainId": 101, - "address": "GoLDYyyiVeXnVf9qgoK712N5esm1cCbHEK9aNJFx47Sx", - "symbol": "GOLDY", - "name": "DeFi Land Gold", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GoLDYyyiVeXnVf9qgoK712N5esm1cCbHEK9aNJFx47Sx/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.com/invite/defiland", - "medium": "https://defiland.medium.com/", - "telegram": "https://t.me/defiland_official", - "twitter": "https://twitter.com/DeFi_Land", - "website": "https://defiland.app/" - } - }, - { - "chainId": 103, - "address": "BTCG2sUyE8qtfLNuk73cdEET2YQVbgrc7VzdW5B4RZ3b", - "symbol": "green", - "name": "Greener Bitcoin (dev)", - "decimals": 8, - "logoURI": "https://cdn.jsdelivr.net/gh/PurpleZone/NFTs@latest/btcg/btc-g.svg", - "tags": [ - "green-coin", - "community-token", - "utility-token", - "colored-token" - ], - "extensions": { - "coingeckoId": "bitcoin", - "description": "Greening cryptocurrencies one coin at a time", - "imageUrl": "https://bafybeiakx66r7u5u5sxi24b25k4y5qm6zhpyuetocphl7kfcs4yij6zjgy.ipfs.nftstorage.link/?ext=svg", - "telegram": "https://t.me/cryptolake2", - "website": "https://PurpleZone.github.io/NFTs/btcg/", - "whitepaper": "https://gateway.ipfs.io/ipns/QmUs6X2QHrPSAW9mZYtHGNCDjMDWTk7cg3EiEQ1Ao4PvL9/whitepaper.pdf" - } - }, - { - "chainId": 103, - "address": "BTCdSsSQeS44k2kgpo8URUZWrACHvHAdoLewt3Q3EGU6", - "symbol": "DBTC", - "name": "Dirty BitCoin", - "decimals": 8, - "logoURI": "https://cdn.jsdelivr.net/gh/PurpleZone/NFTs@latest/btcd/dirty-bitcoin.svg", - "tags": [ - "green-coin", - "community-token", - "utility-token", - "colored-token" - ], - "extensions": { - "coingeckoId": "wrapped-bitcoin", - "description": "Bitcoin pending to carbon removal", - "imageUrl": "https://bafybeidawinaasorjj6i6ftg5kgdlaibtwxaxhetioefi2scnzny5ai73u.ipfs.nftstorage.link/?ext=svg", - "telegram": "https://t.me/cryptolake2", - "website": "https://PurpleZone.github.io/NFTs/btcd/", - "whitepaper": "https://gateway.ipfs.io/ipns/QmTqYzytHkEjTZyBxBBPbvMyXqUABc55aSwGUNbAYtVzXu/whitepaper.pdf" - } - }, - { - "chainId": 103, - "address": "CarBoNrDsrBtp4YgjuxjXQnrpaLDB4HoL2dDLBFUnZjq", - "symbol": "kg", - "name": "Removed Carbon Coin", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/PurpleZone/NFTs@latest/sequestred/carbon-removed.svg", - "tags": [ - "green-coin", - "community-token", - "utility-token", - "colored-token" - ], - "extensions": { - "coingeckoId": "polkadot", - "description": "Carbon Sequestration (unit: 1kg CO2e)", - "imageUrl": "https://bafybeidf6nrmoxuik2y2g27jnxuj5c3gphlr75ndrkqx267h3nwszh7uya.ipfs.nftstorage.link/?ext=svg", - "telegram": "https://t.me/cryptolake2", - "website": "https://PurpleZone.github.io/NFTs/sequestred/", - "whitepaper": "https://gateway.ipfs.io/ipns/QmNwPaqvPMZKxEDZB8vr63wTmf5bZ2JocYY7HamWY8ws3E/whitepaper.pdf" - } - }, - { - "chainId": 103, - "address": "C1RcPUJHx1Mon7RqDck2KUco8jkYraMjNCdA3K2NP7Wk", - "symbol": "colorcoin", - "name": "Colored Generic Token", - "decimals": 8, - "logoURI": "https://cdn.jsdelivr.net/gh/PurpleZone/NFTs@latest/colorcoin/colorcoin.svg", - "tags": [ - "green-coin", - "community-token", - "utility-token", - "colored-token" - ], - "extensions": { - "coingeckoId": "wrapped-bitcoin", - "description": "This generic token is the equivalent of color coin on bitcoin network: it carries a color: 32B hash as an addr", - "imageUrl": "https://bafybeihkbjkjiqsvdez4jxiwiqbaeamp7gvidia4ss6htobcqsydpfmx3u.ipfs.nftstorage.link/?ext=svg", - "telegram": "https://t.me/cryptolake2", - "website": "https://PurpleZone.github.io/NFTs/colorcoin", - "whitepaper": "https://gateway.ipfs.io/ipns/QmTSW3uzsinLRN6TGt1igwuY6aMcMidmRpUR6fhhSG7Euv/whitepaper.pdf" - } - }, - { - "chainId": 103, - "address": "GcoinFPXjY1iWwLCgAuYm6Eks18bP4KKP3FUVg9G53X7", - "symbol": "FGC", - "name": "Fractional Green Coin", - "decimals": 8, - "logoURI": "https://cdn.jsdelivr.net/gh/PurpleZone/NFTs@master/gcoin/gcoin.svg", - "tags": [ - "green-coin", - "community-token", - "utility-token", - "colored-token" - ], - "extensions": { - "coingeckoId": "wrapped-bitcoin", - "description": "The only way to get carbon negative cryptocurrency is using gcoin: a CO2 accountancy NFT", - "imageUrl": "https://bafybeifpmi7gyvlze7jumfkqwcvi6vjtz2ojropt32knktwrzwlr5hw6fa.ipfs.nftstorage.link/?ext=svg", - "telegram": "https://t.me/cryptolake2", - "website": "https://ipfs.safewatch.care/ipns/QmTo1AnNH7Snu37Dotphw2fX54u1S5VLFpnnERN7GbyUrW/#gcoin", - "whitepaper": "https://gateway.ipfs.io/ipns/QmTo1AnNH7Snu37Dotphw2fX54u1S5VLFpnnERN7GbyUrW/whitepaper.pdf" - } - }, - { - "chainId": 103, - "address": "giftiAvNxpqPLzvrAu78xfgZ3Z9o64ecSSLKG3GkEvc", - "symbol": "gift", - "name": "Quantifed Gift", - "decimals": 0, - "logoURI": "https://bafybeighotrgs2akl3tfsnznwpepzgk2taams4bgix5kxc5zgiq5dvyqnq.ipfs.nftstorage.link/?ext=svg", - "tags": ["community-token", "utility-token", "colored-token"], - "extensions": { - "description": "A gift goes long way, this is a NFT you can donnate with the playload you want", - "discord": "https://discord.gg/vwkCmMQv", - "imageUrl": "https://ipfs.safewatch.care/ipfs/QmUw3iyMPqKuajnLRevFyEU8Yn1ZGLGA2pb8A11BBuj4NQ/gift.svg", - "telegram": "https://t.me/cryptolake2", - "website": "https://ipfs.safewatch.xyz/ipfs/QmUw3iyMPqKuajnLRevFyEU8Yn1ZGLGA2pb8A11BBuj4NQ/#gift", - "whitepaper": "https://gateway.ipfs.io/ipfs/QmUw3iyMPqKuajnLRevFyEU8Yn1ZGLGA2pb8A11BBuj4NQ/whitepaper.pdf" - } - }, - { - "chainId": 103, - "address": "PHXCEm9BjgB5nxySKvGVb7naLS2fcU2DqdU529sGa8G", - "symbol": "phxshare", - "name": "PhenomX Shares", - "decimals": 6, - "logoURI": "https://bafybeice4ze77lnjlrv42d2pyobeccwc6guyfw7absvt7fhfjv5ofgm5pe.ipfs.nftstorage.link/?ext=svg", - "tags": ["community-token", "utility-token", "colored-token"], - "extensions": { - "description": "PhenomX Health shares", - "discord": "https://discord.gg/vwkCmMQv", - "imageUrl": "https://ipfs.safewatch.care/ipfs/QmepciACTEREwoeoMxLJfaGcPD56DHefJCeYbPKDyZBo6B/phxcoin.svg", - "telegram": "https://t.me/cryptolake2", - "website": "https://ipfs.safewatch.care/ipfs/QmepciACTEREwoeoMxLJfaGcPD56DHefJCeYbPKDyZBo6B/#phxcoin", - "whitepaper": "https://gateway.ipfs.io/ipfs/QmepciACTEREwoeoMxLJfaGcPD56DHefJCeYbPKDyZBo6B/whitepaper.pdf" - } - }, - { - "chainId": 103, - "address": "pmfa5SgJwSrmDf66gvob2tUyzx3vSZSZ63pff3yGXiH", - "symbol": "pmfa", - "name": "PMF A-Coin", - "decimals": 8, - "logoURI": "https://cdn.jsdelivr.net/gh/PurpleZone/NFTs@master/pmfa/pmfa.svg", - "tags": [ - "green-coin", - "community-token", - "utility-token", - "colored-token" - ], - "extensions": { - "coingeckoId": "wrapped-bitcoin", - "description": "PMF-A Token", - "imageUrl": "https://bafybeicskrgdfnhrwn5jjz2l3h7kk5au6fz6hivjfxq2mv4lw5wymfejpm.ipfs.nftstorage.link/?ext=svg", - "telegram": "https://t.me/cryptolake2", - "website": "https://ipfs.safewatch.care/ipns/QmVfmosDQdVzHRH2cGgWyXKsZ5s5iub677ZtUcq6Ao2DJt/#pmfa", - "whitepaper": "https://gateway.ipfs.io/ipns/QmVfmosDQdVzHRH2cGgWyXKsZ5s5iub677ZtUcq6Ao2DJt/whitepaper.pdf" - } - }, - { - "chainId": 103, - "address": "NfTyU3JxnZtticXZ5LsmzxHsUbCemLox66huiWqmNtc", - "symbol": "WNFT", - "name": "Wrapped NFT", - "decimals": 9, - "logoURI": "https://bafybeihlud5s72vd2h7bd5njpkxc6c546y3uhfdo3w56ujrcfhf2dr6dme.ipfs.nftstorage.link/?ext=svg", - "tags": ["community-token", "utility-token", "colored-token"], - "extensions": { - "description": "NFT are nothing else than glorified hash, so by wrapping a hash in an NFT we have a generic vehicle to manage any NFTs", - "discord": "https://discord.gg/vwkCmMQv", - "imageUrl": "https://ipfs.safewatch.care/ipfs/QmetuPoEjrgbzMjCHPsybpndbaDmBSLaNZutFA5hwFzgJS/WNFT.svg", - "telegram": "https://t.me/cryptolake2", - "website": "https://ipfs.safewatch.care/ipfs/QmetuPoEjrgbzMjCHPsybpndbaDmBSLaNZutFA5hwFzgJS/#WNFT", - "whitepaper": "https://gateway.ipfs.io/ipfs/QmetuPoEjrgbzMjCHPsybpndbaDmBSLaNZutFA5hwFzgJS/whitepaper.pdf" - } - }, - { - "chainId": 103, - "address": "CArBo4puwrkEsEqDY5SDxNwj31bi3V2ZubimRNSwXVNr", - "symbol": "kg", - "name": "Carbon Credit", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/PurpleZone/NFTs@latest/carbon/carbon-credit.svg", - "tags": [ - "green-coin", - "community-token", - "utility-token", - "colored-token" - ], - "extensions": { - "coingeckoId": "wrapped-bitcoin", - "description": "Proof of Carbon Sequestration to be used as Carbon credit (unit: 1kg CO2e)", - "imageUrl": "https://bafybeid7dw4tdtbuj5pn4gqlqooajzfaecujcupwzgu2bp6p6z46qlv2g4.ipfs.nftstorage.link/?ext=svg", - "linkedin": "https://www.linkedin.com/company/eco-organic-technology", - "website": "https://PurpleZone.github.io/NFTs/carbon/", - "whitepaper": "https://gateway.ipfs.io/ipns/QmNwPaqvPMZKxEDZB8vr63wTmf5bZ2JocYY7HamWY8ws3E/whitepaper.pdf" - } - }, - { - "chainId": 101, - "address": "D1pyrui915KubTU59ByWWKuNfNHc9wmJEAq23CGDsGiw", - "symbol": "MIND", - "name": "MIND", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/D1pyrui915KubTU59ByWWKuNfNHc9wmJEAq23CGDsGiw/logo.png", - "extensions": { - "discord": "https://discord.gg/goi", - "twitter": "https://twitter.com/Imaginarium_SOL" - } - }, - { - "chainId": 101, - "address": "3XtB8t3xsSDb7itwrub75R7S3urV2HzHQKS3d6MuBBJW", - "symbol": "$SC", - "name": "Stoiccoin", - "decimals": 7, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3XtB8t3xsSDb7itwrub75R7S3urV2HzHQKS3d6MuBBJW/logo.png" - }, - { - "chainId": 101, - "address": "2Fn8iT9MtLZCvu72ntoT7QpdWtQx4aZhGLb48AAbrqw6", - "symbol": "PPGT", - "name": "PotterPlaysGames Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/PotterPlaysGames/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CiBddaPynSdAG2SkbrusBfyrUKdCSXVPHs6rTgSEkfsV", - "symbol": "gSOL", - "name": "GooseFX LP Token (gSOL)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CiBddaPynSdAG2SkbrusBfyrUKdCSXVPHs6rTgSEkfsV/icon.svg", - "tags": ["lp-token"], - "extensions": { - "discord": "https://discord.gg/cDEPXpY26q", - "telegram": "https://t.me/goosefx", - "twitter": "https://twitter.com/GooseFX1", - "website": "https://goosefx.io" - } - }, - { - "chainId": 101, - "address": "7Hvq1zbYWmBpJ7qb4AZSpC1gLC95eBdQgdT3aLQyq6pG", - "symbol": "gUSDC", - "name": "GooseFX LP Token (gUSDC)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7Hvq1zbYWmBpJ7qb4AZSpC1gLC95eBdQgdT3aLQyq6pG/logo.svg", - "tags": ["lp-token"], - "extensions": { - "discord": "https://discord.gg/cDEPXpY26q", - "telegram": "https://t.me/goosefx", - "twitter": "https://twitter.com/GooseFX1", - "website": "https://goosefx.io" - } - }, - { - "chainId": 101, - "address": "iVMbf6rkeZKXXLGNjrJhMZL3KFDuo4h1C3RqAyeYaBa", - "symbol": "IVM", - "name": "InvestmorCoin", - "decimals": 10, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/iVMbf6rkeZKXXLGNjrJhMZL3KFDuo4h1C3RqAyeYaBa/logo.png", - "extensions": { - "website": "https://investmorcoin.com" - } - }, - { - "chainId": 101, - "address": "5aqxDnPXy6kqTBTQWRYBQ8RdsmjoY9TNLPRjV3PiFKAB", - "symbol": "NBUS", - "name": "Incubus", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5aqxDnPXy6kqTBTQWRYBQ8RdsmjoY9TNLPRjV3PiFKAB/logo.png", - "tags": ["community-token", "whitelist-token"] - }, - { - "chainId": 101, - "address": "ZenJuJnFPUrja8HZ74Pj5tySvaJ6xCBZPm6ghT6v3mr", - "symbol": "ZVWL", - "name": "Zenjin Viperz WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ZenJuJnFPUrja8HZ74Pj5tySvaJ6xCBZPm6ghT6v3mr/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/ZenjinViperz" - } - }, - { - "chainId": 101, - "address": "FDU3nHdhdaj6Wk35pKqXsDaoDDZTysCqkkSnQY8HcZ8E", - "symbol": "JUMP", - "name": "Double Jump", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FDU3nHdhdaj6Wk35pKqXsDaoDDZTysCqkkSnQY8HcZ8E/logo.png" - }, - { - "chainId": 101, - "address": "bELTRVTyKjwQxya7CztPdvpHTHXuLKmowsbeD2NUHpD", - "symbol": "HHXC", - "name": "How High Extra Credit", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/bELTRVTyKjwQxya7CztPdvpHTHXuLKmowsbeD2NUHpD/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "HhSqZi6u5jYruwxN4r4vRfkRmqp2tNvqwXw4wEXVkP6b", - "symbol": "ERAS", - "name": "EraSpheres", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HhSqZi6u5jYruwxN4r4vRfkRmqp2tNvqwXw4wEXVkP6b/logo.png", - "tags": [ - "utility-token", - "game-token", - "game-currency", - "GameFi", - "Gaming" - ], - "extensions": { - "discord": "https://discord.gg/REPrVxA2gN", - "telegram": "https://t.me/eraspheres", - "twitter": "https://twitter.com/eraspheres", - "website": "https://eraspheres.com/" - } - }, - { - "chainId": 101, - "address": "WLUczF9P5wKLfq53ZSR9UGgBmwxXcELXpECnRyzS2Jp", - "symbol": "CHEESMT", - "name": "CHEES Mint Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WLUczF9P5wKLfq53ZSR9UGgBmwxXcELXpECnRyzS2Jp/logo.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 103, - "address": "DGEz5naP1RuvitQSvrFXNg8sM6waaEjkwj3P4VCVAm1t", - "symbol": "TestA", - "name": "TestAAAAA", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DGEz5naP1RuvitQSvrFXNg8sM6waaEjkwj3P4VCVAm1t/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 103, - "address": "Co2FP2AdUaKmUMLg4aGRTTNqKAQEwgAgAh5RVFXJhzar", - "symbol": "kgCO2eq", - "name": "Carbon Footprint", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/PurpleZone/NFTs@latest/kgCO2e/carbon-weight.svg", - "tags": [ - "green-coin", - "community-token", - "utility-token", - "colored-token" - ], - "extensions": { - "coingeckoId": "euro-tether", - "description": "Accounting for CO2eq emissions", - "imageUrl": "https://bafybeidyuuvtfjbkz3pivhtc5ttdi6up3evhrxjkbd6fpuwla3hoj6x3lu.ipfs.nftstorage.link/?ext=svg", - "linkedin": "https://www.linkedin.com/company/eco-organic-technology", - "telegram": "https://t.me/cryptolake2", - "website": "https://PurpleZone.github.io/NFTs/kgCO2e/", - "whitepaper": "https://gateway.ipfs.io/ipns/QmepRU1Rr2SLURq9m2AkiyC1E8hRMBzetrq5TrQxCxNh8E/whitepaper.pdf" - } - }, - { - "chainId": 101, - "address": "FFAWLA1yaqYXmbYVofEQYH19mz7WZDb57V2h63BsvoKo", - "symbol": "FFA-WL", - "name": "FFA Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FFAWLA1yaqYXmbYVofEQYH19mz7WZDb57V2h63BsvoKo/logo.png", - "tags": ["utility-token", "whitelist-ticket", "FFA-whitelist", "FFA"], - "extensions": { - "description": "Each ticket gives you access to buy one NFT on https://www.fancyfoxassociation.org/ before the mint date and with a discount!!", - "discord": "https://discord.gg/9ynuEbpzcR", - "telegram": "https://t.me/+cypOc8aptmhlNWQ1", - "twitter": "https://twitter.com/fancyfoxassoc", - "website": "https://www.fancyfoxassociation.org/" - } - }, - { - "chainId": 101, - "address": "PHNX6NaMPbSPNvhDWEvr18dAfjM4Qz2PBYvm5NvgcD9", - "symbol": "PHNX", - "name": "PHOENIX BURN ", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/PHNX6NaMPbSPNvhDWEvr18dAfjM4Qz2PBYvm5NvgcD9/logo.png", - "tags": ["social-token"], - "extensions": { - "description": "PHOENIX BURN" - } - }, - { - "chainId": 101, - "address": "DTMnsXFNxkeLAHWYqGrfzjKArqpqzLaTMpdkzkaFUcDA", - "symbol": "POH", - "name": "POH Crypto", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Procuste34/poh_crypto/main/poh_image.png", - "tags": ["meme", "ginette", "nft"], - "extensions": { - "instagram": "https://www.instagram.com/mpbj_memes/", - "twitter": "https://twitter.com/ProcusteiOS" - } - }, - { - "chainId": 101, - "address": "CSKh2PUQ3WENAKBjMTd2su8MFENU9roRw5p1hJ5meTSC", - "symbol": "RCHWST", - "name": "deMonopoly Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CSKh2PUQ3WENAKBjMTd2su8MFENU9roRw5p1hJ5meTSC/logo.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "3d1oXrdZATm2vcZ44tUtBmWcAXPziWmZfxbsVt9smHkC", - "symbol": "wrBTC-USDC", - "name": "Player 2 LP Token (wrBTC-USDC)", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3d1oXrdZATm2vcZ44tUtBmWcAXPziWmZfxbsVt9smHkC/logo_P2_black.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/player2", - "github": "https://github.com/player2world", - "reddit": "https://www.reddit.com/r/player2world", - "twitter": "https://twitter.com/player2world" - } - }, - { - "chainId": 101, - "address": "BHW6DFARzuPRySYebEnTLQKzNV8p8nJgC8VMSXGhnqiM", - "symbol": "LILLY", - "name": "LILLY", - "decimals": 0, - "logoURI": "https://imgur.com/wVWGpJL.png", - "tags": ["nft"], - "extensions": { - "animationUrl": "https://imgur.com/1O39DGg.mp4", - "description": "lilly forever", - "imageUrl": "https://imgur.com/wVWGpJL.png", - "website": "https://www.bloomon.nl" - } - }, - { - "chainId": 101, - "address": "3hnUjiTnCnSS1FmdFDxCPgMAb7r724Boa3vWb3p3WJuV", - "symbol": "TRIPWL", - "name": "Trippin' Ape Tribe WL", - "decimals": 0, - "logoURI": "https://pbs.twimg.com/profile_images/1516190526592139266/tTBE_jP5_400x400.jpg", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "Es624KL9Z86oig5VpLwu61eHEZfcMNW5NgdqQWouhpsg", - "symbol": "KGWT", - "name": "Kawaii Ghouls Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/IvaldiS6/image/main/Tiny_logo.png", - "tags": [ - "social-token", - "whitelist-token", - "community-token", - "utility-Token" - ], - "extensions": { - "discord": "https://discord.gg/6FedugQ", - "twitter": "https://twitter.com/KawaiiGhoulsNFT", - "website": "https://www.kawaiighouls.art" - } - }, - { - "chainId": 101, - "address": "3EfhVMtQpWRRTDyhYudsBx6uEZzK89HhE8j1pSyACKeX", - "symbol": "JS", - "name": "JASMIN", - "decimals": 0, - "logoURI": "https://imgur.com/PAA21On.gif", - "tags": ["nft"] - }, - { - "chainId": 101, - "address": "9kRUGxsMKtTSpW4JjCLnf1DQQV5pafETHbcB2npvyaX1", - "symbol": "ORCH", - "name": "ORCHID", - "decimals": 0, - "logoURI": "https://imgur.com/zPr9R8D.png", - "tags": ["nft"], - "extensions": { - "animationUrl": "https://imgur.com/1O39DGg.mp4", - "description": "Venus de Fleur", - "imageUrl": "https://imgur.com/a59QP7g.png", - "website": "https://www.venusetfleur.com" - } - }, - { - "chainId": 101, - "address": "FzeuYTjS42pi2SZN1HMWwgH86A3v8dLyt52SuLFrinK1", - "symbol": "CCNHS", - "name": "ColdCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/ZacharyLiebl/SnowCoinSymbol/main/SnowCoinSymbol.png", - "tags": ["nor-easters", "experiment"], - "extensions": { - "description": "For more info, contact nhscryptocurrency@gmail.com" - } - }, - { - "chainId": 101, - "address": "B3z92d9ZN8zeRMaXkJGbLhKRHwLn2Pw78WwjZrAV9E1g", - "symbol": "SEEL", - "name": "Sealcoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Sealcakes/crypto/main/PNG-images-Seal-18png.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "RPEbt7HCzbJGL24VCzr17pPspFaieFQ44skWsM2332Y", - "symbol": "RPE", - "name": "Royal Panther Empire Coin", - "decimals": 1, - "logoURI": "https://raw.githubusercontent.com/rpectdev/RPE-token/main/RPE-COIn.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.com/invite/9WAp99TVqZ", - "instagram": "https://www.instagram.com/royalpantherempire/", - "twitter": "https://twitter.com/royalpantheremp", - "website": "https://royalpantherempire.com/" - } - }, - { - "chainId": 101, - "address": "6ot4f3FMZSsK9dpBSiqeCSrQXVvTNtpYptk5da75LYqA", - "symbol": "MKD", - "name": "MKD STABLECOIN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/MKD-Stable-token/logo/main/logo.png", - "tags": ["stablecoin", "stable-token", "social-token"] - }, - { - "chainId": 101, - "address": "78WCPzsCiyAsHRfYLnwfBfEQT4yBX7g5gfKjbzj9WjqL", - "symbol": "HIT", - "name": "HICOIN", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/78WCPzsCiyAsHRfYLnwfBfEQT4yBX7g5gfKjbzj9WjqL/logo.png", - "tags": ["community-token", "utility-token", "social-token"] - }, - { - "chainId": 101, - "address": "8FtAbvh2Q1TL5PbWE529NFbuj5zxnAVR6NByxampNc1c", - "symbol": "LCTN", - "name": "Luna Capsule Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/lunacapsuletoken/lunacapsuletoken/main/logo.png", - "tags": ["airdrop-token", "community-token"], - "extensions": { - "telegram": "https://t.me/lunacapsuletoken", - "twitter": "https://twitter.com/lunacapstoken" - } - }, - { - "chainId": 101, - "address": "8dK5tfnxtbCRmqev2iJGqsizRxcPrpaNLSjuVokcbtDx", - "symbol": "Shake", - "name": "Shake", - "decimals": 2, - "logoURI": "https://i.postimg.cc/7PcVcwjG/BUDDIES.png", - "extensions": { - "twitter": "https://twitter.com/potprincessNFT", - "website": "https://www.potprincess.xyz/" - } - }, - { - "chainId": 101, - "address": "JoZohHHuqmXoKy38z7xnSohYQAsYRtQ8JkjRYKGnSRB", - "symbol": "JGWL", - "name": "JoZo Gators WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/JoZohHHuqmXoKy38z7xnSohYQAsYRtQ8JkjRYKGnSRB/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/JozoGators" - } - }, - { - "chainId": 101, - "address": "AXBDeu9xakvdJ1dgpnhVrmwKffbhNqSHZgNb4gM99xYC", - "symbol": "AYKWL", - "name": "AYAKO Whitelist Mint Token", - "decimals": 0, - "logoURI": "https://i.postimg.cc/XN1xtY1C/5ape-Sn-Ur-400x400.png", - "tags": ["whitelist-token", "Verified_QD"], - "extensions": { - "twitter": "https://twitter.com/Ayako_sol", - "website": "http://ayako-sol.com/" - } - }, - { - "chainId": 101, - "address": "8VPcCHQ5FRnZ4ihYLEqkkDY5d8ers9rjQ7mo95Y18JJ4", - "symbol": "LDTG2", - "name": "LDT Gen 2 Mint Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8VPcCHQ5FRnZ4ihYLEqkkDY5d8ers9rjQ7mo95Y18JJ4/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Living Dead Teds Gen 2 Mint Token", - "discord": "https://discord.gg/livingdeadteds", - "twitter": "https://twitter.com/LivingDeadTeds", - "website": "https://livingdeadteds.com" - } - }, - { - "chainId": 101, - "address": "DuS8UxSX2f2Trniw9WeXpQgM94zZy67KZe9Z93vuNVh7", - "symbol": "LDTG2WL", - "name": "LDT Gen 2 WL Mint Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DuS8UxSX2f2Trniw9WeXpQgM94zZy67KZe9Z93vuNVh7/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Living Dead Teds Gen 2 WL Mint Token", - "discord": "https://discord.gg/livingdeadteds", - "twitter": "https://twitter.com/LivingDeadTeds", - "website": "https://livingdeadteds.com" - } - }, - { - "chainId": 101, - "address": "DriLz492FPfYforf7PVDaoxBJE3WwNhqDqa5VGDtCUn1", - "symbol": "LDTG1ASC", - "name": "LDT Gen 1 Ascension Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DriLz492FPfYforf7PVDaoxBJE3WwNhqDqa5VGDtCUn1/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Living Dead Teds Gen 1 Ascension Token", - "discord": "https://discord.gg/livingdeadteds", - "twitter": "https://twitter.com/LivingDeadTeds", - "website": "https://livingdeadteds.com" - } - }, - { - "chainId": 101, - "address": "EKfDCMnjkx9f919JRpfAn4kG8vVg5BEkjBnuDa4HSmfw", - "symbol": "MICA", - "name": "MICA Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/micasdad/crypto/main/rsz_1img_5819.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CE4R1hVveA3qkxX6D8dM5gnds2U5RJAxXLa84RW8Ufjd", - "symbol": "SPRAGUE", - "name": "Sprague Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/spraguehouse/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4B619RbcXbXrKTzNVgDSRiUn9wfxWgA1w1oFLveGacNy", - "symbol": "HCOIN", - "name": "Hydrogencoin", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/dataalg/Hydrogen/main/4B619RbcXbXrKTzNVgDSRiUn9wfxWgA1w1oFLveGacNy/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Hydrogencoin is a digital currency founded by DataAlg. It aims to develop green hydrogen economies.", - "twitter": "https://twitter.com/hydrogencoin_io", - "website": "http://hydrogencoin.io" - } - }, - { - "chainId": 101, - "address": "RoniLMQHDYpTFqs3wKrWwT2eVv8XSPSR9XuxKiRt8RN", - "symbol": "Takashironin", - "name": "Takashi Ronin Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/RoniLMQHDYpTFqs3wKrWwT2eVv8XSPSR9XuxKiRt8RN/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/TakashiRonin" - } - }, - { - "chainId": 101, - "address": "9tTzGfAy53kPNNUZqQ3hCwjSTzvFDRbhekCqkGN11ZaC", - "symbol": "ABC", - "name": "Assassin Brothers Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/assassinbrothers/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CAPLiX3SbW4fEUoQWb92EUNTqqDyKssqgbHWCa5gmmRc", - "symbol": "FCHT", - "name": "Fight Capital Handshake Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/metapupsclub/log/main/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Officially Licensed, Limited Edition Fighters, Immortalized On The Blockchain", - "twitter": "https://twitter.com/FightCapitalNFT", - "website": "http://fightcapital.io" - } - }, - { - "chainId": 101, - "address": "32WEN49r7DqeyNArGd2hGcFinCCTFVrXjZSpMftA12ym", - "symbol": "ICED", - "name": "Icedawn Productions Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/32WEN49r7DqeyNArGd2hGcFinCCTFVrXjZSpMftA12ym/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DGJMicLBpwAc7UphNQ44qGVy6jgQkRwJEaKXx5mRKmA5", - "symbol": "MURC", - "name": "MurciCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/thorium31/Murchi/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Gtw39NL6rLvWrFQfatbvxEWZsGdU54EKLmqyjo5FQqkk", - "symbol": "DAKN", - "name": "Dakender Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Dakender/Dakender-Coin/main/logo-dak.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EABJLPosabmVSpGdvxsQHfCg9qGhTf3a1oaAmbjKa92V", - "symbol": "STBN", - "name": "Stewbunie Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Dakender/Stewbunie-Coin/main/logo-stew.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GPxMP8BAoT5FULh1yK7Nu1bHSyBofUhWtUK5MWJ3hemp", - "symbol": "$HEMP", - "name": "CANNAVERSE HEMP TOKEN", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GPxMP8BAoT5FULh1yK7Nu1bHSyBofUhWtUK5MWJ3hemp/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4Cz1spVURCwkwPVaAgGazrx12X8UT4YzEXoCivHkih3J", - "symbol": "DRNC", - "name": "DRN Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/DuaneHill67/drn-crypto-01/main/drn-education-logo-crypto-300x300.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "9UGMFdqeQbNqu488mKYzsAwBu6P2gLJnsFeQZ29cGSEw", - "symbol": "SNV", - "name": "Solniverse", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9UGMFdqeQbNqu488mKYzsAwBu6P2gLJnsFeQZ29cGSEw/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://solniverse.net/" - } - }, - { - "chainId": 101, - "address": "3YHijuF9GJLEFY1njrgKhhqvwSKUAruEAsKBZceNebpi", - "symbol": "DIPC", - "name": "DipCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/E-Liz/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7B9ALzzrs2iefZvrDVwZiP8GrFw3957UyExpBAhFYKq2", - "symbol": "WLHALO", - "name": "WL HALO LABS", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Robby3082/test-token/main/halowl.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "8S46ooYiMtmrvpJxg3P3cteEtPuhbvfM65rXj9ywdD4q", - "symbol": "FFn", - "name": "Fluffy Frens Whitelist Access Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8S46ooYiMtmrvpJxg3P3cteEtPuhbvfM65rXj9ywdD4q/logo.png", - "extensions": { - "twitter": "https://twitter.com/nftfluffyfrens" - } - }, - { - "chainId": 101, - "address": "SPCc5sh97jK7bvtxjvGZy94DX6Zi7GDQuZdxDFkxe4h", - "symbol": "SPCTK", - "name": "BHSG Spaceship Claim Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/JetNnLZpbECCfyeZSvJdgg5gf37QfCkPrp2X8XfmNWn/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://bountyhunterspaceguild.com" - } - }, - { - "chainId": 101, - "address": "BENVbd7vc1sAks5xeAKMQVHP3qTqTXSHAJqTgbSgUdLw", - "symbol": "WTOY", - "name": "Whappy TOY", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Wcworker/Wcdonalds/main/WTOY.png", - "tags": ["community-token", "utility-token"], - "extensions": { - "twitter": "https://twitter.com/WcdonaldsNFT", - "website": "https://wcdonalds.io" - } - }, - { - "chainId": 101, - "address": "5Gdcbs6SFEUyVb7z88obUToe1gRgUxPQQV95zrh3MZL", - "symbol": "WNFT", - "name": "Whappy NFT", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Wcworker/Wcdonalds/main/WNFT.png", - "tags": ["community-token", "utility-token"], - "extensions": { - "twitter": "https://twitter.com/WcdonaldsNFT", - "website": "https://wcdonalds.io" - } - }, - { - "chainId": 101, - "address": "9QF3bA4kyccT241Pg9zC3ew63UAJokWnGCWMaa36WfnV", - "symbol": "WTIK", - "name": "Whappy Ticket", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Wcworker/Wcdonalds/main/WTIK.png", - "tags": ["community-token", "utility-token"], - "extensions": { - "twitter": "https://twitter.com/WcdonaldsNFT", - "website": "https://wcdonalds.io" - } - }, - { - "chainId": 101, - "address": "GpEbwsDYr5ER68oQPTf92YLT5HjQW9BV4XSa2yS4LfpT", - "symbol": "WTRY", - "name": "Whappy Try Again", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Wcworker/Wcdonalds/main/WTRY.png", - "tags": ["community-token", "utility-token"], - "extensions": { - "twitter": "https://twitter.com/WcdonaldsNFT", - "website": "https://wcdonalds.io" - } - }, - { - "chainId": 101, - "address": "9Z9rp7jqeNprtdMBmFTeHaiy3dcAXbDC7uFQT9mUXZbv", - "symbol": "TAJ", - "name": "TajCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/TajCoin54/Crypto/main/TajCoin-Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HczeKYQmeY6dNiEseTwWhtmgmzUuDNhNjgHggXkp1sCX", - "symbol": "eL", - "name": "eLcoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HczeKYQmeY6dNiEseTwWhtmgmzUuDNhNjgHggXkp1sCX/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CapiuqcvXkaueU7PpUvPUFciLr84zbvVRqknjMT4svmn", - "symbol": "Droid", - "name": "Droid Capital Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CapiuqcvXkaueU7PpUvPUFciLr84zbvVRqknjMT4svmn/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/droidcapital" - } - }, - { - "chainId": 101, - "address": "5LwkUHbof6yxaVJcc7TTc1oMoJpoJxEouidAamvwtCsX", - "symbol": "LYFE", - "name": "LYFE Token", - "decimals": 2, - "logoURI": "https://media.discordapp.net/attachments/926535226820276264/974752195864068126/20220514_004708.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "odtZbFYqBbthaRU8nNKABN3yWB9sTrpTQrFq1XkDEdJ", - "symbol": "ODW", - "name": "Optimus Dino Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/odtZbFYqBbthaRU8nNKABN3yWB9sTrpTQrFq1XkDEdJ/logo.png" - }, - { - "chainId": 101, - "address": "HUuncuXwqsPLwyLJicWgk99BE61gEhn3nBmU94S8EMCn", - "symbol": "INVNCM", - "name": "The Invasion Commander WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/theinvasionnft/invasiontoken/main/commandertoken.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/theinvasion_nft" - } - }, - { - "chainId": 101, - "address": "Z1hJj8M518eMgErW8PYAQzv3u9EQjsHYvjbkgy51GtE", - "symbol": "INVNLT", - "name": "The Invasion Lieutenant FCFS WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/theinvasionnft/invasiontoken/main/lieutenanttoken.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/theinvasion_nft" - } - }, - { - "chainId": 101, - "address": "NXH66NhJZ3woe1KCYFGwSJHTtpELuv4Mf8YoVthWtce", - "symbol": "MECH", - "name": "MECH - Art Mechanism", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/theinvasionnft/invasiontoken/main/mechtoken.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/theinvasion_nft" - } - }, - { - "chainId": 101, - "address": "5yBCtc2zMHwrK5YZafwwp153QYcJuGLZC5Xsujj2wZMh", - "symbol": "AC", - "name": "AC Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Fansub-Dev/fansub-crypto/main/logo.png", - "tags": ["community", "social-token", "utility-token"], - "extensions": { - "twitter": "https://twitter.com/fansublive", - "website": "https://fansub.live" - } - }, - { - "chainId": 101, - "address": "DAG2E3z5MCjkcfjepiU3oTYo751xQR5Ak9qWgSkKc6au", - "symbol": "WLDAG", - "name": "DAG Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DAG2E3z5MCjkcfjepiU3oTYo751xQR5Ak9qWgSkKc6au/logo.png", - "tags": ["utility-token"], - "extensions": { - "instagram": "https://www.instagram.com/drunkapegangdao/", - "twitter": "https://twitter.com/DAGDAOv2", - "website": "https://www.drunkapegang.com/" - } - }, - { - "chainId": 101, - "address": "4ViRrJaAzSkUifscKU3mRjP7sMH5AiHPs6q36hjoN6vE", - "symbol": "$BACON", - "name": "BACON", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4ViRrJaAzSkUifscKU3mRjP7sMH5AiHPs6q36hjoN6vE/logo.png", - "tags": ["utility-token", "nft-token", "cryptogame-token"], - "extensions": { - "twitter": "https://twitter.com/BACOIN_Official" - } - }, - { - "chainId": 101, - "address": "CJx9of9U5KsfYXcvPU5Wi3KNBpo8nLpqehVLffokYR2i", - "symbol": "RMCF", - "name": "Real Madrid CF", - "decimals": 0, - "logoURI": "https://imgur.com/BlY3PNB.png", - "tags": ["nft"] - }, - { - "chainId": 101, - "address": "2xugPpLrsGxNq7zMC93bWPoL4YAQR3gQztoiB62wfDwu", - "symbol": "AJAX", - "name": "Ajax", - "decimals": 0, - "logoURI": "https://imgur.com/IcU4ub0.jpeg" - }, - { - "chainId": 101, - "address": "6z1oue9xiJCHcDqsyeTZ3NHFVzqMHQSoZmTvVamdW2MZ", - "symbol": "BIG", - "name": "UNKWN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/h3ll0x/bigdaddytestpic/main/pinkguy.png", - "tags": ["utility-token", "virtual-currency"], - "extensions": { - "twitter": "https://twitter.com/salestest11", - "website": "https://www.celestialzmarketplace.io/" - } - }, - { - "chainId": 101, - "address": "8BDTKgdCcLYPKTgKF7tnY3CkF6sZarDwXm18Co7VZr9Y", - "symbol": "SPHERES", - "name": "Era Spheres", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8BDTKgdCcLYPKTgKF7tnY3CkF6sZarDwXm18Co7VZr9Y/logo.png", - "tags": [ - "utility-token", - "game-token", - "game-currency", - "GameFi", - "Gaming" - ], - "extensions": { - "discord": "https://discord.gg/REPrVxA2gN", - "telegram": "https://t.me/eraspheres", - "twitter": "https://twitter.com/eraspheres", - "website": "https://eraspheres.com/" - } - }, - { - "chainId": 101, - "address": "TupVw9WuoZQZ3Zb2kegZvf8xrwEo2EGwx7gB79P5gx4", - "symbol": "SLEEPY", - "name": "Sleepy", - "decimals": 9, - "logoURI": "https://github.com/boosbasement/metaboss/blob/main/$sleepy.png?raw=true" - }, - { - "chainId": 101, - "address": "27KXQsTik6Uw67TMjRTaA6mciKYBqDATgwTobnCgSpQ2", - "symbol": "NF1", - "name": "Neon Formula One", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/felle64/crypto/main/0315-min.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "CaRBon66o8vaibpjDdAGz1Gt9GetvSFnXVUP1DoJE1L3", - "symbol": "kg", - "name": "Fractional Carbon Credit", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/PurpleZone/NFTs@latest/carbon/carbon-credit.svg", - "tags": [ - "carbon-coin", - "green-coin", - "community-token", - "utility-token", - "colored-token" - ], - "extensions": { - "coingeckoId": "polkadot", - "description": "Proof of Carbon Sequestration to be used as Carbon credit (unit: 1kg CO2e)", - "imageUrl": "https://bafybeid7dw4tdtbuj5pn4gqlqooajzfaecujcupwzgu2bp6p6z46qlv2g4.ipfs.nftstorage.link/?ext=svg", - "linkedin": "https://www.linkedin.com/company/eco-organic-technology", - "website": "https://PurpleZone.github.io/NFTs/carbon/", - "whitepaper": "https://gateway.ipfs.io/ipns/QmNwPaqvPMZKxEDZB8vr63wTmf5bZ2JocYY7HamWY8ws3E/whitepaper.pdf" - } - }, - { - "chainId": 101, - "address": "7eYfqg7yeWVSVQPRP4LEo7oZ93RaCXExn4JLgrcWtUd6", - "symbol": "DOMEIN", - "name": "Domein Bergen community-coin", - "decimals": 0, - "logoURI": "https://github.com/SicoDM/crypto/blob/main/logo.png", - "tags": ["community-token"] - }, - { - "chainId": 101, - "address": "8CVx21yr9oCdJj2zAxG6bo3L8DczBNnTGuZnK9DckyJx", - "symbol": "MCPS", - "name": "Monkey CryptoPunks", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8CVx21yr9oCdJj2zAxG6bo3L8DczBNnTGuZnK9DckyJx/logo.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "description": "Monkey CryptoPunks is a limited collection of 9,999 NFTs, each with their own unique characteristics that live on the Solana Blockchain.", - "discord": "https://discord.com/invite/ksnEANHtqE", - "twitter": "https://twitter.com/mk_cryptopunks", - "website": "https://www.monkeycryptopunks.com/" - } - }, - { - "chainId": 101, - "address": "aoUpST1bQEgCqYGbgq1e1rU4wyg2bf8R7UfAJSjbKX7", - "symbol": "GOOM", - "name": "GoomCoin", - "decimals": 6, - "logoURI": "https://drive.google.com/file/d/1hacK8KWncwESO_qamhNzQEJsm_AnAigb/view", - "tags": ["NFT", "utility-token"], - "extensions": { - "discord": "https://discord.gg/NT83yQv3qd", - "twitter": "https://twitter.com/TheGoomies", - "website": "https://www.goomies.io/" - } - }, - { - "chainId": 101, - "address": "5BwDHmAdRqv8Rbg73zHEgbbuLJ4TezoZWNzfcYy76Lfp", - "symbol": "GC", - "name": "Goubi Coin", - "decimals": 0, - "logoURI": "https://github.com/judysoukkari/crypto/blob/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GXwm1z14osgRaQRNaszvLx3bTCdj3ANYZ7vbv6gwAYEP", - "symbol": "AX", - "name": "AX Coin", - "decimals": 0, - "logoURI": "https://github.com/amelie-project/crypto/blob/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4LAKVnUQFNSiMLdqNboynMf3KjctauodmEuEA6S3Xqu6", - "symbol": "GNS", - "name": "Genius Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jslhost/genius_coin_logo/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 102, - "address": "Figt9t7AcUbYBxRaUZu7tkLZt3sDwk2Ge5c5RtLMUKvg", - "symbol": "STT", - "name": "Solana Test Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/daddydonke/gem-farm-ui/main/public/images/icon.png", - "tags": ["testtoken"], - "extensions": { - "website": "https://www.solana.com/" - } - }, - { - "chainId": 102, - "address": "CEhqvEgXz86KhRHBfyJD48eCZ9kocJnfSKy53DrcYyrX", - "symbol": "NST", - "name": "New Solana Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/InnoVetrov/Blockchain-token/main/logo.jpg", - "tags": ["newtoken"], - "extensions": { - "website": "https://www.solana.com/" - } - }, - { - "chainId": 101, - "address": "C4mtUoREqECRPC78tBBfjLuC5TwVaLhPDaz6Rb3ddyBo", - "symbol": "INNO", - "name": "Inno Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/InnoVetrov/Blockchain-token/main/logo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8AuVD7P3WBZQcYCy8npWjF5RNgM8Sp3FcnbGVxndYUZi", - "symbol": "NgMp", - "name": "Neon Game Mint Pass", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8AuVD7P3WBZQcYCy8npWjF5RNgM8Sp3FcnbGVxndYUZi/logo.png", - "tags": ["community-token", "mint-token"], - "extensions": { - "website": "https://neon.game" - } - }, - { - "chainId": 101, - "address": "AqZ6KDci9ichNuz1WVYiWxmUdfsHsbXeYsSyJffF26kn", - "symbol": "FION", - "name": "Finoa Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/shahinabdi/Crypto/main/Logo.png", - "tags": ["social-token", "NFT", "utility-token"] - }, - { - "chainId": 101, - "address": "LjjVwwYJLCRW9vegYFj7y8kVp1nfw9j3nMG3VEkeMGr", - "symbol": "FEED", - "name": "Feederino", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jbeckmann1/feederino.coin/main/logo.png", - "tags": ["community-token"] - }, - { - "chainId": 101, - "address": "9P3rqFGoJNbNgGtEaVX9rADzBY1L9DM37viqxUvByQU9", - "symbol": "LTC", - "name": "Lotus Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Aoisuki/coin_project/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ZZZE4qEtwCEgNqhQVLkRqnY2rBwsWL3W1XaYDkhVRUx", - "symbol": "ZZZE", - "name": "ZENJIN VIPERZ OFFICIAL WL TOKEN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ZZZE4qEtwCEgNqhQVLkRqnY2rBwsWL3W1XaYDkhVRUx/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/ZenjinViperz" - } - }, - { - "chainId": 101, - "address": "HrTAyM65ePyJ48uSV4zw7oP7kDqNaM7MxwAUbbGwNVP5", - "symbol": "GGWL", - "name": "Ghekre Gorillaz WL token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HrTAyM65ePyJ48uSV4zw7oP7kDqNaM7MxwAUbbGwNVP5/icon.png" - }, - { - "chainId": 101, - "address": "BgnUXNGACSKpoba3P54APdQRSCtghSZndH5dq6kT6uR2", - "symbol": "DCATGT", - "name": "DCAT GOLD TOKEN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/dcatmusicnft/token-list/main/assets/mainnet/BgnUXNGACSKpoba3P54APdQRSCtghSZndH5dq6kT6uR2/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/dcatmetaverse", - "instagram": "https://www.instagram.com/dcatmusicnft", - "telegram": "https://t.me/dcatmetaverse", - "twitter": "https://twitter.com/dcatmetaverse", - "website": "https://www.dcatmusic.com/" - } - }, - { - "chainId": 101, - "address": "6q7mSkFsgCspNwZCgBTgo7Q1RcmKo7P4DpKFy3PxAUXg", - "symbol": "NOROI", - "name": "Atama NOROI", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/AtamaNFT/crypto/main/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.com/invite/adeEYRAbmy", - "twitter": "https://twitter.com/NorowaretaUchu", - "website": "https://atamanft.com/" - } - }, - { - "chainId": 101, - "address": "4NBLvi2sEzRFDUreaHARCagWTvzMWVjhw3qfDW3agF7J", - "symbol": "CDT", - "name": "Crypto Deity Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/b4dcat404/crypto_deity/main/logo.png", - "tags": ["social-token", "crypto-deity-token", "gaming"] - }, - { - "chainId": 101, - "address": "NovawtDyKZ6feVg3EUjuZfVUtqtjGP4fkXwuQZWQS86", - "symbol": "NOVA", - "name": "NOVA PROGRAMMABLE ASSETS", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BDrL8huis6S5tpmozaAaT5zhE5A7ZBAB2jMMvpKEeF8A/logo.svg", - "extensions": { - "twitter": "https://twitter.com/NovaFinance_" - } - }, - { - "chainId": 101, - "address": "HhWdM2VApdTkBL8sWgURrKhc3yGaGYtyKk2majWsC5dn", - "symbol": "$SLCF", - "name": "Solaunchief Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HhWdM2VApdTkBL8sWgURrKhc3yGaGYtyKk2majWsC5dn/logo.png", - "tags": ["social-token", "finance-token", "utility-token"], - "extensions": { - "twitter": "https://twitter.com/solaunchief", - "website": "https://www.solaunchief.xyz/" - } - }, - { - "chainId": 101, - "address": "4LmBST72YGpmv4GA26dXQs2ocwECmt19SYA7j4Ar1URb", - "symbol": "Soil", - "name": "Soil", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Datatolk/Solana/main/Soil%20logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9bnKvEK2ymzbrtKGeCSbDtn7Dr1afCQoTTH1y4fL5seK", - "symbol": "RBN", - "name": "Robin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9bnKvEK2ymzbrtKGeCSbDtn7Dr1afCQoTTH1y4fL5seK/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/XcYRWpbm7Z", - "instagram": "https://www.instagram.com/_robin_token_/", - "telegram": "https://t.me/robintoken", - "twitter": "https://twitter.com/_Robin_Token_", - "website": "https://robintoken.net/" - } - }, - { - "chainId": 101, - "address": "6MwT3xNSDqqe3zu4JX8iSFzdqU8xfv1MDA3u4brJ87Ct", - "symbol": "DWR", - "name": "Deep-Waters", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/dwr-research/DWResearch/main/dwfinaudit.png", - "tags": ["utility-token", "community-token", "governance-token"] - }, - { - "chainId": 101, - "address": "A7myaSTanmpsa79NiMojGkxU9WfWDjS6wE7ei6EjxmV5", - "symbol": "ACHV", - "name": "AchievementCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/YenteCeulemans/Crypto/main/CryptoCirkel.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FfMRKofNLF3Z38qcuvP72xr4t39kYnWUhwfgt8X7jigd", - "symbol": "CARTON", - "name": "CARTON", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FfMRKofNLF3Z38qcuvP72xr4t39kYnWUhwfgt8X7jigd/logo.png", - "tags": ["social-token", "utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/CartonkidsNFT", - "website": "https://www.cartonkids.xyz/" - } - }, - { - "chainId": 101, - "address": "FtssCcc6aYaadQbuopCPJnpaku3YaVkP7kB1KNzF2nkR", - "symbol": "JOTC", - "name": "JokerOfTimeCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mrlowbot/Crypto/main/crypto.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Gi2AYxsjmRTDTKbNSaq7ieZ2WmWLZyvgQtnupqFPiDH7", - "symbol": "AMCWL", - "name": "Ancient Meta Cats WL Access", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Gi2AYxsjmRTDTKbNSaq7ieZ2WmWLZyvgQtnupqFPiDH7/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/metacats", - "instagram": "https://www.instagram.com/AncientMetaCats/", - "twitter": "https://twitter.com/AncientMetaCats", - "website": "https://ancientmetacats.io/" - } - }, - { - "chainId": 101, - "address": "DvaTtZB5XbJysHvAi4qAgN9gEQU3g4Dgy1w2eo5vuLUV", - "symbol": "HTC", - "name": "HF-Fund Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DvaTtZB5XbJysHvAi4qAgN9gEQU3g4Dgy1w2eo5vuLUV/fh-logo.png", - "tags": ["community-token"], - "extensions": { - "website": "https://www.fh-fund.org.ua/en" - } - }, - { - "chainId": 101, - "address": "TokkUDv5pRKTJNAs8ceraoKC2JUThjuj8LAHXoTAUsZ", - "symbol": "$SCREAM", - "name": "SCREAM", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/TokkUDv5pRKTJNAs8ceraoKC2JUThjuj8LAHXoTAUsZ/logo.png" - }, - { - "chainId": 101, - "address": "GLS5WLSpjdDo7z9AVscccA85vfqt1qHTuMiU6oynYCyB", - "symbol": "NEKO", - "name": "NEKO Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GLS5WLSpjdDo7z9AVscccA85vfqt1qHTuMiU6oynYCyB/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.com/Ge3XntNb53", - "instagram": "https://instagram.com/pluginio", - "telegram": "https://t.me/pluginio", - "twitter": "https://twitter.com/pluginio", - "website": "https://plugin.io" - } - }, - { - "chainId": 101, - "address": "DKwsWeqHrB8R1u2DFMHKtq4iqaQNgPgUbHTJyXPqkTzK", - "symbol": "swimUSD-avalUSDC", - "name": "Swim AVAX USDC Meta-pool LP", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DKwsWeqHrB8R1u2DFMHKtq4iqaQNgPgUbHTJyXPqkTzK/lp_metapool_avalanche_usdc.svg", - "tags": ["lp-token"], - "extensions": { - "blog": "https://blog.swim.io", - "discord": "https://discord.gg/wGrxQ7GAgP", - "telegram": "https://t.me/joinchat/Mnc1WjrKcq8yYTM1", - "twitter": "https://twitter.com/SwimProtocol", - "website": "https://swim.io/", - "whitepaper": "https://swim.io/whitepaper.pdf" - } - }, - { - "chainId": 101, - "address": "5rwvDmUbcnZTwZ4Zywev2wnDbyDDD2vcsGU2Xmy7aRNS", - "symbol": "swimUSD-avalUSDT", - "name": "Swim AVAX USDT Meta-pool LP", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5rwvDmUbcnZTwZ4Zywev2wnDbyDDD2vcsGU2Xmy7aRNS/lp_metapool_avalanche_usdt.svg", - "tags": ["lp-token"], - "extensions": { - "blog": "https://blog.swim.io", - "discord": "https://discord.gg/wGrxQ7GAgP", - "telegram": "https://t.me/joinchat/Mnc1WjrKcq8yYTM1", - "twitter": "https://twitter.com/SwimProtocol", - "website": "https://swim.io/", - "whitepaper": "https://swim.io/whitepaper.pdf" - } - }, - { - "chainId": 101, - "address": "ANFojEXhiEQQoovhBs77XmBQuqbe59UBygRWViyf4945", - "symbol": "swimUSD-polyUSDC", - "name": "Swim Polygon USDC Meta-pool LP", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ANFojEXhiEQQoovhBs77XmBQuqbe59UBygRWViyf4945/lp_metapool_polygon_usdc.svg", - "tags": ["lp-token"], - "extensions": { - "blog": "https://blog.swim.io", - "discord": "https://discord.gg/wGrxQ7GAgP", - "telegram": "https://t.me/joinchat/Mnc1WjrKcq8yYTM1", - "twitter": "https://twitter.com/SwimProtocol", - "website": "https://swim.io/", - "whitepaper": "https://swim.io/whitepaper.pdf" - } - }, - { - "chainId": 101, - "address": "2Nx6L79dHHgHcJtNfZWukQkWZvf5h4bps34zuh1gjtdP", - "symbol": "swimUSD-polyUSDT", - "name": "Swim Polygon USDT Meta-pool LP", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2Nx6L79dHHgHcJtNfZWukQkWZvf5h4bps34zuh1gjtdP/lp_metapool_polygon_usdt.svg", - "tags": ["lp-token"], - "extensions": { - "blog": "https://blog.swim.io", - "discord": "https://discord.gg/wGrxQ7GAgP", - "telegram": "https://t.me/joinchat/Mnc1WjrKcq8yYTM1", - "twitter": "https://twitter.com/SwimProtocol", - "website": "https://swim.io/", - "whitepaper": "https://swim.io/whitepaper.pdf" - } - }, - { - "chainId": 101, - "address": "J5ifGexAQTg76TresJhJSqTPJLT6BNxrV5rwNJTTz4Cx", - "symbol": "swimUSD-fantUSDC", - "name": "Swim Fantom USDC Meta-pool LP", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/J5ifGexAQTg76TresJhJSqTPJLT6BNxrV5rwNJTTz4Cx/lp_metapool_fantom_usdc.svg", - "tags": ["lp-token"], - "extensions": { - "blog": "https://blog.swim.io", - "discord": "https://discord.gg/wGrxQ7GAgP", - "telegram": "https://t.me/joinchat/Mnc1WjrKcq8yYTM1", - "twitter": "https://twitter.com/SwimProtocol", - "website": "https://swim.io/", - "whitepaper": "https://swim.io/whitepaper.pdf" - } - }, - { - "chainId": 101, - "address": "3eXCU7YoiCq3rZ6787pPFJE7TXBsKuTZ49wH2kFnuTeF", - "symbol": "swimUSD-auroUSN", - "name": "Swim Aurora USN Meta-pool LP", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3eXCU7YoiCq3rZ6787pPFJE7TXBsKuTZ49wH2kFnuTeF/lp_metapool_aurora_usn.svg", - "tags": ["lp-token"], - "extensions": { - "blog": "https://blog.swim.io", - "discord": "https://discord.gg/wGrxQ7GAgP", - "telegram": "https://t.me/joinchat/Mnc1WjrKcq8yYTM1", - "twitter": "https://twitter.com/SwimProtocol", - "website": "https://swim.io/", - "whitepaper": "https://swim.io/whitepaper.pdf" - } - }, - { - "chainId": 101, - "address": "9qRe2nBrR2rTXxRaV1PZN9hZnqq3UXgoFWTbP6NE3MEu", - "symbol": "swimUSD-auroUSDC", - "name": "Swim Aurora USDC Meta-pool LP", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9qRe2nBrR2rTXxRaV1PZN9hZnqq3UXgoFWTbP6NE3MEu/lp_metapool_aurora_usdc.svg", - "tags": ["lp-token"], - "extensions": { - "blog": "https://blog.swim.io", - "discord": "https://discord.gg/wGrxQ7GAgP", - "telegram": "https://t.me/joinchat/Mnc1WjrKcq8yYTM1", - "twitter": "https://twitter.com/SwimProtocol", - "website": "https://swim.io/", - "whitepaper": "https://swim.io/whitepaper.pdf" - } - }, - { - "chainId": 101, - "address": "4XPDxtGbcM7bAPKZxALd2s862n3WoG4xPPvyCPVULKAb", - "symbol": "swimUSD-auroUSDT", - "name": "Swim Aurora USDT Meta-pool LP", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4XPDxtGbcM7bAPKZxALd2s862n3WoG4xPPvyCPVULKAb/lp_metapool_aurora_usdt.svg", - "tags": ["lp-token"], - "extensions": { - "blog": "https://blog.swim.io", - "discord": "https://discord.gg/wGrxQ7GAgP", - "telegram": "https://t.me/joinchat/Mnc1WjrKcq8yYTM1", - "twitter": "https://twitter.com/SwimProtocol", - "website": "https://swim.io/", - "whitepaper": "https://swim.io/whitepaper.pdf" - } - }, - { - "chainId": 101, - "address": "2ng5Y3i1qXPfSNSuyps4GzE2csa9V268SrwHkxwhkZ7R", - "symbol": "3KNG", - "name": "3KingzKaterin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/WiZzMaN47/CryptoToken/main/PicsArt_02-11-02.05.26.jpg", - "tags": ["social-token", "3KingzKaterin", "3KNG", "420", "MzpHX420"] - }, - { - "chainId": 101, - "address": "c2Moo4p2343VHsEtCVXSsx5D1dLCdhJQAb8dGXsjBsy", - "symbol": "YUKAG", - "name": "YUKON Silver", - "decimals": 9, - "logoURI": "https://static.wixstatic.com/media/4b5c4d_70908113a6b94c1ea6034a291ca026c6~mv2.png", - "tags": ["community-token", "trading-token"] - }, - { - "chainId": 101, - "address": "CNLTUm3bYaF9HKQPEjvMFVH7QWnng1QWTeTXZzavLPDq", - "symbol": "LW-WL", - "name": "Luna Wolves WL Token", - "decimals": 0, - "logoURI": "https://arweave.net/TDt30NbOgs7CCG-tP-2HCfUlOACXPDEukfv26CEB2No?ext=gif", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.com/invite/alphawolves", - "twitter": "https://twitter.com/lunawolvesnft", - "website": "https://www.worldofwolves.xyz/" - } - }, - { - "chainId": 101, - "address": "FdabruMo1vKVdFMVKiCCN3iJZyvCEFNkGjJVKfL3LZs9", - "symbol": "INTEL", - "name": "INTEL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FdabruMo1vKVdFMVKiCCN3iJZyvCEFNkGjJVKfL3LZs9/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://sectorh.io/" - } - }, - { - "chainId": 101, - "address": "HixHwyVf1fLLYbEHdjEjmhrYN274EVDKENa9xoogqXdv", - "symbol": "XCHI", - "name": "XCHI Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HixHwyVf1fLLYbEHdjEjmhrYN274EVDKENa9xoogqXdv/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/Mantis_Chick" - } - }, - { - "chainId": 101, - "address": "HJK8mdAx5gZqW7Y9riSF3A1gR41pmR26c4GhmHtcvuz", - "symbol": "CLDZ", - "name": "Clouderz Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/elijahbrookss/crypto/main/noob_with_panV4.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "79BXbiiN5HcXH1vRHbQgs9T9Qmae9por26ULEMXuaP7L", - "symbol": "$PARENT", - "name": "PARENT", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/puresec-ng/gary/main/PARENT_coin.png" - }, - { - "chainId": 101, - "address": "7pd9nmEbT55hkzL4n8kXutzgyjSEUnvfFvHAs9saDsfx", - "symbol": "$JRNY", - "name": "JRNY", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/puresec-ng/gary/main/JRNY_coin.png" - }, - { - "chainId": 101, - "address": "EKh6pXWD4pp3U32j7zEe6Bx2LQtwyhuJLz5QV27Kwo4m", - "symbol": "$GSWL", - "name": "GSWL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/puresec-ng/gary/main/GSWL_coin.png" - }, - { - "chainId": 101, - "address": "FKuNiWqyAaNpc6LpNvR84qcX411WPm3UT42jZy6wZeRf", - "symbol": "NSOL", - "name": "EdenSOL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FKuNiWqyAaNpc6LpNvR84qcX411WPm3UT42jZy6wZeRf/logo.png", - "extensions": { - "website": "https://edensol.net/" - } - }, - { - "chainId": 101, - "address": "2Dms1zJEcmRsxv4QP3JZfMz9Bo8arYAsYdeSGyncnnFM", - "symbol": "SUNF", - "name": "SunflowerF", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/ELFatimazahra02/crypto/main/attachment_60759885.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5kDKM99M919G4xQgbUQLAbTHmN4msR5JsRP9aSbDrfMz", - "symbol": "$WFC", - "name": "Wild Fox Cash", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/WildFoxClub/asset/main/Logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://wildfoxclub.com/" - } - }, - { - "chainId": 101, - "address": "FMYExjhXQHErTxAFFwMp7VRjvtoYKWciyztxwsrAdAmf", - "symbol": "CRS", - "name": "Car Shadows", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Shadowhashem/shadowcars/main/logo.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "3v2o7RSMPpXCPjmE3ANeiqUTHnKX2CFMVuoAj2EdR9ve", - "symbol": "$HEART", - "name": "HEART", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/HeartOfficial/Heart-v1/main/Heart%20Logo%20V1.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FD2AYBKWQJ3oySdffANDCejBGYv3etrfzuyhKoMg1sab", - "symbol": "LEAN", - "name": "Leancoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Phongii/crypto/main/logo.png.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6JKtKEFiyp67VPN61nTCyUpY1cLrAZ7qpXiBsKqWZqWh", - "symbol": "tsRAY", - "name": "tsRAY", - "decimals": 6, - "logoURI": "https://user-images.githubusercontent.com/8619106/168856965-d216c773-a3ad-4e9c-b6f8-f64025c735a5.png", - "tags": ["solfarm", "tulip", "lending", "strategy"], - "extensions": { - "discord": "https://discord.com/invite/tulip", - "twitter": "https://twitter.com/TulipProtocol", - "website": "https://tulip.garden/" - } - }, - { - "chainId": 101, - "address": "AHV6CBjuT7M2HMMKDa5gRSEoBcJGWVjURCBhpgMbyESX", - "symbol": "tsUSDT", - "name": "tsUSDT", - "decimals": 6, - "logoURI": "https://user-images.githubusercontent.com/8619106/168857135-62593b94-1dcd-42d7-8373-ee505a006ed9.png", - "tags": ["solfarm", "tulip", "lending", "strategy"], - "extensions": { - "discord": "https://discord.com/invite/tulip", - "twitter": "https://twitter.com/TulipProtocol", - "website": "https://tulip.garden/" - } - }, - { - "chainId": 101, - "address": "DgnaQdr5VkNbH7n8qN471Hgsw19hUbMBhUs1N3MQKgtu", - "symbol": "tsSOL", - "name": "tsSOL", - "decimals": 9, - "logoURI": "https://user-images.githubusercontent.com/8619106/168851932-17ddaac9-979b-4c2f-9838-4a397d961722.png", - "tags": ["solfarm", "tulip", "lending", "strategy"], - "extensions": { - "discord": "https://discord.com/invite/tulip", - "twitter": "https://twitter.com/TulipProtocol", - "website": "https://tulip.garden/" - } - }, - { - "chainId": 101, - "address": "FrYsXT2tdyRCL9wGapgWkL1YAWU8pUk7x4rcR2LLhade", - "symbol": "MARS", - "name": "MissionMars", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/fboch25/solana-token-creation/main/iphone_app60x60%403x.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7iE3sX7yTTg9Pn8P4nC99gii9MezNK9cPVz3XqEj17yg", - "symbol": "HUB", - "name": "HUBTOKEN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7iE3sX7yTTg9Pn8P4nC99gii9MezNK9cPVz3XqEj17yg/logo.png", - "extensions": { - "discord": "https://discord.gg/gamehubnft", - "twitter": "https://twitter.com/GameHubNFT", - "website": "https://www.gamehub.is/" - } - }, - { - "chainId": 101, - "address": "BANANAs2SCcdFmZw3ahhM9PpQ1GhdgpxJ6mcARTuSzQc", - "symbol": "BANANA", - "name": "AOWS Banana", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BANANAs2SCcdFmZw3ahhM9PpQ1GhdgpxJ6mcARTuSzQc/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/apesofwallstreet", - "twitter": "https://twitter.com/ApesOfWallStNFT", - "website": "https://www.apesofwallstreetnft.com" - } - }, - { - "chainId": 101, - "address": "2mtG2SXAUPBewyFX4evjmCBH5MZHAiA7VFmVVFTxcvQA", - "symbol": "PAGMI", - "name": "PAGMI", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2mtG2SXAUPBewyFX4evjmCBH5MZHAiA7VFmVVFTxcvQA/logo.png", - "tags": ["social-token", "utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/partyparrotsdao" - } - }, - { - "chainId": 101, - "address": "q4n1gKnvhPXiHNq5EroZDEbHt1WFuJ1tJjj5xUX5B5G", - "symbol": "LYUM", - "name": "Project Lylium", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/proDestiny/TokenLylium/main/LOGO.jpg", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "5XG32F6fSbnAzyG348FjUnSLQxw3cxgPFnBSo7UfSXKH", - "symbol": "DWBLN", - "name": "Dawbloon", - "decimals": 9, - "logoURI": "https://imgix.cosmicjs.com/556be6e0-d608-11ec-bb19-d9085ce408df-Icon.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6H2U4ueSn1K1U9LSMGNV4u2oTeApup47J38hn5BJ63Qa", - "symbol": "LMC", - "name": "Limbocoin ", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Novak-Fenocchio/LimboCoin/main/logo.png" - }, - { - "chainId": 101, - "address": "6G2pWrzW5SzsQbpU6LLn5AJwV9FASCWvTNfAPKyFCKHV", - "symbol": "JELLY_WL_ONE", - "name": "JELLYBABIES PHASE ONE WHITELIST", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3PGgQnN1icXNscLCjwF6zdyeCrDP4vmBg6LBK5MLdAC4/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "discord": "https://discord.com/invite/wzEfUjmpFw", - "twitter": "https://twitter.com/JellyBabiesNFT" - } - }, - { - "chainId": 101, - "address": "9VthVfjnNoeBzPpN4Dk8U4Nhn5g96ddLb8aAc9xJKiGv", - "symbol": "JELLY_WL_TWO", - "name": "JELLYBABIES PHASE TWO WHITELIST", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3PGgQnN1icXNscLCjwF6zdyeCrDP4vmBg6LBK5MLdAC4/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "discord": "https://discord.com/invite/wzEfUjmpFw", - "twitter": "https://twitter.com/JellyBabiesNFT" - } - }, - { - "chainId": 101, - "address": "73pWtZwP3bq5XUYQdPi4jkchGKJpL3pR5U93rh1oFJV3", - "symbol": "JELLY_WL_THREE", - "name": "JELLYBABIES PHASE THREE WHITELIST", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3PGgQnN1icXNscLCjwF6zdyeCrDP4vmBg6LBK5MLdAC4/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "discord": "https://discord.com/invite/wzEfUjmpFw", - "twitter": "https://twitter.com/JellyBabiesNFT" - } - }, - { - "chainId": 103, - "address": "nchrLQC3YT6kepn9JvepyDDwRMQDyZXqQ29P85Q22qf", - "symbol": "a-btc", - "name": "Anchored Bitcoin", - "decimals": 10, - "logoURI": "https://cdn.jsdelivr.net/gh/PurpleZone/NFTs@latest/anchorcoin/anchorcoin.svg", - "tags": [ - "green-coin", - "community-token", - "utility-token", - "colored-token" - ], - "extensions": { - "coingeckoId": "bitcoin", - "description": "Anchoring Bitcoin to the right value: people", - "imageUrl": "https://bafybeignxjpwr5lp7zcnxlitnz2kf65zclybls2hxlwc7rgzmqp7ys54ta.ipfs.nftstorage.link/?ext=svg", - "linkedin": "https://www.linkedin.com/company/eco-organic-technology", - "telegram": "https://t.me/cryptolake2", - "website": "https://PurpleZone.github.io/NFTs/anchorcoin/", - "whitepaper": "https://gateway.ipfs.io/ipns/QmXwMs5cRBesM4fWY6Sdqz9unkMUfCNmmypj19c1JvBDYk/whitepaper.pdf" - } - }, - { - "chainId": 101, - "address": "7i7LiEhcmoqSefeWG2v9v7nXoXNywBT3aMgnt7sz5fAZ", - "symbol": "GLUG", - "name": "GLUG Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/onuraladi/GlugToken/main/glugtoken.png", - "tags": [ - "art-token", - "financial-token", - "monetary-token", - "educational-token", - "project-token" - ] - }, - { - "chainId": 101, - "address": "BZEBAESPFUs5BxapADhzLCuNCdKxbXD9SwZ48StYrh9X", - "symbol": "1689", - "name": "1689 Continental", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Kryptoenterprise/Crypto/main/LogoPlain.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "ANbgghBCZS7bN899tcS4RK6ndtAShoLEoReDN8W6ujPL", - "symbol": "RCN", - "name": "Rapid Cash Network", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/rohitz308/crypto/main/Rapid%20Cash.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "CZeroeJm4gfmdeL5vUy5VLUJm3aqRf2dgs7fz6DhC6vs", - "symbol": "btc-z", - "name": "Bitcoin CarbonZero", - "decimals": 10, - "logoURI": "https://cdn.jsdelivr.net/gh/PurpleZone/NFTs@latest/btcz/btc-z.svg", - "tags": [ - "zerocarbon-coin", - "community-token", - "utility-token", - "colored-token" - ], - "extensions": { - "coingeckoId": "polkadot", - "description": "Removing Carbon in cryptocurrencies one coin at a time", - "imageUrl": "https://bafybeiaey7aarrnghsu6ziv6cofpqftj22c4ssyf4d74feccfgkmsw63du.ipfs.nftstorage.link/?ext=svg", - "linkedin": "https://www.linkedin.com/company/eco-organic-technology", - "telegram": "https://t.me/cryptolake2", - "website": "https://PurpleZone.github.io/NFTs/btcz/", - "whitepaper": "https://gateway.ipfs.io/ipns/QmYaMUFdqHmTk4V3HLfHwK3pq8d3Tqpk8s96ftb7WUkS1w/whitepaper.pdf" - } - }, - { - "chainId": 101, - "address": "J64w7g38vBf6XZwie14pJJYSwdTxutEX5XB1dDcDBH4n", - "symbol": "$YUMI", - "name": "YUMI Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/J64w7g38vBf6XZwie14pJJYSwdTxutEX5XB1dDcDBH4n/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Utility Token For Takashi Ronin", - "discord": "https://discord.gg/takashironin", - "twitter": "https://twitter.com/TakashiRonin", - "website": "https://www.takashironin.com" - } - }, - { - "chainId": 101, - "address": "6cwW3gBpWnBU8UAsximLQVfbMySJqBG6LkFsozkr7BTg", - "symbol": "$MEAT", - "name": "Dino Jump MEAT", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6cwW3gBpWnBU8UAsximLQVfbMySJqBG6LkFsozkr7BTg/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/dinojump", - "twitter": "https://twitter.com/dinojumpnft", - "website": "http://dinojump.co/" - } - }, - { - "chainId": 101, - "address": "BoM2h2rFPgqwjgq5qS41tKHZ18C6tqm9EimhXk6ojw8z", - "symbol": "TICKET", - "name": "Paradise Ticket", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/ParadiseAutomata/token-list/main/assets/mainnet/BoM2h2rFPgqwjgq5qS41tKHZ18C6tqm9EimhXk6ojw8z/logo.png", - "tags": ["DeFi"] - }, - { - "chainId": 101, - "address": "HotDogCsQgc25peDiEq8rxX7sopMdVJBUABxm8fwqBC5", - "symbol": "HOTDOG", - "name": "Hotdog", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HotDogCsQgc25peDiEq8rxX7sopMdVJBUABxm8fwqBC5/logo.png" - }, - { - "chainId": 101, - "address": "7uzUfnJrRrSPhBapKgo9hxKuVugEccXLRr9Mgaqg1Hog", - "symbol": "HUGS", - "name": "Hugs Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/hugs-platform/hugs-token-assets/main/logo.svg", - "tags": ["utility-token"], - "extensions": { - "description": "The Decentralized Crowdsourcing Platform", - "github": "https://github.com/hugs-platform", - "linkedin": "https://www.linkedin.com/company/hugsplatform", - "twitter": "https://twitter.com/HugsPlatform", - "website": "https://www.hugsplatform.com", - "whitepaper": "https://docs.hugsplatform.com" - } - }, - { - "chainId": 101, - "address": "EDMcdz5QTtfDowHrzPYR1WDw23BhwBJBUbJjFo1RhmdT", - "symbol": "LTW", - "name": "LTW Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EDMcdz5QTtfDowHrzPYR1WDw23BhwBJBUbJjFo1RhmdT/ltwtoken.png" - }, - { - "chainId": 101, - "address": "FujiSB9NYj8bGeEh77bibsK9PnBhRNXLZ5V4t6aMBtfK", - "symbol": "FUJILIST", - "name": "Fujilist Token", - "decimals": 0, - "logoURI": "https://i.imgur.com/Ve9wr7a_d.webp?maxwidth=760\u0026fidelity=grand", - "tags": ["DeFi"] - }, - { - "chainId": 101, - "address": "FfHyRCUVhsgBkWijV6PXpAzP5Tdkf86eYUof6ZZfx6Kb", - "symbol": "UZM", - "name": "UzbMoon", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Khxuja1/CryptoUZS/main/uzs-min.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "gLhY2arqFpmVGkpbBbTi3TeWbsWevA8dqrwbKacK3vJ", - "symbol": "tuUSDT", - "name": "tuUSDT", - "decimals": 6, - "logoURI": "https://user-images.githubusercontent.com/8619106/169034746-d2bef331-4829-442f-8f91-5556e7c60d28.png", - "tags": ["tulip-protocol", "lending", "collateral-tokens"], - "extensions": { - "discord": "https://discord.com/invite/tulip", - "twitter": "https://twitter.com/TulipProtocol", - "website": "https://tulip.garden/" - } - }, - { - "chainId": 101, - "address": "8jqjjbFtVQ9u2fDyqNWA6vCuU3wepnfafuaHTLYw8aog", - "symbol": "OATSU", - "name": "OATSU", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Robby3082/test-token/main/OATSU_COIN_ICON.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "9Tv7peSKQ3JTR5J1dYubnqhf8t4TaAGMiEv86eZaWsM3", - "symbol": "LOTTERY", - "name": "TSF LOTTERY", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9Tv7peSKQ3JTR5J1dYubnqhf8t4TaAGMiEv86eZaWsM3/logo.jpg", - "tags": ["nft-token", "community-token"], - "extensions": { - "description": "Collect TSF Flies token to open your mystery box.", - "discord": "http://discord.gg/stonedfrogs", - "twitter": "https://twitter.com/thestonedfrogs", - "website": "https://www.thestonedfrogs.io/" - } - }, - { - "chainId": 101, - "address": "7vG8c9DyEUj3k6Sf2FYZ9NsN7nUXDE4XWzvkAoUQwjCp", - "symbol": "BLD", - "name": "Bloodlust", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7vG8c9DyEUj3k6Sf2FYZ9NsN7nUXDE4XWzvkAoUQwjCp/logo.png", - "extensions": { - "twitter": "https://twitter.com/UndeadSols" - } - }, - { - "chainId": 101, - "address": "Gx2RyCAui6nbkC2eY3T1J53Le9UfNYUzFaiNGogvqmYF", - "symbol": "BNLU", - "name": "Banalu", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/techsteramman/banalu/main/banalu%20coin.png", - "tags": ["dodgy-token"] - }, - { - "chainId": 101, - "address": "CTYiHf58UGShfHtpkTwx7vjPDA779dd6iVaeD281fEVx", - "symbol": "HUNT", - "name": "Hunter Diamond", - "decimals": 9, - "logoURI": "https://tokenhunters.app/assets/img/icons/chest-close.svg" - }, - { - "chainId": 101, - "address": "GRsoqmhsS7fCLpEqqE7oRM92ag3WVy8VbJAi6KfWSeHS", - "symbol": "BBI", - "name": "Bridgesplit Brand Index", - "decimals": 2, - "logoURI": "https://i.imgur.com/lbvoBFh.png", - "tags": [ - "unstoppable-domains", - "domains", - "bridgesplit-fraction", - "curated-index" - ], - "extensions": { - "discord": "https://discord.gg/bridgesplit", - "twitter": "https://twitter.com/bridgesplit", - "vault": "https://app.bridgesplit.com/curated-index/GRsoqmhsS7fCLpEqqE7oRM92ag3WVy8VbJAi6KfWSeHS" - } - }, - { - "chainId": 101, - "address": "4DUQcmSn13YoXHAMfPAT3WDsQb8SmmnC7nom4hcAwRHD", - "symbol": "Grams", - "name": "Grams", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4DUQcmSn13YoXHAMfPAT3WDsQb8SmmnC7nom4hcAwRHD/grams_coin.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "discord": "https://discord.com/invite/gFQdk9wt7z", - "twitter": "https://twitter.com/StonerCupsNFT", - "website": "https://stonercups.io/" - } - }, - { - "chainId": 101, - "address": "2Xy3Z4fW8wmEPMopehpzAaS6VKiVUJU8BGbDppPUKsX8", - "symbol": "DACO", - "name": "DanielCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ch-daniel/crypto/main/token-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4VcGrPUMkicSjwEapYznsXo78rPpdZk9tbTgB1vHaSrA", - "symbol": "SPIRIT", - "name": "LOST SPIRIT TOKEN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/DefiTokens/assets/main/spirit.png" - }, - { - "chainId": 101, - "address": "AYKo5aPAtTVy88aSvQ2HmXFzcNEnU5rG9z99LViBDeiG", - "symbol": "AYKO", - "name": "AYKO Protocol", - "decimals": 9, - "logoURI": "https://i.postimg.cc/BbvHCJz1/IMG-0977.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/AyakoSol", - "website": "http://ayako-sol.com/" - } - }, - { - "chainId": 101, - "address": "3w7WvrnzdEsWq7qPciqZM6SXx8YZUj7stEgAE4WRuzRd", - "symbol": "DTKN", - "name": "Demigod Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3w7WvrnzdEsWq7qPciqZM6SXx8YZUj7stEgAE4WRuzRd/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://demigodcats.com" - } - }, - { - "chainId": 101, - "address": "G33nLPsvygo4qT6ocxA5TuJng7d6BGK6844DCLB3kcfC", - "symbol": "AMIGO-WL", - "name": "AMIGO-WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/TheAmigosNFT/Logo/main/Logo.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/theamigosnft", - "website": "http://theamigos.io/" - } - }, - { - "chainId": 101, - "address": "6mYq94Uo1ciebHZuUhn7waNKV1Xh5tKdQdJToFTJQWb5", - "symbol": "UNCLES", - "name": "UNCLS", - "decimals": 9, - "logoURI": "https://i.pinimg.com/564x/9d/84/75/9d8475e2fc5877f9fc312cc53e3c0bb0.jpg", - "tags": ["utility-token", "community-token"] - }, - { - "chainId": 101, - "address": "726Uy6q8QY4NAr2hrmPFWgMr8QXSAt3xN7PFqXzS3o8d", - "symbol": "MiFi", - "name": "MindFi", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/726Uy6q8QY4NAr2hrmPFWgMr8QXSAt3xN7PFqXzS3o8d/logo.png" - }, - { - "chainId": 101, - "address": "crSLiJCoVd3UG5KKtj5Yy6c9kqW9Y7afTZefcV6c5tZ", - "symbol": "CRAX", - "name": "Bears on Crek Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/crSLiJCoVd3UG5KKtj5Yy6c9kqW9Y7afTZefcV6c5tZ/logo.png", - "tags": ["bears", "Crax"] - }, - { - "chainId": 101, - "address": "8oXhRzmhmf12yrhqHWuso4bKqGnsLNmBfAY2U8w7HwWW", - "symbol": "GBARS", - "name": "Gold Bars", - "decimals": 9, - "logoURI": "https://raw.githack.com/solanafrontier/tokenlogo/main/frontier.png", - "tags": ["utility-token", "community-token"] - }, - { - "chainId": 101, - "address": "4vasoS3ZVVEaaoMqPFJUbd7s5sbJE2WVt8a6QZNZx64u", - "symbol": "KUNAI", - "name": "Kunai", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/floppy-labs/public-images/master/kunaitoken.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "FTaa1sN6woeeDFtSXJ7VsNZiVQKiwXpCnR5WfhsPDRks", - "symbol": "LYME", - "name": "Lymewares", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FTaa1sN6woeeDFtSXJ7VsNZiVQKiwXpCnR5WfhsPDRks/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6235wbvtTomM4nZ74BJJzyuiV4y9H2hGw8u5me1UjoNn", - "symbol": "ZNX", - "name": "ZoneX", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ZoneX8/ZoneX/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "J837mp2mBaSeKeRfwPLyCHunxj9GyUPMp9czdhAW1LyG", - "symbol": "MTTC", - "name": "Tsivery", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MTsivery/crypto/main/logo_mttc.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7n2VscxSrpGLBMCXgV9f5rgpKY6LV9U48CmJRN1cq9yJ", - "symbol": "LDT", - "name": "Lil Token", - "decimals": 0, - "logoURI": "https://github.com/LilDAOs/lilthings/blob/main/logo.png", - "tags": ["utility-token", "community-token", "spl-token"] - }, - { - "chainId": 101, - "address": "EmpqzDmk9iqQn93uDBFcJqiuYCEV6f9iXHJTt4SxjcEN", - "symbol": "MOFROG", - "name": "MoFroggie Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Dakender/MoFroggie-Coin/main/logo-mofroggie.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "E7QfCszwdutZovb8rYAPUfj338M3C4szZPPY8RceTiXm", - "symbol": "BLEND", - "name": "blendhit", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/redazul/s3/main/blend_coin.png", - "tags": ["utility-token"], - "extensions": { - "description": "blendhit is a competitive 3D community", - "discord": "https://discord.gg/HDky5cNeSB", - "twitter": "https://twitter.com/blendhit", - "website": "https://www.blendhit.com" - } - }, - { - "chainId": 101, - "address": "CLNTcXKJEqaiKZ53jMTXMuAnTmz7iULKPxSXy6aSaU66", - "symbol": "CLNT", - "name": "Coolant (BitWhips)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CLNTcXKJEqaiKZ53jMTXMuAnTmz7iULKPxSXy6aSaU66/logo.png", - "extensions": { - "discord": "https://discord.gg/bitwhips", - "twitter": "https://twitter.com/bitwhips", - "website": "https://bitwhips.io/" - } - }, - { - "chainId": 101, - "address": "AUZ89SBMNtcX3H72nShgAnLxFcv8g8UxytN9H68smps6", - "symbol": "LH", - "name": "Lee Henson", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Uplordi/crypto/main/logo.png.png", - "tags": ["social-token", "community-token", "yoroshii"] - }, - { - "chainId": 101, - "address": "EkB2Z2jZDLN8YQVnKeJfAYeoUhCVXtwfmq8eS9fH6kpL", - "symbol": "RSPT", - "name": "MKTV Entertainment Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EkB2Z2jZDLN8YQVnKeJfAYeoUhCVXtwfmq8eS9fH6kpL/logo.png", - "tags": ["entertainment-token", "social-token"] - }, - { - "chainId": 101, - "address": "BCBYNAjzL4xqA8KoaqftqFNoq7jKfa5J4YB2nca2VFfp", - "symbol": "BCBYWP", - "name": "BCBY Whale Pass", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BCBYNAjzL4xqA8KoaqftqFNoq7jKfa5J4YB2nca2VFfp/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3wDZqcNeNzzmrSMn5cTmGK8werqWqRPKqb25HLzHmsA9", - "symbol": "THCxWL", - "name": "THC WL TOKEN", - "decimals": 6, - "logoURI": "https://cannabiznft.io/assets/images/logo-final.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "DK6F53Wm1FWzAguhbt6dPgxoXbDhvDZax1u5sf6pE54L", - "symbol": "ROOTER", - "name": "ROOTER TEST TOKEN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DK6F53Wm1FWzAguhbt6dPgxoXbDhvDZax1u5sf6pE54L/logo.png" - }, - { - "chainId": 101, - "address": "82EhaAkps3mQWjxiftLFYzEK3xNA2hE4s8BbsUYDAx1f", - "symbol": "PiPCoin", - "name": "PanizInParis Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/shahinabdi/Crypto/main/Logo.png", - "tags": ["social-token", "NFT", "utility-token"] - }, - { - "chainId": 101, - "address": "CrWM7qs9JSzDntLrxtKxuuWdi96zqtxKbx8kQpJ7X725", - "symbol": "MEL", - "name": "Mel Coin", - "decimals": 9, - "logoURI": "https://gateway.pinata.cloud/ipfs/QmS7x3KF6Gjos396R6gYgFUoK9q7cK9Vv8RPg7KugDBDv5", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6DAQD2CTgBjQW2no6CTUfUXj7U6cvbtRcHSVoMVVWpJS", - "symbol": "OMENSSOUL", - "name": "OMENS SOUL CHEST", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6DAQD2CTgBjQW2no6CTUfUXj7U6cvbtRcHSVoMVVWpJS/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/jkYNtg3Rx2", - "website": "https://omens.art" - } - }, - { - "chainId": 101, - "address": "PrDgwZN6dQjDLVaTRZN4rhA78EQh76TESsHtFyCB9SG", - "symbol": "JUTC", - "name": "JUngle TreAzure Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/catblue88/token-test/main/JUTClogo.png", - "tags": ["utility-token", "community-token"] - }, - { - "chainId": 101, - "address": "3uB5EV7BMFRp1sTnjegeJjyYDpTijgfepEzjY29j9GFx", - "symbol": "MBSTAKING", - "name": "Moonbears staking", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Robby3082/test-token/main/coin.png", - "tags": ["NFTs", "Staking"] - }, - { - "chainId": 101, - "address": "4f4D9hsgi2LmMG25MVKnGchybhd6nfZGM6CSuoS9Ynu3", - "symbol": "TCWT", - "name": "Trippy Cats WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Deghf666g/catswl/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FrGoxNkySvFmnnCzuwAVZhCz4PbfcyFTBvUc6rNqNH6J", - "symbol": "YUKAU", - "name": "YUKON Gold", - "decimals": 9, - "logoURI": "https://static.wixstatic.com/media/4b5c4d_db96c2a1b13142fd961d7e05fdfcaf90~mv2.png", - "tags": ["community-token", "trading-token"] - }, - { - "chainId": 101, - "address": "BCBYTtmof1sApJsnrb3yqCsyXcArkUHk6LHNKK5B9poE", - "symbol": "BCBYHP", - "name": "BCBY Holder Pass", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BCBYNAjzL4xqA8KoaqftqFNoq7jKfa5J4YB2nca2VFfp/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2jmhtbcbnmqpTaL7ythKYPS64fdb9VGcTNpXoHNbGPrN", - "symbol": "PORES", - "name": "Mushie Spores", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2jmhtbcbnmqpTaL7ythKYPS64fdb9VGcTNpXoHNbGPrN/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/magic_mushies", - "website": "https://magicmushies.io/" - } - }, - { - "chainId": 101, - "address": "BCBYet7eHAwFiPEurNGF1vMdauLehR2PPhqqAMJmSH9E", - "symbol": "BCBYWL", - "name": "BCBY WL Pass", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BCBYNAjzL4xqA8KoaqftqFNoq7jKfa5J4YB2nca2VFfp/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "41EY95rbDfpebvAXyxmrKHdvShBZ9ASBcRmrke7xqki2", - "symbol": "U2", - "name": "U2", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/41EY95rbDfpebvAXyxmrKHdvShBZ9ASBcRmrke7xqki2/logo.png", - "tags": ["utility-token", "dex", "defi", "GameFi", "Gaming"], - "extensions": { - "discord": "https://discord.gg/rwZ5pycE", - "twitter": "https://twitter.com/youdex_io", - "website": "https://youdex.io/" - } - }, - { - "chainId": 103, - "address": "GobzzzFQsFAHPvmwT42rLockfUCeV3iutEkK218BxT8K", - "symbol": "G3", - "name": "G3 Token", - "decimals": 9, - "logoURI": "https://static.particle.network/g3.png", - "tags": ["community-token", "trading-token"] - }, - { - "chainId": 101, - "address": "7XVbmgaYHV3BWQvauR77yCRiWwRJUoiCdwN2rnZbJCC1", - "symbol": "YUKCU", - "name": "YUKON Copper", - "decimals": 9, - "logoURI": "https://static.wixstatic.com/media/4b5c4d_557ccbfa50ec43bc81376c0d96462187~mv2.png", - "tags": ["community-token", "trading-token"] - }, - { - "chainId": 101, - "address": "BjZ5Hazjyp9LrzfapAHYZuceWm6zJZDqMH1QPCWtsouq", - "symbol": "AERA", - "name": "Aera Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BjZ5Hazjyp9LrzfapAHYZuceWm6zJZDqMH1QPCWtsouq/logo.png", - "tags": ["aera-token", "utility-token"], - "extensions": { - "website": "https://aeralife.com" - } - }, - { - "chainId": 103, - "address": "X71v8NH6dbLwPsn4TR1Tx38K4uWgGZ78mC599XSPJox", - "symbol": "XMLZW", - "name": "XMLZW Test", - "decimals": 18, - "logoURI": "https://github.com/LeviFiks/asf/blob/main/fikusa.svg", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "6MTCiSHqANSXinWrJtdpXV7KVtSMkhxhJMFDpEsptjU4", - "symbol": "SSTAR", - "name": "Seoul Stars", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6MTCiSHqANSXinWrJtdpXV7KVtSMkhxhJMFDpEsptjU4/logo.png", - "tags": ["gaming", "nfts", "utility-token", "community-token"], - "extensions": { - "description": "SSTAR is the governance token for Seoul Stars, the leading K-pop virtual artist metaverse and play-to-earn/sing-to-earn music game on Solana", - "discord": "https://discord.gg/seoulstars", - "telegram": "https://t.me/seoulstars", - "twitter": "https://twitter.com/seoulstarsnft", - "website": "https://www.seoulstars.io/" - } - }, - { - "chainId": 101, - "address": "6FefhPSmUF9nxW6Jp5Tn6ieGA7aghvRExx5zNNkAsB7c", - "symbol": "SCI", - "name": "SCIENCE", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/Robby3082/test-token/main/science.png", - "tags": ["staking-token"] - }, - { - "chainId": 103, - "address": "CcREDkwUxBVoazUe4a8Lw9Jrb483EVpmsw9bzscp7se2", - "symbol": "kg", - "name": "Carbon Credit Token", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/PurpleZone/NFTs@latest/carbon/carbon-credit.svg", - "tags": [ - "carbon-coin", - "green-coin", - "community-token", - "utility-token", - "colored-token" - ], - "extensions": { - "coingeckoId": "solana", - "description": "Proof of Carbon Sequestration to be used as Carbon credit (unit: 1kg CO2e)", - "imageUrl": "https://bafybeid7dw4tdtbuj5pn4gqlqooajzfaecujcupwzgu2bp6p6z46qlv2g4.ipfs.nftstorage.link/?ext=svg", - "linkedin": "https://www.linkedin.com/company/eco-organic-technology", - "website": "https://PurpleZone.github.io/NFTs/carbon/", - "whitepaper": "https://gateway.ipfs.io/ipns/QmNwPaqvPMZKxEDZB8vr63wTmf5bZ2JocYY7HamWY8ws3E/whitepaper.pdf" - } - }, - { - "chainId": 103, - "address": "5ftoDyQvRRL9wFXmaHVN4vYqfdjWue8woQSQ1T8RpinA", - "symbol": "GCW", - "name": "GamCheckedWorks", - "decimals": 9, - "logoURI": "https://github.com/vuanhtuanvn85/token-list/tree/main/assets/mainnet/5ftoDyQvRRL9wFXmaHVN4vYqfdjWue8woQSQ1T8RpinA/logo.png" - }, - { - "chainId": 101, - "address": "4c5K1DJ3TcUkHt68PrBAzrYJj35r5hv9PAVsL2owYwn5", - "symbol": "PCC", - "name": "Purpose Cash", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/purposecash/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "B1WXiYQB1CUtdVfPWYMKHenFkpqQc4kujvmBMjP2h5Mb", - "symbol": "CLST", - "name": "Celestia", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/timotheecaumartin/crypto-celestia/main/CELESTIA.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5tcVUoxhedTqt9A2gxxToRGSCWDcbK6AC67xayrgW3Sf", - "symbol": "SKK", - "name": "Skirk Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/lilhaay1/crypto/main/logo.png", - "tags": ["gaming", "social-token"] - }, - { - "chainId": 101, - "address": "DripS2zAsRhwuALQp2cBW7vBB8LTqYnqAGivtUpEXDWV", - "symbol": "DRIP", - "name": "Drips", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Ashtar-Global-Solutions/spl-tokens/main/drip/dripcoin_small.gif", - "tags": ["NFT"], - "extensions": { - "discord": "https://www.discord.gg/drippieverse", - "instagram": "https://www.instagram.com/drippieverse/", - "twitter": "https://twitter.com/drippieverse", - "website": "https://www.drippies.space/" - } - }, - { - "chainId": 101, - "address": "3rnxGhmJLTB8ds98MXBQJtHKzgSD6MtRTo7phuydyu5x", - "symbol": "GNN", - "name": "GYNNA", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3rnxGhmJLTB8ds98MXBQJtHKzgSD6MtRTo7phuydyu5x/logo.png", - "tags": ["comunity-token"], - "extensions": { - "discord": "https://discord.gg/6EaDCUvz", - "twitter": "https://twitter.com/gynna_nft", - "website": "https://gynna.io/" - } - }, - { - "chainId": 101, - "address": "7GZ1wiXg1ZSCgJ8GmnHEEyMvH7CkNiKChkRpyUNJhSbb", - "symbol": "TROJAN", - "name": "Kleos Trojan", - "decimals": 0, - "logoURI": "https://i.imgur.com/L0rjuAC.png", - "tags": ["whitelist"], - "extensions": { - "description": "Kleos Trojan is the whitelist token to the Kleos Mint.", - "twitter": "https://twitter.com/kleos_nft", - "website": "https://kleosnft.xyz/" - } - }, - { - "chainId": 101, - "address": "BAM2LDmxSjbkRNVQC3bNYo514tGSXTKH3NrW3xQEAkwX", - "symbol": "BAMMM", - "name": "BAM (The Sol Den)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BAM2LDmxSjbkRNVQC3bNYo514tGSXTKH3NrW3xQEAkwX/logo.png", - "extensions": { - "twitter": "https://twitter.com/thesoldennfts", - "website": "https://solden.io/" - } - }, - { - "chainId": 101, - "address": "E8oV8JywpgPxEzaugAzW4bapoN3krEFX9mCoPgvrdTXH", - "symbol": "tuSHDW", - "name": "tuSHDW", - "decimals": 9, - "logoURI": "https://user-images.githubusercontent.com/8619106/169387149-0e34721b-616f-473b-b18d-e46ca40e38ce.png", - "tags": ["tulip-protocol", "lending", "collateral-tokens"], - "extensions": { - "discord": "https://discord.com/invite/tulip", - "twitter": "https://twitter.com/TulipProtocol", - "website": "https://tulip.garden/" - } - }, - { - "chainId": 101, - "address": "GNjwMCt8GmPwQHy45UDzeprHkSTsNQHddsWXADz1HE6H", - "symbol": "tuBASIS", - "name": "tuBASIS", - "decimals": 9, - "logoURI": "https://user-images.githubusercontent.com/8619106/169387491-e7e6c298-eda3-4aed-9e8e-e5e4e8c7c10f.png", - "tags": ["tulip-protocol", "lending", "collateral-tokens"], - "extensions": { - "discord": "https://discord.com/invite/tulip", - "twitter": "https://twitter.com/TulipProtocol", - "website": "https://tulip.garden/" - } - }, - { - "chainId": 101, - "address": "CEGSnMwZmF512Uva5rTiF1Gx1byMDNdT7UpD8vNXuTQJ", - "symbol": "tuGMT", - "name": "tuGMT", - "decimals": 9, - "logoURI": "https://user-images.githubusercontent.com/8619106/169387895-c8604043-2e6c-4769-9400-e535fea11e9f.png", - "tags": ["tulip-protocol", "lending", "collateral-tokens"], - "extensions": { - "discord": "https://discord.com/invite/tulip", - "twitter": "https://twitter.com/TulipProtocol", - "website": "https://tulip.garden/" - } - }, - { - "chainId": 101, - "address": "Ghvf8bVnDjv1nbi9b3PjSw9iBWFy2ApmdCUgzmPFmNVi", - "symbol": "tuGST", - "name": "tuGST", - "decimals": 9, - "logoURI": "https://user-images.githubusercontent.com/8619106/169388131-07867c9e-76bd-4659-8fd4-a0ea57317208.png", - "tags": ["tulip-protocol", "lending", "collateral-tokens"], - "extensions": { - "discord": "https://discord.com/invite/tulip", - "twitter": "https://twitter.com/TulipProtocol", - "website": "https://tulip.garden/" - } - }, - { - "chainId": 101, - "address": "Ewf86g35EWcr5dyLSunQkCt5pcnR3hY6bnDAPCKcaye", - "symbol": "FLINT", - "name": "FLNT", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/PnW1/flintToken/main/logo.png" - }, - { - "chainId": 101, - "address": "ANMSoho4nmt5ACg4uM9EeprwvjNJAPFXieaS7sECZ3s4", - "symbol": "ANMS", - "name": "Anonymous Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ANMSoho4nmt5ACg4uM9EeprwvjNJAPFXieaS7sECZ3s4/logo.png", - "tags": ["staking", "utility-token"], - "extensions": { - "twitter": "https://twitter.com/ACDealerNFT", - "website": "https://anonymouscryptodealer.io" - } - }, - { - "chainId": 101, - "address": "8z3LQnxfAgTwLjedPyxeRBUHKWmjz1bU7aEccpi3jECr", - "symbol": "KLEOSWL", - "name": "Kleos WhiteList", - "decimals": 1, - "logoURI": "https://github.com/elonsdev/token-list/blob/add-kleos/assets/mainnet/8z3LQnxfAgTwLjedPyxeRBUHKWmjz1bU7aEccpi3jECr/trojan.png", - "tags": ["whitelist"], - "extensions": { - "description": "Kleos Trojan is the whitelist token to the Kleos Mint.", - "twitter": "https://twitter.com/kleos_nft", - "website": "https://kleosnft.xyz/" - } - }, - { - "chainId": 101, - "address": "EqxvSkL78VCnzJbfetznFytJdSfaXqZ29wSGKhYuAfQL", - "symbol": "VIKN", - "name": "Vikash Network", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/VikashAnandJha/token-list/8e5527428ecec8d96be8e9061652ad34e855952f/assets/mainnet/EqxvSkL78VCnzJbfetznFytJdSfaXqZ29wSGKhYuAfQL/logo.png", - "tags": ["social-token"], - "extensions": { - "description": "VIKN is a Social token of Vikash Network", - "twitter": "https://twitter.com/vikashanandjha" - } - }, - { - "chainId": 101, - "address": "JE3YG49wCFQwemcHQo6JLeGmSxgVGgSTpgEm4Eu69Vmk", - "symbol": "HCOMB", - "name": "Party Bears Honeycomb", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/IcyyApex/assets/main/HCOMB.png", - "tags": ["staking", "utility-token"] - }, - { - "chainId": 101, - "address": "HHfq3uy65SAZgLjpDsJ4WrbjNGpSTfD6UFyQgr2Jxz9i", - "symbol": "THCxWL", - "name": "THC WL TOKENS", - "decimals": 9, - "logoURI": "https://cannabiznft.io/assets/images/logo-final.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/CannabizNFT", - "website": "https://cannabiznft.io/" - } - }, - { - "chainId": 101, - "address": "5n74w9iCaS3ZpQudGx4hVyupCXcxLomhL6xcatoZXbnS", - "symbol": "CVGen2xWL", - "name": "CV Gen2 WL Token", - "decimals": 9, - "logoURI": "https://culturevultures.io/gen2/assets/images/cvgen2_logo.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/Vulturesnft", - "website": "https://culturevultures.io/" - } - }, - { - "chainId": 101, - "address": "3hv4K3mUaBEDBt4jfWvHQCBdX512r7f23PVCZRGaiDRq", - "symbol": "XZ", - "name": "XZAV", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Moonsight91/fndfgdhdhdg/main/xzavicon.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2tQrhk5cH41AvqVvwXyvfWQc3tRhuZZSWKvAPAmKVsbw", - "symbol": "Milei", - "name": "Javier Milei", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/javiermileiToken/Logo/main/logo.png", - "tags": ["carbon-coin", "green-coin", "community-token"], - "extensions": { - "description": "Made by Carlos Verbelen a Token for Javier Milei,Viva la libertad,carajo. Milei token value 1usdt = 10 Milei tokens", - "discord": "https://discord.gg/3yNwFyPzUb", - "instagram": "https://www.instagram.com/lalibertadavanzaoficial/", - "website": "https://lalibertadavanza.com.ar/" - } - }, - { - "chainId": 101, - "address": "8ymjMjitLchSFU9zkcbjsJENhSXou4YKh7RD2U3yvqdJ", - "symbol": "KSW", - "name": "KillSwitch (Ethereum)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8ymjMjitLchSFU9zkcbjsJENhSXou4YKh7RD2U3yvqdJ/logo.svg", - "tags": ["DeFi"], - "extensions": { - "discord": "https://discord.gg/vsnK4sYGB4", - "telegram": "https://t.me/killswitch_global", - "twitter": "https://twitter.com/KillSwitch_Defi", - "website": "https://killswitch.finance/" - } - }, - { - "chainId": 101, - "address": "5BbEGUsoqdNxH16ZrDBMzo9J1kFn2fN6TikYxaFSgddW", - "symbol": "2XD", - "name": "2XD", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5BbEGUsoqdNxH16ZrDBMzo9J1kFn2fN6TikYxaFSgddW/logo.png", - "tags": ["lp-token"], - "extensions": { - "description": "2XD Token", - "discord": "https://discord.gg/prcWsTvTm9", - "medium": "https://medium.com/@2XD", - "twitter": "https://twitter.com/2XDProtocol", - "website": "https://2xd.fi/" - } - }, - { - "chainId": 101, - "address": "89iVdMKfyXc5NYmtY9BoGQbps92JGcJ1w594nC7TmVrF", - "symbol": "CKOG", - "name": "Cultured Kongz OG Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/89iVdMKfyXc5NYmtY9BoGQbps92JGcJ1w594nC7TmVrF/icon.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.com/invite/gSHWqephYV", - "twitter": "https://twitter.com/CulturedKongz" - } - }, - { - "chainId": 101, - "address": "FUXDfQ2BgeGbzkd37L1TuSe6gPdeDjQra8FbLezr1Nzf", - "symbol": "FUXD", - "name": "FUXD", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FUXDfQ2BgeGbzkd37L1TuSe6gPdeDjQra8FbLezr1Nzf/logo.png", - "extensions": { - "description": "FUXD Token", - "discord": "https://discord.gg/prcWsTvTm9", - "medium": "https://medium.com/@2XD", - "twitter": "https://twitter.com/2XDProtocol", - "website": "https://2xd.fi/" - } - }, - { - "chainId": 101, - "address": "6iDZ3fvuzrnodMp8mrpPynBRzi7fYkw6JMdTUJLGoi6S", - "symbol": "LFNDWL", - "name": "LIT FUND WL TOKEN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/scarceproject/crypto/main/dth5geg.png", - "tags": ["whitelist-token"], - "extensions": { - "discord": "https://discord.gg/C5z57xrw52", - "telegram": "https://t.me/litfund", - "twitter": "https://twitter.com/litfund_defi", - "website": "https://lit.fund" - } - }, - { - "chainId": 101, - "address": "Gv2Fgq7AGyRhp4ch5cmdV1H2AGKS9FxKCWkMnxzWwmMm", - "symbol": "KLEOSM", - "name": "Kleos Mint Token", - "decimals": 1, - "logoURI": "https://github.com/solana-labs/token-list/blob/b62bae5a442b3b6e218b7b7e27ccab52a6a7e24e/assets/mainnet/Gv2Fgq7AGyRhp4ch5cmdV1H2AGKS9FxKCWkMnxzWwmMm/trojan.png", - "tags": ["whitelist"], - "extensions": { - "description": "KleosM is the mintlist token to the Kleos Mint.", - "twitter": "https://twitter.com/kleos_nft", - "website": "https://kleosnft.xyz/" - } - }, - { - "chainId": 101, - "address": "97HZYZt1APW4HhA1MZxUnnwyhXaYqtpFUVwCKT9xrsHA", - "symbol": "2XD-USDC", - "name": "2XD-USDC LP", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/97HZYZt1APW4HhA1MZxUnnwyhXaYqtpFUVwCKT9xrsHA/logo.png", - "tags": ["lp-token"], - "extensions": { - "description": "2XD-USDC LP Token", - "discord": "https://discord.gg/prcWsTvTm9", - "medium": "https://medium.com/@2XD", - "twitter": "https://twitter.com/2XDProtocol", - "website": "https://2xd.fi/" - } - }, - { - "chainId": 101, - "address": "HkJnGnKCoGUF4sL9j8aFfFZozEQpKuj557nFUUvKJC3d", - "symbol": "SLTK", - "name": "Soltok", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HkJnGnKCoGUF4sL9j8aFfFZozEQpKuj557nFUUvKJC3d/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://www.underspenders.com" - } - }, - { - "chainId": 101, - "address": "FJqUunUUhJffBdrheanuBJySmS2UEShoGLtxKHfBch5R", - "symbol": "ECLPS", - "name": "SOL Eclipse", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FJqUunUUhJffBdrheanuBJySmS2UEShoGLtxKHfBch5R/eclipse.png", - "tags": ["to-the-moon"] - }, - { - "chainId": 101, - "address": "CLUbn9QKBwbX3rfFTuvQG3HgERzu7R9naLfJas3WuPgx", - "symbol": "CLUB", - "name": "THECLUB", - "decimals": 9, - "logoURI": "https://github.com/MatheusWells/token-list/blob/main/assets/mainnet/CLUbn9QKBwbX3rfFTuvQG3HgERzu7R9naLfJas3WuPgx/logo.png?raw=true", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "CczfrwwXahja6Ey3CfQH6mqH6PYAf14QQoGaWZAXVDtX", - "symbol": "COINT", - "name": "CoINT", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ismaelfema/coint/main/coint.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5q5gWXXT315DnaaoCwrQD39XNxvF5PRLriwMzW6t2338", - "symbol": "BOSS", - "name": "The Boss Baby Family", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/atenidegbeolanrewaju/BB_/main/BBFY.png" - }, - { - "chainId": 101, - "address": "D7rPWtAUPRsccndR94M6y3tET85KQiv5v9u6E3YtMjC5", - "symbol": "GROV", - "name": "Groove Token", - "decimals": 9, - "logoURI": "https://bafybeibrkixvmd3d4urfqfh3dev53gf3pefrhjaoqbbiegwjbcwivuukhy.ipfs.dweb.link/GrooveCoin.png", - "tags": ["governance-token", "utility-token", "game-token"], - "extensions": { - "twitter": "https://twitter.com/GrooveDAO", - "website": "https://groove.day" - } - }, - { - "chainId": 101, - "address": "HmR2bYbMjRLU81extUiuztz7y79CKYKVZftJC6xLXmJh", - "symbol": "DVOP", - "name": "DevOps Token", - "decimals": 9, - "logoURI": "https://bafybeicxitbpsfddpmwi2ymxw2wlyxvdrxwwiukxyokptro62at4l3zj4i.ipfs.dweb.link/DVOPCoin.png", - "tags": ["utility-token", "game-token"], - "extensions": { - "twitter": "https://twitter.com/GrooveDAO", - "website": "https://groove.day" - } - }, - { - "chainId": 101, - "address": "5Vo6asJMB5jL9KzcVYwW2gyACzennwW8Adf2LZNusw52", - "symbol": "EPCT", - "name": "Epics Token", - "decimals": 9, - "logoURI": "https://bafybeibal7k2hz6frznyjbl4qcnzcwlsuzxmquatrsaly6ttmuppgmdvwe.ipfs.dweb.link/EpicsCoin.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/EpicsDAO", - "website": "https://epics.dev" - } - }, - { - "chainId": 101, - "address": "C5q2yAAgU9rtNdyFJBXcvjmTqf57ejP1iLGZ4bGScFCg", - "symbol": "EPCD", - "name": "Epics DAO Token", - "decimals": 9, - "logoURI": "https://bafybeifyk4rgmkqcj3kfvzzgjnrf7zvftye5gfcgzbbs2a6caqyphtiiuu.ipfs.dweb.link/EpicsCoinD.png", - "tags": ["governance-token"], - "extensions": { - "twitter": "https://twitter.com/EpicsDAO", - "website": "https://epics.dev" - } - }, - { - "chainId": 101, - "address": "8sfuYgBRH8VBbXWAzyAWNuY8uBhnQgjfd4k5vB5JyoqJ", - "symbol": "BTBT", - "name": "bitbot Token", - "decimals": 9, - "logoURI": "https://bafybeidmrk25f4ozrsrmodi5bojedomfpowaw42idjxll7hu4cgol4g6my.ipfs.dweb.link/bitbotCoin.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/bitbotDAO", - "website": "https://bit-bot.app" - } - }, - { - "chainId": 101, - "address": "AeDGpPrtf1SCcgLT99131xu7C5q3xt2BH1G4Wrri6UHn", - "symbol": "BTBD", - "name": "bitbot DAO Token", - "decimals": 9, - "logoURI": "https://bafybeiamycg7urzu3rityjodb7hgvsiw7rd44erlgcysucbiauxgppgv7a.ipfs.dweb.link/bitbotCoinD.png", - "tags": ["governance-token"], - "extensions": { - "twitter": "https://twitter.com/bitbotDAO", - "website": "https://bit-bot.app" - } - }, - { - "chainId": 101, - "address": "DfLAX4Cak5A6bDkhnrRJAQtPvQVbfNvY5E2wJ7Q2CSb3", - "symbol": "OLIV", - "name": "Olivia", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/akaPierre/olivia/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AWKNP2bYEi5B5JqACwaRudrmVwvdcVWxATkrTdyDzwVX", - "symbol": "LFNDWL", - "name": "LIT FUND WL", - "decimals": 1, - "logoURI": "https://raw.githubusercontent.com/scarceproject/crypto/main/dth5geg.png", - "tags": ["whitelist-token"], - "extensions": { - "discord": "https://discord.gg/C5z57xrw52", - "telegram": "https://t.me/litfund", - "twitter": "https://twitter.com/litfund_defi", - "website": "https://lit.fund" - } - }, - { - "chainId": 101, - "address": "3oscotmVu2wcPoGWxa4ZzxK1FLApCQQBJk9mXtsC26Qy", - "symbol": "WTOY", - "name": "Whappy TOYs", - "decimals": 1, - "logoURI": "https://raw.githubusercontent.com/Wcworker/Wcdonalds/main/WTOY.png", - "tags": ["community-token", "utility-token"], - "extensions": { - "twitter": "https://twitter.com/WcdonaldsNFT", - "website": "https://wcdonalds.io" - } - }, - { - "chainId": 101, - "address": "Pirapf3w881Hv5FXjRRpWmEP34WZNDHpV9Jd6DV2o8p", - "symbol": "Deadpirate", - "name": "Dead Pirates Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Pirapf3w881Hv5FXjRRpWmEP34WZNDHpV9Jd6DV2o8p/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/DeadPiratess" - } - }, - { - "chainId": 101, - "address": "REguZ4WixdYQeLscUbSzHo3MJP4LmoH4cqosXpA3rwp", - "symbol": "AFR", - "name": "ReGuLaTeD WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/REguZ4WixdYQeLscUbSzHo3MJP4LmoH4cqosXpA3rwp/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/RegulatedNFT" - } - }, - { - "chainId": 101, - "address": "CGdaZn9CAgsCCapWFTRmdRq9e24gJQet9Ts55V1Dqjo5", - "symbol": "DAZE", - "name": "DAZE Utility Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/BASCDAO/token-art/3e57fb729cc82a2790533212ed719ffaad3ef965/logo.svg", - "tags": ["utility-token", "community-token"] - }, - { - "chainId": 101, - "address": "AWLXYnJJ9ScoSc9t56CKEPRTuaunqrakcnFwt6AvdXuT", - "symbol": "ZOOSHIB", - "name": "ZOO Shibtok", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Wisemunk/My_Solana_coin/main/Logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://futureshiba.000webhostapp.com/" - } - }, - { - "chainId": 101, - "address": "6tkJPYnMEWGgWPnixqj1qZpN4AL7Dag73EmfRPKNXs1", - "symbol": "Pie", - "name": "Pie Network", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/cryptonetwork777/crypto/main/logo.png", - "tags": ["airdrop-token", "community-token"], - "extensions": { - "telegram": "https://t.me/network_pie", - "twitter": "https://twitter.com/pie_network" - } - }, - { - "chainId": 101, - "address": "71MwukaK2Hudp862BC7X7e8Ggyzqx1aMQD611nRM85Vu", - "symbol": "JUN", - "name": "Junkiez Token", - "decimals": 9, - "logoURI": "https://github.com/MatheusWells/token-list/blob/main/assets/mainnet/71MwukaK2Hudp862BC7X7e8Ggyzqx1aMQD611nRM85Vu/logo.png?raw=true", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "ReGuwoy3cEGfWC7Ko28EeYL1BJg1usVvHD1huyEpamp", - "symbol": "ReGuLaTeD", - "name": "ReGuLaTeD Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ReGuwoy3cEGfWC7Ko28EeYL1BJg1usVvHD1huyEpamp/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/RegulatedNFT" - } - }, - { - "chainId": 101, - "address": "2tVaYxWZW9YkGBqUkmoZ6Wnq3ALndTKWoVKNqpwGVngb", - "symbol": "COA", - "name": "COA Token", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/coatsandknights/coa-token/main/coa-token.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.com/invite/NBQ5YbPHNM", - "twitter": "https://twitter.com/coatsandknights", - "website": "https://coatsandknights.io" - } - }, - { - "chainId": 101, - "address": "87pGBJh1Ts8jGSgD81nXfnRBE773yKdai1ceS4fZ2qc5", - "symbol": "OGGY", - "name": "OggyCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/alexkroeker177/oggycoin/main/OGGY.png", - "tags": ["community-token"] - }, - { - "chainId": 101, - "address": "7GptK2dfK4u8yNU7MUs8eJoFypkuNaKYTR2pG2WfYpcq", - "symbol": "CNANA", - "name": "SolMonkeez Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7GptK2dfK4u8yNU7MUs8eJoFypkuNaKYTR2pG2WfYpcq/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "8JgJUfALp74xF1zdvU3tsbqn2u8ZvaDBmefuU9Lp759L", - "symbol": "PUNK", - "name": "PUNK", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/roben-punk/roben-token/main/RP.jpeg", - "tags": ["nft"] - }, - { - "chainId": 101, - "address": "8UheazYYUJBWWXvxD6g2q1STGvcaAchLoz3ftwRfoEzs", - "symbol": "TABE", - "name": "TabeCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/MiltronBee/Tabecoin/main/tabecoin.fw.png", - "tags": ["community-token"] - }, - { - "chainId": 101, - "address": "FwHjnVkpcxPaabZbJsrjYeFBJkGh1aHxjtBszJUSpHRn", - "symbol": "ANGLS", - "name": "Solana Angels NFT", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FwHjnVkpcxPaabZbJsrjYeFBJkGh1aHxjtBszJUSpHRn/logo.png", - "tags": ["utility-token", "community-token", "governance-token"], - "extensions": { - "discord": "https://discord.com/invite/TMQdq7Naq5", - "twitter": "https://twitter.com/solangels_nft", - "website": "https://solangelsnft.com/" - } - }, - { - "chainId": 101, - "address": "6M9omYci4d51LDueVspcazVJECUb4nMQWeX4YKcqq8KS", - "symbol": "RG", - "name": "GLORY", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6M9omYci4d51LDueVspcazVJECUb4nMQWeX4YKcqq8KS/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9oquRLMWrtf7oHNwZDwhZfz1AYUVAqBA9V9rc74nzTvR", - "symbol": "JOSK", - "name": "Jolly WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9oquRLMWrtf7oHNwZDwhZfz1AYUVAqBA9V9rc74nzTvR/logo.png", - "tags": ["Whitelist-token"] - }, - { - "chainId": 103, - "address": "CSuPPjRAFH3zt4SMrHRDoZpHapeZAHKPiCJ31KEZS7r5", - "symbol": "SKHTST", - "name": "Sikho Coin Test", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CSuPPjRAFH3zt4SMrHRDoZpHapeZAHKPiCJ31KEZS7r5/logo.jpg", - "tags": ["community-token"] - }, - { - "chainId": 101, - "address": "FyNuYGBBry5LAtPEkh8Y73izjTUNT2td2J3sGCK7E9Ju", - "symbol": "VIBEZ", - "name": "VIBEZ", - "decimals": 9, - "logoURI": "https://github.com/ArthurPaivaT/token-list/blob/main/assets/mainnet/FyNuYGBBry5LAtPEkh8Y73izjTUNT2td2J3sGCK7E9Ju/logo.png?raw=true" - }, - { - "chainId": 101, - "address": "2zwkTwiN4ABxovt2FaBQpRzVD4Kar7sHi3azBRQZfXSr", - "symbol": "ALPACA", - "name": "LLAMA", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Eziollama/llamatoken/main/llama-logo.jpeg", - "tags": ["nft"] - }, - { - "chainId": 101, - "address": "BQTG5Jah1aLwaMkHgUuoQ1KYjCfmjd9YgHfagQ76AhNS", - "symbol": "CUB", - "name": "CUB", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/cubclub/club007/main/logo-cub.jpeg", - "tags": ["nft"] - }, - { - "chainId": 101, - "address": "DG2kMSpmGaFxUSVAFLHk75VzJ6iQEQx3UzGkLoGrAX4D", - "symbol": "RVLN", - "name": "Revolution Token", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/Bearzuki/token/logo%20bright.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/BearzukiNFT" - } - }, - { - "chainId": 101, - "address": "EHXVTtFYT1bo4YaHxayHKdpho5G8kdtDY8Uain5rE71G", - "symbol": "MPOX", - "name": "MonkeyPOX", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EHXVTtFYT1bo4YaHxayHKdpho5G8kdtDY8Uain5rE71G/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Et4Ni9HzKXByeMx6bPmJLHwLTzhLojxbZe5pZJgpwjYr", - "symbol": "PENGUIN", - "name": "Pengu", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Pawel-Pe/storage/main/logo-penguin.jpeg", - "tags": ["nft"] - }, - { - "chainId": 101, - "address": "DeGbpw8kYC8YCiH4f6JL9ppMWdJ2nC6GZAxasFXfaqVW", - "symbol": "TREE", - "name": "TREE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/crypto-tree/tree-of-life/main/treelogo.png", - "tags": ["nft"] - }, - { - "chainId": 101, - "address": "53y2xph9jy2wFTBC1jgZXo1kan8XAuMPLj6x7UgyMvXB", - "symbol": "YUKPT", - "name": "YUKON Platinum", - "decimals": 9, - "logoURI": "https://static.wixstatic.com/media/4b5c4d_8e19a4a1c2404935875498c203190430~mv2.png", - "tags": ["community-token", "trading-token"], - "extensions": { - "website": "https://www.yukonmining.io" - } - }, - { - "chainId": 101, - "address": "4mXbAjYsLCYVbFu7PedBY6wcfCSH6KVyNtSZNbvMsjbH", - "symbol": "POLE", - "name": "Pole Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/zball07/crypto/main/POLE%20Token%20Logo.png", - "tags": ["utility-token", "payment-token", "investment-token"] - }, - { - "chainId": 101, - "address": "66XLRNqb1CnPd1ZooD5hSNtz56SNNwywACTFzWq9Nvyp", - "symbol": "SHOW", - "name": "theShow Plus Coin", - "decimals": 9, - "logoURI": "https://storage.googleapis.com/theshowcoin-asset/imgs/token-coin/logo.png" - }, - { - "chainId": 101, - "address": "GJGCVHGErDYkiPvnzq7cBUi2P1GsT6zhxVhVnkA8TARY", - "symbol": "SOLRUM", - "name": "Mutant Solrum", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GJGCVHGErDYkiPvnzq7cBUi2P1GsT6zhxVhVnkA8TARY/logo.png", - "tags": ["social-token"], - "extensions": { - "twitter": "https://twitter.com/MascNft", - "website": "https://mutantapesolana.club" - } - }, - { - "chainId": 101, - "address": "5f8UTs1h73cpzZK8xU82gafyLjR43JFHQdT3A3WVNAS8", - "symbol": "MLWT", - "name": "Mutant Labs whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5f8UTs1h73cpzZK8xU82gafyLjR43JFHQdT3A3WVNAS8/logo.png" - }, - { - "chainId": 101, - "address": "GroARooBMki2hcpLP6QxEAgwyNgW1zwiJf8x1TfTVkPa", - "symbol": "GROAR", - "name": "Jungle Cats Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GroARooBMki2hcpLP6QxEAgwyNgW1zwiJf8x1TfTVkPa/logo.jpg", - "tags": ["utility-token"], - "extensions": { - "website": "https://junglecats.io/" - } - }, - { - "chainId": 101, - "address": "5iXRqsoxw5yf5b7AUZ2nNSJL8k4EocYHtWB9VndSRGDr", - "symbol": "GGWL", - "name": "GolemGuardians W/L", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/cashboysen/golem1/main/GolemTokey.png" - }, - { - "chainId": 101, - "address": "F5FsobHiQ1SAd7HNJBhLoyrtZxrWzYwCKJrZ6mqqjYJ6", - "symbol": "RTG", - "name": "Road To Glory", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mazagangi7/Road-to-Glory/main/logo.png", - "tags": ["community-token"] - }, - { - "chainId": 101, - "address": "5bfheMDpL1rDFzo53nWx2zSjsKNVG9wdYDtuhDnnabu7", - "symbol": "PxBC", - "name": "PxB Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/PriceFB/PixelBabes-website/main/assets/images/pxbc.png", - "tags": ["community-token", "utility-token", "investment-token"], - "extensions": { - "website": "https://www.pixelbabes.io" - } - }, - { - "chainId": 101, - "address": "9TeUnTLnQCRAC3erDjgXrpnVgkwcP283VEWM5o8QTNXF", - "symbol": "OKAYMAYC", - "name": "Mutant Serum", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9TeUnTLnQCRAC3erDjgXrpnVgkwcP283VEWM5o8QTNXF/logo.png", - "tags": ["social-token"], - "extensions": { - "twitter": "https://twitter.com/okaybayc", - "website": "https://okaybayc.com" - } - }, - { - "chainId": 101, - "address": "sEedsCkfvPzjnfPNWVJAeNkNZf8yWTwZF3jh42R4X25", - "symbol": "SEEDS", - "name": "TSF SEEDS", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/sEedsCkfvPzjnfPNWVJAeNkNZf8yWTwZF3jh42R4X25/logo.jpg", - "tags": ["nft-token", "community-token"], - "extensions": { - "discord": "http://discord.gg/stonedfrogs", - "twitter": "https://twitter.com/thestonedfrogs", - "website": "https://www.thestonedfrogs.io/" - } - }, - { - "chainId": 101, - "address": "GkpbHQu2zYmJxyp93p9wTX3uHjsFt8ZGeomVwZkGwXLH", - "symbol": "sGENE", - "name": "Synthetic Genopets", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GkpbHQu2zYmJxyp93p9wTX3uHjsFt8ZGeomVwZkGwXLH/logo.png", - "tags": ["genopets", "utility-token"], - "extensions": { - "discord": "https://discord.gg/genopets", - "twitter": "https://twitter.com/genopets", - "website": "https://genopets.me" - } - }, - { - "chainId": 101, - "address": "DhpikB5Qf4YZRzeGpFiAcZdSPAETS1mLF94PZz3oUos1", - "symbol": "NAPE", - "name": "NAPE", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/NotBoredApe/token-list/main/assets/mainnet/DhpikB5Qf4YZRzeGpFiAcZdSPAETS1mLF94PZz3oUos1/logo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "43nugMCbD2J7BDiDDTxUD15jcLnexdPtftPdANYy9tc6", - "symbol": "QKA", - "name": "QuokkaCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/43nugMCbD2J7BDiDDTxUD15jcLnexdPtftPdANYy9tc6/quokka.png", - "extensions": { - "discord": "https://discord.gg/E237janjhJ" - } - }, - { - "chainId": 101, - "address": "ZNEc3wSpNycdsEtsccWXooa8fKb8n4rGC24Py6ZpyUx", - "symbol": "$SNEK", - "name": "SNEK", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/danvernon/tiny-dogz-logo/main/zen-logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.com/ZenjinViperz", - "twitter": "https://twitter.com/ZenjinViperz", - "website": "https://www.zenjinviperz.io/" - } - }, - { - "chainId": 103, - "address": "CZero7niHAHbW29oVf2XoCwDWznBaDbd2NxRq9zXfGW4", - "symbol": "btc-z", - "name": "CarbonZero BTC", - "decimals": 10, - "logoURI": "https://cdn.jsdelivr.net/gh/PurpleZone/NFTs@latest/btcz/btc-z.svg", - "tags": [ - "green-coin", - "community-token", - "utility-token", - "colored-token" - ], - "extensions": { - "coingeckoId": "bitcoin", - "description": "Removing Carbon in cryptocurrencies one coin at a time", - "imageUrl": "https://bafybeiaey7aarrnghsu6ziv6cofpqftj22c4ssyf4d74feccfgkmsw63du.ipfs.nftstorage.link/?ext=svg", - "linkedin": "https://www.linkedin.com/company/eco-organic-technology", - "telegram": "https://t.me/cryptolake2", - "website": "https://PurpleZone.github.io/NFTs/btcz/", - "whitepaper": "https://gateway.ipfs.io/ipns/QmYaMUFdqHmTk4V3HLfHwK3pq8d3Tqpk8s96ftb7WUkS1w/whitepaper.pdf" - } - }, - { - "chainId": 101, - "address": "CHNKTCk77cP7U15xC6UQC2zB2HQY8nnEwTD5RFvYK9Gn", - "symbol": "SCREW", - "name": "Meta Robots WL token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CHNKTCk77cP7U15xC6UQC2zB2HQY8nnEwTD5RFvYK9Gn/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9Tn4dFiSokzKDoiAHVMH2L7TqaRwKbGDz4PCsMS6RkbC", - "symbol": "PROFT", - "name": "Profit protocol", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9Tn4dFiSokzKDoiAHVMH2L7TqaRwKbGDz4PCsMS6RkbC/logo.png", - "tags": ["social-token", "SocialFi"] - }, - { - "chainId": 101, - "address": "HD2WMkhqBqHBeuPaJfziGwSGTaaJTVfWs9drW7yTsLtk", - "symbol": "NORY", - "name": "NORY Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HD2WMkhqBqHBeuPaJfziGwSGTaaJTVfWs9drW7yTsLtk/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/NoryozNFT" - } - }, - { - "chainId": 101, - "address": "D5fQ4jY4GxKfTjdqe7Rnwbu1wN1DLu7mwtmJxPsT9Zr6", - "symbol": "FERO", - "name": "Forest Industry staking token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/D5fQ4jY4GxKfTjdqe7Rnwbu1wN1DLu7mwtmJxPsT9Zr6/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "G2VJZGHdH6K6Ck4XDc9b6Nmi32c67gtZXrwufT4RFuHK", - "symbol": "DON", - "name": "THE DON FAMILY", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/atenidegbeolanrewaju/BB_/main/DON.jpeg" - }, - { - "chainId": 101, - "address": "9fdPtdnXYJGJgaioSXn4GdoPLmcbFpji68BuN7Xsjr45", - "symbol": "MYWL", - "name": "Minty Wl", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MintyAutomation/minty-logo/main/logo.png", - "tags": ["wl-token"], - "extensions": { - "discord": "https://discord.gg/minty", - "twitter": "https://twitter.com/mintyautomation" - } - }, - { - "chainId": 101, - "address": "J5kDSC7iaz69uq8vAV6iim5RpxbdvHyghDd6ecNbvNBY", - "symbol": "MYWLG", - "name": "Minty Wl Guaranteed", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MintyAutomation/minty-logo/main/logo.png", - "tags": ["wl-token"], - "extensions": { - "discord": "https://discord.gg/minty", - "twitter": "https://twitter.com/mintyautomation" - } - }, - { - "chainId": 103, - "address": "yca52CtBFG9skA8FVLfvsVcbFZMfUWvmyBt4hGWzVuF", - "symbol": "YCA", - "name": "YC Apocalypse", - "decimals": 1, - "logoURI": "https://cdn.jsdelivr.net/gh/PurpleZone/NFTs@latest/YCA/yca-coin.svg", - "tags": [ - "green-coin", - "community-token", - "utility-token", - "colored-token" - ], - "extensions": { - "coingeckoId": "polkadot", - "description": "The YCA token is part of our REGS program at EO Technologies to move beyond YC apocalypse", - "imageUrl": "https://bafybeidzazuktrg74jmbz67jpddi34chsldu2mxyrbncbx6ocvubdmdpyy.ipfs.nftstorage.link/?ext=svg", - "linkedin": "https://www.linkedin.com/company/eco-organic-technology", - "telegram": "https://t.me/cryptolake2", - "website": "https://PurpleZone.github.io/NFTs/YCA/", - "whitepaper": "https://gateway.ipfs.io/ipns/QmNe4W3y2NHEpRChzPT6GjXoHUAQCAwWLMLMLzkijUCQKq/whitepaper.pdf" - } - }, - { - "chainId": 101, - "address": "FCWL8z8rrryZGs3BKSiiEeggmGv9sSdvs4jcJbm8LLYh", - "symbol": "FCWLT", - "name": "Fine Cats Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FCWL8z8rrryZGs3BKSiiEeggmGv9sSdvs4jcJbm8LLYh/logo.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "BB2gejCCLsh84iJPjsoZivSEBWn3Y6zZLk6XnVKhPGCv", - "symbol": "BBCA2WLT", - "name": "Big Brain Clique Alpha WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BB2gejCCLsh84iJPjsoZivSEBWn3Y6zZLk6XnVKhPGCv/logo.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "BMWToutR4MZJfywAKq6w8qTU4DPE6vb9cXFhFaThEnxe", - "symbol": "BMVWWLT", - "name": "BMV Wolves Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BMWToutR4MZJfywAKq6w8qTU4DPE6vb9cXFhFaThEnxe/logo.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "6N3sRS3FGZszkSYgVe4zk8W42jPpQKfcqpe7fv1eC5UF", - "symbol": "BLACKB", - "name": "Black Bear", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/harper-bear/bearT/main/logo.jpeg", - "tags": ["nft"] - }, - { - "chainId": 101, - "address": "BENSbkQQjkNywEo6Q1M5PoNCugvg7Efe1xCXzTYSyt1V", - "symbol": "Riot", - "name": "LeagueOfLegends", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/LeagueofLegendsToken/Logo/main/logo.png", - "tags": ["riot-coin", "Riotpoint-coin", "NFT-token"], - "extensions": { - "description": "Made by Carlos Verbelen a Token for LeagueofLegends Riot token value 1usdt = 10 Riot tokens", - "discord": "https://discord.gg/3yNwFyPzUb", - "instagram": "https://www.instagram.com/CarlosVerbelen/", - "website": "https://unstoppabledomains.com/d/zues369.nft" - } - }, - { - "chainId": 101, - "address": "8KnaNdNFh2rnhysmBwK3tzaKkz6ywD2JQ63yDjcRpQMk", - "symbol": "NTGC", - "name": "NateTheGreatCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Coolnatethegreat/Crypto/main/logoforcryptotoken.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GfZTt4bgmeKmhTaMfpxvfRrnWkiDJ8yzpZ7AFbrJFpbo", - "symbol": "NBCC", - "name": "NaByCoCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Sestere-IA/NabyCoCoin/main/WhatsApp%20Image%202022-05-21%20at%2015.22.59%20(1).jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DzogDPd7CcjRGYZgG8mVybvhrxDnB7zn9VwXMvZFM2nG", - "symbol": "GREENGLASS", - "name": "GREEN GLASS", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/scarceproject/crypto/main/green.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "5DcMU3LVh5gjimK5hK6qDBb6cJq5ktUV3vBsUzntK9BD", - "symbol": "MFT", - "name": "Mura Fan Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/blink3301/MFT/main/logo.png", - "tags": ["social-token", "fan-token"] - }, - { - "chainId": 101, - "address": "KidzxFVUbMLqfh6CUXMAPRzkuW4UWUGuUJ8WmYEZ2bn", - "symbol": "KTWL", - "name": "KidzTokyo WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/KidzxFVUbMLqfh6CUXMAPRzkuW4UWUGuUJ8WmYEZ2bn/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/KidzTokyo" - } - }, - { - "chainId": 101, - "address": "Hajw7G1jUtLRLBjZjTeaBwuE9nkViomFvtfRnZVNZ9bm", - "symbol": "MURPH", - "name": "MurphCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/S3ANZ13/Crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3xFBvqGAGidvXYJvW1i5Vjwbv7N4CT6grW6ePXdQcJuJ", - "symbol": "GBS", - "name": "Good Boy Sammy", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/KattariStudios/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6xv1QnqPAHQbwx73sNMdeocRvdyKbLmkmFXZSsJ9JtMh", - "symbol": "IceFrog", - "name": "Dota", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/IcefrogDota/Dotalogo/main/logo.png", - "tags": ["dota-coin", "iceFrog-coin", "governance-token", "NFT-token"], - "extensions": { - "description": "Made by Carlos Verbelen for Dota NFT token value 1usdt = 10 Icefrog tokens", - "discord": "https://discord.gg/3yNwFyPzUb", - "twitter": "https://twitter.com/IceFrog", - "website": "https://unstoppabledomains.com/d/zues369.nft" - } - }, - { - "chainId": 101, - "address": "MTSUtji2nigjKJLoqCgvpdqoDSwpjCoFo8rWRPS8uvS", - "symbol": "MITSU", - "name": "Mitsu Bears Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/MTSUtji2nigjKJLoqCgvpdqoDSwpjCoFo8rWRPS8uvS/logo.jpg", - "tags": ["utility-token"], - "extensions": { - "website": "https://mitsubears.io/" - } - }, - { - "chainId": 103, - "address": "3Cvq1aEYCHbg2b5VpnQU884QGXr6VkkFsqywkrdH8Hv3", - "symbol": "DECRBNX", - "name": "DeCrbnX PoC", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3Cvq1aEYCHbg2b5VpnQU884QGXr6VkkFsqywkrdH8Hv3/logo.png", - "tags": ["utility-token", "nft"], - "extensions": { - "description": "DeCrbnX Voluntary Carbon Trading Platform", - "website": "https://www.decrbnx.com/" - } - }, - { - "chainId": 101, - "address": "FMjZMJswdCrK9U3aogY1a82iGnYdFcWTEPFzt6Kv61v5", - "symbol": "U1C", - "name": "Un1ted Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FMjZMJswdCrK9U3aogY1a82iGnYdFcWTEPFzt6Kv61v5/logo.png", - "tags": ["un1ted-coin"] - }, - { - "chainId": 101, - "address": "t99hPXrjb1Zcx2QRLAhLhundAibYKSULQksPuEsNWSk", - "symbol": "BFS", - "name": "Best Friend Sammy", - "decimals": 0, - "logoURI": "https://github.com/PKattari22/crypto/blob/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "HGXMNjuvCi1rRKKE4Uxq2QCsLfzuJQAbfMsrMmftchAj", - "symbol": "KRSh", - "name": "KRISH", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/noahdark/image-crypto/main/krish.png", - "tags": ["community-token", "trading-token"] - }, - { - "chainId": 101, - "address": "C5yrBrY6XRaaxCZ7FDHMhkRPpKmYuFG4A3rAMDJqgXhy", - "symbol": "APXWL", - "name": "Airplex WL Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/C5yrBrY6XRaaxCZ7FDHMhkRPpKmYuFG4A3rAMDJqgXhy/logo.png", - "tags": ["Whitelist", "APX"] - }, - { - "chainId": 101, - "address": "GNMuD3LYBi2JMoCpggr5rAhuiPi8sNuhX8t9rK13bkfp", - "symbol": "BaBi", - "name": "baby coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GNMuD3LYBi2JMoCpggr5rAhuiPi8sNuhX8t9rK13bkfp/logo.png", - "extensions": { - "description": "baby coin which is release from LonYui|mai hua shao nian", - "website": "https://0xflower.shop/" - } - }, - { - "chainId": 101, - "address": "3AGhCVBunbbo2bc2bkzLXaRu5rZXgMBpsK1svhjgwcGE", - "symbol": "SHRTBK", - "name": "SchruteBuck", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/S3ANZ13/Crypto/S3ANZ13-SchruteBucks/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5QTEfnox5cFCCMCmggGNftAvZ8wwvpttBUuiTQr6Sswq", - "symbol": "MSBS", - "name": "MSB Service", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5QTEfnox5cFCCMCmggGNftAvZ8wwvpttBUuiTQr6Sswq/logo.png" - }, - { - "chainId": 101, - "address": "RRTBB9xWcYD9DvaTX7R8UgYbNmxDkVsM2jo1iEXm1Et", - "symbol": "RR", - "name": "Roadhouse Runts Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/RRTBB9xWcYD9DvaTX7R8UgYbNmxDkVsM2jo1iEXm1Et/logo.png" - }, - { - "chainId": 103, - "address": "NfWLyJSeXsEwWxgvZxuq3nhSXDnqkCKzf3YGSrLgTPx", - "symbol": "nfwl", - "name": "Non Fungible Wallet", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/PurpleZone/NFTs@latest/wallet/nf-wallet.svg", - "tags": [ - "green-wallet", - "community-token", - "utility-token", - "colored-token" - ], - "extensions": { - "coingeckoId": "usd-coin", - "description": "NFWL: is a subwallet to your wallet for organizing your precious sustainable tokens", - "imageUrl": "https://bafybeibmzz5vapcfx7daybdhbfqxjlwcrszlbq6j2gvayexn4rl6olndoe.ipfs.nftstorage.link/?ext=svg", - "linkedin": "https://www.linkedin.com/company/eco-organic-technology", - "telegram": "https://t.me/cryptolake2", - "website": "https://PurpleZone.github.io/NFTs/wallet/", - "whitepaper": "https://gateway.ipfs.io/ipns/QmPhMEKGiuyXg9eq2x8aEgjnEMzR5tHEcuSBSMayzR9uVr/whitepaper.pdf" - } - }, - { - "chainId": 101, - "address": "768S3Qsg5YbmmoDinvshAVhYjSnLq5VPrnvzVxhLNxjW", - "symbol": "HMO", - "name": "HammoCoin", - "decimals": 0, - "logoURI": "https://github.com/pmjmay/crypto/blob/main/HammoCoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DkY8QUqn7DRm1TUVtEJ8kiycotDvuaNSKCn1YchJpLHS", - "symbol": "LNDC", - "name": "Lean Do", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/vitorcriptos/solana/main/icone.png" - }, - { - "chainId": 101, - "address": "FjA8FNXryYsPEoND6RfUoXffXhZMpy6YDA83G5pz5bwP", - "symbol": "RGD", - "name": "ReGuLaTeD Stake Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FjA8FNXryYsPEoND6RfUoXffXhZMpy6YDA83G5pz5bwP/logo.png", - "extensions": { - "twitter": "https://twitter.com/RegulatedNFT" - } - }, - { - "chainId": 103, - "address": "X6Redh1rbeDW7XBdvwNSjf71iw8KsrRhbjhPnS8BriY", - "symbol": "X6R", - "name": "6th eXtinction Rebellion", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/PurpleZone/NFTs@latest/X6R/X6R.svg", - "tags": [ - "green-coin", - "community-token", - "utility-token", - "colored-token" - ], - "extensions": { - "coingeckoId": "polkadot", - "description": "This token is a membership token for the X6R group acting in fixing the world.%0A--@cryptolake2", - "imageUrl": "https://bafybeifokz3w73lskgqe5z34ucv2e52jpb4xd3gc5iuert5ivlpzpzgm2a.ipfs.nftstorage.link/?ext=svg", - "linkedin": "https://www.linkedin.com/company/eco-organic-technology", - "telegram": "https://t.me/cryptolake2", - "website": "https://PurpleZone.github.io/NFTs/X6R/", - "whitepaper": "https://gateway.ipfs.io/ipns/Qmbsa2XG9WzBgVNGaUKnTv3CvnfXJtDxHX2LsHMLRfsTaS/whitepaper.pdf" - } - }, - { - "chainId": 101, - "address": "miWLpCeMRnJ5zEhH952cYAQK4KN9MPbCrnXKMSnFpCE", - "symbol": "MIWL", - "name": "Minibot WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/miWLpCeMRnJ5zEhH952cYAQK4KN9MPbCrnXKMSnFpCE/ssataei.png" - }, - { - "chainId": 101, - "address": "8PMGziWVwD7foVgX3WMpm3MkEkXLdwTTgZBUESXK1Nrp", - "symbol": "OSOULS", - "name": "OMENS SOULS CHEST", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8PMGziWVwD7foVgX3WMpm3MkEkXLdwTTgZBUESXK1Nrp/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/jkYNtg3Rx2", - "website": "https://omens.art" - } - }, - { - "chainId": 101, - "address": "TGTj1biiXa6JNg39a9i8rzQHzgDCjawQtr7xyDvKaVr", - "symbol": "TGT", - "name": "Tapn Game Token", - "decimals": 6, - "logoURI": "https://static.tapn.gg/token/tgt-signet.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/XhHrn2kef3", - "twitter": "https://twitter.com/tapngg", - "website": "https://tapn.gg" - } - }, - { - "chainId": 101, - "address": "GKUSBwYCx3DVBJoCqsEJ1xpY9qJ8aBQXeL4V1F57TApN", - "symbol": "AVCD", - "name": "Avocado", - "decimals": 0, - "logoURI": "https://github.com/Nillidok/Avocado/blob/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CyCtkcjsFtCKQysCLzZ9UunTpXdMSkzvnVByewmjbYxn", - "symbol": "SAMX", - "name": "Super Automobile Mangement eXpert", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/fullstackdev0410/spl-crypto/main/token.PNG", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "HuwsCqtiosGwxiqpd51DMn8y7FBkJSvrLV2DFa2dpoHD", - "symbol": "OKCT", - "name": "OddKey Cafe' Tokens", - "decimals": 0, - "logoURI": "https://arweave.net/PIBs4KTZANdrMV6DTzt-M75DpC67zGF1poRtOSznhhw", - "extensions": { - "discord": "https://discord.gg/oddkeynft", - "serumV3Usdc": "9hBhJZEcXi7PBBv2fPLsaTjKEcwtcCkYVfmgxAdZBFd3", - "twitter": "https://twitter.com/OddKeyCafe", - "website": "https://oddkey.com/" - } - }, - { - "chainId": 101, - "address": "BKQjRqhganhpqWsJhdBHbXKGVuvXdcu4bd5GWJfXJGEP", - "symbol": "DALSNA", - "name": "dalsna", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BKQjRqhganhpqWsJhdBHbXKGVuvXdcu4bd5GWJfXJGEP/Original.png" - }, - { - "chainId": 101, - "address": "tripUsjy3rYrWpw6D2fj6dWhXCZSog7nzYmMXXp2wN6", - "symbol": "APE", - "name": "Trippin Ape Tribe Token WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/tripUsjy3rYrWpw6D2fj6dWhXCZSog7nzYmMXXp2wN6/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "discord": "https://discord.gg/trippinapetribe", - "twitter": "https://twitter.com/trippinapenft" - } - }, - { - "chainId": 101, - "address": "E8G4uo2i9d12aGnXDHXXcw6hU2fh2NytR5XR3qurTLBx", - "symbol": "WNDO", - "name": "WNDO", - "decimals": 9, - "logoURI": "https://static1.squarespace.com/static/6252f1590fac8d79fb6d772e/t/627682f25295251e0967c29c/1651933939477/wndocoin.png", - "tags": ["utility-token"], - "extensions": { - "description": "WNDO is a utility token used on the WNDO platform. Buy stuff in the real world get rewarded in WNDO!", - "website": "https://www.wndo.io/" - } - }, - { - "chainId": 101, - "address": "D9yWWB2NpBdmYHgzSXa5VfHWB6pWrJSpYzvr6ecVEmqb", - "symbol": "BRA", - "name": "Bragabilia", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/BBBragerton/token-v3/main/BToken.png", - "tags": ["nft-token", "community-token", "asset-token", "utility-token"] - }, - { - "chainId": 101, - "address": "H9bisooRJP317gRKqdqDf1pzQC6VcWBCRFfthLKrpCwT", - "symbol": "BNNA", - "name": "The Moonkees Token", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/TheMoonkeesNFT/TheMoonkees_logo/main/assets/Logo%20transparente%20blanco.png", - "tags": ["Utility-Token"], - "extensions": { - "discord": "https://discord.gg/themoonkeesnft", - "twitter": "https://twitter.com/TheMoonkeesNFT" - } - }, - { - "chainId": 101, - "address": "HAYjU4YMHT7rjguMNCBg2XEmYErxCoFVd8xtDCtP1ANK", - "symbol": "$HAY", - "name": "Horseys HAY Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HAYjU4YMHT7rjguMNCBg2XEmYErxCoFVd8xtDCtP1ANK/logo.png" - }, - { - "chainId": 101, - "address": "GdTXHhRr9UoqaYj2MC9hPz4mjE3vigGbUEfjaDCU2onq", - "symbol": "FIRE", - "name": "Fire Rune", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GdTXHhRr9UoqaYj2MC9hPz4mjE3vigGbUEfjaDCU2onq/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Fire Rune token for SolCraft Game", - "discord": "https://discord.gg/solcraft", - "twitter": "https://twitter.com/solcraftgame", - "website": "https://solcraft.online/" - } - }, - { - "chainId": 101, - "address": "8hHra5o2LYCUrog9KrR39uT6WW4meTBtHKCDJbyr44ox", - "symbol": "EARTH", - "name": "Earth Rune", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8hHra5o2LYCUrog9KrR39uT6WW4meTBtHKCDJbyr44ox/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Earth Rune token for SolCraft Game", - "discord": "https://discord.gg/solcraft", - "twitter": "https://twitter.com/solcraftgame", - "website": "https://solcraft.online/" - } - }, - { - "chainId": 101, - "address": "JAJGBFCgN8YBP1ked9yRd5j52gWfyrkJAHEPQa4UUPDr", - "symbol": "ICE", - "name": "Ice Rune", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/JAJGBFCgN8YBP1ked9yRd5j52gWfyrkJAHEPQa4UUPDr/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Ice Rune token for SolCraft Game", - "discord": "https://discord.gg/solcraft", - "twitter": "https://twitter.com/solcraftgame", - "website": "https://solcraft.online/" - } - }, - { - "chainId": 101, - "address": "A1iT9r65MpvabW47nfvKwBDhwMjrja2ub6Fs9iD2k46U", - "symbol": "SAND", - "name": "Sand Rune", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/A1iT9r65MpvabW47nfvKwBDhwMjrja2ub6Fs9iD2k46U/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Sand Rune token for SolCraft Game", - "discord": "https://discord.gg/solcraft", - "twitter": "https://twitter.com/solcraftgame", - "website": "https://solcraft.online/" - } - }, - { - "chainId": 101, - "address": "EUvo8GYTf2ntMGVkRqpWdN4DjAfyxkPvCKfguSuRNpK2", - "symbol": "DRGN", - "name": "Dragon Scale", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EUvo8GYTf2ntMGVkRqpWdN4DjAfyxkPvCKfguSuRNpK2/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Dragon Scale token for SolCraft Game", - "discord": "https://discord.gg/solcraft", - "twitter": "https://twitter.com/solcraftgame", - "website": "https://solcraft.online/" - } - }, - { - "chainId": 101, - "address": "HEqxKLV8kW2XYd8XxCH7nPxCa5AYxhF1EqpsXCMUWDpa", - "symbol": "CORN", - "name": "Corn", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HEqxKLV8kW2XYd8XxCH7nPxCa5AYxhF1EqpsXCMUWDpa/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Corn token for SolCraft Game", - "discord": "https://discord.gg/solcraft", - "twitter": "https://twitter.com/solcraftgame", - "website": "https://solcraft.online/" - } - }, - { - "chainId": 101, - "address": "4LW9ELPQg45772qU7ZT9q8BP19o3fuXcv8P15fs1MYuX", - "symbol": "PRICK", - "name": "Prickly Pears", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4LW9ELPQg45772qU7ZT9q8BP19o3fuXcv8P15fs1MYuX/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Prickly Pears token for SolCraft Game", - "discord": "https://discord.gg/solcraft", - "twitter": "https://twitter.com/solcraftgame", - "website": "https://solcraft.online/" - } - }, - { - "chainId": 101, - "address": "EdWYL5Z4tCCsMtdxPXT5iV9Ycg46U6mvCJDsQV9zQkCm", - "symbol": "HOLLY", - "name": "Snow Holly", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EdWYL5Z4tCCsMtdxPXT5iV9Ycg46U6mvCJDsQV9zQkCm/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Snow Holly token for SolCraft Game", - "discord": "https://discord.gg/solcraft", - "twitter": "https://twitter.com/solcraftgame", - "website": "https://solcraft.online/" - } - }, - { - "chainId": 101, - "address": "FyctSeF2E7pcM3GRQdtfeAYsCPeHNWkgmdYGebB3y97A", - "symbol": "MAGM", - "name": "Magma Peppers", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FyctSeF2E7pcM3GRQdtfeAYsCPeHNWkgmdYGebB3y97A/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Magma Peppers token for SolCraft Game", - "discord": "https://discord.gg/solcraft", - "twitter": "https://twitter.com/solcraftgame", - "website": "https://solcraft.online/" - } - }, - { - "chainId": 101, - "address": "6EMv9MPiTL5oWzkBHr9XmHHtRpUk12nKGfqboDFyY87P", - "symbol": "PINEH", - "name": "Pine Honey", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6EMv9MPiTL5oWzkBHr9XmHHtRpUk12nKGfqboDFyY87P/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Pine Honey token for SolCraft Game", - "discord": "https://discord.gg/solcraft", - "twitter": "https://twitter.com/solcraftgame", - "website": "https://solcraft.online/" - } - }, - { - "chainId": 101, - "address": "FjJyWJfnb39fdsswQmzNbVxCsH976SQZGFPzXvN5ufwc", - "symbol": "SCORP", - "name": "Sand Scorpion", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FjJyWJfnb39fdsswQmzNbVxCsH976SQZGFPzXvN5ufwc/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Sand Scorpion token for SolCraft Game", - "discord": "https://discord.gg/solcraft", - "twitter": "https://twitter.com/solcraftgame", - "website": "https://solcraft.online/" - } - }, - { - "chainId": 101, - "address": "CnSNBakQSv2MW7pdvdcAHpmUTmvPoChg3NfRtZ7HSaGA", - "symbol": "HARE", - "name": "Ice Hare", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CnSNBakQSv2MW7pdvdcAHpmUTmvPoChg3NfRtZ7HSaGA/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Ice Hare token for SolCraft Game", - "discord": "https://discord.gg/solcraft", - "twitter": "https://twitter.com/solcraftgame", - "website": "https://solcraft.online/" - } - }, - { - "chainId": 101, - "address": "HvCbPvCoDhynUffEYP8DeNDxDQ7hetnBxqFWFM6Svsa4", - "symbol": "MICE", - "name": "Ash Mice", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HvCbPvCoDhynUffEYP8DeNDxDQ7hetnBxqFWFM6Svsa4/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Ash Mice token for SolCraft Game", - "discord": "https://discord.gg/solcraft", - "twitter": "https://twitter.com/solcraftgame", - "website": "https://solcraft.online/" - } - }, - { - "chainId": 103, - "address": "CRLKh4simiVwwtgyNL21EGmixS5viCETUDyhfiKZXZXj", - "symbol": "CRPTLK", - "name": "cryptolake", - "decimals": 9, - "logoURI": "https://cdn.jsdelivr.net/gh/PurpleZone/NFTs@latest/cryptolake/cryptolake.svg", - "tags": [ - "green-coin", - "community-token", - "utility-token", - "colored-token" - ], - "extensions": { - "coingeckoId": "polkadot", - "description": "A token for CryptoLake membership --@cryptolake2", - "imageUrl": "https://bafybeibdnlyepxwur4twznpbriutw24qjzdgxslh6k7jg455d2sbzn3gie.ipfs.nftstorage.link/?ext=svg", - "linkedin": "https://www.linkedin.com/company/eco-organic-technology", - "telegram": "https://t.me/cryptolake2", - "website": "https://PurpleZone.github.io/NFTs/cryptolake/", - "whitepaper": "https://gateway.ipfs.io/ipns/QmUbroCsNCYvDsHiAx2etSw5xfHpkFUpqum5hLajnoxd5k/whitepaper.pdf" - } - }, - { - "chainId": 101, - "address": "HPwpvG7M1aqkrbZMRH7EjB8ZadG8jTsQ3g7U4Utb2Apc", - "symbol": "TRAVEL", - "name": "Destinator Travel Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HPwpvG7M1aqkrbZMRH7EjB8ZadG8jTsQ3g7U4Utb2Apc/logo.png", - "tags": ["nft-token", "metaverse-token", "staking-token"], - "extensions": { - "description": "Destinator Travel Token - To be used for purchases inside the Destinator Metaverse and NFT Staking platform.", - "website": "https://www.destinator.io" - } - }, - { - "chainId": 101, - "address": "7d9YNkXGxL8gN9dkZVw1Bt2yQyvXhvatHsC1J4w96F7w", - "symbol": "CVGen2xWL", - "name": "CV Gen2 WL Tokens", - "decimals": 0, - "logoURI": "https://culturevultures.io/gen2/assets/images/cvgen2_logo.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/Vulturesnft", - "website": "https://culturevultures.io/" - } - }, - { - "chainId": 101, - "address": "23CqJ2yUqyQYchdoK3uKAt2adC23UZ9TtPsquFhtwrB1", - "symbol": "JAP", - "name": "JAP00_", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/23CqJ2yUqyQYchdoK3uKAt2adC23UZ9TtPsquFhtwrB1/logo.jpg", - "tags": ["utiliy-token"] - }, - { - "chainId": 101, - "address": "3DWL5LRJwWiXzDRUYJ1Ky2Dv6TRx5v4F7KSrCq1o6LJr", - "symbol": "3DFUNWL", - "name": "3D FunGuyz WL", - "decimals": 0, - "logoURI": "https://bafkreibp4wzfh5lrqr3gqlcduk4hk64qwmosyryhwrqjaa7qqcggyrylqe.ipfs.nftstorage.link/?ext=png", - "tags": ["whitelist-token"], - "extensions": { - "description": "CONGRATS! You have received a WL token for the 3D FunGuyz Mint! Mint Price: 4 SOL, Wen Mint: May 26th 2022, Total Supply: 3000", - "discord": "https://discord.gg/dEKxrxt8ac", - "twitter": "https://twitter.com/FunGuyzNFT", - "website": "https://funguyz.io/" - } - }, - { - "chainId": 101, - "address": "9TYa4pa644XhZAAK25oAotKiUF8345QefGYV5q7KrebN", - "symbol": "IDIOT", - "name": "4 IDIOTS", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9TYa4pa644XhZAAK25oAotKiUF8345QefGYV5q7KrebN/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "4yx2gD7heLLTHGLN4CGPCaGYsCRfMnadcq8nLm1aWXDk", - "symbol": "FAME", - "name": "FAME", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4yx2gD7heLLTHGLN4CGPCaGYsCRfMnadcq8nLm1aWXDk/logo.png" - }, - { - "chainId": 101, - "address": "7Sp7Rk23f1czHPUhscoXo8cXm6ZSLsDHYNdzCpgQsEzk", - "symbol": "EPAL", - "name": "EPAL Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/EPAL21/sol-token/main/epal-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ETnTP9jVHByQTse6zeohCAZAD5zHpynsCY4Zq9EQSKSW", - "symbol": "HYPEBAC", - "name": "HYpe Book and Claim", - "decimals": 18, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ETnTP9jVHByQTse6zeohCAZAD5zHpynsCY4Zq9EQSKSW/HY.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "6RXd57bcmKQLyhwBfzBjr5U2xyZfv843ceBeZki49dRM", - "symbol": "FREE", - "name": "FREE ReGuLaTeD Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6RXd57bcmKQLyhwBfzBjr5U2xyZfv843ceBeZki49dRM/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "A token at the heart of the ReGuLaTeD ecosystem.", - "discord": "https://discord.gg/regulated", - "twitter": "https://twitter.com/RegulatedNFT", - "website": "https://www.regulatednft.io/" - } - }, - { - "chainId": 101, - "address": "FUjcq8j9j1bAJnnEBwGQYT3WGUVLEDBjbR8ZgtcYJsAW", - "symbol": "1LOVE", - "name": "Kocham Cie", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/EPAL21/Kocham-Cie/main/kochamcie-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GgZGpi7ycFNNFTt33rKH8gbP5dpD3PVHKBhKa5UHqCck", - "symbol": "CRAY", - "name": "CRAY", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GgZGpi7ycFNNFTt33rKH8gbP5dpD3PVHKBhKa5UHqCck/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://peppyplatypus.com/" - } - }, - { - "chainId": 103, - "address": "7rQBH5uxDHbcP34zbEic8HDroejAyzwJnM96mbfgztFN", - "symbol": "VDAO", - "name": "Virgin DAO", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7rQBH5uxDHbcP34zbEic8HDroejAyzwJnM96mbfgztFN/logo.png", - "extensions": { - "discord": "https://discord.gg/https://discord.gg/NpZhjmTxY4", - "twitter": "https://twitter.com/virgindao_sol" - } - }, - { - "chainId": 101, - "address": "BzzCLSUrTM8qK2m1m8NrGEfXBY7kuQmhUeFjvFLM78T3", - "symbol": "SPC", - "name": "SOULPATS", - "decimals": 0, - "logoURI": "https://github.com/swordphish3d/crypto/blob/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DwH6w7pqjX923YbE94grsVe6Fbb2GPesYPSDPHuSTGLb", - "symbol": "SMC", - "name": "Simcoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Simon271207/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7Kec1tnaGXP9DggbauY9ieGQSy4pjH8HJzUEMHqhKBQz", - "symbol": "ATOMS", - "name": "Hexa Digital Assets", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/hexadigitalasset/Atoms_Logo/main/ATOMS_LOGO.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7v4nVURDQDFVTr2sWMBpXzkPuXQR49uuBytMFdcZyks3", - "symbol": "SPRK", - "name": "Spark Coin", - "decimals": 0, - "logoURI": "https://github.com/prichards2921/Spark/blob/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8jojCnqTnauGXkgjUzB8GhZd22GSBAjGwkh21SNCVMYx", - "symbol": "NOTOKAY", - "name": "Not Okay", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/qudo-code/assets/master/solana/tokens/NOTOKAY/NOTOKAY.jpg" - }, - { - "chainId": 101, - "address": "AXneQDz2f8QcVuPmxNNmme1EZZvKkPxnfP4maB5KHPFp", - "symbol": "CozyC", - "name": "CozyCub", - "decimals": 0, - "logoURI": "https://i.imgur.com/LVi8Qmi.jpeg", - "tags": ["nft"] - }, - { - "chainId": 101, - "address": "4ntVBcshvLiUFD1uhXC3pUsqrPzFZJpg1NgfkmAfcb8s", - "symbol": "SEAN", - "name": "Sean", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/dickmasterson/seanies/master/sean-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "E16AdwkqMrmWpVamKL2U8zwJLTjpA8dMsoedPqQNXAoo", - "symbol": "SMOOCH", - "name": "Smooches", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/dickmasterson/seanies/master/smooch-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7ttRirA9PD94MDR2KYfhA7DW8uXe4x9oVE4i7t9KcAab", - "symbol": "ZALI", - "name": "Zalina", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7ttRirA9PD94MDR2KYfhA7DW8uXe4x9oVE4i7t9KcAab/logo.png", - "tags": ["governance-token"], - "extensions": { - "description": "Governance token for zalina.finance", - "twitter": "https://twitter.com/ZalinaFinance", - "website": "https://zalina.finance/" - } - }, - { - "chainId": 101, - "address": "Ef38uckDt5igFxn9kc2tAQQKVmvVat9PMxjybh9ZvvuL", - "symbol": "PR", - "name": "Passroom WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Ef38uckDt5igFxn9kc2tAQQKVmvVat9PMxjybh9ZvvuL/logo.png", - "tags": ["WL-token"] - }, - { - "chainId": 101, - "address": "87vA6oDxoTKbh7BLYsqNTrfVw1Udiu5zFy2Tw87gjytY", - "symbol": "HPWL", - "name": "Honest Poker Founder's Pass WL", - "decimals": 0, - "logoURI": "https://github.com/Honest-Labs/token-images/blob/main/assets/honest-poker-founders-wl.png", - "tags": ["honest-poker"], - "extensions": { - "twitter": "https://twitter.com/HonestPoker_", - "website": "https://honest.poker/" - } - }, - { - "chainId": 101, - "address": "AqtMo5WyQmi3dQsuuQfgxKM3Gah5QKgZBdTnifSzehJq", - "symbol": "VDAO", - "name": "Virgin DAO", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AqtMo5WyQmi3dQsuuQfgxKM3Gah5QKgZBdTnifSzehJq/logo.png", - "extensions": { - "discord": "https://discord.gg/https://discord.gg/NpZhjmTxY4", - "twitter": "https://twitter.com/virgindao_sol" - } - }, - { - "chainId": 101, - "address": "B8WJxSDHCHM43WcfrC8HzBvg4cYRVA2EQiERxBtPQ99T", - "symbol": "OR5", - "name": "Algorithm", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Uplordi/crypto/main/logo.png.png", - "tags": ["social-token", "community-token", "yoroshii"] - }, - { - "chainId": 101, - "address": "7ViSurf5Ve2a8qDWFYsfU8GFmRttQvS5paJ8L94QZgo7", - "symbol": "BBSAMO", - "name": "BabySamoio", - "decimals": 1, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7ViSurf5Ve2a8qDWFYsfU8GFmRttQvS5paJ8L94QZgo7/bbsamo.png", - "tags": ["p2e"], - "extensions": { - "telegram": "https://t.me/babysamoio", - "website": "https://babysamo.io" - } - }, - { - "chainId": 101, - "address": "AnUrP8xSfYNke1KpkryMpMB67bbde8XrXb6XaFctNyB6", - "symbol": "GP", - "name": "GeorgePelal Coin", - "decimals": 1, - "logoURI": "https://raw.githubusercontent.com/georgepelal/ok/main/mylogo.png" - }, - { - "chainId": 101, - "address": "2G8y27mY1LWKaAAMDdFsGMpz9wQ1TgpkgChUGeVXu2wk", - "symbol": "MNL", - "name": "MONELA", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/MoneyLandVerse/pr/main/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/C5az2gHKae", - "linkedin": "https://www.linkedin.com/company/moneyland-metaverse", - "medium": "https://medium.com/@MonelaVerse", - "reddit": "https://www.reddit.com/r/Monelaverse", - "telegram": "https://t.me/moneyland_verse", - "twitter": "https://twitter.com/monelaverse" - } - }, - { - "chainId": 101, - "address": "3DFUNAzqFZTKHHHovSV3iJGvudnAPSoKoXe2XH6SBF6i", - "symbol": "3DFUN", - "name": "3D FunGuyz Discounted WL", - "decimals": 0, - "logoURI": "https://bafkreihebzouugjwf32gryfh7hqraxc5kue4rbsei3w57pks4phmpdfudq.ipfs.nftstorage.link/?ext=png", - "tags": ["whitelist-token"], - "extensions": { - "description": "CONGRATS! You have received a discounted WL token for the 3D FunGuyz Mint for having 2 or more FunGuyz in your wallet! Mint Price: 3 SOL, Wen Mint: May 26th 2022, Total Supply: 3000", - "discord": "https://discord.gg/dEKxrxt8ac", - "twitter": "https://twitter.com/FunGuyzNFT", - "website": "https://funguyz.io/" - } - }, - { - "chainId": 101, - "address": "9XoLtLc3vGFocje9Jojm6nDkjz82mZQYbBPLDYvFafJL", - "symbol": "AZDWL", - "name": "Azuria Droids Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/AzuriaDev/token-images/bacedbbe6f30a1781aa498ae7db070486acf6bba/azuria-droids-whitelist-token.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/AzuriaMetaverse", - "website": "https://www.azuria.world/" - } - }, - { - "chainId": 101, - "address": "BkCwEZ5Zbv85dAT9rD6mu19i26RY72gBWETr1bb8Wssv", - "symbol": "SWDTKN", - "name": "Sword Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/HitBox2022/crypto/main/logo.png", - "tags": [ - "utility-token", - "game-token", - "game-currency", - "GameFi", - "Gaming" - ], - "extensions": { - "description": "The one token bringing the traditional and blockchain gaming world together", - "website": "http://swordsofblood.com" - } - }, - { - "chainId": 101, - "address": "boooCKXQn9YTK2aqN5pWftQeb9TH7cj7iUKuVCShWQx", - "symbol": "BOO", - "name": "Boo Network", - "decimals": 9, - "logoURI": "https://arweave.net/Reo2_w4k9PGdtYX3p8BllNZpSbbIJ-zype0qdbQgsoE", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/GhostKidDAO", - "website": "https://tinyurl.com/ghostkiddao" - } - }, - { - "chainId": 101, - "address": "77Rg8gKfGeozwDP1obvHU53fCpP5MzUs6pH4p4jj2kQ2", - "symbol": "PRTO2", - "name": "Proteau", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/GuillaumePB/proteaucrypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Demon1dfcWS8nfQbwwpgXTD5cQsFChjGEER7VHuJndTD", - "symbol": "LMT", - "name": "Legion Mint", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SolStonez/Legion-Key-Logo/main/legion_mint_token.png", - "tags": ["utility-token"], - "extensions": { - "description": "Each Legion Mint Token is good for one free Legion of Sol mint. My name is legion: for we are many.", - "discord": "https://discord.gg/legionofsol", - "twitter": "https://twitter.com/legion_of_sol", - "website": "https://legionofsol.io/" - } - }, - { - "chainId": 101, - "address": "7YTpvsi55fzuwj3E4kpzFCWT71SuUf2YcMdVgGFE9fwr", - "symbol": "FTS", - "name": "Fatsas Coin", - "decimals": 1, - "logoURI": "https://raw.githubusercontent.com/georgepelal/ok/main/fatsas1.png" - }, - { - "chainId": 101, - "address": "BLyV6szCZ7Ypye8AHXyHDmjC4uC73sGvEJoMwoVQw3Te", - "symbol": "TFOXES", - "name": "Transdimensional Fox Federation Floor Index", - "decimals": 2, - "logoURI": "https://cloudflare-ipfs.com/ipfs/bafkreiaw7wgcu3o7xwmm3mbmm65pco5nti7etquvp7xlo6atgbksirb2va", - "tags": ["fraction-index", "bridgesplit-fraction", "tfoxes", "fnft"], - "extensions": { - "discord": "https://discord.gg/bridgesplit", - "twitter": "https://twitter.com/bridgesplit", - "vault": "https://app.bridgesplit.com/fractions/BLyV6szCZ7Ypye8AHXyHDmjC4uC73sGvEJoMwoVQw3Te" - } - }, - { - "chainId": 101, - "address": "EK6j5Shv99xttoT3F2DfG8uQMoX6NoAZgTuYwCvrHzqo", - "symbol": "LIONESS", - "name": "Jungle Cats Lioness Index", - "decimals": 2, - "logoURI": "https://dl.airtable.com/.attachments/5befbef5bb59eb122426dac8db5a0b2f/2327b76a/QueenLion.jpg", - "tags": [ - "fraction-index", - "bridgesplit-fraction", - "jungle-cats-lioness", - "fnft" - ], - "extensions": { - "discord": "https://discord.gg/bridgesplit", - "twitter": "https://twitter.com/bridgesplit", - "vault": "https://app.bridgesplit.com/fractions/EK6j5Shv99xttoT3F2DfG8uQMoX6NoAZgTuYwCvrHzqo" - } - }, - { - "chainId": 101, - "address": "uL2qhMckUAroJPt2MLHwEeppJNYE3wBAGFMCs3anwXn", - "symbol": "DRIPP", - "name": "Drippies Floor Index", - "decimals": 2, - "logoURI": "https://creator-hub-prod.s3.us-east-2.amazonaws.com/drippies_pfp_1648415706808.gif", - "tags": ["fraction-index", "bridgesplit-fraction", "drippies", "fnft"], - "extensions": { - "discord": "https://discord.gg/bridgesplit", - "twitter": "https://twitter.com/bridgesplit", - "vault": "https://app.bridgesplit.com/fractions/uL2qhMckUAroJPt2MLHwEeppJNYE3wBAGFMCs3anwXn" - } - }, - { - "chainId": 101, - "address": "9j7pLeELCPTnXYXcHSiGSuYr1UE7cTaAd16kiH2AiNs5", - "symbol": "DRAKOSE", - "name": "Drakos Unchained Expansion Floor Index", - "decimals": 2, - "logoURI": "https://dl.airtable.com/.attachments/28e237c4f048b44953ce81d43ea0c1cb/1f0a0154/ME-PFP.gif", - "tags": [ - "fraction-index", - "bridgesplit-fraction", - "drakos-expansion", - "fnft" - ], - "extensions": { - "discord": "https://discord.gg/bridgesplit", - "twitter": "https://twitter.com/bridgesplit", - "vault": "https://app.bridgesplit.com/fractions/9j7pLeELCPTnXYXcHSiGSuYr1UE7cTaAd16kiH2AiNs5" - } - }, - { - "chainId": 101, - "address": "5iUW2aLFsSD5oRkmxpRfKFffvKvTeFmEruABLYyY2MRX", - "symbol": "HELIX", - "name": "Metahelix Floor Index", - "decimals": 2, - "logoURI": "https://creator-hub-prod.s3.us-east-2.amazonaws.com/metahelix_pfp_1647817083595.png", - "tags": ["fraction-index", "bridgesplit-fraction", "metahelix", "fnft"], - "extensions": { - "discord": "https://discord.gg/bridgesplit", - "twitter": "https://twitter.com/bridgesplit", - "vault": "https://app.bridgesplit.com/fractions/5iUW2aLFsSD5oRkmxpRfKFffvKvTeFmEruABLYyY2MRX" - } - }, - { - "chainId": 101, - "address": "GoatLVmpgEcSLyNMpzxe5UUTLpFd5eVvkSEHY7AsZfGc", - "symbol": "TheGoat", - "name": "Great Goats Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GoatLVmpgEcSLyNMpzxe5UUTLpFd5eVvkSEHY7AsZfGc/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/GreatGoatsNFT" - } - }, - { - "chainId": 101, - "address": "64r432xziX6XHx8QMuHa4Ck7ayzVg2fe7cpPvFD3MPYX", - "symbol": "MSCN", - "name": "Morris Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/thomasokc/crypto/main/morrisCoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HCs795QpfXP6nVkPvzfgaFDoTyGgxG5vdBdS9hr6GDYL", - "symbol": "STNY", - "name": "STONEY TOKEN", - "decimals": 5, - "logoURI": "https://pasteboard.co/a7bWqj2fB5V4.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9dnPpnfUemGweue1qmQiaHdygnYMNREuY3DLYUHQu9DE", - "symbol": "QUANT", - "name": "Quantum Token", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/Mpume-algorith/crypto-token/main/logo.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "FnNQQjWpeFRMxS75GV9NTPzsBntmQRdKYM21Sr4B5V1t", - "symbol": "ZADN", - "name": "Zaiden Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Dakender/Zaiden-Coin/main/logo-zaiden.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DRt2JmUCYDoVYfbAnAitCNetB1PUgbwpsZfhfhEJLyFs", - "symbol": "FBTC", - "name": "Flash Ceypto Carency", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/Crypto-carency/crypto/main/crypto-logo.png" - }, - { - "chainId": 101, - "address": "BjM9tHajUkjeFsGuymBUer4ZKLA4t37ehERW3dxRGbCJ", - "symbol": "AL3XA", - "name": "Alexa", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jpw5/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "6DMw6AM1jSNAspTDo2FFr9GU5hTPhdFWnvNDtaxdhZwt", - "symbol": "JD3Coin", - "name": "JD3 Coin", - "decimals": 2, - "logoURI": "https://staging.genwin.app/web/media/4e3ecedb-1fb0-4833-aaba-4b0c6436ae2f.png" - }, - { - "chainId": 101, - "address": "4gN1u9LNBnvFERpDU3SrMusMJ1gKLbE9XB6EYraQkWTf", - "symbol": "DGWL", - "name": "Degenz Game Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4gN1u9LNBnvFERpDU3SrMusMJ1gKLbE9XB6EYraQkWTf/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "discord": "https://discord.gg/degenzgame", - "twitter": "https://twitter.com/degenzgame", - "website": "https://degenz.game" - } - }, - { - "chainId": 101, - "address": "DoLDqhWPLrAH4mzsGo54AshM6k94T23GnaFmGVdLTR4r", - "symbol": "mKOGWL", - "name": "mK OG Chef Whitelist", - "decimals": 0, - "logoURI": "https://metakitchendev.onrender.com/static/media/MK-coin.4572f8b4b0d0901217de.png", - "tags": ["whitelist-token", "GameFi", "Gaming"], - "extensions": { - "description": "Whitelist token for metaKitchen OG Chefs", - "discord": "https://discord.gg/metakitchen", - "instagram": "https://www.instagram.com/metakitchennft/", - "twitter": "https://twitter.com/meta_Kitchen", - "website": "https://metakitchen.io/", - "whitepaper": "https://metakitchen.gitbook.io/metakitchen-wp/wb1pN4vYLKsa8w4IX5qL/" - } - }, - { - "chainId": 101, - "address": "D5FeXZ9aernffbG6UebUkfX612AyohHeoXFZABLVmMoX", - "symbol": "TAT", - "name": "Trippin Ape Tribe (Whitelist Token)", - "decimals": 0, - "logoURI": "https://pbs.twimg.com/profile_images/1516190526592139266/tTBE_jP5_400x400.jpg", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/TrippinApeNFT" - } - }, - { - "chainId": 101, - "address": "Dc3E5zi7V9MyTrrmD72NoX4pRmDh8xABsFmCVdCme82L", - "symbol": "RCDWL", - "name": "RCD WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Dc3E5zi7V9MyTrrmD72NoX4pRmDh8xABsFmCVdCme82L/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "discord": "https://discord.gg/qmS6PWM75w", - "twitter": "https://twitter.com/CryptureDefense", - "website": "https://www.randomcrypturedefense.com/" - } - }, - { - "chainId": 101, - "address": "5EcRg4CXDXhNzecAH5JeFXuyRMWoXAu2S4YUwpHfKru2", - "symbol": "INCOIN", - "name": "Incog-coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Hoffers83/crypto/main/Logo.PNG", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5qhyR2rYEZfGeJBKUdjom8pJNkqCBsYaZAtqsKAQhjoS", - "symbol": "MFS", - "name": "Metadopt Free Sloth", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5qhyR2rYEZfGeJBKUdjom8pJNkqCBsYaZAtqsKAQhjoS/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "This token gives you a free sloth mint on Metadopts Avatar Builder.", - "discord": "https://discord.gg/GKvxz6knjs", - "twitter": "https://twitter.com/metadopt" - } - }, - { - "chainId": 101, - "address": "dogNpVvUavBx65BXETRFhwByMw65cAzFxTjbc7uD8br", - "symbol": "CDFM", - "name": "Corrupted Dogs OG Free Mint", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/dogNpVvUavBx65BXETRFhwByMw65cAzFxTjbc7uD8br/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/CorruptedDogs" - } - }, - { - "chainId": 101, - "address": "dogMuvvxb6LDEhfUFxYxHRKnR4NUtzz8BPHcit8mfpm", - "symbol": "CDWL", - "name": "Corrupted Dogs WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/dogMuvvxb6LDEhfUFxYxHRKnR4NUtzz8BPHcit8mfpm/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/CorruptedDogs" - } - }, - { - "chainId": 101, - "address": "479u78dczfjx9J5u32yGt1nTquM5f9zAFLeuy2eU7YnG", - "symbol": "LRNST", - "name": "Learner Shelter", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/Rishikesh13882/png-token/main/ss.png", - "tags": ["meme-token"], - "extensions": { - "discord": "https://discord.gg/ZRPxYn8rRs", - "website": "https://learnershelter.com/" - } - }, - { - "chainId": 101, - "address": "6s17gerWtun1TkDiWakEGWMnxTBiyYABEU19BpuB65FR", - "symbol": "KUK", - "name": "KUK", - "decimals": 9, - "logoURI": "https://github.com/MatheusWells/token-list/blob/main/assets/mainnet/6s17gerWtun1TkDiWakEGWMnxTBiyYABEU19BpuB65FR/logo.png?raw=true", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "6cSq646iR9kfU2BJuFdFjKbvD5NjygZbhv71WNAzLiTk", - "symbol": "BUGA", - "name": "BUGA Coin", - "decimals": 8, - "logoURI": "https://cdn.shopify.com/s/files/1/1061/1924/products/Skull_Emoji_Icon_8cee31f2-35dd-42e7-b757-3cb8cfe72437_1024x1024.png?v=1571606093", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "okayaeHG5rLEy3tQJsVj2ppQp3qhrXZfRHf6uG4siUF", - "symbol": "OBWL", - "name": "Okaybulls WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/okayaeHG5rLEy3tQJsVj2ppQp3qhrXZfRHf6uG4siUF/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/okaybulls" - } - }, - { - "chainId": 101, - "address": "8RGdXex7StmeGsxmTcZDt37qhmtiRpDmHJDyCA97nhaY", - "symbol": "FTT", - "name": "Felix Thoen Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/FelixThoen/crypto/main/newlixn.jpg", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "CKXFoHkE5yYaCXapwNQqRogfpKXmB3DgxP6Pbuw7AZ13", - "symbol": "JD3C", - "name": "JD3 Dev Coin", - "decimals": 2, - "logoURI": "https://staging.genwin.app/web/media/4e3ecedb-1fb0-4833-aaba-4b0c6436ae2f.png" - }, - { - "chainId": 101, - "address": "2qmM8tCYvYeXz9pztHLoNmshqmAf8ZQ5btUxStBekxBj", - "symbol": "$INDOI", - "name": "INDOI token", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/ahmaaz10/crypto/main/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "7NX2zna24nt9ZoKhYiqs6R63yZeeuviB8GtBcHr539zQ", - "symbol": "SHEN", - "name": "Arab Shaheen", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/atadar/ArabShaheen/main/assets/mainnet/7NX2zna24nt9ZoKhYiqs6R63yZeeuviB8GtBcHr539zQ/shaheen.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2YCQcQgy9nNhgukjAur1jCvMXgSTQ5FVDc3ae3BcspXS", - "symbol": "VRS", - "name": "VeraSaw Plant Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2YCQcQgy9nNhgukjAur1jCvMXgSTQ5FVDc3ae3BcspXS/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/YBYgAtX6", - "telegram": "https://t.me/VerasawOfficialGroup", - "twitter": "https://twitter.com/VeraSaw", - "youtube": "https://www.youtube.com/channel/UC_zgKg0gt2fu_oar0JSKY0Q" - } - }, - { - "chainId": 101, - "address": "CYFWeAYftmLUDLoxCfP1bvKn5NFD6G6g7vWKWm28ELAh", - "symbol": "SCHCO", - "name": "SchrodinGersCoin", - "decimals": 0, - "logoURI": "https://github.com/SchrodingersCoinS/crypto/blob/main/SchrodingersCoin.png", - "tags": ["Memes"] - }, - { - "chainId": 101, - "address": "3WKbcYBMKx9vX7419Nft7Anh2X5LHwsiSpm3PwnAAWU8", - "symbol": "SolPen", - "name": "SolanaPenguin", - "decimals": 0, - "logoURI": "https://i.imgur.com/NWW0MOs.png", - "tags": ["nft"] - }, - { - "chainId": 101, - "address": "aro9zmkh9pxkKN9F1FZntQDQCyfbyqv9QdqAwWc7nfJ", - "symbol": "ARO", - "name": "ArrorDefi", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/aro9zmkh9pxkKN9F1FZntQDQCyfbyqv9QdqAwWc7nfJ/logo.png", - "tags": ["utility-token", "ecosystem-token"], - "extensions": { - "discord": "https://discord.gg/ZH8GYu77fA", - "twitter": "https://twitter.com/arrordefi", - "website": "https://arrordefi.com/" - } - }, - { - "chainId": 101, - "address": "EAUQ1HsgGX2Xgjc5kYYJ5AxxQnNmhbG4xrWUZp49NN1N", - "symbol": "MTWL", - "name": "Miner Tools", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EAUQ1HsgGX2Xgjc5kYYJ5AxxQnNmhbG4xrWUZp49NN1N/logo.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 103, - "address": "B63QS4EuLN1b4UfHF1mqymvQsqJdHzmqA45Uy455upeS", - "symbol": "WLTVP", - "name": "TVP WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/georgiod9/tvp/master/logo.png" - }, - { - "chainId": 101, - "address": "GGfRamVXbvqW389d4Za2pR1Cw7hwoxLd8usrnosLG5kb", - "symbol": "MTF", - "name": "MTFISH Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/TamasGMI/MonTheFishery/main/Mon%20The%20Fishery%20(2).png", - "tags": ["Utility-Token"], - "extensions": { - "instagram": "https://www.instagram.com/monthefishery", - "twitter": "https://twitter.com/monthefishery" - } - }, - { - "chainId": 103, - "address": "D4NhKJGBgNTQwmtgVco2b9wYaXcgeb488QicPfbvLEhz", - "symbol": "BDG", - "name": "La Bodegueta", - "decimals": 0, - "logoURI": "https://ipfs.io/ipfs/QmUu6HGQXMB2f69ch9PTjeh3nYbZgRTXgMztUJcn9XAHp3", - "tags": ["social-token"], - "extensions": { - "website": "https://www.labodeguetademollet.com" - } - }, - { - "chainId": 101, - "address": "5P4XspXXzCxyKH7uB4ygWByv1fJxrPGomqTEsURbZvvb", - "symbol": "ZEIT", - "name": "ZeitCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ZeitsCoin/cripto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4i3285PyW8ansfoHQWH3AadVV6UP39mdxhHS8xBdMtph", - "symbol": "HPWL", - "name": "Honest Poker WL (Founder's Pass)", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4i3285PyW8ansfoHQWH3AadVV6UP39mdxhHS8xBdMtph/logo.png", - "tags": ["honest-poker"], - "extensions": { - "twitter": "https://twitter.com/HonestPoker_", - "website": "https://honest.poker/" - } - }, - { - "chainId": 101, - "address": "FEXbpVRgJ6GZcpwutRSHdktXso7J5XCCgNDcvPiX2Nrj", - "symbol": "MLO", - "name": "Mottilio", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FEXbpVRgJ6GZcpwutRSHdktXso7J5XCCgNDcvPiX2Nrj/logo.png", - "tags": ["utility-token"], - "extensions": { - "facebook": "https://www.facebook.com/mottimobile", - "instagram": "https://www.instagram.com/mottimobile", - "twitter": "https://twitter.com/mottimobile", - "website": "https://motti.com" - } - }, - { - "chainId": 101, - "address": "ToPBXCrquTpnEz24bWeYkuXUDmnXdeGGSgTgPeX1sPF", - "symbol": "ZLOWL", - "name": "Planet Zloba - WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/6827050a10738590ef327b4c761519fe01913f2d/assets/mainnet/ToPBXCrquTpnEz24bWeYkuXUDmnXdeGGSgTgPeX1sPF/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/PlanetZloba", - "website": "https://www.planetzloba.com/" - } - }, - { - "chainId": 101, - "address": "CYbLZDG7TexKi2axdh4gQGLV3FnXvBgfJgLtixhKVytZ", - "symbol": "FUEL", - "name": "Biker", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CYbLZDG7TexKi2axdh4gQGLV3FnXvBgfJgLtixhKVytZ/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/skullbots", - "twitter": "https://twitter.com/SKULLBOTS", - "website": "https://www.skullbots.io/" - } - }, - { - "chainId": 101, - "address": "3YZhqNRn8Vnaf5K3X7j1w4s7djwHQVRmALF56ZfCkTBa", - "symbol": "SIXGE", - "name": "Sol Information Exchange", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/rasiel506/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7Tu4ai99TGWwEAa9m284UDbPJELJuZQUZoQ18Jxf86Wu", - "symbol": "HPWL", - "name": "Honest Poker WL (Founders Pass)", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7Tu4ai99TGWwEAa9m284UDbPJELJuZQUZoQ18Jxf86Wu/logo.png", - "tags": ["honest-poker"], - "extensions": { - "twitter": "https://twitter.com/HonestPoker_", - "website": "https://honest.poker/" - } - }, - { - "chainId": 101, - "address": "DCpgVPDSfW2AzuLep2DYtjpFTD25u1R59oej6zzraLMj", - "symbol": "PLRS", - "name": "Polaris Coin", - "decimals": 0, - "logoURI": "https://uploads-ssl.webflow.com/6235ef598201565a09d70196/628da08b096a51491a3842a9_plrs.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7UvcxpsYpDov3Q9GJU3HiHUVnVCEnY96XPAkD1LTDcLe", - "symbol": "ALBY", - "name": "Alby Coin", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7UvcxpsYpDov3Q9GJU3HiHUVnVCEnY96XPAkD1LTDcLe/alby.png", - "tags": ["personal-token", "alby", "in-alby-we-trust", "invest-in-alby"], - "extensions": { - "description": "Congratulations! You are one of the holders of ALBY COIN! If you own this coin, Alby thanks you for being an overall awesome person and having chill vibes and stuff! You can continue to earn Alby coin by investing in Alby's overall quality of life, make sure to mention your wallet address." - } - }, - { - "chainId": 101, - "address": "4an6Mhiij3EXpkkti1rcerHdcucg7suEvycgqAC73LkU", - "symbol": "POTT", - "name": "Pot Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/tranmduke/crypto/5d7e4529068479dd17ffbe78964b70dd152c0902/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FBHFo6uQheu5WNXhryDUpkDwyCQP6e1iTF56veLVJu3a", - "symbol": "SFWLT", - "name": "Stoned Farms WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FBHFo6uQheu5WNXhryDUpkDwyCQP6e1iTF56veLVJu3a/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/stonedfarms", - "website": "https://stonedfarms.io/" - } - }, - { - "chainId": 101, - "address": "F3bHfhwKKvsDjy76BzBio9fHrg7rtPNg1xifpgevdvLn", - "symbol": "PRTTTT", - "name": "PRT TOOLS", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/F3bHfhwKKvsDjy76BzBio9fHrg7rtPNg1xifpgevdvLn/logo.png" - }, - { - "chainId": 101, - "address": "CB8wh1bXWugaqaqcA2KxTv1nf5zyU5oTsT6XvT3A6uyh", - "symbol": "NWL", - "name": "NAKAMA WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Robby3082/test-token/main/nakamawl.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "P1utjqwB7hEcgDe3u8oHeRCtfyWQY2XEhhCyPFYVhu7", - "symbol": "PLMTX", - "name": "Plutonium X", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/P1utjqwB7hEcgDe3u8oHeRCtfyWQY2XEhhCyPFYVhu7/icon.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.com/invite/ttcc", - "twitter": "https://twitter.com/TimeTravelingCC" - } - }, - { - "chainId": 101, - "address": "Bone6zEsectLFPtSGHDya6mRvrKVZ7kyeUUc1uVFu7pB", - "symbol": "BONE", - "name": "BONE Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Bone6zEsectLFPtSGHDya6mRvrKVZ7kyeUUc1uVFu7pB/logo.png" - }, - { - "chainId": 101, - "address": "BEoAR8HvD8kFWjLyxcRbLcNyVctPjss7iGZwzeV3PHAg", - "symbol": "NYBC", - "name": "Nyabi Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/B0on/crypton/main/nyabc.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "666YXKdQzN49gzQetYffQUhy4hLxEB31PZkRew4VrXAj", - "symbol": "SHOIT", - "name": "Shoit Coin", - "decimals": 9, - "logoURI": "https://user-images.githubusercontent.com/106226389/170191878-49041947-b736-4224-992c-a2602fdc3657.JPG", - "tags": ["meme-token"], - "extensions": { - "twitter": "https://twitter.com/shoit_coin" - } - }, - { - "chainId": 101, - "address": "RAcgAKBWGWqeZgQawUhLXbKaPTYAVYNFYcKyigGJhxX", - "symbol": "RAC", - "name": "Renegades Access Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/RAcgAKBWGWqeZgQawUhLXbKaPTYAVYNFYcKyigGJhxX/logo.svg" - }, - { - "chainId": 101, - "address": "ATCvehjZsCC8JBdiKXj41xdpVKrtmBf2x9qwFHrrL2Nd", - "symbol": "ATC", - "name": "Altered Token Coins", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ATCvehjZsCC8JBdiKXj41xdpVKrtmBf2x9qwFHrrL2Nd/logo.svg" - }, - { - "chainId": 101, - "address": "RUWV9EDJkyA3ua3CgNsZVdRJUPp9KrpmeM8i1AfK6We", - "symbol": "AlphaClub", - "name": "AlphaClub", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/RUWV9EDJkyA3ua3CgNsZVdRJUPp9KrpmeM8i1AfK6We/logo.png", - "tags": ["social-token", "whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/AlphaClubSOL", - "website": "https://alphapass.net" - } - }, - { - "chainId": 101, - "address": "rJ6DSDeAftuwTrEjmKpuUm9cmG5dgb4GiDD2oPPWTME", - "symbol": "Kiks", - "name": "Kikser shit coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/Kikser1214/test/main/logo.png", - "tags": ["meme-token"], - "extensions": { - "twitter": "https://twitter.com/Kikser11" - } - }, - { - "chainId": 101, - "address": "Bdidi76zPEDAfJTUX9xSfvwGEWy6PGwuazgKW26BEcv", - "symbol": "MODO", - "name": "Modo Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/6eorgeLucas/ModoCoins/main/MODOCOIN_Logo_circle.png", - "tags": ["social-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/networkchuck", - "website": "https://networkchuck.com", - "youtube": "https://www.youtube.com/channel/UC9x0AN7BWHpCDHSm9NiJFJQ" - } - }, - { - "chainId": 101, - "address": "HArMoNyavXSMMD96pTTDoTtpw1y7ERAXNrHa3WVn6cDM", - "symbol": "HRMY", - "name": "Harmonya", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HArMoNyavXSMMD96pTTDoTtpw1y7ERAXNrHa3WVn6cDM/logo.png", - "tags": [ - "game-token", - "game-currency", - "game", - "utility-token", - "nft", - "gaming", - "metaverse" - ], - "extensions": { - "animationUrl": "https://harmonya.s3-eu-west-3.amazonaws.com/logo.png", - "description": "Harmonya is a metaverse atoll, you can own your villa in a floating island, earn crypto, NFT, play p2e games and more", - "discord": "https://discord.gg/STWZw5wc", - "facebook": "https://www.facebook.com/Harmonya-102230569096215", - "github": "https://github.com/HarmonyaDAO", - "instagram": "https://www.instagram.com/harmonyameta", - "linkedin": "https://www.linkedin.com/company/harmonya-metaverse/", - "medium": "https://bit.ly/HRYmedium", - "reddit": "https://www.reddit.com/r/Harmonyameta/", - "telegram": "https://t.me/harmonyameta", - "telegramAnnouncements": "https://t.me/harmonyameta", - "twitter": "https://twitter.com/harmonyameta", - "website": "https://linktr.ee/harmonyameta", - "whitepaper": "https://harmonya-metaverse.gitbook.io/harmonya-white-paper/" - } - }, - { - "chainId": 103, - "address": "4SEY65PouYay9yzqex62ygAGKXrui4NbNoG8yqqzz8PQ", - "symbol": "LZV", - "name": "LazyVaccine", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4SEY65PouYay9yzqex62ygAGKXrui4NbNoG8yqqzz8PQ/logo.png", - "tags": ["social-token", "learn-and-earn"], - "extensions": { - "twitter": "https://twitter.com/lazyvaccine", - "website": "https://lazyvaccine.com" - } - }, - { - "chainId": 101, - "address": "8Ytv2K8w2yPG6YwwTSJ7Ay5uJJk1p8Lzw9ddtJq9Fz3W", - "symbol": "SLT", - "name": "Solotto Club", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8Ytv2K8w2yPG6YwwTSJ7Ay5uJJk1p8Lzw9ddtJq9Fz3W/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2Vs8Xvhc7kMBBbniTCGhUYwAu74GSYVDAqyzxh6zro8x", - "symbol": "HANGAR", - "name": "Hangar Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Shoryn/hangarcoin/main/HangarPoundcoin112.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8SKcTZ2KsVpPJVU3QSHQD5uRQpw5WS4VsVfEVwhKMLCF", - "symbol": "DARKM", - "name": "Dark Matter", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8SKcTZ2KsVpPJVU3QSHQD5uRQpw5WS4VsVfEVwhKMLCF/darkmatter.png" - }, - { - "chainId": 103, - "address": "2BBTUkry8pAtQCQUoCNgB2uWWZNhosw2urHKL9QkTTUA", - "symbol": "YUN", - "name": "Yun Token for devnet", - "decimals": 9, - "logoURI": "https://i.imgur.com/PD1IjE9.png", - "tags": ["social-token"], - "extensions": { - "description": "Yun Token on devnet" - } - }, - { - "chainId": 101, - "address": "9Nxsu2QQZZYSkpy9c9YFiLWG3QZwDXXFdpwCcXR2QNks", - "symbol": "DSCTK", - "name": "Disctok", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/moradev/disctok/main/icon.jpg", - "tags": [ - "game-token", - "game-currency", - "game", - "utility-token", - "gaming", - "metaverse" - ] - }, - { - "chainId": 101, - "address": "GsZcjMnaqw6VVpTtQa4ggkjT9w3wNiupUA4AYT2WKTXC", - "symbol": "DTN", - "name": "Detown", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GsZcjMnaqw6VVpTtQa4ggkjT9w3wNiupUA4AYT2WKTXC/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/detown_io", - "website": "https://www.detown.io" - } - }, - { - "chainId": 101, - "address": "KoinFMYtye41ax7ehQiTFp6PCRXviqdBn1VuP3NYLsn", - "symbol": "Koinz", - "name": "Cultured Kongz Koinz", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/KoinFMYtye41ax7ehQiTFp6PCRXviqdBn1VuP3NYLsn/icon.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.com/invite/gSHWqephYV", - "twitter": "https://twitter.com/CulturedKongz" - } - }, - { - "chainId": 101, - "address": "4GuCMVuAky4ctt7Syb4ZneQtabA4pQ4yqVkeVoGuQHf2", - "symbol": "$INTL", - "name": "INTL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/CMHayden/crypto/master/intl-min.png", - "tags": ["utility-token"], - "extensions": { - "description": "Utility Token for Meta Minters" - } - }, - { - "chainId": 101, - "address": "7V5AaqHTwiySegaAmNPLekQfTAoK4WvEVgfi2R8V44tB", - "symbol": "rFRAKT", - "name": "Random FRAKTs", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7V5AaqHTwiySegaAmNPLekQfTAoK4WvEVgfi2R8V44tB/rFRAKT.png", - "tags": ["frakt-nft-pool"], - "extensions": { - "website": "https://frakt.xyz/pools/CUvaGx32Z1p9Wia2Xheod37ii62byAxhNv8r2UJX729Y/buy" - } - }, - { - "chainId": 101, - "address": "EmvtEzATa3n766yxojGZJmpSzkTxsCdDSX2zgRMZEoaQ", - "symbol": "rPWNG", - "name": "Random Pawnshop Gnomies", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EmvtEzATa3n766yxojGZJmpSzkTxsCdDSX2zgRMZEoaQ/rPWNG.png", - "tags": ["frakt-nft-pool"], - "extensions": { - "website": "https://frakt.xyz/pools/FvKPzBfDx6AgBhkwweFnth2g9Mfd21vT9Lr7yoxUQsp8/buy" - } - }, - { - "chainId": 101, - "address": "6RBwVuqgBsYsWXmEhV72MSBZMawuy9XxDpm9uzffxmw1", - "symbol": "rHRHC", - "name": "Random High Roller Hippo Clique", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6RBwVuqgBsYsWXmEhV72MSBZMawuy9XxDpm9uzffxmw1/rHRHC.png", - "tags": ["frakt-nft-pool"], - "extensions": { - "website": "https://frakt.xyz/pools/CA5qBCJS5wwdvMmt2ANLUxUecmNjf7Py9s7N1UEJ1cxy/buy" - } - }, - { - "chainId": 101, - "address": "7BzULwTHqMCc9Qo7qVFn27UxHgb9SPev3EsbbmQ4YNzw", - "symbol": "rLLAMA", - "name": "Random Sollamas", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7BzULwTHqMCc9Qo7qVFn27UxHgb9SPev3EsbbmQ4YNzw/rSLM.png", - "tags": ["frakt-nft-pool"], - "extensions": { - "website": "https://frakt.xyz/pools/AaYBdEnjqYoay3ozs2tY1tm9kFXxjUrAZeNZngnqwmV1/buy" - } - }, - { - "chainId": 101, - "address": "4PhPtyBhmMYBLjiJPr3wef2syoMSJYn5WcNgXxvmG3NZ", - "symbol": "rPUNK", - "name": "Random Solpunks", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4PJ8yD2hPXVGxnYcmjBoDyDHKAMEAKjGgAfvEqmZUaAw/logo.png", - "tags": ["frakt-nft-pool"], - "extensions": { - "website": "https://frakt.xyz/pools/HfEJXp9YNdrrPuqAoaeKzL3pyCvsdnVQxHXpf7KVTsjY/buy" - } - }, - { - "chainId": 101, - "address": "2qq3zxV9qBenTZLWRhmcSJdPFqdTGDDgc1aVQUCTs9Bu", - "symbol": "rSPTRL", - "name": "Random Sol Patrol", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2qq3zxV9qBenTZLWRhmcSJdPFqdTGDDgc1aVQUCTs9Bu/rSPTRL.png", - "tags": ["frakt-nft-pool"], - "extensions": { - "website": "https://frakt.xyz/pools/7Bjj5LSjvC6Sumvx3L3gK25AGVGhFfPyZWkm1xep8kXv/buy" - } - }, - { - "chainId": 101, - "address": "ugKuq43fnPEcEeH12gCfETbshMRJ8nD2qXmcbyNHaEb", - "symbol": "rTHUG", - "name": "Random Thugbirdz", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ugKuq43fnPEcEeH12gCfETbshMRJ8nD2qXmcbyNHaEb/rTHUG.png", - "tags": ["frakt-nft-pool"], - "extensions": { - "website": "https://frakt.xyz/pools/3da5KmaRp9gHx2wzv8PdZHpxXWvbHMRUxCK9FCLvHGZr/buy" - } - }, - { - "chainId": 101, - "address": "9m8E1yLHaG1B2TFSNeWahsitQh5yQRnrbyw756HFAcEa", - "symbol": "rLGND", - "name": "Random Blockasset Legends", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9m8E1yLHaG1B2TFSNeWahsitQh5yQRnrbyw756HFAcEa/rLGND.png", - "tags": ["frakt-nft-pool"], - "extensions": { - "website": "https://frakt.xyz/pools/EHNimBvyzYB8qJvpXzaGudDZ3eNUnezyCMLxigXvTqwU/buy" - } - }, - { - "chainId": 101, - "address": "8BobtXuP8hD69rZTLZiubSEbmQWpbmaJwyoayzQYyxs3", - "symbol": "rNBC", - "name": "Random Bat City Underground", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8BobtXuP8hD69rZTLZiubSEbmQWpbmaJwyoayzQYyxs3/rNBC.png", - "tags": ["frakt-nft-pool"], - "extensions": { - "website": "https://frakt.xyz/pools/FuasyZT2HZDsz5ndmFP9XeuQneK7prDwRugenqkPC1TB/buy" - } - }, - { - "chainId": 101, - "address": "9akvvCgpFc7LkpESHCSacrPPH7SztbvuAXNvJkzZSZWu", - "symbol": "rTRTL", - "name": "Random Turtles", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9akvvCgpFc7LkpESHCSacrPPH7SztbvuAXNvJkzZSZWu/rTRTL.png", - "tags": ["frakt-nft-pool"], - "extensions": { - "website": "https://frakt.xyz/pools/GaTnrfAh8JsNxpVi8oKCoyeWwXySCju55GJfTaVTrGep/buy" - } - }, - { - "chainId": 101, - "address": "7uENff26kbM3zP9YhYj4MdSzS5nGoEDSeHs81zQ7Gp2J", - "symbol": "rATRNT", - "name": "Random Aiternate", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7uENff26kbM3zP9YhYj4MdSzS5nGoEDSeHs81zQ7Gp2J/rATRNT.png", - "tags": ["frakt-nft-pool"], - "extensions": { - "website": "https://frakt.xyz/pools/8ezfmbfr5rRNrvM1z4ZqWTjf9mbcpozpgFxgSbmmR2c2/buy" - } - }, - { - "chainId": 101, - "address": "Vjq9T5xmqRzLXQRyvigzyZzpHCGCsbYAJ7afLVuF8j9", - "symbol": "rZOOM", - "name": "Random Zaysan Raptors", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Vjq9T5xmqRzLXQRyvigzyZzpHCGCsbYAJ7afLVuF8j9/rZOOM.png", - "tags": ["frakt-nft-pool"], - "extensions": { - "website": "https://frakt.xyz/pools/2pCdQHULNgwesN7dQdRW93GFsLb99GpNC4wT9V1jvUvB/buy" - } - }, - { - "chainId": 101, - "address": "7Mfsbr8vS2LjWTFspTgfLPWm7s77zvJsevBuW4P9MZ3m", - "symbol": "rSAMO", - "name": "Random Samo", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7Mfsbr8vS2LjWTFspTgfLPWm7s77zvJsevBuW4P9MZ3m/rSAMO.png", - "tags": ["frakt-nft-pool"], - "extensions": { - "website": "https://frakt.xyz/pools/6oufJYFSNcWEBV465FDywN2VbYftnXff9KuNnebkc8YD/buy" - } - }, - { - "chainId": 101, - "address": "6349D3Ads4cVDLjUyjBEjnxC3ehgJX5W536VG7XP5a6S", - "symbol": "LExLOCOS", - "name": "Luna Exiled Locos", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6349D3Ads4cVDLjUyjBEjnxC3ehgJX5W536VG7XP5a6S/logo.png", - "tags": ["nft"], - "extensions": { - "twitter": "https://twitter.com/LocosNft", - "website": "https://locosnft.com/" - } - }, - { - "chainId": 101, - "address": "AHT7EvoyMP84XpyaEmt9Zhn9eTiUCL1oYEF8oYRocs6C", - "symbol": "LFNDFT", - "name": "LIT FUND FT", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/scarceproject/crypto/main/dth5geg.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/C5z57xrw52", - "telegram": "https://t.me/litfund", - "twitter": "https://twitter.com/litfund_defi", - "website": "https://lit.fund" - } - }, - { - "chainId": 101, - "address": "7b75gMTwUS6rfN1CNoZnaAdgYwPejpLJrXBpmFpBqp5Y", - "symbol": "LFNDFC", - "name": "LIT FUND FC", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/scarceproject/crypto/main/dth5geg.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/C5z57xrw52", - "telegram": "https://t.me/litfund", - "twitter": "https://twitter.com/litfund_defi", - "website": "https://lit.fund" - } - }, - { - "chainId": 101, - "address": "GyvLD8DxSEVffv22eEWQ6NdJMbtzoYfPhue7XxCXMKqr", - "symbol": "MEC", - "name": "UNCHAINED", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GyvLD8DxSEVffv22eEWQ6NdJMbtzoYfPhue7XxCXMKqr/logo.png" - }, - { - "chainId": 101, - "address": "ConFQvWZxf3Qdb7yMWPw2Ja1pHPuvYVpbKKunUJ36qqo", - "symbol": "SPAP", - "name": "Sugar Push Alpha Pass", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ConFQvWZxf3Qdb7yMWPw2Ja1pHPuvYVpbKKunUJ36qqo/logo.png", - "tags": ["community-token", "nfts"] - }, - { - "chainId": 101, - "address": "BabMZvYFxkGtoMuGTwNNLfoLa9HyDGjAc18Qq9gL7e2e", - "symbol": "DADO", - "name": "DadoBucks", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BabMZvYFxkGtoMuGTwNNLfoLa9HyDGjAc18Qq9gL7e2e/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "JiGoA4fCoYDbdCUVmGEaLytnHT42BXhEmwacqM3RjUf", - "symbol": "Hounds", - "name": "Jigoku Hounds Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/JiGoA4fCoYDbdCUVmGEaLytnHT42BXhEmwacqM3RjUf/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/JigokuHounds" - } - }, - { - "chainId": 101, - "address": "9VkCgoLv8aXnNXafJkjPqdKp4NXSQ2Yzhba789gL6oTt", - "symbol": "STONY", - "name": "Stony Tokens", - "decimals": 8, - "logoURI": "https://pasteboard.co/j2ew86rkNCX0.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Dhtv79Gax1gwvWNQCKFW4oUCsMLcmUbsZ6vdaCFYP2Ko", - "symbol": "PERTEL", - "name": "Cets Pertel", - "decimals": 9, - "logoURI": "https://i.ibb.co/5nmPVbN/Untitled-design-4.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://discord.gg/ANg8B3FW55" - } - }, - { - "chainId": 101, - "address": "DMZ2tx9KLEFNmzaarujHjEBjEHV5mbfQvW2Jo5qrzGxy", - "symbol": "BUGA_", - "name": "BUGA_ Coin", - "decimals": 8, - "logoURI": "https://cdn.shopify.com/s/files/1/1061/1924/products/Skull_Emoji_Icon_8cee31f2-35dd-42e7-b757-3cb8cfe72437_1024x1024.png?v=1571606093", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "hhCTVAJHNcDZAoQUXcDrsewomL6L2oDVttyFnP6631t", - "symbol": "GT", - "name": "GreenTech", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/chaddieboy1/crypto/main/Capture.PNG", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "D4JJfAe5ZVTkySAFTzzc2Tmn5xFzEghBTCWXC6ELrUgN", - "symbol": "FRESH", - "name": "Fresh Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FreshCats/FRESH/main/Token.png", - "tags": ["Utility-Token"] - }, - { - "chainId": 101, - "address": "RoTksthszZDGGZq4uZZZxVmV7xsaz4X8kBESMyeLZkE", - "symbol": "RoT", - "name": "Rotten Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/RoTksthszZDGGZq4uZZZxVmV7xsaz4X8kBESMyeLZkE/RoT_Coin.png", - "tags": [ - "rottenville-project", - "community-coin", - "utility-token", - "rotten", - "kyo" - ], - "extensions": { - "discord": "https://discord.gg/dHDwCRwH6b", - "twitter": "https://twitter.com/rotten_ville", - "website": "https://rottenville.io" - } - }, - { - "chainId": 101, - "address": "RAZRymwM9F2nP9ZAsojyKRoneydftoqztsx3MnRS9MC", - "symbol": "RAZR", - "name": "Razr Finance", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/RAZRymwM9F2nP9ZAsojyKRoneydftoqztsx3MnRS9MC/RAZR.png", - "tags": ["utility-token", "defi-token", "staking-token"], - "extensions": { - "discord": "https://discord.gg/HXa3qAYe", - "github": "https://github.com/solrazr-app", - "medium": "https://medium.com/@SolRazr_App", - "telegram": "https://t.me/solrazr_app", - "twitter": "https://twitter.com/Solrazr_App", - "website": "https://razr.finance" - } - }, - { - "chainId": 101, - "address": "GTu5VbPJiECrtNrPSDvCTuT3BP1TNewMmxmShuhn3b1G", - "symbol": "RayWJ", - "name": "Your Favorite Martian", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/raywilliamjohnson/logo/main/logo.png", - "tags": [ - "RayWJ-coin", - "Metaverse-coin", - "governance-token", - "EqualsThree-token", - "NFT-token" - ], - "extensions": { - "description": "Made by Carlos Verbelen for raywilliamjohnson for his june 1st Yourfavoritemartian reborn date and NFT token value 1usdt = 10 RWJ tokens", - "discord": "https://discord.gg/3yNwFyPzUb", - "facebook": "https://www.facebook.com/raywilliamjohnson", - "github": "https://github.com/raywilliamjohnson", - "instagram": "https://www.instagram.com/raywilliamjohnson/", - "linkedin": "https://www.linkedin.com/in/ray-william-j-84538a7b/", - "medium": "https://joinentre.com/?referredBy=el0nmusk", - "twitter": "https://twitter.com/RayWJ", - "website": "https://linktr.ee/Zues369" - } - }, - { - "chainId": 103, - "address": "AvtWDVgef2Yx68Yh67eNjS1CYkeXZNECoWJ7og4xYfrc", - "symbol": "SVT", - "name": "Solvenir Test", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AvtWDVgef2Yx68Yh67eNjS1CYkeXZNECoWJ7og4xYfrc/logo.png", - "tags": ["currency"] - }, - { - "chainId": 103, - "address": "3GWsMY8REuofBM4fsa9h3mJSkLtJRzSCJJDvjKdSMMXg", - "symbol": "HIT", - "name": "Hoi it tien token", - "decimals": 9, - "logoURI": "https://user-images.githubusercontent.com/10118456/170443817-4850ba13-f523-4c0d-b553-b56ec0a30a44.png" - }, - { - "chainId": 101, - "address": "Hefou8y5H8zDvb162mrKoanGJyyosx93nm9471oyUrkS", - "symbol": "HeFo", - "name": "HeFo TOKEN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Hefou8y5H8zDvb162mrKoanGJyyosx93nm9471oyUrkS/logo.png", - "tags": ["community-token", "utility-token"], - "extensions": { - "twitter": "https://twitter.com/sol_heyfox" - } - }, - { - "chainId": 101, - "address": "9qaZLzuNMFgyqYihpbwgyUtFDXM1Ht9e3GWebZ2FNWhH", - "symbol": "SUNC", - "name": "Suny Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9qaZLzuNMFgyqYihpbwgyUtFDXM1Ht9e3GWebZ2FNWhH/logo.png", - "tags": ["sunycoin"] - }, - { - "chainId": 103, - "address": "4e4sKGSGVzm5kFSAPPKmCxz7jBCUAixcSCAL1BbkrEPU", - "symbol": "HPT", - "name": "HyunPoongToken", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4e4sKGSGVzm5kFSAPPKmCxz7jBCUAixcSCAL1BbkrEPU/logo.png" - }, - { - "chainId": 101, - "address": "2R5Gtuayh7E4DCqtMKyBQRMthi51Y2da81XBF3S1mC59", - "symbol": "$WingsWL", - "name": "Wings WL Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2R5Gtuayh7E4DCqtMKyBQRMthi51Y2da81XBF3S1mC59/logo.png", - "extensions": { - "discord": "https://discord.gg/hKuu9pTmrF", - "twitter": "https://twitter.com/Winto_io" - } - }, - { - "chainId": 101, - "address": "Ge15KTDNgqtaM7BGSBD5fSawJHxS8S7FFH9aZniaZ2kX", - "symbol": "MTM", - "name": "Motum", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mtm-token/mtm-token/main/MTM3.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Cf4yCbJs2LZeNLN1jRvLk8q6tgBh7MMG1Rg1fKf5MxbL", - "symbol": "OSM", - "name": "Osmium", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Cf4yCbJs2LZeNLN1jRvLk8q6tgBh7MMG1Rg1fKf5MxbL/logo.png", - "extensions": { - "twitter": "https://twitter.com/MinersofMars", - "website": "https://www.minersofmars.com/" - } - }, - { - "chainId": 103, - "address": "2jeTEbshhhKSCXZ82J7LkxGnUk4bhDXccFJqkbbaiwiL", - "symbol": "DOJOCOINONE", - "name": "DOJO TEST COIN ONE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2jeTEbshhhKSCXZ82J7LkxGnUk4bhDXccFJqkbbaiwiL/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://twitter.com/ARTayade" - } - }, - { - "chainId": 101, - "address": "uGPpPFGMNUbiEZG4kihsqXAGQcb3Egb8mks2pUTzSkj", - "symbol": "WingsWL", - "name": "Wings WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/uGPpPFGMNUbiEZG4kihsqXAGQcb3Egb8mks2pUTzSkj/logo.png", - "extensions": { - "discord": "https://discord.gg/hKuu9pTmrF", - "twitter": "https://twitter.com/Winto_io" - } - }, - { - "chainId": 103, - "address": "GUfxKpaqxBXdcgtcnWEmprXXsfprMktijcEySYq5TwG4", - "symbol": "TTB_WL_v1", - "name": "TTB Whitelist Token v1", - "decimals": 9, - "logoURI": "https://media.terminatorteddybearz.com/image/ttb_logo.svg", - "tags": ["nft"], - "extensions": { - "discord": "https://discord.gg/RfCSySm7Us", - "twitter": "https://twitter.com/terminatorbearz", - "website": "https://www.terminatorteddybearz.com" - } - }, - { - "chainId": 101, - "address": "5AJhdosQ88U1g2a4bhmxXpRVGiujKRwrWcAmd7iuWtQe", - "symbol": "BokitaPasion", - "name": "CABJ", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Novak-Fenocchio/LimboCoin/main/bokitapasionlogo.png" - }, - { - "chainId": 101, - "address": "fppTWtc6UvGtbtrDTJ52bMmQAkfbRVXZNrtKyWsJdaz", - "symbol": "MoMu", - "name": "MojaMula", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/fppTWtc6UvGtbtrDTJ52bMmQAkfbRVXZNrtKyWsJdaz/logo.png", - "tags": ["utility-token", "community-token", "mojamula-token"] - }, - { - "chainId": 101, - "address": "2bAXDGxtgpH4Qyg6kqSsE9ojMw6TNCnDZQXhtkV9hjEj", - "symbol": "SIA", - "name": "Shapz Intelligence Artificial", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2bAXDGxtgpH4Qyg6kqSsE9ojMw6TNCnDZQXhtkV9hjEj/logo.svg", - "tags": ["utility-token"], - "extensions": { - "website": "https://shapz.org" - } - }, - { - "chainId": 101, - "address": "36eZaAUA92VL84LBbXbPJbxqRDyRYpqwMWjZGsED1Lyd", - "symbol": "ARYA", - "name": "ARYA TOKEN", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/36eZaAUA92VL84LBbXbPJbxqRDyRYpqwMWjZGsED1Lyd/logo.png", - "tags": ["test"] - }, - { - "chainId": 101, - "address": "o7Xdr1sQZpFnxP6yKsYCh6rmyx9PfQ4L4AXAYYXoW3g", - "symbol": "EMOTION", - "name": "Learn2Earn DAO", - "decimals": 6, - "logoURI": "https://l2edao.s3.amazonaws.com/logo.svg", - "tags": ["utility-token"], - "extensions": { - "description": "Emotion token is the l2eDAO protocol that revolutionizes the process of education. Learn, create, battle, build metaverse and make money with the new skills you learned from the community.", - "discord": "https://discord.gg/RzMwkYEKJ9", - "twitter": "https://twitter.com/l2eDAO", - "website": "https://learntoearn.xyz" - } - }, - { - "chainId": 101, - "address": "GanGt4btK71F4SChwakzh69bh2T7rBsAjmSE6rRWUSJM", - "symbol": "Gangsta", - "name": "kings of da street Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GanGt4btK71F4SChwakzh69bh2T7rBsAjmSE6rRWUSJM/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/kingsofdastreet" - } - }, - { - "chainId": 101, - "address": "4ErSwaQufa3rsyDfXq5rNSmvpHDmdTk4MifhFnFeKQEZ", - "symbol": "GHST", - "name": "GHST Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4ErSwaQufa3rsyDfXq5rNSmvpHDmdTk4MifhFnFeKQEZ/logo.png" - }, - { - "chainId": 101, - "address": "wpHYDrmVvVoVqTXKFywkyWdCFKNGQLhd1gDaQ8BuDzw", - "symbol": "ESD", - "name": "ElectroShoeDemo", - "decimals": 0, - "logoURI": "https://i.postimg.cc/fWYZ76Mq/Screenshot-2022-05-26-230810.png", - "tags": ["nft"], - "extensions": { - "website": "https://www.electroshoe.com/" - } - }, - { - "chainId": 101, - "address": "CDTvfESJbaBDzKV11wTLxmMiutrc5jwBZjASysLbAovF", - "symbol": "$KIDZ", - "name": "Trippy Kidz Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CDTvfESJbaBDzKV11wTLxmMiutrc5jwBZjASysLbAovF/kidzz.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/TrippyKidzNFT", - "website": "https://trippykidz.net/" - } - }, - { - "chainId": 101, - "address": "3FHpkMTQ3QyAJoLoXVdBpH4TfHiehnL2kXmv9UXBpYuF", - "symbol": "STYLE", - "name": "STYLE", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3FHpkMTQ3QyAJoLoXVdBpH4TfHiehnL2kXmv9UXBpYuF/style.png", - "tags": ["utility-token", "fashion", "wte", "wear-to-earn"], - "extensions": { - "discord": "https://discord.gg/anybodies", - "twitter": "https://twitter.com/anybodiesNFT", - "website": "https://www.anybodies.com/" - } - }, - { - "chainId": 101, - "address": "BogkiGRxMWym5ZeZMAVJb3qedBuWTDGkQNTXQGEWHy7F", - "symbol": "TEMPLE", - "name": "TEMPLE TOKEN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BogkiGRxMWym5ZeZMAVJb3qedBuWTDGkQNTXQGEWHy7F/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/phrRD3n5", - "twitter": "https://twitter.com/temple_token" - } - }, - { - "chainId": 101, - "address": "FWUvCEr1c379gYUa75x4bw2GgipcuWpaSHKZpYzJKtyt", - "symbol": "SGMC", - "name": "SugMa Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Cao-Tony/Sugma-Coin/main/SugMa%20Coin%20Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2LSXNVyqVRdJWGgnZQdxjDLbsSiPwSpmt73jruXgQUPG", - "symbol": "MCBD", - "name": "McBeard Gaming", - "decimals": 0, - "logoURI": "https://github.com/McBeardGaming/crypto/blob/main/61lY1kT-_400x400.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HgW82hmbEYnguazY4X9tWBsAFHnz1Vfxa9qzp7ujz19G", - "symbol": "ILU", - "name": "LOVE333", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HgW82hmbEYnguazY4X9tWBsAFHnz1Vfxa9qzp7ujz19G/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "B4pijSKo7Miijt9osw13HeYs6TuSGttYNFNdjVqBDHaS", - "symbol": "Davos", - "name": "World Economic Forum", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/WorldEconomic-Forum/logo/main/logo.png", - "tags": [ - "Davos-coin", - "WEF-coin", - "governance-token", - "Great-Reset-token", - "Klaus-Schwab-token" - ], - "extensions": { - "description": "Made by Carlos Verbelen for The Great Reset W.E.F and Klaus Schwab 1usdt = 2 Davos tokens", - "discord": "https://discord.gg/3yNwFyPzUb", - "facebook": "https://www.facebook.com/CarlosVerbelen", - "github": "https://github.com/WorldEconomic-Forum", - "instagram": "https://www.instagram.com/moonbootscapital/", - "linkedin": "https://search.brave.com/search?q=Carlos+Verbelen\u0026source=desktop", - "medium": "https://joinentre.com/?referredBy=el0nmusk", - "twitter": "https://twitter.com/Davos", - "website": "https://linktr.ee/Zues369" - } - }, - { - "chainId": 101, - "address": "9usn7CnYvbe3Yq9yqNaA8oKSxZbUPobRzbYh83xAoumX", - "symbol": "ELKO", - "name": "Elkoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9usn7CnYvbe3Yq9yqNaA8oKSxZbUPobRzbYh83xAoumX/logo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6f8q3YJNixh3qnTkM5BipUEoWPW7enz5iDN5HLBZcWbv", - "symbol": "SAAG", - "name": "SAAG Power", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/sminomas/crypto/main/SAAG.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BhyD7wsPdSfqfDWpbx7S99GAXqHJhX4QsviNNJ6oSzqu", - "symbol": "$CIETY", - "name": "CIETY", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BhyD7wsPdSfqfDWpbx7S99GAXqHJhX4QsviNNJ6oSzqu/Logo.png", - "tags": ["The-Solciety", "utility-token", "NFT-Project"], - "extensions": { - "description": "The Solciety NFT", - "twitter": "https://twitter.com/TheSolcietyNFT" - } - }, - { - "chainId": 101, - "address": "4p4Nsn5WLbzq6GXH8j8ADqMFdUxF6vTTEM4QYjScRbm7", - "symbol": "RTTY", - "name": "RatCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mroberts72/crypto/main/4p4Nsn5WLbzq6GXH8j8ADqMFdUxF6vTTEM4QYjScRbm7.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4rfw89NXRNfg9tG2cWYp2XuuLQDd82AKbtk2hqzmbhnc", - "symbol": "CCT", - "name": "ChatChain", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/onuraladi/chatchain/main/chatchain.png", - "tags": ["The-ChatChain", "utility-token", "Blockchain-Project"] - }, - { - "chainId": 101, - "address": "CtFVBBKmnsbcKYGZeYo7qK7tEvEe1nJxPKZRse81K5N3", - "symbol": "VTRS", - "name": "VITA RES", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/MKD-Stable-token/vtrs/main/logo%20vtrs.png", - "tags": ["community-token", "utility-token", "asset-token"], - "extensions": { - "website": "https://www.vitares.com.mk/" - } - }, - { - "chainId": 101, - "address": "8KD9AtYCeZqt7eCpdwEDvGNnMkEJyq8YhdrQ9pDiNd4d", - "symbol": "CSM", - "name": "Cesium", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/brewsterbonifacio/Cesium/main/cesium.png", - "tags": ["cesium-token"] - }, - { - "chainId": 101, - "address": "6MqWmAxxJJVYzsdTrR7EjyZccEXu9BRfgVukVPVJiW6G", - "symbol": "DNLAB", - "name": "Digital Nomad Labs", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6MqWmAxxJJVYzsdTrR7EjyZccEXu9BRfgVukVPVJiW6G/logo.png", - "tags": ["DNLAB", "utility-token"], - "extensions": { - "twitter": "https://twitter.com/DNomadLabs", - "website": "https://www.digitalnomadlabs.io" - } - }, - { - "chainId": 103, - "address": "2p3D3M5HFUd2UXAwJ5BuoKQHhZ6gM5FZd1kKgmLqLd8H", - "symbol": "DGUST", - "name": "D'GUST Restaurante", - "decimals": 0, - "logoURI": "https://ipfs.io/ipfs/Qmf6kHuQKsahHx6vmoHG6TTv5i5YsNXhiF2ZffghbTvfzE", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "6zvSWwTESBNGGZxvygZZv82UouWXS8jEwppxaYnRu75t", - "symbol": "BOCA", - "name": "EnBoca Restaurante", - "decimals": 0, - "logoURI": "https://ipfs.io/ipfs/QmSEVTzh7a9Q3iMr5Rzt8779FhfefBvhD4JkjGnJc3yc8z", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7Eb1v8yoS14H1hmF8HRWGmgq6SdHHfkUcy6v2biCePF3", - "symbol": "DRIM", - "name": "Drimly Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7Eb1v8yoS14H1hmF8HRWGmgq6SdHHfkUcy6v2biCePF3/logo.png" - }, - { - "chainId": 103, - "address": "F8rxpjPfYb5qmgvVVEtEQ2Vy872A13W1B4FwEL97FbiV", - "symbol": "JOC", - "name": "JOCONDE TOK", - "decimals": 0, - "logoURI": "https://ipfs.io/ipfs/QmQ1yQSVkNzZXF6sLyhAa8AyayKfh8dbnBGavfTfMpi9hP", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GooWYbh2Ao8WMfwRyWSEhAUMZqKnkHUpmpsLgXdLoN3k", - "symbol": "MTM", - "name": "M0TUM", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/mtmToken/mtm-token/main/MTM3.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "D77WLoiZxiFyN8kuzHfGxTjgf6HZ7HPXysK1ZQbK3iK7", - "symbol": "YSSC", - "name": "Yellow Square Stable Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/D77WLoiZxiFyN8kuzHfGxTjgf6HZ7HPXysK1ZQbK3iK7/logo.png", - "tags": ["yellowsquare", "yssc", "stablecoin"] - }, - { - "chainId": 101, - "address": "H8fPkH7c712okbKH1Uskc3KjQryMkr2aBpFceXYxXo4B", - "symbol": "GNXW", - "name": "Genetix Whitelist ", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Kyawmin5644/genetixlogo/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "D7DQMKopKbfscH1dgZkvS3aktVb9TDvSpUtytcf9gpEQ", - "symbol": "SOLNFTS", - "name": "Official Solana NFT", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/4e126bd41e31ef0443b932c022613c9403aba567/assets/mainnet/D7DQMKopKbfscH1dgZkvS3aktVb9TDvSpUtytcf9gpEQ/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://solscan.space" - } - }, - { - "chainId": 101, - "address": "7CLDJc5aKJp2WYLGVyNAwdbcnvdKdZuKggNKGo3GigYL", - "symbol": "$BEARS", - "name": "Moonbears Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Robby3082/test-token/main/token_mb.png", - "tags": ["NFT", "Staking"] - }, - { - "chainId": 101, - "address": "GrG4YS1C4jTfkdQmESaxrjW3n9vnBMCtbwM2gCkyajKS", - "symbol": "$NAKA", - "name": "Nakama Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Robby3082/test-token/main/token_mb.png", - "tags": ["NFT", "Staking"] - }, - { - "chainId": 101, - "address": "HcFuzSqHQhitpYqHkxBYs5vFSURAtSXojNdmQ7vBUimB", - "symbol": "LDTASC", - "name": "LDT Ascension Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HcFuzSqHQhitpYqHkxBYs5vFSURAtSXojNdmQ7vBUimB/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Living Dead Teds Gen 1 Ascension Token", - "discord": "https://discord.gg/livingdeadteds", - "twitter": "https://twitter.com/LivingDeadTeds", - "website": "https://livingdeadteds.com" - } - }, - { - "chainId": 101, - "address": "5BHXrVz8ogSyU8hMkmHsvMek67yAZPox5npWXWGUPxEW", - "symbol": "GNWL", - "name": "Genetix Primate Whitelist", - "decimals": 9, - "logoURI": "https://github.com/genetix00717/logo/blob/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DKCP3dFJrLLATpkeZ3JWAkhWuD45ruyoJndZRsPZzpvH", - "symbol": "FINE", - "name": "FINE", - "decimals": 9, - "logoURI": "https://github.com/MatheusWells/token-list/blob/main/assets/mainnet/DKCP3dFJrLLATpkeZ3JWAkhWuD45ruyoJndZRsPZzpvH/logo.png?raw=true", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "FEmN4zkCPqB6uGYB6LA3uHu2X6cayLx2quxpzZkhaNBw", - "symbol": "GNXWL", - "name": "Genetix WL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/genetix00717/logo/main/logo.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "SoULrrVFwaqHt8HkDFwR9jP6dUCumw99oRLpgxaKFu6", - "symbol": "$SOUL", - "name": "Jigoku Hounds Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SoULrrVFwaqHt8HkDFwR9jP6dUCumw99oRLpgxaKFu6/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://www.jigokuhounds.io/" - } - }, - { - "chainId": 101, - "address": "7wLNtLG7edmmiJyuWAaWekLxYAUp2uXWHNAP6L8fVurF", - "symbol": "INCENTIVE", - "name": "The Incentive", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7wLNtLG7edmmiJyuWAaWekLxYAUp2uXWHNAP6L8fVurF/logo.png", - "tags": ["social-token"], - "extensions": { - "twitter": "https://twitter.com/The_Incentive", - "website": "https://www.theincentive.xyz/" - } - }, - { - "chainId": 101, - "address": "MLKmUCaj1dpBY881aFsrBwR9RUMoKic8SWT3u1q5Nkj", - "symbol": "MILK", - "name": "MILK", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/MLKmUCaj1dpBY881aFsrBwR9RUMoKic8SWT3u1q5Nkj/logo.png", - "tags": ["NFT", "utility-token"], - "extensions": { - "discord": "https://discord.gg/udderchaos", - "twitter": "https://twitter.com/udderchaossol", - "website": "https://udderchaos.io/" - } - }, - { - "chainId": 101, - "address": "EXC3Fw3H2FNeiPuo5c5SQk9VSEM3gfFi6QmqSTizZ9zW", - "symbol": "KOCO", - "name": "KokoCoin ", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EXC3Fw3H2FNeiPuo5c5SQk9VSEM3gfFi6QmqSTizZ9zW/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AgxJ2YykLYcFmK1mbzPJ2F98bnv4h3DpF1juGjC9yoTj", - "symbol": "FATCOIN", - "name": "Fatma token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AgxJ2YykLYcFmK1mbzPJ2F98bnv4h3DpF1juGjC9yoTj/logo.png", - "tags": ["school-token", "IA", "Fatma"] - }, - { - "chainId": 101, - "address": "Aq7HPu6zCFQ1zD5KWQGJF1CC8DxCsYJM2gfcu3NxUbtB", - "symbol": "TSZC", - "name": "The Share Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MasterPhooey/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2kujJrETYrfimaL8BSXwrms9oqt9pdRPnjDWdRTySuXi", - "symbol": "INTI", - "name": "Inti", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2kujJrETYrfimaL8BSXwrms9oqt9pdRPnjDWdRTySuXi/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "RKTQTjGy4Q31gzoixWfRpXUzywj3bUztEh7RQsJn5Bc", - "symbol": "ROCKET", - "name": "RocketDAO Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/RKTQTjGy4Q31gzoixWfRpXUzywj3bUztEh7RQsJn5Bc/logo.png", - "tags": ["social-token", "utility-token"], - "extensions": { - "discord": "https://discord.gg/J3BgFWxh5x", - "twitter": "https://twitter.com/Rocketsauce_", - "website": "https://rocketsauce.xyz/" - } - }, - { - "chainId": 101, - "address": "5npveyhnNWfYbt8Z9xb4btvPrns3BQNHgw6XkqTuQGs", - "symbol": "PHOTON", - "name": "Dimenxion Light", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5npveyhnNWfYbt8Z9xb4btvPrns3BQNHgw6XkqTuQGs/logophoton.png", - "tags": ["game-token", "Governance"], - "extensions": { - "website": "https://dimenxion.io/" - } - }, - { - "chainId": 101, - "address": "61XKqkU4eBvE7u7dV9e59Ln8UzWBQqbXoemXPqL14iXe", - "symbol": "$MIGO", - "name": "TheAmigos", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/TheAmigosOfficial/theamigos/main/amigos.png", - "tags": ["social-token", "utility-token"], - "extensions": { - "discord": "https://discord.com/invite/theamigosnft", - "twitter": "https://twitter.com/theamigosnft", - "website": "https://theamigos.io/" - } - }, - { - "chainId": 101, - "address": "3VX51z65JKez2LYFTdYBfC9T5vWfSXFfrpdjrfeZCrkA", - "symbol": "BBKS", - "name": "BananaBucks", - "decimals": 0, - "logoURI": "https://github.com/mr365k/token-list/blob/1d4afce7c923a613540c5c793956ddae3d3ab607/assets/mainnet/3VX51z65JKez2LYFTdYBfC9T5vWfSXFfrpdjrfeZCrkA/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9HhZRiV63c4pMc4xEscrGDh6Xu17gPSpkCMvSb5tmGis", - "symbol": "$MIGO", - "name": "Amigos", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/AmigosOfficial/Amigos/main/logo.png", - "tags": ["social-token", "utility-token"], - "extensions": { - "discord": "https://discord.com/invite/theamigosnft", - "twitter": "https://twitter.com/theamigosnft", - "website": "https://theamigos.io/" - } - }, - { - "chainId": 103, - "address": "treessKmT2gWMhn2hiQ5QMuTPCdCLZ3wpVdE3SUB8Yp", - "symbol": "trees", - "name": "Forest Trees", - "decimals": 0, - "logoURI": "https://cdn.jsdelivr.net/gh/PurpleZone/NFTs@latest/forest/tree.svg", - "tags": [ - "green-coin", - "community-token", - "utility-token", - "colored-token" - ], - "extensions": { - "coingeckoId": "polkadot", - "description": "Living Tree Accountancy Coin --@cryptolake2", - "imageUrl": "https://bafybeieoh4lkabcaenwb255hmvuvqzec6rql5khnzb3xyn43jjozftynwu.ipfs.nftstorage.link/?ext=svg", - "linkedin": "https://www.linkedin.com/company/eco-organic-technology", - "telegram": "https://t.me/cryptolake2", - "website": "https://PurpleZone.github.io/NFTs/forest/", - "whitepaper": "https://gateway.ipfs.io/ipns/QmYGRYVdvxxfL7B2jjHWss1FyU9fhQNFLihsWENCK6n5YP/whitepaper.pdf" - } - }, - { - "chainId": 103, - "address": "9pio5iDDvov4PtdmZHjWV4zmkA5zTFVbh4eDBYKr5Ywz", - "symbol": "SUBLI", - "name": "SUBLIME P", - "decimals": 1, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9pio5iDDvov4PtdmZHjWV4zmkA5zTFVbh4eDBYKr5Ywz/espsubl.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5VKHAZNgZVFKXPo2Ju732FmGzZc6WjyxenCQnF7XfHt5", - "symbol": "TC1001", - "name": "TheCoder1001 Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/TheCoder1001/crypto/main/logo.PNG", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CiDX6Hn7J5UrPuf6eMmHt2XViEBRgH7Nd2dZbHVg45i1", - "symbol": "NFTMC", - "name": "NFT Master Class", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CiDX6Hn7J5UrPuf6eMmHt2XViEBRgH7Nd2dZbHVg45i1/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "9bqwh1dX5XZ8QuJWt5bAg6NCemRjg6xf7QquTEBPMNut", - "symbol": "METASIGN", - "name": "METASIGNS Mint Token", - "decimals": 0, - "logoURI": "https://artiftakt3d.s3.amazonaws.com/metasigns.png", - "extensions": { - "twitter": "https://twitter.com/metasigns_app", - "website": "https://metasigns.app" - } - }, - { - "chainId": 101, - "address": "9XxqhRpiNQJ4dViBY1A6nSaUoUgQ9m9JZjCwj3oVu3We", - "symbol": "BAGZ", - "name": "Hidden BAGZ", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/HiddenBoyz/BAGZ/main/BAGZ%20Logo.png" - }, - { - "chainId": 101, - "address": "2SJduTt8KtPLEtz53fRKtVAsPaxcod4UeKvnodwz2CPD", - "symbol": "$KAGE", - "name": "KAGE Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2SJduTt8KtPLEtz53fRKtVAsPaxcod4UeKvnodwz2CPD/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://city-savior-scratch.netlify.app" - } - }, - { - "chainId": 101, - "address": "4YnWvpPRFypDAjzDbTegBivy6hbDp8UAMRKrCkmvAhdP", - "symbol": "$OIL", - "name": "SolBots OIL", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4YnWvpPRFypDAjzDbTegBivy6hbDp8UAMRKrCkmvAhdP/logo.png", - "tags": ["utility-token", "dao", "staking-token"], - "extensions": { - "discord": "https://discord.gg/6YVFUE5wjN", - "twitter": "https://twitter.com/SolBotsDAO" - } - }, - { - "chainId": 101, - "address": "AwoT6gj8cpadFabDfNKsUrrsvQTX1iAtkNiPUw2mmhsV", - "symbol": "DKCOIN", - "name": "DoodleKoalas Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AwoT6gj8cpadFabDfNKsUrrsvQTX1iAtkNiPUw2mmhsV/logo.png", - "tags": ["community-token", "social-token", "nft", "charity", "dao"], - "extensions": { - "discord": "https://discord.gg/fFEvtKCZtm", - "instagram": "https://www.instagram.com/doodlekoalas", - "twitter": "https://twitter.com/DoodleKoalas", - "website": "https://doodlekoalas.com" - } - }, - { - "chainId": 101, - "address": "9z54BqRBCiYGn6rHKc3LRgLqmLM5Y2PmBs65RnmxdueG", - "symbol": "RWT", - "name": "Robillionare Whitelist Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/farhan067/RWT/main/logo.jpg", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "DNAdXVQZjBa77jHoqij52RDhkDkBq6iCLsJwCRfhzYz2", - "symbol": "DNA", - "name": "DNA", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DNAdXVQZjBa77jHoqij52RDhkDkBq6iCLsJwCRfhzYz2/logo.jpg", - "extensions": { - "discord": "https://discord.gg/g4u6QCPk3S", - "twitter": "https://twitter.com/AncestorNFT", - "website": "https://ancestors.digital/" - } - }, - { - "chainId": 101, - "address": "2HXfRTmmCEUZJDbqySfvETewMUxujod1ZwUHJMrHGCEf", - "symbol": "$FRAIS", - "name": "Miss Frais", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2HXfRTmmCEUZJDbqySfvETewMUxujod1ZwUHJMrHGCEf/logo.png", - "tags": ["utility-token", "dao", "staking-token"], - "extensions": { - "discord": "https://discord.gg/rJjeXWYxwk", - "twitter": "https://twitter.com/MissFrais", - "website": "https://missfrais.io/" - } - }, - { - "chainId": 101, - "address": "2rTsbuDKMxnvZ3zH3MbUF1mdnhRkCBjFjPPFEzLiVuEA", - "symbol": "LANG", - "name": "LangueCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/thiagoDMDiniz/coin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4VvPCvcU7QDQK3exQ1BDPVUVMwR2SEhsi5Qr64Yat3am", - "symbol": "Phoo", - "name": "aHPhooey Coins", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MasterPhooey/crypto/main/logo2.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BL94oogdyQ9S8K7JyAUXSPZxZ8S4w28vQGELZppCXxqS", - "symbol": "ReHa", - "name": "RetroHacked", - "decimals": 0, - "logoURI": "https://retrohacked.com/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://retrohacked.com" - } - }, - { - "chainId": 101, - "address": "B8w5nikfJeyZ2npZVUKp92pui7DsvsX5P9UWtTitd8yM", - "symbol": "SIGS", - "name": "Sig Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SigTL/SigCrypto/main/Sig.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6Ax2MkQAaS722tzToaoHQe16GVWVJvofWp1tFTdsTJhk", - "symbol": "RALMOND", - "name": "ROASTED ALMOND", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/STARSCREAM-SAYS/almond/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GYhxEd1EcpAcqtBVFwihsMfJ5CYkECXJCACNZCETKeyj", - "symbol": "SNN", - "name": "Bulls News", - "decimals": 9, - "logoURI": "https://dm.sattonft.com/media/tokens/bac/news.jpg", - "tags": ["utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/BossBullsClub" - } - }, - { - "chainId": 101, - "address": "queLNbM3wSpS2eYwDe2VdAvPLpaVDE3QNiRs2i8S3bp", - "symbol": "QUELLEN", - "name": "Quellen Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/queLNbM3wSpS2eYwDe2VdAvPLpaVDE3QNiRs2i8S3bp/logo.png", - "tags": ["meme-token"] - }, - { - "chainId": 101, - "address": "BJkKpQ1tE81msuAxguGSmL47KnxXsNjFG9EJE1e2Sixk", - "symbol": "ANUS", - "name": "Uranus Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/realbuckroberts/uranustoken/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GJkijTYMxiVga8VSMGnH9wwz954fuRG7jb1JzVApfnrF", - "symbol": "MNSC", - "name": "ManasCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/MartinDarko/ManasCoin/main/manascoin.png", - "tags": ["mint-token"] - }, - { - "chainId": 101, - "address": "61QYeabDU9sb9UmFJjcApznWigRxLyFjKD3dpD7xHPUL", - "symbol": "YOU", - "name": "Youtube", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/61QYeabDU9sb9UmFJjcApznWigRxLyFjKD3dpD7xHPUL/logo.png" - }, - { - "chainId": 103, - "address": "BuSqnbU8HMyDrzmBzh9wC33gyKMp2EPpDbhcNu6FL2Un", - "symbol": "DGUST", - "name": "DGUST Rest", - "decimals": 1, - "logoURI": "https://ipfs.io/ipfs/Qmf6kHuQKsahHx6vmoHG6TTv5i5YsNXhiF2ZffghbTvfzE", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "634PuhuzcE3JoF5nurbBwQKn6ehYD2fwD4nr38uhQB12", - "symbol": "BOCA", - "name": "EnBoca Rest", - "decimals": 1, - "logoURI": "https://ipfs.io/ipfs/QmSEVTzh7a9Q3iMr5Rzt8779FhfefBvhD4JkjGnJc3yc8z", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CqgizwKk9957rhLkM5oZTmcGZGwTRauYB4HgvAxhG1Fq", - "symbol": "NAMI", - "name": "NAMI", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Robby3082/test-token/main/nkmatoken.png", - "tags": ["NFT", "Staking"] - }, - { - "chainId": 103, - "address": "GYWjRN1ZBNpHzW6KaiKa9F1tSWyJjyNS8r1VugLyeNky", - "symbol": "ProRe", - "name": "Manly Marine Pde", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/rflawn/prorelogo/main/prorelogo.png", - "tags": ["security-token"], - "extensions": { - "website": "https://prore.io" - } - }, - { - "chainId": 101, - "address": "Fkf2WbzRuULKsDv4WK2T4VGFNNjfziUAHZ3Z3tB8oFnS", - "symbol": "MNLY1", - "name": "Manly 1", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/rflawn/PreReTokensList/main/mnly1.png", - "tags": ["security-token"] - }, - { - "chainId": 101, - "address": "5DYkrfkZ9SG9NqBq2yYqRbUWAibK4E5QaNwV4aqpDb6K", - "symbol": "SBYC", - "name": "Solana Bored Yacht Club Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5DYkrfkZ9SG9NqBq2yYqRbUWAibK4E5QaNwV4aqpDb6K/SBYC.png", - "tags": ["utility-token", "nft", "community-token"] - }, - { - "chainId": 101, - "address": "SB5Vr6EFRqeLws4eg6LVMXJg9dFrfowEqiknAcYvoAY", - "symbol": "SOLBARSWL1", - "name": "SOLBars Tier 1 Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SB5Vr6EFRqeLws4eg6LVMXJg9dFrfowEqiknAcYvoAY/logo.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "SB2KhzJb2kqhkYC6J5DKw449wiHf7gEbGtKA9NEnbaN", - "symbol": "SOLBARSWL2", - "name": "SOLBars Tier 2 Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SB2KhzJb2kqhkYC6J5DKw449wiHf7gEbGtKA9NEnbaN/logo.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "CcHazxxuN1UG86ubpRWZhrpF8vNvY1kqxAevtwvFc34t", - "symbol": "SPZ", - "name": "Sponscoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CcHazxxuN1UG86ubpRWZhrpF8vNvY1kqxAevtwvFc34t/logo.png", - "tags": ["community-token", "utility-token", "social-token"], - "extensions": { - "website": "https://sponsor.me/" - } - }, - { - "chainId": 101, - "address": "J9QoYEwtScVwQRv4YztM5i799ubovW7xaFfCuiuKjegn", - "symbol": "QK", - "name": "Quak Quak", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ARX4567/crypto-1/main/crypto1.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "DGPw3zcZuMxoVmnEQA9uhZDn9Tg2ynyaBrbULRQ8y1Gh", - "symbol": "DEGEPASS", - "name": "DEGEPASS", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DGPw3zcZuMxoVmnEQA9uhZDn9Tg2ynyaBrbULRQ8y1Gh/logo.png", - "tags": ["security-token"], - "extensions": { - "discord": "https://discord.gg/A3PeauVFTr", - "twitter": "https://twitter.com/degenespace", - "website": "https://degenerative.space/" - } - }, - { - "chainId": 101, - "address": "3JyJDoZJywcje4kGSWni822NsXeMNz8UXAMFdWN6Gf41", - "symbol": "WL_BNNA", - "name": "WL tier Moonkee", - "decimals": 1, - "logoURI": "https://raw.githubusercontent.com/TheMoonkeesNFT/TheMoonkees_logo/main/assets/imgs/wl%20token%20img.png", - "tags": ["wl-token"] - }, - { - "chainId": 101, - "address": "7s4xD49kUHGpXcbZzCWx65GvL7a5pCCji9bGFpgzq1Wn", - "symbol": "DROB", - "name": "Drake Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/drakesbigday/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8Xve8emm4jeZq6xzxPQfwNKz77gkxYZQHKKGT3YBVuCe", - "symbol": "KeithJulie", - "name": "Keith and Julie Stewart", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/YellowLittleTurtle/JnK/main/JnK.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CAVrUnfJ1mZB4252hsBBATowtoWEe2yECAYJZBuQRUAU", - "symbol": "BRNDA", - "name": "Bernd Alpha", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CAVrUnfJ1mZB4252hsBBATowtoWEe2yECAYJZBuQRUAU/logo.png", - "tags": ["community-token", "memes-token", "coin"] - }, - { - "chainId": 101, - "address": "8wpUGC6mQ7CSVYvQxxPKJA6a2Qu3JJtGMc8MNDFRsHsm", - "symbol": "FFCN", - "name": "Fede Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Fedef01/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CWhr7vJ1rCSgSMCcwMxdLVWdCf4KkSjZEeSmmh1poVXb", - "symbol": "CBR", - "name": "Community Beer Run Token", - "decimals": 2, - "logoURI": "https://i.imgur.com/Jd2MCtj.png", - "tags": ["bridgesplit-fraction", "daao", "barrel-dao", "fnft"], - "extensions": { - "discord": "https://discord.gg/fjrFpbweAP", - "twitter": "https://twitter.com/bridgesplit", - "vault": "https://app.bridgesplit.com/vault/CWhr7vJ1rCSgSMCcwMxdLVWdCf4KkSjZEeSmmh1poVXb" - } - }, - { - "chainId": 101, - "address": "GHJxwtgZcjNBXQJ5bAcByvnxN1BX6kKk5wndq9nVuJCE", - "symbol": "OGBNNA", - "name": "OG Token", - "decimals": 1, - "logoURI": "https://raw.githubusercontent.com/TheMoonkeesNFT/TheMoonkees_logo/main/assets/imgs/og%20token%20img.png", - "tags": ["OG-Tier-Token"] - }, - { - "chainId": 101, - "address": "HeJvBuBjpeP8SNyipv5rr2FkyH7dWAUhVvfk9KFBUV5c", - "symbol": "ASTC", - "name": "AstorCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/AstorLabka/crypto/main/AstorCOIN.png", - "tags": ["payment-token"] - }, - { - "chainId": 101, - "address": "HWo5NmPfNJ1LjdHTMZcXwPDrNQXX54TPySFbm2CWcZBj", - "symbol": "NALA", - "name": "Nala", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/geneva-crypto/crypto/main/Nala.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8jjZtvDQ2WTX4gbHdNBu5XbhoAJt6bD2FQHp2JsZ7atb", - "symbol": "AC", - "name": "AstronomicCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/philipmaciag/Crypto/main/D.T.S.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9C1qd5yrzqFpmypvA8nsK2oRxmua9PkxbSLH6BMo63JF", - "symbol": "TZERO", - "name": "T Zero Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SergoKalandadze/t-zero/main/logo.jpg" - }, - { - "chainId": 101, - "address": "GooNRf7PTVSMDkkiEtXWsoMaTHf3W5oaeWgmvQBduH3q", - "symbol": "Goons", - "name": "Galactic Goons Gen 2 Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GooNRf7PTVSMDkkiEtXWsoMaTHf3W5oaeWgmvQBduH3q/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/galacticgoonsio" - } - }, - { - "chainId": 101, - "address": "Arca7FdReYC8hRhKzeuKSp79dWn6qGSd2t5MPvPHAT2T", - "symbol": "Arcanist", - "name": "Zankoku labs gen 2 Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Arca7FdReYC8hRhKzeuKSp79dWn6qGSd2t5MPvPHAT2T/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/ZankokuLabz" - } - }, - { - "chainId": 101, - "address": "CUBSiWEwRnyEvtbYv3ZgRUL5tqrDjXHUwiGdzcpfTud8", - "symbol": "WAGEH", - "name": "Okay Cubs Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CUBSiWEwRnyEvtbYv3ZgRUL5tqrDjXHUwiGdzcpfTud8/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "CN2sduoDjPQqUeGmtiaEqrxXVGacVZt69oA91zAKuW4o", - "symbol": "JAVI", - "name": "Javi Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Telvy/javitoken/main/javitokenlogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "D6iruuWMixNyMKvqyLNTyFEHyc8EhuKfW2dzsde7Jar7", - "symbol": "ITC", - "name": "Smarttttt Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/D6iruuWMixNyMKvqyLNTyFEHyc8EhuKfW2dzsde7Jar7/logo.png" - }, - { - "chainId": 101, - "address": "HhgxwkVVHVoYCib3EpWyXTnbmrNfusvLmEhXkXcFf3ft", - "symbol": "TSCM", - "name": "The Shady Class Mint", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/flipthetip/test-tsc/main/coin2_ccexpress%20(1)_adobe_express.png", - "tags": ["minting-token"] - }, - { - "chainId": 101, - "address": "9AsPKqMkwrXr2EgN2rMM1Uaq31oNydwtPexCLQp2LWJE", - "symbol": "GROW", - "name": "Grow Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ecotoken123/icon/main/grow.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "AqneFjZurwRuHR9Kt67tXxvJ1Ki9hkPys7D336uMTRzN", - "symbol": "TANBAY", - "name": "Tanilba Bay", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/rflawn/PreReTokensList/main/TanilbaBay1.png", - "tags": ["security-token"] - }, - { - "chainId": 101, - "address": "PigobSSPVECtDpdo1wv7Nzvvq7jKY9KfcsQWqFSitME", - "symbol": "PIGLETS", - "name": "Pixel Piglets Adoption Pass", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/PigobSSPVECtDpdo1wv7Nzvvq7jKY9KfcsQWqFSitME/logo.png" - }, - { - "chainId": 101, - "address": "pWLbnNUQGrWB5Y94QaRGpxQPv8j7PhzSqj6SWTRjSoM", - "symbol": "PIGLETSWL", - "name": "Pixel Piglets Mint Pass", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/pWLbnNUQGrWB5Y94QaRGpxQPv8j7PhzSqj6SWTRjSoM/logo.png" - }, - { - "chainId": 101, - "address": "3DFUNs4vDYJcq5suDoFEDGhpbhxFgFius5kgFXBfnNxK", - "symbol": "3DFUNGUYZ", - "name": "3DFunGuyz Discounted WL", - "decimals": 0, - "logoURI": "https://bafkreihebzouugjwf32gryfh7hqraxc5kue4rbsei3w57pks4phmpdfudq.ipfs.nftstorage.link/?ext=png", - "tags": ["whitelist-token"], - "extensions": { - "description": "CONGRATS! You have received a discounted WL token for the 3D FunGuyz Mint for having 2 or more FunGuyz in your wallet! Mint Price: 2.5 SOL, Total Supply: 4500", - "discord": "https://discord.gg/dEKxrxt8ac", - "twitter": "https://twitter.com/FunGuyzNFT", - "website": "https://funguyz.io/" - } - }, - { - "chainId": 101, - "address": "ENdCXVtcFEzpVCbsedLinVWbwEbR3yfWwdKVBn1hirhk", - "symbol": "ONE", - "name": "One Cash", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ENdCXVtcFEzpVCbsedLinVWbwEbR3yfWwdKVBn1hirhk/logo.png" - }, - { - "chainId": 101, - "address": "SakcBPcSQtSXxuxLGXhz9nJnmR4Z4HFY9Qbja8mvQib", - "symbol": "ORNG", - "name": "Orangefarm", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/XCHFOREVER/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5DttD6HS352t5ZwKM7gRAYB8suXErif4DrYgbRr6nbgY", - "symbol": "LCT", - "name": "Linea Codice Token", - "decimals": 0, - "logoURI": "https://github.com/ddeabreu/cryptoSolanaLineaCoinTokenPicture/blob/main/logo_LTC_lite.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "894Kdz8jCFeBfhDBm4VSRypvTgcRTdtAWxNyFQb2y5Ug", - "symbol": "boUSDC", - "name": "Boson USDC", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/894Kdz8jCFeBfhDBm4VSRypvTgcRTdtAWxNyFQb2y5Ug/logo.png", - "tags": ["stablecoin"], - "extensions": { - "website": "https://boson.so" - } - }, - { - "chainId": 101, - "address": "6xw18ELzvZqmSvKVPwPgrNxL4tBTqDw52WSdk9FH6aEq", - "symbol": "HLM", - "name": "HEALIUM", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6xw18ELzvZqmSvKVPwPgrNxL4tBTqDw52WSdk9FH6aEq/logo.png", - "tags": [ - "utility-token", - "metaverse-token", - "metaverse-currency", - "healthcare-token" - ], - "extensions": { - "description": "The Healium project is a blockchain-based token network that safely and reliably stores and manages high-value personal information such as individual's genetic data.", - "facebook": "https://www.facebook.com/Healium-101849422353501/", - "instagram": "https://www.instagram.com/healium_global/" - } - }, - { - "chainId": 101, - "address": "22Pqy9aTRXLN9oe9yEbdpJtmqf5m9mhDj7hqY7TSd2ks", - "symbol": "PUFFWL", - "name": "Solpuff WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Wcworker/Wcdonalds/main/puff.png", - "tags": ["community-token", "utility-token"], - "extensions": { - "twitter": "https://twitter.com/solpuffss", - "website": "https://solpuffs.art" - } - }, - { - "chainId": 101, - "address": "6AdBHQwRxcU3LMWpR9HFkwindpeBu6z1wFyP4E8mk4Ge", - "symbol": "$IRON", - "name": "Mindfolk Iron", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6AdBHQwRxcU3LMWpR9HFkwindpeBu6z1wFyP4E8mk4Ge/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/mindfolk", - "twitter": "https://twitter.com/mindfolkART", - "website": "https://www.mindfolk.art/" - } - }, - { - "chainId": 101, - "address": "DbBJEc1NhBQhHJrVoXYyaTmqHbekiz6DhZ8H5T4KY5fQ", - "symbol": "$STONE", - "name": "Mindfolk Stone", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DbBJEc1NhBQhHJrVoXYyaTmqHbekiz6DhZ8H5T4KY5fQ/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/mindfolk", - "twitter": "https://twitter.com/mindfolkART", - "website": "https://www.mindfolk.art/" - } - }, - { - "chainId": 103, - "address": "Bwe9F8rUtcPAUmgxXFatJVe7pWxTaHumwj5opnGvSXKf", - "symbol": "SWGT", - "name": "SWG token", - "decimals": 9, - "logoURI": "https://i.postimg.cc/zvFKYFMz/SWGT.png", - "tags": ["coin"] - }, - { - "chainId": 101, - "address": "DwbxvyYUTwmyLCQ8ozfTrTGkzbvk4uevr9ZawxVkGtNj", - "symbol": "RIDDLE", - "name": "RIDDLE", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DwbxvyYUTwmyLCQ8ozfTrTGkzbvk4uevr9ZawxVkGtNj/logo.png", - "tags": [ - "community-token", - "utility-token", - "metaverse-token", - "metaverse-currency" - ], - "extensions": { - "discord": "https://discord.gg/aYCQfQR2Js", - "twitter": "https://twitter.com/lorekeeperio", - "website": "https://lorekeeper.io/" - } - }, - { - "chainId": 101, - "address": "CK5K8GUKSGt5u5aJ7wHfeiCTgWMhcEVgo5zxAQ42msv9", - "symbol": "PNP", - "name": "Probably Nothing Potion", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CK5K8GUKSGt5u5aJ7wHfeiCTgWMhcEVgo5zxAQ42msv9/logo.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/pnsc420" - } - }, - { - "chainId": 101, - "address": "BR1CK2GpuUqNUrS8Kk7WDXXiSMaAppKFPhkzbXxFZtVg", - "symbol": "BRICK", - "name": "Brick", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BR1CK2GpuUqNUrS8Kk7WDXXiSMaAppKFPhkzbXxFZtVg/logo.jpg", - "tags": ["Utility-token"], - "extensions": { - "twitter": "https://twitter.com/HeavyDutyBuild", - "website": "https://heavyduty.builders/" - } - }, - { - "chainId": 103, - "address": "BR1CK2GpuUqNUrS8Kk7WDXXiSMaAppKFPhkzbXxFZtVg", - "symbol": "BRICK", - "name": "Brick", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BR1CK2GpuUqNUrS8Kk7WDXXiSMaAppKFPhkzbXxFZtVg/logo.jpg", - "tags": ["Utility-token"], - "extensions": { - "twitter": "https://twitter.com/HeavyDutyBuild", - "website": "https://heavyduty.builders/" - } - }, - { - "chainId": 101, - "address": "oGZfELJgJfDe7gccD5Z4Xf5CDoLqEhSiKqyC36BrHpN", - "symbol": "OG", - "name": "Zi-Bots OG Pass", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/oGZfELJgJfDe7gccD5Z4Xf5CDoLqEhSiKqyC36BrHpN/logo.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "seoGAYDRW1TKHyojzZRkjBSjNuwPnsYSTUjDUXMNykg", - "symbol": "SEOG", - "name": "Zi-Bots SEOG Pass", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/seoGAYDRW1TKHyojzZRkjBSjNuwPnsYSTUjDUXMNykg/logo.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "WL43J7vzgyYRNNmDBvDK2CtuKHoQHdPoL1gL5XTpPeP", - "symbol": "WL", - "name": "Zi-Bots Whitelist Pass", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WL43J7vzgyYRNNmDBvDK2CtuKHoQHdPoL1gL5XTpPeP/logo.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "iAnJGaHwpDjqw4mDQ1b7PfyMnp41W8Xnqt4gD9kpjvF", - "symbol": "SVT", - "name": "SVT", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/iAnJGaHwpDjqw4mDQ1b7PfyMnp41W8Xnqt4gD9kpjvF/logo.png" - }, - { - "chainId": 101, - "address": "97pNcyxA4d3vcAxra6co4AZkqxuJ7N1XqWWVbSaqEak", - "symbol": "GPT", - "name": "GPT", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/97pNcyxA4d3vcAxra6co4AZkqxuJ7N1XqWWVbSaqEak/logo.png" - }, - { - "chainId": 101, - "address": "Fg9CgaQFdnfzTs2N5szFTm85JGjgsVtqzVBrgcLQU6j", - "symbol": "SPRL", - "name": "SPIRAL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/willbov/SPIRAL/main/spirallogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3DWLgzpD6z9PrUY7Hk9CyHHTrGk28aHwcyPhgdQmExTt", - "symbol": "3DFGWL", - "name": "3DFunGuyz WL", - "decimals": 0, - "logoURI": "https://bafkreibp4wzfh5lrqr3gqlcduk4hk64qwmosyryhwrqjaa7qqcggyrylqe.ipfs.nftstorage.link/?ext=png", - "tags": ["whitelist-token"], - "extensions": { - "description": "CONGRATS! You have received a WL token for the 3D FunGuyz Mint! Mint Price: 2.75 SOL, Total Supply: 4500", - "discord": "https://discord.gg/dEKxrxt8ac", - "twitter": "https://twitter.com/FunGuyzNFT", - "website": "https://funguyz.io/" - } - }, - { - "chainId": 101, - "address": "3p2LXnEDQvMGLE7wVz49ys79E2UceihCANh26wwQxmt5", - "symbol": "UM", - "name": "Um Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Ethan-new/cryptoimage/main/start.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CHtRriqEcMCg9A48neeWEH31gMMagf3VrGudYe1Jp3Tb", - "symbol": "CCC", - "name": "Conspiracy Crypto Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Abhi-bot-dot/ConpiracyCrypto/main/CCC.png", - "tags": ["Not-So-True-token", "Social-Token"] - }, - { - "chainId": 101, - "address": "AFvt4EhTybpRHJpU5X9kYTWDqsgwD9gxittNtSsqMQxX", - "symbol": "bUSDC", - "name": "Bosonso USDC", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AFvt4EhTybpRHJpU5X9kYTWDqsgwD9gxittNtSsqMQxX/logo.png", - "tags": ["stablecoin"], - "extensions": { - "website": "https://boson.so" - } - }, - { - "chainId": 101, - "address": "AXY11ExJToaGPKp7BmGjkzitfs1ta7cmjJn58Pn2t3Z1", - "symbol": "AXY", - "name": "AXY Network", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AXY11ExJToaGPKp7BmGjkzitfs1ta7cmjJn58Pn2t3Z1/logo.jpg", - "tags": ["Utility-token"] - }, - { - "chainId": 103, - "address": "AXY11ExJToaGPKp7BmGjkzitfs1ta7cmjJn58Pn2t3Z1", - "symbol": "AXY", - "name": "AXY Network", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AXY11ExJToaGPKp7BmGjkzitfs1ta7cmjJn58Pn2t3Z1/logo.jpg", - "tags": ["Utility-token"] - }, - { - "chainId": 101, - "address": "5NRMCHoJtq5vNgxmNgDzAqroKxDWM6mmE8HQnt7p4yLM", - "symbol": "gg_SOL", - "name": "gg_SOL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5NRMCHoJtq5vNgxmNgDzAqroKxDWM6mmE8HQnt7p4yLM/logo.png", - "tags": ["lp-token"], - "extensions": { - "discord": "https://discord.gg/SgKffK9X76", - "twitter": "https://twitter.com/goblingold_fi", - "website": "https://goblin.gold" - } - }, - { - "chainId": 101, - "address": "HAYwz6cHGuGAvLNifqGypH4mzv8fF5wv9SvcYLRGd18Q", - "symbol": "gg_USDC", - "name": "gg_USDC", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HAYwz6cHGuGAvLNifqGypH4mzv8fF5wv9SvcYLRGd18Q/logo.png", - "tags": ["lp-token"], - "extensions": { - "discord": "https://discord.gg/SgKffK9X76", - "twitter": "https://twitter.com/goblingold_fi", - "website": "https://goblin.gold" - } - }, - { - "chainId": 101, - "address": "7V3hgNMhVHwLPsyD5ujG248PV1hwnsvpBrAMeWXWboRZ", - "symbol": "gg_mSOL", - "name": "gg_mSOL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7V3hgNMhVHwLPsyD5ujG248PV1hwnsvpBrAMeWXWboRZ/logo.png", - "tags": ["lp-token"], - "extensions": { - "discord": "https://discord.gg/SgKffK9X76", - "twitter": "https://twitter.com/goblingold_fi", - "website": "https://goblin.gold" - } - }, - { - "chainId": 101, - "address": "9oLbMFr1AedcbXjqNge4QkrQMw5Jeae3eTbPQ94Zp1aD", - "symbol": "ggUSDT", - "name": "ggUSDT", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9oLbMFr1AedcbXjqNge4QkrQMw5Jeae3eTbPQ94Zp1aD/logo.png", - "tags": ["lp-token"], - "extensions": { - "discord": "https://discord.gg/SgKffK9X76", - "twitter": "https://twitter.com/goblingold_fi", - "website": "https://goblin.gold" - } - }, - { - "chainId": 101, - "address": "Er1sCVW55YH6gMTc8HdvZwZ9YrWksLAso6HtA3knXBKU", - "symbol": "ggBTC", - "name": "ggBTC", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Er1sCVW55YH6gMTc8HdvZwZ9YrWksLAso6HtA3knXBKU/logo.png", - "tags": ["lp-token"], - "extensions": { - "discord": "https://discord.gg/SgKffK9X76", - "twitter": "https://twitter.com/goblingold_fi", - "website": "https://goblin.gold" - } - }, - { - "chainId": 101, - "address": "AEag8CEYbzNRE1cLkNmQdBzF5dNpWrhv5zfZMR5xWhpA", - "symbol": "ggsoETH", - "name": "ggsoETH", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AEag8CEYbzNRE1cLkNmQdBzF5dNpWrhv5zfZMR5xWhpA/logo.png", - "tags": ["lp-token"], - "extensions": { - "discord": "https://discord.gg/SgKffK9X76", - "twitter": "https://twitter.com/goblingold_fi", - "website": "https://goblin.gold" - } - }, - { - "chainId": 101, - "address": "Fn4Nz4G6fbK7556XUJQxovYgRjEXgWQYTVj5yCLx2pyv", - "symbol": "ggstSOL", - "name": "ggstSOL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Fn4Nz4G6fbK7556XUJQxovYgRjEXgWQYTVj5yCLx2pyv/logo.png", - "tags": ["lp-token"], - "extensions": { - "discord": "https://discord.gg/SgKffK9X76", - "twitter": "https://twitter.com/goblingold_fi", - "website": "https://goblin.gold" - } - }, - { - "chainId": 101, - "address": "82NfNroRav4h4ecRwcTz46oufQBLRhtvWMJNx9WrzuKd", - "symbol": "ggscnSOL", - "name": "ggscnSOL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/82NfNroRav4h4ecRwcTz46oufQBLRhtvWMJNx9WrzuKd/logo.png", - "tags": ["lp-token"], - "extensions": { - "discord": "https://discord.gg/SgKffK9X76", - "twitter": "https://twitter.com/goblingold_fi", - "website": "https://goblin.gold" - } - }, - { - "chainId": 101, - "address": "CA3oB8EiByQ4yrcexSJDbfGvk1CJrPRcZf2UE14ZRvtx", - "symbol": "ggSRM", - "name": "ggSRM", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CA3oB8EiByQ4yrcexSJDbfGvk1CJrPRcZf2UE14ZRvtx/logo.png", - "tags": ["lp-token"], - "extensions": { - "discord": "https://discord.gg/SgKffK9X76", - "twitter": "https://twitter.com/goblingold_fi", - "website": "https://goblin.gold" - } - }, - { - "chainId": 101, - "address": "AJd15mm73d86ny8worSc8aoLLF6EM1DGPSvi4GscaoQt", - "symbol": "ggFTT", - "name": "ggFTT", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AJd15mm73d86ny8worSc8aoLLF6EM1DGPSvi4GscaoQt/logo.png", - "tags": ["lp-token"], - "extensions": { - "discord": "https://discord.gg/SgKffK9X76", - "twitter": "https://twitter.com/goblingold_fi", - "website": "https://goblin.gold" - } - }, - { - "chainId": 101, - "address": "GfSggsLj9ZcYcHxanX85d7nas7s1GJPMuDgMCWDhoi7Z", - "symbol": "ggMNGO", - "name": "ggMNGO", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GfSggsLj9ZcYcHxanX85d7nas7s1GJPMuDgMCWDhoi7Z/logo.png", - "tags": ["lp-token"], - "extensions": { - "discord": "https://discord.gg/SgKffK9X76", - "twitter": "https://twitter.com/goblingold_fi", - "website": "https://goblin.gold" - } - }, - { - "chainId": 101, - "address": "7NF4QChyNo7knUAe5YAXt8JUKLEuHRDgtC5aoVhZyUGx", - "symbol": "CHEDDAR", - "name": "Cheddar token ", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7NF4QChyNo7knUAe5YAXt8JUKLEuHRDgtC5aoVhZyUGx/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "mon58485x1UPPuE38MCuLbK8dYBz48PSwYudmvyPKJc", - "symbol": "MONMINT", - "name": "Mondays Mint Token", - "decimals": 0, - "logoURI": "https://arweave.net/oSYcdW4EN3z2L0dtoNzC9paXQ-GXbMyF-XrsCLRqf4M", - "tags": ["Whitelist-token"], - "extensions": { - "discord": "http://discord.gg/GrmUcQkEgk", - "twitter": "https://twitter.com/MondaysNFT", - "website": "https://mondaysnft.com" - } - }, - { - "chainId": 101, - "address": "B33DfL1MDvXF2bLGaVyWsqvJEJ17NRHpBrCeQJpjLWBd", - "symbol": "SKY", - "name": "SKY CASH", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/B33DfL1MDvXF2bLGaVyWsqvJEJ17NRHpBrCeQJpjLWBd/logo.png" - }, - { - "chainId": 101, - "address": "99QTDsAikCevpXyAf4o741rWXyfCdG3mbZXtbAiHu6Dw", - "symbol": "Meta", - "name": "Fâcebook", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/facebooktoken/zuckerberg/main/logo.png", - "tags": [ - "Davos-coin", - "WEF-coin", - "governance-token", - "Great-Reset-token", - "Zuckerberg-coin", - "Meta-coin", - "zues369-token", - "Agartha-token", - "Facebook-token" - ], - "extensions": { - "description": "Made by Carlos Verbelen for The Great Reset W.E.F and Klaus Schwab and for the metaverse you will be happy with nothing only 1usdt = 2 facebook tokens", - "discord": "https://discord.gg/3yNwFyPzUb", - "facebook": "https://www.facebook.com/CarlosVerbelen", - "github": "https://github.com/facebooktoken", - "instagram": "https://www.instagram.com/moonbootscapital/", - "linkedin": "https://search.brave.com/search?q=Carlos+Verbelen\u0026source=desktop", - "medium": "https://joinentre.com/?referredBy=el0nmusk", - "twitter": "https://twitter.com/dionysus3301", - "website": "https://linktr.ee/Zues369" - } - }, - { - "chainId": 101, - "address": "Edc86RmbY2qW4VpvKa8kAxNYoVPGfZ6wfCowojbnfo3", - "symbol": "BNANAS", - "name": "Bananas Protocol", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Edc86RmbY2qW4VpvKa8kAxNYoVPGfZ6wfCowojbnfo3/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/apefoodnft" - } - }, - { - "chainId": 101, - "address": "AzrvVcNiVhDaJKMsPTtwC4iYdAGNSqnw4VurVULU1Non", - "symbol": "BADS", - "name": "Bad Dog Syndicate", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AzrvVcNiVhDaJKMsPTtwC4iYdAGNSqnw4VurVULU1Non/logo.png" - }, - { - "chainId": 101, - "address": "FLSBhSdzujtrTtuwufuGSDdTZ5iywwXQizyqfmW3igmG", - "symbol": "NLY", - "name": "NELOY", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/neloy21/neloy21/main/logo.png" - }, - { - "chainId": 101, - "address": "A2TNE7FPEHNxb1VANCzzCEC2LaZqvB3KJtW9wtFEo6d6", - "symbol": "CCQ", - "name": "Crypto Conquer", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/A2TNE7FPEHNxb1VANCzzCEC2LaZqvB3KJtW9wtFEo6d6/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Crypto Conquer is a browser-based strategy P2E game. And CCQ is the utility token of the game.", - "discord": "https://discord.gg/x8mC3VjqMD", - "medium": "https://crypto-conquer.medium.com/", - "twitter": "https://twitter.com/CryptoConquer1", - "website": "https://crypto-conquer.com/" - } - }, - { - "chainId": 101, - "address": "ADjyVvJWLds8dEr3c4cXJi642QSFsxr4vzHjpKYv6cJT", - "symbol": "hiw", - "name": "hiw", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ADjyVvJWLds8dEr3c4cXJi642QSFsxr4vzHjpKYv6cJT/logo.png", - "tags": ["video-gamer", "gamling-games", "sol-token"], - "extensions": { - "description": "all the best!", - "discord": "https://discord.gg/UzVWbJcffY", - "github": "https://github.com/hiw-app/", - "website": "https://hiw.app/" - } - }, - { - "chainId": 101, - "address": "5NT5tfMvwr9cnyRHcHZJHFxuDeW2YAoJVU5dATCNVvta", - "symbol": "ZONA", - "name": "AriZONA Stablecoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5NT5tfMvwr9cnyRHcHZJHFxuDeW2YAoJVU5dATCNVvta/logo.png", - "tags": ["meme-token"], - "extensions": { - "twitter": "https://twitter.com/arizonastable", - "website": "https://arizonastablecoin.org" - } - }, - { - "chainId": 101, - "address": "898Vy3qq3pMRbAXpznFkYSDv5tK4hrN8ufAUuKkZHMXa", - "symbol": "ggORCA", - "name": "ggORCA", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/898Vy3qq3pMRbAXpznFkYSDv5tK4hrN8ufAUuKkZHMXa/logo.png", - "tags": ["lp-token"], - "extensions": { - "discord": "https://discord.gg/SgKffK9X76", - "twitter": "https://twitter.com/goblingold_fi", - "website": "https://goblin.gold" - } - }, - { - "chainId": 101, - "address": "hVjPJDPnHT1FuujEyoj77Y42J9R95P9ePaQCfuhUH1Q", - "symbol": "MAWL", - "name": "MrAeyko WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/hVjPJDPnHT1FuujEyoj77Y42J9R95P9ePaQCfuhUH1Q/logo.png" - }, - { - "chainId": 101, - "address": "2ntB5rMBVc3D1TUzeYhxXzXKLCrvkji23rSX6aaCaFyq", - "symbol": "DAN", - "name": "Dan Dxcoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/DanielDerefaka/dxcoin/main/dx3.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6UH4W2kPZp2Zij4uZiqQo47QkB1mToThvyVKrFE6JpZD", - "symbol": "ODWL", - "name": "ODKings WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6UH4W2kPZp2Zij4uZiqQo47QkB1mToThvyVKrFE6JpZD/logo.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "77KjqeAQbLuzg5KHP5xobUSBg4GSkFfa489m9ahegrvw", - "symbol": "SLKT", - "name": "Kumpagun Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/kumpagun/token_img/main/logo.png" - }, - { - "chainId": 103, - "address": "9j4C3i8YfMWnoQGMuxrFijLfzXpss1JncYZqzi4VeKNL", - "symbol": "VIVI", - "name": "VIVI", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Extoken/vivi-token-logo/main/vivi-min.png", - "tags": ["vivi-token"] - }, - { - "chainId": 101, - "address": "5idSc21Ht4FTC7jSNe34d6v5FmY8gonswYHpgC7QZCZW", - "symbol": "PRS", - "name": "Perseus Token", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5idSc21Ht4FTC7jSNe34d6v5FmY8gonswYHpgC7QZCZW/logo.png", - "tags": ["perseus", "fintech", "token", "investment", "fund"], - "extensions": { - "discord": "https://discord.gg/perseusfintech", - "twitter": "https://twitter.com/perseusfintech", - "website": "https://perseustoken.com/" - } - }, - { - "chainId": 101, - "address": "9uwH7hinGD2kSc9PE9cXG3hc3aAAEBbpgzZvEQEWd8yU", - "symbol": "TRGD", - "name": "GhostDragon", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/TRGhostDragon/crypto/main/TRGhostdragon.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GFdambb9r51DMu6Hmiz85pupX1o1P5okScgcem7KC5Tp", - "symbol": "SSLT", - "name": "Legacy Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GFdambb9r51DMu6Hmiz85pupX1o1P5okScgcem7KC5Tp/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/solanascouts", - "twitter": "https://twitter.com/SolanaScouts", - "website": "https://solanascouts.io/" - } - }, - { - "chainId": 101, - "address": "7mrnhJzpriLSBLe8Ku35MniLg2AUKhPKxv4H7qXAUy1x", - "symbol": "OST", - "name": "OST", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7mrnhJzpriLSBLe8Ku35MniLg2AUKhPKxv4H7qXAUy1x/logo.png" - }, - { - "chainId": 101, - "address": "8MbxiaDynCMXbkpBYDS69BKz6p5uWJn5djYK6jvz88UA", - "symbol": "ITC", - "name": "Inventors Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8MbxiaDynCMXbkpBYDS69BKz6p5uWJn5djYK6jvz88UA/logo.png" - }, - { - "chainId": 101, - "address": "ToJfCKXhxRoAjtXkYdcrRuL6L9cAy2iMpnHx1Kvm91j", - "symbol": "SRVWL", - "name": "Sardines Revolt WL Pass", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ToJfCKXhxRoAjtXkYdcrRuL6L9cAy2iMpnHx1Kvm91j/logo.jpg", - "tags": ["utility-token", "community-token"], - "extensions": { - "discord": "http://discord.gg/sardinesrevolt", - "twitter": "https://twitter.com/SardinesRevolt", - "website": "https://sardinesrevolt.com" - } - }, - { - "chainId": 101, - "address": "Fma1X1sawXiwdi5nNLbA6AABmr8mvKFM2AzrxMFastyM", - "symbol": "SRVFM", - "name": "Sardines Revolt Free Mint", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Fma1X1sawXiwdi5nNLbA6AABmr8mvKFM2AzrxMFastyM/logo.jpg", - "tags": ["utility-token", "community-token"], - "extensions": { - "discord": "http://discord.gg/sardinesrevolt", - "twitter": "https://twitter.com/SardinesRevolt", - "website": "https://sardinesrevolt.com" - } - }, - { - "chainId": 101, - "address": "HH6g9wQrYfxTeywuwm2WiMwqs1RDGqXXDSXb1mPjyquv", - "symbol": "LIGMAWL", - "name": "LIGMABULLS WL TOKEN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HH6g9wQrYfxTeywuwm2WiMwqs1RDGqXXDSXb1mPjyquv/logo.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "4ATAC6sV9JdDBXn6VMuAUKEuVxuT19nhKMuAoFv1rpGm", - "symbol": "AP", - "name": "AP COIN", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/amanprak/hello-world/master/logo.png", - "tags": ["social-token", "ap"] - }, - { - "chainId": 101, - "address": "7MSyMyUZPiuEVoZVE4uGBMHJTVfkJRnVasKxPA2F8qJJ", - "symbol": "TSB", - "name": "The TSB TOKEN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7MSyMyUZPiuEVoZVE4uGBMHJTVfkJRnVasKxPA2F8qJJ/logo.png" - }, - { - "chainId": 101, - "address": "TATsdYBQRdCGvpHVxPqcAvo3tAsyjgChhrdPGvRieg5", - "symbol": "AKEOWL", - "name": "Akeo Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/TATsdYBQRdCGvpHVxPqcAvo3tAsyjgChhrdPGvRieg5/logo.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "3YYdtfawNNVGocdazExoCV61zvKP7FJQh7JdKLeoW52i", - "symbol": "LBRD", - "name": "LIL BREAD TOKEN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/LilBreadToken/uploads/main/logo.png", - "tags": ["NFTs", "utility-token", "Lil-List-token", "community-token"] - }, - { - "chainId": 101, - "address": "8m9KkHduzyGFRVCpLZGqoHx39XgrxvWysePKucxS2Ccm", - "symbol": "XPEN", - "name": "Ned Peruvian Sol", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8m9KkHduzyGFRVCpLZGqoHx39XgrxvWysePKucxS2Ccm/logo.png", - "tags": ["currency", "stablecoin"], - "extensions": { - "website": "https://ned.finance/" - } - }, - { - "chainId": 102, - "address": "8m9KkHduzyGFRVCpLZGqoHx39XgrxvWysePKucxS2Ccm", - "symbol": "XPEN", - "name": "Ned Peruvian Sol", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8m9KkHduzyGFRVCpLZGqoHx39XgrxvWysePKucxS2Ccm/logo.png", - "tags": ["currency", "stablecoin"], - "extensions": { - "website": "https://ned.finance/" - } - }, - { - "chainId": 101, - "address": "8GXJkHvXM7vifVjpWqNaU2z3LSdLjbVGiGZ9P3XmvXPJ", - "symbol": "DDC", - "name": "Didine Coin", - "decimals": 0, - "logoURI": "https://i.postimg.cc/q7J0Jqz5/Sans-titre-removebg-preview-1.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AoqPs243Hh5LrzVmRamz9pEyiemzTBi5N1b4uiVsfrgU", - "symbol": "IUX", - "name": "IUX", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AoqPs243Hh5LrzVmRamz9pEyiemzTBi5N1b4uiVsfrgU/logo.png" - }, - { - "chainId": 101, - "address": "3yVqA5Grz3F4cjm3hNPLGLUeYV9nNdK5m7nAyYG7hu6d", - "symbol": "IVY", - "name": "IVY", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3yVqA5Grz3F4cjm3hNPLGLUeYV9nNdK5m7nAyYG7hu6d/logo.png" - }, - { - "chainId": 103, - "address": "6suwWxyex9tNBy5Pp8reczw6viRNHkQFQeTctXS5EQfo", - "symbol": "DBC", - "name": "DBank Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6suwWxyex9tNBy5Pp8reczw6viRNHkQFQeTctXS5EQfo/logo.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "website": "https://dbank.to/" - } - }, - { - "chainId": 101, - "address": "EcY4RE86crAWjLbENWQbtnrP76jF4V6Gr9rf3MyuKAX4", - "symbol": "LB$", - "name": "Lightning Bolt", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Bhuvana1708/assets/main/images.png" - }, - { - "chainId": 101, - "address": "7fK1TTaswaiu371mJW9yHUeSMgzeAuzmvbyDLeAQEGkY", - "symbol": "sBOT", - "name": "Reward Staked BOT", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7fK1TTaswaiu371mJW9yHUeSMgzeAuzmvbyDLeAQEGkY/logo.png", - "tags": ["utility-token", "play-to-earn", "game-token"], - "extensions": { - "twitter": "https://twitter.com/Starbots_game", - "website": "https://starbots.net" - } - }, - { - "chainId": 101, - "address": "Cerd5qB6jvMTW7YvswVVn3bDrUHWfGKYdUkgmn2M2WeM", - "symbol": "PHE", - "name": "PHENOMENON", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Cerd5qB6jvMTW7YvswVVn3bDrUHWfGKYdUkgmn2M2WeM/logo.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "kidsxKYSqXg3P3ySuzuzXDRcZvEyA6h1D22vu9xSaqh", - "symbol": "GKWL", - "name": "Gooey Kids WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/kidsxKYSqXg3P3ySuzuzXDRcZvEyA6h1D22vu9xSaqh/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/GooeyKids" - } - }, - { - "chainId": 101, - "address": "A88nzMeNHiaRKMMGU1Pzd1HgaBJUgzvGZYvDFzJvuTpi", - "symbol": "NERO", - "name": "Neronumis", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/xBlackrock/Neronumis/main/Logo.png", - "tags": ["financial-token"] - }, - { - "chainId": 101, - "address": "BMDL7j4okArqyWYmEkpAdWy3HBviRbaz1M3WkrbGib2e", - "symbol": "BMVDIA", - "name": "BMV Diamond Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BMDL7j4okArqyWYmEkpAdWy3HBviRbaz1M3WkrbGib2e/logo.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "BMV5eEuMtpvNCKa2SHipxNxYMq3HWLWu6RrjaFYwpiRK", - "symbol": "BMVDEG", - "name": "BMV Degen Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BMV5eEuMtpvNCKa2SHipxNxYMq3HWLWu6RrjaFYwpiRK/logo.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "KattxNYAhfvAMMNrSy1y3wbjojzBGGtv9xxfg1jz7pE", - "symbol": "KattX", - "name": "KattX", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/KattxNYAhfvAMMNrSy1y3wbjojzBGGtv9xxfg1jz7pE/logo.png", - "tags": ["P2E"], - "extensions": { - "twitter": "https://twitter.com/kattx_p2e", - "website": "https://KattX.io" - } - }, - { - "chainId": 101, - "address": "88YZ2fR3FdcAGri929QiKcvFLJ9357rYV1UKq8hSK4ca", - "symbol": "JADScoin", - "name": "JAD's Apple Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/JADO-artist/JAD-s-Apple-Coin/main/JADS%20Apples%20v2%20300x300%20PNG.png", - "tags": ["utility-token", "play-to-earn", "game-token", "charity-token"] - }, - { - "chainId": 101, - "address": "H5up2BhVFd34Q8jpPHcSUCromQGK5d7HXBSyCXZ8rwXQ", - "symbol": "RTNKV", - "name": "Ratunkov", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/rtnkv/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4pmhFQQYVEEe5y6UKSNwMta35LoU1A6MVmDTTZHoRbnE", - "symbol": "DEGG", - "name": "Ducky Egg", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4pmhFQQYVEEe5y6UKSNwMta35LoU1A6MVmDTTZHoRbnE/logo.png", - "extensions": { - "description": "Main currency in the Crypto Ducky Universe", - "twitter": "https://twitter.com/CryptoDuckyNFT", - "website": "https://cryptoducky.co/" - } - }, - { - "chainId": 101, - "address": "XwTZraiF1dVh69cZ2SpqyjDLmei2uVps5CYHD9vqK6d", - "symbol": "BURR", - "name": "Burrito Boyz Floor Index", - "decimals": 2, - "logoURI": "https://i.imgur.com/EKuyqK8.png", - "tags": [ - "fraction-index", - "bridgesplit-fraction", - "Burrito-Boyz", - "fnft" - ], - "extensions": { - "discord": "https://discord.gg/bridgesplit", - "twitter": "https://twitter.com/bridgesplit", - "vault": "https://app.bridgesplit.com/fractions/XwTZraiF1dVh69cZ2SpqyjDLmei2uVps5CYHD9vqK6d" - } - }, - { - "chainId": 103, - "address": "HakC4nWpLTmQ6TBsR1X2xZmSgH4zA1j5d3GPHgHb3YiY", - "symbol": "SAPS", - "name": "SAPS", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HakC4nWpLTmQ6TBsR1X2xZmSgH4zA1j5d3GPHgHb3YiY/logo.png" - }, - { - "chainId": 101, - "address": "CYqZ4FG2Jb5Z1CWgdojej9Svhvvo8ohKEAuDvzG3iQ3N", - "symbol": "DRIP", - "name": "DripCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Ashtar-Global-Solutions/spl-tokens/main/drip/dripcoin_small.gif", - "tags": ["NFT"], - "extensions": { - "discord": "https://www.discord.gg/drippieverse", - "instagram": "https://www.instagram.com/drippieverse/", - "twitter": "https://twitter.com/drippieverse", - "website": "https://www.drippies.space/" - } - }, - { - "chainId": 101, - "address": "EHaEBhYHWA7HSphorXXosysJem6qF4agccoqDqQKCUge", - "symbol": "WEYU", - "name": "WEYU", - "decimals": 8, - "logoURI": "https://weyu.io/img/WEYU.png", - "tags": ["utility-token"], - "extensions": { - "address": "0xFAfD4CB703B25CB22f43D017e7e0d75FEBc26743", - "assetContract": "https://bscscan.com/address/0xFAfD4CB703B25CB22f43D017e7e0d75FEBc26743", - "coingeckoId": "weyu", - "discord": "https://discord.com/invite/weyu", - "serumV3Usdc": "4hvgayPdWGdMeQREv4JGGfs83beV9d4biQV8AUhUMQmT", - "telegram": "https://t.me/WEYUchat", - "twitter": "https://twitter.com/weyuofficial", - "website": "https://weyu.io" - } - }, - { - "chainId": 103, - "address": "FivPj9ujVaWoXvHenMMp193jKQzFztNUeDtHD6MW4DT", - "symbol": "SHEEP", - "name": "SHEEP Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FivPj9ujVaWoXvHenMMp193jKQzFztNUeDtHD6MW4DT/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/sleepagotchi", - "twitter": "https://twitter.com/sleepagotchi", - "website": "https://sleepagotchi.com" - } - }, - { - "chainId": 101, - "address": "FeAzPEz5MBFJ2gZ8PgydstXr6bq6C9hHPYmKhVNZVps9", - "symbol": "3MOJIWL", - "name": "3moji Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FeAzPEz5MBFJ2gZ8PgydstXr6bq6C9hHPYmKhVNZVps9/3moji-logo.png", - "tags": ["whitelist-token", "3moji"], - "extensions": { - "discord": "https://discord.com/invite/3Y9nVzwaBN", - "instagram": "https://instagram.com/3mojiHQ", - "twitter": "https://twitter.com/3mojiHQ", - "website": "https://3moji.app" - } - }, - { - "chainId": 101, - "address": "BhevmzbDAVs4aPdBBhVZkA7ifQAQ2FwMEK7bW8ggGjiq", - "symbol": "ARSE", - "name": "Asses For The Masses", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/AssesForTheMasses/nfttoken/main/AFTM.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "2UQ2RTfaTnTXuT5mcUnNm4bgDnCUG6qJwwmPq6e49esP", - "symbol": "teste", - "name": "TESTANDO", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/rtnkv/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8881rZ8Pod31H4u4ReLfnwEZHq5ByPGHXmudEg5UJjXZ", - "symbol": "808", - "name": "Section 808", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8881rZ8Pod31H4u4ReLfnwEZHq5ByPGHXmudEg5UJjXZ/logo.png", - "extensions": { - "twitter": "https://twitter.com/808section", - "youtube": "https://www.youtube.com/channel/UCj7ye7sYS9Xa_wOoz-Om0qw" - } - }, - { - "chainId": 101, - "address": "CKdZ6N2NJynPm7E565ihKaxhW3fRLEGN2VW9Q9dbDe1j", - "symbol": "CTxWL", - "name": "Community WL", - "decimals": 0, - "logoURI": "https://communityproject.io/assets/images/logo-final.png", - "tags": ["whitelist-token"], - "extensions": { - "website": "https://communityproject.io/" - } - }, - { - "chainId": 101, - "address": "4B49SgAWkVBUATcbj5BAV4WZJ3TUY1P2x4mFY5BpKzBP", - "symbol": "HL", - "name": "vials", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4B49SgAWkVBUATcbj5BAV4WZJ3TUY1P2x4mFY5BpKzBP/logo.png" - }, - { - "chainId": 101, - "address": "FKvSGUTY4UUkHRKoCFdVtvu7iTgjYuQCuppNMncNZt3q", - "symbol": "ALU", - "name": "The Smile syndicate", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FKvSGUTY4UUkHRKoCFdVtvu7iTgjYuQCuppNMncNZt3q/logo.png", - "tags": ["nfts"], - "extensions": { - "twitter": "https://twitter.com/808section", - "youtube": "https://www.youtube.com/channel/UCj7ye7sYS9Xa_wOoz-Om0qw" - } - }, - { - "chainId": 101, - "address": "FgninkTPtP8WSgPQx3TtCY6WkPFkMxESatLFVUA28Bz", - "symbol": "LMQ", - "name": "lightning mcqueen", - "decimals": 9, - "logoURI": "https://github.com/Bhuvana1708/assets/blob/main/lightning-mcqueen-logo-115635113620szlbwmpry.png?raw=true" - }, - { - "chainId": 101, - "address": "viviwYspWBiKrddggUrtwjJJkZnCLwkPDeE3aVkTGwV", - "symbol": "ViVi", - "name": "ViVi", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/viviwYspWBiKrddggUrtwjJJkZnCLwkPDeE3aVkTGwV/logo.png" - }, - { - "chainId": 103, - "address": "6ybkEkMNv9NWC4GZMunCkwdFjMFNMcmehBcewYEW4eDh", - "symbol": "DPP", - "name": "PokeCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/LindleyLentati/token-list/main/assets/mainnet/6ybkEkMNv9NWC4GZMunCkwdFjMFNMcmehBcewYEW4eDh/logo.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "3gscwUozHw4GTKVbJVkUJfmziFbMdtdSMQcnri352Vcc", - "symbol": "LILOG", - "name": "Lil OG Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/LilDAOs/lilthings/main/OG-HLDRS.png", - "tags": ["utility-token", "community-token", "spl-token"] - }, - { - "chainId": 101, - "address": "E4vVNGSNiD21XEvGuxXkgo2j24HBjLMjuswNqebrg6Xz", - "symbol": "JKCHA", - "name": "Jackie Chan Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MikeHawkeCF/Crypto/main/logo.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 103, - "address": "CZERo1zERhXQqGbMvWb9rJEsqNSujymo4UkJuUrkSR86", - "symbol": "BTC-Z", - "name": "Bitcoin CarbonZero (dev)", - "decimals": 10, - "logoURI": "https://cdn.jsdelivr.net/gh/PurpleZone/NFTs@latest/btcz/btc-z.svg", - "tags": [ - "green-coin", - "community-token", - "utility-token", - "colored-token" - ], - "extensions": { - "coingeckoId": "bitcoin", - "description": "Removing Carbon in cryptocurrencies one coin at a time --@cryptolake2", - "imageUrl": "https://bafybeigchm62vwln6pdy6ausntwbwjbnjkqkgcj6ltdp222n3lnmetrpdy.ipfs.nftstorage.link/?ext=svg", - "linkedin": "https://www.linkedin.com/company/eco-organic-technology", - "telegram": "https://t.me/cryptolake2", - "website": "https://PurpleZone.github.io/NFTs/btcz/", - "whitepaper": "https://gateway.ipfs.io/ipns/QmRwfstMcXG28Emuo9eHwvnkeAuQrWanaKx7YPT5YASYa1/whitepaper.pdf" - } - }, - { - "chainId": 101, - "address": "pLtMXLgfyTsRfZyxnFkJpWqHBxMTvkr4tyMLgyj9wrY", - "symbol": "PLTMX", - "name": "PlutoniumX", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/pLtMXLgfyTsRfZyxnFkJpWqHBxMTvkr4tyMLgyj9wrY/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.com/invite/ttcc", - "twitter": "https://twitter.com/TimeTravelingCC" - } - }, - { - "chainId": 101, - "address": "GXPKDRcdwg9X6i8idxFd4bRmkW63dEaeQSJGBVFgXQfF", - "symbol": "DBC", - "name": "Domein Bergen Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/domeinbergen/domein/main/logo.png", - "tags": ["community-coin"], - "extensions": { - "website": "https://www.domeinbergen.nl/coin/" - } - }, - { - "chainId": 101, - "address": "8C8YZ1BqU2Lu4wQZcboc7znD6axPdLdU2iTi91nauVo4", - "symbol": "SHP", - "name": "ShipHero", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8C8YZ1BqU2Lu4wQZcboc7znD6axPdLdU2iTi91nauVo4/logo.png", - "tags": ["corporate-token", "social-token"], - "extensions": { - "description": "ShipHero - shipping and logistics software for eCommerce", - "facebook": "https://www.facebook.com/shiphero", - "github": "https://github.com/ShipHero", - "instagram": "https://www.instagram.com/weareshiphero", - "linkedin": "https://www.linkedin.com/company/shiphero", - "twitter": "https://twitter.com/weareshiphero", - "website": "https://shiphero.com/", - "youtube": "https://www.youtube.com/c/ShipHero" - } - }, - { - "chainId": 101, - "address": "Aw57FecWU8RBvPXiLbp9oyKpjAeEcCtQHjqVsV2Ln2Bs", - "symbol": "KCDWL", - "name": "KUB CAPITAL DAO Whitelist token for Humanoid NFT", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Aw57FecWU8RBvPXiLbp9oyKpjAeEcCtQHjqVsV2Ln2Bs/logo.png" - }, - { - "chainId": 101, - "address": "7qTJKupfW63phMUH2YHNYQrvXu989n6URZs5wBFA2VFY", - "symbol": "ANSU", - "name": "AnsuKoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7qTJKupfW63phMUH2YHNYQrvXu989n6URZs5wBFA2VFY/ansu-logo.svg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "SusHi7jkadUEmE7L4CvkNyZroXMDrx1saBFfDSpq6tx", - "symbol": "$USHI", - "name": "Suteki Sushi", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SusHi7jkadUEmE7L4CvkNyZroXMDrx1saBFfDSpq6tx/logo.png", - "tags": ["Utility-Token"], - "extensions": { - "twitter": "https://twitter.com/Suteki_NFT" - } - }, - { - "chainId": 101, - "address": "J9pQtMVtsAQ2ZeeEApebC1G2WvRHEWdHCx4J8ZqR2EKx", - "symbol": "BROT", - "name": "Bronze Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/tokebronze/crypto/main/logo.png.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "WLtxyA4FdeCpMkZEXtr6FxasUyH4E5CEh5kwFmcYywt", - "symbol": "HGWL", - "name": "Haunted Goats Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WLtxyA4FdeCpMkZEXtr6FxasUyH4E5CEh5kwFmcYywt/logo.png" - }, - { - "chainId": 101, - "address": "4d9PTJ3cV8MPHKtpgDctwbzqb9Fujznc6nw6jF56jtZm", - "symbol": "NF1", - "name": "Natisni F1 Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/pratcheth/crypto/main/logo1.png", - "tags": ["social-token", "community-token", "utility-token"], - "extensions": { - "description": "Natisni F1 - Decentralized Cryptocurrency Token going to be used in the new BNT reality", - "facebook": "https://www.facebook.com/natisnif1", - "youtube": "https://www.youtube.com/channel/UCmiLnG7aCFBD86Wpn0hJ30Q" - } - }, - { - "chainId": 101, - "address": "HqmEgqFheNVdXUkQirytWQ8VuvxnBJJDk1Ds6xp4dagU", - "symbol": "LINX", - "name": "LINX", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HqmEgqFheNVdXUkQirytWQ8VuvxnBJJDk1Ds6xp4dagU/logo.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "description": "Cyber linx token", - "twitter": "https://twitter.com/CyberlinxNFT", - "website": "https://cyber-linx.io" - } - }, - { - "chainId": 101, - "address": "GGLDx4LZTgz3kMcRpWv3JN2BJkRaZnU8rwG5ANfU3rXw", - "symbol": "$GGLD", - "name": "Guild Saga Gold", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GGLDx4LZTgz3kMcRpWv3JN2BJkRaZnU8rwG5ANfU3rXw/guild-saga-gold-logo.png", - "tags": ["play-to-earn", "gameFi", "metaverse"], - "extensions": { - "discord": "https://discord.gg/guildsaga", - "twitter": "https://twitter.com/GuildSaga", - "website": "https://www.guildsaga.com/", - "youtube": "https://www.youtube.com/channel/UCHGKEU8ojaRoGe3w_uUi_KQ" - } - }, - { - "chainId": 101, - "address": "HAriirKUY6fWN9gQrDUFSsAs7drF96rdK6ov8v2hvti1", - "symbol": "MONWL", - "name": "Mondays Whitelist Token", - "decimals": 0, - "logoURI": "https://arweave.net/M1r2Lpz4jiuXfqbiZkPwoYh6GP_HR2TU6KN2u5E-N2w", - "tags": ["Whitelist-token"], - "extensions": { - "discord": "http://discord.gg/GrmUcQkEgk", - "twitter": "https://twitter.com/MondaysNFT", - "website": "https://mondaysnft.com" - } - }, - { - "chainId": 101, - "address": "2qYy33Gef6iwp4t33rtKAJe49v1MWGiPKrbZeiu5kYp7", - "symbol": "LDSP", - "name": "Lil DAOs Presale", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/defimill/logo/main/logo.png", - "tags": ["utility-token", "community-token", "spl-token"] - }, - { - "chainId": 103, - "address": "2zyi3dXdL4JByspLTHui2wkfKfbtemoB1raMx5fFY8sj", - "symbol": "AMCK", - "name": "Amcuk Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2zyi3dXdL4JByspLTHui2wkfKfbtemoB1raMx5fFY8sj/logo.png", - "tags": ["amcuk-token"], - "extensions": { - "website": "https://nextjssssss.vercel.app/" - } - }, - { - "chainId": 101, - "address": "2ybz3ehQnePURs5tbxQDAo3TpKArqxdbB5yoABjC5TnP", - "symbol": "SUWL", - "name": "Solana Underdogs WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2ybz3ehQnePURs5tbxQDAo3TpKArqxdbB5yoABjC5TnP/logo.png" - }, - { - "chainId": 101, - "address": "Bap2Xh2fef8F2u86LAH6LDABGukRMfcmuPoW6zAHH5ew", - "symbol": "CREATEDBY", - "name": "CreatedBy Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Bap2Xh2fef8F2u86LAH6LDABGukRMfcmuPoW6zAHH5ew/logo.png", - "extensions": { - "discord": "https://discord.gg/CreatedByIO", - "twitter": "https://twitter.com/CreatedByIO", - "website": "https://createdby.io" - } - }, - { - "chainId": 101, - "address": "roccqR8b2s7srXwWGNpoe31zhThcjeQPKy2ghq2ccn4", - "symbol": "ROCC", - "name": "Reels of Change Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/roccqR8b2s7srXwWGNpoe31zhThcjeQPKy2ghq2ccn4/ROCC.PNG", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/reelsofchange", - "twitter": "https://twitter.com/reelsofchange", - "website": "https://reelsofchange.com/" - } - }, - { - "chainId": 101, - "address": "USBrKQa3vh17XpqgLpJSxwGBBVMsBus47VRXbNAnE7R", - "symbol": "USBWL", - "name": "Ruggaz USB Key WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/TreeBurgers/TokenIMGs/main/Token%20log.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "AKHbkyPVJBQta31kd3AaFNP2vzNKCkAqa113DCi411tt", - "symbol": "HYWD", - "name": "YogaWorld Passport MintList", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AKHbkyPVJBQta31kd3AaFNP2vzNKCkAqa113DCi411tt/logo.PNG", - "tags": ["utility-token", "whitelist-token"], - "extensions": { - "instagram": "https://www.instagram.com/helloyogaworlddao", - "twitter": "https://twitter.com/helloyogaworld", - "website": "https://helloyogaworld.com/" - } - }, - { - "chainId": 101, - "address": "EZYWh5RCBUTny3fVkiqJXfRC2eZ7H4iPTRJK8xEa4Dju", - "symbol": "HYWD", - "name": "New Moon 30 May 2022 POAP", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EZYWh5RCBUTny3fVkiqJXfRC2eZ7H4iPTRJK8xEa4Dju/logo.png", - "tags": ["utility-token", "proof-of-attendance", "30-May-2022"], - "extensions": { - "instagram": "https://www.instagram.com/helloyogaworlddao", - "twitter": "https://twitter.com/helloyogaworld", - "website": "https://helloyogaworld.com/" - } - }, - { - "chainId": 103, - "address": "G1vquBd67oRH4UvVvadksCK4fNvqdHGgGzLGrXY4nJGA", - "symbol": "BADGE", - "name": "Badge Protocol", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/G1vquBd67oRH4UvVvadksCK4fNvqdHGgGzLGrXY4nJGA/logo.svg", - "tags": ["utility-token"], - "extensions": { - "description": "This is a new token" - } - }, - { - "chainId": 101, - "address": "SutepRbXHCCXLfPHpXWjTdXpdESWw5UL65gCK96KoLq", - "symbol": "Suteki", - "name": "SUTEKI WL l Mint 3 June", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SutepRbXHCCXLfPHpXWjTdXpdESWw5UL65gCK96KoLq/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/Suteki_NFT" - } - }, - { - "chainId": 101, - "address": "3yeGqnYLXya7zPbTkEt2d84F489eV9mNia4WQHY3JefA", - "symbol": "TRB", - "name": "Trippin' Ape Tribe Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3yeGqnYLXya7zPbTkEt2d84F489eV9mNia4WQHY3JefA/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/TrippinApeNFT", - "website": "https://www.trippinapetribe.xyz/" - } - }, - { - "chainId": 101, - "address": "5Em52b2Q72hEpWAuJ44j9L79pQqrx4Ry9AGtziqTNsDi", - "symbol": "SANN", - "name": "Sand", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5Em52b2Q72hEpWAuJ44j9L79pQqrx4Ry9AGtziqTNsDi/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/LadderCaster", - "website": "https://laddercaster.com/" - } - }, - { - "chainId": 101, - "address": "BytiEsvJAzjaKsyFBVV5BuqowM6k41v6iKYnpx2YmPpa", - "symbol": "RANN", - "name": "Rain", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BytiEsvJAzjaKsyFBVV5BuqowM6k41v6iKYnpx2YmPpa/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/LadderCaster", - "website": "https://laddercaster.com/" - } - }, - { - "chainId": 101, - "address": "CuwxGp35WX2fN4Q3QR9QYCf9upKxDNx94r2kErXtai9E", - "symbol": "WINN", - "name": "Wind", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CuwxGp35WX2fN4Q3QR9QYCf9upKxDNx94r2kErXtai9E/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/LadderCaster", - "website": "https://laddercaster.com/" - } - }, - { - "chainId": 101, - "address": "4gRMLjKu38oXEDRJ7zZiUu8hZ3NLEtZtfz5VwF7wdKQz", - "symbol": "POOCOIN", - "name": "Poo Coin", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4gRMLjKu38oXEDRJ7zZiUu8hZ3NLEtZtfz5VwF7wdKQz/logo.png", - "tags": ["community-token", "meme-token"] - }, - { - "chainId": 101, - "address": "HNohCm8oGNA2qY3MPLz16vEUNfLKV7UXhY2NrhwtJgP2", - "symbol": "PORTARI", - "name": "TRANSPORTARI", - "decimals": 0, - "logoURI": "https://arweave.net/7Xq547eUy3PnpnxmnGIHSgjo281DoMPsZSwyDnWDEoo?ext=png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/BohemiaArtFair" - } - }, - { - "chainId": 101, - "address": "Dj7qHPhVGa4JTMETZwbrTY1hdfe4TVbk2b46mFpKqb6H", - "symbol": "BOOT", - "name": "Bootstrap DAO", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Dj7qHPhVGa4JTMETZwbrTY1hdfe4TVbk2b46mFpKqb6H/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/BootstrapDao" - } - }, - { - "chainId": 101, - "address": "BSdaqrvjJZ7ekPKtyuhBZuhsGENiQSV4CRGs8Xt3nkDe", - "symbol": "DOODLE", - "name": "Doodle Bear Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/SolanaDoodleBears/DOODLE/main/Doodle%20Coin%20Graphic.png" - }, - { - "chainId": 103, - "address": "5sCMLzJVgCAj929oxSoegYxn9SDPaZ2sxEsP5barqktE", - "symbol": "BOSS", - "name": "Boss Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/mapys/cs-tokens/master/assets/boss/cs-boss-01.png", - "tags": ["utility-token"], - "extensions": { - "description": "This is a test token by MapyS" - } - }, - { - "chainId": 101, - "address": "FeKpHboWsrVXUNkqXwVZjhMgibDX3aSrqRscCQa2PDuj", - "symbol": "GRAHAMS", - "name": "Graham Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/0xMill/uploads/main/logo.png", - "tags": ["utlity-token", "family-token"] - }, - { - "chainId": 101, - "address": "GGEMxCsqM74URiXdY46VcaSW73a4yfHfJKrJrUmDVpEF", - "symbol": "$GGEM", - "name": "Guild Saga Gems", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GGEMxCsqM74URiXdY46VcaSW73a4yfHfJKrJrUmDVpEF/guild-saga-gems-logo.png", - "tags": ["play-to-earn", "gameFi", "metaverse"], - "extensions": { - "discord": "https://discord.gg/guildsaga", - "twitter": "https://twitter.com/GuildSaga", - "website": "https://www.guildsaga.com/", - "youtube": "https://www.youtube.com/channel/UCHGKEU8ojaRoGe3w_uUi_KQ" - } - }, - { - "chainId": 101, - "address": "AkuJBEHVMceYm2n1rpxDAyzKW9Wr62hSEc2kR4AijvHg", - "symbol": "$BSC1", - "name": "BSC1 Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ben941/crpto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4nhQdXfoHvCCVnyZQg3awXqPrKL89Ys7Rbe77oXM47GG", - "symbol": "AIO", - "name": "AIO Exchange Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/adminesc/AIO_EXCHANGE_Token/main/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "Hat4RZHuSdDGWAwYQkHRzQsKuhtdwJuqugcPz2W4yU5M", - "symbol": "LVSH", - "name": "LAVISH", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/PnW1/LavishToken/main/logo.png" - }, - { - "chainId": 101, - "address": "3iEcmKH1FXUGo29Cmt9BjAYWpZyiYDev9jWRcsfjQwiD", - "symbol": "MLT", - "name": "Möthlist Ticket", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3iEcmKH1FXUGo29Cmt9BjAYWpZyiYDev9jWRcsfjQwiD/logo.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "3cwRkFarVySLQJF4yX2aB1EwkCKmtPGujt7Jn5PTRomc", - "symbol": "AMCUK", - "name": "Amcuk Token 2", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3cwRkFarVySLQJF4yX2aB1EwkCKmtPGujt7Jn5PTRomc/logo.png", - "tags": ["amcuk2-token"], - "extensions": { - "website": "https://nextjs123-iota.vercel.app/" - } - }, - { - "chainId": 101, - "address": "Tozqsk9qvvNNeVN1SGEbm2VipDB28JHWrPfHorUjTCu", - "symbol": "DR", - "name": "Doperoos WL Token", - "decimals": 9, - "logoURI": "https://iili.io/XtcRyX.png", - "tags": ["Whitelist-token"], - "extensions": { - "facebook": "https://discord.gg/Doperoos", - "twitter": "https://twitter.com/Doperoos" - } - }, - { - "chainId": 101, - "address": "Dyusz2c5DhUSq17jp6uBCVHWwEHVDgk2hyUDSoaTqMxD", - "symbol": "WMA", - "name": "Whitelist Mini Arena", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Dyusz2c5DhUSq17jp6uBCVHWwEHVDgk2hyUDSoaTqMxD/logo.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "7fDeF3F6FJQLFPmvs5ZGzqN34AohBtTRNXbpSiMk3s1f", - "symbol": "AMEC", - "name": "Ame Combine", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Ame-Combine/AME-Token/main/AME.png", - "tags": [ - "social-token", - "competition-token", - "gaming-token", - "science-token", - "charity-token", - "Farming-token" - ] - }, - { - "chainId": 101, - "address": "AkeoLsFzjQ3ZtKXwrGVaa6MSuU7X5wiBX9L5AKAPoFzp", - "symbol": "AKEO", - "name": "Akeo Token", - "decimals": 7, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AkeoLsFzjQ3ZtKXwrGVaa6MSuU7X5wiBX9L5AKAPoFzp/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/teamakeo", - "twitter": "https://twitter.com/yournfts_co", - "website": "https://yournfts.co/team-akeo/" - } - }, - { - "chainId": 101, - "address": "FcbeZknpxoaW48uNayNvEyHFJwhs7f4MMUy3DRDcYCC1", - "symbol": "CBMN", - "name": "Cyber Mine Coin", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/cyber-mine/token/main/logo.svg", - "tags": ["utility-token", "whitelist-token"] - }, - { - "chainId": 101, - "address": "FRPN7LQDwFuxFsGBSxjLXftVBGFG1jNHYcAQYNLp6PDF", - "symbol": "LCC", - "name": "LCC Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FRPN7LQDwFuxFsGBSxjLXftVBGFG1jNHYcAQYNLp6PDF/logo512.png", - "tags": ["whitelist-token"], - "extensions": { - "website": "https://lunarcalendarcelebrities.com" - } - }, - { - "chainId": 101, - "address": "12mKpWXFrQrozv64KeFnXKKaYSH14JdmRiCVyHcWseB5", - "symbol": "Bird", - "name": "BlueBell", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Krisztian7/image/main/logo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "54WShMVn3GKf6xNLc55jidj4M8VW1jpmzdvV7MJPX5JK", - "symbol": "WRLD", - "name": "Trippy World", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/54WShMVn3GKf6xNLc55jidj4M8VW1jpmzdvV7MJPX5JK/logo.png", - "tags": ["utlity-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/trippyworldlabs" - } - }, - { - "chainId": 101, - "address": "HYE47nodTfX6HgG75XrgUEcaK2ezhvDVURmi5MTswe1J", - "symbol": "GNIX", - "name": "Gnixcoin", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/grasberg/gnixcoin/main/coinlogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "SaLtectw2FsXhqdsV4fkAV2RCscFM9uBxmWA7R6L5ZS", - "symbol": "SALT", - "name": "Salt", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SaLtectw2FsXhqdsV4fkAV2RCscFM9uBxmWA7R6L5ZS/salt.png", - "tags": ["utility-token", "community-token", "currency"], - "extensions": { - "discord": "https://discord.com/invite/presidentialpeanutsnft", - "twitter": "https://twitter.com/Peanuts_NFT" - } - }, - { - "chainId": 101, - "address": "HSD3FWjqEbzEAdrWhP5cycjKapG3yVsEAFfAa7VUATTK", - "symbol": "TBCN", - "name": "Toros", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Copyrightsworld/cwcoin/main/torocoin-logo.png", - "tags": ["utility-token", "community-token"] - }, - { - "chainId": 101, - "address": "14UMe2amWfXj1CrM7C9kFkTQ6PtX5aT1fdsVGqBZaXCT", - "symbol": "XMON", - "name": "XMON", - "decimals": 9, - "logoURI": "https://github.com/ArthurPaivaT/token-list/blob/main/assets/mainnet/14UMe2amWfXj1CrM7C9kFkTQ6PtX5aT1fdsVGqBZaXCT/logo.jpg?raw=true" - }, - { - "chainId": 101, - "address": "DucksMNu1erAbMyLEpE8M1sJqjcjQEkyWZz5GfNhSGmK", - "symbol": "DCD", - "name": "Diamond (Ducks Casino)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DucksMNu1erAbMyLEpE8M1sJqjcjQEkyWZz5GfNhSGmK/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/DucksCasino", - "twitter": "https://twitter.com/BoosterDucks", - "website": "https://duckscasino.net" - } - }, - { - "chainId": 103, - "address": "DucksMNu1erAbMyLEpE8M1sJqjcjQEkyWZz5GfNhSGmK", - "symbol": "DCD", - "name": "Diamond (Ducks Casino)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DucksMNu1erAbMyLEpE8M1sJqjcjQEkyWZz5GfNhSGmK/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://devnet.duckscasino.net" - } - }, - { - "chainId": 101, - "address": "ApRE8SyBaFAppCRHNJRCvjXzQQPnPAzGfYNd3ZgGkTF4", - "symbol": "CIZ", - "name": "Collective Investment Zone", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ApRE8SyBaFAppCRHNJRCvjXzQQPnPAzGfYNd3ZgGkTF4/logo.jpg" - }, - { - "chainId": 101, - "address": "3Co1nhkhbEA6m5m2Db2gSYB7oZGJ18nnebWdxVCpbeDn", - "symbol": "BPWL", - "name": "Bad Penguins WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Robby3082/test-token/main/BPLOGO.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "HDEqEpFgTrBawzDgTG1eyH8Go9PX84LCEC8Qjt8T4jFN", - "symbol": "BOTS", - "name": "Skullbots Biker Gang Floor Index", - "decimals": 2, - "logoURI": "https://i.imgur.com/HSn9q9n.jpg", - "tags": [ - "fraction-index", - "bridgesplit-fraction", - "skullbots-biker-gang", - "fnft" - ], - "extensions": { - "discord": "https://discord.gg/bridgesplit", - "twitter": "https://twitter.com/bridgesplit", - "vault": "https://app.bridgesplit.com/fractions/HDEqEpFgTrBawzDgTG1eyH8Go9PX84LCEC8Qjt8T4jFN" - } - }, - { - "chainId": 101, - "address": "8F2d7rKydG5V6bupdCNBQ1L8RVAYS6VGBHcCeu3C14bA", - "symbol": "MCHA", - "name": "Mineroschapines", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/kalesha666/MCHA-COIN/main/1.png", - "tags": ["social-token"], - "extensions": { - "facebook": "https://facebook.com/mineroschapines", - "website": "https://mineroschapines.space" - } - }, - { - "chainId": 101, - "address": "ZAWLf8vbJBFxodpzjpARyfiKccxbYPBBsiuFropUD63", - "symbol": "JUNKY", - "name": "Junky Bears Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/FreshCats/wes/main/Junky.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "HmKT2GJQsfmJU44Xyygzrkey8uzfmCmroFSCdZja8jRD", - "symbol": "LIS", - "name": "Lis", - "decimals": 9, - "logoURI": "https://github.com/MatheusWells/token-list/blob/main/assets/mainnet/HmKT2GJQsfmJU44Xyygzrkey8uzfmCmroFSCdZja8jRD/logo.png?raw=true", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "4MSLQ5EGQTg3KmwcxWaDZYM4vKMbQ7nZYz4FAEDCQdHN", - "symbol": "Fardin", - "name": "The King", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4MSLQ5EGQTg3KmwcxWaDZYM4vKMbQ7nZYz4FAEDCQdHN/logo.jpg", - "tags": ["utility-token"], - "extensions": { - "telegram": "https://t.me/solardexofficialchat", - "twitter": "https://twitter.com/solar_dex", - "website": "https://solardex.finance/" - } - }, - { - "chainId": 101, - "address": "4TAratS4ST2QpEFqBvYMNAsA1ZS4WsDyZhawK9w6GkZw", - "symbol": "KWL", - "name": "KurumaNFT WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4TAratS4ST2QpEFqBvYMNAsA1ZS4WsDyZhawK9w6GkZw/logo.png" - }, - { - "chainId": 101, - "address": "WLQ7FjhxPnbJgomY5bXUYzFzvJi1qZj58yupo9HQDi5", - "symbol": "$ATP", - "name": "Atypical WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WLQ7FjhxPnbJgomY5bXUYzFzvJi1qZj58yupo9HQDi5/logo.png", - "tags": ["Whitelist-token"] - }, - { - "chainId": 101, - "address": "FiRE67XRcLmVaHnxo46VAVEtvTto9XZMPCqUvC2JSLef", - "symbol": "FIRE", - "name": "Legion Fire", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/SolStonez/Legion-Key-Logo/main/fire-token-logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "A utility token for the Legion of Sol Collection", - "discord": "https://discord.gg/legionofsol", - "twitter": "https://twitter.com/legion_of_sol", - "website": "https://legionofsol.io/" - } - }, - { - "chainId": 101, - "address": "BQgFm6S7jsmSzGjBZv2FADy4zzeieHoQiySNQRCosgaC", - "symbol": "ROY", - "name": "Fully Doxxed", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BQgFm6S7jsmSzGjBZv2FADy4zzeieHoQiySNQRCosgaC/logos.jpg", - "tags": ["utility-token"], - "extensions": { - "telegram": "https://t.me/solardexofficialchat", - "twitter": "https://twitter.com/solar_dex", - "website": "https://solardex.finance/" - } - }, - { - "chainId": 101, - "address": "BYCn578MDW8JTSZ5EYeiTkcZNAxMLmhAVi21RMysUxiZ", - "symbol": "TLP", - "name": "The Lazy Panda", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BYCn578MDW8JTSZ5EYeiTkcZNAxMLmhAVi21RMysUxiZ/logos.jpg", - "tags": ["utility-token"], - "extensions": { - "telegram": "https://t.me/solardexofficialchat", - "twitter": "https://twitter.com/solar_dex", - "website": "https://solardex.finance/" - } - }, - { - "chainId": 101, - "address": "48ntzCLdm9apLbZ8JV5b2s3teMZ1ij1XqokJiqiRYmb3", - "symbol": "RESTACK", - "name": "Restack Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/48ntzCLdm9apLbZ8JV5b2s3teMZ1ij1XqokJiqiRYmb3/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://restack.ai" - } - }, - { - "chainId": 101, - "address": "BoBa5GSvGYDbjHe5FNGQ3dDhNES7z2T9aFG5Gr8qfGqe", - "symbol": "SUN", - "name": "NFTabs - SUNSHINE Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/LinYu1992/nftabs_sunshine_token/main/Sunshine-Token.png", - "tags": ["utility-token", "social-token"], - "extensions": { - "twitter": "https://twitter.com/nonfungibletabs" - } - }, - { - "chainId": 101, - "address": "5WCHkLyayksYDk2r8xVhKVie6QT7dv84cwtbCsvJ8gPY", - "symbol": "BRR", - "name": "Yik Yak Yetis", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5WCHkLyayksYDk2r8xVhKVie6QT7dv84cwtbCsvJ8gPY/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://yikyakyetis.com/" - } - }, - { - "chainId": 101, - "address": "5nHt8TrjJN9U37WKaCpWftGfsKV91nXwiphJRbMo299p", - "symbol": "BANDS", - "name": "BANDS", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5nHt8TrjJN9U37WKaCpWftGfsKV91nXwiphJRbMo299p/logo.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "discord": "https://discord.gg/npuf3zk2uV", - "twitter": "https://twitter.com/BanditBoysDAO" - } - }, - { - "chainId": 101, - "address": "BhetEMsWMyDMMgaYzXwGTnd5EyBnrjuPAQFmMzttJAG", - "symbol": "ONFR", - "name": "OnFire", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/streetU/streetU/main/logo.png", - "tags": ["social-token"], - "extensions": { - "discord": "https://discord.gg/DVZs9KsqDE", - "website": "https://travelstones.xyz" - } - }, - { - "chainId": 101, - "address": "xe6zfMp7qPNTZVogSy3w2Gg4SVfZjC69SFDcKf9zKyp", - "symbol": "RSB", - "name": "Renaissance sportive de Berkane", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/streetU/streetU/main/rsb-logo-min.png", - "tags": [ - "social-token", - "RSB", - "Bekrane", - "fan-token", - "soccer", - "utility-token" - ], - "extensions": { - "discord": "https://discord.gg/DVZs9KsqDE", - "instagram": "https://www.instagram.com/rsbfootball/" - } - }, - { - "chainId": 101, - "address": "672LxNFXwEwEniFhXQ2P2BMJpz9N54enUcsyJKz9uB3m", - "symbol": "XVP", - "name": "Xvegas Vip Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/672LxNFXwEwEniFhXQ2P2BMJpz9N54enUcsyJKz9uB3m/logo.png" - }, - { - "chainId": 101, - "address": "7Rp4Esjx3y7ELQmaGSbzFL4cdgTRFaKmFpHfKbbuCXe2", - "symbol": "MIZU", - "name": "Mizushi Dragons Club Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/nintoku/picture/main/mizucoin.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/mizushiDC", - "website": "https://www.mizushidc.io" - } - }, - { - "chainId": 101, - "address": "5H3EHgNgX6vCog2JQwv5LfkhTWLvcd1EP6CSMzym1QSF", - "symbol": "BLAZE", - "name": "Investoner Dragons Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/InvestonerD/BLAZE-Icon/main/assets/Blaze%20Icon.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/d8R3MHrK7B", - "twitter": "https://twitter.com/InvstonerDragon", - "website": "https://investonerdragons.com" - } - }, - { - "chainId": 101, - "address": "Ah78nhRGzsiNNBKfHzrEd9Y4Th5ASv145w8Bw2cJb6PB", - "symbol": "TGC", - "name": "Griffin Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/CryptoShree/FMC/main/family.png" - }, - { - "chainId": 101, - "address": "8C4thx6WC5doUYy7jbnD9Yq5i414ZtZnL9dCyc5jadB7", - "symbol": "JBZ", - "name": "Just Beatz Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/CryptoShree/ROYAL/main/royal.jpg" - }, - { - "chainId": 101, - "address": "6AQkpGv2haWpHAnxWimZ2JZDJ8fmFFxq8YP1V2bSuEgn", - "symbol": "OG420", - "name": "BluntDAO", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/CryptoShree/OG420/main/bluntdao.png" - }, - { - "chainId": 101, - "address": "8jpi3f1ZCa3e4QciqjkrhHMGm2b6F6PHSJVuxW6nx2RG", - "symbol": "NZD", - "name": "New Zealand Digital Dollar", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/CryptoShree/NZD/main/nzdd.png" - }, - { - "chainId": 101, - "address": "AZKb6hEi98PtQTgs8vk7H2Ahhp6cTov7ayiTXJHLjQSa", - "symbol": "BBCS", - "name": "Billionaire Bears Club", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/DwightKurtS/Dwights-repository/main/logo.png.png" - }, - { - "chainId": 101, - "address": "9eczmrsLTsA32QTjpNkKoDaFK573NqA4tA7DAgdDSJw9", - "symbol": "BIBS", - "name": "BibsCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/holder21/crplogo/main/biblogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2xBa3dBS9rh2P16Piafx79miRB6XdCRrtCzvX1VCDF5K", - "symbol": "FOKK", - "name": "Fork You Kwon", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/whatelse114/tokenmoken/main/blackmoon.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3ADszhGBuRvTcX7QJZvEGKDeCzxbF1EiqVecGYtsaAYy", - "symbol": "$WOOOF", - "name": "WOOOF coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3ADszhGBuRvTcX7QJZvEGKDeCzxbF1EiqVecGYtsaAYy/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/solfriends", - "instagram": "https://www.instagram.com/solfriendsnft", - "twitter": "https://twitter.com/SOLFriends", - "website": "https://solfriendsnft.com" - } - }, - { - "chainId": 101, - "address": "4qagvcSsN4ovsUsSs1hBh9Qzt5SZHsfNu9BtjQsJyK7W", - "symbol": "Trippin", - "name": "Fractionalized Trippin' Ape Tribe -7656", - "decimals": 2, - "logoURI": "https://bafybeiavcp2gzugzpl6rqgpynulbjpky4j4d7czugpl4x3prskifhlcc4q.ipfs.nftstorage.link/7656.png?ext=png", - "tags": ["bridgesplit-fraction", "trippin-ape-tribe", "fnft"], - "extensions": { - "discord": "https://discord.gg/bridgesplit", - "twitter": "https://twitter.com/bridgesplit", - "vault": "https://app.bridgesplit.com/vault/4qagvcSsN4ovsUsSs1hBh9Qzt5SZHsfNu9BtjQsJyK7W" - } - }, - { - "chainId": 101, - "address": "2UZg26rjTyz8fbZtxxXnuAhfGqc5qNnQ1esxGDuDTwC6", - "symbol": "MBLOCK", - "name": "Noneyblock Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/themopixel/moneyblock/main/logo.png", - "tags": ["social-token"], - "extensions": { - "discord": "https://discord.gg/3YcXhmc3eX", - "instagram": "https://www.instagram.com/MoneyblockNFT", - "twitter": "https://twitter.com/MoneyblockNFT", - "website": "https://moneyblock.org" - } - }, - { - "chainId": 101, - "address": "goatmBAgLyFoHTyyg9NNqGLV4LqTGyjAx1HBn3P1NkD", - "symbol": "$GOAT", - "name": "GOAT", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/goatmBAgLyFoHTyyg9NNqGLV4LqTGyjAx1HBn3P1NkD/logo.jpg", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/GreatGoatsNFT", - "website": "https://greatgoats.io/" - } - }, - { - "chainId": 101, - "address": "3WA8kxjyBTsfvxdTdmJeRtk1SKWCXYNp6QK4n4j5Zsbg", - "symbol": "$IMPACT", - "name": "IMPACT", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/LexyVolpe/token/main/60kb.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "54RrzWybeyfJUTYgMCifGepyq9PYFMoDqN5Q4spdw35o", - "symbol": "MECCA", - "name": "MECCA", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/54RrzWybeyfJUTYgMCifGepyq9PYFMoDqN5Q4spdw35o/logo.png", - "tags": ["NFT", "utility-token"], - "extensions": { - "discord": "https://discord.com/invite/QHzmnNK7Cn", - "instagram": "https://www.instagram.com/primecyborgsociety/", - "twitter": "https://twitter.com/primecyborgnft", - "website": "https://primecyborgsociety.com/" - } - }, - { - "chainId": 101, - "address": "CjozvA9tbGS6sL4EtcHJ2YN9mTjPs5NsW4EqND1b1UnU", - "symbol": "KEDO", - "name": "KING EDO", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CjozvA9tbGS6sL4EtcHJ2YN9mTjPs5NsW4EqND1b1UnU/logo.png", - "tags": ["social-token", "community-token", "NFT-Reward-Token"] - }, - { - "chainId": 103, - "address": "CjozvA9tbGS6sL4EtcHJ2YN9mTjPs5NsW4EqND1b1UnU", - "symbol": "KEDO", - "name": "KING EDO", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CjozvA9tbGS6sL4EtcHJ2YN9mTjPs5NsW4EqND1b1UnU/logo.png", - "tags": ["social-token", "community-token", "NFT-Reward-Token"] - }, - { - "chainId": 101, - "address": "CXvk6rH2vKYcPrUrakQA3RxgUzaaEDTjUYxE7NvsqfuE", - "symbol": "$BSC2", - "name": "BSC2 Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/ben941/dexlab/main/dexlablogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "F4Jb7MHFNnuFqUFLWCkYgtJojNTuyKe6PTXp9SrLepmJ", - "symbol": "TBONE", - "name": "T-BONE Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/mrcglyn/tbone/main/image%20(2).png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "hqYm3owx1dh1gSyJJmaV8niBMw7fVLg2ZJ6cnqJTSwS", - "symbol": "CEDAR", - "name": "CEDAR Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/hqYm3owx1dh1gSyJJmaV8niBMw7fVLg2ZJ6cnqJTSwS/logo.png", - "tags": ["social-token", "community-token", "NFT-Reward-Token"], - "extensions": { - "discord": "https://discord.gg/cedar", - "twitter": "https://twitter.com/CedarBNPL", - "website": "https://www.ced.ar/" - } - }, - { - "chainId": 101, - "address": "6EGvh2GsH2r4XxHVuHFVvodQGMo12jMSRHhm9L9ePSHG", - "symbol": "TLGT", - "name": "TalgotPay Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/jemccottry/talgotpaylogo/main/logo.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "9XEqMCMeteQNjeE4w1aCS2c4Ew2XRa1923YkeuC3Kg6q", - "symbol": "CORK", - "name": "CorkDAO Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9XEqMCMeteQNjeE4w1aCS2c4Ew2XRa1923YkeuC3Kg6q/logo.png" - }, - { - "chainId": 101, - "address": "EFErmuMPx6md1Y7u5sCrwyyPSLftLBbtuLspWs27jsuS", - "symbol": "CLESS", - "name": "Coinless", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/CLEM-2/crypto/main/dark-rose-logo-illustration_13606-2.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7ZzAUhzJkjtxVC2bS9JTJJiH9Xxn63arfpFWLuA6hjz1", - "symbol": "LPT", - "name": "LovePortionToken - SK", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/streetU/streetU/main/SPT/logo.png", - "tags": ["love-token", "KTR", "LKRMN", "SM", "ZZRL"] - }, - { - "chainId": 101, - "address": "8i3YUt4kw76AbtXCb6hCxR6k3vHTfAWNsuf5QD67XWwm", - "symbol": "TRUE", - "name": "True Degenz", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8i3YUt4kw76AbtXCb6hCxR6k3vHTfAWNsuf5QD67XWwm/logotrue.png", - "tags": ["community-token", "NFT"], - "extensions": { - "discord": "https://discord.gg/tczqVNxdaw", - "twitter": "https://twitter.com/TrueDegenz", - "website": "https://magiceden.io/marketplace/truedegenz/" - } - }, - { - "chainId": 101, - "address": "ATVMRCJ8CLpfFiQq1S95LPCXKB3XCKM1EdAVeq4zEPq1", - "symbol": "SAWT", - "name": "Super Apes Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ATVMRCJ8CLpfFiQq1S95LPCXKB3XCKM1EdAVeq4zEPq1/Logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.com/invite/superapeuniversity", - "twitter": "https://twitter.com/SuperApeUniv", - "website": "https://superape.university/" - } - }, - { - "chainId": 101, - "address": "7j2uJRQKgh1z2wnjAZhrYZBqvBkAYZGG7Cu2ageavGem", - "symbol": "CKSH", - "name": "CurtKash", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/curtkellum/token/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ChRdev5KUUaqySyttxDmfKUnXdcsCSCZhmaVTyL5Yn1q", - "symbol": "DREG", - "name": "Deelerz Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ChRdev5KUUaqySyttxDmfKUnXdcsCSCZhmaVTyL5Yn1q/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "3mL97yd4B9hVFJzQfqXhy5NcgJdzYPhcSvAMCcNabmFF", - "symbol": "SHRUB", - "name": "Shrub Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ethankremerdojc/crypto/main/shrub.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DiRHqRqHK7ze2ffBDpLtzswuTYPmWDJh5t2J8bH9AoKr", - "symbol": "TSG", - "name": "Trippin Stoned Goats Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DiRHqRqHK7ze2ffBDpLtzswuTYPmWDJh5t2J8bH9AoKr/logo.png", - "extensions": { - "discord": "https://discord.gg/8drenSfXde", - "twitter": "https://twitter.com/TrippinStondeG" - } - }, - { - "chainId": 101, - "address": "2uHq9w2NnAfrVYWkmPiVx34L7q9AcfPKgFAHAJrPPXLr", - "symbol": "BRP", - "name": "Breeding Potion", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/MentieMark/token-list/main/assets/mainnet/2uHq9w2NnAfrVYWkmPiVx34L7q9AcfPKgFAHAJrPPXLr/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "NECTLWv5SsQDGbVgSzUA4p5hm4HXkQF8CWkwm9qtUsw", - "symbol": "NECTR", - "name": "Saint Skully NECTR", - "decimals": 9, - "logoURI": "https://saintskullynft.com/Resources/tokenlogo.png", - "tags": ["utility-token", "NFT"], - "extensions": { - "discord": "https://discord.com/invite/saintskully", - "twitter": "https://twitter.com/SaintSkullyNFT", - "website": "https://saintskullynft.com/" - } - }, - { - "chainId": 101, - "address": "GKZ1pt5vbMfd3zGxpqfjku12Mw1gp7BaM9eGx9V2fc4b", - "symbol": "JUTSU", - "name": "JUTSU", - "decimals": 7, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GKZ1pt5vbMfd3zGxpqfjku12Mw1gp7BaM9eGx9V2fc4b/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/susanoo50", - "website": "https://susanoo.io/" - } - }, - { - "chainId": 101, - "address": "FidHzAe6A1mvjyX3Y9rSZTsp76bGhL7ii9UpdNiJ92Fm", - "symbol": "POCK", - "name": "Pocket Money", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/MEHColeman/solana-management/master/images/pocket.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "9j7TLzTcdH5UVTB1aSCsM4BvH6u34MmWZQtHxLJF4i4W", - "symbol": "GOO", - "name": "Gooey Kids Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Gooey-Kids/gootoken/main/GOOLOGO.png.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/GooeyKids" - } - }, - { - "chainId": 101, - "address": "BfBSte7UXbxNJpSsE2qB18KGq7ucYEYAsgt8bRB8aaKC", - "symbol": "HSE", - "name": "House Points", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MEHColeman/solana-management/master/images/house-points.png", - "tags": ["utility-token", "social-token"] - }, - { - "chainId": 101, - "address": "G1ZkHFuVCWtdzbWPcdHtNLgcpBT3ajSBNRefMXhDfpof", - "symbol": "DBT", - "name": "Dead Bear Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/G1ZkHFuVCWtdzbWPcdHtNLgcpBT3ajSBNRefMXhDfpof/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "EgGpJgeKbSV1pdDMZW69FvJW4jdvFC5nuMeJQvAYL7z6", - "symbol": "EGPLNT", - "name": "Eggplant", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ryisaac/cryptocubs/main/egplnt.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "AxKxDxkomutHSoj8Wper6KAvw35tmYtsaALBxLih9VfU", - "symbol": "SNAXY", - "name": "SNAXY Token", - "decimals": 10, - "logoURI": "https://raw.githubusercontent.com/SNAXUS/crypto/main/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "FE4HfAPhoJbGXdQiEbimBZYipcMBJRjGWA5CRHsy8453", - "symbol": "WHTE", - "name": "WHITES ELIXIR", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FE4HfAPhoJbGXdQiEbimBZYipcMBJRjGWA5CRHsy8453/logo.png", - "tags": ["Utility-Token"], - "extensions": { - "discord": "https://discord.com/invite/TtjGgkcMyq", - "twitter": "https://twitter.com/WinterWhitesNFT", - "website": "https://winterwhitesnft.com" - } - }, - { - "chainId": 101, - "address": "DMBo73NzTWGrLFFaYCy12h3zPD3zq4GZP4PEWMWBPvft", - "symbol": "DMB", - "name": "DEGEN MONKE BUILDERS Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DMBo73NzTWGrLFFaYCy12h3zPD3zq4GZP4PEWMWBPvft/logo.png" - }, - { - "chainId": 103, - "address": "cLimizHeLvuHKRrrRMpjnYKChycMA2C7FLRc8ArBtBn", - "symbol": "/", - "name": "Climate FireFly Community", - "decimals": 0, - "logoURI": "https://cdn.jsdelivr.net/gh/PurpleZone/NFTs@latest/climfly/climfly.svg", - "tags": [ - "green-coin", - "community-token", - "utility-token", - "colored-token" - ], - "extensions": { - "coingeckoId": "polkadot", - "description": "Fireflies are shining in sync by parametric resonance, and so can we... we adopt the firefly model to coordonate our actions to restorative climate projects --@cryptolake2", - "imageUrl": "https://bafybeibicq2hau6ffvql2kpxz77jj4up5g2ho2exfhx5t22wgfd4fe5pi4.ipfs.nftstorage.link/?ext=svg", - "linkedin": "https://www.linkedin.com/company/eco-organic-technology", - "telegram": "https://t.me/cryptolake2", - "website": "https://PurpleZone.github.io/NFTs/climfly/", - "whitepaper": "https://gateway.ipfs.io/ipns/QmXha6AQpPas4VBnLT7VWX8k6FiQNbtRzz2nGz3aFh6g3r/whitepaper.pdf" - } - }, - { - "chainId": 101, - "address": "FcwjMNe8LJny6V6eN9wGD9fTK4BwjZpEYJVC2csreU8g", - "symbol": "CANDL", - "name": "Candle Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FcwjMNe8LJny6V6eN9wGD9fTK4BwjZpEYJVC2csreU8g/candle-coin.png", - "tags": [ - "utility-token", - "social-token", - "community-token", - "rewards-token" - ], - "extensions": { - "twitter": "https://twitter.com/chartsmaster1", - "website": "https://watchlist101.com/" - } - }, - { - "chainId": 101, - "address": "MeQt5kcmcUD1Zee7GHoHL25RRwP9FwzK6crfJ32Ec7X", - "symbol": "KUJO", - "name": "KujoCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/petern21kite/crypto/main/KUJO.PNG", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HW3WVuUtkitLWUByL8TfgX5gvBZycfciWgJi3PGSWbfa", - "symbol": "DBWL", - "name": "ND Dominion Badges WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Kikser1214/Kikser-rep/main/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/Zm5CvezwTE", - "twitter": "https://twitter.com/NezumiDominion", - "website": "https://www.nezumidominion.com/" - } - }, - { - "chainId": 101, - "address": "5wUhVhUphHXVz6CKmAF7MUrFSwv95soo3WQz59ynotyM", - "symbol": "DCODE", - "name": "SOL Decoder Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5wUhVhUphHXVz6CKmAF7MUrFSwv95soo3WQz59ynotyM/logo.png", - "tags": ["sol-decoder", "utility-token"], - "extensions": { - "discord": "https://discord.gg/sol-decoder", - "twitter": "https://twitter.com/SOL_Decoder", - "website": "https://soldecoder.app" - } - }, - { - "chainId": 101, - "address": "GrRFEaihH1bKvG3QvuiA8nnbLz4oVwPbwbukwqot26Gr", - "symbol": "MAXC", - "name": "MaxCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Tensive8599/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "To7eo6cfLM4y24hRgKmb1ZyArrPCvb2NUa4kiTZGn1L", - "symbol": "CRCWL", - "name": "Cyber Raccoons Club WL Pass", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/To7eo6cfLM4y24hRgKmb1ZyArrPCvb2NUa4kiTZGn1L/CRCWL.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/cyberraccoonsclub", - "twitter": "https://twitter.com/Cyber_Raccoons" - } - }, - { - "chainId": 101, - "address": "GosCFTFRVSry5EnGY5g2SXAfHhF5htLnuGWe6kcKHGCc", - "symbol": "SPRT", - "name": "GLC Spirit", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GosCFTFRVSry5EnGY5g2SXAfHhF5htLnuGWe6kcKHGCc/SPIRIT-LOGO.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://minter.ghostlifeclub.com/" - } - }, - { - "chainId": 101, - "address": "BGXVW4XcsvsRw26m36sTX4dnUHRQidqHT5ruq8Vu7kdB", - "symbol": "TOOT", - "name": "Teaching Our Offspring Traits", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/PNCG1805/tokens/main/TOOTS.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2RKKXHZhaHhSLKKnfzoEu7LxrrZCgrMwFkJQQRaQDL2Y", - "symbol": "VyAu", - "name": "Vy Au LLC", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/YellowLittleTurtle/vyau/main/Logo.png", - "tags": ["community-token", "utility-token", "social-token"], - "extensions": { - "facebook": "https://www.facebook.com/profile.php?id=100005127072098/" - } - }, - { - "chainId": 101, - "address": "c3x8f2dh7Xgs4hUiusYcE7vsFC2CgKFYdeDkS6R5FL5", - "symbol": "BPWL", - "name": "Battlepunk Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/c3x8f2dh7Xgs4hUiusYcE7vsFC2CgKFYdeDkS6R5FL5/logo.png", - "tags": ["nft", "whitelist-token"] - }, - { - "chainId": 101, - "address": "9TiijFqGLwPtfXpmfhD5nSmG6cZyxrDqiMqJtr4hTADH", - "symbol": "STNK", - "name": "Stink Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/bentenavery/Stink-Logo/main/Stink.png", - "tags": ["nft", "social-token"] - }, - { - "chainId": 101, - "address": "AoUHZ5GC1oJo4usygkrvEb7izy6KBaHjRpzKfPv3WUn9", - "symbol": "SHHH", - "name": "Demon", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AoUHZ5GC1oJo4usygkrvEb7izy6KBaHjRpzKfPv3WUn9/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/SpeechlessDemo" - } - }, - { - "chainId": 103, - "address": "cfpsVJTbr5hhnmjmRV9HDm8jWw4kxumgQu74S9USX78", - "symbol": "tons", - "name": "Carbon Footprint Standard (dev)", - "decimals": 12, - "logoURI": "https://cdn.jsdelivr.net/gh/PurpleZone/NFTs@latest/CFS/cfprint.svg", - "tags": [ - "green-coin", - "community-token", - "utility-token", - "colored-token" - ], - "extensions": { - "coingeckoId": "polkadot", - "description": "We want to define a standard for reporting emriession so we avoid double credits --@cryptolake2", - "imageUrl": "https://bafybeida3n3qqvzyuathjngiqaaepyqec6ex47ngac5to2uzwv7nyv327u.ipfs.nftstorage.link/?ext=svg", - "linkedin": "https://www.linkedin.com/company/eco-organic-technology", - "telegram": "https://t.me/cryptolake2", - "website": "https://PurpleZone.github.io/NFTs/CFS/", - "whitepaper": "https://gateway.ipfs.io/ipns/QmdpuWueP9Fv1C3FThRNTGxnWyM7orz8rHmQ8L8YvdUxJo/whitepaper.pdf" - } - }, - { - "chainId": 101, - "address": "FhkAPgX25YZBVTR57HGSbMUVGTt2kMaBPZKRgKbte1Qs", - "symbol": "PORTARI", - "name": "TRANSPORTARI II", - "decimals": 0, - "logoURI": "https://arweave.net/4FkQpGdO7i2uFuVg_BIt1rnMKoZ0pVvx_BqBzxE5whk?ext=png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/BohemiaArtFair" - } - }, - { - "chainId": 101, - "address": "6RSzbYemvP6GbiECfVP2QmN9E7ZYjtCKQ9kEfyDWk67f", - "symbol": "GORE", - "name": "Read2Earn", - "decimals": 9, - "logoURI": "https://i.ibb.co/c2fXCZV/gore-logo.png", - "tags": ["Read2Earn", "GORE"], - "extensions": { - "twitter": "https://twitter.com/SolanaLoops" - } - }, - { - "chainId": 101, - "address": "SMTyWUTw9gFr9MAs8nebGT7a2L65HzGimgB3Sha4Qwa", - "symbol": "SlMtsWL", - "name": "Soul Mates' White List", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SMTyWUTw9gFr9MAs8nebGT7a2L65HzGimgB3Sha4Qwa/logo.png" - }, - { - "chainId": 101, - "address": "7e4c4hi81VBnEnmJyHBa6RaieiqmXzQJ2WWgqqFNe5wY", - "symbol": "GLI", - "name": "G Light Token", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/gintarastamosiunas/Assets/main/Gtokenlogo32x32.png", - "tags": ["utility-token"], - "extensions": { - "medium": "https://medium.com/@glight.network", - "twitter": "https://twitter.com/glight_network", - "website": "https://glight.network/" - } - }, - { - "chainId": 101, - "address": "DeDUUQbkbpVWNMrS2djKrgZm8SjGKcH3YEVcE74yejgs", - "symbol": "AD", - "name": "AKVO DROP", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/AkvoDrop/Akvo_Drop/main/coin.png", - "tags": ["stablecoin", "utility-token"] - }, - { - "chainId": 101, - "address": "CLDnSM5PyjHEHGndxt4WHqa2ehJsnWPcPc4BH5Y9aesB", - "symbol": "AVTUR", - "name": "PLANE-X AVTUR", - "decimals": 9, - "logoURI": "https://arweave.net/HpdUi39S2ixPus6cU74LeoXaKwWcxezIUTQkvVV9XKs", - "tags": ["NFT", "utility-token"], - "extensions": { - "discord": "https://discord.gg/93n7gXEhna", - "twitter": "https://twitter.com/PlaneX_io", - "website": "https://plane-x.io/" - } - }, - { - "chainId": 101, - "address": "GaQ5CaE3b8meA5HAbRbcU61iNNyrHARHBp9qGaQmLbD9", - "symbol": "CHBGA", - "name": "CHB GALP (Ray CHB/USDC)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GaQ5CaE3b8meA5HAbRbcU61iNNyrHARHBp9qGaQmLbD9/logo.png", - "tags": ["LP-token"], - "extensions": { - "twitter": "https://twitter.com/Charactbit", - "website": "https://raydium.io/liquidity/add/?coin0=YtfMZ4jg2ubdz4GasY86iuGjHdo5rCPJnFqgSf8gxAz\u0026coin1=EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\u0026fixed=coin0\u0026ammId=a5sAFsEMzNWZMQViXZWQhg11Wp4QxMS8fCSEYr18Qxi" - } - }, - { - "chainId": 101, - "address": "DPU4yN7jSA6R4bHp4nMq61AWyXufXHhvvfQaNJnnnEST", - "symbol": "CANNAHEMP", - "name": "Cannaverse Token", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DPU4yN7jSA6R4bHp4nMq61AWyXufXHhvvfQaNJnnnEST/logo.png", - "tags": ["utility-token", "governance-token", "gaming", "NFTs"], - "extensions": { - "description": "Cannaverse. Never Smoke Alone!", - "discord": "https://discord.gg/cannaverse", - "instagram": "https://www.instagram.com/cannaversenft/", - "twitter": "https://twitter.com/cannaverse_", - "website": "https://cannaverse.gg" - } - }, - { - "chainId": 101, - "address": "Huay6iZ2RWmTnNo86vCKDM2FYeME3tgPq2hLUoymiGfg", - "symbol": "AAT", - "name": "ANON", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/alphaanons/assets/main/ANON%20TOKEN.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "6a44qufY3eSi6fjFSZix5nw1WxWxDC2gtAZWSj3eaRhE", - "symbol": "BPM", - "name": "Beats Per Minute", - "decimals": 9, - "logoURI": "https://static.wixstatic.com/media/1bf597_94cc05e168bc4ced8f3ac32c2d599779~mv2.png", - "tags": ["community-token", "trading-token", "utility-token"] - }, - { - "chainId": 101, - "address": "9GnyJrLewtJqLRsotkgMpPs5y52jhyAp4L6CZ4fY39oi", - "symbol": "HEUR", - "name": "hEURault", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jeuxder4/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "BKCVqw8B2JhnXw1Nv7K8EMa37EeJRoJeyva14HTijUFb", - "symbol": "AKDC", - "name": "AK Digital Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/aadharshkannan/netsillyassets/main/ak-dc.png", - "tags": ["community-token", "trading-token", "utility-token"], - "extensions": { - "description": "AK Shopping Contoso", - "website": "https://damp-atoll-82810.herokuapp.com" - } - }, - { - "chainId": 101, - "address": "C1WBUPDDuNvFMdwfPRzAhum3HsLUpYEzV78LfZhd6WbJ", - "symbol": "Coop1", - "name": "Coop1", - "decimals": 6, - "logoURI": "https://cooplife.biz/images/Coop1.png", - "tags": ["social-token"], - "extensions": { - "facebook": "https://facebook.com/Coopbit", - "instagram": "https://www.instagram.com/CoopBits", - "twitter": "https://twitter.com/Coopbitss", - "website": "https://coopcrowd.com" - } - }, - { - "chainId": 101, - "address": "7w3wZGWQdEjj2WRj7HevG61rA4hKhTkuNsVusvUunRr4", - "symbol": "BLOOD", - "name": "HUM BLOOD", - "decimals": 9, - "logoURI": "https://github.com/ArthurPaivaT/token-list/blob/main/assets/mainnet/7w3wZGWQdEjj2WRj7HevG61rA4hKhTkuNsVusvUunRr4/logo.png?raw=true" - }, - { - "chainId": 101, - "address": "EAv8t3gCJpZ2M45oZNtpURmiis1H9kgUgfod27fJGrxo", - "symbol": "NFTP", - "name": "NFTU Prove Token - DappieGang Common", - "decimals": 0, - "logoURI": "https://github.com/DappioWonderland/nftu-metadata/raw/main/images/logos/NFTP-DappieGang-Common.png", - "tags": ["utility-token", "NFTU", "DAPG", "Dappio"] - }, - { - "chainId": 101, - "address": "258rJVdsxBBrtWRjUZqvJ4YZrL6byGbDhSKNkf94wwRA", - "symbol": "NFTF", - "name": "NFTU Farm Token - DappieGang Common", - "decimals": 0, - "logoURI": "https://github.com/DappioWonderland/nftu-metadata/raw/main/images/logos/NFTF-DappieGang-Common.png", - "tags": ["utility-token", "NFTU", "DAPG", "Dappio"] - }, - { - "chainId": 101, - "address": "64gXuummCXmQpmCGyufc9zUShSaMgkjTbFyeKeXkBqu2", - "symbol": "NFTP", - "name": "NFTU Prove Token - DappieGang LegendaryRobot", - "decimals": 0, - "logoURI": "https://github.com/DappioWonderland/nftu-metadata/raw/main/images/logos/NFTP-DappieGang-LegendaryRobot.png", - "tags": ["utility-token", "NFTU", "DAPG", "Dappio"] - }, - { - "chainId": 101, - "address": "3wdg53Mxs4k82PSrq93yx953ACvB4CdvDwQpzcjxvk8p", - "symbol": "NFTF", - "name": "NFTU Farm Token - DappieGang LegendaryRobot", - "decimals": 0, - "logoURI": "https://github.com/DappioWonderland/nftu-metadata/raw/main/images/logos/NFTP-DappieGang-LegendaryRobot.png", - "tags": ["utility-token", "NFTU", "DAPG", "Dappio"] - }, - { - "chainId": 101, - "address": "BF948N21VtSvhT8Vj1yQfm3xiNyf5Q94AF1ghbivaFMe", - "symbol": "NFTP", - "name": "NFTU Prove Token - DappieGang LegendaryZombie", - "decimals": 0, - "logoURI": "https://github.com/DappioWonderland/nftu-metadata/raw/main/images/logos/NFTP-DappieGang-LegendaryZombie.png", - "tags": ["utility-token", "NFTU", "DAPG", "Dappio"] - }, - { - "chainId": 101, - "address": "J6TuGUWvpKUHU4EtKvtSdXvR9hSZFcPvV3YcPoeQgppt", - "symbol": "NFTF", - "name": "NFTU Farm Token - DappieGang LegendaryZombie", - "decimals": 0, - "logoURI": "https://github.com/DappioWonderland/nftu-metadata/raw/main/images/logos/NFTF-DappieGang-LegendaryZombie.png", - "tags": ["utility-token", "NFTU", "DAPG", "Dappio"] - }, - { - "chainId": 101, - "address": "GiLh8u8dsEkhy6ovZ4wNtgQucuMR1s1mYpkH36yjTMvt", - "symbol": "NFTP", - "name": "NFTU Prove Token - DappieGang LegendaryPattern", - "decimals": 0, - "logoURI": "https://github.com/DappioWonderland/nftu-metadata/raw/main/images/logos/NFTP-DappieGang-LegendaryPattern.png", - "tags": ["utility-token", "NFTU", "DAPG", "Dappio"] - }, - { - "chainId": 101, - "address": "HuKUZRierfye1R92g43jXFz2Ed3LjznnZMjRhPLg8u2F", - "symbol": "NFTF", - "name": "NFTU Farm Token - DappieGang LegendaryPattern", - "decimals": 0, - "logoURI": "https://github.com/DappioWonderland/nftu-metadata/raw/main/images/logos/NFTF-DappieGang-LegendaryPattern.png", - "tags": ["utility-token", "NFTU", "DAPG", "Dappio"] - }, - { - "chainId": 101, - "address": "Ff1oW6cmB2JJoia8j3GgW5o3LfXgr19PYiEpfnfcrkum", - "symbol": "NFTP", - "name": "NFTU Prove Token - DappieGang LegendaryAlien", - "decimals": 0, - "logoURI": "https://github.com/DappioWonderland/nftu-metadata/raw/main/images/logos/NFTP-DappieGang-LegendaryAlien.png", - "tags": ["utility-token", "NFTU", "DAPG", "Dappio"] - }, - { - "chainId": 101, - "address": "EXUcCXy5LKjpCN1Hmy9u8hq7jP4k7Du6cKNtgMEAKYQN", - "symbol": "NFTF", - "name": "NFTU Farm Token - DappieGang LegendaryAlien", - "decimals": 0, - "logoURI": "https://github.com/DappioWonderland/nftu-metadata/raw/main/images/logos/NFTF-DappieGang-LegendaryAlien.png", - "tags": ["utility-token", "NFTU", "DAPG", "Dappio"] - }, - { - "chainId": 101, - "address": "FXFxM5wmEh34VNQHkwk2k57ExSB4J84imPxxPXp6dcpk", - "symbol": "NFTP", - "name": "NFTU Prove Token - DappieGang Genesis", - "decimals": 0, - "logoURI": "https://github.com/DappioWonderland/nftu-metadata/raw/main/images/logos/NFTP-DappieGang-Genesis.png", - "tags": ["utility-token", "NFTU", "DAPG", "Dappio"] - }, - { - "chainId": 101, - "address": "7fjVDDR1HNHz4d38i7B29cPFfFPESNfAze7yU85EyPas", - "symbol": "NFTF", - "name": "NFTU Farm Token - DappieGang Genesis", - "decimals": 0, - "logoURI": "https://github.com/DappioWonderland/nftu-metadata/raw/main/images/logos/NFTF-DappieGang-Genesis.png", - "tags": ["utility-token", "NFTU", "DAPG", "Dappio"] - }, - { - "chainId": 101, - "address": "8a3NjzFNcXXWRUV243jBs5GwdTSppFbpVo4vDydUtsbB", - "symbol": "WLTUBBY", - "name": "Cryptotubbies WL Token", - "decimals": 1, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8a3NjzFNcXXWRUV243jBs5GwdTSppFbpVo4vDydUtsbB/logo.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "C2ugNeSLkydYYt79qXZA7jUEaiUCrNuQyeVMUHw56gPx", - "symbol": "Coop2", - "name": "Coop2", - "decimals": 6, - "logoURI": "https://cooplife.biz/images/Coop2.png", - "tags": ["social-token"], - "extensions": { - "facebook": "https://facebook.com/Coopbit", - "instagram": "https://www.instagram.com/CoopBits", - "twitter": "https://twitter.com/Coopbitss", - "website": "https://coopcrowd.com" - } - }, - { - "chainId": 101, - "address": "C6qxybmG1gbWttHBXHgVvxhFnq4TjLm6TyAJT4MNR9pF", - "symbol": "SNWLP", - "name": "SolNut WL Pass", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/scarceproject/crypto/main/solnutlogo.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "C3QuMRve5XZMfqJssLmbB4RbQ2tJ3HAcxaHLbWckBnXM", - "symbol": "Coop3", - "name": "Coop3", - "decimals": 6, - "logoURI": "https://cooplife.biz/images/Coop3.png", - "tags": ["social-token"], - "extensions": { - "facebook": "https://facebook.com/Coopbit", - "instagram": "https://www.instagram.com/CoopBits", - "twitter": "https://twitter.com/Coopbitss", - "website": "https://coopcrowd.com" - } - }, - { - "chainId": 101, - "address": "C4ccMsGtaE8SStmphbPBRVLBS2KFfyE1prRYVHmwyxGJ", - "symbol": "Coop4", - "name": "Coop4", - "decimals": 6, - "logoURI": "https://cooplife.biz/images/Coop4.png", - "tags": ["social-token"], - "extensions": { - "facebook": "https://facebook.com/Coopbit", - "instagram": "https://www.instagram.com/CoopBits", - "twitter": "https://twitter.com/Coopbitss", - "website": "https://coopcrowd.com" - } - }, - { - "chainId": 101, - "address": "C5f7KKzxw8x679eG4RTyDomQbpo7pp88ZtejPXtwVhXr", - "symbol": "Coop5", - "name": "Coop5", - "decimals": 6, - "logoURI": "https://cooplife.biz/images/Coop5.png", - "tags": ["social-token"], - "extensions": { - "facebook": "https://facebook.com/Coopbit", - "instagram": "https://www.instagram.com/CoopBits", - "twitter": "https://twitter.com/Coopbitss", - "website": "https://coopcrowd.com" - } - }, - { - "chainId": 101, - "address": "C6HVur5XXfEyfV7T8zh72Qi72f119w3wDurXpQS3Ave7", - "symbol": "Coop6", - "name": "Coop6", - "decimals": 6, - "logoURI": "https://cooplife.biz/images/Coop6.png", - "tags": ["social-token"], - "extensions": { - "facebook": "https://facebook.com/Coopbit", - "instagram": "https://www.instagram.com/CoopBits", - "twitter": "https://twitter.com/Coopbitss", - "website": "https://coopcrowd.com" - } - }, - { - "chainId": 101, - "address": "C7NWtjsboAMU4YjemGpkWT9p4HR6xg14y18A5yduoQGW", - "symbol": "Coop7", - "name": "Coop7", - "decimals": 6, - "logoURI": "https://cooplife.biz/images/Coop7.png", - "tags": ["social-token"], - "extensions": { - "facebook": "https://facebook.com/Coopbit", - "instagram": "https://www.instagram.com/CoopBits", - "twitter": "https://twitter.com/Coopbitss", - "website": "https://coopcrowd.com" - } - }, - { - "chainId": 103, - "address": "CVj2x7ZfVtud4ZTdXJFkuynyu3EqqisexMymD9pzaaXb", - "symbol": "HOTT", - "name": "Test create new token", - "decimals": 0, - "logoURI": "https://github.com/Heorhii90/Surface/blob/master/static/basketbol.png" - }, - { - "chainId": 101, - "address": "wU6JU9RXyrMm8rLBcb8gQPmbaYFVU1xH91WmtqcUnvu", - "symbol": "$LGD", - "name": "Urban Legend WLCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/wU6JU9RXyrMm8rLBcb8gQPmbaYFVU1xH91WmtqcUnvu/logo.png", - "tags": ["Whitelist-token"] - }, - { - "chainId": 101, - "address": "boyeMJs9YsLhEYHHQHcnjHLUvm6ez8dxRMD9y3ttWR4", - "symbol": "BOFYWL", - "name": "Blood of Yakuza Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/boyeMJs9YsLhEYHHQHcnjHLUvm6ez8dxRMD9y3ttWR4/logo.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "3XR1TzVyt5iqQ8Aa3wmjUzSLy61HVnFGL44EVn23Tb9b", - "symbol": "VIRT", - "name": "Virtue", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Vince489/VIRT_Image/main/white-bg%2C-no-shadow-designify.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "F5B6zTXkTf332Qbzid6APVxf9Rj3kpoR5Z4LFwzTJ2q1", - "symbol": "Engine", - "name": "Engine", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/F5B6zTXkTf332Qbzid6APVxf9Rj3kpoR5Z4LFwzTJ2q1/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "8xZsRrhcrEFzhW2o9hYGfVbJA9HV6reTgdzc5TeAXVXn", - "symbol": "NMC", - "name": "NemeCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/alexneme/NemeCoin/main/nmc.png", - "tags": ["social-token", "newera-token"] - }, - { - "chainId": 101, - "address": "3UP1fR9NRPYidmSRaryMwo1wLR2ntaT19kiExbVvA7dP", - "symbol": "NFTP", - "name": "NFTU Prove Token - SovanaEggs Legendary", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/DappioWonderland/nftu-metadata/main/images/logos/NFTP-General-Small.png", - "tags": ["utility-token", "NFTU"] - }, - { - "chainId": 101, - "address": "C9ib14i581Pmm3Axfk8cmh2mVrv43X1W7QRgt5GF6JA2", - "symbol": "NFTP", - "name": "NFTU Prove Token - SovanaEggs NonLegendary", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/DappioWonderland/nftu-metadata/main/images/logos/NFTP-General-Small.png", - "tags": ["utility-token", "NFTU"] - }, - { - "chainId": 101, - "address": "GxvcVeGGPpCnZMskYXmq7JoEvEheP9brayJMMj7HPEZk", - "symbol": "NFTP", - "name": "NFTU Prove Token - MonkeyKingdom NormDiamondBaepe", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/DappioWonderland/nftu-metadata/main/images/logos/NFTP-General-Small.png", - "tags": ["utility-token", "NFTU"] - }, - { - "chainId": 101, - "address": "5CBrWhoqPEGJGGsxE3ciAYmXiKZhFhg4BYC75vyb668X", - "symbol": "NFTP", - "name": "NFTU Prove Token - MonkeyKingdom NormWukong", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/DappioWonderland/nftu-metadata/main/images/logos/NFTP-General-Small.png", - "tags": ["utility-token", "NFTU"] - }, - { - "chainId": 101, - "address": "HkSSKQZhisy2ojxrxURsLgj4sbCMwSPfRwe9iCjRta5j", - "symbol": "NFTP", - "name": "NFTU Prove Token - MonkeyKingdom RareDiamondBaepe", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/DappioWonderland/nftu-metadata/main/images/logos/NFTP-General-Small.png", - "tags": ["utility-token", "NFTU"] - }, - { - "chainId": 101, - "address": "FVAJCnSRVSXoRfZVAXYtVFUEHtupzxJKMEGNscwHhVPG", - "symbol": "NFTP", - "name": "NFTU Prove Token - MonkeyKingdom RareWukong", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/DappioWonderland/nftu-metadata/main/images/logos/NFTP-General-Small.png", - "tags": ["utility-token", "NFTU"] - }, - { - "chainId": 101, - "address": "J3ffpVHxQJCgDWBxH5p9rRh4EcDMEdSWziKiJ1poyWJB", - "symbol": "NFTF", - "name": "NFTU Farm Token - SovanaEggs Legendary", - "decimals": 0, - "logoURI": "https://github.com/DappioWonderland/nftu-metadata/raw/main/images/logos/NFTF-General-Small.png", - "tags": ["utility-token", "NFTU"] - }, - { - "chainId": 101, - "address": "CAtPAw22tx8pTq5H1C4ZDbKvpzTKg9b1t7C8Bv4uJikr", - "symbol": "NFTF", - "name": "NFTU Farm Token - SovanaEggs NonLegendary", - "decimals": 0, - "logoURI": "https://github.com/DappioWonderland/nftu-metadata/raw/main/images/logos/NFTF-General-Small.png", - "tags": ["utility-token", "NFTU"] - }, - { - "chainId": 101, - "address": "HyGK4XbxhQC3mw2Sub6XcGvDNQYp3o2PkqPMqSTxTifU", - "symbol": "NFTF", - "name": "NFTU Farm Token - MonkeyKingdom NormDiamondBaepe", - "decimals": 0, - "logoURI": "https://github.com/DappioWonderland/nftu-metadata/raw/main/images/logos/NFTF-General-Small.png", - "tags": ["utility-token", "NFTU"] - }, - { - "chainId": 101, - "address": "HtDhfAivJjNECiYjXQ7Ae15ap15HjkpHsmTFKabkRCCF", - "symbol": "NFTF", - "name": "NFTU Farm Token - MonkeyKingdom NormWukong", - "decimals": 0, - "logoURI": "https://github.com/DappioWonderland/nftu-metadata/raw/main/images/logos/NFTF-General-Small.png", - "tags": ["utility-token", "NFTU"] - }, - { - "chainId": 101, - "address": "CKFnaPcANz7Qy7ayoifVYystg4CJQBPH4CF9eQDfNs83", - "symbol": "NFTF", - "name": "NFTU Farm Token - MonkeyKingdom RareDiamondBaepe", - "decimals": 0, - "logoURI": "https://github.com/DappioWonderland/nftu-metadata/raw/main/images/logos/NFTF-General-Small.png", - "tags": ["utility-token", "NFTU"] - }, - { - "chainId": 101, - "address": "YyVqftwUkPCdr7c5mZJxzLv4UPTtWsGT3EvtxvvoU4f", - "symbol": "NFTF", - "name": "NFTU Farm Token - MonkeyKingdom RareWukong", - "decimals": 0, - "logoURI": "https://github.com/DappioWonderland/nftu-metadata/raw/main/images/logos/NFTF-General-Small.png", - "tags": ["utility-token", "NFTU"] - }, - { - "chainId": 101, - "address": "6XVqqSjq2WPH1hUpP7X52bhdriPob1m9KZgG2REMhZGa", - "symbol": "DBC", - "name": "Domein Bergen Coin ", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/domeinbergen/dbc/main/logo.png", - "tags": ["community-coin"], - "extensions": { - "website": "https://www.domeinbergen.nl/coin/" - } - }, - { - "chainId": 101, - "address": "HvYf1hTdD177smRDqfFWGByyaa3Cm5viUH3eUyHwDNxg", - "symbol": "SUSSY", - "name": "Sussy Cat Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HvYf1hTdD177smRDqfFWGByyaa3Cm5viUH3eUyHwDNxg/logosussy.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "DGXtHxKMFhb82RsqihyEHksgWWe3DXBXEvKjz24JruAP", - "symbol": "WOB", - "name": "WOB Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/tradefortendies/tokens/master/wobtoken-small.gif", - "tags": ["utlity-token", "community-token"], - "extensions": { - "discord": "https://discord.gg/wobbleverse", - "twitter": "https://twitter.com/Wobblebug", - "website": "https://www.wobblebug.info" - } - }, - { - "chainId": 101, - "address": "J3mhAVvPLqGWnnPqxqacpjdXHMvw8W9xTQLGDVXsvXWk", - "symbol": "SLC", - "name": "Solaris Coin ", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Walanm/solaris-token/main/naodaprasaberainda.png", - "tags": ["community-coin"] - }, - { - "chainId": 101, - "address": "C8heG3mgqJD9intRmmHW2TdrRzq7bpY6C8rdAFTvDs92", - "symbol": "Coop8", - "name": "Coop8", - "decimals": 6, - "logoURI": "https://cooplife.biz/images/Coop8.png", - "tags": ["social-token"], - "extensions": { - "facebook": "https://facebook.com/Coopbit", - "instagram": "https://www.instagram.com/CoopBits", - "twitter": "https://twitter.com/Coopbitss", - "website": "https://coopcrowd.com" - } - }, - { - "chainId": 101, - "address": "C9AzQsLHL5ZaiAKbA6NUSkHBLNb39D728XyhXPAsdX9i", - "symbol": "Coop9", - "name": "Coop9", - "decimals": 6, - "logoURI": "https://cooplife.biz/images/Coop9.png", - "tags": ["social-token"], - "extensions": { - "facebook": "https://facebook.com/Coopbit", - "instagram": "https://www.instagram.com/CoopBits", - "twitter": "https://twitter.com/Coopbitss", - "website": "https://coopcrowd.com" - } - }, - { - "chainId": 101, - "address": "C7711kBpo4GUigL4gPEkzzMoAFWQ7tseyi7vrNn7TkpU", - "symbol": "Coop77", - "name": "Coop77", - "decimals": 6, - "logoURI": "https://cooplife.biz/images/Coop77.png", - "tags": ["social-token"], - "extensions": { - "facebook": "https://facebook.com/Coopbit", - "instagram": "https://www.instagram.com/CoopBits", - "twitter": "https://twitter.com/Coopbitss", - "website": "https://coopcrowd.com" - } - }, - { - "chainId": 101, - "address": "C88ZBBwdwGfN1BmMdGuNpCUrtS8Uh1i2zVFyhctP1j13", - "symbol": "Coop88", - "name": "Coop88", - "decimals": 6, - "logoURI": "https://cooplife.biz/images/Coop88.png", - "tags": ["social-token"], - "extensions": { - "facebook": "https://facebook.com/Coopbit", - "instagram": "https://www.instagram.com/CoopBits", - "twitter": "https://twitter.com/Coopbitss", - "website": "https://coopcrowd.com" - } - }, - { - "chainId": 101, - "address": "CAXHfpDjvMMNMBNkQJtRGKhy8rRik7rWVpkjPMwEhb8Z", - "symbol": "CoopA", - "name": "CoopA", - "decimals": 6, - "logoURI": "https://cooplife.biz/images/CoopA.png", - "tags": ["social-token"], - "extensions": { - "facebook": "https://facebook.com/Coopbit", - "instagram": "https://www.instagram.com/CoopBits", - "twitter": "https://twitter.com/Coopbitss", - "website": "https://coopcrowd.com" - } - }, - { - "chainId": 101, - "address": "CBZTD4NipeyTmUE1iUSAqXEohvQgoWvxAedgdJRCCYUz", - "symbol": "CoopB", - "name": "CoopB", - "decimals": 6, - "logoURI": "https://cooplife.biz/images/CoopB.png", - "tags": ["social-token"], - "extensions": { - "facebook": "https://facebook.com/Coopbit", - "instagram": "https://www.instagram.com/CoopBits", - "twitter": "https://twitter.com/Coopbitss", - "website": "https://coopcrowd.com" - } - }, - { - "chainId": 101, - "address": "CCiQgNvzgB58CB8drzXnS2BeYGFFatLiCnpNra2VY3CD", - "symbol": "CoopC", - "name": "CoopC", - "decimals": 6, - "logoURI": "https://cooplife.biz/images/CoopC.png", - "tags": ["social-token"], - "extensions": { - "facebook": "https://facebook.com/Coopbit", - "instagram": "https://www.instagram.com/CoopBits", - "twitter": "https://twitter.com/Coopbitss", - "website": "https://coopcrowd.com" - } - }, - { - "chainId": 101, - "address": "CDJmSZQSADF26A7mZwWXXPr54FP4At67Hnd6GDYfHdpN", - "symbol": "CoopD", - "name": "CoopD", - "decimals": 6, - "logoURI": "https://cooplife.biz/images/CoopD.png", - "tags": ["social-token"], - "extensions": { - "facebook": "https://facebook.com/Coopbit", - "instagram": "https://www.instagram.com/CoopBits", - "twitter": "https://twitter.com/Coopbitss", - "website": "https://coopcrowd.com" - } - }, - { - "chainId": 101, - "address": "CEwTat9GvXK5VQR7Wsua86xZapRfftqEZdpDEDedEeRT", - "symbol": "CoopE", - "name": "CoopE", - "decimals": 6, - "logoURI": "https://cooplife.biz/images/CoopE.png", - "tags": ["social-token"], - "extensions": { - "facebook": "https://facebook.com/Coopbit", - "instagram": "https://www.instagram.com/CoopBits", - "twitter": "https://twitter.com/Coopbitss", - "website": "https://coopcrowd.com" - } - }, - { - "chainId": 101, - "address": "CFcAr92YJ7v1adUxrM9RuD9JeuuAdECByUuQbU8Jqrkm", - "symbol": "CoopF", - "name": "CoopF", - "decimals": 6, - "logoURI": "https://cooplife.biz/images/CoopF.png", - "tags": ["social-token"], - "extensions": { - "facebook": "https://facebook.com/Coopbit", - "instagram": "https://www.instagram.com/CoopBits", - "twitter": "https://twitter.com/Coopbitss", - "website": "https://coopcrowd.com" - } - }, - { - "chainId": 101, - "address": "CGBQmtuJx66qPY6J7LivCjzAouGXSrdAD5Rni1wGnfCa", - "symbol": "CoopG", - "name": "CoopG", - "decimals": 6, - "logoURI": "https://cooplife.biz/images/CoopG.png", - "tags": ["social-token"], - "extensions": { - "facebook": "https://facebook.com/Coopbit", - "instagram": "https://www.instagram.com/CoopBits", - "twitter": "https://twitter.com/Coopbitss", - "website": "https://coopcrowd.com" - } - }, - { - "chainId": 101, - "address": "CHk83wcWWrkRDSvAQMqrGBAg53jzzf51er7VUALR6d6o", - "symbol": "CoopH", - "name": "CoopH", - "decimals": 6, - "logoURI": "https://cooplife.biz/images/CoopH.png", - "tags": ["social-token"], - "extensions": { - "facebook": "https://facebook.com/Coopbit", - "instagram": "https://www.instagram.com/CoopBits", - "twitter": "https://twitter.com/Coopbitss", - "website": "https://coopcrowd.com" - } - }, - { - "chainId": 101, - "address": "Ciwo8LtuTLRoYcVP9YiQFLSaRVu3CLKfdWWygNXPGKex", - "symbol": "CoopI", - "name": "CoopI", - "decimals": 6, - "logoURI": "https://cooplife.biz/images/CoopI.png", - "tags": ["social-token"], - "extensions": { - "facebook": "https://facebook.com/Coopbit", - "instagram": "https://www.instagram.com/CoopBits", - "twitter": "https://twitter.com/Coopbitss", - "website": "https://coopcrowd.com" - } - }, - { - "chainId": 101, - "address": "CJXVyMT9TTr79bktNijBFBLGvWroZqz6Xjq9jr3CgFss", - "symbol": "CoopJ", - "name": "CoopJ", - "decimals": 6, - "logoURI": "https://cooplife.biz/images/CoopJ.png", - "tags": ["social-token"], - "extensions": { - "facebook": "https://facebook.com/Coopbit", - "instagram": "https://www.instagram.com/CoopBits", - "twitter": "https://twitter.com/Coopbitss", - "website": "https://coopcrowd.com" - } - }, - { - "chainId": 101, - "address": "CKyYdbJsJ1gMJCkX3v6TUV5yeQD6q8UjKgV4gxTmhYY", - "symbol": "CoopK", - "name": "CoopK", - "decimals": 6, - "logoURI": "https://cooplife.biz/images/CoopK.png", - "tags": ["social-token"], - "extensions": { - "facebook": "https://facebook.com/Coopbit", - "instagram": "https://www.instagram.com/CoopBits", - "twitter": "https://twitter.com/Coopbitss", - "website": "https://coopcrowd.com" - } - }, - { - "chainId": 101, - "address": "CLF375njKDsP4AZLavDTVciHoJdHnjp25k3TU64vF3QU", - "symbol": "CoopL", - "name": "CoopL", - "decimals": 6, - "logoURI": "https://cooplife.biz/images/CoopL.png", - "tags": ["social-token"], - "extensions": { - "facebook": "https://facebook.com/Coopbit", - "instagram": "https://www.instagram.com/CoopBits", - "twitter": "https://twitter.com/Coopbitss", - "website": "https://coopcrowd.com" - } - }, - { - "chainId": 101, - "address": "CMWK3ogBj3bevy3cyf8bzFrSmm7uC2oYSA7Dm9vns7Ux", - "symbol": "CoopM", - "name": "CoopM", - "decimals": 6, - "logoURI": "https://cooplife.biz/images/CoopM.png", - "tags": ["social-token"], - "extensions": { - "facebook": "https://facebook.com/Coopbit", - "instagram": "https://www.instagram.com/CoopBits", - "twitter": "https://twitter.com/Coopbitss", - "website": "https://coopcrowd.com" - } - }, - { - "chainId": 101, - "address": "CNYQBfnQeM79yDmtNoEuUBo44HAuu7tjY7Y9X8GG7M6d", - "symbol": "CoopN", - "name": "CoopN", - "decimals": 6, - "logoURI": "https://cooplife.biz/images/CoopN.png", - "tags": ["social-token"], - "extensions": { - "facebook": "https://facebook.com/Coopbit", - "instagram": "https://www.instagram.com/CoopBits", - "twitter": "https://twitter.com/Coopbitss", - "website": "https://coopcrowd.com" - } - }, - { - "chainId": 101, - "address": "CowyWJ6tH1N15Ta6uxh26iGrSwxvenXEiVbdT8imcg8w", - "symbol": "CoopO", - "name": "CoopO", - "decimals": 6, - "logoURI": "https://cooplife.biz/images/CoopO.png", - "tags": ["social-token"], - "extensions": { - "facebook": "https://facebook.com/Coopbit", - "instagram": "https://www.instagram.com/CoopBits", - "twitter": "https://twitter.com/Coopbitss", - "website": "https://coopcrowd.com" - } - }, - { - "chainId": 101, - "address": "CPY2RV4zetHSW9riP84zo7tE36QKeQvfKikhzzfpCUbw", - "symbol": "CoopP", - "name": "CoopP", - "decimals": 6, - "logoURI": "https://cooplife.biz/images/CoopP.png", - "tags": ["social-token"], - "extensions": { - "facebook": "https://facebook.com/Coopbit", - "instagram": "https://www.instagram.com/CoopBits", - "twitter": "https://twitter.com/Coopbitss", - "website": "https://coopcrowd.com" - } - }, - { - "chainId": 101, - "address": "CQykKhnPGSWTs8UYnzxj5o43fQp8m7DXYNCD7NPVuQzv", - "symbol": "CoopQ", - "name": "CoopQ", - "decimals": 6, - "logoURI": "https://cooplife.biz/images/CoopQ.png", - "tags": ["social-token"], - "extensions": { - "facebook": "https://facebook.com/Coopbit", - "instagram": "https://www.instagram.com/CoopBits", - "twitter": "https://twitter.com/Coopbitss", - "website": "https://coopcrowd.com" - } - }, - { - "chainId": 101, - "address": "CRmsDWECgdLPzWXPJcfcadCopYbWmPGqJEGsYjwy1yAu", - "symbol": "CoopR", - "name": "CoopR", - "decimals": 6, - "logoURI": "https://cooplife.biz/images/CoopR.png", - "tags": ["social-token"], - "extensions": { - "facebook": "https://facebook.com/Coopbit", - "instagram": "https://www.instagram.com/CoopBits", - "twitter": "https://twitter.com/Coopbitss", - "website": "https://coopcrowd.com" - } - }, - { - "chainId": 101, - "address": "CSYTyzJipx1PxtTHkyZvhZurJgdZZgy3oNsHvtXf3mSd", - "symbol": "CoopS", - "name": "CoopS", - "decimals": 6, - "logoURI": "https://cooplife.biz/images/CoopS.png", - "tags": ["social-token"], - "extensions": { - "facebook": "https://facebook.com/Coopbit", - "instagram": "https://www.instagram.com/CoopBits", - "twitter": "https://twitter.com/Coopbitss", - "website": "https://coopcrowd.com" - } - }, - { - "chainId": 101, - "address": "CTTUQUdARq51Tzb3SdcGrdM6tA95HRnCHjU7FWuMtnTq", - "symbol": "CoopT", - "name": "CoopT", - "decimals": 6, - "logoURI": "https://cooplife.biz/images/CoopT.png", - "tags": ["social-token"], - "extensions": { - "facebook": "https://facebook.com/Coopbit", - "instagram": "https://www.instagram.com/CoopBits", - "twitter": "https://twitter.com/Coopbitss", - "website": "https://coopcrowd.com" - } - }, - { - "chainId": 101, - "address": "CUpT1zW1Ri8xNbSKyxkU46E82k3TKdpRqAy3hGgkQ21D", - "symbol": "CoopU", - "name": "CoopU", - "decimals": 6, - "logoURI": "https://cooplife.biz/images/CoopU.png", - "tags": ["social-token"], - "extensions": { - "facebook": "https://facebook.com/Coopbit", - "instagram": "https://www.instagram.com/CoopBits", - "twitter": "https://twitter.com/Coopbitss", - "website": "https://coopcrowd.com" - } - }, - { - "chainId": 101, - "address": "CVi6UYVRbsVuiNzs5CTZfMwbcDWYKrBDRSVnFN4s4KTc", - "symbol": "CoopV", - "name": "CoopV", - "decimals": 6, - "logoURI": "https://cooplife.biz/images/CoopV.png", - "tags": ["social-token"], - "extensions": { - "facebook": "https://facebook.com/Coopbit", - "instagram": "https://www.instagram.com/CoopBits", - "twitter": "https://twitter.com/Coopbitss", - "website": "https://coopcrowd.com" - } - }, - { - "chainId": 101, - "address": "CWJj2JNANtpka6RcTSDgitLaKgajcjT4d8tBKiNhYsDn", - "symbol": "CoopW", - "name": "CoopW", - "decimals": 6, - "logoURI": "https://cooplife.biz/images/CoopW.png", - "tags": ["social-token"], - "extensions": { - "facebook": "https://facebook.com/Coopbit", - "instagram": "https://www.instagram.com/CoopBits", - "twitter": "https://twitter.com/Coopbitss", - "website": "https://coopcrowd.com" - } - }, - { - "chainId": 101, - "address": "CXS8SG1uokQXriMzFjBD1XEyQBf4Ev56etDX5yMmLxXa", - "symbol": "CoopX", - "name": "CoopX", - "decimals": 6, - "logoURI": "https://cooplife.biz/images/CoopX.png", - "tags": ["social-token"], - "extensions": { - "facebook": "https://facebook.com/Coopbit", - "instagram": "https://www.instagram.com/CoopBits", - "twitter": "https://twitter.com/Coopbitss", - "website": "https://coopcrowd.com" - } - }, - { - "chainId": 101, - "address": "CYWjFKVhMCNH3bYKr9461X15DuxpNHsTuQmoY3csp7Gk", - "symbol": "CoopY", - "name": "CoopY", - "decimals": 6, - "logoURI": "https://cooplife.biz/images/CoopY.png", - "tags": ["social-token"], - "extensions": { - "facebook": "https://facebook.com/Coopbit", - "instagram": "https://www.instagram.com/CoopBits", - "twitter": "https://twitter.com/Coopbitss", - "website": "https://coopcrowd.com" - } - }, - { - "chainId": 101, - "address": "CZy33ScavvvsRL7Tr6wBwB17zuBYHx8bbQUn7pJhD5wQ", - "symbol": "CoopZ", - "name": "CoopZ", - "decimals": 6, - "logoURI": "https://cooplife.biz/images/CoopZ.png", - "tags": ["social-token"], - "extensions": { - "facebook": "https://facebook.com/Coopbit", - "instagram": "https://www.instagram.com/CoopBits", - "twitter": "https://twitter.com/Coopbitss", - "website": "https://coopcrowd.com" - } - }, - { - "chainId": 101, - "address": "CBitZh1j9sh3eo9wrEdAD3Zvd25poENGZryghmTWGoNf", - "symbol": "CoopBit", - "name": "CoopBit", - "decimals": 6, - "logoURI": "https://cooplife.biz/images/CoopBit.png", - "tags": ["social-token"], - "extensions": { - "facebook": "https://facebook.com/Coopbit", - "instagram": "https://www.instagram.com/CoopBits", - "twitter": "https://twitter.com/Coopbitss", - "website": "https://coopcrowd.com" - } - }, - { - "chainId": 101, - "address": "Coopxohj8JUx8D7tk4wE9yVtmmHTqofbTscNN8pThbhX", - "symbol": "CoopCrowd", - "name": "CoopCrowd", - "decimals": 6, - "logoURI": "https://cooplife.biz/images/CoopCrowd.png", - "tags": ["social-token"], - "extensions": { - "facebook": "https://facebook.com/Coopbit", - "instagram": "https://www.instagram.com/CoopBits", - "twitter": "https://twitter.com/Coopbitss", - "website": "https://coopcrowd.com" - } - }, - { - "chainId": 101, - "address": "CoopRfrqrYzhKo8h9KdhZZ8bkzBfVRMd7YZW5XL2BYiV", - "symbol": "CoopLife", - "name": "CoopLife", - "decimals": 6, - "logoURI": "https://cooplife.biz/images/CoopLife.png", - "tags": ["social-token"], - "extensions": { - "facebook": "https://facebook.com/Coopbit", - "instagram": "https://www.instagram.com/CoopBits", - "twitter": "https://twitter.com/Coopbitss", - "website": "https://coopcrowd.com" - } - }, - { - "chainId": 101, - "address": "CpAYxMwTkvbDLnN1uxFCMRCsNN4UMraUrpbM6qiSz3UN", - "symbol": "CoopPay", - "name": "CoopPay", - "decimals": 6, - "logoURI": "https://cooplife.biz/images/CoopPay.png", - "tags": ["social-token"], - "extensions": { - "facebook": "https://facebook.com/Coopbit", - "instagram": "https://www.instagram.com/CoopBits", - "twitter": "https://twitter.com/Coopbitss", - "website": "https://coopcrowd.com" - } - }, - { - "chainId": 101, - "address": "CWLTpcfrBnmn4KfWMuSRRhxJax8pdX4fn7dhooARvhLb", - "symbol": "CoopWallet", - "name": "CoopWallet", - "decimals": 6, - "logoURI": "https://cooplife.biz/images/CoopWallet.png", - "tags": ["social-token"], - "extensions": { - "facebook": "https://facebook.com/Coopbit", - "instagram": "https://www.instagram.com/CoopBits", - "twitter": "https://twitter.com/Coopbitss", - "website": "https://coopcrowd.com" - } - }, - { - "chainId": 101, - "address": "5MBu3PwyitjSmwEJmjEJ2MezX899F3KeWVnc5FeKLPab", - "symbol": "MLAB", - "name": "MALUNGO LAB TOKEN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5MBu3PwyitjSmwEJmjEJ2MezX899F3KeWVnc5FeKLPab/logo.png", - "tags": ["community-token", "Utility-token", "NFT-Token", "NFT"], - "extensions": { - "twitter": "https://twitter.com/MALUNGO_LAB" - } - }, - { - "chainId": 101, - "address": "ExLjCck16LmtH87hhCAmTk4RWv7getYQeGhLvoEfDLrH", - "symbol": "SWRD", - "name": "SWRD", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ExLjCck16LmtH87hhCAmTk4RWv7getYQeGhLvoEfDLrH/logo.png" - }, - { - "chainId": 101, - "address": "Bz9Sk66n3SqfEUNwJWMFAbdmDz3CXBbS9RWbk9qECyFu", - "symbol": "SPECTRE", - "name": "SPECTRE", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Bz9Sk66n3SqfEUNwJWMFAbdmDz3CXBbS9RWbk9qECyFu/logo.png", - "tags": ["NFT", "utility-token"], - "extensions": { - "discord": "https://discord.gg/KGEA8YsH8A", - "twitter": "https://twitter.com/ghoulies_souls" - } - }, - { - "chainId": 101, - "address": "8rTEdhm9EPtmgwkePgqnguNNRGyiGkHYvgeAnEE7k1jk", - "symbol": "MONA", - "name": "Monaco Protocol Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8rTEdhm9EPtmgwkePgqnguNNRGyiGkHYvgeAnEE7k1jk/logo.png" - }, - { - "chainId": 101, - "address": "FmAugjcE35w4mLbj6i2e3aSnsWSwb5G8ZTPjwVKreSba", - "symbol": "MONACO", - "name": "Monaco Protocol", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8rTEdhm9EPtmgwkePgqnguNNRGyiGkHYvgeAnEE7k1jk/logo.png" - }, - { - "chainId": 101, - "address": "EG55kTkxsmpJFb6p2qafVC35XJ8Xd1kyJ53xhBNGzeyn", - "symbol": "FUCK", - "name": "For Then Solana", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EG55kTkxsmpJFb6p2qafVC35XJ8Xd1kyJ53xhBNGzeyn/logo.png", - "tags": ["community-token"], - "extensions": { - "twitter": "https://twitter.com/nftfts", - "website": "https://ftsolana.com" - } - }, - { - "chainId": 103, - "address": "HmitieGZtQ7LRmiFBAA66Yd9uv1Wv1B4qkyLWiK2EeJ5", - "symbol": "WOOD", - "name": "WOOD - Metaversium", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/dwrx/token-list/main/assets/mainnet/5Ns2m2oBWyj7Kz4VgGgenHZA5dUTJ224AbtjUjaDB651/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/metaversiumgame", - "website": "https://metaversium.io/" - } - }, - { - "chainId": 103, - "address": "3jczzBwwGB8EMjWLi5DKRatFLtFYCSXBKY46NpqX2fPv", - "symbol": "STONE", - "name": "STONE - Metaversium", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/dwrx/token-list/main/assets/mainnet/2NzAWwLj8GcW3wT9LHSdsyeMTMPCdNp23EAg2YwrLjCz/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/metaversiumgame", - "website": "https://metaversium.io/" - } - }, - { - "chainId": 103, - "address": "6dZH7pLMqyKPMvgh8zCxPgbrK5kv2EJyqwDFn2tw5i7t", - "symbol": "IRON", - "name": "IRON - Metaversium", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/dwrx/token-list/main/assets/mainnet/ExKEMV2Z9dSHdRg6AkcFMXLPUqzta7zcyK2UQk3a4soy/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/metaversiumgame", - "website": "https://metaversium.io/" - } - }, - { - "chainId": 103, - "address": "2VRRsGmeEBp4LyqWqMVtjq9F1yGoQ4SGsrjd4kP49tUQ", - "symbol": "GRAIN", - "name": "GRAIN - Metaversium", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/dwrx/token-list/main/assets/mainnet/2VRRsGmeEBp4LyqWqMVtjq9F1yGoQ4SGsrjd4kP49tUQ/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/metaversiumgame", - "website": "https://metaversium.io/" - } - }, - { - "chainId": 101, - "address": "8Mu5tLNnDvkZgyZVpD4h3SLvxbptHwKBMMLuHRQmsjPP", - "symbol": "RNG", - "name": "Renegade", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8Mu5tLNnDvkZgyZVpD4h3SLvxbptHwKBMMLuHRQmsjPP/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://myrenegade.net" - } - }, - { - "chainId": 101, - "address": "YztUyLrMBQLmQSQAcmxG1B6VKq1JPkzWGcH6ueDFeFp", - "symbol": "TVS", - "name": "TheVisionariesWL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/YztUyLrMBQLmQSQAcmxG1B6VKq1JPkzWGcH6ueDFeFp/logo.png", - "tags": ["nfts"], - "extensions": { - "discord": "https://discord.com/invite/WFd3tCV48v", - "twitter": "https://twitter.com/Visionaries_SOL", - "website": "https://thevisionaries-solana.com/" - } - }, - { - "chainId": 101, - "address": "CnDTSapPuQqSV18uohWSJvKF7dvASj1yksMJsMbDTgTJ", - "symbol": "VIVE", - "name": "Vive", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CnDTSapPuQqSV18uohWSJvKF7dvASj1yksMJsMbDTgTJ/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/d7FYAQuxH3", - "twitter": "https://twitter.com/ProjectPigeons", - "website": "https://www.projectpigeon.io" - } - }, - { - "chainId": 101, - "address": "G6yUqWAUp6p8PvCV9uB1D5iqV2eHm8rQM1vxcJHF8db5", - "symbol": "BCAP", - "name": "NukaBots Bottle Cap Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Nes7777/assetslogo/main/logo.png" - }, - { - "chainId": 101, - "address": "A3VPCwZxKUu1KFLBiJqspPyqUTBCEAajoTxMd2tURFtd", - "symbol": "BOW", - "name": "Bow Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/A3VPCwZxKUu1KFLBiJqspPyqUTBCEAajoTxMd2tURFtd/logo.png" - }, - { - "chainId": 101, - "address": "wBUGLCwGFqrP5z8CzKuqcmZtzJdbzni2JckyKQsS4Jz", - "symbol": "wBUG", - "name": "Wobblebug WL Token l Mint 9 June", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/wBUGLCwGFqrP5z8CzKuqcmZtzJdbzni2JckyKQsS4Jz/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/Wobblebug", - "website": "https://www.wobblebug.info/" - } - }, - { - "chainId": 101, - "address": "DDthcF7L3ALPZGk3WKbKEBxhXceTtVXZshD9qSFJKfGd", - "symbol": "SOUL", - "name": "SOUL", - "decimals": 9, - "logoURI": "https://github.com/ArthurPaivaT/token-list/blob/main/assets/mainnet/DDthcF7L3ALPZGk3WKbKEBxhXceTtVXZshD9qSFJKfGd/logo.png?raw=true" - }, - { - "chainId": 101, - "address": "YEDif6VtDyJMV3ue4cWSN1f8baZVCScedtXiPoroZFC", - "symbol": "ITMAFIA", - "name": "Italian Mafia Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/YEDif6VtDyJMV3ue4cWSN1f8baZVCScedtXiPoroZFC/italianmafiatoken.jpg", - "tags": ["social-token"], - "extensions": { - "description": "Funny italian mafia token, nothing serious, nothing special." - } - }, - { - "chainId": 101, - "address": "2XdP7FPDZa6RM6j96VbjxBfzKh2QkKDfENZDd7gocxjG", - "symbol": "BLOOD", - "name": "HOM BLOOD", - "decimals": 9, - "logoURI": "https://github.com/ArthurPaivaT/token-list/blob/main/assets/mainnet/2XdP7FPDZa6RM6j96VbjxBfzKh2QkKDfENZDd7gocxjG/logo.png?raw=true" - }, - { - "chainId": 101, - "address": "9d12fy7zmCrhixEXrt4j22yydmAENVPBcr5ZGb3QWSuM", - "symbol": "LNC", - "name": "LINCOIN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/khairfa/lincoin-logo/main/logo.png", - "tags": ["utility-token", "community-token", "NFT", "Meta"], - "extensions": { - "website": "https://lincoin.org" - } - }, - { - "chainId": 101, - "address": "2mTCc7PKM5Sm999ogLUzbxyaKbwrMsGofSZNSk1XdE1h", - "symbol": "BDTX", - "name": "Block Duelers", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2mTCc7PKM5Sm999ogLUzbxyaKbwrMsGofSZNSk1XdE1h/logo.png", - "tags": ["Gaming", "NFTs"], - "extensions": { - "website": "https://blockduelers.io" - } - }, - { - "chainId": 101, - "address": "6ABQdaTwRvmacto7aeRBGghS6Pxctd6cFGL8gDdwV1dd", - "symbol": "XTR", - "name": "Extra Reality", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6ABQdaTwRvmacto7aeRBGghS6Pxctd6cFGL8gDdwV1dd/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/TRECO_XTR", - "website": "https://tradecoin.space/" - } - }, - { - "chainId": 101, - "address": "7fporwTn4bFPmFptdWtJKbKWf8FXWBMRwwB8maTJJTw4", - "symbol": "CRYGT", - "name": "Crypto Guru Token", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7fporwTn4bFPmFptdWtJKbKWf8FXWBMRwwB8maTJJTw4/logo.png", - "tags": [ - "social-token", - "underground-economy", - "fun-token", - "digital-coin" - ] - }, - { - "chainId": 101, - "address": "3FGQFHTXCQ2LcqXMJRzHeU1gUwJfQLvXmv9YNXiqbA4h", - "symbol": "BOTH", - "name": "Sereyboth", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3FGQFHTXCQ2LcqXMJRzHeU1gUwJfQLvXmv9YNXiqbA4h/logo.png" - }, - { - "chainId": 101, - "address": "C1oKvxgmSFZauwK4s7Y3ohAwQyYsa2qmGkMGvgJdf8TP", - "symbol": "Coop10", - "name": "Coop10", - "decimals": 6, - "logoURI": "https://cooplife.biz/images/Coop10.png", - "tags": ["social-token"], - "extensions": { - "facebook": "https://facebook.com/Coopbit", - "instagram": "https://www.instagram.com/CoopBits", - "twitter": "https://twitter.com/Coopbitss", - "website": "https://coopcrowd.com" - } - }, - { - "chainId": 101, - "address": "EXCALQoRV4ABi29qJN43G1yCkZKHX9Q6oLN2StFc1vX", - "symbol": "EXCAL", - "name": "EXCAL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EXCALQoRV4ABi29qJN43G1yCkZKHX9Q6oLN2StFc1vX/logo.png" - }, - { - "chainId": 101, - "address": "kshrEkxuc7zPAvLxvabxoERKxK6BfariPcjBoiHvM7B", - "symbol": "SCROLL", - "name": "StepN Scroll", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/kshrEkxuc7zPAvLxvabxoERKxK6BfariPcjBoiHvM7B/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://stepn.guide/" - } - }, - { - "chainId": 101, - "address": "G9sWx5Mm1dxJr2Sx34CCrwxJi9CBfKZki1Lkm7V1zHnV", - "symbol": "Noiz", - "name": "Noiz", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/ruginc/token-list/main/assets/mainnet/G9sWx5Mm1dxJr2Sx34CCrwxJi9CBfKZki1Lkm7V1zHnV/noiz.png", - "tags": ["social-token", "community-token", "utility-token"], - "extensions": { - "twitter": "https://twitter.com/CorruptedDogs", - "website": "https://corrupted.dog" - } - }, - { - "chainId": 101, - "address": "CwHHQVVYFmChNA4ryqBJ32T3m4DhWyz5dsXRayCiyBcg", - "symbol": "Zeteo", - "name": "Universal Zetetic Society", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/facebooktoken/zuckerberg/main/logo.png", - "tags": [ - "governance-token", - "Great-Reset-token", - "9th-Baronet-token", - "NFT-coin", - "zues369-token", - "Agartha-token", - "IHS-token", - "Ladyblount-token", - "zeteticus-token", - "ZionGenG-token" - ], - "extensions": { - "description": "Made by Carlos Verbelen for The Great Reset W.E.F for Catholic Zeteticus Societas you will be happy with nothing only 1usdt = 2 Zeteo tokens, Token info follows - Universal Zetetic Society, Founded in New York in Sept. 1873, and in London in Dec 1873, as The Zetetic Society, by Parallax, is now firmly established by E.A.M.B., (Lady Blount), Ed. of The Earth, throughout the civilized world. Many local branches of the organization have been started, during the past five years, in all the principal countries, with the exception of Russia, where The Earth is not allowed to circulate. PRESIDENT: LADY E. A. M. BLOUNT, Vice-PRESIDENT: C. De LACY EVANS, (M.R.C.S., Ph. D etc late Surgeon, Gold Coast Author of Errors of Astronomy ", - "discord": "https://discord.gg/3yNwFyPzUb", - "facebook": "https://www.facebook.com/CarlosVerbelen", - "github": "https://github.com/Universal-Zetetic-Society", - "instagram": "https://www.instagram.com/moonbootscapital/", - "linkedin": "https://search.brave.com/search?q=Carlos+Verbelen\u0026source=desktop", - "medium": "https://joinentre.com/?referredBy=el0nmusk", - "twitter": "https://twitter.com/dionysus3301", - "website": "https://linktr.ee/Zues369" - } - }, - { - "chainId": 101, - "address": "4ihMnPfPCRqHiQHB1pjqX43ZUMoGow9GFobhWgjVa1Wm", - "symbol": "EYEZ", - "name": "EYEZ", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4ihMnPfPCRqHiQHB1pjqX43ZUMoGow9GFobhWgjVa1Wm/logoeyez.svg", - "tags": ["eyez"], - "extensions": { - "discord": "https://discord.com/invite/solluminati", - "twitter": "https://twitter.com/SolluminatiNFT", - "website": "https://solluminati.io" - } - }, - { - "chainId": 101, - "address": "61vUk1iELKFMbSm3aAd9uzoV7tdHGaTLC5Z7Nuzg1FoX", - "symbol": "FROG", - "name": "FROG Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/61vUk1iELKFMbSm3aAd9uzoV7tdHGaTLC5Z7Nuzg1FoX/logo.png" - }, - { - "chainId": 101, - "address": "MWL8k1ESrzD4zWiar7jKfFWZwNn4VSHd9rJgcYMeaui", - "symbol": "MDWL", - "name": "Mundus District Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/MWL8k1ESrzD4zWiar7jKfFWZwNn4VSHd9rJgcYMeaui/logo.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "3v8wVJo4yPqnyKmv44JKYps7ZiBp4CCSwnfSzznEMA1D", - "symbol": "POINT", - "name": "Bandwagon NFTs Point Tokens", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3v8wVJo4yPqnyKmv44JKYps7ZiBp4CCSwnfSzznEMA1D/logo.png", - "tags": ["community-token", "utility-token"] - }, - { - "chainId": 101, - "address": "9bS5zhzUEhRKdMS1XReGWQQgwqa9ifPW35qRjnAuidgV", - "symbol": "CUBEWL", - "name": "CubeHead Punks WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9bS5zhzUEhRKdMS1XReGWQQgwqa9ifPW35qRjnAuidgV/logo.png" - }, - { - "chainId": 101, - "address": "Bcjd9NYXTfxUoArVc1Pzu6FyXrNCM9nzg2nzdk9Gd9qb", - "symbol": "IPT", - "name": "Insurance Protocol Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Bcjd9NYXTfxUoArVc1Pzu6FyXrNCM9nzg2nzdk9Gd9qb/logo.png" - }, - { - "chainId": 101, - "address": "C4Vt9yF3G1vLBr1kWH8f4bFZJYTfmDND4sStXERWkT4F", - "symbol": "LUMDAO", - "name": "Luminary DAO", - "decimals": 3, - "logoURI": "https://github.com/ConsciousEnergy/token-list/tree/main/assets/mainnet/C4Vt9yF3G1vLBr1kWH8f4bFZJYTfmDND4sStXERWkT4F/logo.png", - "tags": ["utility-token", "WL-token"], - "extensions": { - "discord": "https://discord.gg/AHy4BCAy5C", - "twitter": "https://twitter.com/luminarydao", - "website": "https://luminarydao.com" - } - }, - { - "chainId": 101, - "address": "EKdr6jB38NkDYTM5Gk7aLQLsPXiivj6cc1MzzYNeBfzo", - "symbol": "IDOL", - "name": "High-Dol", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/WeedoVerse/IDOL-logo/main/High-Dol.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Hzt7PPmaRJsyh7VLksPMdQDCee32W1Bngp7NYRdMHSkb", - "symbol": "ACIDAS", - "name": "ACIDAS Token", - "decimals": 7, - "logoURI": "https://raw.githubusercontent.com/kargoshi/assets/main/Acid_cap20.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "47d1wFpmfYLFxkMJfNkx1Q1yU7TP1pyu3CtEBENvK7xE", - "symbol": "RLSC", - "name": "Royal Leo Silver Coin", - "decimals": 0, - "logoURI": "https://www.royalleo.com/src/rlscLogo.png" - }, - { - "chainId": 101, - "address": "3Bcpkr5GGceFDDRGxi6Te6oUhAejfbeheb8v1DVPBpQc", - "symbol": "RLGC", - "name": "Royal Leo Gold Coin", - "decimals": 0, - "logoURI": "https://www.royalleo.com/src/rlgcLogo.png" - }, - { - "chainId": 101, - "address": "6dmkrp3XjSGyd2kWQCnKtvaufBR4ov7ZDAsrWbGbYTbX", - "symbol": "CANAR", - "name": "Canarcoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/miguelgargallo/canarchain.org/main/logo/logo.png", - "tags": ["handshake", "bitcoin", "utility-token"], - "extensions": { - "discord": "https://discord.gg/7hPH5U5TH4", - "medium": "https://penc.medium.com", - "twitter": "https://twitter.com/canarchain", - "website": "https://canarchain.org" - } - }, - { - "chainId": 101, - "address": "wibinXNwn8TyWUfUTxCmknBQk1Dm7Jao3Fve3ptoJgB", - "symbol": "$WIBIN", - "name": "WIBIN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/wibinXNwn8TyWUfUTxCmknBQk1Dm7Jao3Fve3ptoJgB/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/WibinWolves" - } - }, - { - "chainId": 101, - "address": "knowbYbddMYPNYPNDERbqk1Kw8VUGpuNWYSQv7RCMSj", - "symbol": "$KNOW", - "name": "Knowledge Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/knowbYbddMYPNYPNDERbqk1Kw8VUGpuNWYSQv7RCMSj/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/PassroomNFT" - } - }, - { - "chainId": 101, - "address": "8PFGtQdP6CHeSmMS9mCWgqCAhfQzXWSSTrk5TL8sVLaY", - "symbol": "SHWL", - "name": "Silver Hands WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8PFGtQdP6CHeSmMS9mCWgqCAhfQzXWSSTrk5TL8sVLaY/logo.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/SilverHandsNFT" - } - }, - { - "chainId": 101, - "address": "8phLV3YLRwud8QohZQnAdKvhjUbte2V75M4wB5uYwPjs", - "symbol": "SSGWL", - "name": "Shin Sengoku WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8phLV3YLRwud8QohZQnAdKvhjUbte2V75M4wB5uYwPjs/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/shinsengokuNFT" - } - }, - { - "chainId": 101, - "address": "5aYEpMuqNAqwtkKNc475JgFkN1pSgt5MkTjYJRZNQjek", - "symbol": "HDCO", - "name": "HARDCORES", - "decimals": 4, - "logoURI": "http://hardcores.tech/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5nZRjxpFtge4LUCpLLvfVf1NJ7nu3oJXDtcLKw7BQPYx", - "symbol": "$in$", - "name": "SinLab Token", - "decimals": 9, - "logoURI": "https://github.com/solana-labs/token-list/blob/dc50676181e27aa94f193221b470ac6ab73deaea/assets/mainnet/1C2EYVrwmoXAGbiKirFFBeDFDYUBHPhDeg9trhibTND/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6Byz39E31u7vyLX2JJD9mANUVrdTkmPgfks2RsivtS1H", - "symbol": "Fame", - "name": "Famecoin_", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6Byz39E31u7vyLX2JJD9mANUVrdTkmPgfks2RsivtS1H/logo.png", - "tags": [ - "Talent-Token", - "Sports-Token", - "Artists-Token", - "Athletes-Token", - "Performers-Token", - "Personalities-Token", - "Personality-Token", - "Utility-Tokens", - "Gaming", - "NFT" - ], - "extensions": { - "facebook": "https://www.facebook.com/profile.php?id=100061613650712", - "instagram": "https://www.instagram.com/famecoin_", - "linkedin": "https://www.linkedin.com/in/famecoin-788a4721b/", - "twitter": "https://twitter.com/famecoin_", - "website": "https://www.famecoin.com/", - "youtube": "https://www.youtube.com/user/famecoin" - } - }, - { - "chainId": 103, - "address": "JEC53jV7dDCd5xVNh28EgK6GjHa1UforPBDMQr6s2fY1", - "symbol": "RIMOT", - "name": "RiMoT", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/crcnum4/rm-asset/main/assets/logo.png", - "tags": ["beta-token"], - "extensions": { - "website": "http://rimot.com" - } - }, - { - "chainId": 101, - "address": "DUnH17nSFDxvvpTUVLnVMACypDNQ299T4KH61LRfPotz", - "symbol": "BUSD", - "name": "Blackrock USD", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/xBlackrock/Blackrock_USD/main/LOGO.png", - "tags": ["financial-token"] - }, - { - "chainId": 101, - "address": "2qyNVSZhh7byyhuxBjoLfcQqNDDVv7PK93UVWQQt88Dc", - "symbol": "GHGC", - "name": "GameingHubGameCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/prijak/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8zWqx2bBtx51pbg8ofEU8MHwVEtHygCom5WxHsyTfioc", - "symbol": "BPML", - "name": "Battlepunk Mintlist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8zWqx2bBtx51pbg8ofEU8MHwVEtHygCom5WxHsyTfioc/logo.png", - "tags": ["nft", "whitelist-token"] - }, - { - "chainId": 103, - "address": "2EVBNgp4JbqZ7iPUbJDu6sgPaxEzUhQo17YB7Vo3s7vG", - "symbol": "$TENKA", - "name": "TestTenka", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2EVBNgp4JbqZ7iPUbJDu6sgPaxEzUhQo17YB7Vo3s7vG/logo.png" - }, - { - "chainId": 101, - "address": "F8Wh3zT1ydxPYfQ3p1oo9SCJbjedqDsaC1WaBwh64NHA", - "symbol": "SSURF", - "name": "Serum Surfers Droplet", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/F8Wh3zT1ydxPYfQ3p1oo9SCJbjedqDsaC1WaBwh64NHA/logo.png", - "tags": ["utility-token", "solvent-droplet"], - "extensions": { - "discord": "https://discord.gg/thK8BCtQbM", - "github": "https://github.com/solventprotocol", - "medium": "https://medium.com/@solventprotocol", - "telegram": "https://t.me/solventprotocol", - "twitter": "https://twitter.com/solventprotocol", - "website": "https://solvent.xyz" - } - }, - { - "chainId": 101, - "address": "k3eMNFATUu36UvXjgN17bDFo9rrBM7oNw8tRgnHDpsL", - "symbol": "PX_OG", - "name": "ProjectX OG Ticket", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/k3eMNFATUu36UvXjgN17bDFo9rrBM7oNw8tRgnHDpsL/og_ticket.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/ProjectX_sol", - "website": "https://xtcejorp.com" - } - }, - { - "chainId": 101, - "address": "B4KvbdQYomQJqnfzvjAoaNhWGiJVdSRQWLyCQ3cm74Ts", - "symbol": "PX_WL", - "name": "ProjectX WL Ticket", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/B4KvbdQYomQJqnfzvjAoaNhWGiJVdSRQWLyCQ3cm74Ts/wl_ticket.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/ProjectX_sol", - "website": "https://xtcejorp.com" - } - }, - { - "chainId": 101, - "address": "5zJ9buoFkmBQBAiE8cnWrtyhAftdGT8ecKzz1LY1ApGV", - "symbol": "DON$", - "name": "DONNIEBAGZ", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/DonatelloDaDon/OGDONS/main/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/MetaLoDons", - "website": "https://metalodons-ogs.com/" - } - }, - { - "chainId": 101, - "address": "7R4pJpJdzapj2hEfzQR5bp2ApDjqXNRUA5GTngC6xRZX", - "symbol": "GB", - "name": "GameBeef", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7R4pJpJdzapj2hEfzQR5bp2ApDjqXNRUA5GTngC6xRZX/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FUgHqdgCrahWJJVUYLy1wJLj1x6nXNqrLzt5YCcWjibc", - "symbol": "D0N$", - "name": "D0NNIE-BAGZ", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/DonatelloDaDon/OGDONS/main/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/MetaLoDons", - "website": "https://metalodons-ogs.com/" - } - }, - { - "chainId": 101, - "address": "5wA3agdxtgddRoM17iCBPbcdS3KwfL7XQ4NxdV7FvusU", - "symbol": "WMEOW", - "name": "WAGMIMEOW", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/BreezyBabieMint/crypto/main/ObBIQopK_400x400.png" - }, - { - "chainId": 101, - "address": "CcCWaUcVVN9qDN6YR4rH9uJa6K22qo1zCLQZxPgcK2fP", - "symbol": "MOVEFI", - "name": "Move-n-Earn Governance Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CcCWaUcVVN9qDN6YR4rH9uJa6K22qo1zCLQZxPgcK2fP/logo.png", - "tags": ["governance-token", "movefi", "move-n-earn"], - "extensions": { - "facebook": "https://www.facebook.com/profile.php?id=100081109356224", - "linkedin": "https://www.linkedin.com/company/move-n-earn/", - "telegram": "https://t.me/movenearn", - "twitter": "https://twitter.com/move_nearn", - "website": "https://www.movenearn.com/" - } - }, - { - "chainId": 101, - "address": "7vVRYg24HvVmgxV4neAog66GjW6aCUwnArvjDn6bgrX5", - "symbol": "NECTAR2", - "name": "NECTAR2 Token", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/agave-com/nectar-token/main/logo-sq.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "DEVJp3frkYy9D8oSYcgAapHGAD9pLv4c9ssfBFyNZyJ8", - "symbol": "MKM", - "name": "MEKAMOUNTS WL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DEVJp3frkYy9D8oSYcgAapHGAD9pLv4c9ssfBFyNZyJ8/mkm747-wl.png", - "tags": ["wl-coin-token"], - "extensions": { - "twitter": "https://twitter.com/MEKAMOUNTS", - "website": "https://discord.gg/mekamounts" - } - }, - { - "chainId": 101, - "address": "86dwHw2kRkfXWddAJ94zuWvhnKN66tN8nkvZ8LWYNp9g", - "symbol": "MCLAB", - "name": "MAD CAT LAB", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/madcatlab01/MAD-CAT-LAB/main/test11.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9EmR4ZiZfSRKxWXEUik6dtyGJ47dXzgDZcq2TinAf2Fy", - "symbol": "JSC", - "name": "JUEGA COIN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/juegaseguro/juega-coin/main/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "DkH9gvzRCZzCfYynHgPhk1sbeSATTds81UfRJUvqBC3F", - "symbol": "SHOP", - "name": "ShopToken", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DkH9gvzRCZzCfYynHgPhk1sbeSATTds81UfRJUvqBC3F/logo.png", - "tags": ["shopping"] - }, - { - "chainId": 103, - "address": "62hW2YrTn73no9WTYjg3Us9BdiFguNwzrhNNLyCEpZV9", - "symbol": "CTS", - "name": "CTS Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/wfp2002/solana-Token/main/logo.png", - "tags": ["governance-token", "cts", "ctsnew"], - "extensions": { - "facebook": "https://www.facebook.com", - "linkedin": "https://www.linkedin.com" - } - }, - { - "chainId": 101, - "address": "63x2LRcTKVKkZmgq9sse6CytHAjYrEKFVfdMGYRC6QW9", - "symbol": "HDCN", - "name": "HDCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/dhorvath333/hdcoin-logo/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GuLM1PRgJzFGuumTKT7Nkk531R9LXKkbau6bmmZrRZ94", - "symbol": "MKS", - "name": "Milkshake", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GuLM1PRgJzFGuumTKT7Nkk531R9LXKkbau6bmmZrRZ94/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 103, - "address": "DjrL2ATiHzTg5Rg2EFD24gbV3vLBkeX9Hw29u1KyF15r", - "symbol": "tUSDC", - "name": "Tokr USDC", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DjrL2ATiHzTg5Rg2EFD24gbV3vLBkeX9Hw29u1KyF15r/logo.png", - "extensions": { - "github": "https://github.com/Tokr-Labs", - "linkedin": "https://www.linkedin.com/company/tokrlabs/", - "twitter": "https://twitter.com/tokrlabs", - "website": "https://www.tokrlabs.xyz/" - } - }, - { - "chainId": 101, - "address": "Db93jCqGGjXXywN4rVAgW1uWdQ4bNAW3qzeyfscv23pK", - "symbol": "ASR", - "name": "Asterisk", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/hotdogofcoldwar/asterisk/main/logo_800_wh.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "47R68vQesdgEAjJN84x7KCHVhabiNenAFfypudyPyemd", - "symbol": "GREED", - "name": "Greed Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/47R68vQesdgEAjJN84x7KCHVhabiNenAFfypudyPyemd/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/GreedyGhostsDAO", - "website": "https://greedyghosts.io" - } - }, - { - "chainId": 101, - "address": "4TbrD8U64HHJPJW7QXvGPUuRc4ekmbXHwF3CcZjxZLLL", - "symbol": "Fresh", - "name": "Fresh Fruit Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Palthe/Freshfruit/main/FreshFruit.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "5JsuZkXobxwRhtaGH7KNE3yv2RLZuDkExx7q5ypXyKAD", - "symbol": "CHAC", - "name": "CHAIR-Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Chair-Guy/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5TuPwHGENJ8ZyvYZB28taMyh1uFUZH4bdFQfTbSxF1vj", - "symbol": "$CACTI", - "name": "CACTI TOKEN", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5TuPwHGENJ8ZyvYZB28taMyh1uFUZH4bdFQfTbSxF1vj/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FeVooZDV8ihVhwuHVbagriw6rtonLdysXQ52VwqTaVAd", - "symbol": "$RYO", - "name": "Shin Sengoku RYO", - "decimals": 9, - "logoURI": "https://storage.googleapis.com/shinsengoku-assets-public/ryo-coin.png", - "extensions": { - "twitter": "https://twitter.com/shinsengokuNFT" - } - }, - { - "chainId": 101, - "address": "WkDp8Wb31GBkP67KPV5hoSprLpqaW8arZ96R3zRrmWi", - "symbol": "APE", - "name": "Claim your Bored Apes for Solana", - "decimals": 0, - "logoURI": "https://i.imgur.com/zQebtI8.png", - "tags": ["nfts"], - "extensions": { - "description": "http://boredapeyachtclubsol.com/. Enter the link and retrieve your Free Ape from Ethereum, now on Solana!", - "imageUrl": "https://i.imgur.com/zQebtI8.png" - } - }, - { - "chainId": 101, - "address": "4ECiWwt2g7TB623UAkyKVWBmcGHGzSTg8pxxknVqhz3X", - "symbol": "NDQF", - "name": "ND Queen's Favour", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Kikser1214/queen/main/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/Zm5CvezwTE", - "twitter": "https://twitter.com/NezumiDominion", - "website": "https://www.nezumidominion.com/" - } - }, - { - "chainId": 101, - "address": "9UQJAKB8F1A2Gcz4RsnothGx5aFSvpRzLCNuGdBF2EPQ", - "symbol": "SOX", - "name": "Socks", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Vasil789/crypto/main/Logo.png", - "tags": ["social-token"], - "extensions": { - "twitter": "https://twitter.com/OkaySocksNFT" - } - }, - { - "chainId": 101, - "address": "76WzDF99CQZoBjh5wz9WD3LQxVd5Mg2GMENcHRh6wih4", - "symbol": "MTY", - "name": "MTY Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/SaviourProject/Mighty-Token-logo/main/logo.png", - "tags": ["Utility-token"] - }, - { - "chainId": 101, - "address": "75EjBJtt2To6ThGyzpJor3mrieXHUvRyATvTKdkuMmuH", - "symbol": "RTRO", - "name": "Retro", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/josh2212/Retro/main/retro.png", - "tags": ["NFTs", "utility-token", "currency-token", "community-token"] - }, - { - "chainId": 101, - "address": "EB3BkQScKDHvBXhoiRJoaYTQLovCExt6sQs8dJBTDgQh", - "symbol": "ETRK", - "name": "Entrik", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Huffy519/Entrik-Logo/main/elogo.png", - "tags": ["Utility-token"] - }, - { - "chainId": 103, - "address": "8s8kL6Xnry39bBj9JYhsqm9ojYNyp9ywzF23tif86G8h", - "symbol": "EIGHT", - "name": "Eighth Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8s8kL6Xnry39bBj9JYhsqm9ojYNyp9ywzF23tif86G8h/logo.png", - "tags": ["eighthcoin", "eight"] - }, - { - "chainId": 103, - "address": "C4VgdQfLjMr2oWoFygk3KY6uM8kbPEgGvTgj7FPWZjCy", - "symbol": "BAAN", - "name": "BAAN Token", - "decimals": 9, - "logoURI": "https://i.postimg.cc/FzTd0ccs/48342a315c92449483b0f4d6e69c177a.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "4aYNkmdnNzsbTSkMSVpG28zfWwnqS4GxnY9bcq5BH2km", - "symbol": "TA", - "name": "The Assembly - Mayans", - "decimals": 0, - "logoURI": "https://cdn.theassembly.gg/mayans/images/985.png?ext=png", - "tags": ["nft"], - "extensions": { - "discord": "https://discord.gg/theassembly", - "twitter": "https://twitter.com/theassemblynft" - } - }, - { - "chainId": 101, - "address": "B3EyMsa3LfS68e7mDT3PGH7eAPCoHikXxeqQtgBm8tri", - "symbol": "CMC", - "name": "ChromosomeCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/vihaan-s1ngla/ChromosomeCoinLogo/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "C8uDXHquGdgk3zPKsewSY9JWRcDFXzrMYfqPhe8jNNpM", - "symbol": "RAKE", - "name": "RAKE Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/C8uDXHquGdgk3zPKsewSY9JWRcDFXzrMYfqPhe8jNNpM/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://www.enrake.com/RAKE/" - } - }, - { - "chainId": 101, - "address": "64fe4pZcmwZ776F9az8aUGpxrA4MomFwFava8gE9ZqTh", - "symbol": "ROCW", - "name": "ROCW", - "decimals": 7, - "logoURI": "https://raw.githubusercontent.com/apecrew/assets/main/Grey.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.com/invite/9e8R48zMUC", - "twitter": "https://twitter.com/robotcrewnft" - } - }, - { - "chainId": 101, - "address": "FxbkaJPXVJNBz5MGLyPPnAAsZeAHyj6FvvrM2wq3gQfb", - "symbol": "TAP", - "name": "Alien Planet", - "decimals": 9, - "logoURI": "https://github.com/ArthurPaivaT/token-list/blob/main/assets/mainnet/FxbkaJPXVJNBz5MGLyPPnAAsZeAHyj6FvvrM2wq3gQfb/logo.png?raw=true" - }, - { - "chainId": 101, - "address": "CTcpr3ZmdSkPp5nqZb7uPUu4RRUzoEgtpFjTFVWrYLGq", - "symbol": "$NERC", - "name": "NERCOIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jacktheminter/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ingaAW6YRGVFa4NASZFi9TEhxQcuRfGumGLMVxRSav9", - "symbol": "IGTY", - "name": "Ingenuity Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ingaAW6YRGVFa4NASZFi9TEhxQcuRfGumGLMVxRSav9/logo.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "5hWAkBVZoMq7pGc4k9HsDhfe8cp3WJmTj7iFTqBdv5sv", - "symbol": "MONEY", - "name": "Moneyblock's Official Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Camelspit/cryptocoin/main/logo.png", - "tags": ["social-token"], - "extensions": { - "discord": "https://discord.gg/3YcXhmc3eX", - "instagram": "https://instagram.com/MoneyblockNFT", - "twitter": "https://twitter.com/MoneyblockNFT", - "website": "https://moneyblock.org" - } - }, - { - "chainId": 101, - "address": "fV4L2AkdDDzBGMhMHUJWgXNx5EnEVoUKnAsLfZvHLzp", - "symbol": "KHRYSOS", - "name": "Khrysos coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/fV4L2AkdDDzBGMhMHUJWgXNx5EnEVoUKnAsLfZvHLzp/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/solinos", - "twitter": "https://twitter.com/SolinosEC", - "website": "https://solinos.xyz" - } - }, - { - "chainId": 101, - "address": "EZANpsohLdDWTT8xrQbYBwrVSz6bg31qRycMw6TTr3bp", - "symbol": "DWT", - "name": "DeFrame WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EZANpsohLdDWTT8xrQbYBwrVSz6bg31qRycMw6TTr3bp/logo.png", - "tags": ["NFT", "wl-token"], - "extensions": { - "twitter": "https://twitter.com/DeFrameOfficial", - "website": "https://www.deframe.xyz/" - } - }, - { - "chainId": 101, - "address": "GavGtgnCW8XnsVDbczD9BNo41iaUdqaMKZTbriCnZ2Xa", - "symbol": "$CTT", - "name": "Caspian Tiger", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/ArifMammadov/ctt-logo/main/logo%20(1).png", - "tags": ["CaspianTiger"] - }, - { - "chainId": 101, - "address": "AaSk75oPCsbrgceKVNUvBWhC7NWNfSwNXPRmw7ZigYU3", - "symbol": "MONEY", - "name": "Moneyblock Official Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Mopixelz/crypto/main/logo.png", - "tags": ["social-token"], - "extensions": { - "discord": "https://discord.gg/3YcXhmc3eX", - "instagram": "https://instagram.com/MoneyblockNFT", - "twitter": "https://twitter.com/MoneyblockNFT", - "website": "https://moneyblock.org" - } - }, - { - "chainId": 101, - "address": "HwtcNv5rE6djJUw35FzMUWPSALhC54XGDriwyMxjEUDB", - "symbol": "SKEY", - "name": "Skey", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SkeyGitHub/skey/main/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/ZpWDwytKxT" - } - }, - { - "chainId": 103, - "address": "95scnhfHszv2e1yxtnNuLi9CGi1BvtdpcgLeymdDQRP", - "symbol": "FLOUR", - "name": "FLOUR - Metaversium", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/dwrx/token-list/main/assets/mainnet/95scnhfHszv2e1yxtnNuLi9CGi1BvtdpcgLeymdDQRP/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/metaversiumgame", - "website": "https://metaversium.io/" - } - }, - { - "chainId": 103, - "address": "E8ikFWZAo6kiGrsHghUTn3ysfpKVJqyGJfXC2q75fa1C", - "symbol": "BREAD", - "name": "BREAD - Metaversium", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/dwrx/token-list/main/assets/mainnet/E8ikFWZAo6kiGrsHghUTn3ysfpKVJqyGJfXC2q75fa1C/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/metaversiumgame", - "website": "https://metaversium.io/" - } - }, - { - "chainId": 101, - "address": "6uPNk3w4zne1hUMuqogZt4VxMu77rcuEr2CUfms7Faz3", - "symbol": "SUGA", - "name": "Sugar Realm Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6uPNk3w4zne1hUMuqogZt4VxMu77rcuEr2CUfms7Faz3/SUGA.png", - "tags": ["SUGA", "sugar_realm"], - "extensions": { - "discord": "https://discord.gg/sugarrealm", - "medium": "https://medium.com/@sugarrealmnft", - "twitter": "https://twitter.com/SugarRealmNFT", - "website": "https://sugarrealm.io/" - } - }, - { - "chainId": 101, - "address": "2KLRorQP7aWRGFnKfWQK7yS9cAcJVZPSmMdMpqPkivFY", - "symbol": "BJBC", - "name": "Brandon Jacobson Business Card", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/IvaldiS6/image/main/BJBC_Logo.png", - "tags": ["social-token"], - "extensions": { - "linkedin": "https://www.linkedin.com/in/brandon-jacobson-89588617b/", - "twitter": "https://twitter.com/SecurePy", - "website": "https://github.com/IvaldiS6" - } - }, - { - "chainId": 101, - "address": "woLFbe6J43ZPdb2nZ3GRzVEV5153HsZB1kgZYf2ePwF", - "symbol": "LWWL", - "name": "Lost Wolves WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/woLFbe6J43ZPdb2nZ3GRzVEV5153HsZB1kgZYf2ePwF/logo.png", - "tags": ["nft", "WL-token", "LostWolves"], - "extensions": { - "discord": "https://discord.gg/lostwolves", - "twitter": "https://twitter.com/LostWolvesNFT", - "website": "https://lostwolves.io/" - } - }, - { - "chainId": 101, - "address": "GAsp3xeG4LQLjyJnT7ochh9gKaF17c7ssTjjPS8B1mQv", - "symbol": "ggRAY", - "name": "ggRAY", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GAsp3xeG4LQLjyJnT7ochh9gKaF17c7ssTjjPS8B1mQv/logo.png", - "tags": ["lp-token"], - "extensions": { - "discord": "https://discord.gg/SgKffK9X76", - "twitter": "https://twitter.com/goblingold_fi", - "website": "https://goblin.gold" - } - }, - { - "chainId": 101, - "address": "DTPMARh15YSqggNbMLECj8RxVoxfhtobyyCLiwEeVwZu", - "symbol": "DTPM", - "name": "Degen Trash Panda Merch Token", - "decimals": 0, - "logoURI": "https://arweave.net/jEVnuhOv79oTVfksVmlJhc7E1GsLgeXM8_7aAp1TjiY", - "tags": ["whitelist-token"], - "extensions": { - "discord": "https://discord.gg/4wH2dZbDH2", - "twitter": "https://twitter.com/DegenTrashPanda", - "website": "https://degentrashpandas.com" - } - }, - { - "chainId": 101, - "address": "rogue3qZEABqmjpL9orMosdBh2a1rfmpoDKfPrztG1K", - "symbol": "ROGUE", - "name": "ROGUE Token", - "decimals": 7, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/rogue3qZEABqmjpL9orMosdBh2a1rfmpoDKfPrztG1K/logo.svg", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.com/invite/roguesharks", - "twitter": "https://twitter.com/RogueSharks", - "website": "https://www.roguesharks.org/" - } - }, - { - "chainId": 101, - "address": "To6JP3WdnzttxLJzjE3dtxEQ7V5j67tffRPW6UYngZn", - "symbol": "TG", - "name": "Tokyo Glitch Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/To6JP3WdnzttxLJzjE3dtxEQ7V5j67tffRPW6UYngZn/logo.png" - }, - { - "chainId": 101, - "address": "MARKh1FM3eWqtuAzUytgoLaVcKNo5iRJLK7kvvfmwY6", - "symbol": "$MARK", - "name": "Mark Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/MARKh1FM3eWqtuAzUytgoLaVcKNo5iRJLK7kvvfmwY6/logo.png" - }, - { - "chainId": 101, - "address": "BEERyhYPMdofQP4dLrw3LN5DtU536KzWonhHbYSr7Fbp", - "symbol": "$BEER", - "name": "Red Panda Party Club Beer Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BEERyhYPMdofQP4dLrw3LN5DtU536KzWonhHbYSr7Fbp/logo.png" - }, - { - "chainId": 101, - "address": "541xHAw1xSH6aCUBDJR3zcgBBbedBm2LU3yoqqhGvVA", - "symbol": "SLVR", - "name": "Silver Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/541xHAw1xSH6aCUBDJR3zcgBBbedBm2LU3yoqqhGvVA/logo.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/SilverHandsNFT" - } - }, - { - "chainId": 101, - "address": "C4CQ4wk96FrBiUFcPGQoZ9hHYd82gRT9uUQprYmb6aJF", - "symbol": "SOLOT", - "name": "Solot ", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/C4CQ4wk96FrBiUFcPGQoZ9hHYd82gRT9uUQprYmb6aJF/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/wxe2vRaVZp", - "twitter": "https://twitter.com/solotmachinehd" - } - }, - { - "chainId": 101, - "address": "5VgCcY21XsrCgAPqdKtii3ryFcoyyaARuFcSkF5mEi4j", - "symbol": "RL", - "name": "Red Lion", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/redhorn1991/RedHornCrypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "K1EFss6frvERxWBF3qBmuApG1qFBA8GVXyi2viXGqXK", - "symbol": "$KIEF", - "name": "KIEF", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/K1EFss6frvERxWBF3qBmuApG1qFBA8GVXyi2viXGqXK/logo.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "discord": "https://discord.com/invite/tstonedfrogz", - "twitter": "https://twitter.com/TStonedFrogz", - "website": "https://tstonedfrogz.com/" - } - }, - { - "chainId": 101, - "address": "kozyGtC1y9hRDhvwiLDyvxdREQUyjfjMjFSBTnE492T", - "symbol": "KOZY", - "name": "Kozy Coin", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/kozyGtC1y9hRDhvwiLDyvxdREQUyjfjMjFSBTnE492T/logo.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/KozyKoalasNFT" - } - }, - { - "chainId": 101, - "address": "ReEfAp8QkiW3J7JaRJpNWvrJKWY77t4f4UuBKQ5Kpvu", - "symbol": "$REEFER", - "name": "REEFER", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ReEfAp8QkiW3J7JaRJpNWvrJKWY77t4f4UuBKQ5Kpvu/logo.jpg", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/MadOnReefer", - "website": "https://madonreefer.com/" - } - }, - { - "chainId": 103, - "address": "BRVzbeeF2tufboGFQGgXsD6CCP2NVddCJ6cUz6VbjK8o", - "symbol": "HLT", - "name": "Healthy Life Token", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BRVzbeeF2tufboGFQGgXsD6CCP2NVddCJ6cUz6VbjK8o/HLTCoin.png", - "tags": ["stepogram-token"] - }, - { - "chainId": 101, - "address": "6nyiZ7uHKPHRhZa6nw2eBS4njxStM6kmEUr6uLFhJz9Z", - "symbol": "PCS", - "name": "Precious Jewelry", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6nyiZ7uHKPHRhZa6nw2eBS4njxStM6kmEUr6uLFhJz9Z/pcs_ico.jpg", - "tags": ["utility-token"], - "extensions": { - "website": "https://precious.capital/" - } - }, - { - "chainId": 101, - "address": "6CKXpW4KAiAJt9Exj9nneqS2vyFqj8ABRMvXyYhoa2M9", - "symbol": "WOW", - "name": "WOWswap Token (Portal)", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6CKXpW4KAiAJt9Exj9nneqS2vyFqj8ABRMvXyYhoa2M9/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "address": "0x4da996c5fe84755c80e108cf96fe705174c5e36a", - "assetContract": "https://bscscan.com/address/0x4da996c5fe84755c80e108cf96fe705174c5e36a", - "bridgeContract": "https://bscscan.com/address/0xb6f6d86a8f9879a9c87f643768d9efc38c1da6e7", - "coingeckoId": "wowswap", - "coinmarketcap": "https://coinmarketcap.com/ru/currencies/wowswap/", - "description": "WOWswap is decentralized leverage trading \u0026 lending protocol that runs on Ethereum, BNB Chain, Avalanche, IoTeX, Solana and Polygon.", - "discord": "https://discord.gg/KFQa6pECmY", - "medium": "https://wowswap-io.medium.com/", - "reddit": "https://www.reddit.com/r/Wowswap_io/", - "telegram": "https://t.me/wowswap", - "twitter": "https://twitter.com/Wowswap_io", - "website": "https://wowswap.io/" - } - }, - { - "chainId": 101, - "address": "3TsqAMYmuRX1ct14GQbN5Unu3J1UUJawHFDtEu8notMe", - "symbol": "NOTME", - "name": "Notme Or You", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Wcworker/Wcdonalds/main/server.png", - "tags": ["whitelist-token", "utility-token"] - }, - { - "chainId": 101, - "address": "6LetM1yRt8zPtyZdsRfdy7EPYPhZhs1ojzDqgPPPv3Wa", - "symbol": "MONEY", - "name": "Moneyblock", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Kryptoknife/crypto/main/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/3YcXhmc3eX", - "instagram": "https://instagram.com/MoneyblockNFT", - "twitter": "https://twitter.com/MoneyblockNFT", - "website": "https://moneyblock.org" - } - }, - { - "chainId": 101, - "address": "CZxkoQ6rjc7bAm3ZZekaRmtbtb5bDNLc67HCbe4zHKT3", - "symbol": "CONGA", - "name": "CONGA COIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/congaFX/token/main/CongaFX%20Icon.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ELo1g1ZxbYenka1dKgn9Hr4TWY7UZVw4iPb4BaYu64Ve", - "symbol": "QANON", - "name": "QAnon Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ELo1g1ZxbYenka1dKgn9Hr4TWY7UZVw4iPb4BaYu64Ve/logo.svg" - }, - { - "chainId": 101, - "address": "3wBnQPk4CgaCXWDSGxKFYiKhRznzyCBnsLNeoLmMkVwk", - "symbol": "SHOE", - "name": "Horsemen Society", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/Horsemen369/shoelog/main/shoelogo.png", - "tags": ["community-token"], - "extensions": { - "twitter": "https://twitter.com/HorsemenNft" - } - }, - { - "chainId": 101, - "address": "F9acm8phUVEtnUW9XFNs1E6qX3tM5owipeJ6UKf4j8Zc", - "symbol": "MCS", - "name": "Melvins Cool Shit", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Hekko90/MTSK/main/Melvins%20Cool%20Shit.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DGPw3zcZuMxoVmnEQA9uhZDn9Tg2ynyaBrbULRQ8y1Gh", - "symbol": "DEGEPASS", - "name": "degenerative multipass", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DGPw3zcZuMxoVmnEQA9uhZDn9Tg2ynyaBrbULRQ8y1Gh/logo.png", - "tags": ["security-token"], - "extensions": { - "discord": "https://discord.gg/A3PeauVFTr", - "twitter": "https://twitter.com/degenespace", - "website": "https://degenerative.space/" - } - }, - { - "chainId": 101, - "address": "kGFcaA8Xcyr9BtusTMHXJHvsBe6mU5yTb4hbhA6EnXA", - "symbol": "$NATU", - "name": "NATU Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/kGFcaA8Xcyr9BtusTMHXJHvsBe6mU5yTb4hbhA6EnXA/logo_natu.png", - "tags": ["utility-token"], - "extensions": { - "discord": "http://discord.gg/nahavi", - "twitter": "https://twitter.com/WanderingNahavi", - "website": "https://nahavi.io/" - } - }, - { - "chainId": 101, - "address": "2TyHNzQQqoytGnznVnFbFvg8qQf9ASeaPW9TzNxhC3GF", - "symbol": "DRACCOIN", - "name": "Draconic", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/furfibre/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "B8WQQJ5uBXqGFYbdHhX6Y4YWxXHBtAFEL7YriKtyHH8o", - "symbol": "MANI", - "name": "Mania Token", - "decimals": 9, - "logoURI": "https://resource-branding-assets.s3.us-west-2.amazonaws.com/sponsor_communi3/nft_mint_token_img.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/communi3" - } - }, - { - "chainId": 101, - "address": "J5kquaWo4zCzfwtiec8ZCyW9XjpzqgD5cPV4A7KLCNRh", - "symbol": "HYWDFB", - "name": "First Breath", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/J5kquaWo4zCzfwtiec8ZCyW9XjpzqgD5cPV4A7KLCNRh/logo.png", - "tags": ["utility-token", "proof-of-attendance"], - "extensions": { - "facebook": "https://www.facebook.com/helloyogaworld", - "instagram": "https://www.instagram.com/helloyogaworlddao", - "twitter": "https://twitter.com/helloyogaworld", - "website": "https://helloyogaworld.com/" - } - }, - { - "chainId": 101, - "address": "77WM3FzFJKMAzgGptDK2dFSmBKfSDjt6fFAeFZZqgHUd", - "symbol": "HYWDKA", - "name": "22 06 11 Global Flow 001 Kenya Africa", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/77WM3FzFJKMAzgGptDK2dFSmBKfSDjt6fFAeFZZqgHUd/logo.png", - "tags": ["utility-token", "proof-of-attendance"], - "extensions": { - "facebook": "https://www.facebook.com/helloyogaworld", - "instagram": "https://www.instagram.com/helloyogaworlddao", - "twitter": "https://twitter.com/helloyogaworld", - "website": "https://helloyogaworld.com/" - } - }, - { - "chainId": 101, - "address": "GLRD5VsCsKr4E1h22PFgfgP6pYaxv3o1doRnSeTWtw1v", - "symbol": "RGTT", - "name": "Rug-Tug Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/RandomHorizon/Rug-Tug-logo/main/rugtuglogo.png", - "tags": ["Social-token"] - }, - { - "chainId": 101, - "address": "DwY5Ks3KbvfVMd4jA1gELokSSAru6xaVNrCQsGoQAMES", - "symbol": "ANGK", - "name": "AngkorCoin", - "decimals": 0, - "logoURI": "https://github.com/tiloukim/AngkorCoin/blob/main/ANGKLOGO.png", - "tags": ["social-token"], - "extensions": { - "facebook": "https://www.facebook.com/angkorcrypto", - "instagram": "https://www.instagram.com/angkorcrypto", - "twitter": "https://twitter.com/angkorcrypto" - } - }, - { - "chainId": 101, - "address": "MciwQ8uyfRYZMGauY6HdvkoUtuZVfLQqq5wcwBLGFEJ", - "symbol": "MC", - "name": "MechaCats WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/MciwQ8uyfRYZMGauY6HdvkoUtuZVfLQqq5wcwBLGFEJ/logo.png" - }, - { - "chainId": 101, - "address": "CEJEdxUY67GLg5MJoagzgDhJ9LmuZYjr7styRX4tz4pk", - "symbol": "LDF", - "name": "LO DEI FONG", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CEJEdxUY67GLg5MJoagzgDhJ9LmuZYjr7styRX4tz4pk/logo.png", - "tags": ["community-token"] - }, - { - "chainId": 101, - "address": "3G23ehQ6puSm6e29q7CN6uA1kMVpwiTsMWJb3KrE5RwC", - "symbol": "SNY", - "name": "SUN NAM YUEN", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3G23ehQ6puSm6e29q7CN6uA1kMVpwiTsMWJb3KrE5RwC/logo.png", - "tags": ["community-token"] - }, - { - "chainId": 101, - "address": "8kEmKXTR36G96QUk6m5y4MeRNCg7Z3HjtUJSahWedPos", - "symbol": "WWH", - "name": "WaitWaitHea", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8kEmKXTR36G96QUk6m5y4MeRNCg7Z3HjtUJSahWedPos/logo.png", - "tags": ["community-token"] - }, - { - "chainId": 101, - "address": "4JWktLr39ZbyutVnym7wKxV1RDoJz7ifDYxMUHDmAbPB", - "symbol": "DMV", - "name": "DARK COIN", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/Shaik-Sirajuddin/RepoForUploadsNeverDelete/master/Images/darkcoin.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/dh3gWTFj", - "facebook": "https://www.facebook.com/darkcoindmv", - "github": "https://github.com/darkcoindmv", - "instagram": "https://www.instagram.com/helloyogaworlddao", - "reddit": "https://www.reddit.com/user/darkcoindmv", - "telegram": "https://t.me/darkcoindmv", - "twitter": "https://twitter.com/darkcoindmv", - "website": "https://www.darktoken.org" - } - }, - { - "chainId": 101, - "address": "AKVYLV1cZakQ5HKGiTu9UR9uEv7TwA7VeZyvcL3mHfs3", - "symbol": "DBDWL", - "name": "DegenBoyz WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Wcworker/Wcdonalds/main/dbdwl.png", - "tags": ["utility-token", "whitelist-token"] - }, - { - "chainId": 101, - "address": "BRKZbe8hFPmiJeBa94yARQ2RQ8KJQgRdnGMo7o6Wu1DC", - "symbol": "BRICKZ", - "name": "BRICKZ", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/thomasbuck810/BRICKZ/main/BRICKZ-2.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/metafigz", - "twitter": "https://twitter.com/metafigznft", - "website": "https://metafigz.com" - } - }, - { - "chainId": 101, - "address": "6ncN7QFWWGHAfN4Fb83bcVkKD1VmpfdPpKkH7m2qPLRU", - "symbol": "TGWL", - "name": "Tokyo Glitch Whitelist Token l TG", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6ncN7QFWWGHAfN4Fb83bcVkKD1VmpfdPpKkH7m2qPLRU/logo.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 103, - "address": "FUonikhC5D3WBU7zkVoYWYTKMwarxFbyfuC54Hd29UPw", - "symbol": "TBDG1", - "name": "T_BDG_1", - "decimals": 1, - "logoURI": "https://ipfs.io/ipfs/QmVAs4Bi62kYkUku2HJ7aRnmuCLCQpXoRd7PCHZJxjXTze", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "TooZz17K5vBgs4QoN9sPQQv3WRgCKuZCUr5g4AnjaBy", - "symbol": "MJDWL", - "name": "Mahjong Dogs Whitelist Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/MahjongDogs/assets/main/MJDWL%20Token.png", - "tags": ["whitelist-token"], - "extensions": { - "discord": "https://discord.gg/F7qWPFD5z6", - "twitter": "https://twitter.com/mahjongdogs", - "website": "https://www.mahjongdogs.com/" - } - }, - { - "chainId": 101, - "address": "3t1VbGif4EuuUyxjqCeTnzWBAeSxBVTJTuPZRgchC16B", - "symbol": "CUPT", - "name": "Champions Uniting Programme Token", - "decimals": 0, - "logoURI": "https://github.dev/Shent/token-list/assets/3t1VbGif4EuuUyxjqCeTnzWBAeSxBVTJTuPZRgchC16B/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9tzZzEHsKnwFL1A3DyFJwj36KnZj3gZ7g4srWp9YTEoh", - "symbol": "ARB", - "name": "ARB Protocol", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/ARBProtocol/arbprotocol/main/IMG_3600.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/M4F8RKqgce", - "twitter": "https://twitter.com/arbprotocol" - } - }, - { - "chainId": 101, - "address": "65MEBrX7oZ5UgLd3U5r27XhYManEAzHfdNiyniCy9eyW", - "symbol": "WAGMI", - "name": "WagmiTicket", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Afterglow421/logop/main/logo/logo.png", - "tags": ["utility-token", "whitelist-token"], - "extensions": { - "discord": "https://discord.com/invite/wagmibros", - "twitter": "https://twitter.com/SolanaWagmiBros", - "website": "https://wagmibros.club/" - } - }, - { - "chainId": 101, - "address": "AgMRXkwzXk8BwUs8e58wF5LhvLfCieL2tEG9ASdueA52", - "symbol": "4LC", - "name": "Four Leaf Clovers", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/kevinyuhk/crypto/main/Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EqCgGcBmRKo6sP3T84oKZBmH19bSGK4Npi5ySGCeHF23", - "symbol": "OKE", - "name": "Kuma Coin", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EqCgGcBmRKo6sP3T84oKZBmH19bSGK4Npi5ySGCeHF23/logo.png", - "tags": ["social-token"], - "extensions": { - "description": "The FOOD \u0026 Backbone to the Kuma Kingdom", - "website": "https://okaykumas.com" - } - }, - { - "chainId": 101, - "address": "9LDkpLUuETkmYd7KrdPXgzMdKs5hMSKt177UepRW66x6", - "symbol": "STRYS", - "name": "Strays Fish Bone", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9LDkpLUuETkmYd7KrdPXgzMdKs5hMSKt177UepRW66x6/logo.png", - "tags": ["social-token"], - "extensions": { - "discord": "https://discord.gg/jn5athqc", - "twitter": "https://twitter.com/modcatsclub" - } - }, - { - "chainId": 101, - "address": "DUM5J59yrYGukU52i1hC6YGZQ8Bfg7ppVpsYwJDF41f6", - "symbol": "NKL", - "name": "Nickel", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DUM5J59yrYGukU52i1hC6YGZQ8Bfg7ppVpsYwJDF41f6/logo.png", - "extensions": { - "twitter": "https://twitter.com/HeroesOfAstron", - "website": "https://heroesofastron.com" - } - }, - { - "chainId": 101, - "address": "FxcEpasqzkwo5YzZLADLwL9ySLQnpwFCzzxuc9GP5ytu", - "symbol": "$PANFT", - "name": "PA NFT", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FxcEpasqzkwo5YzZLADLwL9ySLQnpwFCzzxuc9GP5ytu/logo.png", - "tags": ["utility-token", "social-token", "nft-token"], - "extensions": { - "website": "https://policeacademynft.com" - } - }, - { - "chainId": 101, - "address": "943NSd9g9t71hZcw3AR3qbHMVCxy6sXWwYKELbzJjVms", - "symbol": "NATU", - "name": "NATU", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/943NSd9g9t71hZcw3AR3qbHMVCxy6sXWwYKELbzJjVms/natu.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "discord": "http://discord.gg/nahavi", - "twitter": "https://twitter.com/WanderingNahavi", - "website": "https://nahavi.io/" - } - }, - { - "chainId": 101, - "address": "4tejdaGTug9xWg58f92zmFMrsoWqCnvt8WaVuCiP3uUy", - "symbol": "ICHIGO", - "name": "ICHIGO", - "decimals": 8, - "logoURI": "https://ichigo.network/logos/logo.png", - "tags": ["utility-token", "social-token"], - "extensions": { - "twitter": "https://twitter.com/ichigonetwork", - "website": "https://ichigo.network/" - } - }, - { - "chainId": 101, - "address": "MJfiLqG26ysMHqzg6quVoUERBh3hHo41JJwtg7crmU2", - "symbol": "MJDOG", - "name": "Mahjong Dogs OG Whitelist Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/MahjongDogs/assets/main/MJDOG%20Token.png", - "tags": ["whitelist-token"], - "extensions": { - "discord": "https://discord.gg/F7qWPFD5z6", - "twitter": "https://twitter.com/mahjongdogs", - "website": "https://www.mahjongdogs.com/" - } - }, - { - "chainId": 101, - "address": "wofMXpfx7RrbPUsUbUmcYGFsbCX8drjtgP6siXQDPhN", - "symbol": "PFWL", - "name": "Private Foxes Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/wofMXpfx7RrbPUsUbUmcYGFsbCX8drjtgP6siXQDPhN/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/privatefoxes", - "twitter": "https://twitter.com/privatefoxes", - "website": "https://www.privatefoxes.com/" - } - }, - { - "chainId": 101, - "address": "C7wDAivGdaVHtLJqiSfjgZWUwy1c53YNsDWtf8iKWCJj", - "symbol": "PNL", - "name": "CRYPTOPNL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/R-MiN/PNL/main/LOGO.jpg", - "tags": ["NFT"] - }, - { - "chainId": 101, - "address": "5s2qavsSBLHuoyiNY394t81FtE2YU6PkDdqy39a2mXdk", - "symbol": "KUMA", - "name": "Official Kuma Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5s2qavsSBLHuoyiNY394t81FtE2YU6PkDdqy39a2mXdk/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/krT4seXKcV", - "twitter": "https://twitter.com/okaykumasdao", - "website": "https://okaykumas.com" - } - }, - { - "chainId": 101, - "address": "DGQJyKwk5NQgzUphc3QMiWFrKXkHFACPiQ3ofGojExHM", - "symbol": "ALMT", - "name": "Almat", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/vlada84/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "223Zo5YTCawWQ3AQcwJCKoxrvPHu6L6Wb5QC7nCvWLQ2", - "symbol": "$GABY", - "name": "GABY CORNWALL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/223Zo5YTCawWQ3AQcwJCKoxrvPHu6L6Wb5QC7nCvWLQ2/logo.png" - }, - { - "chainId": 101, - "address": "PLaYysuBswgDZB2vXCz89pukmkcd5QjvBoSxfVwBaKZ", - "symbol": "SHrouded", - "name": "Shrouded Playground Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/PLaYysuBswgDZB2vXCz89pukmkcd5QjvBoSxfVwBaKZ/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/ShroudedNFT" - } - }, - { - "chainId": 101, - "address": "En1DhX7z4vAYxLu74AHXaL8DRhJ1Trwr4ShbsTf8SVz", - "symbol": "KRMC", - "name": "Karen R M Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Dakender/Karen-Coin/main/logo-karen.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GvmTHnBcj6t9uRShDggjJfAFEWs3wJpEpNYAAAPwuu8N", - "symbol": "SNOW", - "name": "Nan Feng Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GvmTHnBcj6t9uRShDggjJfAFEWs3wJpEpNYAAAPwuu8N/logo.png" - }, - { - "chainId": 101, - "address": "DyYPwCYLNrxKyBS53xhEN3PPD8GECbkVUwRqWU6Shru3", - "symbol": "BSPCP", - "name": "Brainstorm Capital Investment", - "decimals": 0, - "logoURI": "https://github.com/seanklee0810/bchain/blob/main/logo.png", - "tags": ["social-token", "community-token"] - }, - { - "chainId": 101, - "address": "27Rd4SZ75RkFDdf2PVX79Z23hzMuZyEBWABkt4Pa3qDB", - "symbol": "TARP", - "name": "THE AFFORDABLE RENT PROJECT", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/SGTCHIKO/TARP/main/TARP_LOGO.png?token=GHSAT0AAAAAABVCIKZJ2OZXTZ5LTUQ7BWMEYVFOUFQ", - "tags": ["Rent", "Apartments", "Home", "Real-Estate", "Rent-is-to-high"], - "extensions": { - "website": "http://theaffordablerentproject.com" - } - }, - { - "chainId": 101, - "address": "9Cu2sChBnfCJGKUXXXhuvHbTDiEv9Y7KZqPAtLtVeof3", - "symbol": "DS", - "name": "Duck Skull", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9Cu2sChBnfCJGKUXXXhuvHbTDiEv9Y7KZqPAtLtVeof3/logo.png", - "tags": ["social-token"], - "extensions": { - "discord": "https://discord.gg/xbDCUaJUgh" - } - }, - { - "chainId": 101, - "address": "81buE3LLcsURUSR3KG4mJkYTvpGVeyrSES3txNtXgKem", - "symbol": "FTKC", - "name": "KULTURE Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/micusmedia/MMGCrypto/main/KULTURE_COIN_200.png", - "tags": ["social-token", "economic-token", "kulturecoin-token"] - }, - { - "chainId": 103, - "address": "3ev8N5p8jGw1yF6uQkR5zDWWpo6fsAev23RyNwvqzHv3", - "symbol": "$TENKA", - "name": "Ignite Tournament", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3ev8N5p8jGw1yF6uQkR5zDWWpo6fsAev23RyNwvqzHv3/logo.png" - }, - { - "chainId": 101, - "address": "7ctmggF48CzBq6L6JvmcM5KrjfRm4zMir1ycVoFfkd31", - "symbol": "CDG", - "name": "Crypto Digging Gem", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/quachthanhhmd/token-store/master/assets/cdg.png" - }, - { - "chainId": 103, - "address": "9zMUxkyMmQF2GuxQ7aZqmvuqttsb9ru9n1zn9gF9KhTG", - "symbol": "TBDG2", - "name": "T_BDG_2", - "decimals": 1, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9zMUxkyMmQF2GuxQ7aZqmvuqttsb9ru9n1zn9gF9KhTG/B_BARRE.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3aKHn2FYrTx2A9vFQwGoeAugcWsA1SJfp44g3AVReRJe", - "symbol": "CAST", - "name": "The Castle", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3aKHn2FYrTx2A9vFQwGoeAugcWsA1SJfp44g3AVReRJe/logo.png", - "tags": ["meme-token"], - "extensions": { - "twitter": "https://twitter.com/CastleTheKings" - } - }, - { - "chainId": 101, - "address": "BWMkZUCaG23uHUTEUC9S32cimW9p8qaKMHj2vEfskHtr", - "symbol": "$points", - "name": "Mammadhuseynov", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jaknve/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HvHq52D47mNLK5LDrZ3quJfmX2B6Z9RkSJGPyq1pAr36", - "symbol": "LOX", - "name": "Loxus", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HvHq52D47mNLK5LDrZ3quJfmX2B6Z9RkSJGPyq1pAr36/logo.png" - }, - { - "chainId": 101, - "address": "4u7M8yLZ3jK4tP8TZqLwSqK4Zw9EgiSJmvQUi4pjnkYM", - "symbol": "$INT", - "name": "intellicoin", - "decimals": 1, - "logoURI": "https://raw.githubusercontent.com/Saeidjamali/intellicoin/main/intellicoing.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "odfLnBGecR5jmzd2aLvqRP1BHAQybAwCK2bCtbQbmZ5", - "symbol": "$LTE", - "name": "Listen to Earn", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/gthiktm/-LTE/main/tokenicon.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "ExH7L93cNaB1jJcExTf8anwGQ7VbBg6zGvAowQ85Hcu7", - "symbol": "HCHI", - "name": "HaechiCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/yuujinhwng/crypto/main/haechilogos.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6wAsMDoZo7oPpvh5wyqmEaQ3PSCsZj3X45LqBUh8myZv", - "symbol": "OrbitWL", - "name": "Unfrgtn Orbit Whitelist", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6wAsMDoZo7oPpvh5wyqmEaQ3PSCsZj3X45LqBUh8myZv/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/UnfrgtnOrbit", - "website": "https://unfrgtn.space" - } - }, - { - "chainId": 101, - "address": "HFtQgjTJPs88q3JBhHrmWYoj985k2eSD3Dsx5RsBRSvc", - "symbol": "TAZ", - "name": "Taz Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/antar4/TazCoin/main/TazCoin-logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8Tjjm9zB8sLJNFNALq7MRrnL9ygY354XX7dV4zkcb4Tj", - "symbol": "Rev-WL", - "name": "Re-Evolution Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8Tjjm9zB8sLJNFNALq7MRrnL9ygY354XX7dV4zkcb4Tj/RevWLIcon.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/Re_EvolutionNFT" - } - }, - { - "chainId": 101, - "address": "HCpyiCXvziKByTGoQMLUmooAWBkCLvZmzB9D6TyPdACR", - "symbol": "qdot", - "name": "qdot", - "decimals": 8, - "logoURI": "https://cdn.jsdelivr.net/gh/CleverChuk/qdot@main/assets/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://musicq.club/" - } - }, - { - "chainId": 101, - "address": "FWzbsdoXocZHiDAUhtC3ur3kMusnWMjJYye29R4GuxcQ", - "symbol": "SXWT", - "name": "SolExpress Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SEPAD12/Logo/main/SE-Logo.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "HQ2YfjamQg5y5utHrhC3ERgJfFFHy7N6nRQeW4WD8F4X", - "symbol": "INVC", - "name": "INVERSO COIN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/INVERSOCoin/CryptoLOGO/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2AovdGs88UWaLgjyzxUepQMGHP8CPHyrXg2hSHpePRen", - "symbol": "TakeoWL", - "name": "Takeo Cats Whitelist", - "decimals": 8, - "logoURI": "https://cdn.jsdelivr.net/gh/samuKatana/WL_LOGO_TOKEN/wllogo.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/TakeoNFT", - "website": "https://www.takeo.io/" - } - }, - { - "chainId": 101, - "address": "8BdWjY3KPmr5KjrXRyaWr3K7gA9KFdjugcEodjpTDSxx", - "symbol": "TakeoCatsWL", - "name": "Takeo Whitelist", - "decimals": 0, - "logoURI": "https://cdn.jsdelivr.net/gh/samuKatana/WL_LOGO_TOKEN/wllogo.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/TakeoNFT", - "website": "https://www.takeo.io/" - } - }, - { - "chainId": 101, - "address": "6PA4dYYF654sfUK1eDd2RCihbF6L71JyGoyAfcUb9V5u", - "symbol": "BECCA", - "name": "Becca Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Dakender/Becca-Coin/main/logo-becca.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ESVGBqewDDcmY9WYX9LekSy8E1v8Q8sXXK5WkQAtCWRM", - "symbol": "ITC", - "name": "InventorsCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ESVGBqewDDcmY9WYX9LekSy8E1v8Q8sXXK5WkQAtCWRM/logo.png" - }, - { - "chainId": 101, - "address": "neoSCa3b4HJR6TF3pVQzph3yrcd97ZMovCVaRC8bRss", - "symbol": "$NEO", - "name": "Neo Hunters Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/neoSCa3b4HJR6TF3pVQzph3yrcd97ZMovCVaRC8bRss/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/neohunters", - "twitter": "https://twitter.com/neo_hunters", - "website": "https://neohunters.io/" - } - }, - { - "chainId": 101, - "address": "7zuDvbyjckburc6hASJ7TtXzPFoe9ps4bgq39Zvs4hPg", - "symbol": "ICNT", - "name": "iConnectandmore Token", - "decimals": 0, - "logoURI": "https://github.com/iconnectandmore/tokens/blob/main/logo-image-iconn-200x200.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2nmwnHy3mg7sVdKszSYfgT1hdAMEv168oYgEimSufwdW", - "symbol": "PZHDOG", - "name": "Pizza Headz OG Pielist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2nmwnHy3mg7sVdKszSYfgT1hdAMEv168oYgEimSufwdW/logo.jpg", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/PizzaHeadzNFT", - "website": "https://www.pizzaheadz.io/" - } - }, - { - "chainId": 101, - "address": "FsHfCRt4A5aiVEgY2Daxqf24vuMCQepJvydkb4Yc8QAd", - "symbol": "PZHDPL", - "name": "Pizza Headz Pielist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FsHfCRt4A5aiVEgY2Daxqf24vuMCQepJvydkb4Yc8QAd/logo.jpg", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/PizzaHeadzNFT", - "website": "https://www.pizzaheadz.io/" - } - }, - { - "chainId": 101, - "address": "CUejbcKs5w2c5M5FPzUetwPcwJ8QycKTua3FhwnQhyHh", - "symbol": "HANDT", - "name": "HAND DEV", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CUejbcKs5w2c5M5FPzUetwPcwJ8QycKTua3FhwnQhyHh/LogoHS.png" - }, - { - "chainId": 101, - "address": "EVyTumcuRtkbWvnHCLf6safa8GjZpw2uuQYzKD6GfMoy", - "symbol": "JACK", - "name": "JACKPOTCOIN", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EVyTumcuRtkbWvnHCLf6safa8GjZpw2uuQYzKD6GfMoy/logo.png", - "tags": ["community-token", "JACKCOIN"], - "extensions": { - "website": "http://jackpotcast.com/" - } - }, - { - "chainId": 101, - "address": "SKSE1d9hHn4jJGejGzuwnpD8DMM5TBKQ18ikUFSrx1C", - "symbol": "sKSE", - "name": "Banksea Staking Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/SKSE1d9hHn4jJGejGzuwnpD8DMM5TBKQ18ikUFSrx1C/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/F4AcB4ycCQ", - "twitter": "https://twitter.com/banksea_finance", - "website": "https://banksea.finance" - } - }, - { - "chainId": 103, - "address": "ND8Hje1MuZUqMYbxSh8gQCooMSuddky1NBwmX5NpsM9", - "symbol": "PUMA", - "name": "PumaCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/MauriRamos19/puma-coin-project/main/Recursos/logo.png", - "tags": ["utility-token", "social-token", "stable-token"] - }, - { - "chainId": 101, - "address": "7S42pFMbsEsHZfAPyswEQHQkaFrJcdYnXqmFb2Cb5zwv", - "symbol": "McBall", - "name": "BC Capital", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ksleetech/BSPCP/main/McLogo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DAPE1HkT8uHykg6oi9ooFp8ZVWppH4sVoDUg3rcqQPeA", - "symbol": "DAPE", - "name": "DeApe DAO Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DAPE1HkT8uHykg6oi9ooFp8ZVWppH4sVoDUg3rcqQPeA/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://deapes.finance/" - } - }, - { - "chainId": 101, - "address": "DoCjPWEQgA1Crk1J3rrkPp9b3piGJw9G2wVsEuRz1oVS", - "symbol": "NA", - "name": "Noah Raffle WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DoCjPWEQgA1Crk1J3rrkPp9b3piGJw9G2wVsEuRz1oVS/logo.jpg", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "CyBzRibJpFRFE5jarrkNizrqJNsUc3yZYfquY8Kr3tBY", - "symbol": "TC", - "name": "TC Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/wajahatrashid1/crypto/main/logoo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/KeniaRutishaus1" - } - }, - { - "chainId": 101, - "address": "BZtVdUaAweWzNZLKrvk2iULAjDYTs6boQEFKa4EoyhiB", - "symbol": "SYB", - "name": "SYB Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BZtVdUaAweWzNZLKrvk2iULAjDYTs6boQEFKa4EoyhiB/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "GKYYvdRQCivXWFWY7GbQmwfemW1KFLycqj8nmmdBy1ao", - "symbol": "passat", - "name": "Passat Token", - "decimals": 1, - "logoURI": "https://fra1.digitaloceanspaces.com/facewallet-prod/public/e04f59a8-6d27-4e57-a393-6e061c7f1933", - "tags": ["community-token"] - }, - { - "chainId": 101, - "address": "9vXd2WXo3oM6kSJoeY6GNFgXi7WDtZPXuDZ183qpUjdr", - "symbol": "BCO2", - "name": "BLUE CARBON", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9vXd2WXo3oM6kSJoeY6GNFgXi7WDtZPXuDZ183qpUjdr/logo.png" - }, - { - "chainId": 101, - "address": "D5wuTKz1KWXun8tE8ANsJTH1CX7o1xmMwKyTfGUasT52", - "symbol": "GCO2", - "name": "GOLD CARBON", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/D5wuTKz1KWXun8tE8ANsJTH1CX7o1xmMwKyTfGUasT52/logo.png" - }, - { - "chainId": 101, - "address": "3A3faka1wemjLX4dUSXmxNXBKodRxvPTmcvN1aeKsfNm", - "symbol": "SCO2", - "name": "SILVER CARBON", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3A3faka1wemjLX4dUSXmxNXBKodRxvPTmcvN1aeKsfNm/logo.png" - }, - { - "chainId": 101, - "address": "9Z3ejVAEeCY6tapfMUMGCfwwfxQXwH8tM1gJ5CkH5XQE", - "symbol": "PCO2", - "name": "PLATINUM CARBON", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9Z3ejVAEeCY6tapfMUMGCfwwfxQXwH8tM1gJ5CkH5XQE/logo.png" - }, - { - "chainId": 101, - "address": "4R8gJi5PMH8g2bg8tw9uyiG7i6uxiyc8CRQKfap7vpt6", - "symbol": "FCO2", - "name": "FARMERS CARBON", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4R8gJi5PMH8g2bg8tw9uyiG7i6uxiyc8CRQKfap7vpt6/logo.png" - }, - { - "chainId": 101, - "address": "2M9dSPWE8ZgryZhTrtrZv43wxuFDAJAwp9pzUPpEuc6D", - "symbol": "$SEED", - "name": "SEED", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/puresec-ng/gary/main/SEED_coin.png" - }, - { - "chainId": 101, - "address": "9EP6rW2q6YteTQBsdxVR6rS8B6rcr9EriBnAdfK4Nqn2", - "symbol": "$CNECTR", - "name": "CONNECTOR", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/puresec-ng/gary/main/CNECTR_coin.png" - }, - { - "chainId": 101, - "address": "8q7rfS8M8jir8U3VdKXsNk7zEitdq9p8WpbpRg7K4cMd", - "symbol": "$PIPER", - "name": "PIPER", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/puresec-ng/gary/main/PIPER_coin.png" - }, - { - "chainId": 101, - "address": "2bESmZmQLgMUtzfiyPMPG7zJHwDCeV8a7z4fe3bDsrBS", - "symbol": "TakeoCatsWL", - "name": "Takeo NFT Whitelist", - "decimals": 0, - "logoURI": "https://cdn.jsdelivr.net/gh/samuKatana/WL_LOGO_TOKEN/wllogo.png", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/TakeoNFT", - "website": "https://www.takeo.io/" - } - }, - { - "chainId": 101, - "address": "RLNF6G4CJT9NMAjNuYtPjU43S2Fx31UKzgEWgsympgJ", - "symbol": "$CHIN", - "name": "CryptoChins", - "decimals": 9, - "logoURI": "https://arweave.net/zxNiI1tp9VV-tEY1nMfNY59JvAymwQS-_b-022kKImg?ext=png", - "tags": ["utility-token", "social-token", "nft-token"], - "extensions": { - "twitter": "https://twitter.com/cryptochins", - "website": "https://thecryptochins.com" - } - }, - { - "chainId": 101, - "address": "TMPLE59azbK8tJHzkyofoj7oTuScWR5VK8oAbXAwW5u", - "symbol": "$TMPL", - "name": "Temple Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/TMPLE59azbK8tJHzkyofoj7oTuScWR5VK8oAbXAwW5u/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/TempleBeasts" - } - }, - { - "chainId": 101, - "address": "DAPECzzTd4PQ9JR7UWDpmM798boAFv1oLBdN8QGFQb1z", - "symbol": "DAPE", - "name": "DeApes DAO", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DAPECzzTd4PQ9JR7UWDpmM798boAFv1oLBdN8QGFQb1z/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://deapes.finance/" - } - }, - { - "chainId": 101, - "address": "MLUPoikDQq2Vem7CQ1HFnF2p1VieUmDSshCYisALLhe", - "symbol": "$TaKeoWL", - "name": "TakeoNFT Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/samuKatana/WL_LOGO_TOKEN/main/wllogo.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 103, - "address": "A4G3NcWwU5eFfHJAS6qST4vwqPVe2SczxdgDCtYeajZx", - "symbol": "XC", - "name": "XCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/A4G3NcWwU5eFfHJAS6qST4vwqPVe2SczxdgDCtYeajZx/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://bxplus.co" - } - }, - { - "chainId": 101, - "address": "34BNRduGN8fiRCVgu6hjDUa5mqyvtuSw7mA7wwNAeSUy", - "symbol": "LSD", - "name": "Lunar System Dollar", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/34BNRduGN8fiRCVgu6hjDUa5mqyvtuSw7mA7wwNAeSUy/logo.png" - }, - { - "chainId": 101, - "address": "kbuNPojG4aVbTQ7gWcmmga5YNyny5BHHYatFaKXuKxU", - "symbol": "TERIUM", - "name": "Terium", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/kbuNPojG4aVbTQ7gWcmmga5YNyny5BHHYatFaKXuKxU/logo.svg", - "tags": ["utility-token"], - "extensions": { - "description": "Swap your gift on terium.info", - "website": "https://terium.info" - } - }, - { - "chainId": 101, - "address": "54i1hUrQM4pCcyje62pbm8usj2Bxa8ywEF6hi3XP6uzx", - "symbol": "NSTR", - "name": "Nestor Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ribj93/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "7QtUroWAcpwyHVgsaiYyNnfWMU899fk288T5LXVBu9hh", - "symbol": "TBDG3", - "name": "T_BDG_3", - "decimals": 1, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7QtUroWAcpwyHVgsaiYyNnfWMU899fk288T5LXVBu9hh/B_ROND_1.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "HDMsanNyhoKB9qDFtxVY1RQaFw7h1XAVLmBTdtQ7nBVe", - "symbol": "HDMWL", - "name": "HDM Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HDMsanNyhoKB9qDFtxVY1RQaFw7h1XAVLmBTdtQ7nBVe/logo.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "G541xHAw1xSH6aCUBDJR3zcgBBbedBm2LU3yoqqhGvVA", - "symbol": "SILVR", - "name": "Mined Silver", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/G541xHAw1xSH6aCUBDJR3zcgBBbedBm2LU3yoqqhGvVA/logo.png", - "tags": ["utility-token", "community-token"] - }, - { - "chainId": 101, - "address": "8ZFkaYFn6AtkrwE469k4YXmzy8GHKK2BCdyY2gmSaEn6", - "symbol": "BKB", - "name": "Blockombat", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/Robby3082/test-token/main/BKB%20Logo.png", - "tags": ["Utility-token"], - "extensions": { - "description": "Creator: Blockombat Team", - "website": "https://blockombat.com" - } - }, - { - "chainId": 101, - "address": "D7duYpwjf4zTUPHRpy6Wvu4viNLWDWSYcDHMH1ssJv3s", - "symbol": "hust", - "name": "Hustle", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/LouisDeSimone/dietToken/main/gymapes.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "8b9mPcqdgU495nLdCbWdsZ81Bk81mKLoRRfmW1zabkTz", - "symbol": "ONEPAT", - "name": "One Peace", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Krishna-Thomas/onepeacetoken/main/onepeacetoken.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "Gj4a2baCEWv9yKzM4wvPN3S1aGzdbponTaK6cFBYdEcP", - "symbol": "LOX", - "name": "Loxus Pay", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Gj4a2baCEWv9yKzM4wvPN3S1aGzdbponTaK6cFBYdEcP/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/unmUvytk8X", - "instagram": "https://www.instagram.com/loxus_updates/", - "twitter": "https://twitter.com/loxus_updates", - "website": "https://www.loxus.org/" - } - }, - { - "chainId": 101, - "address": "4V9NQ4F4R2mG5VJhEAet6iLKN4MBoLxSqX3PJirN5qsU", - "symbol": "NVRLCC", - "name": "Car Culture", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4V9NQ4F4R2mG5VJhEAet6iLKN4MBoLxSqX3PJirN5qsU/logo.png", - "tags": ["community", "airdrop", "NVRLCC"], - "extensions": { - "discord": "https://discord.gg/metawhips", - "twitter": "https://twitter.com/wccmetawhips", - "website": "https://www.skrrrt.vip" - } - }, - { - "chainId": 101, - "address": "m3uDaCvukJENJhHkyLEs3nRzd8JHMSjUfL9QMyPJmdL", - "symbol": "$HOOT", - "name": "owlz hoot", - "decimals": 7, - "logoURI": "https://raw.githubusercontent.com/Verorian/icon/main/istockphoto-1069798050-170667a.jpg" - }, - { - "chainId": 101, - "address": "211KTsj51pCuapiUMPGKJwDYPB55LuiJpQx1ojiiinSh", - "symbol": "STPD", - "name": "STOOPID Apes Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/211KTsj51pCuapiUMPGKJwDYPB55LuiJpQx1ojiiinSh/logo.png" - }, - { - "chainId": 101, - "address": "2cQgtwwJUi5uSoB4jFJ4v6GVGe9YQjsVF8tRpWLHMx12", - "symbol": "LSD", - "name": "LUNAR-SYSTEM-DOLLAR", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2cQgtwwJUi5uSoB4jFJ4v6GVGe9YQjsVF8tRpWLHMx12/logo.png" - }, - { - "chainId": 101, - "address": "3wmsJkKWLdFT4tF4rG8zUZQ8M4hKUDtDuJW8q6i9KbgF", - "symbol": "TDG", - "name": "TrueSight DAO - Governance", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3wmsJkKWLdFT4tF4rG8zUZQ8M4hKUDtDuJW8q6i9KbgF/logo.png", - "tags": ["governance-token", "community-token", "social-token"], - "extensions": { - "description": "TSG is a governance token for our universal credibility protocol. Our purpose is to build a better world based on verifiable truth. We believe liberal democratic societies around the world are increasingly destablized by information pollution and this leads to ignorant decisions which cause human suffering. Our mission is fight information pollution by providing individuals with the clarity to make critical decisions.", - "discord": "https://discord.gg/gEfypKdCEW", - "facebook": "https://www.facebook.com/TrueSightMe", - "imageUrl": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3wmsJkKWLdFT4tF4rG8zUZQ8M4hKUDtDuJW8q6i9KbgF/logo.png", - "reddit": "https://www.reddit.com/r/truesightme/", - "website": "https://truesight.me" - } - }, - { - "chainId": 101, - "address": "3CKoFsaEYUgLH7ZYHyoADFpoo6NwysrvzMTeyE1akEtC", - "symbol": "GECKO", - "name": "Gecko Token", - "decimals": 2, - "logoURI": "https://fuzionblox.com/gecko_icon.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://fuzionblox.com" - } - }, - { - "chainId": 101, - "address": "ToPGAbmu9c47RhsK7HneUSAPio8uAKR9MGuQbcV2yW7", - "symbol": "KUL", - "name": "Kulture", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ToPGAbmu9c47RhsK7HneUSAPio8uAKR9MGuQbcV2yW7/logo.png" - }, - { - "chainId": 101, - "address": "8YPwxJ7geGS8jjtTYzKaYbgkFWBQQHKtfHS4g2nzXcHt", - "symbol": "WAR", - "name": "WAR Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8YPwxJ7geGS8jjtTYzKaYbgkFWBQQHKtfHS4g2nzXcHt/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://warlandnft.art" - } - }, - { - "chainId": 101, - "address": "HELLBR3SoErMY1JkcnHMes3xTYoHaRMFJQGzWMATpQf9", - "symbol": "$HELL", - "name": "HELL", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HELLBR3SoErMY1JkcnHMes3xTYoHaRMFJQGzWMATpQf9/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/TheSneakyDevils", - "website": "https://www.thesneakydevils.com/" - } - }, - { - "chainId": 101, - "address": "98ouGzbMV2DnHfn3Uc7oahwvDP4Cf7Ls77JsBiARdjvn", - "symbol": "DBC", - "name": "DBank Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/98ouGzbMV2DnHfn3Uc7oahwvDP4Cf7Ls77JsBiARdjvn/logo.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "website": "https://dbank.to/" - } - }, - { - "chainId": 101, - "address": "4i565nbEspucgEDbNFNmk47LmJaftQtWUjT9Kx2KnhLA", - "symbol": "$GFY", - "name": "GOOFY", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4i565nbEspucgEDbNFNmk47LmJaftQtWUjT9Kx2KnhLA/logo.png", - "tags": ["utility-token", "social-token"], - "extensions": { - "twitter": "https://twitter.com/GoofyDao" - } - }, - { - "chainId": 101, - "address": "FMXwmGWkZvNYUGYZfsx2Kkku9WTdhpjU1qyDaNoW3URn", - "symbol": "HDMFM", - "name": "HDM Free Mint", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FMXwmGWkZvNYUGYZfsx2Kkku9WTdhpjU1qyDaNoW3URn/logo.png", - "tags": ["whitelist-token"] - }, - { - "chainId": 101, - "address": "61GPeHD7K3GgeijVbYfE3NcZjLLhXuj19WEWRFmjyeeP", - "symbol": "TIGER", - "name": "TIGER KOIN", - "decimals": 6, - "logoURI": "https://github.com/theaveasso/tigerkoin/blob/main/logo/tigerkoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FXe7K4EtThAzsu7dphLBKtbjFwE3AeMaFC7kwVd3ifhS", - "symbol": "xC98", - "name": "Synthetic Coin98", - "decimals": 6, - "logoURI": "https://www.synthetify.io/icons/xc98.svg", - "extensions": { - "coingeckoId": "coin98", - "twitter": "https://twitter.com/synthetify", - "website": "https://synthetify.io/" - } - }, - { - "chainId": 101, - "address": "E6HjU9u1HrrCQs3ZKjcVZLUp4oXjNoMs5rjGNXC4Ufrd", - "symbol": "MCY", - "name": "MEGACY", - "decimals": 6, - "logoURI": "https://megacy.io/images/Logo%20page.svg", - "extensions": { - "discord": "https://discord.gg/XBamgzuA", - "twitter": "https://twitter.com/MEGACY_Official", - "website": "https://megacy.io" - } - }, - { - "chainId": 101, - "address": "uU1bU1ccSXRTsUNQkDdwbWuFfqZ9iPkxfKnWQff4wrg", - "symbol": "DGD", - "name": "Degoddess Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/uU1bU1ccSXRTsUNQkDdwbWuFfqZ9iPkxfKnWQff4wrg/DGD.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "AG5j4hhrd1ReYi7d1JsZL8ZpcoHdjXvc8sdpWF74RaQh", - "symbol": "svtOKAY", - "name": "Okay Bears Solvent Droplet", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AG5j4hhrd1ReYi7d1JsZL8ZpcoHdjXvc8sdpWF74RaQh/logo.png", - "tags": ["utility-token", "solvent-droplet"], - "extensions": { - "discord": "https://discord.gg/thK8BCtQbM", - "github": "https://github.com/solventprotocol", - "medium": "https://medium.com/@solventprotocol", - "telegram": "https://t.me/solventprotocol", - "twitter": "https://twitter.com/solventprotocol", - "website": "https://solvent.xyz" - } - }, - { - "chainId": 101, - "address": "9puTadWjsBwmvkpdEychJ79FLu2uFTC3MkvwEuRD6ssa", - "symbol": "ERTC", - "name": "Eratosian Credit", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ajm24027/crypto/main/Eratosian-Credits-Logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "TooGMgD3Xa5qmuzQax8cMd33vJSPgJavqixQ3WKAYYo", - "symbol": "PUT", - "name": "Peaceful Utility Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MikeStone6/SPL-Token-Creation/main/logo.png?token=GHSAT0AAAAAABSPTF373RJV5QKVLBRSTDIWYVINTUA", - "tags": ["utility-token"], - "extensions": { - "website": "https://peacefulpigeons.xyz" - } - }, - { - "chainId": 101, - "address": "E2VVnLTRGtqWc2K9dzHwUr14yEc5jZM1Bh42VyRspJm9", - "symbol": "HCODE", - "name": "Heisenberg Code", - "decimals": 18, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/E2VVnLTRGtqWc2K9dzHwUr14yEc5jZM1Bh42VyRspJm9/HCODE.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/Heisenberg_Code", - "website": "http://HeisenbergCode.com" - } - }, - { - "chainId": 101, - "address": "A8VuM8oJfZjB4cbUWTBdc9pPmPoMyUjqa7TtzG3fboGe", - "symbol": "FADED", - "name": "Faded Foxes token", - "decimals": 0, - "logoURI": "https://cdn.jsdelivr.net/gh/NinaSnkrs/Superpals/fadedfoxes.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/FadedFoxess" - } - }, - { - "chainId": 101, - "address": "4cH3CvtwURFUVDnV1urH41kwnxfKsYFybonfctxwNSBS", - "symbol": "PALS", - "name": "Superpals Token", - "decimals": 0, - "logoURI": "https://cdn.jsdelivr.net/gh/NinaSnkrs/Superpals/superpalslogo.png", - "tags": ["community-token", "utility-token"], - "extensions": { - "twitter": "https://twitter.com/SuperpalsNFT" - } - }, - { - "chainId": 101, - "address": "4Qr3mocySorrF19rkHDcCVD3E4V3xYcriEnxH7rPoxm1", - "symbol": "WBC", - "name": "Wordbee Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/antar4/WordbeeCoin/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "GtwdPgvF46rRrVnABd1tYqQJruwXtjTokFQPpqnsJrxH", - "symbol": "DST", - "name": "DST", - "decimals": 9, - "logoURI": "https://static.134.226.99.88.clients.your-server.de:8092/logo/dst.png" - }, - { - "chainId": 103, - "address": "BXd2N7o4x62cqztqi1CxsAHZziTPZanZzQW1uscXnEa7", - "symbol": "DHT", - "name": "Dog Hard Token", - "decimals": 9, - "logoURI": "https://static.134.226.99.88.clients.your-server.de:8092/logo/dht.png" - }, - { - "chainId": 101, - "address": "2gneDznGY3HQd33C6mP9PjEtmCU6t43wEdmKJCao5mAd", - "symbol": "AOPO", - "name": "AOPOCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/gazza12401/aopo/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GQSfive4rvart6wwJXD5iuSeX4jQ9HRofDzBDrM1Yan3", - "symbol": "ATHR", - "name": "AITHER", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/FifthFaction/FifthFaction/main/token.png", - "tags": ["utility-token", "community-token"] - }, - { - "chainId": 103, - "address": "9ncNKy1uetJD96kBDuspbrTpuS8oAAyca4xC4YvXTJr", - "symbol": "TBDG4", - "name": "T_BDG_4", - "decimals": 1, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9ncNKy1uetJD96kBDuspbrTpuS8oAAyca4xC4YvXTJr/B_ROND_2.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "4QjMj1tF3dgJXtbQGS1MM5TWiPN8nEefmypUWzKg6TP3", - "symbol": "$TENKA", - "name": "Ignite Tournaments", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4QjMj1tF3dgJXtbQGS1MM5TWiPN8nEefmypUWzKg6TP3/logo.png" - }, - { - "chainId": 103, - "address": "8CscLiWHiUMCPQ9Ss4xowtn6JtBhmQRtu4sYd2m8hWi3", - "symbol": "MRF", - "name": "MetaRealFight", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/metarealfight/MRF-Token/main/MRFLOGOCUBE.png" - }, - { - "chainId": 101, - "address": "BjkAiRpUhtQZk4mZuTXGkb6pM92A6Kr7GkjmExzfYdaK", - "symbol": "JAGO", - "name": "JAGO SOLANA", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BjkAiRpUhtQZk4mZuTXGkb6pM92A6Kr7GkjmExzfYdaK/robot.png", - "tags": ["social-token"], - "extensions": { - "twitter": "https://twitter.com/Jimberly20", - "website": "https://jimgogarty.com/" - } - }, - { - "chainId": 101, - "address": "9esJPERfsEV8hedoXkrBJ74ZJ8BNQEU2WBRuyxomxeBN", - "symbol": "PPenguin", - "name": "PixelPenguin", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/BreezyBabieMint/trtrtr/main/server_icon.png" - }, - { - "chainId": 101, - "address": "3UYUHHubaSehdoqADUspBsvTjW8B3LLc1jP271skhRRz", - "symbol": "LRN", - "name": "Learn", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/alexmita04/gm-logo/main/learn_logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "3cPjFH55nsuscA4VeMZFTK3p7JNgVPsM4kegxNT4uagA", - "symbol": "GWLS", - "name": "Go Wellness", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Go-wellness/Token-logo/main/logo.png", - "tags": ["social-token"], - "extensions": { - "description": "GWLS is a token for our move to earn dapp", - "discord": "https://discord.com/invite/eFvswRkhQz", - "reddit": "https://www.reddit.com/user/GoWellnessApp", - "twitter": "https://twitter.com/GoWellnessApp", - "website": "https://gowellness.app/" - } - }, - { - "chainId": 101, - "address": "DivUSnR1VD8LfXjdto8GKiaFavCee5jG1aeT6RmGWpam", - "symbol": "MONOG", - "name": "Mondays OG Token", - "decimals": 0, - "logoURI": "https://arweave.net/gM12e9ompfPSSMfYA7u1WUPTUSDq0vs8US-YDjuFXRw", - "tags": ["Whitelist-token"], - "extensions": { - "discord": "http://discord.gg/GrmUcQkEgk", - "twitter": "https://twitter.com/MondaysNFT", - "website": "https://mondaysnft.com" - } - }, - { - "chainId": 101, - "address": "GLgABgDnNZS9FWuCFSZYvcQqu28zjEa8mKuYQ7DxxR8D", - "symbol": "$WLDF", - "name": "Wild Friends Coin", - "decimals": 9, - "logoURI": "https://github.com/ingrego19980907/for-solana-token/blob/main/logo.png", - "tags": ["utility-token", "social-token"], - "extensions": { - "website": "https://twitter.com/WildFriendsNFT" - } - }, - { - "chainId": 101, - "address": "7k27YrYpfZ5f6nDKefoGMBUghxjenpEmSj1AVq5qCfsE", - "symbol": "$LUCK", - "name": "LUCKOIN", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/luckynoti/crypto/main/LUCK.png", - "tags": ["utility-token", "social-token"], - "extensions": { - "website": "https://twitter.com/OnesiesArmy" - } - }, - { - "chainId": 101, - "address": "FZ1HHg2TbihMCdRisYeXQjAtRB7dzghEt3XWopvDAHZW", - "symbol": "SXA-3D-WL", - "name": "Space X Apes 3D Wbitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FZ1HHg2TbihMCdRisYeXQjAtRB7dzghEt3XWopvDAHZW/logo.png", - "extensions": { - "discord": "https://discord.gg/Mfgnj3xBk3", - "twitter": "https://twitter.com/spacexapes" - } - }, - { - "chainId": 101, - "address": "DJ5TCEN2epuVfqMkgVozSUCTLHi71RNRhQXELCVw12L4", - "symbol": "DJNRB", - "name": "Danjon Reborn derug", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DJ5TCEN2epuVfqMkgVozSUCTLHi71RNRhQXELCVw12L4/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/Z2SZ22AMnE", - "twitter": "https://twitter.com/DanjonReborn" - } - }, - { - "chainId": 101, - "address": "AEiGBSooswQgA1nB3AC8QVTDncpnpcqYFE163WwquTFz", - "symbol": "CRIM", - "name": "Crimson", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/flipthetip/test-tsc/main/W3B.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "BZQqhz2jvPBC1QDYdFyiqSo7zVXU5KofWv3rUG8fLhrA", - "symbol": "CCB", - "name": "CalculatorBari", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BZQqhz2jvPBC1QDYdFyiqSo7zVXU5KofWv3rUG8fLhrA/logo.jpg", - "tags": ["Calculator-token", "community-token"] - }, - { - "chainId": 101, - "address": "82hjawkN9hPBnB3SENwRyJnhdEgWy9iNFUkags2iBqbf", - "symbol": "$CALS", - "name": "CALORIES", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/HadesThaGod/token-list/main/assets/mainnet/82hjawkN9hPBnB3SENwRyJnhdEgWy9iNFUkags2iBqbf/logohd.png", - "tags": ["utility-token", "community-token"] - }, - { - "chainId": 101, - "address": "To3vvPkM9EEYHKXGPRuBukBbJcD79tT8fhAGHXqQpku", - "symbol": "MJWL", - "name": "Mahjong Dogs Whitelist Tokens", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MahjongDogs/assets/main/MJWL.png", - "tags": ["whitelist-token"], - "extensions": { - "discord": "https://discord.gg/F7qWPFD5z6", - "twitter": "https://twitter.com/mahjongdogs", - "website": "https://www.mahjongdogs.com/" - } - }, - { - "chainId": 101, - "address": "MJmojunjQmo4i7zHFnzm7qAS3wsTcsAYCQCzWW7yiH8", - "symbol": "MJOG", - "name": "Mahjong Dogs OG Tokens", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/MahjongDogs/assets/main/MJOG.png", - "tags": ["whitelist-token"], - "extensions": { - "discord": "https://discord.gg/F7qWPFD5z6", - "twitter": "https://twitter.com/mahjongdogs", - "website": "https://www.mahjongdogs.com/" - } - }, - { - "chainId": 101, - "address": "TtiEDoN8e4a1BuLSLk9jXeEsgqhWDHSzp3Cv3sHyJWG", - "symbol": "MIX", - "name": "MIXED", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/TtiEDoN8e4a1BuLSLk9jXeEsgqhWDHSzp3Cv3sHyJWG/logo.png", - "tags": ["social-token", "utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/ChanpuruRabbits" - } - }, - { - "chainId": 101, - "address": "mokbjVzjKtUF87rChcRoF8ZBTT2SwTuovLXbUkhAw8Y", - "symbol": "GOD", - "name": "LOVE GOD", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/krazyivan46/LoveGod/125a9eae9beb9e5df1873175ece7436e947e0118/sun.png", - "tags": ["community-token", "utility-token", "social-token"] - }, - { - "chainId": 101, - "address": "HQZa7v6bpYzBun8HdPvB7MQGtrS44e9638rML9jTVujn", - "symbol": "SHTR", - "name": "ShenTaro", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ShenTaro/ShenTaro/main/logo.png", - "tags": ["community-token", "utility-token", "social-token"] - }, - { - "chainId": 103, - "address": "5QMPH5cCrxiQ59gBvqqtauDoA2DGBgaP7qGyRGGXztBz", - "symbol": "SEND", - "name": "Sendinair Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/sendinair/logo/main/logo.png", - "tags": ["community-token", "utility-token"] - }, - { - "chainId": 101, - "address": "4UDbU1he3FzNNQieGcoS3wjXbrm8BDLzM38U8PVzuw36", - "symbol": "DGENZ", - "name": "Degen Coinz", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Wcworker/Wcdonalds/main/DGENZ.png", - "tags": ["community-token", "utility-token"], - "extensions": { - "twitter": "https://twitter.com/DegenboyzDao", - "website": "https://degenboyzdao.xyz" - } - }, - { - "chainId": 101, - "address": "8TkVVFpdo1WRQvjtQzMzR8LisoAnp2gCs8qTMNVeSXgN", - "symbol": "SPEE", - "name": "SpaceEve", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/leonardleonard/cyption/main/bighorse.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "BR7Bq2E7oH7RCb8b1fq2zCo1N7Ad85Ju8rnNp1e8UXs", - "symbol": "KAA", - "name": "Kaavs Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/cybersecmom/crypto/main/kaavs.png", - "tags": ["social-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/kaavs" - } - }, - { - "chainId": 101, - "address": "8UaGbxQbV9v2rsMxy2G2NEh1JYQ8T9dmggq1oesrXD9c", - "symbol": "RIBH", - "name": "Ribh", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8UaGbxQbV9v2rsMxy2G2NEh1JYQ8T9dmggq1oesrXD9c/logo.png", - "tags": ["DeFi", "stablecoin"], - "extensions": { - "discord": "https://discord.gg/vC4cmuZw", - "linkedin": "https://linkedin.com/company/ribh", - "twitter": "https://twitter.com/Ribh00857956", - "website": "https://ribh.finance" - } - }, - { - "chainId": 101, - "address": "2ez6ioJ5vpNonQEj3GBiHaK5yVu46QuQVLBnbjjiShvi", - "symbol": "SXA3DWL", - "name": "Space X Apes 3D Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2ez6ioJ5vpNonQEj3GBiHaK5yVu46QuQVLBnbjjiShvi/logo.png", - "extensions": { - "discord": "https://discord.gg/Mfgnj3xBk3", - "twitter": "https://twitter.com/spacexapes" - } - }, - { - "chainId": 101, - "address": "BoeDfSFRyaeuaLP97dhxkHnsn7hhhes3w3X8GgQj5obK", - "symbol": "svtFFF", - "name": "Famous Fox Federation Solvent Droplet", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BoeDfSFRyaeuaLP97dhxkHnsn7hhhes3w3X8GgQj5obK/logo.png", - "tags": ["utility-token", "solvent-droplet"], - "extensions": { - "discord": "https://discord.gg/thK8BCtQbM", - "github": "https://github.com/solventprotocol", - "medium": "https://medium.com/@solventprotocol", - "telegram": "https://t.me/solventprotocol", - "twitter": "https://twitter.com/solventprotocol", - "website": "https://solvent.xyz" - } - }, - { - "chainId": 101, - "address": "Ca5eaXbfQQ6gjZ5zPVfybtDpqWndNdACtKVtxxNHsgcz", - "symbol": "svtSMB", - "name": "Solana Monkey Business Solvent Droplet", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Ca5eaXbfQQ6gjZ5zPVfybtDpqWndNdACtKVtxxNHsgcz/logo.png", - "tags": ["utility-token", "solvent-droplet"], - "extensions": { - "discord": "https://discord.gg/thK8BCtQbM", - "github": "https://github.com/solventprotocol", - "medium": "https://medium.com/@solventprotocol", - "telegram": "https://t.me/solventprotocol", - "twitter": "https://twitter.com/solventprotocol", - "website": "https://solvent.xyz" - } - }, - { - "chainId": 101, - "address": "Bp6k6xacSc4KJ5Bmk9D5xfbw8nN42ZHtPAswEPkNze6U", - "symbol": "svtPSK", - "name": "Pesky Penguins Solvent Droplet", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Bp6k6xacSc4KJ5Bmk9D5xfbw8nN42ZHtPAswEPkNze6U/logo.png", - "tags": ["utility-token", "solvent-droplet"], - "extensions": { - "discord": "https://discord.gg/thK8BCtQbM", - "github": "https://github.com/solventprotocol", - "medium": "https://medium.com/@solventprotocol", - "telegram": "https://t.me/solventprotocol", - "twitter": "https://twitter.com/solventprotocol", - "website": "https://solvent.xyz" - } - }, - { - "chainId": 101, - "address": "Bc1PESHDH2VEbAorhiwVBcnPH1FNwsX7TnbzpPELGpUi", - "symbol": "svtGENO", - "name": "Genopets Genesis Solvent Droplet", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Bc1PESHDH2VEbAorhiwVBcnPH1FNwsX7TnbzpPELGpUi/logo.png", - "tags": ["utility-token", "solvent-droplet"], - "extensions": { - "discord": "https://discord.gg/thK8BCtQbM", - "github": "https://github.com/solventprotocol", - "medium": "https://medium.com/@solventprotocol", - "telegram": "https://t.me/solventprotocol", - "twitter": "https://twitter.com/solventprotocol", - "website": "https://solvent.xyz" - } - }, - { - "chainId": 101, - "address": "DCgRa2RR7fCsD63M3NgHnoQedMtwH1jJCwZYXQqk9x3v", - "symbol": "svtDGOD", - "name": "DeGods Solvent Droplet", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DCgRa2RR7fCsD63M3NgHnoQedMtwH1jJCwZYXQqk9x3v/logo.png", - "tags": ["utility-token", "solvent-droplet"], - "extensions": { - "discord": "https://discord.gg/thK8BCtQbM", - "github": "https://github.com/solventprotocol", - "medium": "https://medium.com/@solventprotocol", - "telegram": "https://t.me/solventprotocol", - "twitter": "https://twitter.com/solventprotocol", - "website": "https://solvent.xyz" - } - }, - { - "chainId": 101, - "address": "DpEoLovqcQDD2QkjybbFezRKbwiVxmYaNMEiEocP2Ucm", - "symbol": "ALUM", - "name": "Alumina", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DpEoLovqcQDD2QkjybbFezRKbwiVxmYaNMEiEocP2Ucm/alumina.png", - "tags": ["dApp", "develop"] - }, - { - "chainId": 101, - "address": "Ea5yp55vuw7GQRPNFiFAvcbD8pfFjfF5B68dMqugT6pT", - "symbol": "STAK", - "name": "Stake Pot", - "decimals": 9, - "logoURI": "https://s3.ap-southeast-1.amazonaws.com/media.stake.pot/token-logo.jpg", - "tags": ["Staking"], - "extensions": { - "twitter": "https://twitter.com/Stake_pot", - "website": "https://stakepot.net/", - "youtube": "https://www.youtube.com/channel/UCzn6CGi2FRAEBWND1Gn_EXg" - } - }, - { - "chainId": 101, - "address": "8vkTew1mT8w5NapTqpAoNUNHW2MSnAGVNeu8QPmumSJM", - "symbol": "svtWAVE", - "name": "Playground Waves Solvent Droplet", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8vkTew1mT8w5NapTqpAoNUNHW2MSnAGVNeu8QPmumSJM/logo.png", - "tags": ["utility-token", "solvent-droplet"], - "extensions": { - "discord": "https://discord.gg/thK8BCtQbM", - "github": "https://github.com/solventprotocol", - "medium": "https://medium.com/@solventprotocol", - "telegram": "https://t.me/solventprotocol", - "twitter": "https://twitter.com/solventprotocol", - "website": "https://solvent.xyz" - } - }, - { - "chainId": 101, - "address": "3b9wtU4VP6qSUDL6NidwXxK6pMvYLFUTBR1QHWCtYKTS", - "symbol": "svtEPOCH", - "name": "Playground Epochs Solvent Droplet", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3b9wtU4VP6qSUDL6NidwXxK6pMvYLFUTBR1QHWCtYKTS/logo.png", - "tags": ["utility-token", "solvent-droplet"], - "extensions": { - "discord": "https://discord.gg/thK8BCtQbM", - "github": "https://github.com/solventprotocol", - "medium": "https://medium.com/@solventprotocol", - "telegram": "https://t.me/solventprotocol", - "twitter": "https://twitter.com/solventprotocol", - "website": "https://solvent.xyz" - } - }, - { - "chainId": 101, - "address": "EiasWmzy9MrkyekABHLfFRkGhRakaWNvmQ8h5DV86zyn", - "symbol": "svtVSNRY", - "name": "Visionary Studios Solvent Droplet", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EiasWmzy9MrkyekABHLfFRkGhRakaWNvmQ8h5DV86zyn/logo.png", - "tags": ["utility-token", "solvent-droplet"], - "extensions": { - "discord": "https://discord.gg/thK8BCtQbM", - "github": "https://github.com/solventprotocol", - "medium": "https://medium.com/@solventprotocol", - "telegram": "https://t.me/solventprotocol", - "twitter": "https://twitter.com/solventprotocol", - "website": "https://solvent.xyz" - } - }, - { - "chainId": 101, - "address": "4wGimtLPQhbRT1cmKFJ7P7jDTgBqDnRBWsFXEhLoUep2", - "symbol": "svtFLARE", - "name": "Lifinity Flares Solvent Droplet", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4wGimtLPQhbRT1cmKFJ7P7jDTgBqDnRBWsFXEhLoUep2/logo.png", - "tags": ["utility-token", "solvent-droplet"], - "extensions": { - "discord": "https://discord.gg/thK8BCtQbM", - "github": "https://github.com/solventprotocol", - "medium": "https://medium.com/@solventprotocol", - "telegram": "https://t.me/solventprotocol", - "twitter": "https://twitter.com/solventprotocol", - "website": "https://solvent.xyz" - } - }, - { - "chainId": 101, - "address": "3GQqCi9cuGhAH4VwkmWD32gFHHJhxujurzkRCQsjxLCT", - "symbol": "svtGGSG", - "name": "Galactic Geckos Space Garage Solvent Droplet", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3GQqCi9cuGhAH4VwkmWD32gFHHJhxujurzkRCQsjxLCT/logo.png", - "tags": ["utility-token", "solvent-droplet"], - "extensions": { - "discord": "https://discord.gg/thK8BCtQbM", - "github": "https://github.com/solventprotocol", - "medium": "https://medium.com/@solventprotocol", - "telegram": "https://t.me/solventprotocol", - "twitter": "https://twitter.com/solventprotocol", - "website": "https://solvent.xyz" - } - }, - { - "chainId": 101, - "address": "8W2ZFYag9zTdnVpiyR4sqDXszQfx2jAZoMcvPtCSQc7D", - "symbol": "svtCWM", - "name": "The Catalina Whale Mixer Solvent Droplet", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8W2ZFYag9zTdnVpiyR4sqDXszQfx2jAZoMcvPtCSQc7D/logo.png", - "tags": ["utility-token", "solvent-droplet"], - "extensions": { - "discord": "https://discord.gg/thK8BCtQbM", - "github": "https://github.com/solventprotocol", - "medium": "https://medium.com/@solventprotocol", - "telegram": "https://t.me/solventprotocol", - "twitter": "https://twitter.com/solventprotocol", - "website": "https://solvent.xyz" - } - }, - { - "chainId": 101, - "address": "6F5A4ZAtQfhvi3ZxNex9E1UN5TK7VM2enDCYG1sx1AXT", - "symbol": "svtDAPE", - "name": "Degenerate Ape Academy Solvent Droplet", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6F5A4ZAtQfhvi3ZxNex9E1UN5TK7VM2enDCYG1sx1AXT/logo.png", - "tags": ["utility-token", "solvent-droplet"], - "extensions": { - "discord": "https://discord.gg/thK8BCtQbM", - "github": "https://github.com/solventprotocol", - "medium": "https://medium.com/@solventprotocol", - "telegram": "https://t.me/solventprotocol", - "twitter": "https://twitter.com/solventprotocol", - "website": "https://solvent.xyz" - } - }, - { - "chainId": 101, - "address": "5NRkDy2avdRZcoAvBRRSFrFwY7uZsCTsKXtUSLdYGLag", - "symbol": "svtTHUG", - "name": "Thugbirdz Solvent Droplet", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5NRkDy2avdRZcoAvBRRSFrFwY7uZsCTsKXtUSLdYGLag/logo.png", - "tags": ["utility-token", "solvent-droplet"], - "extensions": { - "discord": "https://discord.gg/thK8BCtQbM", - "github": "https://github.com/solventprotocol", - "medium": "https://medium.com/@solventprotocol", - "telegram": "https://t.me/solventprotocol", - "twitter": "https://twitter.com/solventprotocol", - "website": "https://solvent.xyz" - } - }, - { - "chainId": 101, - "address": "9FjYMr4BDNzZPYzKEfmieVpUjsha2Nt84TW6nf2B7wr1", - "symbol": "MAYCOIN", - "name": "Maycoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9FjYMr4BDNzZPYzKEfmieVpUjsha2Nt84TW6nf2B7wr1/logo.png", - "tags": ["utility-token", "stable-token"], - "extensions": { - "website": "https://maycoin.org/" - } - }, - { - "chainId": 101, - "address": "3hEg9WVDbPP6MeAFxQ1K5UkhsQgh3NudoPgWaBb7dV6t", - "symbol": "PAC", - "name": "PlutoArtsCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3hEg9WVDbPP6MeAFxQ1K5UkhsQgh3NudoPgWaBb7dV6t/logo.png", - "tags": ["utility-token", "social-token"], - "extensions": { - "website": "https://plutoarts.com/" - } - }, - { - "chainId": 101, - "address": "6Fwhvgxy3jZfpxBR1C6DqU8xrmVhfjXAZEM4qu7kha4b", - "symbol": "deDUST", - "name": "deDUST", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DUSTawucrTsGU8hcqRdHDCbuYhCPADMLM2VcCb8VnFnQ/logo.jpg", - "tags": ["NFT"], - "extensions": { - "website": "https://docs.dustprotocol.com/" - } - }, - { - "chainId": 101, - "address": "2oPjhzsLmoeieYCtMVy5pdixm52116c2Hf1SwFPZtJCM", - "symbol": "DARK", - "name": "DARKHOOD", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2oPjhzsLmoeieYCtMVy5pdixm52116c2Hf1SwFPZtJCM/logo.png", - "tags": ["utility-token", "community-token", "nft-token"], - "extensions": { - "discord": "https://discord.gg/kjQJ3PPR6C", - "twitter": "https://twitter.com/darkhoodnft", - "website": "https://darkhood.xyz" - } - }, - { - "chainId": 101, - "address": "7ZYwaUfN1BftozKcXv1a3Vhkd32y1VjD1NrDJRoDTDfR", - "symbol": "BPLW", - "name": "BPLW", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7ZYwaUfN1BftozKcXv1a3Vhkd32y1VjD1NrDJRoDTDfR/logo.png", - "tags": ["whitelist-token", "mint-token", "whitelist"], - "extensions": { - "description": "Bizarre Platypus Legendary Whitelist", - "twitter": "https://twitter.com/bizarreplatypus", - "website": "https://market.bizarreplatypus.io/" - } - }, - { - "chainId": 101, - "address": "6THoystBVULftbbmjAWh39X6rkUW6tmBxSkryP3K3Zqx", - "symbol": "JUSOLm", - "name": "JUSOLm", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6THoystBVULftbbmjAWh39X6rkUW6tmBxSkryP3K3Zqx/logo.png", - "tags": ["lp-token"], - "extensions": { - "description": "Juiced SOL Mercurial Carton Token", - "discord": "https://discord.gg/ZXBRGXccR2", - "instagram": "https://www.instagram.com/juicedfi", - "linkedin": "https://www.linkedin.com/company/juicedfi", - "medium": "https://www.medium.com/@juicedfinance", - "twitter": "https://twitter.com/JuicedProtocol", - "website": "https://www.juiced.fi", - "whitepaper": "https://juiced.fi/whitepaper.pdf" - } - }, - { - "chainId": 101, - "address": "8Tn5rShodF6Y3wHwwPicB73v3VyZPN6kDYj55vCxW8yp", - "symbol": "STAR", - "name": "STAR", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/cybiz-tva/star-token/main/star_logo.png", - "tags": ["Social-Token"] - }, - { - "chainId": 101, - "address": "9kGmcsP5fQ6YdUhzq45dHQeMsTj66iZvt9NtRgFUEF1Y", - "symbol": "JUBTCm", - "name": "JUBTCm", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9kGmcsP5fQ6YdUhzq45dHQeMsTj66iZvt9NtRgFUEF1Y/logo.png", - "tags": ["lp-token"], - "extensions": { - "description": "Juiced BTC Mercurial Carton Token", - "discord": "https://discord.gg/ZXBRGXccR2", - "instagram": "https://www.instagram.com/juicedfi", - "linkedin": "https://www.linkedin.com/company/juicedfi", - "medium": "https://www.medium.com/@juicedfinance", - "twitter": "https://twitter.com/JuicedProtocol", - "website": "https://www.juiced.fi", - "whitepaper": "https://juiced.fi/whitepaper.pdf" - } - }, - { - "chainId": 101, - "address": "61bjnxUgvq332wDVe1mtQ7TjFUNTxHGjgfebuj3WaihY", - "symbol": "SHAKING", - "name": "SHAKING", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/61bjnxUgvq332wDVe1mtQ7TjFUNTxHGjgfebuj3WaihY/logo.png", - "tags": ["utility-token", "social-token"], - "extensions": { - "discord": "https://discord.gg/9xdBTR2a3Y", - "twitter": "https://twitter.com/ShakySocials" - } - }, - { - "chainId": 101, - "address": "6Fne1xxkJB9s8VZZpQuJ55tHZuG64d4p5qkE2qbstP1e", - "symbol": "WNDO-LP", - "name": "WNDO-LP", - "decimals": 0, - "logoURI": "https://static1.squarespace.com/static/6252f1590fac8d79fb6d772e/t/62a9dec0fbc2fd196557dc98/1655299776527/wndocoinLP.png", - "tags": ["utility-token", "aldrin-wndo-lp"], - "extensions": { - "description": "WNDO is a utility token used on the WNDO platform. Buy stuff in the real world get rewarded in WNDO!", - "discord": "https://discord.gg/8J7V9qTbj6", - "twitter": "https://twitter.com/wndotoken", - "website": "https://www.wndo.io/" - } - }, - { - "chainId": 101, - "address": "8H8HZgsLxGjqc496w5ejxPBzegZkM1NPjawmPbNtJygz", - "symbol": "VOC", - "name": "Voice operation coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8H8HZgsLxGjqc496w5ejxPBzegZkM1NPjawmPbNtJygz/logo.png", - "tags": ["signalvoc"], - "extensions": { - "website": "http://signalvoc.io/" - } - }, - { - "chainId": 101, - "address": "UtxmnUbYn194TDKo4wiyXLhA2mbTFnTCEjxdLPiPBKy", - "symbol": "SUL", - "name": "Sul Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/igorsul/sul-token/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "6xoY3ZUeGMdoXgZg4yyDXiLSFUwwfEgrdguKaCip9Hkx", - "symbol": "LVUNI", - "name": "LOVE UNIVERSE", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/krazyivan46/universe/main/bigsun.png", - "tags": ["community-token", "utility-token", "social-token"] - }, - { - "chainId": 101, - "address": "J2X22dpPLyQCsTb4pB4623pvdZzGiNn27YycZvoSub32", - "symbol": "C+H", - "name": "C+H Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/hrodriguezfigueroa/crypto/main/crytpologo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DsKBCYD9bqppJTLgzEM5YBmZm2M5EvJLXmKTDDoych47", - "symbol": "TOPAZ", - "name": "TOPAZ", - "decimals": 9, - "logoURI": "https://github.com/drsaint1/drsaint/blob/main/gemsto.png", - "tags": [ - "Utility-token", - "community-token", - "Meme-token", - "Gaming", - "DeFi-token" - ], - "extensions": { - "discord": "https://discord.gg/sErP34DJj5", - "twitter": "https://twitter.com/topaz_sol" - } - }, - { - "chainId": 101, - "address": "5zAAGYqrQqSun77QkHd3RhpM45ktEDmKXDvLy34WrKAy", - "symbol": "TLC", - "name": "Tender Loving Care Initiative", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5zAAGYqrQqSun77QkHd3RhpM45ktEDmKXDvLy34WrKAy/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "DXA9itWDGmGgqqUoHnBhw6CjvJKMUmTMKB17hBuoYkfQ", - "symbol": "svtHNYG", - "name": "Honey Genesis Bee Solvent Droplet", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DXA9itWDGmGgqqUoHnBhw6CjvJKMUmTMKB17hBuoYkfQ/logo.png", - "tags": ["utility-token", "solvent-droplet"], - "extensions": { - "discord": "https://discord.gg/thK8BCtQbM", - "github": "https://github.com/solventprotocol", - "medium": "https://medium.com/@solventprotocol", - "telegram": "https://t.me/solventprotocol", - "twitter": "https://twitter.com/solventprotocol", - "website": "https://solvent.xyz" - } - }, - { - "chainId": 101, - "address": "CT1iZ7MJzm8Riy6MTgVht2PowGetEWrnq1SfmUjKvz8c", - "symbol": "svtBV", - "name": "Balloonsville Solvent Droplet", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CT1iZ7MJzm8Riy6MTgVht2PowGetEWrnq1SfmUjKvz8c/logo.png", - "tags": ["utility-token", "solvent-droplet"], - "extensions": { - "discord": "https://discord.gg/thK8BCtQbM", - "github": "https://github.com/solventprotocol", - "medium": "https://medium.com/@solventprotocol", - "telegram": "https://t.me/solventprotocol", - "twitter": "https://twitter.com/solventprotocol", - "website": "https://solvent.xyz" - } - }, - { - "chainId": 101, - "address": "ApBYh9W4n8ENAvuDDo7cqpJirMXbzzRYfsTYvNDxmcB2", - "symbol": "SHWL", - "name": "SharkListed", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ApBYh9W4n8ENAvuDDo7cqpJirMXbzzRYfsTYvNDxmcB2/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Shark Company NFT Official WL Token", - "discord": "https://discord.gg/AzEDxKQf9v", - "instagram": "https://instagram.com/ofa_nft?igshid=YmMyMTA2M2Y=", - "twitter": "https://twitter.com/OFA_NFT", - "website": "https://www.shark-company-nft.com/" - } - }, - { - "chainId": 101, - "address": "586Y61CZjs2cYWJHxBkoYAWzr4Uw6tmNLnGiMspen5hL", - "symbol": "BCWL", - "name": "Baked Cups White List Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/586Y61CZjs2cYWJHxBkoYAWzr4Uw6tmNLnGiMspen5hL/bc_wl_token.png", - "tags": ["utility-token", "whitelist-token"], - "extensions": { - "website": "https://stonercups.io/" - } - }, - { - "chainId": 101, - "address": "AADeU92VvTiNT94zk7GKryNyPhp2FWo5KXHZHHq8iHTc", - "symbol": "TRPN", - "name": "Trippin Coin", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AADeU92VvTiNT94zk7GKryNyPhp2FWo5KXHZHHq8iHTc/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "A coin created for use within the Trippin Bears DAO" - } - }, - { - "chainId": 101, - "address": "4Ey2wMeAKPPtSjuP4ZEQWzMVWUYauAhwEWLa7RJ1Wsqz", - "symbol": "SLNB", - "name": "SolanBots Whitelist", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DJKX1cX2SPPaTdYBeuriUeQUUEpi2UGBGGPQthNMrgaa/logo.png" - }, - { - "chainId": 101, - "address": "BYfBdm1sqa5x3BeqGb2UJ4M732XR6zaXJ8dxppUZhPoe", - "symbol": "MOON", - "name": "MOON", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BYfBdm1sqa5x3BeqGb2UJ4M732XR6zaXJ8dxppUZhPoe/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/FqgeDjfu4v", - "twitter": "https://twitter.com/TheMooners_NFT" - } - }, - { - "chainId": 101, - "address": "3XwZtyP5g2ku5cNzLXYcBYygvToXKdjw73GSRq73QYLQ", - "symbol": "KREECHURE", - "name": "Kreechures Floor Index", - "decimals": 2, - "logoURI": "https://i.imgur.com/xR8HIrL.png", - "tags": ["fraction-index", "bridgesplit-fraction", "kreechures", "fnft"], - "extensions": { - "discord": "https://discord.gg/bridgesplit", - "twitter": "https://twitter.com/bridgesplit", - "vault": "https://app.bridgesplit.com/fractions/3XwZtyP5g2ku5cNzLXYcBYygvToXKdjw73GSRq73QYLQ" - } - }, - { - "chainId": 101, - "address": "7xDgN47oTKfLpCtxd8fdnSfK4phC2WMo5QwwMKxePRHZ", - "symbol": "$HUGZ", - "name": "HUGZ", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7xDgN47oTKfLpCtxd8fdnSfK4phC2WMo5QwwMKxePRHZ/hugs_token.png", - "tags": ["nft", "utility-token"] - }, - { - "chainId": 103, - "address": "9ZcYhfJyoVa5nWjJFLdfkdfR6wBsk9jgXWXDqREHnsDx", - "symbol": "KTSC", - "name": "Kitsune coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Walanm/kitsune-token/main/kitsune.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "G2PFwn3qKfYoA4jEcP6AJ6JSS8GizDSqjdsadJpoLYxo", - "symbol": "PARSOC", - "name": "ParallelCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/ParallelSociety/ParallelCoin/main/ParallelCoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "KidWuYmiamWLXKkwkPiA3Fsfg5TExwDjB3UMA5t5jJQ", - "symbol": "KDZ", - "name": "Kidz", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/KidWuYmiamWLXKkwkPiA3Fsfg5TExwDjB3UMA5t5jJQ/logo.png" - }, - { - "chainId": 101, - "address": "ShyGFzMVVp9fVibf5ZnGVbgC9s9NkspZzqT8t6Dh4hx", - "symbol": "ShyGuy", - "name": "Shy Guys Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ShyGFzMVVp9fVibf5ZnGVbgC9s9NkspZzqT8t6Dh4hx/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/shyguysnfts" - } - }, - { - "chainId": 101, - "address": "AVWsBmfbzLehU9KDQCBuxFWc5cWauJGumL2iw8jYA4at", - "symbol": "BDLT", - "name": "BeardedLight", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/viledrow/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GBWT2DcrsgB6FpqtQQNLQp8ZX3wED4JTVHspMzYxGmbn", - "symbol": "GBWT", - "name": "Great Bulls Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GBWT2DcrsgB6FpqtQQNLQp8ZX3wED4JTVHspMzYxGmbn/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "EH6SBH3DFTvJ1ViFFfTDdUMHF79T8T8UXdH5rTagRZcX", - "symbol": "MARY", - "name": "Weed Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/dpnlv/cryto-weed/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 103, - "address": "J7M4qmEz3LPdVVcYzjmBinXWUk51Fp9B6SX5dHdzYneT", - "symbol": "PLV", - "name": "Planetverse Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/wooleah/planetverse-logo/main/logo.png", - "tags": ["community-token", "utility-token"] - }, - { - "chainId": 103, - "address": "5GovthC2NfAUwuYpSGmFbFT3pF1gMrJ5Hakbb817JYc5", - "symbol": "RD", - "name": "Race Dev", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/farhan067/RaceDev/main/logo.jpg" - }, - { - "chainId": 101, - "address": "EmLJ8cNEsUtboiV2eiD6VgaEscSJ6zu3ELhqixUP4J56", - "symbol": "svtTHUGZ", - "name": "Thugbirdz - Solvent Droplet", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EmLJ8cNEsUtboiV2eiD6VgaEscSJ6zu3ELhqixUP4J56/logo.png", - "tags": ["utility-token", "solvent-droplet"], - "extensions": { - "discord": "https://discord.gg/thK8BCtQbM", - "github": "https://github.com/solventprotocol", - "medium": "https://medium.com/@solventprotocol", - "telegram": "https://t.me/solventprotocol", - "twitter": "https://twitter.com/solventprotocol", - "website": "https://solvent.xyz" - } - }, - { - "chainId": 101, - "address": "4MSMKZwGnkT8qxK8LsdH28Uu8UfKRT2aNaGTU8TEMuHz", - "symbol": "svtGENE", - "name": "Genopets Genesis - Solvent Droplet", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4MSMKZwGnkT8qxK8LsdH28Uu8UfKRT2aNaGTU8TEMuHz/logo.png", - "tags": ["utility-token", "solvent-droplet"], - "extensions": { - "discord": "https://discord.gg/thK8BCtQbM", - "github": "https://github.com/solventprotocol", - "medium": "https://medium.com/@solventprotocol", - "telegram": "https://t.me/solventprotocol", - "twitter": "https://twitter.com/solventprotocol", - "website": "https://solvent.xyz" - } - }, - { - "chainId": 101, - "address": "BjqFNKk8h4QYc2FptDNeccEtZPitKzeSgjxdTvYTRApT", - "symbol": "E2N", - "name": "Entertainment 29", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/kumpagun/token_img/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "WERKZCY6o4eYu9cSh94s1RYC9rQG1parxuvwoW6FZAa", - "symbol": "$WERK", - "name": "WERK", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/WERKZCY6o4eYu9cSh94s1RYC9rQG1parxuvwoW6FZAa/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/BakedBeavers", - "website": "https://bakedbeavers.com/" - } - }, - { - "chainId": 101, - "address": "HYtdDGdMFqBrtyUe5z74bKCtH2WUHZiWRicjNVaHSfkg", - "symbol": "svtAURY", - "name": "Aurory - Solvent Droplet", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HYtdDGdMFqBrtyUe5z74bKCtH2WUHZiWRicjNVaHSfkg/logo.png", - "tags": ["utility-token", "solvent-droplet"], - "extensions": { - "discord": "https://discord.gg/thK8BCtQbM", - "github": "https://github.com/solventprotocol", - "medium": "https://medium.com/@solventprotocol", - "telegram": "https://t.me/solventprotocol", - "twitter": "https://twitter.com/solventprotocol", - "website": "https://solvent.xyz" - } - }, - { - "chainId": 101, - "address": "9acdc5M9F9WVM4nVZ2gPtVvkeYiWenmzLW9EsTkKdsUJ", - "symbol": "svtGOON", - "name": "Gooney Toons Solvent Droplet", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9acdc5M9F9WVM4nVZ2gPtVvkeYiWenmzLW9EsTkKdsUJ/logo.png", - "tags": ["solvent-droplet", "utility-token"], - "extensions": { - "discord": "https://discord.gg/thK8BCtQbM", - "github": "https://github.com/solventprotocol", - "medium": "https://medium.com/@solventprotocol", - "telegram": "https://t.me/solventprotocol", - "twitter": "https://twitter.com/solventprotocol", - "website": "https://solvent.xyz" - } - }, - { - "chainId": 101, - "address": "BAKeByLipzovqThC8bMpgEycUCTvNcMU82aKu2L5ihcY", - "symbol": "$BAKE", - "name": "Baked Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/CMHayden/crypto/master/baked_logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "TLAJct3sZjNPCeu3gX2ia9XXYTGRyRgXN7c6NETQj3p", - "symbol": "$TLA", - "name": "TLA Token", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/TLAJct3sZjNPCeu3gX2ia9XXYTGRyRgXN7c6NETQj3p/logo.png", - "tags": ["NFT", "utility-token"], - "extensions": { - "discord": "https://discord.com/invite/thelostapesnft", - "twitter": "https://twitter.com/thelostapesnft", - "website": "https://thelostapes.com/" - } - }, - { - "chainId": 101, - "address": "6Tf26EZ2F8efATQpodGKYMNMZccCTL1VPYzcC4kPF6cC", - "symbol": "FOXIE", - "name": "FOXIE TOKEN", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6Tf26EZ2F8efATQpodGKYMNMZccCTL1VPYzcC4kPF6cC/FOXIE_coin.png", - "tags": ["utility-token"], - "extensions": { - "website": "https://www.foxtopia.io/" - } - }, - { - "chainId": 101, - "address": "ETPz31G7uXGCAv8o2bDhWmx9ejZvNdmirg9x62N3AAga", - "symbol": "RAID", - "name": "RAID TOKEN", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/DefiTokens/assets/main/RAID%20TOKEN.png", - "extensions": { - "twitter": "https://twitter.com/SolRaiderz", - "website": "https://solraiderz.com/" - } - }, - { - "chainId": 101, - "address": "2XwJ3VjMgSgAHUSTTg4p8649tjYSJWWyyNpg7VvBfEoH", - "symbol": "KPFC", - "name": "KPF SI Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2XwJ3VjMgSgAHUSTTg4p8649tjYSJWWyyNpg7VvBfEoH/logo.png" - }, - { - "chainId": 101, - "address": "DCdMWbCEbVWQi6i4ndYBAGJkZSy3ZKSRwqJo9TyhBmxR", - "symbol": "ARTMOB", - "name": "Art of Mob", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DCdMWbCEbVWQi6i4ndYBAGJkZSy3ZKSRwqJo9TyhBmxR/logo2.png", - "tags": ["game", "ticket", "fungible", "key", "puzzle"], - "extensions": { - "discord": "https://discord.com/invite/artofmob", - "twitter": "https://twitter.com/artofmob", - "website": "https://www.artofmob.io/" - } - }, - { - "chainId": 101, - "address": "9EZKnUZW24dvRyfcfNCbVVmTHfCfenaL4DxNuA2JhVg6", - "symbol": "WA1JAY", - "name": "WA1JAY QSO Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9EZKnUZW24dvRyfcfNCbVVmTHfCfenaL4DxNuA2JhVg6/logo.png", - "tags": ["ham-radio", "amateur-radio", "utility-token"], - "extensions": { - "github": "https://github.com/wa1jay", - "twitter": "https://twitter.com/_wa1jay_", - "website": "https://www.wa1jay.com/" - } - }, - { - "chainId": 101, - "address": "3Gbprit9N4kaGSTtLyEw99EunmQG4XC7fKZ3TguczAkm", - "symbol": "$FBD", - "name": "Fat Baby Dino", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Amboooo/token-list/main/assets/mainnet/3Gbprit9N4kaGSTtLyEw99EunmQG4XC7fKZ3TguczAkm/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "AfnUWNAnTNVMw3nYGV1mBpBtabBQBtjp1PCF7Jqri9gp", - "symbol": "Cruz", - "name": "RojanCrypto", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/Rojankhzxrtoken/logo/main/logo.png", - "tags": [ - "Rojan-token", - "OLAGG-token", - "felpu-coin", - "NFT-coin", - "Stream-token", - "Twitch-token", - "Whitelist-token", - "Metaverse-token", - "souvenir-token", - "Social-token" - ], - "extensions": { - "description": "Made by Carlos Verbelen for Nicolás Santa Cruz Metaverse of rojankhzxr ", - "discord": "https://discord.gg/Rojan", - "facebook": "https://facebook.com/RojankhzxrOP", - "instagram": "https://instagram.com/Rojankhzxr", - "linkedin": "https://search.brave.com/search?q=Carlos+Verbelen\u0026source=desktop", - "medium": "https://joinentre.com/?referredBy=el0nmusk", - "twitter": "https://twitter.com/Rojankhzxr", - "website": "https://linktr.ee/Zues369" - } - }, - { - "chainId": 101, - "address": "6tFQQmUfMY8463jxDfTd6RaJesL2aHMq4HFp6S8Jtzm8", - "symbol": "CLYDE", - "name": "Clyde Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/DeltaClyde/Clyde/main/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/Clydenft", - "medium": "https://gitbook.clydenft.com/", - "twitter": "https://twitter.com/ClydeNFT_" - } - }, - { - "chainId": 101, - "address": "CERSmXza6DcU3vy61sVRHsZBXPsEaHG5edu4jx9VZPvm", - "symbol": "DCSC", - "name": "DCS Coin", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/ikhsanhdn/dcs/main/COIN.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/WjqR6J4Fsf", - "twitter": "https://twitter.com/dcsnft", - "website": "https://dcsnft.com" - } - }, - { - "chainId": 101, - "address": "CoTPSHUat1Tt3tAVPKmxMYNCqCcdaN2625WexfDVxWaK", - "symbol": "MPD", - "name": "CoscuArmy", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/coscuToken/logo/main/logo.png", - "tags": [ - "coscu-token", - "perez-token", - "coscuArmy-coin", - "NikeNFT-coin", - "Stream-token", - "Twitch-token", - "Whitelist-token", - "Metaverse-token", - "souvenir-token", - "Social-token" - ], - "extensions": { - "description": "Made by Carlos Verbelen for Martin Pérez Disalvo Metaverse of coscu ", - "discord": "https://www.twitch.tv/coscu", - "facebook": "https://www.youtube.com/user/Shacoscu", - "instagram": "https://www.instagram.com/martinpdisalvo/", - "linkedin": "https://search.brave.com/search?q=Carlos+Verbelen\u0026source=desktop", - "medium": "https://joinentre.com/?referredBy=el0nmusk", - "twitter": "https://twitter.com/Martinpdisalvo", - "website": "https://linktr.ee/Zues369" - } - }, - { - "chainId": 101, - "address": "rekTBEUuEBVz6mqbfLmE9d9JR4jrxV5r91LJfGdzufq", - "symbol": "Rekt", - "name": "Rekt", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/rekTBEUuEBVz6mqbfLmE9d9JR4jrxV5r91LJfGdzufq/logo.png", - "tags": ["social-token", "utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/RRacoonClub" - } - }, - { - "chainId": 101, - "address": "H9d8boHN7RbUgAC22fJtVtq1iV3DCpHmuPNZe7v3Et9b", - "symbol": "NVRCC", - "name": "Car Culture Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/H9d8boHN7RbUgAC22fJtVtq1iV3DCpHmuPNZe7v3Et9b/logo.png", - "tags": ["community", "airdrop", "NVRCC"], - "extensions": { - "discord": "https://discord.gg/metawhips", - "twitter": "https://twitter.com/wccmetawhips", - "website": "https://www.skrrrt.vip" - } - }, - { - "chainId": 101, - "address": "PZTeHGRrybTNY5bvCATmLyZB9DZjQcSwCyrjXmaTZWi", - "symbol": "ZLO", - "name": "Planet Zloba Token", - "decimals": 9, - "logoURI": "https://cdn.discordapp.com/attachments/949073265530396692/987038425179910194/Webp.net-gifmaker_11.gif", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/PlanetZloba", - "website": "https://www.planetzloba.com/" - } - }, - { - "chainId": 101, - "address": "AGFNz4kCrWNrzV3E84MLPVu7qwbYdYbw3gkHBGHG2jXg", - "symbol": "SUGAR", - "name": "SUGAR", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AGFNz4kCrWNrzV3E84MLPVu7qwbYdYbw3gkHBGHG2jXg/logo.png", - "tags": ["social-token", "utility-token", "community-token"], - "extensions": { - "twitter": "https://twitter.com/ImmoralKids" - } - }, - { - "chainId": 103, - "address": "334K1HSC9cRgZHCiSB1auwUo6qTe6hZzyuKJhkj1V3iF", - "symbol": "_RED", - "name": "Dash Red", - "decimals": 0, - "logoURI": "https://uploads-ssl.webflow.com/61f2155bfe47bd05cae702bb/61f21670d6560ecc93050888_New%20Logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/WjqR6J4Fsf", - "twitter": "https://twitter.com/dcsnft", - "website": "https://google.com" - } - }, - { - "chainId": 101, - "address": "siked6oyQgYee8tGpRP1P5WubqCEz4YSwiMGBvhY5o8", - "symbol": "SIKE", - "name": "Sukon Sike Token", - "decimals": 9, - "logoURI": "https://media.discordapp.net/attachments/978989653766078515/978993565529174016/PFP.jpg", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/yd22GdWx59", - "twitter": "https://twitter.com/SukonNFT" - } - }, - { - "chainId": 101, - "address": "vip3cYmE2vuBoNA92h1URVNgXWu23k31b1fbL3b9rVy", - "symbol": "OVIP", - "name": "Outerverse Passport Pre-Sale Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/vip3cYmE2vuBoNA92h1URVNgXWu23k31b1fbL3b9rVy/spl-passport.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/outerverse", - "instagram": "https://instagram.com/outsideio", - "twitter": "https://twitter.com/outsideio", - "website": "https://outside.io" - } - }, - { - "chainId": 101, - "address": "7yXDS8PyirBD1beaXJPt5hSX3a5H6VLYDSxHJ5Ce86RJ", - "symbol": "TSL", - "name": "Tshadderlouch", - "decimals": 1, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7yXDS8PyirBD1beaXJPt5hSX3a5H6VLYDSxHJ5Ce86RJ/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "C6ZkcqRDdBxWoXvgsEuPxEWbmJTSssf3stqMznfETcAT", - "symbol": "DGEM", - "name": "DinoGem", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/RolandPixeldust/PXCoin/main/degem.gif", - "tags": ["community-token", "metaverse-token"], - "extensions": { - "twitter": "https://twitter.com/TeddyTRexNFT", - "website": "https://linktr.ee/teddytrex" - } - }, - { - "chainId": 101, - "address": "DhcHSWkfB7mz5mhMLJ2hBkGEJBvGbcj2ZCA1NNLb4BR5", - "symbol": "wDUST", - "name": "wDUST", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DUSTawucrTsGU8hcqRdHDCbuYhCPADMLM2VcCb8VnFnQ/logo.jpg", - "tags": ["NFT", "social-token"], - "extensions": { - "website": "https://docs.dustprotocol.com/" - } - }, - { - "chainId": 101, - "address": "NTEo5UrWK8t5xATPjCRsxgZF9NHWNj6xCV5AVXFupzp", - "symbol": "NOTE", - "name": "Note", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/NTEo5UrWK8t5xATPjCRsxgZF9NHWNj6xCV5AVXFupzp/logo.png" - }, - { - "chainId": 101, - "address": "3TMxuBEMAV3BQunMBrFtKf8UQT2LmJchVbnV2o2ddkZU", - "symbol": "Orbs", - "name": "Orbits", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3TMxuBEMAV3BQunMBrFtKf8UQT2LmJchVbnV2o2ddkZU/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/UnfrgtnOrbit", - "website": "https://unfrgtn.space" - } - }, - { - "chainId": 103, - "address": "6nyiZ7uHKPHRhZa6nw2eBS4njxStM6kmEUr6uLFhJz9Z", - "symbol": "PCS", - "name": "Precious Jewelry", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6nyiZ7uHKPHRhZa6nw2eBS4njxStM6kmEUr6uLFhJz9Z/pcs_ico.jpg", - "tags": ["utility-token"], - "extensions": { - "website": "https://precious.capital/" - } - }, - { - "chainId": 101, - "address": "6nZ4YgDjENVa7y9P8YBxnfgR8CkTxzuQo82w1Bv1tmZE", - "symbol": "Waifu", - "name": "Vkryp", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/Vkryp/logo/main/logo.png", - "tags": [ - "Vkryp-token", - "Waifu-token", - "VkrypArmy-coin", - "NFT-coin", - "Twitch-token", - "Whitelist-token", - "Metaverse-token", - "Souvenir-token" - ], - "extensions": { - "description": "Made by Carlos Verbelen for Valentina Krypt Metaverse of Vkryp ", - "discord": "https://www.youtube.com/channel/UCyc2NPlfZEwKZnqwFpjUZpA?view_as=subscriber", - "facebook": "https://www.facebook.com/ValentinaKryp", - "instagram": "https://www.instagram.com/vkryp", - "linkedin": "https://search.brave.com/search?q=Carlos+Verbelen\u0026source=desktop", - "medium": "https://joinentre.com/?referredBy=el0nmusk", - "twitter": "https://twitter.com/VKryp", - "website": "https://linktr.ee/Zues369" - } - }, - { - "chainId": 101, - "address": "44QG67xkB8ZTKwov3HyBFmapchQZyH4UZEQVv5ddVoEw", - "symbol": "KILL", - "name": "kilua", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/kiluavineeth/crypto/main/logo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "CiCUpSy2nZiL5AraQb2G1yqehJa1fzYJecR9W3ytBEDy", - "symbol": "BUNJ", - "name": "BunjCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jmowers21/Crypto/main/BunjCoin.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "yUNZUz7N5gfvdfgPaz3ddSVcKD3UbgHQYoSWitTt6jL", - "symbol": "y-USN-4Pool", - "name": "Yield Mercurial LP Token (USN-4Pool)", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/yUNZUz7N5gfvdfgPaz3ddSVcKD3UbgHQYoSWitTt6jL/logo.svg", - "tags": ["yield-token"], - "extensions": { - "website": "https://bunnyducky.com/" - } - }, - { - "chainId": 101, - "address": "8e6GfNcPA4Dm4QaAM7braoRnJW65VkzBg4WDrsqcSE4q", - "symbol": "Ozark", - "name": "Ozarks", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8e6GfNcPA4Dm4QaAM7braoRnJW65VkzBg4WDrsqcSE4q/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/degodsnft", - "website": "https://degods.com" - } - }, - { - "chainId": 101, - "address": "9HYUHuQPixPvRnWCaVWcwFX9o2GGDBJiPWTVveoPVViA", - "symbol": "SUITES", - "name": "Sol Suites Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9HYUHuQPixPvRnWCaVWcwFX9o2GGDBJiPWTVveoPVViA/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.com/invite/wzEfUjmpFw", - "twitter": "https://twitter.com/JellyBabiesNFT" - } - }, - { - "chainId": 101, - "address": "Gnu31UNtmpX5aEG49pLonWPoxpi6mw1KCoS7YHtT2eay", - "symbol": "Skov", - "name": "UberDanger", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/uberdangerNFT/logo/main/logo.png", - "tags": [ - "UberDander-token", - "skov-token", - "choTastic-token", - "NFT-coin", - "Stream-token", - "Twitch-token", - "Whitelist-token", - "Metaverse-token", - "souvenir-token", - "Social-token" - ], - "extensions": { - "description": "Made by Carlos Verbelen for Jonathan Skov Metaverse of UberDanger ", - "discord": "https://t.co/hKwN9HIpR9", - "facebook": "https://www.twitch.tv/uberdanger", - "instagram": "https://t.co/f9BqQSXJx1", - "linkedin": "https://search.brave.com/search?q=Carlos+Verbelen\u0026source=desktop", - "medium": "https://joinentre.com/?referredBy=el0nmusk", - "twitter": "https://twitter.com/UberDanger", - "website": "https://linktr.ee/Zues369" - } - }, - { - "chainId": 101, - "address": "EMESiMvw9SAEy3qkG1ehCEh1GPa8D6WvGfJsm2MqvXC1", - "symbol": "WENLIST", - "name": "WenList Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EMESiMvw9SAEy3qkG1ehCEh1GPa8D6WvGfJsm2MqvXC1/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/hDHMmyATkp", - "twitter": "https://twitter.com/wenmint_nft", - "website": "https://linktr.ee/wenmint" - } - }, - { - "chainId": 101, - "address": "GcPoD4ACCTq3aiY87guMpnspGys5q6D5De1nK6fdJHrH", - "symbol": "HEAVEN", - "name": "HEAVEN AngelzDAO", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/archangelraphael6/heaven/main/%EF%BF%BDheaven.png" - }, - { - "chainId": 101, - "address": "AeQtqTrBZ8JjboVSc5tYiLds9xEr2PiHqv4c4wrUYxkX", - "symbol": "GLCO2", - "name": "GOLD CARBON CO2", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AeQtqTrBZ8JjboVSc5tYiLds9xEr2PiHqv4c4wrUYxkX/logo.png" - }, - { - "chainId": 101, - "address": "7yBVTVAyV1m93snvzsEiWYfYYLFHbVEAkZjwaMX7ihkp", - "symbol": "SLCO2", - "name": "SILVER CARBON CO2", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7yBVTVAyV1m93snvzsEiWYfYYLFHbVEAkZjwaMX7ihkp/logo.png" - }, - { - "chainId": 101, - "address": "94k97BcKwqc5hRrjhhP9UnTfZ9NZWvHrqNprwFAG6ZZe", - "symbol": "PLCO2", - "name": "PLATINUM CARBON CO2", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/94k97BcKwqc5hRrjhhP9UnTfZ9NZWvHrqNprwFAG6ZZe/logo.png" - }, - { - "chainId": 101, - "address": "BscWcg4xTkqDVuCBHJyzaCzuCGoxU3eCiMyZW8mqQtSr", - "symbol": "Lingo", - "name": "Mundo Lingo", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/Kironu/lingo/main/logo.png", - "tags": [ - "Event-token", - "Language-token", - "Community-token", - "souvenir-token", - "Social-token" - ], - "extensions": { - "description": "Created by the Mundo Lingo Community", - "facebook": "https://www.facebook.com/mundolingo", - "instagram": "https://www.instagram.com/mundolingo/", - "linkedin": "https://www.linkedin.com/company/mundo-lingo", - "telegram": "https://t.me/mundolingo", - "twitter": "https://twitter.com/MundoLingoDAO", - "website": "https://mundolingo.org" - } - }, - { - "chainId": 103, - "address": "4xGpVniM6jfZmM1RQPhRND66BgjwxyaymKCftCu3JHUT", - "symbol": "Blik", - "name": "Blik", - "decimals": 1, - "logoURI": "https://raw.githubusercontent.com/ariyila1/Blik1/main/bliklogo.png", - "tags": ["social-token", "utility-token", "community-token"] - }, - { - "chainId": 101, - "address": "4s9xjCxps1oAGiTkc3nWCjYREHW73vtKxnftygPejqLs", - "symbol": "Peng", - "name": "PengSol", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4s9xjCxps1oAGiTkc3nWCjYREHW73vtKxnftygPejqLs/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/pengsol_", - "website": "https://pengsol.com" - } - }, - { - "chainId": 101, - "address": "5EpU2fsLxxhyKDrhC33RED6sJrhbEDhbofos2ebuGwS2", - "symbol": "KASG", - "name": "Safari Guide WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5EpU2fsLxxhyKDrhC33RED6sJrhbEDhbofos2ebuGwS2/logo.png", - "tags": ["wl-token"] - }, - { - "chainId": 101, - "address": "91bysDbvspZCTHydDffNEDHiGmw8C3vDtYhPt5GtVi6G", - "symbol": "KAZK", - "name": "Zoo Keeper WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/91bysDbvspZCTHydDffNEDHiGmw8C3vDtYhPt5GtVi6G/logo.png", - "tags": ["wl-token"] - }, - { - "chainId": 103, - "address": "98xavC6UB6bWvWTfLca45Jv2aEXo5hWnDBWiB8PApseY", - "symbol": "PQL", - "name": "Piqsol", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GVvSwwQDpqWTQu739vqatKyyCXan7G1fibU9d5cXvXeX/piqsol.png", - "tags": [ - "social-token", - "community-token", - "utility-token", - "nft-market" - ], - "extensions": { - "description": "Fractional Solana NFT Marketplace", - "discord": "https://discord.gg/TmKBmyrGHY", - "facebook": "https://www.facebook.com/piqsol", - "instagram": "https://www.instagram.com/piqsol.art", - "medium": "https://medium.com/@social_91523", - "reddit": "https://www.reddit.com/user/Piqsol_NFT", - "telegram": "https://t.me/Piqsol", - "twitter": "https://twitter.com/Piqsol" - } - }, - { - "chainId": 101, - "address": "3npZ7QNBiRLYNrGqEy4Uefm5GXdruPBoxS7FktV2bkE3", - "symbol": "SHUERN", - "name": "Shuern Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3npZ7QNBiRLYNrGqEy4Uefm5GXdruPBoxS7FktV2bkE3/logo.png", - "tags": ["utility-token", "stable-token"], - "extensions": { - "website": "https://shuern.com/" - } - }, - { - "chainId": 101, - "address": "8Jy2rosjj6mQWr7LUKZ8EKkH62hpjJUmuSarkR6GWTUe", - "symbol": "PHUTO", - "name": "Phuto Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/8Jy2rosjj6mQWr7LUKZ8EKkH62hpjJUmuSarkR6GWTUe/logo.png", - "tags": ["utility-token", "social-token"], - "extensions": { - "website": "https://phuto.one/" - } - }, - { - "chainId": 101, - "address": "GrfuLNraAr4Niq8hVp6g8jgYiBCd3KHyDkq5aP29M1dD", - "symbol": "OFC", - "name": "Osmium Foundation Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GrfuLNraAr4Niq8hVp6g8jgYiBCd3KHyDkq5aP29M1dD/logo.png", - "tags": ["utility-token", "stable-token"], - "extensions": { - "website": "https://osmiumfoundation.org/" - } - }, - { - "chainId": 101, - "address": "FHFFNMpS2asn6MBdRxdRTgLe9Epg4B6RKbmztrwr6VuH", - "symbol": "SEACoin", - "name": "Seeing Eye Arts Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FHFFNMpS2asn6MBdRxdRTgLe9Epg4B6RKbmztrwr6VuH/logo.png", - "tags": ["utility-token", "social-token"], - "extensions": { - "website": "https://seeingeyefilms.com/" - } - }, - { - "chainId": 101, - "address": "HcmaQogPXJBNDBWNHCEDSDuLQ8sRkYbEogCbRdW2EJJP", - "symbol": "ANC", - "name": "Ansh", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/AshuJoshi001/crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3EhmFENLbXU6eDhWM15EJj84gabPwCDVKDc9dHd3vYZn", - "symbol": "TZAR", - "name": "TZAR", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3EhmFENLbXU6eDhWM15EJj84gabPwCDVKDc9dHd3vYZn/logo.png" - }, - { - "chainId": 101, - "address": "A7CiKDRc3hQBezJq3Pe4g8fdKitJzaZwA8KRJNJnSwRJ", - "symbol": "LAWLESS", - "name": "Lawless Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/A7CiKDRc3hQBezJq3Pe4g8fdKitJzaZwA8KRJNJnSwRJ/logo.png", - "tags": ["utility-token", "community-token"] - }, - { - "chainId": 101, - "address": "MDNTEcP4wVVWcpeQvojy1VnunpwtiydMZVzPeWWZYP3", - "symbol": "MIDNIGHT", - "name": "MIDNIGHT", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/MDNTEcP4wVVWcpeQvojy1VnunpwtiydMZVzPeWWZYP3/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/MidnightPanthrs", - "website": "https://www.midnightpanthers.com/" - } - }, - { - "chainId": 101, - "address": "Cr45u6cdxB8oz7m3f8b89eacpwZh9DsRdQsNSzwmxh9R", - "symbol": "GM", - "name": "GM", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Cr45u6cdxB8oz7m3f8b89eacpwZh9DsRdQsNSzwmxh9R/logo.png", - "tags": ["utility-token", "community-token"], - "extensions": { - "website": "https://gmchimps.com" - } - }, - { - "chainId": 101, - "address": "GkywroLpkvYQc5dmFfd2RchVYycXZdaA5Uzix42iJdNo", - "symbol": "DROID", - "name": "Droid DAO Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/LinYu1992/Droid_Capital_Token/main/Droid_coin_tiny_1.png", - "tags": ["utility-token", "community-token", "social-token"], - "extensions": { - "website": "https://droidcapital.net/" - } - }, - { - "chainId": 101, - "address": "GCkaPdsEtN8bU9zVFhLL9yfXX82mGjtNkasU6bChMwYC", - "symbol": "SNDT", - "name": "Sharded Ninjas Dao Token", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/pboudib/token-list/main/assets/mainnet/GCkaPdsEtN8bU9zVFhLL9yfXX82mGjtNkasU6bChMwYC/logo.png", - "tags": ["utility-token", "community-token", "nft-token"], - "extensions": { - "discord": "https://www.discord.gg/hPvMSfxYha", - "twitter": "https://twitter.com/pixeledfaces" - } - }, - { - "chainId": 101, - "address": "BoNEQFUfvNMWww7afX4HPyjJvT4XcQsohUgxtuNKK6vW", - "symbol": "BONE", - "name": "BONE Protocol", - "decimals": 9, - "logoURI": "https://user-images.githubusercontent.com/99852311/174297041-c9e4f9a4-7505-4486-94a0-22bd377e213f.png", - "tags": ["NFT", "utility-token"], - "extensions": { - "discord": "https://discord.com/invite/bulldogbillionaires", - "twitter": "https://twitter.com/bbsolana", - "website": "https://docs.boneprotocol.com/" - } - }, - { - "chainId": 101, - "address": "7gsBUE9ZBSWL3AAx9guwBt2maoVTqv1xo2KHzMorzftj", - "symbol": "NDWL1", - "name": "Nezumi Dominion WL1 Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Kikser1214/wl1/main/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "discord": "https://discord.gg/Zm5CvezwTE", - "twitter": "https://twitter.com/NezumiDominion", - "website": "https://www.nezumidominion.com/" - } - }, - { - "chainId": 101, - "address": "Cw2yB2XvmmLpPz6EjxUns3F2yeuB6XCHfKa5qEfp7ddT", - "symbol": "NDWL2", - "name": "Nezumi Dominion WL2 Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Kikser1214/wl2/main/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "discord": "https://discord.gg/Zm5CvezwTE", - "twitter": "https://twitter.com/NezumiDominion", - "website": "https://www.nezumidominion.com/" - } - }, - { - "chainId": 101, - "address": "6Q5wxz96Z49i7teDYVh1EpMFHbx4BfvQhVQdWWes7CeS", - "symbol": "CKIN", - "name": "CryptoKin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/MartinDarko/CryptoKin/main/logo.png", - "tags": ["mint-token", "community-token"] - }, - { - "chainId": 101, - "address": "6UtdXDUWwd1fQ3ASSXe3JDy2q3TCoYkD11hZZ6Fk6jxy", - "symbol": "LAZ", - "name": "Lazar", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/aleks989/token-list/main/assets/mainnet/6UtdXDUWwd1fQ3ASSXe3JDy2q3TCoYkD11hZZ6Fk6jxy/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2W1DhZqkxpaUXnmndWXjCdCorW927o5iX1uVJWzPQn2U", - "symbol": "HECTA", - "name": "Hecta Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/Paradox-Coin/Paradox-Token/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "GE5PkNtgA5DFidWEp6q7QuxBzT1AKbdjGiBQzUCUeiCg", - "symbol": "LTMS", - "name": "Let Me Speak Airdrop", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GE5PkNtgA5DFidWEp6q7QuxBzT1AKbdjGiBQzUCUeiCg/logo.png", - "tags": ["utility-token"], - "extensions": { - "website": "http://letmespeak.mint-link.live/" - } - }, - { - "chainId": 101, - "address": "2wc5AMR6MbV4RJh9mP5mzppvWYD88GEufrgJFh4Uwcge", - "symbol": "HugMe", - "name": "Hug me", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2wc5AMR6MbV4RJh9mP5mzppvWYD88GEufrgJFh4Uwcge/logo.png", - "tags": [ - "social-token", - "underground-economy", - "fun-token", - "digital-coin" - ] - }, - { - "chainId": 101, - "address": "D3csbk4gBLzWMB2xjAYSoF6Gz8ZVS9R1QRs3KYLfaW7Y", - "symbol": "ABT", - "name": "Astrobabies Staking Token", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/0nkery/token-list/main/assets/mainnet/D3csbk4gBLzWMB2xjAYSoF6Gz8ZVS9R1QRs3KYLfaW7Y/logo.jpg", - "tags": ["NFT", "utility-token"], - "extensions": { - "discord": "https://discord.com/invite/astrobabies", - "instagram": "https://www.instagram.com/astrobabiesnft/", - "twitter": "https://twitter.com/astrobabiesnft", - "website": "https://www.astrobabies.io/" - } - }, - { - "chainId": 101, - "address": "CergxRKPPUGkksdConEbvBweoyAhdyetVCgXuLzLAJmb", - "symbol": "YTWL", - "name": "Yeah Tigers Whitelist Serum", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CergxRKPPUGkksdConEbvBweoyAhdyetVCgXuLzLAJmb/logo.png", - "tags": ["game", "ticket", "fungible", "key", "puzzle"], - "extensions": { - "discord": "https://discord.com/invite/yeahtigers", - "twitter": "https://twitter.com/yeahtigers", - "website": "https://www.yeahtigers.com/" - } - }, - { - "chainId": 101, - "address": "74B7abWPggkf9r5vgNVMYk6MjXZhRg4dNeZzfAArfBXb", - "symbol": "IDRK", - "name": "IDR Kita", - "decimals": 2, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/74B7abWPggkf9r5vgNVMYk6MjXZhRg4dNeZzfAArfBXb/logo.png", - "tags": ["STABLECOIN"] - }, - { - "chainId": 101, - "address": "7GnAtLAoiXYhow3mE7szXHfkmWA5QEitbiHDXE4so9Jd", - "symbol": "PengT", - "name": "PengSolT", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7GnAtLAoiXYhow3mE7szXHfkmWA5QEitbiHDXE4so9Jd/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/pengsol_", - "website": "https://pengsol.com" - } - }, - { - "chainId": 101, - "address": "5VfPb7ndQRmi3fMQ3imVSMLJaB9VzGipSgCcyUfu9ySe", - "symbol": "MOLE", - "name": "molecoin", - "decimals": 4, - "logoURI": "https://talpa.cc/moles/place_mole.png", - "tags": ["utility-token", "community-token", "spl-token", "social-token"], - "extensions": { - "discord": "https://discord.gg/mole", - "website": "https://talpa.cc" - } - }, - { - "chainId": 101, - "address": "HitPa8XDRpaWzsLL3FwawBiRXS85wZ5Fc7fKdmY6uR5", - "symbol": "HIT", - "name": "HIT", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HitPa8XDRpaWzsLL3FwawBiRXS85wZ5Fc7fKdmY6uR5/Logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/nr38uAWK", - "twitter": "https://twitter.com/HPenguinSM", - "website": "https://hitmanpenguin.space/" - } - }, - { - "chainId": 101, - "address": "NortpVhRSY6qnx5gdT4QCibxdPuHDirWDweUnet9Boa", - "symbol": "NORTH", - "name": "The Northman NORTH", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/NortpVhRSY6qnx5gdT4QCibxdPuHDirWDweUnet9Boa/logo.png", - "tags": ["NFT-token"], - "extensions": { - "twitter": "https://twitter.com/TheNorthmanNFT" - } - }, - { - "chainId": 101, - "address": "FEBoVniZ7CLoo3aRhDfZcBmPKQ2xjQCbeYjsZds9dzDp", - "symbol": "BRSTRAIN", - "name": "Brazilian Strain", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FEBoVniZ7CLoo3aRhDfZcBmPKQ2xjQCbeYjsZds9dzDp/logo.png", - "tags": ["utility"] - }, - { - "chainId": 101, - "address": "7j6y5iZAZQkpV1U8EsEf6qu9fT4rVbP8ymCzb29av2KM", - "symbol": "AF", - "name": "Apes Fiction", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7j6y5iZAZQkpV1U8EsEf6qu9fT4rVbP8ymCzb29av2KM/logo.png", - "tags": ["community-token", "meme-token", "apes"], - "extensions": { - "twitter": "https://twitter.com/apesfiction", - "website": "https://www.apesfiction.io" - } - }, - { - "chainId": 103, - "address": "9nqJa23g5jHjz4H8rSkXnFeUJgS4C9R26RRHPZMRqs5G", - "symbol": "STONE", - "name": "Scoby Stone", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9nqJa23g5jHjz4H8rSkXnFeUJgS4C9R26RRHPZMRqs5G/logo.png" - }, - { - "chainId": 101, - "address": "FoxeHgvq2qdPpD1AhaY9t7dX94uipnoNq2KyBAZHin69", - "symbol": "PFWL", - "name": "Private Foxes WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FoxeHgvq2qdPpD1AhaY9t7dX94uipnoNq2KyBAZHin69/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/privatefoxes" - } - }, - { - "chainId": 101, - "address": "AZrUhAmYhaEC2HpKvJLnVhULHs2oHwCa6hZSFAGbS1uL", - "symbol": "ASTRO", - "name": "ASTRONOVA", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AZrUhAmYhaEC2HpKvJLnVhULHs2oHwCa6hZSFAGbS1uL/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "Astronova is an nft project having 777 unique collectible cards based on Astrology having the 12 Zodiac signs, their constellations, signs, ruling planets and characters which are divided into some specials cards in each style.", - "discord": "https://discord.gg/yksmDwJMhD", - "instagram": "https://www.instagram.com/astronovanft/", - "twitter": "https://twitter.com/astronovanfts", - "website": "https://astronova.live/" - } - }, - { - "chainId": 101, - "address": "E2ckjDzdKzLt9XJmDGryDKxX5AFZZHGuY6nuYrW7HXEb", - "symbol": "DMSCOGWL", - "name": "DMSC OG-Collection WL Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/E2ckjDzdKzLt9XJmDGryDKxX5AFZZHGuY6nuYrW7HXEb/logo.png", - "tags": ["nft", "utility-token"], - "extensions": { - "discord": "https://discord.gg/dmsc", - "twitter": "https://twitter.com/DMSCNFT", - "website": "https://www.dmsc-official.com" - } - }, - { - "chainId": 101, - "address": "7f97kMzEtcj1YBzqicYxy8B4kHURFQsGhDVhnxeLgapT", - "symbol": "DDHK", - "name": "DDH Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/yadavplusshubham/crpytosol/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "3xNzdRumes6PKefrHYbfhCLAGJfBQQhYKTV2fgPrPat4", - "symbol": "GOONZ-WL", - "name": "GOONZ-WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/gangstagoonz/Logo/main/logo.png", - "tags": ["whitelist-token"], - "extensions": { - "discord": "https://discord.gg/gangstagoonz", - "twitter": "https://twitter.com/GangstaGoonz", - "website": "https://gangstagoonz.com/" - } - }, - { - "chainId": 101, - "address": "2g8dn7SA5xSkKELXpXmwe4bESacyaZgAS3m8M6ktRZ5s", - "symbol": "JOC", - "name": "Jero Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/PIZZAMANXD/jerocoins/main/JeroCoins.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FUtxQAXuC4TgQvF7C5RTRsgqHvPqn4iHhMicRZKV775E", - "symbol": "$PIGGY", - "name": "Piggy Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FUtxQAXuC4TgQvF7C5RTRsgqHvPqn4iHhMicRZKV775E/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "2gErBLEkw6YEzEJJoLybWd9vPJ4MNw7vLtchhWS7huZP", - "symbol": "THC", - "name": "TheHotboxCoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2gErBLEkw6YEzEJJoLybWd9vPJ4MNw7vLtchhWS7huZP/thc.png", - "tags": ["utility-token", "community-token"] - }, - { - "chainId": 101, - "address": "G7PE6VyAFG7KG6qRAwXVHZhmJ4weETLU9UZqpPfA5evy", - "symbol": "WAGMI-T2", - "name": "WagmiTicket Tier 2", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Afterglow421/logotier2/main/logo/logo.png", - "tags": ["utility-token", "whitelist-token"], - "extensions": { - "discord": "https://discord.com/invite/wagmibros", - "twitter": "https://twitter.com/SolanaWagmiBros", - "website": "https://wagmibros.club/" - } - }, - { - "chainId": 101, - "address": "Bdnh7zauhuBMDfWqMwDjMpmizAsYVznxzbT2ZUpvc19v", - "symbol": "WAGMI-T3", - "name": "WagmiTicket Tier 3", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Afterglow421/logotier3/main/logo/logo.png", - "tags": ["utility-token", "whitelist-token"], - "extensions": { - "discord": "https://discord.com/invite/wagmibros", - "twitter": "https://twitter.com/SolanaWagmiBros", - "website": "https://wagmibros.club/" - } - }, - { - "chainId": 101, - "address": "BDThRUJADfNAVFmRKwQQZDS2WbVNu9A5aAeDELJGd1f1", - "symbol": "M2SNL", - "name": "M2SNL Coin", - "decimals": 9, - "logoURI": "https://github.com/m2snl/tokens/blob/main/m2snllogo-image-iconn-200x200.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "JB65JZqmHs6mWcDtZcd7btYUs1RJs5qaPbTnuLR4xVjC", - "symbol": "WXTCH", - "name": "Wxtchcoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/matt-mac-btc/crypto/main/Webp.net-resizeimage.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AKF8z6wXgAiEhQ6vxTNTvo9tkMYYAngjHjt2uVjDasdU", - "symbol": "MPNY", - "name": "MonetPenny", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AKF8z6wXgAiEhQ6vxTNTvo9tkMYYAngjHjt2uVjDasdU/MonetPenny.png", - "tags": ["social-token"], - "extensions": { - "website": "http://monetpenny.com/" - } - }, - { - "chainId": 101, - "address": "Cs3aQavALzbmozW4YtDfby9sSgfjdFdSJSJC9UEtBJYK", - "symbol": "mvWALL", - "name": "Metaversol Wall Piece", - "decimals": 0, - "logoURI": "https://assets.metaversol.com/buildingpieces/wallOG.png", - "tags": ["utility-token"], - "extensions": { - "description": "Metaversol Building Pieces power building within The Expanse.", - "discord": "https://discord.gg/metaversol", - "twitter": "https://twitter.com/MxMetaversol", - "website": "https://metaversol.com/" - } - }, - { - "chainId": 101, - "address": "6CNfYu4id92MVw98Xu3G4pTrK7x9ZSa7CxuThsCHWuTW", - "symbol": "MBT", - "name": "MetaBear token", - "decimals": 0, - "logoURI": "https://bafkreic2lqgk5223jcubgqewlig3tqaftq535ty3zyv7bb6njr7ivlaw3e.ipfs.nftstorage.link/", - "tags": ["whitelist-token"], - "extensions": { - "twitter": "https://twitter.com/MetaBearNFT1", - "website": "https://metabear-nft.com" - } - }, - { - "chainId": 101, - "address": "5ZvNHyLDZaxUTgTZ7BseAw3A9cqhcLrA9UCB1T2uCEH8", - "symbol": "HORD", - "name": "Hoard Gold", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5ZvNHyLDZaxUTgTZ7BseAw3A9cqhcLrA9UCB1T2uCEH8/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "FoKYVPRDkYL9WN2C1of3Qm7PosCnMhbP2wPb2J89f8Yi", - "symbol": "LTST", - "name": "LIL TOAST TOKEN", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/LilDAOs/lilthings/main/logo.png", - "tags": ["NFTs", "Utility-token", "Burn-token", "Community-token"] - }, - { - "chainId": 101, - "address": "2hs7TfCKgFCFb8i6mxbHT75RXgYQZXqahdVJkjsD999p", - "symbol": "2ELT", - "name": "2ELeet", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/stauffera12/2ELeet-token/main/Logo.PNG", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "7EcoEurccG8R1ukYw6MzoU1HSADA6AnWtNf2sCHV1BWd", - "symbol": "mvFOU", - "name": "Metaversol Foundation Piece", - "decimals": 0, - "logoURI": "https://assets.metaversol.com/buildingpieces/foundationOG.png", - "tags": ["utility-token"], - "extensions": { - "description": "Metaversol Building Pieces power building within The Expanse.", - "discord": "https://discord.gg/metaversol", - "twitter": "https://twitter.com/MxMetaversol", - "website": "https://metaversol.com/" - } - }, - { - "chainId": 101, - "address": "6Ak6Kv9C7FFYx21F7b8qW6pfi7pjQyvZ73hbukFiXch5", - "symbol": "mvDOOR", - "name": "Metaversol Door Piece", - "decimals": 0, - "logoURI": "https://assets.metaversol.com/buildingpieces/doorOG.png", - "tags": ["utility-token"], - "extensions": { - "description": "Metaversol Building Pieces power building within The Expanse.", - "discord": "https://discord.gg/metaversol", - "twitter": "https://twitter.com/MxMetaversol", - "website": "https://metaversol.com/" - } - }, - { - "chainId": 101, - "address": "G1EK7j5MWpPZsWmDqsJdPuyr3JyVx2UC9HcB636rN2Qh", - "symbol": "mvFLOOR", - "name": "Metaversol Floor Piece", - "decimals": 0, - "logoURI": "https://assets.metaversol.com/buildingpieces/floorOG.png", - "tags": ["utility-token"], - "extensions": { - "description": "Metaversol Building Pieces power building within The Expanse.", - "discord": "https://discord.gg/metaversol", - "twitter": "https://twitter.com/MxMetaversol", - "website": "https://metaversol.com/" - } - }, - { - "chainId": 101, - "address": "3d7FkLQcxzh8rweXfS7PN3otDK3Le2V1sW1ZuvGJdvu5", - "symbol": "mvWINDOW", - "name": "Metaversol Window Piece", - "decimals": 0, - "logoURI": "https://assets.metaversol.com/buildingpieces/windowOG.png", - "tags": ["utility-token"], - "extensions": { - "description": "Metaversol Building Pieces power building within The Expanse.", - "discord": "https://discord.gg/metaversol", - "twitter": "https://twitter.com/MxMetaversol", - "website": "https://metaversol.com/" - } - }, - { - "chainId": 101, - "address": "Emead5KsJBa1i53JTMmLJ4MAQrAtQ8x59JdL76jUr751", - "symbol": "JUST", - "name": "Just Bear Token", - "decimals": 5, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Emead5KsJBa1i53JTMmLJ4MAQrAtQ8x59JdL76jUr751/logoJB.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "8tz5RTHk79tMUkP7E7hEoWuBCFQcKaTuJjyH8SwGFz7y", - "symbol": "BYC", - "name": "bubblyCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/rubikron/crypto2/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "9nhuxLhaMGwUdAcnn53vJeXBt3qtjycSFqGefYGA829n", - "symbol": "SHROOM", - "name": "Trippin' Ape Tribe Mushroom Claim Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9nhuxLhaMGwUdAcnn53vJeXBt3qtjycSFqGefYGA829n/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/TrippinApeNFT", - "website": "https://www.trippinapetribe.xyz/" - } - }, - { - "chainId": 101, - "address": "29FFvE1yK7N2rw4UszxBfWtdaTpdh6fNj4Gh4pfNYTgK", - "symbol": "mBTC", - "name": "Mirrored Bitcoin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/ZuluSpl0it/crypto_logos/main/logo.png", - "tags": ["wrapped", "wormhole"], - "extensions": { - "assetContract": "https://solscan.io/token/29FFvE1yK7N2rw4UszxBfWtdaTpdh6fNj4Gh4pfNYTgK", - "coinmarketcap": "https://coinmarketcap.com/currencies/mirrored-bitcoin/", - "description": "Mirrored Bitcoin is a synthetic asset that mirrors BTC by reflecting the exchange prices on-chain.", - "medium": "https://medium.com/mirror-protocol", - "whitepaper": "https://docs.mirror.finance/" - } - }, - { - "chainId": 101, - "address": "6UZsQ5sCGCSJyxHbYrEjZTWvXmYsWEcKbd77AKi3oxxi", - "symbol": "$TRUST", - "name": "TRUST Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/rabindrarajawat/arr-solana/main/trust.png", - "tags": ["utility-token"] - }, - { - "chainId": 103, - "address": "B78NMBvVjrn2USLt4uy723qmN3fMhQ6cD5AuJtxqTtGL", - "symbol": "TOM+JERRY", - "name": "Tom and Jerry", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/B78NMBvVjrn2USLt4uy723qmN3fMhQ6cD5AuJtxqTtGL/logo.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "KzkscetEFcPpwVQV2vfgs7zgA8W1gwdK7w8dJpfq25V", - "symbol": "KZK", - "name": "Kaizokoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/KzkscetEFcPpwVQV2vfgs7zgA8W1gwdK7w8dJpfq25V/logo.png", - "tags": ["NFT-token"], - "extensions": { - "twitter": "https://twitter.com/k_mechanics", - "website": "https://kaizokumechanics.io/" - } - }, - { - "chainId": 101, - "address": "CUR9kjRj86tD8Yb19hzoL182bz5U2CuFbkBNBbDVgQVk", - "symbol": "$DAFT", - "name": "DAFT Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/likebad/token-list/main/assets/mainnet/CUR9kjRj86tD8Yb19hzoL182bz5U2CuFbkBNBbDVgQVk/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "FLWT2P3hdpPACswnkSeV6wivjGJrdP7XBzGhzTQD4Q4h", - "symbol": "FLWT", - "name": "Fine Lions Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FLWT2P3hdpPACswnkSeV6wivjGJrdP7XBzGhzTQD4Q4h/logo.png", - "tags": ["social-token", "utility-token"] - }, - { - "chainId": 101, - "address": "4LfWKsex7BCMTkBA7wn7RcfMYenKa1rSzzodk8Lwm4YB", - "symbol": "$SNPDAO", - "name": "SNIPEDAO", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/SnipeDAO123/coin/main/coin_PNG36944.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "H6ceG7s976p2XRKo8EhB3Mbfrro3YxRQfZjdr3z6eL4e", - "symbol": "ORIGIN", - "name": "Origin", - "decimals": 8, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/H6ceG7s976p2XRKo8EhB3Mbfrro3YxRQfZjdr3z6eL4e/logo.svg" - }, - { - "chainId": 101, - "address": "5tB5D6DGJMxxHYmNkfJNG237x6pZGEwTzGpUUh62yQJ7", - "symbol": "ROA", - "name": "ROA CORE", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5tB5D6DGJMxxHYmNkfJNG237x6pZGEwTzGpUUh62yQJ7/logo.png", - "tags": ["utility-token", "NFT", "Metaverse"], - "extensions": { - "discord": "https://discord.gg/f7JEbyNhG2", - "telegram": "https://t.me/ROALAND_Notice", - "twitter": "https://twitter.com/klayroaland", - "website": "http://roaland.foundation" - } - }, - { - "chainId": 102, - "address": "2n4pLBdDtciUsEyR2WoS2cTgDiyTHysVQF4caHttV44v", - "symbol": "USDT", - "name": "USDT Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2n4pLBdDtciUsEyR2WoS2cTgDiyTHysVQF4caHttV44v/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://twitter.com/Tether_to" - } - }, - { - "chainId": 102, - "address": "5j2dS5kLdJowd6NpQ1pVykyyKDvRPZrHZGHgtyVG4PbD", - "symbol": "LUNA", - "name": "LUNA Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5j2dS5kLdJowd6NpQ1pVykyyKDvRPZrHZGHgtyVG4PbD/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://www.terra.money" - } - }, - { - "chainId": 102, - "address": "5oCd9mvp5zMy3bFHmyJrL6CMpcKCJt3peSRLrcEz5BW4", - "symbol": "LINK", - "name": "Link Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5oCd9mvp5zMy3bFHmyJrL6CMpcKCJt3peSRLrcEz5BW4/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://chain.link" - } - }, - { - "chainId": 101, - "address": "GamixUFH75ezjhPLH33QDFLezqTTsaXJDpyptABNHgpF", - "symbol": "Shinigami", - "name": "Shinigami Whitelist Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GamixUFH75ezjhPLH33QDFLezqTTsaXJDpyptABNHgpF/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/Shinigami_SOL" - } - }, - { - "chainId": 101, - "address": "8BPiyiiC1NrmMWpyfrCmkFUkHmProC7dUBkn5twdZVMu", - "symbol": "SNOWB", - "name": "SnowBunie Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Dakender/Snowbunie-Coin/main/logo-snowbunie.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "ELPHvy7GG3Z2niLAqtftVmQS3BvqqnsbfTngstWxYQu1", - "symbol": "PATEL", - "name": "Patelsakti", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ELPHvy7GG3Z2niLAqtftVmQS3BvqqnsbfTngstWxYQu1/logo.png", - "tags": ["community-token"] - }, - { - "chainId": 103, - "address": "7QLBsngBHcrJaZgpRjApGq7jgL7hzKdmVjyGbjUPj6u4", - "symbol": "NSC", - "name": "NeoSol Coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Walanm/crypto-logo/main/coin.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "3tdV5k1aHV9TTuX66VF9DRL43b88LUMGC9PJbixNeMX1", - "symbol": "GATE", - "name": "GATE", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/DEAN3lr/HeavenDAO/main/%24GATE%20LOGO%20FINALIZED.png", - "extensions": { - "discord": "https://discord.gg/AKWJkzYKeE", - "twitter": "https://twitter.com/HeavenDAO_SOL" - } - }, - { - "chainId": 101, - "address": "98Cz3pqMoNhR2w5UCAf4LBZ1FVc1L1yNxEk7gYyJV4NY", - "symbol": "WL-Makaliilabs", - "name": "Whitelist token Makalii Labs", - "decimals": 1, - "logoURI": "https://raw.githubusercontent.com/pkpe/Dgenerate-Monkiez/3ee196c075eefb1424fa24f35e8f102dbdb34e33/12.png", - "tags": ["WhiteList-token"] - }, - { - "chainId": 101, - "address": "2E6Wt8f4rzKBtbabBNS2MSMZ2KX57TpK2bLWT8Gq9QDe", - "symbol": "GOONZ", - "name": "GOONZ", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/gangstagoonz/Logo/main/tokenLogo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/gangstagoonz", - "twitter": "https://twitter.com/GangstaGoonz", - "website": "https://gangstagoonz.com/" - } - }, - { - "chainId": 101, - "address": "94JLbzRdcsaU3hDWFDT6TdFrKAct2rMCGBmt4St7KiVi", - "symbol": "sjZT", - "name": "sjZtoken", - "decimals": 1, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/94JLbzRdcsaU3hDWFDT6TdFrKAct2rMCGBmt4St7KiVi/logo.png", - "tags": ["community-token"], - "extensions": { - "website": "https://ad.nl" - } - }, - { - "chainId": 101, - "address": "6h7CpUqee5fACGNJMBc3WaRZiD9QRwWa7SNHPdWqNFPN", - "symbol": "BMT", - "name": "BunnyMask Token", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/KaoruYakabe/BunnyMasks/main/logo.PNG", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4C4ps2tct2sY8iSG1n5dzakHmSMxT1KgB9ofjaQJ3o1e", - "symbol": "RSCL", - "name": "RASCALS", - "decimals": 1, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/4C4ps2tct2sY8iSG1n5dzakHmSMxT1KgB9ofjaQJ3o1e/logo.png", - "tags": ["Reward-Token"] - }, - { - "chainId": 101, - "address": "t2XBdWoCgBiiMFUSjxDtEJd84juJf5symYorzQ7PVxM", - "symbol": "BABW", - "name": "Build-A-Bear", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/INVERSOCoin/BABWCOIN/main/BABLOGO.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "2PHMZHEnChKsBjRoAQSUAAkb2eUi8KAKYF9kpjbfP41i", - "symbol": "NDOWL", - "name": "New Degen Order WL Token", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2PHMZHEnChKsBjRoAQSUAAkb2eUi8KAKYF9kpjbfP41i/logo.png", - "tags": ["Whitelist-Token"], - "extensions": { - "twitter": "https://twitter.com/NewDegenOrder", - "website": "https://www.newdegenorder.com" - } - }, - { - "chainId": 101, - "address": "DGvuKn4smMNsmJbXXbQbn36wUfYFycjYqDYooFwDxzgz", - "symbol": "POKE", - "name": "PokeCoin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/PokeSaibott/Crypto/main/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "4kx8TkCWqGg9b9o8KmgsnS4voyxsBaaXRDGibPZ2MZVa", - "symbol": "ACP", - "name": "American Crypto Project", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/AmericanCryptoProject/UnitedStatesofAmerica/main/muse-token%20(1).png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "GVqekT8RTeiHrMokgjLkexDcCkGkZYG1yF1ZPfwrDV3Q", - "symbol": "INKA-COIN", - "name": "Inka Coin", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GVqekT8RTeiHrMokgjLkexDcCkGkZYG1yF1ZPfwrDV3Q/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/xQRTBcxb", - "twitter": "https://twitter.com/OpportunitiesIO" - } - }, - { - "chainId": 101, - "address": "89XR1xC6uiV9qUbnoY4jTgTo9wtfS4DvyffCaWJFNo6F", - "symbol": "YHHY", - "name": "YHHYZZQ", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/89XR1xC6uiV9qUbnoY4jTgTo9wtfS4DvyffCaWJFNo6F/logo.png", - "tags": ["social-token"], - "extensions": { - "website": "https://bakedbeavers.com/" - } - }, - { - "chainId": 101, - "address": "4U4iYLTBChN3HdyuS1DfRqZ54Y772MVFYRvhoJLQUF8H", - "symbol": "REALZ", - "name": "Fuzion Realz Coin", - "decimals": 2, - "logoURI": "https://fuzionblox.com/fuzion_icon.jpg", - "tags": ["utility-token"], - "extensions": { - "description": "REALZ Coin backed by bullion", - "website": "https://fuzionblox.com" - } - }, - { - "chainId": 101, - "address": "kiTkNc7nYAu8dLKjQFYPx3BqdzwagZGBUrcb7d4nbN5", - "symbol": "KI", - "name": "Genopets Ki", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/kiTkNc7nYAu8dLKjQFYPx3BqdzwagZGBUrcb7d4nbN5/logo.png", - "tags": ["genopets", "utility-token"], - "extensions": { - "discord": "https://discord.gg/genopets", - "twitter": "https://twitter.com/genopets", - "website": "https://genopets.me" - } - }, - { - "chainId": 101, - "address": "VRGEZtRamTVKinargJ7WstJHPSzYY9oGSQDYn6awDf8", - "symbol": "$VRGE", - "name": "VRGE Capacity", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/VRGEZtRamTVKinargJ7WstJHPSzYY9oGSQDYn6awDf8/logo.jpg", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/Exiles_NFT", - "website": "https://www.exilelabs.xyz/" - } - }, - { - "chainId": 101, - "address": "7xnRz9Cgh8QvbeqERG9AGoZkTjvX8dHQuBdKJz2hhzy1", - "symbol": "MFCT", - "name": "Mifacto Agro", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7xnRz9Cgh8QvbeqERG9AGoZkTjvX8dHQuBdKJz2hhzy1/logo.jpg", - "tags": ["community-token"] - }, - { - "chainId": 101, - "address": "GdCpmasA74p8qcpKsySPwyAWEc8fiwXeM58J7CyRJUvM", - "symbol": "GTCO2", - "name": "CARBON CO2 GREEN TREE", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GdCpmasA74p8qcpKsySPwyAWEc8fiwXeM58J7CyRJUvM/logo.png" - }, - { - "chainId": 101, - "address": "DAP2s9i9d2GDrvAWKZ9dcQjVaXvJs97aGfQzTJSbwXW9", - "symbol": "$DAPP", - "name": "Dapper Ducks Web3", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DAP2s9i9d2GDrvAWKZ9dcQjVaXvJs97aGfQzTJSbwXW9/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/dapperducks", - "website": "https://dapperducks.io" - } - }, - { - "chainId": 101, - "address": "DAPP6sHUBfVDRgZkcbXKPPDpFodJ7u58fYiByREX6BN", - "symbol": "DAPP", - "name": "Dapper Ducks Coin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DAPP6sHUBfVDRgZkcbXKPPDpFodJ7u58fYiByREX6BN/logo.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/dapperducks", - "website": "https://dapperducks.io" - } - }, - { - "chainId": 101, - "address": "HW6jM7jAZjHMYQf2u6eC91Efvm9CeQ2epq8gDizBYRS5", - "symbol": "ZEB", - "name": "ZEB Token", - "decimals": 9, - "logoURI": "https://img.freepik.com/free-vector/cute-banana-cartoon-mascot-logo_194935-71.jpg?w=2000", - "tags": ["utility-token"], - "extensions": { - "website": "https://jrby.xyz/" - } - }, - { - "chainId": 101, - "address": "Appn8xsma7ajLzsEADNhihNLJt2xVz8V1iqJa6zizqyU", - "symbol": "WAGMSG", - "name": "Make Solana Great", - "decimals": 6, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Appn8xsma7ajLzsEADNhihNLJt2xVz8V1iqJa6zizqyU/logowagmsg.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/MakeSolanaGreat" - } - }, - { - "chainId": 101, - "address": "5KNQQe9gfSfgigddMGv5cWg1Z3zFodQP1b2bLDjGuvdE", - "symbol": "WAGMI-T1", - "name": "WagmiTicket Tier 1", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/Afterglow421/logotier1/main/logo/logo.png", - "tags": ["utility-token", "whitelist-token"], - "extensions": { - "discord": "https://discord.com/invite/wagmibros", - "twitter": "https://twitter.com/SolanaWagmiBros", - "website": "https://wagmibros.club/" - } - }, - { - "chainId": 101, - "address": "4vqAHZgaQT6e1vGVhFjZVXGEejxJsiXpxsmjmw8LPtRK", - "symbol": "WEDAO", - "name": "WEDAO", - "decimals": 8, - "logoURI": "https://website-bucket.ams3.digitaloceanspaces.com/wedao.png", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.com/invite/weyu", - "telegram": "https://t.me/WEYUchat", - "twitter": "https://twitter.com/weyuofficial", - "website": "https://weyu.io" - } - }, - { - "chainId": 101, - "address": "Boxch4vwBdKjZjE4hixCaoQFvv16P9vwRHTFHWbC5o6f", - "symbol": "BOXCH", - "name": "Boxch", - "decimals": 4, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Boxch4vwBdKjZjE4hixCaoQFvv16P9vwRHTFHWbC5o6f/logo.png", - "extensions": { - "instagram": "https://instagram.com/boxch_dapp", - "telegram": "https://t.me/boxch", - "twitter": "https://twitter.com/Boxch_dApp", - "website": "https://boxch.net" - } - }, - { - "chainId": 101, - "address": "7P2n6h9J7BpPy4X9T8US7CPLrXzwnaSCkpXNDogNmkZv", - "symbol": "XEGG", - "name": "Project X Egg", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7P2n6h9J7BpPy4X9T8US7CPLrXzwnaSCkpXNDogNmkZv/logo.png", - "tags": ["game", "ticket", "fungible", "key", "puzzle"], - "extensions": { - "discord": "https://discord.com/invite/projectxsol", - "twitter": "https://twitter.com/project_x_sol", - "website": "https://www.projectxsol.com/" - } - }, - { - "chainId": 101, - "address": "6xPDRNZj5R5xekE2UBxBPvnaGQPi9QusNdwWbxSfDiMF", - "symbol": "HRKJ", - "name": "Harukeija tokens", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/harukeija/solana-public/main/HRKJ.jpg", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "5qgWQNcFFxK6FQbiop3Gwbn1gPn4pwKm2Lk78S91JdBQ", - "symbol": "SOLNFT0", - "name": "Official Solana NFTs", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5qgWQNcFFxK6FQbiop3Gwbn1gPn4pwKm2Lk78S91JdBQ/logo.png", - "tags": ["social-token"] - }, - { - "chainId": 101, - "address": "AshJQ5LwqPMY75nJMpfVKBZwRUSYjPUjteRGfXC11zVA", - "symbol": "roofBO", - "name": "Roof Ballet Offense", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AshJQ5LwqPMY75nJMpfVKBZwRUSYjPUjteRGfXC11zVA/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "A3e98uof2bx412kojKTeLm1GFqQ4Y3hbkF7q1HUDUhMu", - "symbol": "chooseRG", - "name": "Choose Record Glance", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/A3e98uof2bx412kojKTeLm1GFqQ4Y3hbkF7q1HUDUhMu/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "9gEdQy5os9myi4UGpzLwBvW795Eo8oFRtTdq8ttQyWtB", - "symbol": "stakeGB", - "name": "Stake Greet Beef", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9gEdQy5os9myi4UGpzLwBvW795Eo8oFRtTdq8ttQyWtB/logo.png" - }, - { - "chainId": 101, - "address": "DMbb79fgxR3fKKVKWcbetMCuxNNtJnfjY3qqAE4G4wJf", - "symbol": "DUSK", - "name": "Dusk", - "decimals": 3, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DMbb79fgxR3fKKVKWcbetMCuxNNtJnfjY3qqAE4G4wJf/logo.svg", - "tags": ["utility-token"], - "extensions": { - "discord": "https://discord.gg/milliononmars", - "twitter": "https://twitter.com/MilliononMars", - "website": "https://milliononmars.io/" - } - }, - { - "chainId": 101, - "address": "Hy2MBvogiASpQidJnfkBbm31uoPPB7Q99fcKBcEHRiFf", - "symbol": "GMOOLAH", - "name": "Gmoolah", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Hy2MBvogiASpQidJnfkBbm31uoPPB7Q99fcKBcEHRiFf/logo.png", - "tags": ["utility-token"], - "extensions": { - "twitter": "https://twitter.com/iamgmoot" - } - }, - { - "chainId": 101, - "address": "DMT5qtsrFicxvaFnnFwJJtNVU53V85Rt2Xhf6rRM3ySQ", - "symbol": "DMT", - "name": "Pineal Renegades OG WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DMT5qtsrFicxvaFnnFwJJtNVU53V85Rt2Xhf6rRM3ySQ/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "The evolution of the authentication process of fine art. DMT", - "discord": "https://discord.gg/pinealrenegades", - "twitter": "https://twitter.com/PinealRenegade" - } - }, - { - "chainId": 101, - "address": "DMTRrwYy8ipGxNFJewx3cj5UZYRTzh5ypn2xRGMUnKTi", - "symbol": "DMT", - "name": "Pineal Renegades WL", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DMTRrwYy8ipGxNFJewx3cj5UZYRTzh5ypn2xRGMUnKTi/logo.png", - "tags": ["utility-token"], - "extensions": { - "description": "The evolution of the authentication process of fine art. DMT", - "discord": "https://discord.gg/pinealrenegades", - "twitter": "https://twitter.com/PinealRenegade" - } - }, - { - "chainId": 101, - "address": "7AJRNAZFVe8Kfd6sVNmwAEnJ9LEGkqwvHpjV6MqjsiWw", - "symbol": "DGZ", - "name": "Degen Zer0ez", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7AJRNAZFVe8Kfd6sVNmwAEnJ9LEGkqwvHpjV6MqjsiWw/logo.png" - }, - { - "chainId": 101, - "address": "GeJ3ZUT42ywiaj9jUJQr7XPpBWyrKgpmRsdaH6wamvJy", - "symbol": "BTC", - "name": "BTC Bitcoin", - "decimals": 9, - "logoURI": "https://raw.githubusercontent.com/BTCWALLETCOIN/BTC/main/assets/Bitcoin-BTC-icon%20(2).png", - "tags": ["social-BTC"] - }, - { - "chainId": 101, - "address": "7Le24F69ULJomYyuPNdQGN3j6b1eWzZQdVG73dDce3Ev", - "symbol": "TU-S", - "name": "TU-Sofia", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/studenttusofia/Tu-Sofia/main/Logo-TU-blue-3D.png" - }, - { - "chainId": 101, - "address": "EdFCpx5o7MYLbivpc7pmYazcZ2LsQfDuN8YtYaGokVG5", - "symbol": "SWORD", - "name": "SWORD token coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EdFCpx5o7MYLbivpc7pmYazcZ2LsQfDuN8YtYaGokVG5/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "HbTGRmLYKR3FpteZgKDixhf9vKgkgXXq3Eg4kkDdAxsX", - "symbol": "DRGN", - "name": "DRGN token coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HbTGRmLYKR3FpteZgKDixhf9vKgkgXXq3Eg4kkDdAxsX/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "AyvLMr3x3L2ye2Gmb3Lm5F8sgutWm3kjSagVoaUqc8x5", - "symbol": "KFC", - "name": "KFC token coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AyvLMr3x3L2ye2Gmb3Lm5F8sgutWm3kjSagVoaUqc8x5/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "2QHx6MmrsAXSKLynJ55GofBbveYaDPLvn6qgdefey5za", - "symbol": "GMT", - "name": "GMT token coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2QHx6MmrsAXSKLynJ55GofBbveYaDPLvn6qgdefey5za/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "FDM3oFJ8tfr9VnZMFrFKvGLAUzaVhQyfgxv2YhkBjsBL", - "symbol": "GST", - "name": "GST token coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FDM3oFJ8tfr9VnZMFrFKvGLAUzaVhQyfgxv2YhkBjsBL/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "5mofayP9HdvG2eZBxMJdyHHyVmzEZDfPBYw5weRCVqfF", - "symbol": "LFW", - "name": "LFW token coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5mofayP9HdvG2eZBxMJdyHHyVmzEZDfPBYw5weRCVqfF/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "DmjFxVRPW9eVVRSFRWif4W3L27qccSRfy9EWA9E8uRfE", - "symbol": "OCT", - "name": "OCT token coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DmjFxVRPW9eVVRSFRWif4W3L27qccSRfy9EWA9E8uRfE/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "Gqakp3W1HAChncCfQPS3YgdagaBYbC4voSFUfYQFRYxp", - "symbol": "RENA", - "name": "RENA token coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Gqakp3W1HAChncCfQPS3YgdagaBYbC4voSFUfYQFRYxp/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "EnuMQfSqi7vWq69yF2popGkBg2M7ioUxZ2snT9igkuff", - "symbol": "SAMO", - "name": "SAMO token coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EnuMQfSqi7vWq69yF2popGkBg2M7ioUxZ2snT9igkuff/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "CK1ASJbXw8kWaL2TBYo9RutTo8rRoZTodVSTqDivqJe9", - "symbol": "BRT", - "name": "BRT token coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CK1ASJbXw8kWaL2TBYo9RutTo8rRoZTodVSTqDivqJe9/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "Fxu6z7E8zfTznYksPGpw1qkxEwRQy9srr8gsWzbv6Z6P", - "symbol": "FITFI", - "name": "FITFI token coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Fxu6z7E8zfTznYksPGpw1qkxEwRQy9srr8gsWzbv6Z6P/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "ChR6hCfGXoepQbF5WtKjtdTonfxfE7Aq3TXBJR2yXZ4r", - "symbol": "ORBR", - "name": "ORBR token coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ChR6hCfGXoepQbF5WtKjtdTonfxfE7Aq3TXBJR2yXZ4r/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "DTthchfXvySKiA4TDffJ9zMfJeQ4LuptLpKniSXKzVkQ", - "symbol": "RACA", - "name": "RACA token coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DTthchfXvySKiA4TDffJ9zMfJeQ4LuptLpKniSXKzVkQ/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "9vagRqeuePiHniXNR6uGQbMYJabbjqKQsokL5QNPRXT8", - "symbol": "STEP", - "name": "STEP token coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9vagRqeuePiHniXNR6uGQbMYJabbjqKQsokL5QNPRXT8/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "ABBniPgn4CUCBBjcW2EhenumA3kicQoTW5qfn7QdFzVm", - "symbol": "MOOV", - "name": "MOOV token coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/ABBniPgn4CUCBBjcW2EhenumA3kicQoTW5qfn7QdFzVm/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "FpwnXczytURSz6eYukSj2UKQ1VrMiG4bS12sXpeZZTQs", - "symbol": "DOSE", - "name": "DOSE token coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FpwnXczytURSz6eYukSj2UKQ1VrMiG4bS12sXpeZZTQs/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "DHsWGNYXFNh9SJN6cvqhhFp4ZAsEhUpKkYkaaFVUwThR", - "symbol": "ALN", - "name": "ALN token coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DHsWGNYXFNh9SJN6cvqhhFp4ZAsEhUpKkYkaaFVUwThR/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "GMuHxwuCX6ZBeSWUYrvtqS8uTHVRXNEK7QVxNvUDmhkX", - "symbol": "PAY", - "name": "PAY token coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GMuHxwuCX6ZBeSWUYrvtqS8uTHVRXNEK7QVxNvUDmhkX/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "Fz52DPFWRM9uNu2Yh2oLVDWq4M5kDpBQoU3jg1ZQgVJC", - "symbol": "100000X", - "name": "100000X token coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Fz52DPFWRM9uNu2Yh2oLVDWq4M5kDpBQoU3jg1ZQgVJC/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "EVNzPTXqQ7kyK9vVpnto21PCiWkmiBLb1kFtV4sXNvvE", - "symbol": "DOG", - "name": "DOG token coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EVNzPTXqQ7kyK9vVpnto21PCiWkmiBLb1kFtV4sXNvvE/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "7GUmDJcifBwi9jTJEVD53WQkk4AdNButpnPYFtKNyevb", - "symbol": "DPET", - "name": "DPET token coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7GUmDJcifBwi9jTJEVD53WQkk4AdNButpnPYFtKNyevb/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "29SjUVVLEn4f9z2dpAaWPE4VvhiY7idMiSwLPCcXgKK6", - "symbol": "1000ELON", - "name": "1000ELON token coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/29SjUVVLEn4f9z2dpAaWPE4VvhiY7idMiSwLPCcXgKK6/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "EEMHAvDepm58TPpJDtj34xMKyk2XxPYu4HeLqbEbPLcC", - "symbol": "KINGSHIB", - "name": "KINGSHIB token coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EEMHAvDepm58TPpJDtj34xMKyk2XxPYu4HeLqbEbPLcC/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "DxtKsGtacUb9AGV9RwmEt6P8ahhkNSMCZdnv1RpRYSv6", - "symbol": "LUS", - "name": "LUS token coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DxtKsGtacUb9AGV9RwmEt6P8ahhkNSMCZdnv1RpRYSv6/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "GYYViEaPHFHeeka88pR33GA4QrU9G9q13tmEz5ZHo3Kr", - "symbol": "1000AKITA", - "name": "1000AKITA token coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/GYYViEaPHFHeeka88pR33GA4QrU9G9q13tmEz5ZHo3Kr/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "Gu62HyfNFVPrbUx74n3qayDJWKaFPd3UJcGG8WLcgHq9", - "symbol": "ALICE", - "name": "ALICE token coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/Gu62HyfNFVPrbUx74n3qayDJWKaFPd3UJcGG8WLcgHq9/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "EHSSivVbRsuXymnSSvF4ctNgGs6J1Km7dNpyw4Xrmvcw", - "symbol": "MBOX", - "name": "MBOX token coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/EHSSivVbRsuXymnSSvF4ctNgGs6J1Km7dNpyw4Xrmvcw/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "D9Swj9JRoJ7iDBQYp3CENRf1HZsvyEM7ZDHV11Sapheu", - "symbol": "MONS", - "name": "MONS token coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/D9Swj9JRoJ7iDBQYp3CENRf1HZsvyEM7ZDHV11Sapheu/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "5QKuk1XoAePenzWkq3JdunTgAAriL45JSxPGEZib5mY1", - "symbol": "10SAFEMOON", - "name": "10SAFEMOON token coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5QKuk1XoAePenzWkq3JdunTgAAriL45JSxPGEZib5mY1/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "JDQwFwLuudcRJSqeYZJgKT5XhuSgNLHapjr2ZTYTYNRB", - "symbol": "SPELLFIRE", - "name": "SPELLFIRE token coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/JDQwFwLuudcRJSqeYZJgKT5XhuSgNLHapjr2ZTYTYNRB/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "9AaKcdu5eymQwR19qwYFsqiqcXgL3iAxMQyshRpbqg6z", - "symbol": "SRM", - "name": "SRM token coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/9AaKcdu5eymQwR19qwYFsqiqcXgL3iAxMQyshRpbqg6z/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "7uYyHx7CHcRBzYCoQj7NfW2qora7NnNYRBY6CSjQJ9wo", - "symbol": "XWG", - "name": "XWG token coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/7uYyHx7CHcRBzYCoQj7NfW2qora7NnNYRBY6CSjQJ9wo/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "B7wpoTERtwZ8wMcSGPew9dAQcwW9ab3hQjh8caghuErK", - "symbol": "GOLD", - "name": "GOLD token coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/B7wpoTERtwZ8wMcSGPew9dAQcwW9ab3hQjh8caghuErK/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "BCYTxCKsKUsRMBPH9VzeC35U4NZBg6JxjFe2iNR43ewm", - "symbol": "THG", - "name": "THG token coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/BCYTxCKsKUsRMBPH9VzeC35U4NZBg6JxjFe2iNR43ewm/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "2SJUtWahbkSAw7ZyDiSVLGvknXNKCBr395bNi2QqJYxQ", - "symbol": "DOGE", - "name": "DOGE token coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/2SJUtWahbkSAw7ZyDiSVLGvknXNKCBr395bNi2QqJYxQ/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "AhMJmyAB7K4ciVBXNNtaEmP4d8ewJNDAT6xhWgqqH2eT", - "symbol": "SHIB", - "name": "SHIB token coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AhMJmyAB7K4ciVBXNNtaEmP4d8ewJNDAT6xhWgqqH2eT/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "HYf2xLNT5rLqytSrrg5asAaL3WxuEiYxp2YMnSSrxf7K", - "symbol": "APEINU", - "name": "APEINU token coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HYf2xLNT5rLqytSrrg5asAaL3WxuEiYxp2YMnSSrxf7K/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "6U2TwCcYnQSP6nMuG3YoJRGiSxHThadwhbidUP2Mucha", - "symbol": "DORA", - "name": "DORA token coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6U2TwCcYnQSP6nMuG3YoJRGiSxHThadwhbidUP2Mucha/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "CtzEtECi1RhhLBZFCBk7RZjpRvpHYUwmxXMdL41QJ8Se", - "symbol": "FAR", - "name": "FAR token coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/CtzEtECi1RhhLBZFCBk7RZjpRvpHYUwmxXMdL41QJ8Se/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "795k81ZeCCkm3pqH4jVskVW7SgmkexhV3v4pWya5eEfK", - "symbol": "FLM", - "name": "FLM token coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/795k81ZeCCkm3pqH4jVskVW7SgmkexhV3v4pWya5eEfK/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "FAXztAoS7NNfwHWGzXDmRKDm9hzaxVQH3kEE2zo1BHj2", - "symbol": "GOLDMINER", - "name": "GOLDMINER token coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/FAXztAoS7NNfwHWGzXDmRKDm9hzaxVQH3kEE2zo1BHj2/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "HDkX8rMuQjBMe5NXLzFCCShbhBwwbjGaKwuTWxRxUaon", - "symbol": "HE", - "name": "HE token coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/HDkX8rMuQjBMe5NXLzFCCShbhBwwbjGaKwuTWxRxUaon/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "6e6HVPTsT4Dt8EK5q5S5PXL1iMVeVrwrTL7rqtDyvqNs", - "symbol": "KWS", - "name": "KWS token coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6e6HVPTsT4Dt8EK5q5S5PXL1iMVeVrwrTL7rqtDyvqNs/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "41WCpp1epP67M2FDgtvq73p8Z2boJtrxhvUHFfGQYCWf", - "symbol": "SFM", - "name": "SFM token coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/41WCpp1epP67M2FDgtvq73p8Z2boJtrxhvUHFfGQYCWf/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "6HSEFZh3sWPqWxn1ouHfdpKqvpdNUXMjUgX8VJA7Q63x", - "symbol": "BNX", - "name": "BNX token coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/6HSEFZh3sWPqWxn1ouHfdpKqvpdNUXMjUgX8VJA7Q63x/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "5d9AGGUNeyiFwo13WpWzYoWXK5W7uSzWYZLiCmoUocDC", - "symbol": "KP3R", - "name": "KP3R token coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/5d9AGGUNeyiFwo13WpWzYoWXK5W7uSzWYZLiCmoUocDC/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "DWWk3kX2PBFi8Mdeueq8Quhy38CcsCpgMvQPoAeaB6D1", - "symbol": "REVOLAND", - "name": "REVOLAND token coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/DWWk3kX2PBFi8Mdeueq8Quhy38CcsCpgMvQPoAeaB6D1/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "AtYcMWksYseUs4thuh1dw734ALd8XpTEBLGNjtZsz6YX", - "symbol": "SASHIMI", - "name": "SASHIMI token coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/AtYcMWksYseUs4thuh1dw734ALd8XpTEBLGNjtZsz6YX/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "3ktQNv8ELGGrJxQytnMR2JMzmUrTvswtbG538xT4visY", - "symbol": "GAE", - "name": "GAE token coin", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/solana-labs/token-list/main/assets/mainnet/3ktQNv8ELGGrJxQytnMR2JMzmUrTvswtbG538xT4visY/logo.png", - "tags": ["utility-token"] - }, - { - "chainId": 101, - "address": "DHs9mG4EQqq1pvXFHt8HZuvZQCr6Xi5GjGbASsj4TNZm", - "symbol": "JFRM", - "name": "Jeffrium", - "decimals": 0, - "logoURI": "https://raw.githubusercontent.com/jeffreydrew/pandacoin/main/pandafinal.png", - "tags": ["social-token"] - } - ], - "version": { - "major": 0, - "minor": 3, - "patch": 3 - } -} diff --git a/tools/llama-snapshot-tool/src/bin/main.rs b/tools/llama-snapshot-tool/src/bin/main.rs deleted file mode 100644 index 0b0f77708..000000000 --- a/tools/llama-snapshot-tool/src/bin/main.rs +++ /dev/null @@ -1,277 +0,0 @@ -use std::{collections::HashMap, env, rc::Rc}; - -use anchor_client::Client; -use anchor_spl::token::spl_token; -use anyhow::Result; -use fixed::types::I80F48; -use futures::future::join_all; -use lazy_static::lazy_static; -use marginfi::{ - constants::{EMISSIONS_FLAG_BORROW_ACTIVE, EMISSIONS_FLAG_LENDING_ACTIVE, SECONDS_PER_YEAR}, - state::marginfi_group::{Bank, ComputedInterestRates, MarginfiGroup}, -}; -use reqwest::header::CONTENT_TYPE; -use s3::{creds::Credentials, Bucket, Region}; -use serde_json::Value; -use solana_client::rpc_client::RpcClient; -use solana_sdk::{program_pack::Pack, pubkey::Pubkey, signature::Keypair}; - -lazy_static! { - static ref TOKEN_LIST: HashMap = { - let token_list_path = env::var("TOKEN_LIST_PATH").expect("TOKEN_LIST_PATH not set"); - println!("Loading token list from {}", token_list_path); - let tokens_file = std::fs::read_to_string(token_list_path).unwrap(); - let tokens = serde_json::from_str::(&tokens_file).unwrap(); - - HashMap::from_iter( - tokens - .get("tokens") - .unwrap() - .as_array() - .unwrap() - .iter() - .map(|token| { - ( - token.get("address").unwrap().as_str().unwrap().to_owned(), - token.get("symbol").unwrap().as_str().unwrap().to_owned(), - ) - }) - .collect::>(), - ) - }; -} - -const BIRDEYE_API: &str = "https://public-api.birdeye.so"; -const CHAIN: &str = "solana"; -const PROJECT: &str = "marginfi"; -const S3_BUCKET: &str = "marignfi-pools-snapshot"; -const AWS_S3_OBJ_PATH: &str = "snapshot.json"; - -#[tokio::main] -async fn main() -> Result<()> { - let dummy_key = Keypair::new(); - let rpc_url = env::var("RPC_ENDPOINT").expect("RPC_ENDPOINT not set"); - let client = Client::new( - anchor_client::Cluster::Custom(rpc_url.to_string(), "".to_string()), - Rc::new(dummy_key), - ); - - let program = client.program(marginfi::id()).unwrap(); - let rpc = program.rpc(); - - let banks = program.accounts::(vec![])?; - let groups = program.accounts::(vec![])?; - let groups_map = groups - .iter() - .map(|(pk, group)| (*pk, group)) - .collect::>(); - - println!("Found {} banks", banks.len()); - - let snapshot = join_all( - banks - .iter() - .map(|(bank_pk, bank)| { - DefiLammaPoolInfo::from_bank(bank, bank_pk, &rpc, groups_map.get(bank_pk).unwrap()) - }) - .collect::>(), - ) - .await - .into_iter() - .collect::>>()?; - - let snapshot_json = serde_json::to_string(&snapshot).unwrap(); - - println!("Banks: {:#?}", snapshot); - - store_on_s3(&snapshot_json).await?; - - Ok(()) -} - -async fn store_on_s3(snapshot: &str) -> anyhow::Result<()> { - println!("Storing snapshot on to {}", AWS_S3_OBJ_PATH); - let credentials = Credentials::new( - Some(&env::var("AWS_ACCESS_KEY").expect("AWS_ACCESS_KEY not set")), - Some(&env::var("AWS_SECRET_KEY").expect("AWS_SECRET_KEY not set")), - None, - None, - None, - )?; - - let bucket = Bucket::new(S3_BUCKET, Region::UsEast1, credentials)?; - - bucket - .put_object(AWS_S3_OBJ_PATH, snapshot.as_bytes()) - .await?; - - println!("Done!"); - - Ok(()) -} - -#[derive(Clone, Debug, Default, serde::Serialize)] -#[serde(rename_all = "camelCase")] -struct DefiLammaPoolInfo { - pool: String, - chain: String, - project: String, - symbol: String, - tvl_usd: f64, - total_supply_usd: f64, - total_borrow_usd: f64, - ltv: f64, - apy_base: f64, - apy_reward: Option, - apy_base_borrow: f64, - apy_reward_borrow: Option, - reward_tokens: Vec, - underlying_tokens: Vec, -} - -impl DefiLammaPoolInfo { - pub async fn from_bank( - bank: &Bank, - bank_pk: &Pubkey, - rpc_client: &RpcClient, - group: &MarginfiGroup, - ) -> Result { - let ltv = I80F48::ONE / I80F48::from(bank.config.liability_weight_init); - let reward_tokens = if bank.emissions_mint != Pubkey::default() { - vec![bank.emissions_mint.to_string()] - } else { - vec![] - }; - - let token_price = fetch_price_from_birdeye(&bank.mint).await?; - let scale = I80F48::from_num(10_i32.pow(bank.mint_decimals as u32)); - - let total_deposits = bank.get_asset_amount(bank.total_asset_shares.into())? / scale; - let total_borrows = bank.get_liability_amount(bank.total_liability_shares.into())? / scale; - - let net_supply = total_deposits - total_borrows; - - let tvl_usd = token_price * net_supply; - - let total_supply_usd = token_price * total_deposits; - let total_borrow_usd = token_price * total_borrows; - - let token_mint = bank.mint.to_string(); - - let ur = if total_deposits > 0 { - total_borrows / total_deposits - } else { - I80F48::ZERO - }; - - let ir_calc = bank - .config - .interest_rate_config - .create_interest_rate_calculator(group); - - let ComputedInterestRates { - lending_rate_apr, - borrowing_rate_apr, - .. - } = ir_calc.calc_interest_rate(ur).ok_or_else(|| { - anyhow::anyhow!("Failed to calculate interest rate for bank {}", bank_pk) - })?; - - let (apr_reward, apr_reward_borrow) = if bank.emissions_mint.ne(&Pubkey::default()) { - let emissions_token_price = fetch_price_from_birdeye(&bank.emissions_mint).await?; - let mint = rpc_client.get_account(&bank.emissions_mint)?; - let mint = spl_token::state::Mint::unpack(&mint.data[..spl_token::state::Mint::LEN])?; - - // rate / 10 ^ decimals - let reward_rate_per_token = - bank.emissions_rate as f64 / 10i32.pow(mint.decimals as u32) as f64; - let relative_emissions_value = (emissions_token_price - * I80F48::from_num(reward_rate_per_token)) - / I80F48::from_num(token_price); - - ( - if bank.get_flag(EMISSIONS_FLAG_LENDING_ACTIVE) { - Some(relative_emissions_value) - } else { - None - }, - if bank.get_flag(EMISSIONS_FLAG_BORROW_ACTIVE) { - Some(relative_emissions_value) - } else { - None - }, - ) - } else { - (None, None) - }; - - Ok(Self { - pool: bank_pk.to_string(), - chain: CHAIN.to_string(), - project: PROJECT.to_string(), - symbol: TOKEN_LIST - .get(token_mint.as_str()) - .unwrap_or(&"Unknown Token".to_string()) - .to_string(), - tvl_usd: tvl_usd.to_num(), - total_supply_usd: total_supply_usd.to_num(), - total_borrow_usd: total_borrow_usd.to_num(), - ltv: ltv.to_num(), - reward_tokens, - apy_base: dec_to_percentage(apr_to_apy( - lending_rate_apr.to_num(), - SECONDS_PER_YEAR.to_num(), - )), - apy_reward: apr_reward.map(|a| { - dec_to_percentage(apr_to_apy( - (lending_rate_apr + a).to_num(), - SECONDS_PER_YEAR.to_num(), - )) - }), - apy_base_borrow: dec_to_percentage(apr_to_apy( - borrowing_rate_apr.to_num(), - SECONDS_PER_YEAR.to_num(), - )), - apy_reward_borrow: apr_reward_borrow.map(|a| { - dec_to_percentage(apr_to_apy( - (borrowing_rate_apr + a).to_num(), - SECONDS_PER_YEAR.to_num(), - )) - }), - underlying_tokens: vec![bank.mint.to_string()], - }) - } -} - -async fn fetch_price_from_birdeye(token: &Pubkey) -> Result { - println!("Fetching price for {}", token); - let url = format!("{}/public/price?address={}", BIRDEYE_API, token); - let client = reqwest::Client::new(); - - let res = client - .get(&url) - .header(CONTENT_TYPE, "application/json") - .send() - .await?; - - let body = res.json::().await?; - - let price = body - .as_object() - .unwrap() - .get("data") - .unwrap() - .get("value") - .unwrap() - .as_f64(); - - Ok(I80F48::from_num(price.unwrap())) -} - -fn apr_to_apy(apr: f64, m: f64) -> f64 { - (1. + (apr / m)).powf(m) - 1. -} - -fn dec_to_percentage(dec: f64) -> f64 { - dec * 100. -} From 004907e6be9f408f9c03ef3fac96148206546e52 Mon Sep 17 00:00:00 2001 From: Jwalin Date: Thu, 10 Apr 2025 10:40:24 -0400 Subject: [PATCH 57/59] rm switchboard on demand --- Cargo.lock | 89 +++------------------------- Cargo.toml | 1 - programs/marginfi/Cargo.toml | 1 - programs/marginfi/src/state/price.rs | 51 ++-------------- 4 files changed, 15 insertions(+), 127 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a33b068e8..b73551d62 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -418,7 +418,7 @@ dependencies = [ "anchor-lang 0.29.0", "solana-program", "spl-associated-token-account 2.3.0", - "spl-token 4.0.0", + "spl-token", "spl-token-2022 0.9.0", ] @@ -431,7 +431,7 @@ dependencies = [ "anchor-lang 0.30.1", "spl-associated-token-account 3.0.2", "spl-pod 0.2.2", - "spl-token 4.0.0", + "spl-token", "spl-token-2022 3.0.2", "spl-token-group-interface 0.2.3", "spl-token-metadata-interface 0.3.3", @@ -518,12 +518,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "arc-swap" -version = "1.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" - [[package]] name = "ark-bn254" version = "0.4.0" @@ -2760,7 +2754,6 @@ dependencies = [ "spl-tlv-account-resolution 0.6.3", "spl-transfer-hook-interface 0.6.3", "static_assertions", - "switchboard-on-demand", "switchboard-solana", "test-case", "type-layout", @@ -3087,15 +3080,6 @@ dependencies = [ "libc", ] -[[package]] -name = "num_enum" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" -dependencies = [ - "num_enum_derive 0.5.11", -] - [[package]] name = "num_enum" version = "0.6.1" @@ -3114,18 +3098,6 @@ dependencies = [ "num_enum_derive 0.7.2", ] -[[package]] -name = "num_enum_derive" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" -dependencies = [ - "proc-macro-crate 1.3.1", - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "num_enum_derive" version = "0.6.1" @@ -4485,7 +4457,7 @@ dependencies = [ "serde_json", "solana-config-program", "solana-sdk", - "spl-token 4.0.0", + "spl-token", "spl-token-2022 1.0.0", "spl-token-group-interface 0.1.0", "spl-token-metadata-interface 0.2.0", @@ -5509,7 +5481,7 @@ dependencies = [ "solana-sdk", "spl-associated-token-account 2.3.0", "spl-memo", - "spl-token 4.0.0", + "spl-token", "spl-token-2022 1.0.0", "thiserror", ] @@ -5681,7 +5653,7 @@ dependencies = [ "num-derive 0.4.2", "num-traits", "solana-program", - "spl-token 4.0.0", + "spl-token", "spl-token-2022 1.0.0", "thiserror", ] @@ -5697,7 +5669,7 @@ dependencies = [ "num-derive 0.4.2", "num-traits", "solana-program", - "spl-token 4.0.0", + "spl-token", "spl-token-2022 3.0.2", "thiserror", ] @@ -5899,21 +5871,6 @@ dependencies = [ "spl-type-length-value 0.4.3", ] -[[package]] -name = "spl-token" -version = "3.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e85e168a785e82564160dcb87b2a8e04cee9bfd1f4d488c729d53d6a4bd300d" -dependencies = [ - "arrayref", - "bytemuck", - "num-derive 0.3.3", - "num-traits", - "num_enum 0.5.11", - "solana-program", - "thiserror", -] - [[package]] name = "spl-token" version = "4.0.0" @@ -5944,7 +5901,7 @@ dependencies = [ "solana-zk-token-sdk", "spl-memo", "spl-pod 0.1.0", - "spl-token 4.0.0", + "spl-token", "spl-token-metadata-interface 0.2.0", "spl-transfer-hook-interface 0.3.0", "spl-type-length-value 0.3.0", @@ -5967,7 +5924,7 @@ dependencies = [ "solana-zk-token-sdk", "spl-memo", "spl-pod 0.1.0", - "spl-token 4.0.0", + "spl-token", "spl-token-group-interface 0.1.0", "spl-token-metadata-interface 0.2.0", "spl-transfer-hook-interface 0.4.1", @@ -5991,7 +5948,7 @@ dependencies = [ "solana-zk-token-sdk", "spl-memo", "spl-pod 0.2.2", - "spl-token 4.0.0", + "spl-token", "spl-token-group-interface 0.2.3", "spl-token-metadata-interface 0.3.3", "spl-transfer-hook-interface 0.6.3", @@ -6278,34 +6235,6 @@ dependencies = [ "sha3 0.10.8", ] -[[package]] -name = "switchboard-on-demand" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3852951c42f8876a443060b6882bda945f1621224236ead37959e80f5369cf81" -dependencies = [ - "arc-swap", - "async-trait", - "base64 0.21.7", - "bincode", - "borsh 0.10.3", - "bytemuck", - "futures", - "lazy_static", - "libsecp256k1 0.7.1", - "log", - "num 0.4.3", - "rust_decimal", - "serde", - "serde_json", - "sha2 0.10.8", - "solana-address-lookup-table-program", - "solana-program", - "spl-associated-token-account 2.3.0", - "spl-token 3.5.0", - "switchboard-common", -] - [[package]] name = "switchboard-solana" version = "0.29.109" diff --git a/Cargo.toml b/Cargo.toml index a532cd631..584297e17 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -27,7 +27,6 @@ anchor-lang-29 = { version = "0.29.0", package = "anchor-lang" } pyth-sdk-solana = "=0.10.1" pyth-solana-receiver-sdk = "=0.3.1" switchboard-solana = "0.29.0" -switchboard-on-demand = "0.1.14" borsh = "0.10.3" [profile.release] diff --git a/programs/marginfi/Cargo.toml b/programs/marginfi/Cargo.toml index b87c0e3d0..7585d1625 100644 --- a/programs/marginfi/Cargo.toml +++ b/programs/marginfi/Cargo.toml @@ -35,7 +35,6 @@ pyth-sdk-solana = { workspace = true } anchor-lang-29 = { workspace = true } pyth-solana-receiver-sdk = { workspace = true } switchboard-solana = { workspace = true } -switchboard-on-demand = { workspace = true } borsh = "0.10.3" bytemuck = "1.9.1" diff --git a/programs/marginfi/src/state/price.rs b/programs/marginfi/src/state/price.rs index ee009660a..fc5a15b89 100644 --- a/programs/marginfi/src/state/price.rs +++ b/programs/marginfi/src/state/price.rs @@ -8,7 +8,6 @@ use pyth_sdk_solana::{state::SolanaPriceAccount, Price, PriceFeed}; use pyth_solana_receiver_sdk::price_update::{self, FeedId, PriceUpdateV2}; use solana_program::{borsh1::try_from_slice_unchecked, stake::state::StakeStateV2}; use std::{cell::Ref, cmp::min}; -use switchboard_on_demand::{CurrentResult, PullFeedAccountData, SPL_TOKEN_PROGRAM_ID}; use switchboard_solana::{ AggregatorAccountData, AggregatorResolutionMode, SwitchboardDecimal, SWITCHBOARD_PROGRAM_ID, }; @@ -423,7 +422,7 @@ impl OraclePriceFeedAdapter { // Sanity check the mint. Note: spl-single-pool uses a classic Token, never Token22 check!( - oracle_ais[1].owner == &SPL_TOKEN_PROGRAM_ID, + oracle_ais[1].owner == &anchor_spl::token::spl_token::ID, MarginfiError::StakePoolValidationFailed ); check_eq!( @@ -597,14 +596,7 @@ impl SwitchboardPullPriceFeed { MarginfiError::SwitchboardWrongAccountOwner ); - let feed = PullFeedAccountData::parse(ai_data) - .map_err(|_| MarginfiError::SwitchboardInvalidAccount)?; - - // Check staleness - let last_updated = feed.last_update_timestamp; - if current_timestamp.saturating_sub(last_updated) > max_age as i64 { - return err!(MarginfiError::SwitchboardStalePrice); - } + let feed = LitePullFeedAccountData { result: 0 }; Ok(Self { feed: Box::new(feed.into()), @@ -619,17 +611,14 @@ impl SwitchboardPullPriceFeed { MarginfiError::SwitchboardWrongAccountOwner ); - PullFeedAccountData::parse(ai_data) - .map_err(|_| MarginfiError::SwitchboardInvalidAccount)?; - Ok(()) } fn get_price(&self) -> MarginfiResult { let sw_result = self.feed.result; // Note: Pull oracles support mean (result.mean) or median (result.value) - let price: I80F48 = I80F48::from_num(sw_result.value) - .checked_div(EXP_10_I80F48[switchboard_on_demand::PRECISION as usize]) + let price: I80F48 = I80F48::from_num(0) + .checked_div(EXP_10_I80F48[10]) .ok_or_else(math_error!())?; // WARNING: Adding a line like the following will cause the entire project to silently fail @@ -641,7 +630,7 @@ impl SwitchboardPullPriceFeed { } fn get_confidence_interval(&self) -> MarginfiResult { - let std_div: I80F48 = I80F48::from_num(self.feed.result.std_dev); + let std_div: I80F48 = I80F48::from_num(0); let conf_interval = std_div .checked_mul(STD_DEV_MULTIPLE) @@ -1054,35 +1043,7 @@ impl PriceAdapter for PythPushOraclePriceFeed { /// switchboard-on-demand/src/pull_feed.rs #[cfg_attr(feature = "client", derive(Clone, Debug))] pub struct LitePullFeedAccountData { - pub result: CurrentResult, - #[cfg(feature = "client")] - pub feed_hash: [u8; 32], - #[cfg(feature = "client")] - pub last_update_timestamp: i64, -} - -impl From<&PullFeedAccountData> for LitePullFeedAccountData { - fn from(feed: &PullFeedAccountData) -> Self { - Self { - result: feed.result, - #[cfg(feature = "client")] - feed_hash: feed.feed_hash, - #[cfg(feature = "client")] - last_update_timestamp: feed.last_update_timestamp, - } - } -} - -impl From> for LitePullFeedAccountData { - fn from(feed: Ref<'_, PullFeedAccountData>) -> Self { - Self { - result: feed.result, - #[cfg(feature = "client")] - feed_hash: feed.feed_hash, - #[cfg(feature = "client")] - last_update_timestamp: feed.last_update_timestamp, - } - } + pub result: u64, } /// A slimmed down version of the AggregatorAccountData struct copied from the switchboard-v2/src/aggregator.rs From 1c13875f63f0acfdede2b60e8f2daaf7e6728826 Mon Sep 17 00:00:00 2001 From: Jwalin Date: Thu, 10 Apr 2025 10:42:44 -0400 Subject: [PATCH 58/59] rm switchboard --- programs/marginfi/src/state/price.rs | 4 ---- 1 file changed, 4 deletions(-) diff --git a/programs/marginfi/src/state/price.rs b/programs/marginfi/src/state/price.rs index fc5a15b89..b8055b417 100644 --- a/programs/marginfi/src/state/price.rs +++ b/programs/marginfi/src/state/price.rs @@ -811,10 +811,6 @@ pub fn load_price_update_v2_checked(ai: &AccountInfo) -> MarginfiResult::DISCRIMINATOR, - MarginfiError::PythPushInvalidAccount - ); Ok(PriceUpdateV2 { write_authority: Pubkey::default(), price_message: pyth_solana_receiver_sdk::price_update::PriceFeedMessage { From e4a85fe148286e199ac35ecff0f8e2d5e3f787b5 Mon Sep 17 00:00:00 2001 From: Bhargava Sai Macha Date: Fri, 18 Jul 2025 14:52:11 -0400 Subject: [PATCH 59/59] remove anchor 0.29.0 --- Cargo.lock | 508 +++-------------------------------- Cargo.toml | 11 +- programs/marginfi/Cargo.toml | 1 - 3 files changed, 42 insertions(+), 478 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b73551d62..5aaf62d2a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -117,38 +117,13 @@ dependencies = [ "alloc-no-stdlib", ] -[[package]] -name = "anchor-attribute-access-control" -version = "0.29.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5f619f1d04f53621925ba8a2e633ba5a6081f2ae14758cbb67f38fd823e0a3e" -dependencies = [ - "anchor-syn 0.29.0", - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "anchor-attribute-access-control" version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "47fe28365b33e8334dd70ae2f34a43892363012fe239cf37d2ee91693575b1f8" dependencies = [ - "anchor-syn 0.30.1", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "anchor-attribute-account" -version = "0.29.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7f2a3e1df4685f18d12a943a9f2a7456305401af21a07c9fe076ef9ecd6e400" -dependencies = [ - "anchor-syn 0.29.0", - "bs58 0.5.1", + "anchor-syn", "proc-macro2", "quote", "syn 1.0.109", @@ -160,42 +135,20 @@ version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c288d496168268d198d9b53ee9f4f9d260a55ba4df9877ea1d4486ad6109e0f" dependencies = [ - "anchor-syn 0.30.1", + "anchor-syn", "bs58 0.5.1", "proc-macro2", "quote", "syn 1.0.109", ] -[[package]] -name = "anchor-attribute-constant" -version = "0.29.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9423945cb55627f0b30903288e78baf6f62c6c8ab28fb344b6b25f1ffee3dca7" -dependencies = [ - "anchor-syn 0.29.0", - "quote", - "syn 1.0.109", -] - [[package]] name = "anchor-attribute-constant" version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49b77b6948d0eeaaa129ce79eea5bbbb9937375a9241d909ca8fb9e006bb6e90" dependencies = [ - "anchor-syn 0.30.1", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "anchor-attribute-error" -version = "0.29.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93ed12720033cc3c3bf3cfa293349c2275cd5ab99936e33dd4bf283aaad3e241" -dependencies = [ - "anchor-syn 0.29.0", + "anchor-syn", "quote", "syn 1.0.109", ] @@ -206,19 +159,7 @@ version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4d20bb569c5a557c86101b944721d865e1fd0a4c67c381d31a44a84f07f84828" dependencies = [ - "anchor-syn 0.30.1", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "anchor-attribute-event" -version = "0.29.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eef4dc0371eba2d8c8b54794b0b0eb786a234a559b77593d6f80825b6d2c77a2" -dependencies = [ - "anchor-syn 0.29.0", - "proc-macro2", + "anchor-syn", "quote", "syn 1.0.109", ] @@ -229,23 +170,12 @@ version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4cebd8d0671a3a9dc3160c48598d652c34c77de6be4d44345b8b514323284d57" dependencies = [ - "anchor-syn 0.30.1", + "anchor-syn", "proc-macro2", "quote", "syn 1.0.109", ] -[[package]] -name = "anchor-attribute-program" -version = "0.29.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b18c4f191331e078d4a6a080954d1576241c29c56638783322a18d308ab27e4f" -dependencies = [ - "anchor-syn 0.29.0", - "quote", - "syn 1.0.109", -] - [[package]] name = "anchor-attribute-program" version = "0.30.1" @@ -253,7 +183,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "efb2a5eb0860e661ab31aff7bb5e0288357b176380e985bade4ccb395981b42d" dependencies = [ "anchor-lang-idl", - "anchor-syn 0.30.1", + "anchor-syn", "anyhow", "bs58 0.5.1", "heck 0.3.3", @@ -263,37 +193,13 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "anchor-derive-accounts" -version = "0.29.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5de10d6e9620d3bcea56c56151cad83c5992f50d5960b3a9bebc4a50390ddc3c" -dependencies = [ - "anchor-syn 0.29.0", - "quote", - "syn 1.0.109", -] - [[package]] name = "anchor-derive-accounts" version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04368b5abef4266250ca8d1d12f4dff860242681e4ec22b885dcfe354fd35aa1" dependencies = [ - "anchor-syn 0.30.1", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "anchor-derive-serde" -version = "0.29.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4e2e5be518ec6053d90a2a7f26843dbee607583c779e6c8395951b9739bdfbe" -dependencies = [ - "anchor-syn 0.29.0", - "borsh-derive-internal 0.10.3", - "proc-macro2", + "anchor-syn", "quote", "syn 1.0.109", ] @@ -304,19 +210,8 @@ version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e0bb0e0911ad4a70cab880cdd6287fe1e880a1a9d8e4e6defa8e9044b9796a6c" dependencies = [ - "anchor-syn 0.30.1", - "borsh-derive-internal 0.9.3", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "anchor-derive-space" -version = "0.29.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ecc31d19fa54840e74b7a979d44bcea49d70459de846088a1d71e87ba53c419" -dependencies = [ + "anchor-syn", + "borsh-derive-internal 0.10.3", "proc-macro2", "quote", "syn 1.0.109", @@ -333,51 +228,26 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "anchor-lang" -version = "0.29.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35da4785497388af0553586d55ebdc08054a8b1724720ef2749d313494f2b8ad" -dependencies = [ - "anchor-attribute-access-control 0.29.0", - "anchor-attribute-account 0.29.0", - "anchor-attribute-constant 0.29.0", - "anchor-attribute-error 0.29.0", - "anchor-attribute-event 0.29.0", - "anchor-attribute-program 0.29.0", - "anchor-derive-accounts 0.29.0", - "anchor-derive-serde 0.29.0", - "anchor-derive-space 0.29.0", - "arrayref", - "base64 0.13.1", - "bincode", - "borsh 0.10.3", - "bytemuck", - "getrandom 0.2.15", - "solana-program", - "thiserror", -] - [[package]] name = "anchor-lang" version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6620c9486d9d36a4389cab5e37dc34a42ed0bfaa62e6a75a2999ce98f8f2e373" dependencies = [ - "anchor-attribute-access-control 0.30.1", - "anchor-attribute-account 0.30.1", - "anchor-attribute-constant 0.30.1", - "anchor-attribute-error 0.30.1", - "anchor-attribute-event 0.30.1", - "anchor-attribute-program 0.30.1", - "anchor-derive-accounts 0.30.1", - "anchor-derive-serde 0.30.1", - "anchor-derive-space 0.30.1", + "anchor-attribute-access-control", + "anchor-attribute-account", + "anchor-attribute-constant", + "anchor-attribute-error", + "anchor-attribute-event", + "anchor-attribute-program", + "anchor-derive-accounts", + "anchor-derive-serde", + "anchor-derive-space", "anchor-lang-idl", "arrayref", "base64 0.21.7", "bincode", - "borsh 0.9.3", + "borsh 0.10.3", "bytemuck", "getrandom 0.2.15", "solana-program", @@ -409,26 +279,13 @@ dependencies = [ "serde", ] -[[package]] -name = "anchor-spl" -version = "0.29.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c4fd6e43b2ca6220d2ef1641539e678bfc31b6cc393cf892b373b5997b6a39a" -dependencies = [ - "anchor-lang 0.29.0", - "solana-program", - "spl-associated-token-account 2.3.0", - "spl-token", - "spl-token-2022 0.9.0", -] - [[package]] name = "anchor-spl" version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04bd077c34449319a1e4e0bc21cea572960c9ae0d0fefda0dd7c52fcc3c647a3" dependencies = [ - "anchor-lang 0.30.1", + "anchor-lang", "spl-associated-token-account 3.0.2", "spl-pod 0.2.2", "spl-token", @@ -437,24 +294,6 @@ dependencies = [ "spl-token-metadata-interface 0.3.3", ] -[[package]] -name = "anchor-syn" -version = "0.29.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9101b84702fed2ea57bd22992f75065da5648017135b844283a2f6d74f27825" -dependencies = [ - "anyhow", - "bs58 0.5.1", - "heck 0.3.3", - "proc-macro2", - "quote", - "serde", - "serde_json", - "sha2 0.10.8", - "syn 1.0.109", - "thiserror", -] - [[package]] name = "anchor-syn" version = "0.30.1" @@ -1007,7 +846,7 @@ dependencies = [ name = "brick" version = "0.1.0" dependencies = [ - "anchor-lang 0.30.1", + "anchor-lang", "solana-program", ] @@ -1800,16 +1639,6 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" -[[package]] -name = "erased-serde" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24e2389d65ab4fab27dc2a5de7b191e1f6617d1f1c8855c0dc569c94a4cbb18d" -dependencies = [ - "serde", - "typeid", -] - [[package]] name = "errno" version = "0.3.9" @@ -2526,15 +2355,6 @@ dependencies = [ "cpufeatures", ] -[[package]] -name = "kv-log-macro" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f" -dependencies = [ - "log", -] - [[package]] name = "lazy_static" version = "1.5.0" @@ -2567,34 +2387,15 @@ dependencies = [ "base64 0.12.3", "digest 0.9.0", "hmac-drbg", - "libsecp256k1-core 0.2.2", - "libsecp256k1-gen-ecmult 0.2.1", - "libsecp256k1-gen-genmult 0.2.1", + "libsecp256k1-core", + "libsecp256k1-gen-ecmult", + "libsecp256k1-gen-genmult", "rand 0.7.3", "serde", "sha2 0.9.9", "typenum", ] -[[package]] -name = "libsecp256k1" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95b09eff1b35ed3b33b877ced3a691fc7a481919c7e29c53c906226fcf55e2a1" -dependencies = [ - "arrayref", - "base64 0.13.1", - "digest 0.9.0", - "hmac-drbg", - "libsecp256k1-core 0.3.0", - "libsecp256k1-gen-ecmult 0.3.0", - "libsecp256k1-gen-genmult 0.3.0", - "rand 0.8.5", - "serde", - "sha2 0.9.9", - "typenum", -] - [[package]] name = "libsecp256k1-core" version = "0.2.2" @@ -2606,33 +2407,13 @@ dependencies = [ "subtle", ] -[[package]] -name = "libsecp256k1-core" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5be9b9bb642d8522a44d533eab56c16c738301965504753b03ad1de3425d5451" -dependencies = [ - "crunchy", - "digest 0.9.0", - "subtle", -] - [[package]] name = "libsecp256k1-gen-ecmult" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccab96b584d38fac86a83f07e659f0deafd0253dc096dab5a36d53efe653c5c3" dependencies = [ - "libsecp256k1-core 0.2.2", -] - -[[package]] -name = "libsecp256k1-gen-ecmult" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3038c808c55c87e8a172643a7d87187fc6c4174468159cb3090659d55bcb4809" -dependencies = [ - "libsecp256k1-core 0.3.0", + "libsecp256k1-core", ] [[package]] @@ -2641,16 +2422,7 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "67abfe149395e3aa1c48a2beb32b068e2334402df8181f818d3aee2b304c4f5d" dependencies = [ - "libsecp256k1-core 0.2.2", -] - -[[package]] -name = "libsecp256k1-gen-genmult" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3db8d6ba2cec9eacc40e6e8ccc98931840301f1006e95647ceb2dd5c3aa06f7c" -dependencies = [ - "libsecp256k1-core 0.3.0", + "libsecp256k1-core", ] [[package]] @@ -2686,9 +2458,6 @@ name = "log" version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" -dependencies = [ - "value-bag", -] [[package]] name = "lru" @@ -2723,9 +2492,8 @@ dependencies = [ name = "marginfi" version = "0.1.2" dependencies = [ - "anchor-lang 0.29.0", - "anchor-lang 0.30.1", - "anchor-spl 0.30.1", + "anchor-lang", + "anchor-spl", "anyhow", "assert_matches", "base64 0.21.7", @@ -3532,7 +3300,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b7854c4176470c8d86de301dc5b57ac84227dabb9527328b585fc332962d60b" dependencies = [ - "anchor-lang 0.29.0", + "anchor-lang", "hex", "pythnet-sdk", "solana-program", @@ -3544,7 +3312,7 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3bbbc0456f9f27c9ad16b6c3bf1b2a7fea61eebf900f4d024a0468b9a84fe0c1" dependencies = [ - "anchor-lang 0.29.0", + "anchor-lang", "bincode", "borsh 0.10.3", "bytemuck", @@ -4221,15 +3989,6 @@ dependencies = [ "syn 2.0.58", ] -[[package]] -name = "serde_fmt" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1d4ddca14104cd60529e8c7f7ba71a2c8acd8f7f5cfcdc2faf97eeb7c3010a4" -dependencies = [ - "serde", -] - [[package]] name = "serde_json" version = "1.0.120" @@ -4603,7 +4362,7 @@ checksum = "6b1a55b8533f2dc716602e7c1b2bd555d5ac598ef6e80d28a517e6f31baf042e" dependencies = [ "bincode", "byteorder", - "libsecp256k1 0.6.0", + "libsecp256k1", "log", "scopeguard", "solana-measure", @@ -4967,7 +4726,7 @@ dependencies = [ "js-sys", "lazy_static", "libc", - "libsecp256k1 0.6.0", + "libsecp256k1", "light-poseidon", "log", "memoffset 0.9.1", @@ -5294,7 +5053,7 @@ dependencies = [ "itertools", "js-sys", "lazy_static", - "libsecp256k1 0.6.0", + "libsecp256k1", "log", "memmap2", "num-derive 0.4.2", @@ -5829,20 +5588,6 @@ dependencies = [ "syn 2.0.58", ] -[[package]] -name = "spl-tlv-account-resolution" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "062e148d3eab7b165582757453632ffeef490c02c86a48bfdb4988f63eefb3b9" -dependencies = [ - "bytemuck", - "solana-program", - "spl-discriminator 0.1.0", - "spl-pod 0.1.0", - "spl-program-error 0.3.0", - "spl-type-length-value 0.3.0", -] - [[package]] name = "spl-tlv-account-resolution" version = "0.5.1" @@ -5886,28 +5631,6 @@ dependencies = [ "thiserror", ] -[[package]] -name = "spl-token-2022" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4abf34a65ba420584a0c35f3903f8d727d1f13ababbdc3f714c6b065a686e86" -dependencies = [ - "arrayref", - "bytemuck", - "num-derive 0.4.2", - "num-traits", - "num_enum 0.7.2", - "solana-program", - "solana-zk-token-sdk", - "spl-memo", - "spl-pod 0.1.0", - "spl-token", - "spl-token-metadata-interface 0.2.0", - "spl-transfer-hook-interface 0.3.0", - "spl-type-length-value 0.3.0", - "thiserror", -] - [[package]] name = "spl-token-2022" version = "1.0.0" @@ -6010,22 +5733,6 @@ dependencies = [ "spl-type-length-value 0.4.3", ] -[[package]] -name = "spl-transfer-hook-interface" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "051d31803f873cabe71aec3c1b849f35248beae5d19a347d93a5c9cccc5d5a9b" -dependencies = [ - "arrayref", - "bytemuck", - "solana-program", - "spl-discriminator 0.1.0", - "spl-pod 0.1.0", - "spl-program-error 0.3.0", - "spl-tlv-account-resolution 0.4.0", - "spl-type-length-value 0.3.0", -] - [[package]] name = "spl-transfer-hook-interface" version = "0.4.1" @@ -6142,118 +5849,17 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab16ced94dbd8a46c82fd81e3ed9a8727dac2977ea869d217bcc4ea1f122e81f" -[[package]] -name = "sval" -version = "2.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53eb957fbc79a55306d5d25d87daf3627bc3800681491cda0709eef36c748bfe" - -[[package]] -name = "sval_buffer" -version = "2.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96e860aef60e9cbf37888d4953a13445abf523c534640d1f6174d310917c410d" -dependencies = [ - "sval", - "sval_ref", -] - -[[package]] -name = "sval_dynamic" -version = "2.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea3f2b07929a1127d204ed7cb3905049381708245727680e9139dac317ed556f" -dependencies = [ - "sval", -] - -[[package]] -name = "sval_fmt" -version = "2.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4e188677497de274a1367c4bda15bd2296de4070d91729aac8f0a09c1abf64d" -dependencies = [ - "itoa", - "ryu", - "sval", -] - -[[package]] -name = "sval_json" -version = "2.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32f456c07dae652744781f2245d5e3b78e6a9ebad70790ac11eb15dbdbce5282" -dependencies = [ - "itoa", - "ryu", - "sval", -] - -[[package]] -name = "sval_nested" -version = "2.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "886feb24709f0476baaebbf9ac10671a50163caa7e439d7a7beb7f6d81d0a6fb" -dependencies = [ - "sval", - "sval_buffer", - "sval_ref", -] - -[[package]] -name = "sval_ref" -version = "2.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be2e7fc517d778f44f8cb64140afa36010999565528d48985f55e64d45f369ce" -dependencies = [ - "sval", -] - -[[package]] -name = "sval_serde" -version = "2.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79bf66549a997ff35cd2114a27ac4b0c2843280f2cfa84b240d169ecaa0add46" -dependencies = [ - "serde", - "sval", - "sval_nested", -] - -[[package]] -name = "switchboard-common" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c96fe58be35530580b729fa5d846661c89a007982527f4ff0ca6010168564159" -dependencies = [ - "base64 0.21.7", - "hex", - "log", - "serde", - "serde_json", - "sha2 0.10.8", - "sha3 0.10.8", -] - [[package]] name = "switchboard-solana" -version = "0.29.109" +version = "0.30.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bb0cb2cd26bcd72a11fae679d07207bca093c303c9cc72bcdc7866bb7bf8a6b" +checksum = "85677f5632be477addfc08e63b096289f33f00fb23c3a1471c1c178ffb5d3012" dependencies = [ - "anchor-lang 0.29.0", - "anchor-spl 0.29.0", + "anchor-lang", "bytemuck", - "hex", - "kv-log-macro", "lazy_static", - "libsecp256k1 0.7.1", - "log", "rust_decimal", - "solana-address-lookup-table-program", - "solana-program", "superslice", - "switchboard-common", ] [[package]] @@ -6843,12 +6449,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "typeid" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "059d83cc991e7a42fc37bd50941885db0888e34209f8cfd9aab07ddec03bc9cf" - [[package]] name = "typenum" version = "1.17.0" @@ -6970,42 +6570,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" -[[package]] -name = "value-bag" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a84c137d37ab0142f0f2ddfe332651fdbf252e7b7dbb4e67b6c1f1b2e925101" -dependencies = [ - "value-bag-serde1", - "value-bag-sval2", -] - -[[package]] -name = "value-bag-serde1" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccacf50c5cb077a9abb723c5bcb5e0754c1a433f1e1de89edc328e2760b6328b" -dependencies = [ - "erased-serde", - "serde", - "serde_fmt", -] - -[[package]] -name = "value-bag-sval2" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1785bae486022dfb9703915d42287dcb284c1ee37bd1080eeba78cc04721285b" -dependencies = [ - "sval", - "sval_buffer", - "sval_dynamic", - "sval_fmt", - "sval_json", - "sval_ref", - "sval_serde", -] - [[package]] name = "vec_map" version = "0.8.2" diff --git a/Cargo.toml b/Cargo.toml index 584297e17..b51074e7d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -21,12 +21,13 @@ spl-tlv-account-resolution = "0.6.3" spl-discriminator = "0.2.2" spl-token-2022 = "3.0.2" -anchor-spl = { version = "0.30.1", features = ["token_2022_extensions"] } -anchor-lang = { version = "0.30.1", features = ["init-if-needed", "event-cpi"]} -anchor-lang-29 = { version = "0.29.0", package = "anchor-lang" } +anchor-spl = { version = "0.30.1"} +anchor-client = { version = "0.30.1"} +anchor-lang = { version = "0.30.1" } + pyth-sdk-solana = "=0.10.1" -pyth-solana-receiver-sdk = "=0.3.1" -switchboard-solana = "0.29.0" +pyth-solana-receiver-sdk = "0.3.1" +switchboard-solana = "0.30.4" borsh = "0.10.3" [profile.release] diff --git a/programs/marginfi/Cargo.toml b/programs/marginfi/Cargo.toml index 7585d1625..092a3641b 100644 --- a/programs/marginfi/Cargo.toml +++ b/programs/marginfi/Cargo.toml @@ -32,7 +32,6 @@ anchor-lang = { workspace = true } anchor-spl = { workspace = true } pyth-sdk-solana = { workspace = true } -anchor-lang-29 = { workspace = true } pyth-solana-receiver-sdk = { workspace = true } switchboard-solana = { workspace = true } borsh = "0.10.3"