diff --git a/ensawards.org/data/apps/1inch-wallet/benchmarks/index.tsx b/ensawards.org/data/apps/1inch-wallet/benchmarks/index.tsx
new file mode 100644
index 00000000..d02ff3df
--- /dev/null
+++ b/ensawards.org/data/apps/1inch-wallet/benchmarks/index.tsx
@@ -0,0 +1,29 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying app benchmarks
+
+import OneInchWallet from "data/apps/1inch-wallet";
+import { defineAppBenchmarks } from "data/benchmarks/registry";
+import type { BestPracticeBenchmarks } from "data/ens-best-practices/types";
+
+import depositAddresses from "./resolution/deposit-addresses";
+import ensv2ReadyResolution from "./resolution/ensv2-ready-resolution";
+
+const benchmarks = {
+ "ensv2-ready-resolution": ensv2ReadyResolution,
+ "deposit-addresses": depositAddresses,
+
+ // 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,
+ },
+} as const satisfies BestPracticeBenchmarks;
+
+defineAppBenchmarks(OneInchWallet, benchmarks);
+
+export default benchmarks;
diff --git a/ensawards.org/data/apps/1inch-wallet/benchmarks/resolution/deposit-addresses/at-1.png b/ensawards.org/data/apps/1inch-wallet/benchmarks/resolution/deposit-addresses/at-1.png
new file mode 100644
index 00000000..7e8ee730
Binary files /dev/null and b/ensawards.org/data/apps/1inch-wallet/benchmarks/resolution/deposit-addresses/at-1.png differ
diff --git a/ensawards.org/data/apps/1inch-wallet/benchmarks/resolution/deposit-addresses/at-2.gif b/ensawards.org/data/apps/1inch-wallet/benchmarks/resolution/deposit-addresses/at-2.gif
new file mode 100644
index 00000000..93e25ac3
Binary files /dev/null and b/ensawards.org/data/apps/1inch-wallet/benchmarks/resolution/deposit-addresses/at-2.gif differ
diff --git a/ensawards.org/data/apps/1inch-wallet/benchmarks/resolution/deposit-addresses/at-3.gif b/ensawards.org/data/apps/1inch-wallet/benchmarks/resolution/deposit-addresses/at-3.gif
new file mode 100644
index 00000000..4c9b16ec
Binary files /dev/null and b/ensawards.org/data/apps/1inch-wallet/benchmarks/resolution/deposit-addresses/at-3.gif differ
diff --git a/ensawards.org/data/apps/1inch-wallet/benchmarks/resolution/deposit-addresses/at-4.gif b/ensawards.org/data/apps/1inch-wallet/benchmarks/resolution/deposit-addresses/at-4.gif
new file mode 100644
index 00000000..c3ebf369
Binary files /dev/null and b/ensawards.org/data/apps/1inch-wallet/benchmarks/resolution/deposit-addresses/at-4.gif differ
diff --git a/ensawards.org/data/apps/1inch-wallet/benchmarks/resolution/deposit-addresses/at-5.png b/ensawards.org/data/apps/1inch-wallet/benchmarks/resolution/deposit-addresses/at-5.png
new file mode 100644
index 00000000..d04fd1fc
Binary files /dev/null and b/ensawards.org/data/apps/1inch-wallet/benchmarks/resolution/deposit-addresses/at-5.png differ
diff --git a/ensawards.org/data/apps/1inch-wallet/benchmarks/resolution/deposit-addresses/at-7.png b/ensawards.org/data/apps/1inch-wallet/benchmarks/resolution/deposit-addresses/at-7.png
new file mode 100644
index 00000000..3a38e335
Binary files /dev/null and b/ensawards.org/data/apps/1inch-wallet/benchmarks/resolution/deposit-addresses/at-7.png differ
diff --git a/ensawards.org/data/apps/1inch-wallet/benchmarks/resolution/deposit-addresses/index.tsx b/ensawards.org/data/apps/1inch-wallet/benchmarks/resolution/deposit-addresses/index.tsx
new file mode 100644
index 00000000..d89ce622
--- /dev/null
+++ b/ensawards.org/data/apps/1inch-wallet/benchmarks/resolution/deposit-addresses/index.tsx
@@ -0,0 +1,126 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying app benchmarks
+
+import { type AcceptanceTestBenchmarks, BenchmarkResults } from "data/benchmarks/types";
+import contributors from "data/contributors";
+import {
+ buildFailNoteForAT2,
+ buildFailNoteForAT5,
+ buildFailNoteForAT7,
+ buildNotApplicableForFailedTest,
+ buildNotApplicableForNonEvmChain,
+ buildPassNoteForAT1,
+ buildPassNoteForAT3,
+ buildPassNoteForAT4,
+} from "data/ens-best-practices/resolution/deposit-addresses/notes";
+
+import { parseTimestamp } from "@ensnode/ensnode-sdk";
+
+import at1Proof from "./at-1.png";
+import at2Proof from "./at-2.gif";
+import at3Proof from "./at-3.gif";
+import at4Proof from "./at-4.gif";
+import at5Proof from "./at-5.png";
+import at7Proof from "./at-7.png";
+
+const method = 'the "send" flow';
+
+const depositAddresses = {
+ "at01-resolve-onchain-name": {
+ result: BenchmarkResults.Pass,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-02T10:20:57Z") },
+ ],
+ notes: buildPassNoteForAT1({
+ method,
+ proof: {
+ image: at1Proof,
+ alt: "1inch Wallet correctly resolves the address for vitalik.eth",
+ },
+ }),
+ },
+ "at02-resolve-name-needing-normalization": {
+ result: BenchmarkResults.Fail,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-02T10:20:57Z") },
+ ],
+ notes: buildFailNoteForAT2({
+ method,
+ proof: {
+ image: at2Proof,
+ alt: "1inch Wallet fails to resolve the address for Ξthereum.eth",
+ },
+ extra: "The app blocked the send operation from continuing.",
+ }),
+ },
+ "at03-resolve-offchain-eth-subname": {
+ result: BenchmarkResults.Pass,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-02T10:20:57Z") },
+ ],
+ notes: buildPassNoteForAT3({
+ method,
+ proof: {
+ image: at3Proof,
+ alt: "1inch Wallet correctly resolves the address for jesse.base.eth",
+ },
+ }),
+ },
+ "at04-resolve-offchain-dns-name": {
+ result: BenchmarkResults.Pass,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-02T10:20:57Z") },
+ ],
+ notes: buildPassNoteForAT4({
+ method,
+ proof: {
+ image: at4Proof,
+ alt: "1inch Wallet correctly resolves the address for dperri.com",
+ },
+ }),
+ },
+ "at05-resolve-name-on-other-evm-chain": {
+ result: BenchmarkResults.Fail,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-02T10:20:57Z") },
+ ],
+ notes: buildFailNoteForAT5({
+ method,
+ proof: {
+ image: at5Proof,
+ alt: "1inch Wallet fails to resolve the address for lightkeeper.eth on the Base chain",
+ },
+ extra: "The app resolved to the Ethereum Mainnet address instead of the Base address.",
+ }),
+ },
+ "at06-resolve-bitcoin-address": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-02T10:20:57Z") },
+ ],
+ notes: buildNotApplicableForNonEvmChain({ chain: "Bitcoin" }),
+ },
+ "at07-resolve-solana-address": {
+ result: BenchmarkResults.Fail,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-02T10:20:57Z") },
+ ],
+ notes: buildFailNoteForAT7({
+ method: 'the "send" flow in context of the Solana chain',
+ proof: {
+ image: at7Proof,
+ alt: "1inch Wallet fails to resolve the Solana address for gregskril.eth",
+ },
+ extra: 'The app showed the message "Incompatible network".',
+ }),
+ },
+ "at08-handle-invalid-address-format": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-02T10:20:57Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 5, scope: "on Base" }),
+ },
+} as const satisfies AcceptanceTestBenchmarks;
+
+export default depositAddresses;
diff --git a/ensawards.org/data/apps/1inch-wallet/benchmarks/resolution/ensv2-ready-resolution/at-1.png b/ensawards.org/data/apps/1inch-wallet/benchmarks/resolution/ensv2-ready-resolution/at-1.png
new file mode 100644
index 00000000..d144b65b
Binary files /dev/null and b/ensawards.org/data/apps/1inch-wallet/benchmarks/resolution/ensv2-ready-resolution/at-1.png differ
diff --git a/ensawards.org/data/apps/1inch-wallet/benchmarks/resolution/ensv2-ready-resolution/index.tsx b/ensawards.org/data/apps/1inch-wallet/benchmarks/resolution/ensv2-ready-resolution/index.tsx
new file mode 100644
index 00000000..c3638807
--- /dev/null
+++ b/ensawards.org/data/apps/1inch-wallet/benchmarks/resolution/ensv2-ready-resolution/index.tsx
@@ -0,0 +1,45 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying app benchmarks
+
+import type { AcceptanceTestBenchmark } from "data/acceptance-tests/types";
+import type { AcceptanceTestBenchmarks } from "data/benchmarks/types";
+import { BenchmarkResults } from "data/benchmarks/types";
+import contributors from "data/contributors";
+import {
+ acceptanceTestDetailsContainerStyles,
+ bestPracticeTechnicalDetailsCodeStyles,
+} from "data/ens-best-practices/styles";
+
+import { parseTimestamp } from "@ensnode/ensnode-sdk";
+
+import { cn } from "@/utils/tailwindClassConcatenation";
+
+import at1ProofImage from "./at-1.png";
+
+const ensv2ReadyResolution = {
+ "correctly-resolve-ensv2-test-name-address": {
+ result: BenchmarkResults.Fail,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-02T09:32:00Z") },
+ ],
+ notes: (
+
+
+ ENSv2 ready resolution was tested using the "send" flow. The resolved address is{" "}
+ NOT the expected Ethereum Mainnet address (
+
+ 0x2222222222222222222222222222222222222222
+
+ ).
+
+
+
+ ),
+ } as const satisfies AcceptanceTestBenchmark,
+} as const satisfies AcceptanceTestBenchmarks;
+
+export default ensv2ReadyResolution;
diff --git a/ensawards.org/data/apps/1inch-wallet/icon.tsx b/ensawards.org/data/apps/1inch-wallet/icon.tsx
new file mode 100644
index 00000000..a25ec214
--- /dev/null
+++ b/ensawards.org/data/apps/1inch-wallet/icon.tsx
@@ -0,0 +1,21 @@
+import React from "react";
+
+const Icon = ({ className, ...props }: React.SVGProps) => (
+
+);
+
+export default Icon;
diff --git a/ensawards.org/data/apps/1inch-wallet/index.ts b/ensawards.org/data/apps/1inch-wallet/index.ts
new file mode 100644
index 00000000..196720bb
--- /dev/null
+++ b/ensawards.org/data/apps/1inch-wallet/index.ts
@@ -0,0 +1,28 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying apps
+
+import OneInchProject from "data/projects/1inch";
+
+import { defineApp } from "../registry.ts";
+import { type App, AppTypes } from "../types.ts";
+import OneInchIcon from "./icon.tsx";
+
+const OneInchWallet: App = {
+ id: "1inch-wallet",
+ appSlug: "1inch-wallet",
+ type: AppTypes.Wallet,
+ project: OneInchProject,
+ name: "1inch Wallet",
+ description:
+ "Self-custodial wallet for swapping, sending, and managing digital assets across Solana and EVM chains, with built-in access to 1inch DeFi trading.",
+ socials: {
+ website: new URL("https://1inch.com/wallet"),
+ twitter: new URL("https://x.com/1inch"),
+ },
+ icon: OneInchIcon,
+ // TODO: Add OG images
+};
+
+defineApp(OneInchWallet);
+
+export default OneInchWallet;
diff --git a/ensawards.org/data/apps/bitget-wallet/benchmarks/index.tsx b/ensawards.org/data/apps/bitget-wallet/benchmarks/index.tsx
new file mode 100644
index 00000000..06688fff
--- /dev/null
+++ b/ensawards.org/data/apps/bitget-wallet/benchmarks/index.tsx
@@ -0,0 +1,29 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying app benchmarks
+
+import BitgetWallet from "data/apps/bitget-wallet";
+import { defineAppBenchmarks } from "data/benchmarks/registry";
+import type { BestPracticeBenchmarks } from "data/ens-best-practices/types";
+
+import depositAddresses from "./resolution/deposit-addresses";
+import ensv2ReadyResolution from "./resolution/ensv2-ready-resolution";
+
+const benchmarks = {
+ "ensv2-ready-resolution": ensv2ReadyResolution,
+ "deposit-addresses": depositAddresses,
+
+ // 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,
+ },
+} as const satisfies BestPracticeBenchmarks;
+
+defineAppBenchmarks(BitgetWallet, benchmarks);
+
+export default benchmarks;
diff --git a/ensawards.org/data/apps/bitget-wallet/benchmarks/resolution/deposit-addresses/at-1.png b/ensawards.org/data/apps/bitget-wallet/benchmarks/resolution/deposit-addresses/at-1.png
new file mode 100644
index 00000000..6f8f6109
Binary files /dev/null and b/ensawards.org/data/apps/bitget-wallet/benchmarks/resolution/deposit-addresses/at-1.png differ
diff --git a/ensawards.org/data/apps/bitget-wallet/benchmarks/resolution/deposit-addresses/at-2.png b/ensawards.org/data/apps/bitget-wallet/benchmarks/resolution/deposit-addresses/at-2.png
new file mode 100644
index 00000000..26cf138b
Binary files /dev/null and b/ensawards.org/data/apps/bitget-wallet/benchmarks/resolution/deposit-addresses/at-2.png differ
diff --git a/ensawards.org/data/apps/bitget-wallet/benchmarks/resolution/deposit-addresses/at-3.png b/ensawards.org/data/apps/bitget-wallet/benchmarks/resolution/deposit-addresses/at-3.png
new file mode 100644
index 00000000..6c2d5353
Binary files /dev/null and b/ensawards.org/data/apps/bitget-wallet/benchmarks/resolution/deposit-addresses/at-3.png differ
diff --git a/ensawards.org/data/apps/bitget-wallet/benchmarks/resolution/deposit-addresses/at-4.png b/ensawards.org/data/apps/bitget-wallet/benchmarks/resolution/deposit-addresses/at-4.png
new file mode 100644
index 00000000..16d509f0
Binary files /dev/null and b/ensawards.org/data/apps/bitget-wallet/benchmarks/resolution/deposit-addresses/at-4.png differ
diff --git a/ensawards.org/data/apps/bitget-wallet/benchmarks/resolution/deposit-addresses/at-5.png b/ensawards.org/data/apps/bitget-wallet/benchmarks/resolution/deposit-addresses/at-5.png
new file mode 100644
index 00000000..0c1253bd
Binary files /dev/null and b/ensawards.org/data/apps/bitget-wallet/benchmarks/resolution/deposit-addresses/at-5.png differ
diff --git a/ensawards.org/data/apps/bitget-wallet/benchmarks/resolution/deposit-addresses/at-6.png b/ensawards.org/data/apps/bitget-wallet/benchmarks/resolution/deposit-addresses/at-6.png
new file mode 100644
index 00000000..7674f194
Binary files /dev/null and b/ensawards.org/data/apps/bitget-wallet/benchmarks/resolution/deposit-addresses/at-6.png differ
diff --git a/ensawards.org/data/apps/bitget-wallet/benchmarks/resolution/deposit-addresses/at-7.png b/ensawards.org/data/apps/bitget-wallet/benchmarks/resolution/deposit-addresses/at-7.png
new file mode 100644
index 00000000..9ee0578c
Binary files /dev/null and b/ensawards.org/data/apps/bitget-wallet/benchmarks/resolution/deposit-addresses/at-7.png differ
diff --git a/ensawards.org/data/apps/bitget-wallet/benchmarks/resolution/deposit-addresses/index.tsx b/ensawards.org/data/apps/bitget-wallet/benchmarks/resolution/deposit-addresses/index.tsx
new file mode 100644
index 00000000..ab42ea42
--- /dev/null
+++ b/ensawards.org/data/apps/bitget-wallet/benchmarks/resolution/deposit-addresses/index.tsx
@@ -0,0 +1,135 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying app benchmarks
+
+import { type AcceptanceTestBenchmarks, BenchmarkResults } from "data/benchmarks/types";
+import contributors from "data/contributors";
+import {
+ buildFailNoteForAT3,
+ buildFailNoteForAT4,
+ buildFailNoteForAT5,
+ buildFailNoteForAT6,
+ buildFailNoteForAT7,
+ buildNotApplicableForFailedTest,
+ buildPassNoteForAT1,
+ buildPassNoteForAT2,
+} from "data/ens-best-practices/resolution/deposit-addresses/notes";
+
+import { parseTimestamp } from "@ensnode/ensnode-sdk";
+
+import at1Proof from "./at-1.png";
+import at2Proof from "./at-2.png";
+import at3Proof from "./at-3.png";
+import at4Proof from "./at-4.png";
+import at5Proof from "./at-5.png";
+import at6Proof from "./at-6.png";
+import at7Proof from "./at-7.png";
+
+const method = 'the "send" flow';
+
+const depositAddresses = {
+ "at01-resolve-onchain-name": {
+ result: BenchmarkResults.Pass,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-02T11:06:01Z") },
+ ],
+ notes: buildPassNoteForAT1({
+ method,
+ proof: {
+ image: at1Proof,
+ alt: "Bitget Wallet correctly resolves the address for vitalik.eth",
+ },
+ }),
+ },
+ "at02-resolve-name-needing-normalization": {
+ result: BenchmarkResults.Pass,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-02T11:06:01Z") },
+ ],
+ notes: buildPassNoteForAT2({
+ method,
+ proof: {
+ image: at2Proof,
+ alt: "Bitget Wallet correctly resolves the address for Ξthereum.eth",
+ },
+ }),
+ },
+ "at03-resolve-offchain-eth-subname": {
+ result: BenchmarkResults.Fail,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-02T11:06:01Z") },
+ ],
+ notes: buildFailNoteForAT3({
+ method,
+ proof: {
+ image: at3Proof,
+ alt: "Bitget Wallet fails to resolve the address for jesse.base.eth",
+ },
+ extra: 'The app showed the message "Invalid address".',
+ }),
+ },
+ "at04-resolve-offchain-dns-name": {
+ result: BenchmarkResults.Fail,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-02T11:06:01Z") },
+ ],
+ notes: buildFailNoteForAT4({
+ method,
+ proof: {
+ image: at4Proof,
+ alt: "Bitget Wallet fails to resolve the address for dperri.com",
+ },
+ extra: 'The app showed the message "Invalid address".',
+ }),
+ },
+ "at05-resolve-name-on-other-evm-chain": {
+ result: BenchmarkResults.Fail,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-02T11:06:01Z") },
+ ],
+ notes: buildFailNoteForAT5({
+ method,
+ proof: {
+ image: at5Proof,
+ alt: "Bitget Wallet fails to resolve the address for lightkeeper.eth on the Base chain",
+ },
+ extra: "The app resolved to the Ethereum Mainnet address instead of the Base address.",
+ }),
+ },
+ "at06-resolve-bitcoin-address": {
+ result: BenchmarkResults.Fail,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-02T11:06:01Z") },
+ ],
+ notes: buildFailNoteForAT6({
+ method: 'the "send" flow in context of the Bitcoin chain',
+ proof: {
+ image: at6Proof,
+ alt: "Bitget Wallet fails to resolve the Bitcoin address for gregskril.eth",
+ },
+ extra: 'The app showed the message "Invalid address".',
+ }),
+ },
+ "at07-resolve-solana-address": {
+ result: BenchmarkResults.Fail,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-02T11:06:01Z") },
+ ],
+ notes: buildFailNoteForAT7({
+ method: 'the "send" flow in context of the Solana chain',
+ proof: {
+ image: at7Proof,
+ alt: "Bitget Wallet fails to resolve the Solana address for gregskril.eth",
+ },
+ extra: 'The app showed the message "Invalid address".',
+ }),
+ },
+ "at08-handle-invalid-address-format": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-02T11:06:01Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 5, scope: "on Base" }),
+ },
+} as const satisfies AcceptanceTestBenchmarks;
+
+export default depositAddresses;
diff --git a/ensawards.org/data/apps/bitget-wallet/benchmarks/resolution/ensv2-ready-resolution/at-1.png b/ensawards.org/data/apps/bitget-wallet/benchmarks/resolution/ensv2-ready-resolution/at-1.png
new file mode 100644
index 00000000..b565818b
Binary files /dev/null and b/ensawards.org/data/apps/bitget-wallet/benchmarks/resolution/ensv2-ready-resolution/at-1.png differ
diff --git a/ensawards.org/data/apps/bitget-wallet/benchmarks/resolution/ensv2-ready-resolution/index.tsx b/ensawards.org/data/apps/bitget-wallet/benchmarks/resolution/ensv2-ready-resolution/index.tsx
new file mode 100644
index 00000000..ce53adc6
--- /dev/null
+++ b/ensawards.org/data/apps/bitget-wallet/benchmarks/resolution/ensv2-ready-resolution/index.tsx
@@ -0,0 +1,42 @@
+import type { AcceptanceTestBenchmark } from "data/acceptance-tests/types";
+import type { AcceptanceTestBenchmarks } from "data/benchmarks/types";
+import { BenchmarkResults } from "data/benchmarks/types";
+import contributors from "data/contributors";
+import {
+ acceptanceTestDetailsContainerStyles,
+ bestPracticeTechnicalDetailsCodeStyles,
+} from "data/ens-best-practices/styles";
+
+import { parseTimestamp } from "@ensnode/ensnode-sdk";
+
+import { cn } from "@/utils/tailwindClassConcatenation";
+
+import at1ProofImage from "./at-1.png";
+
+const ensv2ReadyResolution = {
+ "correctly-resolve-ensv2-test-name-address": {
+ result: BenchmarkResults.Fail,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-02T10:52:03Z") },
+ ],
+ notes: (
+
+
+ ENSv2 ready resolution was tested using the "send" flow. The resolved address is{" "}
+ NOT the expected Ethereum Mainnet address (
+
+ 0x2222222222222222222222222222222222222222
+
+ ).
+
+
+
+ ),
+ } as const satisfies AcceptanceTestBenchmark,
+} as const satisfies AcceptanceTestBenchmarks;
+
+export default ensv2ReadyResolution;
diff --git a/ensawards.org/data/apps/bitget-wallet/icon.tsx b/ensawards.org/data/apps/bitget-wallet/icon.tsx
new file mode 100644
index 00000000..8e17b08a
--- /dev/null
+++ b/ensawards.org/data/apps/bitget-wallet/icon.tsx
@@ -0,0 +1,23 @@
+import React from "react";
+
+const Icon = (props: React.SVGProps) => (
+
+);
+
+export default Icon;
diff --git a/ensawards.org/data/apps/bitget-wallet/index.ts b/ensawards.org/data/apps/bitget-wallet/index.ts
new file mode 100644
index 00000000..2fa92d47
--- /dev/null
+++ b/ensawards.org/data/apps/bitget-wallet/index.ts
@@ -0,0 +1,28 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying apps
+
+import BitgetProject from "data/projects/bitget";
+
+import { defineApp } from "../registry.ts";
+import { type App, AppTypes } from "../types.ts";
+import BitgetIcon from "./icon.tsx";
+
+const BitgetWallet: App = {
+ id: "bitget-wallet",
+ appSlug: "bitget-wallet",
+ type: AppTypes.Wallet,
+ project: BitgetProject,
+ name: "Bitget Wallet",
+ description:
+ "Self-custodial Web3 wallet for managing digital assets, swapping tokens, and interacting with decentralized applications across multiple chains.",
+ socials: {
+ website: new URL("https://web3.bitget.com/"),
+ twitter: new URL("https://x.com/bitget"),
+ },
+ icon: BitgetIcon,
+ // TODO: Add OG images
+};
+
+defineApp(BitgetWallet);
+
+export default BitgetWallet;
diff --git a/ensawards.org/data/apps/enkrypt-wallet/benchmarks/index.tsx b/ensawards.org/data/apps/enkrypt-wallet/benchmarks/index.tsx
new file mode 100644
index 00000000..69416e42
--- /dev/null
+++ b/ensawards.org/data/apps/enkrypt-wallet/benchmarks/index.tsx
@@ -0,0 +1,29 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying app benchmarks
+
+import EnkryptWallet from "data/apps/enkrypt-wallet";
+import { defineAppBenchmarks } from "data/benchmarks/registry";
+import type { BestPracticeBenchmarks } from "data/ens-best-practices/types";
+
+import depositAddresses from "./resolution/deposit-addresses";
+import ensv2ReadyResolution from "./resolution/ensv2-ready-resolution";
+
+const benchmarks = {
+ "ensv2-ready-resolution": ensv2ReadyResolution,
+ "deposit-addresses": depositAddresses,
+
+ // 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,
+ },
+} as const satisfies BestPracticeBenchmarks;
+
+defineAppBenchmarks(EnkryptWallet, benchmarks);
+
+export default benchmarks;
diff --git a/ensawards.org/data/apps/enkrypt-wallet/benchmarks/resolution/deposit-addresses/at-1.gif b/ensawards.org/data/apps/enkrypt-wallet/benchmarks/resolution/deposit-addresses/at-1.gif
new file mode 100644
index 00000000..d0211ffb
Binary files /dev/null and b/ensawards.org/data/apps/enkrypt-wallet/benchmarks/resolution/deposit-addresses/at-1.gif differ
diff --git a/ensawards.org/data/apps/enkrypt-wallet/benchmarks/resolution/deposit-addresses/index.tsx b/ensawards.org/data/apps/enkrypt-wallet/benchmarks/resolution/deposit-addresses/index.tsx
new file mode 100644
index 00000000..5a82dac3
--- /dev/null
+++ b/ensawards.org/data/apps/enkrypt-wallet/benchmarks/resolution/deposit-addresses/index.tsx
@@ -0,0 +1,80 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying app benchmarks
+
+import { type AcceptanceTestBenchmarks, BenchmarkResults } from "data/benchmarks/types";
+import contributors from "data/contributors";
+import {
+ buildEnsNotSupportedNote,
+ buildNotApplicableForFailedTest,
+} from "data/ens-best-practices/resolution/deposit-addresses/notes";
+
+import { parseTimestamp } from "@ensnode/ensnode-sdk";
+
+import at1Proof from "./at-1.gif";
+
+const depositAddresses = {
+ "at01-resolve-onchain-name": {
+ result: BenchmarkResults.Fail,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-02T14:38:30Z") },
+ ],
+ notes: buildEnsNotSupportedNote({
+ method: 'the "send" flow',
+ proof: {
+ image: at1Proof,
+ alt: "Enkrypt Wallet doesn't allow ENS names as the recipient in the send flow",
+ },
+ }),
+ },
+ "at02-resolve-name-needing-normalization": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-02T14:38:30Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+ "at03-resolve-offchain-eth-subname": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-02T14:38:30Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+ "at04-resolve-offchain-dns-name": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-02T14:38:30Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+ "at05-resolve-name-on-other-evm-chain": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-02T14:38:30Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+ "at06-resolve-bitcoin-address": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-02T14:38:30Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+ "at07-resolve-solana-address": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-02T14:38:30Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+ "at08-handle-invalid-address-format": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-02T14:38:30Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+} as const satisfies AcceptanceTestBenchmarks;
+
+export default depositAddresses;
diff --git a/ensawards.org/data/apps/enkrypt-wallet/benchmarks/resolution/ensv2-ready-resolution/at-1.gif b/ensawards.org/data/apps/enkrypt-wallet/benchmarks/resolution/ensv2-ready-resolution/at-1.gif
new file mode 100644
index 00000000..73c4f601
Binary files /dev/null and b/ensawards.org/data/apps/enkrypt-wallet/benchmarks/resolution/ensv2-ready-resolution/at-1.gif differ
diff --git a/ensawards.org/data/apps/enkrypt-wallet/benchmarks/resolution/ensv2-ready-resolution/index.tsx b/ensawards.org/data/apps/enkrypt-wallet/benchmarks/resolution/ensv2-ready-resolution/index.tsx
new file mode 100644
index 00000000..bd31b411
--- /dev/null
+++ b/ensawards.org/data/apps/enkrypt-wallet/benchmarks/resolution/ensv2-ready-resolution/index.tsx
@@ -0,0 +1,44 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying app benchmarks
+
+import type { AcceptanceTestBenchmark } from "data/acceptance-tests/types";
+import type { AcceptanceTestBenchmarks } from "data/benchmarks/types";
+import { BenchmarkResults } from "data/benchmarks/types";
+import contributors from "data/contributors";
+import { acceptanceTestDetailsContainerStyles } from "data/ens-best-practices/styles";
+
+import { parseTimestamp } from "@ensnode/ensnode-sdk";
+
+import { cn } from "@/utils/tailwindClassConcatenation";
+
+import at1ProofImage from "./at-1.gif";
+
+const ensv2ReadyResolution = {
+ "correctly-resolve-ensv2-test-name-address": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-02T14:09:06Z") },
+ ],
+ notes: (
+
+
+ ENSv2 ready resolution was tested using the "send" flow. The app doesn't support
+ the use of ENS names at all as the recipient identifier.
+
+
+ While that's a key issue that this app is encouraged to improve, this best practice is
+ applicable specifically to apps that already have an existing ENS integration and making
+ sure existing integrations are ENSv2 compatible. Therefore, for this best practice we
+ apply a rating of not applicable.
+
+
+
+ ),
+ } as const satisfies AcceptanceTestBenchmark,
+} as const satisfies AcceptanceTestBenchmarks;
+
+export default ensv2ReadyResolution;
diff --git a/ensawards.org/data/apps/enkrypt-wallet/icon.png b/ensawards.org/data/apps/enkrypt-wallet/icon.png
new file mode 100644
index 00000000..8747b14b
Binary files /dev/null and b/ensawards.org/data/apps/enkrypt-wallet/icon.png differ
diff --git a/ensawards.org/data/apps/enkrypt-wallet/icon.tsx b/ensawards.org/data/apps/enkrypt-wallet/icon.tsx
new file mode 100644
index 00000000..7a62f895
--- /dev/null
+++ b/ensawards.org/data/apps/enkrypt-wallet/icon.tsx
@@ -0,0 +1,19 @@
+import React from "react";
+
+import { cn } from "@/utils/tailwindClassConcatenation";
+
+import icon from "./icon.png";
+
+const Icon = ({ className, ...props }: React.SVGProps) => (
+
+);
+
+export default Icon;
diff --git a/ensawards.org/data/apps/enkrypt-wallet/index.ts b/ensawards.org/data/apps/enkrypt-wallet/index.ts
new file mode 100644
index 00000000..f4476b28
--- /dev/null
+++ b/ensawards.org/data/apps/enkrypt-wallet/index.ts
@@ -0,0 +1,28 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying apps
+
+import MEWProject from "data/projects/mew";
+
+import { defineApp } from "../registry.ts";
+import { type App, AppTypes } from "../types.ts";
+import EnkryptIcon from "./icon.tsx";
+
+const EnkryptWallet: App = {
+ id: "enkrypt-wallet",
+ appSlug: "enkrypt-wallet",
+ type: AppTypes.Wallet,
+ project: MEWProject,
+ name: "Enkrypt",
+ description:
+ "Self-custodial multichain browser-extension wallet built by MEW, extending beyond its classic Ethereum web app with native support for EVM and non-EVM chains and in-browser dApp connectivity.",
+ socials: {
+ website: new URL("https://www.enkrypt.com/"),
+ twitter: new URL("https://x.com/enkrypt"),
+ },
+ icon: EnkryptIcon,
+ // TODO: Add OG images
+};
+
+defineApp(EnkryptWallet);
+
+export default EnkryptWallet;
diff --git a/ensawards.org/data/apps/gem-wallet/benchmarks/index.tsx b/ensawards.org/data/apps/gem-wallet/benchmarks/index.tsx
new file mode 100644
index 00000000..4d0efe13
--- /dev/null
+++ b/ensawards.org/data/apps/gem-wallet/benchmarks/index.tsx
@@ -0,0 +1,29 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying app benchmarks
+
+import GemWallet from "data/apps/gem-wallet";
+import { defineAppBenchmarks } from "data/benchmarks/registry";
+import type { BestPracticeBenchmarks } from "data/ens-best-practices/types";
+
+import depositAddresses from "./resolution/deposit-addresses";
+import ensv2ReadyResolution from "./resolution/ensv2-ready-resolution";
+
+const benchmarks = {
+ "ensv2-ready-resolution": ensv2ReadyResolution,
+ "deposit-addresses": depositAddresses,
+
+ // 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,
+ },
+} as const satisfies BestPracticeBenchmarks;
+
+defineAppBenchmarks(GemWallet, benchmarks);
+
+export default benchmarks;
diff --git a/ensawards.org/data/apps/gem-wallet/benchmarks/resolution/deposit-addresses/at-1.gif b/ensawards.org/data/apps/gem-wallet/benchmarks/resolution/deposit-addresses/at-1.gif
new file mode 100644
index 00000000..c5b5c226
Binary files /dev/null and b/ensawards.org/data/apps/gem-wallet/benchmarks/resolution/deposit-addresses/at-1.gif differ
diff --git a/ensawards.org/data/apps/gem-wallet/benchmarks/resolution/deposit-addresses/at-2.png b/ensawards.org/data/apps/gem-wallet/benchmarks/resolution/deposit-addresses/at-2.png
new file mode 100644
index 00000000..9fd2e953
Binary files /dev/null and b/ensawards.org/data/apps/gem-wallet/benchmarks/resolution/deposit-addresses/at-2.png differ
diff --git a/ensawards.org/data/apps/gem-wallet/benchmarks/resolution/deposit-addresses/at-3.png b/ensawards.org/data/apps/gem-wallet/benchmarks/resolution/deposit-addresses/at-3.png
new file mode 100644
index 00000000..ca9aa703
Binary files /dev/null and b/ensawards.org/data/apps/gem-wallet/benchmarks/resolution/deposit-addresses/at-3.png differ
diff --git a/ensawards.org/data/apps/gem-wallet/benchmarks/resolution/deposit-addresses/at-4.png b/ensawards.org/data/apps/gem-wallet/benchmarks/resolution/deposit-addresses/at-4.png
new file mode 100644
index 00000000..a3fd961b
Binary files /dev/null and b/ensawards.org/data/apps/gem-wallet/benchmarks/resolution/deposit-addresses/at-4.png differ
diff --git a/ensawards.org/data/apps/gem-wallet/benchmarks/resolution/deposit-addresses/at-5.gif b/ensawards.org/data/apps/gem-wallet/benchmarks/resolution/deposit-addresses/at-5.gif
new file mode 100644
index 00000000..04e4f258
Binary files /dev/null and b/ensawards.org/data/apps/gem-wallet/benchmarks/resolution/deposit-addresses/at-5.gif differ
diff --git a/ensawards.org/data/apps/gem-wallet/benchmarks/resolution/deposit-addresses/at-6.png b/ensawards.org/data/apps/gem-wallet/benchmarks/resolution/deposit-addresses/at-6.png
new file mode 100644
index 00000000..0f20ae60
Binary files /dev/null and b/ensawards.org/data/apps/gem-wallet/benchmarks/resolution/deposit-addresses/at-6.png differ
diff --git a/ensawards.org/data/apps/gem-wallet/benchmarks/resolution/deposit-addresses/at-7.png b/ensawards.org/data/apps/gem-wallet/benchmarks/resolution/deposit-addresses/at-7.png
new file mode 100644
index 00000000..3ec8e5bd
Binary files /dev/null and b/ensawards.org/data/apps/gem-wallet/benchmarks/resolution/deposit-addresses/at-7.png differ
diff --git a/ensawards.org/data/apps/gem-wallet/benchmarks/resolution/deposit-addresses/index.tsx b/ensawards.org/data/apps/gem-wallet/benchmarks/resolution/deposit-addresses/index.tsx
new file mode 100644
index 00000000..61ca36b9
--- /dev/null
+++ b/ensawards.org/data/apps/gem-wallet/benchmarks/resolution/deposit-addresses/index.tsx
@@ -0,0 +1,136 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying app benchmarks
+
+import { type AcceptanceTestBenchmarks, BenchmarkResults } from "data/benchmarks/types";
+import contributors from "data/contributors";
+import {
+ buildFailNoteForAT2,
+ buildFailNoteForAT3,
+ buildFailNoteForAT4,
+ buildFailNoteForAT5,
+ buildFailNoteForAT6,
+ buildFailNoteForAT7,
+ buildNotApplicableForFailedTest,
+ buildPassNoteForAT1,
+} from "data/ens-best-practices/resolution/deposit-addresses/notes";
+
+import { parseTimestamp } from "@ensnode/ensnode-sdk";
+
+import at1Proof from "./at-1.gif";
+import at2Proof from "./at-2.png";
+import at3Proof from "./at-3.png";
+import at4Proof from "./at-4.png";
+import at5Proof from "./at-5.gif";
+import at6Proof from "./at-6.png";
+import at7Proof from "./at-7.png";
+
+const method = 'the "send" flow';
+
+const depositAddresses = {
+ "at01-resolve-onchain-name": {
+ result: BenchmarkResults.Pass,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-03T08:01:57Z") },
+ ],
+ notes: buildPassNoteForAT1({
+ method,
+ proof: {
+ image: at1Proof,
+ alt: "Gem Wallet correctly resolves the address for vitalik.eth",
+ },
+ }),
+ },
+ "at02-resolve-name-needing-normalization": {
+ result: BenchmarkResults.Fail,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-03T08:01:57Z") },
+ ],
+ notes: buildFailNoteForAT2({
+ method,
+ proof: {
+ image: at2Proof,
+ alt: "Gem Wallet fails to resolve the address for Ξthereum.eth",
+ },
+ extra: "The app blocked the send operation from continuing.",
+ }),
+ },
+ "at03-resolve-offchain-eth-subname": {
+ result: BenchmarkResults.Fail,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-03T08:01:57Z") },
+ ],
+ notes: buildFailNoteForAT3({
+ method,
+ proof: {
+ image: at3Proof,
+ alt: "Gem Wallet fails to resolve the address for jesse.base.eth",
+ },
+ extra: "The app blocked the send operation from continuing.",
+ }),
+ },
+ "at04-resolve-offchain-dns-name": {
+ result: BenchmarkResults.Fail,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-03T08:01:57Z") },
+ ],
+ notes: buildFailNoteForAT4({
+ method,
+ proof: {
+ image: at4Proof,
+ alt: "Gem Wallet fails to resolve the address for dperri.com",
+ },
+ extra: "The app blocked the send operation from continuing.",
+ }),
+ },
+ "at05-resolve-name-on-other-evm-chain": {
+ result: BenchmarkResults.Fail,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-03T08:01:57Z") },
+ ],
+ notes: buildFailNoteForAT5({
+ method,
+ proof: {
+ image: at5Proof,
+ alt: "Gem Wallet fails to resolve the address for lightkeeper.eth on the Base chain",
+ },
+ extra: "The app resolved to the Ethereum Mainnet address instead of the Base address.",
+ }),
+ },
+ "at06-resolve-bitcoin-address": {
+ result: BenchmarkResults.Fail,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-03T08:01:57Z") },
+ ],
+ notes: buildFailNoteForAT6({
+ method: 'the "send" flow in context of the Bitcoin chain',
+ proof: {
+ image: at6Proof,
+ alt: "Gem Wallet fails to resolve the Bitcoin address for gregskril.eth",
+ },
+ extra: "The app blocked the send operation from continuing.",
+ }),
+ },
+ "at07-resolve-solana-address": {
+ result: BenchmarkResults.Fail,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-03T08:01:57Z") },
+ ],
+ notes: buildFailNoteForAT7({
+ method: 'the "send" flow in context of the Solana chain',
+ proof: {
+ image: at7Proof,
+ alt: "Gem Wallet fails to resolve the Solana address for gregskril.eth",
+ },
+ extra: "The app blocked the send operation from continuing.",
+ }),
+ },
+ "at08-handle-invalid-address-format": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-03T08:01:57Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 5, scope: "on Base" }),
+ },
+} as const satisfies AcceptanceTestBenchmarks;
+
+export default depositAddresses;
diff --git a/ensawards.org/data/apps/gem-wallet/benchmarks/resolution/ensv2-ready-resolution/at-1.gif b/ensawards.org/data/apps/gem-wallet/benchmarks/resolution/ensv2-ready-resolution/at-1.gif
new file mode 100644
index 00000000..d91b5792
Binary files /dev/null and b/ensawards.org/data/apps/gem-wallet/benchmarks/resolution/ensv2-ready-resolution/at-1.gif differ
diff --git a/ensawards.org/data/apps/gem-wallet/benchmarks/resolution/ensv2-ready-resolution/index.tsx b/ensawards.org/data/apps/gem-wallet/benchmarks/resolution/ensv2-ready-resolution/index.tsx
new file mode 100644
index 00000000..b4171faf
--- /dev/null
+++ b/ensawards.org/data/apps/gem-wallet/benchmarks/resolution/ensv2-ready-resolution/index.tsx
@@ -0,0 +1,45 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying app benchmarks
+
+import type { AcceptanceTestBenchmark } from "data/acceptance-tests/types";
+import type { AcceptanceTestBenchmarks } from "data/benchmarks/types";
+import { BenchmarkResults } from "data/benchmarks/types";
+import contributors from "data/contributors";
+import {
+ acceptanceTestDetailsContainerStyles,
+ bestPracticeTechnicalDetailsCodeStyles,
+} from "data/ens-best-practices/styles";
+
+import { parseTimestamp } from "@ensnode/ensnode-sdk";
+
+import { cn } from "@/utils/tailwindClassConcatenation";
+
+import at1ProofImage from "./at-1.gif";
+
+const ensv2ReadyResolution = {
+ "correctly-resolve-ensv2-test-name-address": {
+ result: BenchmarkResults.Fail,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-03T07:57:00Z") },
+ ],
+ notes: (
+
+
+ ENSv2 ready resolution was tested using the "send" flow. The resolved address is{" "}
+ NOT the expected Ethereum Mainnet address (
+
+ 0x2222222222222222222222222222222222222222
+
+ ).
+
+
+
+ ),
+ } as const satisfies AcceptanceTestBenchmark,
+} as const satisfies AcceptanceTestBenchmarks;
+
+export default ensv2ReadyResolution;
diff --git a/ensawards.org/data/apps/gem-wallet/icon.tsx b/ensawards.org/data/apps/gem-wallet/icon.tsx
new file mode 100644
index 00000000..d4f35c27
--- /dev/null
+++ b/ensawards.org/data/apps/gem-wallet/icon.tsx
@@ -0,0 +1,48 @@
+import React from "react";
+
+const Icon = ({ className, ...props }: React.SVGProps) => {
+ const reactId = React.useId();
+ const id = (name: string) => `${reactId}-${name}`;
+ const url = (name: string) => `url(#${id(name)})`;
+
+ return (
+
+ );
+};
+
+export default Icon;
diff --git a/ensawards.org/data/apps/gem-wallet/index.ts b/ensawards.org/data/apps/gem-wallet/index.ts
new file mode 100644
index 00000000..7b5c682c
--- /dev/null
+++ b/ensawards.org/data/apps/gem-wallet/index.ts
@@ -0,0 +1,28 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying apps
+
+import GemProject from "data/projects/gem";
+
+import { defineApp } from "../registry.ts";
+import { type App, AppTypes } from "../types.ts";
+import GemIcon from "./icon.tsx";
+
+const GemWallet: App = {
+ id: "gem-wallet",
+ appSlug: "gem-wallet",
+ type: AppTypes.Wallet,
+ project: GemProject,
+ name: "Gem Wallet",
+ description:
+ "Open-source, self-custodial multichain wallet for storing, sending, and swapping digital assets and interacting with decentralized applications.",
+ socials: {
+ website: new URL("https://gemwallet.com"),
+ twitter: new URL("https://x.com/gemwallet"),
+ },
+ icon: GemIcon,
+ // TODO: Add OG images
+};
+
+defineApp(GemWallet);
+
+export default GemWallet;
diff --git a/ensawards.org/data/apps/imtoken-wallet/benchmarks/index.tsx b/ensawards.org/data/apps/imtoken-wallet/benchmarks/index.tsx
new file mode 100644
index 00000000..b6affd35
--- /dev/null
+++ b/ensawards.org/data/apps/imtoken-wallet/benchmarks/index.tsx
@@ -0,0 +1,29 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying app benchmarks
+
+import ImTokenWallet from "data/apps/imtoken-wallet";
+import { defineAppBenchmarks } from "data/benchmarks/registry";
+import type { BestPracticeBenchmarks } from "data/ens-best-practices/types";
+
+import depositAddresses from "./resolution/deposit-addresses";
+import ensv2ReadyResolution from "./resolution/ensv2-ready-resolution";
+
+const benchmarks = {
+ "ensv2-ready-resolution": ensv2ReadyResolution,
+ "deposit-addresses": depositAddresses,
+
+ // 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,
+ },
+} as const satisfies BestPracticeBenchmarks;
+
+defineAppBenchmarks(ImTokenWallet, benchmarks);
+
+export default benchmarks;
diff --git a/ensawards.org/data/apps/imtoken-wallet/benchmarks/resolution/deposit-addresses/at-1.png b/ensawards.org/data/apps/imtoken-wallet/benchmarks/resolution/deposit-addresses/at-1.png
new file mode 100644
index 00000000..8045fd2d
Binary files /dev/null and b/ensawards.org/data/apps/imtoken-wallet/benchmarks/resolution/deposit-addresses/at-1.png differ
diff --git a/ensawards.org/data/apps/imtoken-wallet/benchmarks/resolution/deposit-addresses/at-2.png b/ensawards.org/data/apps/imtoken-wallet/benchmarks/resolution/deposit-addresses/at-2.png
new file mode 100644
index 00000000..f9456016
Binary files /dev/null and b/ensawards.org/data/apps/imtoken-wallet/benchmarks/resolution/deposit-addresses/at-2.png differ
diff --git a/ensawards.org/data/apps/imtoken-wallet/benchmarks/resolution/deposit-addresses/at-3.png b/ensawards.org/data/apps/imtoken-wallet/benchmarks/resolution/deposit-addresses/at-3.png
new file mode 100644
index 00000000..76f0c3c4
Binary files /dev/null and b/ensawards.org/data/apps/imtoken-wallet/benchmarks/resolution/deposit-addresses/at-3.png differ
diff --git a/ensawards.org/data/apps/imtoken-wallet/benchmarks/resolution/deposit-addresses/at-4.png b/ensawards.org/data/apps/imtoken-wallet/benchmarks/resolution/deposit-addresses/at-4.png
new file mode 100644
index 00000000..e0bf8110
Binary files /dev/null and b/ensawards.org/data/apps/imtoken-wallet/benchmarks/resolution/deposit-addresses/at-4.png differ
diff --git a/ensawards.org/data/apps/imtoken-wallet/benchmarks/resolution/deposit-addresses/at-5.png b/ensawards.org/data/apps/imtoken-wallet/benchmarks/resolution/deposit-addresses/at-5.png
new file mode 100644
index 00000000..6a522def
Binary files /dev/null and b/ensawards.org/data/apps/imtoken-wallet/benchmarks/resolution/deposit-addresses/at-5.png differ
diff --git a/ensawards.org/data/apps/imtoken-wallet/benchmarks/resolution/deposit-addresses/at-6.png b/ensawards.org/data/apps/imtoken-wallet/benchmarks/resolution/deposit-addresses/at-6.png
new file mode 100644
index 00000000..8da47ce8
Binary files /dev/null and b/ensawards.org/data/apps/imtoken-wallet/benchmarks/resolution/deposit-addresses/at-6.png differ
diff --git a/ensawards.org/data/apps/imtoken-wallet/benchmarks/resolution/deposit-addresses/at-7.gif b/ensawards.org/data/apps/imtoken-wallet/benchmarks/resolution/deposit-addresses/at-7.gif
new file mode 100644
index 00000000..0ebd1ac2
Binary files /dev/null and b/ensawards.org/data/apps/imtoken-wallet/benchmarks/resolution/deposit-addresses/at-7.gif differ
diff --git a/ensawards.org/data/apps/imtoken-wallet/benchmarks/resolution/deposit-addresses/index.tsx b/ensawards.org/data/apps/imtoken-wallet/benchmarks/resolution/deposit-addresses/index.tsx
new file mode 100644
index 00000000..0daba802
--- /dev/null
+++ b/ensawards.org/data/apps/imtoken-wallet/benchmarks/resolution/deposit-addresses/index.tsx
@@ -0,0 +1,133 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying app benchmarks
+
+import { type AcceptanceTestBenchmarks, BenchmarkResults } from "data/benchmarks/types";
+import contributors from "data/contributors";
+import {
+ buildFailNoteForAT4,
+ buildFailNoteForAT5,
+ buildFailNoteForAT6,
+ buildNotApplicableForFailedTest,
+ buildNotApplicableForNonEvmChain,
+ buildPassNoteForAT1,
+ buildPassNoteForAT2,
+ buildPassNoteForAT3,
+} from "data/ens-best-practices/resolution/deposit-addresses/notes";
+
+import { parseTimestamp } from "@ensnode/ensnode-sdk";
+
+import at1Proof from "./at-1.png";
+import at2Proof from "./at-2.png";
+import at3Proof from "./at-3.png";
+import at4Proof from "./at-4.png";
+import at5Proof from "./at-5.png";
+import at6Proof from "./at-6.png";
+import at7Proof from "./at-7.gif";
+
+const method = 'the "send" flow';
+
+const depositAddresses = {
+ "at01-resolve-onchain-name": {
+ result: BenchmarkResults.Pass,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-03T08:12:20Z") },
+ ],
+ notes: buildPassNoteForAT1({
+ method,
+ proof: {
+ image: at1Proof,
+ alt: "imToken correctly resolves the address for vitalik.eth",
+ },
+ }),
+ },
+ "at02-resolve-name-needing-normalization": {
+ result: BenchmarkResults.Pass,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-03T08:12:20Z") },
+ ],
+ notes: buildPassNoteForAT2({
+ method,
+ proof: {
+ image: at2Proof,
+ alt: "imToken correctly resolves the address for Ξthereum.eth",
+ },
+ }),
+ },
+ "at03-resolve-offchain-eth-subname": {
+ result: BenchmarkResults.Pass,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-03T08:12:20Z") },
+ ],
+ notes: buildPassNoteForAT3({
+ method,
+ proof: {
+ image: at3Proof,
+ alt: "imToken correctly resolves the address for jesse.base.eth",
+ },
+ }),
+ },
+ "at04-resolve-offchain-dns-name": {
+ result: BenchmarkResults.Fail,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-03T08:12:20Z") },
+ ],
+ notes: buildFailNoteForAT4({
+ method,
+ proof: {
+ image: at4Proof,
+ alt: "imToken fails to resolve the address for dperri.com",
+ },
+ extra: 'The app showed the message "The wallet address for the domain could not be found".',
+ }),
+ },
+ "at05-resolve-name-on-other-evm-chain": {
+ result: BenchmarkResults.Fail,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-03T08:12:20Z") },
+ ],
+ notes: buildFailNoteForAT5({
+ method,
+ proof: {
+ image: at5Proof,
+ alt: "imToken fails to resolve the address for lightkeeper.eth on the Base chain",
+ },
+ extra: 'The app showed the message "The wallet address for the domain could not be found".',
+ }),
+ },
+ "at06-resolve-bitcoin-address": {
+ result: BenchmarkResults.Fail,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-03T08:12:20Z") },
+ ],
+ notes: buildFailNoteForAT6({
+ method: 'the "send" flow in context of the Bitcoin chain',
+ proof: {
+ image: at6Proof,
+ alt: "imToken fails to resolve the Bitcoin address for gregskril.eth",
+ },
+ extra: 'The app showed the message "The wallet address for the domain could not be found".',
+ }),
+ },
+ "at07-resolve-solana-address": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-03T08:12:20Z") },
+ ],
+ notes: buildNotApplicableForNonEvmChain({
+ chain: "Solana",
+ proof: {
+ image: at7Proof,
+ alt: "imToken has no context of the Solana chain in the send flow",
+ },
+ }),
+ },
+ "at08-handle-invalid-address-format": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-03T08:12:20Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 5, scope: "on Base" }),
+ },
+} as const satisfies AcceptanceTestBenchmarks;
+
+export default depositAddresses;
diff --git a/ensawards.org/data/apps/imtoken-wallet/benchmarks/resolution/ensv2-ready-resolution/at-1.png b/ensawards.org/data/apps/imtoken-wallet/benchmarks/resolution/ensv2-ready-resolution/at-1.png
new file mode 100644
index 00000000..081092fe
Binary files /dev/null and b/ensawards.org/data/apps/imtoken-wallet/benchmarks/resolution/ensv2-ready-resolution/at-1.png differ
diff --git a/ensawards.org/data/apps/imtoken-wallet/benchmarks/resolution/ensv2-ready-resolution/index.tsx b/ensawards.org/data/apps/imtoken-wallet/benchmarks/resolution/ensv2-ready-resolution/index.tsx
new file mode 100644
index 00000000..184e76b3
--- /dev/null
+++ b/ensawards.org/data/apps/imtoken-wallet/benchmarks/resolution/ensv2-ready-resolution/index.tsx
@@ -0,0 +1,44 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying app benchmarks
+
+import type { AcceptanceTestBenchmark } from "data/acceptance-tests/types";
+import { type AcceptanceTestBenchmarks, BenchmarkResults } from "data/benchmarks/types";
+import contributors from "data/contributors";
+import {
+ acceptanceTestDetailsContainerStyles,
+ bestPracticeTechnicalDetailsCodeStyles,
+} from "data/ens-best-practices/styles";
+
+import { parseTimestamp } from "@ensnode/ensnode-sdk";
+
+import { cn } from "@/utils/tailwindClassConcatenation";
+
+import at1ProofImage from "./at-1.png";
+
+const ensv2ReadyResolution = {
+ "correctly-resolve-ensv2-test-name-address": {
+ result: BenchmarkResults.Pass,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-03T08:05:00Z") },
+ ],
+ notes: (
+
+
+ ENSv2 ready resolution was tested using the "send" flow. The resolved address is
+ correct (
+
+ 0x2222222222222222222222222222222222222222
+
+ ).
+
+
+
+ ),
+ } as const satisfies AcceptanceTestBenchmark,
+} as const satisfies AcceptanceTestBenchmarks;
+
+export default ensv2ReadyResolution;
diff --git a/ensawards.org/data/apps/imtoken-wallet/icon.tsx b/ensawards.org/data/apps/imtoken-wallet/icon.tsx
new file mode 100644
index 00000000..504dde6d
--- /dev/null
+++ b/ensawards.org/data/apps/imtoken-wallet/icon.tsx
@@ -0,0 +1,48 @@
+import React from "react";
+
+const Icon = ({ className, ...props }: React.SVGProps) => {
+ const reactId = React.useId();
+ const id = (name: string) => `${reactId}-${name}`;
+ const url = (name: string) => `url(#${id(name)})`;
+
+ return (
+
+ );
+};
+
+export default Icon;
diff --git a/ensawards.org/data/apps/imtoken-wallet/index.ts b/ensawards.org/data/apps/imtoken-wallet/index.ts
new file mode 100644
index 00000000..52a7dfe7
--- /dev/null
+++ b/ensawards.org/data/apps/imtoken-wallet/index.ts
@@ -0,0 +1,28 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying apps
+
+import ImTokenProject from "data/projects/imtoken";
+
+import { defineApp } from "../registry.ts";
+import { type App, AppTypes } from "../types.ts";
+import ImTokenIcon from "./icon.tsx";
+
+const ImTokenWallet: App = {
+ id: "imtoken-wallet",
+ appSlug: "imtoken-wallet",
+ type: AppTypes.Wallet,
+ project: ImTokenProject,
+ name: "imToken",
+ description:
+ "Self-custodial multichain wallet for storing, sending, and swapping digital assets and interacting with decentralized applications across Ethereum, Bitcoin, and other chains.",
+ socials: {
+ website: new URL("https://token.im"),
+ twitter: new URL("https://twitter.com/imTokenOfficial"),
+ },
+ icon: ImTokenIcon,
+ // TODO: Add OG images
+};
+
+defineApp(ImTokenWallet);
+
+export default ImTokenWallet;
diff --git a/ensawards.org/data/apps/mew-wallet/benchmarks/index.tsx b/ensawards.org/data/apps/mew-wallet/benchmarks/index.tsx
new file mode 100644
index 00000000..0fa14469
--- /dev/null
+++ b/ensawards.org/data/apps/mew-wallet/benchmarks/index.tsx
@@ -0,0 +1,29 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying app benchmarks
+
+import MyEtherWallet from "data/apps/mew-wallet";
+import { defineAppBenchmarks } from "data/benchmarks/registry";
+import type { BestPracticeBenchmarks } from "data/ens-best-practices/types";
+
+import depositAddresses from "./resolution/deposit-addresses";
+import ensv2ReadyResolution from "./resolution/ensv2-ready-resolution";
+
+const benchmarks = {
+ "ensv2-ready-resolution": ensv2ReadyResolution,
+ "deposit-addresses": depositAddresses,
+
+ // 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,
+ },
+} as const satisfies BestPracticeBenchmarks;
+
+defineAppBenchmarks(MyEtherWallet, benchmarks);
+
+export default benchmarks;
diff --git a/ensawards.org/data/apps/mew-wallet/benchmarks/resolution/deposit-addresses/at-1.png b/ensawards.org/data/apps/mew-wallet/benchmarks/resolution/deposit-addresses/at-1.png
new file mode 100644
index 00000000..367f2eca
Binary files /dev/null and b/ensawards.org/data/apps/mew-wallet/benchmarks/resolution/deposit-addresses/at-1.png differ
diff --git a/ensawards.org/data/apps/mew-wallet/benchmarks/resolution/deposit-addresses/index.tsx b/ensawards.org/data/apps/mew-wallet/benchmarks/resolution/deposit-addresses/index.tsx
new file mode 100644
index 00000000..108728ec
--- /dev/null
+++ b/ensawards.org/data/apps/mew-wallet/benchmarks/resolution/deposit-addresses/index.tsx
@@ -0,0 +1,80 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying app benchmarks
+
+import { type AcceptanceTestBenchmarks, BenchmarkResults } from "data/benchmarks/types";
+import contributors from "data/contributors";
+import {
+ buildEnsNotSupportedNote,
+ buildNotApplicableForFailedTest,
+} from "data/ens-best-practices/resolution/deposit-addresses/notes";
+
+import { parseTimestamp } from "@ensnode/ensnode-sdk";
+
+import at1Proof from "./at-1.png";
+
+const depositAddresses = {
+ "at01-resolve-onchain-name": {
+ result: BenchmarkResults.Fail,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-03T12:17:12Z") },
+ ],
+ notes: buildEnsNotSupportedNote({
+ method: 'the "send" flow',
+ proof: {
+ image: at1Proof,
+ alt: "MyEtherWallet doesn't allow ENS names as the recipient in the send flow",
+ },
+ }),
+ },
+ "at02-resolve-name-needing-normalization": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-03T12:17:12Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+ "at03-resolve-offchain-eth-subname": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-03T12:17:12Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+ "at04-resolve-offchain-dns-name": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-03T12:17:12Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+ "at05-resolve-name-on-other-evm-chain": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-03T12:17:12Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+ "at06-resolve-bitcoin-address": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-03T12:17:12Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+ "at07-resolve-solana-address": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-03T12:17:12Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+ "at08-handle-invalid-address-format": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-03T12:17:12Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+} as const satisfies AcceptanceTestBenchmarks;
+
+export default depositAddresses;
diff --git a/ensawards.org/data/apps/mew-wallet/benchmarks/resolution/ensv2-ready-resolution/at-1.png b/ensawards.org/data/apps/mew-wallet/benchmarks/resolution/ensv2-ready-resolution/at-1.png
new file mode 100644
index 00000000..f06feca9
Binary files /dev/null and b/ensawards.org/data/apps/mew-wallet/benchmarks/resolution/ensv2-ready-resolution/at-1.png differ
diff --git a/ensawards.org/data/apps/mew-wallet/benchmarks/resolution/ensv2-ready-resolution/index.tsx b/ensawards.org/data/apps/mew-wallet/benchmarks/resolution/ensv2-ready-resolution/index.tsx
new file mode 100644
index 00000000..9167bf90
--- /dev/null
+++ b/ensawards.org/data/apps/mew-wallet/benchmarks/resolution/ensv2-ready-resolution/index.tsx
@@ -0,0 +1,44 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying app benchmarks
+
+import type { AcceptanceTestBenchmark } from "data/acceptance-tests/types";
+import type { AcceptanceTestBenchmarks } from "data/benchmarks/types";
+import { BenchmarkResults } from "data/benchmarks/types";
+import contributors from "data/contributors";
+import { acceptanceTestDetailsContainerStyles } from "data/ens-best-practices/styles";
+
+import { parseTimestamp } from "@ensnode/ensnode-sdk";
+
+import { cn } from "@/utils/tailwindClassConcatenation";
+
+import at1ProofImage from "./at-1.png";
+
+const ensv2ReadyResolution = {
+ "correctly-resolve-ensv2-test-name-address": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-03T12:09:00Z") },
+ ],
+ notes: (
+
+
+ ENSv2 ready resolution was tested using the "send" flow. The app doesn't support
+ the use of ENS names at all as the recipient identifier.
+
+
+ While that's a key issue that this app is encouraged to improve, this best practice is
+ applicable specifically to apps that already have an existing ENS integration and making
+ sure existing integrations are ENSv2 compatible. Therefore, for this best practice we
+ apply a rating of not applicable.
+
+
+
+ ),
+ } as const satisfies AcceptanceTestBenchmark,
+} as const satisfies AcceptanceTestBenchmarks;
+
+export default ensv2ReadyResolution;
diff --git a/ensawards.org/data/apps/mew-wallet/icon.tsx b/ensawards.org/data/apps/mew-wallet/icon.tsx
new file mode 100644
index 00000000..db5e8692
--- /dev/null
+++ b/ensawards.org/data/apps/mew-wallet/icon.tsx
@@ -0,0 +1,116 @@
+import React from "react";
+
+const Icon = ({ className, ...props }: React.SVGProps) => (
+
+);
+
+export default Icon;
diff --git a/ensawards.org/data/apps/mew-wallet/index.ts b/ensawards.org/data/apps/mew-wallet/index.ts
new file mode 100644
index 00000000..41de492e
--- /dev/null
+++ b/ensawards.org/data/apps/mew-wallet/index.ts
@@ -0,0 +1,28 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying apps
+
+import MEWProject from "data/projects/mew";
+
+import { defineApp } from "../registry.ts";
+import { type App, AppTypes } from "../types.ts";
+import MEWIcon from "./icon.tsx";
+
+const MyEtherWallet: App = {
+ id: "mew-wallet",
+ appSlug: "mew-wallet",
+ type: AppTypes.Wallet,
+ project: MEWProject,
+ name: "MyEtherWallet",
+ description:
+ "Self-custodial mobile wallet for iOS and Android that lets you create and access Ethereum wallets, buy, send, and swap tokens, and connect to decentralized applications on the go.",
+ socials: {
+ website: new URL("https://www.mewwallet.com"),
+ twitter: new URL("https://x.com/myetherwallet"),
+ },
+ icon: MEWIcon,
+ // TODO: Add OG images
+};
+
+defineApp(MyEtherWallet);
+
+export default MyEtherWallet;
diff --git a/ensawards.org/data/apps/mewweb-wallet/benchmarks/index.tsx b/ensawards.org/data/apps/mewweb-wallet/benchmarks/index.tsx
new file mode 100644
index 00000000..98fcb73c
--- /dev/null
+++ b/ensawards.org/data/apps/mewweb-wallet/benchmarks/index.tsx
@@ -0,0 +1,29 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying app benchmarks
+
+import MyEtherWalletWeb from "data/apps/mewweb-wallet";
+import { defineAppBenchmarks } from "data/benchmarks/registry";
+import type { BestPracticeBenchmarks } from "data/ens-best-practices/types";
+
+import depositAddresses from "./resolution/deposit-addresses";
+import ensv2ReadyResolution from "./resolution/ensv2-ready-resolution";
+
+const benchmarks = {
+ "ensv2-ready-resolution": ensv2ReadyResolution,
+ "deposit-addresses": depositAddresses,
+
+ // 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,
+ },
+} as const satisfies BestPracticeBenchmarks;
+
+defineAppBenchmarks(MyEtherWalletWeb, benchmarks);
+
+export default benchmarks;
diff --git a/ensawards.org/data/apps/mewweb-wallet/benchmarks/resolution/deposit-addresses/at-1.png b/ensawards.org/data/apps/mewweb-wallet/benchmarks/resolution/deposit-addresses/at-1.png
new file mode 100644
index 00000000..6e55c54b
Binary files /dev/null and b/ensawards.org/data/apps/mewweb-wallet/benchmarks/resolution/deposit-addresses/at-1.png differ
diff --git a/ensawards.org/data/apps/mewweb-wallet/benchmarks/resolution/deposit-addresses/at-2.png b/ensawards.org/data/apps/mewweb-wallet/benchmarks/resolution/deposit-addresses/at-2.png
new file mode 100644
index 00000000..0a602987
Binary files /dev/null and b/ensawards.org/data/apps/mewweb-wallet/benchmarks/resolution/deposit-addresses/at-2.png differ
diff --git a/ensawards.org/data/apps/mewweb-wallet/benchmarks/resolution/deposit-addresses/at-3.png b/ensawards.org/data/apps/mewweb-wallet/benchmarks/resolution/deposit-addresses/at-3.png
new file mode 100644
index 00000000..f2fd4008
Binary files /dev/null and b/ensawards.org/data/apps/mewweb-wallet/benchmarks/resolution/deposit-addresses/at-3.png differ
diff --git a/ensawards.org/data/apps/mewweb-wallet/benchmarks/resolution/deposit-addresses/at-4.png b/ensawards.org/data/apps/mewweb-wallet/benchmarks/resolution/deposit-addresses/at-4.png
new file mode 100644
index 00000000..c7814abe
Binary files /dev/null and b/ensawards.org/data/apps/mewweb-wallet/benchmarks/resolution/deposit-addresses/at-4.png differ
diff --git a/ensawards.org/data/apps/mewweb-wallet/benchmarks/resolution/deposit-addresses/at-5.png b/ensawards.org/data/apps/mewweb-wallet/benchmarks/resolution/deposit-addresses/at-5.png
new file mode 100644
index 00000000..1cce69fe
Binary files /dev/null and b/ensawards.org/data/apps/mewweb-wallet/benchmarks/resolution/deposit-addresses/at-5.png differ
diff --git a/ensawards.org/data/apps/mewweb-wallet/benchmarks/resolution/deposit-addresses/at-6.png b/ensawards.org/data/apps/mewweb-wallet/benchmarks/resolution/deposit-addresses/at-6.png
new file mode 100644
index 00000000..07e96cd9
Binary files /dev/null and b/ensawards.org/data/apps/mewweb-wallet/benchmarks/resolution/deposit-addresses/at-6.png differ
diff --git a/ensawards.org/data/apps/mewweb-wallet/benchmarks/resolution/deposit-addresses/at-7.png b/ensawards.org/data/apps/mewweb-wallet/benchmarks/resolution/deposit-addresses/at-7.png
new file mode 100644
index 00000000..06b4c913
Binary files /dev/null and b/ensawards.org/data/apps/mewweb-wallet/benchmarks/resolution/deposit-addresses/at-7.png differ
diff --git a/ensawards.org/data/apps/mewweb-wallet/benchmarks/resolution/deposit-addresses/index.tsx b/ensawards.org/data/apps/mewweb-wallet/benchmarks/resolution/deposit-addresses/index.tsx
new file mode 100644
index 00000000..d85e063a
--- /dev/null
+++ b/ensawards.org/data/apps/mewweb-wallet/benchmarks/resolution/deposit-addresses/index.tsx
@@ -0,0 +1,131 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying app benchmarks
+
+import { type AcceptanceTestBenchmarks, BenchmarkResults } from "data/benchmarks/types";
+import contributors from "data/contributors";
+import {
+ buildFailNoteForAT2,
+ buildFailNoteForAT5,
+ buildNotApplicableForFailedTest,
+ buildNotApplicableForNonEvmChain,
+ buildPassNoteForAT1,
+ buildPassNoteForAT3,
+ buildPassNoteForAT4,
+} from "data/ens-best-practices/resolution/deposit-addresses/notes";
+
+import { parseTimestamp } from "@ensnode/ensnode-sdk";
+
+import at1Proof from "./at-1.png";
+import at2Proof from "./at-2.png";
+import at3Proof from "./at-3.png";
+import at4Proof from "./at-4.png";
+import at5Proof from "./at-5.png";
+import at6Proof from "./at-6.png";
+import at7Proof from "./at-7.png";
+
+const method = 'the "send" flow';
+
+const depositAddresses = {
+ "at01-resolve-onchain-name": {
+ result: BenchmarkResults.Pass,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-02T14:00:22Z") },
+ ],
+ notes: buildPassNoteForAT1({
+ method,
+ proof: {
+ image: at1Proof,
+ alt: "MyEtherWallet web app correctly resolves the address for vitalik.eth",
+ },
+ }),
+ },
+ "at02-resolve-name-needing-normalization": {
+ result: BenchmarkResults.Fail,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-02T14:00:22Z") },
+ ],
+ notes: buildFailNoteForAT2({
+ method,
+ proof: {
+ image: at2Proof,
+ alt: "MyEtherWallet web app fails to resolve the address for Ξthereum.eth",
+ },
+ extra: 'The app showed the message "invalid address".',
+ }),
+ },
+ "at03-resolve-offchain-eth-subname": {
+ result: BenchmarkResults.Pass,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-02T14:00:22Z") },
+ ],
+ notes: buildPassNoteForAT3({
+ method,
+ proof: {
+ image: at3Proof,
+ alt: "MyEtherWallet web app correctly resolves the address for jesse.base.eth",
+ },
+ }),
+ },
+ "at04-resolve-offchain-dns-name": {
+ result: BenchmarkResults.Pass,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-02T14:00:22Z") },
+ ],
+ notes: buildPassNoteForAT4({
+ method,
+ proof: {
+ image: at4Proof,
+ alt: "MyEtherWallet web app correctly resolves the address for dperri.com",
+ },
+ }),
+ },
+ "at05-resolve-name-on-other-evm-chain": {
+ result: BenchmarkResults.Fail,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-02T14:00:22Z") },
+ ],
+ notes: buildFailNoteForAT5({
+ method,
+ proof: {
+ image: at5Proof,
+ alt: "MyEtherWallet web app fails to resolve the address for lightkeeper.eth on the Base chain",
+ },
+ extra: "The app resolved to the Ethereum Mainnet address instead of the Base address.",
+ }),
+ },
+ "at06-resolve-bitcoin-address": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-02T14:00:22Z") },
+ ],
+ notes: buildNotApplicableForNonEvmChain({
+ chain: "Bitcoin",
+ proof: {
+ image: at6Proof,
+ alt: "MyEtherWallet web app has no context of the Bitcoin chain in the send flow",
+ },
+ }),
+ },
+ "at07-resolve-solana-address": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-02T14:00:22Z") },
+ ],
+ notes: buildNotApplicableForNonEvmChain({
+ chain: "Solana",
+ proof: {
+ image: at7Proof,
+ alt: "MyEtherWallet web app has no context of the Solana chain in the send flow",
+ },
+ }),
+ },
+ "at08-handle-invalid-address-format": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-02T14:00:22Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 5, scope: "on Base" }),
+ },
+} as const satisfies AcceptanceTestBenchmarks;
+
+export default depositAddresses;
diff --git a/ensawards.org/data/apps/mewweb-wallet/benchmarks/resolution/ensv2-ready-resolution/at-1.png b/ensawards.org/data/apps/mewweb-wallet/benchmarks/resolution/ensv2-ready-resolution/at-1.png
new file mode 100644
index 00000000..d9b60abf
Binary files /dev/null and b/ensawards.org/data/apps/mewweb-wallet/benchmarks/resolution/ensv2-ready-resolution/at-1.png differ
diff --git a/ensawards.org/data/apps/mewweb-wallet/benchmarks/resolution/ensv2-ready-resolution/index.tsx b/ensawards.org/data/apps/mewweb-wallet/benchmarks/resolution/ensv2-ready-resolution/index.tsx
new file mode 100644
index 00000000..de951ea3
--- /dev/null
+++ b/ensawards.org/data/apps/mewweb-wallet/benchmarks/resolution/ensv2-ready-resolution/index.tsx
@@ -0,0 +1,45 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying app benchmarks
+
+import type { AcceptanceTestBenchmark } from "data/acceptance-tests/types";
+import type { AcceptanceTestBenchmarks } from "data/benchmarks/types";
+import { BenchmarkResults } from "data/benchmarks/types";
+import contributors from "data/contributors";
+import {
+ acceptanceTestDetailsContainerStyles,
+ bestPracticeTechnicalDetailsCodeStyles,
+} from "data/ens-best-practices/styles";
+
+import { parseTimestamp } from "@ensnode/ensnode-sdk";
+
+import { cn } from "@/utils/tailwindClassConcatenation";
+
+import at1ProofImage from "./at-1.png";
+
+const ensv2ReadyResolution = {
+ "correctly-resolve-ensv2-test-name-address": {
+ result: BenchmarkResults.Fail,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-02T13:58:28Z") },
+ ],
+ notes: (
+
+
+ ENSv2 ready resolution was tested using the "send" flow. The resolved address is{" "}
+ NOT the expected Ethereum Mainnet address (
+
+ 0x2222222222222222222222222222222222222222
+
+ ).
+
+
+
+ ),
+ } as const satisfies AcceptanceTestBenchmark,
+} as const satisfies AcceptanceTestBenchmarks;
+
+export default ensv2ReadyResolution;
diff --git a/ensawards.org/data/apps/mewweb-wallet/icon.tsx b/ensawards.org/data/apps/mewweb-wallet/icon.tsx
new file mode 100644
index 00000000..7df6525c
--- /dev/null
+++ b/ensawards.org/data/apps/mewweb-wallet/icon.tsx
@@ -0,0 +1,22 @@
+import React from "react";
+
+const Icon = ({ className, ...props }: React.SVGProps) => (
+
+);
+
+export default Icon;
diff --git a/ensawards.org/data/apps/mewweb-wallet/index.ts b/ensawards.org/data/apps/mewweb-wallet/index.ts
new file mode 100644
index 00000000..49e39d66
--- /dev/null
+++ b/ensawards.org/data/apps/mewweb-wallet/index.ts
@@ -0,0 +1,28 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying apps
+
+import MEWProject from "data/projects/mew";
+
+import { defineApp } from "../registry.ts";
+import { type App, AppTypes } from "../types.ts";
+import MEWIcon from "./icon.tsx";
+
+const MyEtherWalletWeb: App = {
+ id: "mewweb-wallet",
+ appSlug: "mewweb-wallet",
+ type: AppTypes.Wallet,
+ project: MEWProject,
+ name: "MyEtherWallet Web",
+ description:
+ "Self-custodial wallet interface for creating and accessing Ethereum wallets, sending and swapping tokens, and interacting with decentralized applications.",
+ socials: {
+ website: new URL("https://app.myetherwallet.com/"),
+ twitter: new URL("https://x.com/myetherwallet"),
+ },
+ icon: MEWIcon,
+ // TODO: Add OG images
+};
+
+defineApp(MyEtherWalletWeb);
+
+export default MyEtherWalletWeb;
diff --git a/ensawards.org/data/apps/safepal-wallet/benchmarks/index.tsx b/ensawards.org/data/apps/safepal-wallet/benchmarks/index.tsx
new file mode 100644
index 00000000..70910061
--- /dev/null
+++ b/ensawards.org/data/apps/safepal-wallet/benchmarks/index.tsx
@@ -0,0 +1,29 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying app benchmarks
+
+import SafePalWallet from "data/apps/safepal-wallet";
+import { defineAppBenchmarks } from "data/benchmarks/registry";
+import type { BestPracticeBenchmarks } from "data/ens-best-practices/types";
+
+import depositAddresses from "./resolution/deposit-addresses";
+import ensv2ReadyResolution from "./resolution/ensv2-ready-resolution";
+
+const benchmarks = {
+ "ensv2-ready-resolution": ensv2ReadyResolution,
+ "deposit-addresses": depositAddresses,
+
+ // 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,
+ },
+} as const satisfies BestPracticeBenchmarks;
+
+defineAppBenchmarks(SafePalWallet, benchmarks);
+
+export default benchmarks;
diff --git a/ensawards.org/data/apps/safepal-wallet/benchmarks/resolution/deposit-addresses/at-1.png b/ensawards.org/data/apps/safepal-wallet/benchmarks/resolution/deposit-addresses/at-1.png
new file mode 100644
index 00000000..33391a11
Binary files /dev/null and b/ensawards.org/data/apps/safepal-wallet/benchmarks/resolution/deposit-addresses/at-1.png differ
diff --git a/ensawards.org/data/apps/safepal-wallet/benchmarks/resolution/deposit-addresses/index.tsx b/ensawards.org/data/apps/safepal-wallet/benchmarks/resolution/deposit-addresses/index.tsx
new file mode 100644
index 00000000..1ac656f6
--- /dev/null
+++ b/ensawards.org/data/apps/safepal-wallet/benchmarks/resolution/deposit-addresses/index.tsx
@@ -0,0 +1,80 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying app benchmarks
+
+import { type AcceptanceTestBenchmarks, BenchmarkResults } from "data/benchmarks/types";
+import contributors from "data/contributors";
+import {
+ buildEnsNotSupportedNote,
+ buildNotApplicableForFailedTest,
+} from "data/ens-best-practices/resolution/deposit-addresses/notes";
+
+import { parseTimestamp } from "@ensnode/ensnode-sdk";
+
+import at1Proof from "./at-1.png";
+
+const depositAddresses = {
+ "at01-resolve-onchain-name": {
+ result: BenchmarkResults.Fail,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-03T10:00:00Z") },
+ ],
+ notes: buildEnsNotSupportedNote({
+ method: 'the "send" flow',
+ proof: {
+ image: at1Proof,
+ alt: "SafePal Wallet doesn't allow ENS names as the recipient in the send flow",
+ },
+ }),
+ },
+ "at02-resolve-name-needing-normalization": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-03T10:00:00Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+ "at03-resolve-offchain-eth-subname": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-03T10:00:00Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+ "at04-resolve-offchain-dns-name": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-03T10:00:00Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+ "at05-resolve-name-on-other-evm-chain": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-03T10:00:00Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+ "at06-resolve-bitcoin-address": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-03T10:00:00Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+ "at07-resolve-solana-address": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-03T10:00:00Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+ "at08-handle-invalid-address-format": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-03T10:00:00Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+} as const satisfies AcceptanceTestBenchmarks;
+
+export default depositAddresses;
diff --git a/ensawards.org/data/apps/safepal-wallet/benchmarks/resolution/ensv2-ready-resolution/at-1.png b/ensawards.org/data/apps/safepal-wallet/benchmarks/resolution/ensv2-ready-resolution/at-1.png
new file mode 100644
index 00000000..a310b242
Binary files /dev/null and b/ensawards.org/data/apps/safepal-wallet/benchmarks/resolution/ensv2-ready-resolution/at-1.png differ
diff --git a/ensawards.org/data/apps/safepal-wallet/benchmarks/resolution/ensv2-ready-resolution/index.tsx b/ensawards.org/data/apps/safepal-wallet/benchmarks/resolution/ensv2-ready-resolution/index.tsx
new file mode 100644
index 00000000..c450958a
--- /dev/null
+++ b/ensawards.org/data/apps/safepal-wallet/benchmarks/resolution/ensv2-ready-resolution/index.tsx
@@ -0,0 +1,44 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying app benchmarks
+
+import type { AcceptanceTestBenchmark } from "data/acceptance-tests/types";
+import type { AcceptanceTestBenchmarks } from "data/benchmarks/types";
+import { BenchmarkResults } from "data/benchmarks/types";
+import contributors from "data/contributors";
+import { acceptanceTestDetailsContainerStyles } from "data/ens-best-practices/styles";
+
+import { parseTimestamp } from "@ensnode/ensnode-sdk";
+
+import { cn } from "@/utils/tailwindClassConcatenation";
+
+import at1ProofImage from "./at-1.png";
+
+const ensv2ReadyResolution = {
+ "correctly-resolve-ensv2-test-name-address": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-03T09:56:41Z") },
+ ],
+ notes: (
+
+
+ ENSv2 ready resolution was tested using the "send" flow. The app doesn't support
+ the use of ENS names at all as the recipient identifier.
+
+
+ While that's a key issue that this app is encouraged to improve, this best practice is
+ applicable specifically to apps that already have an existing ENS integration and making
+ sure existing integrations are ENSv2 compatible. Therefore, for this best practice we
+ apply a rating of not applicable.
+
+
+
+ ),
+ } as const satisfies AcceptanceTestBenchmark,
+} as const satisfies AcceptanceTestBenchmarks;
+
+export default ensv2ReadyResolution;
diff --git a/ensawards.org/data/apps/safepal-wallet/icon.tsx b/ensawards.org/data/apps/safepal-wallet/icon.tsx
new file mode 100644
index 00000000..02af5b2f
--- /dev/null
+++ b/ensawards.org/data/apps/safepal-wallet/icon.tsx
@@ -0,0 +1,25 @@
+import React from "react";
+
+const Icon = ({ className, ...props }: React.SVGProps) => (
+
+);
+
+export default Icon;
diff --git a/ensawards.org/data/apps/safepal-wallet/index.ts b/ensawards.org/data/apps/safepal-wallet/index.ts
new file mode 100644
index 00000000..4e1fbee3
--- /dev/null
+++ b/ensawards.org/data/apps/safepal-wallet/index.ts
@@ -0,0 +1,28 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying apps
+
+import SafePalProject from "data/projects/safepal";
+
+import { defineApp } from "../registry.ts";
+import { type App, AppTypes } from "../types.ts";
+import SafePalIcon from "./icon.tsx";
+
+const SafePalWallet: App = {
+ id: "safepal-wallet",
+ appSlug: "safepal-wallet",
+ type: AppTypes.Wallet,
+ project: SafePalProject,
+ name: "SafePal",
+ description:
+ "Self-custodial multichain wallet for storing, sending, and swapping digital assets and interacting with decentralized applications, with optional hardware wallet pairing.",
+ socials: {
+ website: new URL("https://www.safepal.com"),
+ twitter: new URL("https://x.com/SafePal"),
+ },
+ icon: SafePalIcon,
+ // TODO: Add OG images
+};
+
+defineApp(SafePalWallet);
+
+export default SafePalWallet;
diff --git a/ensawards.org/data/apps/tokenpocket-wallet/benchmarks/index.tsx b/ensawards.org/data/apps/tokenpocket-wallet/benchmarks/index.tsx
new file mode 100644
index 00000000..662e3d70
--- /dev/null
+++ b/ensawards.org/data/apps/tokenpocket-wallet/benchmarks/index.tsx
@@ -0,0 +1,29 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying app benchmarks
+
+import TokenPocketWallet from "data/apps/tokenpocket-wallet";
+import { defineAppBenchmarks } from "data/benchmarks/registry";
+import type { BestPracticeBenchmarks } from "data/ens-best-practices/types";
+
+import depositAddresses from "./resolution/deposit-addresses";
+import ensv2ReadyResolution from "./resolution/ensv2-ready-resolution";
+
+const benchmarks = {
+ "ensv2-ready-resolution": ensv2ReadyResolution,
+ "deposit-addresses": depositAddresses,
+
+ // 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,
+ },
+} as const satisfies BestPracticeBenchmarks;
+
+defineAppBenchmarks(TokenPocketWallet, benchmarks);
+
+export default benchmarks;
diff --git a/ensawards.org/data/apps/tokenpocket-wallet/benchmarks/resolution/deposit-addresses/at-1.png b/ensawards.org/data/apps/tokenpocket-wallet/benchmarks/resolution/deposit-addresses/at-1.png
new file mode 100644
index 00000000..022e93a2
Binary files /dev/null and b/ensawards.org/data/apps/tokenpocket-wallet/benchmarks/resolution/deposit-addresses/at-1.png differ
diff --git a/ensawards.org/data/apps/tokenpocket-wallet/benchmarks/resolution/deposit-addresses/index.tsx b/ensawards.org/data/apps/tokenpocket-wallet/benchmarks/resolution/deposit-addresses/index.tsx
new file mode 100644
index 00000000..42372e1a
--- /dev/null
+++ b/ensawards.org/data/apps/tokenpocket-wallet/benchmarks/resolution/deposit-addresses/index.tsx
@@ -0,0 +1,80 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying app benchmarks
+
+import { type AcceptanceTestBenchmarks, BenchmarkResults } from "data/benchmarks/types";
+import contributors from "data/contributors";
+import {
+ buildEnsNotSupportedNote,
+ buildNotApplicableForFailedTest,
+} from "data/ens-best-practices/resolution/deposit-addresses/notes";
+
+import { parseTimestamp } from "@ensnode/ensnode-sdk";
+
+import at1Proof from "./at-1.png";
+
+const depositAddresses = {
+ "at01-resolve-onchain-name": {
+ result: BenchmarkResults.Fail,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-03T10:03:07Z") },
+ ],
+ notes: buildEnsNotSupportedNote({
+ method: 'the "send" flow',
+ proof: {
+ image: at1Proof,
+ alt: "TokenPocket Wallet doesn't allow ENS names as the recipient in the send flow",
+ },
+ }),
+ },
+ "at02-resolve-name-needing-normalization": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-03T10:03:07Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+ "at03-resolve-offchain-eth-subname": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-03T10:03:07Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+ "at04-resolve-offchain-dns-name": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-03T10:03:07Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+ "at05-resolve-name-on-other-evm-chain": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-03T10:03:07Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+ "at06-resolve-bitcoin-address": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-03T10:03:07Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+ "at07-resolve-solana-address": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-03T10:03:07Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+ "at08-handle-invalid-address-format": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-03T10:03:07Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
+ },
+} as const satisfies AcceptanceTestBenchmarks;
+
+export default depositAddresses;
diff --git a/ensawards.org/data/apps/tokenpocket-wallet/benchmarks/resolution/ensv2-ready-resolution/at-1.png b/ensawards.org/data/apps/tokenpocket-wallet/benchmarks/resolution/ensv2-ready-resolution/at-1.png
new file mode 100644
index 00000000..2d3efa3c
Binary files /dev/null and b/ensawards.org/data/apps/tokenpocket-wallet/benchmarks/resolution/ensv2-ready-resolution/at-1.png differ
diff --git a/ensawards.org/data/apps/tokenpocket-wallet/benchmarks/resolution/ensv2-ready-resolution/index.tsx b/ensawards.org/data/apps/tokenpocket-wallet/benchmarks/resolution/ensv2-ready-resolution/index.tsx
new file mode 100644
index 00000000..4a0ce640
--- /dev/null
+++ b/ensawards.org/data/apps/tokenpocket-wallet/benchmarks/resolution/ensv2-ready-resolution/index.tsx
@@ -0,0 +1,44 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying app benchmarks
+
+import type { AcceptanceTestBenchmark } from "data/acceptance-tests/types";
+import type { AcceptanceTestBenchmarks } from "data/benchmarks/types";
+import { BenchmarkResults } from "data/benchmarks/types";
+import contributors from "data/contributors";
+import { acceptanceTestDetailsContainerStyles } from "data/ens-best-practices/styles";
+
+import { parseTimestamp } from "@ensnode/ensnode-sdk";
+
+import { cn } from "@/utils/tailwindClassConcatenation";
+
+import at1ProofImage from "./at-1.png";
+
+const ensv2ReadyResolution = {
+ "correctly-resolve-ensv2-test-name-address": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-03T10:00:28Z") },
+ ],
+ notes: (
+
+
+ ENSv2 ready resolution was tested using the "send" flow. The app doesn't support
+ the use of ENS names at all as the recipient identifier.
+
+
+ While that's a key issue that this app is encouraged to improve, this best practice is
+ applicable specifically to apps that already have an existing ENS integration and making
+ sure existing integrations are ENSv2 compatible. Therefore, for this best practice we
+ apply a rating of not applicable.
+
+
+
+ ),
+ } as const satisfies AcceptanceTestBenchmark,
+} as const satisfies AcceptanceTestBenchmarks;
+
+export default ensv2ReadyResolution;
diff --git a/ensawards.org/data/apps/tokenpocket-wallet/icon.tsx b/ensawards.org/data/apps/tokenpocket-wallet/icon.tsx
new file mode 100644
index 00000000..747b395f
--- /dev/null
+++ b/ensawards.org/data/apps/tokenpocket-wallet/icon.tsx
@@ -0,0 +1,40 @@
+import React from "react";
+
+const Icon = ({ className, ...props }: React.SVGProps) => {
+ const reactId = React.useId();
+ const id = (name: string) => `${reactId}-${name}`;
+ const url = (name: string) => `url(#${id(name)})`;
+
+ return (
+
+ );
+};
+
+export default Icon;
diff --git a/ensawards.org/data/apps/tokenpocket-wallet/index.ts b/ensawards.org/data/apps/tokenpocket-wallet/index.ts
new file mode 100644
index 00000000..7a474055
--- /dev/null
+++ b/ensawards.org/data/apps/tokenpocket-wallet/index.ts
@@ -0,0 +1,28 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying apps
+
+import TokenPocketProject from "data/projects/tokenpocket";
+
+import { defineApp } from "../registry.ts";
+import { type App, AppTypes } from "../types.ts";
+import TokenPocketIcon from "./icon.tsx";
+
+const TokenPocketWallet: App = {
+ id: "tokenpocket-wallet",
+ appSlug: "tokenpocket-wallet",
+ type: AppTypes.Wallet,
+ project: TokenPocketProject,
+ name: "TokenPocket",
+ description:
+ "Self-custodial multichain wallet for storing, sending, and swapping digital assets and interacting with decentralized applications across Ethereum, Bitcoin, Solana, and other chains.",
+ socials: {
+ website: new URL("https://www.tokenpocket.pro"),
+ twitter: new URL("https://x.com/TokenPocket_TP"),
+ },
+ icon: TokenPocketIcon,
+ // TODO: Add OG images
+};
+
+defineApp(TokenPocketWallet);
+
+export default TokenPocketWallet;
diff --git a/ensawards.org/data/apps/uniswap-wallet/benchmarks/index.tsx b/ensawards.org/data/apps/uniswap-wallet/benchmarks/index.tsx
new file mode 100644
index 00000000..12f74d8e
--- /dev/null
+++ b/ensawards.org/data/apps/uniswap-wallet/benchmarks/index.tsx
@@ -0,0 +1,29 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying app benchmarks
+
+import UniswapWallet from "data/apps/uniswap-wallet";
+import { defineAppBenchmarks } from "data/benchmarks/registry";
+import type { BestPracticeBenchmarks } from "data/ens-best-practices/types";
+
+import depositAddresses from "./resolution/deposit-addresses";
+import ensv2ReadyResolution from "./resolution/ensv2-ready-resolution";
+
+const benchmarks = {
+ "ensv2-ready-resolution": ensv2ReadyResolution,
+ "deposit-addresses": depositAddresses,
+
+ // 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,
+ },
+} as const satisfies BestPracticeBenchmarks;
+
+defineAppBenchmarks(UniswapWallet, benchmarks);
+
+export default benchmarks;
diff --git a/ensawards.org/data/apps/uniswap-wallet/benchmarks/resolution/deposit-addresses/at-1.png b/ensawards.org/data/apps/uniswap-wallet/benchmarks/resolution/deposit-addresses/at-1.png
new file mode 100644
index 00000000..a70a9bc8
Binary files /dev/null and b/ensawards.org/data/apps/uniswap-wallet/benchmarks/resolution/deposit-addresses/at-1.png differ
diff --git a/ensawards.org/data/apps/uniswap-wallet/benchmarks/resolution/deposit-addresses/at-2.png b/ensawards.org/data/apps/uniswap-wallet/benchmarks/resolution/deposit-addresses/at-2.png
new file mode 100644
index 00000000..0c1d660b
Binary files /dev/null and b/ensawards.org/data/apps/uniswap-wallet/benchmarks/resolution/deposit-addresses/at-2.png differ
diff --git a/ensawards.org/data/apps/uniswap-wallet/benchmarks/resolution/deposit-addresses/at-3.png b/ensawards.org/data/apps/uniswap-wallet/benchmarks/resolution/deposit-addresses/at-3.png
new file mode 100644
index 00000000..69930cdc
Binary files /dev/null and b/ensawards.org/data/apps/uniswap-wallet/benchmarks/resolution/deposit-addresses/at-3.png differ
diff --git a/ensawards.org/data/apps/uniswap-wallet/benchmarks/resolution/deposit-addresses/at-4.gif b/ensawards.org/data/apps/uniswap-wallet/benchmarks/resolution/deposit-addresses/at-4.gif
new file mode 100644
index 00000000..5675f2ae
Binary files /dev/null and b/ensawards.org/data/apps/uniswap-wallet/benchmarks/resolution/deposit-addresses/at-4.gif differ
diff --git a/ensawards.org/data/apps/uniswap-wallet/benchmarks/resolution/deposit-addresses/at-5.png b/ensawards.org/data/apps/uniswap-wallet/benchmarks/resolution/deposit-addresses/at-5.png
new file mode 100644
index 00000000..cd8e1b05
Binary files /dev/null and b/ensawards.org/data/apps/uniswap-wallet/benchmarks/resolution/deposit-addresses/at-5.png differ
diff --git a/ensawards.org/data/apps/uniswap-wallet/benchmarks/resolution/deposit-addresses/at-6.gif b/ensawards.org/data/apps/uniswap-wallet/benchmarks/resolution/deposit-addresses/at-6.gif
new file mode 100644
index 00000000..f3ec04c1
Binary files /dev/null and b/ensawards.org/data/apps/uniswap-wallet/benchmarks/resolution/deposit-addresses/at-6.gif differ
diff --git a/ensawards.org/data/apps/uniswap-wallet/benchmarks/resolution/deposit-addresses/at-7.gif b/ensawards.org/data/apps/uniswap-wallet/benchmarks/resolution/deposit-addresses/at-7.gif
new file mode 100644
index 00000000..0449e948
Binary files /dev/null and b/ensawards.org/data/apps/uniswap-wallet/benchmarks/resolution/deposit-addresses/at-7.gif differ
diff --git a/ensawards.org/data/apps/uniswap-wallet/benchmarks/resolution/deposit-addresses/index.tsx b/ensawards.org/data/apps/uniswap-wallet/benchmarks/resolution/deposit-addresses/index.tsx
new file mode 100644
index 00000000..85940408
--- /dev/null
+++ b/ensawards.org/data/apps/uniswap-wallet/benchmarks/resolution/deposit-addresses/index.tsx
@@ -0,0 +1,130 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying app benchmarks
+
+import { type AcceptanceTestBenchmarks, BenchmarkResults } from "data/benchmarks/types";
+import contributors from "data/contributors";
+import {
+ buildFailNoteForAT5,
+ buildNotApplicableForFailedTest,
+ buildNotApplicableForNonEvmChain,
+ buildPassNoteForAT1,
+ buildPassNoteForAT2,
+ buildPassNoteForAT3,
+ buildPassNoteForAT4,
+} from "data/ens-best-practices/resolution/deposit-addresses/notes";
+
+import { parseTimestamp } from "@ensnode/ensnode-sdk";
+
+import at1Proof from "./at-1.png";
+import at2Proof from "./at-2.png";
+import at3Proof from "./at-3.png";
+import at4Proof from "./at-4.gif";
+import at5Proof from "./at-5.png";
+import at6Proof from "./at-6.gif";
+import at7Proof from "./at-7.gif";
+
+const method = 'the "send" flow';
+
+const depositAddresses = {
+ "at01-resolve-onchain-name": {
+ result: BenchmarkResults.Pass,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-02T10:49:22Z") },
+ ],
+ notes: buildPassNoteForAT1({
+ method,
+ proof: {
+ image: at1Proof,
+ alt: "Uniswap Wallet correctly resolves the address for vitalik.eth",
+ },
+ }),
+ },
+ "at02-resolve-name-needing-normalization": {
+ result: BenchmarkResults.Pass,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-02T10:49:22Z") },
+ ],
+ notes: buildPassNoteForAT2({
+ method,
+ proof: {
+ image: at2Proof,
+ alt: "Uniswap Wallet correctly resolves the address for Ξthereum.eth",
+ },
+ }),
+ },
+ "at03-resolve-offchain-eth-subname": {
+ result: BenchmarkResults.Pass,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-02T10:49:22Z") },
+ ],
+ notes: buildPassNoteForAT3({
+ method,
+ proof: {
+ image: at3Proof,
+ alt: "Uniswap Wallet correctly resolves the address for jesse.base.eth",
+ },
+ }),
+ },
+ "at04-resolve-offchain-dns-name": {
+ result: BenchmarkResults.Pass,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-02T10:49:22Z") },
+ ],
+ notes: buildPassNoteForAT4({
+ method,
+ proof: {
+ image: at4Proof,
+ alt: "Uniswap Wallet correctly resolves the address for dperri.com",
+ },
+ }),
+ },
+ "at05-resolve-name-on-other-evm-chain": {
+ result: BenchmarkResults.Fail,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-02T10:49:22Z") },
+ ],
+ notes: buildFailNoteForAT5({
+ method,
+ proof: {
+ image: at5Proof,
+ alt: "Uniswap Wallet fails to resolve the address for lightkeeper.eth on the Base chain",
+ },
+ extra: "The app resolved to the Ethereum Mainnet address instead of the Base address.",
+ }),
+ },
+ "at06-resolve-bitcoin-address": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-02T10:49:22Z") },
+ ],
+ notes: buildNotApplicableForNonEvmChain({
+ chain: "Bitcoin",
+ proof: {
+ image: at6Proof,
+ alt: "Uniswap Wallet has no context of the Bitcoin chain in the send flow",
+ },
+ }),
+ },
+ "at07-resolve-solana-address": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-02T10:49:22Z") },
+ ],
+ notes: buildNotApplicableForNonEvmChain({
+ chain: "Solana",
+ proof: {
+ image: at7Proof,
+ alt: "Uniswap Wallet has no context of the Solana chain in the send flow",
+ },
+ }),
+ },
+ "at08-handle-invalid-address-format": {
+ result: BenchmarkResults.NotApplicable,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-02T10:49:22Z") },
+ ],
+ notes: buildNotApplicableForFailedTest({ testNumber: 5, scope: "on Base" }),
+ },
+} as const satisfies AcceptanceTestBenchmarks;
+
+export default depositAddresses;
diff --git a/ensawards.org/data/apps/uniswap-wallet/benchmarks/resolution/ensv2-ready-resolution/at-1.png b/ensawards.org/data/apps/uniswap-wallet/benchmarks/resolution/ensv2-ready-resolution/at-1.png
new file mode 100644
index 00000000..d440bd98
Binary files /dev/null and b/ensawards.org/data/apps/uniswap-wallet/benchmarks/resolution/ensv2-ready-resolution/at-1.png differ
diff --git a/ensawards.org/data/apps/uniswap-wallet/benchmarks/resolution/ensv2-ready-resolution/index.tsx b/ensawards.org/data/apps/uniswap-wallet/benchmarks/resolution/ensv2-ready-resolution/index.tsx
new file mode 100644
index 00000000..62a73283
--- /dev/null
+++ b/ensawards.org/data/apps/uniswap-wallet/benchmarks/resolution/ensv2-ready-resolution/index.tsx
@@ -0,0 +1,44 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying app benchmarks
+
+import type { AcceptanceTestBenchmark } from "data/acceptance-tests/types";
+import { type AcceptanceTestBenchmarks, BenchmarkResults } from "data/benchmarks/types";
+import contributors from "data/contributors";
+import {
+ acceptanceTestDetailsContainerStyles,
+ bestPracticeTechnicalDetailsCodeStyles,
+} from "data/ens-best-practices/styles";
+
+import { parseTimestamp } from "@ensnode/ensnode-sdk";
+
+import { cn } from "@/utils/tailwindClassConcatenation";
+
+import at1ProofImage from "./at-1.png";
+
+const ensv2ReadyResolution = {
+ "correctly-resolve-ensv2-test-name-address": {
+ result: BenchmarkResults.Pass,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-07-02T10:34:33Z") },
+ ],
+ notes: (
+
+
+ ENSv2 ready resolution was tested using the "send" flow. The resolved address is
+ correct (
+
+ 0x2222222222222222222222222222222222222222
+
+ ).
+
+
+
+ ),
+ } as const satisfies AcceptanceTestBenchmark,
+} as const satisfies AcceptanceTestBenchmarks;
+
+export default ensv2ReadyResolution;
diff --git a/ensawards.org/data/apps/uniswap-wallet/icon.tsx b/ensawards.org/data/apps/uniswap-wallet/icon.tsx
new file mode 100644
index 00000000..2db804fd
--- /dev/null
+++ b/ensawards.org/data/apps/uniswap-wallet/icon.tsx
@@ -0,0 +1,55 @@
+import React from "react";
+
+const Icon = (props: React.SVGProps) => (
+
+);
+
+export default Icon;
diff --git a/ensawards.org/data/apps/uniswap-wallet/index.ts b/ensawards.org/data/apps/uniswap-wallet/index.ts
new file mode 100644
index 00000000..d87d9460
--- /dev/null
+++ b/ensawards.org/data/apps/uniswap-wallet/index.ts
@@ -0,0 +1,30 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying apps
+
+import UniswapProject from "data/projects/uniswap";
+import { asInterpretedName } from "enssdk";
+
+import { defineApp } from "../registry.ts";
+import { type App, AppTypes } from "../types.ts";
+import UniswapIcon from "./icon.tsx";
+
+const UniswapWallet: App = {
+ id: "uniswap-wallet",
+ appSlug: "uniswap-wallet",
+ type: AppTypes.Wallet,
+ project: UniswapProject,
+ name: "Uniswap Wallet",
+ description:
+ "Self-custodial wallet for swapping, sending, and managing tokens and NFTs across Ethereum and other chains, with built-in access to the Uniswap protocol.",
+ socials: {
+ website: new URL("https://wallet.uniswap.org/"),
+ twitter: new URL("https://x.com/Uniswap"),
+ ens: asInterpretedName("uniswap.eth"),
+ },
+ icon: UniswapIcon,
+ // TODO: Add OG images
+};
+
+defineApp(UniswapWallet);
+
+export default UniswapWallet;
diff --git a/ensawards.org/data/projects/gem/icon.tsx b/ensawards.org/data/projects/gem/icon.tsx
new file mode 100644
index 00000000..d4f35c27
--- /dev/null
+++ b/ensawards.org/data/projects/gem/icon.tsx
@@ -0,0 +1,48 @@
+import React from "react";
+
+const Icon = ({ className, ...props }: React.SVGProps) => {
+ const reactId = React.useId();
+ const id = (name: string) => `${reactId}-${name}`;
+ const url = (name: string) => `url(#${id(name)})`;
+
+ return (
+
+ );
+};
+
+export default Icon;
diff --git a/ensawards.org/data/projects/gem/index.ts b/ensawards.org/data/projects/gem/index.ts
new file mode 100644
index 00000000..57cd301c
--- /dev/null
+++ b/ensawards.org/data/projects/gem/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 GemIcon from "./icon.tsx";
+
+const GemProject: Project = {
+ id: ProjectIds.Gem,
+ name: "Gem",
+ description:
+ "Open-source, self-custodial multichain crypto wallet for storing, sending, and swapping digital assets and interacting with decentralized applications.",
+ icon: GemIcon,
+ socials: {
+ website: new URL("https://gemwallet.com"),
+ twitter: new URL("https://x.com/gemwallet"),
+ },
+};
+
+defineProject(GemProject);
+
+export default GemProject;
diff --git a/ensawards.org/data/projects/imtoken/icon.tsx b/ensawards.org/data/projects/imtoken/icon.tsx
new file mode 100644
index 00000000..504dde6d
--- /dev/null
+++ b/ensawards.org/data/projects/imtoken/icon.tsx
@@ -0,0 +1,48 @@
+import React from "react";
+
+const Icon = ({ className, ...props }: React.SVGProps) => {
+ const reactId = React.useId();
+ const id = (name: string) => `${reactId}-${name}`;
+ const url = (name: string) => `url(#${id(name)})`;
+
+ return (
+
+ );
+};
+
+export default Icon;
diff --git a/ensawards.org/data/projects/imtoken/index.ts b/ensawards.org/data/projects/imtoken/index.ts
new file mode 100644
index 00000000..c1b29d32
--- /dev/null
+++ b/ensawards.org/data/projects/imtoken/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 ImTokenIcon from "./icon.tsx";
+
+const ImTokenProject: Project = {
+ id: ProjectIds.ImToken,
+ name: "imToken",
+ description:
+ "Self-custodial multichain wallet for storing, sending, and swapping digital assets and interacting with decentralized applications across Ethereum, Bitcoin, and other chains.",
+ icon: ImTokenIcon,
+ socials: {
+ website: new URL("https://token.im"),
+ twitter: new URL("https://twitter.com/imTokenOfficial"),
+ },
+};
+
+defineProject(ImTokenProject);
+
+export default ImTokenProject;
diff --git a/ensawards.org/data/projects/mew/icon.tsx b/ensawards.org/data/projects/mew/icon.tsx
new file mode 100644
index 00000000..7df6525c
--- /dev/null
+++ b/ensawards.org/data/projects/mew/icon.tsx
@@ -0,0 +1,22 @@
+import React from "react";
+
+const Icon = ({ className, ...props }: React.SVGProps) => (
+
+);
+
+export default Icon;
diff --git a/ensawards.org/data/projects/mew/index.ts b/ensawards.org/data/projects/mew/index.ts
new file mode 100644
index 00000000..2dfbb253
--- /dev/null
+++ b/ensawards.org/data/projects/mew/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 MEWIcon from "./icon.tsx";
+
+const MEWProject: Project = {
+ id: ProjectIds.MEW,
+ name: "MEW",
+ description:
+ "MyEtherWallet: a self-custodial interface for creating and managing Ethereum wallets, sending tokens, and interacting with decentralized applications.",
+ icon: MEWIcon,
+ socials: {
+ website: new URL("https://www.myetherwallet.com"),
+ twitter: new URL("https://x.com/myetherwallet"),
+ },
+};
+
+defineProject(MEWProject);
+
+export default MEWProject;
diff --git a/ensawards.org/data/projects/safepal/icon.tsx b/ensawards.org/data/projects/safepal/icon.tsx
new file mode 100644
index 00000000..02af5b2f
--- /dev/null
+++ b/ensawards.org/data/projects/safepal/icon.tsx
@@ -0,0 +1,25 @@
+import React from "react";
+
+const Icon = ({ className, ...props }: React.SVGProps) => (
+
+);
+
+export default Icon;
diff --git a/ensawards.org/data/projects/safepal/index.ts b/ensawards.org/data/projects/safepal/index.ts
new file mode 100644
index 00000000..6d8727bc
--- /dev/null
+++ b/ensawards.org/data/projects/safepal/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 SafePalIcon from "./icon.tsx";
+
+const SafePalProject: Project = {
+ id: ProjectIds.SafePal,
+ name: "SafePal",
+ description:
+ "Self-custodial crypto wallet spanning hardware, mobile, and browser-extension apps for storing, sending, and swapping digital assets across multiple chains.",
+ icon: SafePalIcon,
+ socials: {
+ website: new URL("https://www.safepal.com"),
+ twitter: new URL("https://x.com/SafePal"),
+ },
+};
+
+defineProject(SafePalProject);
+
+export default SafePalProject;
diff --git a/ensawards.org/data/projects/tokenpocket/icon.tsx b/ensawards.org/data/projects/tokenpocket/icon.tsx
new file mode 100644
index 00000000..747b395f
--- /dev/null
+++ b/ensawards.org/data/projects/tokenpocket/icon.tsx
@@ -0,0 +1,40 @@
+import React from "react";
+
+const Icon = ({ className, ...props }: React.SVGProps) => {
+ const reactId = React.useId();
+ const id = (name: string) => `${reactId}-${name}`;
+ const url = (name: string) => `url(#${id(name)})`;
+
+ return (
+
+ );
+};
+
+export default Icon;
diff --git a/ensawards.org/data/projects/tokenpocket/index.ts b/ensawards.org/data/projects/tokenpocket/index.ts
new file mode 100644
index 00000000..dd5049d8
--- /dev/null
+++ b/ensawards.org/data/projects/tokenpocket/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 TokenPocketIcon from "./icon.tsx";
+
+const TokenPocketProject: Project = {
+ id: ProjectIds.TokenPocket,
+ name: "TokenPocket",
+ description:
+ "Self-custodial multichain wallet for storing, sending, and swapping digital assets and interacting with decentralized applications across Ethereum, Bitcoin, Solana, and other chains.",
+ icon: TokenPocketIcon,
+ socials: {
+ website: new URL("https://www.tokenpocket.pro"),
+ twitter: new URL("https://x.com/TokenPocket_TP"),
+ },
+};
+
+defineProject(TokenPocketProject);
+
+export default TokenPocketProject;
diff --git a/ensawards.org/data/projects/types.ts b/ensawards.org/data/projects/types.ts
index aec22ea5..e99e9f90 100644
--- a/ensawards.org/data/projects/types.ts
+++ b/ensawards.org/data/projects/types.ts
@@ -59,6 +59,11 @@ export const ProjectIds = {
XTcom: "project-xtcom",
WhiteBIT: "project-whitebit",
Ourbit: "project-ourbit",
+ MEW: "project-mew",
+ Gem: "project-gem",
+ ImToken: "project-imtoken",
+ SafePal: "project-safepal",
+ TokenPocket: "project-tokenpocket",
} as const;
/**