diff --git a/ensawards.org/astro.config.mjs b/ensawards.org/astro.config.mjs
index e9d4b7ca..4514d95c 100644
--- a/ensawards.org/astro.config.mjs
+++ b/ensawards.org/astro.config.mjs
@@ -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(),
diff --git a/ensawards.org/data/apps/1inch-defi/benchmarks/correctly-resolve-ensv2-test-name-address-proof-portfolio.gif b/ensawards.org/data/apps/1inch-defi/benchmarks/correctly-resolve-ensv2-test-name-address-proof-portfolio.gif
new file mode 100644
index 00000000..a1b9eeee
Binary files /dev/null and b/ensawards.org/data/apps/1inch-defi/benchmarks/correctly-resolve-ensv2-test-name-address-proof-portfolio.gif differ
diff --git a/ensawards.org/data/apps/1inch-defi/benchmarks/correctly-resolve-ensv2-test-name-address-proof-send.png b/ensawards.org/data/apps/1inch-defi/benchmarks/correctly-resolve-ensv2-test-name-address-proof-send.png
new file mode 100644
index 00000000..47e5cf8f
Binary files /dev/null and b/ensawards.org/data/apps/1inch-defi/benchmarks/correctly-resolve-ensv2-test-name-address-proof-send.png differ
diff --git a/ensawards.org/data/apps/1inch-defi/benchmarks/index.tsx b/ensawards.org/data/apps/1inch-defi/benchmarks/index.tsx
new file mode 100644
index 00000000..f4cdf5c0
--- /dev/null
+++ b/ensawards.org/data/apps/1inch-defi/benchmarks/index.tsx
@@ -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: (
+
+
+ ENSv2 ready resolution was tested for two different flows of the app: "send"
+ and "portfolio". In both cases the resolved address is NOT correct.
+
+
+
+
+
+
+ ),
+ } as const satisfies AcceptanceTestBenchmark,
+ },
+} as const satisfies BestPracticeBenchmarks;
+
+defineAppBenchmarks(OneInchDeFi, benchmarks);
+
+export default benchmarks;
diff --git a/ensawards.org/data/apps/1inch-defi/icon.tsx b/ensawards.org/data/apps/1inch-defi/icon.tsx
new file mode 100644
index 00000000..4959f734
--- /dev/null
+++ b/ensawards.org/data/apps/1inch-defi/icon.tsx
@@ -0,0 +1,21 @@
+import React from "react";
+
+const Icon = ({ className, ...props }: React.SVGProps) => (
+
+);
+
+export default Icon;
diff --git a/ensawards.org/data/apps/1inch-defi/index.ts b/ensawards.org/data/apps/1inch-defi/index.ts
new file mode 100644
index 00000000..0d46c142
--- /dev/null
+++ b/ensawards.org/data/apps/1inch-defi/index.ts
@@ -0,0 +1,30 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying apps
+
+import 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"',
+ description:
+ "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;
diff --git a/ensawards.org/data/apps/aave-defi/benchmarks/correctly-resolve-ensv2-test-name-address-proof-v3.gif b/ensawards.org/data/apps/aave-defi/benchmarks/correctly-resolve-ensv2-test-name-address-proof-v3.gif
new file mode 100644
index 00000000..ae90fbd0
Binary files /dev/null and b/ensawards.org/data/apps/aave-defi/benchmarks/correctly-resolve-ensv2-test-name-address-proof-v3.gif differ
diff --git a/ensawards.org/data/apps/aave-defi/benchmarks/correctly-resolve-ensv2-test-name-address-proof-v4.png b/ensawards.org/data/apps/aave-defi/benchmarks/correctly-resolve-ensv2-test-name-address-proof-v4.png
new file mode 100644
index 00000000..971914fa
Binary files /dev/null and b/ensawards.org/data/apps/aave-defi/benchmarks/correctly-resolve-ensv2-test-name-address-proof-v4.png differ
diff --git a/ensawards.org/data/apps/aave-defi/benchmarks/index.tsx b/ensawards.org/data/apps/aave-defi/benchmarks/index.tsx
new file mode 100644
index 00000000..aad7f05e
--- /dev/null
+++ b/ensawards.org/data/apps/aave-defi/benchmarks/index.tsx
@@ -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: (
+
+
+ ENSv2 ready resolution was tested for two versions of the app:{" "}
+
+ Aave (v3)
+ {" "}
+ and{" "}
+
+ Aave Pro (v4)
+ {" "}
+ using the "watch" tool for both of them. The resolved address is correct for
+ the v4 version, but INCORRECT for the v3 variant.
+
+
+
+
+
+
+ ),
+ } as const satisfies AcceptanceTestBenchmark,
+ },
+} as const satisfies BestPracticeBenchmarks;
+
+defineAppBenchmarks(AaveDeFi, benchmarks);
+
+export default benchmarks;
diff --git a/ensawards.org/data/apps/aave-defi/icon.tsx b/ensawards.org/data/apps/aave-defi/icon.tsx
new file mode 100644
index 00000000..5c5873d2
--- /dev/null
+++ b/ensawards.org/data/apps/aave-defi/icon.tsx
@@ -0,0 +1,33 @@
+import React from "react";
+
+import { cn } from "@/utils/tailwindClassConcatenation";
+
+const Icon = ({ className, ...props }: React.SVGProps) => (
+
+);
+
+export default Icon;
diff --git a/ensawards.org/data/apps/aave-defi/index.ts b/ensawards.org/data/apps/aave-defi/index.ts
new file mode 100644
index 00000000..31408d0f
--- /dev/null
+++ b/ensawards.org/data/apps/aave-defi/index.ts
@@ -0,0 +1,30 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying apps
+
+import 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"),
+ twitter: new URL("https://x.com/aave"),
+ ens: asInterpretedName("aave.eth"),
+ },
+ icon: AaveIcon,
+ // TODO: Add OG images
+};
+
+defineApp(AaveDeFi);
+
+export default AaveDeFi;
diff --git a/ensawards.org/data/apps/lido-defi/benchmarks/correctly-resolve-ensv2-test-name-address-proof-address.png b/ensawards.org/data/apps/lido-defi/benchmarks/correctly-resolve-ensv2-test-name-address-proof-address.png
new file mode 100644
index 00000000..0458d3bf
Binary files /dev/null and b/ensawards.org/data/apps/lido-defi/benchmarks/correctly-resolve-ensv2-test-name-address-proof-address.png differ
diff --git a/ensawards.org/data/apps/lido-defi/benchmarks/correctly-resolve-ensv2-test-name-address-proof.png b/ensawards.org/data/apps/lido-defi/benchmarks/correctly-resolve-ensv2-test-name-address-proof.png
new file mode 100644
index 00000000..db5ed579
Binary files /dev/null and b/ensawards.org/data/apps/lido-defi/benchmarks/correctly-resolve-ensv2-test-name-address-proof.png differ
diff --git a/ensawards.org/data/apps/lido-defi/benchmarks/index.tsx b/ensawards.org/data/apps/lido-defi/benchmarks/index.tsx
new file mode 100644
index 00000000..0de5a9fd
--- /dev/null
+++ b/ensawards.org/data/apps/lido-defi/benchmarks/index.tsx
@@ -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: (
+
+
+ ENSv2 ready resolution was tested using the "rewards" 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.
+
+
+
+
+
+
+ ),
+ } as const satisfies AcceptanceTestBenchmark,
+ },
+} as const satisfies BestPracticeBenchmarks;
+
+defineAppBenchmarks(LidoDeFi, benchmarks);
+
+export default benchmarks;
diff --git a/ensawards.org/data/apps/lido-defi/icon.tsx b/ensawards.org/data/apps/lido-defi/icon.tsx
new file mode 100644
index 00000000..994bcec0
--- /dev/null
+++ b/ensawards.org/data/apps/lido-defi/icon.tsx
@@ -0,0 +1,257 @@
+import React from "react";
+
+import { cn } from "@/utils/tailwindClassConcatenation";
+
+const Icon = ({ className, ...props }: React.SVGProps) => {
+ const reactId = React.useId();
+ const id = (name: string) => `${reactId}-${name}`;
+ const url = (name: string) => `url(#${id(name)})`;
+
+ return (
+
+ );
+};
+
+export default Icon;
diff --git a/ensawards.org/data/apps/lido-defi/index.ts b/ensawards.org/data/apps/lido-defi/index.ts
new file mode 100644
index 00000000..63c6d2f7
--- /dev/null
+++ b/ensawards.org/data/apps/lido-defi/index.ts
@@ -0,0 +1,28 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying apps
+
+import LidoProject from "data/projects/lido/index.ts";
+
+import { defineApp } from "../registry.ts";
+import { type App, AppTypes } from "../types.ts";
+import LidoIcon from "./icon.tsx";
+
+const LidoDeFi: App = {
+ id: "lido-defi",
+ appSlug: "lido-defi",
+ type: AppTypes.DeFi,
+ project: LidoProject,
+ name: "Lido",
+ description:
+ "A DeFi app that lets users mint transferable utility tokens which earn rewards from Ethereum validation activity and remain usable as collateral, liquidity, or yield-bearing capital across other onchain protocols.",
+ socials: {
+ website: new URL("https://lido.fi/"),
+ twitter: new URL("https://x.com/lidofinance"),
+ },
+ icon: LidoIcon,
+ // TODO: Add OG images
+};
+
+defineApp(LidoDeFi);
+
+export default LidoDeFi;
diff --git a/ensawards.org/data/apps/types.ts b/ensawards.org/data/apps/types.ts
index 6d05410a..8e7cd445 100644
--- a/ensawards.org/data/apps/types.ts
+++ b/ensawards.org/data/apps/types.ts
@@ -10,6 +10,7 @@ import type { Project } from "../projects/types.ts";
export const AppTypes = {
Wallet: "wallet",
Explorer: "explorer",
+ DeFi: "defi-app",
} as const;
/**
diff --git a/ensawards.org/data/apps/uniswap-defi/benchmarks/correctly-resolve-ensv2-test-name-address-proof.png b/ensawards.org/data/apps/uniswap-defi/benchmarks/correctly-resolve-ensv2-test-name-address-proof.png
new file mode 100644
index 00000000..7290f693
Binary files /dev/null and b/ensawards.org/data/apps/uniswap-defi/benchmarks/correctly-resolve-ensv2-test-name-address-proof.png differ
diff --git a/ensawards.org/data/apps/uniswap-defi/benchmarks/index.tsx b/ensawards.org/data/apps/uniswap-defi/benchmarks/index.tsx
new file mode 100644
index 00000000..fa6684af
--- /dev/null
+++ b/ensawards.org/data/apps/uniswap-defi/benchmarks/index.tsx
@@ -0,0 +1,54 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying app benchmarks
+
+import type { AcceptanceTestBenchmark } from "data/acceptance-tests/types";
+import UniswapDeFi from "data/apps/uniswap-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 correctlyResolveEnsv2TestNameAddressProofImage from "./correctly-resolve-ensv2-test-name-address-proof.png";
+
+const benchmarks: BestPracticeBenchmarks = {
+ // TODO: `Contract Naming` category is temporarily hidden due to unfit content,
+ // and so are all benchmarks belonging to it.
+ // We aim to fix it as soon as we have the capacity.
+ // See: https://github.com/namehash/ensawards/issues/222
+ "display-named-smart-contracts-mainnet": {
+ "mainnet-interactions-display-named-smart-contracts": undefined,
+ },
+ "display-named-smart-contracts-l2-chains": {
+ "l2-chain-interactions-display-named-smart-contracts": undefined,
+ },
+ "ensv2-ready-resolution": {
+ "correctly-resolve-ensv2-test-name-address": {
+ result: BenchmarkResults.Pass,
+ contributions: [
+ { from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-09T11:00:21Z") },
+ ],
+ notes: (
+
+
+ ENSv2 ready resolution was tested using the "search" tool. The resolved
+ address is correct.
+
+
+
+ ),
+ } as const satisfies AcceptanceTestBenchmark,
+ },
+} as const satisfies BestPracticeBenchmarks;
+
+defineAppBenchmarks(UniswapDeFi, benchmarks);
+
+export default benchmarks;
diff --git a/ensawards.org/data/apps/uniswap-defi/icon.tsx b/ensawards.org/data/apps/uniswap-defi/icon.tsx
new file mode 100644
index 00000000..2db804fd
--- /dev/null
+++ b/ensawards.org/data/apps/uniswap-defi/icon.tsx
@@ -0,0 +1,55 @@
+import React from "react";
+
+const Icon = (props: React.SVGProps) => (
+
+);
+
+export default Icon;
diff --git a/ensawards.org/data/apps/uniswap-defi/index.ts b/ensawards.org/data/apps/uniswap-defi/index.ts
new file mode 100644
index 00000000..20f8a38a
--- /dev/null
+++ b/ensawards.org/data/apps/uniswap-defi/index.ts
@@ -0,0 +1,30 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying apps
+
+import UniswapProject from "data/projects/uniswap/index.ts";
+import { asInterpretedName } from "enssdk";
+
+import { defineApp } from "../registry.ts";
+import { type App, AppTypes } from "../types.ts";
+import UniswapIcon from "./icon.tsx";
+
+const UniswapDeFi: App = {
+ id: "uniswap-defi",
+ appSlug: "uniswap-defi",
+ type: AppTypes.DeFi,
+ project: UniswapProject,
+ name: "Uniswap",
+ description:
+ "A decentralized exchange app for swapping tokens and providing liquidity through automated market makers across Ethereum and 12+ other chains.",
+ socials: {
+ website: new URL("https://app.uniswap.org"),
+ twitter: new URL("https://x.com/Uniswap"),
+ ens: asInterpretedName("uniswap.eth"),
+ },
+ icon: UniswapIcon,
+ // TODO: Add OG images
+};
+
+defineApp(UniswapDeFi);
+
+export default UniswapDeFi;
diff --git a/ensawards.org/data/apps/utils.test.ts b/ensawards.org/data/apps/utils.test.ts
index 8304819b..c13ad2a9 100644
--- a/ensawards.org/data/apps/utils.test.ts
+++ b/ensawards.org/data/apps/utils.test.ts
@@ -95,6 +95,8 @@ describe("App utils", () => {
describe("validateAppType", () => {
it("Should return the app type for a valid AppType value", () => {
expect(asAppType("wallet")).toEqual(AppTypes.Wallet);
+ expect(asAppType("explorer")).toEqual(AppTypes.Explorer);
+ expect(asAppType("defi-app")).toEqual(AppTypes.DeFi);
});
it("Should throw an error for an invalid AppType value", () => {
@@ -213,7 +215,7 @@ describe("App utils", () => {
describe("appliesToAllApps", () => {
it("Should return true when all app types are included in targets", () => {
- expect(appliesToAllApps([AppTypes.Wallet, AppTypes.Explorer])).toEqual(true);
+ expect(appliesToAllApps([AppTypes.Wallet, AppTypes.Explorer, AppTypes.DeFi])).toEqual(true);
});
it("Should return false when not all app types are included in targets", () => {
diff --git a/ensawards.org/data/apps/utils.ts b/ensawards.org/data/apps/utils.ts
index 72ff4622..36c2ab8e 100644
--- a/ensawards.org/data/apps/utils.ts
+++ b/ensawards.org/data/apps/utils.ts
@@ -27,6 +27,8 @@ export const asAppType = (maybeAppType: string): AppType => {
return AppTypes.Wallet;
case "explorer":
return AppTypes.Explorer;
+ case "defi-app":
+ return AppTypes.DeFi;
default:
throw new Error(`Invalid AppType value: ${maybeAppType}`);
}
@@ -126,12 +128,17 @@ export const formatAppType = (
formattedType = plural ? "Explorers" : "Explorer";
break;
+ case AppTypes.DeFi:
+ formattedType = plural ? "DeFi apps" : "DeFi app";
+ break;
+
default:
const _exhaustive: never = appType;
throw new Error(`Unsupported AppType: ${_exhaustive}`);
}
- if (lowercase) {
+ // Keep "DeFi" capitalized even when `lowercase` option is true
+ if (lowercase && appType !== AppTypes.DeFi) {
formattedType = formattedType.toLowerCase();
}
diff --git a/ensawards.org/data/ens-best-practices/contract-naming/display-named-smart-contracts-l2-chains/index.ts b/ensawards.org/data/ens-best-practices/contract-naming/display-named-smart-contracts-l2-chains/index.ts
index fa2f8df4..34fa09ab 100644
--- a/ensawards.org/data/ens-best-practices/contract-naming/display-named-smart-contracts-l2-chains/index.ts
+++ b/ensawards.org/data/ens-best-practices/contract-naming/display-named-smart-contracts-l2-chains/index.ts
@@ -19,7 +19,7 @@ const displayNamedSmartContractsL2: BestPracticeApp = {
description:
"Display ENS names instead of addresses when users interact with named smart contracts on L2 chains.",
category: ContractNamingCategory,
- appliesTo: [AppTypes.Wallet, AppTypes.Explorer],
+ appliesTo: [AppTypes.Wallet, AppTypes.Explorer, AppTypes.DeFi],
technicalDetails: technicalDetails,
contributions: [
{ from: contributors.lightwalker, lastUpdated: parseTimestamp("2025-11-03T11:25:00.000Z") },
diff --git a/ensawards.org/data/ens-best-practices/contract-naming/display-named-smart-contracts-mainnet/index.ts b/ensawards.org/data/ens-best-practices/contract-naming/display-named-smart-contracts-mainnet/index.ts
index 9b918bef..97d0ad44 100644
--- a/ensawards.org/data/ens-best-practices/contract-naming/display-named-smart-contracts-mainnet/index.ts
+++ b/ensawards.org/data/ens-best-practices/contract-naming/display-named-smart-contracts-mainnet/index.ts
@@ -19,7 +19,7 @@ const displayNamedSmartContractsMainnet: BestPracticeApp = {
description:
"Display ENS names instead of addresses when users interact with named smart contracts on Ethereum mainnet.",
category: ContractNamingCategory,
- appliesTo: [AppTypes.Wallet, AppTypes.Explorer],
+ appliesTo: [AppTypes.Wallet, AppTypes.Explorer, AppTypes.DeFi],
technicalDetails: technicalDetails,
contributions: [
{ from: contributors.lightwalker, lastUpdated: parseTimestamp("2025-11-03T11:25:00.000Z") },
diff --git a/ensawards.org/data/ens-best-practices/ensv2-readiness/ensv2-ready-resolution/index.ts b/ensawards.org/data/ens-best-practices/ensv2-readiness/ensv2-ready-resolution/index.ts
index 08b18795..f89294d3 100644
--- a/ensawards.org/data/ens-best-practices/ensv2-readiness/ensv2-ready-resolution/index.ts
+++ b/ensawards.org/data/ens-best-practices/ensv2-readiness/ensv2-ready-resolution/index.ts
@@ -18,7 +18,7 @@ const ensv2ReadyResolution: BestPracticeApp = {
name: "Correctly Resolve All Names For ENSv2",
description: "Make sure your app keeps resolving ENS names correctly once ENSv2 launches.",
category: ENSv2ReadinessCategory,
- appliesTo: [AppTypes.Wallet, AppTypes.Explorer],
+ appliesTo: [AppTypes.Wallet, AppTypes.Explorer, AppTypes.DeFi],
technicalDetails: technicalDetails,
contributions: [
{ from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-05T13:01:00.000Z") },
diff --git a/ensawards.org/data/ens-best-practices/utils.ts b/ensawards.org/data/ens-best-practices/utils.ts
index c41712bd..55ed4b8c 100644
--- a/ensawards.org/data/ens-best-practices/utils.ts
+++ b/ensawards.org/data/ens-best-practices/utils.ts
@@ -151,6 +151,10 @@ export const formatBestPracticeTarget = (
formattedTarget = plural ? "Wallets" : "Wallet";
break;
+ case AppTypes.DeFi:
+ formattedTarget = plural ? "DeFi apps" : "DeFi app";
+ break;
+
case ProtocolTypes.DAO:
formattedTarget = plural ? "DAOs" : "DAO";
break;
diff --git a/ensawards.org/data/projects/1inch/icon.tsx b/ensawards.org/data/projects/1inch/icon.tsx
new file mode 100644
index 00000000..4959f734
--- /dev/null
+++ b/ensawards.org/data/projects/1inch/icon.tsx
@@ -0,0 +1,21 @@
+import React from "react";
+
+const Icon = ({ className, ...props }: React.SVGProps) => (
+
+);
+
+export default Icon;
diff --git a/ensawards.org/data/projects/1inch/index.ts b/ensawards.org/data/projects/1inch/index.ts
new file mode 100644
index 00000000..5ddaef39
--- /dev/null
+++ b/ensawards.org/data/projects/1inch/index.ts
@@ -0,0 +1,23 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying projects
+
+import { defineProject } from "../registry.ts";
+import type { Project } from "../types.ts";
+import { ProjectIds } from "../types.ts";
+import OneInchIcon from "./icon.tsx";
+
+const OneInchProject: Project = {
+ id: ProjectIds.OneInch,
+ name: "1inch",
+ description:
+ "A DeFi ecosystem integrating 13+ chains with the only native connection between Solana and EVM networks, helping users trade, hold, and track digital assets with true self-custody.",
+ icon: OneInchIcon,
+ socials: {
+ website: new URL("https://1inch.com/"),
+ twitter: new URL("https://x.com/1inch"),
+ },
+};
+
+defineProject(OneInchProject);
+
+export default OneInchProject;
diff --git a/ensawards.org/data/projects/lido/icon.tsx b/ensawards.org/data/projects/lido/icon.tsx
new file mode 100644
index 00000000..994bcec0
--- /dev/null
+++ b/ensawards.org/data/projects/lido/icon.tsx
@@ -0,0 +1,257 @@
+import React from "react";
+
+import { cn } from "@/utils/tailwindClassConcatenation";
+
+const Icon = ({ className, ...props }: React.SVGProps) => {
+ const reactId = React.useId();
+ const id = (name: string) => `${reactId}-${name}`;
+ const url = (name: string) => `url(#${id(name)})`;
+
+ return (
+
+ );
+};
+
+export default Icon;
diff --git a/ensawards.org/data/projects/lido/index.ts b/ensawards.org/data/projects/lido/index.ts
new file mode 100644
index 00000000..16dd360f
--- /dev/null
+++ b/ensawards.org/data/projects/lido/index.ts
@@ -0,0 +1,23 @@
+// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
+// for additional advice on adding and modifying projects
+
+import { defineProject } from "data/projects/registry";
+import { type Project, ProjectIds } from "data/projects/types";
+
+import LidoIcon from "./icon.tsx";
+
+const LidoProject: Project = {
+ id: ProjectIds.Lido,
+ name: "Lido",
+ description:
+ "A family of open-source software on Ethereum that lets users mint transferable utility tokens which earn rewards linked to validation activity while remaining usable across other onchain apps.",
+ icon: LidoIcon,
+ socials: {
+ website: new URL("https://lido.fi/"),
+ twitter: new URL("https://x.com/lidofinance"),
+ },
+};
+
+defineProject(LidoProject);
+
+export default LidoProject;
diff --git a/ensawards.org/data/projects/types.ts b/ensawards.org/data/projects/types.ts
index d39d0f2e..8f5842fb 100644
--- a/ensawards.org/data/projects/types.ts
+++ b/ensawards.org/data/projects/types.ts
@@ -28,6 +28,8 @@ export const ProjectIds = {
World: "project-world",
Trust: "project-trust",
Phantom: "project-phantom",
+ OneInch: "project-1inch",
+ Lido: "project-lido",
} as const;
/**
diff --git a/ensawards.org/data/protocols/types.ts b/ensawards.org/data/protocols/types.ts
index 7ffe034b..af124f47 100644
--- a/ensawards.org/data/protocols/types.ts
+++ b/ensawards.org/data/protocols/types.ts
@@ -49,7 +49,7 @@ export type ProtocolId = (typeof ProtocolIds)[keyof typeof ProtocolIds];
export const ProtocolTypes = {
DAO: "dao",
- DeFi: "defi",
+ DeFi: "defi-protocol",
} as const;
export type ProtocolType = (typeof ProtocolTypes)[keyof typeof ProtocolTypes];
diff --git a/ensawards.org/data/protocols/utils.ts b/ensawards.org/data/protocols/utils.ts
index 25d43514..84edb291 100644
--- a/ensawards.org/data/protocols/utils.ts
+++ b/ensawards.org/data/protocols/utils.ts
@@ -84,7 +84,7 @@ export const asProtocolType = (maybeProtocolType: string): ProtocolType => {
case "dao":
return ProtocolTypes.DAO;
- case "defi":
+ case "defi-protocol":
return ProtocolTypes.DeFi;
default:
@@ -135,7 +135,7 @@ export const formatProtocolType = (
switch (protocolType) {
case ProtocolTypes.DeFi:
- return lowercase ? "defi" : "DeFi";
+ return lowercase ? "defi protocol" : "DeFi protocol";
case ProtocolTypes.DAO:
return lowercase ? "dao" : "DAO";
diff --git a/ensawards.org/public/defi_leaderboard_og_image.png b/ensawards.org/public/defi-protocol_leaderboard_og_image.png
similarity index 100%
rename from ensawards.org/public/defi_leaderboard_og_image.png
rename to ensawards.org/public/defi-protocol_leaderboard_og_image.png
diff --git a/ensawards.org/public/defi_leaderboard_twitter_og_image.png b/ensawards.org/public/defi-protocol_leaderboard_twitter_og_image.png
similarity index 100%
rename from ensawards.org/public/defi_leaderboard_twitter_og_image.png
rename to ensawards.org/public/defi-protocol_leaderboard_twitter_og_image.png
diff --git a/ensawards.org/src/components/contract-naming-season/ContractNamingHero.astro b/ensawards.org/src/components/contract-naming-season/ContractNamingHero.astro
index 4c0e763a..a3a85d98 100644
--- a/ensawards.org/src/components/contract-naming-season/ContractNamingHero.astro
+++ b/ensawards.org/src/components/contract-naming-season/ContractNamingHero.astro
@@ -67,7 +67,7 @@ import { shadcnButtonVariants } from "../ui/shadcnButtonStyles";
)}>DAO leaderboard
+ viewDetailsText={`${formatProtocolType(protocolType)} report`}>
{idx < 3 ? (
+ viewDetailsText={`${formatProtocolType(protocolType)} report`}>
+ viewDetailsText={`${formatProtocolType(protocolType, { lowercase: false })} report`}>
{idx < 3 ? (