+ 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/bingx-exchange/icon.jpeg b/ensawards.org/data/apps/bingx-exchange/icon.jpeg
new file mode 100644
index 00000000..77898021
Binary files /dev/null and b/ensawards.org/data/apps/bingx-exchange/icon.jpeg differ
diff --git a/ensawards.org/data/apps/bingx-exchange/icon.tsx b/ensawards.org/data/apps/bingx-exchange/icon.tsx
new file mode 100644
index 00000000..e607a396
--- /dev/null
+++ b/ensawards.org/data/apps/bingx-exchange/icon.tsx
@@ -0,0 +1,19 @@
+import React from "react";
+
+import { cn } from "@/utils/tailwindClassConcatenation";
+
+import icon from "./icon.jpeg";
+
+const Icon = ({ className, ...props }: React.SVGProps) => (
+
+);
+
+export default Icon;
diff --git a/ensawards.org/data/apps/bingx-exchange/index.ts b/ensawards.org/data/apps/bingx-exchange/index.ts
new file mode 100644
index 00000000..4e81a07d
--- /dev/null
+++ b/ensawards.org/data/apps/bingx-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 BingXProject from "data/projects/bingx";
+
+import { defineApp } from "../registry.ts";
+import { type App, AppTypes } from "../types.ts";
+import BingXIcon from "./icon.tsx";
+
+const BingXExchange: App = {
+ id: "bingx-exchange",
+ appSlug: "bingx-exchange",
+ type: AppTypes.Exchange,
+ project: BingXProject,
+ name: "BingX",
+ description:
+ "Cryptocurrency exchange for spot, futures, and copy trading, buying, selling, and managing digital assets.",
+ socials: {
+ website: new URL("https://bingx.com"),
+ twitter: new URL("https://x.com/BingXOfficial"),
+ },
+ icon: BingXIcon,
+ // TODO: Add OG images
+};
+
+defineApp(BingXExchange);
+
+export default BingXExchange;
diff --git a/ensawards.org/data/apps/bitfinex-exchange/benchmarks/index.tsx b/ensawards.org/data/apps/bitfinex-exchange/benchmarks/index.tsx
new file mode 100644
index 00000000..f83392f6
--- /dev/null
+++ b/ensawards.org/data/apps/bitfinex-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 BitfinexExchange from "data/apps/bitfinex-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(BitfinexExchange, benchmarks);
+
+export default benchmarks;
diff --git a/ensawards.org/data/apps/bitfinex-exchange/benchmarks/resolution/deposit-addresses/at-1.png b/ensawards.org/data/apps/bitfinex-exchange/benchmarks/resolution/deposit-addresses/at-1.png
new file mode 100644
index 00000000..573be87c
Binary files /dev/null and b/ensawards.org/data/apps/bitfinex-exchange/benchmarks/resolution/deposit-addresses/at-1.png differ
diff --git a/ensawards.org/data/apps/bitfinex-exchange/benchmarks/resolution/deposit-addresses/at-2.png b/ensawards.org/data/apps/bitfinex-exchange/benchmarks/resolution/deposit-addresses/at-2.png
new file mode 100644
index 00000000..ad473c62
Binary files /dev/null and b/ensawards.org/data/apps/bitfinex-exchange/benchmarks/resolution/deposit-addresses/at-2.png differ
diff --git a/ensawards.org/data/apps/bitfinex-exchange/benchmarks/resolution/deposit-addresses/at-3.png b/ensawards.org/data/apps/bitfinex-exchange/benchmarks/resolution/deposit-addresses/at-3.png
new file mode 100644
index 00000000..bee7ecca
Binary files /dev/null and b/ensawards.org/data/apps/bitfinex-exchange/benchmarks/resolution/deposit-addresses/at-3.png differ
diff --git a/ensawards.org/data/apps/bitfinex-exchange/benchmarks/resolution/deposit-addresses/at-4.png b/ensawards.org/data/apps/bitfinex-exchange/benchmarks/resolution/deposit-addresses/at-4.png
new file mode 100644
index 00000000..f782b8e5
Binary files /dev/null and b/ensawards.org/data/apps/bitfinex-exchange/benchmarks/resolution/deposit-addresses/at-4.png differ
diff --git a/ensawards.org/data/apps/bitfinex-exchange/benchmarks/resolution/deposit-addresses/at-5.gif b/ensawards.org/data/apps/bitfinex-exchange/benchmarks/resolution/deposit-addresses/at-5.gif
new file mode 100644
index 00000000..8eed3f38
Binary files /dev/null and b/ensawards.org/data/apps/bitfinex-exchange/benchmarks/resolution/deposit-addresses/at-5.gif differ
diff --git a/ensawards.org/data/apps/bitfinex-exchange/benchmarks/resolution/deposit-addresses/at-6.png b/ensawards.org/data/apps/bitfinex-exchange/benchmarks/resolution/deposit-addresses/at-6.png
new file mode 100644
index 00000000..d948cc11
Binary files /dev/null and b/ensawards.org/data/apps/bitfinex-exchange/benchmarks/resolution/deposit-addresses/at-6.png differ
diff --git a/ensawards.org/data/apps/bitfinex-exchange/benchmarks/resolution/deposit-addresses/at-7.png b/ensawards.org/data/apps/bitfinex-exchange/benchmarks/resolution/deposit-addresses/at-7.png
new file mode 100644
index 00000000..e149b511
Binary files /dev/null and b/ensawards.org/data/apps/bitfinex-exchange/benchmarks/resolution/deposit-addresses/at-7.png differ
diff --git a/ensawards.org/data/apps/bitfinex-exchange/benchmarks/resolution/deposit-addresses/index.tsx b/ensawards.org/data/apps/bitfinex-exchange/benchmarks/resolution/deposit-addresses/index.tsx
new file mode 100644
index 00000000..dcacdf92
--- /dev/null
+++ b/ensawards.org/data/apps/bitfinex-exchange/benchmarks/resolution/deposit-addresses/index.tsx
@@ -0,0 +1,135 @@
+// 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 {
+ buildFailNoteForAT2,
+ buildFailNoteForAT3,
+ buildFailNoteForAT4,
+ buildFailNoteForAT6,
+ buildFailNoteForAT7,
+ buildNotApplicableForEvmChain,
+ buildNotApplicableForFailedTest,
+ buildPassNoteForAT1,
+} from "data/ens-best-practices/resolution/deposit-addresses/notes";
+
+import { parseTimestamp } from "@ensnode/ensnode-sdk";
+
+import at1Proof from "./at-1.png";
+import at2Proof from "./at-2.png";
+import at3Proof from "./at-3.png";
+import at4Proof from "./at-4.png";
+import at5Proof from "./at-5.gif";
+import at6Proof from "./at-6.png";
+import at7Proof from "./at-7.png";
+
+const method = 'the "Address book" feature';
+
+const depositAddresses = {
+ "at01-resolve-onchain-name": {
+ result: BenchmarkResults.Pass,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-30T09:26:44Z") },
+ ],
+ notes: buildPassNoteForAT1({
+ method,
+ proof: {
+ image: at1Proof,
+ alt: "Bitfinex Exchange correctly resolves the address for vitalik.eth",
+ },
+ }),
+ },
+ "at02-resolve-name-needing-normalization": {
+ result: BenchmarkResults.Fail,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-30T09:26:44Z") },
+ ],
+ notes: buildFailNoteForAT2({
+ method,
+ proof: {
+ image: at2Proof,
+ alt: "Bitfinex Exchange fails to resolve the address for Ξthereum.eth",
+ },
+ extra: 'The app showed the message "Invalid address".',
+ }),
+ },
+ "at03-resolve-offchain-eth-subname": {
+ result: BenchmarkResults.Fail,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-30T09:26:44Z") },
+ ],
+ notes: buildFailNoteForAT3({
+ method,
+ proof: {
+ image: at3Proof,
+ alt: "Bitfinex Exchange fails to resolve the address for jesse.base.eth",
+ },
+ extra: 'The app showed the message "Invalid address".',
+ }),
+ },
+ "at04-resolve-offchain-dns-name": {
+ result: BenchmarkResults.Fail,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-30T09:26:44Z") },
+ ],
+ notes: buildFailNoteForAT4({
+ method,
+ proof: {
+ image: at4Proof,
+ alt: "Bitfinex Exchange fails to resolve the address for dperri.com",
+ },
+ extra: 'The app showed the message "Invalid address".',
+ }),
+ },
+ "at05-resolve-name-on-other-evm-chain": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-30T09:26:44Z") },
+ ],
+ notes: buildNotApplicableForEvmChain({
+ chain: "Base",
+ proof: {
+ image: at5Proof,
+ alt: "Bitfinex Exchange has no context of the Base chain in the Address book feature",
+ },
+ }),
+ },
+ "at06-resolve-bitcoin-address": {
+ result: BenchmarkResults.Fail,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-30T09:26:44Z") },
+ ],
+ notes: buildFailNoteForAT6({
+ method: 'the "Address book" feature in context of the Bitcoin chain',
+ proof: {
+ image: at6Proof,
+ alt: "Bitfinex Exchange fails to resolve the Bitcoin address for gregskril.eth",
+ },
+ extra: 'The app showed the message "Invalid address".',
+ }),
+ },
+ "at07-resolve-solana-address": {
+ result: BenchmarkResults.Fail,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-30T09:26:44Z") },
+ ],
+ notes: buildFailNoteForAT7({
+ method: 'the "Address book" feature in context of the Solana chain',
+ proof: {
+ image: at7Proof,
+ alt: "Bitfinex Exchange fails to resolve the Solana address for gregskril.eth",
+ },
+ extra: 'The app showed the message "Invalid address".',
+ }),
+ },
+ "at08-handle-invalid-address-format": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-30T09:26:44Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 5, scope: "on Base" }),
+ },
+} as const satisfies AcceptanceTestBenchmarks;
+
+export default depositAddresses;
diff --git a/ensawards.org/data/apps/bitfinex-exchange/benchmarks/resolution/ensv2-ready-resolution/at-1.png b/ensawards.org/data/apps/bitfinex-exchange/benchmarks/resolution/ensv2-ready-resolution/at-1.png
new file mode 100644
index 00000000..e64dacc4
Binary files /dev/null and b/ensawards.org/data/apps/bitfinex-exchange/benchmarks/resolution/ensv2-ready-resolution/at-1.png differ
diff --git a/ensawards.org/data/apps/bitfinex-exchange/benchmarks/resolution/ensv2-ready-resolution/index.tsx b/ensawards.org/data/apps/bitfinex-exchange/benchmarks/resolution/ensv2-ready-resolution/index.tsx
new file mode 100644
index 00000000..824ca0ec
--- /dev/null
+++ b/ensawards.org/data/apps/bitfinex-exchange/benchmarks/resolution/ensv2-ready-resolution/index.tsx
@@ -0,0 +1,45 @@
+// 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,
+ bestPracticeTechnicalDetailsCodeStyles,
+} 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.Fail,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-30T09:20:00Z") },
+ ],
+ notes: (
+
+
+ ENSv2 ready resolution was tested using the "Address book" feature. The resolved
+ address is NOT the expected Ethereum Mainnet address (
+
+ 0x2222222222222222222222222222222222222222
+
+ ).
+
+ 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/bitget-exchange/icon.tsx b/ensawards.org/data/apps/bitget-exchange/icon.tsx
new file mode 100644
index 00000000..8e17b08a
--- /dev/null
+++ b/ensawards.org/data/apps/bitget-exchange/icon.tsx
@@ -0,0 +1,23 @@
+import React from "react";
+
+const Icon = (props: React.SVGProps) => (
+
+);
+
+export default Icon;
diff --git a/ensawards.org/data/apps/bitget-exchange/index.ts b/ensawards.org/data/apps/bitget-exchange/index.ts
new file mode 100644
index 00000000..3082cb0e
--- /dev/null
+++ b/ensawards.org/data/apps/bitget-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 BitgetProject from "data/projects/bitget";
+
+import { defineApp } from "../registry.ts";
+import { type App, AppTypes } from "../types.ts";
+import BitgetIcon from "./icon.tsx";
+
+const BitgetExchange: App = {
+ id: "bitget-exchange",
+ appSlug: "bitget-exchange",
+ type: AppTypes.Exchange,
+ project: BitgetProject,
+ name: "Bitget",
+ description:
+ "Cryptocurrency exchange for spot, futures, and copy trading, buying, selling, and managing digital assets.",
+ socials: {
+ website: new URL("https://www.bitget.com"),
+ twitter: new URL("https://x.com/bitget"),
+ },
+ icon: BitgetIcon,
+ // TODO: Add OG images
+};
+
+defineApp(BitgetExchange);
+
+export default BitgetExchange;
diff --git a/ensawards.org/data/apps/gate-exchange/benchmarks/index.tsx b/ensawards.org/data/apps/gate-exchange/benchmarks/index.tsx
new file mode 100644
index 00000000..85632e37
--- /dev/null
+++ b/ensawards.org/data/apps/gate-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 GateExchange from "data/apps/gate-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(GateExchange, benchmarks);
+
+export default benchmarks;
diff --git a/ensawards.org/data/apps/gate-exchange/benchmarks/resolution/deposit-addresses/at-1.gif b/ensawards.org/data/apps/gate-exchange/benchmarks/resolution/deposit-addresses/at-1.gif
new file mode 100644
index 00000000..982a04e3
Binary files /dev/null and b/ensawards.org/data/apps/gate-exchange/benchmarks/resolution/deposit-addresses/at-1.gif differ
diff --git a/ensawards.org/data/apps/gate-exchange/benchmarks/resolution/deposit-addresses/index.tsx b/ensawards.org/data/apps/gate-exchange/benchmarks/resolution/deposit-addresses/index.tsx
new file mode 100644
index 00000000..5b7b97c5
--- /dev/null
+++ b/ensawards.org/data/apps/gate-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.gif";
+
+const depositAddresses = {
+ "at01-resolve-onchain-name": {
+ result: BenchmarkResults.Fail,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-30T08:01:05Z") },
+ ],
+ notes: buildEnsNotSupportedNote({
+ method: 'the "withdrawal" flow',
+ proof: {
+ image: at1Proof,
+ alt: "Gate 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-30T08:01:05Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+ "at03-resolve-offchain-eth-subname": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-30T08:01:05Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+ "at04-resolve-offchain-dns-name": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-30T08:01:05Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+ "at05-resolve-name-on-other-evm-chain": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-30T08:01:05Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+ "at06-resolve-bitcoin-address": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-30T08:01:05Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+ "at07-resolve-solana-address": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-30T08:01:05Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+ "at08-handle-invalid-address-format": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-30T08:01:05Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+} as const satisfies AcceptanceTestBenchmarks;
+
+export default depositAddresses;
diff --git a/ensawards.org/data/apps/gate-exchange/benchmarks/resolution/ensv2-ready-resolution/at-1.gif b/ensawards.org/data/apps/gate-exchange/benchmarks/resolution/ensv2-ready-resolution/at-1.gif
new file mode 100644
index 00000000..b0193745
Binary files /dev/null and b/ensawards.org/data/apps/gate-exchange/benchmarks/resolution/ensv2-ready-resolution/at-1.gif differ
diff --git a/ensawards.org/data/apps/gate-exchange/benchmarks/resolution/ensv2-ready-resolution/index.tsx b/ensawards.org/data/apps/gate-exchange/benchmarks/resolution/ensv2-ready-resolution/index.tsx
new file mode 100644
index 00000000..06470dde
--- /dev/null
+++ b/ensawards.org/data/apps/gate-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 correctlyResolveEnsv2TestNameAddressProofImage from "./at-1.gif";
+
+const ensv2ReadyResolution = {
+ "correctly-resolve-ensv2-test-name-address": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-30T07:22:56Z") },
+ ],
+ 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/gate-exchange/icon.tsx b/ensawards.org/data/apps/gate-exchange/icon.tsx
new file mode 100644
index 00000000..6a05f3a2
--- /dev/null
+++ b/ensawards.org/data/apps/gate-exchange/icon.tsx
@@ -0,0 +1,23 @@
+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/gate-exchange/index.ts b/ensawards.org/data/apps/gate-exchange/index.ts
new file mode 100644
index 00000000..f9d92b19
--- /dev/null
+++ b/ensawards.org/data/apps/gate-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 GateProject from "data/projects/gate";
+
+import { defineApp } from "../registry.ts";
+import { type App, AppTypes } from "../types.ts";
+import GateIcon from "./icon.tsx";
+
+const GateExchange: App = {
+ id: "gate-exchange",
+ appSlug: "gate-exchange",
+ type: AppTypes.Exchange,
+ project: GateProject,
+ name: "Gate",
+ description:
+ "Cryptocurrency exchange with one of the widest token listings, supporting spot, margin, perpetual futures, and copy trading.",
+ socials: {
+ website: new URL("https://www.gate.com"),
+ twitter: new URL("https://x.com/Gate"),
+ },
+ icon: GateIcon,
+ // TODO: Add OG images
+};
+
+defineApp(GateExchange);
+
+export default GateExchange;
diff --git a/ensawards.org/data/apps/htx-exchange/benchmarks/index.tsx b/ensawards.org/data/apps/htx-exchange/benchmarks/index.tsx
new file mode 100644
index 00000000..c19daff4
--- /dev/null
+++ b/ensawards.org/data/apps/htx-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 HTXExchange from "data/apps/htx-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(HTXExchange, benchmarks);
+
+export default benchmarks;
diff --git a/ensawards.org/data/apps/htx-exchange/benchmarks/resolution/deposit-addresses/at-1.gif b/ensawards.org/data/apps/htx-exchange/benchmarks/resolution/deposit-addresses/at-1.gif
new file mode 100644
index 00000000..f33c906b
Binary files /dev/null and b/ensawards.org/data/apps/htx-exchange/benchmarks/resolution/deposit-addresses/at-1.gif differ
diff --git a/ensawards.org/data/apps/htx-exchange/benchmarks/resolution/deposit-addresses/at-2.png b/ensawards.org/data/apps/htx-exchange/benchmarks/resolution/deposit-addresses/at-2.png
new file mode 100644
index 00000000..7b735154
Binary files /dev/null and b/ensawards.org/data/apps/htx-exchange/benchmarks/resolution/deposit-addresses/at-2.png differ
diff --git a/ensawards.org/data/apps/htx-exchange/benchmarks/resolution/deposit-addresses/at-3.png b/ensawards.org/data/apps/htx-exchange/benchmarks/resolution/deposit-addresses/at-3.png
new file mode 100644
index 00000000..6bcac21f
Binary files /dev/null and b/ensawards.org/data/apps/htx-exchange/benchmarks/resolution/deposit-addresses/at-3.png differ
diff --git a/ensawards.org/data/apps/htx-exchange/benchmarks/resolution/deposit-addresses/at-4.png b/ensawards.org/data/apps/htx-exchange/benchmarks/resolution/deposit-addresses/at-4.png
new file mode 100644
index 00000000..25a8682a
Binary files /dev/null and b/ensawards.org/data/apps/htx-exchange/benchmarks/resolution/deposit-addresses/at-4.png differ
diff --git a/ensawards.org/data/apps/htx-exchange/benchmarks/resolution/deposit-addresses/at-5.png b/ensawards.org/data/apps/htx-exchange/benchmarks/resolution/deposit-addresses/at-5.png
new file mode 100644
index 00000000..35088825
Binary files /dev/null and b/ensawards.org/data/apps/htx-exchange/benchmarks/resolution/deposit-addresses/at-5.png differ
diff --git a/ensawards.org/data/apps/htx-exchange/benchmarks/resolution/deposit-addresses/at-6.gif b/ensawards.org/data/apps/htx-exchange/benchmarks/resolution/deposit-addresses/at-6.gif
new file mode 100644
index 00000000..a32b63b3
Binary files /dev/null and b/ensawards.org/data/apps/htx-exchange/benchmarks/resolution/deposit-addresses/at-6.gif differ
diff --git a/ensawards.org/data/apps/htx-exchange/benchmarks/resolution/deposit-addresses/at-7.png b/ensawards.org/data/apps/htx-exchange/benchmarks/resolution/deposit-addresses/at-7.png
new file mode 100644
index 00000000..06433c26
Binary files /dev/null and b/ensawards.org/data/apps/htx-exchange/benchmarks/resolution/deposit-addresses/at-7.png differ
diff --git a/ensawards.org/data/apps/htx-exchange/benchmarks/resolution/deposit-addresses/index.tsx b/ensawards.org/data/apps/htx-exchange/benchmarks/resolution/deposit-addresses/index.tsx
new file mode 100644
index 00000000..f368483d
--- /dev/null
+++ b/ensawards.org/data/apps/htx-exchange/benchmarks/resolution/deposit-addresses/index.tsx
@@ -0,0 +1,141 @@
+// 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 {
+ buildBenchmarkNote,
+ buildFailNoteForAT3,
+ buildFailNoteForAT4,
+ buildFailNoteForAT6,
+ buildFailNoteForAT7,
+ buildNotApplicableForFailedTest,
+ buildPassNoteForAT1,
+ buildPassNoteForAT2,
+} from "data/ens-best-practices/resolution/deposit-addresses/notes";
+import { bestPracticeTechnicalDetailsCodeStyles } from "data/ens-best-practices/styles";
+
+import { parseTimestamp } from "@ensnode/ensnode-sdk";
+
+import at1Proof from "./at-1.gif";
+import at2Proof from "./at-2.png";
+import at3Proof from "./at-3.png";
+import at4Proof from "./at-4.png";
+import at5Proof from "./at-5.png";
+import at6Proof from "./at-6.gif";
+import at7Proof from "./at-7.png";
+
+const method = 'the "withdrawal" flow';
+
+const depositAddresses = {
+ "at01-resolve-onchain-name": {
+ result: BenchmarkResults.Pass,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-29T13:05:50Z") },
+ ],
+ notes: buildPassNoteForAT1({
+ method,
+ proof: {
+ image: at1Proof,
+ alt: "HTX Exchange correctly resolves the address for vitalik.eth",
+ },
+ }),
+ },
+ "at02-resolve-name-needing-normalization": {
+ result: BenchmarkResults.Pass,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-29T13:05:50Z") },
+ ],
+ notes: buildPassNoteForAT2({
+ method,
+ proof: {
+ image: at2Proof,
+ alt: "HTX Exchange correctly resolves the address for Ξthereum.eth",
+ },
+ }),
+ },
+ "at03-resolve-offchain-eth-subname": {
+ result: BenchmarkResults.Fail,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-29T13:05:50Z") },
+ ],
+ notes: buildFailNoteForAT3({
+ method,
+ proof: {
+ image: at3Proof,
+ alt: "HTX Exchange fails to resolve the address for jesse.base.eth",
+ },
+ extra: 'The app showed the message "Invalid address".',
+ }),
+ },
+ "at04-resolve-offchain-dns-name": {
+ result: BenchmarkResults.Fail,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-29T13:05:50Z") },
+ ],
+ notes: buildFailNoteForAT4({
+ method,
+ proof: {
+ image: at4Proof,
+ alt: "HTX Exchange fails to resolve the address for dperri.com",
+ },
+ extra: 'The app showed the message "Invalid address".',
+ }),
+ },
+ "at05-resolve-name-on-other-evm-chain": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-29T13:05:50Z") },
+ ],
+ notes: buildBenchmarkNote({
+ proof: {
+ image: at5Proof,
+ alt: "HTX Exchange has suspended withdrawals on the Base chain",
+ },
+ children: (
+ <>
+ The app currently suspends withdrawals in context of the Base EVM chain and therefore we
+ classify this acceptance test as{" "}
+ Not Applicable.
+ >
+ ),
+ }),
+ },
+ "at06-resolve-bitcoin-address": {
+ result: BenchmarkResults.Fail,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-29T13:05:50Z") },
+ ],
+ notes: buildFailNoteForAT6({
+ method: 'the "withdrawal" flow in context of the Bitcoin chain',
+ proof: {
+ image: at6Proof,
+ alt: "HTX Exchange fails to resolve the Bitcoin address for gregskril.eth",
+ },
+ extra: 'The app showed the message "Invalid address".',
+ }),
+ },
+ "at07-resolve-solana-address": {
+ result: BenchmarkResults.Fail,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-29T13:05:50Z") },
+ ],
+ notes: buildFailNoteForAT7({
+ method: 'the "withdrawal" flow in context of the Solana chain',
+ proof: {
+ image: at7Proof,
+ alt: "HTX Exchange fails to resolve the Solana address for gregskril.eth",
+ },
+ extra: 'The app showed the message "Invalid address".',
+ }),
+ },
+ "at08-handle-invalid-address-format": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-29T13:05:50Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 5, scope: "on Base" }),
+ },
+} as const satisfies AcceptanceTestBenchmarks;
+
+export default depositAddresses;
diff --git a/ensawards.org/data/apps/htx-exchange/benchmarks/resolution/ensv2-ready-resolution/at-1.gif b/ensawards.org/data/apps/htx-exchange/benchmarks/resolution/ensv2-ready-resolution/at-1.gif
new file mode 100644
index 00000000..f7132131
Binary files /dev/null and b/ensawards.org/data/apps/htx-exchange/benchmarks/resolution/ensv2-ready-resolution/at-1.gif differ
diff --git a/ensawards.org/data/apps/htx-exchange/benchmarks/resolution/ensv2-ready-resolution/index.tsx b/ensawards.org/data/apps/htx-exchange/benchmarks/resolution/ensv2-ready-resolution/index.tsx
new file mode 100644
index 00000000..29d44994
--- /dev/null
+++ b/ensawards.org/data/apps/htx-exchange/benchmarks/resolution/ensv2-ready-resolution/index.tsx
@@ -0,0 +1,42 @@
+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,
+ bestPracticeTechnicalDetailsCodeStyles,
+} from "data/ens-best-practices/styles";
+
+import { parseTimestamp } from "@ensnode/ensnode-sdk";
+
+import { cn } from "@/utils/tailwindClassConcatenation";
+
+import at1ProofImage from "./at-1.gif";
+
+const ensv2ReadyResolution = {
+ "correctly-resolve-ensv2-test-name-address": {
+ result: BenchmarkResults.Fail,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-29T12:35:25Z") },
+ ],
+ notes: (
+
+
+ ENSv2 ready resolution was tested using the "withdrawal" flow. The resolved
+ address is NOT the expected Ethereum Mainnet address (
+
+ 0x2222222222222222222222222222222222222222
+
+ ).
+
+
+
+ ),
+ } as const satisfies AcceptanceTestBenchmark,
+} as const satisfies AcceptanceTestBenchmarks;
+
+export default ensv2ReadyResolution;
diff --git a/ensawards.org/data/apps/htx-exchange/icon.jpg b/ensawards.org/data/apps/htx-exchange/icon.jpg
new file mode 100644
index 00000000..e5bc2fa9
Binary files /dev/null and b/ensawards.org/data/apps/htx-exchange/icon.jpg differ
diff --git a/ensawards.org/data/apps/htx-exchange/icon.tsx b/ensawards.org/data/apps/htx-exchange/icon.tsx
new file mode 100644
index 00000000..ff2f8560
--- /dev/null
+++ b/ensawards.org/data/apps/htx-exchange/icon.tsx
@@ -0,0 +1,19 @@
+import React from "react";
+
+import { cn } from "@/utils/tailwindClassConcatenation";
+
+import icon from "./icon.jpg";
+
+const Icon = ({ className, ...props }: React.SVGProps) => (
+
+);
+
+export default Icon;
diff --git a/ensawards.org/data/apps/htx-exchange/index.ts b/ensawards.org/data/apps/htx-exchange/index.ts
new file mode 100644
index 00000000..ada0e39a
--- /dev/null
+++ b/ensawards.org/data/apps/htx-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 HTXProject from "data/projects/htx";
+
+import { defineApp } from "../registry.ts";
+import { type App, AppTypes } from "../types.ts";
+import HTXIcon from "./icon.tsx";
+
+const HTXExchange: App = {
+ id: "htx-exchange",
+ appSlug: "htx-exchange",
+ type: AppTypes.Exchange,
+ project: HTXProject,
+ name: "HTX",
+ description:
+ "Cryptocurrency exchange for spot and futures trading, buying, selling, and managing digital assets.",
+ socials: {
+ website: new URL("https://www.htx.com"),
+ twitter: new URL("https://twitter.com/HTX_Global"),
+ },
+ icon: HTXIcon,
+ // TODO: Add OG images
+};
+
+defineApp(HTXExchange);
+
+export default HTXExchange;
diff --git a/ensawards.org/data/apps/kraken-exchange/benchmarks/index.tsx b/ensawards.org/data/apps/kraken-exchange/benchmarks/index.tsx
index d7c71d74..7307fb92 100644
--- a/ensawards.org/data/apps/kraken-exchange/benchmarks/index.tsx
+++ b/ensawards.org/data/apps/kraken-exchange/benchmarks/index.tsx
@@ -5,7 +5,7 @@ import KrakenExchange from "data/apps/kraken-exchange";
import { defineAppBenchmarks } from "data/benchmarks/registry";
import type { BestPracticeBenchmarks } from "data/ens-best-practices/types";
-import depositAddresses from "./resolution/deposit-address";
+import depositAddresses from "./resolution/deposit-addresses";
import ensv2ReadyResolution from "./resolution/ensv2-ready-resolution";
const benchmarks: BestPracticeBenchmarks = {
diff --git a/ensawards.org/data/apps/kraken-exchange/benchmarks/resolution/deposit-address/index.tsx b/ensawards.org/data/apps/kraken-exchange/benchmarks/resolution/deposit-address/index.tsx
deleted file mode 100644
index e81d8c52..00000000
--- a/ensawards.org/data/apps/kraken-exchange/benchmarks/resolution/deposit-address/index.tsx
+++ /dev/null
@@ -1,14 +0,0 @@
-import type { AcceptanceTestBenchmarks } from "data/benchmarks/types";
-
-const depositAddresses = {
- "at01-resolve-onchain-name": undefined,
- "at02-resolve-name-needing-normalization": undefined,
- "at03-resolve-offchain-eth-subname": undefined,
- "at04-resolve-offchain-dns-name": undefined,
- "at05-resolve-name-on-other-evm-chain": undefined,
- "at06-resolve-bitcoin-address": undefined,
- "at07-resolve-solana-address": undefined,
- "at08-handle-invalid-address-format": undefined,
-} as const satisfies AcceptanceTestBenchmarks;
-
-export default depositAddresses;
diff --git a/ensawards.org/data/apps/kraken-exchange/benchmarks/resolution/deposit-addresses/at-1.gif b/ensawards.org/data/apps/kraken-exchange/benchmarks/resolution/deposit-addresses/at-1.gif
new file mode 100644
index 00000000..1422cea0
Binary files /dev/null and b/ensawards.org/data/apps/kraken-exchange/benchmarks/resolution/deposit-addresses/at-1.gif differ
diff --git a/ensawards.org/data/apps/kraken-exchange/benchmarks/resolution/deposit-addresses/index.tsx b/ensawards.org/data/apps/kraken-exchange/benchmarks/resolution/deposit-addresses/index.tsx
new file mode 100644
index 00000000..b2df6d01
--- /dev/null
+++ b/ensawards.org/data/apps/kraken-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.gif";
+
+const depositAddresses = {
+ "at01-resolve-onchain-name": {
+ result: BenchmarkResults.Fail,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-29T11:26:56Z") },
+ ],
+ notes: buildEnsNotSupportedNote({
+ method: 'the "withdrawal" flow',
+ proof: {
+ image: at1Proof,
+ alt: "Kraken 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-29T11:26:56Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+ "at03-resolve-offchain-eth-subname": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-29T11:26:56Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+ "at04-resolve-offchain-dns-name": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-29T11:26:56Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+ "at05-resolve-name-on-other-evm-chain": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-29T11:26:56Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+ "at06-resolve-bitcoin-address": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-29T11:26:56Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+ "at07-resolve-solana-address": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-29T11:26:56Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+ "at08-handle-invalid-address-format": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-29T11:26:56Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+} as const satisfies AcceptanceTestBenchmarks;
+
+export default depositAddresses;
diff --git a/ensawards.org/data/projects/bingx/icon.jpeg b/ensawards.org/data/projects/bingx/icon.jpeg
new file mode 100644
index 00000000..77898021
Binary files /dev/null and b/ensawards.org/data/projects/bingx/icon.jpeg differ
diff --git a/ensawards.org/data/projects/bingx/icon.tsx b/ensawards.org/data/projects/bingx/icon.tsx
new file mode 100644
index 00000000..e607a396
--- /dev/null
+++ b/ensawards.org/data/projects/bingx/icon.tsx
@@ -0,0 +1,19 @@
+import React from "react";
+
+import { cn } from "@/utils/tailwindClassConcatenation";
+
+import icon from "./icon.jpeg";
+
+const Icon = ({ className, ...props }: React.SVGProps) => (
+
+);
+
+export default Icon;
diff --git a/ensawards.org/data/projects/bingx/index.ts b/ensawards.org/data/projects/bingx/index.ts
new file mode 100644
index 00000000..e2fa01ee
--- /dev/null
+++ b/ensawards.org/data/projects/bingx/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 BingXIcon from "./icon.tsx";
+
+const BingXProject: Project = {
+ id: ProjectIds.BingX,
+ name: "BingX",
+ description:
+ "Global cryptocurrency exchange for spot, futures, and copy trading, buying, and managing digital assets, with a broad suite of Web3 products.",
+ icon: BingXIcon,
+ socials: {
+ website: new URL("https://bingx.com"),
+ twitter: new URL("https://x.com/BingXOfficial"),
+ },
+};
+
+defineProject(BingXProject);
+
+export default BingXProject;
diff --git a/ensawards.org/data/projects/bitfinex/icon.tsx b/ensawards.org/data/projects/bitfinex/icon.tsx
new file mode 100644
index 00000000..291e6910
--- /dev/null
+++ b/ensawards.org/data/projects/bitfinex/icon.tsx
@@ -0,0 +1,26 @@
+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/bitfinex/index.ts b/ensawards.org/data/projects/bitfinex/index.ts
new file mode 100644
index 00000000..39cc6d60
--- /dev/null
+++ b/ensawards.org/data/projects/bitfinex/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 BitfinexIcon from "./icon.tsx";
+
+const BitfinexProject: Project = {
+ id: ProjectIds.Bitfinex,
+ name: "Bitfinex",
+ description:
+ "Established cryptocurrency exchange built for professional and high-volume traders, with advanced order types, deep liquidity, margin trading, and peer-to-peer funding.",
+ icon: BitfinexIcon,
+ socials: {
+ website: new URL("https://www.bitfinex.com"),
+ twitter: new URL("https://x.com/bitfinex"),
+ },
+};
+
+defineProject(BitfinexProject);
+
+export default BitfinexProject;
diff --git a/ensawards.org/data/projects/bitget/icon.tsx b/ensawards.org/data/projects/bitget/icon.tsx
new file mode 100644
index 00000000..8e17b08a
--- /dev/null
+++ b/ensawards.org/data/projects/bitget/icon.tsx
@@ -0,0 +1,23 @@
+import React from "react";
+
+const Icon = (props: React.SVGProps) => (
+
+);
+
+export default Icon;
diff --git a/ensawards.org/data/projects/bitget/index.ts b/ensawards.org/data/projects/bitget/index.ts
new file mode 100644
index 00000000..25f86e6e
--- /dev/null
+++ b/ensawards.org/data/projects/bitget/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 BitgetIcon from "./icon.tsx";
+
+const BitgetProject: Project = {
+ id: ProjectIds.Bitget,
+ name: "Bitget",
+ description:
+ "Cryptocurrency exchange and Web3 platform for trading, copy trading, and managing digital assets, with a self-custodial wallet and access to decentralized applications.",
+ icon: BitgetIcon,
+ socials: {
+ website: new URL("https://www.bitget.com"),
+ twitter: new URL("https://x.com/bitget"),
+ },
+};
+
+defineProject(BitgetProject);
+
+export default BitgetProject;
diff --git a/ensawards.org/data/projects/gate/icon.tsx b/ensawards.org/data/projects/gate/icon.tsx
new file mode 100644
index 00000000..6a05f3a2
--- /dev/null
+++ b/ensawards.org/data/projects/gate/icon.tsx
@@ -0,0 +1,23 @@
+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/gate/index.ts b/ensawards.org/data/projects/gate/index.ts
new file mode 100644
index 00000000..2c704ae0
--- /dev/null
+++ b/ensawards.org/data/projects/gate/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 GateIcon from "./icon.tsx";
+
+const GateProject: Project = {
+ id: ProjectIds.Gate,
+ name: "Gate",
+ description:
+ "Long-running cryptocurrency exchange known for its expansive token selection, offering spot, margin, futures, and copy trading alongside earn, launchpad, and Web3 wallet services.",
+ icon: GateIcon,
+ socials: {
+ website: new URL("https://www.gate.com"),
+ twitter: new URL("https://x.com/Gate"),
+ },
+};
+
+defineProject(GateProject);
+
+export default GateProject;
diff --git a/ensawards.org/data/projects/htx/icon.jpg b/ensawards.org/data/projects/htx/icon.jpg
new file mode 100644
index 00000000..e5bc2fa9
Binary files /dev/null and b/ensawards.org/data/projects/htx/icon.jpg differ
diff --git a/ensawards.org/data/projects/htx/icon.tsx b/ensawards.org/data/projects/htx/icon.tsx
new file mode 100644
index 00000000..ff2f8560
--- /dev/null
+++ b/ensawards.org/data/projects/htx/icon.tsx
@@ -0,0 +1,19 @@
+import React from "react";
+
+import { cn } from "@/utils/tailwindClassConcatenation";
+
+import icon from "./icon.jpg";
+
+const Icon = ({ className, ...props }: React.SVGProps) => (
+
+);
+
+export default Icon;
diff --git a/ensawards.org/data/projects/htx/index.ts b/ensawards.org/data/projects/htx/index.ts
new file mode 100644
index 00000000..76c34ff2
--- /dev/null
+++ b/ensawards.org/data/projects/htx/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 HTXIcon from "./icon.tsx";
+
+const HTXProject: Project = {
+ id: ProjectIds.HTX,
+ name: "HTX",
+ description:
+ "Global cryptocurrency exchange for trading, buying, and managing digital assets, with a broad suite of spot, futures, and Web3 products.",
+ icon: HTXIcon,
+ socials: {
+ website: new URL("https://www.htx.com"),
+ twitter: new URL("https://twitter.com/HTX_Global"),
+ },
+};
+
+defineProject(HTXProject);
+
+export default HTXProject;
diff --git a/ensawards.org/data/projects/types.ts b/ensawards.org/data/projects/types.ts
index f42d9a01..da95d946 100644
--- a/ensawards.org/data/projects/types.ts
+++ b/ensawards.org/data/projects/types.ts
@@ -43,6 +43,11 @@ export const ProjectIds = {
Pendle: "project-pendle",
Hyperliquid: "project-hyperliquid",
Polymarket: "project-polymarket",
+ Bitget: "project-bitget",
+ HTX: "project-htx",
+ BingX: "project-bingx",
+ Gate: "project-gate",
+ Bitfinex: "project-bitfinex",
} as const;
/**