Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 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
28 changes: 28 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,28 @@
// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
// for additional advice on adding and modifying app benchmarks

import ExodusWallet from "data/apps/exodus-wallet";
import { defineAppBenchmarks } from "data/benchmarks/registry";
import type { BestPracticeBenchmarks } from "data/ens-best-practices/types";

import depositAddresses from "./resolution/deposit-addresses";
import ensv2ReadyResolution from "./resolution/ensv2-ready-resolution";

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": ensv2ReadyResolution,
"deposit-addresses": depositAddresses,
};

defineAppBenchmarks(ExodusWallet, benchmarks);

export default benchmarks;
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
// for additional advice on adding and modifying app benchmarks

import { type AcceptanceTestBenchmarks, BenchmarkResults } from "data/benchmarks/types";
import contributors from "data/contributors";
import {
buildEnsNotSupportedNote,
buildNotApplicableForFailedTest,
} from "data/ens-best-practices/resolution/deposit-addresses/notes";

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

import at1Proof from "./at-1.png";

const depositAddresses = {
"at01-resolve-onchain-name": {
result: BenchmarkResults.Fail,
contributions: [
{ from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-24T08:58:52Z") },
],
notes: buildEnsNotSupportedNote({
method: 'the "send" flow',
proof: {
image: at1Proof,
alt: "Exodus Wallet doesn't allow ENS names as the recipient in the send flow",
},
}),
},
"at02-resolve-name-needing-normalization": {
result: BenchmarkResults.NotApplicable,
contributions: [
{ from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-24T08:58:52Z") },
],
notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
},
"at03-resolve-offchain-eth-subname": {
result: BenchmarkResults.NotApplicable,
contributions: [
{ from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-24T08:58:52Z") },
],
notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
},
"at04-resolve-offchain-dns-name": {
result: BenchmarkResults.NotApplicable,
contributions: [
{ from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-24T08:58:52Z") },
],
notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
},
"at05-resolve-name-on-other-evm-chain": {
result: BenchmarkResults.NotApplicable,
contributions: [
{ from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-24T08:58:52Z") },
],
notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
},
"at06-resolve-bitcoin-address": {
result: BenchmarkResults.NotApplicable,
contributions: [
{ from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-24T08:58:52Z") },
],
notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
},
"at07-resolve-solana-address": {
result: BenchmarkResults.NotApplicable,
contributions: [
{ from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-24T08:58:52Z") },
],
notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
},
"at08-handle-invalid-address-format": {
result: BenchmarkResults.NotApplicable,
contributions: [
{ from: contributors.y3drk, lastUpdated: parseTimestamp("2026-06-24T08:58:52Z") },
],
notes: buildNotApplicableForFailedTest({ testNumber: 1 }),
},
} as const satisfies AcceptanceTestBenchmarks;

export default depositAddresses;
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
// 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 } 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 { cn } from "@/utils/tailwindClassConcatenation";

import at1Proof from "./at-1.png";

const ensv2ReadyResolution = {
"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={at1Proof.src}
className="w-auto h-full max-h-[325px] rounded-xl"
/>
</div>
),
} as const satisfies AcceptanceTestBenchmark,
} as const satisfies AcceptanceTestBenchmarks;

export default ensv2ReadyResolution;
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;
28 changes: 28 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,28 @@
// Read https://github.com/namehash/ensawards/blob/main/CONTRIBUTING.md
// for additional advice on adding and modifying app benchmarks

import PendleDeFi from "data/apps/pendle-defi";
import { defineAppBenchmarks } from "data/benchmarks/registry";
import type { BestPracticeBenchmarks } from "data/ens-best-practices/types";

import depositAddresses from "./resolution/deposit-addresses";
import ensv2ReadyResolution from "./resolution/ensv2-ready-resolution";

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": ensv2ReadyResolution,
"deposit-addresses": depositAddresses,
};

defineAppBenchmarks(PendleDeFi, benchmarks);

export default benchmarks;
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.
Loading
Loading