+ ENSv2 ready resolution was tested using the "withdraw" flow. The app doesn't
+ support the use of ENS names at all as the recipient identifier.
+
+
+ While that's a key issue that this app is encouraged to improve, this best practice is
+ applicable specifically to apps that already have an existing ENS integration and making
+ sure existing integrations are ENSv2 compatible. Therefore, for this best practice we
+ apply a rating of not applicable.
+
+
+
+ ),
+ } as const satisfies AcceptanceTestBenchmark,
+} as const satisfies AcceptanceTestBenchmarks;
+
+export default ensv2ReadyResolution;
diff --git a/ensawards.org/data/apps/bitmart-exchange/icon.png b/ensawards.org/data/apps/bitmart-exchange/icon.png
new file mode 100644
index 00000000..cf5756b7
Binary files /dev/null and b/ensawards.org/data/apps/bitmart-exchange/icon.png differ
diff --git a/ensawards.org/data/apps/bitmart-exchange/icon.tsx b/ensawards.org/data/apps/bitmart-exchange/icon.tsx
new file mode 100644
index 00000000..d6eb0ea4
--- /dev/null
+++ b/ensawards.org/data/apps/bitmart-exchange/icon.tsx
@@ -0,0 +1,19 @@
+import React from "react";
+
+import { cn } from "@/utils/tailwindClassConcatenation";
+
+import icon from "./icon.png";
+
+const Icon = ({ className, ...props }: React.SVGProps) => (
+
+);
+
+export default Icon;
diff --git a/ensawards.org/data/apps/bitmart-exchange/index.ts b/ensawards.org/data/apps/bitmart-exchange/index.ts
new file mode 100644
index 00000000..f588576e
--- /dev/null
+++ b/ensawards.org/data/apps/bitmart-exchange/index.ts
@@ -0,0 +1,28 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying apps
+
+import BitMartProject from "data/projects/bitmart";
+
+import { defineApp } from "../registry.ts";
+import { type App, AppTypes } from "../types.ts";
+import BitMartIcon from "./icon.tsx";
+
+const BitMartExchange: App = {
+ id: "bitmart-exchange",
+ appSlug: "bitmart-exchange",
+ type: AppTypes.Exchange,
+ project: BitMartProject,
+ name: "BitMart",
+ description:
+ "Cryptocurrency exchange for spot and futures trading across a broad token catalog, with savings and staking options for earning on idle assets.",
+ socials: {
+ website: new URL("https://www.bitmart.com"),
+ twitter: new URL("https://x.com/BitMartExchange"),
+ },
+ icon: BitMartIcon,
+ // TODO: Add OG images
+};
+
+defineApp(BitMartExchange);
+
+export default BitMartExchange;
diff --git a/ensawards.org/data/apps/coinw-exchange/benchmarks/index.tsx b/ensawards.org/data/apps/coinw-exchange/benchmarks/index.tsx
new file mode 100644
index 00000000..301820c9
--- /dev/null
+++ b/ensawards.org/data/apps/coinw-exchange/benchmarks/index.tsx
@@ -0,0 +1,18 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying app benchmarks
+
+import CoinWExchange from "data/apps/coinw-exchange";
+import { defineAppBenchmarks } from "data/benchmarks/registry";
+import type { BestPracticeBenchmarks } from "data/ens-best-practices/types";
+
+import depositAddresses from "./resolution/deposit-addresses";
+import ensv2ReadyResolution from "./resolution/ensv2-ready-resolution";
+
+const benchmarks: BestPracticeBenchmarks = {
+ "ensv2-ready-resolution": ensv2ReadyResolution,
+ "deposit-addresses": depositAddresses,
+};
+
+defineAppBenchmarks(CoinWExchange, benchmarks);
+
+export default benchmarks;
diff --git a/ensawards.org/data/apps/coinw-exchange/benchmarks/resolution/deposit-addresses/at-1.png b/ensawards.org/data/apps/coinw-exchange/benchmarks/resolution/deposit-addresses/at-1.png
new file mode 100644
index 00000000..c7cca062
Binary files /dev/null and b/ensawards.org/data/apps/coinw-exchange/benchmarks/resolution/deposit-addresses/at-1.png differ
diff --git a/ensawards.org/data/apps/coinw-exchange/benchmarks/resolution/deposit-addresses/index.tsx b/ensawards.org/data/apps/coinw-exchange/benchmarks/resolution/deposit-addresses/index.tsx
new file mode 100644
index 00000000..14b36339
--- /dev/null
+++ b/ensawards.org/data/apps/coinw-exchange/benchmarks/resolution/deposit-addresses/index.tsx
@@ -0,0 +1,80 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying app benchmarks
+
+import { type AcceptanceTestBenchmarks, BenchmarkResults } from "data/benchmarks/types";
+import contributors from "data/contributors";
+import {
+ buildEnsNotSupportedNote,
+ buildNotApplicableForFailedTest,
+} from "data/ens-best-practices/resolution/deposit-addresses/notes";
+
+import { parseTimestamp } from "@ensnode/ensnode-sdk";
+
+import at1Proof from "./at-1.png";
+
+const depositAddresses = {
+ "at01-resolve-onchain-name": {
+ result: BenchmarkResults.Fail,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-01T08:01:28Z") },
+ ],
+ notes: buildEnsNotSupportedNote({
+ method: 'the "Add address" feature',
+ proof: {
+ image: at1Proof,
+ alt: "CoinW Exchange doesn't allow ENS names as the recipient identifier in the Add address feature",
+ },
+ }),
+ },
+ "at02-resolve-name-needing-normalization": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-01T08:01:28Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+ "at03-resolve-offchain-eth-subname": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-01T08:01:28Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+ "at04-resolve-offchain-dns-name": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-01T08:01:28Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+ "at05-resolve-name-on-other-evm-chain": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-01T08:01:28Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+ "at06-resolve-bitcoin-address": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-01T08:01:28Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+ "at07-resolve-solana-address": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-01T08:01:28Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+ "at08-handle-invalid-address-format": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-01T08:01:28Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+} as const satisfies AcceptanceTestBenchmarks;
+
+export default depositAddresses;
diff --git a/ensawards.org/data/apps/coinw-exchange/benchmarks/resolution/ensv2-ready-resolution/at-1.png b/ensawards.org/data/apps/coinw-exchange/benchmarks/resolution/ensv2-ready-resolution/at-1.png
new file mode 100644
index 00000000..6be53399
Binary files /dev/null and b/ensawards.org/data/apps/coinw-exchange/benchmarks/resolution/ensv2-ready-resolution/at-1.png differ
diff --git a/ensawards.org/data/apps/coinw-exchange/benchmarks/resolution/ensv2-ready-resolution/index.tsx b/ensawards.org/data/apps/coinw-exchange/benchmarks/resolution/ensv2-ready-resolution/index.tsx
new file mode 100644
index 00000000..c32cb2f3
--- /dev/null
+++ b/ensawards.org/data/apps/coinw-exchange/benchmarks/resolution/ensv2-ready-resolution/index.tsx
@@ -0,0 +1,44 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying app benchmarks
+
+import type { AcceptanceTestBenchmark } from "data/acceptance-tests/types";
+import type { AcceptanceTestBenchmarks } from "data/benchmarks/types";
+import { BenchmarkResults } from "data/benchmarks/types";
+import contributors from "data/contributors";
+import { acceptanceTestDetailsContainerStyles } from "data/ens-best-practices/styles";
+
+import { parseTimestamp } from "@ensnode/ensnode-sdk";
+
+import { cn } from "@/utils/tailwindClassConcatenation";
+
+import at1ProofImage from "./at-1.png";
+
+const ensv2ReadyResolution = {
+ "correctly-resolve-ensv2-test-name-address": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-01T07:58:39Z") },
+ ],
+ notes: (
+
+
+ ENSv2 ready resolution was tested using the "Add address" feature. The app
+ doesn't support the use of ENS names at all as the recipient identifier.
+
+
+ While that's a key issue that this app is encouraged to improve, this best practice is
+ applicable specifically to apps that already have an existing ENS integration and making
+ sure existing integrations are ENSv2 compatible. Therefore, for this best practice we
+ apply a rating of not applicable.
+
+
+
+ ),
+ } as const satisfies AcceptanceTestBenchmark,
+} as const satisfies AcceptanceTestBenchmarks;
+
+export default ensv2ReadyResolution;
diff --git a/ensawards.org/data/apps/coinw-exchange/icon.tsx b/ensawards.org/data/apps/coinw-exchange/icon.tsx
new file mode 100644
index 00000000..606b1c37
--- /dev/null
+++ b/ensawards.org/data/apps/coinw-exchange/icon.tsx
@@ -0,0 +1,24 @@
+import React from "react";
+
+import { cn } from "@/utils/tailwindClassConcatenation";
+
+const Icon = ({ className, ...props }: React.SVGProps) => (
+
+);
+
+export default Icon;
diff --git a/ensawards.org/data/apps/coinw-exchange/index.ts b/ensawards.org/data/apps/coinw-exchange/index.ts
new file mode 100644
index 00000000..98594de5
--- /dev/null
+++ b/ensawards.org/data/apps/coinw-exchange/index.ts
@@ -0,0 +1,28 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying apps
+
+import CoinWProject from "data/projects/coinw";
+
+import { defineApp } from "../registry.ts";
+import { type App, AppTypes } from "../types.ts";
+import CoinWIcon from "./icon.tsx";
+
+const CoinWExchange: App = {
+ id: "coinw-exchange",
+ appSlug: "coinw-exchange",
+ type: AppTypes.Exchange,
+ project: CoinWProject,
+ name: "CoinW",
+ description:
+ "Cryptocurrency exchange offering spot and perpetual futures trading, copy trading, and earn products for managing digital assets.",
+ socials: {
+ website: new URL("https://www.coinw.com"),
+ twitter: new URL("https://x.com/CoinWOfficial"),
+ },
+ icon: CoinWIcon,
+ // TODO: Add OG images
+};
+
+defineApp(CoinWExchange);
+
+export default CoinWExchange;
diff --git a/ensawards.org/data/apps/lbank-exchange/benchmarks/index.tsx b/ensawards.org/data/apps/lbank-exchange/benchmarks/index.tsx
new file mode 100644
index 00000000..0d4a792c
--- /dev/null
+++ b/ensawards.org/data/apps/lbank-exchange/benchmarks/index.tsx
@@ -0,0 +1,18 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying app benchmarks
+
+import LBankExchange from "data/apps/lbank-exchange";
+import { defineAppBenchmarks } from "data/benchmarks/registry";
+import type { BestPracticeBenchmarks } from "data/ens-best-practices/types";
+
+import depositAddresses from "./resolution/deposit-addresses";
+import ensv2ReadyResolution from "./resolution/ensv2-ready-resolution";
+
+const benchmarks: BestPracticeBenchmarks = {
+ "ensv2-ready-resolution": ensv2ReadyResolution,
+ "deposit-addresses": depositAddresses,
+};
+
+defineAppBenchmarks(LBankExchange, benchmarks);
+
+export default benchmarks;
diff --git a/ensawards.org/data/apps/lbank-exchange/benchmarks/resolution/deposit-addresses/at-1.png b/ensawards.org/data/apps/lbank-exchange/benchmarks/resolution/deposit-addresses/at-1.png
new file mode 100644
index 00000000..e79b3fc4
Binary files /dev/null and b/ensawards.org/data/apps/lbank-exchange/benchmarks/resolution/deposit-addresses/at-1.png differ
diff --git a/ensawards.org/data/apps/lbank-exchange/benchmarks/resolution/deposit-addresses/index.tsx b/ensawards.org/data/apps/lbank-exchange/benchmarks/resolution/deposit-addresses/index.tsx
new file mode 100644
index 00000000..cf4bbbc5
--- /dev/null
+++ b/ensawards.org/data/apps/lbank-exchange/benchmarks/resolution/deposit-addresses/index.tsx
@@ -0,0 +1,80 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying app benchmarks
+
+import { type AcceptanceTestBenchmarks, BenchmarkResults } from "data/benchmarks/types";
+import contributors from "data/contributors";
+import {
+ buildEnsNotSupportedNote,
+ buildNotApplicableForFailedTest,
+} from "data/ens-best-practices/resolution/deposit-addresses/notes";
+
+import { parseTimestamp } from "@ensnode/ensnode-sdk";
+
+import at1Proof from "./at-1.png";
+
+const depositAddresses = {
+ "at01-resolve-onchain-name": {
+ result: BenchmarkResults.Fail,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-30T13:15:22Z") },
+ ],
+ notes: buildEnsNotSupportedNote({
+ method: 'the "withdrawal" flow',
+ proof: {
+ image: at1Proof,
+ alt: "LBank Exchange doesn't allow ENS names as the recipient in the withdrawal flow",
+ },
+ }),
+ },
+ "at02-resolve-name-needing-normalization": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-30T13:15:22Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+ "at03-resolve-offchain-eth-subname": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-30T13:15:22Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+ "at04-resolve-offchain-dns-name": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-30T13:15:22Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+ "at05-resolve-name-on-other-evm-chain": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-30T13:15:22Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+ "at06-resolve-bitcoin-address": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-30T13:15:22Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+ "at07-resolve-solana-address": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-30T13:15:22Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+ "at08-handle-invalid-address-format": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-30T13:15:22Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+} as const satisfies AcceptanceTestBenchmarks;
+
+export default depositAddresses;
diff --git a/ensawards.org/data/apps/lbank-exchange/benchmarks/resolution/ensv2-ready-resolution/at-1.png b/ensawards.org/data/apps/lbank-exchange/benchmarks/resolution/ensv2-ready-resolution/at-1.png
new file mode 100644
index 00000000..3c426b0b
Binary files /dev/null and b/ensawards.org/data/apps/lbank-exchange/benchmarks/resolution/ensv2-ready-resolution/at-1.png differ
diff --git a/ensawards.org/data/apps/lbank-exchange/benchmarks/resolution/ensv2-ready-resolution/index.tsx b/ensawards.org/data/apps/lbank-exchange/benchmarks/resolution/ensv2-ready-resolution/index.tsx
new file mode 100644
index 00000000..7d87da70
--- /dev/null
+++ b/ensawards.org/data/apps/lbank-exchange/benchmarks/resolution/ensv2-ready-resolution/index.tsx
@@ -0,0 +1,44 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying app benchmarks
+
+import type { AcceptanceTestBenchmark } from "data/acceptance-tests/types";
+import type { AcceptanceTestBenchmarks } from "data/benchmarks/types";
+import { BenchmarkResults } from "data/benchmarks/types";
+import contributors from "data/contributors";
+import { acceptanceTestDetailsContainerStyles } from "data/ens-best-practices/styles";
+
+import { parseTimestamp } from "@ensnode/ensnode-sdk";
+
+import { cn } from "@/utils/tailwindClassConcatenation";
+
+import at1ProofImage from "./at-1.png";
+
+const ensv2ReadyResolution = {
+ "correctly-resolve-ensv2-test-name-address": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-30T13:14:10Z") },
+ ],
+ notes: (
+
+
+ ENSv2 ready resolution was tested using the "withdrawal" flow. The app doesn't
+ support the use of ENS names at all as the recipient identifier.
+
+
+ While that's a key issue that this app is encouraged to improve, this best practice is
+ applicable specifically to apps that already have an existing ENS integration and making
+ sure existing integrations are ENSv2 compatible. Therefore, for this best practice we
+ apply a rating of not applicable.
+
+ ENSv2 ready resolution was tested using the "withdrawal" flow. The app doesn't
+ support the use of ENS names at all as the recipient identifier.
+
+
+ While that's a key issue that this app is encouraged to improve, this best practice is
+ applicable specifically to apps that already have an existing ENS integration and making
+ sure existing integrations are ENSv2 compatible. Therefore, for this best practice we
+ apply a rating of not applicable.
+
+
+
+ ),
+ } as const satisfies AcceptanceTestBenchmark,
+} as const satisfies AcceptanceTestBenchmarks;
+
+export default ensv2ReadyResolution;
diff --git a/ensawards.org/data/apps/mexc-exchange/icon.tsx b/ensawards.org/data/apps/mexc-exchange/icon.tsx
new file mode 100644
index 00000000..efd82460
--- /dev/null
+++ b/ensawards.org/data/apps/mexc-exchange/icon.tsx
@@ -0,0 +1,22 @@
+import React from "react";
+
+const Icon = ({ className, ...props }: React.SVGProps) => (
+
+);
+
+export default Icon;
diff --git a/ensawards.org/data/apps/mexc-exchange/index.ts b/ensawards.org/data/apps/mexc-exchange/index.ts
new file mode 100644
index 00000000..cfb9fa52
--- /dev/null
+++ b/ensawards.org/data/apps/mexc-exchange/index.ts
@@ -0,0 +1,28 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying apps
+
+import MEXCProject from "data/projects/mexc";
+
+import { defineApp } from "../registry.ts";
+import { type App, AppTypes } from "../types.ts";
+import MEXCIcon from "./icon.tsx";
+
+const MEXCExchange: App = {
+ id: "mexc-exchange",
+ appSlug: "mexc-exchange",
+ type: AppTypes.Exchange,
+ project: MEXCProject,
+ name: "MEXC",
+ description:
+ "Cryptocurrency exchange offering spot, margin, and futures trading with an extensive catalog of newly listed tokens and copy trading.",
+ socials: {
+ website: new URL("https://www.mexc.com"),
+ twitter: new URL("https://x.com/MEXC"),
+ },
+ icon: MEXCIcon,
+ // TODO: Add OG images
+};
+
+defineApp(MEXCExchange);
+
+export default MEXCExchange;
diff --git a/ensawards.org/data/apps/toobit-exchange/benchmarks/index.tsx b/ensawards.org/data/apps/toobit-exchange/benchmarks/index.tsx
new file mode 100644
index 00000000..b3bc52a8
--- /dev/null
+++ b/ensawards.org/data/apps/toobit-exchange/benchmarks/index.tsx
@@ -0,0 +1,18 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying app benchmarks
+
+import ToobitExchange from "data/apps/toobit-exchange";
+import { defineAppBenchmarks } from "data/benchmarks/registry";
+import type { BestPracticeBenchmarks } from "data/ens-best-practices/types";
+
+import depositAddresses from "./resolution/deposit-addresses";
+import ensv2ReadyResolution from "./resolution/ensv2-ready-resolution";
+
+const benchmarks: BestPracticeBenchmarks = {
+ "ensv2-ready-resolution": ensv2ReadyResolution,
+ "deposit-addresses": depositAddresses,
+};
+
+defineAppBenchmarks(ToobitExchange, benchmarks);
+
+export default benchmarks;
diff --git a/ensawards.org/data/apps/toobit-exchange/benchmarks/resolution/deposit-addresses/at-1.png b/ensawards.org/data/apps/toobit-exchange/benchmarks/resolution/deposit-addresses/at-1.png
new file mode 100644
index 00000000..81467f49
Binary files /dev/null and b/ensawards.org/data/apps/toobit-exchange/benchmarks/resolution/deposit-addresses/at-1.png differ
diff --git a/ensawards.org/data/apps/toobit-exchange/benchmarks/resolution/deposit-addresses/index.tsx b/ensawards.org/data/apps/toobit-exchange/benchmarks/resolution/deposit-addresses/index.tsx
new file mode 100644
index 00000000..0e25ac03
--- /dev/null
+++ b/ensawards.org/data/apps/toobit-exchange/benchmarks/resolution/deposit-addresses/index.tsx
@@ -0,0 +1,80 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying app benchmarks
+
+import { type AcceptanceTestBenchmarks, BenchmarkResults } from "data/benchmarks/types";
+import contributors from "data/contributors";
+import {
+ buildEnsNotSupportedNote,
+ buildNotApplicableForFailedTest,
+} from "data/ens-best-practices/resolution/deposit-addresses/notes";
+
+import { parseTimestamp } from "@ensnode/ensnode-sdk";
+
+import at1Proof from "./at-1.png";
+
+const depositAddresses = {
+ "at01-resolve-onchain-name": {
+ result: BenchmarkResults.Fail,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-30T11:31:15Z") },
+ ],
+ notes: buildEnsNotSupportedNote({
+ method: 'the "withdraw" flow',
+ proof: {
+ image: at1Proof,
+ alt: "Toobit Exchange doesn't allow ENS names as the recipient in the withdraw flow",
+ },
+ }),
+ },
+ "at02-resolve-name-needing-normalization": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-30T11:31:15Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+ "at03-resolve-offchain-eth-subname": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-30T11:31:15Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+ "at04-resolve-offchain-dns-name": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-30T11:31:15Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+ "at05-resolve-name-on-other-evm-chain": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-30T11:31:15Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+ "at06-resolve-bitcoin-address": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-30T11:31:15Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+ "at07-resolve-solana-address": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-30T11:31:15Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+ "at08-handle-invalid-address-format": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-30T11:31:15Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+} as const satisfies AcceptanceTestBenchmarks;
+
+export default depositAddresses;
diff --git a/ensawards.org/data/apps/toobit-exchange/benchmarks/resolution/ensv2-ready-resolution/at-1.png b/ensawards.org/data/apps/toobit-exchange/benchmarks/resolution/ensv2-ready-resolution/at-1.png
new file mode 100644
index 00000000..a50f5b84
Binary files /dev/null and b/ensawards.org/data/apps/toobit-exchange/benchmarks/resolution/ensv2-ready-resolution/at-1.png differ
diff --git a/ensawards.org/data/apps/toobit-exchange/benchmarks/resolution/ensv2-ready-resolution/index.tsx b/ensawards.org/data/apps/toobit-exchange/benchmarks/resolution/ensv2-ready-resolution/index.tsx
new file mode 100644
index 00000000..f00e6e90
--- /dev/null
+++ b/ensawards.org/data/apps/toobit-exchange/benchmarks/resolution/ensv2-ready-resolution/index.tsx
@@ -0,0 +1,44 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying app benchmarks
+
+import type { AcceptanceTestBenchmark } from "data/acceptance-tests/types";
+import type { AcceptanceTestBenchmarks } from "data/benchmarks/types";
+import { BenchmarkResults } from "data/benchmarks/types";
+import contributors from "data/contributors";
+import { acceptanceTestDetailsContainerStyles } from "data/ens-best-practices/styles";
+
+import { parseTimestamp } from "@ensnode/ensnode-sdk";
+
+import { cn } from "@/utils/tailwindClassConcatenation";
+
+import at1ProofImage from "./at-1.png";
+
+const ensv2ReadyResolution = {
+ "correctly-resolve-ensv2-test-name-address": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-30T11:27:39Z") },
+ ],
+ notes: (
+
+
+ ENSv2 ready resolution was tested using the "withdraw" flow. The app doesn't
+ support the use of ENS names at all as the recipient identifier.
+
+
+ While that's a key issue that this app is encouraged to improve, this best practice is
+ applicable specifically to apps that already have an existing ENS integration and making
+ sure existing integrations are ENSv2 compatible. Therefore, for this best practice we
+ apply a rating of not applicable.
+
+
+
+ ),
+ } as const satisfies AcceptanceTestBenchmark,
+} as const satisfies AcceptanceTestBenchmarks;
+
+export default ensv2ReadyResolution;
diff --git a/ensawards.org/data/apps/toobit-exchange/icon.png b/ensawards.org/data/apps/toobit-exchange/icon.png
new file mode 100644
index 00000000..3c6f4d5f
Binary files /dev/null and b/ensawards.org/data/apps/toobit-exchange/icon.png differ
diff --git a/ensawards.org/data/apps/toobit-exchange/icon.tsx b/ensawards.org/data/apps/toobit-exchange/icon.tsx
new file mode 100644
index 00000000..1e233442
--- /dev/null
+++ b/ensawards.org/data/apps/toobit-exchange/icon.tsx
@@ -0,0 +1,17 @@
+import React from "react";
+
+import icon from "./icon.png";
+
+const Icon = ({ className, ...props }: React.SVGProps) => (
+
+);
+
+export default Icon;
diff --git a/ensawards.org/data/apps/toobit-exchange/index.ts b/ensawards.org/data/apps/toobit-exchange/index.ts
new file mode 100644
index 00000000..2f39a95e
--- /dev/null
+++ b/ensawards.org/data/apps/toobit-exchange/index.ts
@@ -0,0 +1,28 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying apps
+
+import ToobitProject from "data/projects/toobit";
+
+import { defineApp } from "../registry.ts";
+import { type App, AppTypes } from "../types.ts";
+import ToobitIcon from "./icon.tsx";
+
+const ToobitExchange: App = {
+ id: "toobit-exchange",
+ appSlug: "toobit-exchange",
+ type: AppTypes.Exchange,
+ project: ToobitProject,
+ name: "Toobit",
+ description:
+ "Cryptocurrency exchange offering spot and perpetual futures trading, copy trading, and earn products for managing digital assets.",
+ socials: {
+ website: new URL("https://www.toobit.com"),
+ twitter: new URL("https://x.com/Toobit_official"),
+ },
+ icon: ToobitIcon,
+ // TODO: Add OG images
+};
+
+defineApp(ToobitExchange);
+
+export default ToobitExchange;
diff --git a/ensawards.org/data/apps/weex-exchange/benchmarks/index.tsx b/ensawards.org/data/apps/weex-exchange/benchmarks/index.tsx
new file mode 100644
index 00000000..d5896f22
--- /dev/null
+++ b/ensawards.org/data/apps/weex-exchange/benchmarks/index.tsx
@@ -0,0 +1,18 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying app benchmarks
+
+import WEEXExchange from "data/apps/weex-exchange";
+import { defineAppBenchmarks } from "data/benchmarks/registry";
+import type { BestPracticeBenchmarks } from "data/ens-best-practices/types";
+
+import depositAddresses from "./resolution/deposit-addresses";
+import ensv2ReadyResolution from "./resolution/ensv2-ready-resolution";
+
+const benchmarks: BestPracticeBenchmarks = {
+ "ensv2-ready-resolution": ensv2ReadyResolution,
+ "deposit-addresses": depositAddresses,
+};
+
+defineAppBenchmarks(WEEXExchange, benchmarks);
+
+export default benchmarks;
diff --git a/ensawards.org/data/apps/weex-exchange/benchmarks/resolution/deposit-addresses/at-1.png b/ensawards.org/data/apps/weex-exchange/benchmarks/resolution/deposit-addresses/at-1.png
new file mode 100644
index 00000000..a1984057
Binary files /dev/null and b/ensawards.org/data/apps/weex-exchange/benchmarks/resolution/deposit-addresses/at-1.png differ
diff --git a/ensawards.org/data/apps/weex-exchange/benchmarks/resolution/deposit-addresses/index.tsx b/ensawards.org/data/apps/weex-exchange/benchmarks/resolution/deposit-addresses/index.tsx
new file mode 100644
index 00000000..b14c4654
--- /dev/null
+++ b/ensawards.org/data/apps/weex-exchange/benchmarks/resolution/deposit-addresses/index.tsx
@@ -0,0 +1,80 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying app benchmarks
+
+import { type AcceptanceTestBenchmarks, BenchmarkResults } from "data/benchmarks/types";
+import contributors from "data/contributors";
+import {
+ buildEnsNotSupportedNote,
+ buildNotApplicableForFailedTest,
+} from "data/ens-best-practices/resolution/deposit-addresses/notes";
+
+import { parseTimestamp } from "@ensnode/ensnode-sdk";
+
+import at1Proof from "./at-1.png";
+
+const depositAddresses = {
+ "at01-resolve-onchain-name": {
+ result: BenchmarkResults.Fail,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-01T09:35:08Z") },
+ ],
+ notes: buildEnsNotSupportedNote({
+ method: 'the "withdrawal" flow',
+ proof: {
+ image: at1Proof,
+ alt: "WEEX Exchange doesn't allow ENS names as the recipient in the withdrawal flow",
+ },
+ }),
+ },
+ "at02-resolve-name-needing-normalization": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-01T09:35:08Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+ "at03-resolve-offchain-eth-subname": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-01T09:35:08Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+ "at04-resolve-offchain-dns-name": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-01T09:35:08Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+ "at05-resolve-name-on-other-evm-chain": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-01T09:35:08Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+ "at06-resolve-bitcoin-address": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-01T09:35:08Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+ "at07-resolve-solana-address": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-01T09:35:08Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+ "at08-handle-invalid-address-format": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-01T09:35:08Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+} as const satisfies AcceptanceTestBenchmarks;
+
+export default depositAddresses;
diff --git a/ensawards.org/data/apps/weex-exchange/benchmarks/resolution/ensv2-ready-resolution/at-1.png b/ensawards.org/data/apps/weex-exchange/benchmarks/resolution/ensv2-ready-resolution/at-1.png
new file mode 100644
index 00000000..83418ce8
Binary files /dev/null and b/ensawards.org/data/apps/weex-exchange/benchmarks/resolution/ensv2-ready-resolution/at-1.png differ
diff --git a/ensawards.org/data/apps/weex-exchange/benchmarks/resolution/ensv2-ready-resolution/index.tsx b/ensawards.org/data/apps/weex-exchange/benchmarks/resolution/ensv2-ready-resolution/index.tsx
new file mode 100644
index 00000000..e6f4e2d8
--- /dev/null
+++ b/ensawards.org/data/apps/weex-exchange/benchmarks/resolution/ensv2-ready-resolution/index.tsx
@@ -0,0 +1,44 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying app benchmarks
+
+import type { AcceptanceTestBenchmark } from "data/acceptance-tests/types";
+import type { AcceptanceTestBenchmarks } from "data/benchmarks/types";
+import { BenchmarkResults } from "data/benchmarks/types";
+import contributors from "data/contributors";
+import { acceptanceTestDetailsContainerStyles } from "data/ens-best-practices/styles";
+
+import { parseTimestamp } from "@ensnode/ensnode-sdk";
+
+import { cn } from "@/utils/tailwindClassConcatenation";
+
+import at1ProofImage from "./at-1.png";
+
+const ensv2ReadyResolution = {
+ "correctly-resolve-ensv2-test-name-address": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-01T09:33:01Z") },
+ ],
+ notes: (
+
+
+ ENSv2 ready resolution was tested using the "withdrawal" flow. The app doesn't
+ support the use of ENS names at all as the recipient identifier.
+
+
+ While that's a key issue that this app is encouraged to improve, this best practice is
+ applicable specifically to apps that already have an existing ENS integration and making
+ sure existing integrations are ENSv2 compatible. Therefore, for this best practice we
+ apply a rating of not applicable.
+
+
+
+ ),
+ } as const satisfies AcceptanceTestBenchmark,
+} as const satisfies AcceptanceTestBenchmarks;
+
+export default ensv2ReadyResolution;
diff --git a/ensawards.org/data/apps/weex-exchange/icon.tsx b/ensawards.org/data/apps/weex-exchange/icon.tsx
new file mode 100644
index 00000000..2ce39b9c
--- /dev/null
+++ b/ensawards.org/data/apps/weex-exchange/icon.tsx
@@ -0,0 +1,22 @@
+import React from "react";
+
+const Icon = ({ className, ...props }: React.SVGProps) => (
+
+);
+
+export default Icon;
diff --git a/ensawards.org/data/apps/weex-exchange/index.ts b/ensawards.org/data/apps/weex-exchange/index.ts
new file mode 100644
index 00000000..c4442712
--- /dev/null
+++ b/ensawards.org/data/apps/weex-exchange/index.ts
@@ -0,0 +1,28 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying apps
+
+import WEEXProject from "data/projects/weex";
+
+import { defineApp } from "../registry.ts";
+import { type App, AppTypes } from "../types.ts";
+import WEEXIcon from "./icon.tsx";
+
+const WEEXExchange: App = {
+ id: "weex-exchange",
+ appSlug: "weex-exchange",
+ type: AppTypes.Exchange,
+ project: WEEXProject,
+ name: "WEEX",
+ description:
+ "Cryptocurrency exchange centered on perpetual futures and spot trading, with copy trading and earn products for growing digital asset holdings.",
+ socials: {
+ website: new URL("https://www.weex.com"),
+ twitter: new URL("https://x.com/WEEX_Official"),
+ },
+ icon: WEEXIcon,
+ // TODO: Add OG images
+};
+
+defineApp(WEEXExchange);
+
+export default WEEXExchange;
diff --git a/ensawards.org/data/projects/bitmart/icon.png b/ensawards.org/data/projects/bitmart/icon.png
new file mode 100644
index 00000000..cf5756b7
Binary files /dev/null and b/ensawards.org/data/projects/bitmart/icon.png differ
diff --git a/ensawards.org/data/projects/bitmart/icon.tsx b/ensawards.org/data/projects/bitmart/icon.tsx
new file mode 100644
index 00000000..d6eb0ea4
--- /dev/null
+++ b/ensawards.org/data/projects/bitmart/icon.tsx
@@ -0,0 +1,19 @@
+import React from "react";
+
+import { cn } from "@/utils/tailwindClassConcatenation";
+
+import icon from "./icon.png";
+
+const Icon = ({ className, ...props }: React.SVGProps) => (
+
+);
+
+export default Icon;
diff --git a/ensawards.org/data/projects/bitmart/index.ts b/ensawards.org/data/projects/bitmart/index.ts
new file mode 100644
index 00000000..74eb666c
--- /dev/null
+++ b/ensawards.org/data/projects/bitmart/index.ts
@@ -0,0 +1,23 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying projects
+
+import { defineProject } from "../registry.ts";
+import type { Project } from "../types.ts";
+import { ProjectIds } from "../types.ts";
+import BitMartIcon from "./icon.tsx";
+
+const BitMartProject: Project = {
+ id: ProjectIds.BitMart,
+ name: "BitMart",
+ description:
+ "Global cryptocurrency exchange offering spot and futures trading across a wide range of assets, with staking, savings, and other earn products.",
+ icon: BitMartIcon,
+ socials: {
+ website: new URL("https://www.bitmart.com"),
+ twitter: new URL("https://x.com/BitMartExchange"),
+ },
+};
+
+defineProject(BitMartProject);
+
+export default BitMartProject;
diff --git a/ensawards.org/data/projects/coinw/icon.tsx b/ensawards.org/data/projects/coinw/icon.tsx
new file mode 100644
index 00000000..606b1c37
--- /dev/null
+++ b/ensawards.org/data/projects/coinw/icon.tsx
@@ -0,0 +1,24 @@
+import React from "react";
+
+import { cn } from "@/utils/tailwindClassConcatenation";
+
+const Icon = ({ className, ...props }: React.SVGProps) => (
+
+);
+
+export default Icon;
diff --git a/ensawards.org/data/projects/coinw/index.ts b/ensawards.org/data/projects/coinw/index.ts
new file mode 100644
index 00000000..3d2b73a9
--- /dev/null
+++ b/ensawards.org/data/projects/coinw/index.ts
@@ -0,0 +1,23 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying projects
+
+import { defineProject } from "../registry.ts";
+import type { Project } from "../types.ts";
+import { ProjectIds } from "../types.ts";
+import CoinWIcon from "./icon.tsx";
+
+const CoinWProject: Project = {
+ id: ProjectIds.CoinW,
+ name: "CoinW",
+ description:
+ "Global cryptocurrency exchange offering spot and futures trading, copy trading, and earn products across a wide selection of digital assets.",
+ icon: CoinWIcon,
+ socials: {
+ website: new URL("https://www.coinw.com"),
+ twitter: new URL("https://x.com/CoinWOfficial"),
+ },
+};
+
+defineProject(CoinWProject);
+
+export default CoinWProject;
diff --git a/ensawards.org/data/projects/lbank/icon.tsx b/ensawards.org/data/projects/lbank/icon.tsx
new file mode 100644
index 00000000..8a30e93d
--- /dev/null
+++ b/ensawards.org/data/projects/lbank/icon.tsx
@@ -0,0 +1,34 @@
+import React from "react";
+
+const Icon = ({ className, ...props }: React.SVGProps) => {
+ const reactId = React.useId();
+ const id = (name: string) => `${reactId}-${name}`;
+ const url = (name: string) => `url(#${id(name)})`;
+
+ return (
+
+ );
+};
+
+export default Icon;
diff --git a/ensawards.org/data/projects/lbank/index.ts b/ensawards.org/data/projects/lbank/index.ts
new file mode 100644
index 00000000..45b49456
--- /dev/null
+++ b/ensawards.org/data/projects/lbank/index.ts
@@ -0,0 +1,23 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying projects
+
+import { defineProject } from "../registry.ts";
+import type { Project } from "../types.ts";
+import { ProjectIds } from "../types.ts";
+import LBankIcon from "./icon.tsx";
+
+const LBankProject: Project = {
+ id: ProjectIds.LBank,
+ name: "LBank",
+ description:
+ "Global cryptocurrency exchange offering spot and futures trading, early access to emerging tokens, and a range of earn and staking products.",
+ icon: LBankIcon,
+ socials: {
+ website: new URL("https://www.lbank.com"),
+ twitter: new URL("https://x.com/LBank_Exchange"),
+ },
+};
+
+defineProject(LBankProject);
+
+export default LBankProject;
diff --git a/ensawards.org/data/projects/mexc/icon.tsx b/ensawards.org/data/projects/mexc/icon.tsx
new file mode 100644
index 00000000..efd82460
--- /dev/null
+++ b/ensawards.org/data/projects/mexc/icon.tsx
@@ -0,0 +1,22 @@
+import React from "react";
+
+const Icon = ({ className, ...props }: React.SVGProps) => (
+
+);
+
+export default Icon;
diff --git a/ensawards.org/data/projects/mexc/index.ts b/ensawards.org/data/projects/mexc/index.ts
new file mode 100644
index 00000000..d3fc44ab
--- /dev/null
+++ b/ensawards.org/data/projects/mexc/index.ts
@@ -0,0 +1,23 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying projects
+
+import { defineProject } from "../registry.ts";
+import type { Project } from "../types.ts";
+import { ProjectIds } from "../types.ts";
+import MEXCIcon from "./icon.tsx";
+
+const MEXCProject: Project = {
+ id: ProjectIds.MEXC,
+ name: "MEXC",
+ description:
+ "Global cryptocurrency exchange known for fast listings of new tokens, offering spot, margin, and futures trading alongside copy trading and earn products.",
+ icon: MEXCIcon,
+ socials: {
+ website: new URL("https://www.mexc.com"),
+ twitter: new URL("https://x.com/MEXC"),
+ },
+};
+
+defineProject(MEXCProject);
+
+export default MEXCProject;
diff --git a/ensawards.org/data/projects/toobit/icon.png b/ensawards.org/data/projects/toobit/icon.png
new file mode 100644
index 00000000..3c6f4d5f
Binary files /dev/null and b/ensawards.org/data/projects/toobit/icon.png differ
diff --git a/ensawards.org/data/projects/toobit/icon.tsx b/ensawards.org/data/projects/toobit/icon.tsx
new file mode 100644
index 00000000..1e233442
--- /dev/null
+++ b/ensawards.org/data/projects/toobit/icon.tsx
@@ -0,0 +1,17 @@
+import React from "react";
+
+import icon from "./icon.png";
+
+const Icon = ({ className, ...props }: React.SVGProps) => (
+
+);
+
+export default Icon;
diff --git a/ensawards.org/data/projects/toobit/index.ts b/ensawards.org/data/projects/toobit/index.ts
new file mode 100644
index 00000000..69660bf3
--- /dev/null
+++ b/ensawards.org/data/projects/toobit/index.ts
@@ -0,0 +1,23 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying projects
+
+import { defineProject } from "../registry.ts";
+import type { Project } from "../types.ts";
+import { ProjectIds } from "../types.ts";
+import ToobitIcon from "./icon.tsx";
+
+const ToobitProject: Project = {
+ id: ProjectIds.Toobit,
+ name: "Toobit",
+ description:
+ "Cryptocurrency exchange for spot and futures trading, buying, and managing digital assets, with copy trading and a range of earn products.",
+ icon: ToobitIcon,
+ socials: {
+ website: new URL("https://www.toobit.com"),
+ twitter: new URL("https://x.com/Toobit_official"),
+ },
+};
+
+defineProject(ToobitProject);
+
+export default ToobitProject;
diff --git a/ensawards.org/data/projects/types.ts b/ensawards.org/data/projects/types.ts
index da95d946..0fceb8ac 100644
--- a/ensawards.org/data/projects/types.ts
+++ b/ensawards.org/data/projects/types.ts
@@ -48,6 +48,12 @@ export const ProjectIds = {
BingX: "project-bingx",
Gate: "project-gate",
Bitfinex: "project-bitfinex",
+ Toobit: "project-toobit",
+ MEXC: "project-mexc",
+ LBank: "project-lbank",
+ BitMart: "project-bitmart",
+ CoinW: "project-coinw",
+ WEEX: "project-weex",
} as const;
/**
diff --git a/ensawards.org/data/projects/weex/icon.tsx b/ensawards.org/data/projects/weex/icon.tsx
new file mode 100644
index 00000000..2ce39b9c
--- /dev/null
+++ b/ensawards.org/data/projects/weex/icon.tsx
@@ -0,0 +1,22 @@
+import React from "react";
+
+const Icon = ({ className, ...props }: React.SVGProps) => (
+
+);
+
+export default Icon;
diff --git a/ensawards.org/data/projects/weex/index.ts b/ensawards.org/data/projects/weex/index.ts
new file mode 100644
index 00000000..a17ab27d
--- /dev/null
+++ b/ensawards.org/data/projects/weex/index.ts
@@ -0,0 +1,23 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying projects
+
+import { defineProject } from "../registry.ts";
+import type { Project } from "../types.ts";
+import { ProjectIds } from "../types.ts";
+import WEEXIcon from "./icon.tsx";
+
+const WEEXProject: Project = {
+ id: ProjectIds.WEEX,
+ name: "WEEX",
+ description:
+ "Global cryptocurrency exchange focused on futures and spot trading, with copy trading and a range of earn products for digital assets.",
+ icon: WEEXIcon,
+ socials: {
+ website: new URL("https://www.weex.com"),
+ twitter: new URL("https://x.com/WEEX_Official"),
+ },
+};
+
+defineProject(WEEXProject);
+
+export default WEEXProject;