Skip to content
Draft
Show file tree
Hide file tree
Changes from 5 commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
b514519
Add 1st draft of the new types
Y3drk Apr 29, 2026
d7278fd
Refactor data to match the drafted data model + add mock images and a…
Y3drk Apr 29, 2026
8e692b6
Basic UI adaptation to the new data model, pt. 1
Y3drk Apr 29, 2026
f35b9b5
Basic UI adaptation to the new data model, pt.2
Y3drk May 5, 2026
2fce38b
Apply ai assistant's suggestions, pt.1
Y3drk May 6, 2026
d7e3f4c
Refine apps' benchmarks data organization
Y3drk May 7, 2026
5ef4e6f
JSDocs improvements, pt.1
Y3drk May 7, 2026
cb4969c
Refine best practices data organization
Y3drk May 7, 2026
9ae8c2d
Adjust UI according to established goals
Y3drk May 7, 2026
eaec4c3
Update CONTRIBUTING.md and polish some JSDocs
Y3drk May 7, 2026
1b96f1a
Apply ai assistant's suggestions, pt.2
Y3drk May 7, 2026
9e9aa00
Apply 05/08/26 review feedback (GitHub + Google Doc), pt.1 - majority…
Y3drk May 11, 2026
bb1b2c6
Remove all placeholder content and align acceptance test benchmark re…
Y3drk May 11, 2026
0c060b6
Apply 05/11/26 Slack feedback
Y3drk May 11, 2026
8dd6549
Apply ai assistant's suggestions, pt.3
Y3drk May 11, 2026
5542d92
Resolve conflicts with main
Y3drk May 11, 2026
e6773bf
UI double-check + initial work on technical details content refinement
Y3drk May 11, 2026
e79ae89
Apply ai assistant's suggestions, pt.4
Y3drk May 12, 2026
7efbbef
Fix audited dependency vulnerabilities
Y3drk May 12, 2026
2d93d38
Apply 05/11/26 Google doc feedback
Y3drk May 12, 2026
161dd35
Apply 05/12/26 GitHub review feedback
Y3drk May 12, 2026
9faf4b4
Apply ai assistant's suggestions, pt.5
Y3drk May 12, 2026
8d3a637
Apply 05/12/26 Google Doc UI feedback
Y3drk May 12, 2026
afd0fbd
Apply ai assistant's suggestions, pt.6
Y3drk May 12, 2026
d4a4482
Apply ai assistant's suggestions, pt.7 + minor fixes after self-review
Y3drk May 12, 2026
25d43d7
Apply 05/13/26 GitHub review feedback
Y3drk May 13, 2026
35c7e4a
Apply ai assistant's suggestions, pt.8
Y3drk May 13, 2026
c935f7f
Upload final versions of adjusted contract naming season OG images
Y3drk May 13, 2026
1870bc0
Apply ai assistant's suggestions, pt.9
Y3drk May 13, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions ensawards.org/data/acceptance-tests/index.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import { ACCEPTANCE_TESTS } from "data/acceptance-tests";
import { isValidSlug } from "data/shared/slugs";
import { describe, expect, it } from "vitest";

import { areStringsUnique } from "@/utils";

describe("Acceptance test data", () => {
it("Should have valid and unique slugs", () => {
const slugArray: string[] = [];

ACCEPTANCE_TESTS.forEach((acceptanceTest) => {
expect(
isValidSlug(acceptanceTest.acceptanceTestSlug),
`Slug={${acceptanceTest.acceptanceTestSlug}} is not valid`,
).toEqual(true);

slugArray.push(acceptanceTest.acceptanceTestSlug);
});

expect(areStringsUnique(slugArray), `Slugs for Acceptance Tests are not unique`).toEqual(true);
});

// TODO: Any more immediate tests we should add here?
Comment thread
Y3drk marked this conversation as resolved.
Outdated
});
5 changes: 5 additions & 0 deletions ensawards.org/data/acceptance-tests/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import { ENS_BEST_PRACTICES } from "data/ens-best-practices";

export const ACCEPTANCE_TESTS = [
...ENS_BEST_PRACTICES.flatMap((bestPractice) => bestPractice.technicalDetails.acceptanceTests),
];
44 changes: 44 additions & 0 deletions ensawards.org/data/acceptance-tests/types.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import type { BenchmarkResult } from "data/benchmarks/types";
import type { Contribution } from "data/contributors/types";
import type { JSX } from "react";

/** A unique identifier for an acceptance test.
*
* @invariant Must be unique across all acceptance tests.
* @invariant Must match {@link ENSAWARDS_SLUG_PATTERN}.
*/
export type AcceptanceTestSlug = string;

/**
* Represents an acceptance test that an app can be evaluated against.
*/
export interface AcceptanceTest {
Comment thread
lightwalker-eth marked this conversation as resolved.
acceptanceTestSlug: AcceptanceTestSlug;
name: string;
description: JSX.Element;
}

/**
* Represents the benchmark of an {@link AcceptanceTest} on an {@link App} against a {@link BestPractice}.
*/
export interface AcceptanceTestBenchmark {
Comment thread
Y3drk marked this conversation as resolved.
Outdated
/** The result of the benchmark */
result: BenchmarkResult;

/** A record of all contributors involved in the addition or maintenance of the benchmark's data.
*
* @invariant Multiple {@link Contribution} from the same contributor on the same app benchmark are not allowed.
* When a contributor makes updates to their existing contribution,
* they should update the `lastUpdated` timestamp of their existing `Contribution`.
*/
contributions: [Contribution, ...Contribution[]];

/**
* Notes about how the benchmark result was determined,
* which may include details about the testing process,
* any challenges encountered, and explanations, as well as proof, for the final result.
*/
// TODO: Maybe this element should be made stricter with a dedicated template.
// See here for more details: https://namehash.slack.com/archives/C086Z6FNBHN/p1777477037902549?thread_ts=1776097255.913659&cid=C086Z6FNBHN
notes: JSX.Element;
}
22 changes: 22 additions & 0 deletions ensawards.org/data/acceptance-tests/utils.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import { ACCEPTANCE_TESTS } from "data/acceptance-tests";
import type {
AcceptanceTest,
AcceptanceTestBenchmark,
AcceptanceTestSlug,
} from "data/acceptance-tests/types";
import type { AppSlug } from "data/apps/types";
import { getAppBenchmarks } from "data/benchmarks/utils.ts";

export const getAcceptanceTestBySlug = (slug: AcceptanceTestSlug): AcceptanceTest | undefined => {
return ACCEPTANCE_TESTS.find((acceptanceTest) => acceptanceTest.acceptanceTestSlug === slug);
};

export const getAcceptanceTestBenchmarksByApp = (
appSlug: AppSlug,
): (AcceptanceTestBenchmark | undefined)[] => {
const appBenchmarks = getAppBenchmarks(appSlug);

return Object.values(appBenchmarks).flatMap((acceptanceTestBenchmarks) =>
Object.values(acceptanceTestBenchmarks),
);
};
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
36 changes: 0 additions & 36 deletions ensawards.org/data/apps/blockscout-explorer/benchmarks.ts

This file was deleted.

70 changes: 70 additions & 0 deletions ensawards.org/data/apps/blockscout-explorer/benchmarks.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
// 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 BlockscoutExplorer from "data/apps/blockscout-explorer";
import { defineAppBenchmarks } from "data/benchmarks/registry";
import { BenchmarkResults } from "data/benchmarks/types";
import type { BestPracticeBenchmarks } from "data/ens-best-practices/types.ts";

import { parseTimestamp } from "@ensnode/ensnode-sdk";

import contributors from "../../contributors";
import exampleProofImage from "./acceptance-test-benchmark-proof-example.png";

// TODO: Some of these are placeholder benchmarks just to show how the new benchmarking system works,
const benchmarks = {
// "recognize-all-ens-names": {
// result: BenchmarkResults.Pass,
// contributions: [
// { from: contributors.stevedylan, lastUpdated: parseTimestamp("2025-12-03T14:00:00Z") },
// ],
// },
"display-named-smart-contracts-mainnet": {
"mainnet-interactions-display-named-smart-contracts": {
result: BenchmarkResults.Pass,
contributions: [
{ from: contributors.stevedylan, lastUpdated: parseTimestamp("2025-12-08T18:28:32.410Z") },
],
notes: (
<div>
<p>Benchmark placeholder notes</p>
<img alt="example proof" src={exampleProofImage.src} />
</div>
),
} as const satisfies AcceptanceTestBenchmark,
"mainnet-interactions-display-named-smart-contracts-at2": {
result: BenchmarkResults.Pass,
contributions: [
{ from: contributors.stevedylan, lastUpdated: parseTimestamp("2025-12-08T18:28:32.410Z") },
],
notes: (
<div>
<p>Benchmark placeholder notes</p>
<img alt="example proof" src={exampleProofImage.src} />
</div>
),
} as const satisfies AcceptanceTestBenchmark,
},
"display-named-smart-contracts-l2-chains": {
"l2-chain-interactions-display-named-smart-contracts": {
result: BenchmarkResults.Fail,
contributions: [
{ from: contributors.stevedylan, lastUpdated: parseTimestamp("2025-12-08T18:28:32.410Z") },
],
notes: (
<div>
<p>Benchmark placeholder notes</p>
<img alt="example proof" src={exampleProofImage.src} />
</div>
),
} as const satisfies AcceptanceTestBenchmark,
},
"mock-bp-all-pending-2": {
"mock-acceptance-test-3": undefined,
},
} as const satisfies BestPracticeBenchmarks;

defineAppBenchmarks(BlockscoutExplorer, benchmarks);

export default benchmarks;
36 changes: 0 additions & 36 deletions ensawards.org/data/apps/coinbase-wallet/benchmarks.ts

This file was deleted.

48 changes: 48 additions & 0 deletions ensawards.org/data/apps/coinbase-wallet/benchmarks.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
// 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 exampleProofImage from "data/apps/blockscout-explorer/acceptance-test-benchmark-proof-example.png";
import CoinbaseWallet from "data/apps/coinbase-wallet";
import { defineAppBenchmarks } from "data/benchmarks/registry";
import { BenchmarkResults } from "data/benchmarks/types";
import type { BestPracticeBenchmarks } from "data/ens-best-practices/types.ts";

import { parseTimestamp } from "@ensnode/ensnode-sdk";

import contributors from "../../contributors";

const benchmarks = {
// "recognize-all-ens-names": {
// result: BenchmarkResults.Pass,
// contributions: [
// { from: contributors.stevedylan, lastUpdated: parseTimestamp("2025-12-03T14:00:00Z") },
// ],
// },
// TODO: remember to rollback to benchmarks actuall results (base it on the current prod if needed)
"display-named-smart-contracts-mainnet": {
"mainnet-interactions-display-named-smart-contracts": undefined, // simulate pending benchmark
"mainnet-interactions-display-named-smart-contracts-at2": undefined, // simulate both benchmarks pending
},
"display-named-smart-contracts-l2-chains": {
"l2-chain-interactions-display-named-smart-contracts": {
result: BenchmarkResults.Fail,
contributions: [
{ from: contributors.stevedylan, lastUpdated: parseTimestamp("2025-12-08T18:26:20.566Z") },
],
notes: (
<div>
<p>Benchmark placeholder notes</p>
<img alt="example proof" src={exampleProofImage.src} />
</div>
),
} as const satisfies AcceptanceTestBenchmark,
},
"mock-bp-all-pending": {
"mock-acceptance-test-1": undefined, // simulate pending benchmark
},
} as const satisfies BestPracticeBenchmarks;

defineAppBenchmarks(CoinbaseWallet, benchmarks);

export default benchmarks;
36 changes: 0 additions & 36 deletions ensawards.org/data/apps/etherscan-explorer/benchmarks.ts

This file was deleted.

48 changes: 48 additions & 0 deletions ensawards.org/data/apps/etherscan-explorer/benchmarks.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
// 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 exampleProofImage from "data/apps/blockscout-explorer/acceptance-test-benchmark-proof-example.png";
import EtherscanExplorer from "data/apps/etherscan-explorer";
import { defineAppBenchmarks } from "data/benchmarks/registry";
import { BenchmarkResults } from "data/benchmarks/types";
import type { BestPracticeBenchmarks } from "data/ens-best-practices/types.ts";

import { parseTimestamp } from "@ensnode/ensnode-sdk";

import contributors from "../../contributors";

const benchmarks = {
// "recognize-all-ens-names": {
// result: BenchmarkResults.Pass,
// contributions: [
// { from: contributors.stevedylan, lastUpdated: parseTimestamp("2025-12-03T14:00:00Z") },
// ],
// },
// TODO: remember to rollback to benchmarks actuall results (base it on the current prod if needed)
"display-named-smart-contracts-mainnet": {
"mainnet-interactions-display-named-smart-contracts": undefined, // simulate pending benchmark
"mainnet-interactions-display-named-smart-contracts-at2": undefined, // simulate both benchmarks pending
},
"display-named-smart-contracts-l2-chains": {
"l2-chain-interactions-display-named-smart-contracts": {
result: BenchmarkResults.Fail,
contributions: [
{ from: contributors.stevedylan, lastUpdated: parseTimestamp("2025-12-08T18:26:20.566Z") },
],
notes: (
<div>
<p>Benchmark placeholder notes</p>
<img alt="example proof" src={exampleProofImage.src} />
</div>
),
} as const satisfies AcceptanceTestBenchmark,
},
"mock-bp-all-pending-2": {
"mock-acceptance-test-3": undefined,
},
} as const satisfies BestPracticeBenchmarks;

defineAppBenchmarks(EtherscanExplorer, benchmarks);

export default benchmarks;
Loading
Loading