diff --git a/packages/icons/brands/X2Y2.svg b/packages/icons/brands/X2Y2.svg
deleted file mode 100644
index fcf52da5940b..000000000000
--- a/packages/icons/brands/X2Y2.svg
+++ /dev/null
@@ -1,13 +0,0 @@
-
diff --git a/packages/icons/icon-generated-as-jsx.js b/packages/icons/icon-generated-as-jsx.js
index e410ca933542..599689192651 100644
--- a/packages/icons/icon-generated-as-jsx.js
+++ b/packages/icons/icon-generated-as-jsx.js
@@ -638,11 +638,6 @@ export const WETH = /*#__PURE__*/ __createIcon('WETH', [
u: () => new URL('./brands/WETH.svg', import.meta.url).href,
},
])
-export const X2Y2 = /*#__PURE__*/ __createIcon('X2Y2', [
- {
- u: () => new URL('./brands/X2Y2.svg', import.meta.url).href,
- },
-])
export const XLog = /*#__PURE__*/ __createIcon('XLog', [
{
u: () => new URL('./brands/XLog.svg', import.meta.url).href,
diff --git a/packages/icons/icon-generated-as-url.js b/packages/icons/icon-generated-as-url.js
index e6553edb637a..f44f406604e7 100644
--- a/packages/icons/icon-generated-as-url.js
+++ b/packages/icons/icon-generated-as-url.js
@@ -115,7 +115,6 @@ export function twitter_x_round_dark_url() { return new URL("./brands/TwitterXRo
export function twitter_x_round_light_url() { return new URL("./brands/TwitterXRound.light.svg", import.meta.url).href }
export function uniswap_url() { return new URL("./brands/Uniswap.svg", import.meta.url).href }
export function weth_url() { return new URL("./brands/WETH.svg", import.meta.url).href }
-export function x_2_y_2_url() { return new URL("./brands/X2Y2.svg", import.meta.url).href }
export function x_log_dark_url() { return new URL("./brands/XLog.dark.svg", import.meta.url).href }
export function x_log_url() { return new URL("./brands/XLog.svg", import.meta.url).href }
export function you_tube_url() { return new URL("./brands/YouTube.svg", import.meta.url).href }
diff --git a/packages/plugins/Collectible/src/SiteAdaptor/Shared/DetailsCard.tsx b/packages/plugins/Collectible/src/SiteAdaptor/Shared/DetailsCard.tsx
index 6704c442184e..841da07d6fda 100644
--- a/packages/plugins/Collectible/src/SiteAdaptor/Shared/DetailsCard.tsx
+++ b/packages/plugins/Collectible/src/SiteAdaptor/Shared/DetailsCard.tsx
@@ -11,7 +11,6 @@ const PLATFORM_COSTS: {
[k in SourceType]?: number
} = {
[SourceType.OpenSea]: 2.5,
- [SourceType.X2Y2]: 0.5,
[SourceType.LooksRare]: 2,
}
diff --git a/packages/plugins/Collectible/src/helpers/url.ts b/packages/plugins/Collectible/src/helpers/url.ts
index 74a2078cef2e..5761abe073c6 100644
--- a/packages/plugins/Collectible/src/helpers/url.ts
+++ b/packages/plugins/Collectible/src/helpers/url.ts
@@ -93,15 +93,6 @@ const RULES = [
address: (matched: string) => matched.replace('zora', ZORA_COLLECTION_ADDRESS),
},
- // x2y2
- {
- hosts: ['x2y2.io'],
- pathname: /^\/eth\/(0x[\dA-Fa-f]{40})\/(\d+)/,
- pluginID: NetworkPluginID.PLUGIN_EVM,
- chainId: ChainIdEVM.Mainnet,
- provider: SourceType.X2Y2,
- },
-
// looksrare
{
hosts: ['looksrare.org'],
diff --git a/packages/plugins/Collectible/tests/helpers.ts b/packages/plugins/Collectible/tests/helpers.ts
index 150fdb8218b6..ae44b56a5817 100644
--- a/packages/plugins/Collectible/tests/helpers.ts
+++ b/packages/plugins/Collectible/tests/helpers.ts
@@ -85,18 +85,6 @@ describe('getPayloadFromURL', () => {
},
},
- // x2y2
- {
- give: 'https://x2y2.io/eth/0x6d19568A959FCB4211852F6472d3df7b67C6Cd54/332',
- expected: {
- pluginID: NetworkPluginID.PLUGIN_EVM,
- chainId: ChainIdEVM.Mainnet,
- address: '0x6d19568A959FCB4211852F6472d3df7b67C6Cd54',
- tokenId: '332',
- provider: SourceType.X2Y2,
- },
- },
-
// loosrare
{
give: 'https://looksrare.org/collections/0x60E4d786628Fea6478F785A6d7e704777c86a7c6/28850',
diff --git a/packages/shared/src/UI/components/SourceProviderIcon/index.tsx b/packages/shared/src/UI/components/SourceProviderIcon/index.tsx
index e39a1165af71..14bb4fcde767 100644
--- a/packages/shared/src/UI/components/SourceProviderIcon/index.tsx
+++ b/packages/shared/src/UI/components/SourceProviderIcon/index.tsx
@@ -13,7 +13,6 @@ const IconMap: Partial> = {
[SourceType.CoinGecko]: Icons.CoinGecko,
[SourceType.Uniswap]: Icons.Uniswap,
[SourceType.LooksRare]: Icons.LooksRare,
- [SourceType.X2Y2]: Icons.X2Y2,
[SourceType.SimpleHash]: Icons.SimpleHash,
}
diff --git a/packages/shared/src/UI/components/SourceProviderSwitcher/index.tsx b/packages/shared/src/UI/components/SourceProviderSwitcher/index.tsx
index a85c8b52d4ff..06cfa8cf8513 100644
--- a/packages/shared/src/UI/components/SourceProviderSwitcher/index.tsx
+++ b/packages/shared/src/UI/components/SourceProviderSwitcher/index.tsx
@@ -4,7 +4,7 @@ import { SourceType } from '@masknet/web3-shared-base'
import { Stack } from '@mui/material'
import { SourceProviderIcon } from '../index.js'
-const sourceList = [SourceType.LooksRare, SourceType.OpenSea, SourceType.Rarible, SourceType.X2Y2]
+const sourceList = [SourceType.LooksRare, SourceType.OpenSea, SourceType.Rarible]
interface SourceProviderSwitcherProps {
// default is all
diff --git a/packages/web3-providers/src/Trending/constants.ts b/packages/web3-providers/src/Trending/constants.ts
index ee7f285ff41a..5ca1f6634ab4 100644
--- a/packages/web3-providers/src/Trending/constants.ts
+++ b/packages/web3-providers/src/Trending/constants.ts
@@ -71,7 +71,6 @@ export const CURRENCIES_MAP: Record {
| TokenListAPI.Provider
>(
{
- [SourceType.X2Y2]: X2Y2.X2Y2,
[SourceType.Chainbase]: ChainbaseNonFungibleToken.ChainbaseNonFungibleToken,
[SourceType.Zerion]: ZerionNonFungibleToken.ZerionNonFungibleToken,
[SourceType.NFTScan]: NFTScanNonFungibleTokenEVM.NFTScanNonFungibleTokenEVM,
@@ -41,7 +39,6 @@ export class HubNonFungibleAPI extends BaseHubNonFungible {
[
SimpleHashEVM.SimpleHashEVM,
NFTScanNonFungibleTokenEVM.NFTScanNonFungibleTokenEVM,
- X2Y2.X2Y2,
ZerionNonFungibleToken.ZerionNonFungibleToken,
AlchemyEVM.AlchemyEVM,
Zora.Zora,
diff --git a/packages/web3-providers/src/X2Y2/constants.ts b/packages/web3-providers/src/X2Y2/constants.ts
deleted file mode 100644
index d4bc382811ac..000000000000
--- a/packages/web3-providers/src/X2Y2/constants.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-export const X2Y2_API_URL = 'https://x2y2-proxy.r2d2.to'
-export const X2Y2_PAGE_SIZE = 20
diff --git a/packages/web3-providers/src/X2Y2/index.ts b/packages/web3-providers/src/X2Y2/index.ts
deleted file mode 100644
index 8e1ff963ff4d..000000000000
--- a/packages/web3-providers/src/X2Y2/index.ts
+++ /dev/null
@@ -1,181 +0,0 @@
-import urlcat from 'urlcat'
-import { first, last } from 'lodash-es'
-import {
- OrderSide,
- type NonFungibleTokenOrder,
- type NonFungibleTokenEvent,
- type NonFungibleTokenContract,
- SourceType,
-} from '@masknet/web3-shared-base'
-import { createPageable, createIndicator, createNextIndicator, EMPTY_LIST } from '@masknet/shared-base'
-import { ChainId, createERC20Token, isZeroAddress, SchemaType } from '@masknet/web3-shared-evm'
-import { EVMChainResolver } from '../Web3/EVM/apis/ResolverAPI.js'
-import { X2Y2_API_URL, X2Y2_PAGE_SIZE } from './constants.js'
-import type { Contract, Event, Order } from './types.js'
-import { resolveActivityType } from '../helpers/resolveActivityType.js'
-import { fetchSquashedJSON } from '../helpers/fetchJSON.js'
-import type { BaseHubOptions, NonFungibleTokenAPI } from '../entry-types.js'
-
-async function fetchFromX2Y2(pathname: string) {
- const response = await fetchSquashedJSON<
- | {
- success: boolean
- next?: string
- data?: T | null
- }
- | undefined
- >(urlcat(X2Y2_API_URL, pathname))
- // The `undefined` can be given a default value when deconstructed, but `null` can't.
- return response?.success ? ([response.data ?? undefined, response.next] as const) : EMPTY_LIST
-}
-
-class X2Y2API implements NonFungibleTokenAPI.Provider {
- createPermalink(address: string, tokenId: string) {
- return urlcat('https://x2y2.io/eth/:contract/:tokenId', {
- contract: address,
- tokenId,
- })
- }
- createOrder(address: string, tokenId: string, order: Order): NonFungibleTokenOrder {
- return {
- id: order.item_hash,
- chainId: ChainId.Mainnet,
- assetPermalink: this.createPermalink(address, tokenId),
- quantity: '1',
- hash: order.item_hash,
- side: order.type === 'buy' ? OrderSide.Buy : OrderSide.Sell,
- maker:
- order.maker ?
- {
- address: order.maker,
- }
- : undefined,
- taker:
- order.taker ?
- {
- address: order.taker,
- }
- : undefined,
- createdAt: Number.parseInt(order.created_at, 10),
- expiredAt: Number.parseInt(order.end_at, 10),
- priceInToken: {
- amount: order.price,
- token:
- isZeroAddress(order.currency) ?
- EVMChainResolver.nativeCurrency(ChainId.Mainnet)
- : createERC20Token(ChainId.Mainnet, order.currency),
- },
- source: SourceType.X2Y2,
- }
- }
-
- createEvent(address: string, tokenId: string, event: Event): NonFungibleTokenEvent {
- return {
- id: event.id.toString(),
- chainId: ChainId.Mainnet,
- type: resolveActivityType(event.type),
- assetPermalink: this.createPermalink(address, tokenId),
- quantity: '1',
- hash: event.order.item_hash,
- from: {
- address: event.from_address,
- },
- to: {
- address: event.to_address,
- },
- timestamp: Number.parseInt(event.created_at, 10) * 1000,
- paymentToken:
- isZeroAddress(event.order.currency) ?
- EVMChainResolver.nativeCurrency(ChainId.Mainnet)
- : createERC20Token(ChainId.Mainnet, event.order.currency),
- source: SourceType.X2Y2,
- }
- }
-
- createContract(address: string, contract: Contract): NonFungibleTokenContract {
- return {
- chainId: ChainId.Mainnet,
- name: contract.name,
- symbol: contract.symbol,
- address,
- schema: contract.erc_type === 721 ? SchemaType.ERC721 : SchemaType.ERC1155,
- }
- }
-
- async getOrders(address: string, tokenId: string, side: OrderSide, options?: BaseHubOptions) {
- const [data = EMPTY_LIST, next] = await fetchFromX2Y2(
- urlcat('/v1/orders', {
- cursor: options?.indicator?.id,
- contract: address,
- token_id: tokenId,
- sort: 'created_at',
- direction: 'desc',
- limit: X2Y2_PAGE_SIZE,
- }),
- )
-
- const orders = data
- .filter(
- (x) => (x.type === 'sell' && side === OrderSide.Sell) || (x.type === 'buy' && side === OrderSide.Buy),
- )
- .map((x) => this.createOrder(address, tokenId, x))
-
- return createPageable(
- orders,
- createIndicator(options?.indicator),
- orders.length && next ? createNextIndicator(options?.indicator, next) : undefined,
- )
- }
- async getEvents(address: string, tokenId: string, options?: BaseHubOptions) {
- const cursors = options?.indicator?.id?.split('_')
- const listCursor = first(cursors)
- const saleCursor = last(cursors)
-
- const result = await Promise.all([
- listCursor || !options?.indicator?.index ?
- fetchFromX2Y2(
- urlcat('/v1/events', {
- cursor: listCursor ?? '',
- contract: address,
- token_id: tokenId,
- // list, sale, cancel_listing
- type: 'list',
- }),
- )
- : EMPTY_LIST,
- saleCursor || !options?.indicator?.index ?
- fetchFromX2Y2(
- urlcat('/v1/events', {
- cursor: saleCursor ?? '',
- contract: address,
- token_id: tokenId,
- // list, sale, cancel_listing
- type: 'sale',
- }),
- )
- : EMPTY_LIST,
- ])
-
- const [[listData = EMPTY_LIST, listNext], [saleData = EMPTY_LIST, saleNext]] = result
- const data = [...listData, ...saleData]
-
- const next = `${listNext}_${saleNext}`
- const events = data.map((x) => this.createEvent(address, tokenId, x))
-
- return createPageable(
- events,
- createIndicator(options?.indicator),
- events.length && next ? createNextIndicator(options?.indicator, next) : undefined,
- )
- }
- async getContract(address: string) {
- const [contract] = await fetchFromX2Y2(
- urlcat('/v1/contracts/:contract', {
- contract: address,
- }),
- )
- if (!contract) return
- return this.createContract(address, contract)
- }
-}
-export const X2Y2 = new X2Y2API()
diff --git a/packages/web3-providers/src/X2Y2/types.ts b/packages/web3-providers/src/X2Y2/types.ts
deleted file mode 100644
index f3d497948eed..000000000000
--- a/packages/web3-providers/src/X2Y2/types.ts
+++ /dev/null
@@ -1,53 +0,0 @@
-export interface Order {
- maker: string
- id: number
- currency: string
- taker?: string
- price: string
- created_at: string
- item_hash: string
- type: 'sell' | 'buy'
- token: Token
- is_collection_offer: boolean
- end_at: string
-}
-
-export interface Contract {
- name: string
- royalty_fee: number
- nsfw: boolean
- verified: boolean
- erc_type: number
- slug: string
- contract: string
- suspicious: boolean
- symbol: string
-}
-
-interface Token {
- token_id: number
- contract: string
-}
-
-export interface Event {
- from_address: string
- id: number
- order: {
- maker: string
- id: number
- currency: string
- taker?: string
- price: string
- created_at: string
- item_hash: string
- type: string
- token: Token
- is_collection_offer: false
- end_at: string
- }
- tx?: string
- created_at: string
- to_address: string
- type: 'offer_listing'
- token: Token
-}
diff --git a/packages/web3-shared/base/src/helpers/resolver.ts b/packages/web3-shared/base/src/helpers/resolver.ts
index 4755a631301d..046ab2b4232f 100644
--- a/packages/web3-shared/base/src/helpers/resolver.ts
+++ b/packages/web3-shared/base/src/helpers/resolver.ts
@@ -48,7 +48,6 @@ export const resolveSourceTypeName = createLookupTableResolver