Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 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/data/apps/coinbase-exchange/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
// for additional advice on adding and modifying apps

import CoinbaseProject from "data/projects/coinbase";
import { asInterpretedName } from "enssdk";

import { defineApp } from "../registry.ts";
import { type App, AppTypes } from "../types.ts";
Expand All @@ -18,6 +19,7 @@ const CoinbaseExchange: App = {
socials: {
website: new URL("https://www.coinbase.com"),
twitter: new URL("https://x.com/coinbase"),
ens: asInterpretedName("coinbase.eth"),
},
Comment thread
Y3drk marked this conversation as resolved.
icon: CoinbaseIcon,
ogImagePath: "coinbase-exchange/og.png",
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
60 changes: 60 additions & 0 deletions ensawards.org/data/apps/exodus-wallet/benchmarks/index.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
// 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 ExodusWallet from "data/apps/exodus-wallet";
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 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.NotApplicable,
contributions: [
{ from: contributors.caldonia, lastUpdated: parseTimestamp("2026-06-17T03:14:00Z") },
],
notes: (
<div className={cn(acceptanceTestDetailsContainerStyles, "w-full")}>
<p className="w-full">
ENSv2 ready resolution was tested using the &quot;send&quot; flow. The wallet doesn't
support the use of ENS names at all as the recipient identifier.
<br />
<br />
While that's a key issue that this app is encouraged to improve, this best practice is
applicable specifically to apps that already have an existing ENS integration and making
sure existing integrations are ENSv2 compatible. Therefore, for this best practice we
apply a rating of not applicable.
</p>
<img
alt="Exodus doesn't allow ENS name as recipient in the send flow"
src={correctlyResolveEnsv2TestNameAddressProofImage.src}
className="w-auto h-full max-h-[325px] rounded-xl"
/>
</div>
),
} as const satisfies AcceptanceTestBenchmark,
},
};

defineAppBenchmarks(ExodusWallet, benchmarks);

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

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

const Icon = ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {
const reactId = React.useId();
const id = (name: string) => `${reactId}-${name}`;
const url = (name: string) => `url(#${id(name)})`;

return (
<svg
width="300"
height="300"
viewBox="0 0 300 300"
fill="none"
xmlns="http://www.w3.org/2000/svg"
className={cn("p-1", className)}
{...props}
>
<path
d="M298.203 83.7645L170.449 0V46.8332L252.405 100.089L242.763 130.598H170.449V169.402H242.763L252.405 199.911L170.449 253.167V300L298.203 216.503L277.313 150.134L298.203 83.7645Z"
fill={url("paint0_linear")}
/>
<path
d="M59.3007 169.402H131.346V130.598H59.0329L49.6589 100.089L131.346 46.8332V0L3.59253 83.7645L24.4831 150.134L3.59253 216.503L131.614 300V253.167L49.6589 199.911L59.3007 169.402Z"
fill={url("paint1_linear")}
/>
<mask id={id("mask0")} maskUnits="userSpaceOnUse" x="3" y="0" width="296" height="300">
<path
d="M298.204 83.7645L170.45 0V46.8332L252.405 100.089L242.763 130.598H170.45V169.402H242.763L252.405 199.911L170.45 253.167V300L298.204 216.503L277.313 150.134L298.204 83.7645Z"
fill={url("paint2_linear")}
/>
<path
d="M59.301 169.402H131.347V130.598H59.0332L49.6592 100.089L131.347 46.8332V0L3.59277 83.7645L24.4834 150.134L3.59277 216.503L131.615 300V253.167L49.6592 199.911L59.301 169.402Z"
fill={url("paint3_linear")}
/>
</mask>
<g mask={url("mask0")}>
<rect x="3.75024" width="292.5" height="300" fill={url("paint4_linear")} />
</g>
<defs>
<linearGradient
id={id("paint0_linear")}
x1="256.875"
y1="320.625"
x2="171.3"
y2="-32.9459"
gradientUnits="userSpaceOnUse"
>
<stop stop-color="#0B46F9" />
<stop offset="1" stop-color="#BBFBE0" />
</linearGradient>
<linearGradient
id={id("paint1_linear")}
x1="256.875"
y1="320.625"
x2="171.3"
y2="-32.9459"
gradientUnits="userSpaceOnUse"
>
<stop stop-color="#0B46F9" />
<stop offset="1" stop-color="#BBFBE0" />
</linearGradient>
Comment thread
Y3drk marked this conversation as resolved.
Outdated
<linearGradient
id={id("paint2_linear")}
x1="256.875"
y1="320.625"
x2="171.3"
y2="-32.9459"
gradientUnits="userSpaceOnUse"
>
<stop stop-color="#0B46F9" />
<stop offset="1" stop-color="#BBFBE0" />
</linearGradient>
<linearGradient
id={id("paint3_linear")}
x1="256.875"
y1="320.625"
x2="171.3"
y2="-32.9459"
gradientUnits="userSpaceOnUse"
>
<stop stop-color="#0B46F9" />
<stop offset="1" stop-color="#BBFBE0" />
</linearGradient>
Comment thread
Y3drk marked this conversation as resolved.
Outdated
<linearGradient
id={id("paint4_linear")}
x1="22.5002"
y1="67.5"
x2="170.625"
y2="178.125"
gradientUnits="userSpaceOnUse"
>
<stop offset="0.119792" stop-color="#8952FF" stop-opacity="0.87" />
<stop offset="1" stop-color="#DABDFF" stop-opacity="0" />
Comment thread
Y3drk marked this conversation as resolved.
Outdated
</linearGradient>
</defs>
</svg>
);
};

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

import ExodusProject from "data/projects/exodus/index.ts";

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

const ExodusWallet: App = {
id: "exodus-wallet",
appSlug: "exodus-wallet",
type: AppTypes.Wallet,
project: ExodusProject,
name: "Exodus",
description:
"A self-custodial crypto wallet for desktop, mobile, and web3 to send, manage, swap, and stake digital assets, with hardware wallet support and a debit card for spending worldwide.",
socials: {
website: new URL("https://www.exodus.com/"),
twitter: new URL("https://x.com/exodus"),
},
icon: ExodusWalletIcon,
// TODO: Add OG images
};
Comment thread
Y3drk marked this conversation as resolved.

defineApp(ExodusWallet);

export default ExodusWallet;
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.
99 changes: 99 additions & 0 deletions ensawards.org/data/apps/pendle-defi/benchmarks/index.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
// 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 BinanceExchange from "data/apps/binance-exchange";
Comment thread
github-code-quality[bot] marked this conversation as resolved.
Fixed
import PendleDeFi from "data/apps/pendle-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 correctlyResolveEnsv2TestNameAddressProofImageBoros from "./correctly-resolve-ensv2-test-name-address-proof-boros.gif";
import correctlyResolveEnsv2TestNameAddressProofImageV2App from "./correctly-resolve-ensv2-test-name-address-proof-v2.gif";

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.NotApplicable,
contributions: [
{ from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-18T13:40:40Z") },
],
notes: (
<div className={cn(acceptanceTestDetailsContainerStyles, "w-full")}>
<p className="w-full">
ENSv2 ready resolution was tested using the search tool in the &quot;send&quot; flow of
the Pendle's{" "}
<a
className={bestPracticeTechnicalDetailsLinkStyles}
target="_blank"
rel="noopener noreferrer"
href="https://boros.pendle.finance/"
>
Boros
</a>{" "}
app. The app doesn't support the use of ENS names at all as the recipient identifier.
<br />
<br />
While that's a key issue that this app is encouraged to improve, this best practice is
applicable specifically to apps that already have an existing ENS integration and making
sure existing integrations are ENSv2 compatible. Therefore, for this best practice we
apply a rating of not applicable.
</p>
<img
alt="Pendle Boros DeFi app doesn't allow ENS name as recipient in the send flow"
src={correctlyResolveEnsv2TestNameAddressProofImageBoros.src}
className="w-auto h-full max-h-[325px] rounded-xl"
/>
<span className="w-full h-px bg-gray-200 my-5" />
<p className="w-full">
The ENSv2 ready resolution was also tested using the &quot;dashboard&quot; tool of the
Pendle's{" "}
<a
className={bestPracticeTechnicalDetailsLinkStyles}
target="_blank"
rel="noopener noreferrer"
href="https://app.pendle.finance/"
>
V2
</a>{" "}
app. The app doesn't support the use of ENS names at all as the user identifier.
<br />
<br />
While that's a key issue that this app is encouraged to improve, this best practice is
applicable specifically to apps that already have an existing ENS integration and making
sure existing integrations are ENSv2 compatible. Therefore, for this best practice we
apply a rating of not applicable.
</p>
<img
alt="Pendle V2 DeFi app doesn't allow ENS name as user in the dashboard tool"
src={correctlyResolveEnsv2TestNameAddressProofImageV2App.src}
className="w-auto h-full max-h-[325px] rounded-xl"
/>
</div>
),
} as const satisfies AcceptanceTestBenchmark,
},
};

defineAppBenchmarks(PendleDeFi, benchmarks);

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

const Icon = (props: React.SVGProps<SVGSVGElement>) => (
<svg
width="60"
height="61"
viewBox="0 0 60 61"
fill="none"
xmlns="http://www.w3.org/2000/svg"
{...props}
>
<circle cx="30.0002" cy="26.2983" r="16.8095" fill="#DEDEDE" />
<circle cx="22.4379" cy="42.2636" r="9.24751" fill="#1E4480" />
<path
d="M23.4827 33.0757C28.0978 33.5947 31.6856 37.5094 31.6858 42.2632C31.6858 42.5204 31.6712 42.7749 31.6506 43.0269C31.1076 43.0798 30.5571 43.1079 30.0002 43.1079C24.1645 43.1079 19.0239 40.1335 16.01 35.6187C17.4451 34.2306 19.3277 33.3018 21.4211 33.0728V11.8403C22.0806 11.4482 22.769 11.0998 23.4827 10.7993V33.0757Z"
fill="#152E51"
/>
</svg>
);

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

import PendleProject from "data/projects/pendle/index.ts";

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

const PendleDeFi: App = {
id: "pendle-defi",
appSlug: "pendle-defi",
type: AppTypes.DeFi,
project: PendleProject,
name: "Pendle",
description:
"A crypto yield trading app spanning two products: Boros, for margin trading yield with leverage, and Pendle V2, for trading spot yield and earning fixed yield.",
socials: {
website: new URL("https://www.pendle.finance/"),
twitter: new URL("https://x.com/pendle_fi"),
},
icon: PendleIcon,
// TODO: Add OG images
};
Comment thread
Y3drk marked this conversation as resolved.

defineApp(PendleDeFi);

export default PendleDeFi;
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading