Skip to content

Conversation

@stevieraykatz
Copy link
Member

@stevieraykatz stevieraykatz commented Oct 6, 2025

What changed? Why?

We had launch premium auction logic in the repo when we launched basenames. Expired names enter a similar dutch auction but the auction params are different. Specifically; the launch auction is 21 days long starting from the moment the name expires. As such the logic we initially had needed to be reworked to fetch the expiry time and then generate ui elements related to the auction given the live expiration auction params.

Screenshare.-.2025-10-24.3_47_40.PM.mp4

Notes to reviewers

How has it been tested?

Have you tested the following pages?

BaseWeb

  • [] base.org
  • [] base.org/names
  • [] base.org/builders
  • [] base.org/ecosystem
  • [] base.org/name/jesse
  • [] base.org/manage-names
  • [] base.org/resources

@cb-heimdall
Copy link
Collaborator

cb-heimdall commented Oct 6, 2025

✅ Heimdall Review Status

Requirement Status More Info
Reviews 1/1
Denominator calculation
Show calculation
1 if user is bot 0
1 if user is external 0
2 if repo is sensitive 0
From .codeflow.yml 1
Additional review requirements
Show calculation
Max 0
0
From CODEOWNERS 0
Global minimum 0
Max 1
1
1 if commit is unverified 0
Sum 1

@vercel
Copy link

vercel bot commented Oct 6, 2025

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Preview Comments Updated (UTC)
base-web Ready Ready Preview Comment Oct 27, 2025 4:33pm

@stevieraykatz stevieraykatz changed the title Reuse launch auction logic to function for premium price auctions feat(BA-2964): Premium auction UI/UX for expired names in auction Oct 6, 2025
@linear
Copy link

linear bot commented Oct 6, 2025

@stevieraykatz stevieraykatz marked this pull request as ready for review October 24, 2025 22:50

export function useBasenamesNameExpires(name: string) {
// Convert name to full basename format
const fullBasename = name.includes('.') ? (name as Basename) : formatBaseEthDomain(name, 8453); // Base mainnet
Copy link
Collaborator

Choose a reason for hiding this comment

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

[nit] Prefer using base from viem

Suggested change
const fullBasename = name.includes('.') ? (name as Basename) : formatBaseEthDomain(name, 8453); // Base mainnet
import { base } from 'viem/chains';
const fullBasename = name.includes('.') ? (name as Basename) : formatBaseEthDomain(name, base.id);

Also should we be supporting testnet here as well? usually we'd do:

const { basenameChain } = useBasenameChain();
const fullBasename = name.includes('.') ? (name as Basename) : formatBaseEthDomain(name, basenameChain.id);

Copy link
Member Author

Choose a reason for hiding this comment

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

Actually good catch. We shouldn't assume base mainnet and can use the useBasenameChain hook to fetch the chain id properly.

Comment on lines 26 to 29
// Add 90 days (grace period) to get the auction start time
const auctionStartTime = nameExpiresTimestamp
? nameExpiresTimestamp + BigInt(GRACE_PERIOD_DURATION_SECONDS)
: undefined;
Copy link
Collaborator

Choose a reason for hiding this comment

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

Is it safe to return undefined here? should we throw instead?

Copy link
Member Author

Choose a reason for hiding this comment

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

Throwing is a good idea. It's handled properly in the functional portion of usePremiumEndDurationRemaining but could look weird in the modal text in PremiumExplainerModal.

Comment on lines +99 to +100
To ensure fair distribution of recently expired Basenames, all names have a price premium
which starts at 100 ETH that then decays exponentially to 0 over 21 days.
Copy link
Collaborator

Choose a reason for hiding this comment

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

Does it decay to 0 or is there a base/min price?

Copy link
Member Author

Choose a reason for hiding this comment

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

Good q, the premium component decays to 0 but the base price is always applied. Let me take another pass at copy.

Copy link
Member Author

Choose a reason for hiding this comment

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

On second read, the context is specific to price premium so I think it's clear AND the modal shows the price breakdown between the premium and the base price. I think leaving this as-is is fine.

JFrankfurt
JFrankfurt previously approved these changes Oct 27, 2025
Copy link
Contributor

@JFrankfurt JFrankfurt left a comment

Choose a reason for hiding this comment

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

Arjun's comments all seem good and worth consideration. I have no further input. lgtm otherwise

@cb-heimdall cb-heimdall dismissed JFrankfurt’s stale review October 27, 2025 16:29

Approved review 3384180620 from JFrankfurt is now dismissed due to new commit. Re-request for approval.

Copy link
Collaborator

@arjun-dureja arjun-dureja left a comment

Choose a reason for hiding this comment

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

LGTM!

@stevieraykatz stevieraykatz merged commit 1e1cb3f into master Oct 27, 2025
11 checks passed
@stevieraykatz stevieraykatz deleted the premium-price-ui branch October 27, 2025 17:24
arjun-dureja added a commit that referenced this pull request Nov 6, 2025
arjun-dureja added a commit that referenced this pull request Nov 6, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants