Skip to content
Merged
Show file tree
Hide file tree
Changes from 8 commits
Commits
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
2 changes: 2 additions & 0 deletions ensawards.org/astro.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@ export default defineConfig({
"/leaderboards/referrer": "/ens-referral-program/editions/2025-12/leaderboard",

"/ens-best-practices/contract-naming": "/ens-best-practices",

"/leaderboards/defi": "/leaderboards/defi-protocol",
},

adapter: vercel(),
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
62 changes: 62 additions & 0 deletions ensawards.org/data/apps/1inch-defi/benchmarks/index.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
// 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 OneInchDeFi from "data/apps/1inch-defi";
import { defineAppBenchmarks } from "data/benchmarks/registry";
import { BenchmarkResults } from "data/benchmarks/types";
import contributors from "data/contributors";
import { acceptanceTestDetailsContainerStyles } from "data/ens-best-practices/styles";
import type { BestPracticeBenchmarks } from "data/ens-best-practices/types";

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

import { cn } from "@/utils/tailwindClassConcatenation";

import correctlyResolveEnsv2TestNameAddressProofImagePortfolio from "./correctly-resolve-ensv2-test-name-address-proof-portfolio.gif";
import correctlyResolveEnsv2TestNameAddressProofImageSend from "./correctly-resolve-ensv2-test-name-address-proof-send.png";

const benchmarks: BestPracticeBenchmarks = {
// TODO: `Contract Naming` category is temporarily hidden due to unfit content,
// and so are all benchmarks belonging to it.
// We aim to fix it as soon as we have the capacity.
// See: https://github.com/namehash/ensawards/issues/222
"display-named-smart-contracts-mainnet": {
"mainnet-interactions-display-named-smart-contracts": undefined,
},
"display-named-smart-contracts-l2-chains": {
"l2-chain-interactions-display-named-smart-contracts": undefined,
},
"ensv2-ready-resolution": {
"correctly-resolve-ensv2-test-name-address": {
result: BenchmarkResults.Fail,
contributions: [
{ from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-09T12:41:00Z") },
],
notes: (
<div className={cn(acceptanceTestDetailsContainerStyles, "w-full")}>
<p className="w-full">
ENSv2 ready resolution was tested for two different flows of the app: &quot;send&quot;
and &quot;portfolio&quot;. In both cases the resolved address is <i>NOT</i> correct.
</p>
<div className="flex flex-col justify-start items-center gap-5">
<img
alt="1inch defi app fails to resolve the name for ENSv2"
src={correctlyResolveEnsv2TestNameAddressProofImagePortfolio.src}
className="w-auto h-full max-h-[325px] rounded-xl"
/>
<img
alt="1inch defi app fails to resolve the name for ENSv2"
src={correctlyResolveEnsv2TestNameAddressProofImageSend.src}
className="w-auto h-full max-h-[325px] rounded-xl"
/>
</div>
</div>
),
} as const satisfies AcceptanceTestBenchmark,
},
} as const satisfies BestPracticeBenchmarks;

defineAppBenchmarks(OneInchDeFi, benchmarks);

export default benchmarks;
23 changes: 23 additions & 0 deletions ensawards.org/data/apps/1inch-defi/icon.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import React from "react";

const Icon = ({ className, ...props }: React.SVGProps<SVGSVGElement>) => (
<svg
id="1"
data-name="1"
xmlns="http://www.w3.org/2000/svg"
Comment thread
Y3drk marked this conversation as resolved.
width="181mm"
height="181mm"
version="1.1"
viewBox="0 0 513 513"
className={className}
{...props}
>
<path d="M512.8,0H0v512.8h512.8V0Z" />
<path
d="M169.7,383.7h172.9v-36.7h-63.8s0-218.7,0-218.7h-37.8c-1.5,30.6-10.3,38.3-52.1,38.3h-19.2v34.6h63.8v145.8h-63.8v36.7ZM360.7,201.2v-72.9h-36.7v72.9h36.7ZM425.1,201.2v-72.9h-36.7v72.9h36.7Z"
fill="#fff"
/>
</svg>
);

export default Icon;
30 changes: 30 additions & 0 deletions ensawards.org/data/apps/1inch-defi/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
// for additional advice on adding and modifying apps

import OneInchProject from "data/projects/1inch/index.ts";
import { asInterpretedName } from "enssdk";

import { defineApp } from "../registry.ts";
import { type App, AppTypes } from "../types.ts";
import OneInchIcon from "./icon.tsx";

const OneInchDeFi: App = {
id: "1inch-defi",
appSlug: "1inch-defi",
type: AppTypes.DeFi,
project: OneInchProject,
name: '1inch"',
Comment thread
vercel[bot] marked this conversation as resolved.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 The app name has a trailing double-quote character inside a single-quoted string, so it renders as 1inch" instead of 1inch.

Suggested change
name: '1inch"',
name: "1inch",

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The quote character is a part of the app's name. The current version is correct

Comment thread
Y3drk marked this conversation as resolved.
Comment thread
Y3drk marked this conversation as resolved.
description:
Comment thread
Y3drk marked this conversation as resolved.
"A DeFi aggregator app for swapping tokens across 13+ chains with the only native connection between Solana and EVM networks, with true self-custody and built-in security.",
socials: {
website: new URL("https://1inch.com/swap"),
twitter: new URL("https://x.com/1inch"),
ens: asInterpretedName("1inch.eth"),
},
icon: OneInchIcon,
// TODO: Add OG images
};

defineApp(OneInchDeFi);

export default OneInchDeFi;
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
83 changes: 83 additions & 0 deletions ensawards.org/data/apps/aave-defi/benchmarks/index.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
// 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 AaveDeFi from "data/apps/aave-defi";
import { defineAppBenchmarks } from "data/benchmarks/registry";
import { BenchmarkResults } from "data/benchmarks/types";
import contributors from "data/contributors";
import {
acceptanceTestDetailsContainerStyles,
bestPracticeTechnicalDetailsLinkStyles,
} from "data/ens-best-practices/styles";
import type { BestPracticeBenchmarks } from "data/ens-best-practices/types";

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

import { cn } from "@/utils/tailwindClassConcatenation";

import correctlyResolveEnsv2TestNameAddressProofImageV3 from "./correctly-resolve-ensv2-test-name-address-proof-v3.gif";
import correctlyResolveEnsv2TestNameAddressProofImageV4 from "./correctly-resolve-ensv2-test-name-address-proof-v4.png";

const benchmarks: BestPracticeBenchmarks = {
// TODO: `Contract Naming` category is temporarily hidden due to unfit content,
// and so are all benchmarks belonging to it.
// We aim to fix it as soon as we have the capacity.
// See: https://github.com/namehash/ensawards/issues/222
"display-named-smart-contracts-mainnet": {
"mainnet-interactions-display-named-smart-contracts": undefined,
},
"display-named-smart-contracts-l2-chains": {
"l2-chain-interactions-display-named-smart-contracts": undefined,
},
"ensv2-ready-resolution": {
"correctly-resolve-ensv2-test-name-address": {
result: BenchmarkResults.PartialPass,
contributions: [
{ from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-09T11:56:00Z") },
],
notes: (
<div className={cn(acceptanceTestDetailsContainerStyles, "w-full")}>
<p className="w-full">
ENSv2 ready resolution was tested for two versions of the app:{" "}
<a
className={bestPracticeTechnicalDetailsLinkStyles}
href="https://app.aave.com/"
target="_blank"
rel="noopener noreferrer"
>
Aave&nbsp;(v3)
</a>{" "}
and{" "}
<a
className={bestPracticeTechnicalDetailsLinkStyles}
href="https://pro.aave.com/"
target="_blank"
rel="noopener noreferrer"
>
Aave&nbsp;Pro&nbsp;(v4)
</a>{" "}
using the &quot;watch&quot; tool for both of them. The resolved address is correct for
the v4 version, but <i>INCORRECT</i> for the v3 variant.
</p>
<div className="flex flex-col justify-start items-center gap-5">
<img
alt="Aave defi app fails to resolve the name for ENSv2"
src={correctlyResolveEnsv2TestNameAddressProofImageV3.src}
className="w-auto h-full max-h-[325px] rounded-xl"
/>
<img
alt="Aave Pro defi app correctly resolves the name for ENSv2"
src={correctlyResolveEnsv2TestNameAddressProofImageV4.src}
className="w-auto h-full max-h-[325px] rounded-xl"
/>
</div>
</div>
),
} as const satisfies AcceptanceTestBenchmark,
},
} as const satisfies BestPracticeBenchmarks;

defineAppBenchmarks(AaveDeFi, benchmarks);

export default benchmarks;
33 changes: 33 additions & 0 deletions ensawards.org/data/apps/aave-defi/icon.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import React from "react";

import { cn } from "@/utils/tailwindClassConcatenation";

const Icon = ({ className, ...props }: React.SVGProps<SVGSVGElement>) => (
<svg
width="266"
height="139"
viewBox="0 0 266 139"
fill="none"
xmlns="http://www.w3.org/2000/svg"
className={cn("p-1", className)}
{...props}
>
<path
d="M97.5418 138.533C112.461 138.533 124.556 126.438 124.556 111.518C124.556 96.5987 112.461 84.5039 97.5418 84.5039C82.6221 84.5039 70.5273 96.5987 70.5273 111.518C70.5273 126.438 82.6221 138.533 97.5418 138.533Z"
fill="#9896FF"
style={{ fill: "#9896FF", fillOpacity: "1" }}
/>
<path
d="M168.149 138.533C183.069 138.533 195.164 126.438 195.164 111.518C195.164 96.5987 183.069 84.5039 168.149 84.5039C153.23 84.5039 141.135 96.5987 141.135 111.518C141.135 126.438 153.23 138.533 168.149 138.533Z"
fill="#9896FF"
style={{ fill: "#9896FF", fillOpacity: "1" }}
/>
<path
d="M132.8 0C59.4497 0 -0.0191954 60.6017 4.64786e-06 135.335H33.9264C33.9264 79.3281 77.8433 33.92 132.8 33.92C187.757 33.92 231.674 79.3281 231.674 135.335H265.6C265.613 60.6017 206.144 0 132.8 0Z"
fill="#9896FF"
style={{ fill: "#9896FF", fillOpacity: "1" }}
/>
</svg>
);

export default Icon;
30 changes: 30 additions & 0 deletions ensawards.org/data/apps/aave-defi/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
// for additional advice on adding and modifying apps

import AaveProject from "data/projects/aave/index.ts";
import { asInterpretedName } from "enssdk";

import { defineApp } from "../registry.ts";
import { type App, AppTypes } from "../types.ts";
import AaveIcon from "./icon.tsx";

const AaveDeFi: App = {
id: "aave-defi",
appSlug: "aave-defi",
type: AppTypes.DeFi,
project: AaveProject,
name: "Aave",
description:
"A decentralized lending app where users can supply assets to earn yield and borrow against their collateral across Ethereum and multiple L2 networks.",
socials: {
website: new URL("https://aave.com/app"),
twitter: new URL("https://x.com/aave"),
ens: asInterpretedName("aave.eth"),
},
icon: AaveIcon,
// TODO: Add OG images
};

defineApp(AaveDeFi);

export default AaveDeFi;
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
63 changes: 63 additions & 0 deletions ensawards.org/data/apps/lido-defi/benchmarks/index.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
// 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 LidoDeFi from "data/apps/lido-defi";
import { defineAppBenchmarks } from "data/benchmarks/registry";
import { BenchmarkResults } from "data/benchmarks/types";
import contributors from "data/contributors";
import { acceptanceTestDetailsContainerStyles } from "data/ens-best-practices/styles";
import type { BestPracticeBenchmarks } from "data/ens-best-practices/types.ts";

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

import { cn } from "@/utils/tailwindClassConcatenation";

import correctlyResolveEnsv2TestNameAddressProofImageName from "./correctly-resolve-ensv2-test-name-address-proof.png";
import correctlyResolveEnsv2TestNameAddressProofImageAddress from "./correctly-resolve-ensv2-test-name-address-proof-address.png";

const benchmarks: BestPracticeBenchmarks = {
// TODO: `Contract Naming` category is temporarily hidden due to unfit content,
// and so are all benchmarks belonging to it.
// We aim to fix it as soon as we have the capacity.
// See: https://github.com/namehash/ensawards/issues/222
"display-named-smart-contracts-mainnet": {
"mainnet-interactions-display-named-smart-contracts": undefined,
},
"display-named-smart-contracts-l2-chains": {
"l2-chain-interactions-display-named-smart-contracts": undefined,
},
"ensv2-ready-resolution": {
"correctly-resolve-ensv2-test-name-address": {
result: BenchmarkResults.PartialPass,
contributions: [
{ from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-09T13:49:30Z") },
],
notes: (
<div className={cn(acceptanceTestDetailsContainerStyles, "w-full")}>
<p className="w-full">
ENSv2 ready resolution was tested using the &quot;rewards&quot; explorer. The app
doesn't explicitly prompt the user to pass an ENS name as identifier, but when it
receives one, the resolved address is correct.
Comment thread
coderabbitai[bot] marked this conversation as resolved.
</p>
Comment thread
Y3drk marked this conversation as resolved.
<div className="flex flex-col justify-start items-center gap-5">
<img
alt="Lido DeFi app correctly resolves the name for ENSv2"
src={correctlyResolveEnsv2TestNameAddressProofImageName.src}
className="w-auto h-full max-h-[325px] rounded-xl"
/>
<img
alt="Proof that the resolution flow is the same for address and name inputs"
src={correctlyResolveEnsv2TestNameAddressProofImageAddress.src}
className="w-auto h-full max-h-[325px] rounded-xl"
/>
</div>
</div>
),
} as const satisfies AcceptanceTestBenchmark,
},
} as const satisfies BestPracticeBenchmarks;

defineAppBenchmarks(LidoDeFi, benchmarks);

export default benchmarks;
Loading
Loading