diff --git a/ensawards.org/data/apps/bingx-exchange/benchmarks/index.tsx b/ensawards.org/data/apps/bingx-exchange/benchmarks/index.tsx new file mode 100644 index 00000000..6d4ae006 --- /dev/null +++ b/ensawards.org/data/apps/bingx-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 BingXExchange from "data/apps/bingx-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(BingXExchange, benchmarks); + +export default benchmarks; diff --git a/ensawards.org/data/apps/bingx-exchange/benchmarks/resolution/deposit-addresses/at-1.png b/ensawards.org/data/apps/bingx-exchange/benchmarks/resolution/deposit-addresses/at-1.png new file mode 100644 index 00000000..234a0890 Binary files /dev/null and b/ensawards.org/data/apps/bingx-exchange/benchmarks/resolution/deposit-addresses/at-1.png differ diff --git a/ensawards.org/data/apps/bingx-exchange/benchmarks/resolution/deposit-addresses/index.tsx b/ensawards.org/data/apps/bingx-exchange/benchmarks/resolution/deposit-addresses/index.tsx new file mode 100644 index 00000000..af8dc98d --- /dev/null +++ b/ensawards.org/data/apps/bingx-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-29T13:52:05Z") }, + ], + notes: buildEnsNotSupportedNote({ + method: 'the "withdraw" flow', + proof: { + image: at1Proof, + alt: "BingX 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-29T13:52:05Z") }, + ], + notes: buildNotApplicableForFailedTest({ testNumber: 1 }), + }, + "at03-resolve-offchain-eth-subname": { + result: BenchmarkResults.NotApplicable, + contributions: [ + { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-29T13:52:05Z") }, + ], + notes: buildNotApplicableForFailedTest({ testNumber: 1 }), + }, + "at04-resolve-offchain-dns-name": { + result: BenchmarkResults.NotApplicable, + contributions: [ + { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-29T13:52:05Z") }, + ], + notes: buildNotApplicableForFailedTest({ testNumber: 1 }), + }, + "at05-resolve-name-on-other-evm-chain": { + result: BenchmarkResults.NotApplicable, + contributions: [ + { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-29T13:52:05Z") }, + ], + notes: buildNotApplicableForFailedTest({ testNumber: 1 }), + }, + "at06-resolve-bitcoin-address": { + result: BenchmarkResults.NotApplicable, + contributions: [ + { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-29T13:52:05Z") }, + ], + notes: buildNotApplicableForFailedTest({ testNumber: 1 }), + }, + "at07-resolve-solana-address": { + result: BenchmarkResults.NotApplicable, + contributions: [ + { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-29T13:52:05Z") }, + ], + notes: buildNotApplicableForFailedTest({ testNumber: 1 }), + }, + "at08-handle-invalid-address-format": { + result: BenchmarkResults.NotApplicable, + contributions: [ + { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-29T13:52:05Z") }, + ], + notes: buildNotApplicableForFailedTest({ testNumber: 1 }), + }, +} as const satisfies AcceptanceTestBenchmarks; + +export default depositAddresses; diff --git a/ensawards.org/data/apps/bingx-exchange/benchmarks/resolution/ensv2-ready-resolution/at-1.png b/ensawards.org/data/apps/bingx-exchange/benchmarks/resolution/ensv2-ready-resolution/at-1.png new file mode 100644 index 00000000..856abe33 Binary files /dev/null and b/ensawards.org/data/apps/bingx-exchange/benchmarks/resolution/ensv2-ready-resolution/at-1.png differ diff --git a/ensawards.org/data/apps/bingx-exchange/benchmarks/resolution/ensv2-ready-resolution/index.tsx b/ensawards.org/data/apps/bingx-exchange/benchmarks/resolution/ensv2-ready-resolution/index.tsx new file mode 100644 index 00000000..5da0eabf --- /dev/null +++ b/ensawards.org/data/apps/bingx-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.png"; + +const ensv2ReadyResolution = { + "correctly-resolve-ensv2-test-name-address": { + result: BenchmarkResults.NotApplicable, + contributions: [ + { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-29T13:50:45Z") }, + ], + 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. +

+ BingX exchange doesn't allow ENS name as recipient in the withdraw flow +
+ ), + } 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 + + ). +

+ Bitfinex exchange fails to resolve the name for ENSv2 +
+ ), + } as const satisfies AcceptanceTestBenchmark, +} as const satisfies AcceptanceTestBenchmarks; + +export default ensv2ReadyResolution; diff --git a/ensawards.org/data/apps/bitfinex-exchange/icon.tsx b/ensawards.org/data/apps/bitfinex-exchange/icon.tsx new file mode 100644 index 00000000..291e6910 --- /dev/null +++ b/ensawards.org/data/apps/bitfinex-exchange/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/apps/bitfinex-exchange/index.ts b/ensawards.org/data/apps/bitfinex-exchange/index.ts new file mode 100644 index 00000000..09dd695c --- /dev/null +++ b/ensawards.org/data/apps/bitfinex-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 BitfinexProject from "data/projects/bitfinex"; + +import { defineApp } from "../registry.ts"; +import { type App, AppTypes } from "../types.ts"; +import BitfinexIcon from "./icon.tsx"; + +const BitfinexExchange: App = { + id: "bitfinex-exchange", + appSlug: "bitfinex-exchange", + type: AppTypes.Exchange, + project: BitfinexProject, + name: "Bitfinex", + description: + "Cryptocurrency exchange for advanced traders, offering spot, margin, and derivatives trading alongside a peer-to-peer funding market.", + socials: { + website: new URL("https://www.bitfinex.com"), + twitter: new URL("https://x.com/bitfinex"), + }, + icon: BitfinexIcon, + // TODO: Add OG images +}; + +defineApp(BitfinexExchange); + +export default BitfinexExchange; diff --git a/ensawards.org/data/apps/bitget-exchange/benchmarks/index.tsx b/ensawards.org/data/apps/bitget-exchange/benchmarks/index.tsx new file mode 100644 index 00000000..776d3607 --- /dev/null +++ b/ensawards.org/data/apps/bitget-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 BitgetExchange from "data/apps/bitget-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(BitgetExchange, benchmarks); + +export default benchmarks; diff --git a/ensawards.org/data/apps/bitget-exchange/benchmarks/resolution/deposit-addresses/at-1.png b/ensawards.org/data/apps/bitget-exchange/benchmarks/resolution/deposit-addresses/at-1.png new file mode 100644 index 00000000..ca4d6372 Binary files /dev/null and b/ensawards.org/data/apps/bitget-exchange/benchmarks/resolution/deposit-addresses/at-1.png differ diff --git a/ensawards.org/data/apps/bitget-exchange/benchmarks/resolution/deposit-addresses/index.tsx b/ensawards.org/data/apps/bitget-exchange/benchmarks/resolution/deposit-addresses/index.tsx new file mode 100644 index 00000000..8e305db7 --- /dev/null +++ b/ensawards.org/data/apps/bitget-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-29T11:08:25Z") }, + ], + notes: buildEnsNotSupportedNote({ + method: 'the "withdraw" flow', + proof: { + image: at1Proof, + alt: "Bitget 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-29T11:08:25Z") }, + ], + notes: buildNotApplicableForFailedTest({ testNumber: 1 }), + }, + "at03-resolve-offchain-eth-subname": { + result: BenchmarkResults.NotApplicable, + contributions: [ + { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-29T11:08:25Z") }, + ], + notes: buildNotApplicableForFailedTest({ testNumber: 1 }), + }, + "at04-resolve-offchain-dns-name": { + result: BenchmarkResults.NotApplicable, + contributions: [ + { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-29T11:08:25Z") }, + ], + notes: buildNotApplicableForFailedTest({ testNumber: 1 }), + }, + "at05-resolve-name-on-other-evm-chain": { + result: BenchmarkResults.NotApplicable, + contributions: [ + { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-29T11:08:25Z") }, + ], + notes: buildNotApplicableForFailedTest({ testNumber: 1 }), + }, + "at06-resolve-bitcoin-address": { + result: BenchmarkResults.NotApplicable, + contributions: [ + { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-29T11:08:25Z") }, + ], + notes: buildNotApplicableForFailedTest({ testNumber: 1 }), + }, + "at07-resolve-solana-address": { + result: BenchmarkResults.NotApplicable, + contributions: [ + { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-29T11:08:25Z") }, + ], + notes: buildNotApplicableForFailedTest({ testNumber: 1 }), + }, + "at08-handle-invalid-address-format": { + result: BenchmarkResults.NotApplicable, + contributions: [ + { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-29T11:08:25Z") }, + ], + notes: buildNotApplicableForFailedTest({ testNumber: 1 }), + }, +} as const satisfies AcceptanceTestBenchmarks; + +export default depositAddresses; diff --git a/ensawards.org/data/apps/bitget-exchange/benchmarks/resolution/ensv2-ready-resolution/at-1.png b/ensawards.org/data/apps/bitget-exchange/benchmarks/resolution/ensv2-ready-resolution/at-1.png new file mode 100644 index 00000000..60f9d80c Binary files /dev/null and b/ensawards.org/data/apps/bitget-exchange/benchmarks/resolution/ensv2-ready-resolution/at-1.png differ diff --git a/ensawards.org/data/apps/bitget-exchange/benchmarks/resolution/ensv2-ready-resolution/index.tsx b/ensawards.org/data/apps/bitget-exchange/benchmarks/resolution/ensv2-ready-resolution/index.tsx new file mode 100644 index 00000000..d85941ef --- /dev/null +++ b/ensawards.org/data/apps/bitget-exchange/benchmarks/resolution/ensv2-ready-resolution/index.tsx @@ -0,0 +1,40 @@ +import type { AcceptanceTestBenchmark } from "data/acceptance-tests/types"; +import { type AcceptanceTestBenchmarks, 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-29T11:03:56Z") }, + ], + 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. +

+ Bitget exchange doesn't allow ENS name as recipient in the withdrawal flow +
+ ), + } 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. +

+ Gate exchange doesn't allow ENS name as recipient in the withdrawal flow +
+ ), + } 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 + + ). +

+ HTX exchange fails to resolve the name for ENSv2 +
+ ), + } 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; /**