diff --git a/ensawards.org/data/apps/binance-exchange/benchmarks/correctly-resolve-ensv2-test-name-address-proof-copy-trading.gif b/ensawards.org/data/apps/binance-exchange/benchmarks/correctly-resolve-ensv2-test-name-address-proof-copy-trading.gif new file mode 100644 index 00000000..4d0d0354 Binary files /dev/null and b/ensawards.org/data/apps/binance-exchange/benchmarks/correctly-resolve-ensv2-test-name-address-proof-copy-trading.gif differ diff --git a/ensawards.org/data/apps/binance-exchange/benchmarks/correctly-resolve-ensv2-test-name-address-proof-withdrawal.png b/ensawards.org/data/apps/binance-exchange/benchmarks/correctly-resolve-ensv2-test-name-address-proof-withdrawal.png new file mode 100644 index 00000000..a13ae659 Binary files /dev/null and b/ensawards.org/data/apps/binance-exchange/benchmarks/correctly-resolve-ensv2-test-name-address-proof-withdrawal.png differ diff --git a/ensawards.org/data/apps/binance-exchange/benchmarks/index.tsx b/ensawards.org/data/apps/binance-exchange/benchmarks/index.tsx new file mode 100644 index 00000000..2026f882 --- /dev/null +++ b/ensawards.org/data/apps/binance-exchange/benchmarks/index.tsx @@ -0,0 +1,56 @@ +// 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 BinanceExchange from "data/apps/binance-exchange"; +import { defineAppBenchmarks } from "data/benchmarks/registry"; +import { BenchmarkResults } from "data/benchmarks/types"; +import contributors from "data/contributors"; +import { acceptanceTestDetailsContainerStyles } from "data/ens-best-practices/styles"; +import type { BestPracticeBenchmarks } from "data/ens-best-practices/types"; + +import { parseTimestamp } from "@ensnode/ensnode-sdk"; + +import { cn } from "@/utils/tailwindClassConcatenation"; + +import correctlyResolveEnsv2TestNameAddressProofImageCopyTrading from "./correctly-resolve-ensv2-test-name-address-proof-copy-trading.gif"; +import correctlyResolveEnsv2TestNameAddressProofImageWithdrawal from "./correctly-resolve-ensv2-test-name-address-proof-withdrawal.png"; + +const benchmarks: BestPracticeBenchmarks = { + "ensv2-ready-resolution": { + "correctly-resolve-ensv2-test-name-address": { + result: BenchmarkResults.Fail, + contributions: [ + { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-11T07:30:06Z") }, + ], + notes: ( +
+

+ ENSv2 ready resolution was tested using the search tool in the "copy-trading" + flow. The app either doesn't allow using ENS name as the trader identifier or fails to + resolve it, both of which we interpret as a failure. +

+ Binance exchange doesn't allow ENS name as trader in the copy-trading flow +

+ The ENSv2 ready resolution was also tested using the "withdrawal" flow. The + app doesn't allow using ENS name as the recipient identifier, which we interpret as a + failure. +

+ Binance exchange doesn't allow ENS name as recipient in the withdrawal flow +
+ ), + } as const satisfies AcceptanceTestBenchmark, + }, +}; + +defineAppBenchmarks(BinanceExchange, benchmarks); + +export default benchmarks; diff --git a/ensawards.org/data/apps/binance-exchange/icon.tsx b/ensawards.org/data/apps/binance-exchange/icon.tsx new file mode 100644 index 00000000..ecc8c98c --- /dev/null +++ b/ensawards.org/data/apps/binance-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/binance-exchange/index.ts b/ensawards.org/data/apps/binance-exchange/index.ts new file mode 100644 index 00000000..4a4986ec --- /dev/null +++ b/ensawards.org/data/apps/binance-exchange/index.ts @@ -0,0 +1,29 @@ +// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md +// for additional advice on adding and modifying apps + +import BinanceProject from "data/projects/binance"; + +import { defineApp } from "../registry.ts"; +import { type App, AppTypes } from "../types.ts"; +import BinanceIcon from "./icon.tsx"; + +const BinanceExchange: App = { + id: "binance-exchange", + appSlug: "binance-exchange", + type: AppTypes.Exchange, + project: BinanceProject, + name: "Binance", + description: + "Cryptocurrency exchange for buying, selling, and trading a wide range of digital assets.", + socials: { + website: new URL("https://www.binance.com"), + twitter: new URL("https://x.com/binance"), + }, + icon: BinanceIcon, + ogImagePath: "binance-exchange/og.png", + twitterOgImagePath: "binance-exchange/twitter-og.png", +}; + +defineApp(BinanceExchange); + +export default BinanceExchange; diff --git a/ensawards.org/data/apps/binance-exchange/og.png b/ensawards.org/data/apps/binance-exchange/og.png new file mode 100644 index 00000000..aa33d97c Binary files /dev/null and b/ensawards.org/data/apps/binance-exchange/og.png differ diff --git a/ensawards.org/data/apps/binance-exchange/twitter-og.png b/ensawards.org/data/apps/binance-exchange/twitter-og.png new file mode 100644 index 00000000..494ab7e4 Binary files /dev/null and b/ensawards.org/data/apps/binance-exchange/twitter-og.png differ diff --git a/ensawards.org/data/apps/binance-wallet/benchmarks/correctly-resolve-ensv2-test-name-address-proof.gif b/ensawards.org/data/apps/binance-wallet/benchmarks/correctly-resolve-ensv2-test-name-address-proof.gif new file mode 100644 index 00000000..f7c9dfd5 Binary files /dev/null and b/ensawards.org/data/apps/binance-wallet/benchmarks/correctly-resolve-ensv2-test-name-address-proof.gif differ diff --git a/ensawards.org/data/apps/binance-wallet/benchmarks/index.tsx b/ensawards.org/data/apps/binance-wallet/benchmarks/index.tsx new file mode 100644 index 00000000..499c8008 --- /dev/null +++ b/ensawards.org/data/apps/binance-wallet/benchmarks/index.tsx @@ -0,0 +1,54 @@ +// 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 BinanceWallet from "data/apps/binance-wallet"; +import { defineAppBenchmarks } from "data/benchmarks/registry"; +import { BenchmarkResults } from "data/benchmarks/types"; +import contributors from "data/contributors"; +import { acceptanceTestDetailsContainerStyles } from "data/ens-best-practices/styles"; +import type { BestPracticeBenchmarks } from "data/ens-best-practices/types"; + +import { parseTimestamp } from "@ensnode/ensnode-sdk"; + +import { cn } from "@/utils/tailwindClassConcatenation"; + +import correctlyResolveEnsv2TestNameAddressProofImage from "./correctly-resolve-ensv2-test-name-address-proof.gif"; + +const benchmarks: BestPracticeBenchmarks = { + // TODO: `Contract Naming` category is temporarily hidden due to unfit content, + // and so are all benchmarks belonging to it. + // We aim to fix it as soon as we have the capacity. + // See: https://github.com/namehash/ensawards/issues/222 + "display-named-smart-contracts-mainnet": { + "mainnet-interactions-display-named-smart-contracts": undefined, + }, + "display-named-smart-contracts-l2-chains": { + "l2-chain-interactions-display-named-smart-contracts": undefined, + }, + "ensv2-ready-resolution": { + "correctly-resolve-ensv2-test-name-address": { + result: BenchmarkResults.Fail, + contributions: [ + { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-11T07:33:06Z") }, + ], + notes: ( +
+

+ ENSv2 ready resolution was tested using the "send" flow. The wallet doesn't + allow using ENS name as the recipient identifier, which we interpret as a failure. +

+ Binance Wallet doesn't allow ENS name as recipient in the send flow +
+ ), + } as const satisfies AcceptanceTestBenchmark, + }, +}; + +defineAppBenchmarks(BinanceWallet, benchmarks); + +export default benchmarks; diff --git a/ensawards.org/data/apps/binance-wallet/icon.tsx b/ensawards.org/data/apps/binance-wallet/icon.tsx new file mode 100644 index 00000000..ecc8c98c --- /dev/null +++ b/ensawards.org/data/apps/binance-wallet/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/binance-wallet/index.ts b/ensawards.org/data/apps/binance-wallet/index.ts new file mode 100644 index 00000000..d7cf2297 --- /dev/null +++ b/ensawards.org/data/apps/binance-wallet/index.ts @@ -0,0 +1,29 @@ +// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md +// for additional advice on adding and modifying apps + +import BinanceProject from "data/projects/binance"; + +import { defineApp } from "../registry.ts"; +import { type App, AppTypes } from "../types.ts"; +import BinanceIcon from "./icon.tsx"; + +const BinanceWallet: App = { + id: "binance-wallet", + appSlug: "binance-wallet", + type: AppTypes.Wallet, + project: BinanceProject, + name: "Binance Wallet", + description: + "Self-custodial Web3 wallet for managing digital assets and interacting with decentralized applications across multiple chains.", + socials: { + website: new URL("https://web3.binance.com/"), + twitter: new URL("https://x.com/binance"), + }, + icon: BinanceIcon, + ogImagePath: "binance-wallet/og.png", + twitterOgImagePath: "binance-wallet/twitter-og.png", +}; + +defineApp(BinanceWallet); + +export default BinanceWallet; diff --git a/ensawards.org/data/apps/binance-wallet/og.png b/ensawards.org/data/apps/binance-wallet/og.png new file mode 100644 index 00000000..b4b7fb3c Binary files /dev/null and b/ensawards.org/data/apps/binance-wallet/og.png differ diff --git a/ensawards.org/data/apps/binance-wallet/twitter-og.png b/ensawards.org/data/apps/binance-wallet/twitter-og.png new file mode 100644 index 00000000..42083f03 Binary files /dev/null and b/ensawards.org/data/apps/binance-wallet/twitter-og.png differ diff --git a/ensawards.org/data/apps/coinbase-exchange/benchmarks/correctly-resolve-ensv2-test-name-address-proof.png b/ensawards.org/data/apps/coinbase-exchange/benchmarks/correctly-resolve-ensv2-test-name-address-proof.png new file mode 100644 index 00000000..a8980b09 Binary files /dev/null and b/ensawards.org/data/apps/coinbase-exchange/benchmarks/correctly-resolve-ensv2-test-name-address-proof.png differ diff --git a/ensawards.org/data/apps/coinbase-exchange/benchmarks/index.tsx b/ensawards.org/data/apps/coinbase-exchange/benchmarks/index.tsx new file mode 100644 index 00000000..92b1d021 --- /dev/null +++ b/ensawards.org/data/apps/coinbase-exchange/benchmarks/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 CoinbaseExchange from "data/apps/coinbase-exchange"; +import { defineAppBenchmarks } from "data/benchmarks/registry"; +import { BenchmarkResults } from "data/benchmarks/types"; +import contributors from "data/contributors"; +import { acceptanceTestDetailsContainerStyles } from "data/ens-best-practices/styles"; +import type { BestPracticeBenchmarks } from "data/ens-best-practices/types"; + +import { parseTimestamp } from "@ensnode/ensnode-sdk"; + +import { cn } from "@/utils/tailwindClassConcatenation"; + +import correctlyResolveEnsv2TestNameAddressProofImage from "./correctly-resolve-ensv2-test-name-address-proof.png"; + +const benchmarks: BestPracticeBenchmarks = { + "ensv2-ready-resolution": { + "correctly-resolve-ensv2-test-name-address": { + result: BenchmarkResults.Fail, + contributions: [ + { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-12T09:01:23Z") }, + ], + notes: ( +
+

+ ENSv2 ready resolution was tested using the "send" flow. The resolved address + is NOT correct. +

+ Coinbase exchange fails to resolve the name for ENSv2 +
+ ), + } as const satisfies AcceptanceTestBenchmark, + }, +}; + +defineAppBenchmarks(CoinbaseExchange, benchmarks); + +export default benchmarks; diff --git a/ensawards.org/data/apps/coinbase-exchange/icon.tsx b/ensawards.org/data/apps/coinbase-exchange/icon.tsx new file mode 100644 index 00000000..4193b92e --- /dev/null +++ b/ensawards.org/data/apps/coinbase-exchange/icon.tsx @@ -0,0 +1,20 @@ +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/coinbase-exchange/index.ts b/ensawards.org/data/apps/coinbase-exchange/index.ts new file mode 100644 index 00000000..018faa23 --- /dev/null +++ b/ensawards.org/data/apps/coinbase-exchange/index.ts @@ -0,0 +1,29 @@ +// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md +// for additional advice on adding and modifying apps + +import CoinbaseProject from "data/projects/coinbase"; + +import { defineApp } from "../registry.ts"; +import { type App, AppTypes } from "../types.ts"; +import CoinbaseIcon from "./icon.tsx"; + +const CoinbaseExchange: App = { + id: "coinbase-exchange", + appSlug: "coinbase-exchange", + type: AppTypes.Exchange, + project: CoinbaseProject, + name: "Coinbase", + description: + "Cryptocurrency exchange for buying, selling, and trading a wide range of digital assets.", + socials: { + website: new URL("https://www.coinbase.com"), + twitter: new URL("https://x.com/coinbase"), + }, + icon: CoinbaseIcon, + ogImagePath: "coinbase-exchange/og.png", + twitterOgImagePath: "coinbase-exchange/twitter-og.png", +}; + +defineApp(CoinbaseExchange); + +export default CoinbaseExchange; diff --git a/ensawards.org/data/apps/coinbase-exchange/og.png b/ensawards.org/data/apps/coinbase-exchange/og.png new file mode 100644 index 00000000..e840fb1f Binary files /dev/null and b/ensawards.org/data/apps/coinbase-exchange/og.png differ diff --git a/ensawards.org/data/apps/coinbase-exchange/twitter-og.png b/ensawards.org/data/apps/coinbase-exchange/twitter-og.png new file mode 100644 index 00000000..11387228 Binary files /dev/null and b/ensawards.org/data/apps/coinbase-exchange/twitter-og.png differ diff --git a/ensawards.org/data/apps/cryptocom-exchange/benchmarks/correctly-resolve-ensv2-test-name-address-proof.gif b/ensawards.org/data/apps/cryptocom-exchange/benchmarks/correctly-resolve-ensv2-test-name-address-proof.gif new file mode 100644 index 00000000..4ea58893 Binary files /dev/null and b/ensawards.org/data/apps/cryptocom-exchange/benchmarks/correctly-resolve-ensv2-test-name-address-proof.gif differ diff --git a/ensawards.org/data/apps/cryptocom-exchange/benchmarks/index.tsx b/ensawards.org/data/apps/cryptocom-exchange/benchmarks/index.tsx new file mode 100644 index 00000000..1aef7a0c --- /dev/null +++ b/ensawards.org/data/apps/cryptocom-exchange/benchmarks/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 CryptoComExchange from "data/apps/cryptocom-exchange"; +import { defineAppBenchmarks } from "data/benchmarks/registry"; +import { BenchmarkResults } from "data/benchmarks/types"; +import contributors from "data/contributors"; +import { acceptanceTestDetailsContainerStyles } from "data/ens-best-practices/styles"; +import type { BestPracticeBenchmarks } from "data/ens-best-practices/types"; + +import { parseTimestamp } from "@ensnode/ensnode-sdk"; + +import { cn } from "@/utils/tailwindClassConcatenation"; + +import correctlyResolveEnsv2TestNameAddressProofImage from "./correctly-resolve-ensv2-test-name-address-proof.gif"; + +const benchmarks: BestPracticeBenchmarks = { + "ensv2-ready-resolution": { + "correctly-resolve-ensv2-test-name-address": { + result: BenchmarkResults.Fail, + contributions: [ + { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-11T13:47:40Z") }, + ], + notes: ( +
+

+ ENSv2 ready resolution was tested using the "withdrawal" flow. The app doesn't + allow using ENS name as the recipient identifier, which we interpret as a failure. +

+ Crypto.com exchange doesn't allow ENS name as recipient in the withdrawal flow +
+ ), + } as const satisfies AcceptanceTestBenchmark, + }, +}; + +defineAppBenchmarks(CryptoComExchange, benchmarks); + +export default benchmarks; diff --git a/ensawards.org/data/apps/cryptocom-exchange/icon.tsx b/ensawards.org/data/apps/cryptocom-exchange/icon.tsx new file mode 100644 index 00000000..da8753ab --- /dev/null +++ b/ensawards.org/data/apps/cryptocom-exchange/icon.tsx @@ -0,0 +1,22 @@ +import React from "react"; + +import { cn } from "@/utils/tailwindClassConcatenation"; + +const cryptoComIconDataUri = + "data:image/jpeg;base64,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"; + +const Icon = ({ className, ...props }: React.SVGProps) => ( + + + +); + +export default Icon; diff --git a/ensawards.org/data/apps/cryptocom-exchange/index.ts b/ensawards.org/data/apps/cryptocom-exchange/index.ts new file mode 100644 index 00000000..e2b779a0 --- /dev/null +++ b/ensawards.org/data/apps/cryptocom-exchange/index.ts @@ -0,0 +1,29 @@ +// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md +// for additional advice on adding and modifying apps + +import CryptoComProject from "data/projects/cryptocom"; + +import { defineApp } from "../registry.ts"; +import { type App, AppTypes } from "../types.ts"; +import CryptoComIcon from "./icon.tsx"; + +const CryptoComExchange: App = { + id: "cryptocom-exchange", + appSlug: "cryptocom-exchange", + type: AppTypes.Exchange, + project: CryptoComProject, + name: "Crypto.com", + description: + "Cryptocurrency exchange for buying, selling, and trading a wide range of digital assets.", + socials: { + website: new URL("https://crypto.com"), + twitter: new URL("https://x.com/cryptocom"), + }, + icon: CryptoComIcon, + ogImagePath: "cryptocom-exchange/og.png", + twitterOgImagePath: "cryptocom-exchange/twitter-og.png", +}; + +defineApp(CryptoComExchange); + +export default CryptoComExchange; diff --git a/ensawards.org/data/apps/cryptocom-exchange/og.png b/ensawards.org/data/apps/cryptocom-exchange/og.png new file mode 100644 index 00000000..a5cd4278 Binary files /dev/null and b/ensawards.org/data/apps/cryptocom-exchange/og.png differ diff --git a/ensawards.org/data/apps/cryptocom-exchange/twitter-og.png b/ensawards.org/data/apps/cryptocom-exchange/twitter-og.png new file mode 100644 index 00000000..22443d4d Binary files /dev/null and b/ensawards.org/data/apps/cryptocom-exchange/twitter-og.png differ diff --git a/ensawards.org/data/apps/cryptocom-wallet/benchmarks/correctly-resolve-ensv2-test-name-address-proof.png b/ensawards.org/data/apps/cryptocom-wallet/benchmarks/correctly-resolve-ensv2-test-name-address-proof.png new file mode 100644 index 00000000..34654f26 Binary files /dev/null and b/ensawards.org/data/apps/cryptocom-wallet/benchmarks/correctly-resolve-ensv2-test-name-address-proof.png differ diff --git a/ensawards.org/data/apps/cryptocom-wallet/benchmarks/index.tsx b/ensawards.org/data/apps/cryptocom-wallet/benchmarks/index.tsx new file mode 100644 index 00000000..305c5e96 --- /dev/null +++ b/ensawards.org/data/apps/cryptocom-wallet/benchmarks/index.tsx @@ -0,0 +1,54 @@ +// 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 CryptoComWallet from "data/apps/cryptocom-wallet"; +import { defineAppBenchmarks } from "data/benchmarks/registry"; +import { BenchmarkResults } from "data/benchmarks/types"; +import contributors from "data/contributors"; +import { acceptanceTestDetailsContainerStyles } from "data/ens-best-practices/styles"; +import type { BestPracticeBenchmarks } from "data/ens-best-practices/types"; + +import { parseTimestamp } from "@ensnode/ensnode-sdk"; + +import { cn } from "@/utils/tailwindClassConcatenation"; + +import correctlyResolveEnsv2TestNameAddressProofImage from "./correctly-resolve-ensv2-test-name-address-proof.png"; + +const benchmarks: BestPracticeBenchmarks = { + // TODO: `Contract Naming` category is temporarily hidden due to unfit content, + // and so are all benchmarks belonging to it. + // We aim to fix it as soon as we have the capacity. + // See: https://github.com/namehash/ensawards/issues/222 + "display-named-smart-contracts-mainnet": { + "mainnet-interactions-display-named-smart-contracts": undefined, + }, + "display-named-smart-contracts-l2-chains": { + "l2-chain-interactions-display-named-smart-contracts": undefined, + }, + "ensv2-ready-resolution": { + "correctly-resolve-ensv2-test-name-address": { + result: BenchmarkResults.Fail, + contributions: [ + { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-11T12:07:27Z") }, + ], + notes: ( +
+

+ ENSv2 ready resolution was tested using the "send" flow. The resolved address + is NOT correct. +

+ Crypto.com Wallet fails to resolve the name for ENSv2 +
+ ), + } as const satisfies AcceptanceTestBenchmark, + }, +}; + +defineAppBenchmarks(CryptoComWallet, benchmarks); + +export default benchmarks; diff --git a/ensawards.org/data/apps/cryptocom-wallet/icon.tsx b/ensawards.org/data/apps/cryptocom-wallet/icon.tsx new file mode 100644 index 00000000..da8753ab --- /dev/null +++ b/ensawards.org/data/apps/cryptocom-wallet/icon.tsx @@ -0,0 +1,22 @@ +import React from "react"; + +import { cn } from "@/utils/tailwindClassConcatenation"; + +const cryptoComIconDataUri = + "data:image/jpeg;base64,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"; + +const Icon = ({ className, ...props }: React.SVGProps) => ( + + + +); + +export default Icon; diff --git a/ensawards.org/data/apps/cryptocom-wallet/index.ts b/ensawards.org/data/apps/cryptocom-wallet/index.ts new file mode 100644 index 00000000..81f45700 --- /dev/null +++ b/ensawards.org/data/apps/cryptocom-wallet/index.ts @@ -0,0 +1,29 @@ +// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md +// for additional advice on adding and modifying apps + +import CryptoComProject from "data/projects/cryptocom"; + +import { defineApp } from "../registry.ts"; +import { type App, AppTypes } from "../types.ts"; +import CryptoComIcon from "./icon.tsx"; + +const CryptoComWallet: App = { + id: "cryptocom-wallet", + appSlug: "cryptocom-wallet", + type: AppTypes.Wallet, + project: CryptoComProject, + name: "Crypto.com Wallet", + description: + "Self-custodial multi-chain wallet for storing, trading, and staking digital assets and interacting with decentralized applications across networks like Ethereum, Bitcoin, and Solana.", + socials: { + website: new URL("https://crypto.com/eea/onchain"), + twitter: new URL("https://x.com/cryptocom"), + }, + icon: CryptoComIcon, + ogImagePath: "cryptocom-wallet/og.png", + twitterOgImagePath: "cryptocom-wallet/twitter-og.png", +}; + +defineApp(CryptoComWallet); + +export default CryptoComWallet; diff --git a/ensawards.org/data/apps/cryptocom-wallet/og.png b/ensawards.org/data/apps/cryptocom-wallet/og.png new file mode 100644 index 00000000..5c068bbc Binary files /dev/null and b/ensawards.org/data/apps/cryptocom-wallet/og.png differ diff --git a/ensawards.org/data/apps/cryptocom-wallet/twitter-og.png b/ensawards.org/data/apps/cryptocom-wallet/twitter-og.png new file mode 100644 index 00000000..930043b7 Binary files /dev/null and b/ensawards.org/data/apps/cryptocom-wallet/twitter-og.png differ diff --git a/ensawards.org/data/apps/frame-wallet/benchmarks/correctly-resolve-ensv2-test-name-address-proof.png b/ensawards.org/data/apps/frame-wallet/benchmarks/correctly-resolve-ensv2-test-name-address-proof.png new file mode 100644 index 00000000..91d24c5e Binary files /dev/null and b/ensawards.org/data/apps/frame-wallet/benchmarks/correctly-resolve-ensv2-test-name-address-proof.png differ diff --git a/ensawards.org/data/apps/frame-wallet/benchmarks/index.tsx b/ensawards.org/data/apps/frame-wallet/benchmarks/index.tsx new file mode 100644 index 00000000..8ba257fc --- /dev/null +++ b/ensawards.org/data/apps/frame-wallet/benchmarks/index.tsx @@ -0,0 +1,54 @@ +// 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 FrameWallet from "data/apps/frame-wallet"; +import { defineAppBenchmarks } from "data/benchmarks/registry"; +import { BenchmarkResults } from "data/benchmarks/types"; +import contributors from "data/contributors"; +import { acceptanceTestDetailsContainerStyles } from "data/ens-best-practices/styles"; +import type { BestPracticeBenchmarks } from "data/ens-best-practices/types"; + +import { parseTimestamp } from "@ensnode/ensnode-sdk"; + +import { cn } from "@/utils/tailwindClassConcatenation"; + +import correctlyResolveEnsv2TestNameAddressProofImage from "./correctly-resolve-ensv2-test-name-address-proof.png"; + +const benchmarks: BestPracticeBenchmarks = { + // TODO: `Contract Naming` category is temporarily hidden due to unfit content, + // and so are all benchmarks belonging to it. + // We aim to fix it as soon as we have the capacity. + // See: https://github.com/namehash/ensawards/issues/222 + "display-named-smart-contracts-mainnet": { + "mainnet-interactions-display-named-smart-contracts": undefined, + }, + "display-named-smart-contracts-l2-chains": { + "l2-chain-interactions-display-named-smart-contracts": undefined, + }, + "ensv2-ready-resolution": { + "correctly-resolve-ensv2-test-name-address": { + result: BenchmarkResults.Fail, + contributions: [ + { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-12T11:46:19Z") }, + ], + notes: ( +
+

+ ENSv2 ready resolution was tested using the "send" flow. The resolved address + is NOT correct. +

+ Frame fails to resolve the name for ENSv2 +
+ ), + } as const satisfies AcceptanceTestBenchmark, + }, +}; + +defineAppBenchmarks(FrameWallet, benchmarks); + +export default benchmarks; diff --git a/ensawards.org/data/apps/frame-wallet/icon.tsx b/ensawards.org/data/apps/frame-wallet/icon.tsx new file mode 100644 index 00000000..00d1da86 --- /dev/null +++ b/ensawards.org/data/apps/frame-wallet/icon.tsx @@ -0,0 +1,22 @@ +import React from "react"; + +import { cn } from "@/utils/tailwindClassConcatenation"; + +const frameIconDataUri = + "data:image/png;base64,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"; + +const Icon = ({ className, ...props }: React.SVGProps) => ( + + + +); + +export default Icon; diff --git a/ensawards.org/data/apps/frame-wallet/index.ts b/ensawards.org/data/apps/frame-wallet/index.ts new file mode 100644 index 00000000..a64e7f72 --- /dev/null +++ b/ensawards.org/data/apps/frame-wallet/index.ts @@ -0,0 +1,29 @@ +// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md +// for additional advice on adding and modifying apps + +import FrameProject from "data/projects/frame"; + +import { defineApp } from "../registry.ts"; +import { type App, AppTypes } from "../types.ts"; +import FrameIcon from "./icon.tsx"; + +const FrameWallet: App = { + id: "frame-wallet", + appSlug: "frame-wallet", + type: AppTypes.Wallet, + project: FrameProject, + name: "Frame", + description: + "Self-custodial desktop wallet providing system-wide access to your chains and accounts, with hardware wallet support and dApp connectivity.", + socials: { + website: new URL("https://frame.sh"), + twitter: new URL("https://x.com/0xFrame"), + }, + icon: FrameIcon, + ogImagePath: "frame-wallet/og.png", + twitterOgImagePath: "frame-wallet/twitter-og.png", +}; + +defineApp(FrameWallet); + +export default FrameWallet; diff --git a/ensawards.org/data/apps/frame-wallet/og.png b/ensawards.org/data/apps/frame-wallet/og.png new file mode 100644 index 00000000..cf75b8e7 Binary files /dev/null and b/ensawards.org/data/apps/frame-wallet/og.png differ diff --git a/ensawards.org/data/apps/frame-wallet/twitter-og.png b/ensawards.org/data/apps/frame-wallet/twitter-og.png new file mode 100644 index 00000000..c973a672 Binary files /dev/null and b/ensawards.org/data/apps/frame-wallet/twitter-og.png differ diff --git a/ensawards.org/data/apps/gemini-wallet/benchmarks/correctly-resolve-ensv2-test-name-address-proof.png b/ensawards.org/data/apps/gemini-wallet/benchmarks/correctly-resolve-ensv2-test-name-address-proof.png new file mode 100644 index 00000000..5924502b Binary files /dev/null and b/ensawards.org/data/apps/gemini-wallet/benchmarks/correctly-resolve-ensv2-test-name-address-proof.png differ diff --git a/ensawards.org/data/apps/gemini-wallet/benchmarks/index.tsx b/ensawards.org/data/apps/gemini-wallet/benchmarks/index.tsx new file mode 100644 index 00000000..91bdc14d --- /dev/null +++ b/ensawards.org/data/apps/gemini-wallet/benchmarks/index.tsx @@ -0,0 +1,54 @@ +// 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 GeminiWallet from "data/apps/gemini-wallet"; +import { defineAppBenchmarks } from "data/benchmarks/registry"; +import { BenchmarkResults } from "data/benchmarks/types"; +import contributors from "data/contributors"; +import { acceptanceTestDetailsContainerStyles } from "data/ens-best-practices/styles"; +import type { BestPracticeBenchmarks } from "data/ens-best-practices/types"; + +import { parseTimestamp } from "@ensnode/ensnode-sdk"; + +import { cn } from "@/utils/tailwindClassConcatenation"; + +import correctlyResolveEnsv2TestNameAddressProofImage from "./correctly-resolve-ensv2-test-name-address-proof.png"; + +const benchmarks: BestPracticeBenchmarks = { + // TODO: `Contract Naming` category is temporarily hidden due to unfit content, + // and so are all benchmarks belonging to it. + // We aim to fix it as soon as we have the capacity. + // See: https://github.com/namehash/ensawards/issues/222 + "display-named-smart-contracts-mainnet": { + "mainnet-interactions-display-named-smart-contracts": undefined, + }, + "display-named-smart-contracts-l2-chains": { + "l2-chain-interactions-display-named-smart-contracts": undefined, + }, + "ensv2-ready-resolution": { + "correctly-resolve-ensv2-test-name-address": { + result: BenchmarkResults.Pass, + contributions: [ + { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-12T07:15:17Z") }, + ], + notes: ( +
+

+ ENSv2 ready resolution was tested using the "send" flow. The resolved address + is correct. +

+ Gemini Wallet correctly resolves the name for ENSv2 +
+ ), + } as const satisfies AcceptanceTestBenchmark, + }, +}; + +defineAppBenchmarks(GeminiWallet, benchmarks); + +export default benchmarks; diff --git a/ensawards.org/data/apps/gemini-wallet/icon.tsx b/ensawards.org/data/apps/gemini-wallet/icon.tsx new file mode 100644 index 00000000..b1d7fe27 --- /dev/null +++ b/ensawards.org/data/apps/gemini-wallet/icon.tsx @@ -0,0 +1,25 @@ +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/gemini-wallet/index.ts b/ensawards.org/data/apps/gemini-wallet/index.ts new file mode 100644 index 00000000..115226a9 --- /dev/null +++ b/ensawards.org/data/apps/gemini-wallet/index.ts @@ -0,0 +1,29 @@ +// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md +// for additional advice on adding and modifying apps + +import GeminiProject from "data/projects/gemini"; + +import { defineApp } from "../registry.ts"; +import { type App, AppTypes } from "../types.ts"; +import GeminiIcon from "./icon.tsx"; + +const GeminiWallet: App = { + id: "gemini-wallet", + appSlug: "gemini-wallet", + type: AppTypes.Wallet, + project: GeminiProject, + name: "Gemini Wallet", + description: + "A self-custody wallet that brings flexibility, ease of use, and powerful security onchain.", + socials: { + website: new URL("https://www.gemini.com/wallet"), + twitter: new URL("https://x.com/gemini"), + }, + icon: GeminiIcon, + ogImagePath: "gemini-wallet/og.png", + twitterOgImagePath: "gemini-wallet/twitter-og.png", +}; + +defineApp(GeminiWallet); + +export default GeminiWallet; diff --git a/ensawards.org/data/apps/gemini-wallet/og.png b/ensawards.org/data/apps/gemini-wallet/og.png new file mode 100644 index 00000000..7e165af2 Binary files /dev/null and b/ensawards.org/data/apps/gemini-wallet/og.png differ diff --git a/ensawards.org/data/apps/gemini-wallet/twitter-og.png b/ensawards.org/data/apps/gemini-wallet/twitter-og.png new file mode 100644 index 00000000..5490bf6e Binary files /dev/null and b/ensawards.org/data/apps/gemini-wallet/twitter-og.png differ diff --git a/ensawards.org/data/apps/kraken-exchange/benchmarks/correctly-resolve-ensv2-test-name-address-proof.gif b/ensawards.org/data/apps/kraken-exchange/benchmarks/correctly-resolve-ensv2-test-name-address-proof.gif new file mode 100644 index 00000000..18138640 Binary files /dev/null and b/ensawards.org/data/apps/kraken-exchange/benchmarks/correctly-resolve-ensv2-test-name-address-proof.gif differ diff --git a/ensawards.org/data/apps/kraken-exchange/benchmarks/index.tsx b/ensawards.org/data/apps/kraken-exchange/benchmarks/index.tsx new file mode 100644 index 00000000..44b5a66e --- /dev/null +++ b/ensawards.org/data/apps/kraken-exchange/benchmarks/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 KrakenExchange from "data/apps/kraken-exchange"; +import { defineAppBenchmarks } from "data/benchmarks/registry"; +import { BenchmarkResults } from "data/benchmarks/types"; +import contributors from "data/contributors"; +import { acceptanceTestDetailsContainerStyles } from "data/ens-best-practices/styles"; +import type { BestPracticeBenchmarks } from "data/ens-best-practices/types"; + +import { parseTimestamp } from "@ensnode/ensnode-sdk"; + +import { cn } from "@/utils/tailwindClassConcatenation"; + +import correctlyResolveEnsv2TestNameAddressProofImage from "./correctly-resolve-ensv2-test-name-address-proof.gif"; + +const benchmarks: BestPracticeBenchmarks = { + "ensv2-ready-resolution": { + "correctly-resolve-ensv2-test-name-address": { + result: BenchmarkResults.Fail, + contributions: [ + { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-11T10:47:44Z") }, + ], + notes: ( +
+

+ ENSv2 ready resolution was tested using the "withdrawal" flow. The app doesn't + allow using ENS name as the recipient identifier, which we interpret as a failure. +

+ Kraken exchange doesn't allow ENS name as recipient in the withdrawal flow +
+ ), + } as const satisfies AcceptanceTestBenchmark, + }, +}; + +defineAppBenchmarks(KrakenExchange, benchmarks); + +export default benchmarks; diff --git a/ensawards.org/data/apps/kraken-exchange/icon.tsx b/ensawards.org/data/apps/kraken-exchange/icon.tsx new file mode 100644 index 00000000..ad57cee0 --- /dev/null +++ b/ensawards.org/data/apps/kraken-exchange/icon.tsx @@ -0,0 +1,18 @@ +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/kraken-exchange/index.ts b/ensawards.org/data/apps/kraken-exchange/index.ts new file mode 100644 index 00000000..8b44bc5d --- /dev/null +++ b/ensawards.org/data/apps/kraken-exchange/index.ts @@ -0,0 +1,29 @@ +// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md +// for additional advice on adding and modifying apps + +import KrakenProject from "data/projects/kraken"; + +import { defineApp } from "../registry.ts"; +import { type App, AppTypes } from "../types.ts"; +import KrakenIcon from "./icon.tsx"; + +const KrakenExchange: App = { + id: "kraken-exchange", + appSlug: "kraken-exchange", + type: AppTypes.Exchange, + project: KrakenProject, + name: "Kraken", + description: + "Cryptocurrency exchange for buying, selling, and trading a wide range of digital assets.", + socials: { + website: new URL("https://www.kraken.com"), + twitter: new URL("https://x.com/krakenfx"), + }, + icon: KrakenIcon, + ogImagePath: "kraken-exchange/og.png", + twitterOgImagePath: "kraken-exchange/twitter-og.png", +}; + +defineApp(KrakenExchange); + +export default KrakenExchange; diff --git a/ensawards.org/data/apps/kraken-exchange/og.png b/ensawards.org/data/apps/kraken-exchange/og.png new file mode 100644 index 00000000..99e3f607 Binary files /dev/null and b/ensawards.org/data/apps/kraken-exchange/og.png differ diff --git a/ensawards.org/data/apps/kraken-exchange/twitter-og.png b/ensawards.org/data/apps/kraken-exchange/twitter-og.png new file mode 100644 index 00000000..f15892de Binary files /dev/null and b/ensawards.org/data/apps/kraken-exchange/twitter-og.png differ diff --git a/ensawards.org/data/apps/kraken-wallet/benchmarks/correctly-resolve-ensv2-test-name-address-proof.png b/ensawards.org/data/apps/kraken-wallet/benchmarks/correctly-resolve-ensv2-test-name-address-proof.png new file mode 100644 index 00000000..b573fc37 Binary files /dev/null and b/ensawards.org/data/apps/kraken-wallet/benchmarks/correctly-resolve-ensv2-test-name-address-proof.png differ diff --git a/ensawards.org/data/apps/kraken-wallet/benchmarks/index.tsx b/ensawards.org/data/apps/kraken-wallet/benchmarks/index.tsx new file mode 100644 index 00000000..2411029e --- /dev/null +++ b/ensawards.org/data/apps/kraken-wallet/benchmarks/index.tsx @@ -0,0 +1,54 @@ +// 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 KrakenWallet from "data/apps/kraken-wallet"; +import { defineAppBenchmarks } from "data/benchmarks/registry"; +import { BenchmarkResults } from "data/benchmarks/types"; +import contributors from "data/contributors"; +import { acceptanceTestDetailsContainerStyles } from "data/ens-best-practices/styles"; +import type { BestPracticeBenchmarks } from "data/ens-best-practices/types"; + +import { parseTimestamp } from "@ensnode/ensnode-sdk"; + +import { cn } from "@/utils/tailwindClassConcatenation"; + +import correctlyResolveEnsv2TestNameAddressProofImage from "./correctly-resolve-ensv2-test-name-address-proof.png"; + +const benchmarks: BestPracticeBenchmarks = { + // TODO: `Contract Naming` category is temporarily hidden due to unfit content, + // and so are all benchmarks belonging to it. + // We aim to fix it as soon as we have the capacity. + // See: https://github.com/namehash/ensawards/issues/222 + "display-named-smart-contracts-mainnet": { + "mainnet-interactions-display-named-smart-contracts": undefined, + }, + "display-named-smart-contracts-l2-chains": { + "l2-chain-interactions-display-named-smart-contracts": undefined, + }, + "ensv2-ready-resolution": { + "correctly-resolve-ensv2-test-name-address": { + result: BenchmarkResults.Pass, + contributions: [ + { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-10T11:02:00Z") }, + ], + notes: ( +
+

+ ENSv2 ready resolution was tested using the "send" flow. The resolved address + is correct. +

+ Kraken Wallet correctly resolves the name for ENSv2 +
+ ), + } as const satisfies AcceptanceTestBenchmark, + }, +}; + +defineAppBenchmarks(KrakenWallet, benchmarks); + +export default benchmarks; diff --git a/ensawards.org/data/apps/kraken-wallet/icon.tsx b/ensawards.org/data/apps/kraken-wallet/icon.tsx new file mode 100644 index 00000000..79d7f45f --- /dev/null +++ b/ensawards.org/data/apps/kraken-wallet/icon.tsx @@ -0,0 +1,19 @@ +import React from "react"; + +const krakenWalletIconDataUri = + "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAoHBwkHBgoJCAkLCwoMDxkQDw4ODx4WFxIZJCAmJSMgIyIoLTkwKCo2KyIjMkQyNjs9QEBAJjBGS0U+Sjk/QD0BCwsLDw0PHRAQHT0pIyk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Pf/CABEIAZABkAMBEQACEQEDEQH/xAAzAAEBAQADAQEAAAAAAAAAAAABAAIDBQYEBwEBAQEAAwEAAAAAAAAAAAAAAAECAwQFBv/aAAwDAQACEAMQAAAA6H7/ALkRERERERERERERERERERERERERERERERERERERAACREREREREREREREREREAiJEREREREQDJ2/Uz23Uz2HBOfEYiKoCWSWIiJIliJJZISiIiCuHV+HnvVdrXTdzWNVIiIiIjJ3XSx6jzcc+EBEQFUBEREVRFEREREJRCRCRQnFp5v0d+f7+2oiIiKT1nlY7rp5goCgqCAiIiEiIiIiIgIhIhiERhiE6zsXxvscmdWIiMx6/wAni7fqwrNYt49NybkCIKQKJY49XkyiIiIjj05ckihISKE49OPTky3mahj4Oe+J9nktWIDv+hj0vnYzXFqydj1+v9vDw6mS1iGIVhlRjzno9zi3reURERjTm43q/L4JUZVWJYRlTh1eq7V6buE5MzR0fb15X1eTRHJxz3fi8UcG793Bw9r1eqWBCsIkUqMsJ0He7fxc3JzYkRERxbv3cGfTebxIyqpSqpSpFKmK856Lr+y5uOajxPs8nx8+g9D5/H3vSnBt3HT6v28XXFCoWNRCQrRGpZet7HN5/wBDsfTxRIiA+blvpPN4+46uaNLSorSorRCSxHSdx0XfnPxzrOzryfq8mbPa+NjUd90en9XFwZtgtCIRiIVhViVzfJev3OO3lzNRGa4tXly9p43CirKlKqrQkqUSxEdV2p5v0nJmeG9rk1OP33hcfb9TrcueKtAUoIiEihWVEpVcteX9TtfFza5MyOPV+3hnrvI4eWJWVhVllRWhWISWAj4uWdD354b2n618t5mKxqhUKBQRVREQqywitKrrN+Pm5Ph59p9/Xn38Ga1lSXUtLpaVJUlihIiIiKPk5/KyudMlbkjNRERESwyorC0wyqsqsrC0yoqyqsqtCSpEsRERER8v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"; + +const Icon = (props: React.SVGProps) => ( + + + +); + +export default Icon; diff --git a/ensawards.org/data/apps/kraken-wallet/index.ts b/ensawards.org/data/apps/kraken-wallet/index.ts new file mode 100644 index 00000000..3ebd2d66 --- /dev/null +++ b/ensawards.org/data/apps/kraken-wallet/index.ts @@ -0,0 +1,29 @@ +// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md +// for additional advice on adding and modifying apps + +import KrakenProject from "data/projects/kraken"; + +import { defineApp } from "../registry.ts"; +import { type App, AppTypes } from "../types.ts"; +import KrakenIcon from "./icon.tsx"; + +const KrakenWallet: App = { + id: "kraken-wallet", + appSlug: "kraken-wallet", + type: AppTypes.Wallet, + project: KrakenProject, + name: "Kraken Wallet", + description: + "Kraken's self-custodial mobile wallet for holding digital assets, swapping tokens, and connecting to decentralized applications across multiple chains.", + socials: { + website: new URL("https://www.kraken.com/wallet"), + twitter: new URL("https://x.com/krakenfx"), + }, + icon: KrakenIcon, + ogImagePath: "kraken-wallet/og.png", + twitterOgImagePath: "kraken-wallet/twitter-og.png", +}; + +defineApp(KrakenWallet); + +export default KrakenWallet; diff --git a/ensawards.org/data/apps/kraken-wallet/og.png b/ensawards.org/data/apps/kraken-wallet/og.png new file mode 100644 index 00000000..f7388114 Binary files /dev/null and b/ensawards.org/data/apps/kraken-wallet/og.png differ diff --git a/ensawards.org/data/apps/kraken-wallet/twitter-og.png b/ensawards.org/data/apps/kraken-wallet/twitter-og.png new file mode 100644 index 00000000..3b8637e6 Binary files /dev/null and b/ensawards.org/data/apps/kraken-wallet/twitter-og.png differ diff --git a/ensawards.org/data/apps/lido-defi/index.ts b/ensawards.org/data/apps/lido-defi/index.ts index 63c6d2f7..97d93309 100644 --- a/ensawards.org/data/apps/lido-defi/index.ts +++ b/ensawards.org/data/apps/lido-defi/index.ts @@ -20,7 +20,8 @@ const LidoDeFi: App = { twitter: new URL("https://x.com/lidofinance"), }, icon: LidoIcon, - // TODO: Add OG images + ogImagePath: "lido-defi/og.png", + twitterOgImagePath: "lido-defi/twitter-og.png", }; defineApp(LidoDeFi); diff --git a/ensawards.org/data/apps/lido-defi/og.png b/ensawards.org/data/apps/lido-defi/og.png new file mode 100644 index 00000000..6cb76351 Binary files /dev/null and b/ensawards.org/data/apps/lido-defi/og.png differ diff --git a/ensawards.org/data/apps/lido-defi/twitter-og.png b/ensawards.org/data/apps/lido-defi/twitter-og.png new file mode 100644 index 00000000..bce2ab0e Binary files /dev/null and b/ensawards.org/data/apps/lido-defi/twitter-og.png differ diff --git a/ensawards.org/data/apps/okx-exchange/benchmarks/correctly-resolve-ensv2-test-name-address-proof.png b/ensawards.org/data/apps/okx-exchange/benchmarks/correctly-resolve-ensv2-test-name-address-proof.png new file mode 100644 index 00000000..1b4e046f Binary files /dev/null and b/ensawards.org/data/apps/okx-exchange/benchmarks/correctly-resolve-ensv2-test-name-address-proof.png differ diff --git a/ensawards.org/data/apps/okx-exchange/benchmarks/index.tsx b/ensawards.org/data/apps/okx-exchange/benchmarks/index.tsx new file mode 100644 index 00000000..99869b67 --- /dev/null +++ b/ensawards.org/data/apps/okx-exchange/benchmarks/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 OKXExchange from "data/apps/okx-exchange"; +import { defineAppBenchmarks } from "data/benchmarks/registry"; +import { BenchmarkResults } from "data/benchmarks/types"; +import contributors from "data/contributors"; +import { acceptanceTestDetailsContainerStyles } from "data/ens-best-practices/styles"; +import type { BestPracticeBenchmarks } from "data/ens-best-practices/types"; + +import { parseTimestamp } from "@ensnode/ensnode-sdk"; + +import { cn } from "@/utils/tailwindClassConcatenation"; + +import correctlyResolveEnsv2TestNameAddressProofImage from "./correctly-resolve-ensv2-test-name-address-proof.png"; + +const benchmarks: BestPracticeBenchmarks = { + "ensv2-ready-resolution": { + "correctly-resolve-ensv2-test-name-address": { + result: BenchmarkResults.Fail, + contributions: [ + { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-11T11:42:14Z") }, + ], + notes: ( +
+

+ ENSv2 ready resolution was tested using the "withdrawal" flow. The app doesn't + allow using ENS name as the recipient identifier, which we interpret as a failure. +

+ OKX exchange doesn't allow ENS name as recipient in the withdrawal flow +
+ ), + } as const satisfies AcceptanceTestBenchmark, + }, +}; + +defineAppBenchmarks(OKXExchange, benchmarks); + +export default benchmarks; diff --git a/ensawards.org/data/apps/okx-exchange/icon.tsx b/ensawards.org/data/apps/okx-exchange/icon.tsx new file mode 100644 index 00000000..4353c477 --- /dev/null +++ b/ensawards.org/data/apps/okx-exchange/icon.tsx @@ -0,0 +1,18 @@ +import React from "react"; + +const Icon = (props: React.SVGProps) => ( + + + + +); + +export default Icon; diff --git a/ensawards.org/data/apps/okx-exchange/index.ts b/ensawards.org/data/apps/okx-exchange/index.ts new file mode 100644 index 00000000..05a3822e --- /dev/null +++ b/ensawards.org/data/apps/okx-exchange/index.ts @@ -0,0 +1,29 @@ +// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md +// for additional advice on adding and modifying apps + +import OKXProject from "data/projects/okx"; + +import { defineApp } from "../registry.ts"; +import { type App, AppTypes } from "../types.ts"; +import OKXIcon from "./icon.tsx"; + +const OKXExchange: App = { + id: "okx-exchange", + appSlug: "okx-exchange", + type: AppTypes.Exchange, + project: OKXProject, + name: "OKX", + description: + "Cryptocurrency exchange for trading, buying, and selling a wide range of digital assets across spot and derivatives markets.", + socials: { + website: new URL("https://www.okx.com"), + twitter: new URL("https://x.com/okx"), + }, + icon: OKXIcon, + ogImagePath: "okx-exchange/og.png", + twitterOgImagePath: "okx-exchange/twitter-og.png", +}; + +defineApp(OKXExchange); + +export default OKXExchange; diff --git a/ensawards.org/data/apps/okx-exchange/og.png b/ensawards.org/data/apps/okx-exchange/og.png new file mode 100644 index 00000000..d8bcfe55 Binary files /dev/null and b/ensawards.org/data/apps/okx-exchange/og.png differ diff --git a/ensawards.org/data/apps/okx-exchange/twitter-og.png b/ensawards.org/data/apps/okx-exchange/twitter-og.png new file mode 100644 index 00000000..af8f86ee Binary files /dev/null and b/ensawards.org/data/apps/okx-exchange/twitter-og.png differ diff --git a/ensawards.org/data/apps/okx-wallet/benchmarks/correctly-resolve-ensv2-test-name-address-proof.png b/ensawards.org/data/apps/okx-wallet/benchmarks/correctly-resolve-ensv2-test-name-address-proof.png new file mode 100644 index 00000000..06d790e6 Binary files /dev/null and b/ensawards.org/data/apps/okx-wallet/benchmarks/correctly-resolve-ensv2-test-name-address-proof.png differ diff --git a/ensawards.org/data/apps/okx-wallet/benchmarks/index.tsx b/ensawards.org/data/apps/okx-wallet/benchmarks/index.tsx new file mode 100644 index 00000000..ee54ee01 --- /dev/null +++ b/ensawards.org/data/apps/okx-wallet/benchmarks/index.tsx @@ -0,0 +1,54 @@ +// 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 OKXWallet from "data/apps/okx-wallet"; +import { defineAppBenchmarks } from "data/benchmarks/registry"; +import { BenchmarkResults } from "data/benchmarks/types"; +import contributors from "data/contributors"; +import { acceptanceTestDetailsContainerStyles } from "data/ens-best-practices/styles"; +import type { BestPracticeBenchmarks } from "data/ens-best-practices/types"; + +import { parseTimestamp } from "@ensnode/ensnode-sdk"; + +import { cn } from "@/utils/tailwindClassConcatenation"; + +import correctlyResolveEnsv2TestNameAddressProofImage from "./correctly-resolve-ensv2-test-name-address-proof.png"; + +const benchmarks: BestPracticeBenchmarks = { + // TODO: `Contract Naming` category is temporarily hidden due to unfit content, + // and so are all benchmarks belonging to it. + // We aim to fix it as soon as we have the capacity. + // See: https://github.com/namehash/ensawards/issues/222 + "display-named-smart-contracts-mainnet": { + "mainnet-interactions-display-named-smart-contracts": undefined, + }, + "display-named-smart-contracts-l2-chains": { + "l2-chain-interactions-display-named-smart-contracts": undefined, + }, + "ensv2-ready-resolution": { + "correctly-resolve-ensv2-test-name-address": { + result: BenchmarkResults.Fail, + contributions: [ + { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-11T09:22:42Z") }, + ], + notes: ( +
+

+ ENSv2 ready resolution was tested using the "send" flow. The resolved address + is NOT correct. +

+ OKX Wallet fails to resolve the name for ENSv2 +
+ ), + } as const satisfies AcceptanceTestBenchmark, + }, +}; + +defineAppBenchmarks(OKXWallet, benchmarks); + +export default benchmarks; diff --git a/ensawards.org/data/apps/okx-wallet/icon.tsx b/ensawards.org/data/apps/okx-wallet/icon.tsx new file mode 100644 index 00000000..a2c7f50c --- /dev/null +++ b/ensawards.org/data/apps/okx-wallet/icon.tsx @@ -0,0 +1,22 @@ +import React from "react"; + +import { cn } from "@/utils/tailwindClassConcatenation"; + +const okxWalletIconDataUri = + "data:image/png;base64,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"; + +const Icon = ({ className, ...props }: React.SVGProps) => ( + + + +); + +export default Icon; diff --git a/ensawards.org/data/apps/okx-wallet/index.ts b/ensawards.org/data/apps/okx-wallet/index.ts new file mode 100644 index 00000000..6c59e918 --- /dev/null +++ b/ensawards.org/data/apps/okx-wallet/index.ts @@ -0,0 +1,29 @@ +// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md +// for additional advice on adding and modifying apps + +import OKXProject from "data/projects/okx"; + +import { defineApp } from "../registry.ts"; +import { type App, AppTypes } from "../types.ts"; +import OKXIcon from "./icon.tsx"; + +const OKXWallet: App = { + id: "okx-wallet", + appSlug: "okx-wallet", + type: AppTypes.Wallet, + project: OKXProject, + name: "OKX Wallet", + description: + "Self-custodial multi-chain wallet for storing digital assets and interacting with decentralized applications across many networks.", + socials: { + website: new URL("https://web3.okx.com/"), + twitter: new URL("https://x.com/okx"), + }, + icon: OKXIcon, + ogImagePath: "okx-wallet/og.png", + twitterOgImagePath: "okx-wallet/twitter-og.png", +}; + +defineApp(OKXWallet); + +export default OKXWallet; diff --git a/ensawards.org/data/apps/okx-wallet/og.png b/ensawards.org/data/apps/okx-wallet/og.png new file mode 100644 index 00000000..9bfa34be Binary files /dev/null and b/ensawards.org/data/apps/okx-wallet/og.png differ diff --git a/ensawards.org/data/apps/okx-wallet/twitter-og.png b/ensawards.org/data/apps/okx-wallet/twitter-og.png new file mode 100644 index 00000000..00b7d4b4 Binary files /dev/null and b/ensawards.org/data/apps/okx-wallet/twitter-og.png differ diff --git a/ensawards.org/data/apps/phantom-wallet/index.ts b/ensawards.org/data/apps/phantom-wallet/index.ts index a67fb001..0a86d29a 100644 --- a/ensawards.org/data/apps/phantom-wallet/index.ts +++ b/ensawards.org/data/apps/phantom-wallet/index.ts @@ -20,7 +20,8 @@ const PhantomWallet: App = { twitter: new URL("https://x.com/phantom"), }, icon: PhantomWalletIcon, - // TODO: Add OG images + ogImagePath: "phantom-wallet/og.png", + twitterOgImagePath: "phantom-wallet/twitter-og.png", }; defineApp(PhantomWallet); diff --git a/ensawards.org/data/apps/phantom-wallet/og.png b/ensawards.org/data/apps/phantom-wallet/og.png new file mode 100644 index 00000000..2c662821 Binary files /dev/null and b/ensawards.org/data/apps/phantom-wallet/og.png differ diff --git a/ensawards.org/data/apps/phantom-wallet/twitter-og.png b/ensawards.org/data/apps/phantom-wallet/twitter-og.png new file mode 100644 index 00000000..0ba335ea Binary files /dev/null and b/ensawards.org/data/apps/phantom-wallet/twitter-og.png differ diff --git a/ensawards.org/data/apps/rabby-wallet/benchmarks/correctly-resolve-ensv2-test-name-address-proof.gif b/ensawards.org/data/apps/rabby-wallet/benchmarks/correctly-resolve-ensv2-test-name-address-proof.gif index 3133b81f..7f81f28c 100644 Binary files a/ensawards.org/data/apps/rabby-wallet/benchmarks/correctly-resolve-ensv2-test-name-address-proof.gif and b/ensawards.org/data/apps/rabby-wallet/benchmarks/correctly-resolve-ensv2-test-name-address-proof.gif differ diff --git a/ensawards.org/data/apps/rabby-wallet/benchmarks/index.tsx b/ensawards.org/data/apps/rabby-wallet/benchmarks/index.tsx index e73dcd1b..17ddf6ca 100644 --- a/ensawards.org/data/apps/rabby-wallet/benchmarks/index.tsx +++ b/ensawards.org/data/apps/rabby-wallet/benchmarks/index.tsx @@ -28,18 +28,18 @@ const benchmarks: BestPracticeBenchmarks = { }, "ensv2-ready-resolution": { "correctly-resolve-ensv2-test-name-address": { - result: BenchmarkResults.Fail, + result: BenchmarkResults.Pass, contributions: [ - { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-08T12:59:18Z") }, + { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-15T06:40:48Z") }, ], notes: (

- ENSv2 ready resolution was tested using the "send" flow. The wallet doesn't - allow using ENS name as the recipient identifier, which we interpret as a failure. + ENSv2 ready resolution was tested using the "send" flow. The resolved address + is correct.

Rabby Wallet doesn't allow ENS name as recipient in the send flow diff --git a/ensawards.org/data/apps/robinhood-exchange/benchmarks/correctly-resolve-ensv2-test-name-address-proof-1.png b/ensawards.org/data/apps/robinhood-exchange/benchmarks/correctly-resolve-ensv2-test-name-address-proof-1.png new file mode 100644 index 00000000..0a8c928e Binary files /dev/null and b/ensawards.org/data/apps/robinhood-exchange/benchmarks/correctly-resolve-ensv2-test-name-address-proof-1.png differ diff --git a/ensawards.org/data/apps/robinhood-exchange/benchmarks/correctly-resolve-ensv2-test-name-address-proof-2.png b/ensawards.org/data/apps/robinhood-exchange/benchmarks/correctly-resolve-ensv2-test-name-address-proof-2.png new file mode 100644 index 00000000..9e803622 Binary files /dev/null and b/ensawards.org/data/apps/robinhood-exchange/benchmarks/correctly-resolve-ensv2-test-name-address-proof-2.png differ diff --git a/ensawards.org/data/apps/robinhood-exchange/benchmarks/index.tsx b/ensawards.org/data/apps/robinhood-exchange/benchmarks/index.tsx new file mode 100644 index 00000000..4f63590e --- /dev/null +++ b/ensawards.org/data/apps/robinhood-exchange/benchmarks/index.tsx @@ -0,0 +1,52 @@ +// 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 RobinhoodExchange from "data/apps/robinhood-exchange"; +import { defineAppBenchmarks } from "data/benchmarks/registry"; +import { BenchmarkResults } from "data/benchmarks/types"; +import contributors from "data/contributors"; +import { acceptanceTestDetailsContainerStyles } from "data/ens-best-practices/styles"; +import type { BestPracticeBenchmarks } from "data/ens-best-practices/types"; + +import { parseTimestamp } from "@ensnode/ensnode-sdk"; + +import { cn } from "@/utils/tailwindClassConcatenation"; + +import correctlyResolveEnsv2TestNameAddressProofImage1 from "./correctly-resolve-ensv2-test-name-address-proof-1.png"; +import correctlyResolveEnsv2TestNameAddressProofImage2 from "./correctly-resolve-ensv2-test-name-address-proof-2.png"; + +const benchmarks: BestPracticeBenchmarks = { + "ensv2-ready-resolution": { + "correctly-resolve-ensv2-test-name-address": { + result: BenchmarkResults.Fail, + contributions: [ + { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-15T06:59:00Z") }, + ], + notes: ( +
+

+ ENSv2 ready resolution was tested using the "send" flow. The app doesn't allow + using ENS name as the recipient identifier, which we interpret as a failure. +

+
+ Robinhood doesn't allow ENS name as recipient in the send flow, part 1 + Robinhood doesn't allow ENS name as recipient in the send flow, part 2 +
+
+ ), + } as const satisfies AcceptanceTestBenchmark, + }, +}; + +defineAppBenchmarks(RobinhoodExchange, benchmarks); + +export default benchmarks; diff --git a/ensawards.org/data/apps/robinhood-exchange/icon.tsx b/ensawards.org/data/apps/robinhood-exchange/icon.tsx new file mode 100644 index 00000000..c506ff91 --- /dev/null +++ b/ensawards.org/data/apps/robinhood-exchange/icon.tsx @@ -0,0 +1,16 @@ +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/robinhood-exchange/index.ts b/ensawards.org/data/apps/robinhood-exchange/index.ts new file mode 100644 index 00000000..8969a4ec --- /dev/null +++ b/ensawards.org/data/apps/robinhood-exchange/index.ts @@ -0,0 +1,29 @@ +// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md +// for additional advice on adding and modifying apps + +import RobinhoodProject from "data/projects/robinhood"; + +import { defineApp } from "../registry.ts"; +import { type App, AppTypes } from "../types.ts"; +import RobinhoodIcon from "./icon.tsx"; + +const RobinhoodExchange: App = { + id: "robinhood-exchange", + appSlug: "robinhood-exchange", + type: AppTypes.Exchange, + project: RobinhoodProject, + name: "Robinhood", + description: + "Exchange for buying, selling, and trading cryptocurrencies alongside stocks, ETFs, and options.", + socials: { + website: new URL("https://robinhood.com"), + twitter: new URL("https://x.com/robinhoodapp"), + }, + icon: RobinhoodIcon, + ogImagePath: "robinhood-exchange/og.png", + twitterOgImagePath: "robinhood-exchange/twitter-og.png", +}; + +defineApp(RobinhoodExchange); + +export default RobinhoodExchange; diff --git a/ensawards.org/data/apps/robinhood-exchange/og.png b/ensawards.org/data/apps/robinhood-exchange/og.png new file mode 100644 index 00000000..99ced4c0 Binary files /dev/null and b/ensawards.org/data/apps/robinhood-exchange/og.png differ diff --git a/ensawards.org/data/apps/robinhood-exchange/twitter-og.png b/ensawards.org/data/apps/robinhood-exchange/twitter-og.png new file mode 100644 index 00000000..70733a94 Binary files /dev/null and b/ensawards.org/data/apps/robinhood-exchange/twitter-og.png differ diff --git a/ensawards.org/data/apps/robinhood-wallet/benchmarks/correctly-resolve-ensv2-test-name-address-proof.gif b/ensawards.org/data/apps/robinhood-wallet/benchmarks/correctly-resolve-ensv2-test-name-address-proof.gif new file mode 100644 index 00000000..5508d5bd Binary files /dev/null and b/ensawards.org/data/apps/robinhood-wallet/benchmarks/correctly-resolve-ensv2-test-name-address-proof.gif differ diff --git a/ensawards.org/data/apps/robinhood-wallet/benchmarks/index.tsx b/ensawards.org/data/apps/robinhood-wallet/benchmarks/index.tsx new file mode 100644 index 00000000..c8085e24 --- /dev/null +++ b/ensawards.org/data/apps/robinhood-wallet/benchmarks/index.tsx @@ -0,0 +1,54 @@ +// 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 RobinhoodWallet from "data/apps/robinhood-wallet"; +import { defineAppBenchmarks } from "data/benchmarks/registry"; +import { BenchmarkResults } from "data/benchmarks/types"; +import contributors from "data/contributors"; +import { acceptanceTestDetailsContainerStyles } from "data/ens-best-practices/styles"; +import type { BestPracticeBenchmarks } from "data/ens-best-practices/types"; + +import { parseTimestamp } from "@ensnode/ensnode-sdk"; + +import { cn } from "@/utils/tailwindClassConcatenation"; + +import correctlyResolveEnsv2TestNameAddressProofImage from "./correctly-resolve-ensv2-test-name-address-proof.gif"; + +const benchmarks: BestPracticeBenchmarks = { + // TODO: `Contract Naming` category is temporarily hidden due to unfit content, + // and so are all benchmarks belonging to it. + // We aim to fix it as soon as we have the capacity. + // See: https://github.com/namehash/ensawards/issues/222 + "display-named-smart-contracts-mainnet": { + "mainnet-interactions-display-named-smart-contracts": undefined, + }, + "display-named-smart-contracts-l2-chains": { + "l2-chain-interactions-display-named-smart-contracts": undefined, + }, + "ensv2-ready-resolution": { + "correctly-resolve-ensv2-test-name-address": { + result: BenchmarkResults.Fail, + contributions: [ + { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-11T13:26:00Z") }, + ], + notes: ( +
+

+ ENSv2 ready resolution was tested using the "send" flow. The wallet doesn't + allow using ENS name as the recipient identifier, which we interpret as a failure. +

+ Robinhood Wallet doesn't allow ENS name as recipient in the send flow +
+ ), + } as const satisfies AcceptanceTestBenchmark, + }, +}; + +defineAppBenchmarks(RobinhoodWallet, benchmarks); + +export default benchmarks; diff --git a/ensawards.org/data/apps/robinhood-wallet/icon.tsx b/ensawards.org/data/apps/robinhood-wallet/icon.tsx new file mode 100644 index 00000000..3ca8cd84 --- /dev/null +++ b/ensawards.org/data/apps/robinhood-wallet/icon.tsx @@ -0,0 +1,22 @@ +import React from "react"; + +import { cn } from "@/utils/tailwindClassConcatenation"; + +const robinhoodWalletIconDataUri = + "data:image/png;base64,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"; + +const Icon = ({ className, ...props }: React.SVGProps) => ( + + + +); + +export default Icon; diff --git a/ensawards.org/data/apps/robinhood-wallet/index.ts b/ensawards.org/data/apps/robinhood-wallet/index.ts new file mode 100644 index 00000000..25d94aca --- /dev/null +++ b/ensawards.org/data/apps/robinhood-wallet/index.ts @@ -0,0 +1,29 @@ +// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md +// for additional advice on adding and modifying apps + +import RobinhoodProject from "data/projects/robinhood"; + +import { defineApp } from "../registry.ts"; +import { type App, AppTypes } from "../types.ts"; +import RobinhoodIcon from "./icon.tsx"; + +const RobinhoodWallet: App = { + id: "robinhood-wallet", + appSlug: "robinhood-wallet", + type: AppTypes.Wallet, + project: RobinhoodProject, + name: "Robinhood Wallet", + description: + "Self-custodial multi-chain wallet for storing, swapping, and staking digital assets and connecting to decentralized applications.", + socials: { + website: new URL("https://robinhood.com/eu/en/wallet/"), + twitter: new URL("https://x.com/robinhoodapp"), + }, + icon: RobinhoodIcon, + ogImagePath: "robinhood-wallet/og.png", + twitterOgImagePath: "robinhood-wallet/twitter-og.png", +}; + +defineApp(RobinhoodWallet); + +export default RobinhoodWallet; diff --git a/ensawards.org/data/apps/robinhood-wallet/og.png b/ensawards.org/data/apps/robinhood-wallet/og.png new file mode 100644 index 00000000..6e068087 Binary files /dev/null and b/ensawards.org/data/apps/robinhood-wallet/og.png differ diff --git a/ensawards.org/data/apps/robinhood-wallet/twitter-og.png b/ensawards.org/data/apps/robinhood-wallet/twitter-og.png new file mode 100644 index 00000000..ea256506 Binary files /dev/null and b/ensawards.org/data/apps/robinhood-wallet/twitter-og.png differ diff --git a/ensawards.org/data/apps/trust-wallet/index.ts b/ensawards.org/data/apps/trust-wallet/index.ts index 2fdfb083..71add708 100644 --- a/ensawards.org/data/apps/trust-wallet/index.ts +++ b/ensawards.org/data/apps/trust-wallet/index.ts @@ -20,7 +20,8 @@ const TrustWallet: App = { twitter: new URL("https://x.com/trustwallet"), }, icon: TrustWalletIcon, - // TODO: Add OG images + ogImagePath: "trust-wallet/og.png", + twitterOgImagePath: "trust-wallet/twitter-og.png", }; defineApp(TrustWallet); diff --git a/ensawards.org/data/apps/trust-wallet/og.png b/ensawards.org/data/apps/trust-wallet/og.png new file mode 100644 index 00000000..ace1e24e Binary files /dev/null and b/ensawards.org/data/apps/trust-wallet/og.png differ diff --git a/ensawards.org/data/apps/trust-wallet/twitter-og.png b/ensawards.org/data/apps/trust-wallet/twitter-og.png new file mode 100644 index 00000000..7bec40d0 Binary files /dev/null and b/ensawards.org/data/apps/trust-wallet/twitter-og.png differ diff --git a/ensawards.org/data/apps/types.ts b/ensawards.org/data/apps/types.ts index 8e7cd445..490f0f16 100644 --- a/ensawards.org/data/apps/types.ts +++ b/ensawards.org/data/apps/types.ts @@ -11,6 +11,7 @@ export const AppTypes = { Wallet: "wallet", Explorer: "explorer", DeFi: "defi-app", + Exchange: "exchange", } as const; /** diff --git a/ensawards.org/data/apps/utils.test.ts b/ensawards.org/data/apps/utils.test.ts index c13ad2a9..78aca8c1 100644 --- a/ensawards.org/data/apps/utils.test.ts +++ b/ensawards.org/data/apps/utils.test.ts @@ -97,6 +97,7 @@ describe("App utils", () => { expect(asAppType("wallet")).toEqual(AppTypes.Wallet); expect(asAppType("explorer")).toEqual(AppTypes.Explorer); expect(asAppType("defi-app")).toEqual(AppTypes.DeFi); + expect(asAppType("exchange")).toEqual(AppTypes.Exchange); }); it("Should throw an error for an invalid AppType value", () => { @@ -215,7 +216,9 @@ describe("App utils", () => { describe("appliesToAllApps", () => { it("Should return true when all app types are included in targets", () => { - expect(appliesToAllApps([AppTypes.Wallet, AppTypes.Explorer, AppTypes.DeFi])).toEqual(true); + expect( + appliesToAllApps([AppTypes.Wallet, AppTypes.Explorer, AppTypes.DeFi, AppTypes.Exchange]), + ).toEqual(true); }); it("Should return false when not all app types are included in targets", () => { diff --git a/ensawards.org/data/apps/utils.ts b/ensawards.org/data/apps/utils.ts index 36c2ab8e..07f8ea3c 100644 --- a/ensawards.org/data/apps/utils.ts +++ b/ensawards.org/data/apps/utils.ts @@ -29,6 +29,8 @@ export const asAppType = (maybeAppType: string): AppType => { return AppTypes.Explorer; case "defi-app": return AppTypes.DeFi; + case "exchange": + return AppTypes.Exchange; default: throw new Error(`Invalid AppType value: ${maybeAppType}`); } @@ -132,6 +134,10 @@ export const formatAppType = ( formattedType = plural ? "DeFi apps" : "DeFi app"; break; + case AppTypes.Exchange: + formattedType = plural ? "Exchanges" : "Exchange"; + break; + default: const _exhaustive: never = appType; throw new Error(`Unsupported AppType: ${_exhaustive}`); diff --git a/ensawards.org/data/ens-best-practices/ensv2-readiness/ensv2-ready-resolution/index.ts b/ensawards.org/data/ens-best-practices/ensv2-readiness/ensv2-ready-resolution/index.ts index f89294d3..73b7c44a 100644 --- a/ensawards.org/data/ens-best-practices/ensv2-readiness/ensv2-ready-resolution/index.ts +++ b/ensawards.org/data/ens-best-practices/ensv2-readiness/ensv2-ready-resolution/index.ts @@ -18,7 +18,7 @@ const ensv2ReadyResolution: BestPracticeApp = { name: "Correctly Resolve All Names For ENSv2", description: "Make sure your app keeps resolving ENS names correctly once ENSv2 launches.", category: ENSv2ReadinessCategory, - appliesTo: [AppTypes.Wallet, AppTypes.Explorer, AppTypes.DeFi], + appliesTo: [AppTypes.Wallet, AppTypes.Explorer, AppTypes.DeFi, AppTypes.Exchange], technicalDetails: technicalDetails, contributions: [ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-05T13:01:00.000Z") }, diff --git a/ensawards.org/data/ens-best-practices/utils.ts b/ensawards.org/data/ens-best-practices/utils.ts index 55ed4b8c..0cd365cd 100644 --- a/ensawards.org/data/ens-best-practices/utils.ts +++ b/ensawards.org/data/ens-best-practices/utils.ts @@ -155,6 +155,10 @@ export const formatBestPracticeTarget = ( formattedTarget = plural ? "DeFi apps" : "DeFi app"; break; + case AppTypes.Exchange: + formattedTarget = plural ? "Exchanges" : "Exchange"; + break; + case ProtocolTypes.DAO: formattedTarget = plural ? "DAOs" : "DAO"; break; diff --git a/ensawards.org/data/projects/binance/icon.tsx b/ensawards.org/data/projects/binance/icon.tsx new file mode 100644 index 00000000..ecc8c98c --- /dev/null +++ b/ensawards.org/data/projects/binance/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/binance/index.ts b/ensawards.org/data/projects/binance/index.ts new file mode 100644 index 00000000..7a6f8f7e --- /dev/null +++ b/ensawards.org/data/projects/binance/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 BinanceIcon from "./icon.tsx"; + +const BinanceProject: Project = { + id: ProjectIds.Binance, + name: "Binance", + description: + "Global cryptocurrency exchange for trading, buying, and storing digital assets, with a broad suite of Web3 and financial products.", + icon: BinanceIcon, + socials: { + website: new URL("https://www.binance.com"), + twitter: new URL("https://x.com/binance"), + }, +}; + +defineProject(BinanceProject); + +export default BinanceProject; diff --git a/ensawards.org/data/projects/cryptocom/icon.tsx b/ensawards.org/data/projects/cryptocom/icon.tsx new file mode 100644 index 00000000..da8753ab --- /dev/null +++ b/ensawards.org/data/projects/cryptocom/icon.tsx @@ -0,0 +1,22 @@ +import React from "react"; + +import { cn } from "@/utils/tailwindClassConcatenation"; + +const cryptoComIconDataUri = + "data:image/jpeg;base64,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"; + +const Icon = ({ className, ...props }: React.SVGProps) => ( + + + +); + +export default Icon; diff --git a/ensawards.org/data/projects/cryptocom/index.ts b/ensawards.org/data/projects/cryptocom/index.ts new file mode 100644 index 00000000..5f8f694d --- /dev/null +++ b/ensawards.org/data/projects/cryptocom/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 CryptoComIcon from "./icon.tsx"; + +const CryptoComProject: Project = { + id: ProjectIds.CryptoCom, + name: "Crypto.com", + description: + "Cryptocurrency exchange and app for buying, selling, trading, and storing digital assets, with a payment card and other Web3 financial products.", + icon: CryptoComIcon, + socials: { + website: new URL("https://crypto.com"), + twitter: new URL("https://x.com/cryptocom"), + }, +}; + +defineProject(CryptoComProject); + +export default CryptoComProject; diff --git a/ensawards.org/data/projects/frame/icon.tsx b/ensawards.org/data/projects/frame/icon.tsx new file mode 100644 index 00000000..14322956 --- /dev/null +++ b/ensawards.org/data/projects/frame/icon.tsx @@ -0,0 +1,22 @@ +import React from "react"; + +import { cn } from "@/utils/tailwindClassConcatenation"; + +const frameIconDataUri = + "data:image/png;base64,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"; + +const Icon = ({ className, ...props }: React.SVGProps) => ( + + + +); + +export default Icon; diff --git a/ensawards.org/data/projects/frame/index.ts b/ensawards.org/data/projects/frame/index.ts new file mode 100644 index 00000000..8ff84df8 --- /dev/null +++ b/ensawards.org/data/projects/frame/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 FrameIcon from "./icon.tsx"; + +const FrameProject: Project = { + id: ProjectIds.Frame, + name: "Frame", + description: + "A web3 platform that creates a secure, system-wide desktop interface to your chains and accounts, with hardware wallet support and dApp connectivity.", + icon: FrameIcon, + socials: { + website: new URL("https://frame.sh"), + twitter: new URL("https://x.com/0xFrame"), + }, +}; + +defineProject(FrameProject); + +export default FrameProject; diff --git a/ensawards.org/data/projects/gemini/icon.tsx b/ensawards.org/data/projects/gemini/icon.tsx new file mode 100644 index 00000000..65f65339 --- /dev/null +++ b/ensawards.org/data/projects/gemini/icon.tsx @@ -0,0 +1,25 @@ +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/gemini/index.ts b/ensawards.org/data/projects/gemini/index.ts new file mode 100644 index 00000000..e8a987f2 --- /dev/null +++ b/ensawards.org/data/projects/gemini/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 GeminiIcon from "./icon.tsx"; + +const GeminiProject: Project = { + id: ProjectIds.Gemini, + name: "Gemini", + description: + "Cryptocurrency exchange and custody platform for buying, selling, trading, and storing digital assets, with a predictions market, rewards card, and other financial products.", + icon: GeminiIcon, + socials: { + website: new URL("https://www.gemini.com"), + twitter: new URL("https://x.com/gemini"), + }, +}; + +defineProject(GeminiProject); + +export default GeminiProject; diff --git a/ensawards.org/data/projects/kraken/icon.tsx b/ensawards.org/data/projects/kraken/icon.tsx new file mode 100644 index 00000000..9471e4c5 --- /dev/null +++ b/ensawards.org/data/projects/kraken/icon.tsx @@ -0,0 +1,18 @@ +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/kraken/index.ts b/ensawards.org/data/projects/kraken/index.ts new file mode 100644 index 00000000..17c32b74 --- /dev/null +++ b/ensawards.org/data/projects/kraken/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 KrakenIcon from "./icon.tsx"; + +const KrakenProject: Project = { + id: ProjectIds.Kraken, + name: "Kraken", + description: + "Cryptocurrency exchange and financial platform for buying, selling, trading, and storing digital assets.", + icon: KrakenIcon, + socials: { + website: new URL("https://www.kraken.com"), + twitter: new URL("https://x.com/krakenfx"), + }, +}; + +defineProject(KrakenProject); + +export default KrakenProject; diff --git a/ensawards.org/data/projects/okx/icon.tsx b/ensawards.org/data/projects/okx/icon.tsx new file mode 100644 index 00000000..44e9f1ae --- /dev/null +++ b/ensawards.org/data/projects/okx/icon.tsx @@ -0,0 +1,52 @@ +import React from "react"; + +const Icon = (props: React.SVGProps) => ( + + + + + + + + + + + + +); + +export default Icon; diff --git a/ensawards.org/data/projects/okx/index.ts b/ensawards.org/data/projects/okx/index.ts new file mode 100644 index 00000000..cc48ed9c --- /dev/null +++ b/ensawards.org/data/projects/okx/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 OKXIcon from "./icon.tsx"; + +const OKXProject: Project = { + id: ProjectIds.OKX, + name: "OKX", + description: + "Cryptocurrency exchange and Web3 platform for trading, storing, and managing digital assets, with a self-custodial wallet and access to decentralized applications.", + icon: OKXIcon, + socials: { + website: new URL("https://www.okx.com"), + twitter: new URL("https://x.com/okx"), + }, +}; + +defineProject(OKXProject); + +export default OKXProject; diff --git a/ensawards.org/data/projects/robinhood/icon.tsx b/ensawards.org/data/projects/robinhood/icon.tsx new file mode 100644 index 00000000..c506ff91 --- /dev/null +++ b/ensawards.org/data/projects/robinhood/icon.tsx @@ -0,0 +1,16 @@ +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/robinhood/index.ts b/ensawards.org/data/projects/robinhood/index.ts new file mode 100644 index 00000000..58d29c8a --- /dev/null +++ b/ensawards.org/data/projects/robinhood/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 RobinhoodIcon from "./icon.tsx"; + +const RobinhoodProject: Project = { + id: ProjectIds.Robinhood, + name: "Robinhood", + description: + "Investment platform and app for trading stocks, ETFs, options, and cryptocurrencies, with retirement and other financial products.", + icon: RobinhoodIcon, + socials: { + website: new URL("https://robinhood.com"), + twitter: new URL("https://x.com/robinhoodapp"), + }, +}; + +defineProject(RobinhoodProject); + +export default RobinhoodProject; diff --git a/ensawards.org/data/projects/types.ts b/ensawards.org/data/projects/types.ts index 8f5842fb..fcd4a0f4 100644 --- a/ensawards.org/data/projects/types.ts +++ b/ensawards.org/data/projects/types.ts @@ -30,6 +30,13 @@ export const ProjectIds = { Phantom: "project-phantom", OneInch: "project-1inch", Lido: "project-lido", + Binance: "project-binance", + OKX: "project-okx", + Kraken: "project-kraken", + CryptoCom: "project-cryptocom", + Robinhood: "project-robinhood", + Gemini: "project-gemini", + Frame: "project-frame", } as const; /** diff --git a/ensawards.org/src/components/molecules/technicalDetails/benchmark/acceptanceTestResultDetails.tsx b/ensawards.org/src/components/molecules/technicalDetails/benchmark/acceptanceTestResultDetails.tsx index 42dd01a7..feeaa7c5 100644 --- a/ensawards.org/src/components/molecules/technicalDetails/benchmark/acceptanceTestResultDetails.tsx +++ b/ensawards.org/src/components/molecules/technicalDetails/benchmark/acceptanceTestResultDetails.tsx @@ -1,5 +1,11 @@ -import { createEnsNodeProviderOptions, EnsNodeProvider, RelativeTime } from "@namehash/namehash-ui"; +import { + createEnsNodeProviderOptions, + EnsNodeProvider, + RelativeTime, + useNow, +} from "@namehash/namehash-ui"; import type { AcceptanceTestBenchmark } from "data/acceptance-tests/types"; +import { secondsInMinute } from "date-fns/constants"; import { useMemo } from "react"; import { DisplayContributorIdentity } from "@/components/atoms/cards/ContributorsCard"; @@ -14,6 +20,7 @@ export interface AcceptanceTestResultFooterProps { export const AcceptanceTestResultFooter = ({ acceptanceTestBenchmark, }: AcceptanceTestResultFooterProps) => { + const now = useNow({ timeToRefresh: secondsInMinute }); // update every minute const lastBenchmarkUpdate = acceptanceTestBenchmark.contributions.reduce( (latest, contribution) => { return contribution.lastUpdated > latest.lastUpdated ? contribution : latest; @@ -36,7 +43,11 @@ export const AcceptanceTestResultFooter = ({

Test completed{" "} - +

diff --git a/ensawards.org/src/pages/index.astro b/ensawards.org/src/pages/index.astro index 2aa8219f..efcc5f34 100644 --- a/ensawards.org/src/pages/index.astro +++ b/ensawards.org/src/pages/index.astro @@ -40,6 +40,10 @@ const placeIcons = [ .sort((a, b) => sortApps(a.app, b.app)) .slice(0, 3); + if (rankedApps.length === 0) { + return null; + } + return ( =8.5.10 <9.0.0", "smol-toml@<1.6.1": ">=1.6.1 <2.0.0", "brace-expansion@<5.0.6": ">=5.0.6 <6.0.0", - "fast-uri@<3.1.2": ">=3.1.2 <4.0.0" + "fast-uri@<3.1.2": ">=3.1.2 <4.0.0", + "esbuild@<0.28.1": ">=0.28.1 <1.0.0" } } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5050e68d..be65bd06 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -29,6 +29,7 @@ overrides: smol-toml@<1.6.1: '>=1.6.1 <2.0.0' brace-expansion@<5.0.6: '>=5.0.6 <6.0.0' fast-uri@<3.1.2: '>=3.1.2 <4.0.0' + esbuild@<0.28.1: '>=0.28.1 <1.0.0' importers: @@ -479,158 +480,158 @@ packages: peerDependencies: viem: ^2.50.3 - '@esbuild/aix-ppc64@0.27.3': - resolution: {integrity: sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==} + '@esbuild/aix-ppc64@0.28.1': + resolution: {integrity: sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.27.3': - resolution: {integrity: sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==} + '@esbuild/android-arm64@0.28.1': + resolution: {integrity: sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==} engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.27.3': - resolution: {integrity: sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==} + '@esbuild/android-arm@0.28.1': + resolution: {integrity: sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==} engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.27.3': - resolution: {integrity: sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==} + '@esbuild/android-x64@0.28.1': + resolution: {integrity: sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==} engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.27.3': - resolution: {integrity: sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==} + '@esbuild/darwin-arm64@0.28.1': + resolution: {integrity: sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.27.3': - resolution: {integrity: sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==} + '@esbuild/darwin-x64@0.28.1': + resolution: {integrity: sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.27.3': - resolution: {integrity: sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==} + '@esbuild/freebsd-arm64@0.28.1': + resolution: {integrity: sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.27.3': - resolution: {integrity: sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==} + '@esbuild/freebsd-x64@0.28.1': + resolution: {integrity: sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.27.3': - resolution: {integrity: sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==} + '@esbuild/linux-arm64@0.28.1': + resolution: {integrity: sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.27.3': - resolution: {integrity: sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==} + '@esbuild/linux-arm@0.28.1': + resolution: {integrity: sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==} engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.27.3': - resolution: {integrity: sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==} + '@esbuild/linux-ia32@0.28.1': + resolution: {integrity: sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==} engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.27.3': - resolution: {integrity: sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==} + '@esbuild/linux-loong64@0.28.1': + resolution: {integrity: sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==} engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.27.3': - resolution: {integrity: sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==} + '@esbuild/linux-mips64el@0.28.1': + resolution: {integrity: sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.27.3': - resolution: {integrity: sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==} + '@esbuild/linux-ppc64@0.28.1': + resolution: {integrity: sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.27.3': - resolution: {integrity: sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==} + '@esbuild/linux-riscv64@0.28.1': + resolution: {integrity: sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.27.3': - resolution: {integrity: sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==} + '@esbuild/linux-s390x@0.28.1': + resolution: {integrity: sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.27.3': - resolution: {integrity: sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==} + '@esbuild/linux-x64@0.28.1': + resolution: {integrity: sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.27.3': - resolution: {integrity: sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==} + '@esbuild/netbsd-arm64@0.28.1': + resolution: {integrity: sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.27.3': - resolution: {integrity: sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==} + '@esbuild/netbsd-x64@0.28.1': + resolution: {integrity: sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.27.3': - resolution: {integrity: sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==} + '@esbuild/openbsd-arm64@0.28.1': + resolution: {integrity: sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.27.3': - resolution: {integrity: sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==} + '@esbuild/openbsd-x64@0.28.1': + resolution: {integrity: sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/openharmony-arm64@0.27.3': - resolution: {integrity: sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==} + '@esbuild/openharmony-arm64@0.28.1': + resolution: {integrity: sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] - '@esbuild/sunos-x64@0.27.3': - resolution: {integrity: sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==} + '@esbuild/sunos-x64@0.28.1': + resolution: {integrity: sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==} engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.27.3': - resolution: {integrity: sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==} + '@esbuild/win32-arm64@0.28.1': + resolution: {integrity: sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.27.3': - resolution: {integrity: sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==} + '@esbuild/win32-ia32@0.28.1': + resolution: {integrity: sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.27.3': - resolution: {integrity: sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==} + '@esbuild/win32-x64@0.28.1': + resolution: {integrity: sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==} engines: {node: '>=18'} cpu: [x64] os: [win32] @@ -2125,8 +2126,8 @@ packages: es-module-lexer@2.0.0: resolution: {integrity: sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==} - esbuild@0.27.3: - resolution: {integrity: sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==} + esbuild@0.28.1: + resolution: {integrity: sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==} engines: {node: '>=18'} hasBin: true @@ -3641,7 +3642,7 @@ snapshots: '@vercel/nft': 1.5.0(rollup@4.59.0) '@vercel/routing-utils': 5.3.3 astro: 6.4.4(@types/node@22.19.1)(@vercel/functions@3.4.3)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.59.0)(yaml@2.8.3) - esbuild: 0.27.3 + esbuild: 0.28.1 tinyglobby: 0.2.15 transitivePeerDependencies: - '@aws-sdk/credential-provider-web-identity' @@ -3889,82 +3890,82 @@ snapshots: - graphql - typescript - '@esbuild/aix-ppc64@0.27.3': + '@esbuild/aix-ppc64@0.28.1': optional: true - '@esbuild/android-arm64@0.27.3': + '@esbuild/android-arm64@0.28.1': optional: true - '@esbuild/android-arm@0.27.3': + '@esbuild/android-arm@0.28.1': optional: true - '@esbuild/android-x64@0.27.3': + '@esbuild/android-x64@0.28.1': optional: true - '@esbuild/darwin-arm64@0.27.3': + '@esbuild/darwin-arm64@0.28.1': optional: true - '@esbuild/darwin-x64@0.27.3': + '@esbuild/darwin-x64@0.28.1': optional: true - '@esbuild/freebsd-arm64@0.27.3': + '@esbuild/freebsd-arm64@0.28.1': optional: true - '@esbuild/freebsd-x64@0.27.3': + '@esbuild/freebsd-x64@0.28.1': optional: true - '@esbuild/linux-arm64@0.27.3': + '@esbuild/linux-arm64@0.28.1': optional: true - '@esbuild/linux-arm@0.27.3': + '@esbuild/linux-arm@0.28.1': optional: true - '@esbuild/linux-ia32@0.27.3': + '@esbuild/linux-ia32@0.28.1': optional: true - '@esbuild/linux-loong64@0.27.3': + '@esbuild/linux-loong64@0.28.1': optional: true - '@esbuild/linux-mips64el@0.27.3': + '@esbuild/linux-mips64el@0.28.1': optional: true - '@esbuild/linux-ppc64@0.27.3': + '@esbuild/linux-ppc64@0.28.1': optional: true - '@esbuild/linux-riscv64@0.27.3': + '@esbuild/linux-riscv64@0.28.1': optional: true - '@esbuild/linux-s390x@0.27.3': + '@esbuild/linux-s390x@0.28.1': optional: true - '@esbuild/linux-x64@0.27.3': + '@esbuild/linux-x64@0.28.1': optional: true - '@esbuild/netbsd-arm64@0.27.3': + '@esbuild/netbsd-arm64@0.28.1': optional: true - '@esbuild/netbsd-x64@0.27.3': + '@esbuild/netbsd-x64@0.28.1': optional: true - '@esbuild/openbsd-arm64@0.27.3': + '@esbuild/openbsd-arm64@0.28.1': optional: true - '@esbuild/openbsd-x64@0.27.3': + '@esbuild/openbsd-x64@0.28.1': optional: true - '@esbuild/openharmony-arm64@0.27.3': + '@esbuild/openharmony-arm64@0.28.1': optional: true - '@esbuild/sunos-x64@0.27.3': + '@esbuild/sunos-x64@0.28.1': optional: true - '@esbuild/win32-arm64@0.27.3': + '@esbuild/win32-arm64@0.28.1': optional: true - '@esbuild/win32-ia32@0.27.3': + '@esbuild/win32-ia32@0.28.1': optional: true - '@esbuild/win32-x64@0.27.3': + '@esbuild/win32-x64@0.28.1': optional: true '@floating-ui/core@1.7.3': @@ -5129,7 +5130,7 @@ snapshots: diff: 8.0.3 dset: 3.1.4 es-module-lexer: 2.0.0 - esbuild: 0.27.3 + esbuild: 0.28.1 flattie: 1.1.1 fontace: 0.4.1 get-tsconfig: 5.0.0-beta.4 @@ -5402,34 +5403,34 @@ snapshots: es-module-lexer@2.0.0: {} - esbuild@0.27.3: + esbuild@0.28.1: optionalDependencies: - '@esbuild/aix-ppc64': 0.27.3 - '@esbuild/android-arm': 0.27.3 - '@esbuild/android-arm64': 0.27.3 - '@esbuild/android-x64': 0.27.3 - '@esbuild/darwin-arm64': 0.27.3 - '@esbuild/darwin-x64': 0.27.3 - '@esbuild/freebsd-arm64': 0.27.3 - '@esbuild/freebsd-x64': 0.27.3 - '@esbuild/linux-arm': 0.27.3 - '@esbuild/linux-arm64': 0.27.3 - '@esbuild/linux-ia32': 0.27.3 - '@esbuild/linux-loong64': 0.27.3 - '@esbuild/linux-mips64el': 0.27.3 - '@esbuild/linux-ppc64': 0.27.3 - '@esbuild/linux-riscv64': 0.27.3 - '@esbuild/linux-s390x': 0.27.3 - '@esbuild/linux-x64': 0.27.3 - '@esbuild/netbsd-arm64': 0.27.3 - '@esbuild/netbsd-x64': 0.27.3 - '@esbuild/openbsd-arm64': 0.27.3 - '@esbuild/openbsd-x64': 0.27.3 - '@esbuild/openharmony-arm64': 0.27.3 - '@esbuild/sunos-x64': 0.27.3 - '@esbuild/win32-arm64': 0.27.3 - '@esbuild/win32-ia32': 0.27.3 - '@esbuild/win32-x64': 0.27.3 + '@esbuild/aix-ppc64': 0.28.1 + '@esbuild/android-arm': 0.28.1 + '@esbuild/android-arm64': 0.28.1 + '@esbuild/android-x64': 0.28.1 + '@esbuild/darwin-arm64': 0.28.1 + '@esbuild/darwin-x64': 0.28.1 + '@esbuild/freebsd-arm64': 0.28.1 + '@esbuild/freebsd-x64': 0.28.1 + '@esbuild/linux-arm': 0.28.1 + '@esbuild/linux-arm64': 0.28.1 + '@esbuild/linux-ia32': 0.28.1 + '@esbuild/linux-loong64': 0.28.1 + '@esbuild/linux-mips64el': 0.28.1 + '@esbuild/linux-ppc64': 0.28.1 + '@esbuild/linux-riscv64': 0.28.1 + '@esbuild/linux-s390x': 0.28.1 + '@esbuild/linux-x64': 0.28.1 + '@esbuild/netbsd-arm64': 0.28.1 + '@esbuild/netbsd-x64': 0.28.1 + '@esbuild/openbsd-arm64': 0.28.1 + '@esbuild/openbsd-x64': 0.28.1 + '@esbuild/openharmony-arm64': 0.28.1 + '@esbuild/sunos-x64': 0.28.1 + '@esbuild/win32-arm64': 0.28.1 + '@esbuild/win32-ia32': 0.28.1 + '@esbuild/win32-x64': 0.28.1 escalade@3.2.0: {} @@ -6727,7 +6728,7 @@ snapshots: vite@7.3.2(@types/node@22.19.1)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.3): dependencies: - esbuild: 0.27.3 + esbuild: 0.28.1 fdir: 6.5.0(picomatch@4.0.4) picomatch: 4.0.4 postcss: 8.5.12 @@ -6742,7 +6743,7 @@ snapshots: vite@7.3.2(@types/node@24.12.0)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.3): dependencies: - esbuild: 0.27.3 + esbuild: 0.28.1 fdir: 6.5.0(picomatch@4.0.4) picomatch: 4.0.4 postcss: 8.5.12