From c73dc2438860035ad4fada3977dbabe0aef3a57a Mon Sep 17 00:00:00 2001 From: Goader Date: Sun, 3 May 2026 02:57:48 +0200 Subject: [PATCH] renamed subregistry id to registry id --- .changeset/spotty-peas-run.md | 6 ++ .../cache/referral-edition-snapshots.cache.ts | 4 +- .../referrer-leaderboard/database.ts | 20 ++---- .../referrer-leaderboard/mocks.ts | 4 +- packages/ens-referrals/README.md | 2 +- .../ens-referrals/src/api/prerequisites.ts | 2 +- .../ens-referrals/src/api/zod-schemas.test.ts | 68 +++++++++---------- packages/ens-referrals/src/api/zod-schemas.ts | 8 +-- .../award-models/pie-split/api/serialize.ts | 2 +- .../src/award-models/pie-split/rules.ts | 4 +- .../rev-share-cap/api/serialize.ts | 2 +- .../src/award-models/rev-share-cap/rules.ts | 4 +- .../award-models/shared/api/zod-schemas.ts | 2 +- .../src/award-models/shared/rules.ts | 6 +- .../src/award-models/shared/status.test.ts | 2 +- packages/ens-referrals/src/client.ts | 2 +- packages/ens-referrals/src/edition.test.ts | 22 +++--- packages/ens-referrals/src/edition.ts | 12 ++-- .../src/leaderboard-page.test.ts | 4 +- 19 files changed, 88 insertions(+), 88 deletions(-) create mode 100644 .changeset/spotty-peas-run.md diff --git a/.changeset/spotty-peas-run.md b/.changeset/spotty-peas-run.md new file mode 100644 index 0000000000..6d26d8cd82 --- /dev/null +++ b/.changeset/spotty-peas-run.md @@ -0,0 +1,6 @@ +--- +"@namehash/ens-referrals": minor +"ensapi": minor +--- + +Rename `BaseReferralProgramRules.subregistryId` to `registryId` everywhere across ENS referrals logic to align with the new ENSv2 terminology. This affects the `ReferralProgramEditionConfig` JSON format consumed via `CUSTOM_REFERRAL_PROGRAM_EDITIONS` and all v1 ENSAnalytics responses that embed referral program rules. diff --git a/apps/ensapi/src/cache/referral-edition-snapshots.cache.ts b/apps/ensapi/src/cache/referral-edition-snapshots.cache.ts index 2761b93f7a..3a79cedcc1 100644 --- a/apps/ensapi/src/cache/referral-edition-snapshots.cache.ts +++ b/apps/ensapi/src/cache/referral-edition-snapshots.cache.ts @@ -102,11 +102,11 @@ function createEditionSnapshotBuilder( const latestIndexedBlockRef = getLatestIndexedBlockRef( indexingStatus, - editionConfig.rules.subregistryId.chainId, + editionConfig.rules.registryId.chainId, ); if (latestIndexedBlockRef === null) { throw new Error( - `Unable to generate edition snapshot for ${editionSlug}. Latest indexed block ref for chain ${editionConfig.rules.subregistryId.chainId} is null.`, + `Unable to generate edition snapshot for ${editionSlug}. Latest indexed block ref for chain ${editionConfig.rules.registryId.chainId} is null.`, ); } diff --git a/apps/ensapi/src/lib/ensanalytics/referrer-leaderboard/database.ts b/apps/ensapi/src/lib/ensanalytics/referrer-leaderboard/database.ts index d0574bee72..a9d6ffc5bd 100644 --- a/apps/ensapi/src/lib/ensanalytics/referrer-leaderboard/database.ts +++ b/apps/ensapi/src/lib/ensanalytics/referrer-leaderboard/database.ts @@ -33,7 +33,7 @@ export const getReferrerMetrics = async ( * Step 1: Filter for referrals matching the provided rules: * - timestamp is between startDate and endDate (inclusive) * - decodedReferrer is not null and not the zero address - * - subregistryId matches the provided subregistryId + * - registrarActions.subregistryId matches rules.registryId * * Step 2: Group by decodedReferrer and calculate: * - Sum total incrementalDuration for each decodedReferrer @@ -68,11 +68,8 @@ export const getReferrerMetrics = async ( isNotNull(ensIndexerSchema.registrarActions.decodedReferrer), // Filter by decodedReferrer not zero address ne(ensIndexerSchema.registrarActions.decodedReferrer, zeroAddress), - // Filter by subregistryId matching the provided subregistryId - eq( - ensIndexerSchema.registrarActions.subregistryId, - stringifyAccountId(rules.subregistryId), - ), + // Filter by registrarActions.subregistryId matching rules.registryId + eq(ensIndexerSchema.registrarActions.subregistryId, stringifyAccountId(rules.registryId)), ), ) .groupBy(ensIndexerSchema.registrarActions.decodedReferrer) @@ -91,7 +88,7 @@ export const getReferrerMetrics = async ( return (records as NonNullRecord[]).map((record) => { return buildReferrerMetrics( - { chainId: rules.subregistryId.chainId, address: record.referrer }, + { chainId: rules.registryId.chainId, address: record.referrer }, record.totalReferrals, deserializeDuration(record.totalIncrementalDuration), priceEth(BigInt(record.totalRevenueContribution)), @@ -160,11 +157,8 @@ export const getReferralEvents = async (rules: ReferralProgramRules): Promise ({ chainId: MOCK_CHAIN_ID, @@ -32,7 +32,7 @@ const pieSplitRules: ReferralProgramRulesPieSplit = { maxQualifiedReferrers: 10, startTime: 1735689600, endTime: 1767225599, - subregistryId: acct("0xd8da6bf26964af9d7eed9e03e53415d37aa96045"), + registryId: acct("0xd8da6bf26964af9d7eed9e03e53415d37aa96045"), rulesUrl: new URL("https://example.com/rules"), areAwardsDistributed: false, }; diff --git a/packages/ens-referrals/README.md b/packages/ens-referrals/README.md index 8a2a3111a8..7369000f70 100644 --- a/packages/ens-referrals/README.md +++ b/packages/ens-referrals/README.md @@ -70,7 +70,7 @@ if (response.responseCode === ReferrerLeaderboardPageResponseCodes.Ok) { console.log(`Unrecognized award model: ${leaderboardPage.originalAwardModel} - skipping`); } else { console.log(`Edition: ${editionSlug}`); - console.log(`Subregistry: ${leaderboardPage.rules.subregistryId}`); + console.log(`Registry: ${leaderboardPage.rules.registryId}`); console.log(`Total Referrers: ${leaderboardPage.pageContext.totalRecords}`); console.log( `Page ${leaderboardPage.pageContext.page} of ${leaderboardPage.pageContext.totalPages}`, diff --git a/packages/ens-referrals/src/api/prerequisites.ts b/packages/ens-referrals/src/api/prerequisites.ts index e71900875e..0490f3502c 100644 --- a/packages/ens-referrals/src/api/prerequisites.ts +++ b/packages/ens-referrals/src/api/prerequisites.ts @@ -15,7 +15,7 @@ import { * the `subgraph_domain` table is populated for the names associated with * each registrar action — read to look up `name` for each row. * - * Each ENSAnalytics edition is scoped to a single `subregistryId`, so any one + * Each ENSAnalytics edition is scoped to a single `registryId`, so any one * edition only joins against rows from its own namespace's `subgraph_domain`. * In theory not all of `subgraph` / `basenames` / `lineanames` are required * for any single edition. In practice we require all three so that no edition diff --git a/packages/ens-referrals/src/api/zod-schemas.test.ts b/packages/ens-referrals/src/api/zod-schemas.test.ts index 7c956f7603..0f56612e38 100644 --- a/packages/ens-referrals/src/api/zod-schemas.test.ts +++ b/packages/ens-referrals/src/api/zod-schemas.test.ts @@ -20,12 +20,12 @@ import { describe("makeReferralProgramEditionConfigSetArraySchema", () => { const schema = makeReferralProgramEditionConfigSetArraySchema(); - const subregistryId = { + const registryId = { chainId: 1, address: "0x57f1887a8bf19b14fc0df6fd9b2acc9af147ea85", }; - // Fixtures share a subregistryId, so their time ranges are chosen to be disjoint + // Fixtures share a registryId, so their time ranges are chosen to be disjoint // (startTime and endTime are inclusive — abutting ranges count as overlapping). const pieSplitEdition = { slug: "2025-12", @@ -36,7 +36,7 @@ describe("makeReferralProgramEditionConfigSetArraySchema", () => { maxQualifiedReferrers: 100, startTime: 1000000, endTime: 1999999, - subregistryId, + registryId, rulesUrl: "https://ensawards.org/rules", areAwardsDistributed: false, }, @@ -53,7 +53,7 @@ describe("makeReferralProgramEditionConfigSetArraySchema", () => { maxBaseRevenueShare: 0.5, startTime: 2000000, endTime: 2500000, - subregistryId, + registryId, rulesUrl: "https://ensawards.org/rules", areAwardsDistributed: false, }, @@ -66,7 +66,7 @@ describe("makeReferralProgramEditionConfigSetArraySchema", () => { awardModel: "future-model", startTime: 2500001, endTime: 3000000, - subregistryId, + registryId, rulesUrl: "https://ensawards.org/rules", areAwardsDistributed: false, someNewField: "extra-data", @@ -143,7 +143,7 @@ describe("makeReferralProgramEditionConfigSetArraySchema", () => { rules: { awardModel: "future-model", // startTime missing, endTime missing - subregistryId, + registryId, rulesUrl: "https://ensawards.org/rules", areAwardsDistributed: false, }, @@ -180,8 +180,8 @@ describe("makeReferralProgramEditionConfigSetArraySchema", () => { expect(() => schema.parse([pieSplitEdition, duplicateUnrecognized])).toThrow(); }); - describe("non-overlapping time invariant (per subregistryId)", () => { - it("accepts editions for the same subregistry with disjoint time ranges", () => { + describe("non-overlapping time invariant (per registryId)", () => { + it("accepts editions for the same registry with disjoint time ranges", () => { const earlier = { ...pieSplitEdition, slug: "2025-12", @@ -197,7 +197,7 @@ describe("makeReferralProgramEditionConfigSetArraySchema", () => { expect(result).toHaveLength(2); }); - it("rejects editions for the same subregistry whose ranges interior-overlap", () => { + it("rejects editions for the same registry whose ranges interior-overlap", () => { const a = { ...pieSplitEdition, slug: "a", @@ -227,7 +227,7 @@ describe("makeReferralProgramEditionConfigSetArraySchema", () => { expect(() => schema.parse([a, b])).toThrow(/overlapping time ranges/i); }); - it("accepts overlapping editions when subregistries differ by chainId", () => { + it("accepts overlapping editions when registries differ by chainId", () => { const a = { ...pieSplitEdition, slug: "a", @@ -235,7 +235,7 @@ describe("makeReferralProgramEditionConfigSetArraySchema", () => { ...pieSplitEdition.rules, startTime: 1000, endTime: 2000, - subregistryId: { ...subregistryId, chainId: 1 }, + registryId: { ...registryId, chainId: 1 }, }, }; const b = { @@ -245,7 +245,7 @@ describe("makeReferralProgramEditionConfigSetArraySchema", () => { ...revShareCapEdition.rules, startTime: 1000, endTime: 2000, - subregistryId: { ...subregistryId, chainId: 8453 }, + registryId: { ...registryId, chainId: 8453 }, }, }; @@ -253,7 +253,7 @@ describe("makeReferralProgramEditionConfigSetArraySchema", () => { expect(result).toHaveLength(2); }); - it("accepts overlapping editions when subregistries differ by address", () => { + it("accepts overlapping editions when registries differ by address", () => { const a = { ...pieSplitEdition, slug: "a", @@ -261,7 +261,7 @@ describe("makeReferralProgramEditionConfigSetArraySchema", () => { ...pieSplitEdition.rules, startTime: 1000, endTime: 2000, - subregistryId: { + registryId: { chainId: 1, address: "0x57f1887a8bf19b14fc0df6fd9b2acc9af147ea85", }, @@ -274,7 +274,7 @@ describe("makeReferralProgramEditionConfigSetArraySchema", () => { ...revShareCapEdition.rules, startTime: 1000, endTime: 2000, - subregistryId: { + registryId: { chainId: 1, address: "0x0635513f179d50a207757e05759cbd106d7dfce8", }, @@ -285,7 +285,7 @@ describe("makeReferralProgramEditionConfigSetArraySchema", () => { expect(result).toHaveLength(2); }); - it("rejects an unrecognized edition that overlaps a recognized edition on the same subregistry", () => { + it("rejects an unrecognized edition that overlaps a recognized edition on the same registry", () => { const recognized = { ...pieSplitEdition, slug: "recognized", @@ -305,7 +305,7 @@ describe("makeReferralProgramEditionConfigSetArraySchema", () => { describe("makeReferrerLeaderboardPageSchema", () => { const schema = makeReferrerLeaderboardPageSchema(); - const subregistryId = { + const registryId = { chainId: 1, address: "0x57f1887a8bf19b14fc0df6fd9b2acc9af147ea85", }; @@ -327,7 +327,7 @@ describe("makeReferrerLeaderboardPageSchema", () => { maxQualifiedReferrers: 100, startTime: 1000000, endTime: 2000000, - subregistryId, + registryId, rulesUrl: "https://ensawards.org/rules", areAwardsDistributed: false, }, @@ -354,7 +354,7 @@ describe("makeReferrerLeaderboardPageSchema", () => { maxBaseRevenueShare: 0.5, startTime: 1000000, endTime: 2000000, - subregistryId, + registryId, rulesUrl: "https://ensawards.org/rules", areAwardsDistributed: false, }, @@ -430,7 +430,7 @@ describe("makeReferrerLeaderboardPageSchema", () => { describe("makeReferralProgramEditionSummarySchema", () => { const schema = makeReferralProgramEditionSummarySchema(); - const subregistryId = { + const registryId = { chainId: 1, address: "0x57f1887a8bf19b14fc0df6fd9b2acc9af147ea85", }; @@ -446,7 +446,7 @@ describe("makeReferralProgramEditionSummarySchema", () => { maxQualifiedReferrers: 100, startTime: 1000000, endTime: 2000000, - subregistryId, + registryId, rulesUrl: "https://ensawards.org/rules", areAwardsDistributed: false, }, @@ -465,7 +465,7 @@ describe("makeReferralProgramEditionSummarySchema", () => { maxBaseRevenueShare: 0.5, startTime: 1000000, endTime: 2000000, - subregistryId, + registryId, rulesUrl: "https://ensawards.org/rules", areAwardsDistributed: false, }, @@ -510,7 +510,7 @@ describe("makeReferralProgramEditionSummarySchema", () => { awardModel: "future-model", startTime: 2000000, endTime: 3000000, - subregistryId, + registryId, rulesUrl: "https://ensawards.org/rules", areAwardsDistributed: false, someNewField: "extra-data", @@ -552,7 +552,7 @@ describe("makeReferralProgramEditionSummarySchema", () => { describe("makeReferralProgramEditionSummariesDataSchema — non-overlapping time invariant", () => { const schema = makeReferralProgramEditionSummariesDataSchema(); - const subregistryId = { + const registryId = { chainId: 1, address: "0x57f1887a8bf19b14fc0df6fd9b2acc9af147ea85", }; @@ -561,7 +561,7 @@ describe("makeReferralProgramEditionSummariesDataSchema — non-overlapping time slug: string, startTime: number, endTime: number, - registry = subregistryId, + registry = registryId, ) => ({ awardModel: ReferralProgramAwardModels.PieSplit, slug, @@ -573,20 +573,20 @@ describe("makeReferralProgramEditionSummariesDataSchema — non-overlapping time maxQualifiedReferrers: 100, startTime, endTime, - subregistryId: registry, + registryId: registry, rulesUrl: "https://ensawards.org/rules", areAwardsDistributed: false, }, }); - it("accepts summaries for the same subregistry with disjoint time ranges", () => { + it("accepts summaries for the same registry with disjoint time ranges", () => { const result = schema.parse({ editions: [makePieSplitSummary("a", 1000, 1999), makePieSplitSummary("b", 2000, 3000)], }); expect(result.editions).toHaveLength(2); }); - it("rejects summaries for the same subregistry whose ranges interior-overlap", () => { + it("rejects summaries for the same registry whose ranges interior-overlap", () => { expect(() => schema.parse({ editions: [makePieSplitSummary("a", 1000, 2500), makePieSplitSummary("b", 2000, 3000)], @@ -602,11 +602,11 @@ describe("makeReferralProgramEditionSummariesDataSchema — non-overlapping time ).toThrow(/overlapping time ranges/i); }); - it("accepts overlapping summaries when subregistries differ", () => { + it("accepts overlapping summaries when registries differ", () => { const result = schema.parse({ editions: [ - makePieSplitSummary("a", 1000, 2000, { ...subregistryId, chainId: 1 }), - makePieSplitSummary("b", 1000, 2000, { ...subregistryId, chainId: 8453 }), + makePieSplitSummary("a", 1000, 2000, { ...registryId, chainId: 1 }), + makePieSplitSummary("b", 1000, 2000, { ...registryId, chainId: 8453 }), ], }); expect(result.editions).toHaveLength(2); @@ -620,7 +620,7 @@ describe("makeReferralProgramEditionSummariesDataSchema — non-overlapping time describe("makeReferrerEditionMetricsSchema", () => { const schema = makeReferrerEditionMetricsSchema(); - const subregistryId = { + const registryId = { chainId: 1, address: "0x57f1887a8bf19b14fc0df6fd9b2acc9af147ea85", }; @@ -631,7 +631,7 @@ describe("makeReferrerEditionMetricsSchema", () => { maxQualifiedReferrers: 100, startTime: 1000000, endTime: 2000000, - subregistryId, + registryId, rulesUrl: "https://ensawards.org/rules", areAwardsDistributed: false, }; @@ -657,7 +657,7 @@ describe("makeReferrerEditionMetricsSchema", () => { maxBaseRevenueShare: 0.5, startTime: 1000000, endTime: 2000000, - subregistryId, + registryId, rulesUrl: "https://ensawards.org/rules", areAwardsDistributed: false, }; diff --git a/packages/ens-referrals/src/api/zod-schemas.ts b/packages/ens-referrals/src/api/zod-schemas.ts index d77b153188..1fc80c7ec5 100644 --- a/packages/ens-referrals/src/api/zod-schemas.ts +++ b/packages/ens-referrals/src/api/zod-schemas.ts @@ -359,7 +359,7 @@ export const makeReferralProgramEditionConfigSetArraySchema = ( slugs.add(edition.slug); } - // For each subregistryId, editions must not overlap in time. startTime and endTime + // For each registryId, editions must not overlap in time. startTime and endTime // are inclusive bounds, so two editions sharing a single instant (A.endTime == B.startTime) // also count as overlapping. Unrecognized editions participate so the "0 or 1 edition per // referral" invariant holds even for forward-compatible models. @@ -370,7 +370,7 @@ export const makeReferralProgramEditionConfigSetArraySchema = ( code: "custom", message: `${valueLabel}: editions "${a.slug}" and "${b.slug}" have overlapping time ranges ` + - `for subregistryId ${a.rules.subregistryId.chainId}:${a.rules.subregistryId.address} ` + + `for registryId ${a.rules.registryId.chainId}:${a.rules.registryId.address} ` + `(startTime and endTime are inclusive)`, }); return []; @@ -437,7 +437,7 @@ export const makeReferralProgramEditionSummarySchema = ( /** * Schema for {@link ReferralProgramEditionSummariesData}. * - * Enforces the per-subregistryId non-overlap invariant across the editions array + * Enforces the per-registryId non-overlap invariant across the editions array * (see {@link findOverlappingEditionPair}). */ export const makeReferralProgramEditionSummariesDataSchema = ( @@ -457,7 +457,7 @@ export const makeReferralProgramEditionSummariesDataSchema = ( path: ["editions"], message: `${valueLabel}: editions "${a.slug}" and "${b.slug}" have overlapping time ranges ` + - `for subregistryId ${a.rules.subregistryId.chainId}:${a.rules.subregistryId.address} ` + + `for registryId ${a.rules.registryId.chainId}:${a.rules.registryId.address} ` + `(startTime and endTime are inclusive)`, }); }); diff --git a/packages/ens-referrals/src/award-models/pie-split/api/serialize.ts b/packages/ens-referrals/src/award-models/pie-split/api/serialize.ts index 505aaa3953..d32839dc26 100644 --- a/packages/ens-referrals/src/award-models/pie-split/api/serialize.ts +++ b/packages/ens-referrals/src/award-models/pie-split/api/serialize.ts @@ -35,7 +35,7 @@ export function serializeReferralProgramRulesPieSplit( maxQualifiedReferrers: rules.maxQualifiedReferrers, startTime: rules.startTime, endTime: rules.endTime, - subregistryId: rules.subregistryId, + registryId: rules.registryId, rulesUrl: rules.rulesUrl.toString(), areAwardsDistributed: rules.areAwardsDistributed, }; diff --git a/packages/ens-referrals/src/award-models/pie-split/rules.ts b/packages/ens-referrals/src/award-models/pie-split/rules.ts index edd37b8b7e..9c4c97360d 100644 --- a/packages/ens-referrals/src/award-models/pie-split/rules.ts +++ b/packages/ens-referrals/src/award-models/pie-split/rules.ts @@ -47,7 +47,7 @@ export const buildReferralProgramRulesPieSplit = ( maxQualifiedReferrers: number, startTime: UnixTimestamp, endTime: UnixTimestamp, - subregistryId: AccountId, + registryId: AccountId, rulesUrl: URL, areAwardsDistributed: boolean, ): ReferralProgramRulesPieSplit => { @@ -57,7 +57,7 @@ export const buildReferralProgramRulesPieSplit = ( maxQualifiedReferrers, startTime, endTime, - subregistryId, + registryId, rulesUrl, areAwardsDistributed, } satisfies ReferralProgramRulesPieSplit; diff --git a/packages/ens-referrals/src/award-models/rev-share-cap/api/serialize.ts b/packages/ens-referrals/src/award-models/rev-share-cap/api/serialize.ts index b25d40d604..175943f8dd 100644 --- a/packages/ens-referrals/src/award-models/rev-share-cap/api/serialize.ts +++ b/packages/ens-referrals/src/award-models/rev-share-cap/api/serialize.ts @@ -40,7 +40,7 @@ export function serializeReferralProgramRulesRevShareCap( maxBaseRevenueShare: rules.maxBaseRevenueShare, startTime: rules.startTime, endTime: rules.endTime, - subregistryId: rules.subregistryId, + registryId: rules.registryId, rulesUrl: rules.rulesUrl.toString(), areAwardsDistributed: rules.areAwardsDistributed, adminActions: rules.adminActions, diff --git a/packages/ens-referrals/src/award-models/rev-share-cap/rules.ts b/packages/ens-referrals/src/award-models/rev-share-cap/rules.ts index c906c2a2e1..28838261aa 100644 --- a/packages/ens-referrals/src/award-models/rev-share-cap/rules.ts +++ b/packages/ens-referrals/src/award-models/rev-share-cap/rules.ts @@ -172,7 +172,7 @@ export const buildReferralProgramRulesRevShareCap = ( maxBaseRevenueShare: number, startTime: UnixTimestamp, endTime: UnixTimestamp, - subregistryId: AccountId, + registryId: AccountId, rulesUrl: URL, areAwardsDistributed: boolean, adminActions: AdminAction[] = [], @@ -185,7 +185,7 @@ export const buildReferralProgramRulesRevShareCap = ( maxBaseRevenueShare, startTime, endTime, - subregistryId, + registryId, rulesUrl, areAwardsDistributed, adminActions, diff --git a/packages/ens-referrals/src/award-models/shared/api/zod-schemas.ts b/packages/ens-referrals/src/award-models/shared/api/zod-schemas.ts index d0586f8d79..61cdec8430 100644 --- a/packages/ens-referrals/src/award-models/shared/api/zod-schemas.ts +++ b/packages/ens-referrals/src/award-models/shared/api/zod-schemas.ts @@ -52,7 +52,7 @@ export const makeBaseReferralProgramRulesSchema = (valueLabel: string) => awardModel: z.string(), startTime: makeUnixTimestampSchema(`${valueLabel}.startTime`), endTime: makeUnixTimestampSchema(`${valueLabel}.endTime`), - subregistryId: makeAccountIdSchema(`${valueLabel}.subregistryId`), + registryId: makeAccountIdSchema(`${valueLabel}.registryId`), rulesUrl: makeUrlSchema(`${valueLabel}.rulesUrl`), areAwardsDistributed: z.boolean(), }) diff --git a/packages/ens-referrals/src/award-models/shared/rules.ts b/packages/ens-referrals/src/award-models/shared/rules.ts index d4e02607c1..d6173dd1c0 100644 --- a/packages/ens-referrals/src/award-models/shared/rules.ts +++ b/packages/ens-referrals/src/award-models/shared/rules.ts @@ -47,9 +47,9 @@ export interface BaseReferralProgramRules { endTime: UnixTimestamp; /** - * The account ID of the subregistry for the referral program. + * The account ID of the registry for the referral program. */ - subregistryId: AccountId; + registryId: AccountId; /** * URL to the full rules document for these rules. @@ -89,7 +89,7 @@ export interface ReferralProgramRulesUnrecognized extends BaseReferralProgramRul } export const validateBaseReferralProgramRules = (rules: BaseReferralProgramRules): void => { - makeAccountIdSchema("BaseReferralProgramRules.subregistryId").parse(rules.subregistryId); + makeAccountIdSchema("BaseReferralProgramRules.registryId").parse(rules.registryId); validateUnixTimestamp(rules.startTime); validateUnixTimestamp(rules.endTime); diff --git a/packages/ens-referrals/src/award-models/shared/status.test.ts b/packages/ens-referrals/src/award-models/shared/status.test.ts index fe2d2d7c5a..c034f901cd 100644 --- a/packages/ens-referrals/src/award-models/shared/status.test.ts +++ b/packages/ens-referrals/src/award-models/shared/status.test.ts @@ -11,7 +11,7 @@ const baseRules = { awardModel: ReferralProgramAwardModels.PieSplit, startTime: 1000, endTime: 2000, - subregistryId: { chainId: 1, address: "0x0000000000000000000000000000000000000000" as const }, + registryId: { chainId: 1, address: "0x0000000000000000000000000000000000000000" as const }, rulesUrl: new URL("https://example.com/rules"), }; diff --git a/packages/ens-referrals/src/client.ts b/packages/ens-referrals/src/client.ts index 9886be31c5..b379d37fc3 100644 --- a/packages/ens-referrals/src/client.ts +++ b/packages/ens-referrals/src/client.ts @@ -156,7 +156,7 @@ export class ENSReferralsClient { * } else { * const { aggregatedMetrics, referrers, rules } = response.data; * console.log(`Edition: ${editionSlug}`); - * console.log(`Subregistry: ${rules.subregistryId}`); + * console.log(`Registry: ${rules.registryId}`); * console.log(`Total Referrers: ${pageContext.totalRecords}`); * console.log(`Page ${pageContext.page} of ${pageContext.totalPages}`); * } diff --git a/packages/ens-referrals/src/edition.test.ts b/packages/ens-referrals/src/edition.test.ts index 47ff7bdce4..09a827f163 100644 --- a/packages/ens-referrals/src/edition.test.ts +++ b/packages/ens-referrals/src/edition.test.ts @@ -9,7 +9,7 @@ import { type ReferralProgramEditionConfig, } from "./edition"; -const subregistry = { +const registry = { chainId: 1, address: "0x57f1887a8bf19b14fc0df6fd9b2acc9af147ea85" as const, }; @@ -18,7 +18,7 @@ const makePieSplitEdition = ( slug: string, startTime: number, endTime: number, - subregistryId = subregistry, + registryId = registry, ): ReferralProgramEditionConfig => ({ slug, displayName: slug, @@ -28,14 +28,14 @@ const makePieSplitEdition = ( maxQualifiedReferrers: 100, startTime, endTime, - subregistryId, + registryId, rulesUrl: new URL("https://ensawards.org/rules"), areAwardsDistributed: false, }, }); describe("findOverlappingEditionPair", () => { - it("returns null when editions are disjoint for the same subregistry", () => { + it("returns null when editions are disjoint for the same registry", () => { const a = makePieSplitEdition("a", 1000, 1999); const b = makePieSplitEdition("b", 2000, 3000); @@ -59,9 +59,9 @@ describe("findOverlappingEditionPair", () => { expect(findOverlappingEditionPair([a, b])).not.toBeNull(); }); - it("returns null when time ranges overlap but subregistries differ", () => { - const a = makePieSplitEdition("a", 1000, 2000, { ...subregistry, chainId: 1 }); - const b = makePieSplitEdition("b", 1000, 2000, { ...subregistry, chainId: 8453 }); + it("returns null when time ranges overlap but registries differ", () => { + const a = makePieSplitEdition("a", 1000, 2000, { ...registry, chainId: 1 }); + const b = makePieSplitEdition("b", 1000, 2000, { ...registry, chainId: 8453 }); expect(findOverlappingEditionPair([a, b])).toBeNull(); }); @@ -83,16 +83,16 @@ describe("buildReferralProgramEditionConfigSet — overlap invariant", () => { expect(() => buildReferralProgramEditionConfigSet([a, b])).toThrow(/overlapping time ranges/i); }); - it("throws when two editions share a subregistry and have touching edges", () => { + it("throws when two editions share a registry and have touching edges", () => { const a = makePieSplitEdition("a", 1000, 2000); const b = makePieSplitEdition("b", 2000, 3000); expect(() => buildReferralProgramEditionConfigSet([a, b])).toThrow(/overlapping time ranges/i); }); - it("builds a set when overlapping editions target different subregistries", () => { - const a = makePieSplitEdition("a", 1000, 2000, { ...subregistry, chainId: 1 }); - const b = makePieSplitEdition("b", 1000, 2000, { ...subregistry, chainId: 8453 }); + it("builds a set when overlapping editions target different registries", () => { + const a = makePieSplitEdition("a", 1000, 2000, { ...registry, chainId: 1 }); + const b = makePieSplitEdition("b", 1000, 2000, { ...registry, chainId: 8453 }); const set = buildReferralProgramEditionConfigSet([a, b]); expect(set.size).toBe(2); diff --git a/packages/ens-referrals/src/edition.ts b/packages/ens-referrals/src/edition.ts index d1e6a49fed..6fb7e4d449 100644 --- a/packages/ens-referrals/src/edition.ts +++ b/packages/ens-referrals/src/edition.ts @@ -75,7 +75,7 @@ export type ReferralProgramEditionConfigSet = Map< * @param configSet - The edition config set to validate * @throws {Error} If any entry violates the invariant that each map key equals the * corresponding config's slug - * @throws {Error} If any pair of editions sharing a `subregistryId` overlap in time + * @throws {Error} If any pair of editions sharing a `registryId` overlap in time * (`startTime` and `endTime` are inclusive — touching edges count as overlap) */ export function validateReferralProgramEditionConfigSet( @@ -95,15 +95,15 @@ export function validateReferralProgramEditionConfigSet( const [a, b] = overlap; throw new Error( `Edition config set invariant violation: editions "${a.slug}" and "${b.slug}" ` + - `have overlapping time ranges for subregistryId ` + - `${a.rules.subregistryId.chainId}:${a.rules.subregistryId.address} ` + + `have overlapping time ranges for registryId ` + + `${a.rules.registryId.chainId}:${a.rules.registryId.address} ` + `(startTime and endTime are inclusive)`, ); } } /** - * Returns the first pair of editions sharing a `subregistryId` whose time ranges overlap, + * Returns the first pair of editions sharing a `registryId` whose time ranges overlap, * or `null` if none do. * * `startTime` and `endTime` are inclusive, so ranges sharing a single instant @@ -117,7 +117,7 @@ export function findOverlappingEditionPair(); for (const edition of editions) { - const key = `${edition.rules.subregistryId.chainId}:${edition.rules.subregistryId.address}`; + const key = `${edition.rules.registryId.chainId}:${edition.rules.registryId.address}`; const group = byRegistry.get(key); if (group) { group.push(edition); @@ -126,7 +126,7 @@ export function findOverlappingEditionPair { maxQualifiedReferrers: 10, startTime: 1764547200, endTime: 1767225599, - subregistryId: acct("0x57f1887a8bf19b14fc0df6fd9b2acc9af147ea85"), + registryId: acct("0x57f1887a8bf19b14fc0df6fd9b2acc9af147ea85"), rulesUrl: new URL("https://example.com/rules"), areAwardsDistributed: false, }, @@ -125,7 +125,7 @@ describe("buildReferrerLeaderboardPageContext", () => { maxQualifiedReferrers: 10, startTime: 1764547200, endTime: 1767225599, - subregistryId: acct("0x57f1887a8bf19b14fc0df6fd9b2acc9af147ea85"), + registryId: acct("0x57f1887a8bf19b14fc0df6fd9b2acc9af147ea85"), rulesUrl: new URL("https://example.com/rules"), areAwardsDistributed: false, },