diff --git a/.agents/skills/generate-app-benchmark/SKILL.md b/.agents/skills/generate-app-benchmark/SKILL.md index 143e9f5a..7f306075 100644 --- a/.agents/skills/generate-app-benchmark/SKILL.md +++ b/.agents/skills/generate-app-benchmark/SKILL.md @@ -38,7 +38,7 @@ Copy this checklist and track progress: - [ ] Step 6: Typecheck ``` -### Step 1: Resolve acceptance test slugs + canonical name/address spans (once) +### Step 1: Resolve acceptance test slugs + note builders (once) The `manual.json` test `id`s map **positionally** (1-based) to the best practice's acceptance tests, in declaration order. Read them from the best @@ -50,26 +50,41 @@ ensawards.org/data/ens-best-practices/**//technicalDetails.t Sort the acceptance tests by `order` (slug as the tiebreaker) before mapping `manual.json` ids to slugs. -While reading that file, also note the **canonical ENS name and expected -address** each acceptance test exercises. These are defined as exported `*Span` -constants (e.g. `vitalikEnsNameSpan`, `vitalikAddressSpan`, -`lightkeeperEnsNameSpan`, `lightkeeperAddressSpan`, ...) that render the name / -address in the correct code style. The benchmark notes **must** reference these -exported spans rather than vague phrasing — import them from the best practice's -`technicalDetails` module: +#### Prefer the best practice's shared note builders + +A best practice may ship a `notes.tsx` module next to its `technicalDetails.tsx`: -```tsx -import { - vitalikEnsNameSpan, - vitalikAddressSpan, - // ...one pair (or more) per test you emit -} from "data/ens-best-practices///technicalDetails"; +``` +ensawards.org/data/ens-best-practices///notes.tsx ``` -If a span you need isn't exported yet, add `export` to its `const` declaration -in `technicalDetails.tsx` (a non-breaking change). Map each acceptance test id to -its spans (name + expected chain + expected address) so Step 4 can write concrete -notes. +If it exists, **the benchmark notes must be generated with these builders** — +do **not** hand-write `
`/`

`/`` markup or import the canonical +`*Span` constants into the app file. Each acceptance test always exercises the +same ENS name, expected address, and chain, so those are already baked into the +builders. The app file only supplies what varies per app: + +- `method` — how the test was run (e.g. `'the "send" flow'`) +- `proof` — the screenshot(s) (`{ image, alt }`, or an array for multiple) +- which builder you call (encodes the result + acceptance test) + +Read `notes.tsx` to see the available builders. `deposit-addresses` exports, for +example: + +- `buildPassNoteForAT1`…`buildPassNoteForAT8` — a name resolves correctly. +- `buildFailNoteForAT1`…`buildFailNoteForAT8` — a name fails to resolve; each + takes an optional `extra` follow-up sentence for app-specific detail. +- `buildEnsNotSupportedNote` — the app doesn't accept ENS names at all (AT1). +- `buildNotApplicableForNonEvmChain({ chain })` — Bitcoin / Solana not supported. +- `buildNotApplicableForFailedTest({ testNumber, scope })` — a prerequisite test + failed (`scope` defaults to `"at all"`; use `"on Base"` for the AT5 cascade). +- `buildBenchmarkNote({ children, proof })` — escape hatch for an unusual result + no builder covers. Only here may you import `*Span` constants from + `technicalDetails` to write custom prose. + +If `notes.tsx` doesn't exist for the target best practice, fall back to writing +notes inline (see the legacy guidance at the end of Step 4), referencing the +exported `*Span` constants from `technicalDetails.tsx` (add `export` if missing). ### Step 3: Locate manual.json + proof media (per app) @@ -157,41 +172,33 @@ Write `index.tsx` in the directory that holds `manual.json` (replace any empty `AcceptanceTestBenchmarks` keyed by acceptance test slug. Include **one entry per test present in `manual.json`** (keyed by the slug at that id's position). -Notes prose: write a short natural sentence per test combining the relevant -`method` (per-test override if present, else the global `method`) and the -`reason`. **Always name the concrete ENS name tested and the expected address** -using the spans imported in Step 1 (e.g. "The resolved Ethereum Mainnet address -of {vitalikEnsNameSpan} is correct ({vitalikAddressSpan}).") instead of vague -phrasing like "The resolved address is correct.". For passes, state the resolved -name maps to the expected address; for failures, name the tested ENS name and the -expected address, then emphasize the negative outcome with `NOT` (e.g. the -shown value was wrong / an error appeared). Include an `` only when a matching -proof image exists. `Not Applicable` notes generally don't reference a specific -address (see Special overrides). - -The `reason` and `method` strings are **not strict** — they are author notes, -not literal copy. Freely rephrase, correct, and expand them so the prose reads -naturally and accurately reflects what the test actually verified. Add clarifying -detail where helpful; just don't contradict the recorded `status`. - -File template (one import per proof image, in id order): +Notes: call the right note builder per entry (see Step 1). Pick the builder from +the acceptance test id (its 1-based position) and the recorded `status`, then pass: + +- `method` — derive a short phrase from the per-test `method` override (else the + global `method`) describing **how** the test was run. Omit the chain context the + builder already bakes in (e.g. don't repeat "on Base" for the AT5 builder). +- `proof` — `{ image: , alt: " ..." }` when a matching proof image + exists; multiple images → pass an array. Omit when there's no proof. +- `extra` (fail builders) — an optional extra sentence for app-specific detail + (e.g. `'The app showed an "invalid domain format" error instead.'`). + +The `reason` and `method` strings are **not strict** — they are author notes, not +literal copy. Use them to choose the builder and to phrase `method`/`extra` +naturally and accurately; just don't contradict the recorded `status`. + +File template (deposit-addresses; import only the builders + proofs you use): ```tsx -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 { - , - , - // ...more spans, one (or more) per emitted test -} from "data/ens-best-practices///technicalDetails"; + buildPassNoteForAT1, + // ...one builder per emitted test +} from "data/ens-best-practices///notes"; -import { cn } from "@/utils/tailwindClassConcatenation"; +import { parseTimestamp } from "@ensnode/ensnode-sdk"; import at1Proof from "./at-1.png"; // ...more proof imports @@ -200,84 +207,82 @@ const = { "": { result: BenchmarkResults.Pass, contributions: [{ from: contributors., lastUpdated: parseTimestamp("") }], - notes: ( -

-

} and {}>

- <app> correctly resolves ... -
- ), - } as const satisfies AcceptanceTestBenchmark, + notes: buildPassNoteForAT1({ + method: "", + proof: { image: at1Proof, alt: " correctly resolves ..." }, + }), + }, // ...more entries } as const satisfies AcceptanceTestBenchmarks; export default ; ``` +The single `} as const satisfies AcceptanceTestBenchmarks;` at the end type-checks +every entry, so individual entries don't need a per-entry +`as const satisfies AcceptanceTestBenchmark` (and the `AcceptanceTestBenchmark` +type import isn't needed in deposit-addresses files). + Result-specific entry examples — match these renderings: **Passed** (proof image present): ```tsx -"correctly-resolve-direct-onchain-subname-address": { +"at01-resolve-onchain-name": { result: BenchmarkResults.Pass, contributions: [{ from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-15T06:40:48Z") }], - notes: ( -
-

- Tested using the search flow on etherscan.io. The resolved Ethereum Mainnet address of{" "} - {vitalikEnsNameSpan} is correct ({vitalikAddressSpan}). -

- Etherscan correctly resolves the deposit address -
- ), -} as const satisfies AcceptanceTestBenchmark, + notes: buildPassNoteForAT1({ + method: "the name lookup search on etherscan.io", + proof: { image: at1Proof, alt: "Etherscan correctly resolves the deposit address" }, + }), +}, ``` -**Failed** (name the ENS name + expected address, then emphasize the failure): +**Failed** (the builder bakes in the ENS name, expected address, and `NOT` +emphasis; add `extra` for any app-specific detail): ```tsx -"correctly-resolve-names-for-different-evm-chains": { +"at05-resolve-name-on-other-evm-chain": { result: BenchmarkResults.Fail, contributions: [{ from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-09T06:37:10Z") }], - notes: ( -
-

- Tested using the search flow on basescan.org. For {lightkeeperEnsNameSpan} the shown - address was the mainnet address, NOT the expected Base chain address - ({lightkeeperAddressSpan}). -

- Etherscan fails to resolve the Base deposit address -
- ), -} as const satisfies AcceptanceTestBenchmark, + notes: buildFailNoteForAT5({ + method: "the name lookup search on basescan.org", + proof: { image: at5Proof, alt: "Etherscan fails to resolve the Base deposit address" }, + extra: "The app showed the Ethereum Mainnet address instead.", + }), +}, ``` -**Not applicable** (typically no proof image — omit ``): +**Not applicable** (no proof needed — omit `proof`): ```tsx -"correctly-resolve-names-for-bitcoin": { +"at06-resolve-bitcoin-address": { result: BenchmarkResults.NotApplicable, contributions: [{ from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-08T16:18:00Z") }], - notes: ( -
-

Etherscan doesn't support Bitcoin.

-
+ notes: buildNotApplicableForNonEvmChain({ chain: "Bitcoin" }), +}, +``` + +**Escape hatch** (result a builder doesn't cover — write custom prose; this is the +only place you may import `*Span` constants from `technicalDetails`): + +```tsx +notes: buildBenchmarkNote({ + proof: { image: at2Proof, alt: "..." }, + children: ( + <> + Tested using {method}. For {ethereumUnnormalizedEnsNameSpan} the resolved address is correct + ({ethereumAddressSpan}), but the app behaves inconsistently ... so we count this as a failure. + ), -} as const satisfies AcceptanceTestBenchmark, +}), ``` +**Legacy fallback** (only when the best practice has no `notes.tsx`): write the +note inline as `
` +with a `

` and optional ``, naming the concrete ENS name and expected +address via the `*Span` constants imported from `technicalDetails.tsx`. + ### Step 5: Wire into the app's main benchmarks file In `ensawards.org/data/apps//benchmarks/index.tsx`, replace the target best @@ -304,65 +309,26 @@ error referencing a deleted `index.ts`; `tsc` is the source of truth. ## Special overrides -### deposit-address - -When a test is `not-applicable` because a **dependent test failed** (e.g. the -`reason` says something like "at#5 is failed"), don't write a literal note. -Instead, derive the cause from the dependency and emit a styled note that -references the failed acceptance test. Import -`bestPracticeTechnicalDetailsCodeStyles` alongside -`acceptanceTestDetailsContainerStyles` from `data/ens-best-practices/styles`. - -If the dependency is **Acceptance Test 1** (the app doesn't appear to support ENS -resolution at all): - -```tsx -

-

- Based on the results of the{" "} - Acceptance Test 1, the - app doesn't appear to support ENS resolution at all and therefore we classify this - acceptance test as{" "} - Not Applicable. -

-
-``` - -If the dependency is the **different-EVM-chains / Base test** (Acceptance Test 5) -that failed, reference Test 5 and say the app doesn't support resolution on Base: - -```tsx -
-

- Based on the results of the{" "} - Acceptance Test 5, the - app doesn't appear to support ENS resolution on Base and therefore we classify this - acceptance test as{" "} - Not Applicable. -

-
-``` - -For non-EVM chains the app doesn't support, use the same styled `Not Applicable` -treatment (no dependent-test reference): - -```tsx -// Bitcoin -

- The app doesn't have context of the non-EVM chain Bitcoin and therefore we classify this - acceptance test as{" "} - Not Applicable. -

-``` - -```tsx -// Solana -

- The app doesn't have context of the non-EVM chain Solana and therefore we classify this - acceptance test as{" "} - Not Applicable. -

-``` +### deposit-addresses + +Use the `notes.tsx` builders (see Step 1) for these recurring patterns instead of +writing markup: + +- **App doesn't accept ENS names at all** (AT1 fails this way): use + `buildEnsNotSupportedNote({ method, proof })`. The remaining acceptance tests + then become Not Applicable via `buildNotApplicableForFailedTest({ testNumber: 1 })` + (default `scope: "at all"`). +- **`not-applicable` because a dependent test failed** (e.g. `reason` says + "at#5 is failed"): `buildNotApplicableForFailedTest({ testNumber, scope })`. + For the AT5 / Base cascade pass `scope: "on Base"`. +- **Non-EVM chain not supported** (Bitcoin / Solana): + `buildNotApplicableForNonEvmChain({ chain: "Bitcoin" })` / + `{ chain: "Solana" }` (pass `proof` if a screenshot exists). + +Never import `*Span` constants or `bestPracticeTechnicalDetailsCodeStyles` / +`acceptanceTestDetailsContainerStyles` into a deposit-addresses app file — the +builders own all of that. The only exception is the `buildBenchmarkNote` escape +hatch, where you write custom prose and may import the spans you need. ## Notes diff --git a/.agents/skills/rearrange-app-benchmarks/SKILL.md b/.agents/skills/rearrange-app-benchmarks/SKILL.md index ff9393f8..59cc7bae 100644 --- a/.agents/skills/rearrange-app-benchmarks/SKILL.md +++ b/.agents/skills/rearrange-app-benchmarks/SKILL.md @@ -96,14 +96,14 @@ All-`undefined` module example: import type { AcceptanceTestBenchmarks } from "data/benchmarks/types"; const depositAddresses = { - "correctly-resolve-direct-onchain-subname-address": undefined, - "correctly-resolve-names-requiring-normalization": undefined, - "correctly-implement-ccip-read-for-eth-subnames": undefined, - "correctly-implement-ccip-read-for-offchain-dns-names": undefined, - "correctly-resolve-names-for-different-evm-chains": undefined, - "correctly-resolve-names-for-bitcoin": undefined, - "correctly-resolve-names-for-solana": undefined, - "correctly-handle-resolution-for-chains-with-invalid-address-formatting": undefined, + "at01-resolve-onchain-name": undefined, + "at02-resolve-name-needing-normalization": undefined, + "at03-resolve-offchain-eth-subname": undefined, + "at04-resolve-offchain-dns-name": undefined, + "at05-resolve-name-on-other-evm-chain": undefined, + "at06-resolve-bitcoin-address": undefined, + "at07-resolve-solana-address": undefined, + "at08-handle-invalid-address-format": undefined, } as const satisfies AcceptanceTestBenchmarks; export default depositAddresses; diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 7bc77928..e23e2292 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -471,7 +471,43 @@ export type AcceptanceTestBenchmark = | NotApplicableAcceptanceTestBenchmark; ``` -3. Add notes made during the benchmarking process in the form of a simple JSX element that is a part of the new item in the `benchmarks` record. For reference, see +3. Add notes describing how the benchmark result was determined. The `notes` field is a JSX element, but for most best practices you should **not** hand-write the markup. + +#### Use a best practice's note builders (preferred) + +Many best practices ship a `notes.tsx` module next to their `technicalDetails.tsx`: + +``` +ensawards.org/data/ens-best-practices/[category]/[bestPractice]/notes.tsx +``` + +When one exists, generate your notes with these builder functions instead of writing `
`/`

`/`` by hand. Every acceptance test always exercises the same ENS name, expected address, and chain, so the builders bake those in for you — you only supply what actually varies per app: how you tested it (`method`) and the proof screenshot(s) (`proof`). This keeps notes consistent and accurate, and makes them easy to update later. + +For example, the `deposit-addresses` best practice (see [ensawards.org/data/ens-best-practices/resolution/deposit-addresses/notes.tsx](ensawards.org/data/ens-best-practices/resolution/deposit-addresses/notes.tsx)) exports builders such as `buildPassNoteForAT1`, `buildFailNoteForAT5`, `buildEnsNotSupportedNote`, `buildNotApplicableForNonEvmChain`, and `buildNotApplicableForFailedTest`. A benchmark entry then reads: + +```tsx +import { + buildFailNoteForAT5, + buildPassNoteForAT1, +} from "data/ens-best-practices/resolution/deposit-addresses/notes"; + +// ... + +"at01-resolve-onchain-name": { + result: BenchmarkResults.Pass, + contributions: [{ from: contributors.you, lastUpdated: parseTimestamp("2026-06-19T11:48:58Z") }], + notes: buildPassNoteForAT1({ + method: 'the "send" flow', + proof: { image: at1Proof, alt: "MyApp correctly resolves the address for vitalik.eth" }, + }), +}, +``` + +The `fail` builders also accept an optional `extra` sentence for app-specific detail, and there's a `buildBenchmarkNote` escape hatch for the rare result no builder covers. For full per-app references see [ensawards.org/data/apps/etherscan-explorer/benchmarks/resolution/deposit-address/index.tsx](ensawards.org/data/apps/etherscan-explorer/benchmarks/resolution/deposit-address/index.tsx) and [ensawards.org/data/apps/zerion-wallet/benchmarks/resolution/deposit-addresses/index.tsx](ensawards.org/data/apps/zerion-wallet/benchmarks/resolution/deposit-addresses/index.tsx). + +#### Writing notes by hand (when there's no `notes.tsx`) + +If the relevant best practice doesn't provide note builders, write the `notes` JSX element directly as part of the new item in the `benchmarks` record. For reference, see [ensawards.org/data/apps/walletchan-wallet/benchmarks/index.tsx](ensawards.org/data/apps/walletchan-wallet/benchmarks/index.tsx). diff --git a/ensawards.org/data/apps/1inch-defi/benchmarks/resolution/deposit-address/index.tsx b/ensawards.org/data/apps/1inch-defi/benchmarks/resolution/deposit-address/index.tsx index 056a5c3a..046cb4f9 100644 --- a/ensawards.org/data/apps/1inch-defi/benchmarks/resolution/deposit-address/index.tsx +++ b/ensawards.org/data/apps/1inch-defi/benchmarks/resolution/deposit-address/index.tsx @@ -1,34 +1,22 @@ // Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md // for additional advice on adding and modifying apps -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 { - dperriComAddressSpan, - dperriComEnsNameSpan, - ethereumAddressSpan, - ethereumNormalizedEnsNameSpan, - ethereumUnnormalizedEnsNameSpan, - gregskrilAddressSolanaSpan, - gregskrilEnsNameSpan, - jesseBaseAddressSpan, - jesseBaseEnsNameSpan, - lightkeeperAddressSpan, - lightkeeperEnsNameSpan, - vitalikAddressSpan, - vitalikEnsNameSpan, -} from "data/ens-best-practices/resolution/deposit-addresses/technicalDetails"; -import { - acceptanceTestDetailsContainerStyles, - bestPracticeTechnicalDetailsCodeStyles, -} from "data/ens-best-practices/styles"; + buildFailNoteForAT4, + buildFailNoteForAT5, + buildFailNoteForAT7, + buildNotApplicableForFailedTest, + buildNotApplicableForNonEvmChain, + buildPassNoteForAT1, + buildPassNoteForAT2, + buildPassNoteForAT3, +} from "data/ens-best-practices/resolution/deposit-addresses/notes"; import { parseTimestamp } from "@ensnode/ensnode-sdk"; -import { cn } from "@/utils/tailwindClassConcatenation"; - import at1Proof from "./at-1.gif"; import at2Proof from "./at-2.gif"; import at3Proof from "./at-3.gif"; @@ -36,160 +24,90 @@ import at4Proof from "./at-4.png"; import at5Proof from "./at-5.gif"; import at7Proof from "./at-7.png"; +const evmWalletMethod = 'the "send" feature on 1inch.com with a connected EVM wallet'; + const depositAddresses = { - "correctly-resolve-direct-onchain-subname-address": { + "at01-resolve-onchain-name": { result: BenchmarkResults.Pass, contributions: [ { from: contributors.llev, lastUpdated: parseTimestamp("2026-06-19T15:10:01Z") }, ], - notes: ( -

-

- Tested using the "send" feature on 1inch.com with a connected EVM wallet. The - resolved Ethereum Mainnet address of {vitalikEnsNameSpan} is correct ({vitalikAddressSpan} - ). -

- 1inch correctly resolves the direct onchain subname address -
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-resolve-names-requiring-normalization": { + notes: buildPassNoteForAT1({ + method: evmWalletMethod, + proof: { + image: at1Proof, + alt: "1inch correctly resolves the direct onchain subname address", + }, + }), + }, + "at02-resolve-name-needing-normalization": { result: BenchmarkResults.Pass, contributions: [ { from: contributors.llev, lastUpdated: parseTimestamp("2026-06-19T15:10:01Z") }, ], - notes: ( -
-

- Tested using the "send" feature on 1inch.com with a connected EVM wallet. The - input {ethereumUnnormalizedEnsNameSpan} was correctly normalized to{" "} - {ethereumNormalizedEnsNameSpan} and resolved to the correct Ethereum Mainnet address ( - {ethereumAddressSpan}). -

- 1inch correctly resolves a name requiring normalization -
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-implement-ccip-read-for-eth-subnames": { + notes: buildPassNoteForAT2({ + method: evmWalletMethod, + proof: { image: at2Proof, alt: "1inch correctly resolves a name requiring normalization" }, + }), + }, + "at03-resolve-offchain-eth-subname": { result: BenchmarkResults.Pass, contributions: [ { from: contributors.llev, lastUpdated: parseTimestamp("2026-06-19T15:10:01Z") }, ], - notes: ( -
-

- Tested using the "send" feature on 1inch.com with a connected EVM wallet. The - CCIP-Read enabled .eth subname {jesseBaseEnsNameSpan} resolved to the correct Ethereum - Mainnet address ({jesseBaseAddressSpan}). -

- 1inch correctly implements CCIP-Read for .eth subnames -
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-implement-ccip-read-for-offchain-dns-names": { + notes: buildPassNoteForAT3({ + method: evmWalletMethod, + proof: { image: at3Proof, alt: "1inch correctly implements CCIP-Read for .eth subnames" }, + }), + }, + "at04-resolve-offchain-dns-name": { result: BenchmarkResults.Fail, contributions: [ { from: contributors.llev, lastUpdated: parseTimestamp("2026-06-19T15:10:01Z") }, ], - notes: ( -
-

- Tested using the "send" feature on 1inch.com with a connected EVM wallet. The - offchain DNS name {dperriComEnsNameSpan} was NOT resolved to its expected Ethereum - Mainnet address ({dperriComAddressSpan}) — the app showed an "invalid domain - format" error instead. -

- 1inch fails to resolve an offchain DNS name -
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-resolve-names-for-different-evm-chains": { + notes: buildFailNoteForAT4({ + method: evmWalletMethod, + proof: { image: at4Proof, alt: "1inch fails to resolve an offchain DNS name" }, + extra: 'The app showed an "invalid domain format" error instead.', + }), + }, + "at05-resolve-name-on-other-evm-chain": { result: BenchmarkResults.Fail, contributions: [ { from: contributors.llev, lastUpdated: parseTimestamp("2026-06-19T15:10:01Z") }, ], - notes: ( -
-

- Tested using the "send" feature of ETH on base network on main page of 1inch.com - with connected EVM wallet. For {lightkeeperEnsNameSpan} the shown address was the mainnet - address, NOT the expected Base chain address ({lightkeeperAddressSpan}). -

- 1inch fails to resolve the Base deposit address -
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-resolve-names-for-bitcoin": { + notes: buildFailNoteForAT5({ + method: + 'the "send" feature for ETH on the Base network on the main page of 1inch.com with a connected EVM wallet', + proof: { image: at5Proof, alt: "1inch fails to resolve the Base deposit address" }, + extra: "The app showed the Ethereum Mainnet address instead.", + }), + }, + "at06-resolve-bitcoin-address": { result: BenchmarkResults.NotApplicable, contributions: [ { from: contributors.llev, lastUpdated: parseTimestamp("2026-06-19T15:10:01Z") }, ], - notes: ( -
-

- The app doesn't have context of the non-EVM chain Bitcoin and therefore we classify this - acceptance test as{" "} - Not Applicable. -

-
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-resolve-names-for-solana": { + notes: buildNotApplicableForNonEvmChain({ chain: "Bitcoin" }), + }, + "at07-resolve-solana-address": { result: BenchmarkResults.Fail, contributions: [ { from: contributors.llev, lastUpdated: parseTimestamp("2026-06-19T15:10:01Z") }, ], - notes: ( -
-

- Tested using the "send" feature on 1inch.com with a connected Solana wallet. It - was NOT possible to send to the Solana address of {gregskrilEnsNameSpan} ( - {gregskrilAddressSolanaSpan}) using its ENS name. -

- 1inch fails to resolve a Solana address using ENS -
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-handle-resolution-for-chains-with-invalid-address-formatting": { + notes: buildFailNoteForAT7({ + method: 'the "send" feature on 1inch.com with a connected Solana wallet', + proof: { image: at7Proof, alt: "1inch fails to resolve a Solana address using ENS" }, + extra: "Sending to it using its ENS name was not possible.", + }), + }, + "at08-handle-invalid-address-format": { result: BenchmarkResults.NotApplicable, contributions: [ { from: contributors.llev, lastUpdated: parseTimestamp("2026-06-19T15:10:01Z") }, ], - notes: ( -
-

- Based on the results of the{" "} - Acceptance Test 5, the app - doesn't appear to support ENS resolution on Base and therefore we classify this acceptance - test as Not Applicable. -

-
- ), - } as const satisfies AcceptanceTestBenchmark, + notes: buildNotApplicableForFailedTest({ testNumber: 5, scope: "on Base" }), + }, } as const satisfies AcceptanceTestBenchmarks; export default depositAddresses; diff --git a/ensawards.org/data/apps/aave-defi/benchmarks/index.tsx b/ensawards.org/data/apps/aave-defi/benchmarks/index.tsx index 1ba34940..bb595336 100644 --- a/ensawards.org/data/apps/aave-defi/benchmarks/index.tsx +++ b/ensawards.org/data/apps/aave-defi/benchmarks/index.tsx @@ -77,14 +77,14 @@ const benchmarks: BestPracticeBenchmarks = { } as const satisfies AcceptanceTestBenchmark, }, "deposit-addresses": { - "correctly-resolve-direct-onchain-subname-address": undefined, - "correctly-resolve-names-requiring-normalization": undefined, - "correctly-implement-ccip-read-for-eth-subnames": undefined, - "correctly-implement-ccip-read-for-offchain-dns-names": undefined, - "correctly-resolve-names-for-different-evm-chains": undefined, - "correctly-resolve-names-for-bitcoin": undefined, - "correctly-resolve-names-for-solana": undefined, - "correctly-handle-resolution-for-chains-with-invalid-address-formatting": undefined, + "at01-resolve-onchain-name": undefined, + "at02-resolve-name-needing-normalization": undefined, + "at03-resolve-offchain-eth-subname": undefined, + "at04-resolve-offchain-dns-name": undefined, + "at05-resolve-name-on-other-evm-chain": undefined, + "at06-resolve-bitcoin-address": undefined, + "at07-resolve-solana-address": undefined, + "at08-handle-invalid-address-format": undefined, }, } as const satisfies BestPracticeBenchmarks; diff --git a/ensawards.org/data/apps/ambire-wallet/benchmarks/resolution/deposit-addresses/index.tsx b/ensawards.org/data/apps/ambire-wallet/benchmarks/resolution/deposit-addresses/index.tsx index d66f10ba..7691a423 100644 --- a/ensawards.org/data/apps/ambire-wallet/benchmarks/resolution/deposit-addresses/index.tsx +++ b/ensawards.org/data/apps/ambire-wallet/benchmarks/resolution/deposit-addresses/index.tsx @@ -1,31 +1,20 @@ // 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 { - dperriComAddressSpan, - dperriComEnsNameSpan, - ethereumAddressSpan, - ethereumNormalizedEnsNameSpan, - ethereumUnnormalizedEnsNameSpan, - jesseBaseAddressSpan, - jesseBaseEnsNameSpan, - lightkeeperAddressSpan, - lightkeeperEnsNameSpan, - vitalikAddressSpan, - vitalikEnsNameSpan, -} from "data/ens-best-practices/resolution/deposit-addresses/technicalDetails"; -import { - acceptanceTestDetailsContainerStyles, - bestPracticeTechnicalDetailsCodeStyles, -} from "data/ens-best-practices/styles"; + buildFailNoteForAT4, + buildFailNoteForAT5, + buildNotApplicableForFailedTest, + buildNotApplicableForNonEvmChain, + buildPassNoteForAT1, + buildPassNoteForAT2, + buildPassNoteForAT3, +} from "data/ens-best-practices/resolution/deposit-addresses/notes"; import { parseTimestamp } from "@ensnode/ensnode-sdk"; -import { cn } from "@/utils/tailwindClassConcatenation"; - import at1Proof from "./at-1.gif"; import at2Proof from "./at-2.gif"; import at3Proof from "./at-3.gif"; @@ -35,170 +24,108 @@ import at6Proof from "./at-6.png"; import at7Proof from "./at-7.png"; import at8Proof from "./at-8.gif"; +const method = 'the "send" flow'; + const depositAddresses = { - "correctly-resolve-direct-onchain-subname-address": { + "at01-resolve-onchain-name": { result: BenchmarkResults.Pass, contributions: [ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-19T08:48:26Z") }, ], - notes: ( -
-

- ENS resolution was tested using the "send" flow. The resolved Ethereum Mainnet - address of {vitalikEnsNameSpan} is correct ({vitalikAddressSpan}). -

- Ambire Wallet correctly resolves the address for vitalik.eth -
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-resolve-names-requiring-normalization": { + notes: buildPassNoteForAT1({ + method, + proof: { + image: at1Proof, + alt: "Ambire Wallet correctly resolves the address for vitalik.eth", + }, + }), + }, + "at02-resolve-name-needing-normalization": { result: BenchmarkResults.Pass, contributions: [ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-19T08:18:28Z") }, ], - notes: ( -
-

- ENS resolution was tested using the "send" flow. The input{" "} - {ethereumUnnormalizedEnsNameSpan} was correctly normalized to{" "} - {ethereumNormalizedEnsNameSpan} and resolved to the correct Ethereum Mainnet address ( - {ethereumAddressSpan}). -

- Ambire Wallet correctly resolves the address for Ξthereum.eth -
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-implement-ccip-read-for-eth-subnames": { + notes: buildPassNoteForAT2({ + method, + proof: { + image: at2Proof, + alt: "Ambire Wallet correctly resolves the address for Ξthereum.eth", + }, + }), + }, + "at03-resolve-offchain-eth-subname": { result: BenchmarkResults.Pass, contributions: [ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-19T08:20:12Z") }, ], - notes: ( -
-

- ENS resolution was tested using the "send" flow. The CCIP-Read enabled .eth - subname {jesseBaseEnsNameSpan} resolved to the correct Ethereum Mainnet address ( - {jesseBaseAddressSpan}). -

- Ambire Wallet correctly resolves the address for jesse.base.eth -
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-implement-ccip-read-for-offchain-dns-names": { + notes: buildPassNoteForAT3({ + method, + proof: { + image: at3Proof, + alt: "Ambire Wallet correctly resolves the address for jesse.base.eth", + }, + }), + }, + "at04-resolve-offchain-dns-name": { result: BenchmarkResults.Fail, contributions: [ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-19T08:21:49Z") }, ], - notes: ( -
-

- ENS resolution was tested using the "send" flow. The offchain DNS name{" "} - {dperriComEnsNameSpan} was NOT resolved to its expected Ethereum Mainnet address ( - {dperriComAddressSpan}). -

- Ambire Wallet fails to resolve the address for dperri.com -
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-resolve-names-for-different-evm-chains": { + notes: buildFailNoteForAT4({ + method, + proof: { image: at4Proof, alt: "Ambire Wallet fails to resolve the address for dperri.com" }, + }), + }, + "at05-resolve-name-on-other-evm-chain": { result: BenchmarkResults.Fail, contributions: [ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-19T08:33:38Z") }, ], - notes: ( -
-

- ENS resolution was tested using the "send" flow in context of the Base chain. - For {lightkeeperEnsNameSpan} the resolved address is NOT the expected Base chain - address ({lightkeeperAddressSpan}). -

- Ambire Wallet fails to resolve the address for lightkeeper.eth in context of the Base chain -
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-resolve-names-for-bitcoin": { + notes: buildFailNoteForAT5({ + method, + proof: { + image: at5Proof, + alt: "Ambire Wallet fails to resolve the address for lightkeeper.eth in context of the Base chain", + }, + }), + }, + "at06-resolve-bitcoin-address": { result: BenchmarkResults.NotApplicable, contributions: [ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-19T08:38:20Z") }, ], - notes: ( -
-

- The app doesn't have context of non-EVM chain Bitcoin and therefore we classify this - acceptance test as{" "} - Not Applicable. -

- Ambire Wallet doesn't have context of non-EVM chain Bitcoin -
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-resolve-names-for-solana": { + notes: buildNotApplicableForNonEvmChain({ + chain: "Bitcoin", + proof: { + image: at6Proof, + alt: "Ambire Wallet doesn't have context of non-EVM chain Bitcoin", + }, + }), + }, + "at07-resolve-solana-address": { result: BenchmarkResults.NotApplicable, contributions: [ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-19T08:39:08Z") }, ], - notes: ( -
-

- The app doesn't have context of non-EVM chain Solana and therefore we classify this - acceptance test as{" "} - Not Applicable. -

- Ambire Wallet doesn't have context of non-EVM chain Solana -
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-handle-resolution-for-chains-with-invalid-address-formatting": { + notes: buildNotApplicableForNonEvmChain({ + chain: "Solana", + proof: { image: at7Proof, alt: "Ambire Wallet doesn't have context of non-EVM chain Solana" }, + }), + }, + "at08-handle-invalid-address-format": { result: BenchmarkResults.NotApplicable, contributions: [ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-19T08:35:02Z") }, ], - notes: ( -
-

- ENS resolution was tested using the "send" flow in context of the Base chain. - Based on the results of the{" "} - Acceptance Test 5, the app - doesn't appear to support ENS resolution on Base at all and therefore we classify this - acceptance test as{" "} - Not Applicable. -

- Ambire Wallet fails to resolve the address for zissou.eth in context of the Base chain -
- ), - } as const satisfies AcceptanceTestBenchmark, + notes: buildNotApplicableForFailedTest({ + testNumber: 5, + scope: "on Base", + proof: { + image: at8Proof, + alt: "Ambire Wallet fails to resolve the address for zissou.eth in context of the Base chain", + }, + }), + }, } as const satisfies AcceptanceTestBenchmarks; export default depositAddresses; diff --git a/ensawards.org/data/apps/binance-exchange/benchmarks/index.tsx b/ensawards.org/data/apps/binance-exchange/benchmarks/index.tsx index 8b90ab5f..1b9b9e0b 100644 --- a/ensawards.org/data/apps/binance-exchange/benchmarks/index.tsx +++ b/ensawards.org/data/apps/binance-exchange/benchmarks/index.tsx @@ -61,14 +61,14 @@ const benchmarks: BestPracticeBenchmarks = { } as const satisfies AcceptanceTestBenchmark, }, "deposit-addresses": { - "correctly-resolve-direct-onchain-subname-address": undefined, - "correctly-resolve-names-requiring-normalization": undefined, - "correctly-implement-ccip-read-for-eth-subnames": undefined, - "correctly-implement-ccip-read-for-offchain-dns-names": undefined, - "correctly-resolve-names-for-different-evm-chains": undefined, - "correctly-resolve-names-for-bitcoin": undefined, - "correctly-resolve-names-for-solana": undefined, - "correctly-handle-resolution-for-chains-with-invalid-address-formatting": undefined, + "at01-resolve-onchain-name": undefined, + "at02-resolve-name-needing-normalization": undefined, + "at03-resolve-offchain-eth-subname": undefined, + "at04-resolve-offchain-dns-name": undefined, + "at05-resolve-name-on-other-evm-chain": undefined, + "at06-resolve-bitcoin-address": undefined, + "at07-resolve-solana-address": undefined, + "at08-handle-invalid-address-format": undefined, }, }; diff --git a/ensawards.org/data/apps/binance-wallet/benchmarks/resolution/deposit-addresses/index.tsx b/ensawards.org/data/apps/binance-wallet/benchmarks/resolution/deposit-addresses/index.tsx index 9da15084..619c67b8 100644 --- a/ensawards.org/data/apps/binance-wallet/benchmarks/resolution/deposit-addresses/index.tsx +++ b/ensawards.org/data/apps/binance-wallet/benchmarks/resolution/deposit-addresses/index.tsx @@ -1,158 +1,80 @@ // 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 { - vitalikAddressSpan, - vitalikEnsNameSpan, -} from "data/ens-best-practices/resolution/deposit-addresses/technicalDetails"; -import { - acceptanceTestDetailsContainerStyles, - bestPracticeTechnicalDetailsCodeStyles, -} from "data/ens-best-practices/styles"; + buildEnsNotSupportedNote, + buildNotApplicableForFailedTest, +} from "data/ens-best-practices/resolution/deposit-addresses/notes"; import { parseTimestamp } from "@ensnode/ensnode-sdk"; -import { cn } from "@/utils/tailwindClassConcatenation"; - import at1Proof from "./at-1.gif"; const depositAddresses = { - "correctly-resolve-direct-onchain-subname-address": { + "at01-resolve-onchain-name": { result: BenchmarkResults.Fail, contributions: [ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-19T09:39:20Z") }, ], - notes: ( -
-

- ENS resolution was tested using the "send" flow with {vitalikEnsNameSpan}. The - wallet doesn't support the use of ENS names at all as the recipient identifier, so it - never resolves the expected Ethereum Mainnet address ({vitalikAddressSpan}), which we - classify as a failure. -

- Binance Wallet doesn't allow ENS name as recipient in the send flow -
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-resolve-names-requiring-normalization": { + notes: buildEnsNotSupportedNote({ + method: 'the "send" flow', + proof: { + image: at1Proof, + alt: "Binance Wallet doesn't allow ENS name as recipient in the send flow", + }, + }), + }, + "at02-resolve-name-needing-normalization": { result: BenchmarkResults.NotApplicable, contributions: [ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-19T09:44:00Z") }, ], - notes: ( -
-

- Based on the results of the{" "} - Acceptance Test 1, the app - doesn't appear to support ENS resolution at all and therefore we classify this acceptance - test as Not Applicable. -

-
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-implement-ccip-read-for-eth-subnames": { + notes: buildNotApplicableForFailedTest({ testNumber: 1 }), + }, + "at03-resolve-offchain-eth-subname": { result: BenchmarkResults.NotApplicable, contributions: [ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-19T09:45:00Z") }, ], - notes: ( -
-

- Based on the results of the{" "} - Acceptance Test 1, the app - doesn't appear to support ENS resolution at all and therefore we classify this acceptance - test as Not Applicable. -

-
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-implement-ccip-read-for-offchain-dns-names": { + notes: buildNotApplicableForFailedTest({ testNumber: 1 }), + }, + "at04-resolve-offchain-dns-name": { result: BenchmarkResults.NotApplicable, contributions: [ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-19T09:45:00Z") }, ], - notes: ( -
-

- Based on the results of the{" "} - Acceptance Test 1, the app - doesn't appear to support ENS resolution at all and therefore we classify this acceptance - test as Not Applicable. -

-
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-resolve-names-for-different-evm-chains": { + notes: buildNotApplicableForFailedTest({ testNumber: 1 }), + }, + "at05-resolve-name-on-other-evm-chain": { result: BenchmarkResults.NotApplicable, contributions: [ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-19T09:45:00Z") }, ], - notes: ( -
-

- Based on the results of the{" "} - Acceptance Test 1, the app - doesn't appear to support ENS resolution at all and therefore we classify this acceptance - test as Not Applicable. -

-
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-resolve-names-for-bitcoin": { + notes: buildNotApplicableForFailedTest({ testNumber: 1 }), + }, + "at06-resolve-bitcoin-address": { result: BenchmarkResults.NotApplicable, contributions: [ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-19T09:46:00Z") }, ], - notes: ( -
-

- Based on the results of the{" "} - Acceptance Test 1, the app - doesn't appear to support ENS resolution at all and therefore we classify this acceptance - test as Not Applicable. -

-
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-resolve-names-for-solana": { + notes: buildNotApplicableForFailedTest({ testNumber: 1 }), + }, + "at07-resolve-solana-address": { result: BenchmarkResults.NotApplicable, contributions: [ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-19T09:46:00Z") }, ], - notes: ( -
-

- Based on the results of the{" "} - Acceptance Test 1, the app - doesn't appear to support ENS resolution at all and therefore we classify this acceptance - test as Not Applicable. -

-
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-handle-resolution-for-chains-with-invalid-address-formatting": { + notes: buildNotApplicableForFailedTest({ testNumber: 1 }), + }, + "at08-handle-invalid-address-format": { result: BenchmarkResults.NotApplicable, contributions: [ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-19T09:46:00Z") }, ], - notes: ( -
-

- Based on the results of the{" "} - Acceptance Test 1, the app - doesn't appear to support ENS resolution at all and therefore we classify this acceptance - test as Not Applicable. -

-
- ), - } as const satisfies AcceptanceTestBenchmark, + notes: buildNotApplicableForFailedTest({ testNumber: 1 }), + }, } as const satisfies AcceptanceTestBenchmarks; export default depositAddresses; diff --git a/ensawards.org/data/apps/blockscout-explorer/benchmarks/resolution/deposit-address/index.tsx b/ensawards.org/data/apps/blockscout-explorer/benchmarks/resolution/deposit-address/index.tsx index 2fe66ec6..ae660cef 100644 --- a/ensawards.org/data/apps/blockscout-explorer/benchmarks/resolution/deposit-address/index.tsx +++ b/ensawards.org/data/apps/blockscout-explorer/benchmarks/resolution/deposit-address/index.tsx @@ -1,29 +1,21 @@ -import type { AcceptanceTestBenchmark } from "data/acceptance-tests/types"; +// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md +// for additional advice on adding and modifying apps + import type { AcceptanceTestBenchmarks } from "data/benchmarks/types"; import { BenchmarkResults } from "data/benchmarks/types"; import contributors from "data/contributors"; import { - dperriComAddressSpan, - dperriComEnsNameSpan, - ethereumAddressSpan, - ethereumNormalizedEnsNameSpan, - ethereumUnnormalizedEnsNameSpan, - jesseBaseAddressSpan, - jesseBaseEnsNameSpan, - lightkeeperAddressSpan, - lightkeeperEnsNameSpan, - vitalikAddressSpan, - vitalikEnsNameSpan, -} from "data/ens-best-practices/resolution/deposit-addresses/technicalDetails"; -import { - acceptanceTestDetailsContainerStyles, - bestPracticeTechnicalDetailsCodeStyles, -} from "data/ens-best-practices/styles"; + buildFailNoteForAT5, + buildNotApplicableForFailedTest, + buildNotApplicableForNonEvmChain, + buildPassNoteForAT1, + buildPassNoteForAT2, + buildPassNoteForAT3, + buildPassNoteForAT4, +} from "data/ens-best-practices/resolution/deposit-addresses/notes"; import { parseTimestamp } from "@ensnode/ensnode-sdk"; -import { cn } from "@/utils/tailwindClassConcatenation"; - import at1Proof from "./at-1.png"; import at2Proof from "./at-2.png"; import at3Proof from "./at-3.png"; @@ -31,152 +23,90 @@ import at4Proof from "./at-4.png"; import at5Proof from "./at-5.png"; const depositAddresses = { - "correctly-resolve-direct-onchain-subname-address": { + "at01-resolve-onchain-name": { result: BenchmarkResults.Pass, contributions: [ { from: contributors.llev, lastUpdated: parseTimestamp("2026-06-19T14:27:32Z") }, ], - notes: ( -
-

- Tested using the quick-search feature on the main page of eth.blockscout.com. The resolved - Ethereum Mainnet address of {vitalikEnsNameSpan} is correct ({vitalikAddressSpan}). -

- Blockscout correctly resolves the deposit address of a direct onchain name -
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-resolve-names-requiring-normalization": { + notes: buildPassNoteForAT1({ + method: "the quick-search feature on the main page of eth.blockscout.com", + proof: { + image: at1Proof, + alt: "Blockscout correctly resolves the deposit address of a direct onchain name", + }, + }), + }, + "at02-resolve-name-needing-normalization": { result: BenchmarkResults.Pass, contributions: [ { from: contributors.llev, lastUpdated: parseTimestamp("2026-06-19T14:27:32Z") }, ], - notes: ( -
-

- Tested using the quick-search feature on eth.blockscout.com. The input{" "} - {ethereumUnnormalizedEnsNameSpan} was correctly normalized to{" "} - {ethereumNormalizedEnsNameSpan} and resolved to the correct Ethereum Mainnet address ( - {ethereumAddressSpan}). -

- Blockscout correctly resolves the deposit address of a name requiring normalization -
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-implement-ccip-read-for-eth-subnames": { + notes: buildPassNoteForAT2({ + method: "the quick-search feature on eth.blockscout.com", + proof: { + image: at2Proof, + alt: "Blockscout correctly resolves the deposit address of a name requiring normalization", + }, + }), + }, + "at03-resolve-offchain-eth-subname": { result: BenchmarkResults.Pass, contributions: [ { from: contributors.llev, lastUpdated: parseTimestamp("2026-06-19T14:27:32Z") }, ], - notes: ( -
-

- Tested using the quick-search feature on eth.blockscout.com. The CCIP-Read enabled .eth - subname {jesseBaseEnsNameSpan} resolved to the correct Ethereum Mainnet address ( - {jesseBaseAddressSpan}). -

- Blockscout correctly resolves the deposit address of an offchain .eth subname via CCIP-Read -
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-implement-ccip-read-for-offchain-dns-names": { + notes: buildPassNoteForAT3({ + method: "the quick-search feature on eth.blockscout.com", + proof: { + image: at3Proof, + alt: "Blockscout correctly resolves the deposit address of an offchain .eth subname via CCIP-Read", + }, + }), + }, + "at04-resolve-offchain-dns-name": { result: BenchmarkResults.Pass, contributions: [ { from: contributors.llev, lastUpdated: parseTimestamp("2026-06-19T14:27:32Z") }, ], - notes: ( -
-

- Tested using the quick-search feature on eth.blockscout.com. The offchain DNS name{" "} - {dperriComEnsNameSpan} resolved to the correct Ethereum Mainnet address via CCIP-Read ( - {dperriComAddressSpan}). -

- Blockscout correctly resolves the deposit address of an offchain DNS name via CCIP-Read -
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-resolve-names-for-different-evm-chains": { + notes: buildPassNoteForAT4({ + method: "the quick-search feature on eth.blockscout.com", + proof: { + image: at4Proof, + alt: "Blockscout correctly resolves the deposit address of an offchain DNS name via CCIP-Read", + }, + }), + }, + "at05-resolve-name-on-other-evm-chain": { result: BenchmarkResults.Fail, contributions: [ { from: contributors.llev, lastUpdated: parseTimestamp("2026-06-19T14:27:32Z") }, ], - notes: ( -
-

- Tested using the quick-search feature on base.blockscout.com. For {lightkeeperEnsNameSpan}{" "} - the shown address was the mainnet address, NOT the expected Base chain address ( - {lightkeeperAddressSpan}). -

- Blockscout fails to resolve the Base deposit address -
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-resolve-names-for-bitcoin": { + notes: buildFailNoteForAT5({ + method: "the quick-search feature on base.blockscout.com", + proof: { image: at5Proof, alt: "Blockscout fails to resolve the Base deposit address" }, + extra: "The app showed the Ethereum Mainnet address instead.", + }), + }, + "at06-resolve-bitcoin-address": { result: BenchmarkResults.NotApplicable, contributions: [ { from: contributors.llev, lastUpdated: parseTimestamp("2026-06-19T14:27:32Z") }, ], - notes: ( -
-

- The app doesn't have context of the non-EVM chain Bitcoin and therefore we classify this - acceptance test as{" "} - Not Applicable. -

-
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-resolve-names-for-solana": { + notes: buildNotApplicableForNonEvmChain({ chain: "Bitcoin" }), + }, + "at07-resolve-solana-address": { result: BenchmarkResults.NotApplicable, contributions: [ { from: contributors.llev, lastUpdated: parseTimestamp("2026-06-19T14:27:32Z") }, ], - notes: ( -
-

- The app doesn't have context of the non-EVM chain Solana and therefore we classify this - acceptance test as{" "} - Not Applicable. -

-
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-handle-resolution-for-chains-with-invalid-address-formatting": { + notes: buildNotApplicableForNonEvmChain({ chain: "Solana" }), + }, + "at08-handle-invalid-address-format": { result: BenchmarkResults.NotApplicable, contributions: [ { from: contributors.llev, lastUpdated: parseTimestamp("2026-06-19T14:27:32Z") }, ], - notes: ( -
-

- Based on the results of the{" "} - Acceptance Test 5, the app - doesn't appear to support ENS resolution on Base and therefore we classify this acceptance - test as Not Applicable. -

-
- ), - } as const satisfies AcceptanceTestBenchmark, + notes: buildNotApplicableForFailedTest({ testNumber: 5, scope: "on Base" }), + }, } as const satisfies AcceptanceTestBenchmarks; export default depositAddresses; diff --git a/ensawards.org/data/apps/coinbase-exchange/benchmarks/index.tsx b/ensawards.org/data/apps/coinbase-exchange/benchmarks/index.tsx index 4f16dae2..38583f95 100644 --- a/ensawards.org/data/apps/coinbase-exchange/benchmarks/index.tsx +++ b/ensawards.org/data/apps/coinbase-exchange/benchmarks/index.tsx @@ -38,14 +38,14 @@ const benchmarks: BestPracticeBenchmarks = { } as const satisfies AcceptanceTestBenchmark, }, "deposit-addresses": { - "correctly-resolve-direct-onchain-subname-address": undefined, - "correctly-resolve-names-requiring-normalization": undefined, - "correctly-implement-ccip-read-for-eth-subnames": undefined, - "correctly-implement-ccip-read-for-offchain-dns-names": undefined, - "correctly-resolve-names-for-different-evm-chains": undefined, - "correctly-resolve-names-for-bitcoin": undefined, - "correctly-resolve-names-for-solana": undefined, - "correctly-handle-resolution-for-chains-with-invalid-address-formatting": undefined, + "at01-resolve-onchain-name": undefined, + "at02-resolve-name-needing-normalization": undefined, + "at03-resolve-offchain-eth-subname": undefined, + "at04-resolve-offchain-dns-name": undefined, + "at05-resolve-name-on-other-evm-chain": undefined, + "at06-resolve-bitcoin-address": undefined, + "at07-resolve-solana-address": undefined, + "at08-handle-invalid-address-format": undefined, }, }; diff --git a/ensawards.org/data/apps/coinbase-wallet/benchmarks/resolution/deposit-addresses/index.tsx b/ensawards.org/data/apps/coinbase-wallet/benchmarks/resolution/deposit-addresses/index.tsx index 708fb0d7..076eedc6 100644 --- a/ensawards.org/data/apps/coinbase-wallet/benchmarks/resolution/deposit-addresses/index.tsx +++ b/ensawards.org/data/apps/coinbase-wallet/benchmarks/resolution/deposit-addresses/index.tsx @@ -1,33 +1,20 @@ // 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 { - dperriComAddressSpan, - dperriComEnsNameSpan, - ethereumAddressSpan, - ethereumNormalizedEnsNameSpan, - ethereumUnnormalizedEnsNameSpan, - gregskrilAddressSolanaSpan, - gregskrilEnsNameSpan, - jesseBaseAddressSpan, - jesseBaseEnsNameSpan, - lightkeeperAddressSpan, - lightkeeperEnsNameSpan, - vitalikAddressSpan, - vitalikEnsNameSpan, -} from "data/ens-best-practices/resolution/deposit-addresses/technicalDetails"; -import { - acceptanceTestDetailsContainerStyles, - bestPracticeTechnicalDetailsCodeStyles, -} from "data/ens-best-practices/styles"; + buildFailNoteForAT4, + buildFailNoteForAT5, + buildFailNoteForAT7, + buildNotApplicableForFailedTest, + buildPassNoteForAT1, + buildPassNoteForAT2, + buildPassNoteForAT3, +} from "data/ens-best-practices/resolution/deposit-addresses/notes"; import { parseTimestamp } from "@ensnode/ensnode-sdk"; -import { cn } from "@/utils/tailwindClassConcatenation"; - import at1Proof from "./at-1.gif"; import at2Proof from "./at-2.gif"; import at3Proof from "./at-3.gif"; @@ -35,144 +22,95 @@ import at4Proof from "./at-4.gif"; import at5Proof from "./at-5.gif"; import at7Proof from "./at-7.gif"; +const method = 'the "send" flow'; + const depositAddresses = { - "correctly-resolve-direct-onchain-subname-address": { + "at01-resolve-onchain-name": { result: BenchmarkResults.Pass, contributions: [ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-19T10:17:33Z") }, ], - notes: ( -
-

- ENS resolution was tested using the "send" flow. The resolved Ethereum Mainnet - address of {vitalikEnsNameSpan} is correct ({vitalikAddressSpan}). -

- Coinbase Wallet correctly resolves the address for vitalik.eth -
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-resolve-names-requiring-normalization": { + notes: buildPassNoteForAT1({ + method, + proof: { + image: at1Proof, + alt: "Coinbase Wallet correctly resolves the address for vitalik.eth", + }, + }), + }, + "at02-resolve-name-needing-normalization": { result: BenchmarkResults.Pass, contributions: [ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-19T10:19:15Z") }, ], - notes: ( -
-

- ENS resolution was tested using the "send" flow. The input{" "} - {ethereumUnnormalizedEnsNameSpan} was correctly normalized to{" "} - {ethereumNormalizedEnsNameSpan} and resolved to the correct Ethereum Mainnet address ( - {ethereumAddressSpan}). -

- Coinbase Wallet correctly resolves the address for Ξthereum.eth -
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-implement-ccip-read-for-eth-subnames": { + notes: buildPassNoteForAT2({ + method, + proof: { + image: at2Proof, + alt: "Coinbase Wallet correctly resolves the address for Ξthereum.eth", + }, + }), + }, + "at03-resolve-offchain-eth-subname": { result: BenchmarkResults.Pass, contributions: [ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-19T10:20:22Z") }, ], - notes: ( -
-

- ENS resolution was tested using the "send" flow. The CCIP-Read enabled .eth - subname {jesseBaseEnsNameSpan} resolved to the correct Ethereum Mainnet address ( - {jesseBaseAddressSpan}). -

- Coinbase Wallet correctly resolves the address for jesse.base.eth -
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-implement-ccip-read-for-offchain-dns-names": { + notes: buildPassNoteForAT3({ + method, + proof: { + image: at3Proof, + alt: "Coinbase Wallet correctly resolves the address for jesse.base.eth", + }, + }), + }, + "at04-resolve-offchain-dns-name": { result: BenchmarkResults.Fail, contributions: [ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-19T10:22:06Z") }, ], - notes: ( -
-

- ENS resolution was tested using the "send" flow. The offchain DNS name{" "} - {dperriComEnsNameSpan} was NOT resolved to its expected Ethereum Mainnet address ( - {dperriComAddressSpan}). -

- Coinbase Wallet fails to resolve the address for dperri.com -
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-resolve-names-for-different-evm-chains": { + notes: buildFailNoteForAT4({ + method, + proof: { + image: at4Proof, + alt: "Coinbase Wallet fails to resolve the address for dperri.com", + }, + }), + }, + "at05-resolve-name-on-other-evm-chain": { result: BenchmarkResults.Fail, contributions: [ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-19T10:26:55Z") }, ], - notes: ( -
-

- ENS resolution was tested using the "send" flow in context of the Base chain. - For {lightkeeperEnsNameSpan} the resolved address is NOT the expected Base chain - address ({lightkeeperAddressSpan}). -

- Coinbase Wallet fails to resolve the address for lightkeeper.eth in context of the Base chain -
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-resolve-names-for-bitcoin": undefined, // TODO: Had trouble testing this, skipped not to waste more time, need help - "correctly-resolve-names-for-solana": { + notes: buildFailNoteForAT5({ + method, + proof: { + image: at5Proof, + alt: "Coinbase Wallet fails to resolve the address for lightkeeper.eth in context of the Base chain", + }, + }), + }, + "at06-resolve-bitcoin-address": undefined, // TODO: Had trouble testing this, skipped not to waste more time, need help + "at07-resolve-solana-address": { result: BenchmarkResults.Fail, contributions: [ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-19T11:35:34Z") }, ], - notes: ( -
-

- ENS resolution was tested using the "send" flow. For {gregskrilEnsNameSpan} the - app FAILS to resolve the expected Solana address ({gregskrilAddressSolanaSpan}). -

- Coinbase Wallet fails to resolve the Solana address for gregskril.eth -
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-handle-resolution-for-chains-with-invalid-address-formatting": { + notes: buildFailNoteForAT7({ + method, + proof: { + image: at7Proof, + alt: "Coinbase Wallet fails to resolve the Solana address for gregskril.eth", + }, + }), + }, + "at08-handle-invalid-address-format": { result: BenchmarkResults.NotApplicable, contributions: [ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-19T11:51:00Z") }, ], - notes: ( -
-

- Based on the results of the{" "} - Acceptance Test 5, the app - doesn't appear to support ENS resolution on Base at all and therefore we classify this - acceptance test as{" "} - Not Applicable. -

-
- ), - } as const satisfies AcceptanceTestBenchmark, + notes: buildNotApplicableForFailedTest({ testNumber: 5, scope: "on Base" }), + }, } as const satisfies AcceptanceTestBenchmarks; export default depositAddresses; diff --git a/ensawards.org/data/apps/cryptocom-exchange/benchmarks/index.tsx b/ensawards.org/data/apps/cryptocom-exchange/benchmarks/index.tsx index 461ec378..56a063c1 100644 --- a/ensawards.org/data/apps/cryptocom-exchange/benchmarks/index.tsx +++ b/ensawards.org/data/apps/cryptocom-exchange/benchmarks/index.tsx @@ -44,14 +44,14 @@ const benchmarks: BestPracticeBenchmarks = { } as const satisfies AcceptanceTestBenchmark, }, "deposit-addresses": { - "correctly-resolve-direct-onchain-subname-address": undefined, - "correctly-resolve-names-requiring-normalization": undefined, - "correctly-implement-ccip-read-for-eth-subnames": undefined, - "correctly-implement-ccip-read-for-offchain-dns-names": undefined, - "correctly-resolve-names-for-different-evm-chains": undefined, - "correctly-resolve-names-for-bitcoin": undefined, - "correctly-resolve-names-for-solana": undefined, - "correctly-handle-resolution-for-chains-with-invalid-address-formatting": undefined, + "at01-resolve-onchain-name": undefined, + "at02-resolve-name-needing-normalization": undefined, + "at03-resolve-offchain-eth-subname": undefined, + "at04-resolve-offchain-dns-name": undefined, + "at05-resolve-name-on-other-evm-chain": undefined, + "at06-resolve-bitcoin-address": undefined, + "at07-resolve-solana-address": undefined, + "at08-handle-invalid-address-format": undefined, }, }; diff --git a/ensawards.org/data/apps/cryptocom-wallet/benchmarks/index.tsx b/ensawards.org/data/apps/cryptocom-wallet/benchmarks/index.tsx index f60fd51b..2c178da3 100644 --- a/ensawards.org/data/apps/cryptocom-wallet/benchmarks/index.tsx +++ b/ensawards.org/data/apps/cryptocom-wallet/benchmarks/index.tsx @@ -48,14 +48,14 @@ const benchmarks: BestPracticeBenchmarks = { } as const satisfies AcceptanceTestBenchmark, }, "deposit-addresses": { - "correctly-resolve-direct-onchain-subname-address": undefined, - "correctly-resolve-names-requiring-normalization": undefined, - "correctly-implement-ccip-read-for-eth-subnames": undefined, - "correctly-implement-ccip-read-for-offchain-dns-names": undefined, - "correctly-resolve-names-for-different-evm-chains": undefined, - "correctly-resolve-names-for-bitcoin": undefined, - "correctly-resolve-names-for-solana": undefined, - "correctly-handle-resolution-for-chains-with-invalid-address-formatting": undefined, + "at01-resolve-onchain-name": undefined, + "at02-resolve-name-needing-normalization": undefined, + "at03-resolve-offchain-eth-subname": undefined, + "at04-resolve-offchain-dns-name": undefined, + "at05-resolve-name-on-other-evm-chain": undefined, + "at06-resolve-bitcoin-address": undefined, + "at07-resolve-solana-address": undefined, + "at08-handle-invalid-address-format": undefined, }, }; diff --git a/ensawards.org/data/apps/etherscan-explorer/benchmarks/resolution/deposit-address/index.tsx b/ensawards.org/data/apps/etherscan-explorer/benchmarks/resolution/deposit-address/index.tsx index 074902d1..3233c8f5 100644 --- a/ensawards.org/data/apps/etherscan-explorer/benchmarks/resolution/deposit-address/index.tsx +++ b/ensawards.org/data/apps/etherscan-explorer/benchmarks/resolution/deposit-address/index.tsx @@ -1,32 +1,21 @@ // Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md // for additional advice on adding and modifying apps -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 { - dperriComAddressSpan, - dperriComEnsNameSpan, - ethereumAddressSpan, - ethereumNormalizedEnsNameSpan, - ethereumUnnormalizedEnsNameSpan, - jesseBaseAddressSpan, - jesseBaseEnsNameSpan, - lightkeeperAddressSpan, - lightkeeperEnsNameSpan, - vitalikAddressSpan, - vitalikEnsNameSpan, -} from "data/ens-best-practices/resolution/deposit-addresses/technicalDetails"; -import { - acceptanceTestDetailsContainerStyles, - bestPracticeTechnicalDetailsCodeStyles, -} from "data/ens-best-practices/styles"; + buildFailNoteForAT5, + buildNotApplicableForFailedTest, + buildNotApplicableForNonEvmChain, + buildPassNoteForAT1, + buildPassNoteForAT2, + buildPassNoteForAT3, + buildPassNoteForAT4, +} from "data/ens-best-practices/resolution/deposit-addresses/notes"; import { parseTimestamp } from "@ensnode/ensnode-sdk"; -import { cn } from "@/utils/tailwindClassConcatenation"; - import at1Proof from "./at-1.png"; import at2Proof from "./at-2.png"; import at3Proof from "./at-3.png"; @@ -34,152 +23,87 @@ import at4Proof from "./at-4.png"; import at5Proof from "./at-5.png"; const depositAddresses = { - "correctly-resolve-direct-onchain-subname-address": { + "at01-resolve-onchain-name": { result: BenchmarkResults.Pass, contributions: [ { from: contributors.llev, lastUpdated: parseTimestamp("2026-06-19T11:48:58Z") }, ], - notes: ( -
-

- Tested using the name lookup search on etherscan.io. The resolved Ethereum Mainnet address - of {vitalikEnsNameSpan} is correct ({vitalikAddressSpan}). -

- Etherscan correctly resolves the direct onchain subname address -
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-resolve-names-requiring-normalization": { + notes: buildPassNoteForAT1({ + method: "the name lookup search on etherscan.io", + proof: { + image: at1Proof, + alt: "Etherscan correctly resolves the direct onchain subname address", + }, + }), + }, + "at02-resolve-name-needing-normalization": { result: BenchmarkResults.Pass, contributions: [ { from: contributors.llev, lastUpdated: parseTimestamp("2026-06-19T11:48:58Z") }, ], - notes: ( -
-

- Tested using the name lookup search on etherscan.io. The input{" "} - {ethereumUnnormalizedEnsNameSpan} was correctly normalized to{" "} - {ethereumNormalizedEnsNameSpan} and resolved to the correct Ethereum Mainnet address ( - {ethereumAddressSpan}). -

- Etherscan correctly resolves a name requiring normalization -
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-implement-ccip-read-for-eth-subnames": { + notes: buildPassNoteForAT2({ + method: "the name lookup search on etherscan.io", + proof: { + image: at2Proof, + alt: "Etherscan correctly resolves a name requiring normalization", + }, + }), + }, + "at03-resolve-offchain-eth-subname": { result: BenchmarkResults.Pass, contributions: [ { from: contributors.llev, lastUpdated: parseTimestamp("2026-06-19T11:48:58Z") }, ], - notes: ( -
-

- Tested using the name lookup search on etherscan.io. The CCIP-Read enabled .eth subname{" "} - {jesseBaseEnsNameSpan} resolved to the correct Ethereum Mainnet address ( - {jesseBaseAddressSpan}). -

- Etherscan correctly implements CCIP-Read for .eth subnames -
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-implement-ccip-read-for-offchain-dns-names": { + notes: buildPassNoteForAT3({ + method: "the name lookup search on etherscan.io", + proof: { image: at3Proof, alt: "Etherscan correctly implements CCIP-Read for .eth subnames" }, + }), + }, + "at04-resolve-offchain-dns-name": { result: BenchmarkResults.Pass, contributions: [ { from: contributors.llev, lastUpdated: parseTimestamp("2026-06-19T11:48:58Z") }, ], - notes: ( -
-

- Tested using the name lookup search on etherscan.io. The offchain DNS name{" "} - {dperriComEnsNameSpan} resolved to the correct Ethereum Mainnet address via CCIP-Read ( - {dperriComAddressSpan}). -

- Etherscan correctly implements CCIP-Read for offchain DNS names -
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-resolve-names-for-different-evm-chains": { + notes: buildPassNoteForAT4({ + method: "the name lookup search on etherscan.io", + proof: { + image: at4Proof, + alt: "Etherscan correctly implements CCIP-Read for offchain DNS names", + }, + }), + }, + "at05-resolve-name-on-other-evm-chain": { result: BenchmarkResults.Fail, contributions: [ { from: contributors.llev, lastUpdated: parseTimestamp("2026-06-19T11:48:58Z") }, ], - notes: ( -
-

- Tested using the name lookup search on basescan.org. For {lightkeeperEnsNameSpan} the - shown address was the mainnet address, NOT the expected Base chain address ( - {lightkeeperAddressSpan}). -

- Etherscan fails to resolve the Base deposit address -
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-resolve-names-for-bitcoin": { + notes: buildFailNoteForAT5({ + method: "the name lookup search on basescan.org", + proof: { image: at5Proof, alt: "Etherscan fails to resolve the Base deposit address" }, + extra: "The app showed the Ethereum Mainnet address instead.", + }), + }, + "at06-resolve-bitcoin-address": { result: BenchmarkResults.NotApplicable, contributions: [ { from: contributors.llev, lastUpdated: parseTimestamp("2026-06-19T11:48:58Z") }, ], - notes: ( -
-

- The app doesn't have context of the non-EVM chain Bitcoin and therefore we classify this - acceptance test as{" "} - Not Applicable. -

-
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-resolve-names-for-solana": { + notes: buildNotApplicableForNonEvmChain({ chain: "Bitcoin" }), + }, + "at07-resolve-solana-address": { result: BenchmarkResults.NotApplicable, contributions: [ { from: contributors.llev, lastUpdated: parseTimestamp("2026-06-19T11:48:58Z") }, ], - notes: ( -
-

- The app doesn't have context of the non-EVM chain Solana and therefore we classify this - acceptance test as{" "} - Not Applicable. -

-
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-handle-resolution-for-chains-with-invalid-address-formatting": { + notes: buildNotApplicableForNonEvmChain({ chain: "Solana" }), + }, + "at08-handle-invalid-address-format": { result: BenchmarkResults.NotApplicable, contributions: [ { from: contributors.llev, lastUpdated: parseTimestamp("2026-06-19T11:48:58Z") }, ], - notes: ( -
-

- Based on the results of the{" "} - Acceptance Test 5, the app - doesn't appear to support ENS resolution on Base and therefore we classify this acceptance - test as Not Applicable. -

-
- ), - } as const satisfies AcceptanceTestBenchmark, + notes: buildNotApplicableForFailedTest({ testNumber: 5, scope: "on Base" }), + }, } as const satisfies AcceptanceTestBenchmarks; export default depositAddresses; diff --git a/ensawards.org/data/apps/frame-wallet/benchmarks/index.tsx b/ensawards.org/data/apps/frame-wallet/benchmarks/index.tsx index 7ec849fd..fa27418a 100644 --- a/ensawards.org/data/apps/frame-wallet/benchmarks/index.tsx +++ b/ensawards.org/data/apps/frame-wallet/benchmarks/index.tsx @@ -48,14 +48,14 @@ const benchmarks: BestPracticeBenchmarks = { } as const satisfies AcceptanceTestBenchmark, }, "deposit-addresses": { - "correctly-resolve-direct-onchain-subname-address": undefined, - "correctly-resolve-names-requiring-normalization": undefined, - "correctly-implement-ccip-read-for-eth-subnames": undefined, - "correctly-implement-ccip-read-for-offchain-dns-names": undefined, - "correctly-resolve-names-for-different-evm-chains": undefined, - "correctly-resolve-names-for-bitcoin": undefined, - "correctly-resolve-names-for-solana": undefined, - "correctly-handle-resolution-for-chains-with-invalid-address-formatting": undefined, + "at01-resolve-onchain-name": undefined, + "at02-resolve-name-needing-normalization": undefined, + "at03-resolve-offchain-eth-subname": undefined, + "at04-resolve-offchain-dns-name": undefined, + "at05-resolve-name-on-other-evm-chain": undefined, + "at06-resolve-bitcoin-address": undefined, + "at07-resolve-solana-address": undefined, + "at08-handle-invalid-address-format": undefined, }, }; diff --git a/ensawards.org/data/apps/gemini-wallet/benchmarks/index.tsx b/ensawards.org/data/apps/gemini-wallet/benchmarks/index.tsx index 2c14828b..ced03d51 100644 --- a/ensawards.org/data/apps/gemini-wallet/benchmarks/index.tsx +++ b/ensawards.org/data/apps/gemini-wallet/benchmarks/index.tsx @@ -48,14 +48,14 @@ const benchmarks: BestPracticeBenchmarks = { } as const satisfies AcceptanceTestBenchmark, }, "deposit-addresses": { - "correctly-resolve-direct-onchain-subname-address": undefined, - "correctly-resolve-names-requiring-normalization": undefined, - "correctly-implement-ccip-read-for-eth-subnames": undefined, - "correctly-implement-ccip-read-for-offchain-dns-names": undefined, - "correctly-resolve-names-for-different-evm-chains": undefined, - "correctly-resolve-names-for-bitcoin": undefined, - "correctly-resolve-names-for-solana": undefined, - "correctly-handle-resolution-for-chains-with-invalid-address-formatting": undefined, + "at01-resolve-onchain-name": undefined, + "at02-resolve-name-needing-normalization": undefined, + "at03-resolve-offchain-eth-subname": undefined, + "at04-resolve-offchain-dns-name": undefined, + "at05-resolve-name-on-other-evm-chain": undefined, + "at06-resolve-bitcoin-address": undefined, + "at07-resolve-solana-address": undefined, + "at08-handle-invalid-address-format": undefined, }, }; diff --git a/ensawards.org/data/apps/kraken-exchange/benchmarks/index.tsx b/ensawards.org/data/apps/kraken-exchange/benchmarks/index.tsx index 24c3132f..9cadb4e6 100644 --- a/ensawards.org/data/apps/kraken-exchange/benchmarks/index.tsx +++ b/ensawards.org/data/apps/kraken-exchange/benchmarks/index.tsx @@ -44,14 +44,14 @@ const benchmarks: BestPracticeBenchmarks = { } as const satisfies AcceptanceTestBenchmark, }, "deposit-addresses": { - "correctly-resolve-direct-onchain-subname-address": undefined, - "correctly-resolve-names-requiring-normalization": undefined, - "correctly-implement-ccip-read-for-eth-subnames": undefined, - "correctly-implement-ccip-read-for-offchain-dns-names": undefined, - "correctly-resolve-names-for-different-evm-chains": undefined, - "correctly-resolve-names-for-bitcoin": undefined, - "correctly-resolve-names-for-solana": undefined, - "correctly-handle-resolution-for-chains-with-invalid-address-formatting": undefined, + "at01-resolve-onchain-name": undefined, + "at02-resolve-name-needing-normalization": undefined, + "at03-resolve-offchain-eth-subname": undefined, + "at04-resolve-offchain-dns-name": undefined, + "at05-resolve-name-on-other-evm-chain": undefined, + "at06-resolve-bitcoin-address": undefined, + "at07-resolve-solana-address": undefined, + "at08-handle-invalid-address-format": undefined, }, }; diff --git a/ensawards.org/data/apps/kraken-wallet/benchmarks/index.tsx b/ensawards.org/data/apps/kraken-wallet/benchmarks/index.tsx index d22ce50b..8b97aedf 100644 --- a/ensawards.org/data/apps/kraken-wallet/benchmarks/index.tsx +++ b/ensawards.org/data/apps/kraken-wallet/benchmarks/index.tsx @@ -48,14 +48,14 @@ const benchmarks: BestPracticeBenchmarks = { } as const satisfies AcceptanceTestBenchmark, }, "deposit-addresses": { - "correctly-resolve-direct-onchain-subname-address": undefined, - "correctly-resolve-names-requiring-normalization": undefined, - "correctly-implement-ccip-read-for-eth-subnames": undefined, - "correctly-implement-ccip-read-for-offchain-dns-names": undefined, - "correctly-resolve-names-for-different-evm-chains": undefined, - "correctly-resolve-names-for-bitcoin": undefined, - "correctly-resolve-names-for-solana": undefined, - "correctly-handle-resolution-for-chains-with-invalid-address-formatting": undefined, + "at01-resolve-onchain-name": undefined, + "at02-resolve-name-needing-normalization": undefined, + "at03-resolve-offchain-eth-subname": undefined, + "at04-resolve-offchain-dns-name": undefined, + "at05-resolve-name-on-other-evm-chain": undefined, + "at06-resolve-bitcoin-address": undefined, + "at07-resolve-solana-address": undefined, + "at08-handle-invalid-address-format": undefined, }, }; diff --git a/ensawards.org/data/apps/lido-defi/benchmarks/index.tsx b/ensawards.org/data/apps/lido-defi/benchmarks/index.tsx index c55d46a6..b659e823 100644 --- a/ensawards.org/data/apps/lido-defi/benchmarks/index.tsx +++ b/ensawards.org/data/apps/lido-defi/benchmarks/index.tsx @@ -57,14 +57,14 @@ const benchmarks: BestPracticeBenchmarks = { } as const satisfies AcceptanceTestBenchmark, }, "deposit-addresses": { - "correctly-resolve-direct-onchain-subname-address": undefined, - "correctly-resolve-names-requiring-normalization": undefined, - "correctly-implement-ccip-read-for-eth-subnames": undefined, - "correctly-implement-ccip-read-for-offchain-dns-names": undefined, - "correctly-resolve-names-for-different-evm-chains": undefined, - "correctly-resolve-names-for-bitcoin": undefined, - "correctly-resolve-names-for-solana": undefined, - "correctly-handle-resolution-for-chains-with-invalid-address-formatting": undefined, + "at01-resolve-onchain-name": undefined, + "at02-resolve-name-needing-normalization": undefined, + "at03-resolve-offchain-eth-subname": undefined, + "at04-resolve-offchain-dns-name": undefined, + "at05-resolve-name-on-other-evm-chain": undefined, + "at06-resolve-bitcoin-address": undefined, + "at07-resolve-solana-address": undefined, + "at08-handle-invalid-address-format": undefined, }, } as const satisfies BestPracticeBenchmarks; diff --git a/ensawards.org/data/apps/metamask-wallet/benchmarks/index.tsx b/ensawards.org/data/apps/metamask-wallet/benchmarks/index.tsx index 44cdea75..768ab797 100644 --- a/ensawards.org/data/apps/metamask-wallet/benchmarks/index.tsx +++ b/ensawards.org/data/apps/metamask-wallet/benchmarks/index.tsx @@ -75,14 +75,14 @@ const benchmarks = { } as const satisfies AcceptanceTestBenchmark, }, "deposit-addresses": { - "correctly-resolve-direct-onchain-subname-address": undefined, - "correctly-resolve-names-requiring-normalization": undefined, - "correctly-implement-ccip-read-for-eth-subnames": undefined, - "correctly-implement-ccip-read-for-offchain-dns-names": undefined, - "correctly-resolve-names-for-different-evm-chains": undefined, - "correctly-resolve-names-for-bitcoin": undefined, - "correctly-resolve-names-for-solana": undefined, - "correctly-handle-resolution-for-chains-with-invalid-address-formatting": undefined, + "at01-resolve-onchain-name": undefined, + "at02-resolve-name-needing-normalization": undefined, + "at03-resolve-offchain-eth-subname": undefined, + "at04-resolve-offchain-dns-name": undefined, + "at05-resolve-name-on-other-evm-chain": undefined, + "at06-resolve-bitcoin-address": undefined, + "at07-resolve-solana-address": undefined, + "at08-handle-invalid-address-format": undefined, }, } as const satisfies BestPracticeBenchmarks; diff --git a/ensawards.org/data/apps/okx-exchange/benchmarks/index.tsx b/ensawards.org/data/apps/okx-exchange/benchmarks/index.tsx index a6b75985..51d91164 100644 --- a/ensawards.org/data/apps/okx-exchange/benchmarks/index.tsx +++ b/ensawards.org/data/apps/okx-exchange/benchmarks/index.tsx @@ -44,14 +44,14 @@ const benchmarks: BestPracticeBenchmarks = { } as const satisfies AcceptanceTestBenchmark, }, "deposit-addresses": { - "correctly-resolve-direct-onchain-subname-address": undefined, - "correctly-resolve-names-requiring-normalization": undefined, - "correctly-implement-ccip-read-for-eth-subnames": undefined, - "correctly-implement-ccip-read-for-offchain-dns-names": undefined, - "correctly-resolve-names-for-different-evm-chains": undefined, - "correctly-resolve-names-for-bitcoin": undefined, - "correctly-resolve-names-for-solana": undefined, - "correctly-handle-resolution-for-chains-with-invalid-address-formatting": undefined, + "at01-resolve-onchain-name": undefined, + "at02-resolve-name-needing-normalization": undefined, + "at03-resolve-offchain-eth-subname": undefined, + "at04-resolve-offchain-dns-name": undefined, + "at05-resolve-name-on-other-evm-chain": undefined, + "at06-resolve-bitcoin-address": undefined, + "at07-resolve-solana-address": undefined, + "at08-handle-invalid-address-format": undefined, }, }; diff --git a/ensawards.org/data/apps/okx-wallet/benchmarks/index.tsx b/ensawards.org/data/apps/okx-wallet/benchmarks/index.tsx index e54d4915..930f54b8 100644 --- a/ensawards.org/data/apps/okx-wallet/benchmarks/index.tsx +++ b/ensawards.org/data/apps/okx-wallet/benchmarks/index.tsx @@ -48,14 +48,14 @@ const benchmarks: BestPracticeBenchmarks = { } as const satisfies AcceptanceTestBenchmark, }, "deposit-addresses": { - "correctly-resolve-direct-onchain-subname-address": undefined, - "correctly-resolve-names-requiring-normalization": undefined, - "correctly-implement-ccip-read-for-eth-subnames": undefined, - "correctly-implement-ccip-read-for-offchain-dns-names": undefined, - "correctly-resolve-names-for-different-evm-chains": undefined, - "correctly-resolve-names-for-bitcoin": undefined, - "correctly-resolve-names-for-solana": undefined, - "correctly-handle-resolution-for-chains-with-invalid-address-formatting": undefined, + "at01-resolve-onchain-name": undefined, + "at02-resolve-name-needing-normalization": undefined, + "at03-resolve-offchain-eth-subname": undefined, + "at04-resolve-offchain-dns-name": undefined, + "at05-resolve-name-on-other-evm-chain": undefined, + "at06-resolve-bitcoin-address": undefined, + "at07-resolve-solana-address": undefined, + "at08-handle-invalid-address-format": undefined, }, }; diff --git a/ensawards.org/data/apps/phantom-wallet/benchmarks/index.tsx b/ensawards.org/data/apps/phantom-wallet/benchmarks/index.tsx index 7f57dd5a..12b04b43 100644 --- a/ensawards.org/data/apps/phantom-wallet/benchmarks/index.tsx +++ b/ensawards.org/data/apps/phantom-wallet/benchmarks/index.tsx @@ -48,14 +48,14 @@ const benchmarks: BestPracticeBenchmarks = { } as const satisfies AcceptanceTestBenchmark, }, "deposit-addresses": { - "correctly-resolve-direct-onchain-subname-address": undefined, - "correctly-resolve-names-requiring-normalization": undefined, - "correctly-implement-ccip-read-for-eth-subnames": undefined, - "correctly-implement-ccip-read-for-offchain-dns-names": undefined, - "correctly-resolve-names-for-different-evm-chains": undefined, - "correctly-resolve-names-for-bitcoin": undefined, - "correctly-resolve-names-for-solana": undefined, - "correctly-handle-resolution-for-chains-with-invalid-address-formatting": undefined, + "at01-resolve-onchain-name": undefined, + "at02-resolve-name-needing-normalization": undefined, + "at03-resolve-offchain-eth-subname": undefined, + "at04-resolve-offchain-dns-name": undefined, + "at05-resolve-name-on-other-evm-chain": undefined, + "at06-resolve-bitcoin-address": undefined, + "at07-resolve-solana-address": undefined, + "at08-handle-invalid-address-format": undefined, }, } as const satisfies BestPracticeBenchmarks; diff --git a/ensawards.org/data/apps/rabby-wallet/benchmarks/index.tsx b/ensawards.org/data/apps/rabby-wallet/benchmarks/index.tsx index 6153a36c..2ffd59ea 100644 --- a/ensawards.org/data/apps/rabby-wallet/benchmarks/index.tsx +++ b/ensawards.org/data/apps/rabby-wallet/benchmarks/index.tsx @@ -48,14 +48,14 @@ const benchmarks: BestPracticeBenchmarks = { } as const satisfies AcceptanceTestBenchmark, }, "deposit-addresses": { - "correctly-resolve-direct-onchain-subname-address": undefined, - "correctly-resolve-names-requiring-normalization": undefined, - "correctly-implement-ccip-read-for-eth-subnames": undefined, - "correctly-implement-ccip-read-for-offchain-dns-names": undefined, - "correctly-resolve-names-for-different-evm-chains": undefined, - "correctly-resolve-names-for-bitcoin": undefined, - "correctly-resolve-names-for-solana": undefined, - "correctly-handle-resolution-for-chains-with-invalid-address-formatting": undefined, + "at01-resolve-onchain-name": undefined, + "at02-resolve-name-needing-normalization": undefined, + "at03-resolve-offchain-eth-subname": undefined, + "at04-resolve-offchain-dns-name": undefined, + "at05-resolve-name-on-other-evm-chain": undefined, + "at06-resolve-bitcoin-address": undefined, + "at07-resolve-solana-address": undefined, + "at08-handle-invalid-address-format": undefined, }, } as const satisfies BestPracticeBenchmarks; diff --git a/ensawards.org/data/apps/rainbow-wallet/benchmarks/index.tsx b/ensawards.org/data/apps/rainbow-wallet/benchmarks/index.tsx index 34f54534..7a590653 100644 --- a/ensawards.org/data/apps/rainbow-wallet/benchmarks/index.tsx +++ b/ensawards.org/data/apps/rainbow-wallet/benchmarks/index.tsx @@ -86,14 +86,14 @@ const benchmarks = { } as const satisfies AcceptanceTestBenchmark, }, "deposit-addresses": { - "correctly-resolve-direct-onchain-subname-address": undefined, - "correctly-resolve-names-requiring-normalization": undefined, - "correctly-implement-ccip-read-for-eth-subnames": undefined, - "correctly-implement-ccip-read-for-offchain-dns-names": undefined, - "correctly-resolve-names-for-different-evm-chains": undefined, - "correctly-resolve-names-for-bitcoin": undefined, - "correctly-resolve-names-for-solana": undefined, - "correctly-handle-resolution-for-chains-with-invalid-address-formatting": undefined, + "at01-resolve-onchain-name": undefined, + "at02-resolve-name-needing-normalization": undefined, + "at03-resolve-offchain-eth-subname": undefined, + "at04-resolve-offchain-dns-name": undefined, + "at05-resolve-name-on-other-evm-chain": undefined, + "at06-resolve-bitcoin-address": undefined, + "at07-resolve-solana-address": undefined, + "at08-handle-invalid-address-format": undefined, }, } as const satisfies BestPracticeBenchmarks; diff --git a/ensawards.org/data/apps/readyx-wallet/benchmarks/resolution/deposit-addresses/index.tsx b/ensawards.org/data/apps/readyx-wallet/benchmarks/resolution/deposit-addresses/index.tsx index 73e32ab7..b27eea90 100644 --- a/ensawards.org/data/apps/readyx-wallet/benchmarks/resolution/deposit-addresses/index.tsx +++ b/ensawards.org/data/apps/readyx-wallet/benchmarks/resolution/deposit-addresses/index.tsx @@ -1,158 +1,80 @@ // 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 { - vitalikAddressSpan, - vitalikEnsNameSpan, -} from "data/ens-best-practices/resolution/deposit-addresses/technicalDetails"; -import { - acceptanceTestDetailsContainerStyles, - bestPracticeTechnicalDetailsCodeStyles, -} from "data/ens-best-practices/styles"; + buildEnsNotSupportedNote, + buildNotApplicableForFailedTest, +} from "data/ens-best-practices/resolution/deposit-addresses/notes"; import { parseTimestamp } from "@ensnode/ensnode-sdk"; -import { cn } from "@/utils/tailwindClassConcatenation"; - import at1Proof from "./at-1.png"; const depositAddresses = { - "correctly-resolve-direct-onchain-subname-address": { + "at01-resolve-onchain-name": { result: BenchmarkResults.Fail, contributions: [ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-19T13:31:00Z") }, ], - notes: ( -
-

- ENS resolution was tested using the "send" flow with {vitalikEnsNameSpan}. The - wallet doesn't support the use of ENS names at all as the recipient identifier, so it - never resolves the expected Ethereum Mainnet address ({vitalikAddressSpan}), which we - classify as a failure. -

- ReadyX doesn't allow ENS name as recipient in the send flow -
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-resolve-names-requiring-normalization": { + notes: buildEnsNotSupportedNote({ + method: 'the "send" flow', + proof: { + image: at1Proof, + alt: "ReadyX doesn't allow ENS name as recipient in the send flow", + }, + }), + }, + "at02-resolve-name-needing-normalization": { result: BenchmarkResults.NotApplicable, contributions: [ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-19T13:32:00Z") }, ], - notes: ( -
-

- Based on the results of the{" "} - Acceptance Test 1, the app - doesn't appear to support ENS resolution at all and therefore we classify this acceptance - test as Not Applicable. -

-
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-implement-ccip-read-for-eth-subnames": { + notes: buildNotApplicableForFailedTest({ testNumber: 1 }), + }, + "at03-resolve-offchain-eth-subname": { result: BenchmarkResults.NotApplicable, contributions: [ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-19T13:32:00Z") }, ], - notes: ( -
-

- Based on the results of the{" "} - Acceptance Test 1, the app - doesn't appear to support ENS resolution at all and therefore we classify this acceptance - test as Not Applicable. -

-
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-implement-ccip-read-for-offchain-dns-names": { + notes: buildNotApplicableForFailedTest({ testNumber: 1 }), + }, + "at04-resolve-offchain-dns-name": { result: BenchmarkResults.NotApplicable, contributions: [ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-19T13:32:00Z") }, ], - notes: ( -
-

- Based on the results of the{" "} - Acceptance Test 1, the app - doesn't appear to support ENS resolution at all and therefore we classify this acceptance - test as Not Applicable. -

-
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-resolve-names-for-different-evm-chains": { + notes: buildNotApplicableForFailedTest({ testNumber: 1 }), + }, + "at05-resolve-name-on-other-evm-chain": { result: BenchmarkResults.NotApplicable, contributions: [ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-19T13:32:00Z") }, ], - notes: ( -
-

- Based on the results of the{" "} - Acceptance Test 1, the app - doesn't appear to support ENS resolution at all and therefore we classify this acceptance - test as Not Applicable. -

-
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-resolve-names-for-bitcoin": { + notes: buildNotApplicableForFailedTest({ testNumber: 1 }), + }, + "at06-resolve-bitcoin-address": { result: BenchmarkResults.NotApplicable, contributions: [ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-19T13:33:00Z") }, ], - notes: ( -
-

- Based on the results of the{" "} - Acceptance Test 1, the app - doesn't appear to support ENS resolution at all and therefore we classify this acceptance - test as Not Applicable. -

-
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-resolve-names-for-solana": { + notes: buildNotApplicableForFailedTest({ testNumber: 1 }), + }, + "at07-resolve-solana-address": { result: BenchmarkResults.NotApplicable, contributions: [ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-19T13:33:00Z") }, ], - notes: ( -
-

- Based on the results of the{" "} - Acceptance Test 1, the app - doesn't appear to support ENS resolution at all and therefore we classify this acceptance - test as Not Applicable. -

-
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-handle-resolution-for-chains-with-invalid-address-formatting": { + notes: buildNotApplicableForFailedTest({ testNumber: 1 }), + }, + "at08-handle-invalid-address-format": { result: BenchmarkResults.NotApplicable, contributions: [ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-19T13:33:00Z") }, ], - notes: ( -
-

- Based on the results of the{" "} - Acceptance Test 1, the app - doesn't appear to support ENS resolution at all and therefore we classify this acceptance - test as Not Applicable. -

-
- ), - } as const satisfies AcceptanceTestBenchmark, + notes: buildNotApplicableForFailedTest({ testNumber: 1 }), + }, } as const satisfies AcceptanceTestBenchmarks; export default depositAddresses; diff --git a/ensawards.org/data/apps/robinhood-exchange/benchmarks/index.tsx b/ensawards.org/data/apps/robinhood-exchange/benchmarks/index.tsx index 6d97372f..49e46503 100644 --- a/ensawards.org/data/apps/robinhood-exchange/benchmarks/index.tsx +++ b/ensawards.org/data/apps/robinhood-exchange/benchmarks/index.tsx @@ -52,14 +52,14 @@ const benchmarks: BestPracticeBenchmarks = { } as const satisfies AcceptanceTestBenchmark, }, "deposit-addresses": { - "correctly-resolve-direct-onchain-subname-address": undefined, - "correctly-resolve-names-requiring-normalization": undefined, - "correctly-implement-ccip-read-for-eth-subnames": undefined, - "correctly-implement-ccip-read-for-offchain-dns-names": undefined, - "correctly-resolve-names-for-different-evm-chains": undefined, - "correctly-resolve-names-for-bitcoin": undefined, - "correctly-resolve-names-for-solana": undefined, - "correctly-handle-resolution-for-chains-with-invalid-address-formatting": undefined, + "at01-resolve-onchain-name": undefined, + "at02-resolve-name-needing-normalization": undefined, + "at03-resolve-offchain-eth-subname": undefined, + "at04-resolve-offchain-dns-name": undefined, + "at05-resolve-name-on-other-evm-chain": undefined, + "at06-resolve-bitcoin-address": undefined, + "at07-resolve-solana-address": undefined, + "at08-handle-invalid-address-format": undefined, }, }; diff --git a/ensawards.org/data/apps/robinhood-wallet/benchmarks/resolution/deposit-addresses/index.tsx b/ensawards.org/data/apps/robinhood-wallet/benchmarks/resolution/deposit-addresses/index.tsx index 9643ca15..1a7d1740 100644 --- a/ensawards.org/data/apps/robinhood-wallet/benchmarks/resolution/deposit-addresses/index.tsx +++ b/ensawards.org/data/apps/robinhood-wallet/benchmarks/resolution/deposit-addresses/index.tsx @@ -1,158 +1,80 @@ // 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 { - vitalikAddressSpan, - vitalikEnsNameSpan, -} from "data/ens-best-practices/resolution/deposit-addresses/technicalDetails"; -import { - acceptanceTestDetailsContainerStyles, - bestPracticeTechnicalDetailsCodeStyles, -} from "data/ens-best-practices/styles"; + buildEnsNotSupportedNote, + buildNotApplicableForFailedTest, +} from "data/ens-best-practices/resolution/deposit-addresses/notes"; import { parseTimestamp } from "@ensnode/ensnode-sdk"; -import { cn } from "@/utils/tailwindClassConcatenation"; - import at1Proof from "./at-1.gif"; const depositAddresses = { - "correctly-resolve-direct-onchain-subname-address": { + "at01-resolve-onchain-name": { result: BenchmarkResults.Fail, contributions: [ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-19T13:31:00Z") }, ], - notes: ( -
-

- ENS resolution was tested using the "send" flow with {vitalikEnsNameSpan}. The - wallet doesn't support the use of ENS names at all as the recipient identifier, so it - never resolves the expected Ethereum Mainnet address ({vitalikAddressSpan}), which we - classify as a failure. -

- Robinhood Wallet doesn't allow ENS name as recipient in the send flow -
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-resolve-names-requiring-normalization": { + notes: buildEnsNotSupportedNote({ + method: 'the "send" flow', + proof: { + image: at1Proof, + alt: "Robinhood Wallet doesn't allow ENS name as recipient in the send flow", + }, + }), + }, + "at02-resolve-name-needing-normalization": { result: BenchmarkResults.NotApplicable, contributions: [ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-19T13:32:00Z") }, ], - notes: ( -
-

- Based on the results of the{" "} - Acceptance Test 1, the app - doesn't appear to support ENS resolution at all and therefore we classify this acceptance - test as Not Applicable. -

-
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-implement-ccip-read-for-eth-subnames": { + notes: buildNotApplicableForFailedTest({ testNumber: 1 }), + }, + "at03-resolve-offchain-eth-subname": { result: BenchmarkResults.NotApplicable, contributions: [ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-19T13:32:00Z") }, ], - notes: ( -
-

- Based on the results of the{" "} - Acceptance Test 1, the app - doesn't appear to support ENS resolution at all and therefore we classify this acceptance - test as Not Applicable. -

-
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-implement-ccip-read-for-offchain-dns-names": { + notes: buildNotApplicableForFailedTest({ testNumber: 1 }), + }, + "at04-resolve-offchain-dns-name": { result: BenchmarkResults.NotApplicable, contributions: [ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-19T13:32:00Z") }, ], - notes: ( -
-

- Based on the results of the{" "} - Acceptance Test 1, the app - doesn't appear to support ENS resolution at all and therefore we classify this acceptance - test as Not Applicable. -

-
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-resolve-names-for-different-evm-chains": { + notes: buildNotApplicableForFailedTest({ testNumber: 1 }), + }, + "at05-resolve-name-on-other-evm-chain": { result: BenchmarkResults.NotApplicable, contributions: [ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-19T13:32:00Z") }, ], - notes: ( -
-

- Based on the results of the{" "} - Acceptance Test 1, the app - doesn't appear to support ENS resolution at all and therefore we classify this acceptance - test as Not Applicable. -

-
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-resolve-names-for-bitcoin": { + notes: buildNotApplicableForFailedTest({ testNumber: 1 }), + }, + "at06-resolve-bitcoin-address": { result: BenchmarkResults.NotApplicable, contributions: [ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-19T13:33:00Z") }, ], - notes: ( -
-

- Based on the results of the{" "} - Acceptance Test 1, the app - doesn't appear to support ENS resolution at all and therefore we classify this acceptance - test as Not Applicable. -

-
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-resolve-names-for-solana": { + notes: buildNotApplicableForFailedTest({ testNumber: 1 }), + }, + "at07-resolve-solana-address": { result: BenchmarkResults.NotApplicable, contributions: [ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-19T13:33:00Z") }, ], - notes: ( -
-

- Based on the results of the{" "} - Acceptance Test 1, the app - doesn't appear to support ENS resolution at all and therefore we classify this acceptance - test as Not Applicable. -

-
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-handle-resolution-for-chains-with-invalid-address-formatting": { + notes: buildNotApplicableForFailedTest({ testNumber: 1 }), + }, + "at08-handle-invalid-address-format": { result: BenchmarkResults.NotApplicable, contributions: [ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-19T13:33:00Z") }, ], - notes: ( -
-

- Based on the results of the{" "} - Acceptance Test 1, the app - doesn't appear to support ENS resolution at all and therefore we classify this acceptance - test as Not Applicable. -

-
- ), - } as const satisfies AcceptanceTestBenchmark, + notes: buildNotApplicableForFailedTest({ testNumber: 1 }), + }, } as const satisfies AcceptanceTestBenchmarks; export default depositAddresses; diff --git a/ensawards.org/data/apps/safe-wallet/benchmarks/index.tsx b/ensawards.org/data/apps/safe-wallet/benchmarks/index.tsx index c4207f1e..c141ed17 100644 --- a/ensawards.org/data/apps/safe-wallet/benchmarks/index.tsx +++ b/ensawards.org/data/apps/safe-wallet/benchmarks/index.tsx @@ -48,14 +48,14 @@ const benchmarks: BestPracticeBenchmarks = { } as const satisfies AcceptanceTestBenchmark, }, "deposit-addresses": { - "correctly-resolve-direct-onchain-subname-address": undefined, - "correctly-resolve-names-requiring-normalization": undefined, - "correctly-implement-ccip-read-for-eth-subnames": undefined, - "correctly-implement-ccip-read-for-offchain-dns-names": undefined, - "correctly-resolve-names-for-different-evm-chains": undefined, - "correctly-resolve-names-for-bitcoin": undefined, - "correctly-resolve-names-for-solana": undefined, - "correctly-handle-resolution-for-chains-with-invalid-address-formatting": undefined, + "at01-resolve-onchain-name": undefined, + "at02-resolve-name-needing-normalization": undefined, + "at03-resolve-offchain-eth-subname": undefined, + "at04-resolve-offchain-dns-name": undefined, + "at05-resolve-name-on-other-evm-chain": undefined, + "at06-resolve-bitcoin-address": undefined, + "at07-resolve-solana-address": undefined, + "at08-handle-invalid-address-format": undefined, }, } as const satisfies BestPracticeBenchmarks; diff --git a/ensawards.org/data/apps/status-wallet/benchmarks/index.tsx b/ensawards.org/data/apps/status-wallet/benchmarks/index.tsx index f0cbcd50..a511fc52 100644 --- a/ensawards.org/data/apps/status-wallet/benchmarks/index.tsx +++ b/ensawards.org/data/apps/status-wallet/benchmarks/index.tsx @@ -48,14 +48,14 @@ const benchmarks: BestPracticeBenchmarks = { } as const satisfies AcceptanceTestBenchmark, }, "deposit-addresses": { - "correctly-resolve-direct-onchain-subname-address": undefined, - "correctly-resolve-names-requiring-normalization": undefined, - "correctly-implement-ccip-read-for-eth-subnames": undefined, - "correctly-implement-ccip-read-for-offchain-dns-names": undefined, - "correctly-resolve-names-for-different-evm-chains": undefined, - "correctly-resolve-names-for-bitcoin": undefined, - "correctly-resolve-names-for-solana": undefined, - "correctly-handle-resolution-for-chains-with-invalid-address-formatting": undefined, + "at01-resolve-onchain-name": undefined, + "at02-resolve-name-needing-normalization": undefined, + "at03-resolve-offchain-eth-subname": undefined, + "at04-resolve-offchain-dns-name": undefined, + "at05-resolve-name-on-other-evm-chain": undefined, + "at06-resolve-bitcoin-address": undefined, + "at07-resolve-solana-address": undefined, + "at08-handle-invalid-address-format": undefined, }, } as const satisfies BestPracticeBenchmarks; diff --git a/ensawards.org/data/apps/trust-wallet/benchmarks/index.tsx b/ensawards.org/data/apps/trust-wallet/benchmarks/index.tsx index 7a63f9f3..0a280f58 100644 --- a/ensawards.org/data/apps/trust-wallet/benchmarks/index.tsx +++ b/ensawards.org/data/apps/trust-wallet/benchmarks/index.tsx @@ -48,14 +48,14 @@ const benchmarks: BestPracticeBenchmarks = { } as const satisfies AcceptanceTestBenchmark, }, "deposit-addresses": { - "correctly-resolve-direct-onchain-subname-address": undefined, - "correctly-resolve-names-requiring-normalization": undefined, - "correctly-implement-ccip-read-for-eth-subnames": undefined, - "correctly-implement-ccip-read-for-offchain-dns-names": undefined, - "correctly-resolve-names-for-different-evm-chains": undefined, - "correctly-resolve-names-for-bitcoin": undefined, - "correctly-resolve-names-for-solana": undefined, - "correctly-handle-resolution-for-chains-with-invalid-address-formatting": undefined, + "at01-resolve-onchain-name": undefined, + "at02-resolve-name-needing-normalization": undefined, + "at03-resolve-offchain-eth-subname": undefined, + "at04-resolve-offchain-dns-name": undefined, + "at05-resolve-name-on-other-evm-chain": undefined, + "at06-resolve-bitcoin-address": undefined, + "at07-resolve-solana-address": undefined, + "at08-handle-invalid-address-format": undefined, }, } as const satisfies BestPracticeBenchmarks; diff --git a/ensawards.org/data/apps/uniswap-defi/benchmarks/index.tsx b/ensawards.org/data/apps/uniswap-defi/benchmarks/index.tsx index b915e5b8..ad027b61 100644 --- a/ensawards.org/data/apps/uniswap-defi/benchmarks/index.tsx +++ b/ensawards.org/data/apps/uniswap-defi/benchmarks/index.tsx @@ -48,14 +48,14 @@ const benchmarks: BestPracticeBenchmarks = { } as const satisfies AcceptanceTestBenchmark, }, "deposit-addresses": { - "correctly-resolve-direct-onchain-subname-address": undefined, - "correctly-resolve-names-requiring-normalization": undefined, - "correctly-implement-ccip-read-for-eth-subnames": undefined, - "correctly-implement-ccip-read-for-offchain-dns-names": undefined, - "correctly-resolve-names-for-different-evm-chains": undefined, - "correctly-resolve-names-for-bitcoin": undefined, - "correctly-resolve-names-for-solana": undefined, - "correctly-handle-resolution-for-chains-with-invalid-address-formatting": undefined, + "at01-resolve-onchain-name": undefined, + "at02-resolve-name-needing-normalization": undefined, + "at03-resolve-offchain-eth-subname": undefined, + "at04-resolve-offchain-dns-name": undefined, + "at05-resolve-name-on-other-evm-chain": undefined, + "at06-resolve-bitcoin-address": undefined, + "at07-resolve-solana-address": undefined, + "at08-handle-invalid-address-format": undefined, }, } as const satisfies BestPracticeBenchmarks; diff --git a/ensawards.org/data/apps/walletchan-wallet/benchmarks/resolution/deposit-addresses/index.tsx b/ensawards.org/data/apps/walletchan-wallet/benchmarks/resolution/deposit-addresses/index.tsx index b1119934..74fb484f 100644 --- a/ensawards.org/data/apps/walletchan-wallet/benchmarks/resolution/deposit-addresses/index.tsx +++ b/ensawards.org/data/apps/walletchan-wallet/benchmarks/resolution/deposit-addresses/index.tsx @@ -1,185 +1,106 @@ // 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 { - dperriComAddressSpan, - dperriComEnsNameSpan, - ethereumAddressSpan, - ethereumNormalizedEnsNameSpan, - ethereumUnnormalizedEnsNameSpan, - jesseBaseAddressSpan, - jesseBaseEnsNameSpan, - lightkeeperAddressSpan, - lightkeeperEnsNameSpan, - vitalikAddressSpan, - vitalikEnsNameSpan, -} from "data/ens-best-practices/resolution/deposit-addresses/technicalDetails"; -import { - acceptanceTestDetailsContainerStyles, - bestPracticeTechnicalDetailsCodeStyles, -} from "data/ens-best-practices/styles"; + buildFailNoteForAT5, + buildNotApplicableForFailedTest, + buildNotApplicableForNonEvmChain, + buildPassNoteForAT1, + buildPassNoteForAT2, + buildPassNoteForAT3, + buildPassNoteForAT4, +} from "data/ens-best-practices/resolution/deposit-addresses/notes"; import { parseTimestamp } from "@ensnode/ensnode-sdk"; -import { cn } from "@/utils/tailwindClassConcatenation"; - import at1Proof from "./at-1.gif"; import at2Proof from "./at-2.gif"; import at3Proof from "./at-3.gif"; import at4Proof from "./at-4.gif"; import at5Proof from "./at-5.gif"; +const method = 'the "send" flow'; + const depositAddresses = { - "correctly-resolve-direct-onchain-subname-address": { + "at01-resolve-onchain-name": { result: BenchmarkResults.Pass, contributions: [ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-19T16:04:13Z") }, ], - notes: ( -
-

- ENS resolution was tested using the "send" flow. The resolved Ethereum Mainnet - address of {vitalikEnsNameSpan} is correct ({vitalikAddressSpan}). -

- WalletChan correctly resolves the address for vitalik.eth -
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-resolve-names-requiring-normalization": { + notes: buildPassNoteForAT1({ + method, + proof: { image: at1Proof, alt: "WalletChan correctly resolves the address for vitalik.eth" }, + }), + }, + "at02-resolve-name-needing-normalization": { result: BenchmarkResults.Pass, contributions: [ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-19T16:07:55Z") }, ], - notes: ( -
-

- ENS resolution was tested using the "send" flow. The input{" "} - {ethereumUnnormalizedEnsNameSpan} was correctly normalized to{" "} - {ethereumNormalizedEnsNameSpan} and resolved to the correct Ethereum Mainnet address ( - {ethereumAddressSpan}). -

- WalletChan correctly resolves the address for Ξthereum.eth -
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-implement-ccip-read-for-eth-subnames": { + notes: buildPassNoteForAT2({ + method, + proof: { image: at2Proof, alt: "WalletChan correctly resolves the address for Ξthereum.eth" }, + }), + }, + "at03-resolve-offchain-eth-subname": { result: BenchmarkResults.Pass, contributions: [ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-19T16:13:18Z") }, ], - notes: ( -
-

- ENS resolution was tested using the "send" flow. The CCIP-Read enabled .eth - subname {jesseBaseEnsNameSpan} resolved to the correct Ethereum Mainnet address ( - {jesseBaseAddressSpan}). -

- WalletChan correctly resolves the address for jesse.base.eth -
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-implement-ccip-read-for-offchain-dns-names": { + notes: buildPassNoteForAT3({ + method, + proof: { + image: at3Proof, + alt: "WalletChan correctly resolves the address for jesse.base.eth", + }, + }), + }, + "at04-resolve-offchain-dns-name": { result: BenchmarkResults.Pass, contributions: [ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-19T15:15:52Z") }, ], - notes: ( -
-

- ENS resolution was tested using the "send" flow. The offchain DNS name{" "} - {dperriComEnsNameSpan} resolved to the correct Ethereum Mainnet address via CCIP-Read ( - {dperriComAddressSpan}). -

- WalletChan correctly resolves the address for dperri.com -
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-resolve-names-for-different-evm-chains": { + notes: buildPassNoteForAT4({ + method, + proof: { image: at4Proof, alt: "WalletChan correctly resolves the address for dperri.com" }, + }), + }, + "at05-resolve-name-on-other-evm-chain": { result: BenchmarkResults.Fail, contributions: [ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-19T16:25:50Z") }, ], - notes: ( -
-

- ENS resolution was tested using the "send" flow in context of the Base chain. - For {lightkeeperEnsNameSpan} the resolved address is NOT the expected Base chain - address ({lightkeeperAddressSpan}). -

- WalletChan fails to resolve the address for lightkeeper.eth in context of the Base chain -
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-resolve-names-for-bitcoin": { + notes: buildFailNoteForAT5({ + method, + proof: { + image: at5Proof, + alt: "WalletChan fails to resolve the address for lightkeeper.eth in context of the Base chain", + }, + }), + }, + "at06-resolve-bitcoin-address": { result: BenchmarkResults.NotApplicable, contributions: [ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-19T16:19:00Z") }, ], - notes: ( -
-

- The app doesn't have context of non-EVM chain Bitcoin and therefore we classify this - acceptance test as{" "} - Not Applicable. -

-
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-resolve-names-for-solana": { + notes: buildNotApplicableForNonEvmChain({ chain: "Bitcoin" }), + }, + "at07-resolve-solana-address": { result: BenchmarkResults.NotApplicable, contributions: [ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-19T16:19:00Z") }, ], - notes: ( -
-

- The app doesn't have context of non-EVM chain Solana and therefore we classify this - acceptance test as{" "} - Not Applicable. -

-
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-handle-resolution-for-chains-with-invalid-address-formatting": { + notes: buildNotApplicableForNonEvmChain({ chain: "Solana" }), + }, + "at08-handle-invalid-address-format": { result: BenchmarkResults.NotApplicable, contributions: [ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-19T16:26:00Z") }, ], - notes: ( -
-

- Based on the results of the{" "} - Acceptance Test 5, the app - doesn't appear to support ENS resolution on Base at all and therefore we classify this - acceptance test as{" "} - Not Applicable. -

-
- ), - } as const satisfies AcceptanceTestBenchmark, + notes: buildNotApplicableForFailedTest({ testNumber: 5, scope: "on Base" }), + }, } as const satisfies AcceptanceTestBenchmarks; export default depositAddresses; diff --git a/ensawards.org/data/apps/worldapp-wallet/benchmarks/resolution/deposit-addresses/index.tsx b/ensawards.org/data/apps/worldapp-wallet/benchmarks/resolution/deposit-addresses/index.tsx index 69f521af..5c636d83 100644 --- a/ensawards.org/data/apps/worldapp-wallet/benchmarks/resolution/deposit-addresses/index.tsx +++ b/ensawards.org/data/apps/worldapp-wallet/benchmarks/resolution/deposit-addresses/index.tsx @@ -1,166 +1,87 @@ // 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 { - vitalikAddressSpan, - vitalikEnsNameSpan, -} from "data/ens-best-practices/resolution/deposit-addresses/technicalDetails"; -import { - acceptanceTestDetailsContainerStyles, - bestPracticeTechnicalDetailsCodeStyles, -} from "data/ens-best-practices/styles"; + buildEnsNotSupportedNote, + buildNotApplicableForFailedTest, +} from "data/ens-best-practices/resolution/deposit-addresses/notes"; import { parseTimestamp } from "@ensnode/ensnode-sdk"; -import { cn } from "@/utils/tailwindClassConcatenation"; - import at1Proof1 from "./at-1-1.png"; import at1Proof2 from "./at-1-2.png"; const depositAddresses = { - "correctly-resolve-direct-onchain-subname-address": { + "at01-resolve-onchain-name": { result: BenchmarkResults.Fail, contributions: [ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-19T13:45:00Z") }, ], - notes: ( -
-

- ENS resolution was tested using the "send" flow with {vitalikEnsNameSpan}. The - wallet doesn't support the use of ENS names at all as the recipient identifier, so it - never resolves the expected Ethereum Mainnet address ({vitalikAddressSpan}), which we - classify as a failure. -

-
- World App's wallet doesn't allow ENS name as recipient in the send flow, part 1 - World App's wallet doesn't allow ENS name as recipient in the send flow, part 2 -
-
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-resolve-names-requiring-normalization": { + notes: buildEnsNotSupportedNote({ + method: 'the "send" flow', + proof: [ + { + image: at1Proof1, + alt: "World App's wallet doesn't allow ENS name as recipient in the send flow, part 1", + }, + { + image: at1Proof2, + alt: "World App's wallet doesn't allow ENS name as recipient in the send flow, part 2", + }, + ], + }), + }, + "at02-resolve-name-needing-normalization": { result: BenchmarkResults.NotApplicable, contributions: [ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-19T13:32:00Z") }, ], - notes: ( -
-

- Based on the results of the{" "} - Acceptance Test 1, the app - doesn't appear to support ENS resolution at all and therefore we classify this acceptance - test as Not Applicable. -

-
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-implement-ccip-read-for-eth-subnames": { + notes: buildNotApplicableForFailedTest({ testNumber: 1 }), + }, + "at03-resolve-offchain-eth-subname": { result: BenchmarkResults.NotApplicable, contributions: [ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-19T13:32:00Z") }, ], - notes: ( -
-

- Based on the results of the{" "} - Acceptance Test 1, the app - doesn't appear to support ENS resolution at all and therefore we classify this acceptance - test as Not Applicable. -

-
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-implement-ccip-read-for-offchain-dns-names": { + notes: buildNotApplicableForFailedTest({ testNumber: 1 }), + }, + "at04-resolve-offchain-dns-name": { result: BenchmarkResults.NotApplicable, contributions: [ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-19T13:32:00Z") }, ], - notes: ( -
-

- Based on the results of the{" "} - Acceptance Test 1, the app - doesn't appear to support ENS resolution at all and therefore we classify this acceptance - test as Not Applicable. -

-
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-resolve-names-for-different-evm-chains": { + notes: buildNotApplicableForFailedTest({ testNumber: 1 }), + }, + "at05-resolve-name-on-other-evm-chain": { result: BenchmarkResults.NotApplicable, contributions: [ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-19T13:32:00Z") }, ], - notes: ( -
-

- Based on the results of the{" "} - Acceptance Test 1, the app - doesn't appear to support ENS resolution at all and therefore we classify this acceptance - test as Not Applicable. -

-
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-resolve-names-for-bitcoin": { + notes: buildNotApplicableForFailedTest({ testNumber: 1 }), + }, + "at06-resolve-bitcoin-address": { result: BenchmarkResults.NotApplicable, contributions: [ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-19T13:33:00Z") }, ], - notes: ( -
-

- Based on the results of the{" "} - Acceptance Test 1, the app - doesn't appear to support ENS resolution at all and therefore we classify this acceptance - test as Not Applicable. -

-
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-resolve-names-for-solana": { + notes: buildNotApplicableForFailedTest({ testNumber: 1 }), + }, + "at07-resolve-solana-address": { result: BenchmarkResults.NotApplicable, contributions: [ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-19T13:33:00Z") }, ], - notes: ( -
-

- Based on the results of the{" "} - Acceptance Test 1, the app - doesn't appear to support ENS resolution at all and therefore we classify this acceptance - test as Not Applicable. -

-
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-handle-resolution-for-chains-with-invalid-address-formatting": { + notes: buildNotApplicableForFailedTest({ testNumber: 1 }), + }, + "at08-handle-invalid-address-format": { result: BenchmarkResults.NotApplicable, contributions: [ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-19T13:33:00Z") }, ], - notes: ( -
-

- Based on the results of the{" "} - Acceptance Test 1, the app - doesn't appear to support ENS resolution at all and therefore we classify this acceptance - test as Not Applicable. -

-
- ), - } as const satisfies AcceptanceTestBenchmark, + notes: buildNotApplicableForFailedTest({ testNumber: 1 }), + }, } as const satisfies AcceptanceTestBenchmarks; export default depositAddresses; diff --git a/ensawards.org/data/apps/zerion-wallet/benchmarks/resolution/deposit-addresses/index.tsx b/ensawards.org/data/apps/zerion-wallet/benchmarks/resolution/deposit-addresses/index.tsx index eab26880..fcb4a46f 100644 --- a/ensawards.org/data/apps/zerion-wallet/benchmarks/resolution/deposit-addresses/index.tsx +++ b/ensawards.org/data/apps/zerion-wallet/benchmarks/resolution/deposit-addresses/index.tsx @@ -1,33 +1,26 @@ // 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 { - dperriComAddressSpan, - dperriComEnsNameSpan, + buildBenchmarkNote, + buildFailNoteForAT3, + buildFailNoteForAT4, + buildFailNoteForAT5, + buildFailNoteForAT7, + buildNotApplicableForFailedTest, + buildNotApplicableForNonEvmChain, + buildPassNoteForAT1, +} from "data/ens-best-practices/resolution/deposit-addresses/notes"; +import { ethereumAddressSpan, ethereumNormalizedEnsNameSpan, ethereumUnnormalizedEnsNameSpan, - gregskrilAddressSolanaSpan, - gregskrilEnsNameSpan, - jesseBaseAddressSpan, - jesseBaseEnsNameSpan, - lightkeeperAddressSpan, - lightkeeperEnsNameSpan, - vitalikAddressSpan, - vitalikEnsNameSpan, } from "data/ens-best-practices/resolution/deposit-addresses/technicalDetails"; -import { - acceptanceTestDetailsContainerStyles, - bestPracticeTechnicalDetailsCodeStyles, -} from "data/ens-best-practices/styles"; import { parseTimestamp } from "@ensnode/ensnode-sdk"; -import { cn } from "@/utils/tailwindClassConcatenation"; - import at1Proof from "./at-1.png"; import at2_1Proof from "./at-2.1.png"; import at2_2Proof from "./at-2.2.png"; @@ -37,172 +30,111 @@ 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 = { - "correctly-resolve-direct-onchain-subname-address": { + "at01-resolve-onchain-name": { result: BenchmarkResults.Pass, contributions: [ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-19T14:56:43Z") }, ], - notes: ( -
-

- ENS resolution was tested using the "send" flow. The resolved Ethereum Mainnet - address of {vitalikEnsNameSpan} is correct ({vitalikAddressSpan}). -

- Zerion correctly resolves the address for vitalik.eth -
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-resolve-names-requiring-normalization": { + notes: buildPassNoteForAT1({ + method, + proof: { image: at1Proof, alt: "Zerion correctly resolves the address for vitalik.eth" }, + }), + }, + // The standard AT2 fail note doesn't capture this nuance, so we write a custom note. + "at02-resolve-name-needing-normalization": { result: BenchmarkResults.Fail, contributions: [ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-19T15:02:11Z") }, ], - notes: ( -
-

- ENS resolution was tested using the "send" flow. For{" "} - {ethereumUnnormalizedEnsNameSpan} (normalized to {ethereumNormalizedEnsNameSpan}) the - resolved Ethereum Mainnet address is correct ({ethereumAddressSpan}), but the app behaves - inconsistently when displaying the resolved name. Repeated attempts produce different - outcomes: sometimes it associates a completely different ENS name with this address, - sometimes it shows "No Result Found" for the entered name. Every observed - outcome is incorrect, so we count this as a failure. -

- Zerion correctly resolves the address for Ξthereum.eth, but associates a different ENS name with this address - Zerion sometimes shows No Result Found when resolving Ξthereum.eth -
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-implement-ccip-read-for-eth-subnames": { + notes: buildBenchmarkNote({ + proof: [ + { + image: at2_1Proof, + alt: "Zerion correctly resolves the address for Ξthereum.eth, but associates a different ENS name with this address", + }, + { + image: at2_2Proof, + alt: "Zerion sometimes shows No Result Found when resolving Ξthereum.eth", + }, + ], + children: ( + <> + Tested using {method}. For {ethereumUnnormalizedEnsNameSpan} (normalized to{" "} + {ethereumNormalizedEnsNameSpan}) the resolved Ethereum Mainnet address is correct ( + {ethereumAddressSpan}), but the app behaves inconsistently when displaying the resolved + name. Repeated attempts produce different outcomes: sometimes it associates a completely + different ENS name with this address, sometimes it shows "No Result Found" for the entered + name. Every observed outcome is incorrect, so we count this as a failure. + + ), + }), + }, + "at03-resolve-offchain-eth-subname": { result: BenchmarkResults.Fail, contributions: [ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-19T15:10:31Z") }, ], - notes: ( -
-

- ENS resolution was tested using the "send" flow. The CCIP-Read enabled .eth - subname {jesseBaseEnsNameSpan} was NOT resolved to its expected Ethereum Mainnet - address ({jesseBaseAddressSpan}). -

- Zerion fails to resolve the address for jesse.base.eth -
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-implement-ccip-read-for-offchain-dns-names": { + notes: buildFailNoteForAT3({ + method, + proof: { image: at3Proof, alt: "Zerion fails to resolve the address for jesse.base.eth" }, + }), + }, + "at04-resolve-offchain-dns-name": { result: BenchmarkResults.Fail, contributions: [ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-19T15:13:31Z") }, ], - notes: ( -
-

- ENS resolution was tested using the "send" flow. The offchain DNS name{" "} - {dperriComEnsNameSpan} was NOT resolved to its expected Ethereum Mainnet address ( - {dperriComAddressSpan}). -

- Zerion fails to resolve the address for dperri.com -
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-resolve-names-for-different-evm-chains": { + notes: buildFailNoteForAT4({ + method, + proof: { image: at4Proof, alt: "Zerion fails to resolve the address for dperri.com" }, + }), + }, + "at05-resolve-name-on-other-evm-chain": { result: BenchmarkResults.Fail, contributions: [ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-19T15:16:11Z") }, ], - notes: ( -
-

- ENS resolution was tested using the "send" flow in context of the Base chain. - For {lightkeeperEnsNameSpan} the resolved address is NOT the expected Base chain - address ({lightkeeperAddressSpan}). -

- Zerion fails to resolve the address for lightkeeper.eth in context of the Base chain -
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-resolve-names-for-bitcoin": { + notes: buildFailNoteForAT5({ + method, + proof: { + image: at5Proof, + alt: "Zerion fails to resolve the address for lightkeeper.eth in context of the Base chain", + }, + }), + }, + "at06-resolve-bitcoin-address": { result: BenchmarkResults.NotApplicable, contributions: [ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-19T15:24:21Z") }, ], - notes: ( -
-

- The app doesn't have context of non-EVM chain Bitcoin and therefore we classify this - acceptance test as{" "} - Not Applicable. -

- Zerion doesn't have context of non-EVM chain Bitcoin -
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-resolve-names-for-solana": { + notes: buildNotApplicableForNonEvmChain({ + chain: "Bitcoin", + proof: { image: at6Proof, alt: "Zerion doesn't have context of non-EVM chain Bitcoin" }, + }), + }, + "at07-resolve-solana-address": { result: BenchmarkResults.Fail, contributions: [ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-19T15:28:04Z") }, ], - notes: ( -
-

- ENS resolution was tested using the "send" flow in the context of the Solana - chain. For {gregskrilEnsNameSpan} the resolved address is NOT the expected Solana - address ({gregskrilAddressSolanaSpan}). -

- Zerion fails to resolve the Solana address for gregskril.eth -
- ), - } as const satisfies AcceptanceTestBenchmark, - "correctly-handle-resolution-for-chains-with-invalid-address-formatting": { + notes: buildFailNoteForAT7({ + method, + proof: { + image: at7Proof, + alt: "Zerion fails to resolve the Solana address for gregskril.eth", + }, + }), + }, + "at08-handle-invalid-address-format": { result: BenchmarkResults.NotApplicable, contributions: [ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-19T15:20:00Z") }, ], - notes: ( -
-

- Based on the results of the{" "} - Acceptance Test 5, the app - doesn't appear to support ENS resolution on Base at all and therefore we classify this - acceptance test as{" "} - Not Applicable. -

-
- ), - } as const satisfies AcceptanceTestBenchmark, + notes: buildNotApplicableForFailedTest({ testNumber: 5, scope: "on Base" }), + }, } as const satisfies AcceptanceTestBenchmarks; export default depositAddresses; diff --git a/ensawards.org/data/ens-best-practices/resolution/deposit-addresses/images/correctly-resolve-direct-onchain-subname-address-example-fail.gif b/ensawards.org/data/ens-best-practices/resolution/deposit-addresses/images/at01-resolve-onchain-name-example-fail.gif similarity index 100% rename from ensawards.org/data/ens-best-practices/resolution/deposit-addresses/images/correctly-resolve-direct-onchain-subname-address-example-fail.gif rename to ensawards.org/data/ens-best-practices/resolution/deposit-addresses/images/at01-resolve-onchain-name-example-fail.gif diff --git a/ensawards.org/data/ens-best-practices/resolution/deposit-addresses/images/correctly-resolve-direct-onchain-subname-address-example-pass.gif b/ensawards.org/data/ens-best-practices/resolution/deposit-addresses/images/at01-resolve-onchain-name-example-pass.gif similarity index 100% rename from ensawards.org/data/ens-best-practices/resolution/deposit-addresses/images/correctly-resolve-direct-onchain-subname-address-example-pass.gif rename to ensawards.org/data/ens-best-practices/resolution/deposit-addresses/images/at01-resolve-onchain-name-example-pass.gif diff --git a/ensawards.org/data/ens-best-practices/resolution/deposit-addresses/images/correctly-implement-ccip-read-for-offchain-dns-names-example-fail.gif b/ensawards.org/data/ens-best-practices/resolution/deposit-addresses/images/at04-resolve-offchain-dns-name-example-fail.gif similarity index 100% rename from ensawards.org/data/ens-best-practices/resolution/deposit-addresses/images/correctly-implement-ccip-read-for-offchain-dns-names-example-fail.gif rename to ensawards.org/data/ens-best-practices/resolution/deposit-addresses/images/at04-resolve-offchain-dns-name-example-fail.gif diff --git a/ensawards.org/data/ens-best-practices/resolution/deposit-addresses/images/correctly-implement-ccip-read-for-offchain-dns-names-example-pass.gif b/ensawards.org/data/ens-best-practices/resolution/deposit-addresses/images/at04-resolve-offchain-dns-name-example-pass.gif similarity index 100% rename from ensawards.org/data/ens-best-practices/resolution/deposit-addresses/images/correctly-implement-ccip-read-for-offchain-dns-names-example-pass.gif rename to ensawards.org/data/ens-best-practices/resolution/deposit-addresses/images/at04-resolve-offchain-dns-name-example-pass.gif diff --git a/ensawards.org/data/ens-best-practices/resolution/deposit-addresses/notes.tsx b/ensawards.org/data/ens-best-practices/resolution/deposit-addresses/notes.tsx new file mode 100644 index 00000000..11c3ee56 --- /dev/null +++ b/ensawards.org/data/ens-best-practices/resolution/deposit-addresses/notes.tsx @@ -0,0 +1,408 @@ +// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md +// for additional advice on adding and modifying app benchmarks + +// Shared note builders for the `deposit-addresses` best practice. +// +// Each acceptance test always uses the same ENS name, expected address, and chain +// (defined once in `technicalDetails.tsx`). These helpers bake those constants in, +// so an app benchmark only needs to supply what actually varies per app: +// - how the test was run (`method`) +// - the proof screenshot(s) (`proof`) +// - the result kind (which builder you call) +// +// If a result is unusual and no builder fits, fall back to `buildBenchmarkNote` +// and write the prose yourself. + +import { + acceptanceTestDetailsContainerStyles, + bestPracticeTechnicalDetailsCodeStyles, +} from "data/ens-best-practices/styles"; +import type { JSX, ReactNode } from "react"; + +import { cn } from "@/utils/tailwindClassConcatenation"; + +import { + dperriComAddressSpan, + dperriComEnsNameSpan, + ethereumAddressSpan, + ethereumNormalizedEnsNameSpan, + ethereumUnnormalizedEnsNameSpan, + gregskrilAddressBitcoinSpan, + gregskrilAddressSolanaSpan, + gregskrilEnsNameSpan, + jesseBaseAddressSpan, + jesseBaseEnsNameSpan, + lightkeeperAddressSpan, + lightkeeperEnsNameSpan, + vitalikAddressSpan, + vitalikEnsNameSpan, + zissouEnsNameSpan, +} from "./technicalDetails"; + +/** A single piece of visual proof (an imported `.png` / `.gif`) for a benchmark note. */ +export interface BenchmarkProof { + /** The imported image asset. */ + image: { src: string }; + /** Accessible description of what the screenshot shows. */ + alt: string; +} + +type ProofInput = BenchmarkProof | BenchmarkProof[]; + +/** How the test was run, e.g. `'the "send" flow'` or + * `"the quick-search feature on eth.blockscout.com"`. Slotted into "Tested using {method}.". */ +type Method = ReactNode; + +function toProofs(proof?: ProofInput): BenchmarkProof[] { + if (!proof) return []; + return Array.isArray(proof) ? proof : [proof]; +} + +/** + * Low-level note shell: a single paragraph of prose followed by zero or more proof + * screenshots. Use the acceptance-test-specific builders below whenever possible; + * reach for this directly only for unusual results they don't cover. + */ +export function buildBenchmarkNote({ + children, + proof, +}: { + children: ReactNode; + proof?: ProofInput; +}): JSX.Element { + const proofs = toProofs(proof); + return ( +
+

{children}

+ {/* A single proof renders as a direct sibling of the prose (matching the + container's gap); multiple proofs get their own stacked wrapper. */} + {proofs.length === 1 && ( + {proofs[0].alt} + )} + {proofs.length > 1 && ( +
+ {proofs.map((proofItem, index) => ( + {proofItem.alt} + ))} +
+ )} +
+ ); +} + +/** The `Not Applicable` keyword, styled consistently. */ +const notApplicableSpan = ( + Not Applicable +); + +// --------------------------------------------------------------------------- +// Pass notes — one per acceptance test. +// --------------------------------------------------------------------------- + +/** AT1: direct onchain .eth subname resolves to its Ethereum Mainnet address. */ +export function buildPassNoteForAT1({ method, proof }: { method: Method; proof?: ProofInput }) { + return buildBenchmarkNote({ + proof, + children: ( + <> + Tested using {method}. The resolved Ethereum Mainnet address of {vitalikEnsNameSpan} is + correct ({vitalikAddressSpan}). + + ), + }); +} + +/** AT2: a name requiring normalization is normalized and resolved correctly. */ +export function buildPassNoteForAT2({ method, proof }: { method: Method; proof?: ProofInput }) { + return buildBenchmarkNote({ + proof, + children: ( + <> + Tested using {method}. The input {ethereumUnnormalizedEnsNameSpan} was correctly normalized + to {ethereumNormalizedEnsNameSpan} and resolved to the correct Ethereum Mainnet address ( + {ethereumAddressSpan}). + + ), + }); +} + +/** AT3: CCIP-Read for a .eth subname resolves to its Ethereum Mainnet address. */ +export function buildPassNoteForAT3({ method, proof }: { method: Method; proof?: ProofInput }) { + return buildBenchmarkNote({ + proof, + children: ( + <> + Tested using {method}. The CCIP-Read enabled .eth subname {jesseBaseEnsNameSpan} resolved to + the correct Ethereum Mainnet address ({jesseBaseAddressSpan}). + + ), + }); +} + +/** AT4: CCIP-Read for an offchain DNS name resolves to its Ethereum Mainnet address. */ +export function buildPassNoteForAT4({ method, proof }: { method: Method; proof?: ProofInput }) { + return buildBenchmarkNote({ + proof, + children: ( + <> + Tested using {method}. The offchain DNS name {dperriComEnsNameSpan} resolved to the correct + Ethereum Mainnet address via CCIP-Read ({dperriComAddressSpan}). + + ), + }); +} + +/** AT5: a name resolves to its address on a different EVM chain (Base). */ +export function buildPassNoteForAT5({ method, proof }: { method: Method; proof?: ProofInput }) { + return buildBenchmarkNote({ + proof, + children: ( + <> + Tested using {method}. The resolved Base chain address of {lightkeeperEnsNameSpan} is + correct ({lightkeeperAddressSpan}). + + ), + }); +} + +/** AT6: a name resolves to its Bitcoin address. */ +export function buildPassNoteForAT6({ method, proof }: { method: Method; proof?: ProofInput }) { + return buildBenchmarkNote({ + proof, + children: ( + <> + Tested using {method}. The resolved Bitcoin address of {gregskrilEnsNameSpan} is correct ( + {gregskrilAddressBitcoinSpan}). + + ), + }); +} + +/** AT7: a name resolves to its Solana address. */ +export function buildPassNoteForAT7({ method, proof }: { method: Method; proof?: ProofInput }) { + return buildBenchmarkNote({ + proof, + children: ( + <> + Tested using {method}. The resolved Solana address of {gregskrilEnsNameSpan} is correct ( + {gregskrilAddressSolanaSpan}). + + ), + }); +} + +/** AT8: the app gracefully handles a name whose address is not a valid EVM address. */ +export function buildPassNoteForAT8({ method, proof }: { method: Method; proof?: ProofInput }) { + return buildBenchmarkNote({ + proof, + children: ( + <> + Tested using {method}. The app gracefully handled the resolved address of{" "} + {zissouEnsNameSpan} being an invalid EVM address without breaking the user experience. + + ), + }); +} + +// --------------------------------------------------------------------------- +// Fail notes — one per acceptance test. +// `extra` is appended as a follow-up sentence for app-specific detail +// (e.g. "The app showed an "invalid domain format" error instead."). +// --------------------------------------------------------------------------- + +type FailArgs = { method: Method; proof?: ProofInput; extra?: ReactNode }; + +function withExtra(extra?: ReactNode): ReactNode { + return extra ? <> {extra} : null; +} + +/** AT1 failed: a direct onchain .eth subname did not resolve to its correct address. */ +export function buildFailNoteForAT1({ method, proof, extra }: FailArgs) { + return buildBenchmarkNote({ + proof, + children: ( + <> + Tested using {method}. The resolved Ethereum Mainnet address of {vitalikEnsNameSpan} is{" "} + NOT correct (expected {vitalikAddressSpan}).{withExtra(extra)} + + ), + }); +} + +/** AT2 failed: a name requiring normalization did not resolve to its correct address. */ +export function buildFailNoteForAT2({ method, proof, extra }: FailArgs) { + return buildBenchmarkNote({ + proof, + children: ( + <> + Tested using {method}. The input {ethereumUnnormalizedEnsNameSpan} (normalized to{" "} + {ethereumNormalizedEnsNameSpan}) was NOT resolved to its expected Ethereum Mainnet + address ({ethereumAddressSpan}).{withExtra(extra)} + + ), + }); +} + +/** AT3 failed: CCIP-Read for a .eth subname did not resolve to its correct address. */ +export function buildFailNoteForAT3({ method, proof, extra }: FailArgs) { + return buildBenchmarkNote({ + proof, + children: ( + <> + Tested using {method}. The CCIP-Read enabled .eth subname {jesseBaseEnsNameSpan} was{" "} + NOT resolved to its expected Ethereum Mainnet address ({jesseBaseAddressSpan}). + {withExtra(extra)} + + ), + }); +} + +/** AT4 failed: CCIP-Read for an offchain DNS name did not resolve to its correct address. */ +export function buildFailNoteForAT4({ method, proof, extra }: FailArgs) { + return buildBenchmarkNote({ + proof, + children: ( + <> + Tested using {method}. The offchain DNS name {dperriComEnsNameSpan} was NOT resolved + to its expected Ethereum Mainnet address ({dperriComAddressSpan}).{withExtra(extra)} + + ), + }); +} + +/** AT5 failed: a name did not resolve to its address on a different EVM chain (Base). */ +export function buildFailNoteForAT5({ method, proof, extra }: FailArgs) { + return buildBenchmarkNote({ + proof, + children: ( + <> + Tested using {method}. For {lightkeeperEnsNameSpan} the resolved address is NOT the + expected Base chain address ({lightkeeperAddressSpan}).{withExtra(extra)} + + ), + }); +} + +/** AT6 failed: a name did not resolve to its Bitcoin address. */ +export function buildFailNoteForAT6({ method, proof, extra }: FailArgs) { + return buildBenchmarkNote({ + proof, + children: ( + <> + Tested using {method}. For {gregskrilEnsNameSpan} the resolved address is NOT the + expected Bitcoin address ({gregskrilAddressBitcoinSpan}).{withExtra(extra)} + + ), + }); +} + +/** AT7 failed: a name did not resolve to its Solana address. */ +export function buildFailNoteForAT7({ method, proof, extra }: FailArgs) { + return buildBenchmarkNote({ + proof, + children: ( + <> + Tested using {method}. For {gregskrilEnsNameSpan} the resolved address is NOT the + expected Solana address ({gregskrilAddressSolanaSpan}).{withExtra(extra)} + + ), + }); +} + +/** AT8 failed: the app did not gracefully handle a name with an invalid EVM address. */ +export function buildFailNoteForAT8({ method, proof, extra }: FailArgs) { + return buildBenchmarkNote({ + proof, + children: ( + <> + Tested using {method}. The app did NOT gracefully handle the resolved address of{" "} + {zissouEnsNameSpan} being an invalid EVM address, breaking the user experience. + {withExtra(extra)} + + ), + }); +} + +// --------------------------------------------------------------------------- +// Special-case fail note: the app doesn't accept ENS names at all (common for +// wallets). Used for AT1; the remaining tests then become Not Applicable via +// `buildNotApplicableForFailedTest({ testNumber: 1 })`. +// --------------------------------------------------------------------------- + +export function buildEnsNotSupportedNote({ + method, + proof, +}: { + method: Method; + proof?: ProofInput; +}) { + return buildBenchmarkNote({ + proof, + children: ( + <> + Tested using {method}. The app doesn't support the use of ENS names at all as the recipient + identifier, so it never resolves the expected Ethereum Mainnet address of{" "} + {vitalikEnsNameSpan} ({vitalikAddressSpan}), which we classify as a failure. + + ), + }); +} + +// --------------------------------------------------------------------------- +// Not Applicable notes. +// --------------------------------------------------------------------------- + +/** The app has no concept of the given non-EVM chain (Bitcoin / Solana). */ +export function buildNotApplicableForNonEvmChain({ + chain, + proof, +}: { + chain: "Bitcoin" | "Solana"; + proof?: ProofInput; +}) { + return buildBenchmarkNote({ + proof, + children: ( + <> + The app doesn't have context of the non-EVM chain {chain} and therefore we classify this + acceptance test as {notApplicableSpan}. + + ), + }); +} + +/** + * This test can't be evaluated because a prerequisite acceptance test failed. + * `scope` describes what the app doesn't support, e.g. `"at all"` (when Acceptance + * Test 1 fails) or `"on Base"` (when Acceptance Test 5 fails). + */ +export function buildNotApplicableForFailedTest({ + testNumber, + scope = "at all", + proof, +}: { + testNumber: number; + scope?: ReactNode; + proof?: ProofInput; +}) { + return buildBenchmarkNote({ + proof, + children: ( + <> + Based on the results of the{" "} + Acceptance Test {testNumber} + , the app doesn't appear to support ENS resolution {scope} and therefore we classify this + acceptance test as {notApplicableSpan}. + + ), + }); +} diff --git a/ensawards.org/data/ens-best-practices/resolution/deposit-addresses/technicalDetails.tsx b/ensawards.org/data/ens-best-practices/resolution/deposit-addresses/technicalDetails.tsx index eaa4cb1d..531a2f2e 100644 --- a/ensawards.org/data/ens-best-practices/resolution/deposit-addresses/technicalDetails.tsx +++ b/ensawards.org/data/ens-best-practices/resolution/deposit-addresses/technicalDetails.tsx @@ -17,10 +17,10 @@ import { parseTimestamp } from "@ensnode/ensnode-sdk"; import { cn } from "@/utils/tailwindClassConcatenation"; import acceptanceTestExampleImagePlaceholder from "./images/acceptance-test-example-placeholder.png"; -import correctlyImplementCcipReadForOffchainDnsNamesExampleFailImage from "./images/correctly-implement-ccip-read-for-offchain-dns-names-example-fail.gif"; -import correctlyImplementCcipReadForOffchainDnsNamesExamplePassImage from "./images/correctly-implement-ccip-read-for-offchain-dns-names-example-pass.gif"; -import correctlyResolveDirectOnchainSubnameAddressExampleFailImage from "./images/correctly-resolve-direct-onchain-subname-address-example-fail.gif"; -import correctlyResolveDirectOnchainSubnameAddressExamplePassImage from "./images/correctly-resolve-direct-onchain-subname-address-example-pass.gif"; +import correctlyResolveDirectOnchainSubnameAddressExampleFailImage from "./images/at01-resolve-onchain-name-example-fail.gif"; +import correctlyResolveDirectOnchainSubnameAddressExamplePassImage from "./images/at01-resolve-onchain-name-example-pass.gif"; +import correctlyImplementCcipReadForOffchainDnsNamesExampleFailImage from "./images/at04-resolve-offchain-dns-name-example-fail.gif"; +import correctlyImplementCcipReadForOffchainDnsNamesExamplePassImage from "./images/at04-resolve-offchain-dns-name-example-pass.gif"; const ensBestPracticeOverview = (
@@ -176,7 +176,7 @@ export const vitalikAddressSpan = ( const acceptanceTest1 = { order: 0, - acceptanceTestSlug: "correctly-resolve-direct-onchain-subname-address", + acceptanceTestSlug: "at01-resolve-onchain-name", description: (

@@ -245,7 +245,7 @@ export const ethereumAddressSpan = ( const acceptanceTest2 = { order: 1, - acceptanceTestSlug: "correctly-resolve-names-requiring-normalization", + acceptanceTestSlug: "at02-resolve-name-needing-normalization", description: (

@@ -316,7 +316,7 @@ export const jesseBaseAddressSpan = ( const acceptanceTest3 = { order: 2, - acceptanceTestSlug: "correctly-implement-ccip-read-for-eth-subnames", + acceptanceTestSlug: "at03-resolve-offchain-eth-subname", description: (

@@ -383,7 +383,7 @@ export const dperriComAddressSpan = ( const acceptanceTest4 = { order: 3, - acceptanceTestSlug: "correctly-implement-ccip-read-for-offchain-dns-names", + acceptanceTestSlug: "at04-resolve-offchain-dns-name", description: (

@@ -448,7 +448,7 @@ export const lightkeeperAddressSpan = ( const acceptanceTest5 = { order: 4, - acceptanceTestSlug: "correctly-resolve-names-for-different-evm-chains", + acceptanceTestSlug: "at05-resolve-name-on-other-evm-chain", description: (

@@ -514,7 +514,7 @@ export const gregskrilAddressBitcoinSpan = ( const acceptanceTest6 = { order: 5, - acceptanceTestSlug: "correctly-resolve-names-for-bitcoin", + acceptanceTestSlug: "at06-resolve-bitcoin-address", description: (

@@ -579,7 +579,7 @@ export const gregskrilAddressSolanaSpan = ( const acceptanceTest7 = { order: 6, - acceptanceTestSlug: "correctly-resolve-names-for-solana", + acceptanceTestSlug: "at07-resolve-solana-address", description: (

@@ -648,7 +648,7 @@ export const zissouAddressSpan = ( const acceptanceTest8 = { order: 7, - acceptanceTestSlug: "correctly-handle-resolution-for-chains-with-invalid-address-formatting", + acceptanceTestSlug: "at08-handle-invalid-address-format", description: (